]> git.proxmox.com Git - mirror_iproute2.git/commitdiff
ipnexthop: support for fdb nexthops
authorRoopa Prabhu <roopa@cumulusnetworks.com>
Thu, 11 Jun 2020 00:35:20 +0000 (17:35 -0700)
committerDavid Ahern <dsahern@gmail.com>
Thu, 11 Jun 2020 15:52:29 +0000 (15:52 +0000)
This patch adds support to add and delete
ecmp nexthops of type fdb. Such nexthops can
be linked to vxlan fdb entries.

$ip nexthop add id 12 via 172.16.1.2 fdb
$ip nexthop add id 13 via 172.16.1.3 fdb
$ip nexthop add id 102 group 12/13 fdb

$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>
ip/ipnexthop.c
man/man8/ip-nexthop.8

index c33cef0c9ae045abe17908830ac4b6a87e6854a5..22c664918fccfd7b3ce9979317e6b420ff43e582 100644 (file)
@@ -20,6 +20,7 @@ static struct {
        unsigned int ifindex;
        unsigned int master;
        unsigned int proto;
+       unsigned int fdb;
 } filter;
 
 enum {
@@ -39,7 +40,7 @@ static void usage(void)
                "       ip nexthop { add | replace } id ID NH [ protocol ID ]\n"
                "       ip nexthop { get| del } id ID\n"
                "SELECTOR := [ id ID ] [ dev DEV ] [ vrf NAME ] [ master DEV ]\n"
-               "            [ groups ]\n"
+               "            [ groups ] [ fdb ]\n"
                "NH := { blackhole | [ via ADDRESS ] [ dev DEV ] [ onlink ]\n"
                "      [ encap ENCAPTYPE ENCAPHDR ] | group GROUP ] }\n"
                "GROUP := [ id[,weight]>/<id[,weight]>/... ]\n"
@@ -70,6 +71,12 @@ static int nh_dump_filter(struct nlmsghdr *nlh, int reqlen)
                        return err;
        }
 
+       if (filter.fdb) {
+               err = addattr_l(nlh, reqlen, NHA_FDB, NULL, 0);
+               if (err)
+                       return err;
+       }
+
        return 0;
 }
 
@@ -259,6 +266,9 @@ int print_nexthop(struct nlmsghdr *n, void *arg)
        if (tb[NHA_OIF])
                print_rt_flags(fp, nhm->nh_flags);
 
+       if (tb[NHA_FDB])
+               print_null(PRINT_ANY, "fdb", "fdb", NULL);
+
        print_string(PRINT_FP, NULL, "%s", "\n");
        close_json_object();
        fflush(fp);
@@ -385,6 +395,8 @@ static int ipnh_modify(int cmd, unsigned int flags, int argc, char **argv)
                        addattr_l(&req.n, sizeof(req), NHA_BLACKHOLE, NULL, 0);
                        if (req.nhm.nh_family == AF_UNSPEC)
                                req.nhm.nh_family = AF_INET;
+               } else if (!strcmp(*argv, "fdb")) {
+                       addattr_l(&req.n, sizeof(req), NHA_FDB, NULL, 0);
                } else if (!strcmp(*argv, "onlink")) {
                        nh_flags |= RTNH_F_ONLINK;
                } else if (!strcmp(*argv, "group")) {
@@ -487,6 +499,8 @@ static int ipnh_list_flush(int argc, char **argv, int action)
                        if (get_unsigned(&proto, *argv, 0))
                                invarg("invalid protocol value", *argv);
                        filter.proto = proto;
+               } else if (!matches(*argv, "fdb")) {
+                       filter.fdb = 1;
                } else if (matches(*argv, "help") == 0) {
                        usage();
                } else {
index 68164f3ca84f57ffd231b2e85bf789f7b7197df5..4d55f4dbcc758c6a94e2feb247634a34c5ccb159 100644 (file)
@@ -38,7 +38,8 @@ ip-nexthop \- nexthop object management
 .IR NAME " ] [ "
 .B  master
 .IR DEV " ] [ "
-.BR  groups " ] "
+.BR  groups " ] [ "
+.BR  fdb " ]"
 
 .ti -8
 .IR NH " := { "
@@ -49,9 +50,11 @@ ip-nexthop \- nexthop object management
 .IR DEV " ] [ "
 .BR onlink " ] [ "
 .B encap
-.IR ENCAP " ] | "
+.IR ENCAP " ] [ "
+.BR fdb " ] | "
 .B  group
-.IR GROUP " } "
+.IR GROUP " [ "
+.BR fdb " ] } "
 
 .ti -8
 .IR ENCAP " := [ "
@@ -125,6 +128,13 @@ weight (id,weight) and a '/' as a separator between entries.
 .TP
 .B blackhole
 create a blackhole nexthop
+.TP
+.B fdb
+nexthop and nexthop groups for use with layer-2 fdb entries.
+A fdb nexthop group can only have fdb nexthops.
+Example: Used to represent a vxlan remote vtep ip. layer-2 vxlan
+fdb entry pointing to an ecmp nexthop group containing multiple
+remote vtep ips.
 .RE
 
 .TP
@@ -148,6 +158,9 @@ show the nexthops using devices enslaved to given master device
 .TP
 .BI groups
 show only nexthop groups
+.TP
+.BI fdb
+show only fdb nexthops and nexthop groups
 .RE
 .TP
 ip nexthop flush
@@ -186,6 +199,17 @@ ip nexthop add id 4 group 1,5/2,11
 Adds a nexthop with id 4. The nexthop is a group using nexthops with ids
 1 and 2 with nexthop 1 at weight 5 and nexthop 2 at weight 11.
 .RE
+.PP
+ip nexthop add id 5 via 192.168.1.2 fdb
+.RS 4
+Adds a fdb nexthop with id 5.
+.RE
+.PP
+ip nexthop add id 7 group 5/6 fdb
+.RS 4
+Adds a fdb nexthop group with id 7. A fdb nexthop group can only have
+fdb nexthops.
+.RE
 .SH SEE ALSO
 .br
 .BR ip (8)