Commit Graph

7821 Commits

Author SHA1 Message Date
Donatas Abraitis
353efe7ae8
Merge pull request #16416 from raja-rajasekar/rajasekarr/fix_logs_bp
bgpd: backpressure - fix ret value and log err for evpn
2024-07-25 21:09:39 +03:00
Donatas Abraitis
fa9bd07ae5 bgpd: Keep the last reset reason before we reset the peer
If we send a notification, there is no point setting the last_reset, because
bgp_notify_send() sets last_reset to PEER_DOWN_NOTIFY_SEND (almost everywhere).

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-07-25 13:22:27 +03:00
Donatas Abraitis
743b169384 bgpd: Set the last_reset if we change the password also
```
donatas.net(config-router)# do show ip bgp summary failed

IPv4 Unicast Summary:
BGP router identifier 1.1.1.1, local AS number 65001 VRF default vrf-id 0
BGP table version 0
RIB entries 0, using 0 bytes of memory
Peers 1, using 24 KiB of memory

Neighbor        EstdCnt DropCnt ResetTime Reason
127.0.0.1             2       2  00:02:02 Password config change (GoBGP/3.26.0)

Displayed neighbors 1
Total number of neighbors 1
```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-07-25 13:06:46 +03:00
Donatas Abraitis
45f80de734 bgpd: Pass a connection struct directly for EVENT_OFF()
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-07-24 15:30:43 +03:00
Russ White
ea5498ec5a
Merge pull request #16403 from lsang6WIND/vpn_leak_label
bgpd: fix label lost when vrf loopback comes back
2024-07-23 10:54:12 -04:00
Rajasekar Raja
40965e5999 bgpd: backpressure - Avoid use after free
Coverity complains there is a use after free (1598495 and 1598496)
At this point, most likely dest->refcount cannot go 1 and free up
the dest, but there might be some code path where this can happen.

Fixing this with a simple order change (no harm fix).

Ticket :#4001204

Signed-off-by: Rajasekar Raja <rajasekarr@nvidia.com>
2024-07-22 10:16:16 -07:00
sri-mohan1
1f24bbe181 bgpd: changes for code maintainability
these changes are for improving the code maintainability and readability

Signed-off-by: sri-mohan1 <sri.mohan@samsung.com>
2024-07-22 09:29:19 +05:30
Rajasekar Raja
6cf5b79311 bgpd: backpressure - log error for evpn when route install to zebra fails.
log error for evpn in case route install to zebra fails.

Ticket :#3992392

Signed-off-by: Rajasekar Raja <rajasekarr@nvidia.com>
2024-07-18 22:23:23 -07:00
Rajasekar Raja
c4bbb5b436 bgpd: backpressure - fix ret value evpn_route_select_install
The return value of evpn_route_select_install is ignored in all cases
except during vni route table install/uninstall and based on the
returned value, an error is logged. Fixing this.

Ticket :#3992392

Signed-off-by: Rajasekar Raja <rajasekarr@nvidia.com>
2024-07-18 22:18:06 -07:00
Donatas Abraitis
e8169f9385 bgpd: Show extended parameters support for the OPEN messages
We did that for the receiving side, but not for a sending side, let's fix it.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-07-19 05:20:04 +03:00
Loïc Sang
c21c597d5d bgpd: do not update leak label at loopback up down
The up/down state of the lo loopback interface does not determine the
availability of the default vrf-lite.

Do not update leak label at lo loopback up/down change.

Fixes: b45c5cd959 ("bgpd: update route leak when vrf state changes")
Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
Signed-off-by: Loïc Sang <loic.sang@6wind.com>
2024-07-17 15:42:12 +02:00
Loïc Sang
8b81f32e97 bgpd: fix label lost when vrf loopback comes back
VRF-label association drops when the VRF loopback goes down, however, it
does not return once the interface is enabled again.

Logs show that when VRF loopback goes down, a label drop message is sent
to zebra and immediately resent label installation to zebra, trigged by
"vpn_leak_postchange_all()":
2024/07/16 13:26:29 BGP: [RVJ1J-J2T22] ifp down r1-cust1 vrf id 7
2024/07/16 13:26:29 BGP: [WA2QY-06STJ] vpn_leak_zebra_vrf_label_withdraw: deleting label for vrf VRF r1-cust1 (id=7)
2024/07/16 13:26:30 BGP: [S82AC-6YAC8] vpn_leak_zebra_vrf_label_update: vrf VRF r1-cust1: afi IPv4: setting label 80 for vrf id 7

Since the interface is down, the netlink message is not send to kernel.
Once the interface comes back, zebra ignore the installation assuming
the label is already seen.

To fix this, add a check for the interface status before attempting to
reinstall the label.

Signed-off-by: Loïc Sang <loic.sang@6wind.com>
2024-07-17 15:41:39 +02:00
Russ White
85b50679bc
Merge pull request #16368 from raja-rajasekar/rajasekarr/bp_fixes
bgpd: backpressure - fix to properly remove dest for bgp under deletion
2024-07-16 12:13:57 -04:00
Rajasekar Raja
186db96c06 bgpd: backpressure - Improve debuggability
Improve debuggability in backpressure code.

Ticket :#3980988

Signed-off-by: Rajasekar Raja <rajasekarr@nvidia.com>
2024-07-15 14:10:00 -07:00
Rajasekar Raja
4395fcd8e1 bgpd: backpressure - fix to properly remove dest for bgp under deletion
In case of imported routes (L3vni/vrf leaks), when a bgp instance is
being deleted, the peer->bgp comparision with the incoming bgp to remove
the dest from the pending fifo is wrong. This can lead to the fifo
having stale entries resulting in crash.

Two changes are done here.
 - Instead of pop/push items in list if the struct bgp doesnt match,
   simply iterate the list and remove the expected ones.

 - Corrected the way bgp is fetched from dest rather than relying on
   path_info->peer so that it works for all kinds of routes.

Ticket :#3980988

Signed-off-by: Chirag Shah <chirag @nvidia.com>
Signed-off-by: Rajasekar Raja <rajasekarr@nvidia.com>
2024-07-15 14:09:44 -07:00
Donatas Abraitis
bfedb38110 bgpd: Skip empty (auto created) VRF instances when deleting a default BGP instance
Auto created VRF instances does not have any config, so it's not relevant
depending on them.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-07-15 16:20:31 +03:00
Donatas Abraitis
03c086866b bgpd: Skip automatically created BGP instances for show CMDs
When using e.g. `adverise-all-vni`, and/or `import vrf ...`, the VRF instance
is created with a default's VRF ASN and tagged as AUTO_VRF. We MUST skip them
here also.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-07-15 16:10:57 +03:00
Donatas Abraitis
80a4f87c9a bgpd: Mark VRF instance as auto created if import vrf is configured for this instance
If we create a new BGP instance (in this case VRF instance), it MUST be marked
as auto created, to avoid bgpd changing VRF instance's ASN to the default VRF's.

That's because of the ordering when FRR reload is happening.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-07-15 16:10:57 +03:00
Donatas Abraitis
16bfdf58f7 bgpd: Print tableid when sending (add/remove) routes to Zebra
In case this is used under `set table X` via route-maps, it's good to know
in debugs the table id.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-07-07 18:49:53 +03:00
Donatas Abraitis
d7144594ca bgpd: Drop unnecessary is_add check for bgp_zebra_announce_actual()
Fixes: ccfe452763 ("bgpd : backpressure - Handle BGP-Zebra Install evt Creation")

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-07-07 18:49:29 +03:00
Donald Sharp
e94fc4e6fb
Merge pull request #16345 from opensourcerouting/feature/bgp_remote-as_auto
bgpd: Implement `neighbor X remote-as auto`
2024-07-05 08:43:32 -04:00
Donatas Abraitis
0ed36e44f8 bgpd: Convert int to enum peer_asn_type
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-07-04 23:07:01 +03:00
Donatas Abraitis
0dfe25697f bgpd: Implement neighbor X remote-as auto
In some cases (large scale) it's desired to avoid changing configurations, but
let the BGP to automatically handle ASN changes.

`auto` means the peering can be iBGP or eBGP. It will be automatically detected
and adjusted from the OPEN message.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-07-04 14:42:19 +03:00
Donatas Abraitis
d4c577e483 bgpd: Move sticky, default_gw, router_flag into a single flags variable
Instead of using 3 uint8_t variables under struct attr, let's use a single
uint8_t as the flags. Saving 2-bytes. Not a big deal, but it's even easier to
track EVPN-related flags/variables.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-07-04 09:47:07 +03:00
Donatas Abraitis
c9426177f6 bgpd: Drop memset() before encoding EVPN extended communities
memset() is already handled inside the helpers for a particular extended
community.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-07-02 18:35:48 +03:00
Donatas Abraitis
9ab41861ce
Merge pull request #16099 from Pdoijode/pdoijode/bgp-gr2
Implement BGP-wide configuration for graceful restart
2024-07-02 16:40:29 +02:00
vivek
b5682ffbf0 *: Add and use option for graceful (re)start
Add a new start option "-K" to libfrr to denote a graceful start,
and use it in zebra and bgpd.

zebra will use this option to denote a planned FRR graceful restart
(supporting only bgpd currently) to wait for a route sync completion
from bgpd before cleaning up old stale routes from the FIB. An optional
timer provides an upper-bounds for this cleanup.

bgpd will use this option to denote either a planned FRR graceful
restart or a bgpd-only graceful restart, and this will drive the BGP
GR restarting router procedures.

Signed-off-by: Vivek Venkatraman <vivek@nvidia.com>
2024-07-01 13:02:52 -07:00
vivek
c30b683338 bgpd: Refine debug logs for zebra GR registration
Signed-off-by: Vivek Venkatraman <vivek@nvidia.com>
2024-07-01 13:02:52 -07:00
vivek
75040a0295 bgpd: Enhance OPEN Tx debug log
Signed-off-by: Vivek Venkatraman <vivek@nvidia.com>
2024-07-01 13:02:52 -07:00
vivek
496b2d1be4 bgpd: Refine OPEN debug logs for graceful restart
This also fixes Rx F-bit log which was incorrect.

Signed-off-by: Vivek Venkatraman <vivek@nvidia.com>
2024-07-01 13:02:52 -07:00
vivek
c6ed1cc16d bgpd: Refine restarter operation - R-bit & F-bit
Introduce BGP-wide flags to denote if BGP has started gracefully
and GR is in progress or not. Use this for setting of the R-bit in
the GR capability, and not a timer which is set for any new
instance creation. Mark graceful restart is complete when the
deferred path selection has been done and route sync with zebra as
well as deferred EOR advertisement has been initiated.

Introduce a function to check on F-bit setting rather than just
base it on configuration.

Subsequent commits will extend these functionalities.

Signed-off-by: Vivek Venkatraman <vivek@nvidia.com>
2024-07-01 13:02:45 -07:00
Donald Sharp
0ed2b5ac5a
Merge pull request #16305 from opensourcerouting/fix/bgp_confederation_rfc8212
bgpd: Ignore RFC8212 for BGP Confederations
2024-07-01 10:18:10 -04:00
Donatas Abraitis
0727e97a0c
Merge pull request #16068 from piotrsuchy/unknown_VRF
bgpd: Ignore routes from evpn if VRF is unknown
2024-06-28 10:33:40 +02:00
Donatas Abraitis
fa2cc09d45 bgpd: Ignore RFC8212 for BGP Confederations
RFC 8212 should be restricted for eBGP peers.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-06-27 22:46:58 +03:00
vivek
15403f521a bgpd: Streamline GR config, act on change immediately
Streamline the BGP graceful-restart configuration at the global and
peer level some more. Similar to many other neighbor capability
parameters like MP and ENHE, reset the session immediately upon a
change to the configuration. This will be more aligned with the
transactional UI model also and will not require a separate 'clear'
command to be executed.

Note: Peer-group graceful-restart configuration is not yet supported.

Signed-off-by: Vivek Venkatraman <vivek@nvidia.com>
2024-06-27 11:40:57 -07:00
Pooja Jagadeesh Doijode
f0210cbacc bgpd: Added ! after BGP global config
Signed-off-by: Pooja Jagadeesh Doijode <pdoijode@nvidia.com>
2024-06-27 11:40:57 -07:00
vivek
4e276b93de bgpd: Implement BGP-wide configuration for graceful restart
Add support for a BGP-wide setting for graceful restart modes and
parameters. This setting will apply to all BGP peers across all BGP
instances, but per-neighbor configuration can override it.
Per-instance configuration is disallowed if the BGP-wide setting
is in effect.

Signed-off-by: Vivek Venkatraman <vivek@nvidia.com>
2024-06-27 11:40:57 -07:00
Russ White
40f79260a5
Merge pull request #16271 from lsang6WIND/avoid-loop
bgpd: avoid clearing routes for peers that were never established
2024-06-26 16:45:44 -04:00
Loïc Sang
e0ae285eb8 bgpd: avoid clearing routes for peers that were never established
Under heavy system load with many peers in passive mode and a large
number of routes, bgpd can enter an infinite loop. This occurs while
processing timeout BGP_OPEN messages, which prevents it from accepting
new connections. The following log entries illustrate the issue:
>bgpd[6151]: [VX6SM-8YE5W][EC 33554460] 3.3.2.224: nexthop_set failed, resetting connection - intf 0x0
>bgpd[6151]: [P790V-THJKS][EC 100663299] bgp_open_receive: bgp_getsockname() failed for peer: 3.3.2.224
>bgpd[6151]: [HTQD2-0R1WR][EC 33554451] bgp_process_packet: BGP OPEN receipt failed for peer: 3.3.2.224
... repeating

The issue occurs when bgpd handles a massive number of routes in the RIB
while receiving numerous BGP_OPEN packets. If bgpd is overloaded, it
fails to process these packets promptly, leading the remote peer to
close the connection and resend BGP_OPEN packets.

When bgpd eventually starts processing these timeout BGP_OPEN packets,
it finds the TCP connection closed by the remote peer, resulting in
"bgp_stop()" being called. For each timeout peer, bgpd must iterate
through the routing table, which is time-consuming and causes new
incoming BGP_OPEN packets to timeout, perpetuating the infinite loop.

To address this issue, the code is modified to check if the peer has
been established at least once before calling "bgp_clear_route_all()".
This ensures that routes are only cleared for peers that had a
successful session, preventing unnecessary iterations over the routing
table for peers that never established a connection.

With this change, BGP_OPEN timeout messages may still occur, but in the
worst case, bgpd will stabilize. Before this patch, bgpd could enter a
loop where it was unable to accpet any new connections.

Signed-off-by: Loïc Sang <loic.sang@6wind.com>
2024-06-26 16:11:16 +02:00
Russ White
aeeceef618
Merge pull request #16214 from opensourcerouting/fix/attr_encap_handling
bgpd: A couple more fixes for Tunnel encapsulation handling
2024-06-25 07:26:38 -04:00
Russ White
58ecc778f2
Merge pull request #16273 from opensourcerouting/fix/bgpd_oad_rfc8212
bgpd: Relax OAD (One-Administration-Domain) for RFC8212
2024-06-25 07:24:42 -04:00
Russ White
7a87166178
Merge pull request #15838 from fdumontet6WIND/fix_regexx_exclude
bgpd: fix "bgp as-pah access-list" with "set aspath exclude" set/unset issue
2024-06-24 17:08:17 -04:00
Russ White
ed5628fef1
Merge pull request #16213 from opensourcerouting/fix/fqdn_capability_parsing_for_dynamic_capability
bgpd: Check if we have really enough data before doing memcpy for FQDN capability
2024-06-24 16:38:58 -04:00
Russ White
f047430576
Merge pull request #16211 from opensourcerouting/fix/dynamic_software_version_sanity_check
bgpd: Check if we have really enough data before doing memcpy for software version
2024-06-24 16:38:50 -04:00
Piotr Suchy
8044d73300 bgpd: Ignore routes from evpn if VRF is unknown
Fix for a bug, where FRR fails to install route received for an unknown but later-created VRF - detailed description can be found here https://github.com/FRRouting/frr/issues/13708

Signed-off-by: Piotr Suchy <psuchy@akamai.com>
2024-06-24 20:27:58 +00:00
Russ White
875f1ac11a
Merge pull request #16242 from opensourcerouting/fix/shutdown_peer_last_reset
bgpd: Set last reset reason to admin shutdown if it was manually
2024-06-24 15:40:49 -04:00
Donatas Abraitis
3b98ddf501 bgpd: Relax OAD (One-Administration-Domain) for RFC8212
RFC 8212 defines leak prevention for eBGP peers, but BGP-OAD defines a new
peering type One Administrative Domain (OAD), where multiple ASNs could be used
inside a single administrative domain. OAD allows sending non-transitive attributes,
so this prevention should be relaxed too.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-06-24 20:16:16 +03:00
Philippe Guibert
d4390fc217 bgpd: fix do not use api.backup_nexthop in ZAPI message
The backup_nexthop entry list has been populated by mistake,
and should not. Fix this by reverting the introduced behavior.

Fixes: 237ebf8d45 ("bgpd: rework bgp_zebra_announce() function, separate nexthop handling")

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2024-06-20 18:19:43 +02:00
Donatas Abraitis
34a6e223fb
Merge pull request #16059 from kacpekwasny/kkwasny/CLIC-139-4
bgpd: fixed failing to remove VRF if there is a stale l3vni
2024-06-20 10:51:06 +03:00
Donatas Abraitis
994792bace
Merge pull request #16234 from chiragshah6/fdev2
bgpd: backpressure - fix evpn route sync to zebra
2024-06-20 08:03:42 +03:00