ospfd: use modern imsg API in kroute code
Claudio Jeker <[email protected]>
| Newsgroups | gmane.os.openbsd.tech |
|---|---|
| Message-ID | <[email protected]> |
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