]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
KRT: Fix removal of KRF_INSTALLED
authorOndrej Zajicek (work) <santiago@crfreenet.org>
Tue, 17 Dec 2019 15:30:29 +0000 (16:30 +0100)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Tue, 17 Dec 2019 15:30:29 +0000 (16:30 +0100)
Use route id from net->routes to check export_map. Route received from
sysdep KRT code does not have proper id.

sysdep/unix/krt.c

index f1f7c3dbfb72db9ecfb7b27511ab22a77134efc1..470368e2f34b612d44954eace48a126fde6b67cd 100644 (file)
@@ -540,9 +540,9 @@ krt_dump_attrs(rte *e)
  */
 
 static inline int
-krt_is_installed(struct krt_proto *p, rte *e)
+krt_is_installed(struct krt_proto *p, net *n)
 {
-  return bmap_test(&p->p.main_channel->export_map, e->id);
+  return n->routes && bmap_test(&p->p.main_channel->export_map, n->routes->id);
 }
 
 static void
@@ -553,11 +553,10 @@ krt_flush_routes(struct krt_proto *p)
   KRT_TRACE(p, D_EVENTS, "Flushing kernel routes");
   FIB_WALK(&t->fib, net, n)
     {
-      rte *e = n->routes;
-      if (rte_is_valid(e) && krt_is_installed(p, e))
+      if (krt_is_installed(p, n))
        {
          /* FIXME: this does not work if gw is changed in export filter */
-         krt_replace_rte(p, e->net, NULL, e);
+         krt_replace_rte(p, n, NULL, n->routes);
        }
     }
   FIB_WALK_END;
@@ -668,7 +667,7 @@ krt_got_route(struct krt_proto *p, rte *e)
       goto sentenced;
     }
 
-  if (krt_is_installed(p, e))
+  if (krt_is_installed(p, net))
     {
       rte *new, *rt_free;