Branch data Line data Source code
1 : : /* SPDX-License-Identifier: LGPL-2.1+ */
2 : :
3 : : #include "conf-parser.h"
4 : : #include "parse-util.h"
5 : : #include "string-util.h"
6 : : #include "vlan-util.h"
7 : :
8 : 0 : int parse_vlanid(const char *p, uint16_t *ret) {
9 : : uint16_t id;
10 : : int r;
11 : :
12 [ # # ]: 0 : assert(p);
13 [ # # ]: 0 : assert(ret);
14 : :
15 : 0 : r = safe_atou16(p, &id);
16 [ # # ]: 0 : if (r < 0)
17 : 0 : return r;
18 [ # # ]: 0 : if (!vlanid_is_valid(id))
19 : 0 : return -ERANGE;
20 : :
21 : 0 : *ret = id;
22 : 0 : return 0;
23 : : }
24 : :
25 : 0 : int parse_vid_range(const char *p, uint16_t *vid, uint16_t *vid_end) {
26 : : unsigned lower, upper;
27 : : int r;
28 : :
29 : 0 : r = parse_range(p, &lower, &upper);
30 [ # # ]: 0 : if (r < 0)
31 : 0 : return r;
32 : :
33 [ # # # # : 0 : if (lower > VLANID_MAX || upper > VLANID_MAX || lower > upper)
# # ]
34 : 0 : return -EINVAL;
35 : :
36 : 0 : *vid = lower;
37 : 0 : *vid_end = upper;
38 : 0 : return 0;
39 : : }
40 : :
41 : 0 : int config_parse_default_port_vlanid(
42 : : const char *unit,
43 : : const char *filename,
44 : : unsigned line,
45 : : const char *section,
46 : : unsigned section_line,
47 : : const char *lvalue,
48 : : int ltype,
49 : : const char *rvalue,
50 : : void *data,
51 : : void *userdata) {
52 : 0 : uint16_t *id = data;
53 : :
54 [ # # ]: 0 : assert(lvalue);
55 [ # # ]: 0 : assert(rvalue);
56 [ # # ]: 0 : assert(data);
57 : :
58 [ # # ]: 0 : if (streq(rvalue, "none")) {
59 : 0 : *id = 0;
60 : 0 : return 0;
61 : : }
62 : :
63 : 0 : return config_parse_vlanid(unit, filename, line, section, section_line,
64 : : lvalue, ltype, rvalue, data, userdata);
65 : : }
66 : :
67 : 0 : int config_parse_vlanid(
68 : : const char *unit,
69 : : const char *filename,
70 : : unsigned line,
71 : : const char *section,
72 : : unsigned section_line,
73 : : const char *lvalue,
74 : : int ltype,
75 : : const char *rvalue,
76 : : void *data,
77 : : void *userdata) {
78 : :
79 : 0 : uint16_t *id = data;
80 : : int r;
81 : :
82 [ # # ]: 0 : assert(filename);
83 [ # # ]: 0 : assert(lvalue);
84 [ # # ]: 0 : assert(rvalue);
85 [ # # ]: 0 : assert(data);
86 : :
87 : 0 : r = parse_vlanid(rvalue, id);
88 [ # # ]: 0 : if (r == -ERANGE) {
89 [ # # ]: 0 : log_syntax(unit, LOG_ERR, filename, line, r, "VLAN identifier outside of valid range 0…4094, ignoring: %s", rvalue);
90 : 0 : return 0;
91 : : }
92 [ # # ]: 0 : if (r < 0) {
93 [ # # ]: 0 : log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse VLAN identifier value, ignoring: %s", rvalue);
94 : 0 : return 0;
95 : : }
96 : :
97 : 0 : return 0;
98 : : }
|