diff options
| author | Renato Westphal <renato@opensourcerouting.org> | 2017-06-08 20:29:12 -0300 |
|---|---|---|
| committer | Renato Westphal <renato@opensourcerouting.org> | 2017-07-25 00:53:23 -0300 |
| commit | 8d05ef64d8842af9eb91df6c8c4de1e073f99b2e (patch) | |
| tree | 96faacab9fc53907b869635445e927a4fee25100 | |
| parent | 8cbeaaa2286b856ec66bc353c43cad882262fff9 (diff) | |
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 <renato@opensourcerouting.org>
| -rw-r--r-- | zebra/rib.h | 1 | ||||
| -rw-r--r-- | zebra/zebra_mpls.c | 4 | ||||
| -rw-r--r-- | zebra/zebra_rnh.c | 8 |
3 files changed, 9 insertions, 4 deletions
diff --git a/zebra/rib.h b/zebra/rib.h index 5381d76b98..e910facb44 100644 --- a/zebra/rib.h +++ b/zebra/rib.h @@ -91,6 +91,7 @@ struct rib #define RIB_ENTRY_NEXTHOPS_CHANGED 0x2 #define RIB_ENTRY_CHANGED 0x4 #define RIB_ENTRY_SELECTED_FIB 0x8 +#define RIB_ENTRY_LABELS_CHANGED 0x10 /* Nexthop information. */ u_char nexthop_num; diff --git a/zebra/zebra_mpls.c b/zebra/zebra_mpls.c index 5a3ed7545d..ba500cac27 100644 --- a/zebra/zebra_mpls.c +++ b/zebra/zebra_mpls.c @@ -1346,7 +1346,7 @@ mpls_ftn_update (int add, struct zebra_vrf *zvrf, enum lsp_types_t type, return 0; SET_FLAG (rib->status, RIB_ENTRY_CHANGED); - SET_FLAG (rib->status, RIB_ENTRY_NEXTHOPS_CHANGED); + SET_FLAG (rib->status, RIB_ENTRY_LABELS_CHANGED); rib_queue_add (rn); return 0; @@ -1542,7 +1542,7 @@ mpls_ldp_ftn_uninstall_all (struct zebra_vrf *zvrf, int afi) { nexthop_del_labels (nexthop); SET_FLAG (rib->status, RIB_ENTRY_CHANGED); - SET_FLAG (rib->status, RIB_ENTRY_NEXTHOPS_CHANGED); + SET_FLAG (rib->status, RIB_ENTRY_LABELS_CHANGED); update = 1; } diff --git a/zebra/zebra_rnh.c b/zebra/zebra_rnh.c index 2a1f69d7b8..ff3b94a25b 100644 --- a/zebra/zebra_rnh.c +++ b/zebra/zebra_rnh.c @@ -790,7 +790,10 @@ zebra_rnh_clear_nhc_flag (vrf_id_t vrfid, int family, rnh_type_t type, rib = zebra_rnh_resolve_entry (vrfid, family, type, nrn, rnh, &prn); if (rib) - UNSET_FLAG (rib->status, RIB_ENTRY_NEXTHOPS_CHANGED); + { + UNSET_FLAG (rib->status, RIB_ENTRY_NEXTHOPS_CHANGED); + UNSET_FLAG (rib->status, RIB_ENTRY_LABELS_CHANGED); + } } /* Evaluate all tracked entries (nexthops or routes for import into BGP) @@ -941,7 +944,8 @@ compare_state (struct rib *r1, struct rib *r2) if (r1->nexthop_num != r2->nexthop_num) return 1; - if (CHECK_FLAG(r1->status, RIB_ENTRY_NEXTHOPS_CHANGED)) + if (CHECK_FLAG(r1->status, RIB_ENTRY_NEXTHOPS_CHANGED) || + CHECK_FLAG(r1->status, RIB_ENTRY_LABELS_CHANGED)) return 1; return 0; |
