network: merge link_set_bridge_vlan() and br_vlan_configure()
This commit is contained in:
parent
256c75fd1f
commit
34d7f2c99e
|
@ -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");
|
||||
|
|
|
@ -5,8 +5,6 @@
|
|||
Copyright © 2016 BISDN GmbH. All rights reserved.
|
||||
***/
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#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);
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue