summaryrefslogtreecommitdiff
path: root/pimd
diff options
context:
space:
mode:
authorJafar Al-Gharaibeh <jafar@atcorp.com>2025-02-20 10:56:05 -0600
committerGitHub <noreply@github.com>2025-02-20 10:56:05 -0600
commitfc6b0413fa3f9d52857f6b534d5ab6ab1420b3b2 (patch)
treec54ef73a04158bb6d805e877caf06e0fb3a95b9b /pimd
parentdad880201ba4535e0ff74937b9afceef86284020 (diff)
parent8280257cc99e071c205e469399f2fb41671b30eb (diff)
Merge pull request #14227 from routingrocks/pim_data_fix
pimd: Fix for data packet loss when FHR is LHR and RP
Diffstat (limited to 'pimd')
-rw-r--r--pimd/pim_register.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/pimd/pim_register.c b/pimd/pim_register.c
index f776a59b7f..29e658ef16 100644
--- a/pimd/pim_register.c
+++ b/pimd/pim_register.c
@@ -186,8 +186,9 @@ int pim_register_stop_recv(struct interface *ifp, uint8_t *buf, int buf_size)
*/
for (ALL_LIST_ELEMENTS_RO(up->sources, up_node, child)) {
if (PIM_DEBUG_PIM_REG)
- zlog_debug("Executing Reg stop for %s",
- child->sg_str);
+ zlog_debug(
+ "Executing Reg stop for upstream child %s",
+ child->sg_str);
pim_reg_stop_upstream(pim, child);
}
@@ -208,8 +209,9 @@ int pim_register_stop_recv(struct interface *ifp, uint8_t *buf, int buf_size)
frr_each (rb_pim_upstream, &pim->upstream_head, up) {
if (pim_addr_cmp(up->sg.grp, sg.grp) == 0) {
if (PIM_DEBUG_PIM_REG)
- zlog_debug("Executing Reg stop for %s",
- up->sg_str);
+ zlog_debug(
+ "Executing Reg stop for upstream %s",
+ up->sg_str);
pim_reg_stop_upstream(pim, up);
}
}
@@ -682,9 +684,12 @@ int pim_register_recv(struct interface *ifp, pim_addr dest_addr,
}
}
- if ((upstream->sptbit == PIM_UPSTREAM_SPTBIT_TRUE)
- || ((SwitchToSptDesiredOnRp(pim, &sg))
- && pim_upstream_inherited_olist(pim, upstream) == 0)) {
+ if ((upstream->sptbit == PIM_UPSTREAM_SPTBIT_TRUE) ||
+ (PIM_UPSTREAM_FLAG_TEST_FHR(upstream->flags) && i_am_rp) ||
+ ((SwitchToSptDesiredOnRp(pim, &sg)) &&
+ pim_upstream_inherited_olist(pim, upstream) == 0)) {
+ zlog_debug("sending pim register stop message : %s ",
+ upstream->sg_str);
pim_register_stop_send(ifp, &sg, dest_addr, src_addr);
sentRegisterStop = 1;
} else {