From: Roopa Prabhu <ro...@cumulusnetworks.com> This patch adds support to assign a nexthop group id to an fdb entry.
$bridge fdb add 02:02:00:00:00:13 dev vx10 nhid 102 self Signed-off-by: Roopa Prabhu <ro...@cumulusnetworks.com> --- bridge/fdb.c | 22 +++++++++++++++++++--- man/man8/bridge.8 | 13 ++++++++++--- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/bridge/fdb.c b/bridge/fdb.c index 710dfc9..d2247e8 100644 --- a/bridge/fdb.c +++ b/bridge/fdb.c @@ -37,9 +37,9 @@ static void usage(void) fprintf(stderr, "Usage: bridge fdb { add | append | del | replace } ADDR dev DEV\n" " [ self ] [ master ] [ use ] [ router ] [ extern_learn ]\n" - " [ sticky ] [ local | static | dynamic ] [ dst IPADDR ]\n" - " [ vlan VID ] [ port PORT] [ vni VNI ] [ via DEV ]\n" - " [ src_vni VNI ]\n" + " [ sticky ] [ local | static | dynamic ] [ vlan VID ]\n" + " { [ dst IPADDR ] [ port PORT] [ vni VNI ] | [ nhid NHID ] }\n" + " [ via DEV ] [ 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"); @@ -237,6 +237,10 @@ int print_fdb(struct nlmsghdr *n, void *arg) ll_index_to_name(ifindex)); } + if (tb[NDA_NH_ID]) + print_uint(PRINT_ANY, "nhid", "nhid %u ", + rta_getattr_u32(tb[NDA_NH_ID])); + if (tb[NDA_LINK_NETNSID]) print_uint(PRINT_ANY, "linkNetNsId", "link-netnsid %d ", @@ -390,6 +394,7 @@ static int fdb_modify(int cmd, int flags, int argc, char **argv) unsigned int via = 0; char *endptr; short vid = -1; + __u32 nhid = 0; while (argc > 0) { if (strcmp(*argv, "dev") == 0) { @@ -401,6 +406,10 @@ static int fdb_modify(int cmd, int flags, int argc, char **argv) duparg2("dst", *argv); get_addr(&dst, *argv, preferred_family); dst_ok = 1; + } else if (strcmp(*argv, "nhid") == 0) { + NEXT_ARG(); + if (get_u32(&nhid, *argv, 0)) + invarg("\"id\" value is invalid\n", *argv); } else if (strcmp(*argv, "port") == 0) { NEXT_ARG(); @@ -475,6 +484,11 @@ static int fdb_modify(int cmd, int flags, int argc, char **argv) return -1; } + if (nhid && (dst_ok || port || vni != ~0)) { + fprintf(stderr, "dst, port, vni are mutually exclusive with nhid\n"); + return -1; + } + /* Assume self */ if (!(req.ndm.ndm_flags&(NTF_SELF|NTF_MASTER))) req.ndm.ndm_flags |= NTF_SELF; @@ -496,6 +510,8 @@ static int fdb_modify(int cmd, int flags, int argc, char **argv) if (vid >= 0) addattr16(&req.n, sizeof(req), NDA_VLAN, vid); + if (nhid > 0) + addattr32(&req.n, sizeof(req), NDA_NH_ID, nhid); if (port) { unsigned short dport; diff --git a/man/man8/bridge.8 b/man/man8/bridge.8 index 71f2e89..fa8c004 100644 --- a/man/man8/bridge.8 +++ b/man/man8/bridge.8 @@ -68,16 +68,18 @@ bridge \- show / manipulate bridge addresses and devices .IR DEV " { " .BR local " | " static " | " dynamic " } [ " .BR self " ] [ " master " ] [ " router " ] [ " use " ] [ " extern_learn " ] [ " sticky " ] [ " +.B src_vni +.IR VNI " ] { [" .B dst .IR IPADDR " ] [ " -.B src_vni -.IR VNI " ] [" .B vni .IR VNI " ] [" .B port .IR PORT " ] [" .B via -.IR DEVICE " ]" +.IR DEVICE " ] | " +.B nhid +.IR NHID " } " .ti -8 .BR "bridge fdb" " [ " show " ] [ " @@ -583,6 +585,11 @@ device name of the outgoing interface for the VXLAN device driver to reach the remote VXLAN tunnel endpoint. +.TP +.BI nhid " NHID " +ecmp nexthop group for the VXLAN device driver +to reach remote VXLAN tunnel endpoints. + .SS bridge fdb append - append a forwarding database entry This command adds a new fdb entry with an already known .IR LLADDR . -- 2.1.4