summaryrefslogtreecommitdiff
path: root/pimd/pim_jp_agg.c
diff options
context:
space:
mode:
Diffstat (limited to 'pimd/pim_jp_agg.c')
-rw-r--r--pimd/pim_jp_agg.c37
1 files changed, 33 insertions, 4 deletions
diff --git a/pimd/pim_jp_agg.c b/pimd/pim_jp_agg.c
index 5f9e166810..2662c9eae6 100644
--- a/pimd/pim_jp_agg.c
+++ b/pimd/pim_jp_agg.c
@@ -148,7 +148,8 @@ pim_jp_agg_get_interface_upstream_switch_list(struct pim_rpf *rpf)
return pius;
}
-void pim_jp_agg_remove_group(struct list *group, struct pim_upstream *up)
+void pim_jp_agg_remove_group(struct list *group, struct pim_upstream *up,
+ struct pim_neighbor *nbr)
{
struct listnode *node, *nnode;
struct pim_jp_agg_group *jag = NULL;
@@ -167,6 +168,20 @@ void pim_jp_agg_remove_group(struct list *group, struct pim_upstream *up)
break;
}
+ if (nbr) {
+ if (PIM_DEBUG_TRACE) {
+ char src_str[INET_ADDRSTRLEN];
+
+ pim_inet4_dump("<src?>", nbr->source_addr, src_str,
+ sizeof(src_str));
+ zlog_debug(
+ "up %s remove from nbr %s/%s jp-agg-list",
+ up->sg_str,
+ nbr->interface->name,
+ src_str);
+ }
+ }
+
if (js) {
js->up = NULL;
listnode_delete(jag->sources, js);
@@ -254,7 +269,7 @@ void pim_jp_agg_upstream_verification(struct pim_upstream *up, bool ignore)
}
void pim_jp_agg_add_group(struct list *group, struct pim_upstream *up,
- bool is_join)
+ bool is_join, struct pim_neighbor *nbr)
{
struct listnode *node, *nnode;
struct pim_jp_agg_group *jag = NULL;
@@ -280,6 +295,20 @@ void pim_jp_agg_add_group(struct list *group, struct pim_upstream *up,
break;
}
+ if (nbr) {
+ if (PIM_DEBUG_TRACE) {
+ char src_str[INET_ADDRSTRLEN];
+
+ pim_inet4_dump("<src?>", nbr->source_addr, src_str,
+ sizeof(src_str));
+ zlog_debug(
+ "up %s add to nbr %s/%s jp-agg-list",
+ up->sg_str,
+ up->rpf.source_nexthop.interface->name,
+ src_str);
+ }
+ }
+
if (!js) {
js = XCALLOC(MTYPE_PIM_JP_AGG_SOURCE,
sizeof(struct pim_jp_sources));
@@ -320,11 +349,11 @@ void pim_jp_agg_switch_interface(struct pim_rpf *orpf, struct pim_rpf *nrpf,
/* send Prune(S,G) to the old upstream neighbor */
if (opius)
- pim_jp_agg_add_group(opius->us, up, false);
+ pim_jp_agg_add_group(opius->us, up, false, NULL);
/* send Join(S,G) to the current upstream neighbor */
if (npius)
- pim_jp_agg_add_group(npius->us, up, true);
+ pim_jp_agg_add_group(npius->us, up, true, NULL);
}