mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-15 04:47:05 +00:00
pimd: Add 'vrf all' commands where needed
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
74d1799ae6
commit
a25de56b58
551
pimd/pim_cmd.c
551
pimd/pim_cmd.c
@ -3300,6 +3300,47 @@ DEFUN (show_ip_igmp_interface,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_igmp_interface_vrf_all,
|
||||
show_ip_igmp_interface_vrf_all_cmd,
|
||||
"show ip igmp vrf all interface [detail|WORD] [json]",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
IGMP_STR
|
||||
VRF_CMD_HELP_STR
|
||||
"IGMP interface information\n"
|
||||
"Detailed output\n"
|
||||
"interface name\n"
|
||||
"JavaScript Object Notation\n")
|
||||
{
|
||||
int idx = 2;
|
||||
u_char uj = use_json(argc, argv);
|
||||
struct vrf *vrf;
|
||||
bool first = true;
|
||||
|
||||
if (uj)
|
||||
vty_out(vty, "{ ");
|
||||
RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
|
||||
{
|
||||
if (uj) {
|
||||
if (!first)
|
||||
vty_out(vty, ", ");
|
||||
vty_out(vty, " \"%s\": ", vrf->name);
|
||||
first = false;
|
||||
} else
|
||||
vty_out(vty, "VRF: %s\n", vrf->name);
|
||||
if (argv_find(argv, argc, "detail", &idx)
|
||||
|| argv_find(argv, argc, "WORD", &idx))
|
||||
igmp_show_interfaces_single(vrf->info, vty,
|
||||
argv[idx]->arg, uj);
|
||||
else
|
||||
igmp_show_interfaces(vrf->info, vty, uj);
|
||||
}
|
||||
if (uj)
|
||||
vty_out(vty, "}\n");
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_igmp_join,
|
||||
show_ip_igmp_join_cmd,
|
||||
"show ip igmp [vrf NAME] join",
|
||||
@ -3320,6 +3361,38 @@ DEFUN (show_ip_igmp_join,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_igmp_join_vrf_all,
|
||||
show_ip_igmp_join_vrf_all_cmd,
|
||||
"show ip igmp vrf all join",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
IGMP_STR
|
||||
VRF_CMD_HELP_STR
|
||||
"IGMP static join information\n")
|
||||
{
|
||||
u_char uj = use_json(argc, argv);
|
||||
struct vrf *vrf;
|
||||
bool first = true;
|
||||
|
||||
if (uj)
|
||||
vty_out(vty, "{ ");
|
||||
RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
|
||||
{
|
||||
if (uj) {
|
||||
if (!first)
|
||||
vty_out(vty, ", ");
|
||||
vty_out(vty, " \"%s\": ", vrf->name);
|
||||
first = false;
|
||||
} else
|
||||
vty_out(vty, "VRF: %s\n", vrf->name);
|
||||
igmp_show_interface_join(vrf->info, vty);
|
||||
}
|
||||
if (uj)
|
||||
vty_out(vty, "}\n");
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_igmp_groups,
|
||||
show_ip_igmp_groups_cmd,
|
||||
"show ip igmp [vrf NAME] groups [json]",
|
||||
@ -3342,6 +3415,39 @@ DEFUN (show_ip_igmp_groups,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_igmp_groups_vrf_all,
|
||||
show_ip_igmp_groups_vrf_all_cmd,
|
||||
"show ip igmp vrf all groups [json]",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
IGMP_STR
|
||||
VRF_CMD_HELP_STR
|
||||
IGMP_GROUP_STR
|
||||
"JavaScript Object Notation\n")
|
||||
{
|
||||
u_char uj = use_json(argc, argv);
|
||||
struct vrf *vrf;
|
||||
bool first = true;
|
||||
|
||||
if (uj)
|
||||
vty_out(vty, "{ ");
|
||||
RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
|
||||
{
|
||||
if (uj) {
|
||||
if (!first)
|
||||
vty_out(vty, ", ");
|
||||
vty_out(vty, " \"%s\": ", vrf->name);
|
||||
first = false;
|
||||
} else
|
||||
vty_out(vty, "VRF: %s\n", vrf->name);
|
||||
igmp_show_groups(vrf->info, vty, uj);
|
||||
}
|
||||
if (uj)
|
||||
vty_out(vty, "}\n");
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_igmp_groups_retransmissions,
|
||||
show_ip_igmp_groups_retransmissions_cmd,
|
||||
"show ip igmp [vrf NAME] groups retransmissions",
|
||||
@ -3506,13 +3612,53 @@ DEFUN (show_ip_pim_interface,
|
||||
if (argv_find(argv, argc, "WORD", &idx)
|
||||
|| argv_find(argv, argc, "detail", &idx))
|
||||
pim_show_interfaces_single(vrf->info, vty, argv[idx]->arg, uj);
|
||||
|
||||
else
|
||||
pim_show_interfaces(vrf->info, vty, uj);
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_pim_interface_vrf_all,
|
||||
show_ip_pim_interface_vrf_all_cmd,
|
||||
"show ip pim vrf all interface [detail|WORD] [json]",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
PIM_STR
|
||||
VRF_CMD_HELP_STR
|
||||
"PIM interface information\n"
|
||||
"Detailed output\n"
|
||||
"interface name\n"
|
||||
"JavaScript Object Notation\n")
|
||||
{
|
||||
int idx = 6;
|
||||
u_char uj = use_json(argc, argv);
|
||||
struct vrf *vrf;
|
||||
bool first = true;
|
||||
|
||||
if (uj)
|
||||
vty_out(vty, "{ ");
|
||||
RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
|
||||
{
|
||||
if (uj) {
|
||||
if (!first)
|
||||
vty_out(vty, ", ");
|
||||
vty_out(vty, " \"%s\": ", vrf->name);
|
||||
first = false;
|
||||
} else
|
||||
vty_out(vty, "VRF: %s\n", vrf->name);
|
||||
if (argv_find(argv, argc, "WORD", &idx)
|
||||
|| argv_find(argv, argc, "detail", &idx))
|
||||
pim_show_interfaces_single(vrf->info, vty,
|
||||
argv[idx]->arg, uj);
|
||||
else
|
||||
pim_show_interfaces(vrf->info, vty, uj);
|
||||
}
|
||||
if (uj)
|
||||
vty_out(vty, "}\n");
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_pim_join,
|
||||
show_ip_pim_join_cmd,
|
||||
"show ip pim [vrf NAME] join [json]",
|
||||
@ -3535,6 +3681,39 @@ DEFUN (show_ip_pim_join,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_pim_join_vrf_all,
|
||||
show_ip_pim_join_vrf_all_cmd,
|
||||
"show ip pim vrf all join [json]",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
PIM_STR
|
||||
VRF_CMD_HELP_STR
|
||||
"PIM interface join information\n"
|
||||
JSON_STR)
|
||||
{
|
||||
u_char uj = use_json(argc, argv);
|
||||
struct vrf *vrf;
|
||||
bool first = true;
|
||||
|
||||
if (uj)
|
||||
vty_out(vty, "{ ");
|
||||
RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
|
||||
{
|
||||
if (uj) {
|
||||
if (!first)
|
||||
vty_out(vty, ", ");
|
||||
vty_out(vty, " \"%s\": ", vrf->name);
|
||||
first = false;
|
||||
} else
|
||||
vty_out(vty, "VRF: %s\n", vrf->name);
|
||||
pim_show_join(vrf->info, vty, uj);
|
||||
}
|
||||
if (uj)
|
||||
vty_out(vty, "}\n");
|
||||
|
||||
return CMD_WARNING;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_pim_local_membership,
|
||||
show_ip_pim_local_membership_cmd,
|
||||
"show ip pim [vrf NAME] local-membership [json]",
|
||||
@ -3585,6 +3764,47 @@ DEFUN (show_ip_pim_neighbor,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_pim_neighbor_vrf_all,
|
||||
show_ip_pim_neighbor_vrf_all_cmd,
|
||||
"show ip pim vrf all neighbor [detail|WORD] [json]",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
PIM_STR
|
||||
VRF_CMD_HELP_STR
|
||||
"PIM neighbor information\n"
|
||||
"Detailed output\n"
|
||||
"Name of interface or neighbor\n"
|
||||
"JavaScript Object Notation\n")
|
||||
{
|
||||
int idx = 2;
|
||||
u_char uj = use_json(argc, argv);
|
||||
struct vrf *vrf;
|
||||
bool first = true;
|
||||
|
||||
if (uj)
|
||||
vty_out(vty, "{ ");
|
||||
RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
|
||||
{
|
||||
if (uj) {
|
||||
if (!first)
|
||||
vty_out(vty, ", ");
|
||||
vty_out(vty, " \"%s\": ", vrf->name);
|
||||
first = false;
|
||||
} else
|
||||
vty_out(vty, "VRF: %s\n", vrf->name);
|
||||
if (argv_find(argv, argc, "detail", &idx)
|
||||
|| argv_find(argv, argc, "WORD", &idx))
|
||||
pim_show_neighbors_single(vrf->info, vty,
|
||||
argv[idx]->arg, uj);
|
||||
else
|
||||
pim_show_neighbors(vrf->info, vty, uj);
|
||||
}
|
||||
if (uj)
|
||||
vty_out(vty, "}\n");
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_pim_secondary,
|
||||
show_ip_pim_secondary_cmd,
|
||||
"show ip pim [vrf NAME] secondary",
|
||||
@ -3640,6 +3860,53 @@ DEFUN (show_ip_pim_state,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_pim_state_vrf_all,
|
||||
show_ip_pim_state_vrf_all_cmd,
|
||||
"show ip pim vrf all state [A.B.C.D [A.B.C.D]] [json]",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
PIM_STR
|
||||
VRF_CMD_HELP_STR
|
||||
"PIM state information\n"
|
||||
"Unicast or Multicast address\n"
|
||||
"Multicast address\n"
|
||||
"JavaScript Object Notation\n")
|
||||
{
|
||||
const char *src_or_group = NULL;
|
||||
const char *group = NULL;
|
||||
int idx = 2;
|
||||
u_char uj = use_json(argc, argv);
|
||||
struct vrf *vrf;
|
||||
bool first = true;
|
||||
|
||||
if (uj) {
|
||||
vty_out(vty, "{ ");
|
||||
argc--;
|
||||
}
|
||||
|
||||
if (argv_find(argv, argc, "A.B.C.D", &idx)) {
|
||||
src_or_group = argv[idx]->arg;
|
||||
if (idx + 1 < argc)
|
||||
group = argv[idx + 1]->arg;
|
||||
}
|
||||
|
||||
RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
|
||||
{
|
||||
if (uj) {
|
||||
if (!first)
|
||||
vty_out(vty, ", ");
|
||||
vty_out(vty, " \"%s\": ", vrf->name);
|
||||
first = false;
|
||||
} else
|
||||
vty_out(vty, "VRF: %s\n", vrf->name);
|
||||
pim_show_state(vrf->info, vty, src_or_group, group, uj);
|
||||
}
|
||||
if (uj)
|
||||
vty_out(vty, "}\n");
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_pim_upstream,
|
||||
show_ip_pim_upstream_cmd,
|
||||
"show ip pim [vrf NAME] upstream [json]",
|
||||
@ -3662,6 +3929,37 @@ DEFUN (show_ip_pim_upstream,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_pim_upstream_vrf_all,
|
||||
show_ip_pim_upstream_vrf_all_cmd,
|
||||
"show ip pim vrf all upstream [json]",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
PIM_STR
|
||||
VRF_CMD_HELP_STR
|
||||
"PIM upstream information\n"
|
||||
JSON_STR)
|
||||
{
|
||||
u_char uj = use_json(argc, argv);
|
||||
struct vrf *vrf;
|
||||
bool first = true;
|
||||
|
||||
if (uj)
|
||||
vty_out(vty, "{ ");
|
||||
RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
|
||||
{
|
||||
if (uj) {
|
||||
if (!first)
|
||||
vty_out(vty, ", ");
|
||||
vty_out(vty, " \"%s\": ", vrf->name);
|
||||
first = false;
|
||||
} else
|
||||
vty_out(vty, "VRF: %s\n", vrf->name);
|
||||
pim_show_upstream(vrf->info, vty, uj);
|
||||
}
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_pim_upstream_join_desired,
|
||||
show_ip_pim_upstream_join_desired_cmd,
|
||||
"show ip pim [vrf NAME] upstream-join-desired [json]",
|
||||
@ -3728,6 +4026,39 @@ DEFUN (show_ip_pim_rp,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_pim_rp_vrf_all,
|
||||
show_ip_pim_rp_vrf_all_cmd,
|
||||
"show ip pim vrf all rp-info [json]",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
PIM_STR
|
||||
VRF_CMD_HELP_STR
|
||||
"PIM RP information\n"
|
||||
"JavaScript Object Notation\n")
|
||||
{
|
||||
u_char uj = use_json(argc, argv);
|
||||
struct vrf *vrf;
|
||||
bool first = true;
|
||||
|
||||
if (uj)
|
||||
vty_out(vty, "{ ");
|
||||
RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
|
||||
{
|
||||
if (uj) {
|
||||
if (!first)
|
||||
vty_out(vty, ", ");
|
||||
vty_out(vty, " \"%s\": ", vrf->name);
|
||||
first = false;
|
||||
} else
|
||||
vty_out(vty, "VRF: %s\n", vrf->name);
|
||||
pim_rp_show_information(vrf->info, vty, uj);
|
||||
}
|
||||
if (uj)
|
||||
vty_out(vty, "}\n");
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_pim_rpf,
|
||||
show_ip_pim_rpf_cmd,
|
||||
"show ip pim [vrf NAME] rpf [json]",
|
||||
@ -3750,6 +4081,39 @@ DEFUN (show_ip_pim_rpf,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_pim_rpf_vrf_all,
|
||||
show_ip_pim_rpf_vrf_all_cmd,
|
||||
"show ip pim vrf all rpf [json]",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
PIM_STR
|
||||
VRF_CMD_HELP_STR
|
||||
"PIM cached source rpf information\n"
|
||||
"JavaScript Object Notation\n")
|
||||
{
|
||||
u_char uj = use_json(argc, argv);
|
||||
struct vrf *vrf;
|
||||
bool first = true;
|
||||
|
||||
if (uj)
|
||||
vty_out(vty, "{ ");
|
||||
RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
|
||||
{
|
||||
if (uj) {
|
||||
if (!first)
|
||||
vty_out(vty, ", ");
|
||||
vty_out(vty, " \"%s\": ", vrf->name);
|
||||
first = false;
|
||||
} else
|
||||
vty_out(vty, "VRF: %s\n", vrf->name);
|
||||
pim_show_rpf(vrf->info, vty, uj);
|
||||
}
|
||||
if (uj)
|
||||
vty_out(vty, "}\n");
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_pim_nexthop,
|
||||
show_ip_pim_nexthop_cmd,
|
||||
"show ip pim [vrf NAME] nexthop",
|
||||
@ -3924,22 +4288,13 @@ static void show_multicast_interfaces(struct pim_instance *pim, struct vty *vty)
|
||||
}
|
||||
}
|
||||
|
||||
DEFUN (show_ip_multicast,
|
||||
show_ip_multicast_cmd,
|
||||
"show ip multicast [vrf NAME]",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
VRF_CMD_HELP_STR
|
||||
"Multicast global information\n")
|
||||
static void pim_cmd_show_ip_multicast_helper(struct pim_instance *pim,
|
||||
struct vty *vty)
|
||||
{
|
||||
int idx = 2;
|
||||
struct vrf *vrf = pim_cmd_lookup_vrf(vty, argv, argc, &idx);
|
||||
struct pim_instance *pim;
|
||||
struct vrf *vrf = pim->vrf;
|
||||
time_t now = pim_time_monotonic_sec();
|
||||
char uptime[10];
|
||||
|
||||
if (!vrf)
|
||||
return CMD_WARNING;
|
||||
pim = vrf->info;
|
||||
|
||||
vty_out(vty, "Mroute socket descriptor:");
|
||||
@ -3974,6 +4329,54 @@ DEFUN (show_ip_multicast,
|
||||
show_scan_oil_stats(pim, vty, now);
|
||||
|
||||
show_multicast_interfaces(pim, vty);
|
||||
}
|
||||
|
||||
DEFUN (show_ip_multicast,
|
||||
show_ip_multicast_cmd,
|
||||
"show ip multicast [vrf NAME]",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
VRF_CMD_HELP_STR
|
||||
"Multicast global information\n")
|
||||
{
|
||||
int idx = 2;
|
||||
struct vrf *vrf = pim_cmd_lookup_vrf(vty, argv, argc, &idx);
|
||||
|
||||
if (!vrf)
|
||||
return CMD_WARNING;
|
||||
|
||||
pim_cmd_show_ip_multicast_helper(vrf->info, vty);
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_multicast_vrf_all,
|
||||
show_ip_multicast_vrf_all_cmd,
|
||||
"show ip multicast vrf all",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
VRF_CMD_HELP_STR
|
||||
"Multicast global information\n")
|
||||
{
|
||||
u_char uj = use_json(argc, argv);
|
||||
struct vrf *vrf;
|
||||
bool first = true;
|
||||
|
||||
if (uj)
|
||||
vty_out(vty, "{ ");
|
||||
RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
|
||||
{
|
||||
if (uj) {
|
||||
if (!first)
|
||||
vty_out(vty, ", ");
|
||||
vty_out(vty, " \"%s\": ", vrf->name);
|
||||
first = false;
|
||||
} else
|
||||
vty_out(vty, "VRF: %s\n", vrf->name);
|
||||
pim_cmd_show_ip_multicast_helper(vrf->info, vty);
|
||||
}
|
||||
if (uj)
|
||||
vty_out(vty, "}\n");
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
@ -7257,6 +7660,39 @@ DEFUN (show_ip_msdp_mesh_group,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_msdp_mesh_group_vrf_all,
|
||||
show_ip_msdp_mesh_group_vrf_all_cmd,
|
||||
"show ip msdp vrf all mesh-group [json]",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
MSDP_STR
|
||||
VRF_CMD_HELP_STR
|
||||
"MSDP mesh-group information\n"
|
||||
"JavaScript Object Notation\n")
|
||||
{
|
||||
u_char uj = use_json(argc, argv);
|
||||
struct vrf *vrf;
|
||||
bool first = true;
|
||||
|
||||
if (uj)
|
||||
vty_out(vty, "{ ");
|
||||
RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
|
||||
{
|
||||
if (uj) {
|
||||
if (!first)
|
||||
vty_out(vty, ", ");
|
||||
vty_out(vty, " \"%s\": ", vrf->name);
|
||||
first = false;
|
||||
} else
|
||||
vty_out(vty, "VRF: %s\n", vrf->name);
|
||||
ip_msdp_show_mesh_group(vrf->info, vty, uj);
|
||||
}
|
||||
if (uj)
|
||||
vty_out(vty, "}\n");
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
static void ip_msdp_show_peers(struct pim_instance *pim, struct vty *vty,
|
||||
u_char uj)
|
||||
{
|
||||
@ -7443,6 +7879,47 @@ DEFUN (show_ip_msdp_peer_detail,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_msdp_peer_detail_vrf_all,
|
||||
show_ip_msdp_peer_detail_vrf_all_cmd,
|
||||
"show ip msdp vrf all peer [detail|A.B.C.D] [json]",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
MSDP_STR
|
||||
VRF_CMD_HELP_STR
|
||||
"MSDP peer information\n"
|
||||
"Detailed output\n"
|
||||
"peer ip address\n"
|
||||
"JavaScript Object Notation\n")
|
||||
{
|
||||
int idx = 2;
|
||||
u_char uj = use_json(argc, argv);
|
||||
struct vrf *vrf;
|
||||
bool first = true;
|
||||
|
||||
if (uj)
|
||||
vty_out(vty, "{ ");
|
||||
RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
|
||||
{
|
||||
if (uj) {
|
||||
if (!first)
|
||||
vty_out(vty, ", ");
|
||||
vty_out(vty, " \"%s\": ", vrf->name);
|
||||
first = false;
|
||||
} else
|
||||
vty_out(vty, "VRF: %s\n", vrf->name);
|
||||
if (argv_find(argv, argc, "detail", &idx)
|
||||
|| argv_find(argv, argc, "A.B.C.D", &idx))
|
||||
ip_msdp_show_peers_detail(vrf->info, vty,
|
||||
argv[idx]->arg, uj);
|
||||
else
|
||||
ip_msdp_show_peers(vrf->info, vty, uj);
|
||||
}
|
||||
if (uj)
|
||||
vty_out(vty, "}\n");
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
static void ip_msdp_show_sa(struct pim_instance *pim, struct vty *vty,
|
||||
u_char uj)
|
||||
{
|
||||
@ -7634,6 +8111,40 @@ DEFUN (show_ip_msdp_sa_detail,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN (show_ip_msdp_sa_detail_vrf_all,
|
||||
show_ip_msdp_sa_detail_vrf_all_cmd,
|
||||
"show ip msdp vrf all sa detail [json]",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
MSDP_STR
|
||||
VRF_CMD_HELP_STR
|
||||
"MSDP active-source information\n"
|
||||
"Detailed output\n"
|
||||
"JavaScript Object Notation\n")
|
||||
{
|
||||
u_char uj = use_json(argc, argv);
|
||||
struct vrf *vrf;
|
||||
bool first = true;
|
||||
|
||||
if (uj)
|
||||
vty_out(vty, "{ ");
|
||||
RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
|
||||
{
|
||||
if (uj) {
|
||||
if (!first)
|
||||
vty_out(vty, ", ");
|
||||
vty_out(vty, " \"%s\": ", vrf->name);
|
||||
first = false;
|
||||
} else
|
||||
vty_out(vty, "VRF: %s\n", vrf->name);
|
||||
ip_msdp_show_sa_detail(vrf->info, vty, uj);
|
||||
}
|
||||
if (uj)
|
||||
vty_out(vty, "}\n");
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
static void ip_msdp_show_sa_addr(struct pim_instance *pim, struct vty *vty,
|
||||
const char *addr, u_char uj)
|
||||
{
|
||||
@ -7833,8 +8344,11 @@ void pim_cmd_init(void)
|
||||
install_element(INTERFACE_NODE, &interface_no_ip_mroute_source_cmd);
|
||||
|
||||
install_element(VIEW_NODE, &show_ip_igmp_interface_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_igmp_interface_vrf_all_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_igmp_join_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_igmp_join_vrf_all_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_igmp_groups_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_igmp_groups_vrf_all_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_igmp_groups_retransmissions_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_igmp_sources_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_igmp_sources_retransmissions_cmd);
|
||||
@ -7844,17 +8358,25 @@ void pim_cmd_init(void)
|
||||
install_element(VIEW_NODE, &show_ip_pim_assert_winner_metric_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_pim_interface_traffic_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_pim_interface_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_pim_interface_vrf_all_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_pim_join_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_pim_join_vrf_all_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_pim_local_membership_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_pim_neighbor_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_pim_neighbor_vrf_all_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_pim_rpf_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_pim_rpf_vrf_all_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_pim_secondary_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_pim_state_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_pim_state_vrf_all_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_pim_upstream_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_pim_upstream_vrf_all_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_pim_upstream_join_desired_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_pim_upstream_rpf_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_pim_rp_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_pim_rp_vrf_all_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_multicast_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_multicast_vrf_all_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_mroute_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_mroute_vrf_all_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_mroute_count_cmd);
|
||||
@ -7964,9 +8486,12 @@ void pim_cmd_init(void)
|
||||
install_element(CONFIG_NODE, &no_ip_msdp_mesh_group_source_cmd);
|
||||
install_element(VRF_NODE, &no_ip_msdp_mesh_group_source_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_msdp_peer_detail_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_msdp_peer_detail_vrf_all_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_msdp_sa_detail_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_msdp_sa_detail_vrf_all_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_msdp_sa_sg_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_msdp_mesh_group_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_msdp_mesh_group_vrf_all_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_pim_ssm_range_cmd);
|
||||
install_element(VIEW_NODE, &show_ip_pim_group_type_cmd);
|
||||
install_element(INTERFACE_NODE, &interface_pim_use_source_cmd);
|
||||
|
Loading…
Reference in New Issue
Block a user