bridge: support for nexthop id in fdb entries
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 <roopa@cumulusnetworks.com> Signed-off-by: David Ahern <dsahern@gmail.com>
This commit is contained in:
parent
a56d17463c
commit
468f787f64
22
bridge/fdb.c
22
bridge/fdb.c
|
|
@ -37,9 +37,9 @@ static void usage(void)
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Usage: bridge fdb { add | append | del | replace } ADDR dev DEV\n"
|
"Usage: bridge fdb { add | append | del | replace } ADDR dev DEV\n"
|
||||||
" [ self ] [ master ] [ use ] [ router ] [ extern_learn ]\n"
|
" [ self ] [ master ] [ use ] [ router ] [ extern_learn ]\n"
|
||||||
" [ sticky ] [ local | static | dynamic ] [ dst IPADDR ]\n"
|
" [ sticky ] [ local | static | dynamic ] [ vlan VID ]\n"
|
||||||
" [ vlan VID ] [ port PORT] [ vni VNI ] [ via DEV ]\n"
|
" { [ dst IPADDR ] [ port PORT] [ vni VNI ] | [ nhid NHID ] }\n"
|
||||||
" [ src_vni VNI ]\n"
|
" [ via DEV ] [ src_vni VNI ]\n"
|
||||||
" bridge fdb [ show [ br BRDEV ] [ brport DEV ] [ vlan VID ] [ state STATE ] ]\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"
|
" bridge fdb get ADDR [ br BRDEV ] { brport |dev } DEV [ vlan VID ]\n"
|
||||||
" [ vni VNI ]\n");
|
" [ vni VNI ]\n");
|
||||||
|
|
@ -237,6 +237,10 @@ int print_fdb(struct nlmsghdr *n, void *arg)
|
||||||
ll_index_to_name(ifindex));
|
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])
|
if (tb[NDA_LINK_NETNSID])
|
||||||
print_uint(PRINT_ANY,
|
print_uint(PRINT_ANY,
|
||||||
"linkNetNsId", "link-netnsid %d ",
|
"linkNetNsId", "link-netnsid %d ",
|
||||||
|
|
@ -390,6 +394,7 @@ static int fdb_modify(int cmd, int flags, int argc, char **argv)
|
||||||
unsigned int via = 0;
|
unsigned int via = 0;
|
||||||
char *endptr;
|
char *endptr;
|
||||||
short vid = -1;
|
short vid = -1;
|
||||||
|
__u32 nhid = 0;
|
||||||
|
|
||||||
while (argc > 0) {
|
while (argc > 0) {
|
||||||
if (strcmp(*argv, "dev") == 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);
|
duparg2("dst", *argv);
|
||||||
get_addr(&dst, *argv, preferred_family);
|
get_addr(&dst, *argv, preferred_family);
|
||||||
dst_ok = 1;
|
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) {
|
} else if (strcmp(*argv, "port") == 0) {
|
||||||
|
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
|
|
@ -475,6 +484,11 @@ static int fdb_modify(int cmd, int flags, int argc, char **argv)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (nhid && (dst_ok || port || vni != ~0)) {
|
||||||
|
fprintf(stderr, "dst, port, vni are mutually exclusive with nhid\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Assume self */
|
/* Assume self */
|
||||||
if (!(req.ndm.ndm_flags&(NTF_SELF|NTF_MASTER)))
|
if (!(req.ndm.ndm_flags&(NTF_SELF|NTF_MASTER)))
|
||||||
req.ndm.ndm_flags |= NTF_SELF;
|
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)
|
if (vid >= 0)
|
||||||
addattr16(&req.n, sizeof(req), NDA_VLAN, vid);
|
addattr16(&req.n, sizeof(req), NDA_VLAN, vid);
|
||||||
|
if (nhid > 0)
|
||||||
|
addattr32(&req.n, sizeof(req), NDA_NH_ID, nhid);
|
||||||
|
|
||||||
if (port) {
|
if (port) {
|
||||||
unsigned short dport;
|
unsigned short dport;
|
||||||
|
|
|
||||||
|
|
@ -68,16 +68,18 @@ bridge \- show / manipulate bridge addresses and devices
|
||||||
.IR DEV " { "
|
.IR DEV " { "
|
||||||
.BR local " | " static " | " dynamic " } [ "
|
.BR local " | " static " | " dynamic " } [ "
|
||||||
.BR self " ] [ " master " ] [ " router " ] [ " use " ] [ " extern_learn " ] [ " sticky " ] [ "
|
.BR self " ] [ " master " ] [ " router " ] [ " use " ] [ " extern_learn " ] [ " sticky " ] [ "
|
||||||
|
.B src_vni
|
||||||
|
.IR VNI " ] { ["
|
||||||
.B dst
|
.B dst
|
||||||
.IR IPADDR " ] [ "
|
.IR IPADDR " ] [ "
|
||||||
.B src_vni
|
|
||||||
.IR VNI " ] ["
|
|
||||||
.B vni
|
.B vni
|
||||||
.IR VNI " ] ["
|
.IR VNI " ] ["
|
||||||
.B port
|
.B port
|
||||||
.IR PORT " ] ["
|
.IR PORT " ] ["
|
||||||
.B via
|
.B via
|
||||||
.IR DEVICE " ]"
|
.IR DEVICE " ] | "
|
||||||
|
.B nhid
|
||||||
|
.IR NHID " } "
|
||||||
|
|
||||||
.ti -8
|
.ti -8
|
||||||
.BR "bridge fdb" " [ " show " ] [ "
|
.BR "bridge fdb" " [ " show " ] [ "
|
||||||
|
|
@ -583,6 +585,11 @@ device name of the outgoing interface for the
|
||||||
VXLAN device driver to reach the
|
VXLAN device driver to reach the
|
||||||
remote VXLAN tunnel endpoint.
|
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
|
.SS bridge fdb append - append a forwarding database entry
|
||||||
This command adds a new fdb entry with an already known
|
This command adds a new fdb entry with an already known
|
||||||
.IR LLADDR .
|
.IR LLADDR .
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue