From: Claudio Jeker Subject: bgpd: always call peer_dump_done in peer_dump To: tech@openbsd.org Date: Tue, 21 Jul 2026 09:22:01 +0200 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);