summaryrefslogtreecommitdiff
path: root/zebra/zebra_rib.c
diff options
context:
space:
mode:
Diffstat (limited to 'zebra/zebra_rib.c')
-rw-r--r--zebra/zebra_rib.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c
index 5b95d8668a..142f83fb36 100644
--- a/zebra/zebra_rib.c
+++ b/zebra/zebra_rib.c
@@ -1659,6 +1659,9 @@ static bool rib_update_nhg_from_ctx(struct nexthop_group *re_nhg,
if (!CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_ACTIVE))
continue;
+ if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_DUPLICATE))
+ continue;
+
/* Check for a FIB nexthop corresponding to the RIB nexthop */
if (!nexthop_same(ctx_nexthop, nexthop)) {
/* If the FIB doesn't know about the nexthop,
@@ -3159,6 +3162,7 @@ struct meta_q_gr_run {
vrf_id_t vrf_id;
uint8_t proto;
uint8_t instance;
+ time_t restart_time;
};
static void process_subq_gr_run(struct listnode *lnode)
@@ -3166,7 +3170,7 @@ static void process_subq_gr_run(struct listnode *lnode)
struct meta_q_gr_run *gr_run = listgetdata(lnode);
zebra_gr_process_client(gr_run->afi, gr_run->vrf_id, gr_run->proto,
- gr_run->instance);
+ gr_run->instance, gr_run->restart_time);
XFREE(MTYPE_WQ_WRAPPER, gr_run);
}
@@ -4266,7 +4270,8 @@ static int rib_meta_queue_early_route_add(struct meta_queue *mq, void *data)
return 0;
}
-int rib_add_gr_run(afi_t afi, vrf_id_t vrf_id, uint8_t proto, uint8_t instance)
+int rib_add_gr_run(afi_t afi, vrf_id_t vrf_id, uint8_t proto, uint8_t instance,
+ time_t restart_time)
{
struct meta_q_gr_run *gr_run;
@@ -4276,6 +4281,7 @@ int rib_add_gr_run(afi_t afi, vrf_id_t vrf_id, uint8_t proto, uint8_t instance)
gr_run->proto = proto;
gr_run->vrf_id = vrf_id;
gr_run->instance = instance;
+ gr_run->restart_time = restart_time;
return mq_add_handler(gr_run, rib_meta_queue_gr_run_add);
}
@@ -4694,6 +4700,10 @@ void rib_sweep_route(struct event *t)
struct vrf *vrf;
struct zebra_vrf *zvrf;
+ zrouter.rib_sweep_time = monotime(NULL);
+ /* TODO: Change to debug */
+ zlog_info("Sweeping the RIB for stale routes...");
+
RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) {
if ((zvrf = vrf->info) == NULL)
continue;