diff options
| author | Jafar Al-Gharaibeh <Jafaral@users.noreply.github.com> | 2021-08-24 16:15:39 -0500 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-24 16:15:39 -0500 | 
| commit | 9da861a7128655567c0d0cbc21a4482fc7406146 (patch) | |
| tree | 5c06d86123cb695a972731db569082aca65af815 /pimd | |
| parent | be64b652528186e223a7d6abd660448db65f71b0 (diff) | |
| parent | fcf5d4386aae3d3435e467923ece08ef958b7b21 (diff) | |
Merge pull request #9435 from SaiGomathiN/sai-igmp
pimd: IGMP groups are not getting timeout
Diffstat (limited to 'pimd')
| -rw-r--r-- | pimd/pim_igmpv3.c | 15 | 
1 files changed, 15 insertions, 0 deletions
diff --git a/pimd/pim_igmpv3.c b/pimd/pim_igmpv3.c index afa2db5f15..572d3a6aba 100644 --- a/pimd/pim_igmpv3.c +++ b/pimd/pim_igmpv3.c @@ -499,6 +499,21 @@ static void allow(struct igmp_sock *igmp, struct in_addr from,  	struct igmp_group *group;  	int i; +	if (num_sources == 0) { +		/* +		  RFC 3376: 3.1. Socket-State +		  If the requested filter mode is INCLUDE *and* the requested +		  source list is empty, then the entry corresponding to the +		  requested interface and multicast address is deleted if +		  present. If no such entry is present, the request is ignored. +		  So, deleting the group present. +		*/ +		group = find_group_by_addr(igmp, group_addr); +		if (group && (group->group_filtermode_isexcl == 0)) +			igmp_group_delete(group); +		return; +	} +  	/* non-existant group is created as INCLUDE {empty} */  	group = igmp_add_group_by_addr(igmp, group_addr);  	if (!group) {  | 
