]> git.proxmox.com Git - mirror_iproute2.git/commitdiff
bridge: fdb: add support for src_vni option
authorRoopa Prabhu <roopa@cumulusnetworks.com>
Mon, 4 Mar 2019 05:26:32 +0000 (21:26 -0800)
committerDavid Ahern <dsahern@gmail.com>
Tue, 5 Mar 2019 15:52:34 +0000 (07:52 -0800)
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 <roopa@cumulusnetworks.com>
Signed-off-by: David Ahern <dsahern@gmail.com>
bridge/fdb.c
man/man8/bridge.8

index c4bf40390f42b770626d1af6e5ddef0e6fa161e6..941ce2d59280e9b18382e8d9946aa45921fbd96b 100644 (file)
@@ -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);
 
index 13c46386baaebdbc1bc07e57c9a6c160c6884c5a..c9af20e8cdbc53901ee176e27bc8abddd43a10ab 100644 (file)
@@ -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)