From: Roopa Prabhu Date: Mon, 4 Mar 2019 05:26:32 +0000 (-0800) Subject: bridge: fdb: add support for src_vni option X-Git-Tag: v5.4.0~140 X-Git-Url: https://git.proxmox.com/?p=mirror_iproute2.git;a=commitdiff_plain;h=c5b176e5ba1f51336350b4ad36039aaef9f4af07 bridge: fdb: add support for src_vni option We already print src_vni for a fdb entry when present. This patch adds the ability to set src_vni on a fdb entry. When not specified, kernel will use vni specified on the vxlan device. This can be used on a vxlan fdb entry when the vxlan device is in external or collect metadata mode. Signed-off-by: Roopa Prabhu Signed-off-by: David Ahern --- diff --git a/bridge/fdb.c b/bridge/fdb.c index c4bf4039..941ce2d5 100644 --- a/bridge/fdb.c +++ b/bridge/fdb.c @@ -39,6 +39,7 @@ static void usage(void) " [ 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" " bridge fdb [ show [ br BRDEV ] [ brport DEV ] [ vlan VID ] [ state STATE ] ]\n"); exit(-1); } @@ -383,6 +384,7 @@ static int fdb_modify(int cmd, int flags, int argc, char **argv) inet_prefix dst; unsigned long port = 0; unsigned long vni = ~0; + unsigned long src_vni = ~0; unsigned int via = 0; char *endptr; short vid = -1; @@ -416,6 +418,12 @@ static int fdb_modify(int cmd, int flags, int argc, char **argv) if ((endptr && *endptr) || (vni >> 24) || vni == ULONG_MAX) invarg("invalid VNI\n", *argv); + } else if (strcmp(*argv, "src_vni") == 0) { + NEXT_ARG(); + src_vni = strtoul(*argv, &endptr, 0); + if ((endptr && *endptr) || + (src_vni >> 24) || src_vni == ULONG_MAX) + invarg("invalid src VNI\n", *argv); } else if (strcmp(*argv, "via") == 0) { NEXT_ARG(); via = ll_name_to_index(*argv); @@ -495,6 +503,8 @@ static int fdb_modify(int cmd, int flags, int argc, char **argv) } if (vni != ~0) addattr32(&req.n, sizeof(req), NDA_VNI, vni); + if (src_vni != ~0) + addattr32(&req.n, sizeof(req), NDA_SRC_VNI, src_vni); if (via) addattr32(&req.n, sizeof(req), NDA_IFINDEX, via); diff --git a/man/man8/bridge.8 b/man/man8/bridge.8 index 13c46386..c9af20e8 100644 --- a/man/man8/bridge.8 +++ b/man/man8/bridge.8 @@ -69,6 +69,8 @@ bridge \- show / manipulate bridge addresses and devices .BR self " ] [ " master " ] [ " router " ] [ " use " ] [ " extern_learn " ] [ " sticky " ] [ " .B dst .IR IPADDR " ] [ " +.B src_vni +.IR SRC_VNI " ] [" .B vni .IR VNI " ] [" .B port @@ -473,6 +475,13 @@ is of type VXLAN. the IP address of the destination VXLAN tunnel endpoint where the Ethernet MAC ADDRESS resides. +.TP +.BI src_vni " SRC VNI" +the src VNI Network Identifier (or VXLAN Segment ID) +this entry belongs to. Used only when the vxlan device is in +external or collect metadata mode. If omitted the value specified at +vxlan device creation will be used. + .TP .BI vni " VNI" the VXLAN VNI Network Identifier (or VXLAN Segment ID)