Re: ospfd: use modern imsg API in kroute code

Theo Buehler <[email protected]>
Newsgroups gmane.os.openbsd.tech
Message-ID <[email protected]>
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
>
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.