]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
networkd: bridge add support to configure multicast snooping (#3223)
authorSusant Sahani <ssahani@users.noreply.github.com>
Sun, 15 May 2016 13:15:20 +0000 (18:45 +0530)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 15 May 2016 13:15:20 +0000 (09:15 -0400)
This patch implements support for the IFLA_BR_MCAST_SNOOPING attribute
it can change the multicast snooping value.

IGMP snooping monitors the Internet Group Management Protocol (IGMP)
traffic between hosts and multicast routers.

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

index 48c283c8df432ca174c3b3790b8741f9762d9f7c..8d12c305d21e17ea969ace6b4702a1bee0e63b9e 100644 (file)
             </para>
           </listitem>
         </varlistentry>
+        <varlistentry>
+          <term><varname>MulticastSnooping=</varname></term>
+          <listitem>
+            <para>A boolean. This setting controls the IFLA_BR_MCAST_SNOOPING option in the kernel.
+            If enabled, IGMP snooping monitors the Internet Group Management Protocol (IGMP) traffic
+            between hosts and multicast routers. When unset, the kernel's default setting applies.
+            </para>
+          </listitem>
+        </varlistentry>
       </variablelist>
 
   </refsect1>
index 3e44dd7960b29b7988cbae4eb57ad19b5a20b04d..4cfd00413f742cba3f216d6d7176cc790a044f27 100644 (file)
@@ -96,6 +96,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_QUERIER attribute: %m");
         }
 
+        if (b->mcast_snooping >= 0) {
+                r = sd_netlink_message_append_u8(req, IFLA_BR_MCAST_SNOOPING, b->mcast_snooping);
+                if (r < 0)
+                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BR_MCAST_SNOOPING 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");
@@ -121,6 +127,7 @@ static void bridge_init(NetDev *n) {
         assert(b);
 
         b->mcast_querier = -1;
+        b->mcast_snooping = -1;
 }
 
 const NetDevVTable bridge_vtable = {
index b921439f02fee421940f45da31c8113d9c2c6195..f2ae21fc50dea653f72e4691f5dcf9daf9b6edc1 100644 (file)
@@ -25,6 +25,7 @@ typedef struct Bridge {
         NetDev meta;
 
         int mcast_querier;
+        int mcast_snooping;
 
         usec_t forward_delay;
         usec_t hello_time;
index 1ebd0fdf2093530060ce449ab1d77c5abeaa7d0c..ba04bb0165645b07776300864b5243d4a8e2b217 100644 (file)
@@ -99,3 +99,4 @@ Bridge.HelloTimeSec,         config_parse_sec,                   0,
 Bridge.MaxAgeSec,            config_parse_sec,                   0,                             offsetof(Bridge, max_age)
 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)