From 2243bb17bd52ff12e0a1ff3edd1f0b65dc06e7e0 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Tue, 15 Aug 2017 10:16:51 -0400 Subject: [PATCH 1/4] pimd: Allow user to specify ip address for 'no ip pim use-source' Signed-off-by: Donald Sharp --- pimd/pim_cmd.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index d7e94d11dd..1665591148 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -7308,11 +7308,12 @@ DEFUN (interface_pim_use_source, DEFUN (interface_no_pim_use_source, interface_no_pim_use_source_cmd, - "no ip pim use-source", + "no ip pim use-source [A.B.C.D]", NO_STR IP_STR "pim multicast routing\n" - "Delete source IP address\n") + "Delete source IP address\n" + "source ip address\n") { return interface_pim_use_src_cmd_worker(vty, "0.0.0.0"); } From 8dbdb215b33aad364e025e9c4476a3a6c5fced84 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Tue, 15 Aug 2017 10:17:33 -0400 Subject: [PATCH 2/4] pimd: Add more vrf debugging to pim_upstream.c Cleanup a few missed spots of debugging to know what vrf we are talking about. Signed-off-by: Donald Sharp --- pimd/pim_upstream.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/pimd/pim_upstream.c b/pimd/pim_upstream.c index cc90cef3ae..751611479e 100644 --- a/pimd/pim_upstream.c +++ b/pimd/pim_upstream.c @@ -167,8 +167,9 @@ struct pim_upstream *pim_upstream_del(struct pim_instance *pim, if (PIM_DEBUG_TRACE) zlog_debug( - "%s(%s): Delete %s ref count: %d , flags: %d c_oil ref count %d (Pre decrement)", - __PRETTY_FUNCTION__, name, up->sg_str, up->ref_count, + "%s(%s): Delete %s[%s] ref count: %d , flags: %d c_oil ref count %d (Pre decrement)", + __PRETTY_FUNCTION__, name, up->sg_str, + pim->vrf->name, up->ref_count, up->flags, up->channel_oil->oil_ref_count); --up->ref_count; @@ -948,8 +949,8 @@ void pim_upstream_rpf_genid_changed(struct pim_instance *pim, pim_addr_dump("", &up->rpf.rpf_addr, rpf_addr_str, sizeof(rpf_addr_str)); zlog_debug( - "%s: matching neigh=%s against upstream (S,G)=%s joined=%d rpf_addr=%s", - __PRETTY_FUNCTION__, neigh_str, up->sg_str, + "%s: matching neigh=%s against upstream (S,G)=%s[%s] joined=%d rpf_addr=%s", + __PRETTY_FUNCTION__, neigh_str, up->sg_str, pim->vrf->name, up->join_state == PIM_UPSTREAM_JOINED, rpf_addr_str); } @@ -1106,8 +1107,8 @@ static int pim_upstream_keep_alive_timer(struct thread *t) if (PIM_UPSTREAM_FLAG_TEST_SRC_STREAM(up->flags)) { pim_upstream_fhr_kat_expiry(pim, up); if (PIM_DEBUG_TRACE) - zlog_debug("kat expired on %s; remove stream reference", - up->sg_str); + zlog_debug("kat expired on %s[%s]; remove stream reference", + up->sg_str, pim->vrf->name); PIM_UPSTREAM_FLAG_UNSET_SRC_STREAM(up->flags); pim_upstream_del(pim, up, __PRETTY_FUNCTION__); } else if (PIM_UPSTREAM_FLAG_TEST_SRC_LHR(up->flags)) { @@ -1334,8 +1335,8 @@ static int pim_upstream_register_stop_timer(struct thread *t) if (PIM_DEBUG_TRACE) { char state_str[PIM_REG_STATE_STR_LEN]; - zlog_debug("%s: (S,G)=%s upstream register stop timer %s", - __PRETTY_FUNCTION__, up->sg_str, + zlog_debug("%s: (S,G)=%s[%s] upstream register stop timer %s", + __PRETTY_FUNCTION__, up->sg_str, pim->vrf->name, pim_reg_state2str(up->reg_state, state_str)); } @@ -1637,8 +1638,8 @@ static void pim_upstream_sg_running(void *arg) if (up->channel_oil->oil_inherited_rescan) { if (PIM_DEBUG_TRACE) zlog_debug( - "%s: Handling unscanned inherited_olist for %s", - __PRETTY_FUNCTION__, up->sg_str); + "%s: Handling unscanned inherited_olist for %s[%s]", + __PRETTY_FUNCTION__, up->sg_str, pim->vrf->name); pim_upstream_inherited_olist_decide(pim, up); up->channel_oil->oil_inherited_rescan = 0; } @@ -1649,8 +1650,8 @@ static void pim_upstream_sg_running(void *arg) && (up->channel_oil->cc.lastused / 100 > 30)) { if (PIM_DEBUG_TRACE) { zlog_debug( - "%s: %s old packet count is equal or lastused is greater than 30, (%ld,%ld,%lld)", - __PRETTY_FUNCTION__, up->sg_str, + "%s[%s]: %s old packet count is equal or lastused is greater than 30, (%ld,%ld,%lld)", + __PRETTY_FUNCTION__, up->sg_str, pim->vrf->name, up->channel_oil->cc.oldpktcnt, up->channel_oil->cc.pktcnt, up->channel_oil->cc.lastused / 100); @@ -1664,8 +1665,8 @@ static void pim_upstream_sg_running(void *arg) if (!PIM_UPSTREAM_FLAG_TEST_SRC_STREAM(up->flags)) { if (PIM_DEBUG_TRACE) zlog_debug( - "source reference created on kat restart %s", - up->sg_str); + "source reference created on kat restart %s[%s]", + up->sg_str, pim->vrf->name); pim_upstream_ref(up, PIM_UPSTREAM_FLAG_MASK_SRC_STREAM, __PRETTY_FUNCTION__); From 15507b63e616276b839a0cc4f15c8aef6a2e446d Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Tue, 15 Aug 2017 10:31:09 -0400 Subject: [PATCH 3/4] pimd: Rename duplicate JSON key Signed-off-by: Donald Sharp --- pimd/pim_cmd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index 1665591148..8b3badd6ee 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -1369,7 +1369,7 @@ static void pim_show_interfaces(struct pim_instance *pim, struct vty *vty, json_object_pim_ifp_add(json_row, ifp); json_object_int_add(json_row, "pimNeighbors", pim_nbrs); json_object_int_add(json_row, "pimIfChannels", pim_ifchannels); - json_object_int_add(json_row, "firstHopRouter", fhr); + json_object_int_add(json_row, "firstHopRouterCount", fhr); json_object_string_add(json_row, "pimDesignatedRouter", inet_ntoa(pim_ifp->pim_dr_addr)); From 47bf9e213abb002512468324158db5bc62fd00ff Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Tue, 15 Aug 2017 16:37:13 -0400 Subject: [PATCH 4/4] pimd: Add 'show ip msdp vrf all sa ...' command Allow the ability to iterate over all vrfs. Signed-off-by: Donald Sharp --- pimd/pim_cmd.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index 8b3badd6ee..b65eeaba01 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -8383,6 +8383,54 @@ DEFUN (show_ip_msdp_sa_sg, return CMD_SUCCESS; } +DEFUN (show_ip_msdp_sa_sg_vrf_all, + show_ip_msdp_sa_sg_vrf_all_cmd, + "show ip msdp vrf all sa [A.B.C.D [A.B.C.D]] [json]", + SHOW_STR + IP_STR + MSDP_STR + VRF_CMD_HELP_STR + "MSDP active-source information\n" + "source or group ip\n" + "group ip\n" + JSON_STR) +{ + u_char uj = use_json(argc, argv); + struct vrf *vrf; + bool first = true; + int idx = 2; + + char *src_ip = argv_find(argv, argc, "A.B.C.D", &idx) ? argv[idx++]->arg + : NULL; + char *grp_ip = idx < argc && argv_find(argv, argc, "A.B.C.D", &idx) + ? argv[idx]->arg + : NULL; + + 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 (src_ip && grp_ip) + ip_msdp_show_sa_sg(vrf->info, vty, src_ip, grp_ip, uj); + else if (src_ip) + ip_msdp_show_sa_addr(vrf->info, vty, src_ip, uj); + else + ip_msdp_show_sa(vrf->info, vty, uj); + } + if (uj) + vty_out(vty, "}\n"); + + return CMD_SUCCESS; +} + + void pim_cmd_init(void) { install_node(&pim_global_node, pim_global_config_write); /* PIM_NODE */ @@ -8638,6 +8686,7 @@ void pim_cmd_init(void) 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_sa_sg_vrf_all_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);