]> git.puffer.fish Git - matthieu/frr.git/commitdiff
pimd: Restarting Quagga sometimes lost mroutes
authorDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 17 Aug 2016 00:08:03 +0000 (20:08 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 22 Dec 2016 01:26:06 +0000 (20:26 -0500)
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>
pimd/pim_zebra.c

index 8a32b24e8c5581d8f9f9ff268d87dc94766a9227..f710fc20c952662047484ef13531241d6231dd47 100644 (file)
@@ -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))
       {