summaryrefslogtreecommitdiff
path: root/pimd/pim_igmpv3.c
diff options
context:
space:
mode:
authorSai Gomathi <nsaigomathi@vmware.com>2021-08-18 01:28:28 -0700
committerSai Gomathi <nsaigomathi@vmware.com>2021-08-23 22:25:30 -0700
commitfcf5d4386aae3d3435e467923ece08ef958b7b21 (patch)
tree6b42b2af885707ad1084a3806de3122bb18cf8d5 /pimd/pim_igmpv3.c
parentac43358c17aa82e9cbe47715213b1bd50cc29a67 (diff)
pimd: IGMP groups are not getting timeout
Problem : ======= When all the groups from Ixia are stopped, groups still keep refreshing and not getting timeout RCA: ==== IGMP Report is coming in include mode without any source address, this problem will come. Fix : === 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. When an interface receives the IGMP report without any source, then the group is deleted. Signed-off-by: Sai Gomathi <nsaigomathi@vmware.com>
Diffstat (limited to 'pimd/pim_igmpv3.c')
-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) {