Index | Thread | Search

From:
Claudio Jeker <cjeker@diehard.n-r-g.com>
Subject:
ospfd: use modern imsg API in kroute code
To:
tech@openbsd.org
Date:
Mon, 31 Aug 2026 10:33:53 +0200

Download raw body.

Thread
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