Download raw body.
ospfd: use modern imsg API in kroute code
On Mon, Aug 31, 2026 at 10:33:53AM +0200, Claudio Jeker wrote:
> This uses the various imsg getters to rewrite the imsg handling.
> The resulting code is a fair bit cleaner.
I probably would not have added a type variable, but it's fine.
ok tb
>
> --
> :wq Claudio
>
> Index: kroute.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/ospfd/kroute.c,v
> diff -u -p -r1.120 kroute.c
> --- kroute.c 31 Aug 2026 07:57:09 -0000 1.120
> +++ kroute.c 31 Aug 2026 08:00:29 -0000
> @@ -484,35 +484,35 @@ kr_show_route(struct imsg *imsg)
> struct kroute_node *kn;
> int flags;
> struct in_addr addr;
> + uint32_t type;
> + pid_t pid;
>
> - switch (imsg->hdr.type) {
> + type = imsg_get_type(imsg);
> + pid = imsg_get_pid(imsg);
> + switch (type) {
> case IMSG_CTL_KROUTE:
> - if (imsg->hdr.len != IMSG_HEADER_SIZE + sizeof(flags)) {
> - log_warnx("kr_show_route: wrong imsg len");
> + if (imsg_get_data(imsg, &flags, sizeof(flags)) == -1) {
> + log_warnx("bad CTL_KROUTE imsg received");
> return;
> }
> - memcpy(&flags, imsg->data, sizeof(flags));
> RB_FOREACH(kr, kroute_tree, &krt)
> if (!flags || kr->r.flags & flags) {
> kn = kr;
> do {
> main_imsg_compose_ospfe(IMSG_CTL_KROUTE,
> - imsg->hdr.pid,
> - &kn->r, sizeof(kn->r));
> + pid, &kn->r, sizeof(kn->r));
> } while ((kn = kn->next) != NULL);
> }
> break;
> case IMSG_CTL_KROUTE_ADDR:
> - if (imsg->hdr.len != IMSG_HEADER_SIZE +
> - sizeof(struct in_addr)) {
> - log_warnx("kr_show_route: wrong imsg len");
> + if (imsg_get_data(imsg, &addr, sizeof(addr)) == -1) {
> + log_warnx("bad CTL_KROUTE_ADDR imsg received");
> return;
> }
> - memcpy(&addr, imsg->data, sizeof(addr));
> kr = NULL;
> kr = kroute_match(addr.s_addr);
> if (kr != NULL)
> - main_imsg_compose_ospfe(IMSG_CTL_KROUTE, imsg->hdr.pid,
> + main_imsg_compose_ospfe(IMSG_CTL_KROUTE, pid,
> &kr->r, sizeof(kr->r));
> break;
> default:
> @@ -520,7 +520,7 @@ kr_show_route(struct imsg *imsg)
> break;
> }
>
> - main_imsg_compose_ospfe(IMSG_CTL_END, imsg->hdr.pid, NULL, 0);
> + main_imsg_compose_ospfe(IMSG_CTL_END, pid, NULL, 0);
> }
>
> void
>
ospfd: use modern imsg API in kroute code