]> git.puffer.fish Git - mirror/frr.git/log
mirror/frr.git
8 months ago*: Fix spelling errors found 16590/head
Donald Sharp [Wed, 14 Aug 2024 20:53:09 +0000 (16:53 -0400)]
*: Fix spelling errors found

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
8 months agoMerge pull request #16585 from pguibert6WIND/prd_pretty_mt_fix
Donatas Abraitis [Thu, 15 Aug 2024 06:59:47 +0000 (08:59 +0200)]
Merge pull request #16585 from pguibert6WIND/prd_pretty_mt_fix

bgpd: fix memory type for static->prd_pretty

8 months agoMerge pull request #16578 from donaldsharp/more_memory_leaks_on_shutdown
Donatas Abraitis [Wed, 14 Aug 2024 20:09:39 +0000 (22:09 +0200)]
Merge pull request #16578 from donaldsharp/more_memory_leaks_on_shutdown

More memory leaks on shutdown

8 months agoMerge pull request #16583 from mjstapp/fix_all_proto_nhg
Donald Sharp [Wed, 14 Aug 2024 18:54:27 +0000 (14:54 -0400)]
Merge pull request #16583 from mjstapp/fix_all_proto_nhg

tests: add retries to nhg tests in all_proto_startup

8 months agoMerge pull request #16574 from donaldsharp/non_json_free_ptr
Donatas Abraitis [Wed, 14 Aug 2024 16:44:54 +0000 (18:44 +0200)]
Merge pull request #16574 from donaldsharp/non_json_free_ptr

bgpd: Free up non-freed json memory on function return

8 months agobgpd: fix memory type for static->prd_pretty 16585/head
Philippe Guibert [Wed, 14 Aug 2024 13:36:36 +0000 (15:36 +0200)]
bgpd: fix memory type for static->prd_pretty

A crash happens when executing the following command:

> ubuntu2204hwe# conf
> ubuntu2204hwe(config)# router bgp 65500
> ubuntu2204hwe(config-router)#  !
> ubuntu2204hwe(config-router)#  address-family ipv4 unicast
> ubuntu2204hwe(config-router-af)#   sid vpn export auto
> ubuntu2204hwe(config-router-af)#  exit-address-family
> ubuntu2204hwe(config-router)#  !
> ubuntu2204hwe(config-router)#  address-family ipv4 vpn
> ubuntu2204hwe(config-router-af)#   network 4.4.4.4/32 rd 55:55 label 556
> ubuntu2204hwe(config-router-af)#   network 5.5.5.5/32 rd 662:33 label 232
> ubuntu2204hwe(config-router-af)#  exit-address-family
> ubuntu2204hwe(config-router)# exit
> ubuntu2204hwe(config)# !
> ubuntu2204hwe(config)# no router bgp

The crash analysis indicates a memory item has been freed.

> #6  0x000076066a629c15 in mt_count_free (mt=0x56b57be85e00 <MTYPE_BGP_NAME>, ptr=0x60200038b4f0)
>     at lib/memory.c:73
> #7  mt_count_free (ptr=0x60200038b4f0, mt=0x56b57be85e00 <MTYPE_BGP_NAME>) at lib/memory.c:69
> #8  qfree (mt=mt@entry=0x56b57be85e00 <MTYPE_BGP_NAME>, ptr=0x60200038b4f0) at lib/memory.c:129
> #9  0x000056b57bb09ce9 in bgp_free (bgp=<optimized out>) at bgpd/bgpd.c:4120
> #10 0x000056b57bb0aa73 in bgp_unlock (bgp=<optimized out>) at ./bgpd/bgpd.h:2513
> #11 peer_free (peer=0x62a000000200) at bgpd/bgpd.c:1313
> #12 0x000056b57bb0aca8 in peer_unlock_with_caller (name=<optimized out>, peer=<optimized out>)
>     at bgpd/bgpd.c:1344
> #13 0x000076066a6dbb2c in event_call (thread=thread@entry=0x7ffc8cae1d60) at lib/event.c:2011
> #14 0x000076066a60aa88 in frr_run (master=0x613000000040) at lib/libfrr.c:1214
> #15 0x000056b57b8b2c44 in main (argc=<optimized out>, argv=<optimized out>) at bgpd/bgp_main.c:543

Actually, the BGP_NAME item has not been used at allocation for
static->prd_pretty, and this results in reaching 0 quicker at bgp
deletion.

Fix this by reassigning MTYPE_BGP_NAME to prd_pretty.

Fixes: 16600df2c4f4 ("bgpd: fix show run of network route-distinguisher")
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
8 months agoMerge pull request #16579 from opensourcerouting/fix/bgpd_use_after_free_no_router_bgp
Donald Sharp [Wed, 14 Aug 2024 12:39:25 +0000 (08:39 -0400)]
Merge pull request #16579 from opensourcerouting/fix/bgpd_use_after_free_no_router_bgp

bgpd: Avoid use-after-free when doing `no router bgp` with auto created instances

8 months agotests: add retries to nhg tests in all_proto_startup 16583/head
Mark Stapp [Wed, 14 Aug 2024 12:37:00 +0000 (08:37 -0400)]
tests: add retries to nhg tests in all_proto_startup

The all_protocol_startup topotest needs to allow for some delay
between configuring nexthop-groups and their installation. Add
some wait periods in a couple of nhg test cases.

Signed-off-by: Mark Stapp <mjs@cisco.com>
8 months agobgpd: Avoid use-after-free when doing `no router bgp` with auto created instances 16579/head
Donatas Abraitis [Wed, 14 Aug 2024 07:16:01 +0000 (10:16 +0300)]
bgpd: Avoid use-after-free when doing `no router bgp` with auto created instances

```
==1145965==ERROR: AddressSanitizer: heap-use-after-free on address 0x6030007159c0 at pc 0x55ade8d962d1 bp 0x7ffec4ce74c0 sp 0x7ffec4ce74b0
READ of size 8 at 0x6030007159c0 thread T0
    0 0x55ade8d962d0 in no_router_bgp bgpd/bgp_vty.c:1701
    1 0x7efe5aed19ed in cmd_execute_command_real lib/command.c:1002
    2 0x7efe5aed1da3 in cmd_execute_command lib/command.c:1061
    3 0x7efe5aed2303 in cmd_execute lib/command.c:1227
    4 0x7efe5af6c023 in vty_command lib/vty.c:616
    5 0x7efe5af6d2d2 in vty_execute lib/vty.c:1379
    6 0x7efe5af77df2 in vtysh_read lib/vty.c:2374
    7 0x7efe5af64c9b in event_call lib/event.c:1996
    8 0x7efe5af03887 in frr_run lib/libfrr.c:1232
    9 0x55ade8cd9850 in main bgpd/bgp_main.c:555
    10 0x7efe5aa29d8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
    11 0x7efe5aa29e3f in __libc_start_main_impl ../csu/libc-start.c:392
    12 0x55ade8cdc314 in _start (/usr/lib/frr/bgpd+0x16f314)
```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
8 months agoMerge pull request #16575 from donaldsharp/doc_address_sanitizer_stuff
Mark Stapp [Tue, 13 Aug 2024 18:18:40 +0000 (14:18 -0400)]
Merge pull request #16575 from donaldsharp/doc_address_sanitizer_stuff

doc: Add doc to show sysctl setting for Sanitizers

8 months agoMerge pull request #16576 from opensourcerouting/fix/free_opaque_data_of_route_entry
Donald Sharp [Tue, 13 Aug 2024 18:14:36 +0000 (14:14 -0400)]
Merge pull request #16576 from opensourcerouting/fix/free_opaque_data_of_route_entry

zebra: Do not forget to free opaque data for route entry

8 months agobabeld: Free up memory on shutdown 16578/head
Donald Sharp [Tue, 13 Aug 2024 18:12:05 +0000 (14:12 -0400)]
babeld: Free up memory on shutdown

a) call vector_delete on created vector on shutdown.
b) Call babel_clean_routing_process on shutdown

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
8 months agopbrd: Call vrf_terminate on shutdown
Donald Sharp [Tue, 13 Aug 2024 18:11:07 +0000 (14:11 -0400)]
pbrd: Call vrf_terminate on shutdown

Free up vrf memory on shutdown.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
8 months agozebra: Do not forget to free opaque data for route entry 16576/head
Donatas Abraitis [Tue, 13 Aug 2024 15:00:30 +0000 (18:00 +0300)]
zebra: Do not forget to free opaque data for route entry

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
8 months agoMerge pull request #16559 from donaldsharp/fix_python_warning
Donatas Abraitis [Tue, 13 Aug 2024 14:20:27 +0000 (16:20 +0200)]
Merge pull request #16559 from donaldsharp/fix_python_warning

tests: Fix bgp_duplicate_nexthop python warning

8 months agodoc: Add doc to show sysctl setting for Sanitizers 16575/head
Donald Sharp [Tue, 13 Aug 2024 12:58:29 +0000 (08:58 -0400)]
doc: Add doc to show sysctl setting for Sanitizers

In order to run the XXXX Sanitizers over the code as a developer
modern linux distro's require a specific sysctl.  Let's document
that so that people are aware of it.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
8 months agobgpd: Free up non-freed json memory on function return 16574/head
Donald Sharp [Tue, 13 Aug 2024 12:49:01 +0000 (08:49 -0400)]
bgpd: Free up non-freed json memory on function return

json_peers is allocated in the above if statement block
for json but is not freed in this code path.  Noticed
by running Address Sanitizer.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
8 months agoMerge pull request #16558 from nabahr/pim_doc
Donald Sharp [Tue, 13 Aug 2024 12:47:27 +0000 (08:47 -0400)]
Merge pull request #16558 from nabahr/pim_doc

doc: Fix up pim user docs.

8 months agoMerge pull request #16557 from donaldsharp/pathd_shutdown_memory_leaks
Donatas Abraitis [Mon, 12 Aug 2024 20:45:32 +0000 (23:45 +0300)]
Merge pull request #16557 from donaldsharp/pathd_shutdown_memory_leaks

pathd: Cleanup shutdown memory leaks

8 months agoMerge pull request #16555 from donaldsharp/agentx_event_leak
Donatas Abraitis [Mon, 12 Aug 2024 20:45:14 +0000 (23:45 +0300)]
Merge pull request #16555 from donaldsharp/agentx_event_leak

lib: Fix memory leak in snmp on shutdown

8 months agodoc: Fix up pim user docs. 16558/head
Nathan Bahr [Mon, 12 Aug 2024 16:00:06 +0000 (16:00 +0000)]
doc: Fix up pim user docs.

Signed-off-by: Nathan Bahr <nbahr@atcorp.com>
8 months agotests: Fix bgp_duplicate_nexthop python warning 16559/head
Donald Sharp [Mon, 12 Aug 2024 17:55:26 +0000 (13:55 -0400)]
tests: Fix bgp_duplicate_nexthop python warning

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
8 months agoMerge pull request #16534 from opensourcerouting/fix/start_ldpd_if_unified
Donald Sharp [Mon, 12 Aug 2024 14:25:54 +0000 (10:25 -0400)]
Merge pull request #16534 from opensourcerouting/fix/start_ldpd_if_unified

doc: Document on how to start specific daemons with unified config in topotests

8 months agopathd: Cleanup shutdown memory leaks 16557/head
Donald Sharp [Mon, 12 Aug 2024 14:14:31 +0000 (10:14 -0400)]
pathd: Cleanup shutdown memory leaks

Just some code to cleanup the shutdown memory leaks
that are in pathd.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
8 months agolib: Fix memory leak in snmp on shutdown 16555/head
Donald Sharp [Fri, 9 Aug 2024 18:50:59 +0000 (14:50 -0400)]
lib: Fix memory leak in snmp on shutdown

The events list is storing a `struct event *` allocated
as a MTYPE_TMP pointer, on shutdown ensure that it is
properly free'd up.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
8 months agoMerge pull request #16439 from louis-6wind/fix-ipv4-mapped-ipv6
Donatas Abraitis [Mon, 12 Aug 2024 12:37:36 +0000 (15:37 +0300)]
Merge pull request #16439 from louis-6wind/fix-ipv4-mapped-ipv6

bgpd: fixes for ipv4 mapped ipv6 address

8 months agoMerge pull request #16545 from mjstapp/fix_isis_threeway
Donatas Abraitis [Mon, 12 Aug 2024 06:39:45 +0000 (09:39 +0300)]
Merge pull request #16545 from mjstapp/fix_isis_threeway

isisd: fix memory handling in isis_adj_process_threeway()

8 months agoMerge pull request #16556 from donaldsharp/mgmt_ignore
Donatas Abraitis [Mon, 12 Aug 2024 06:39:22 +0000 (09:39 +0300)]
Merge pull request #16556 from donaldsharp/mgmt_ignore

mgmtd: Add to .gitignore for mgmtd_testc program

8 months agoMerge pull request #16420 from pguibert6WIND/trap_rfc4382
Donatas Abraitis [Mon, 12 Aug 2024 06:38:58 +0000 (09:38 +0300)]
Merge pull request #16420 from pguibert6WIND/trap_rfc4382

bgpd: add bgp snmp traps rfc4382 command

8 months agoMerge pull request #16554 from donaldsharp/zebra_ensure_no_use_after_free
Donatas Abraitis [Mon, 12 Aug 2024 04:59:42 +0000 (07:59 +0300)]
Merge pull request #16554 from donaldsharp/zebra_ensure_no_use_after_free

zebra: Ensure non-equal id's are not same nhg's

8 months agobgpd, doc: add bgp snmp traps rfc4382 command 16420/head
Philippe Guibert [Thu, 18 Jul 2024 12:43:45 +0000 (14:43 +0200)]
bgpd, doc: add bgp snmp traps rfc4382 command

Add a trap command to disable or enable the traps defined by
the RFC4382.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
8 months agodoc: Document on how to run specific daemons with unified config in topotests 16534/head
Donatas Abraitis [Sun, 11 Aug 2024 10:47:08 +0000 (13:47 +0300)]
doc: Document on how to run specific daemons with unified config in topotests

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
8 months agotests: Convert self.unified_config to boolean
Donatas Abraitis [Sun, 11 Aug 2024 09:51:53 +0000 (12:51 +0300)]
tests: Convert self.unified_config to boolean

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
8 months agoMerge pull request #16542 from donaldsharp/vtysh_stupidly_large
Donatas Abraitis [Sun, 11 Aug 2024 08:43:46 +0000 (11:43 +0300)]
Merge pull request #16542 from donaldsharp/vtysh_stupidly_large

lib: Don't print warning if not a daemon

8 months agomgmtd: Add to .gitignore for mgmtd_testc program 16556/head
Donald Sharp [Sun, 11 Aug 2024 00:21:27 +0000 (20:21 -0400)]
mgmtd: Add to .gitignore for mgmtd_testc program

This program, mgmtd_testc, is built with the
--enable-mgmtd-test-be-client configure option
but it is not .gitignore'd.  Let's fix that

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
8 months agoMerge pull request #16548 from opensourcerouting/fix/reduce_attr_a_bit
Donald Sharp [Sat, 10 Aug 2024 23:51:10 +0000 (19:51 -0400)]
Merge pull request #16548 from opensourcerouting/fix/reduce_attr_a_bit

Shrink a couple bytes of struct attr

8 months agoMerge pull request #16551 from idryzhov/distrib-del
Donald Sharp [Sat, 10 Aug 2024 23:50:26 +0000 (19:50 -0400)]
Merge pull request #16551 from idryzhov/distrib-del

lib: fix distribute-list deletion

8 months agozebra: Ensure non-equal id's are not same nhg's 16554/head
Donald Sharp [Sat, 10 Aug 2024 23:43:08 +0000 (19:43 -0400)]
zebra: Ensure non-equal id's are not same nhg's

The function zebra_nhg_hash_equal is only used
as a hash function for storage of NHG's and retrieval.
If you have say two nhg's:

31 (25/26)
32 (25/26)

This function would return them as being equal.  Which
of course leads to the problem when you attempt to
hash_release 32 but release 31 from the hash.  Then later
when you attempt to do hash comparisons 32 has actually
been freed leaving to use after free situations and shit
goes down hill fast.

This hash is only used as part of the hash comparison
function for nexthop group storage.  Since this is so
let's always return the 31/32 nhg's are not equal at all.

We possibly have a different problem where we are creating
31 and 32 ( when 31 should have just been used instead of 32 )
but we need to prevent any type of hash release problem at all.
This supercedes any other issue( that should be tracked down
on it's own ).  Since you can have use after free situation
that leads to a crash -vs- some possible nexthop group duplication
which is very minor in comparison.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
8 months agoMerge pull request #16529 from idryzhov/fix-load-config
Christian Hopps [Sat, 10 Aug 2024 08:10:34 +0000 (04:10 -0400)]
Merge pull request #16529 from idryzhov/fix-load-config

mgmtd: don't add implicit state data when reading config from file

8 months agoMerge pull request #16511 from oplklum/master
Christian Hopps [Sat, 10 Aug 2024 07:46:11 +0000 (03:46 -0400)]
Merge pull request #16511 from oplklum/master

Fix LYD_NEW_PATH_OUTPUT issue to support libyang v3.x

8 months agolib: Fix LYD_NEW_PATH_OUTPUT issue to support libyang v3.x 16511/head
Lu.Mao [Thu, 1 Aug 2024 01:54:14 +0000 (09:54 +0800)]
lib: Fix LYD_NEW_PATH_OUTPUT issue to support libyang v3.x

Fix the LYD_NEW_PATH_OUTPUT undeclared error to support the latest libyang v3.x version,
and also compatible with old version.

Signed-off-by: Lu Mao <lu.mao@molex.com>
8 months agolib: fix distribute-list deletion 16551/head
Igor Ryzhov [Fri, 9 Aug 2024 22:32:55 +0000 (01:32 +0300)]
lib: fix distribute-list deletion

When a whole distribute-list is deleted (can be done only using API),
all its children must be cleaned up manually.

Fixes #16538

Signed-off-by: Igor Ryzhov <idryzhov@gmail.com>
8 months agobgpd: Shrink rmap_change_flags to 2-bytes 16548/head
Donatas Abraitis [Fri, 9 Aug 2024 13:33:52 +0000 (16:33 +0300)]
bgpd: Shrink rmap_change_flags to 2-bytes

4 bytes is not needed for this thing clearly.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
8 months agobgpd: Reduce encap_tunneltype to 1 byte
Donatas Abraitis [Fri, 9 Aug 2024 13:32:02 +0000 (16:32 +0300)]
bgpd: Reduce encap_tunneltype to 1 byte

It's not used as a bitmask, no point to use it as 2 bytes.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
8 months agoisisd: fix memory handling in isis_adj_process_threeway() 16545/head
Mark Stapp [Fri, 9 Aug 2024 14:08:21 +0000 (10:08 -0400)]
isisd: fix memory handling in isis_adj_process_threeway()

The adj_process_threeway() api may call the adj_state_change()
api, which may delete the adj struct being examined. Change the
signature so that callers pass a ptr-to-ptr so that they will
see that deletion.

Signed-off-by: Mark Stapp <mjs@cisco.com>
8 months agoMerge pull request #16539 from donaldsharp/tests_memory_shut
Donatas Abraitis [Fri, 9 Aug 2024 10:30:30 +0000 (13:30 +0300)]
Merge pull request #16539 from donaldsharp/tests_memory_shut

Tests memory shut

8 months agoMerge pull request #16535 from pguibert6WIND/srv6_nexthop_context
Donatas Abraitis [Thu, 8 Aug 2024 19:39:34 +0000 (22:39 +0300)]
Merge pull request #16535 from pguibert6WIND/srv6_nexthop_context

lib: add seg6localContext json attribute in nexthop information

8 months agolib: Don't print warning if not a daemon 16542/head
Donald Sharp [Thu, 8 Aug 2024 18:58:04 +0000 (14:58 -0400)]
lib: Don't print warning if not a daemon

vtysh will print out the `stupidly large FD limit` upon
every run of the program if the ulimit is set stupidly
large.  Prevent this from being displayed for vtysh.

Fixes: #16516
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
8 months agoMerge pull request #16531 from idryzhov/fix-rip-show-distrib
Donald Sharp [Thu, 8 Aug 2024 18:28:32 +0000 (14:28 -0400)]
Merge pull request #16531 from idryzhov/fix-rip-show-distrib

ripd: fix show run output for distribute-list

8 months agoisisd, lib: Cleanup linked list associated with snmp 16539/head
Donald Sharp [Thu, 8 Aug 2024 18:04:42 +0000 (14:04 -0400)]
isisd, lib: Cleanup linked list associated with snmp

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
8 months agolib: Cleanup memory associated with modules on shutdown
Donald Sharp [Thu, 8 Aug 2024 17:54:12 +0000 (13:54 -0400)]
lib: Cleanup memory associated with modules on shutdown

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
8 months agoisisd: Free up isis master list of instances
Donald Sharp [Thu, 8 Aug 2024 17:52:37 +0000 (13:52 -0400)]
isisd: Free up isis master list of instances

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
8 months agoisisd: Cleanup leaked hash on shut in circuit
Donald Sharp [Thu, 8 Aug 2024 17:17:42 +0000 (13:17 -0400)]
isisd: Cleanup leaked hash on shut in circuit

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
8 months agoisisd: Free up memory associated with rm/vrf's
Donald Sharp [Thu, 8 Aug 2024 17:09:34 +0000 (13:09 -0400)]
isisd: Free up memory associated with rm/vrf's

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
8 months agosharpd: Eliminate leaked list for locator-chunks
Donald Sharp [Thu, 8 Aug 2024 16:01:14 +0000 (12:01 -0400)]
sharpd: Eliminate leaked list for locator-chunks

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
8 months agoMerge pull request #16526 from opensourcerouting/fix/invalid_escape_chars_frr-reload.py
Jafar Al-Gharaibeh [Thu, 8 Aug 2024 16:31:48 +0000 (12:31 -0400)]
Merge pull request #16526 from opensourcerouting/fix/invalid_escape_chars_frr-reload.py

tools: Fix python string escape warnings for frr-reload.py

8 months agoMerge pull request #16530 from idryzhov/fix-no-distrib-crash
Donald Sharp [Thu, 8 Aug 2024 12:22:18 +0000 (08:22 -0400)]
Merge pull request #16530 from idryzhov/fix-no-distrib-crash

lib: fix crash on distribute-list delete

8 months agolib: add seg6localContext json attribute in nexthop information 16535/head
Philippe Guibert [Thu, 8 Aug 2024 08:05:45 +0000 (10:05 +0200)]
lib: add seg6localContext json attribute in nexthop information

Some srv6 behaviors have a context attached that is visible if
no json is requested:

> # show ipv6 route
> [..]
> B>* 2001:db8:1:1:100::/128 [20/0] is directly connected, vrf10, seg6local End.DT6 table 10, weight 1, 00:00:14
> B>* 2001:db8:1:1:200::/128 [20/0] is directly connected, vrf20, seg6local End.DT6 table 20, weight 1, 00:00:14
>

The json does not dump this attribute:
> # show ipv6 route 2001:db8:1:1:100::/128 json
> [..]
>      "nexthops":[
>        {
>          "flags":3,
>          "fib":true,
>          "directlyConnected":true,
>          "interfaceIndex":6,
>          "interfaceName":"vrf10",
>          "active":true,
>          "weight":1,
>          "seg6local":{
>            "action":"End.DT6"
>          },
>        }
>

Add the json support for this.

>      "nexthops":[
>        {
>          "flags":3,
>          "fib":true,
>          "directlyConnected":true,
>          "interfaceIndex":6,
>          "interfaceName":"vrf10",
>          "active":true,
>          "weight":1,
>          "seg6local":{
>            "action":"End.DT6"
>          },
>          "seg6localContext":{
>            "table":10
>          }
>        }
>

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
8 months agotools: Fix python string escape warnings for frr-reload.py 16526/head
Donatas Abraitis [Wed, 7 Aug 2024 14:46:57 +0000 (17:46 +0300)]
tools: Fix python string escape warnings for frr-reload.py

When using a regex (or anything that uses `\?` escapes) in python, raw
strings (`r"content"`) should be used so python doesn't consume the
escapes itself.  Otherwise we get either broken behavior and/or
`SyntaxWarning: invalid escape sequence '\['`

Fixes: 8916953b534f64a7545860ad5b4b36dc2544f33a ("build: fix a few python string escape warnings")
Fixes: https://github.com/FRRouting/frr/issues/16522
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
8 months agoripd: fix show run output for distribute-list 16531/head
Igor Ryzhov [Wed, 7 Aug 2024 22:25:02 +0000 (01:25 +0300)]
ripd: fix show run output for distribute-list

CLI show callbacks should be defined in frr_ripd_cli_info instead of
frr_ripd_info, because only the former is loaded by mgmtd and only its
callbacks are getting called for config output.

Signed-off-by: Igor Ryzhov <idryzhov@gmail.com>
8 months agolib: fix crash on distribute-list delete 16530/head
Igor Ryzhov [Wed, 7 Aug 2024 22:17:11 +0000 (01:17 +0300)]
lib: fix crash on distribute-list delete

The destroy callback must be executed only once on APPLY stage.

Fixes #16528

Signed-off-by: Igor Ryzhov <idryzhov@gmail.com>
8 months agoMerge pull request #16525 from opensourcerouting/fix/remove_BGP_UPDATE_DELAY_MINMAX
Donald Sharp [Wed, 7 Aug 2024 22:10:56 +0000 (18:10 -0400)]
Merge pull request #16525 from opensourcerouting/fix/remove_BGP_UPDATE_DELAY_MINMAX

bgpd: Remove BGP_UPDATE_DELAY_MIN/MAX

8 months agomgmtd: don't add implicit state data when reading config from file 16529/head
Igor Ryzhov [Wed, 7 Aug 2024 21:40:51 +0000 (00:40 +0300)]
mgmtd: don't add implicit state data when reading config from file

When mgmt reads configuration from file, it shouldn't add implicit state
data to the candidate datastore. Configuration datastores like candidate
should never store state, otherwise they fail validation.

Fixes #15814

Signed-off-by: Igor Ryzhov <idryzhov@gmail.com>
8 months agoMerge pull request #16523 from LabNConsulting/chopps/fix-mgmt-rpc-test
Donald Sharp [Wed, 7 Aug 2024 17:27:39 +0000 (13:27 -0400)]
Merge pull request #16523 from LabNConsulting/chopps/fix-mgmt-rpc-test

tests: wait for test client to connect before running test

8 months agobgpd: Remove BGP_UPDATE_DELAY_MIN/MAX 16525/head
Donatas Abraitis [Wed, 7 Aug 2024 14:39:28 +0000 (17:39 +0300)]
bgpd: Remove BGP_UPDATE_DELAY_MIN/MAX

Found randomly, and seems not used anymore.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
8 months agotests: wait for test client to connect before running test 16523/head
Christian Hopps [Wed, 7 Aug 2024 13:27:57 +0000 (09:27 -0400)]
tests: wait for test client to connect before running test

Vtysh has been improved to startup very quickly this exposed a race in this
test, where the `clear ip rip...` command ran before the test client that
handles it had finished connecting to mgmtd. Add a retried check for the test
client being connected before issuing the `clear ip rip ...` test command.

Signed-off-by: Christian Hopps <chopps@labn.net>
8 months agoMerge pull request #16521 from opensourcerouting/fix/capability_toggles
Donald Sharp [Wed, 7 Aug 2024 13:24:48 +0000 (09:24 -0400)]
Merge pull request #16521 from opensourcerouting/fix/capability_toggles

bgpd: Clear previously allocated capabilities values before parsing a new OPEN

8 months agobgpd: Clear previously allocated capabilities values before parsing a new OPEN 16521/head
Donatas Abraitis [Tue, 6 Aug 2024 15:19:40 +0000 (18:19 +0300)]
bgpd: Clear previously allocated capabilities values before parsing a new OPEN

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
8 months agoMerge pull request #16501 from donaldsharp/preprocess_vtysh
Mark Stapp [Fri, 2 Aug 2024 11:27:04 +0000 (07:27 -0400)]
Merge pull request #16501 from donaldsharp/preprocess_vtysh

Preprocess vtysh

8 months agoMerge pull request #16510 from donaldsharp/test_timing_fixes
Jafar Al-Gharaibeh [Thu, 1 Aug 2024 16:45:09 +0000 (12:45 -0400)]
Merge pull request #16510 from donaldsharp/test_timing_fixes

Test timing fixes

8 months agoMerge pull request #16509 from opensourcerouting/pim-cid-1598684
Donald Sharp [Thu, 1 Aug 2024 16:03:35 +0000 (12:03 -0400)]
Merge pull request #16509 from opensourcerouting/pim-cid-1598684

pimd: fix possible NULL dereference

8 months agoMerge pull request #16499 from opensourcerouting/fix/bgp_session_reset_safe
Donald Sharp [Thu, 1 Aug 2024 12:08:17 +0000 (08:08 -0400)]
Merge pull request #16499 from opensourcerouting/fix/bgp_session_reset_safe

bgpd: Use bgp_session_reset_safe() for GR update all peers

8 months agotests: need aggressive timers in bgp_prefix_list_any 16510/head
Donald Sharp [Wed, 31 Jul 2024 15:43:07 +0000 (11:43 -0400)]
tests: need aggressive timers in bgp_prefix_list_any

Add some timers to make convergence happan as fast as possible
when a connection fails on the intial attempt.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
8 months agotests: need aggressive timers in bgp_route_map_match_ipv6_nexthop
Donald Sharp [Wed, 31 Jul 2024 15:00:38 +0000 (11:00 -0400)]
tests: need aggressive timers in bgp_route_map_match_ipv6_nexthop

Add some timers to make the convergence happen as fast as possible
when a connection fails on the initial attempt.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
8 months agotests: Shorten reconnect timer when something goes wrong
Donald Sharp [Wed, 31 Jul 2024 14:37:59 +0000 (10:37 -0400)]
tests: Shorten reconnect timer when something goes wrong

When running bfd_bgp_cbit_topo3 and an intial connection
goes wrong, try to connect again as fast as possible as
that the timer is 2 minutes otherwise and the test will
never come back from it.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
8 months agotests: Increase route_scale timeouts
Donald Sharp [Wed, 31 Jul 2024 14:45:38 +0000 (10:45 -0400)]
tests: Increase route_scale timeouts

This test is frequently failing in the upstream CI.  Most
log failures are stating that we expected something like
1 million routes but we have 900k+.  Looks like the system
is just loaded a bit more than expected.  Let's give these
tests a bit more time to complete.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
8 months agopimd: fix possible NULL dereference 16509/head
Rafael Zalamena [Wed, 31 Jul 2024 13:18:47 +0000 (10:18 -0300)]
pimd: fix possible NULL dereference

Coverity scan ID: 1598684

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
8 months agoMerge pull request #16500 from opensourcerouting/fix/show_afi_when_printing_debug
Donald Sharp [Wed, 31 Jul 2024 12:19:14 +0000 (08:19 -0400)]
Merge pull request #16500 from opensourcerouting/fix/show_afi_when_printing_debug

bgpd: Show which AFI is affected when prefix-list is not found

8 months agoMerge pull request #16497 from opensourcerouting/fix/tunel_encap
Donald Sharp [Wed, 31 Jul 2024 12:14:34 +0000 (08:14 -0400)]
Merge pull request #16497 from opensourcerouting/fix/tunel_encap

bgpd: Check the actual remaining stream length before taking TLV value

8 months agovtysh, lib: preprocess CLI graphs 16501/head
David Lamparter [Sun, 21 Jul 2024 01:30:06 +0000 (18:30 -0700)]
vtysh, lib: preprocess CLI graphs

Store a parsed and built graph of the CLI nodes in vtysh, rather than
parsing and building that graph every time vtysh starts up.

This provides a 3x to 5x reduction in vtysh startup overhead:

`vtysh -c 'configure' -c 'interface lo' -c 'do show version'`

- before: 92.9M cycles, 1114 samples
- after: 16.5M cycles, 330 samples

This improvement is particularly visible for users scripting `vtysh -c`
calls, which notably includes topotests.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 months agovtysh: de-conditionalize and reorder install_node
David Lamparter [Sun, 21 Jul 2024 01:30:31 +0000 (18:30 -0700)]
vtysh: de-conditionalize and reorder install_node

There is entirely no point to these being conditional.  And pull them up
so the upcoming pre-parse code can work on a clean slate.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 months agolib/clippy: add `CMD_ELEMENT_TKN`
David Lamparter [Sun, 21 Jul 2024 01:28:35 +0000 (18:28 -0700)]
lib/clippy: add `CMD_ELEMENT_TKN`

The command graph has its tail end nodes pointing at the
`struct cmd_element` rather than a `struct cmd_token`.  This is a bit
weird to begin with, but becomes very annoying for the python bindings
where there is just no `struct cmd_element`.

Create a `CMD_ELEMENT_TKN` type for `cmd_token` instead, and replace the
tail end token in the python bindings with an instance of that.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 months agolib/clippy: improve graph node member access
David Lamparter [Sun, 21 Jul 2024 01:29:51 +0000 (18:29 -0700)]
lib/clippy: improve graph node member access

Expose all of the struct members of cmd_token, and retrieve them
dynamically rather than copying them around.  The problem with copying
them is that they can change as a result of merge(), and if there is an
existing wrapper object around it will not have its copy updated to
match.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 months agolib/clippy: expose JOIN_TKN's fork node
David Lamparter [Sun, 21 Jul 2024 01:29:11 +0000 (18:29 -0700)]
lib/clippy: expose JOIN_TKN's fork node

FORK_TKN's join node is already exposed, mirror to expose JOIN_TKN's
fork node.

(contains minor cleanup to make checkpatch.pl shut up)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 months agolib/clippy: expose graph nodes' back pointers
David Lamparter [Sat, 20 Jul 2024 23:19:29 +0000 (16:19 -0700)]
lib/clippy: expose graph nodes' back pointers

There's a wrapper for nodes' outgoing pointers, but not incoming yet.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 months agolib/clippy: allow accessing graph nodes by index
David Lamparter [Sat, 20 Jul 2024 23:08:04 +0000 (16:08 -0700)]
lib/clippy: allow accessing graph nodes by index

Add len(graph) and graph[i] wrappers to access arbitrary nodes in a
graph.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 months agolib/clippy: add a __repr__ for graph nodes
David Lamparter [Sat, 20 Jul 2024 22:55:43 +0000 (15:55 -0700)]
lib/clippy: add a __repr__ for graph nodes

Make it a little easier to work on python code using this wrapper.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 months agolib/clippy: wrap cmd_graph_merge via Graph.merge()
David Lamparter [Sat, 20 Jul 2024 22:36:20 +0000 (15:36 -0700)]
lib/clippy: wrap cmd_graph_merge via Graph.merge()

Export cmd_graph_merge() to python code via graph1.merge(graph2).

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 months agolib/clippy: allow creating empty graph
David Lamparter [Sat, 20 Jul 2024 22:30:09 +0000 (15:30 -0700)]
lib/clippy: allow creating empty graph

When merging graphs, it makes sense to allow starting with an empty one.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 months agolib/clippy: dynamically wrap graph nodes
David Lamparter [Sat, 20 Jul 2024 22:29:59 +0000 (15:29 -0700)]
lib/clippy: dynamically wrap graph nodes

The number of nodes in a graph will change as soon as cmd_graph_merge is
supported as an operation, therefore size this dynamically.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 months agotools/checkpatch: recognize `+` as unary operator
David Lamparter [Sun, 21 Jul 2024 19:19:44 +0000 (12:19 -0700)]
tools/checkpatch: recognize `+` as unary operator

Allow using "+1" when meaningful (i.e. cmd_graph_merge wants -1 or +1)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 months agolib: allow static/pre-initialized vectors
David Lamparter [Sun, 21 Jul 2024 01:28:53 +0000 (18:28 -0700)]
lib: allow static/pre-initialized vectors

Use alloced=0 to indicate that the array used in a vector is not in fact
dynamically allocated memory (yet).

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 months agolib: remove unused vector_copy()
David Lamparter [Sun, 21 Jul 2024 16:46:58 +0000 (09:46 -0700)]
lib: remove unused vector_copy()

Not used anywhere in FRR, kill it.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 months agobgpd: Show which AFI is affected when prefix-list is not found 16500/head
Donatas Abraitis [Wed, 31 Jul 2024 10:20:59 +0000 (13:20 +0300)]
bgpd: Show which AFI is affected when prefix-list is not found

When the prefix-list is not found, show which AFI is the real one we are
looking for.

E.g.: looking at this output is not clear:

```
[RYF1Z-ZKDRS] route_match_address_prefix_list: Prefix List p1 specified does not exist defaulting to NO_MATCH
```

route_match_address_prefix_list() is called by route_match_ipv6_address_prefix_list(),
and route_match_ip_address_prefix_list().

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
8 months agobgpd: Use bgp_session_reset_safe() for GR update all peers 16499/head
Donatas Abraitis [Wed, 31 Jul 2024 08:43:19 +0000 (11:43 +0300)]
bgpd: Use bgp_session_reset_safe() for GR update all peers

It might cause this use-after-free:

```
==6523==ERROR: AddressSanitizer: heap-use-after-free on address 0x60300058d720 at pc 0x55f3ab62ab1f bp 0x7ffe5b95a0d0 sp 0x7ffe5b95a0c8
READ of size 8 at 0x60300058d720 thread T0
    #0 0x55f3ab62ab1e in bgp_gr_update_mode_of_all_peers bgpd/bgp_fsm.c:2729
    #1 0x55f3ab62ab1e in bgp_gr_update_all bgpd/bgp_fsm.c:2779
    #2 0x55f3ab73557e in bgp_inst_gr_config_vty bgpd/bgp_vty.c:3037
    #3 0x55f3ab74db69 in bgp_graceful_restart bgpd/bgp_vty.c:3130
    #4 0x7fc5539a9584 in cmd_execute_command_real lib/command.c:1002
    #5 0x7fc5539a98a3 in cmd_execute_command lib/command.c:1061
    #6 0x7fc5539a9dcf in cmd_execute lib/command.c:1227
    #7 0x7fc553ae493f in vty_command lib/vty.c:616
    #8 0x7fc553ae4e92 in vty_execute lib/vty.c:1379
    #9 0x7fc553aedd34 in vtysh_read lib/vty.c:2374
    #10 0x7fc553ad8a64 in event_call lib/event.c:1995
    #11 0x7fc553a0c429 in frr_run lib/libfrr.c:1232
    #12 0x55f3ab57b78d in main bgpd/bgp_main.c:555
    #13 0x7fc55342d249 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
    #14 0x7fc55342d304 in __libc_start_main_impl ../csu/libc-start.c:360
    #15 0x55f3ab5799a0 in _start (/usr/lib/frr/bgpd+0x2e19a0)

0x60300058d720 is located 16 bytes inside of 24-byte region [0x60300058d710,0x60300058d728)
freed by thread T0 here:
    #0 0x7fc553eb76a8 in __interceptor_free ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:52
    #1 0x7fc553a2b713 in qfree lib/memory.c:130
    #2 0x7fc553a0e50d in listnode_free lib/linklist.c:81
    #3 0x7fc553a0e50d in list_delete_node lib/linklist.c:379
    #4 0x55f3ab7ae353 in peer_delete bgpd/bgpd.c:2796
    #5 0x55f3ab7ae91f in bgp_session_reset bgpd/bgpd.c:141
    #6 0x55f3ab62ab17 in bgp_gr_update_mode_of_all_peers bgpd/bgp_fsm.c:2752
    #7 0x55f3ab62ab17 in bgp_gr_update_all bgpd/bgp_fsm.c:2779
    #8 0x55f3ab73557e in bgp_inst_gr_config_vty bgpd/bgp_vty.c:3037
    #9 0x55f3ab74db69 in bgp_graceful_restart bgpd/bgp_vty.c:3130
    #10 0x7fc5539a9584 in cmd_execute_command_real lib/command.c:1002
    #11 0x7fc5539a98a3 in cmd_execute_command lib/command.c:1061
    #12 0x7fc5539a9dcf in cmd_execute lib/command.c:1227
    #13 0x7fc553ae493f in vty_command lib/vty.c:616
    #14 0x7fc553ae4e92 in vty_execute lib/vty.c:1379
    #15 0x7fc553aedd34 in vtysh_read lib/vty.c:2374
    #16 0x7fc553ad8a64 in event_call lib/event.c:1995
    #17 0x7fc553a0c429 in frr_run lib/libfrr.c:1232
    #18 0x55f3ab57b78d in main bgpd/bgp_main.c:555
    #19 0x7fc55342d249 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58

previously allocated by thread T0 here:
    #0 0x7fc553eb83b7 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:77
    #1 0x7fc553a2ae20 in qcalloc lib/memory.c:105
    #2 0x7fc553a0d056 in listnode_new lib/linklist.c:71
    #3 0x7fc553a0d85b in listnode_add_sort lib/linklist.c:197
    #4 0x55f3ab7baec4 in peer_create bgpd/bgpd.c:1996
    #5 0x55f3ab65be8b in bgp_accept bgpd/bgp_network.c:604
    #6 0x7fc553ad8a64 in event_call lib/event.c:1995
    #7 0x7fc553a0c429 in frr_run lib/libfrr.c:1232
    #8 0x55f3ab57b78d in main bgpd/bgp_main.c:555
    #9 0x7fc55342d249 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
8 months agobgpd: Check the actual remaining stream length before taking TLV value 16497/head
Donatas Abraitis [Wed, 31 Jul 2024 05:35:14 +0000 (08:35 +0300)]
bgpd: Check the actual remaining stream length before taking TLV value

```
    0 0xb50b9f898028 in __sanitizer_print_stack_trace (/home/ubuntu/frr-public/frr_public_private-libfuzzer/bgpd/.libs/bgpd+0x368028) (BuildId: 3292703ed7958b20076550c967f879db8dc27ca7)
    1 0xb50b9f7ed8e4 in fuzzer::PrintStackTrace() (/home/ubuntu/frr-public/frr_public_private-libfuzzer/bgpd/.libs/bgpd+0x2bd8e4) (BuildId: 3292703ed7958b20076550c967f879db8dc27ca7)
    2 0xb50b9f7d4d9c in fuzzer::Fuzzer::CrashCallback() (/home/ubuntu/frr-public/frr_public_private-libfuzzer/bgpd/.libs/bgpd+0x2a4d9c) (BuildId: 3292703ed7958b20076550c967f879db8dc27ca7)
    3 0xe0d12d7469cc  (linux-vdso.so.1+0x9cc) (BuildId: 1a77697e9d723fe22246cfd7641b140c427b7e11)
    4 0xe0d12c88f1fc in __pthread_kill_implementation nptl/pthread_kill.c:43:17
    5 0xe0d12c84a678 in gsignal signal/../sysdeps/posix/raise.c:26:13
    6 0xe0d12c83712c in abort stdlib/abort.c:79:7
    7 0xe0d12d214724 in _zlog_assert_failed /home/ubuntu/frr-public/frr_public_private-libfuzzer/lib/zlog.c:789:2
    8 0xe0d12d1285e4 in stream_get /home/ubuntu/frr-public/frr_public_private-libfuzzer/lib/stream.c:324:3
    9 0xb50b9f8e47c4 in bgp_attr_encap /home/ubuntu/frr-public/frr_public_private-libfuzzer/bgpd/bgp_attr.c:2758:3
    10 0xb50b9f8dcd38 in bgp_attr_parse /home/ubuntu/frr-public/frr_public_private-libfuzzer/bgpd/bgp_attr.c:3783:10
    11 0xb50b9faf74b4 in bgp_update_receive /home/ubuntu/frr-public/frr_public_private-libfuzzer/bgpd/bgp_packet.c:2383:20
    12 0xb50b9faf1dcc in bgp_process_packet /home/ubuntu/frr-public/frr_public_private-libfuzzer/bgpd/bgp_packet.c:4075:11
    13 0xb50b9f8c90d0 in LLVMFuzzerTestOneInput /home/ubuntu/frr-public/frr_public_private-libfuzzer/bgpd/bgp_main.c:582:3
```

Reported-by: Iggy Frankovic <iggyfran@amazon.com>
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
8 months agoMerge pull request #16496 from donaldsharp/topotest_hints
Russ White [Tue, 30 Jul 2024 19:12:33 +0000 (15:12 -0400)]
Merge pull request #16496 from donaldsharp/topotest_hints

doc: Add some topotest documentation about how to reproduce failures

8 months agodoc: Add some topotest documentation about how to reproduce failures 16496/head
Donald Sharp [Tue, 30 Jul 2024 17:57:44 +0000 (13:57 -0400)]
doc: Add some topotest documentation about how to reproduce failures

Add some hints for developers about how to reproduce failure conditions
in the test.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
8 months agoMerge pull request #16178 from y-bharath14/srib-babel-code-refactoring
Mark Stapp [Tue, 30 Jul 2024 15:46:15 +0000 (11:46 -0400)]
Merge pull request #16178 from y-bharath14/srib-babel-code-refactoring

babel: Added null check after retrieving babel_ifp

8 months agoMerge pull request #16494 from donaldsharp/gr_meta_q
Russ White [Tue, 30 Jul 2024 15:16:32 +0000 (11:16 -0400)]
Merge pull request #16494 from donaldsharp/gr_meta_q

zebra: Fix removal of routes on MetaQ when client goes down