summaryrefslogtreecommitdiffstats
path: root/pimd/pim6_mld.c
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@opensourcerouting.org>2023-03-17 13:34:46 +0100
committerDavid Lamparter <equinox@opensourcerouting.org>2023-03-17 13:38:31 +0100
commitf4ac0a1c7c8ff737b38befcc3618323162e62c0a (patch)
tree70b1df01f146dcaf03b37a4af3a040ef1e2bc206 /pimd/pim6_mld.c
parentMerge pull request #13016 from opensourcerouting/feature/ospf_logging_upstrea... (diff)
downloadfrr-f4ac0a1c7c8ff737b38befcc3618323162e62c0a.tar.xz
frr-f4ac0a1c7c8ff737b38befcc3618323162e62c0a.zip
pimd: stop t_sg_expire in MLD NOINFO transition
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>
Diffstat (limited to '')
-rw-r--r--pimd/pim6_mld.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/pimd/pim6_mld.c b/pimd/pim6_mld.c
index fcece56c6..fa699cca5 100644
--- a/pimd/pim6_mld.c
+++ b/pimd/pim6_mld.c
@@ -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)),