summaryrefslogtreecommitdiff
path: root/pimd
diff options
context:
space:
mode:
authorJafar Al-Gharaibeh <Jafaral@users.noreply.github.com>2021-08-24 16:15:39 -0500
committerGitHub <noreply@github.com>2021-08-24 16:15:39 -0500
commit9da861a7128655567c0d0cbc21a4482fc7406146 (patch)
tree5c06d86123cb695a972731db569082aca65af815 /pimd
parentbe64b652528186e223a7d6abd660448db65f71b0 (diff)
parentfcf5d4386aae3d3435e467923ece08ef958b7b21 (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.c15
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) {