]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: Update EVPN operational commands
authorvivek <vivek@cumulusnetworks.com>
Thu, 8 Jun 2017 05:43:19 +0000 (22:43 -0700)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Tue, 8 Aug 2017 14:09:36 +0000 (10:09 -0400)
Make EVPN operational commands follow the "<afi> <safi>" syntax.
The relevant commands are:
- show bgp l2vpn evpn summary
- show bgp l2vpn evpn vni ...
- show bgp l2vpn evpn route ...
- show bgp l2vpn evpn route vni ...
- show bgp l2vpn evpn import-rt

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
bgpd/bgp_evpn_vty.c

index 1225354c0a024ac2255ecadcbc3370a4fbfde579..c3eb32b91dd0e85d624aa578e7b44c696aaf54fd 100644 (file)
@@ -1739,56 +1739,54 @@ DEFUN (no_bgp_evpn_advertise_all_vni,
        return CMD_SUCCESS;
 }
 
-DEFUN (show_bgp_evpn_vni,
-       show_bgp_evpn_vni_cmd,
-       "show bgp evpn vni",
+/*
+ * Display VNI information - for all or a specific VNI
+ */
+DEFUN (show_bgp_l2vpn_evpn_vni,
+       show_bgp_l2vpn_evpn_vni_cmd,
+       "show bgp l2vpn evpn vni [(1-16777215)]",
        SHOW_STR
        BGP_STR
+       L2VPN_HELP_STR
        EVPN_HELP_STR
-       "Show VNI\n")
-{
-       struct bgp *bgp;
-
-       bgp = bgp_get_default();
-       if (!bgp)
-               return CMD_WARNING;
-
-       vty_out(vty, "Advertise All VNI flag: %s\n",
-               bgp->advertise_all_vni ? "Enabled" : "Disabled");
-
-       evpn_show_all_vnis(vty, bgp);
-       return CMD_SUCCESS;
-}
-
-DEFUN (show_bgp_evpn_vni_num,
-       show_bgp_evpn_vni_num_cmd,
-       "show bgp evpn vni (1-16777215)",
-       SHOW_STR
-       BGP_STR
-       "Address family modifier\n"
        "Show VNI\n"
        "VNI number\n")
 {
-       vni_t vni;
        struct bgp *bgp;
+       vni_t vni;
+       int idx = 0;
 
        bgp = bgp_get_default();
        if (!bgp)
                return CMD_WARNING;
 
-       vni = strtoul(argv[4]->arg, NULL, 10);
+       if (!argv_find(argv, argc, "evpn", &idx))
+               return CMD_WARNING;
+
+       if (argc == ((idx + 1) + 1)) {
+               /* Display all VNIs */
+               vty_out(vty, "Advertise All VNI flag: %s\n",
+                       bgp->advertise_all_vni ? "Enabled" : "Disabled");
+               evpn_show_all_vnis(vty, bgp);
+       } else {
+               /* Display specific VNI */
+               vni = strtoul(argv[argc - 1]->arg, NULL, 10);
+               evpn_show_vni(vty, bgp, vni);
+       }
 
-       evpn_show_vni(vty, bgp, vni);
        return CMD_SUCCESS;
 }
 
-/* `show bgp evpn summary' commands. */
-DEFUN (show_bgp_evpn_summary,
-       show_bgp_evpn_summary_cmd,
-       "show bgp evpn summary [json]",
+/*
+ * Display EVPN neighbor summary.
+ */
+DEFUN (show_bgp_l2vpn_evpn_summary,
+       show_bgp_l2vpn_evpn_summary_cmd,
+       "show bgp l2vpn evpn summary [json]",
        SHOW_STR
        BGP_STR
-       "EVPN\n"
+       L2VPN_HELP_STR
+       EVPN_HELP_STR
        "Summary of BGP neighbor status\n"
        "JavaScript Object Notation\n")
 {
@@ -1796,29 +1794,37 @@ DEFUN (show_bgp_evpn_summary,
        return bgp_show_summary_vty(vty, NULL, AFI_L2VPN, SAFI_EVPN, uj);
 }
 
-/* Show bgp evpn route */
-DEFUN (show_bgp_evpn_route,
-       show_bgp_evpn_route_cmd,
-       "show bgp evpn route [type <macip|multicast>]",
+/*
+ * Display global EVPN routing table.
+ */
+DEFUN (show_bgp_l2vpn_evpn_route,
+       show_bgp_l2vpn_evpn_route_cmd,
+       "show bgp l2vpn evpn route [type <macip|multicast>]",
        SHOW_STR
        BGP_STR
-       "Address Family Modifier\n"
-       "Display EVPN route information\n"
+       L2VPN_HELP_STR
+       EVPN_HELP_STR
+       "EVPN route information\n"
        "Specify Route type\n"
        "MAC-IP (Type-2) route\n"
        "Multicast (Type-3) route\n")
 {
        struct bgp *bgp;
+       int idx = 0;
        int type = 0;
 
        bgp = bgp_get_default();
        if (!bgp)
                return CMD_WARNING;
 
-       if (argc == 6) {
-               if (strncmp(argv[5]->arg, "ma", 2) == 0)
+       if (!argv_find(argv, argc, "evpn", &idx))
+               return CMD_WARNING;
+
+       if (argc == ((idx + 1) + 3)) {
+               /* Specific type is requested */
+               if (strncmp(argv[argc - 1]->arg, "ma", 2) == 0)
                        type = BGP_EVPN_MAC_IP_ROUTE;
-               else if (strncmp(argv[5]->arg, "mu", 2) == 0)
+               else if (strncmp(argv[argc - 1]->arg, "mu", 2) == 0)
                        type = BGP_EVPN_IMET_ROUTE;
                else
                        return CMD_WARNING;
@@ -1828,13 +1834,17 @@ DEFUN (show_bgp_evpn_route,
        return CMD_SUCCESS;
 }
 
-DEFUN (show_bgp_evpn_route_rd,
-       show_bgp_evpn_route_rd_cmd,
-       "show bgp evpn route rd ASN:nn_or_IP-address:nn [type <macip|multicast>]",
+/*
+ * Display global EVPN routing table for specific RD.
+ */
+DEFUN (show_bgp_l2vpn_evpn_route_rd,
+       show_bgp_l2vpn_evpn_route_rd_cmd,
+       "show bgp l2vpn evpn route rd ASN:nn_or_IP-address:nn [type <macip|multicast>]",
        SHOW_STR
        BGP_STR
-       "Address Family Modifier\n"
-       "Display EVPN route information\n"
+       L2VPN_HELP_STR
+       EVPN_HELP_STR
+       "EVPN route information\n"
        "Route Distinguisher\n"
        "ASN:XX or A.B.C.D:XX\n"
        "Specify Route type\n"
@@ -1844,22 +1854,27 @@ DEFUN (show_bgp_evpn_route_rd,
        struct bgp *bgp;
        int ret;
        struct prefix_rd prd;
+       int idx = 0;
        int type = 0;
 
        bgp = bgp_get_default();
        if (!bgp)
                return CMD_WARNING;
 
-       ret = str2prefix_rd(argv[5]->arg, &prd);
+       if (!argv_find(argv, argc, "evpn", &idx))
+               return CMD_WARNING;
+
+       ret = str2prefix_rd(argv[idx + 3]->arg, &prd);
        if (!ret) {
                vty_out(vty, "%% Malformed Route Distinguisher\n");
                return CMD_WARNING;
        }
 
-       if (argc == 8) {
-               if (strncmp(argv[7]->arg, "ma", 2) == 0)
+       if (argc == ((idx + 1) + 5)) {
+               /* Specific type is requested */
+               if (strncmp(argv[argc - 1]->arg, "ma", 2) == 0)
                        type = BGP_EVPN_MAC_IP_ROUTE;
-               else if (strncmp(argv[7]->arg, "mu", 2) == 0)
+               else if (strncmp(argv[argc - 1]->arg, "mu", 2) == 0)
                        type = BGP_EVPN_IMET_ROUTE;
                else
                        return CMD_WARNING;
@@ -1869,13 +1884,17 @@ DEFUN (show_bgp_evpn_route_rd,
        return CMD_SUCCESS;
 }
 
-DEFUN (show_bgp_evpn_route_rd_macip,
-       show_bgp_evpn_route_rd_macip_cmd,
-       "show bgp evpn route rd ASN:nn_or_IP-address:nn mac WORD [ip WORD]",
+/*
+ * Display global EVPN routing table for specific RD and MACIP.
+ */
+DEFUN (show_bgp_l2vpn_evpn_route_rd_macip,
+       show_bgp_l2vpn_evpn_route_rd_macip_cmd,
+       "show bgp l2vpn evpn route rd ASN:nn_or_IP-address:nn mac WORD [ip WORD]",
        SHOW_STR
        BGP_STR
-       "Address Family Modifier\n"
-       "Display EVPN route information\n"
+       L2VPN_HELP_STR
+       EVPN_HELP_STR
+       "EVPN route information\n"
        "Route Distinguisher\n"
        "ASN:XX or A.B.C.D:XX\n"
        "MAC\n"
@@ -1888,23 +1907,28 @@ DEFUN (show_bgp_evpn_route_rd_macip,
        struct prefix_rd prd;
        struct ethaddr mac;
        struct ipaddr ip;
+       int idx = 0;
 
        bgp = bgp_get_default();
        if (!bgp)
                return CMD_WARNING;
 
-       ret = str2prefix_rd(argv[5]->arg, &prd);
+       if (!argv_find(argv, argc, "evpn", &idx))
+               return CMD_WARNING;
+
+       ret = str2prefix_rd(argv[idx + 3]->arg, &prd);
        if (!ret) {
                vty_out(vty, "%% Malformed Route Distinguisher\n");
                return CMD_WARNING;
        }
-       if (!prefix_str2mac(argv[7]->arg, &mac)) {
+       if (!prefix_str2mac(argv[idx + 5]->arg, &mac)) {
                vty_out(vty, "%% Malformed MAC address\n");
                return CMD_WARNING;
        }
        memset(&ip, 0, sizeof(ip));
-       if (argc == 10 && argv[9]->arg != NULL) {
-               if (str2ipaddr(argv[9]->arg, &ip) != 0) {
+       if (argc == (idx + 1 + 7) && argv[argc - 1]->arg != NULL) {
+               /* Specific MAC+IP requested */
+               if (str2ipaddr(argv[argc - 1]->arg, &ip) != 0) {
                        vty_out(vty, "%% Malformed IP address\n");
                        return CMD_WARNING;
                }
@@ -1914,13 +1938,17 @@ DEFUN (show_bgp_evpn_route_rd_macip,
        return CMD_SUCCESS;
 }
 
-DEFUN (show_bgp_evpn_route_vni,
-       show_bgp_evpn_route_vni_cmd,
-       "show bgp evpn route vni (1-16777215) [<type <macip|multicast> | vtep A.B.C.D>]",
+/*
+ * Display per-VNI EVPN routing table.
+ */
+DEFUN (show_bgp_l2vpn_evpn_route_vni,
+       show_bgp_l2vpn_evpn_route_vni_cmd,
+       "show bgp l2vpn evpn route vni (1-16777215) [<type <macip|multicast> | vtep A.B.C.D>]",
        SHOW_STR
        BGP_STR
-       "Address Family Modifier\n"
-       "Display EVPN route information\n"
+       L2VPN_HELP_STR
+       EVPN_HELP_STR
+       "EVPN route information\n"
        "VXLAN Network Identifier\n"
        "VNI number\n"
        "Specify Route type\n"
@@ -1933,25 +1961,29 @@ DEFUN (show_bgp_evpn_route_vni,
        struct bgp *bgp;
        struct in_addr vtep_ip;
        int type = 0;
+       int idx = 0;
 
        bgp = bgp_get_default();
        if (!bgp)
                return CMD_WARNING;
 
+       if (!argv_find(argv, argc, "evpn", &idx))
+               return CMD_WARNING;
+
        vtep_ip.s_addr = 0;
 
-       vni = strtoul(argv[5]->arg, NULL, 10);
+       vni = strtoul(argv[idx + 3]->arg, NULL, 10);
 
-       if (argc == 8 && argv[6]->arg) {
-               if (strncmp(argv[6]->arg, "type", 4) == 0) {
-                       if (strncmp(argv[7]->arg, "ma", 2) == 0)
+       if (argc == (idx + 1 + 5) && argv[idx + 4]->arg) {
+               if (strncmp(argv[idx + 4]->arg, "type", 4) == 0) {
+                       if (strncmp(argv[idx + 5]->arg, "ma", 2) == 0)
                                type = BGP_EVPN_MAC_IP_ROUTE;
-                       else if (strncmp(argv[7]->arg, "mu", 2) == 0)
+                       else if (strncmp(argv[idx + 5]->arg, "mu", 2) == 0)
                                type = BGP_EVPN_IMET_ROUTE;
                        else
                                return CMD_WARNING;
-               } else if (strncmp(argv[6]->arg, "vtep", 4) == 0) {
-                       if (!inet_aton(argv[7]->arg, &vtep_ip)) {
+               } else if (strncmp(argv[idx + 4]->arg, "vtep", 4) == 0) {
+                       if (!inet_aton(argv[idx + 5]->arg, &vtep_ip)) {
                                vty_out(vty, "%% Malformed VTEP IP address\n");
                                return CMD_WARNING;
                        }
@@ -1963,13 +1995,17 @@ DEFUN (show_bgp_evpn_route_vni,
        return CMD_SUCCESS;
 }
 
-DEFUN (show_bgp_evpn_route_vni_macip,
-       show_bgp_evpn_route_vni_macip_cmd,
-       "show bgp evpn route vni (1-16777215) mac WORD [ip WORD]",
+/*
+ * Display per-VNI EVPN routing table for specific MACIP.
+ */
+DEFUN (show_bgp_l2vpn_evpn_route_vni_macip,
+       show_bgp_l2vpn_evpn_route_vni_macip_cmd,
+       "show bgp l2vpn evpn route vni (1-16777215) mac WORD [ip WORD]",
        SHOW_STR
        BGP_STR
-       "Address Family Modifier\n"
-       "Display EVPN route information\n"
+       L2VPN_HELP_STR
+       EVPN_HELP_STR
+       "EVPN route information\n"
        "VXLAN Network Identifier\n"
        "VNI number\n"
        "MAC\n"
@@ -1981,19 +2017,23 @@ DEFUN (show_bgp_evpn_route_vni_macip,
        struct bgp *bgp;
        struct ethaddr mac;
        struct ipaddr ip;
+       int idx = 0;
 
        bgp = bgp_get_default();
        if (!bgp)
                return CMD_WARNING;
 
-       vni = strtoul(argv[5]->arg, NULL, 10);
-       if (!prefix_str2mac(argv[7]->arg, &mac)) {
+       if (!argv_find(argv, argc, "evpn", &idx))
+               return CMD_WARNING;
+
+       vni = strtoul(argv[idx + 3]->arg, NULL, 10);
+       if (!prefix_str2mac(argv[idx + 5]->arg, &mac)) {
                vty_out(vty, "%% Malformed MAC address\n");
                return CMD_WARNING;
        }
        memset(&ip, 0, sizeof(ip));
-       if (argc == 10 && argv[9]->arg != NULL) {
-               if (str2ipaddr(argv[9]->arg, &ip) != 0) {
+       if (argc == (idx + 1 + 7) && argv[idx + 7]->arg != NULL) {
+               if (str2ipaddr(argv[idx + 7]->arg, &ip) != 0) {
                        vty_out(vty, "%% Malformed IP address\n");
                        return CMD_WARNING;
                }
@@ -2003,13 +2043,17 @@ DEFUN (show_bgp_evpn_route_vni_macip,
        return CMD_SUCCESS;
 }
 
-DEFUN (show_bgp_evpn_route_vni_multicast,
-       show_bgp_evpn_route_vni_multicast_cmd,
-       "show bgp evpn route vni (1-16777215) multicast A.B.C.D",
+/*
+ * Display per-VNI EVPN routing table for specific multicast IP (remote VTEP).
+ */
+DEFUN (show_bgp_l2vpn_evpn_route_vni_multicast,
+       show_bgp_l2vpn_evpn_route_vni_multicast_cmd,
+       "show bgp l2vpn evpn route vni (1-16777215) multicast A.B.C.D",
        SHOW_STR
        BGP_STR
-       "Address Family Modifier\n"
-       "Display EVPN route information\n"
+       L2VPN_HELP_STR
+       EVPN_HELP_STR
+       "EVPN route information\n"
        "VXLAN Network Identifier\n"
        "VNI number\n"
        "Multicast (Type-3) route\n"
@@ -2019,13 +2063,17 @@ DEFUN (show_bgp_evpn_route_vni_multicast,
        struct bgp *bgp;
        int ret;
        struct in_addr orig_ip;
+       int idx = 0;
 
        bgp = bgp_get_default();
        if (!bgp)
                return CMD_WARNING;
 
-       vni = strtoul(argv[5]->arg, NULL, 10);
-       ret = inet_aton(argv[7]->arg, &orig_ip);
+       if (!argv_find(argv, argc, "evpn", &idx))
+               return CMD_WARNING;
+
+       vni = strtoul(argv[idx + 3]->arg, NULL, 10);
+       ret = inet_aton(argv[idx + 5]->arg, &orig_ip);
        if (!ret) {
                vty_out(vty, "%% Malformed Originating Router IP address\n");
                return CMD_WARNING;
@@ -2035,13 +2083,17 @@ DEFUN (show_bgp_evpn_route_vni_multicast,
        return CMD_SUCCESS;
 }
 
-DEFUN (show_bgp_evpn_route_vni_all,
-       show_bgp_evpn_route_vni_all_cmd,
-       "show bgp evpn route vni all [vtep A.B.C.D]",
+/*
+ * Display per-VNI EVPN routing table - for all VNIs.
+ */
+DEFUN (show_bgp_l2vpn_evpn_route_vni_all,
+       show_bgp_l2vpn_evpn_route_vni_all_cmd,
+       "show bgp l2vpn evpn route vni all [vtep A.B.C.D]",
        SHOW_STR
        BGP_STR
-       "Address Family Modifier\n"
-       "Display EVPN route information\n"
+       L2VPN_HELP_STR
+       EVPN_HELP_STR
+       "EVPN route information\n"
        "VXLAN Network Identifier\n"
        "All VNIs\n"
        "Remote VTEP\n"
@@ -2049,14 +2101,18 @@ DEFUN (show_bgp_evpn_route_vni_all,
 {
        struct bgp *bgp;
        struct in_addr vtep_ip;
+       int idx = 0;
 
        bgp = bgp_get_default();
        if (!bgp)
                return CMD_WARNING;
 
+       if (!argv_find(argv, argc, "evpn", &idx))
+               return CMD_WARNING;
+
        vtep_ip.s_addr = 0;
-       if (argc == 8 && argv[7]->arg) {
-               if (!inet_aton(argv[7]->arg, &vtep_ip)) {
+       if (argc == (idx + 1 + 5) && argv[idx + 5]->arg) {
+               if (!inet_aton(argv[idx + 5]->arg, &vtep_ip)) {
                        vty_out(vty, "%% Malformed VTEP IP address\n");
                        return CMD_WARNING;
                }
@@ -2066,12 +2122,16 @@ DEFUN (show_bgp_evpn_route_vni_all,
        return CMD_SUCCESS;
 }
 
-DEFUN (show_bgp_evpn_import_rt,
-       show_bgp_evpn_import_rt_cmd,
-       "show bgp evpn import-rt",
+/*
+ * Display EVPN import route-target hash table
+ */
+DEFUN (show_bgp_l2vpn_evpn_import_rt,
+       show_bgp_l2vpn_evpn_import_rt_cmd,
+       "show bgp l2vpn evpn import-rt",
        SHOW_STR
        BGP_STR
-       "Address family modifier\n"
+       L2VPN_HELP_STR
+       EVPN_HELP_STR
        "Show import route target\n")
 {
        struct bgp *bgp;
@@ -2510,18 +2570,18 @@ void bgp_ethernetvpn_init(void)
        install_element(BGP_EVPN_NODE, &bgp_evpn_advertise_all_vni_cmd);
        install_element(BGP_EVPN_NODE, &no_bgp_evpn_advertise_all_vni_cmd);
 
-       /* "show bgp evpn" commands. */
-       install_element(VIEW_NODE, &show_bgp_evpn_vni_cmd);
-       install_element(VIEW_NODE, &show_bgp_evpn_vni_num_cmd);
-       install_element(VIEW_NODE, &show_bgp_evpn_summary_cmd);
-       install_element(VIEW_NODE, &show_bgp_evpn_route_cmd);
-       install_element(VIEW_NODE, &show_bgp_evpn_route_rd_cmd);
-       install_element(VIEW_NODE, &show_bgp_evpn_route_rd_macip_cmd);
-       install_element(VIEW_NODE, &show_bgp_evpn_route_vni_cmd);
-       install_element(VIEW_NODE, &show_bgp_evpn_route_vni_multicast_cmd);
-       install_element(VIEW_NODE, &show_bgp_evpn_route_vni_macip_cmd);
-       install_element(VIEW_NODE, &show_bgp_evpn_route_vni_all_cmd);
-       install_element(VIEW_NODE, &show_bgp_evpn_import_rt_cmd);
+       /* "show bgp l2vpn evpn" commands. */
+       install_element(VIEW_NODE, &show_bgp_l2vpn_evpn_vni_cmd);
+       install_element(VIEW_NODE, &show_bgp_l2vpn_evpn_summary_cmd);
+       install_element(VIEW_NODE, &show_bgp_l2vpn_evpn_route_cmd);
+       install_element(VIEW_NODE, &show_bgp_l2vpn_evpn_route_rd_cmd);
+       install_element(VIEW_NODE, &show_bgp_l2vpn_evpn_route_rd_macip_cmd);
+       install_element(VIEW_NODE, &show_bgp_l2vpn_evpn_route_vni_cmd);
+       install_element(VIEW_NODE,
+                       &show_bgp_l2vpn_evpn_route_vni_multicast_cmd);
+       install_element(VIEW_NODE, &show_bgp_l2vpn_evpn_route_vni_macip_cmd);
+       install_element(VIEW_NODE, &show_bgp_l2vpn_evpn_route_vni_all_cmd);
+       install_element(VIEW_NODE, &show_bgp_l2vpn_evpn_import_rt_cmd);
 
        install_element(BGP_EVPN_NODE, &bgp_evpn_vni_cmd);
        install_element(BGP_EVPN_NODE, &no_bgp_evpn_vni_cmd);