Commit Graph

31997 Commits

Author SHA1 Message Date
Russ White
6a88c7a87e
Merge pull request #13548 from opensourcerouting/fix/use_min_value_of_cli_zebra_cap_ecmp
ripd: Make sure we do not overuse higher values for ECMP count
2023-05-23 08:25:46 -04:00
Russ White
7b7da41def
Merge pull request #13556 from donaldsharp/token_to_desc
memory desciprtion shortening
2023-05-23 08:21:51 -04:00
Russ White
5db30e7958
Merge pull request #13578 from opensourcerouting/fix/ripd_argv_find
ripd: Use argv_find to avoid buffer overflow when parsing allow-ecmp args
2023-05-23 08:20:07 -04:00
Russ White
fa45a19a60
Merge pull request #13535 from opensourcerouting/feature/ripng_allow_ecmp
ripng: Implement allow-ecmp X command
2023-05-23 07:35:32 -04:00
Donatas Abraitis
c8b4b93b83
Merge pull request #13577 from raja-rajasekar/frr_dev1
Fixing show bgp all json format and convert evpn to no pretty output
2023-05-23 10:40:46 +03:00
Donatas Abraitis
b8b30c765b
Merge pull request #13570 from donaldsharp/toooooooo_fast
Grab bag of fixes from upgrading system
2023-05-23 09:44:13 +03:00
Donatas Abraitis
6c5ffa8896 ripngd: Make sure we do not overuse higher values for ECMP count
Use a minimum value of a CLI version and a value of Zebra capabilities.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2023-05-23 09:29:02 +03:00
Donatas Abraitis
993b236b2c doc: Add RIPng allow-ecmp command
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2023-05-23 09:29:02 +03:00
Donatas Abraitis
29d3532a7a tests: Check if allow-ecmp command works for RIPng
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2023-05-23 09:29:02 +03:00
Donatas Abraitis
57aedde6ef ripng: Implement allow-ecmp X command
A port of ripd implementation for ripngd implemented by 75fce4645a.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2023-05-23 09:29:01 +03:00
Donatas Abraitis
a82a6d409d ripd: Use argv_find to avoid buffer overflow when parsing allow-ecmp args
==13211==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6020000af158 at pc 0x55d48c5f1e38 bp 0x7fffd8a713d0 sp 0x7fffd8a713c0
READ of size 8 at 0x6020000af158 thread T0
    #0 0x55d48c5f1e37 in rip_allow_ecmp ripd/rip_cli.c:98
    #1 0x7f2ec125aa0f in cmd_execute_command_real lib/command.c:990
    #2 0x7f2ec125ae90 in cmd_execute_command lib/command.c:1049
    #3 0x7f2ec125b406 in cmd_execute lib/command.c:1217
    #4 0x7f2ec137ca36 in vty_command lib/vty.c:551
    #5 0x7f2ec137ce52 in vty_execute lib/vty.c:1314
    #6 0x7f2ec1384f9e in vtysh_read lib/vty.c:2223
    #7 0x7f2ec137041b in event_call lib/event.c:1995
    #8 0x7f2ec12b54bf in frr_run lib/libfrr.c:1204
    #9 0x55d48c5f0f32 in main ripd/rip_main.c:171
    #10 0x7f2ec0ad9c86 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21c86)
    #11 0x55d48c5f1349 in _start (/usr/lib/frr/ripd+0x3b349)

0x6020000af158 is located 0 bytes to the right of 8-byte region [0x6020000af150,0x6020000af158)
allocated by thread T0 here:
    #0 0x7f2ec18ccb40 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xdeb40)
    #1 0x7f2ec12d2e41 in qmalloc lib/memory.c:100
    #2 0x7f2ec125a815 in cmd_execute_command_real lib/command.c:955
    #3 0x7f2ec125ae90 in cmd_execute_command lib/command.c:1049
    #4 0x7f2ec125b406 in cmd_execute lib/command.c:1217
    #5 0x7f2ec137ca36 in vty_command lib/vty.c:551
    #6 0x7f2ec137ce52 in vty_execute lib/vty.c:1314
    #7 0x7f2ec1384f9e in vtysh_read lib/vty.c:2223
    #8 0x7f2ec137041b in event_call lib/event.c:1995
    #9 0x7f2ec12b54bf in frr_run lib/libfrr.c:1204
    #10 0x55d48c5f0f32 in main ripd/rip_main.c:171
    #11 0x7f2ec0ad9c86 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21c86)

SUMMARY: AddressSanitizer: heap-buffer-overflow ripd/rip_cli.c:98 in rip_allow_ecmp
Shadow bytes around the buggy address:
  0x0c048000ddd0: fa fa fd fa fa fa fd fa fa fa fd fd fa fa fd fa
  0x0c048000dde0: fa fa fd fa fa fa fd fd fa fa fd fa fa fa fd fd
  0x0c048000ddf0: fa fa fd fa fa fa fd fd fa fa fd fd fa fa fd fd
  0x0c048000de00: fa fa fd fa fa fa fd fd fa fa 00 03 fa fa fd fa
  0x0c048000de10: fa fa fd fa fa fa 00 00 fa fa fd fa fa fa 00 03
=>0x0c048000de20: fa fa 00 03 fa fa fd fa fa fa 00[fa]fa fa fa fa
  0x0c048000de30: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c048000de40: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c048000de50: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c048000de60: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c048000de70: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==13211==ABORTING

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2023-05-23 09:20:27 +03:00
Rajasekar Raja
82465ca7f9 bgpd: Using no pretty json output for l2vpn-Evpn routes
The output of show bgp all json is inconsistent across Address-families
i.e. ipv4/ipv6 is a no pretty format while l2vpn-evpn is in a pretty
format. For huge scale (lots of routes with lots of paths), it is better
to use no_pretty format.

Before fix:
torm-11# sh bgp all json
{
"ipv4Unicast":{
 "vrfId": 0,
 "vrfName": "default",
 "tableVersion": 1,
 "routerId": "27.0.0.15",
 "defaultLocPrf": 100,
 "localAS": 65000,
 "routes": { } }
,
"l2VpnEvpn":{
"routes":{
  "27.0.0.15:2":{
    "rd":"27.0.0.15:2",
    "[1]:[0]:[03:44:38:39:ff:ff:01:00:00:01]:[128]:[::]:[0]":{
      "prefix":"[1]:[0]:[03:44:38:39:ff:ff:01:00:00:01]:[128]:[::]:[0]",
      "prefixLen":352,
      "paths":[
<SNIP>.............

After fix:
torm-11# sh bgp all json
{
"ipv4Unicast":{
 "vrfId": 0,
 "vrfName": "default",
 "tableVersion": 1,
 "routerId": "27.0.0.15",
 "defaultLocPrf": 100,
 "localAS": 65000,
 "routes": { } }
,
"l2VpnEvpn":{
"routes":{"27.0.0.15:2":{"rd":"27.0.0.15:2","[1]:[0]:[03:44:38:39:ff:ff:01:00:00:01]:[128]:[::]:[0]":{"prefix":"[1]:[0]:[03:44:38:39:ff:ff:01:00:00:01]:[128]:[::]:[0]","prefixLen":352,"paths":[[{"valid":true,"bestpath":true,"selectionReason":"First path received","pathFrom":"external","routeType":1,"weight":32768,"peerId":"(unspec)","path":"","origin":"IGP","extendedCommunity"
<SNIP>.............

Issue: 3472865

Ticket:#3472865

Signed-off-by: Rajasekar Raja <rajasekarr@nvidia.com>
2023-05-22 14:14:30 -07:00
Rajasekar Raja
be66fa05c9 bgpd: Fix the json output of show bgp all json to be in a valid format
In the json output of show bgp all json, the l2VpnEvpn afi-safi is
missing the 'routes' key making the json output format invalid.

Before Fix:
torm-11# sh bgp all json
{
<SNIP>....................
"l2VpnEvpn":{
{
  "27.0.0.15:2":{
    "rd":"27.0.0.15:2",
    "[4]:[03:44:38:39:ff:ff:01:00:00:01]:[32]:[27.0.0.15]":{
      "prefix":"[4]:[03:44:38:39:ff:ff:01:00:00:01]:[32]:[27.0.0.15]",
      "prefixLen":352,
      "paths":[
<SNIP>....................

After Fix:
torm-11# sh bgp all json
{
<SNIP>....................
"l2VpnEvpn":{
"routes":{
  "27.0.0.15:2":{
    "rd":"27.0.0.15:2",
    "[1]:[0]:[03:44:38:39:ff:ff:01:00:00:01]:[128]:[::]:[0]":{
      "prefix":"[1]:[0]:[03:44:38:39:ff:ff:01:00:00:01]:[128]:[::]:[0]",
      "prefixLen":352,
      "paths":[

Issue: 3472865
Ticket:#3472865

Signed-off-by: Rajasekar Raja <rajasekarr@nvidia.com>
2023-05-22 14:02:54 -07:00
Donald Sharp
d9dfbab71c lib: va_end must be called
According to the man page a va_start must be followed by
a va_end before the end of the function.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-05-22 10:52:54 -04:00
Donald Sharp
d7c9666e06 zebra: Fix paths that have already de-refed ctx
There is no path in some functions where the ctx
has not already been de-refed.  As such no need
to test for it's existence.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-05-22 10:52:54 -04:00
Donald Sharp
b31a1797c6 tests: Do not Cause test scripts to stop running when config load fails
When running the pytests in parallel, calling pytest.exit() causes
the entire test run to be aborted.  Which.... Is frankly not cool.
Let's notice the failure and move on to the next tests.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-05-22 10:52:54 -04:00
Donald Sharp
af53f97f34 tests: Add exit stanzas to pre-generated config
A bunch of tests rely on pre-generated config from
json files.  These tests were not putting `exit` stanzas
and a bunch of the tests as a result are silently failing
to configure properly at all, as commands were being sent
to the wrong daemons.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-05-22 10:52:54 -04:00
Donald Sharp
b9de32473d tests: Slow bgp_default_originate test down slightly
The test is performing these steps:

a) get timestamp of route installed in zebra
b) <make changes>
c) get new timestamp of route installed in zebra

If < 1 second happens between A and C the test
assumes that something went wrong, as that it is
testing to see if the route was reinstalled <yes I know>.

Just sleep 1 second after a) happens so that if a reinstall
happens we can easily see it, and we also know that if a
reinstall doesn't happen then the new timestamp will
always be 1 second or greater.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-05-22 10:06:07 -04:00
David Lamparter
4d7f6295c6
Merge pull request #13560 from donaldsharp/fpm_netlink_aroni 2023-05-22 15:46:29 +02:00
Igor Ryzhov
884b0a21f9
Merge pull request #13506 from anlancs/fix/bfdd-vrf-check
bfdd: Fix malformed session with vrf
2023-05-22 14:24:34 +03:00
Donatas Abraitis
98378a3546
Merge pull request #13564 from chiragshah6/fdev1
bgpd: aggregate route best path select and other fixes
2023-05-22 09:45:54 +03:00
Donatas Abraitis
f0ac9aa4a7
Merge pull request #13563 from donaldsharp/remove_true
tests: pytest does not like return True from a test
2023-05-22 09:38:53 +03:00
Donald Sharp
697e7e5174
Merge pull request #13566 from LabNConsulting/chopps/analyze-improvement
tests: have ananlyze.py `chown -R $SUDO_USER` when copying results
2023-05-21 20:22:22 -04:00
Donald Sharp
57a2ff8b8d
Merge pull request #13568 from opensourcerouting/fix/timers_bgp_topotests
tests: Fix timers command for bgp_disable_addpath_rx test
2023-05-21 20:21:51 -04:00
Donald Sharp
871ba744b4
Merge pull request #13567 from opensourcerouting/fix/initialize_buf_char_for_path_info_cmp
bgpd: Initialize pfx_buf to zeros before using in bgp_path_info_cmp()
2023-05-21 20:21:21 -04:00
Igor Ryzhov
c4676ad917
Merge pull request #13565 from LabNConsulting/chopps/munet-update 2023-05-20 14:11:05 +03:00
Donatas Abraitis
f55bd028b7 tests: Fix timers command for bgp_disable_addpath_rx test
Was incorrectly setting BGP timers.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2023-05-20 10:06:49 +03:00
Donatas Abraitis
e0b1c8ccdf bgpd: Initialize pfx_buf to zeros before using in bgp_path_info_cmp()
This can lead into some garbage outputs, that can't be decoded in utf-8 or so.

This was catched when testing 76b246aa1f.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2023-05-20 10:03:10 +03:00
Christian Hopps
2013c684d0 tests: munet to version 0.13.4
Signed-off-by: Christian Hopps <chopps@labn.net>
2023-05-19 23:16:39 -04:00
Christian Hopps
47e52c47d4 tests: have ananlyze.py chown -R $SUDO_USER when copying results
Signed-off-by: Christian Hopps <chopps@labn.net>
2023-05-19 23:14:18 -04:00
Donald Sharp
4257390892 bfdd: Use shorter memory names so that they fit in vty output
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-05-19 21:31:35 -04:00
Donald Sharp
df6eb0bd7b lib, mgmtd: Use short memory names so they fit within vty output
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-05-19 21:31:35 -04:00
Donald Sharp
a01f310709 zebra: Make memory description string smaller to fit in vty space
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-05-19 21:31:35 -04:00
Donald Sharp
b6ab009b99 lib: Fix overlapping memory type
Make a unique memory type so we are not overlapping another one.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-05-19 21:31:35 -04:00
Donald Sharp
cd0956e69d
Merge pull request #13559 from opensourcerouting/fix/ignore_decoding_chars
tests: Ignore utf-8 decoding errors
2023-05-19 21:30:34 -04:00
Chirag Shah
e38e8edcf9 bgpd: fix memory leak in aggregate path info
Fix memory leak in aggregate route path info
comparison api.

Signed-off-by: Chirag shah <chirag@nvidia.com>
2023-05-19 14:45:49 -07:00
Chirag Shah
ff8bebd2a6 bgpd: fix aggregate route display
Based on RFC-4760, if NEXT_HOP attribute is not
suppose to be set if MP_REACH_NLRI NLRI is used.
for IPv4 aggregate route only NEXT_HOP attribute
with ipv4 prefixlen needs to be set.

Testing Done:

Before fix:
----------
aggregate route:
*> 184.123.0.0/16   ::(TORC11)               0         32768 i

After fix:
---------
aggregate route:
*> 184.123.0.0/16   0.0.0.0(TORC11)          0         32768 i
* i                 peerlink-3               0    100      0 i
*                   uplink1                                0 4435 5546 i
   184.123.1.0/24   0.0.0.0(TORC11)          0         32768 i
s> 184.123.8.0/22   0.0.0.0(TORC11)          0         32768 i

Signed-off-by: Chirag Shah <chirag@nvidia.com>
2023-05-19 14:45:49 -07:00
Chirag Shah
cd845be6a7 bgpd: fix aggregate route best path select
In ebgp+ ibgp deployment aggregate summary-only route
selected path should always be locally originated
summary route.
When aggregate route summary-only config is removed
The selected path is iBGP peer as its lower cost
Upon reconfiguring aggregate route summary-only,
the locally originated is not selected due to
always choosing first path attribute and bailing
out as no change in route update.

Ticket:#3467890
Issue:3467890
Testing Done:

Config:
------
TORC11(config-router)#router bgp
TORC11(config-router)# address-family ipv4 unicast
TORC11(config-router-af)# aggregate-address 184.123.0.0/16
        summary-only
TORC11(config-router-af)# no aggregate-address 184.123.0.0/16
        summary-only
TORC11(config-router-af)# aggregate-address 184.123.0.0/16
        summary-only

Before fix:
-----------
*> 184.123.0.0/16   ::(TORC11)               0         32768 i
*                   uplink1                                0 4435 5546 i
*                   uplink2                                0 4435 5546 i
* i                 peerlink-3               0    100      0 i

After fix:
----------
*> 184.123.0.0/16   ::(TORC11)               0         32768 i
* i                 peerlink-3               0    100      0 i
*                   uplink2                                0 4435 5546 i
*                   uplink1                                0 4435 5546 i

Signed-off-by: Chirag Shah <chirag@nvidia.com>
2023-05-19 14:45:38 -07:00
Mark Stapp
f6f2059faf
Merge pull request #13562 from idryzhov/fix-doc-libyang-pluginsdir
doc: remove non-existent configure option
2023-05-19 14:58:33 -04:00
Donald Sharp
03b53c1229 tests: pytest does not like return True from a test
From running the test:
bgp_remove_private_as/test_bgp_remove_private_as.py::test_bgp_remove_private_as
  /home/sharpd/.local/lib/python3.10/site-packages/_pytest/python.py:198: PytestReturnNotNoneWarning: Expected None, but bgp_remove_private_as/test_bgp_remove_private_as.py::test_bgp_remove_private_as returned True, which will be an error in a future version of pytest.  Did you mean to use `assert` instead of `return`?
    warnings.warn(

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-05-19 12:52:51 -04:00
Igor Ryzhov
74497c34aa doc: remove non-existent configure option
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2023-05-19 19:35:19 +03:00
Donald Sharp
5ec001aa53 zebra: On shutdown stop hook calls for fpm rmac updates
When shutting down zebra, the hook for the rmac update was
not being unregistered.  As such it would be possible
to get into a condition where more rmacs are being
added to the queue for handling in the future after we
are told to shutdown.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-05-19 10:02:19 -04:00
Donald Sharp
540334324c zebra: Properly handle zfpm_g->t_conn_down in zebra_fpm.c
The t_conn_down pointer was being set to NULL when it already
was.  The t_conn_down pointer was being dropped( and leaving
a thread possibly running in the background ) which could
cause problems on shutdown.  And finally when shutting down
the t_conn_down event was not being stopped at all.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-05-19 10:02:19 -04:00
Donald Sharp
0eaa6523f6 zebra: Do not allow old FPM to access freed memory after shutdown
On shutdown, the old FPM queues up dests to be sent to
the FPM listener.  This is done through the rib_shutdown
hook.  Which is called when the table that the routes are
stored in are being deleted.  This dest has pointers
to the rnode.  The rnode has pointers to the table it
is associated with as well as the table->info pointer for
the zebra data associated with this table.

The FPM after this attempts to tell this to it's listener
via events.  Unfortunately the zvrf, table_id and nl_pid
was being grabbed from memory that had been freed!  Since
all this can be grabbed from memory that has not been freed
on shutdown let's switch over to using that instead of freed
memory for gathering data.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-05-19 10:02:19 -04:00
Donatas Abraitis
32b20e1ad6
Merge pull request #13549 from LabNConsulting/chopps/cclsopt
doc: configure: add configure option to generate .ccls file
2023-05-19 16:25:23 +03:00
Donald Sharp
f8bcb70a39
Merge pull request #13553 from LabNConsulting/chopps/fixwarn+msg
mgmtd: fix uninit warning and cleanup history error messages
2023-05-19 09:04:09 -04:00
Donatas Abraitis
76b246aa1f tests: Ignore utf-8 decoding errors
This is happening sometimes for stuff like `r1 shi cat ...`.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2023-05-19 14:57:56 +03:00
Donatas Abraitis
1b839d486a ripd: Make sure we do not overuse higher values for ECMP count
Use a minimum value of a CLI version and a value of Zebra capabilities.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2023-05-18 21:32:32 +03:00
Christian Hopps
2596308a09 doc: configure: add configure option to generate .ccls file
`ccls` needs information from FRR build configuration to work,
so allow creation of a custom ccls config during autoconf.

Paraphrasing the doc entry: ccls is a very powerful tool that allows
dev environments to provide sophisticated IDE functionality, e.g.,
semantically aware jumps and code refactoring...

Signed-off-by: Christian Hopps <chopps@labn.net>
2023-05-18 09:32:32 -04:00
Christian Hopps
0030b5825e mgmtd: fix uninit warning and cleanup history error messages
Signed-off-by: Christian Hopps <chopps@labn.net>
2023-05-18 08:42:42 -04:00