]> git.puffer.fish Git - matthieu/frr.git/commitdiff
pimd: stop t_sg_expire in MLD NOINFO transition
authorDavid Lamparter <equinox@opensourcerouting.org>
Fri, 17 Mar 2023 12:34:46 +0000 (13:34 +0100)
committerDavid Lamparter <equinox@opensourcerouting.org>
Fri, 17 Mar 2023 12:38:31 +0000 (13:38 +0100)
When hitting gm_sg_update from the S,G expiry timer, t_sg_expire will
already be cancelled.  But when arriving there from e.g. the MLD packet
getting cleared out, it'll still be running.

Clear out the timer if we arrive with `has_expired == true`.

Fixes: #12441
Reported-by: Vijay Kumar Gupta <vijayg@vmware.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
pimd/pim6_mld.c

index fcece56c6fafd626c84c80b6807f7a52d646f46d..fa699cca5e7b7623707f43976c4d234db6f9c7b5 100644 (file)
@@ -438,6 +438,13 @@ static void gm_sg_update(struct gm_sg *sg, bool has_expired)
        }
 
        if (desired == GM_SG_NOINFO) {
+               /* multiple paths can lead to the last state going away;
+                * t_sg_expire can still be running if we're arriving from
+                * another path.
+                */
+               if (has_expired)
+                       THREAD_OFF(sg->t_sg_expire);
+
                assertf((!sg->t_sg_expire &&
                         !gm_packet_sg_subs_count(sg->subs_positive) &&
                         !gm_packet_sg_subs_count(sg->subs_negative)),