]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgp: first pass at restoring missing vpn&encap show commands (issue#14)
authorLou Berger <lberger@labn.net>
Sun, 18 Dec 2016 18:45:20 +0000 (13:45 -0500)
committerLou Berger <lberger@labn.net>
Mon, 2 Jan 2017 20:04:47 +0000 (15:04 -0500)
Signed-off-by: Lou Berger <lberger@labn.net>
bgpd/bgp_route.c
bgpd/bgp_vty.c
bgpd/bgp_vty.h

index f645da3f2a03551dfd71e6cb74afe514d5ac534b..e4e321ad0590618ef9b0a2fdb82086f9a5bae628 100644 (file)
@@ -4479,7 +4479,6 @@ bgp_config_write_table_map (struct vty *vty, struct bgp *bgp, afi_t afi,
   return 0;
 }
 
-
 DEFUN (bgp_table_map,
        bgp_table_map_cmd,
        "table-map WORD",
@@ -8167,12 +8166,10 @@ DEFUN (show_ip_bgp_ipv4,
        "JavaScript Object Notation\n")
 {
   u_char uj = use_json(argc, argv);
-
-  if (strncmp (argv[0], "m", 1) == 0)
-    return bgp_show (vty, NULL, AFI_IP, SAFI_MULTICAST, bgp_show_type_normal,
-                     NULL, uj);
  
-  return bgp_show (vty, NULL, AFI_IP, SAFI_UNICAST, bgp_show_type_normal, NULL, uj);
+  return bgp_show (vty, NULL, AFI_IP, 
+                   bgp_vty_safi_from_arg(argv[0]), 
+                   bgp_show_type_normal, NULL, uj);
 }
 
 ALIAS (show_ip_bgp_ipv4,
@@ -8218,12 +8215,10 @@ DEFUN (show_ip_bgp_route_pathtype,
 
 DEFUN (show_bgp_ipv4_safi_route_pathtype,
        show_bgp_ipv4_safi_route_pathtype_cmd,
-       "show bgp ipv4 (unicast|multicast) A.B.C.D (bestpath|multipath) {json}",
+       "show bgp ipv4 (unicast|multicast|vpn|encap) A.B.C.D (bestpath|multipath) {json}",
        SHOW_STR
        BGP_STR
-       "Address family\n"
-       "Address Family modifier\n"
-       "Address Family modifier\n"
+       AFI_SAFI_STR
        "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
        "Display only the bestpath\n"
        "Display only multipaths\n"
@@ -8231,16 +8226,14 @@ DEFUN (show_bgp_ipv4_safi_route_pathtype,
 {
   u_char uj = use_json(argc, argv);
 
-  if (strncmp (argv[0], "m", 1) == 0)
-    if (strncmp (argv[2], "b", 1) == 0)
-      return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_MULTICAST, NULL, 0, BGP_PATH_BESTPATH, uj);
-    else
-      return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_MULTICAST, NULL, 0, BGP_PATH_MULTIPATH, uj);
+  if (strncmp (argv[2], "b", 1) == 0)
+    return bgp_show_route (vty, NULL, argv[1], AFI_IP, 
+                           bgp_vty_safi_from_arg(argv[0]), 
+                           NULL, 0, BGP_PATH_BESTPATH, uj);
   else
-    if (strncmp (argv[2], "b", 1) == 0)
-      return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_UNICAST, NULL, 0, BGP_PATH_BESTPATH, uj);
-    else
-      return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_UNICAST, NULL, 0, BGP_PATH_MULTIPATH, uj);
+    return bgp_show_route (vty, NULL, argv[1], AFI_IP, 
+                           bgp_vty_safi_from_arg(argv[0]), 
+                           NULL, 0, BGP_PATH_MULTIPATH, uj);
 }
 
 DEFUN (show_bgp_ipv4_prefix,
@@ -8281,32 +8274,27 @@ DEFUN (show_bgp_ipv6_prefix,
 
 DEFUN (show_ip_bgp_ipv4_route,
        show_ip_bgp_ipv4_route_cmd,
-       "show ip bgp ipv4 (unicast|multicast) A.B.C.D {json}",
+       "show ip bgp ipv4 (unicast|multicast|vpn|encap) A.B.C.D {json}",
        SHOW_STR
        IP_STR
        BGP_STR
-       "Address family\n"
-       "Address Family modifier\n"
-       "Address Family modifier\n"
+       AFI_SAFI_STR
        "Network in the BGP routing table to display\n"
        "JavaScript Object Notation\n")
 {
   u_char uj = use_json(argc, argv);
 
-  if (strncmp (argv[0], "m", 1) == 0)
-    return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_MULTICAST, NULL, 0, BGP_PATH_ALL, uj);
-
-  return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_UNICAST, NULL, 0, BGP_PATH_ALL, uj);
+  return bgp_show_route (vty, NULL, argv[1], AFI_IP, 
+                         bgp_vty_safi_from_arg(argv[0]), 
+                         NULL, 0, BGP_PATH_ALL, uj);
 }
 
 ALIAS (show_ip_bgp_ipv4_route,
        show_bgp_ipv4_safi_route_cmd,
-       "show bgp ipv4 (unicast|multicast) A.B.C.D {json}",
+       "show bgp ipv4 (unicast|multicast|vpn|encap) A.B.C.D {json}",
        SHOW_STR
        BGP_STR
-       "Address family\n"
-       "Address Family modifier\n"
-       "Address Family modifier\n"
+       AFI_SAFI_STR
        "Network in the BGP routing table to display\n"
        "JavaScript Object Notation\n")
 
@@ -8324,78 +8312,123 @@ DEFUN (show_ip_bgp_vpnv4_all_route,
   return bgp_show_route (vty, NULL, argv[0], AFI_IP, SAFI_MPLS_VPN, NULL, 0, BGP_PATH_ALL, use_json(argc, argv));
 }
 
-DEFUN (show_bgp_ipv4_vpn_route,
-       show_bgp_ipv4_vpn_route_cmd,
-       "show bgp ipv4 vpn A.B.C.D {json}",
+DEFUN (show_bgp_ipv4_safi_rd_route,
+       show_bgp_ipv4_safi_rd_route_cmd,
+       "show bgp ipv4 (encap|vpn) rd ASN:nn_or_IP-address:nn A.B.C.D {json}",
        SHOW_STR
        BGP_STR
        "Address Family\n"
-       "Display VPN NLRI specific information\n"
-       "Network in the BGP routing table to display\n"
-       JSON_STR)
+       "Address Family Modifier\n"
+       "Address Family Modifier\n"
+       "Display information for a route distinguisher\n"
+       "ENCAP Route Distinguisher\n"
+       "Network in the BGP routing table to display\n")
 {
-  return bgp_show_route (vty, NULL, argv[0], AFI_IP, SAFI_MPLS_VPN, NULL, 0, BGP_PATH_ALL, use_json (argc, argv));
+  int ret;
+  struct prefix_rd prd;
+  safi_t       safi;
+
+  if (bgp_parse_safi(argv[0], &safi)) {
+    vty_out (vty, "Error: Bad SAFI: %s%s", argv[0], VTY_NEWLINE);
+    return CMD_WARNING;
+  }
+  ret = str2prefix_rd (argv[1], &prd);
+  if (! ret)
+    {
+      vty_out (vty, "%% Malformed Route Distinguisher%s", VTY_NEWLINE);
+      return CMD_WARNING;
+    }
+  return bgp_show_route (vty, NULL, argv[2], AFI_IP, safi, &prd, 0, BGP_PATH_ALL, use_json (argc, argv));
 }
 
-DEFUN (show_bgp_ipv6_vpn_route,
-       show_bgp_ipv6_vpn_route_cmd,
-       "show bgp ipv6 vpn X:X::X:X {json}",
+DEFUN (show_bgp_ipv6_safi_rd_route,
+       show_bgp_ipv6_safi_rd_route_cmd,
+       "show bgp ipv6 (encap|vpn) rd ASN:nn_or_IP-address:nn X:X::X:X {json}",
        SHOW_STR
        BGP_STR
        "Address Family\n"
-       "Display VPN NLRI specific information\n"
-       "Network in the BGP routing table to display\n"
-       JSON_STR)
+       "Address Family Modifier\n"
+       "Address Family Modifier\n"
+       "Display information for a route distinguisher\n"
+       "ENCAP Route Distinguisher\n"
+       "Network in the BGP routing table to display\n")
 {
-  return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_MPLS_VPN, NULL, 0, BGP_PATH_ALL, use_json (argc, argv));
+  int ret;
+  struct prefix_rd prd;
+  safi_t       safi;
+
+  if (bgp_parse_safi(argv[0], &safi)) {
+    vty_out (vty, "Error: Bad SAFI: %s%s", argv[0], VTY_NEWLINE);
+    return CMD_WARNING;
+  }
+  ret = str2prefix_rd (argv[1], &prd);
+  if (! ret)
+    {
+      vty_out (vty, "%% Malformed Route Distinguisher%s", VTY_NEWLINE);
+      return CMD_WARNING;
+    }
+  return bgp_show_route (vty, NULL, argv[2], AFI_IP6, SAFI_ENCAP, &prd, 0, BGP_PATH_ALL, use_json (argc, argv));
 }
 
-DEFUN (show_bgp_ipv4_vpn_rd_route,
-       show_bgp_ipv4_vpn_rd_route_cmd,
-       "show bgp ipv4 vpn rd ASN:nn_or_IP-address:nn A.B.C.D {json}",
+
+DEFUN (show_bgp_ipv4_safi_rd_prefix,
+       show_bgp_ipv4_safi_rd_prefix_cmd,
+       "show bgp ipv4 (encap|vpn) rd ASN:nn_or_IP-address:nn A.B.C.D/M {json}",
        SHOW_STR
        BGP_STR
-       IP_STR
-       "Display VPN NLRI specific information\n"
+       "Address Family\n"
+       "Address Family Modifier\n"
+       "Address Family Modifier\n"
        "Display information for a route distinguisher\n"
-       "VPN Route Distinguisher\n"
-       "Network in the BGP routing table to display\n"
-       JSON_STR)
+       "ENCAP Route Distinguisher\n"
+       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n")
 {
   int ret;
   struct prefix_rd prd;
+  safi_t       safi;
 
-  ret = str2prefix_rd (argv[0], &prd);
+  if (bgp_parse_safi(argv[0], &safi)) {
+    vty_out (vty, "Error: Bad SAFI: %s%s", argv[0], VTY_NEWLINE);
+    return CMD_WARNING;
+  }
+
+  ret = str2prefix_rd (argv[1], &prd);
   if (! ret)
     {
       vty_out (vty, "%% Malformed Route Distinguisher%s", VTY_NEWLINE);
       return CMD_WARNING;
     }
-  return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_MPLS_VPN, &prd, 0, BGP_PATH_ALL, use_json (argc, argv));
+  return bgp_show_route (vty, NULL, argv[2], AFI_IP, safi, &prd, 1, BGP_PATH_ALL, use_json (argc, argv));
 }
 
-DEFUN (show_bgp_ipv6_vpn_rd_route,
-       show_bgp_ipv6_vpn_rd_route_cmd,
-       "show bgp ipv6 vpn rd ASN:nn_or_IP-address:nn X:X::X:X {json}",
+DEFUN (show_bgp_ipv6_safi_rd_prefix,
+       show_bgp_ipv6_safi_rd_prefix_cmd,
+       "show bgp ipv6 (encap|vpn) rd ASN:nn_or_IP-address:nn X:X::X:X/M {json}",
        SHOW_STR
        BGP_STR
        "Address Family\n"
-       "Display VPN NLRI specific information\n"
+       "Address Family Modifier\n"
+       "Address Family Modifier\n"
        "Display information for a route distinguisher\n"
-       "VPN Route Distinguisher\n"
-       "Network in the BGP routing table to display\n"
-       JSON_STR)
+       "ENCAP Route Distinguisher\n"
+       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n")
 {
   int ret;
   struct prefix_rd prd;
+  safi_t       safi;
 
-  ret = str2prefix_rd (argv[0], &prd);
+  if (bgp_parse_safi(argv[0], &safi)) {
+    vty_out (vty, "Error: Bad SAFI: %s%s", argv[0], VTY_NEWLINE);
+    return CMD_WARNING;
+  }
+
+  ret = str2prefix_rd (argv[1], &prd);
   if (! ret)
     {
       vty_out (vty, "%% Malformed Route Distinguisher%s", VTY_NEWLINE);
       return CMD_WARNING;
     }
-  return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_MPLS_VPN, &prd, 0, BGP_PATH_ALL, use_json (argc, argv));
+  return bgp_show_route (vty, NULL, argv[2], AFI_IP6, safi, &prd, 1, BGP_PATH_ALL, use_json (argc, argv));
 }
 
 DEFUN (show_ip_bgp_vpnv4_rd_route,
@@ -8455,44 +8488,37 @@ DEFUN (show_ip_bgp_prefix_pathtype,
 
 DEFUN (show_ip_bgp_ipv4_prefix,
        show_ip_bgp_ipv4_prefix_cmd,
-       "show ip bgp ipv4 (unicast|multicast) A.B.C.D/M {json}",
+       "show ip bgp ipv4 (unicast|multicast|vpn|encap) A.B.C.D/M {json}",
        SHOW_STR
        IP_STR
        BGP_STR
-       "Address family\n"
-       "Address Family modifier\n"
-       "Address Family modifier\n"
+       AFI_SAFI_STR
        "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
        "JavaScript Object Notation\n")
 {
   u_char uj = use_json(argc, argv);
 
-  if (strncmp (argv[0], "m", 1) == 0)
-    return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_MULTICAST, NULL, 1, BGP_PATH_ALL, uj);
-
-  return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_UNICAST, NULL, 1, BGP_PATH_ALL, uj);
+  return bgp_show_route (vty, NULL, argv[1], AFI_IP, 
+                         bgp_vty_safi_from_arg(argv[0]), 
+                         NULL, 1, BGP_PATH_ALL, uj);
 }
 
 ALIAS (show_ip_bgp_ipv4_prefix,
        show_bgp_ipv4_safi_prefix_cmd,
-       "show bgp ipv4 (unicast|multicast) A.B.C.D/M {json}",
+       "show bgp ipv4 (unicast|multicast|vpn|encap) A.B.C.D/M {json}",
        SHOW_STR
        BGP_STR
-       "Address family\n"
-       "Address Family modifier\n"
-       "Address Family modifier\n"
+       AFI_SAFI_STR
        "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
        "JavaScript Object Notation\n")
 
 DEFUN (show_ip_bgp_ipv4_prefix_pathtype,
        show_ip_bgp_ipv4_prefix_pathtype_cmd,
-       "show ip bgp ipv4 (unicast|multicast) A.B.C.D/M (bestpath|multipath) {json}",
+       "show ip bgp ipv4 (unicast|multicast|vpn|encap) A.B.C.D/M (bestpath|multipath) {json}",
        SHOW_STR
        IP_STR
        BGP_STR
-       "Address family\n"
-       "Address Family modifier\n"
-       "Address Family modifier\n"
+       AFI_SAFI_STR
        "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
        "Display only the bestpath\n"
        "Display only multipaths\n"
@@ -8500,26 +8526,22 @@ DEFUN (show_ip_bgp_ipv4_prefix_pathtype,
 {
   u_char uj = use_json(argc, argv);
 
-  if (strncmp (argv[0], "m", 1) == 0)
-    if (strncmp (argv[2], "b", 1) == 0)
-      return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_MULTICAST, NULL, 1, BGP_PATH_BESTPATH, uj);
-    else
-      return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_MULTICAST, NULL, 1, BGP_PATH_MULTIPATH, uj);
+  if (strncmp (argv[2], "b", 1) == 0)
+    return bgp_show_route (vty, NULL, argv[1], AFI_IP, 
+                           bgp_vty_safi_from_arg(argv[0]), 
+                           NULL, 1, BGP_PATH_BESTPATH, uj);
   else
-    if (strncmp (argv[2], "b", 1) == 0)
-      return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_UNICAST, NULL, 1, BGP_PATH_BESTPATH, uj);
-    else
-      return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_UNICAST, NULL, 1, BGP_PATH_MULTIPATH, uj);
+    return bgp_show_route (vty, NULL, argv[1], AFI_IP, 
+                           bgp_vty_safi_from_arg(argv[0]), 
+                           NULL, 1, BGP_PATH_MULTIPATH, uj);
 }
 
 ALIAS (show_ip_bgp_ipv4_prefix_pathtype,
        show_bgp_ipv4_safi_prefix_pathtype_cmd,
-       "show bgp ipv4 (unicast|multicast) A.B.C.D/M (bestpath|multipath) {json}",
+       "show bgp ipv4 (unicast|multicast|vpn|encap) A.B.C.D/M (bestpath|multipath) {json}",
        SHOW_STR
        BGP_STR
-       "Address family\n"
-       "Address Family modifier\n"
-       "Address Family modifier\n"
+       AFI_SAFI_STR
        "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
        "Display only the bestpath\n"
        "Display only multipaths\n"
@@ -8693,14 +8715,14 @@ DEFUN (show_bgp_ipv6_safi,
        "Address family\n"
        "Address Family modifier\n"
        "Address Family modifier\n"
+       AFI_SAFI_STR
        "JavaScript Object Notation\n")
 {
   u_char uj = use_json(argc, argv);
-  if (strncmp (argv[0], "m", 1) == 0)
-    return bgp_show (vty, NULL, AFI_IP6, SAFI_MULTICAST, bgp_show_type_normal,
-                     NULL, uj);
 
-  return bgp_show (vty, NULL, AFI_IP6, SAFI_UNICAST, bgp_show_type_normal, NULL, uj);
+  return bgp_show (vty, NULL, AFI_IP6, 
+                   bgp_vty_safi_from_arg(argv[0]), 
+                   bgp_show_type_normal, NULL, uj);
 }
 
 static void
@@ -8738,20 +8760,18 @@ DEFUN (show_bgp_route,
 
 DEFUN (show_bgp_ipv6_safi_route,
        show_bgp_ipv6_safi_route_cmd,
-       "show bgp ipv6 (unicast|multicast) X:X::X:X {json}",
+       "show bgp ipv6 (unicast|multicast|vpn|encap) X:X::X:X {json}",
        SHOW_STR
        BGP_STR
-       "Address family\n"
-       "Address Family modifier\n"
-       "Address Family modifier\n"
+       AFI_SAFI_STR
        "Network in the BGP routing table to display\n"
        "JavaScript Object Notation\n")
 {
   u_char uj = use_json(argc, argv);
-  if (strncmp (argv[0], "m", 1) == 0)
-    return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_MULTICAST, NULL, 0, BGP_PATH_ALL, uj);
 
-  return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_UNICAST, NULL, 0, BGP_PATH_ALL, uj);
+  return bgp_show_route (vty, NULL, argv[1], AFI_IP6, 
+                   bgp_vty_safi_from_arg(argv[0]), 
+                         NULL, 0, BGP_PATH_ALL, uj);
 }
 
 DEFUN (show_bgp_route_pathtype,
@@ -8784,28 +8804,24 @@ ALIAS (show_bgp_route_pathtype,
 
 DEFUN (show_bgp_ipv6_safi_route_pathtype,
        show_bgp_ipv6_safi_route_pathtype_cmd,
-       "show bgp ipv6 (unicast|multicast) X:X::X:X (bestpath|multipath) {json}",
+       "show bgp ipv6 (unicast|multicast|vpn|encap) X:X::X:X (bestpath|multipath) {json}",
        SHOW_STR
        BGP_STR
-       "Address family\n"
-       "Address Family modifier\n"
-       "Address Family modifier\n"
+       AFI_SAFI_STR
        "Network in the BGP routing table to display\n"
        "Display only the bestpath\n"
        "Display only multipaths\n"
        "JavaScript Object Notation\n")
 {
   u_char uj = use_json(argc, argv);
-  if (strncmp (argv[0], "m", 1) == 0)
-    if (strncmp (argv[2], "b", 1) == 0)
-      return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_MULTICAST, NULL, 0, BGP_PATH_BESTPATH, uj);
-    else
-      return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_MULTICAST, NULL, 0, BGP_PATH_MULTIPATH, uj);
+  if (strncmp (argv[2], "b", 1) == 0)
+    return bgp_show_route (vty, NULL, argv[1], AFI_IP6, 
+                           bgp_vty_safi_from_arg(argv[0]), 
+                           NULL, 0, BGP_PATH_BESTPATH, uj);
   else
-    if (strncmp (argv[2], "b", 1) == 0)
-      return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_UNICAST, NULL, 0, BGP_PATH_BESTPATH, uj);
-    else
-      return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_UNICAST, NULL, 0, BGP_PATH_MULTIPATH, uj);
+    return bgp_show_route (vty, NULL, argv[1], AFI_IP6,
+                           bgp_vty_safi_from_arg(argv[0]), 
+                           NULL, 0, BGP_PATH_MULTIPATH, uj);
 }
 
 /* old command */
@@ -8835,20 +8851,18 @@ DEFUN (show_bgp_prefix,
 
 DEFUN (show_bgp_ipv6_safi_prefix,
        show_bgp_ipv6_safi_prefix_cmd,
-       "show bgp ipv6 (unicast|multicast) X:X::X:X/M {json}",
+       "show bgp ipv6 (unicast|multicast|vpn|encap) X:X::X:X/M {json}",
        SHOW_STR
        BGP_STR
-       "Address family\n"
-       "Address Family modifier\n"
-       "Address Family modifier\n"
+       AFI_SAFI_STR
        "IPv6 prefix <network>/<length>, e.g., 3ffe::/16\n"
        "JavaScript Object Notation\n")
 {
   u_char uj = use_json(argc, argv);
-  if (strncmp (argv[0], "m", 1) == 0)
-    return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_MULTICAST, NULL, 1, BGP_PATH_ALL, uj);
 
-  return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_UNICAST, NULL, 1, BGP_PATH_ALL, uj);
+  return bgp_show_route (vty, NULL, argv[1], AFI_IP6, 
+                   bgp_vty_safi_from_arg(argv[0]), 
+                         NULL, 1, BGP_PATH_ALL, uj);
 }
 
 DEFUN (show_bgp_prefix_pathtype,
@@ -8881,28 +8895,23 @@ ALIAS (show_bgp_prefix_pathtype,
 
 DEFUN (show_bgp_ipv6_safi_prefix_pathtype,
        show_bgp_ipv6_safi_prefix_pathtype_cmd,
-       "show bgp ipv6 (unicast|multicast) X:X::X:X/M (bestpath|multipath) {json}",
+       "show bgp ipv6 (unicast|multicast|vpn|encap) X:X::X:X/M (bestpath|multipath) {json}",
        SHOW_STR
        BGP_STR
-       "Address family\n"
-       "Address Family modifier\n"
-       "Address Family modifier\n"
+       AFI_SAFI_STR
        "IPv6 prefix <network>/<length>, e.g., 3ffe::/16\n"
        "Display only the bestpath\n"
        "Display only multipaths\n"
        "JavaScript Object Notation\n")
 {
   u_char uj = use_json(argc, argv);
-  if (strncmp (argv[0], "m", 1) == 0)
-    if (strncmp (argv[2], "b", 1) == 0)
-      return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_MULTICAST, NULL, 1, BGP_PATH_BESTPATH, uj);
-    else
-      return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_MULTICAST, NULL, 1, BGP_PATH_MULTIPATH, uj);
+  if (strncmp (argv[2], "b", 1) == 0)
+    return bgp_show_route (vty, NULL, argv[1], AFI_IP6,
+                           bgp_vty_safi_from_arg(argv[0]), 
+                           NULL, 1, BGP_PATH_BESTPATH, uj);
   else
-    if (strncmp (argv[2], "b", 1) == 0)
-      return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_UNICAST, NULL, 1, BGP_PATH_BESTPATH, uj);
-    else
-      return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_UNICAST, NULL, 1, BGP_PATH_MULTIPATH, uj);
+    return bgp_show_route (vty, NULL, argv[1], AFI_IP6, 
+                           bgp_vty_safi_from_arg(argv[0]), NULL, 1, BGP_PATH_MULTIPATH, uj);
 }
 
 /* old command */
@@ -14983,11 +14992,10 @@ bgp_route_init (void)
   install_element (VIEW_NODE, &show_ip_bgp_neighbor_damp_cmd);
 
   install_element (VIEW_NODE, &show_bgp_ipv4_prefix_cmd);
-  install_element (VIEW_NODE, &show_bgp_ipv4_vpn_rd_route_cmd);
-  install_element (VIEW_NODE, &show_bgp_ipv4_vpn_route_cmd);
-
-  install_element (VIEW_NODE, &show_bgp_ipv6_vpn_rd_route_cmd);
-  install_element (VIEW_NODE, &show_bgp_ipv6_vpn_route_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv4_safi_rd_route_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv6_safi_rd_route_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv4_safi_rd_prefix_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv6_safi_rd_prefix_cmd);
 
  /* BGP dampening clear commands */
   install_element (ENABLE_NODE, &clear_ip_bgp_dampening_cmd);
index b0d96150a8facf55817e85d6fd01430c16390e30..99d78f38b817336fafa029ba1b1439ea7b699d1d 100644 (file)
@@ -123,25 +123,29 @@ bgp_parse_afi(const char *str, afi_t *afi)
     return -1;
 }
 
+/* supports (unicast|multicast|vpn|encap) */
+safi_t
+bgp_vty_safi_from_arg(const char *safi_str) 
+{
+  safi_t safi = SAFI_MAX;       /* unknown */
+  if (strncmp (safi_str, "m", 1) == 0)
+    safi = SAFI_MULTICAST;
+  else if (strncmp (safi_str, "u", 1) == 0)
+    safi = SAFI_UNICAST;
+  else if (strncmp (safi_str, "e", 1) == 0)
+    safi = SAFI_ENCAP;
+  else if (strncmp (safi_str, "v", 1) == 0)
+   safi = SAFI_MPLS_VPN;
+  return safi;
+}
+
 int
 bgp_parse_safi(const char *str, safi_t *safi)
 {
-    if (!strcmp(str, "encap")) {
-       *safi = SAFI_ENCAP;
-       return 0;
-    }
-    if (!strcmp(str, "multicast")) {
-       *safi =  SAFI_MULTICAST;
-       return 0;
-    }
-    if (!strcmp(str, "unicast")) {
-       *safi =  SAFI_UNICAST;
-       return 0;
-    }
-    if (!strcmp(str, "vpn")) {
-       *safi =  SAFI_MPLS_VPN;
-       return 0;
-    }
+  *safi = bgp_vty_safi_from_arg(str);
+  if (*safi != SAFI_MAX)
+    return 0;
+  else 
     return -1;
 }
 
@@ -6050,14 +6054,24 @@ DEFUN (address_family_ipv4_safi,
        address_family_ipv4_safi_cmd,
        "address-family ipv4 (unicast|multicast)",
        "Enter Address Family command mode\n"
-       "Address family\n"
-       "Address Family modifier\n"
-       "Address Family modifier\n")
+       AFI_SAFI_STR)
 {
-  if (strncmp (argv[0], "m", 1) == 0)
-    vty->node = BGP_IPV4M_NODE;
-  else
-    vty->node = BGP_IPV4_NODE;
+  switch (bgp_vty_safi_from_arg(argv[0]))
+    {
+    case SAFI_MULTICAST:
+      vty->node = BGP_IPV4M_NODE;
+      break;
+    case SAFI_ENCAP:
+      vty->node = BGP_ENCAP_NODE;
+      break;
+    case SAFI_MPLS_VPN:
+      vty->node = BGP_VPNV4_NODE;
+      break;
+    case SAFI_UNICAST:
+    default:
+      vty->node = BGP_IPV4_NODE;
+      break;
+    }
 
   return CMD_SUCCESS;
 }
@@ -10755,60 +10769,27 @@ DEFUN (show_ip_bgp_instance_all_summary,
 
 DEFUN (show_ip_bgp_ipv4_summary, 
        show_ip_bgp_ipv4_summary_cmd,
-       "show ip bgp ipv4 (unicast|multicast) summary {json}",
+       "show ip bgp ipv4 (unicast|multicast|vpn|encap) summary {json}",
        SHOW_STR
        IP_STR
        BGP_STR
-       "Address family\n"
-       "Address Family modifier\n"
-       "Address Family modifier\n"
+       AFI_SAFI_STR
        "Summary of BGP neighbor status\n"
        "JavaScript Object Notation\n")
 {
   u_char uj = use_json(argc, argv);
-  if (strncmp (argv[0], "m", 1) == 0)
-    return bgp_show_summary_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, uj);
 
-  return bgp_show_summary_vty (vty, NULL, AFI_IP, SAFI_UNICAST, uj);
+  return bgp_show_summary_vty (vty, NULL, AFI_IP, bgp_vty_safi_from_arg(argv[0]), uj);
 }
 
 ALIAS (show_ip_bgp_ipv4_summary,
        show_bgp_ipv4_safi_summary_cmd,
-       "show bgp ipv4 (unicast|multicast) summary {json}",
+       "show bgp ipv4 (unicast|multicast|vpn|encap) summary {json}",
        SHOW_STR
        BGP_STR
-       "Address family\n"
-       "Address Family modifier\n"
-       "Address Family modifier\n"
+       AFI_SAFI_STR
        "Summary of BGP neighbor status\n")
 
-DEFUN (show_bgp_ipv4_vpn_summary,
-       show_bgp_ipv4_vpn_summary_cmd,
-       "show bgp ipv4 vpn summary {json}",
-       SHOW_STR
-       BGP_STR
-       "IPv4\n"
-       "Display VPN NLRI specific information\n"
-       "Summary of BGP neighbor status\n"
-       JSON_STR)
-{
-  return bgp_show_summary_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, use_json (argc, argv));
-}
-
-/* `show ip bgp summary' commands. */
-DEFUN (show_bgp_ipv6_vpn_summary,
-       show_bgp_ipv6_vpn_summary_cmd,
-       "show bgp ipv6 vpn summary {json}",
-       SHOW_STR
-       BGP_STR
-       "IPv6\n"
-       "Display VPN NLRI specific information\n"
-       "Summary of BGP neighbor status\n"
-       JSON_STR)
-{
-  return bgp_show_summary_vty (vty, NULL, AFI_IP6, SAFI_MPLS_VPN, use_json (argc, argv));
-}
-
 DEFUN (show_ip_bgp_instance_ipv4_summary,
        show_ip_bgp_instance_ipv4_summary_cmd,
        "show ip bgp view WORD ipv4 (unicast|multicast) summary {json}",
@@ -10837,9 +10818,7 @@ ALIAS (show_ip_bgp_instance_ipv4_summary,
        BGP_STR
        "BGP view\n"
        "View name\n"
-       "Address family\n"
-       "Address Family modifier\n"
-       "Address Family modifier\n"
+       AFI_SAFI_STR
        "Summary of BGP neighbor status\n")
 
 DEFUN (show_ip_bgp_vpnv4_all_summary,
@@ -10941,20 +10920,16 @@ ALIAS (show_bgp_instance_summary,
 
 DEFUN (show_bgp_ipv6_safi_summary,
        show_bgp_ipv6_safi_summary_cmd,
-       "show bgp ipv6 (unicast|multicast) summary {json}",
+       "show bgp ipv6 (unicast|multicast|vpn|encap) summary {json}",
        SHOW_STR
        BGP_STR
-       "Address family\n"
-       "Address Family modifier\n"
-       "Address Family modifier\n"
+       AFI_SAFI_STR
        "Summary of BGP neighbor status\n"
        "JavaScript Object Notation\n")
 {
   u_char uj = use_json(argc, argv);
-  if (strncmp (argv[0], "m", 1) == 0)
-    return bgp_show_summary_vty (vty, NULL, AFI_IP6, SAFI_MULTICAST, uj);
 
-  return bgp_show_summary_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, uj);
+  return bgp_show_summary_vty (vty, NULL, AFI_IP6, bgp_vty_safi_from_arg(argv[0]), uj);
 }
 
 DEFUN (show_bgp_instance_ipv6_safi_summary,
@@ -10963,9 +10938,7 @@ DEFUN (show_bgp_instance_ipv6_safi_summary,
        SHOW_STR
        BGP_STR
        BGP_INSTANCE_HELP_STR
-       "Address family\n"
-       "Address Family modifier\n"
-       "Address Family modifier\n"
+       AFI_SAFI_STR
        "Summary of BGP neighbor status\n"
        "JavaScript Object Notation\n")
 {
@@ -13249,7 +13222,7 @@ DEFUN (show_bgp_instance_all_ipv6_updgrps,
 
 DEFUN (show_bgp_updgrps,
        show_bgp_updgrps_cmd,
-       "show bgp (ipv4|ipv6) (unicast|multicast) update-groups",
+       "show bgp (ipv4|ipv6) (unicast|multicast|vpn|encap) update-groups",
        SHOW_STR
        BGP_STR
        "Address family\n"
@@ -13262,7 +13235,7 @@ DEFUN (show_bgp_updgrps,
   safi_t safi;
 
   afi = (strcmp(argv[0], "ipv4") == 0) ? AFI_IP : AFI_IP6;
-  safi = (strncmp (argv[1], "m", 1) == 0) ? SAFI_MULTICAST : SAFI_UNICAST;
+  safi = bgp_vty_safi_from_arg(argv[1]);
   return (bgp_show_update_groups(vty, NULL, afi, safi, 0));
 }
 
@@ -13327,13 +13300,11 @@ DEFUN (show_bgp_instance_ipv6_updgrps_s,
 
 DEFUN (show_bgp_updgrps_s,
        show_bgp_updgrps_s_cmd,
-       "show bgp (ipv4|ipv6) (unicast|multicast) update-groups SUBGROUP-ID",
+       "show bgp (ipv4|ipv6) (unicast|multicast|vpn|encap) update-groups SUBGROUP-ID",
        SHOW_STR
        BGP_STR
        "Address family\n"
-       "Address family\n"
-       "Address Family modifier\n"
-       "Address Family modifier\n"
+       AFI_SAFI_STR
        "Detailed info about v6 dynamic update groups\n"
        "Specific subgroup to display detailed info for")
 {
@@ -13342,8 +13313,7 @@ DEFUN (show_bgp_updgrps_s,
   uint64_t subgrp_id;
 
   afi = (strcmp(argv[0], "ipv4") == 0) ? AFI_IP : AFI_IP6;
-  safi = (strncmp (argv[1], "m", 1) == 0) ? SAFI_MULTICAST : SAFI_UNICAST;
-
+  safi = bgp_vty_safi_from_arg(argv[1]);
   VTY_GET_ULL("subgroup-id", subgrp_id, argv[2]);
   return(bgp_show_update_groups(vty, NULL, afi, safi, subgrp_id));
 }
@@ -13441,13 +13411,11 @@ DEFUN (show_ip_bgp_instance_updgrps_adj,
 
 DEFUN (show_bgp_updgrps_afi_adj,
        show_bgp_updgrps_afi_adj_cmd,
-       "show bgp (ipv4|ipv6) (unicast|multicast) update-groups (advertise-queue|advertised-routes|packet-queue)",
+       "show bgp (ipv4|ipv6) (unicast|multicast|vpn|encap) update-groups (advertise-queue|advertised-routes|packet-queue)",
        SHOW_STR
        BGP_STR
        "Address family\n"
-       "Address family\n"
-       "Address Family modifier\n"
-       "Address Family modifier\n"
+       AFI_SAFI_STR
        "BGP update groups\n"
        "Advertisement queue\n"
        "Announced routes\n"
@@ -13458,7 +13426,7 @@ DEFUN (show_bgp_updgrps_afi_adj,
   safi_t safi;
 
   afi = (strcmp(argv[0], "ipv4") == 0) ? AFI_IP : AFI_IP6;
-  safi = (strncmp (argv[1], "m", 1) == 0) ? SAFI_MULTICAST : SAFI_UNICAST;
+  safi = bgp_vty_safi_from_arg(argv[1]);
   show_bgp_updgrps_adj_info_aux(vty, NULL, afi, safi, argv[2], 0);
   return CMD_SUCCESS;
 }
@@ -13537,13 +13505,11 @@ DEFUN (show_ip_bgp_instance_updgrps_adj_s,
 
 DEFUN (show_bgp_updgrps_afi_adj_s,
        show_bgp_updgrps_afi_adj_s_cmd,
-       "show bgp (ipv4|ipv6) (unicast|multicast) update-groups SUBGROUP-ID (advertise-queue|advertised-routes|packet-queue)",
+       "show bgp (ipv4|ipv6) (unicast|multicast|vpn|encap) update-groups SUBGROUP-ID (advertise-queue|advertised-routes|packet-queue)",
        SHOW_STR
        BGP_STR
        "Address family\n"
-       "Address family\n"
-       "Address Family modifier\n"
-       "Address Family modifier\n"
+       AFI_SAFI_STR
        "BGP update groups\n"
        "Specific subgroup to display info for\n"
        "Advertisement queue\n"
@@ -13556,7 +13522,7 @@ DEFUN (show_bgp_updgrps_afi_adj_s,
   uint64_t subgrp_id;
 
   afi = (strcmp(argv[0], "ipv4") == 0) ? AFI_IP : AFI_IP6;
-  safi = (strncmp (argv[1], "m", 1) == 0) ? SAFI_MULTICAST : SAFI_UNICAST;
+  safi = bgp_vty_safi_from_arg(argv[1]);
   VTY_GET_ULL("subgroup-id", subgrp_id, argv[2]);
 
   show_bgp_updgrps_adj_info_aux(vty, NULL, afi, safi, argv[3], subgrp_id);
@@ -16023,10 +15989,6 @@ bgp_vty_init (void)
   install_element (VIEW_NODE, &show_bgp_instance_ipv6_safi_summary_cmd);
 #endif /* HAVE_IPV6 */
 
-  install_element (VIEW_NODE, &show_bgp_ipv4_vpn_summary_cmd);
-
-  install_element (VIEW_NODE, &show_bgp_ipv6_vpn_summary_cmd);
-
   /* "show ip bgp neighbors" commands. */
   install_element (VIEW_NODE, &show_ip_bgp_neighbors_cmd);
   install_element (VIEW_NODE, &show_ip_bgp_ipv4_neighbors_cmd);
index 573e8c707213be387be4e977d9557e9193d62208..6b4e51bc5055da74d64a806942575a0e658ece3a 100644 (file)
@@ -30,6 +30,13 @@ struct bgp;
 #define BGP_INSTANCE_ALL_CMD "(view|vrf) all"
 #define BGP_INSTANCE_ALL_HELP_STR "BGP view\nBGP VRF\nAll Views/VRFs\n"
 
+#define AFI_SAFI_STR \
+  "Address family\n" \
+  "Address Family modifier\n" \
+  "Address Family modifier\n" \
+  "Address Family modifier\n" \
+  "Address Family modifier\n"
+
 extern void bgp_vty_init (void);
 extern const char *afi_safi_print (afi_t, safi_t);
 extern int bgp_config_write_update_delay (struct vty *, struct bgp *);
@@ -46,4 +53,7 @@ bgp_parse_afi(const char *str, afi_t *afi);
 extern int
 bgp_parse_safi(const char *str, safi_t *safi);
 
+extern safi_t
+bgp_vty_safi_from_arg(const char *safi_str);
+
 #endif /* _QUAGGA_BGP_VTY_H */