summaryrefslogtreecommitdiff
path: root/pimd/pim_zebra.c
diff options
context:
space:
mode:
authorSai Gomathi <nsaigomathi@vmware.com>2021-10-26 07:03:58 -0700
committerSai Gomathi <nsaigomathi@vmware.com>2021-10-26 07:36:24 -0700
commitc29fec4d3af11da39582c86484c92337fdf128f9 (patch)
treeac4007918f62af0ec7f6ba8c856e5257a0afd2b9 /pimd/pim_zebra.c
parent34abbcc4b16438c076262e9b4571e5a27efd540b (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.c15
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,