Skip to content

Commit 1af63cf

Browse files
authored
Merge pull request FRRouting#20328 from donaldsharp/bgp_explicit_connection_direction
Bgp explicit connection direction
2 parents fae0bbc + 6af9dcf commit 1af63cf

File tree

11 files changed

+128
-122
lines changed

11 files changed

+128
-122
lines changed

bgpd/bgp_bfd.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ static void bgp_bfd_strict_holdtime_expire(struct event *event)
4343

4444
if (bgp_debug_neighbor_events(peer))
4545
zlog_debug("%pBP BFD Strict mode Hold timer expire for %s", peer,
46-
bgp_peer_get_connection_direction(connection));
46+
bgp_peer_get_connection_direction_string(connection));
4747

4848
peer_set_last_reset(peer, PEER_DOWN_BFD_DOWN);
4949
SET_FLAG(peer->sflags, PEER_STATUS_BFD_STRICT_HOLD_TIME_EXPIRED);

bgpd/bgp_conditional_adv.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ static void bgp_conditional_adv_timer(struct event *t)
194194
* based on condition(exist-map or non-exist map)
195195
*/
196196
for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
197-
if (!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
197+
if (!peer_is_config_node(peer))
198198
continue;
199199

200200
if (!peer_established(peer->connection))

bgpd/bgp_fsm.c

Lines changed: 67 additions & 58 deletions
Large diffs are not rendered by default.

bgpd/bgp_network.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -685,7 +685,6 @@ static void bgp_accept(struct event *event)
685685
bgp_fsm_change_status(incoming, Active);
686686
event_cancel(&incoming->t_start); /* created in peer_create() */
687687

688-
SET_FLAG(doppelganger->sflags, PEER_STATUS_ACCEPT_PEER);
689688
/* Make dummy peer until read Open packet. */
690689
if (peer_established(connection) && CHECK_FLAG(peer->sflags, PEER_STATUS_NSF_MODE)) {
691690
/* If we have an existing established connection with graceful

bgpd/bgp_nht.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,7 @@ int bgp_find_or_add_nexthop(struct bgp *bgp_route, struct bgp *bgp_nexthop, afi_
501501
* When we come back around we'll fix up this
502502
* data properly in replace_nexthop_by_peer
503503
*/
504-
if (CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
504+
if (peer_is_config_node(peer))
505505
bnc->nht_info = (void *)peer; /* NHT peer reference */
506506
}
507507

bgpd/bgp_packet.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1672,7 +1672,7 @@ static int bgp_collision_detect(struct peer_connection *connection,
16721672
if (ntohl(peer->local_id.s_addr) < ntohl(remote_id.s_addr)
16731673
|| (ntohl(peer->local_id.s_addr) == ntohl(remote_id.s_addr)
16741674
&& peer->local_as < peer->as))
1675-
if (!CHECK_FLAG(peer->sflags, PEER_STATUS_ACCEPT_PEER)) {
1675+
if (bgp_peer_get_connection_direction(peer->connection) != CONNECTION_INCOMING) {
16761676
/*
16771677
* 2. If the value of the local BGP
16781678
* Identifier is less than the remote one,
@@ -1707,7 +1707,7 @@ static int bgp_collision_detect(struct peer_connection *connection,
17071707
* the existing one (the one that is already in the
17081708
* OpenConfirm state).
17091709
*/
1710-
if (CHECK_FLAG(peer->sflags, PEER_STATUS_ACCEPT_PEER)) {
1710+
if (bgp_peer_get_connection_direction(peer->connection) == CONNECTION_INCOMING) {
17111711
bgp_notify_send(other, BGP_NOTIFY_CEASE,
17121712
BGP_NOTIFY_CEASE_COLLISION_RESOLUTION);
17131713
return 1;
@@ -4087,7 +4087,8 @@ void bgp_process_packet(struct event *event)
40874087
if (mprc == BGP_Stop)
40884088
flog_err(EC_BGP_PKT_OPEN,
40894089
"%s: BGP OPEN receipt failed for peer: %s(%s)", __func__,
4090-
peer->host, bgp_peer_get_connection_direction(connection));
4090+
peer->host,
4091+
bgp_peer_get_connection_direction_string(connection));
40914092
break;
40924093
case BGP_MSG_UPDATE:
40934094
frrtrace(2, frr_bgp, update_process, peer, size);
@@ -4099,7 +4100,7 @@ void bgp_process_packet(struct event *event)
40994100
flog_err(EC_BGP_UPDATE_RCV,
41004101
"%s: BGP UPDATE receipt failed for peer: %s(%s)",
41014102
__func__, peer->host,
4102-
bgp_peer_get_connection_direction(connection));
4103+
bgp_peer_get_connection_direction_string(connection));
41034104
break;
41044105
case BGP_MSG_NOTIFY:
41054106
frrtrace(2, frr_bgp, notification_process, peer, size);
@@ -4110,7 +4111,7 @@ void bgp_process_packet(struct event *event)
41104111
flog_err(EC_BGP_NOTIFY_RCV,
41114112
"%s: BGP NOTIFY receipt failed for peer: %s(%s)",
41124113
__func__, peer->host,
4113-
bgp_peer_get_connection_direction(connection));
4114+
bgp_peer_get_connection_direction_string(connection));
41144115
break;
41154116
case BGP_MSG_KEEPALIVE:
41164117
frrtrace(2, frr_bgp, keepalive_process, peer, size);
@@ -4122,7 +4123,7 @@ void bgp_process_packet(struct event *event)
41224123
flog_err(EC_BGP_KEEP_RCV,
41234124
"%s: BGP KEEPALIVE receipt failed for peer: %s(%s)",
41244125
__func__, peer->host,
4125-
bgp_peer_get_connection_direction(connection));
4126+
bgp_peer_get_connection_direction_string(connection));
41264127
break;
41274128
case BGP_MSG_ROUTE_REFRESH_NEW:
41284129
case BGP_MSG_ROUTE_REFRESH_OLD:
@@ -4134,7 +4135,7 @@ void bgp_process_packet(struct event *event)
41344135
flog_err(EC_BGP_RFSH_RCV,
41354136
"%s: BGP ROUTEREFRESH receipt failed for peer: %s(%s)",
41364137
__func__, peer->host,
4137-
bgp_peer_get_connection_direction(connection));
4138+
bgp_peer_get_connection_direction_string(connection));
41384139
break;
41394140
case BGP_MSG_CAPABILITY:
41404141
frrtrace(2, frr_bgp, capability_process, peer, size);
@@ -4145,7 +4146,7 @@ void bgp_process_packet(struct event *event)
41454146
flog_err(EC_BGP_CAP_RCV,
41464147
"%s: BGP CAPABILITY receipt failed for peer: %s(%s)",
41474148
__func__, peer->host,
4148-
bgp_peer_get_connection_direction(connection));
4149+
bgp_peer_get_connection_direction_string(connection));
41494150
break;
41504151
default:
41514152
/* Suppress uninitialized variable warning */

bgpd/bgp_route.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2196,7 +2196,7 @@ void bgp_notify_conditional_adv_scanner(struct update_subgroup *subgrp)
21962196
if (!ADVERTISE_MAP_NAME(filter))
21972197
return;
21982198

2199-
if (!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
2199+
if (!peer_is_config_node(peer))
22002200
return;
22012201

22022202
peer->advmap_table_change = true;

bgpd/bgp_updgrp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2032,7 +2032,7 @@ void update_group_adjust_peer(struct peer_af *paf)
20322032
return;
20332033
}
20342034

2035-
if (!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE)) {
2035+
if (!peer_is_config_node(peer)) {
20362036
return;
20372037
}
20382038

bgpd/bgp_vty.c

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11960,7 +11960,7 @@ static inline void calc_peers_cfgd_estbd(struct bgp *bgp, int *peers_cfgd,
1196011960

1196111961
*peers_cfgd = *peers_estbd = 0;
1196211962
for (ALL_LIST_ELEMENTS_RO(bgp->peer, node, peer)) {
11963-
if (!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
11963+
if (!peer_is_config_node(peer))
1196411964
continue;
1196511965
(*peers_cfgd)++;
1196611966
if (peer_established(peer->connection))
@@ -12775,7 +12775,7 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi,
1277512775
continue;
1277612776
}
1277712777

12778-
if (!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
12778+
if (!peer_is_config_node(peer))
1277912779
continue;
1278012780

1278112781
if (peer->afc[afi][safi]) {
@@ -12801,7 +12801,7 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi,
1280112801
continue;
1280212802
}
1280312803

12804-
if (!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
12804+
if (!peer_is_config_node(peer))
1280512805
continue;
1280612806

1280712807
if (peer->afc[afi][safi]) {
@@ -12859,7 +12859,7 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi,
1285912859
filtered_count = 0;
1286012860
dn_count = 0;
1286112861
for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
12862-
if (!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
12862+
if (!peer_is_config_node(peer))
1286312863
continue;
1286412864

1286512865
if (!peer->afc[afi][safi])
@@ -16835,7 +16835,7 @@ static int bgp_show_neighbor(struct vty *vty, struct bgp *bgp, enum show_type ty
1683516835
}
1683616836

1683716837
for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
16838-
if (!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
16838+
if (!peer_is_config_node(peer))
1683916839
continue;
1684016840

1684116841
switch (type) {
@@ -20034,17 +20034,16 @@ static void bgp_config_write_family(struct vty *vty, struct bgp *bgp, afi_t afi,
2003420034
PEER_FLAG_CONFIG_DAMPENING))
2003520035
bgp_config_write_peer_damp(vty, group->conf, afi, safi);
2003620036
for (ALL_LIST_ELEMENTS_RO(bgp->peer, node, peer))
20037-
if (CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE) &&
20038-
peer_af_flag_check(peer, afi, safi,
20039-
PEER_FLAG_CONFIG_DAMPENING))
20037+
if (peer_is_config_node(peer) &&
20038+
peer_af_flag_check(peer, afi, safi, PEER_FLAG_CONFIG_DAMPENING))
2004020039
bgp_config_write_peer_damp(vty, peer, afi, safi);
2004120040

2004220041
for (ALL_LIST_ELEMENTS(bgp->group, node, nnode, group))
2004320042
bgp_config_write_peer_af(vty, bgp, group->conf, afi, safi);
2004420043

2004520044
for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
2004620045
/* Do not display doppelganger peers */
20047-
if (CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
20046+
if (peer_is_config_node(peer))
2004820047
bgp_config_write_peer_af(vty, bgp, peer, afi, safi);
2004920048
}
2005020049

@@ -20579,7 +20578,7 @@ int bgp_config_write(struct vty *vty)
2057920578

2058020579
/* Normal neighbor configuration. */
2058120580
for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
20582-
if (CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
20581+
if (peer_is_config_node(peer))
2058320582
bgp_config_write_peer_global(vty, bgp, peer);
2058420583
}
2058520584

bgpd/bgpd.c

Lines changed: 19 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -177,9 +177,8 @@ static int bgp_check_main_socket(bool create, struct bgp *bgp)
177177

178178
void bgp_session_reset(struct peer *peer)
179179
{
180-
if (peer->doppelganger &&
181-
(peer->doppelganger->connection->status != Deleted) &&
182-
!(CHECK_FLAG(peer->doppelganger->flags, PEER_FLAG_CONFIG_NODE)))
180+
if (peer->doppelganger && (peer->doppelganger->connection->status != Deleted) &&
181+
!peer_is_config_node(peer->doppelganger))
183182
peer_delete(peer->doppelganger);
184183

185184
BGP_EVENT_ADD(peer->connection, BGP_Stop);
@@ -199,9 +198,8 @@ void bgp_session_reset_safe(struct peer *peer, struct listnode **nnode)
199198
n = (nnode) ? *nnode : NULL;
200199
npeer = (n) ? listgetdata(n) : NULL;
201200

202-
if (peer->doppelganger &&
203-
(peer->doppelganger->connection->status != Deleted) &&
204-
!(CHECK_FLAG(peer->doppelganger->flags, PEER_FLAG_CONFIG_NODE))) {
201+
if (peer->doppelganger && (peer->doppelganger->connection->status != Deleted) &&
202+
!peer_is_config_node(peer->doppelganger)) {
205203
if (peer->doppelganger == npeer)
206204
/* nnode and *nnode are confirmed to be non-NULL here */
207205
*nnode = (*nnode)->next;
@@ -1019,8 +1017,7 @@ static bool connection_hash_same(const void *p1, const void *p2)
10191017
const struct peer *peer2 = c2->peer;
10201018

10211019
return (sockunion_same(&c1->su, &c2->su) &&
1022-
CHECK_FLAG(peer1->flags, PEER_FLAG_CONFIG_NODE) ==
1023-
CHECK_FLAG(peer2->flags, PEER_FLAG_CONFIG_NODE));
1020+
peer_is_config_node(peer1) == peer_is_config_node(peer2));
10241021
}
10251022

10261023
void peer_flag_inherit(struct peer *peer, uint64_t flag)
@@ -1224,7 +1221,7 @@ void bgp_peer_connection_free(struct peer_connection **connection)
12241221
connection = NULL;
12251222
}
12261223

1227-
const char *bgp_peer_get_connection_direction(struct peer_connection *connection)
1224+
const char *bgp_peer_get_connection_direction_string(const struct peer_connection *connection)
12281225
{
12291226
switch (connection->dir) {
12301227
case UNKNOWN:
@@ -1317,8 +1314,7 @@ static void peer_free(struct peer *peer)
13171314
assert(!connection->t_read);
13181315

13191316
/* Free connected nexthop, if present */
1320-
if (CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE)
1321-
&& !peer_dynamic_neighbor(peer))
1317+
if (peer_is_config_node(peer) && !peer_dynamic_neighbor(peer))
13221318
bgp_delete_connected_nexthop(family2afi(connection->su.sa.sa_family), peer);
13231319

13241320
FOREACH_AFI_SAFI (afi, safi) {
@@ -2179,7 +2175,7 @@ bool bgp_afi_safi_peer_exists(struct bgp *bgp, afi_t afi, safi_t safi)
21792175
struct peer *peer;
21802176

21812177
for (ALL_LIST_ELEMENTS_RO(bgp->peer, node, peer)) {
2182-
if (!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
2178+
if (!peer_is_config_node(peer))
21832179
continue;
21842180

21852181
if (peer->afc[afi][safi])
@@ -2799,7 +2795,7 @@ int peer_delete(struct peer *peer)
27992795
zlog_debug("%s: peer %pBP", __func__, peer);
28002796

28012797
bgp = peer->bgp;
2802-
accept_peer = CHECK_FLAG(peer->sflags, PEER_STATUS_ACCEPT_PEER);
2798+
accept_peer = !peer_is_config_node(peer);
28032799

28042800
bgp_soft_reconfig_table_task_cancel(bgp, NULL, peer);
28052801

@@ -2874,11 +2870,10 @@ int peer_delete(struct peer *peer)
28742870
peer->doppelganger = NULL;
28752871
}
28762872

2877-
UNSET_FLAG(peer->sflags, PEER_STATUS_ACCEPT_PEER);
28782873
bgp_fsm_change_status(peer->connection, Deleted);
28792874

28802875
/* Remove from NHT */
2881-
if (CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
2876+
if (peer_is_config_node(peer))
28822877
bgp_unlink_nexthop_by_peer(peer);
28832878

28842879
/* Password configuration */
@@ -3019,7 +3014,7 @@ static void peer_group2peer_config_copy(struct peer_group *group,
30193014
{
30203015
uint64_t flags_tmp;
30213016
struct peer *conf;
3022-
bool config_node = !!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE);
3017+
bool config_node = peer_is_config_node(peer);
30233018

30243019
conf = group->conf;
30253020

@@ -4604,19 +4599,16 @@ struct peer *peer_lookup_by_conf_if(struct bgp *bgp, const char *conf_if)
46044599

46054600
if (bgp != NULL) {
46064601
for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer))
4607-
if (peer->conf_if && !strcmp(peer->conf_if, conf_if)
4608-
&& !CHECK_FLAG(peer->sflags,
4609-
PEER_STATUS_ACCEPT_PEER))
4602+
if (peer->conf_if && !strcmp(peer->conf_if, conf_if) &&
4603+
peer_is_config_node(peer))
46104604
return peer;
46114605
} else if (bm->bgp != NULL) {
46124606
struct listnode *bgpnode, *nbgpnode;
46134607

46144608
for (ALL_LIST_ELEMENTS(bm->bgp, bgpnode, nbgpnode, bgp))
46154609
for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer))
4616-
if (peer->conf_if
4617-
&& !strcmp(peer->conf_if, conf_if)
4618-
&& !CHECK_FLAG(peer->sflags,
4619-
PEER_STATUS_ACCEPT_PEER))
4610+
if (peer->conf_if && !strcmp(peer->conf_if, conf_if) &&
4611+
peer_is_config_node(peer))
46204612
return peer;
46214613
}
46224614
return NULL;
@@ -4632,19 +4624,16 @@ struct peer *peer_lookup_by_hostname(struct bgp *bgp, const char *hostname)
46324624

46334625
if (bgp != NULL) {
46344626
for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer))
4635-
if (peer->hostname && !strcmp(peer->hostname, hostname)
4636-
&& !CHECK_FLAG(peer->sflags,
4637-
PEER_STATUS_ACCEPT_PEER))
4627+
if (peer->hostname && !strcmp(peer->hostname, hostname) &&
4628+
peer_is_config_node(peer))
46384629
return peer;
46394630
} else if (bm->bgp != NULL) {
46404631
struct listnode *bgpnode, *nbgpnode;
46414632

46424633
for (ALL_LIST_ELEMENTS(bm->bgp, bgpnode, nbgpnode, bgp))
46434634
for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer))
4644-
if (peer->hostname
4645-
&& !strcmp(peer->hostname, hostname)
4646-
&& !CHECK_FLAG(peer->sflags,
4647-
PEER_STATUS_ACCEPT_PEER))
4635+
if (peer->hostname && !strcmp(peer->hostname, hostname) &&
4636+
peer_is_config_node(peer))
46484637
return peer;
46494638
}
46504639
return NULL;

0 commit comments

Comments
 (0)