Skip to content

pimd: compute inherited_olist before checking for (S,G,rpt) prune dec…#20521

Merged
Jafaral merged 1 commit intoFRRouting:masterfrom
hnattamaisub:pim
Jan 21, 2026
Merged

pimd: compute inherited_olist before checking for (S,G,rpt) prune dec…#20521
Jafaral merged 1 commit intoFRRouting:masterfrom
hnattamaisub:pim

Conversation

@hnattamaisub
Copy link
Contributor

…ision

Problem description:

  1. In some corner cases in PIM, incorrect (S,G,rpt) prunes were sent causing
    traffic blackholing to downstream receivers.
  2. The inherited_olist emptiness check was performed before the list was
    computed due to lazy population of channel_oil, causing it to incorrectly
    appear empty and prune is incorrectly propogated.

Fix:
Ensure inherited_olist is computed before checking for emptiness during (S,G,rpt) prune decision.

pimd/pim_join.c Outdated
__func__, &group->group, &rpf->rpf_addr,
rpf->source_nexthop.interface->name);

struct pim_jp_sources *first_src = listgetdata(listhead(group->sources));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From my perspective, doesn't this fix belong in pim_ifchannel_prune? The decision is that we should check the inherited_olist upon reception of a prune and when we move from state to state. This is a forwarding (upstream) decision based upon the reception of the S,G rpt prune, such that we can determine whether or not the inherited_olist has anything in it all based upon the (*
,G), (S,G) and (S,G, rpt) state on the particular interface. In other words why do you think this is a send time decision for the upstream? Instead of a reception time for the S,G rpt prune?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

@hnattamaisub hnattamaisub force-pushed the pim branch 3 times, most recently from 9830ce9 to 6ad1bdc Compare January 21, 2026 05:42
@hnattamaisub
Copy link
Contributor Author

ci:rerun

Copy link
Contributor

@nabahr nabahr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good besides a couple small things.

…ision

Problem description:
1) In some corner cases in PIM, incorrect (S,G,rpt) prunes were sent causing
   traffic blackholing to downstream receivers.
2) The inherited_olist emptiness check was performed before the list was
   computed due to lazy population of channel_oil, causing it to incorrectly
   appear empty and prune is incorrectly propogated.

Fix:
Ensure inherited_olist is computed before checking for emptiness during
(S,G,rpt) prune decision.

Signed-off-by: harini <hnattamaisub@nvidia.com>
@Jafaral Jafaral merged commit 6acec95 into FRRouting:master Jan 21, 2026
19 checks passed
@Jafaral
Copy link
Member

Jafaral commented Jan 21, 2026

@Mergifyio backport stable/10.5 stable/10.4

@mergify
Copy link

mergify bot commented Jan 21, 2026

backport stable/10.5 stable/10.4

✅ Backports have been created

Details

Jafaral added a commit that referenced this pull request Jan 21, 2026
pimd: compute inherited_olist before checking for (S,G,rpt) prune dec… (backport #20521)
donaldsharp added a commit that referenced this pull request Jan 22, 2026
pimd: compute inherited_olist before checking for (S,G,rpt) prune dec… (backport #20521)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants