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 */