summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJafar Al-Gharaibeh <jafar@atcorp.com>2022-03-23 12:17:27 -0500
committerGitHub <noreply@github.com>2022-03-23 12:17:27 -0500
commitc4cb7b1172259bccde4dc4f3c49ac34a11bb609f (patch)
treef03373194f3a1917707a2e29f2e26421254b3bad
parent116f0dd90507c71a557214877c9c4df5a6a77e12 (diff)
parent6d0a6ede82d7e02581c4fb9f585239d2358bd45e (diff)
Merge pull request #10844 from mobash-rasool/fixes
pimd: correct prefix-list ssm range update for exclude mode
-rw-r--r--pimd/pim_igmp.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/pimd/pim_igmp.c b/pimd/pim_igmp.c
index aa6b30c624..57c4cdc470 100644
--- a/pimd/pim_igmp.c
+++ b/pimd/pim_igmp.c
@@ -131,12 +131,27 @@ void igmp_source_forward_reevaluate_all(struct pim_instance *pim)
struct listnode *srcnode;
struct gm_source *src;
- /* scan group sources */
- for (ALL_LIST_ELEMENTS_RO(grp->group_source_list,
- srcnode, src)) {
- igmp_source_forward_reevaluate_one(pim, src);
- } /* scan group sources */
- } /* scan igmp groups */
+ /*
+ * RFC 4604
+ * section 2.2.1
+ * EXCLUDE mode does not apply to SSM addresses,
+ * and an SSM-aware router will ignore
+ * MODE_IS_EXCLUDE and CHANGE_TO_EXCLUDE_MODE
+ * requests in the SSM range.
+ */
+ if (pim_is_grp_ssm(pim, grp->group_addr) &&
+ grp->group_filtermode_isexcl) {
+ igmp_group_delete(grp);
+ } else {
+ /* scan group sources */
+ for (ALL_LIST_ELEMENTS_RO(
+ grp->group_source_list, srcnode,
+ src)) {
+ igmp_source_forward_reevaluate_one(pim,
+ src);
+ } /* scan group sources */
+ }
+ } /* scan igmp groups */
RB_FOREACH_SAFE (ch, pim_ifchannel_rb, &pim_ifp->ifchannel_rb,
ch_temp) {