From 1fd7ae7268f6aeb8c52b7d470c98a8b3fc41765e Mon Sep 17 00:00:00 2001 From: Renato Westphal Date: Fri, 15 Jan 2021 12:04:24 -0300 Subject: [PATCH] ldpd: fix sporadic failures in the ldp-topo1 topotest Commit 220e848cc5 introduced an optimization that would prevent ldpd from sending redundant label mappings when it receives notifications from zebra about routes that didn't effectively change (such notifications can happen under certain circumstances). The problem is that that commit didn't take into account the metric of the received routes, so it would dismiss a notification of a route with a better metric taking the place of another route in the RIB, preventing the newly selected route from receiving the label mappings it needs. Revert 220e848cc5 temporarily to fix sporadic failures in the CI system until we have a better solution. Debugged-by: Lynne Morrison lynne@voltanet.io Signed-off-by: Renato Westphal --- ldpd/lde.h | 2 -- ldpd/lde_lib.c | 8 -------- 2 files changed, 10 deletions(-) diff --git a/ldpd/lde.h b/ldpd/lde.h index 28468931ec..e09be01ece 100644 --- a/ldpd/lde.h +++ b/ldpd/lde.h @@ -129,9 +129,7 @@ struct fec_node { uint32_t pw_remote_status; void *data; /* fec specific data */ - uint8_t flags; }; -#define F_FEC_NHS_CHANGED 0x01 #define CHUNK_SIZE 64 struct label_chunk { diff --git a/ldpd/lde_lib.c b/ldpd/lde_lib.c index 68b721e213..0f91f49920 100644 --- a/ldpd/lde_lib.c +++ b/ldpd/lde_lib.c @@ -340,8 +340,6 @@ lde_kernel_insert(struct fec *fec, int af, union ldpd_addr *nexthop, fnh = fec_nh_find(fn, af, nexthop, ifindex, route_type, route_instance); if (fnh == NULL) { - fn->flags |= F_FEC_NHS_CHANGED; - fnh = fec_nh_add(fn, af, nexthop, ifindex, route_type, route_instance); /* @@ -418,17 +416,11 @@ lde_kernel_update(struct fec *fec) } else fnh->flags |= F_FEC_NH_NO_LDP; } else { - fn->flags |= F_FEC_NHS_CHANGED; lde_send_delete_klabel(fn, fnh); fec_nh_del(fnh); } } - if (!(fn->flags & F_FEC_NHS_CHANGED)) - /* return earlier if nothing has changed */ - return; - fn->flags &= ~F_FEC_NHS_CHANGED; - if (LIST_EMPTY(&fn->nexthops)) { RB_FOREACH(ln, nbr_tree, &lde_nbrs) lde_send_labelwithdraw(ln, fn, NULL, NULL); -- 2.39.5