Index | Thread | Search

From:
Theo Buehler <tb@theobuehler.org>
Subject:
Re: ospfd: use modern imsg API in kroute code
To:
tech@openbsd.org
Date:
Mon, 31 Aug 2026 10:39:39 +0200

Download raw body.

Thread
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.

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
>