diff --git a/bridge/fdb.c b/bridge/fdb.c index a12b5474..118fd523 100644 --- a/bridge/fdb.c +++ b/bridge/fdb.c @@ -30,7 +30,8 @@ #include "rt_names.h" #include "utils.h" -static unsigned int filter_index, filter_vlan, filter_state, filter_master; +static unsigned int filter_index, filter_dynamic, filter_master, + filter_state, filter_vlan; static void usage(void) { @@ -40,9 +41,10 @@ static void usage(void) " [ sticky ] [ local | static | dynamic ] [ dst IPADDR ]\n" " [ vlan VID ] [ port PORT] [ vni VNI ] [ via DEV ]\n" " [ src_vni VNI ]\n" - " bridge fdb [ show [ br BRDEV ] [ brport DEV ] [ vlan VID ] [ state STATE ] ]\n" - " bridge fdb get ADDR [ br BRDEV ] { brport |dev } DEV [ vlan VID ]\n" - " [ vni VNI ]\n"); + " bridge fdb [ show [ br BRDEV ] [ brport DEV ] [ vlan VID ]\n" + " [ state STATE ] [ dynamic ] ]\n" + " bridge fdb get [ to ] LLADDR [ br BRDEV ] { brport | dev } DEV\n" + " [ vlan VID ] [ vni VNI ] [ self ] [ master ] [ dynamic ]\n"); exit(-1); } @@ -167,6 +169,9 @@ int print_fdb(struct nlmsghdr *n, void *arg) if (filter_vlan && filter_vlan != vid) return 0; + if (filter_dynamic && (r->ndm_state & NUD_PERMANENT)) + return 0; + open_json_object(NULL); if (n->nlmsg_type == RTM_DELNEIGH) print_bool(PRINT_ANY, "deleted", "Deleted ", true); @@ -322,6 +327,8 @@ static int fdb_show(int argc, char **argv) if (state_a2n(&state, *argv)) invarg("invalid state", *argv); filter_state |= state; + } else if (strcmp(*argv, "dynamic") == 0) { + filter_dynamic = 1; } else { if (matches(*argv, "help") == 0) usage(); @@ -566,6 +573,8 @@ static int fdb_get(int argc, char **argv) duparg2("vlan", *argv); NEXT_ARG(); vlan = atoi(*argv); + } else if (matches(*argv, "dynamic") == 0) { + filter_dynamic = 1; } else { if (strcmp(*argv, "to") == 0) NEXT_ARG(); diff --git a/man/man8/bridge.8 b/man/man8/bridge.8 index efe67f7b..08c53f27 100644 --- a/man/man8/bridge.8 +++ b/man/man8/bridge.8 @@ -76,12 +76,12 @@ bridge \- show / manipulate bridge addresses and devices .B port .IR PORT " ] [" .B via -.IR DEVICE " ]" +.IR DEVICE " ] [" +.B src_vni +.IR VNI " ]" .ti -8 -.BR "bridge fdb" " [ " show " ] [ " -.B dev -.IR DEV " ] [ " +.BR "bridge fdb" " [ [ " show " ] [ " .B br .IR BRDEV " ] [ " .B brport @@ -89,18 +89,24 @@ bridge \- show / manipulate bridge addresses and devices .B vlan .IR VID " ] [ " .B state -.IR STATE " ]" +.IR STATE " ] [" +.B dynamic +.IR "] ]" .ti -8 -.B bridge fdb get -.I LLADDR " [ " -.B dev -.IR DEV " ] [ " +.BR "bridge fdb get" " [" +.B to +.IR "]" +.I LLADDR "[ " .B br -.IR BRDEV " ] [ " +.IR BRDEV " ]" +.B { brport | dev } +.IR DEV " [ " .B vlan -.IR VID " ] [" -.BR self " ] [ " master " ]" +.IR VID " ] [ " +.B vni +.IR VNI " ] [" +.BR self " ] [ " master " ] [ " dynamic " ]" .ti -8 .BR "bridge mdb" " { " add " | " del " } "