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,  | 
