Index | Thread | Search

From:
Claudio Jeker <cjeker@diehard.n-r-g.com>
Subject:
bgpd: always call peer_dump_done in peer_dump
To:
tech@openbsd.org
Date:
Tue, 21 Jul 2026 09:22:01 +0200

Download raw body.

Thread
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.
-- 
: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);