From: Donald Sharp Date: Wed, 17 Aug 2016 00:08:03 +0000 (-0400) Subject: pimd: Restarting Quagga sometimes lost mroutes X-Git-Tag: frr-3.0-branchpoint~64^2~10^2~288 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=34fe48e7de3b93848184e9546744fb1d3e481d28;p=matthieu%2Ffrr.git 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 --- 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)) {