]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: Fix rib_update_table 1156/head
authorDonald Sharp <sharpd@cumulusnetworks.com>
Mon, 11 Sep 2017 17:29:24 +0000 (13:29 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Mon, 11 Sep 2017 17:35:26 +0000 (13:35 -0400)
We should only be operating RIB_UPDATE_IF_CHANGE on
types that zebra has control of.  We assume that
the calling routing protocol is going to take care
of their own route changes based upon the interface
state change.

Also try to re-organize the code a tiny bit to allow
it to fit better within a tabed world.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
zebra/zebra_rib.c

index 9dc0630c8c8e64c70bbd4a4a7da8d48ef831d18b..376425329bfcfc4307bf8c7eeb8b81b8a59e3f56 100644 (file)
@@ -2553,27 +2553,29 @@ static void rib_update_table(struct route_table *table,
                         */
                        RNODE_FOREACH_RE_SAFE(rn, re, next)
                        {
-                               if (re->type == ZEBRA_ROUTE_OSPF
-                                   || re->type == ZEBRA_ROUTE_OSPF6
-                                   || re->type == ZEBRA_ROUTE_BGP)
-                                       continue; /* protocol will handle. */
-                               else if (re->type == ZEBRA_ROUTE_STATIC) {
-                                       struct nexthop *nh;
-                                       for (nh = re->nexthop; nh;
-                                            nh = nh->next)
-                                               if (!(nh->type
-                                                             == NEXTHOP_TYPE_IPV4
-                                                     || nh->type
-                                                                == NEXTHOP_TYPE_IPV6))
-                                                       break;
-
-                                       /* If we only have nexthops to a
-                                        * gateway, NHT will
-                                        * take care.
-                                        */
-                                       if (nh)
-                                               rib_queue_add(rn);
-                               } else
+                               struct nexthop *nh;
+
+                               if (re->type != ZEBRA_ROUTE_SYSTEM &&
+                                   re->type != ZEBRA_ROUTE_KERNEL &&
+                                   re->type != ZEBRA_ROUTE_CONNECT &&
+                                   re->type != ZEBRA_ROUTE_STATIC)
+                                       continue;
+
+                               if (re->type != ZEBRA_ROUTE_STATIC) {
+                                       rib_queue_add(rn);
+                                       continue;
+                               }
+
+                               for (nh = re->nexthop; nh; nh = nh->next)
+                                       if (!(nh->type == NEXTHOP_TYPE_IPV4
+                                             || nh->type == NEXTHOP_TYPE_IPV6))
+                                               break;
+
+                               /* If we only have nexthops to a
+                                * gateway, NHT will
+                                * take care.
+                                */
+                               if (nh)
                                        rib_queue_add(rn);
                        }
                        break;