summaryrefslogtreecommitdiffstats
path: root/pimd/pim_zebra.c
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2017-07-10 15:45:04 +0200
committerDonald Sharp <sharpd@cumulusnetworks.com>2017-07-24 19:52:57 +0200
commitaabb9a2f07bbcd1b3325e892ac6d204d123c654a (patch)
treec7e99a136fd083e19d7b99315846e35dc1a00935 /pimd/pim_zebra.c
parentpimd: Fix 'show ip mroute vrf all count' crash (diff)
downloadfrr-aabb9a2f07bbcd1b3325e892ac6d204d123c654a.tar.xz
frr-aabb9a2f07bbcd1b3325e892ac6d204d123c654a.zip
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>
Diffstat (limited to 'pimd/pim_zebra.c')
-rw-r--r--pimd/pim_zebra.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/pimd/pim_zebra.c b/pimd/pim_zebra.c
index 9fbca9cb2..7b060aef4 100644
--- a/pimd/pim_zebra.c
+++ b/pimd/pim_zebra.c
@@ -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)