From: Claudio Jeker Subject: ospfd: use modern imsg API in kroute code To: tech@openbsd.org Date: Mon, 31 Aug 2026 10:33:53 +0200 This uses the various imsg getters to rewrite the imsg handling. The resulting code is a fair bit cleaner. -- :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