mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-13 16:26:10 +00:00
pim6d: Clear channel_oil on prune
Receiver---LHR---RP Problem: In LHR, ipv6 pim state remains after MLD prune received. Root Cause: When LHR receives join, it creates (*,G) channel oil with oil_ref_count = 2. The channel_oil is used by gm_sg sg->oil and upstream->channel_oil. When LHR receives prune, currently upstream->channel_oil is deleted and gm_sg sg->oil still present. Due to this channel_oil is still present with oil_ref_count = 1 Fix: When LHR receives prune, upstream->channel_oil and pim_sg sg->oil needs to be deleted. Issue: #11249 Signed-off-by: Sarita Patra <saritap@vmware.com>
This commit is contained in:
parent
1bafbcb24a
commit
cb809c0d6c
@ -355,6 +355,7 @@ void igmp_source_delete(struct gm_source *source)
|
||||
|
||||
source_timer_off(group, source);
|
||||
igmp_source_forward_stop(source);
|
||||
source->source_channel_oil = NULL;
|
||||
|
||||
/* sanity check that forwarding has been disabled */
|
||||
if (IGMP_SOURCE_TEST_FORWARDING(source->source_flags)) {
|
||||
@ -371,8 +372,6 @@ void igmp_source_delete(struct gm_source *source)
|
||||
/* warning only */
|
||||
}
|
||||
|
||||
source_channel_oil_detach(source);
|
||||
|
||||
/*
|
||||
notice that listnode_delete() can't be moved
|
||||
into igmp_source_free() because the later is
|
||||
|
@ -163,4 +163,6 @@ void tib_sg_gm_prune(struct pim_instance *pim, pim_sgaddr sg,
|
||||
per-interface (S,G) state.
|
||||
*/
|
||||
pim_ifchannel_local_membership_del(oif, &sg);
|
||||
|
||||
pim_channel_oil_del(*oilp, __func__);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user