]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/shared/vlan-util.c
mkosi: update arch commit reference
[thirdparty/systemd.git] / src / shared / vlan-util.c
CommitLineData
db9ecf05 1/* SPDX-License-Identifier: LGPL-2.1-or-later */
267fabd2 2
267fabd2 3#include "conf-parser.h"
0d6c68eb
TJ
4#include "parse-util.h"
5#include "string-util.h"
6#include "vlan-util.h"
267fabd2
LP
7
8int parse_vlanid(const char *p, uint16_t *ret) {
9 uint16_t id;
10 int r;
11
383bb2bc
YW
12 assert(p);
13 assert(ret);
14
267fabd2
LP
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
fb721f08
YW
25int 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
0d6c68eb
TJ
41int 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) {
99534007 52 uint16_t *id = ASSERT_PTR(data);
0d6c68eb
TJ
53
54 assert(lvalue);
55 assert(rvalue);
0d6c68eb
TJ
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
267fabd2
LP
66int 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
99534007 78 uint16_t *id = ASSERT_PTR(data);
267fabd2
LP
79 int r;
80
81 assert(filename);
82 assert(lvalue);
83 assert(rvalue);
267fabd2
LP
84
85 r = parse_vlanid(rvalue, id);
86 if (r == -ERANGE) {
8add8b50
YW
87 log_syntax(unit, LOG_WARNING, filename, line, r,
88 "VLAN identifier outside of valid range 0…4094, ignoring: %s", rvalue);
267fabd2
LP
89 return 0;
90 }
91 if (r < 0) {
8add8b50
YW
92 log_syntax(unit, LOG_WARNING, filename, line, r,
93 "Failed to parse VLAN identifier value, ignoring: %s", rvalue);
267fabd2
LP
94 return 0;
95 }
96
97 return 0;
98}