From: b1tninja Date: Fri, 8 Sep 2017 10:36:06 +0000 (-0700) Subject: Allow configuration of a bridge netdev's group_fwd_mask. (#6759) X-Git-Tag: v235~143 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c4819961b1230c0c3a9e5b1964d1127689e9440d;p=thirdparty%2Fsystemd.git Allow configuration of a bridge netdev's group_fwd_mask. (#6759) --- diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml index 9c4015e621a..6f8991b81ce 100644 --- a/man/systemd.netdev.xml +++ b/man/systemd.netdev.xml @@ -341,6 +341,16 @@ means higher priority. The bridge having the lowest priority will be elected as root bridge. + + GroupForwardMask= + + A 16-bit bitmask represented as an integer which allows forwarding of link + local frames with 802.1D reserved addresses (01:80:C2:00:00:0X). A logical AND + is performed between the specified bitmask and the exponentiation of 2^X, the + lower nibble of the last octet of the MAC address. For example, a value of 8 + would allow forwarding of frames addressed to 01:80:C2:00:00:03 (802.1X PAE). + + DefaultPVID= diff --git a/src/network/netdev/bridge.c b/src/network/netdev/bridge.c index cf6c591f8bf..16fff78bf8e 100644 --- a/src/network/netdev/bridge.c +++ b/src/network/netdev/bridge.c @@ -103,6 +103,12 @@ static int netdev_bridge_post_create(NetDev *netdev, Link *link, sd_netlink_mess return log_netdev_error_errno(netdev, r, "Could not append IFLA_BR_PRIORITY attribute: %m"); } + if (b->group_fwd_mask > 0) { + r = sd_netlink_message_append_u16(req, IFLA_BR_GROUP_FWD_MASK, b->group_fwd_mask); + if (r < 0) + return log_netdev_error_errno(netdev, r, "Could not append IFLA_BR_GROUP_FWD_MASK attribute: %m"); + } + if (b->default_pvid != VLANID_INVALID) { r = sd_netlink_message_append_u16(req, IFLA_BR_VLAN_DEFAULT_PVID, b->default_pvid); if (r < 0) diff --git a/src/network/netdev/bridge.h b/src/network/netdev/bridge.h index 093c60d5b51..b303cfd3f3a 100644 --- a/src/network/netdev/bridge.h +++ b/src/network/netdev/bridge.h @@ -29,6 +29,7 @@ typedef struct Bridge { int vlan_filtering; int stp; uint16_t priority; + uint16_t group_fwd_mask; uint16_t default_pvid; usec_t forward_delay; diff --git a/src/network/netdev/netdev-gperf.gperf b/src/network/netdev/netdev-gperf.gperf index 230dc1b885f..002efd7e9cf 100644 --- a/src/network/netdev/netdev-gperf.gperf +++ b/src/network/netdev/netdev-gperf.gperf @@ -129,6 +129,7 @@ Bridge.MaxAgeSec, config_parse_sec, 0, Bridge.AgeingTimeSec, config_parse_sec, 0, offsetof(Bridge, ageing_time) Bridge.ForwardDelaySec, config_parse_sec, 0, offsetof(Bridge, forward_delay) Bridge.Priority, config_parse_uint16, 0, offsetof(Bridge, priority) +Bridge.GroupForwardMask, config_parse_uint16, 0, offsetof(Bridge, group_fwd_mask) Bridge.DefaultPVID, config_parse_default_port_vlanid, 0, offsetof(Bridge, default_pvid) Bridge.MulticastQuerier, config_parse_tristate, 0, offsetof(Bridge, mcast_querier) Bridge.MulticastSnooping, config_parse_tristate, 0, offsetof(Bridge, mcast_snooping)