" [ state STATE ] [ dynamic ] ]\n"
" bridge fdb get [ to ] LLADDR [ br BRDEV ] { brport | dev } DEV\n"
" [ vlan VID ] [ vni VNI ] [ self ] [ master ] [ dynamic ]\n"
- " bridge fdb flush dev DEV [ vlan VID ] [ self ] [ master ]\n");
+ " bridge fdb flush dev DEV [ brport DEV ] [ vlan VID ]\n"
+ " [ self ] [ master ]\n");
exit(-1);
}
.n.nlmsg_type = RTM_DELNEIGH,
.ndm.ndm_family = PF_BRIDGE,
};
+ short vid = -1, port_ifidx = -1;
unsigned short ndm_flags = 0;
- char *d = NULL;
- short vid = -1;
+ char *d = NULL, *port = NULL;
while (argc > 0) {
if (strcmp(*argv, "dev") == 0) {
ndm_flags |= NTF_MASTER;
} else if (strcmp(*argv, "self") == 0) {
ndm_flags |= NTF_SELF;
+ } else if (strcmp(*argv, "brport") == 0) {
+ if (port)
+ duparg2("brport", *argv);
+ NEXT_ARG();
+ port = *argv;
} else if (strcmp(*argv, "vlan") == 0) {
if (vid >= 0)
duparg2("vlan", *argv);
return -1;
}
+ if (port) {
+ port_ifidx = ll_name_to_index(port);
+ if (port_ifidx == 0) {
+ fprintf(stderr, "Cannot find bridge port device \"%s\"\n",
+ port);
+ return -1;
+ }
+ }
+
if (vid >= 4096) {
fprintf(stderr, "Invalid VLAN ID \"%hu\"\n", vid);
return -1;
ndm_flags |= NTF_SELF;
req.ndm.ndm_flags = ndm_flags;
+ if (port_ifidx > -1)
+ addattr32(&req.n, sizeof(req), NDA_IFINDEX, port_ifidx);
if (vid > -1)
addattr16(&req.n, sizeof(req), NDA_VLAN, vid);
.BR "bridge fdb flush"
.B dev
.IR DEV " [ "
+.B brport
+.IR DEV " ] [ "
.B vlan
.IR VID " ] [ "
.BR self " ] [ " master " ]"
is set then the operation will be fulfilled by its master device's driver and
all entries pointing to that port will be deleted.
+.TP
+.BI brport " DEV"
+the target bridge port for the operation. If the bridge device is specified then only
+entries pointing to the bridge itself will be deleted. Note that the target device
+specified by this option will override the one specified by dev above.
+
.TP
.BI vlan " VID"
the target VLAN ID for the operation. Match forwarding table entries only with the