From: Claudio Jeker Subject: Re: ospfd: use modern imsg API in kroute code To: Theo Buehler Cc: tech@openbsd.org Date: Mon, 31 Aug 2026 10:56:31 +0200 On Mon, Aug 31, 2026 at 10:39:39AM +0200, Theo Buehler wrote: > 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. I just used the same idiom everywhere in my work tree. So this is why I used the type variable here. > 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 > > > -- :wq Claudio