Download raw body.
ospfd: use modern imsg API in kroute code
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
ospfd: use modern imsg API in kroute code