From: Donatas Abraitis Date: Sat, 5 Aug 2023 20:00:55 +0000 (+0300) Subject: bgpd: Check if peer is established and dynamic capability-aware X-Git-Tag: base_9.1~171^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=50c5908c9ff3cc1541d0797dfc4ac902b650c69b;p=mirror%2Ffrr.git bgpd: Check if peer is established and dynamic capability-aware Add this logic inside bgp_capability_send() instead of repeating the whole logic before calling bgp_capability_send(). Signed-off-by: Donatas Abraitis --- diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c index fcd644a210..78a33d3d4c 100644 --- a/bgpd/bgp_packet.c +++ b/bgpd/bgp_packet.c @@ -1202,6 +1202,13 @@ void bgp_capability_send(struct peer *peer, afi_t afi, safi_t safi, unsigned long cap_len; uint16_t len; + if (!peer_established(peer)) + return; + + if (!CHECK_FLAG(peer->cap, PEER_CAP_DYNAMIC_RCV) && + !CHECK_FLAG(peer->cap, PEER_CAP_DYNAMIC_ADV)) + return; + /* Convert AFI, SAFI to values for packet. */ bgp_map_afi_safi_int2iana(afi, safi, &pkt_afi, &pkt_safi); diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c index 52c9b95992..418f6fb389 100644 --- a/bgpd/bgp_vty.c +++ b/bgpd/bgp_vty.c @@ -5738,14 +5738,10 @@ DEFPY(neighbor_capability_software_version, ret = peer_flag_set_vty(vty, neighbor, PEER_FLAG_CAPABILITY_SOFT_VERSION); - if (peer_established(peer)) { - if (CHECK_FLAG(peer->cap, PEER_CAP_DYNAMIC_RCV) && - CHECK_FLAG(peer->cap, PEER_CAP_DYNAMIC_ADV)) - bgp_capability_send(peer, AFI_IP, SAFI_UNICAST, - CAPABILITY_CODE_SOFT_VERSION, - no ? CAPABILITY_ACTION_UNSET - : CAPABILITY_ACTION_SET); - } + bgp_capability_send(peer, AFI_IP, SAFI_UNICAST, + CAPABILITY_CODE_SOFT_VERSION, + no ? CAPABILITY_ACTION_UNSET + : CAPABILITY_ACTION_SET); return ret; } @@ -6813,13 +6809,8 @@ DEFPY(neighbor_role, ret = peer_role_set_vty(vty, peer, role, false); - if (peer_established(peer)) { - if (CHECK_FLAG(peer->cap, PEER_CAP_DYNAMIC_RCV) && - CHECK_FLAG(peer->cap, PEER_CAP_DYNAMIC_ADV)) - bgp_capability_send(peer, AFI_IP, SAFI_UNICAST, - CAPABILITY_CODE_ROLE, - CAPABILITY_ACTION_SET); - } + bgp_capability_send(peer, AFI_IP, SAFI_UNICAST, CAPABILITY_CODE_ROLE, + CAPABILITY_ACTION_SET); return ret; } @@ -6842,13 +6833,8 @@ DEFPY(neighbor_role_strict, ret = peer_role_set_vty(vty, peer, role, true); - if (peer_established(peer)) { - if (CHECK_FLAG(peer->cap, PEER_CAP_DYNAMIC_RCV) && - CHECK_FLAG(peer->cap, PEER_CAP_DYNAMIC_ADV)) - bgp_capability_send(peer, AFI_IP, SAFI_UNICAST, - CAPABILITY_CODE_ROLE, - CAPABILITY_ACTION_SET); - } + bgp_capability_send(peer, AFI_IP, SAFI_UNICAST, CAPABILITY_CODE_ROLE, + CAPABILITY_ACTION_SET); return ret; } @@ -6872,13 +6858,8 @@ DEFPY(no_neighbor_role, ret = bgp_vty_return(vty, peer_role_unset(peer)); - if (peer_established(peer)) { - if (CHECK_FLAG(peer->cap, PEER_CAP_DYNAMIC_RCV) && - CHECK_FLAG(peer->cap, PEER_CAP_DYNAMIC_ADV)) - bgp_capability_send(peer, AFI_IP, SAFI_UNICAST, - CAPABILITY_CODE_ROLE, - CAPABILITY_ACTION_UNSET); - } + bgp_capability_send(peer, AFI_IP, SAFI_UNICAST, CAPABILITY_CODE_ROLE, + CAPABILITY_ACTION_UNSET); return ret; }