Download raw body.
bgpd: use peer_blast for route refresh
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)))
bgpd: use peer_blast for route refresh