]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
bridge: add support for the multicast flood flag
authorNikolay Aleksandrov <nikolay@cumulusnetworks.com>
Thu, 13 Oct 2016 15:54:20 +0000 (17:54 +0200)
committerStephen Hemminger <stephen@networkplumber.org>
Mon, 17 Oct 2016 12:29:24 +0000 (05:29 -0700)
Recently a new per-port flag was added which controls the flooding of
unknown multicast, this patch adds support for controlling it via iproute2.
It also updates the man pages with information about the new flag.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
bridge/link.c
ip/iplink_bridge_slave.c
man/man8/bridge.8
man/man8/ip-link.8.in

index 13f606c7d456785712bafd9d7e234c37b5914746..93472ad3699e39bb4175d96c74993981b7df7e6c 100644 (file)
@@ -195,6 +195,9 @@ int print_linkinfo(const struct sockaddr_nl *who,
                                if (prtb[IFLA_BRPORT_UNICAST_FLOOD])
                                        print_onoff(fp, "flood",
                                                    rta_getattr_u8(prtb[IFLA_BRPORT_UNICAST_FLOOD]));
+                               if (prtb[IFLA_BRPORT_MCAST_FLOOD])
+                                       print_onoff(fp, "mcast_flood",
+                                                   rta_getattr_u8(prtb[IFLA_BRPORT_MCAST_FLOOD]));
                        }
                } else
                        print_portstate(fp, rta_getattr_u8(tb[IFLA_PROTINFO]));
@@ -227,6 +230,7 @@ static void usage(void)
        fprintf(stderr, "                               [ learning {on | off} ]\n");
        fprintf(stderr, "                               [ learning_sync {on | off} ]\n");
        fprintf(stderr, "                               [ flood {on | off} ]\n");
+       fprintf(stderr, "                               [ mcast_flood {on | off} ]\n");
        fprintf(stderr, "                               [ hwmode {vepa | veb} ]\n");
        fprintf(stderr, "                               [ self ] [ master ]\n");
        fprintf(stderr, "       bridge link show [dev DEV]\n");
@@ -265,6 +269,7 @@ static int brlink_modify(int argc, char **argv)
        __s8 learning = -1;
        __s8 learning_sync = -1;
        __s8 flood = -1;
+       __s8 mcast_flood = -1;
        __s8 hairpin = -1;
        __s8 bpdu_guard = -1;
        __s8 fast_leave = -1;
@@ -308,6 +313,10 @@ static int brlink_modify(int argc, char **argv)
                        NEXT_ARG();
                        if (!on_off("flood", &flood, *argv))
                                return -1;
+               } else if (strcmp(*argv, "mcast_flood") == 0) {
+                       NEXT_ARG();
+                       if (!on_off("mcast_flood", &mcast_flood, *argv))
+                               return -1;
                } else if (strcmp(*argv, "cost") == 0) {
                        NEXT_ARG();
                        cost = atoi(*argv);
@@ -380,6 +389,9 @@ static int brlink_modify(int argc, char **argv)
                addattr8(&req.n, sizeof(req), IFLA_BRPORT_PROTECT, root_block);
        if (flood >= 0)
                addattr8(&req.n, sizeof(req), IFLA_BRPORT_UNICAST_FLOOD, flood);
+       if (mcast_flood >= 0)
+               addattr8(&req.n, sizeof(req), IFLA_BRPORT_MCAST_FLOOD,
+                        mcast_flood);
        if (learning >= 0)
                addattr8(&req.n, sizeof(req), IFLA_BRPORT_LEARNING, learning);
        if (learning_sync >= 0)
index 6c5c59a9524f487c383b5a96bf57d64c43f2c6bf..fbb3f06e8ff764bf983aad81ab334c0a97b35b3d 100644 (file)
@@ -33,6 +33,7 @@ static void print_explain(FILE *f)
                "                        [ proxy_arp_wifi {on | off} ]\n"
                "                        [ mcast_router MULTICAST_ROUTER ]\n"
                "                        [ mcast_fast_leave {on | off} ]\n"
+               "                        [ mcast_flood {on | off} ]\n"
        );
 }
 
@@ -187,6 +188,10 @@ static void bridge_slave_print_opt(struct link_util *lu, FILE *f,
        if (tb[IFLA_BRPORT_FAST_LEAVE])
                print_onoff(f, "mcast_fast_leave",
                            rta_getattr_u8(tb[IFLA_BRPORT_FAST_LEAVE]));
+
+       if (tb[IFLA_BRPORT_MCAST_FLOOD])
+               print_onoff(f, "mcast_flood",
+                       rta_getattr_u8(tb[IFLA_BRPORT_MCAST_FLOOD]));
 }
 
 static void bridge_slave_parse_on_off(char *arg_name, char *arg_val,
@@ -251,6 +256,10 @@ static int bridge_slave_parse_opt(struct link_util *lu, int argc, char **argv,
                        NEXT_ARG();
                        bridge_slave_parse_on_off("flood", *argv, n,
                                                  IFLA_BRPORT_UNICAST_FLOOD);
+               } else if (matches(*argv, "mcast_flood") == 0) {
+                       NEXT_ARG();
+                       bridge_slave_parse_on_off("mcast_flood", *argv, n,
+                                                 IFLA_BRPORT_MCAST_FLOOD);
                } else if (matches(*argv, "proxy_arp") == 0) {
                        NEXT_ARG();
                        bridge_slave_parse_on_off("proxy_arp", *argv, n,
index 7bfb068b74feedf6c01757ad48967ee1ee676d9c..6617e188a384716b80a13eb4b0906bcbb0c0e846 100644 (file)
@@ -43,7 +43,8 @@ bridge \- show / manipulate bridge addresses and devices
 .BR learning_sync " { " on " | " off " } ] [ "
 .BR flood " { " on " | " off " } ] [ "
 .BR hwmode " { " vepa " | " veb " } ] [ "
-.BR self " ] [ " master " ] "
+.BR mcast_flood " { " on " | " off " } ] [ "
+.BR self " ] [ " master " ]"
 
 .ti -8
 .BR "bridge link" " [ " show " ] [ "
@@ -309,6 +310,10 @@ switch.
 .B veb
 - bridging happens in hardware.
 
+.TP
+.BR "mcast_flood on " or " mcast_flood off "
+Controls whether a given port will be flooded with multicast traffic for which there is no MDB entry. By default this flag is on.
+
 .TP
 .BI self
 link setting is configured on specified physical device
index 6cb97ea9c66e3b781d3fec30777633c40feef15b..7c0d602b50d3e77b6574a1142dc7b52d0ae83811 100644 (file)
@@ -1431,7 +1431,9 @@ the following additional arguments are supported:
 ] [
 .BI mcast_router " MULTICAST_ROUTER"
 ] [
-.BR mcast_fast_leave " { " on " | " off "} ]"
+.BR mcast_fast_leave " { " on " | " off "}"
+] [
+.BR mcast_flood " { " on " | " off " } ]"
 
 .in +8
 .sp
@@ -1500,6 +1502,9 @@ queries.
 .B fastleave
 option above.
 
+.BR mcast_flood " { " on " | " off " }"
+- controls whether a given port will be flooded with multicast traffic for which there is no MDB entry.
+
 .in -8
 
 .TP