From: Donald Sharp Date: Mon, 11 Sep 2017 17:29:24 +0000 (-0400) Subject: zebra: Fix rib_update_table X-Git-Tag: frr-4.0-dev~320^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=0a16efff9bb19e617e861fbcae6b772e67e6b500;p=mirror%2Ffrr.git zebra: Fix rib_update_table 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 --- diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c index 9dc0630c8c..376425329b 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -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;