]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: add new flag to detect nexthop label updates
authorRenato Westphal <renato@opensourcerouting.org>
Thu, 8 Jun 2017 23:29:12 +0000 (20:29 -0300)
committerDavid Lamparter <equinox@opensourcerouting.org>
Wed, 9 Aug 2017 10:35:15 +0000 (12:35 +0200)
With the introduction of the pseudowire manager, the NHT tracking code
needs to detect label updates as well.

Create a specific nexthop flag for that. We can't reuse the
RIB_ENTRY_NEXTHOPS_CHANGED flag for this porpose because this flag is
always cleared and reevaluated in rib_process(), setting it outside that
function is a nop.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
zebra/rib.h
zebra/zebra_mpls.c
zebra/zebra_rnh.c

index eca2be5eeec7a4160b608d5e3a267aae9c511ab1..de941bcbbe111dc8b39df43c0f862c763146f670 100644 (file)
@@ -89,6 +89,7 @@ struct route_entry {
 #define ROUTE_ENTRY_NEXTHOPS_CHANGED 0x2
 #define ROUTE_ENTRY_CHANGED          0x4
 #define ROUTE_ENTRY_SELECTED_FIB     0x8
+#define ROUTE_ENTRY_LABELS_CHANGED   0x10
 
        /* Nexthop information. */
        u_char nexthop_num;
index e44e5d2e6b52895c439fabba95f7954d49ef14c1..d1ab2dbb853d4ddd1233b0bdfcd9c52fa06e5d1f 100644 (file)
@@ -2222,7 +2222,7 @@ found:
                return 0;
 
        SET_FLAG(re->status, ROUTE_ENTRY_CHANGED);
-       SET_FLAG(re->status, ROUTE_ENTRY_NEXTHOPS_CHANGED);
+       SET_FLAG(re->status, ROUTE_ENTRY_LABELS_CHANGED);
        rib_queue_add(rn);
 
        return 0;
@@ -2405,7 +2405,7 @@ void mpls_ldp_ftn_uninstall_all(struct zebra_vrf *zvrf, int afi)
                                nexthop_del_labels(nexthop);
                                SET_FLAG(re->status, ROUTE_ENTRY_CHANGED);
                                SET_FLAG(re->status,
-                                        ROUTE_ENTRY_NEXTHOPS_CHANGED);
+                                        ROUTE_ENTRY_LABELS_CHANGED);
                                update = 1;
                        }
 
index 65698f30aedce99a504b371d9ff5afbf0d48de0d..77cfa9860fc48bda68c6be9ad4cbc5a22e3317e0 100644 (file)
@@ -762,8 +762,10 @@ static void zebra_rnh_clear_nhc_flag(vrf_id_t vrfid, int family,
 
        re = zebra_rnh_resolve_entry(vrfid, family, type, nrn, rnh, &prn);
 
-       if (re)
+       if (re) {
                UNSET_FLAG(re->status, ROUTE_ENTRY_NEXTHOPS_CHANGED);
+               UNSET_FLAG(re->status, ROUTE_ENTRY_LABELS_CHANGED);
+       }
 }
 
 /* Evaluate all tracked entries (nexthops or routes for import into BGP)
@@ -908,7 +910,8 @@ static int compare_state(struct route_entry *r1, struct route_entry *r2)
        if (r1->nexthop_num != r2->nexthop_num)
                return 1;
 
-       if (CHECK_FLAG(r1->status, ROUTE_ENTRY_NEXTHOPS_CHANGED))
+       if (CHECK_FLAG(r1->status, ROUTE_ENTRY_NEXTHOPS_CHANGED)
+           || CHECK_FLAG(r1->status, ROUTE_ENTRY_LABELS_CHANGED))
                return 1;
 
        return 0;