The network flush code only operates on peerself (like all the other network commands). Instead of passing a peer to the tree walker just default to peerself in network_flush_upcall(). This makes the code more obivous that it operates on peerself.
-- :wq Claudio Index: rde.c =================================================================== RCS file: /cvs/src/usr.sbin/bgpd/rde.c,v retrieving revision 1.528 diff -u -p -r1.528 rde.c --- rde.c 24 Jun 2021 13:03:31 -0000 1.528 +++ rde.c 24 Jun 2021 15:00:32 -0000 @@ -517,7 +517,7 @@ badnetdel: break; } if (rib_dump_new(RIB_ADJ_IN, AID_UNSPEC, - RDE_RUNNER_ROUNDS, peerself, network_flush_upcall, + RDE_RUNNER_ROUNDS, NULL, network_flush_upcall, NULL, NULL) == -1) log_warn("rde_dispatch: IMSG_NETWORK_FLUSH"); break; @@ -4065,13 +4065,12 @@ network_dump_upcall(struct rib_entry *re static void network_flush_upcall(struct rib_entry *re, void *ptr) { - struct rde_peer *peer = ptr; struct bgpd_addr addr; struct prefix *p; u_int32_t i; u_int8_t prefixlen; - p = prefix_bypeer(re, peer); + p = prefix_bypeer(re, peerself); if (p == NULL) return; if ((prefix_aspath(p)->flags & F_ANN_DYNAMIC) != F_ANN_DYNAMIC) @@ -4084,14 +4083,14 @@ network_flush_upcall(struct rib_entry *r struct rib *rib = rib_byid(i); if (rib == NULL) continue; - if (prefix_withdraw(rib, peer, &addr, prefixlen) == 1) - rde_update_log("flush announce", i, peer, + if (prefix_withdraw(rib, peerself, &addr, prefixlen) == 1) + rde_update_log("flush announce", i, peerself, NULL, &addr, prefixlen); } - if (prefix_withdraw(rib_byid(RIB_ADJ_IN), peer, &addr, + if (prefix_withdraw(rib_byid(RIB_ADJ_IN), peerself, &addr, prefixlen) == 1) - peer->prefix_cnt--; + peerself->prefix_cnt--; } /* clean up */