Commit Graph

34266 Commits

Author SHA1 Message Date
Louis Scalbert
51a97a07d8 bgpd: fix crash when re-adding a rpki server
Fix a crash when re-adding a rpki server:

> r2# sh run bgpd
> [...]
> rpki
>  rpki retry_interval 5
>  rpki cache 192.0.2.1 15432 preference 1
> exit
> [...]
> r2# conf t
> r2(config)# rpki
> r2(config-rpki)# no rpki cache 192.0.2.1 15432 preference 1
> r2(config-rpki)# do show rpki cache-connection
> Cannot find a connected group.
> r2(config-rpki)# rpki cache 192.0.2.1 15432 preference 1
> r2(config-rpki)# do show rpki cache-connection
> vtysh: error reading from bgpd: Resource temporarily unavailable (11)Warning: closing connection to bgpd because of an I/O error!

> #0  raise (sig=<optimized out>) at ../sysdeps/unix/sysv/linux/raise.c:50
> #1  0x00007f3fd2d16e57 in core_handler (signo=11, siginfo=0x7ffffd5931b0, context=0x7ffffd593080) at lib/sigevent.c:246
> #2  <signal handler called>
> #3  0x00007f3fd26926b4 in tommy_list_head (list=0x2e322e302e323931) at /home/lscalber/git/rtrlib/./third-party/tommyds/tommylist.h:125
> #4  0x00007f3fd2693812 in rtr_mgr_get_first_group (config=0x55fbf31d7f00) at /home/lscalber/git/rtrlib/rtrlib/rtr_mgr.c:409
> #5  0x00007f3fd2ebef59 in get_connected_group () at bgpd/bgp_rpki.c:718
> #6  0x00007f3fd2ec0b39 in show_rpki_cache_connection_magic (self=0x7f3fd2ec69c0 <show_rpki_cache_connection_cmd>, vty=0x55fbf31f9ef0, argc=3, argv=0x55fbf31f99d0, uj=0x0)
> #   at bgpd/bgp_rpki.c:1575
> #7  0x00007f3fd2ebd4da in show_rpki_cache_connection (self=0x7f3fd2ec69c0 <show_rpki_cache_connection_cmd>, vty=0x55fbf31f9ef0, argc=3, argv=0x55fbf31f99d0) at ./bgpd/bgp_rpki_clippy.c:648
> #8  0x00007f3fd2c8a142 in cmd_execute_command_real (vline=0x55fbf31f9990, vty=0x55fbf31f9ef0, cmd=0x0, up_level=0) at lib/command.c:978
> #9  0x00007f3fd2c8a25c in cmd_execute_command (vline=0x55fbf31e5260, vty=0x55fbf31f9ef0, cmd=0x0, vtysh=0) at lib/command.c:1028
> #10 0x00007f3fd2c8a7f1 in cmd_execute (vty=0x55fbf31f9ef0, cmd=0x55fbf3200680 "do show rpki cache-connection ", matched=0x0, vtysh=0) at lib/command.c:1203
> #11 0x00007f3fd2d36548 in vty_command (vty=0x55fbf31f9ef0, buf=0x55fbf3200680 "do show rpki cache-connection ") at lib/vty.c:594
> #12 0x00007f3fd2d382e1 in vty_execute (vty=0x55fbf31f9ef0) at lib/vty.c:1357
> #13 0x00007f3fd2d3a519 in vtysh_read (thread=0x7ffffd5963c0) at lib/vty.c:2365
> #14 0x00007f3fd2d2faf6 in event_call (thread=0x7ffffd5963c0) at lib/event.c:1974
> #15 0x00007f3fd2cc238e in frr_run (master=0x55fbf2a0cd60) at lib/libfrr.c:1214
> #16 0x000055fbf073de40 in main (argc=9, argv=0x7ffffd596618) at bgpd/bgp_main.c:510

Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2024-01-11 14:13:46 +01:00
Louis Scalbert
211249a3b7 topotests: bgp_rpki_topo1, failure on error packet
RPKI FRR module should not send any RPKI error packet during the tests.

Exit rtrd when receiving error packet. Skip tests with errors if rtrd
has stopped.

Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2024-01-11 14:13:46 +01:00
Louis Scalbert
1b3b483342 topotests: log bgp_rpki_topo1 pyrtr output
Log bgp_rpki_topo1 pyrtr output

Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2024-01-11 14:13:46 +01:00
Louis Scalbert
751500acdb topotests: add bgp_rpki_topo1
Add bgp_rpki_topo1 topotest to validate the RPKI feature. Use a RTR RPKI
server from the above link with a black cleaning.

Link: https://raw.githubusercontent.com/tmshlvck/pyrtr/90df586375396aae08b07069187308b5b7b8823b/pyrtr/__init__.py
Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2024-01-11 14:13:46 +01:00
Louis Scalbert
f8875f53d6 bgpd: fix rpki compilation without rtrlib ssh
Fix RPKI module compilation when rtrlib is compiled without SSH support,
ie. with cmake option:

> -D RTRLIB_TRANSPORT_SSH=No

> bgpd/bgp_rpki.c: In function ‘config_write’:
> bgpd/bgp_rpki.c:1062:3: error: enumeration value ‘SSH’ not handled in switch [-Werror=switch-enum]
>  1062 |   switch (cache->type) {
>       |   ^~~~~~
> bgpd/bgp_rpki.c: In function ‘show_rpki_cache_connection_magic’:
> bgpd/bgp_rpki.c:1598:3: error: enumeration value ‘SSH’ not handled in switch [-Werror=switch-enum]
>  1598 |   switch (cache->type) {
>       |   ^~~~~~
> cc1: all warnings being treated as errors

Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2024-01-11 14:13:46 +01:00
Louis Scalbert
aecdab5bd4 bgpd: add json error message to rpki
Add error messages to rpki JSON output instead of an empty JSON.

Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2024-01-11 14:13:46 +01:00
Louis Scalbert
4011682a1a bgpd: fix show rpki json void output
"show rpki XX json" should not return a void output because json.loads()
considers it to be an incorrect JSON.

> >>> json.loads("")
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>   File "/usr/lib/python3.9/json/__init__.py", line 346, in loads
>     return _default_decoder.decode(s)
>   File "/usr/lib/python3.9/json/decoder.py", line 337, in decode
>     obj, end = self.raw_decode(s, idx=_w(s, 0).end())
>   File "/usr/lib/python3.9/json/decoder.py", line 355, in raw_decode
>     raise JSONDecodeError("Expecting value", s, err.value) from None
> json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
> >>> json.loads("{}")
> {}

Return "{}" instead in such a case.

Link: https://github.com/FRRouting/frr/pull/15034
Fixes: dff41cc8a9 ("bgpd: Add JSON output for `show rpki prefix` and other show commands")
Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2024-01-11 14:13:46 +01:00
Donatas Abraitis
67e8ef293f
Merge pull request #15098 from donaldsharp/lib_zebra_h_cleanup_2
Lib zebra h cleanup 2
2024-01-11 14:50:21 +02:00
Donald Sharp
5fbf0cc00d
Merge pull request #15124 from fdumontet6WIND/large_fds
lib snmp: use snmp's large fd sets for agentx
2024-01-10 20:24:26 -05:00
Edwin Brossette
9e06f93df1 lib: use snmp's large fd sets for agentx
The maximum number of file descriptors in an fd set is limited by
FD_SETSIZE. This limitation is important because the libc macros
FD_SET(), FD_CLR() and FD_ISSET() will invoke a sigabort if the size of
the fd set given to them is above FD_SETSIZE.

We ran into such a sigabort with bgpd because snmp can return an fd set
of size higher than FD_SETSIZE when calling snmp_select_info(). An
unfortunate FD_ISSET() call later causes the following abort:

Received signal 6 at 1701115534 (si_addr 0xb94, PC 0x7ff289a16a7c); aborting...
/lib/x86_64-linux-gnu/libfrr.so.0(zlog_backtrace_sigsafe+0xb3) [0x7ff289d62bba]
/lib/x86_64-linux-gnu/libfrr.so.0(zlog_signal+0x1b4) [0x7ff289d62a1f]
/lib/x86_64-linux-gnu/libfrr.so.0(+0x102860) [0x7ff289da4860]
/lib/x86_64-linux-gnu/libc.so.6(+0x42520) [0x7ff2899c2520]
/lib/x86_64-linux-gnu/libc.so.6(pthread_kill+0x12c) [0x7ff289a16a7c]
/lib/x86_64-linux-gnu/libc.so.6(raise+0x16) [0x7ff2899c2476]
/lib/x86_64-linux-gnu/libc.so.6(abort+0xd3) [0x7ff2899a87f3]
/lib/x86_64-linux-gnu/libc.so.6(+0x896f6) [0x7ff289a096f6]
/lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x2a) [0x7ff289ab676a]
/lib/x86_64-linux-gnu/libc.so.6(+0x1350c6) [0x7ff289ab50c6]
/lib/x86_64-linux-gnu/libc.so.6(+0x1366ab) [0x7ff289ab66ab]
/lib/x86_64-linux-gnu/libfrrsnmp.so.0(+0x36f5) [0x7ff2897736f5]
/lib/x86_64-linux-gnu/libfrrsnmp.so.0(+0x3c27) [0x7ff289773c27]
/lib/x86_64-linux-gnu/libfrr.so.0(thread_call+0x1c2) [0x7ff289dbe105]
/lib/x86_64-linux-gnu/libfrr.so.0(frr_run+0x257) [0x7ff289d56e69]
/usr/bin/bgpd(main+0x4f4) [0x560965c40488]
/lib/x86_64-linux-gnu/libc.so.6(+0x29d90) [0x7ff2899a9d90]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x80) [0x7ff2899a9e40]
/usr/bin/bgpd(_start+0x25) [0x560965c3e965]
in thread agentx_timeout scheduled from /build/make-pkg/output/_packages/cp-routing/src/lib/agentx.c:122 agentx_events_update()

Also, the following error is logged by snmp just before the abort:
snmp[err]: Use snmp_sess_select_info2() for processing large file descriptors

snmp uses a custom struct netsnmp_large_fd_set to work above the limit
imposed by FD_SETSIZE. It is noteworthy that, when calling
snmp_select_info() instead of snmp_select_info2(), snmp uses the same
code working with its custom, large structs, and copy/paste the result
to a regular, libc compatible fd_set. So there should be no downside
working with snmp_select_info2() instead of snmp_select_info().

Replace every use of the libc file descriptors sets by snmp's extended
file descriptors sets in agentx to acommodate for the high number of
file descriptors that can come out of snmp. This should prevent the
abort seen above.

Signed-off-by: Edwin Brossette <edwin.brossette@6wind.com>
2024-01-10 17:01:59 +01:00
Donatas Abraitis
26be39c2f1
Merge pull request #15100 from donaldsharp/SA_problems_local
Sa problems local
2024-01-10 12:17:19 +02:00
Donatas Abraitis
4c875482a5
Merge pull request #15123 from LabNConsulting/chopps/fix-oper-state-memleak
lib: fix oper-state memleak
2024-01-10 12:16:37 +02:00
Christian Hopps
5519c0fbe6
lib: fix oper-state memleak
Fix memleak when a key-ed query was done for which the key didn't exist.

Signed-off-by: Christian Hopps <chopps@labn.net>
2024-01-09 21:52:41 +00:00
Donald Sharp
54ed53f36f zebra: SA incorrectly believes a NULL pointer
SA has decided that old_re could be a NULL pointer
even though the zebra_redistribute_check function
checks for NULL and returns false that would
not allow a NULL pointer deref.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-01-09 13:03:43 -05:00
Donald Sharp
3f03ec1021 bgpd: data is set but never used
I've kept the assignment in a comment because I am concerned
about new code being added later that the data pointer would
not be set correctly.  Next coder can see the commented
out line and uncomment it.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-01-09 13:03:43 -05:00
Donald Sharp
84877e60db ospf6d: Value set is never used
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-01-09 13:03:43 -05:00
Donald Sharp
be80dbc826 pimd: Cleanup SA issue with value never used
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-01-09 13:03:43 -05:00
Donald Sharp
e92a7e9c14 bgpd: Clean up issues found in SA with clang 14
3 different issues:

a) length never used
b) safi never used
c) length never used.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-01-09 13:03:43 -05:00
Donald Sharp
c402a0bdc1 lib: limits.h is not needed by zebra.h
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-01-09 12:50:40 -05:00
Donald Sharp
f982bddebd zebra: Nothing is using errno.h
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-01-09 12:50:40 -05:00
Donald Sharp
7c1a8f7a9e lib: string.h was only used by vector.c make it better
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-01-09 12:50:40 -05:00
Donald Sharp
68eca30c58 lib: stdbool.h is not being used by zebra.h
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-01-09 12:50:40 -05:00
Donald Sharp
8049f74fc6 lib: zebra.h is not using signal.h
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-01-09 12:50:40 -05:00
Donald Sharp
b6f1a4089f lib: zebra.h uses pwd.h when it should not
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-01-09 12:50:40 -05:00
Donald Sharp
c6d94a7056 *: zebra.h should not have fcntl.h
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-01-09 12:50:40 -05:00
Donald Sharp
33744ae4fc lib: zebra.h was including compiler.h two times
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-01-09 12:50:40 -05:00
Donald Sharp
7f3d9ea47d lib: remove net/route.h it is not used
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-01-09 12:50:40 -05:00
Donald Sharp
848dcf3d03 *: remove sys/stat.h from zebra.h
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-01-09 12:39:23 -05:00
Donald Sharp
7497d33f2f lib: select.h is not being used by anyone
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-01-09 12:39:23 -05:00
Donald Sharp
22b439090c
Merge pull request #15103 from LabNConsulting/chopps/oper-filter
Implement full XPath 1.0 functionality
2024-01-09 12:31:36 -05:00
Donald Sharp
153ab6eb43
Merge pull request #15122 from opensourcerouting/fix/drop_packet_send_debugs
bgpd: Change printing format show debugging for debug bgp updates
2024-01-09 12:21:09 -05:00
Russ White
6c8706802a
Merge pull request #15108 from opensourcerouting/fix/debug_bgp_updates_detail
bgpd: Add `debug bgp updates detail` command
2024-01-09 10:18:50 -05:00
Russ White
d5a0a70bbf
Merge pull request #15001 from pguibert6WIND/zebra_nexthop_rework
Zebra nexthop rework
2024-01-09 10:11:35 -05:00
Donald Sharp
92d0242a51
Merge pull request #15120 from opensourcerouting/fix/memory_leak_for_default_originate
bgpd: Fix memory leak for default-originate with route-map
2024-01-09 10:03:29 -05:00
Donatas Abraitis
546fe3144c bgpd: Change printing format show debugging for debug bgp updates
Before:

```
BGP debugging status:
  BGP updates debugging is on (inbound) for 127.0.0.1 with prefix-list rn-dummy 192.168.10.18 with prefix-list rn-dummy 1.1.1.1
```

After:

```
BGP debugging status:
  BGP updates debugging is on (inbound) for:
   127.0.0.1 with prefix-list rn-dummy
   192.168.10.18 with prefix-list rn-dummy
   192.168.10.20
```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-01-09 10:08:54 +02:00
Donatas Abraitis
8f3d99b495 bgpd: Drop BGP_DEBUG_PACKET_SEND_DETAIL/BGP_DEBUG_PACKET_SEND consts
Not used anywhere.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-01-09 09:58:00 +02:00
Donald Sharp
956b6153fe
Merge pull request #15106 from opensourcerouting/fix/rename_thread_cli
vtysh: Add `show event ...` commands
2024-01-08 13:51:36 -05:00
Donatas Abraitis
74c1d4f8c0 bgpd: Fix memory leak for default-originate with route-map
```
Direct leak of 40 byte(s) in 1 object(s) allocated from:
    0 0x7fc4b81eed28 in __interceptor_calloc (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xded28)
    1 0x7fc4b7bd60bb in qcalloc lib/memory.c:105
    2 0x56221dc19207 in aspath_dup bgpd/bgp_aspath.c:689
    3 0x56221daacd42 in route_set_aspath_prepend bgpd/bgp_routemap.c:2283
    4 0x7fc4b7c3891a in route_map_apply_ext lib/routemap.c:2687
    5 0x56221dace552 in subgroup_default_originate bgpd/bgp_updgrp_adv.c:906
    6 0x56221dabf79c in update_group_default_originate_route_map_walkcb bgpd/bgp_updgrp.c:2105
    7 0x56221dabde4e in update_group_walkcb bgpd/bgp_updgrp.c:1721
    8 0x7fc4b7b9d398 in hash_walk lib/hash.c:270
    9 0x56221dac94cb in update_group_af_walk bgpd/bgp_updgrp.c:2062
    10 0x56221dac9b0f in update_group_walk bgpd/bgp_updgrp.c:2071
    11 0x56221dac9fd5 in update_group_refresh_default_originate_route_map bgpd/bgp_updgrp.c:2118
    12 0x7fc4b7c7fc54 in event_call lib/event.c:1974
    13 0x7fc4b7bb9276 in frr_run lib/libfrr.c:1214
    14 0x56221d9217fd in main bgpd/bgp_main.c:510
    15 0x7fc4b6bf2c86 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21c86)
```

tmp_pi.attr should be flushed since it's already interned (new_attr) or the
origin value is used (attr).

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-01-08 20:48:56 +02:00
Donatas Abraitis
87a92274f6
Merge pull request #15119 from donaldsharp/pytest_mgmtd
tests: Add mgmtd to the official pytest.mark list
2024-01-08 20:48:30 +02:00
Donatas Abraitis
482f082a41
Merge pull request #15111 from donaldsharp/json_vpn_wait_what
bgpd: show_adj_route_vpn always leaked json memory
2024-01-08 15:57:25 +02:00
Donald Sharp
b1a39549df tests: Add mgmtd to the official pytest.mark list
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-01-08 07:58:14 -05:00
Christian Hopps
2022141afe
Merge pull request #15110 from donaldsharp/revert_zrouter.stale_client
Revert "zebra: Cleanup zrouter.stale_client_list on shutdown"
2024-01-08 07:35:20 -05:00
Donald Sharp
bed55ecc8e bgpd: show_adj_route_vpn always leaked json memory
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-01-07 15:55:15 -05:00
Donald Sharp
ea9d2b82c7
Merge pull request #15101 from LabNConsulting/chopps/new-libyang-req
build: require libyang 2.1.128
2024-01-07 15:03:13 -05:00
Donald Sharp
6d72776d62 Revert "zebra: Cleanup zrouter.stale_client_list on shutdown"
This reverts commit 71f7ecb571.
2024-01-07 13:14:54 -05:00
Donald Sharp
733511782f
Merge pull request #15102 from opensourcerouting/Revert-memleak-PR14811
Revert "bgpd: On shutdown do not create a workqueue for the self peer"
2024-01-07 12:30:22 -05:00
Christian Hopps
e85ff7a1f2 tests: test new XPath 1.0 predicate functionality
Signed-off-by: Christian Hopps <chopps@labn.net>
2024-01-07 15:17:56 +00:00
Christian Hopps
1e4229fc1f lib: use libyang functions if they are present
Add configure.ac tests for libyang functions, if not present supply the
functionality ourselves in yang.[ch]

Signed-off-by: Christian Hopps <chopps@labn.net>
2024-01-07 15:17:56 +00:00
Christian Hopps
cf67a7e265 lib: mgmtd: implement full XPath 1.0 predicate functionality
Allow user to specify full YANG compatible XPath 1.0 predicates. This
allows for trimming results of generic queries using functions and other
non-key predicates from XPath 1.0

Signed-off-by: Christian Hopps <chopps@labn.net>
2024-01-07 15:17:30 +00:00
Christian Hopps
00138ffb47 lib: fix clang SA warnings
Signed-off-by: Christian Hopps <chopps@labn.net>
2024-01-07 15:04:18 +00:00