]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Allow configuration of a bridge netdev's group_fwd_mask. (#6759)
authorb1tninja <b1tninja@users.noreply.github.com>
Fri, 8 Sep 2017 10:36:06 +0000 (03:36 -0700)
committerLennart Poettering <lennart@poettering.net>
Fri, 8 Sep 2017 10:36:06 +0000 (12:36 +0200)
man/systemd.netdev.xml
src/network/netdev/bridge.c
src/network/netdev/bridge.h
src/network/netdev/netdev-gperf.gperf

index 9c4015e621aad28c3f4c39dd8684d7e884b0d1eb..6f8991b81ce8328563d0b8dcd91868a46d283ff0 100644 (file)
             means higher priority. The bridge having the lowest priority will be elected as root bridge.</para>
           </listitem>
         </varlistentry>
+        <varlistentry>
+          <term><varname>GroupForwardMask=</varname></term>
+          <listitem>
+            <para>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).</para>
+          </listitem>
+        </varlistentry>
         <varlistentry>
           <term><varname>DefaultPVID=</varname></term>
           <listitem>
index cf6c591f8bfcd209dcca0c1c8a7f054178265d2d..16fff78bf8ea8a23eafbcf980be5369bed2c0d9f 100644 (file)
@@ -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)
index 093c60d5b51b8f950fe1e8ed875ea60f4ac2389e..b303cfd3f3a062c525f2a5d89532d25758fbf184 100644 (file)
@@ -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;
index 230dc1b885fc6ef4959906c29985f71c7b9b487e..002efd7e9cf02e59e7c008b1a51a2cd261340340 100644 (file)
@@ -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)