From: Scott Feldman Date: Mon, 29 Dec 2014 20:20:07 +0000 (-0800) Subject: bridge/link: add learning_sync policy flag X-Git-Tag: v3.19.0~30 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=674bb438bc5cc61a9e16f97a236203ea2f50523f;p=thirdparty%2Fiproute2.git bridge/link: add learning_sync policy flag 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 : 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 : 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 --- diff --git a/bridge/link.c b/bridge/link.c index 3f77aabe6..c8555f82d 100644 --- a/bridge/link.c +++ b/bridge/link.c @@ -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); diff --git a/man/man8/bridge.8 b/man/man8/bridge.8 index cb3fb46e7..e344db285 100644 --- a/man/man8/bridge.8 +++ b/man/man8/bridge.8 @@ -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.