From: Yu Watanabe Date: Fri, 2 Oct 2020 08:37:54 +0000 (+0900) Subject: network: merge link_set_bridge_vlan() and br_vlan_configure() X-Git-Tag: v247-rc1~117^2~31 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=34d7f2c99e6fa86fe4072d684fb33a438061bb89;p=thirdparty%2Fsystemd.git network: merge link_set_bridge_vlan() and br_vlan_configure() --- diff --git a/src/network/networkd-brvlan.c b/src/network/networkd-brvlan.c index bbe01037d17..23ca4f9fac8 100644 --- a/src/network/networkd-brvlan.c +++ b/src/network/networkd-brvlan.c @@ -146,26 +146,26 @@ static int set_brvlan_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *lin return 1; } -int br_vlan_configure(Link *link, uint16_t pvid, uint32_t *br_vid_bitmap, uint32_t *br_untagged_bitmap) { +int link_set_bridge_vlan(Link *link) { _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL; - sd_netlink *rtnl; - uint16_t flags; int r; assert(link); assert(link->manager); - assert(br_vid_bitmap); - assert(br_untagged_bitmap); assert(link->network); - /* pvid might not be in br_vid_bitmap yet */ - if (pvid) - set_bit(pvid, br_vid_bitmap); + if (!link->network->use_br_vlan) + return 0; - rtnl = link->manager->rtnl; + if (!link->network->bridge && !streq_ptr(link->kind, "bridge")) + return 0; + + /* pvid might not be in br_vid_bitmap yet */ + if (link->network->pvid) + set_bit(link->network->pvid, link->network->br_vid_bitmap); /* create new RTM message */ - r = sd_rtnl_message_new_link(rtnl, &req, RTM_SETLINK, link->ifindex); + r = sd_rtnl_message_new_link(link->manager->rtnl, &req, RTM_SETLINK, link->ifindex); if (r < 0) return log_link_error_errno(link, r, "Could not allocate RTM_SETLINK message: %m"); @@ -179,14 +179,14 @@ int br_vlan_configure(Link *link, uint16_t pvid, uint32_t *br_vid_bitmap, uint32 /* master needs flag self */ if (!link->network->bridge) { - flags = BRIDGE_FLAGS_SELF; - r = sd_netlink_message_append_data(req, IFLA_BRIDGE_FLAGS, &flags, sizeof(uint16_t)); + uint16_t flags = BRIDGE_FLAGS_SELF; + r = sd_netlink_message_append_data(req, IFLA_BRIDGE_FLAGS, &flags, sizeof(flags)); if (r < 0) return log_link_error_errno(link, r, "Could not open IFLA_BRIDGE_FLAGS: %m"); } /* add vlan info */ - r = append_vlan_info_data(link, req, pvid, br_vid_bitmap, br_untagged_bitmap); + r = append_vlan_info_data(link, req, link->network->pvid, link->network->br_vid_bitmap, link->network->br_untagged_bitmap); if (r < 0) return log_link_error_errno(link, r, "Could not append VLANs: %m"); @@ -195,7 +195,7 @@ int br_vlan_configure(Link *link, uint16_t pvid, uint32_t *br_vid_bitmap, uint32 return log_link_error_errno(link, r, "Could not close IFLA_AF_SPEC container: %m"); /* send message to the kernel */ - r = netlink_call_async(rtnl, NULL, req, set_brvlan_handler, + r = netlink_call_async(link->manager->rtnl, NULL, req, set_brvlan_handler, link_netlink_destroy_callback, link); if (r < 0) return log_link_error_errno(link, r, "Could not send rtnetlink message: %m"); diff --git a/src/network/networkd-brvlan.h b/src/network/networkd-brvlan.h index 75330340216..d13ea30151e 100644 --- a/src/network/networkd-brvlan.h +++ b/src/network/networkd-brvlan.h @@ -5,8 +5,6 @@ Copyright © 2016 BISDN GmbH. All rights reserved. ***/ -#include - #include "conf-parser.h" #define BRIDGE_VLAN_BITMAP_MAX 4096 @@ -14,7 +12,7 @@ typedef struct Link Link; -int br_vlan_configure(Link *link, uint16_t pvid, uint32_t *br_vid_bitmap, uint32_t *br_untagged_bitmap); +int link_set_bridge_vlan(Link *link); CONFIG_PARSER_PROTOTYPE(config_parse_brvlan_pvid); CONFIG_PARSER_PROTOTYPE(config_parse_brvlan_vlan); diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 5835f76cef1..10bea3b7ff8 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -947,16 +947,6 @@ static int link_set_static_configs(Link *link) { return 0; } -static int link_set_bridge_vlan(Link *link) { - int r; - - r = br_vlan_configure(link, link->network->pvid, link->network->br_vid_bitmap, link->network->br_untagged_bitmap); - if (r < 0) - log_link_error_errno(link, r, "Failed to assign VLANs to bridge port: %m"); - - return r; -} - static int link_set_proxy_arp(Link *link) { int r; @@ -1842,12 +1832,9 @@ static int link_joined(Link *link) { log_link_error_errno(link, r, "Failed to add to bond master's slave list: %m"); } - if (link->network->use_br_vlan && - (link->network->bridge || streq_ptr("bridge", link->kind))) { - r = link_set_bridge_vlan(link); - if (r < 0) - log_link_error_errno(link, r, "Could not set bridge vlan: %m"); - } + r = link_set_bridge_vlan(link); + if (r < 0) + log_link_error_errno(link, r, "Could not set bridge vlan: %m"); /* Skip setting up addresses until it gets carrier, or it would try to set addresses twice,