]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/shared/vlan-util.c
resolved: rework parsing of /etc/hosts
[thirdparty/systemd.git] / src / shared / vlan-util.c
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
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
0d6c68eb
TJ
25int config_parse_default_port_vlanid(
26 const char *unit,
27 const char *filename,
28 unsigned line,
29 const char *section,
30 unsigned section_line,
31 const char *lvalue,
32 int ltype,
33 const char *rvalue,
34 void *data,
35 void *userdata) {
36 uint16_t *id = data;
37
38 assert(lvalue);
39 assert(rvalue);
40 assert(data);
41
42 if (streq(rvalue, "none")) {
43 *id = 0;
44 return 0;
45 }
46
47 return config_parse_vlanid(unit, filename, line, section, section_line,
48 lvalue, ltype, rvalue, data, userdata);
49}
50
267fabd2
LP
51int config_parse_vlanid(
52 const char *unit,
53 const char *filename,
54 unsigned line,
55 const char *section,
56 unsigned section_line,
57 const char *lvalue,
58 int ltype,
59 const char *rvalue,
60 void *data,
61 void *userdata) {
62
63 uint16_t *id = data;
64 int r;
65
66 assert(filename);
67 assert(lvalue);
68 assert(rvalue);
69 assert(data);
70
71 r = parse_vlanid(rvalue, id);
72 if (r == -ERANGE) {
73 log_syntax(unit, LOG_ERR, filename, line, r, "VLAN identifier outside of valid range 0…4094, ignoring: %s", rvalue);
74 return 0;
75 }
76 if (r < 0) {
77 log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse VLAN identifier value, ignoring: %s", rvalue);
78 return 0;
79 }
80
81 return 0;
82}