From: Donatas Abraitis Date: Tue, 26 Sep 2023 13:35:15 +0000 (+0300) Subject: bgpd: Clear addpath RX flag if it's absent X-Git-Tag: base_10.0~369^2~2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=058f3ff7adef4d7e70b0bb7caac3e948f22e5ff7;p=matthieu%2Ffrr.git bgpd: Clear addpath RX flag if it's absent When we have RX/TX flags, but received only TX, we should clear RX flag, to avoid receiving additional paths. Signed-off-by: Donatas Abraitis --- diff --git a/bgpd/bgp_open.c b/bgpd/bgp_open.c index 8a202b480a..19cdcbc1d4 100644 --- a/bgpd/bgp_open.c +++ b/bgpd/bgp_open.c @@ -709,15 +709,17 @@ static int bgp_capability_addpath(struct peer *peer, uint8_t send_receive = stream_getc(s); if (bgp_debug_neighbor_events(peer)) - zlog_debug( - "%s OPEN has %s capability for afi/safi: %s/%s%s%s", - peer->host, - lookup_msg(capcode_str, hdr->code, NULL), - iana_afi2str(pkt_afi), iana_safi2str(pkt_safi), - (send_receive & BGP_ADDPATH_RX) ? ", receive" - : "", - (send_receive & BGP_ADDPATH_TX) ? ", transmit" - : ""); + zlog_debug("%s OPEN has %s capability for afi/safi: %s/%s%s%s", + peer->host, + lookup_msg(capcode_str, hdr->code, NULL), + iana_afi2str(pkt_afi), + iana_safi2str(pkt_safi), + CHECK_FLAG(send_receive, BGP_ADDPATH_RX) + ? ", receive" + : "", + CHECK_FLAG(send_receive, BGP_ADDPATH_TX) + ? ", transmit" + : ""); /* Convert AFI, SAFI to internal values, check. */ if (bgp_map_afi_safi_iana2int(pkt_afi, pkt_safi, &afi, &safi)) { @@ -736,13 +738,19 @@ static int bgp_capability_addpath(struct peer *peer, continue; } - if (send_receive & BGP_ADDPATH_RX) + if (CHECK_FLAG(send_receive, BGP_ADDPATH_RX)) SET_FLAG(peer->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_RX_RCV); + else + UNSET_FLAG(peer->af_cap[afi][safi], + PEER_CAP_ADDPATH_AF_RX_RCV); - if (send_receive & BGP_ADDPATH_TX) + if (CHECK_FLAG(send_receive, BGP_ADDPATH_TX)) SET_FLAG(peer->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_TX_RCV); + else + UNSET_FLAG(peer->af_cap[afi][safi], + PEER_CAP_ADDPATH_AF_TX_RCV); } return 0;