summaryrefslogtreecommitdiff
path: root/pimd/pim_zebra.c
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2016-08-16 20:08:03 -0400
committerDonald Sharp <sharpd@cumulusnetworks.com>2016-12-21 20:26:06 -0500
commit34fe48e7de3b93848184e9546744fb1d3e481d28 (patch)
tree8a5fbaef275d0d33fe4198b77ea2b51f6f47fa1d /pimd/pim_zebra.c
parent8f547471df424da482dc745e9091e5daa4a10a67 (diff)
pimd: Restarting Quagga sometimes lost mroutes
When on a intermediate switch between the FHR and RP when Quagga is restarted. Pimd is coming up so fast and getting the S,G join before networking is properly working on the switch. We would never install the mroute in this case. What was happening is that the scan of the S,G was occurring and we were figuring out who we should talk to but we were never installing the route for it. Notice that we've never installed the route and install it if the mroute has changed. Ticket: CM-12460 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, 8 insertions, 2 deletions
diff --git a/pimd/pim_zebra.c b/pimd/pim_zebra.c
index 8a32b24e8c..f710fc20c9 100644
--- a/pimd/pim_zebra.c
+++ b/pimd/pim_zebra.c
@@ -340,7 +340,14 @@ static void scan_upstream_rpf_cache()
if (rpf_result == PIM_RPF_CHANGED) {
if (up->join_state == PIM_UPSTREAM_JOINED) {
-
+ /*
+ * If we come up real fast we can be here
+ * where the mroute has not been installed
+ * so install it.
+ */
+ if (!up->channel_oil->installed)
+ pim_mroute_add (up->channel_oil);
+
/*
RFC 4601: 4.5.7. Sending (S,G) Join/Prune Messages
@@ -452,7 +459,6 @@ pim_scan_individual_oil (struct channel_oil *c_oil)
old_vif_index = c_oil->oil.mfcc_parent;
c_oil->oil.mfcc_parent = input_iface_vif_index;
- zlog_debug ("FF");
/* update kernel multicast forwarding cache (MFC) */
if (pim_mroute_add(c_oil))
{