From ab74652f96c301dd2d2d2a831dd1a159ae1d5e02 Mon Sep 17 00:00:00 2001 From: Maria Matejka Date: Thu, 19 Dec 2024 12:28:27 +0100 Subject: [PATCH] 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. --- sysdep/unix/krt.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/sysdep/unix/krt.c b/sysdep/unix/krt.c index 2770b8be..34882b88 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; }