From: Daniel Walton <[email protected]>

Signed-off-by: Daniel Walton <[email protected]>
---
 bgpd/bgp_route.c | 309 ++++++++++++++++++++++++++++++++++++++++++++++++-------
 bgpd/bgp_route.h |   7 ++
 2 files changed, 279 insertions(+), 37 deletions(-)

diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index 9240497..972ec0e 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -6683,7 +6683,7 @@ static int
 bgp_show_route_in_table (struct vty *vty, struct bgp *bgp, 
                          struct bgp_table *rib, const char *ip_str,
                          afi_t afi, safi_t safi, struct prefix_rd *prd,
-                         int prefix_check)
+                         int prefix_check, enum bgp_path_type pathtype)
 {
   int ret;
   int header;
@@ -6733,7 +6733,12 @@ bgp_show_route_in_table (struct vty *vty, struct bgp 
*bgp,
                           header = 0;
                         }
                       display++;
-                      route_vty_out_detail (vty, bgp, &rm->p, ri, AFI_IP, 
SAFI_MPLS_VPN);
+
+                      if (pathtype == BGP_PATH_ALL ||
+                          (pathtype == BGP_PATH_BESTPATH && CHECK_FLAG 
(ri->flags, BGP_INFO_SELECTED)) ||
+                          (pathtype == BGP_PATH_MULTIPATH &&
+                           (CHECK_FLAG (ri->flags, BGP_INFO_MULTIPATH) || 
CHECK_FLAG (ri->flags, BGP_INFO_SELECTED))))
+                        route_vty_out_detail (vty, bgp, &rm->p, ri, AFI_IP, 
SAFI_MPLS_VPN);
                     }
 
                   bgp_unlock_node (rm);
@@ -6757,7 +6762,12 @@ bgp_show_route_in_table (struct vty *vty, struct bgp 
*bgp,
                       header = 0;
                     }
                   display++;
-                  route_vty_out_detail (vty, bgp, &rn->p, ri, afi, safi);
+
+                  if (pathtype == BGP_PATH_ALL ||
+                      (pathtype == BGP_PATH_BESTPATH && CHECK_FLAG (ri->flags, 
BGP_INFO_SELECTED)) ||
+                      (pathtype == BGP_PATH_MULTIPATH &&
+                       (CHECK_FLAG (ri->flags, BGP_INFO_MULTIPATH) || 
CHECK_FLAG (ri->flags, BGP_INFO_SELECTED))))
+                    route_vty_out_detail (vty, bgp, &rn->p, ri, afi, safi);
                 }
             }
 
@@ -6778,7 +6788,7 @@ bgp_show_route_in_table (struct vty *vty, struct bgp *bgp,
 static int
 bgp_show_route (struct vty *vty, const char *view_name, const char *ip_str,
                afi_t afi, safi_t safi, struct prefix_rd *prd,
-               int prefix_check)
+               int prefix_check, enum bgp_path_type pathtype)
 {
   struct bgp *bgp;
 
@@ -6803,7 +6813,7 @@ bgp_show_route (struct vty *vty, const char *view_name, 
const char *ip_str,
     }
  
   return bgp_show_route_in_table (vty, bgp, bgp->rib[afi][safi], ip_str, 
-                                   afi, safi, prd, prefix_check);
+                                  afi, safi, prd, prefix_check, pathtype);
 }
 
 /* BGP route print out function. */
@@ -6851,7 +6861,47 @@ DEFUN (show_ip_bgp_route,
        BGP_STR
        "Network in the BGP routing table to display\n")
 {
-  return bgp_show_route (vty, NULL, argv[0], AFI_IP, SAFI_UNICAST, NULL, 0);
+  return bgp_show_route (vty, NULL, argv[0], AFI_IP, SAFI_UNICAST, NULL, 0, 
BGP_PATH_ALL);
+}
+
+DEFUN (show_ip_bgp_route_pathtype,
+       show_ip_bgp_route_pathtype_cmd,
+       "show ip bgp A.B.C.D (bestpath|multipath)",
+       SHOW_STR
+       IP_STR
+       BGP_STR
+       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
+       "Display only the bestpath\n"
+       "Display only multipaths\n")
+{
+  if (strncmp (argv[1], "b", 1) == 0)
+    return bgp_show_route (vty, NULL, argv[0], AFI_IP, SAFI_UNICAST, NULL, 0, 
BGP_PATH_BESTPATH);
+  else
+    return bgp_show_route (vty, NULL, argv[0], AFI_IP, SAFI_UNICAST, NULL, 0, 
BGP_PATH_MULTIPATH);
+}
+
+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)",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "Address Family modifier\n"
+       "Address Family modifier\n"
+       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
+       "Display only the bestpath\n"
+       "Display only multipaths\n")
+{
+  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);
+    else
+      return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_MULTICAST, NULL, 
0, BGP_PATH_MULTIPATH);
+  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);
+    else
+      return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_UNICAST, NULL, 
0, BGP_PATH_MULTIPATH);
 }
 
 DEFUN (show_ip_bgp_ipv4_route,
@@ -6866,9 +6916,9 @@ DEFUN (show_ip_bgp_ipv4_route,
        "Network in the BGP routing table to display\n")
 {
   if (strncmp (argv[0], "m", 1) == 0)
-    return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_MULTICAST, NULL, 
0);
+    return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_MULTICAST, NULL, 
0, BGP_PATH_ALL);
 
-  return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_UNICAST, NULL, 0);
+  return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_UNICAST, NULL, 0, 
BGP_PATH_ALL);
 }
 
 ALIAS (show_ip_bgp_ipv4_route,
@@ -6891,9 +6941,10 @@ DEFUN (show_ip_bgp_vpnv4_all_route,
        "Display information about all VPNv4 NLRIs\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);
+  return bgp_show_route (vty, NULL, argv[0], AFI_IP, SAFI_MPLS_VPN, NULL, 0, 
BGP_PATH_ALL);
 }
 
+
 DEFUN (show_ip_bgp_vpnv4_rd_route,
        show_ip_bgp_vpnv4_rd_route_cmd,
        "show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn A.B.C.D",
@@ -6914,7 +6965,7 @@ DEFUN (show_ip_bgp_vpnv4_rd_route,
       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);
+  return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_MPLS_VPN, &prd, 0, 
BGP_PATH_ALL);
 }
 
 DEFUN (show_ip_bgp_prefix,
@@ -6925,7 +6976,23 @@ DEFUN (show_ip_bgp_prefix,
        BGP_STR
        "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n")
 {
-  return bgp_show_route (vty, NULL, argv[0], AFI_IP, SAFI_UNICAST, NULL, 1);
+  return bgp_show_route (vty, NULL, argv[0], AFI_IP, SAFI_UNICAST, NULL, 1, 
BGP_PATH_ALL);
+}
+
+DEFUN (show_ip_bgp_prefix_pathtype,
+       show_ip_bgp_prefix_pathtype_cmd,
+       "show ip bgp A.B.C.D/M (bestpath|multipath)",
+       SHOW_STR
+       IP_STR
+       BGP_STR
+       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
+       "Display only the bestpath\n"
+       "Display only multipaths\n")
+{
+  if (strncmp (argv[1], "b", 1) == 0)
+    return bgp_show_route (vty, NULL, argv[0], AFI_IP, SAFI_UNICAST, NULL, 1, 
BGP_PATH_BESTPATH);
+  else
+    return bgp_show_route (vty, NULL, argv[0], AFI_IP, SAFI_UNICAST, NULL, 1, 
BGP_PATH_MULTIPATH);
 }
 
 DEFUN (show_ip_bgp_ipv4_prefix,
@@ -6940,9 +7007,9 @@ DEFUN (show_ip_bgp_ipv4_prefix,
        "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n")
 {
   if (strncmp (argv[0], "m", 1) == 0)
-    return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_MULTICAST, NULL, 
1);
+    return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_MULTICAST, NULL, 
1, BGP_PATH_ALL);
 
-  return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_UNICAST, NULL, 1);
+  return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_UNICAST, NULL, 1, 
BGP_PATH_ALL);
 }
 
 ALIAS (show_ip_bgp_ipv4_prefix,
@@ -6955,6 +7022,43 @@ ALIAS (show_ip_bgp_ipv4_prefix,
        "Address Family modifier\n"
        "IP prefix <network>/<length>, e.g., 35.0.0.0/8\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)",
+       SHOW_STR
+       IP_STR
+       BGP_STR
+       "Address family\n"
+       "Address Family modifier\n"
+       "Address Family modifier\n"
+       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
+       "Display only the bestpath\n"
+       "Display only multipaths\n")
+{
+  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);
+    else
+      return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_MULTICAST, NULL, 
1, BGP_PATH_MULTIPATH);
+  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);
+    else
+      return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_UNICAST, NULL, 
1, BGP_PATH_MULTIPATH);
+}
+
+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)",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "Address Family modifier\n"
+       "Address Family modifier\n"
+       "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
+       "Display only the bestpath\n"
+       "Display only multipaths\n")
+
 DEFUN (show_ip_bgp_vpnv4_all_prefix,
        show_ip_bgp_vpnv4_all_prefix_cmd,
        "show ip bgp vpnv4 all A.B.C.D/M",
@@ -6965,7 +7069,7 @@ DEFUN (show_ip_bgp_vpnv4_all_prefix,
        "Display information about all VPNv4 NLRIs\n"
        "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n")
 {
-  return bgp_show_route (vty, NULL, argv[0], AFI_IP, SAFI_MPLS_VPN, NULL, 1);
+  return bgp_show_route (vty, NULL, argv[0], AFI_IP, SAFI_MPLS_VPN, NULL, 1, 
BGP_PATH_ALL);
 }
 
 DEFUN (show_ip_bgp_vpnv4_rd_prefix,
@@ -6988,7 +7092,7 @@ DEFUN (show_ip_bgp_vpnv4_rd_prefix,
       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, 1);
+  return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_MPLS_VPN, &prd, 1, 
BGP_PATH_ALL);
 }
 
 DEFUN (show_ip_bgp_view,
@@ -7023,7 +7127,7 @@ DEFUN (show_ip_bgp_view_route,
        "View name\n"
        "Network in the BGP routing table to display\n")
 {
-  return bgp_show_route (vty, argv[0], argv[1], AFI_IP, SAFI_UNICAST, NULL, 0);
+  return bgp_show_route (vty, argv[0], argv[1], AFI_IP, SAFI_UNICAST, NULL, 0, 
BGP_PATH_ALL);
 }
 
 DEFUN (show_ip_bgp_view_prefix,
@@ -7036,7 +7140,7 @@ DEFUN (show_ip_bgp_view_prefix,
        "View name\n"
        "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n")
 {
-  return bgp_show_route (vty, argv[0], argv[1], AFI_IP, SAFI_UNICAST, NULL, 1);
+  return bgp_show_route (vty, argv[0], argv[1], AFI_IP, SAFI_UNICAST, NULL, 1, 
BGP_PATH_ALL);
 }
 
 #ifdef HAVE_IPV6
@@ -7092,7 +7196,7 @@ DEFUN (show_bgp_route,
        BGP_STR
        "Network in the BGP routing table to display\n")
 {
-  return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_UNICAST, NULL, 0);
+  return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_UNICAST, NULL, 0, 
BGP_PATH_ALL);
 }
 
 ALIAS (show_bgp_route,
@@ -7114,9 +7218,58 @@ DEFUN (show_bgp_ipv6_safi_route,
        "Network in the BGP routing table to display\n")
 {
   if (strncmp (argv[0], "m", 1) == 0)
-    return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_MULTICAST, NULL, 
0);
+    return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_MULTICAST, NULL, 
0, BGP_PATH_ALL);
 
-  return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_UNICAST, NULL, 0);
+  return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_UNICAST, NULL, 0, 
BGP_PATH_ALL);
+}
+
+DEFUN (show_bgp_route_pathtype,
+       show_bgp_route_pathtype_cmd,
+       "show bgp X:X::X:X (bestpath|multipath)",
+       SHOW_STR
+       BGP_STR
+       "Network in the BGP routing table to display\n"
+       "Display only the bestpath\n"
+       "Display only multipaths\n")
+{
+  if (strncmp (argv[1], "b", 1) == 0)
+    return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_UNICAST, NULL, 0, 
BGP_PATH_BESTPATH);
+  else
+    return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_UNICAST, NULL, 0, 
BGP_PATH_MULTIPATH);
+}
+
+ALIAS (show_bgp_route_pathtype,
+       show_bgp_ipv6_route_pathtype_cmd,
+       "show bgp ipv6 X:X::X:X (bestpath|multipath)",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "Network in the BGP routing table to display\n"
+       "Display only the bestpath\n"
+       "Display only multipaths\n")
+
+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)",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "Address Family modifier\n"
+       "Address Family modifier\n"
+       "Network in the BGP routing table to display\n"
+       "Display only the bestpath\n"
+       "Display only multipaths\n")
+{
+  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);
+    else
+      return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_MULTICAST, 
NULL, 0, BGP_PATH_MULTIPATH);
+  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);
+    else
+      return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_UNICAST, NULL, 
0, BGP_PATH_MULTIPATH);
 }
 
 /* old command */
@@ -7128,7 +7281,7 @@ DEFUN (show_ipv6_bgp_route,
        BGP_STR
        "Network in the BGP routing table to display\n")
 {
-  return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_UNICAST, NULL, 0);
+  return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_UNICAST, NULL, 0, 
BGP_PATH_ALL);
 }
 
 DEFUN (show_bgp_prefix,
@@ -7138,7 +7291,7 @@ DEFUN (show_bgp_prefix,
        BGP_STR
        "IPv6 prefix <network>/<length>\n")
 {
-  return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_UNICAST, NULL, 1);
+  return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_UNICAST, NULL, 1, 
BGP_PATH_ALL);
 }
 
 ALIAS (show_bgp_prefix,
@@ -7160,9 +7313,58 @@ DEFUN (show_bgp_ipv6_safi_prefix,
        "IPv6 prefix <network>/<length>, e.g., 3ffe::/16\n")
 {
   if (strncmp (argv[0], "m", 1) == 0)
-    return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_MULTICAST, NULL, 
1);
+    return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_MULTICAST, NULL, 
1, BGP_PATH_ALL);
 
-  return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_UNICAST, NULL, 1);
+  return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_UNICAST, NULL, 1, 
BGP_PATH_ALL);
+}
+
+DEFUN (show_bgp_prefix_pathtype,
+       show_bgp_prefix_pathtype_cmd,
+       "show bgp X:X::X:X/M (bestpath|multipath)",
+       SHOW_STR
+       BGP_STR
+       "IPv6 prefix <network>/<length>\n"
+       "Display only the bestpath\n"
+       "Display only multipaths\n")
+{
+  if (strncmp (argv[1], "b", 1) == 0)
+    return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_UNICAST, NULL, 1, 
BGP_PATH_BESTPATH);
+  else
+    return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_UNICAST, NULL, 1, 
BGP_PATH_MULTIPATH);
+}
+
+ALIAS (show_bgp_prefix_pathtype,
+       show_bgp_ipv6_prefix_pathtype_cmd,
+       "show bgp ipv6 X:X::X:X/M (bestpath|multipath)",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "IPv6 prefix <network>/<length>\n"
+       "Display only the bestpath\n"
+       "Display only multipaths\n")
+
+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)",
+       SHOW_STR
+       BGP_STR
+       "Address family\n"
+       "Address Family modifier\n"
+       "Address Family modifier\n"
+       "IPv6 prefix <network>/<length>, e.g., 3ffe::/16\n"
+       "Display only the bestpath\n"
+       "Display only multipaths\n")
+{
+  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);
+    else
+      return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_MULTICAST, 
NULL, 1, BGP_PATH_MULTIPATH);
+  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);
+    else
+      return bgp_show_route (vty, NULL, argv[1], AFI_IP6, SAFI_UNICAST, NULL, 
1, BGP_PATH_MULTIPATH);
 }
 
 /* old command */
@@ -7174,7 +7376,7 @@ DEFUN (show_ipv6_bgp_prefix,
        BGP_STR
        "IPv6 prefix <network>/<length>, e.g., 3ffe::/16\n")
 {
-  return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_UNICAST, NULL, 1);
+  return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_UNICAST, NULL, 1, 
BGP_PATH_ALL);
 }
 
 DEFUN (show_bgp_view,
@@ -7216,7 +7418,7 @@ DEFUN (show_bgp_view_route,
        "View name\n"
        "Network in the BGP routing table to display\n")
 {
-  return bgp_show_route (vty, argv[0], argv[1], AFI_IP6, SAFI_UNICAST, NULL, 
0);
+  return bgp_show_route (vty, argv[0], argv[1], AFI_IP6, SAFI_UNICAST, NULL, 
0, BGP_PATH_ALL);
 }
 
 ALIAS (show_bgp_view_route,
@@ -7238,7 +7440,7 @@ DEFUN (show_bgp_view_prefix,
        "View name\n"       
        "IPv6 prefix <network>/<length>\n")
 {
-  return bgp_show_route (vty, argv[0], argv[1], AFI_IP6, SAFI_UNICAST, NULL, 
1); 
+  return bgp_show_route (vty, argv[0], argv[1], AFI_IP6, SAFI_UNICAST, NULL, 
1, BGP_PATH_ALL);
 }
 
 ALIAS (show_bgp_view_prefix,
@@ -7272,7 +7474,7 @@ DEFUN (show_ipv6_mbgp_route,
        MBGP_STR
        "Network in the MBGP routing table to display\n")
 {
-  return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_MULTICAST, NULL, 0);
+  return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_MULTICAST, NULL, 0, 
BGP_PATH_ALL);
 }
 
 /* old command */
@@ -7284,7 +7486,7 @@ DEFUN (show_ipv6_mbgp_prefix,
        MBGP_STR
        "IPv6 prefix <network>/<length>, e.g., 3ffe::/16\n")
 {
-  return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_MULTICAST, NULL, 1);
+  return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_MULTICAST, NULL, 1, 
BGP_PATH_ALL);
 }
 #endif
 
@@ -11083,7 +11285,7 @@ DEFUN (show_ip_bgp_view_rsclient_route,
  
   return bgp_show_route_in_table (vty, bgp, peer->rib[AFI_IP][SAFI_UNICAST], 
                                   (argc == 3) ? argv[2] : argv[1],
-                                  AFI_IP, SAFI_UNICAST, NULL, 0);
+                                  AFI_IP, SAFI_UNICAST, NULL, 0, BGP_PATH_ALL);
 }
 
 ALIAS (show_ip_bgp_view_rsclient_route,
@@ -11162,7 +11364,7 @@ DEFUN (show_bgp_view_ipv4_safi_rsclient_route,
 
   return bgp_show_route_in_table (vty, bgp, peer->rib[AFI_IP][safi],
                                   (argc == 4) ? argv[3] : argv[2],
-                                  AFI_IP, safi, NULL, 0);
+                                  AFI_IP, safi, NULL, 0, BGP_PATH_ALL);
 }
 
 ALIAS (show_bgp_view_ipv4_safi_rsclient_route,
@@ -11237,7 +11439,7 @@ DEFUN (show_ip_bgp_view_rsclient_prefix,
     
   return bgp_show_route_in_table (vty, bgp, peer->rib[AFI_IP][SAFI_UNICAST], 
                                   (argc == 3) ? argv[2] : argv[1],
-                                  AFI_IP, SAFI_UNICAST, NULL, 1);
+                                  AFI_IP, SAFI_UNICAST, NULL, 1, BGP_PATH_ALL);
 }
 
 ALIAS (show_ip_bgp_view_rsclient_prefix,
@@ -11316,7 +11518,7 @@ DEFUN (show_bgp_view_ipv4_safi_rsclient_prefix,
 
   return bgp_show_route_in_table (vty, bgp, peer->rib[AFI_IP][safi],
                                   (argc == 4) ? argv[3] : argv[2],
-                                  AFI_IP, safi, NULL, 1);
+                                  AFI_IP, safi, NULL, 1, BGP_PATH_ALL);
 }
 
 ALIAS (show_bgp_view_ipv4_safi_rsclient_prefix,
@@ -11729,7 +11931,7 @@ DEFUN (show_bgp_view_rsclient_route,
 
   return bgp_show_route_in_table (vty, bgp, peer->rib[AFI_IP6][SAFI_UNICAST],
                                   (argc == 3) ? argv[2] : argv[1],
-                                  AFI_IP6, SAFI_UNICAST, NULL, 0);
+                                  AFI_IP6, SAFI_UNICAST, NULL, 0, 
BGP_PATH_ALL);
 }
 
 ALIAS (show_bgp_view_rsclient_route,
@@ -11807,7 +12009,7 @@ DEFUN (show_bgp_view_ipv6_safi_rsclient_route,
 
   return bgp_show_route_in_table (vty, bgp, peer->rib[AFI_IP6][safi],
                                   (argc == 4) ? argv[3] : argv[2],
-                                  AFI_IP6, safi, NULL, 0);
+                                  AFI_IP6, safi, NULL, 0, BGP_PATH_ALL);
 }
 
 ALIAS (show_bgp_view_ipv6_safi_rsclient_route,
@@ -11881,7 +12083,7 @@ DEFUN (show_bgp_view_rsclient_prefix,
 
   return bgp_show_route_in_table (vty, bgp, peer->rib[AFI_IP6][SAFI_UNICAST],
                                   (argc == 3) ? argv[2] : argv[1],
-                                  AFI_IP6, SAFI_UNICAST, NULL, 1);
+                                  AFI_IP6, SAFI_UNICAST, NULL, 1, 
BGP_PATH_ALL);
 }
 
 ALIAS (show_bgp_view_rsclient_prefix,
@@ -11959,7 +12161,7 @@ DEFUN (show_bgp_view_ipv6_safi_rsclient_prefix,
 
   return bgp_show_route_in_table (vty, bgp, peer->rib[AFI_IP6][safi],
                                   (argc == 4) ? argv[3] : argv[2],
-                                  AFI_IP6, safi, NULL, 1);
+                                  AFI_IP6, safi, NULL, 1, BGP_PATH_ALL);
 }
 
 ALIAS (show_bgp_view_ipv6_safi_rsclient_prefix,
@@ -12839,13 +13041,18 @@ bgp_route_init (void)
   install_element (VIEW_NODE, &show_ip_bgp_ipv4_cmd);
   install_element (VIEW_NODE, &show_bgp_ipv4_safi_cmd);
   install_element (VIEW_NODE, &show_ip_bgp_route_cmd);
+  install_element (VIEW_NODE, &show_ip_bgp_route_pathtype_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv4_safi_route_pathtype_cmd);
   install_element (VIEW_NODE, &show_ip_bgp_ipv4_route_cmd);
   install_element (VIEW_NODE, &show_bgp_ipv4_safi_route_cmd);
   install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_route_cmd);
   install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_route_cmd);
   install_element (VIEW_NODE, &show_ip_bgp_prefix_cmd);
   install_element (VIEW_NODE, &show_ip_bgp_ipv4_prefix_cmd);
+  install_element (VIEW_NODE, &show_ip_bgp_ipv4_prefix_pathtype_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv4_safi_prefix_pathtype_cmd);
   install_element (VIEW_NODE, &show_bgp_ipv4_safi_prefix_cmd);
+  install_element (VIEW_NODE, &show_ip_bgp_prefix_pathtype_cmd);
   install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_prefix_cmd);
   install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_prefix_cmd);
   install_element (VIEW_NODE, &show_ip_bgp_view_cmd);
@@ -12937,12 +13144,17 @@ bgp_route_init (void)
   
   /* Restricted node: VIEW_NODE - (set of dangerous commands) */
   install_element (RESTRICTED_NODE, &show_ip_bgp_route_cmd);
+  install_element (RESTRICTED_NODE, &show_ip_bgp_route_pathtype_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_ipv4_safi_route_pathtype_cmd);
   install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_route_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_ipv4_safi_route_cmd);
   install_element (RESTRICTED_NODE, &show_ip_bgp_vpnv4_rd_route_cmd);
   install_element (RESTRICTED_NODE, &show_ip_bgp_prefix_cmd);
   install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_prefix_cmd);
+  install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_prefix_pathtype_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_ipv4_safi_prefix_pathtype_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_ipv4_safi_prefix_cmd);
+  install_element (RESTRICTED_NODE, &show_ip_bgp_prefix_pathtype_cmd);
   install_element (RESTRICTED_NODE, &show_ip_bgp_vpnv4_all_prefix_cmd);
   install_element (RESTRICTED_NODE, &show_ip_bgp_vpnv4_rd_prefix_cmd);
   install_element (RESTRICTED_NODE, &show_ip_bgp_view_route_cmd);
@@ -12981,13 +13193,18 @@ bgp_route_init (void)
   install_element (ENABLE_NODE, &show_ip_bgp_ipv4_cmd);
   install_element (ENABLE_NODE, &show_bgp_ipv4_safi_cmd);
   install_element (ENABLE_NODE, &show_ip_bgp_route_cmd);
+  install_element (ENABLE_NODE, &show_ip_bgp_route_pathtype_cmd);
+  install_element (ENABLE_NODE, &show_bgp_ipv4_safi_route_pathtype_cmd);
   install_element (ENABLE_NODE, &show_ip_bgp_ipv4_route_cmd);
   install_element (ENABLE_NODE, &show_bgp_ipv4_safi_route_cmd);
   install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_route_cmd);
   install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_rd_route_cmd);
   install_element (ENABLE_NODE, &show_ip_bgp_prefix_cmd);
   install_element (ENABLE_NODE, &show_ip_bgp_ipv4_prefix_cmd);
+  install_element (ENABLE_NODE, &show_ip_bgp_ipv4_prefix_pathtype_cmd);
+  install_element (ENABLE_NODE, &show_bgp_ipv4_safi_prefix_pathtype_cmd);
   install_element (ENABLE_NODE, &show_bgp_ipv4_safi_prefix_cmd);
+  install_element (ENABLE_NODE, &show_ip_bgp_prefix_pathtype_cmd);
   install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_prefix_cmd);
   install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_rd_prefix_cmd);
   install_element (ENABLE_NODE, &show_ip_bgp_view_cmd);
@@ -13123,9 +13340,15 @@ bgp_route_init (void)
   install_element (VIEW_NODE, &show_bgp_route_cmd);
   install_element (VIEW_NODE, &show_bgp_ipv6_route_cmd);
   install_element (VIEW_NODE, &show_bgp_ipv6_safi_route_cmd);
+  install_element (VIEW_NODE, &show_bgp_route_pathtype_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv6_route_pathtype_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv6_safi_route_pathtype_cmd);
   install_element (VIEW_NODE, &show_bgp_prefix_cmd);
   install_element (VIEW_NODE, &show_bgp_ipv6_prefix_cmd);
   install_element (VIEW_NODE, &show_bgp_ipv6_safi_prefix_cmd);
+  install_element (VIEW_NODE, &show_bgp_prefix_pathtype_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv6_prefix_pathtype_cmd);
+  install_element (VIEW_NODE, &show_bgp_ipv6_safi_prefix_pathtype_cmd);
   install_element (VIEW_NODE, &show_bgp_regexp_cmd);
   install_element (VIEW_NODE, &show_bgp_ipv6_regexp_cmd);
   install_element (VIEW_NODE, &show_bgp_prefix_list_cmd);
@@ -13207,9 +13430,15 @@ bgp_route_init (void)
   install_element (RESTRICTED_NODE, &show_bgp_route_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_ipv6_route_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_ipv6_safi_route_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_route_pathtype_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_ipv6_route_pathtype_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_ipv6_safi_route_pathtype_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_prefix_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_ipv6_prefix_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_ipv6_safi_prefix_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_prefix_pathtype_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_ipv6_prefix_pathtype_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_ipv6_safi_prefix_pathtype_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_community_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_ipv6_community_cmd);
   install_element (RESTRICTED_NODE, &show_bgp_community2_cmd);
@@ -13247,7 +13476,13 @@ bgp_route_init (void)
   install_element (ENABLE_NODE, &show_bgp_route_cmd);
   install_element (ENABLE_NODE, &show_bgp_ipv6_route_cmd);
   install_element (ENABLE_NODE, &show_bgp_ipv6_safi_route_cmd);
+  install_element (ENABLE_NODE, &show_bgp_route_pathtype_cmd);
+  install_element (ENABLE_NODE, &show_bgp_ipv6_route_pathtype_cmd);
+  install_element (ENABLE_NODE, &show_bgp_ipv6_safi_route_pathtype_cmd);
   install_element (ENABLE_NODE, &show_bgp_prefix_cmd);
+  install_element (ENABLE_NODE, &show_bgp_prefix_pathtype_cmd);
+  install_element (ENABLE_NODE, &show_bgp_ipv6_prefix_pathtype_cmd);
+  install_element (ENABLE_NODE, &show_bgp_ipv6_safi_prefix_pathtype_cmd);
   install_element (ENABLE_NODE, &show_bgp_ipv6_prefix_cmd);
   install_element (ENABLE_NODE, &show_bgp_ipv6_safi_prefix_cmd);
   install_element (ENABLE_NODE, &show_bgp_regexp_cmd);
diff --git a/bgpd/bgp_route.h b/bgpd/bgp_route.h
index a97fe11..399d5e0 100644
--- a/bgpd/bgp_route.h
+++ b/bgpd/bgp_route.h
@@ -185,6 +185,13 @@ enum bgp_clear_route_type
   BGP_CLEAR_ROUTE_MY_RSCLIENT
 };
 
+enum bgp_path_type
+{
+  BGP_PATH_ALL,
+  BGP_PATH_BESTPATH,
+  BGP_PATH_MULTIPATH
+};
+
 /* Prototypes. */
 extern void bgp_process_queue_init (void);
 extern void bgp_route_init (void);
-- 
1.9.1


_______________________________________________
Quagga-dev mailing list
[email protected]
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to