mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-11-02 16:25:18 +00:00
pimd: Allow installation of NULL mroute in some situations
When we receive a S,G,RPT prune as part of a *,G tree, install the NULL oil S,G mroute. This will cause the traffic to stop flowing for this particular S,G as we expect. Ticket: CM-16978 Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
5c3aac90d9
commit
aabb9a2f07
@ -613,7 +613,7 @@ struct pim_ifchannel *pim_ifchannel_add(struct interface *ifp,
|
||||
|
||||
static void ifjoin_to_noinfo(struct pim_ifchannel *ch, bool ch_del)
|
||||
{
|
||||
pim_forward_stop(ch);
|
||||
pim_forward_stop(ch, !ch_del);
|
||||
pim_ifchannel_ifjoin_switch(__PRETTY_FUNCTION__, ch, PIM_IFJOIN_NOINFO);
|
||||
if (ch_del)
|
||||
delete_on_noinfo(ch);
|
||||
|
||||
@ -443,7 +443,7 @@ static void forward_off(struct pim_upstream *up)
|
||||
/* scan per-interface (S,G) state */
|
||||
for (ALL_LIST_ELEMENTS(up->ifchannels, chnode, chnextnode, ch)) {
|
||||
|
||||
pim_forward_stop(ch);
|
||||
pim_forward_stop(ch, false);
|
||||
|
||||
} /* scan iface channel list */
|
||||
}
|
||||
|
||||
@ -1284,17 +1284,21 @@ void pim_forward_start(struct pim_ifchannel *ch)
|
||||
pim_channel_add_oif(up->channel_oil, ch->interface, mask);
|
||||
}
|
||||
|
||||
void pim_forward_stop(struct pim_ifchannel *ch)
|
||||
void pim_forward_stop(struct pim_ifchannel *ch, bool install_it)
|
||||
{
|
||||
struct pim_upstream *up = ch->upstream;
|
||||
|
||||
if (PIM_DEBUG_PIM_TRACE) {
|
||||
zlog_debug("%s: (S,G)=%s oif=%s", __PRETTY_FUNCTION__,
|
||||
ch->sg_str, ch->interface->name);
|
||||
zlog_debug("%s: (S,G)=%s oif=%s install_it: %d installed: %d",
|
||||
__PRETTY_FUNCTION__, ch->sg_str, ch->interface->name,
|
||||
install_it, up->channel_oil->installed);
|
||||
}
|
||||
|
||||
pim_channel_del_oif(up->channel_oil, ch->interface,
|
||||
PIM_OIF_FLAG_PROTO_PIM);
|
||||
|
||||
if (install_it && !up->channel_oil->installed)
|
||||
pim_mroute_add(up->channel_oil, __PRETTY_FUNCTION__);
|
||||
}
|
||||
|
||||
void pim_zebra_zclient_update(struct vty *vty)
|
||||
|
||||
@ -42,7 +42,7 @@ void igmp_source_forward_stop(struct igmp_source *source);
|
||||
void igmp_source_forward_reevaluate_all(void);
|
||||
|
||||
void pim_forward_start(struct pim_ifchannel *ch);
|
||||
void pim_forward_stop(struct pim_ifchannel *ch);
|
||||
void pim_forward_stop(struct pim_ifchannel *ch, bool install_it);
|
||||
|
||||
void sched_rpf_cache_refresh(void);
|
||||
struct zclient *pim_zebra_zclient_get(void);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user