diff options
author | David Lamparter <equinox@opensourcerouting.org> | 2023-03-17 13:34:46 +0100 |
---|---|---|
committer | David Lamparter <equinox@opensourcerouting.org> | 2023-03-17 13:38:31 +0100 |
commit | f4ac0a1c7c8ff737b38befcc3618323162e62c0a (patch) | |
tree | 70b1df01f146dcaf03b37a4af3a040ef1e2bc206 /pimd/pim6_mld.c | |
parent | Merge pull request #13016 from opensourcerouting/feature/ospf_logging_upstrea... (diff) | |
download | frr-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.c | 7 |
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)), |