From 34fe48e7de3b93848184e9546744fb1d3e481d28 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Tue, 16 Aug 2016 20:08:03 -0400 Subject: [PATCH] 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 --- pimd/pim_zebra.c | 10 ++++++++-- 1 file 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)) { -- 2.39.5