]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Kernel: when channel traces, we have to trace the final result
authorMaria Matejka <mq@ucw.cz>
Thu, 19 Dec 2024 11:28:27 +0000 (12:28 +0100)
committerMaria Matejka <mq@ucw.cz>
Thu, 19 Dec 2024 11:28:27 +0000 (12:28 +0100)
Otherwise it looks like we are sending too much traffic to netlink
every other while, which is not true. Now we can disambiguate between
in-kernel updates and ignored routes.

sysdep/unix/krt.c

index 2770b8be2514dc858fa72bc03950eea4a3290d1c..34882b88f619668ccfa44bb240b2542b515fb642 100644 (file)
@@ -672,7 +672,7 @@ krt_preexport(struct channel *C, rte *e)
 }
 
 static void
-krt_rt_notify(struct proto *P, struct channel *ch UNUSED, const net_addr *net,
+krt_rt_notify(struct proto *P, struct channel *ch, const net_addr *net,
              rte *new, const rte *old)
 {
   struct krt_proto *p = (struct krt_proto *) P;
@@ -688,13 +688,21 @@ krt_rt_notify(struct proto *P, struct channel *ch UNUSED, const net_addr *net,
     case KPS_IDLE:
     case KPS_PRUNING:
       if (new && bmap_test(&p->seen_map, new->id))
-       /* Already installed and seen in the kernel dump */
-       return;
+       if (ch->debug & D_ROUTES)
+       {
+         /* Already installed and seen in the kernel dump */
+         log(L_TRACE "%s.%s: %N already in kernel",
+             P->name, ch->name, net);
+         return;
+       }
 
       /* fall through */
     case KPS_SCANNING:
       /* Actually replace the route */
       krt_replace_rte(p, net, new, old);
+      if (ch->debug & D_ROUTES)
+       log(L_TRACE "%s.%s: %N %s kernel",
+           P->name, ch->name, net, old ? "replaced in" : "added to");
       break;
 
   }