diff options
| author | Donald Sharp <donaldsharp72@gmail.com> | 2025-02-20 16:20:09 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-20 16:20:09 -0500 |
| commit | 24dbcbb31ee5edd79c0ed309e728d6758b8b0e76 (patch) | |
| tree | 3319e7b4620a8a72e340fbbf09bb64698eec1d69 | |
| parent | 211df1f6491a76a6449755a3983242e669967796 (diff) | |
| parent | 02de49a3b25d36d02b675caedb198a0474e8c03f (diff) | |
Merge pull request #18203 from FRRouting/mergify/bp/dev/10.3/pr-14227
pimd: Fix for data packet loss when FHR is LHR and RP (backport #14227)
| -rw-r--r-- | pimd/pim_register.c | 19 |
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 { |
