Index | Thread | Search

From:
Theo Buehler <tb@theobuehler.org>
Subject:
Re: bgpd: always call peer_dump_done in peer_dump
To:
tech@openbsd.org
Date:
Tue, 21 Jul 2026 09:56:40 +0200

Download raw body.

Thread
On Tue, Jul 21, 2026 at 09:22:01AM +0200, Claudio Jeker wrote:
> There is some confusion on how to finish a peer_dump run for 
> EXPORT_NONE and EXPORT_DEFAULT_ROUTE.
> 
> Just call peer_dump_done() in both cases since this is what is required to
> finalize a dump. Especially the use of peer_blast() in EXPORT_NONE is not
> great since this is causing a adj-rib-out walk for no reason.
> peer_dump_done() calls peer_blast_done() and it issues the End-Of-RIB
> marker. Nothing else is needed.
> 
> Noticed on the NLNOG looking glass which uses export none on most
> sessions.

Makes sense. ok tb

> -- 
> :wq Claudio
> 
> Index: rde_peer.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/bgpd/rde_peer.c,v
> diff -u -p -r1.80 rde_peer.c
> --- rde_peer.c	15 Jul 2026 11:59:27 -0000	1.80
> +++ rde_peer.c	20 Jul 2026 13:41:47 -0000
> @@ -670,10 +670,10 @@ peer_dump(struct rde_peer *peer, uint8_t
>  	peer->throttled = 1;
>  
>  	if (peer->export_type == EXPORT_NONE) {
> -		peer_blast(peer, aid);
> +		peer_dump_done(peer, aid);
>  	} else if (peer->export_type == EXPORT_DEFAULT_ROUTE) {
>  		up_generate_default(peer, aid);
> -		peer_blast_done(peer, aid);
> +		peer_dump_done(peer, aid);
>  	} else if (aid == AID_FLOWSPECv4 || aid == AID_FLOWSPECv6) {
>  		prefix_flowspec_dump(aid, peer, peer_dump_upcall,
>  		    peer_dump_done);
>