]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: Re-evaluate the nexthop tracking if flags changed
authorDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 21 Feb 2019 21:10:56 +0000 (16:10 -0500)
committerDonatas Abraitis <donatas.abraitis@gmail.com>
Tue, 5 Nov 2019 18:13:16 +0000 (20:13 +0200)
Routing protocols are allowed ( and even encouraged ) to modify
the flags that influence the nexthop tracking.  As such when
we modify the tracking of a nexthop to go from, say, connected force
or not we must re-evaluate the nexthop and send the results
up to the interested parties.

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

index 1b5c927ea2e9bc6b88116b22b12a1462d3a9b3ff..eb8ee9216a0630f8179c87e8dd71dab338ba6305 100644 (file)
@@ -1023,6 +1023,8 @@ static void zread_rnh_register(ZAPI_HANDLER_ARGS)
        uint8_t flags = 0;
        uint16_t type = cmd2type[hdr->command];
        bool exist;
+       bool flag_changed = false;
+       uint8_t orig_flags;
 
        if (IS_ZEBRA_DEBUG_NHT)
                zlog_debug(
@@ -1069,6 +1071,7 @@ static void zread_rnh_register(ZAPI_HANDLER_ARGS)
                if (!rnh)
                        return;
 
+               orig_flags = rnh->flags;
                if (type == RNH_NEXTHOP_TYPE) {
                        if (flags
                            && !CHECK_FLAG(rnh->flags, ZEBRA_NHT_CONNECTED))
@@ -1086,9 +1089,12 @@ static void zread_rnh_register(ZAPI_HANDLER_ARGS)
                                UNSET_FLAG(rnh->flags, ZEBRA_NHT_EXACT_MATCH);
                }
 
+               if (orig_flags != rnh->flags)
+                       flag_changed = true;
+
                zebra_add_rnh_client(rnh, client, type, zvrf_id(zvrf));
                /* Anything not AF_INET/INET6 has been filtered out above */
-               if (!exist)
+               if (!exist || flag_changed)
                        zebra_evaluate_rnh(zvrf_id(zvrf), p.family, 1, type,
                                           &p);
        }