From: Renato Westphal Date: Thu, 8 Jun 2017 23:29:12 +0000 (-0300) Subject: zebra: add new flag to detect nexthop label updates X-Git-Tag: frr-4.0-dev~439^2~6 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=332ad713881b2a1231b6baf9cb8aef33d5d849a3;p=mirror%2Ffrr.git zebra: add new flag to detect nexthop label updates 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 --- diff --git a/zebra/rib.h b/zebra/rib.h index eca2be5eee..de941bcbbe 100644 --- a/zebra/rib.h +++ b/zebra/rib.h @@ -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; diff --git a/zebra/zebra_mpls.c b/zebra/zebra_mpls.c index e44e5d2e6b..d1ab2dbb85 100644 --- a/zebra/zebra_mpls.c +++ b/zebra/zebra_mpls.c @@ -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; } diff --git a/zebra/zebra_rnh.c b/zebra/zebra_rnh.c index 65698f30ae..77cfa9860f 100644 --- a/zebra/zebra_rnh.c +++ b/zebra/zebra_rnh.c @@ -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;