From: Theo Buehler Subject: Re: ospfd: use modern imsg API in kroute code To: tech@openbsd.org Date: Mon, 31 Aug 2026 10:39:39 +0200 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 >