]> git.puffer.fish Git - mirror/frr.git/commitdiff
pimd: Querier to non-querier transition to be ignored 11495/head
authorMobashshera Rasool <mrasool@vmware.com>
Mon, 27 Jun 2022 12:25:29 +0000 (05:25 -0700)
committerMergify <37929162+mergify[bot]@users.noreply.github.com>
Wed, 29 Jun 2022 15:00:35 +0000 (15:00 +0000)
Fixing IGMPv2 ANVL Conformance issue 3.10

As per RFC 2236 section 3, when the leave message is received at a querier,
it starts sending Query messages for "last Member Query Interval*query count"
During this time there should not be any querier to non-querier
transition and the same router needs to send the remaning queries.

Currently the code is handling this scenario only when leave is receive
for a group and the query is received for the same group.
But we need to handle it irrespective of group since the querier
election is based on interface and not group.

Signed-off-by: Mobashshera Rasool <mrasool@vmware.com>
(cherry picked from commit 8d9e46a72776f4928de0e8f78edad389c1ff7948)

pimd/pim_igmp.c

index 749e259a7e015b7766f84f607aa6a12f4672b3bf..849216af62ccc6bde8da540f3216a8b05d32753c 100644 (file)
@@ -585,10 +585,14 @@ static int igmp_recv_query(struct gm_sock *igmp, int query_version,
                 * time; the same router keeps sending the Group-Specific
                 * Queries.
                 */
-               struct gm_group *group;
+               const struct gm_group *group;
+               const struct listnode *grpnode;
+
+               for (ALL_LIST_ELEMENTS_RO(pim_ifp->gm_group_list, grpnode,
+                                         group)) {
+                       if (!group->t_group_query_retransmit_timer)
+                               continue;
 
-               group = find_group_by_addr(igmp, group_addr);
-               if (group && group->t_group_query_retransmit_timer) {
                        if (PIM_DEBUG_IGMP_TRACE)
                                zlog_debug(
                                        "%s: lower address query packet from %s is ignored when last member query interval timer is running",