| File: | build-scan/../src/network/networkd-brvlan.c |
| Warning: | line 56, column 9 Value stored to 'i' is never read |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
| 1 | /* SPDX-License-Identifier: LGPL-2.1+ */ |
| 2 | /*** |
| 3 | Copyright © 2016 BISDN GmbH. All rights reserved. |
| 4 | ***/ |
| 5 | |
| 6 | #include <netinet/in.h> |
| 7 | #include <linux1/if_bridge.h> |
| 8 | #include <stdbool.h> |
| 9 | |
| 10 | #include "alloc-util.h" |
| 11 | #include "conf-parser.h" |
| 12 | #include "netlink-util.h" |
| 13 | #include "networkd-brvlan.h" |
| 14 | #include "networkd-link.h" |
| 15 | #include "networkd-manager.h" |
| 16 | #include "networkd-network.h" |
| 17 | #include "parse-util.h" |
| 18 | #include "vlan-util.h" |
| 19 | |
| 20 | static bool_Bool is_bit_set(unsigned bit, uint32_t scope) { |
| 21 | assert(bit < sizeof(scope)*8)do { if ((__builtin_expect(!!(!(bit < sizeof(scope)*8)),0) )) log_assert_failed_realm(LOG_REALM_SYSTEMD, ("bit < sizeof(scope)*8" ), "../src/network/networkd-brvlan.c", 21, __PRETTY_FUNCTION__ ); } while (0); |
| 22 | return scope & (1 << bit); |
| 23 | } |
| 24 | |
| 25 | static inline void set_bit(unsigned nr, uint32_t *addr) { |
| 26 | if (nr < BRIDGE_VLAN_BITMAP_MAX4096) |
| 27 | addr[nr / 32] |= (((uint32_t) 1) << (nr % 32)); |
| 28 | } |
| 29 | |
| 30 | static int find_next_bit(int i, uint32_t x) { |
| 31 | int j; |
| 32 | |
| 33 | if (i >= 32) |
| 34 | return -1; |
| 35 | |
| 36 | /* find first bit */ |
| 37 | if (i < 0) |
| 38 | return BUILTIN_FFS_U32(x)__builtin_ffs(x);; |
| 39 | |
| 40 | /* mask off prior finds to get next */ |
| 41 | j = __builtin_ffs(x >> i); |
| 42 | return j ? j + i : 0; |
| 43 | } |
| 44 | |
| 45 | static int append_vlan_info_data(Link *const link, sd_netlink_message *req, uint16_t pvid, const uint32_t *br_vid_bitmap, const uint32_t *br_untagged_bitmap) { |
| 46 | struct bridge_vlan_info br_vlan; |
| 47 | int i, j, k, r, done, cnt; |
| 48 | uint16_t begin, end; |
| 49 | bool_Bool untagged = false0; |
| 50 | |
| 51 | assert(link)do { if ((__builtin_expect(!!(!(link)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("link"), "../src/network/networkd-brvlan.c" , 51, __PRETTY_FUNCTION__); } while (0); |
| 52 | assert(req)do { if ((__builtin_expect(!!(!(req)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("req"), "../src/network/networkd-brvlan.c" , 52, __PRETTY_FUNCTION__); } while (0); |
| 53 | assert(br_vid_bitmap)do { if ((__builtin_expect(!!(!(br_vid_bitmap)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("br_vid_bitmap"), "../src/network/networkd-brvlan.c" , 53, __PRETTY_FUNCTION__); } while (0); |
| 54 | assert(br_untagged_bitmap)do { if ((__builtin_expect(!!(!(br_untagged_bitmap)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("br_untagged_bitmap"), "../src/network/networkd-brvlan.c" , 54, __PRETTY_FUNCTION__); } while (0); |
| 55 | |
| 56 | i = cnt = -1; |
Value stored to 'i' is never read | |
| 57 | |
| 58 | begin = end = UINT16_MAX(65535); |
| 59 | for (k = 0; k < BRIDGE_VLAN_BITMAP_LEN(4096 / 32); k++) { |
| 60 | unsigned base_bit; |
| 61 | uint32_t vid_map = br_vid_bitmap[k]; |
| 62 | uint32_t untagged_map = br_untagged_bitmap[k]; |
| 63 | |
| 64 | base_bit = k * 32; |
| 65 | i = -1; |
| 66 | done = 0; |
| 67 | do { |
| 68 | j = find_next_bit(i, vid_map); |
| 69 | if (j > 0) { |
| 70 | /* first hit of any bit */ |
| 71 | if (begin == UINT16_MAX(65535) && end == UINT16_MAX(65535)) { |
| 72 | begin = end = j - 1 + base_bit; |
| 73 | untagged = is_bit_set(j - 1, untagged_map); |
| 74 | goto next; |
| 75 | } |
| 76 | |
| 77 | /* this bit is a continuation of prior bits */ |
| 78 | if (j - 2 + base_bit == end && untagged == is_bit_set(j - 1, untagged_map) && (uint16_t)j - 1 + base_bit != pvid && (uint16_t)begin != pvid) { |
| 79 | end++; |
| 80 | goto next; |
| 81 | } |
| 82 | } else |
| 83 | done = 1; |
| 84 | |
| 85 | if (begin != UINT16_MAX(65535)) { |
| 86 | cnt++; |
| 87 | if (done && k < BRIDGE_VLAN_BITMAP_LEN(4096 / 32) - 1) |
| 88 | break; |
| 89 | |
| 90 | br_vlan.flags = 0; |
| 91 | if (untagged) |
| 92 | br_vlan.flags |= BRIDGE_VLAN_INFO_UNTAGGED(1<<2); |
| 93 | |
| 94 | if (begin == end) { |
| 95 | br_vlan.vid = begin; |
| 96 | |
| 97 | if (begin == pvid) |
| 98 | br_vlan.flags |= BRIDGE_VLAN_INFO_PVID(1<<1); |
| 99 | |
| 100 | r = sd_netlink_message_append_data(req, IFLA_BRIDGE_VLAN_INFO, &br_vlan, sizeof(br_vlan)); |
| 101 | if (r < 0) |
| 102 | return log_link_error_errno(link, r, "Could not append IFLA_BRIDGE_VLAN_INFO attribute: %m")({ const Link *_l = (link); _l ? log_object_internal(3, r, "../src/network/networkd-brvlan.c" , 102, __func__, "INTERFACE=", _l->ifname, ((void*)0), ((void *)0), "Could not append IFLA_BRIDGE_VLAN_INFO attribute: %m") : log_internal_realm(((LOG_REALM_SYSTEMD) << 10 | ((3) )), r, "../src/network/networkd-brvlan.c", 102, __func__, "Could not append IFLA_BRIDGE_VLAN_INFO attribute: %m" ); }); |
| 103 | } else { |
| 104 | br_vlan.vid = begin; |
| 105 | br_vlan.flags |= BRIDGE_VLAN_INFO_RANGE_BEGIN(1<<3); |
| 106 | |
| 107 | r = sd_netlink_message_append_data(req, IFLA_BRIDGE_VLAN_INFO, &br_vlan, sizeof(br_vlan)); |
| 108 | if (r < 0) |
| 109 | return log_link_error_errno(link, r, "Could not append IFLA_BRIDGE_VLAN_INFO attribute: %m")({ const Link *_l = (link); _l ? log_object_internal(3, r, "../src/network/networkd-brvlan.c" , 109, __func__, "INTERFACE=", _l->ifname, ((void*)0), ((void *)0), "Could not append IFLA_BRIDGE_VLAN_INFO attribute: %m") : log_internal_realm(((LOG_REALM_SYSTEMD) << 10 | ((3) )), r, "../src/network/networkd-brvlan.c", 109, __func__, "Could not append IFLA_BRIDGE_VLAN_INFO attribute: %m" ); }); |
| 110 | |
| 111 | br_vlan.vid = end; |
| 112 | br_vlan.flags &= ~BRIDGE_VLAN_INFO_RANGE_BEGIN(1<<3); |
| 113 | br_vlan.flags |= BRIDGE_VLAN_INFO_RANGE_END(1<<4); |
| 114 | |
| 115 | r = sd_netlink_message_append_data(req, IFLA_BRIDGE_VLAN_INFO, &br_vlan, sizeof(br_vlan)); |
| 116 | if (r < 0) |
| 117 | return log_link_error_errno(link, r, "Could not append IFLA_BRIDGE_VLAN_INFO attribute: %m")({ const Link *_l = (link); _l ? log_object_internal(3, r, "../src/network/networkd-brvlan.c" , 117, __func__, "INTERFACE=", _l->ifname, ((void*)0), ((void *)0), "Could not append IFLA_BRIDGE_VLAN_INFO attribute: %m") : log_internal_realm(((LOG_REALM_SYSTEMD) << 10 | ((3) )), r, "../src/network/networkd-brvlan.c", 117, __func__, "Could not append IFLA_BRIDGE_VLAN_INFO attribute: %m" ); }); |
| 118 | } |
| 119 | |
| 120 | if (done) |
| 121 | break; |
| 122 | } |
| 123 | if (j > 0) { |
| 124 | begin = end = j - 1 + base_bit; |
| 125 | untagged = is_bit_set(j - 1, untagged_map); |
| 126 | } |
| 127 | |
| 128 | next: |
| 129 | i = j; |
| 130 | } while (!done); |
| 131 | } |
| 132 | if (!cnt) |
| 133 | return -EINVAL22; |
| 134 | |
| 135 | return cnt; |
| 136 | } |
| 137 | |
| 138 | static int set_brvlan_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata) { |
| 139 | Link *link = userdata; |
| 140 | int r; |
| 141 | |
| 142 | assert(link)do { if ((__builtin_expect(!!(!(link)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("link"), "../src/network/networkd-brvlan.c" , 142, __PRETTY_FUNCTION__); } while (0); |
| 143 | |
| 144 | r = sd_netlink_message_get_errno(m); |
| 145 | if (r < 0 && r != -EEXIST17) |
| 146 | log_link_error_errno(link, r, "Could not add VLAN to bridge port: %m")({ const Link *_l = (link); _l ? log_object_internal(3, r, "../src/network/networkd-brvlan.c" , 146, __func__, "INTERFACE=", _l->ifname, ((void*)0), ((void *)0), "Could not add VLAN to bridge port: %m") : log_internal_realm (((LOG_REALM_SYSTEMD) << 10 | ((3))), r, "../src/network/networkd-brvlan.c" , 146, __func__, "Could not add VLAN to bridge port: %m"); }); |
| 147 | |
| 148 | return 1; |
| 149 | } |
| 150 | |
| 151 | int br_vlan_configure(Link *link, uint16_t pvid, uint32_t *br_vid_bitmap, uint32_t *br_untagged_bitmap) { |
| 152 | _cleanup_(sd_netlink_message_unrefp)__attribute__((cleanup(sd_netlink_message_unrefp))) sd_netlink_message *req = NULL((void*)0); |
| 153 | int r; |
| 154 | uint16_t flags; |
| 155 | sd_netlink *rtnl; |
| 156 | |
| 157 | assert(link)do { if ((__builtin_expect(!!(!(link)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("link"), "../src/network/networkd-brvlan.c" , 157, __PRETTY_FUNCTION__); } while (0); |
| 158 | assert(link->manager)do { if ((__builtin_expect(!!(!(link->manager)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("link->manager"), "../src/network/networkd-brvlan.c" , 158, __PRETTY_FUNCTION__); } while (0); |
| 159 | assert(br_vid_bitmap)do { if ((__builtin_expect(!!(!(br_vid_bitmap)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("br_vid_bitmap"), "../src/network/networkd-brvlan.c" , 159, __PRETTY_FUNCTION__); } while (0); |
| 160 | assert(br_untagged_bitmap)do { if ((__builtin_expect(!!(!(br_untagged_bitmap)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("br_untagged_bitmap"), "../src/network/networkd-brvlan.c" , 160, __PRETTY_FUNCTION__); } while (0); |
| 161 | assert(link->network)do { if ((__builtin_expect(!!(!(link->network)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("link->network"), "../src/network/networkd-brvlan.c" , 161, __PRETTY_FUNCTION__); } while (0); |
| 162 | |
| 163 | /* pvid might not be in br_vid_bitmap yet */ |
| 164 | if (pvid) |
| 165 | set_bit(pvid, br_vid_bitmap); |
| 166 | |
| 167 | rtnl = link->manager->rtnl; |
| 168 | |
| 169 | /* create new RTM message */ |
| 170 | r = sd_rtnl_message_new_link(rtnl, &req, RTM_SETLINKRTM_SETLINK, link->ifindex); |
| 171 | if (r < 0) |
| 172 | return log_link_error_errno(link, r, "Could not allocate RTM_SETLINK message: %m")({ const Link *_l = (link); _l ? log_object_internal(3, r, "../src/network/networkd-brvlan.c" , 172, __func__, "INTERFACE=", _l->ifname, ((void*)0), ((void *)0), "Could not allocate RTM_SETLINK message: %m") : log_internal_realm (((LOG_REALM_SYSTEMD) << 10 | ((3))), r, "../src/network/networkd-brvlan.c" , 172, __func__, "Could not allocate RTM_SETLINK message: %m" ); }); |
| 173 | |
| 174 | r = sd_rtnl_message_link_set_family(req, PF_BRIDGE7); |
| 175 | if (r < 0) |
| 176 | return log_link_error_errno(link, r, "Could not set message family: %m")({ const Link *_l = (link); _l ? log_object_internal(3, r, "../src/network/networkd-brvlan.c" , 176, __func__, "INTERFACE=", _l->ifname, ((void*)0), ((void *)0), "Could not set message family: %m") : log_internal_realm (((LOG_REALM_SYSTEMD) << 10 | ((3))), r, "../src/network/networkd-brvlan.c" , 176, __func__, "Could not set message family: %m"); }); |
| 177 | |
| 178 | r = sd_netlink_message_open_container(req, IFLA_AF_SPEC); |
| 179 | if (r < 0) |
| 180 | return log_link_error_errno(link, r, "Could not open IFLA_AF_SPEC container: %m")({ const Link *_l = (link); _l ? log_object_internal(3, r, "../src/network/networkd-brvlan.c" , 180, __func__, "INTERFACE=", _l->ifname, ((void*)0), ((void *)0), "Could not open IFLA_AF_SPEC container: %m") : log_internal_realm (((LOG_REALM_SYSTEMD) << 10 | ((3))), r, "../src/network/networkd-brvlan.c" , 180, __func__, "Could not open IFLA_AF_SPEC container: %m") ; }); |
| 181 | |
| 182 | /* master needs flag self */ |
| 183 | if (!link->network->bridge) { |
| 184 | flags = BRIDGE_FLAGS_SELF2; |
| 185 | sd_netlink_message_append_data(req, IFLA_BRIDGE_FLAGS, &flags, sizeof(uint16_t)); |
| 186 | } |
| 187 | |
| 188 | /* add vlan info */ |
| 189 | r = append_vlan_info_data(link, req, pvid, br_vid_bitmap, br_untagged_bitmap); |
| 190 | if (r < 0) |
| 191 | return log_link_error_errno(link, r, "Could not append VLANs: %m")({ const Link *_l = (link); _l ? log_object_internal(3, r, "../src/network/networkd-brvlan.c" , 191, __func__, "INTERFACE=", _l->ifname, ((void*)0), ((void *)0), "Could not append VLANs: %m") : log_internal_realm(((LOG_REALM_SYSTEMD ) << 10 | ((3))), r, "../src/network/networkd-brvlan.c" , 191, __func__, "Could not append VLANs: %m"); }); |
| 192 | |
| 193 | r = sd_netlink_message_close_container(req); |
| 194 | if (r < 0) |
| 195 | return log_link_error_errno(link, r, "Could not close IFLA_AF_SPEC container: %m")({ const Link *_l = (link); _l ? log_object_internal(3, r, "../src/network/networkd-brvlan.c" , 195, __func__, "INTERFACE=", _l->ifname, ((void*)0), ((void *)0), "Could not close IFLA_AF_SPEC container: %m") : log_internal_realm (((LOG_REALM_SYSTEMD) << 10 | ((3))), r, "../src/network/networkd-brvlan.c" , 195, __func__, "Could not close IFLA_AF_SPEC container: %m" ); }); |
| 196 | |
| 197 | /* send message to the kernel */ |
| 198 | r = sd_netlink_call_async(rtnl, req, set_brvlan_handler, link, 0, NULL((void*)0)); |
| 199 | if (r < 0) |
| 200 | return log_link_error_errno(link, r, "Could not send rtnetlink message: %m")({ const Link *_l = (link); _l ? log_object_internal(3, r, "../src/network/networkd-brvlan.c" , 200, __func__, "INTERFACE=", _l->ifname, ((void*)0), ((void *)0), "Could not send rtnetlink message: %m") : log_internal_realm (((LOG_REALM_SYSTEMD) << 10 | ((3))), r, "../src/network/networkd-brvlan.c" , 200, __func__, "Could not send rtnetlink message: %m"); }); |
| 201 | |
| 202 | return 0; |
| 203 | } |
| 204 | |
| 205 | static int parse_vid_range(const char *rvalue, uint16_t *vid, uint16_t *vid_end) { |
| 206 | int r; |
| 207 | char *p; |
| 208 | char *_rvalue = NULL((void*)0); |
| 209 | uint16_t _vid = UINT16_MAX(65535); |
| 210 | uint16_t _vid_end = UINT16_MAX(65535); |
| 211 | |
| 212 | assert(rvalue)do { if ((__builtin_expect(!!(!(rvalue)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("rvalue"), "../src/network/networkd-brvlan.c" , 212, __PRETTY_FUNCTION__); } while (0); |
| 213 | assert(vid)do { if ((__builtin_expect(!!(!(vid)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("vid"), "../src/network/networkd-brvlan.c" , 213, __PRETTY_FUNCTION__); } while (0); |
| 214 | assert(vid_end)do { if ((__builtin_expect(!!(!(vid_end)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("vid_end"), "../src/network/networkd-brvlan.c" , 214, __PRETTY_FUNCTION__); } while (0); |
| 215 | |
| 216 | _rvalue = strdupa(rvalue)(__extension__ ({ const char *__old = (rvalue); size_t __len = strlen (__old) + 1; char *__new = (char *) __builtin_alloca ( __len); (char *) memcpy (__new, __old, __len); })); |
| 217 | p = strchr(_rvalue, '-'); |
| 218 | if (p) { |
| 219 | *p = '\0'; |
| 220 | p++; |
| 221 | r = parse_vlanid(_rvalue, &_vid); |
| 222 | if (r < 0) |
| 223 | return r; |
| 224 | |
| 225 | if (_vid == 0) |
| 226 | return -ERANGE34; |
| 227 | |
| 228 | r = parse_vlanid(p, &_vid_end); |
| 229 | if (r < 0) |
| 230 | return r; |
| 231 | |
| 232 | if (_vid_end == 0) |
| 233 | return -ERANGE34; |
| 234 | } else { |
| 235 | r = parse_vlanid(_rvalue, &_vid); |
| 236 | if (r < 0) |
| 237 | return r; |
| 238 | |
| 239 | if (_vid == 0) |
| 240 | return -ERANGE34; |
| 241 | } |
| 242 | |
| 243 | *vid = _vid; |
| 244 | *vid_end = _vid_end; |
| 245 | return r; |
| 246 | } |
| 247 | |
| 248 | int config_parse_brvlan_pvid(const char *unit, const char *filename, |
| 249 | unsigned line, const char *section, |
| 250 | unsigned section_line, const char *lvalue, |
| 251 | int ltype, const char *rvalue, void *data, |
| 252 | void *userdata) { |
| 253 | Network *network = userdata; |
| 254 | int r; |
| 255 | uint16_t pvid; |
| 256 | r = parse_vlanid(rvalue, &pvid); |
| 257 | if (r < 0) |
| 258 | return r; |
| 259 | |
| 260 | network->pvid = pvid; |
| 261 | network->use_br_vlan = true1; |
| 262 | |
| 263 | return 0; |
| 264 | } |
| 265 | |
| 266 | int config_parse_brvlan_vlan(const char *unit, const char *filename, |
| 267 | unsigned line, const char *section, |
| 268 | unsigned section_line, const char *lvalue, |
| 269 | int ltype, const char *rvalue, void *data, |
| 270 | void *userdata) { |
| 271 | Network *network = userdata; |
| 272 | int r; |
| 273 | uint16_t vid, vid_end; |
| 274 | |
| 275 | assert(filename)do { if ((__builtin_expect(!!(!(filename)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("filename"), "../src/network/networkd-brvlan.c" , 275, __PRETTY_FUNCTION__); } while (0); |
| 276 | assert(section)do { if ((__builtin_expect(!!(!(section)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("section"), "../src/network/networkd-brvlan.c" , 276, __PRETTY_FUNCTION__); } while (0); |
| 277 | assert(lvalue)do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("lvalue"), "../src/network/networkd-brvlan.c" , 277, __PRETTY_FUNCTION__); } while (0); |
| 278 | assert(rvalue)do { if ((__builtin_expect(!!(!(rvalue)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("rvalue"), "../src/network/networkd-brvlan.c" , 278, __PRETTY_FUNCTION__); } while (0); |
| 279 | assert(data)do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("data"), "../src/network/networkd-brvlan.c" , 279, __PRETTY_FUNCTION__); } while (0); |
| 280 | |
| 281 | r = parse_vid_range(rvalue, &vid, &vid_end); |
| 282 | if (r < 0) { |
| 283 | log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse VLAN, ignoring: %s", rvalue)({ int _level = (3), _e = (r); (log_get_max_level_realm(LOG_REALM_SYSTEMD ) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level , filename, line, _e, "../src/network/networkd-brvlan.c", 283 , __func__, "Failed to parse VLAN, ignoring: %s", rvalue) : - abs(_e); }); |
| 284 | return 0; |
| 285 | } |
| 286 | |
| 287 | if (UINT16_MAX(65535) == vid_end) |
| 288 | set_bit(vid++, network->br_vid_bitmap); |
| 289 | else { |
| 290 | if (vid >= vid_end) { |
| 291 | log_syntax(unit, LOG_ERR, filename, line, 0, "Invalid VLAN range, ignoring %s", rvalue)({ int _level = (3), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD ) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level , filename, line, _e, "../src/network/networkd-brvlan.c", 291 , __func__, "Invalid VLAN range, ignoring %s", rvalue) : -abs (_e); }); |
| 292 | return 0; |
| 293 | } |
| 294 | for (; vid <= vid_end; vid++) |
| 295 | set_bit(vid, network->br_vid_bitmap); |
| 296 | } |
| 297 | network->use_br_vlan = true1; |
| 298 | return 0; |
| 299 | } |
| 300 | |
| 301 | int config_parse_brvlan_untagged(const char *unit, const char *filename, |
| 302 | unsigned line, const char *section, |
| 303 | unsigned section_line, const char *lvalue, |
| 304 | int ltype, const char *rvalue, void *data, |
| 305 | void *userdata) { |
| 306 | Network *network = userdata; |
| 307 | int r; |
| 308 | uint16_t vid, vid_end; |
| 309 | |
| 310 | assert(filename)do { if ((__builtin_expect(!!(!(filename)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("filename"), "../src/network/networkd-brvlan.c" , 310, __PRETTY_FUNCTION__); } while (0); |
| 311 | assert(section)do { if ((__builtin_expect(!!(!(section)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("section"), "../src/network/networkd-brvlan.c" , 311, __PRETTY_FUNCTION__); } while (0); |
| 312 | assert(lvalue)do { if ((__builtin_expect(!!(!(lvalue)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("lvalue"), "../src/network/networkd-brvlan.c" , 312, __PRETTY_FUNCTION__); } while (0); |
| 313 | assert(rvalue)do { if ((__builtin_expect(!!(!(rvalue)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("rvalue"), "../src/network/networkd-brvlan.c" , 313, __PRETTY_FUNCTION__); } while (0); |
| 314 | assert(data)do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm (LOG_REALM_SYSTEMD, ("data"), "../src/network/networkd-brvlan.c" , 314, __PRETTY_FUNCTION__); } while (0); |
| 315 | |
| 316 | r = parse_vid_range(rvalue, &vid, &vid_end); |
| 317 | if (r < 0) { |
| 318 | log_syntax(unit, LOG_ERR, filename, line, r, "Could not parse VLAN: %s", rvalue)({ int _level = (3), _e = (r); (log_get_max_level_realm(LOG_REALM_SYSTEMD ) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level , filename, line, _e, "../src/network/networkd-brvlan.c", 318 , __func__, "Could not parse VLAN: %s", rvalue) : -abs(_e); } ); |
| 319 | return 0; |
| 320 | } |
| 321 | |
| 322 | if (UINT16_MAX(65535) == vid_end) { |
| 323 | set_bit(vid, network->br_vid_bitmap); |
| 324 | set_bit(vid, network->br_untagged_bitmap); |
| 325 | } else { |
| 326 | if (vid >= vid_end) { |
| 327 | log_syntax(unit, LOG_ERR, filename, line, 0, "Invalid VLAN range, ignoring %s", rvalue)({ int _level = (3), _e = (0); (log_get_max_level_realm(LOG_REALM_SYSTEMD ) >= ((_level) & 0x07)) ? log_syntax_internal(unit, _level , filename, line, _e, "../src/network/networkd-brvlan.c", 327 , __func__, "Invalid VLAN range, ignoring %s", rvalue) : -abs (_e); }); |
| 328 | return 0; |
| 329 | } |
| 330 | for (; vid <= vid_end; vid++) { |
| 331 | set_bit(vid, network->br_vid_bitmap); |
| 332 | set_bit(vid, network->br_untagged_bitmap); |
| 333 | } |
| 334 | } |
| 335 | network->use_br_vlan = true1; |
| 336 | return 0; |
| 337 | } |