]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/shared/vlan-util.c
machined: return recognizable error when we try to register the same machine name...
[thirdparty/systemd.git] / src / shared / vlan-util.c
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2
3 #include "conf-parser.h"
4 #include "parse-util.h"
5 #include "string-util.h"
6 #include "vlan-util.h"
7
8 int parse_vlanid(const char *p, uint16_t *ret) {
9 uint16_t id;
10 int r;
11
12 assert(p);
13 assert(ret);
14
15 r = safe_atou16(p, &id);
16 if (r < 0)
17 return r;
18 if (!vlanid_is_valid(id))
19 return -ERANGE;
20
21 *ret = id;
22 return 0;
23 }
24
25 int parse_vid_range(const char *p, uint16_t *vid, uint16_t *vid_end) {
26 unsigned lower, upper;
27 int r;
28
29 r = parse_range(p, &lower, &upper);
30 if (r < 0)
31 return r;
32
33 if (lower > VLANID_MAX || upper > VLANID_MAX || lower > upper)
34 return -EINVAL;
35
36 *vid = lower;
37 *vid_end = upper;
38 return 0;
39 }
40
41 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 uint16_t *id = ASSERT_PTR(data);
53
54 assert(lvalue);
55 assert(rvalue);
56
57 if (streq(rvalue, "none")) {
58 *id = 0;
59 return 0;
60 }
61
62 return config_parse_vlanid(unit, filename, line, section, section_line,
63 lvalue, ltype, rvalue, data, userdata);
64 }
65
66 int config_parse_vlanid(
67 const char *unit,
68 const char *filename,
69 unsigned line,
70 const char *section,
71 unsigned section_line,
72 const char *lvalue,
73 int ltype,
74 const char *rvalue,
75 void *data,
76 void *userdata) {
77
78 uint16_t *id = ASSERT_PTR(data);
79 int r;
80
81 assert(filename);
82 assert(lvalue);
83 assert(rvalue);
84
85 r = parse_vlanid(rvalue, id);
86 if (r == -ERANGE) {
87 log_syntax(unit, LOG_WARNING, filename, line, r,
88 "VLAN identifier outside of valid range 0…4094, ignoring: %s", rvalue);
89 return 0;
90 }
91 if (r < 0) {
92 log_syntax(unit, LOG_WARNING, filename, line, r,
93 "Failed to parse VLAN identifier value, ignoring: %s", rvalue);
94 return 0;
95 }
96
97 return 0;
98 }