summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonald Sharp <donaldsharp72@gmail.com>2025-02-20 14:19:53 -0500
committerGitHub <noreply@github.com>2025-02-20 14:19:53 -0500
commit312d74048db39052db62f61c5bb996e1535de39e (patch)
treeb33f9f416affa0a10b6bf9387222cf602174688f
parentf6cbcb0b1e5e6a74927263c27454185844a2455c (diff)
parentf12b0bc9c21028ef4b54911f895f7be03531d08c (diff)
Merge pull request #18205 from FRRouting/mergify/bp/stable/10.1/pr-14227
pimd: Fix for data packet loss when FHR is LHR and RP (backport #14227)
-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 b149b5a2a9..ad0c71a234 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 {