diff options
| author | Donald Sharp <donaldsharp72@gmail.com> | 2022-03-15 07:54:04 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-03-15 07:54:04 -0400 | 
| commit | 6ec6186af9987b3e2b698943b6e77f2e07e31067 (patch) | |
| tree | f8b270eefee00e700348122fa04db8b824fc0e86 /pimd/pim_igmpv2.c | |
| parent | 341e1d6e0a1f6524197142e679929bcd52385978 (diff) | |
| parent | d6f31d2ab3e72e4dd70b998017660618bab4f3a3 (diff) | |
Merge pull request #10012 from AbhishekNR/upstream
pimd : Handling of Exclude mode IGMPv3 report messages for SSM aware group.
Diffstat (limited to 'pimd/pim_igmpv2.c')
| -rw-r--r-- | pimd/pim_igmpv2.c | 21 | 
1 files changed, 21 insertions, 0 deletions
diff --git a/pimd/pim_igmpv2.c b/pimd/pim_igmpv2.c index 09a82069a2..34cda25963 100644 --- a/pimd/pim_igmpv2.c +++ b/pimd/pim_igmpv2.c @@ -24,6 +24,7 @@  #include "pim_igmp.h"  #include "pim_igmpv2.h"  #include "pim_igmpv3.h" +#include "pim_ssm.h"  #include "pim_str.h"  #include "pim_time.h"  #include "pim_util.h" @@ -107,10 +108,13 @@ int igmp_v2_recv_report(struct gm_sock *igmp, struct in_addr from,  {  	struct interface *ifp = igmp->interface;  	struct in_addr group_addr; +	struct pim_interface *pim_ifp;  	char group_str[INET_ADDRSTRLEN];  	on_trace(__func__, igmp->interface, from); +	pim_ifp = ifp->info; +  	if (igmp->mtrace_only)  		return 0; @@ -142,6 +146,23 @@ int igmp_v2_recv_report(struct gm_sock *igmp, struct in_addr from,  	}  	/* +	 * 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_ifp->pim, group_addr)) { +		if (PIM_DEBUG_IGMP_PACKETS) { +			zlog_debug( +				"Ignoring IGMPv2 group record %pI4 from %s on %s exclude mode in SSM range", +				&group_addr.s_addr, from_str, ifp->name); +		} +		return -1; +	} + + +	/*  	 * RFC 3376  	 * 7.3.2. In the Presence of Older Version Group Members  	 *  | 
