]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/shared/vlan-util.c
Merge pull request #8575 from keszybz/non-absolute-paths
[thirdparty/systemd.git] / src / shared / vlan-util.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
2 /***
3 This file is part of systemd.
4
5 Copyright 2016 Lennart Poettering
6 ***/
7
8 #include "conf-parser.h"
9 #include "parse-util.h"
10 #include "string-util.h"
11 #include "vlan-util.h"
12
13 int parse_vlanid(const char *p, uint16_t *ret) {
14 uint16_t id;
15 int r;
16
17 r = safe_atou16(p, &id);
18 if (r < 0)
19 return r;
20 if (!vlanid_is_valid(id))
21 return -ERANGE;
22
23 *ret = id;
24 return 0;
25 }
26
27 int config_parse_default_port_vlanid(
28 const char *unit,
29 const char *filename,
30 unsigned line,
31 const char *section,
32 unsigned section_line,
33 const char *lvalue,
34 int ltype,
35 const char *rvalue,
36 void *data,
37 void *userdata) {
38 uint16_t *id = data;
39
40 assert(lvalue);
41 assert(rvalue);
42 assert(data);
43
44 if (streq(rvalue, "none")) {
45 *id = 0;
46 return 0;
47 }
48
49 return config_parse_vlanid(unit, filename, line, section, section_line,
50 lvalue, ltype, rvalue, data, userdata);
51 }
52
53 int config_parse_vlanid(
54 const char *unit,
55 const char *filename,
56 unsigned line,
57 const char *section,
58 unsigned section_line,
59 const char *lvalue,
60 int ltype,
61 const char *rvalue,
62 void *data,
63 void *userdata) {
64
65 uint16_t *id = data;
66 int r;
67
68 assert(filename);
69 assert(lvalue);
70 assert(rvalue);
71 assert(data);
72
73 r = parse_vlanid(rvalue, id);
74 if (r == -ERANGE) {
75 log_syntax(unit, LOG_ERR, filename, line, r, "VLAN identifier outside of valid range 0…4094, ignoring: %s", rvalue);
76 return 0;
77 }
78 if (r < 0) {
79 log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse VLAN identifier value, ignoring: %s", rvalue);
80 return 0;
81 }
82
83 return 0;
84 }