Index | Thread | Search

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

Download raw body.

Thread
On Mon, Aug 31, 2026 at 10:39:39AM +0200, Theo Buehler wrote:
> 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.

I just used the same idiom everywhere in my work tree. So this is why I
used the type variable here.
 
> 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
> > 
> 

-- 
:wq Claudio