From: Maria Matejka Date: Thu, 19 Dec 2024 11:28:27 +0000 (+0100) Subject: Kernel: when channel traces, we have to trace the final result X-Git-Tag: v3.0.1~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ab74652f96c301dd2d2d2a831dd1a159ae1d5e02;p=thirdparty%2Fbird.git Kernel: when channel traces, we have to trace the final result 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. --- diff --git a/sysdep/unix/krt.c b/sysdep/unix/krt.c index 2770b8be2..34882b88f 100644 --- a/sysdep/unix/krt.c +++ b/sysdep/unix/krt.c @@ -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; }