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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.