]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
networkd: bridge add support to configure VLAN filtering (#3344)
authorTobias Jungel <Tobias.Jungel@gmail.com>
Mon, 30 May 2016 15:00:16 +0000 (17:00 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 30 May 2016 15:00:16 +0000 (17:00 +0200)
This patch implements support for IFLA_BR_VLAN_FILTERING configuration.

man/systemd.netdev.xml
src/network/networkd-netdev-bridge.c
src/network/networkd-netdev-bridge.h
src/network/networkd-netdev-gperf.gperf

index 8d12c305d21e17ea969ace6b4702a1bee0e63b9e..cde5d659492b028e063e5aec241fee39dbb89214 100644 (file)
             </para>
           </listitem>
         </varlistentry>
+        <varlistentry>
+          <term><varname>VLANFiltering=</varname></term>
+          <listitem>
+            <para>A boolean. This setting controls the IFLA_BR_VLAN_FILTERING option in the kernel.
+            If enabled, the bridge will be started in VLAN-filtering mode. When unset, the kernel's
+            default setting applies.
+            </para>
+          </listitem>
+        </varlistentry>
       </variablelist>
 
   </refsect1>
index 4cfd00413f742cba3f216d6d7176cc790a044f27..a5085d2b1916478cb131168cdb62f404b244ba3a 100644 (file)
@@ -102,6 +102,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_MCAST_SNOOPING attribute: %m");
         }
 
+        if (b->vlan_filtering >= 0) {
+                r = sd_netlink_message_append_u8(req, IFLA_BR_VLAN_FILTERING, b->vlan_filtering);
+                if (r < 0)
+                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BR_VLAN_FILTERING attribute: %m");
+        }
+
         r = sd_netlink_message_close_container(req);
         if (r < 0)
                 return log_netdev_error_errno(netdev, r, "Could not append IFLA_LINKINFO attribute: %m");
@@ -128,6 +134,7 @@ static void bridge_init(NetDev *n) {
 
         b->mcast_querier = -1;
         b->mcast_snooping = -1;
+        b->vlan_filtering = -1;
 }
 
 const NetDevVTable bridge_vtable = {
index f2ae21fc50dea653f72e4691f5dcf9daf9b6edc1..a637aea0a3f82e1006790c42a33ec52c97d04692 100644 (file)
@@ -26,6 +26,7 @@ typedef struct Bridge {
 
         int mcast_querier;
         int mcast_snooping;
+        int vlan_filtering;
 
         usec_t forward_delay;
         usec_t hello_time;
index ba04bb0165645b07776300864b5243d4a8e2b217..adc64977b9bdfa03cc92f90de409c62101d7737f 100644 (file)
@@ -100,3 +100,4 @@ Bridge.MaxAgeSec,            config_parse_sec,                   0,
 Bridge.ForwardDelaySec,      config_parse_sec,                   0,                             offsetof(Bridge, forward_delay)
 Bridge.MulticastQuerier,     config_parse_tristate,              0,                             offsetof(Bridge, mcast_querier)
 Bridge.MulticastSnooping,    config_parse_tristate,              0,                             offsetof(Bridge, mcast_snooping)
+Bridge.VLANFiltering,        config_parse_tristate,              0,                             offsetof(Bridge, vlan_filtering)