From: Vlad Yasevich Date: Wed, 21 May 2014 13:53:43 +0000 (-0400) Subject: bridge: Add learning and flood support X-Git-Tag: v3.15.0~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f0f4ab600b5a9d1f718c8812e20dffe61ca95989;p=thirdparty%2Fiproute2.git bridge: Add learning and flood support Add ability to control learning and flood flags on bridge ports. Signed-off-by: Vlad Yasevich --- diff --git a/bridge/link.c b/bridge/link.c index 38dfaea2e..e3fd6e638 100644 --- a/bridge/link.c +++ b/bridge/link.c @@ -185,6 +185,12 @@ int print_linkinfo(const struct sockaddr_nl *who, if (prtb[IFLA_BRPORT_FAST_LEAVE]) print_onoff(fp, "fastleave", rta_getattr_u8(prtb[IFLA_BRPORT_FAST_LEAVE])); + if (prtb[IFLA_BRPORT_LEARNING]) + print_onoff(fp, "learning", + rta_getattr_u8(prtb[IFLA_BRPORT_LEARNING])); + if (prtb[IFLA_BRPORT_UNICAST_FLOOD]) + print_onoff(fp, "flood", + rta_getattr_u8(prtb[IFLA_BRPORT_UNICAST_FLOOD])); } } else print_portstate(fp, rta_getattr_u8(tb[IFLA_PROTINFO])); @@ -214,6 +220,8 @@ static void usage(void) fprintf(stderr, " [ hairpin {on | off} ] \n"); fprintf(stderr, " [ fastleave {on | off} ]\n"); fprintf(stderr, " [ root_block {on | off} ]\n"); + fprintf(stderr, " [ learning {on | off} ]\n"); + fprintf(stderr, " [ flood {on | off} ]\n"); fprintf(stderr, " [ hwmode {vepa | veb} ]\n"); fprintf(stderr, " bridge link show [dev DEV]\n"); exit(-1); @@ -243,6 +251,8 @@ static int brlink_modify(int argc, char **argv) char buf[512]; } req; char *d = NULL; + __s8 learning = -1; + __s8 flood = -1; __s8 hairpin = -1; __s8 bpdu_guard = -1; __s8 fast_leave = -1; @@ -281,6 +291,14 @@ static int brlink_modify(int argc, char **argv) NEXT_ARG(); if (!on_off("root_block", &root_block, *argv)) exit(-1); + } else if (strcmp(*argv, "learning") == 0) { + NEXT_ARG(); + if (!on_off("learning", &learning, *argv)) + exit(-1); + } else if (strcmp(*argv, "flood") == 0) { + NEXT_ARG(); + if (!on_off("flood", &flood, *argv)) + exit(-1); } else if (strcmp(*argv, "cost") == 0) { NEXT_ARG(); cost = atoi(*argv); @@ -335,6 +353,10 @@ static int brlink_modify(int argc, char **argv) fast_leave); if (root_block >= 0) addattr8(&req.n, sizeof(req), IFLA_BRPORT_PROTECT, root_block); + if (flood >= 0) + addattr8(&req.n, sizeof(req), IFLA_BRPORT_UNICAST_FLOOD, flood); + if (learning >= 0) + addattr8(&req.n, sizeof(req), IFLA_BRPORT_LEARNING, learning); 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 9a34804f1..af31d410c 100644 --- a/man/man8/bridge.8 +++ b/man/man8/bridge.8 @@ -36,6 +36,8 @@ bridge \- show / manipulate bridge addresses and devices .BR hairpin " { " on " | " off " } ] [ " .BR fastleave " { " on " | " off " } ] [ " .BR root_block " { " on " | " off " } ] [ " +.BR learning " { " on " | " off " } ] [ " +.BR flood " { " on " | " off " } ] [ " .BR hwmode " { " vepa " | " veb " } ] " .ti -8 @@ -233,6 +235,16 @@ enabled on the bridge. By default the flag is off. Controls whether a given port is allowed to become root port or not. Only used when STP is enabled on the bridge. By default the flag is off. +.TP +.BR "learning on " or " learning off " +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 "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. + .TP .BI hwmode Some network interface cards support HW bridge functionality and they may be