diff options
| author | Sai Gomathi <nsaigomathi@vmware.com> | 2021-10-26 07:03:58 -0700 |
|---|---|---|
| committer | Sai Gomathi <nsaigomathi@vmware.com> | 2021-10-26 07:36:24 -0700 |
| commit | c29fec4d3af11da39582c86484c92337fdf128f9 (patch) | |
| tree | ac4007918f62af0ec7f6ba8c856e5257a0afd2b9 /pimd/pim_zebra.c | |
| parent | 34abbcc4b16438c076262e9b4571e5a27efd540b (diff) | |
pimd: modification in mroute
Problem:
-------
(*,G) created on transit node where same groups are defined as SSM
At present FRR has SSM checks for IGMP report, but SSM check is missing for PIM join.
Fix:
----
Whenever there is a modification in prefix list for SSM range, then we need to browse the ifchannels (PIM joins)
and groups coming in SSM range with (and *,G) should be removed from ifchannel database and also withdraw those routes
from upstream routers.
Signed-off-by: Sai Gomathi <nsaigomathi@vmware.com>
Diffstat (limited to 'pimd/pim_zebra.c')
| -rw-r--r-- | pimd/pim_zebra.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/pimd/pim_zebra.c b/pimd/pim_zebra.c index aa041df857..219f41015d 100644 --- a/pimd/pim_zebra.c +++ b/pimd/pim_zebra.c @@ -542,6 +542,7 @@ void igmp_source_forward_reevaluate_all(struct pim_instance *pim) struct pim_interface *pim_ifp = ifp->info; struct listnode *grpnode; struct igmp_group *grp; + struct pim_ifchannel *ch, *ch_temp; if (!pim_ifp) continue; @@ -556,9 +557,17 @@ void igmp_source_forward_reevaluate_all(struct pim_instance *pim) for (ALL_LIST_ELEMENTS_RO(grp->group_source_list, srcnode, src)) { igmp_source_forward_reevaluate_one(pim, src); - } /* scan group sources */ - } /* scan igmp groups */ - } /* scan interfaces */ + } /* scan group sources */ + } /* scan igmp groups */ + + RB_FOREACH_SAFE (ch, pim_ifchannel_rb, &pim_ifp->ifchannel_rb, + ch_temp) { + if (pim_is_grp_ssm(pim, ch->sg.grp)) { + if (ch->sg.src.s_addr == INADDR_ANY) + pim_ifchannel_delete(ch); + } + } + } /* scan interfaces */ } void igmp_source_forward_start(struct pim_instance *pim, |
