return CMD_SUCCESS;
}
+DEFPY (show_ipv6_pim_local_membership,
+ show_ipv6_pim_local_membership_cmd,
+ "show ipv6 pim [vrf NAME] local-membership [json$json]",
+ SHOW_STR
+ IPV6_STR
+ PIM_STR
+ VRF_CMD_HELP_STR
+ "PIM interface local-membership\n"
+ JSON_STR)
+{
+ struct vrf *v;
+ bool uj = !!json;
+
+ v = vrf_lookup_by_name(vrf ? vrf : VRF_DEFAULT_NAME);
+
+ if (!v)
+ return CMD_WARNING;
+
+ pim_show_membership(v->info, vty, uj);
+
+ return CMD_SUCCESS;
+}
+
void pim_cmd_init(void)
{
if_cmd_init(pim_interface_config_write);
install_element(VIEW_NODE, &show_ipv6_pim_join_cmd);
install_element(VIEW_NODE, &show_ipv6_pim_join_vrf_all_cmd);
install_element(VIEW_NODE, &show_ipv6_pim_jp_agg_cmd);
+ install_element(VIEW_NODE, &show_ipv6_pim_local_membership_cmd);
}
return CMD_SUCCESS;
}
-DEFUN (show_ip_pim_local_membership,
+DEFPY (show_ip_pim_local_membership,
show_ip_pim_local_membership_cmd,
- "show ip pim [vrf NAME] local-membership [json]",
+ "show ip pim [vrf NAME] local-membership [json$json]",
SHOW_STR
IP_STR
PIM_STR
"PIM interface local-membership\n"
JSON_STR)
{
- int idx = 2;
- struct vrf *vrf = pim_cmd_lookup_vrf(vty, argv, argc, &idx);
- bool uj = use_json(argc, argv);
+ struct vrf *v;
+ bool uj = !!json;
- if (!vrf)
+ v = vrf_lookup_by_name(vrf ? vrf : VRF_DEFAULT_NAME);
+
+ if (!v)
return CMD_WARNING;
- pim_show_membership(vrf->info, vty, uj);
+ pim_show_membership(v->info, vty, uj);
return CMD_SUCCESS;
}
struct pim_ifchannel *ch,
struct json_object *json)
{
- char ch_grp_str[PIM_ADDRSTRLEN];
json_object *json_iface = NULL;
json_object *json_row = NULL;
json_object_object_add(json, ch->interface->name, json_iface);
}
- snprintfrr(ch_grp_str, sizeof(ch_grp_str), "%pPAs", &ch->sg.grp);
-
json_row = json_object_new_object();
json_object_string_addf(json_row, "source", "%pPAs", &ch->sg.src);
- json_object_string_add(json_row, "group", ch_grp_str);
+ json_object_string_addf(json_row, "group", "%pPAs", &ch->sg.grp);
json_object_string_add(json_row, "localMembership",
ch->local_ifmembership == PIM_IFMEMBERSHIP_NOINFO
- ? "NOINFO"
- : "INCLUDE");
- json_object_object_add(json_iface, ch_grp_str, json_row);
+ ? "NOINFO"
+ : "INCLUDE");
+ json_object_object_addf(json_iface, json_row, "%pPAs", &ch->sg.grp);
}
void pim_show_membership(struct pim_instance *pim, struct vty *vty, bool uj)
}
if (uj) {
- vty_out(vty, "%s\n", json_object_to_json_string_ext(
- json, JSON_C_TO_STRING_PRETTY));
+ vty_json(vty, json);
} else {
vty_out(vty,
"Interface Address Source Group Membership\n");
}
}
}
+ json_object_free(json);
}
-
- json_object_free(json);
}
static void pim_show_channel_helper(struct pim_instance *pim, struct vty *vty,