summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@opensourcerouting.org>2021-09-27 15:37:43 +0200
committerGitHub <noreply@github.com>2021-09-27 15:37:43 +0200
commitbd4aed85559f00a6ed981ddc5d429d3bc213b322 (patch)
treef97c0ffdf8e604d9c048734c342148b8251c0077
parent46d7e17619a8aeaeaccddcd1777ac114982f8b71 (diff)
parent0e5cdd59eb0f080c4c82b5b54597b16a94775732 (diff)
Merge pull request #9673 from donaldsharp/bgp_paf
-rw-r--r--bgpd/bgp_packet.c18
-rw-r--r--bgpd/bgp_vty.c10
2 files changed, 22 insertions, 6 deletions
diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
index 4fdb92ce7e..bb2dbc9427 100644
--- a/bgpd/bgp_packet.c
+++ b/bgpd/bgp_packet.c
@@ -337,11 +337,13 @@ static void bgp_write_proceed_actions(struct peer *peer)
struct peer_af *paf;
struct bpacket *next_pkt;
struct update_subgroup *subgrp;
+ enum bgp_af_index index;
- FOREACH_AFI_SAFI (afi, safi) {
- paf = peer_af_find(peer, afi, safi);
+ for (index = BGP_AF_START; index < BGP_AF_MAX; index++) {
+ paf = peer->peer_af_array[index];
if (!paf)
continue;
+
subgrp = paf->subgroup;
if (!subgrp)
continue;
@@ -364,6 +366,9 @@ static void bgp_write_proceed_actions(struct peer *peer)
return;
}
+ afi = paf->afi;
+ safi = paf->safi;
+
/* No packets to send, see if EOR is pending */
if (CHECK_FLAG(peer->cap, PEER_CAP_RESTART_RCV)) {
if (!subgrp->t_coalesce && peer->afc_nego[afi][safi]
@@ -415,11 +420,16 @@ int bgp_generate_updgrp_packets(struct thread *thread)
return 0;
do {
+ enum bgp_af_index index;
+
s = NULL;
- FOREACH_AFI_SAFI (afi, safi) {
- paf = peer_af_find(peer, afi, safi);
+ for (index = BGP_AF_START; index < BGP_AF_MAX; index++) {
+ paf = peer->peer_af_array[index];
if (!paf || !PAF_SUBGRP(paf))
continue;
+
+ afi = paf->afi;
+ safi = paf->safi;
next_pkt = paf->next_pkt_to_send;
/*
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
index 8a3e74e8a4..14f4fb7310 100644
--- a/bgpd/bgp_vty.c
+++ b/bgpd/bgp_vty.c
@@ -912,13 +912,19 @@ static int bgp_peer_clear(struct peer *peer, afi_t afi, safi_t safi,
if ((afi == AFI_UNSPEC) && (safi == SAFI_UNSPEC)) {
afi_t tmp_afi;
safi_t tmp_safi;
+ enum bgp_af_index index;
+
+ for (index = BGP_AF_START; index < BGP_AF_MAX; index++) {
+ paf = peer->peer_af_array[index];
+ if (!paf)
+ continue;
- FOREACH_AFI_SAFI (tmp_afi, tmp_safi) {
- paf = peer_af_find(peer, tmp_afi, tmp_safi);
if (paf && paf->subgroup)
SET_FLAG(paf->subgroup->sflags,
SUBGRP_STATUS_FORCE_UPDATES);
+ tmp_afi = paf->afi;
+ tmp_safi = paf->safi;
if (!peer->afc[tmp_afi][tmp_safi])
continue;