From: Claudio Jeker Subject: bgpd: use peer_blast for route refresh To: tech@openbsd.org Date: Tue, 10 Dec 2024 14:26:16 +0100 For an established session the Adj-RIB-Out is already calculated so when a route refresh request is received we just need to blast out the full table to the peer. Saves a fair bit of work. -- :wq Claudio Index: rde.c =================================================================== RCS file: /cvs/src/usr.sbin/bgpd/rde.c,v diff -u -p -r1.643 rde.c --- rde.c 2 Dec 2024 16:31:51 -0000 1.643 +++ rde.c 10 Dec 2024 13:24:03 -0000 @@ -1349,7 +1349,7 @@ rde_dispatch_imsg_peer(struct rde_peer * } switch (rr.subtype) { case ROUTE_REFRESH_REQUEST: - peer_dump(peer, rr.aid); + peer_blast(peer, rr.aid); break; case ROUTE_REFRESH_BEGIN_RR: /* check if graceful restart EOR was received */ Index: rde.h =================================================================== RCS file: /cvs/src/usr.sbin/bgpd/rde.h,v diff -u -p -r1.306 rde.h --- rde.h 25 Sep 2024 14:46:51 -0000 1.306 +++ rde.h 10 Dec 2024 13:20:43 -0000 @@ -371,6 +371,7 @@ void peer_up(struct rde_peer *, struct void peer_down(struct rde_peer *, void *); void peer_flush(struct rde_peer *, uint8_t, time_t); void peer_stale(struct rde_peer *, uint8_t, int); +void peer_blast(struct rde_peer *, uint8_t); void peer_dump(struct rde_peer *, uint8_t); void peer_begin_rrefresh(struct rde_peer *, uint8_t); Index: rde_peer.c =================================================================== RCS file: /cvs/src/usr.sbin/bgpd/rde_peer.c,v diff -u -p -r1.39 rde_peer.c --- rde_peer.c 10 Dec 2024 12:23:42 -0000 1.39 +++ rde_peer.c 10 Dec 2024 13:20:32 -0000 @@ -530,7 +530,7 @@ peer_blast_done(void *ptr, uint8_t aid) * Send out the full Adj-RIB-Out by putting all prefixes onto the update * queue. */ -static void +void peer_blast(struct rde_peer *peer, uint8_t aid) { if (peer->capa.enhanced_rr && (peer->sent_eor & (1 << aid)))