};
static int
-bgp_show_mpls_vpn (struct vty *vty, struct prefix_rd *prd, enum bgp_show_type type,
- void *output_arg, int tags, u_char use_json)
+bgp_show_mpls_vpn (struct vty *vty, afi_t afi, struct prefix_rd *prd,
+ enum bgp_show_type type, void *output_arg, int tags, u_char use_json)
{
- afi_t afi = AFI_IP;
struct bgp *bgp;
struct bgp_table *table;
struct bgp_node *rn;
int header = 1;
char v4_header[] = " Network Next Hop Metric LocPrf Weight Path%s";
char v4_header_tag[] = " Network Next Hop In tag/Out tag%s";
+ unsigned long output_count = 0;
+ unsigned long total_count = 0;
json_object *json = NULL;
json_object *json_mroute = NULL;
json_object *json_nroute = NULL;
for (rm = bgp_table_top (table); rm; rm = bgp_route_next (rm))
{
+ total_count++;
if (use_json)
json_array = json_object_new_array();
else
route_vty_out_tag (vty, &rm->p, ri, 0, SAFI_MPLS_VPN, json_array);
else
route_vty_out (vty, &rm->p, ri, 0, SAFI_MPLS_VPN, json_array);
+ output_count++;
}
if (use_json)
vty_out (vty, "%s%s", json_object_to_json_string(json), VTY_NEWLINE);
json_object_free(json);
}
+ else
+ {
+ if (output_count == 0)
+ vty_out (vty, "No prefixes displayed, %ld exist%s", total_count, VTY_NEWLINE);
+ else
+ vty_out (vty, "%sDisplayed %ld out of %ld total prefixes%s",
+ VTY_NEWLINE, output_count, total_count, VTY_NEWLINE);
+ }
+
return CMD_SUCCESS;
}
+DEFUN (show_bgp_ivp4_vpn,
+ show_bgp_ipv4_vpn_cmd,
+ "show bgp ipv4 vpn {json}",
+ SHOW_STR
+ BGP_STR
+ "Address Family\n"
+ "Display VPN NLRI specific information\n")
+{
+ return bgp_show_mpls_vpn (vty, AFI_IP, NULL, bgp_show_type_normal, NULL, 0, use_json (argc, argv));
+}
+
+DEFUN (show_bgp_ipv6_vpn,
+ show_bgp_ipv6_vpn_cmd,
+ "show bgp ipv6 vpn {json}",
+ SHOW_STR
+ BGP_STR
+ "Address Family\n"
+ "Display VPN NLRI specific information\n")
+{
+ return bgp_show_mpls_vpn (vty, AFI_IP6, NULL, bgp_show_type_normal, NULL, 0, use_json (argc, argv));
+}
+
+DEFUN (show_bgp_ipv4_vpn_rd,
+ show_bgp_ipv4_vpn_rd_cmd,
+ "show bgp ipv4 vpn rd ASN:nn_or_IP-address:nn {json}",
+ SHOW_STR
+ BGP_STR
+ "Address Family\n"
+ "Display VPN NLRI specific information\n"
+ "Display information for a route distinguisher\n"
+ "VPN Route Distinguisher\n"
+ JSON_STR)
+{
+ int ret;
+ struct prefix_rd prd;
+
+ ret = str2prefix_rd (argv[0], &prd);
+ if (! ret)
+ {
+ vty_out (vty, "%% Malformed Route Distinguisher%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ return bgp_show_mpls_vpn (vty, AFI_IP, &prd, bgp_show_type_normal, NULL, 0, use_json (argc, argv));
+}
+
+DEFUN (show_bgp_ipv6_vpn_rd,
+ show_bgp_ipv6_vpn_rd_cmd,
+ "show bgp ipv6 vpn rd ASN:nn_or_IP-address:nn {json}",
+ SHOW_STR
+ BGP_STR
+ "Address Family\n"
+ "Display VPN NLRI specific information\n"
+ "Display information for a route distinguisher\n"
+ "VPN Route Distinguisher\n"
+ JSON_STR)
+{
+ int ret;
+ struct prefix_rd prd;
+
+ ret = str2prefix_rd (argv[0], &prd);
+ if (!ret)
+ {
+ vty_out (vty, "%% Malformed Route Distinguisher%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ return bgp_show_mpls_vpn (vty, AFI_IP6, &prd, bgp_show_type_normal, NULL, 0, use_json (argc, argv));
+}
+
DEFUN (show_ip_bgp_vpnv4_all,
show_ip_bgp_vpnv4_all_cmd,
"show ip bgp vpnv4 all",
"Display VPNv4 NLRI specific information\n"
"Display information about all VPNv4 NLRIs\n")
{
- return bgp_show_mpls_vpn (vty, NULL, bgp_show_type_normal, NULL, 0, 0);
+ return bgp_show_mpls_vpn (vty, AFI_IP, NULL, bgp_show_type_normal, NULL, 0, 0);
}
DEFUN (show_ip_bgp_vpnv4_rd,
vty_out (vty, "%% Malformed Route Distinguisher%s", VTY_NEWLINE);
return CMD_WARNING;
}
- return bgp_show_mpls_vpn (vty, &prd, bgp_show_type_normal, NULL, 0, 0);
+ return bgp_show_mpls_vpn (vty, AFI_IP, &prd, bgp_show_type_normal, NULL, 0, 0);
}
DEFUN (show_ip_bgp_vpnv4_all_tags,
"Display information about all VPNv4 NLRIs\n"
"Display BGP tags for prefixes\n")
{
- return bgp_show_mpls_vpn (vty, NULL, bgp_show_type_normal, NULL, 1, 0);
+ return bgp_show_mpls_vpn (vty, AFI_IP, NULL, bgp_show_type_normal, NULL, 1, 0);
}
DEFUN (show_ip_bgp_vpnv4_rd_tags,
vty_out (vty, "%% Malformed Route Distinguisher%s", VTY_NEWLINE);
return CMD_WARNING;
}
- return bgp_show_mpls_vpn (vty, &prd, bgp_show_type_normal, NULL, 1, 0);
+ return bgp_show_mpls_vpn (vty, AFI_IP, &prd, bgp_show_type_normal, NULL, 1, 0);
}
DEFUN (show_ip_bgp_vpnv4_all_neighbor_routes,
return CMD_WARNING;
}
- return bgp_show_mpls_vpn (vty, NULL, bgp_show_type_neighbor, &su, 0, uj);
+ return bgp_show_mpls_vpn (vty, AFI_IP, NULL, bgp_show_type_neighbor, &su, 0, uj);
}
DEFUN (show_ip_bgp_vpnv4_rd_neighbor_routes,
return CMD_WARNING;
}
- return bgp_show_mpls_vpn (vty, &prd, bgp_show_type_neighbor, &su, 0, uj);
+ return bgp_show_mpls_vpn (vty, AFI_IP, &prd, bgp_show_type_neighbor, &su, 0, uj);
}
DEFUN (show_ip_bgp_vpnv4_all_neighbor_advertised_routes,
install_element (BGP_VPNV4_NODE, &vpnv4_network_route_map_cmd);
install_element (BGP_VPNV4_NODE, &no_vpnv4_network_cmd);
-
+ install_element (VIEW_NODE, &show_bgp_ipv4_vpn_cmd);
+ install_element (VIEW_NODE, &show_bgp_ipv4_vpn_rd_cmd);
+ install_element (VIEW_NODE, &show_bgp_ipv6_vpn_cmd);
+ install_element (VIEW_NODE, &show_bgp_ipv6_vpn_rd_cmd);
install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_cmd);
install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_cmd);
install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_tags_cmd);
install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_neighbor_advertised_routes_cmd);
install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_neighbor_advertised_routes_cmd);
+ install_element (ENABLE_NODE, &show_bgp_ipv4_vpn_cmd);
+ install_element (ENABLE_NODE, &show_bgp_ipv4_vpn_rd_cmd);
+ install_element (ENABLE_NODE, &show_bgp_ipv6_vpn_cmd);
+ install_element (ENABLE_NODE, &show_bgp_ipv6_vpn_rd_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_rd_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_tags_cmd);
return bgp_show_route (vty, NULL, argv[1], AFI_IP, SAFI_UNICAST, NULL, 0, BGP_PATH_MULTIPATH, uj);
}
+DEFUN (show_bgp_ipv4_prefix,
+ show_bgp_ipv4_prefix_cmd,
+ "show bgp ipv4 A.B.C.D/M {json}",
+ SHOW_STR
+ BGP_STR
+ IP_STR
+ "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
+ JSON_STR)
+{
+ return bgp_show_route (vty, NULL, argv[0], AFI_IP, SAFI_UNICAST, NULL, 1, BGP_PATH_ALL, use_json (argc, argv));
+}
+
+DEFUN (show_bgp_ipv6_route,
+ show_bgp_ipv6_route_cmd,
+ "show bgp ipv6 X:X::X:X {JSON}",
+ SHOW_STR
+ BGP_STR
+ "Address family\n"
+ "Network in the BGP routing table to display\n"
+ JSON_STR)
+{
+ return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_UNICAST, NULL, 0, BGP_PATH_ALL, use_json (argc, argv));
+}
+
+DEFUN (show_bgp_ipv6_prefix,
+ show_bgp_ipv6_prefix_cmd,
+ "show bgp ipv6 X:X::X:X/M {json}",
+ SHOW_STR
+ BGP_STR
+ IP_STR
+ "IPv6 prefix <network>/<length>\n"
+ JSON_STR)
+{
+ return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_UNICAST, NULL, 1, BGP_PATH_ALL, use_json (argc,argv));
+}
+
DEFUN (show_ip_bgp_ipv4_route,
show_ip_bgp_ipv4_route_cmd,
"show ip bgp ipv4 (unicast|multicast) A.B.C.D {json}",
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}",
+ SHOW_STR
+ BGP_STR
+ "Address Family\n"
+ "Display VPN NLRI specific information\n"
+ "Network in the BGP routing table to display\n"
+ JSON_STR)
+{
+ 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_ipv6_vpn_route,
+ show_bgp_ipv6_vpn_route_cmd,
+ "show bgp ipv6 vpn 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)
+{
+ return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_MPLS_VPN, NULL, 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}",
+ SHOW_STR
+ BGP_STR
+ IP_STR
+ "Display VPN NLRI specific information\n"
+ "Display information for a route distinguisher\n"
+ "VPN Route Distinguisher\n"
+ "Network in the BGP routing table to display\n"
+ JSON_STR)
+{
+ int ret;
+ struct prefix_rd prd;
+
+ ret = str2prefix_rd (argv[0], &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));
+}
+
+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}",
+ SHOW_STR
+ BGP_STR
+ "Address Family\n"
+ "Display VPN NLRI specific information\n"
+ "Display information for a route distinguisher\n"
+ "VPN Route Distinguisher\n"
+ "Network in the BGP routing table to display\n"
+ JSON_STR)
+{
+ int ret;
+ struct prefix_rd prd;
+
+ ret = str2prefix_rd (argv[0], &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));
+}
DEFUN (show_ip_bgp_vpnv4_rd_route,
show_ip_bgp_vpnv4_rd_route_cmd,
return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_UNICAST, NULL, 0, BGP_PATH_ALL, use_json(argc, argv));
}
-ALIAS (show_bgp_route,
- show_bgp_ipv6_route_cmd,
- "show bgp ipv6 X:X::X:X {json}",
- SHOW_STR
- BGP_STR
- "Address family\n"
- "Network in the BGP routing table to display\n"
- "JavaScript Object Notation\n")
-
DEFUN (show_bgp_ipv6_safi_route,
show_bgp_ipv6_safi_route_cmd,
"show bgp ipv6 (unicast|multicast) X:X::X:X {json}",
return bgp_show_route (vty, NULL, argv[0], AFI_IP6, SAFI_UNICAST, NULL, 1, BGP_PATH_ALL, use_json(argc, argv));
}
-ALIAS (show_bgp_prefix,
- show_bgp_ipv6_prefix_cmd,
- "show bgp ipv6 X:X::X:X/M {json}",
- SHOW_STR
- BGP_STR
- "Address family\n"
- "IPv6 prefix <network>/<length>\n"
- "JavaScript Object Notation\n")
-
DEFUN (show_bgp_ipv6_safi_prefix,
show_bgp_ipv6_safi_prefix_cmd,
"show bgp ipv6 (unicast|multicast) X:X::X:X/M {json}",
install_element (ENABLE_NODE, &show_ip_bgp_neighbor_flap_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_neighbor_damp_cmd);
+ install_element (VIEW_NODE, &show_bgp_ipv4_prefix_cmd);
+ install_element (ENABLE_NODE, &show_bgp_ipv4_prefix_cmd);
+ install_element (VIEW_NODE, &show_bgp_ipv4_vpn_rd_route_cmd);
+ install_element (ENABLE_NODE, &show_bgp_ipv4_vpn_rd_route_cmd);
+ install_element (VIEW_NODE, &show_bgp_ipv4_vpn_route_cmd);
+ install_element (ENABLE_NODE, &show_bgp_ipv4_vpn_route_cmd);
+
+ install_element (VIEW_NODE, &show_bgp_ipv6_vpn_rd_route_cmd);
+ install_element (ENABLE_NODE, &show_bgp_ipv6_vpn_rd_route_cmd);
+ install_element (VIEW_NODE, &show_bgp_ipv6_vpn_route_cmd);
+ install_element (ENABLE_NODE, &show_bgp_ipv6_vpn_route_cmd);
+
/* BGP dampening clear commands */
install_element (ENABLE_NODE, &clear_ip_bgp_dampening_cmd);
install_element (ENABLE_NODE, &clear_ip_bgp_dampening_prefix_cmd);
"Address Family modifier\n"
"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}",
install_element (ENABLE_NODE, &show_bgp_instance_ipv6_safi_summary_cmd);
#endif /* HAVE_IPV6 */
+ install_element (VIEW_NODE, &show_bgp_ipv4_vpn_summary_cmd);
+ install_element (ENABLE_NODE, &show_bgp_ipv4_vpn_summary_cmd);
+
+ install_element (VIEW_NODE, &show_bgp_ipv6_vpn_summary_cmd);
+ install_element (ENABLE_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);