Commit Graph

6319 Commits

Author SHA1 Message Date
Donatas Abraitis
9961cffbe0
Merge pull request #12336 from cscarpitta/fix/increase-sid-index-limit
bgpd: Fix SRv6 SID index limit in the `sid vpn per-vrf export` VTY command
2022-11-21 10:05:44 +02:00
Donatas Abraitis
575d82a213
Merge pull request #12345 from donaldsharp/bgp_debugs_upstream
Bgp debugs upstream
2022-11-21 10:01:10 +02:00
vivek
71d276c88a bgpd: Display FD in peer FSM state change log
Signed-off-by: Vivek Venkatraman <vivek@nvidia.com>
2022-11-20 22:45:37 -05:00
vivek
9e8a096b73 bgpd: Remove unnecessary debug log
Signed-off-by: Vivek Venkatraman <vivek@nvidia.com>
2022-11-20 22:45:12 -05:00
vivek
031c24f2a9 bgpd: Add more debug info for incoming connection
Signed-off-by: Vivek Venkatraman <vivek@nvidia.com>
2022-11-20 22:45:12 -05:00
vivek
3ffec403e8 bgpd: Modify keepalive debug category
Log keepalive timer expiry against 'debug bgp keepalive' instead
of 'debug bgp neighbor-events'.

Signed-off-by: Vivek Venkatraman <vivek@nvidia.com>
2022-11-20 22:42:47 -05:00
Donatas Abraitis
382c3b08b6 bgpd: Warn user only if the LL is not seriously available
LL address is assigned, but we get a warning, that it's not:

Interface: enp3s0 does not have a v6 LL address associated with it, waiting until one is created for it

```
donatas-pc# sh int enp3s0
Interface enp3s0 is up, line protocol is up
  Link ups:       0    last: (never)
  Link downs:     0    last: (never)
  vrf: default
  index 2 metric 0 mtu 1500 speed 100
  flags: <UP,BROADCAST,RUNNING,MULTICAST>
  v4 Multicast forwarding is on
  v6 Multicast forwarding is on
  Type: Ethernet
  HWaddr: 18:c0:4d:96:fa:3f
  inet 192.168.10.17/24
  inet6 2a02:4780:abc:0:e776:6220:1e21:44b1/64
  inet6 fe80::ca5d:fd0d:cd8:1bb7/64
```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-11-18 10:36:24 +02:00
Carmine Scarpitta
346bbb394e bgpd: Fix SRv6 SID index limit
Previously BGP supported up to 255 SIDs.

The PR https://github.com/FRRouting/frr/pull/11981 extended the
transposition computation algorithm in BGP to support more SIDs (up to
1048575 SIDs).

However the BGP VTY command for allocating an SRv6 per-VRF SID
(`sid vpn per-vrf export`) is still limited to 255 SIDs.

This commit extends the SID index in `sid vpn per-vrf export` VTY
command to support up to 1048575 SIDs.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2022-11-18 08:47:58 +01:00
Russ White
b7de3fe8a9
Merge pull request #12309 from proelbtn/bgpd-fix-mpls-vpn-advertisement
bgpd: fix invalid ipv4-vpn nexthop for IPv6 peer
2022-11-17 10:05:04 -05:00
Donatas Abraitis
f8d69be43f
Merge pull request #12081 from sworleys/EMM-upstream
Rework of Various Handling in EVPN for Extended Mac Mobility
2022-11-17 16:46:58 +02:00
Ryoga Saito
63e7ddb509 bgpd: fix invalid ipv4-vpn nexthop for IPv6 peer
Given that two routers are connected each other and they have IPv6
addresses and they establish BGP peer with extended-nexthop capability
and one router tries to advertise locally-generated IPv4-VPN routes to
other router.

In this situation, bgpd on the router that tries to advertise IPv4-VPN
routes will be crashed with "invalid MP nexthop length (AFI IP6)".

This issue is happened because MP_REACH_NLRI path attribute is not
generated correctly when ipv4-vpn routes are advertised to IPv6 peer.
When IPv4 routes are leaked from VRF RIB, the nexthop of these routes
are also IPv4 address (0.0.0.0/0 or specific addresses). However,
bgp_packet_mpattr_start only covers the case of IPv6 nexthop (for IPv6
peer).

ipv4-unicast routes were not affected by this issue because the case of
IPv4 nexthop is covered in `else` block.

Signed-off-by: Ryoga Saito <ryoga.saito@linecorp.com>
2022-11-17 19:08:43 +09:00
Russ White
0fcf26b172
Merge pull request #12312 from pguibert6WIND/bgp_lu_rr_case
bgpd: authorise to select bgp self peer prefix on rr case
2022-11-16 21:58:09 -05:00
Donatas Abraitis
e0f7fc58a2
Merge pull request #12324 from sworleys/Guard-InQ-Log
bgpd: debug guard inQ limit
2022-11-16 21:48:04 +02:00
Donald Sharp
b36156760b
Merge pull request #12259 from opensourcerouting/fix/show_rtt_always
bgpd: Shutdown RTT improvements
2022-11-16 10:28:23 -05:00
Stephen Worley
3448b62542 bgpd: debug guard inQ limit
Add a debug guard for the inQ limit.

Signed-off-by: Stephen Worley <sworley@nvidia.com>
2022-11-15 15:28:09 -05:00
Philippe Guibert
f874552557 bgpd: authorise to select bgp self peer prefix on rr case
This commit addresses an issue that happens when using bgp
peering with a rr client, with a received prefix which is the
local ip address of the bgp session.

When using bgp ipv4 unicast session, the local prefix is
received by a peer, and finds out that the proposed prefix
and its next-hop are the same. To avoid a route loop locally,
no nexthop entry is referenced for that prefix, and the route
will not be selected.

When the received peer is a route reflector, the prefix has
to be selected, even if the route can not be installed locally.

Fixes: ("fb8ae704615c") bgpd: prevent routes loop through itself

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2022-11-15 09:49:38 +01:00
Donatas Abraitis
84f784fafa
Merge pull request #12219 from cscarpitta/feature/srv6-usid-behavior-support
bgpd, zebra: Add support for SRv6 uSID Behaviors
2022-11-14 16:13:39 +02:00
Donald Sharp
edb904e81c
Merge pull request #12234 from opensourcerouting/fix/bgp_regex_pcre
docker: Use PCRE2 for Alpine
2022-11-14 07:57:47 -05:00
Donatas Abraitis
8979fb74df
Merge pull request #12287 from donaldsharp/bgp_rpki_takes_too_long
Bgp rpki takes too long
2022-11-09 21:25:44 +02:00
Carmine Scarpitta
05d99980f3 bgpd: Use SRv6 codepoints in the BGP Advertisement
Currently bgpd uses the opaque codepoint (0xFFFF) in the BGP
advertisement. In this commit, we update bgpd to use the SRv6 codepoints
defined in the IANA SRv6 Endpoint Behaviors Registry
(https://www.iana.org/assignments/segment-routing/segment-routing.xhtml)

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2022-11-08 22:44:23 +01:00
Donald Sharp
31d0363ffc bgpd: rpki was decrementing the node lock one time too many
The code was this:

1)        match = bgp_table_subtree_lookup(rrp->bgp->rib[rrp->afi][rrp->safi],
                                         &rrp->prefix);

2)        node = match;

        while (node) {
                if (bgp_dest_has_bgp_path_info_data(node)) {
                        revalidate_bgp_node(node, rrp->afi, rrp->safi);
                }

3)               node = bgp_route_next_until(node, match);
        }

	if (match)
4)              bgp_dest_unlock_node(match);

At 1) match was locked and became +1
At 2) match and node are now equal
At 3) On first iteration, match is decremented( as that node points
at it ) and the next item is locked, if it is found, and returned which becomes node

If 3 is run again because node is non-null then, current node is decremented
and the next node found is incremented and returned which becomes node again.

So if we get to 4) match is unlocked again which is now a double unlock
which, frankly, is not good.  In all code paths that I can see the
test for `if (match) ...` is not needed so let's just remove it.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-11-08 14:47:00 -05:00
Jafar Al-Gharaibeh
195ad0e793
Merge pull request #12258 from opensourcerouting/bgp-local-var-gcc-12
bgpd: fix "storing the address of local variable"
2022-11-08 10:36:36 -06:00
Donald Sharp
7f1f931447 bgpd: Break up rpki prefix revalidation by bgp structure
RPKI revalidation is an possibly expensive operation.  Break up
revalidation on a prefix basis by the `struct bgp` pointer.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-11-08 08:11:52 -05:00
Donald Sharp
fc15f734aa bgpd: rpki should use a stack pointer instead of a pointer
The prefix was being allocated and freed.  No point in this
let's just use a stack pointer.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-11-08 08:11:52 -05:00
Donald Sharp
7651f27751 bgpd: Make rpki soft_reconfig calling events
An end operator is showing cases with multiple bgp feeds
and a rpki table that calling the revalidation functions
is extremely expensive and they are seeing lots of thread
WARNS about timers being late and eventually the whole
thing gets unresponsive.  Let's break up soft reconfiguration
in to a series of events per peer so that all the work
for this is not done at the same exact time.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-11-08 08:11:52 -05:00
Donald Sharp
802ca11f10 bgpd: Use bgp pointer instead of peer pointer
When looking up a table, use the bgp pointer that we
have.  Code cleanliness and all that.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-11-08 08:11:52 -05:00
Donald Sharp
89c73443e8 bgpd: Make calling bgp_soft_reconfig_in consistent
Not all places were checking to see if soft reconfiguration
was turned on before calling into it to do all that work.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-11-08 08:11:52 -05:00
Donald Sharp
8fb15d02fe bgpd: In rpki use FOREACH_AFI_SAFI to loop over afi/safi
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-11-08 08:11:52 -05:00
Donatas Abraitis
061f5d1cb4 lib: Add PCRE2 support
Some results:

```
====
PCRE
====
% ./a.out "^65001" "65001"
comparing: ^65001 / 65001

ret status: 0
[14:31] donatas-pc donatas /home/donatas
% ./a.out "^65001_" "65001"
comparing: ^65001_ / 65001

ret status: 0

=====
PCRE2
=====
% ./a.out "^65001" "65001"
comparing: ^65001 / 65001

ret status: 0
[14:30] donatas-pc donatas /home/donatas
% ./a.out "^65001_" "65001"
comparing: ^65001_ / 65001

ret status: 1
```

Seems that if using PCRE2, we need to escape outer `()` chars and `|`. Sounds
like a bug.
But this is only with some older PCRE2 versions. With >= 10.36, I wasn't able
to reproduce this, everything is fine and working as expected.

Adding _FRR_PCRE2_POSIX definition because pcre2posix.h does not have
include's guard.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-11-07 21:23:53 +02:00
Donald Sharp
f3c6dd49f4 *: Add ability for daemons to notice resilience changes
This patch just introduces the callback mechanism for the
resilient nexthop changes so that upper level daemons
can take advantage of the change.  This does nothing
at this point but just call some code.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-11-04 13:34:27 -04:00
Donald Sharp
3e85fb3373
Merge pull request #12244 from anlancs/fix/bgpd-evpn-leak-l3rt
bgpd: avoid possible memleak
2022-11-04 11:59:32 -04:00
Donatas Abraitis
f41255a0ef bgpd: Show the counters for RTT when shutdown on RTT feature is enabled
"shutdownRttInMsecs":5,
    "shutdownRttAfterCount":5,

Estimated round trip time: 116 ms
Shutdown when RTT > 5ms, count > 17

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-11-04 16:07:07 +02:00
Donatas Abraitis
5597214ccb bgpd: Show the reason when the session is killed due to RTT
Simulated latency with:

```
tc qdisc add dev eth3 root netem delay 100ms
```

```
donatas-laptop# sh ip bgp summary failed

IPv4 Unicast Summary (VRF default):
BGP router identifier 192.0.2.252, local AS number 65000 vrf-id 0
BGP table version 28
RIB entries 0, using 0 bytes of memory
Peers 1, using 724 KiB of memory

Neighbor        EstdCnt DropCnt ResetTime Reason
192.168.10.65         2       2  00:00:17 Admin. shutdown (RTT)

Displayed neighbors 1
Total number of neighbors 1
donatas-laptop#
```

Another end received:

```
%NOTIFICATION: received from neighbor 192.168.10.17 6/2 (Cease/Administrative Shutdown) "shutdown due to high round-trip-time (104ms > 5ms, hit 21 times)"
```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-11-04 15:56:23 +02:00
Donatas Abraitis
9f4fa17629 bgpd: Always show estimated RTT to the peer
It's very annoying when flapping between 0 (missing the output) and non-zero.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-11-04 14:46:14 +02:00
Donatas Abraitis
94fdbad234
Merge pull request #12251 from donaldsharp/various_and_sundry
Various and sundry
2022-11-04 14:03:50 +02:00
Donald Sharp
efda3db030
Merge pull request #12256 from opensourcerouting/fix/llgr_max_values
bgpd: Cap LLGR stale-time to 16777215
2022-11-04 08:00:06 -04:00
Donald Sharp
63e357a82c
Merge pull request #12257 from opensourcerouting/fix/bgp_orf_reserved
bgpd: Check and print if we receive ORF reserved type
2022-11-04 07:59:14 -04:00
David Lamparter
c34a7afc74 bgpd: fix "storing the address of local variable"
New GCC 12 warning.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-11-04 12:34:00 +01:00
Donatas Abraitis
5970204c69 bgpd: Cap LLGR stale-time to 16777215
This value is 3 bytes (24-bits), let's do not overuse this.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-11-04 08:21:18 +02:00
Donald Sharp
adf552ab6b bgpd: Limit snmp trap for backwards state movement from established
Currently the bgp mib specifies two traps:

a) Into established state
b) transition backwards from a state

b) really is an interesting case.  It means transitioning
from say established to starting over.  It can also
mean when bgp is trying to connect and that fails and
the state transitions backwards.

Now let's imagine 500 peers with tight timers (say a data center)
and there is network trauma you have just created an inordinately
large number of traps for each peer.

Let's limit FRR to changing from the old status as Established
to something else.  This will greatly limit the trap but it
will also be something end operators are actually interested in.

I actually had several operators say they had to write special code
to ignore all the backward state transitions that they didn't care
about.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-11-03 20:39:39 -04:00
Donald Sharp
c4f16627d3 bgpd: rfapi doc strings are messed up for one command
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-11-03 13:01:16 -04:00
Donatas Abraitis
5bb2aa89d0 bgpd: Check and print if we receive ORF reserved type
Just for debugging purposes and a better visibility.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-11-03 16:19:21 +02:00
anlan_cs
ed8862ad30 bgpd: avoid possible memleak
In the case of without ':' in `ecom_str`, memleak on this `ecom_str` will
occur. Just free `ecom_str` for this case.

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-11-03 21:21:14 +08:00
Donald Sharp
d7cde18c63
Merge pull request #12196 from opensourcerouting/xref-vtysh
*: rewrite `extract.pl` using `xref` infra
2022-11-03 08:54:09 -04:00
Donald Sharp
766eec1b7a bgpd: Ensure that bgp open message stream has enough data to read
If a operator receives an invalid packet that is of insufficient size
then it is possible for BGP to assert during reading of the packet
instead of gracefully resetting the connection with the peer.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-11-02 13:24:48 -04:00
Stephen Worley
d950d2246d bgpd: use vty_json() in show bpg vni json output
Use vty_json() in show bgp vni json output.

Signed-off-by: Stephen Worley <sworley@nvidia.com>
2022-11-01 14:54:11 -04:00
Stephen Worley
339af96e38 bgpd: vni_t is uint32_t so print it as such in vty
vni_t is a uint32_t so print is as such in vty output.

Signed-off-by: Stephen Worley <sworley@nvidia.com>
2022-11-01 14:33:36 -04:00
Stephen Worley
6012963ecd bgpd: use CHECK_FLAG for es_flags in route detail
Use CHECK_FLAG for es_flags in vtysh output for route
detail.

Signed-off-by: Stephen Worley <sworley@nvidia.com>
2022-11-01 14:26:54 -04:00
Russ White
f4bf8f1494
Merge pull request #12159 from opensourcerouting/fix/conditional_advertisement_track_updates
bgpd: Notify BGP conditional advertisement thread when the peer goes down
2022-11-01 12:24:51 -04:00
David Lamparter
08efd203be
Merge pull request #12236 from cscarpitta/fix/replace-inet-top-in-bgp-mplsvpn 2022-11-01 13:01:49 +01:00