]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
bridge/link: add learning_sync policy flag
authorScott Feldman <sfeldma@gmail.com>
Mon, 29 Dec 2014 20:20:07 +0000 (12:20 -0800)
committerStephen Hemminger <shemming@brocade.com>
Thu, 1 Jan 2015 18:02:53 +0000 (10:02 -0800)
v2:

Resending now that the dust has cleared in 3.18 on "self" vs. hwmode debate for
brport settings.  learning_sync is now set/cleared using "self" qualifier on
brport.

v1:

Add 'learned_sync' flag to turn on/off syncing of learned MAC addresses from
offload device to bridge's FDB.   Flag is be set/cleared on offload device port
using "self" qualifier:

  $ sudo bridge link set dev swp1 learning_sync on self

  $ bridge -d link show dev swp1
  2: swp1 state UNKNOWN : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 2
      hairpin off guard off root_block off fastleave off learning off flood off
  2: swp1 state UNKNOWN : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0
      learning on learning_sync on

Adds new IFLA_BRPORT_LEARNED_SYNCED attribute for IFLA_PROTINFO on the SELF
brport.

Signed-off-by: Scott Feldman <sfeldma@gmail.com>
bridge/link.c
man/man8/bridge.8

index 3f77aabe615f1933873bdec40eaf5a1774aff4d6..c8555f82d5b41c4ffaef1446f41b16d6a5098c23 100644 (file)
@@ -188,6 +188,9 @@ int print_linkinfo(const struct sockaddr_nl *who,
                                if (prtb[IFLA_BRPORT_LEARNING])
                                        print_onoff(fp, "learning",
                                                    rta_getattr_u8(prtb[IFLA_BRPORT_LEARNING]));
+                               if (prtb[IFLA_BRPORT_LEARNING_SYNC])
+                                       print_onoff(fp, "learning_sync",
+                                                   rta_getattr_u8(prtb[IFLA_BRPORT_LEARNING_SYNC]));
                                if (prtb[IFLA_BRPORT_UNICAST_FLOOD])
                                        print_onoff(fp, "flood",
                                                    rta_getattr_u8(prtb[IFLA_BRPORT_UNICAST_FLOOD]));
@@ -221,6 +224,7 @@ static void usage(void)
        fprintf(stderr, "                               [ fastleave {on | off} ]\n");
        fprintf(stderr, "                               [ root_block {on | off} ]\n");
        fprintf(stderr, "                               [ learning {on | off} ]\n");
+       fprintf(stderr, "                               [ learning_sync {on | off} ]\n");
        fprintf(stderr, "                               [ flood {on | off} ]\n");
        fprintf(stderr, "                               [ hwmode {vepa | veb} ]\n");
        fprintf(stderr, "       bridge link show [dev DEV]\n");
@@ -252,6 +256,7 @@ static int brlink_modify(int argc, char **argv)
        } req;
        char *d = NULL;
        __s8 learning = -1;
+       __s8 learning_sync = -1;
        __s8 flood = -1;
        __s8 hairpin = -1;
        __s8 bpdu_guard = -1;
@@ -295,6 +300,10 @@ static int brlink_modify(int argc, char **argv)
                        NEXT_ARG();
                        if (!on_off("learning", &learning, *argv))
                                exit(-1);
+               } else if (strcmp(*argv, "learning_sync") == 0) {
+                       NEXT_ARG();
+                       if (!on_off("learning_sync", &learning_sync, *argv))
+                               exit(-1);
                } else if (strcmp(*argv, "flood") == 0) {
                        NEXT_ARG();
                        if (!on_off("flood", &flood, *argv))
@@ -359,6 +368,9 @@ static int brlink_modify(int argc, char **argv)
                addattr8(&req.n, sizeof(req), IFLA_BRPORT_UNICAST_FLOOD, flood);
        if (learning >= 0)
                addattr8(&req.n, sizeof(req), IFLA_BRPORT_LEARNING, learning);
+       if (learning_sync >= 0)
+               addattr8(&req.n, sizeof(req), IFLA_BRPORT_LEARNING_SYNC,
+                        learning_sync);
 
        if (cost > 0)
                addattr32(&req.n, sizeof(req), IFLA_BRPORT_COST, cost);
index cb3fb46e7063659c6ba8edb21658b40a0789d57d..e344db285fb2efcfc115ee66742d5f9160318edc 100644 (file)
@@ -38,6 +38,7 @@ bridge \- show / manipulate bridge addresses and devices
 .BR fastleave " { " on " | " off " } ] [ "
 .BR root_block " { " on " | " off " } ] [ "
 .BR learning " { " on " | " off " } ] [ "
+.BR learning_sync " { " on " | " off " } ] [ "
 .BR flood " { " on " | " off " } ] [ "
 .BR hwmode " { " vepa " | " veb " } ] "
 
@@ -262,6 +263,11 @@ Controls whether a given port will learn MAC addresses from received traffic or
 not.  If learning if off, the bridge will end up flooding any traffic for which
 it has no FDB entry.  By default this flag is on.
 
+.TP
+.BR "learning_sync on " or " learning_sync off "
+Controls whether a given port will sync MAC addresses learned on device port to
+bridge FDB.
+
 .TP
 .BR "flooding on " or " flooding off "
 Controls whether a given port will flood unicast traffic for which there is no FDB entry.  By default this flag is on.