]> git.puffer.fish Git - matthieu/frr.git/log
matthieu/frr.git
19 months agovtysh: fix entering configuration node in file-lock mode
Igor Ryzhov [Wed, 27 Sep 2023 23:45:05 +0000 (02:45 +0300)]
vtysh: fix entering configuration node in file-lock mode

When the config node is entered in file-lock mode, we should actually
remember it to correctly apply the workaround in `vtysh_exit`.
Otherwise, the file-lock mode is dropped once we exit any node one level
below the config node.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
(cherry picked from commit 1a09cf38949c2f2ab6d926941329e264f50d6880)

19 months agovty: fix working in file-lock mode
Igor Ryzhov [Wed, 27 Sep 2023 23:41:16 +0000 (02:41 +0300)]
vty: fix working in file-lock mode

When the configuration node is entered in file-lock mode, candidate
and running datastores are locked. Any configuration change is followed
by an implicit commit which leads to a crash of mgmtd, because double
lock is prohibited by an assert. When working in file-lock mode, we
shouldn't do implicit commits which is disabled by allowing pending
configuration changes.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
(cherry picked from commit d3aa9adb8da2a3d2fc4c7d926e2135c261bd2764)

19 months agovty: fix configure terminal argument descriptions
Igor Ryzhov [Wed, 27 Sep 2023 20:34:53 +0000 (23:34 +0300)]
vty: fix configure terminal argument descriptions

"terminal" and "file-lock" description are mixed up.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
(cherry picked from commit b8ebb7fc62dc4e212e74189c8d53ee74f1b2d0e5)

19 months agoMerge pull request #14496 from FRRouting/mergify/bp/stable/9.0/pr-14342
Jafar Al-Gharaibeh [Wed, 27 Sep 2023 22:52:05 +0000 (17:52 -0500)]
Merge pull request #14496 from FRRouting/mergify/bp/stable/9.0/pr-14342

bgpd: fix crash in *bgpv2PeerErrorsTable" (backport #14342)

19 months agobgpd: initialization in bgp_notify_admin_message function
Francois Dumontet [Mon, 18 Sep 2023 11:55:08 +0000 (13:55 +0200)]
bgpd: initialization in bgp_notify_admin_message function

buffer buff is fully zeroed by a memset in bgp_notify_admin_message
function

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit b8f3f0b86ff3fae4a3e655811680bc11b18fd0e2)

19 months agobgpd: fix crash in *bgpv2PeerErrorsTable
Francois Dumontet [Fri, 1 Sep 2023 15:25:25 +0000 (17:25 +0200)]
bgpd: fix crash in *bgpv2PeerErrorsTable

following crash occurs:
    at ./nptl/pthread_kill.c:44
    at ./nptl/pthread_kill.c:78
    at ./nptl/pthread_kill.c:89
    context=0x7ffd06d3d300)
    at /build/make-pkg/output/_packages/cp-routing/src/lib/sigevent.c:246
    length=0x7ffd06d3da88, exact=1, var_len=0x7ffd06d3da90, write_method=<optimized out>)
    at /build/make-pkg/output/_packages/cp-routing/src/bgpd/bgp_snmp_bgp4v2.c:364
    vp=vp@entry=0x7f7c88b584c0 <bgpv2_variables>, vp_len=vp_len@entry=102,
    ename=ename@entry=0x7f7c88b58440 <bgpv2_trap_oid>, enamelen=enamelen@entry=8,
    name=name@entry=0x7f7c88b58480 <bgpv2_oid>, namelen=namelen@entry=7,
    iname=0x7ffd06d3e7b0, index_len=1, trapobj=0x7f7c88b53b80 <bgpv2TrapBackListv6>,
    trapobjlen=6, sptrap=2 '\002')
    at /build/make-pkg/output/_packages/cp-routing/src/lib/agentx.c:382
    vp_len=vp_len@entry=102, ename=ename@entry=0x7f7c88b58440 <bgpv2_trap_oid>,
    enamelen=enamelen@entry=8, name=name@entry=0x7f7c88b58480 <bgpv2_oid>,
    namelen=namelen@entry=7, iname=0x7ffd06d3ec30, inamelen=16,
    trapobj=0x7f7c88b53b80 <bgpv2TrapBackListv6>, trapobjlen=6, sptrap=2 '\002')
    at /build/make-pkg/output/_packages/cp-routing/src/lib/agentx.c:298
    at /build/make-pkg/output/_packages/cp-routing/src/bgpd/bgp_snmp_bgp4v2.c:1496
    at /build/make-pkg/output/_packages/cp-routing/src/bgpd/bgp_fsm.c:48
    at /build/make-pkg/output/_packages/cp-routing/src/bgpd/bgp_fsm.c:1314
    event=Receive_NOTIFICATION_message)
    at /build/make-pkg/output/_packages/cp-routing/src/bgpd/bgp_fsm.c:2665
    at /build/make-pkg/output/_packages/cp-routing/src/bgpd/bgp_packet.c:3129
    at /build/make-pkg/output/_packages/cp-routing/src/lib/event.c:1979
    at /build/make-pkg/output/_packages/cp-routing/src/lib/libfrr.c:1213
    at /build/make-pkg/output/_packages/cp-routing/src/bgpd/bgp_main.c:510

it's due to function bgpv2PeerErrorsTable returning
return SNMP_STRING(msg_str);
with msg_str NULL rather the string ""

this commit avoid the issue.

Signed-off-by: Francois Dumontet <francois.dumontet@6wind.com>
(cherry picked from commit d5cb2d9e41135a34baec3663a686e19eff0a316f)

19 months agoMerge pull request #14478 from FRRouting/mergify/bp/stable/9.0/pr-14464
Donatas Abraitis [Sat, 23 Sep 2023 19:44:28 +0000 (22:44 +0300)]
Merge pull request #14478 from FRRouting/mergify/bp/stable/9.0/pr-14464

bgpd: Fix dampening info crash (backport #14464)

19 months agobgpd: Use proper AFI when dumping information for dampening stuff
Donatas Abraitis [Thu, 21 Sep 2023 13:08:50 +0000 (16:08 +0300)]
bgpd: Use proper AFI when dumping information for dampening stuff

Before we called IPv4 for IPv6 dampening info.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit e0a87954848311b61e69fb957dcf0382429f15f9)

19 months agobgpd: Initialise timebuf arrays to zeros for dampening reuse timer
Donatas Abraitis [Thu, 21 Sep 2023 13:00:10 +0000 (16:00 +0300)]
bgpd: Initialise timebuf arrays to zeros for dampening reuse timer

Avoid having something like this in outputs:

Before:
```
munet> r1 shi vtysh -c 'show bgp dampening damp'
BGP table version is 10, local router ID is 10.10.10.1, vrf id 0
Default local pref 100, local AS 65001
Status codes:  s suppressed, d damped, h history, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

   Network          From             Reuse    Path
 *d 2001:db8:1::1/128
                    2001:db8::2      (null) 65002 ?
 *d 2001:db8:2::1/128
                    2001:db8::2      (null) 65002 ?
 *d 2001:db8:3::1/128
                    2001:db8::2      (null) 65002 ?
 *d 2001:db8:4::1/128
                    2001:db8::2      (null) 65002 ?
 *d 2001:db8:5::1/128
                    2001:db8::2      (null) 65002 ?

Displayed  5 routes and 5 total paths

munet> r1 shi vtysh -c 'show bgp dampening flap'
BGP table version is 10, local router ID is 10.10.10.1, vrf id 0
Default local pref 100, local AS 65001
Status codes:  s suppressed, d damped, h history, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

   Network          From            Flaps Duration Reuse    Path
 *d 2001:db8:1::1/128
                    2001:db8::2     2    00:03:10 (null) 65002 ?
 *d 2001:db8:2::1/128
                    2001:db8::2     2    00:03:10 (null) 65002 ?
 *d 2001:db8:3::1/128
                    2001:db8::2     2    00:03:10 (null) 65002 ?
 *d 2001:db8:4::1/128
                    2001:db8::2     2    00:03:10 (null) 65002 ?
 *d 2001:db8:5::1/128
                    2001:db8::2     2    00:03:10 (null) 65002 ?

Displayed  5 routes and 5 total paths
```

After:

```
munet> r1 shi vtysh -c 'show bgp dampening damp '
BGP table version is 10, local router ID is 10.10.10.1, vrf id 0
Default local pref 100, local AS 65001
Status codes:  s suppressed, d damped, h history, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

   Network          From             Reuse    Path
 *d 2001:db8:1::1/128
                    2001:db8::2      00:00:00 65002 ?
 *d 2001:db8:2::1/128
                    2001:db8::2      00:00:00 65002 ?
 *d 2001:db8:3::1/128
                    2001:db8::2      00:00:00 65002 ?
 *d 2001:db8:4::1/128
                    2001:db8::2      00:00:00 65002 ?
 *d 2001:db8:5::1/128
                    2001:db8::2      00:00:00 65002 ?

Displayed  5 routes and 5 total paths

munet> r1 shi vtysh -c 'show bgp dampening flap'
BGP table version is 10, local router ID is 10.10.10.1, vrf id 0
Default local pref 100, local AS 65001
Status codes:  s suppressed, d damped, h history, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

   Network          From            Flaps Duration Reuse    Path
 *d 2001:db8:1::1/128
                    2001:db8::2     2    00:00:15 00:00:00 65002 ?
 *d 2001:db8:2::1/128
                    2001:db8::2     2    00:00:15 00:00:00 65002 ?
 *d 2001:db8:3::1/128
                    2001:db8::2     2    00:00:15 00:00:00 65002 ?
 *d 2001:db8:4::1/128
                    2001:db8::2     2    00:00:15 00:00:00 65002 ?
 *d 2001:db8:5::1/128
                    2001:db8::2     2    00:00:15 00:00:00 65002 ?

Displayed  5 routes and 5 total paths
```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit c39506d80f3e42059e00e562f0c5b376a5246ddd)

19 months agobgpd: Make sure dampening is enabled for the specified AFI/SAFI
Donatas Abraitis [Thu, 21 Sep 2023 12:37:17 +0000 (15:37 +0300)]
bgpd: Make sure dampening is enabled for the specified AFI/SAFI

```
(gdb) bt
0  raise (sig=sig@entry=11) at ../sysdeps/unix/sysv/linux/raise.c:50
1  0x00007f55897c6ab0 in core_handler (signo=11, siginfo=0x7ffd19764bb0, context=<optimized out>) at lib/sigevent.c:246
2  <signal handler called>
3  0x00005624ccabdee9 in bgp_get_reuse_time (penalty=<optimized out>, buf=buf@entry=0x7ffd19765590 "", len=len@entry=25, afi=afi@entry=AFI_IP, safi=safi@entry=SAFI_UNICAST, use_json=<optimized out>, json=0x0)
    at bgpd/bgp_damp.c:498
4  0x00005624ccabf5e7 in bgp_damp_reuse_time_vty (vty=vty@entry=0x5624ce484e30, path=path@entry=0x5624cdd797a0, timebuf=timebuf@entry=0x7ffd19765590 "", len=len@entry=25, afi=afi@entry=AFI_IP,
    safi=safi@entry=SAFI_UNICAST, use_json=false, json=0x0) at bgpd/bgp_damp.c:635
5  0x00005624cca146a9 in damp_route_vty_out (afi=AFI_IP, json_paths=0x0, use_json=false, safi=SAFI_UNICAST, display=<optimized out>, path=0x5624cdd797a0, p=0x5624ce3f3160, vty=0x5624ce484e30)
    at bgpd/bgp_route.c:9852
6  bgp_show_table (vty=0x5624ce484e30, bgp=0x5624ce400950, safi=safi@entry=SAFI_UNICAST, table=0x5624ce409300, type=type@entry=bgp_show_type_dampend_paths, output_arg=0x0, rd=0x0, is_last=1, output_cum=0x0,
    total_cum=0x0, json_header_depth=0x7ffd19765830, show_flags=0, rpki_target_state=RPKI_NOT_BEING_USED) at bgpd/bgp_route.c:11448
7  0x00005624cca15f74 in bgp_show (vty=vty@entry=0x5624ce484e30, bgp=<optimized out>, afi=<optimized out>, safi=<optimized out>, type=type@entry=bgp_show_type_dampend_paths, output_arg=output_arg@entry=0x0,
    show_flags=0, rpki_target_state=RPKI_NOT_BEING_USED) at bgpd/bgp_route.c:11702
8  0x00005624cca17679 in show_ip_bgp_magic (self=<optimized out>, viewvrfname=<optimized out>, aa_nn=<optimized out>, community_list=<optimized out>, community_list_str=<optimized out>,
    community_list_name=<optimized out>, as_path_filter_name=<optimized out>, prefix_list=<optimized out>, accesslist_name=<optimized out>, rmap_name=<optimized out>, version=<optimized out>,
    version_str=<optimized out>, alias_name=<optimized out>, wide=<optimized out>, detail_json=<optimized out>, uj=<optimized out>, detail_routes=<optimized out>, all=<optimized out>, argv=0x5624ce3f32f0,
    argc=<optimized out>, vty=0x5624ce484e30) at bgpd/bgp_route.c:12863
9  show_ip_bgp (self=<optimized out>, vty=<optimized out>, argc=<optimized out>, argv=0x5624ce3f32f0) at ./bgpd/bgp_route_clippy.c:514
10 0x00007f55897618ee in cmd_execute_command_real (vline=vline@entry=0x5624ce427020, vty=vty@entry=0x5624ce484e30, cmd=cmd@entry=0x0, up_level=up_level@entry=0) at lib/command.c:993
11 0x00007f5589761a91 in cmd_execute_command (vline=vline@entry=0x5624ce427020, vty=vty@entry=0x5624ce484e30, cmd=0x0, vtysh=vtysh@entry=0) at lib/command.c:1051
12 0x00007f5589761c30 in cmd_execute (vty=vty@entry=0x5624ce484e30, cmd=cmd@entry=0x5624ce47b1b0 "show bgp dampening damp", matched=matched@entry=0x0, vtysh=vtysh@entry=0) at lib/command.c:1218
13 0x00007f55897de95e in vty_command (vty=vty@entry=0x5624ce484e30, buf=<optimized out>) at lib/vty.c:591
14 0x00007f55897deb9d in vty_execute (vty=0x5624ce484e30) at lib/vty.c:1354
15 0x00007f55897e23eb in vtysh_read (thread=<optimized out>) at lib/vty.c:2362
16 0x00007f55897d9426 in event_call (thread=thread@entry=0x7ffd19767e70) at lib/event.c:1971
17 0x00007f5589789df8 in frr_run (master=0x5624cdc42100) at lib/libfrr.c:1213
18 0x00005624cc985f65 in main (argc=<optimized out>, argv=0x7ffd197680d8) at bgpd/bgp_main.c:510
(gdb) frame 4
(gdb) p damp[1][1]
$4 = {suppress_value = 0, reuse_limit = 0, max_suppress_time = 0, half_life = 0, tmax = 0, reuse_list_size = 0, reuse_index_size = 0, ceiling = 0, decay_rate_per_tick = 0, decay_array_size = 0,
  scale_factor = 0, reuse_scale_factor = 0, decay_array = 0x0, reuse_index = 0x0, reuse_list = 0x0, reuse_offset = 0, no_reuse_list = 0x0, t_reuse = 0x0, afi = AFI_UNSPEC, safi = SAFI_UNSPEC}
(gdb) p damp[2][1]
$5 = {suppress_value = 1, reuse_limit = 1, max_suppress_time = 1800, half_life = 60, tmax = 0, reuse_list_size = 181, reuse_index_size = 1024, ceiling = 1073741824, decay_rate_per_tick = 0,
  decay_array_size = 360, scale_factor = 9.5367431729442842e-07, reuse_scale_factor = 0, decay_array = 0x5624ce483780, reuse_index = 0x5624ce481320, reuse_list = 0x5624ce482c20, reuse_offset = 7,
  no_reuse_list = 0x0, t_reuse = 0x5624ce3ec840, afi = AFI_UNSPEC, safi = SAFI_UNSPEC}
(gdb)
```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit 14d8590688be9e9660c3549a1147a4e3537d0512)

19 months agoMerge pull request #14434 from FRRouting/mergify/bp/stable/9.0/pr-14418
Donatas Abraitis [Mon, 18 Sep 2023 12:56:00 +0000 (15:56 +0300)]
Merge pull request #14434 from FRRouting/mergify/bp/stable/9.0/pr-14418

tools: make --quiet actually suppress output (backport #14418)

19 months agotools: make --quiet actually suppress output
Jonas Gorski [Thu, 14 Sep 2023 15:04:16 +0000 (17:04 +0200)]
tools: make --quiet actually suppress output

When calling daemon_stop() with --quiet and e.g. the pidfile is empty,
it won't return early since while "$fail" is set, "$2" is "--quiet", so
the if condition isn't met and it will continue executing, resulting
in error messages in the log:

> Sep 14 14:48:33 localhost watchfrr[2085]: [YFT0P-5Q5YX] Forked background command [pid 2086]: /usr/lib/frr/watchfrr.sh restart all
> Sep 14 14:48:33 localhost frrinit.sh[2075]: /usr/lib/frr/frrcommon.sh: line 216: kill: `': not a pid or valid job spec
> Sep 14 14:48:33 localhost frrinit.sh[2075]: /usr/lib/frr/frrcommon.sh: line 216: kill: `': not a pid or valid job spec
> Sep 14 14:48:33 localhost frrinit.sh[2075]: /usr/lib/frr/frrcommon.sh: line 216: kill: `': not a pid or valid job spec

Fix this by moving the --quiet check into the block to log_failure_msg(),
and also add the check to all other invocations of log_*_msg() to make
--quiet properly suppress output.

Fixes: 19a99d89f088 ("tools: suppress unuseful warnings during restarting frr")
Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
(cherry picked from commit 312d5ee1592f8c5b616d330233d1de2643f759e2)

19 months agoMerge pull request #14426 from FRRouting/mergify/bp/stable/9.0/pr-14417
Donatas Abraitis [Mon, 18 Sep 2023 05:56:39 +0000 (08:56 +0300)]
Merge pull request #14426 from FRRouting/mergify/bp/stable/9.0/pr-14417

zebra: fix link update for veth interfaces (backport #14417)

19 months agozebra: fix link update for veth interfaces
Jafar Al-Gharaibeh [Thu, 14 Sep 2023 14:24:25 +0000 (09:24 -0500)]
zebra: fix link update for veth interfaces

Signed-off-by: Jafar Al-Gharaibeh <jafar@atcorp.com>
(cherry picked from commit d85671181bb06292877633c66cf80cf83a91c7f6)

19 months agoMerge pull request #14405 from FRRouting/mergify/bp/stable/9.0/pr-14399
Donatas Abraitis [Wed, 13 Sep 2023 04:54:05 +0000 (07:54 +0300)]
Merge pull request #14405 from FRRouting/mergify/bp/stable/9.0/pr-14399

bgpd: BGP_ATTR_MAX can be 255, allow using it for path attr (backport #14399)

19 months agobgpd: BGP_ATTR_MAX can be 255, allow using it for path attr discard/withdraw cmds
Donatas Abraitis [Tue, 12 Sep 2023 11:46:11 +0000 (14:46 +0300)]
bgpd: BGP_ATTR_MAX can be 255, allow using it for path attr discard/withdraw cmds

https://www.rfc-editor.org/rfc/rfc2042.html

says: 255 reserved for development

In FRR, 255 is kinda used too BGP_ATTR_VNC, even more we allow setting 255 in CLI.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit 12e37cb4a0879af5c81b76d1b53f9833e0906508)

19 months agoMerge pull request #14403 from FRRouting/mergify/bp/stable/9.0/pr-14237
Jafar Al-Gharaibeh [Tue, 12 Sep 2023 20:08:35 +0000 (15:08 -0500)]
Merge pull request #14403 from FRRouting/mergify/bp/stable/9.0/pr-14237

pbrd: Free Memory in pbr_map_delete (backport #14237)

19 months agopbrd: Free Memory in pbr_map_delete
Keelan10 [Sat, 19 Aug 2023 11:20:37 +0000 (15:20 +0400)]
pbrd: Free Memory in pbr_map_delete

This commit frees dynamically allocated memory associated
with `pbrms->nhgrp_name` and `pbrms->dst` which were causing memory leaks.

The ASan leak log for reference:

```
=================================================================
==107458==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 56 byte(s) in 1 object(s) allocated from:
    #0 0x7f87d644ca37 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154
    #1 0x7f87d5feaa37 in qcalloc ../lib/memory.c:105
    #2 0x7f87d6054ffd in prefix_new ../lib/prefix.c:1180
    #3 0x55722f3c2885 in pbr_map_match_dst_magic ../pbrd/pbr_vty.c:302
    #4 0x55722f3b5c24 in pbr_map_match_dst pbrd/pbr_vty_clippy.c:228
    #5 0x7f87d5f32d61 in cmd_execute_command_real ../lib/command.c:993
    #6 0x7f87d5f330ee in cmd_execute_command ../lib/command.c:1052
    #7 0x7f87d5f33dc0 in cmd_execute ../lib/command.c:1218
    #8 0x7f87d60e4177 in vty_command ../lib/vty.c:591
    #9 0x7f87d60e905c in vty_execute ../lib/vty.c:1354
    #10 0x7f87d60ef45a in vtysh_read ../lib/vty.c:2362
    #11 0x7f87d60d42d4 in event_call ../lib/event.c:1979
    #12 0x7f87d5fbe828 in frr_run ../lib/libfrr.c:1213
    #13 0x55722f3ac795 in main ../pbrd/pbr_main.c:168
    #14 0x7f87d5b82d8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58

Direct leak of 2 byte(s) in 1 object(s) allocated from:
    #0 0x7f87d63f39a7 in __interceptor_strdup ../../../../src/libsanitizer/asan/asan_interceptors.cpp:454
    #1 0x7f87d5feaafc in qstrdup ../lib/memory.c:117
    #2 0x55722f3da139 in pbr_nht_set_seq_nhg ../pbrd/pbr_nht.c:551
    #3 0x55722f3c693f in pbr_map_nexthop_group_magic ../pbrd/pbr_vty.c:1140
    #4 0x55722f3bdaae in pbr_map_nexthop_group pbrd/pbr_vty_clippy.c:1284
    #5 0x7f87d5f32d61 in cmd_execute_command_real ../lib/command.c:993
    #6 0x7f87d5f330ee in cmd_execute_command ../lib/command.c:1052
    #7 0x7f87d5f33dc0 in cmd_execute ../lib/command.c:1218
    #8 0x7f87d60e4177 in vty_command ../lib/vty.c:591
    #9 0x7f87d60e905c in vty_execute ../lib/vty.c:1354
    #10 0x7f87d60ef45a in vtysh_read ../lib/vty.c:2362
    #11 0x7f87d60d42d4 in event_call ../lib/event.c:1979
    #12 0x7f87d5fbe828 in frr_run ../lib/libfrr.c:1213
    #13 0x55722f3ac795 in main ../pbrd/pbr_main.c:168
    #14 0x7f87d5b82d8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58

SUMMARY: AddressSanitizer: 58 byte(s) leaked in 2 allocation(s).
```

Signed-off-by: Keelan Cannoo <keelan.cannoo@icloud.com>
(cherry picked from commit 0214fb7bfcc5af310d91351f4aa9fa95a402fd5f)

19 months agoMerge pull request #14370 from FRRouting/mergify/bp/stable/9.0/pr-14360
Donatas Abraitis [Fri, 8 Sep 2023 11:49:05 +0000 (14:49 +0300)]
Merge pull request #14370 from FRRouting/mergify/bp/stable/9.0/pr-14360

bgpd: Fix `no set as-path prepend` command for BGP (backport #14360)

19 months agobgpd: Fix `no set as-path prepend` command for BGP
Donatas Abraitis [Wed, 6 Sep 2023 14:17:16 +0000 (17:17 +0300)]
bgpd: Fix `no set as-path prepend` command for BGP

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit 8f3eeb8b8258afdfc177c8a58f0a1790179a5c60)

19 months agoMerge pull request #14363 from FRRouting/mergify/bp/stable/9.0/pr-14358 base_fuzz_20230907
Donald Sharp [Thu, 7 Sep 2023 13:29:57 +0000 (09:29 -0400)]
Merge pull request #14363 from FRRouting/mergify/bp/stable/9.0/pr-14358

zebra: Prevent Null pointer deref (backport #14358)

19 months agozebra: Prevent Null pointer deref
Donald Sharp [Wed, 6 Sep 2023 12:39:02 +0000 (08:39 -0400)]
zebra: Prevent Null pointer deref

If the kernel sends us bad data then the kind_str
will be NULL and a later strcmp operation will
cause a crash.

As a note: If the kernel is not sending us properly
formated netlink messages then we got bigger problems
than zebra crashing.  But at least let's prevent zebra
from crashing.

Reported-by: Iggy Frankovic <iggyfran@amazon.com>
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
(cherry picked from commit 2b9373c114dfc0154f6291474789f44256358518)

19 months agoMerge pull request #14352 from FRRouting/mergify/bp/stable/9.0/pr-14318
Donald Sharp [Tue, 5 Sep 2023 18:03:00 +0000 (14:03 -0400)]
Merge pull request #14352 from FRRouting/mergify/bp/stable/9.0/pr-14318

zebra: Fix zebra crash when replacing NHE during shutdown (backport #14318)

19 months agoMerge pull request #14353 from FRRouting/mergify/bp/stable/9.0/pr-14341
Donald Sharp [Tue, 5 Sep 2023 18:02:46 +0000 (14:02 -0400)]
Merge pull request #14353 from FRRouting/mergify/bp/stable/9.0/pr-14341

bgpd: AS4_PATH and PMSI tunnel attributes handling by RFC 7606 (backport #14341)

19 months agobgpd: Treat as4-path (17) attribute as withdraw if malformed
Donatas Abraitis [Fri, 1 Sep 2023 14:10:12 +0000 (17:10 +0300)]
bgpd: Treat as4-path (17) attribute as withdraw if malformed

rfc7606 defines:

Attributes 17 (AS4_PATH), 18 (AS4_AGGREGATOR), 22 (PMSI_TUNNEL), 23 (Tunnel
   Encapsulation Attribute), 26 (AIGP), 27 (PE Distinguisher Labels),
   and 29 (BGP-LS Attribute) do have error handling consistent with
   Section 8 and thus are not further discussed herein.

Section 8 defines:

The "treat-as-withdraw" approach is generally
   preferred and the "session reset" approach is discouraged.
For any malformed attribute that is handled by the "attribute
   discard" instead of the "treat-as-withdraw" approach, it is critical
   to consider the potential impact of doing so.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit e8cac071fb9106cbe235d3ff1f4dd9bfbd6c4cef)

19 months agobgpd: Treat PMSI tunnel attribute as withdrawn if malformed
Donatas Abraitis [Fri, 1 Sep 2023 14:00:55 +0000 (17:00 +0300)]
bgpd: Treat PMSI tunnel attribute as withdrawn if malformed

https://datatracker.ietf.org/doc/html/rfc6514#page-10 states:

A router that supports the PMSI Tunnel attribute considers this
   attribute to be malformed if either (a) it contains an undefined
   tunnel type in the Tunnel Type field of the attribute, or (b) the
   router cannot parse the Tunnel Identifier field of the attribute as a
   tunnel identifier of the tunnel types specified in the Tunnel Type
   field of the attribute.

When a router that receives a BGP Update that contains the PMSI
   Tunnel attribute with its Partial bit set determines that the
   attribute is malformed, the router SHOULD treat this Update as though
   all the routes contained in this Update had been withdrawn.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit 8ef655c24967c75d8ad214216813f9d3c2ae9db8)

19 months agozebra: Fix zebra crash when replacing NHE during shutdown
Rajasekar Raja [Thu, 17 Aug 2023 07:47:05 +0000 (00:47 -0700)]
zebra: Fix zebra crash when replacing NHE during shutdown

During replace of a NHE from upper proto in zebra_nhg_proto_add(),
 - rib_handle_nhg_replace() is invoked with old NHE where we walk all
   RNs/REs & replace the re->nhe whose address points to old NHE.
 - In this walk, if prev re->nhe refcnt is decremented to 0, we free up
   the memory which the old NHE is pointing to.
Later in zebra_nhg_proto_add(), we end up accessing this freed memory
and crash.

Logs:
1380766 2023/08/16 22:34:11.994671 ZEBRA: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x56091d890840 (70312519[2756/2762/2810]) 2 => 1
1380773 2023/08/16 22:34:11.994678 ZEBRA: [WDEB1-93HCZ] zebra_nhg_decrement_ref: nhe 0x56091d890840 (70312519[2756/2762/2810]) 1 => 0
1380777 2023/08/16 22:34:11.994844 ZEBRA: [JE46R-G2NEE] zebra_nhg_release: nhe 0x56091d890840 (70312519[2756/2762/2810])
1380778 2023/08/16 22:34:11.994849 ZEBRA: [SCDBM-4H062] zebra_nhg_free: nhe 0x56091d890840 (70312519[2756/2762/2810]), refcnt 0
1380782 2023/08/16 22:34:11.995000 ZEBRA: [SCDBM-4H062] zebra_nhg_free: nhe 0x56091d890840 (0[]), refcnt 0
1380783 2023/08/16 22:34:11.995011 ZEBRA: lib/memory.c:84: mt_count_free(): assertion (mt->n_alloc) failed

Backtrace:
0  0x00007f833f5f48eb in raise () from /lib/x86_64-linux-gnu/libc.so.6
1  0x00007f833f5df535 in abort () from /lib/x86_64-linux-gnu/libc.so.6
2  0x00007f833f636648 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
3  0x00007f833f63cd6a in ?? () from /lib/x86_64-linux-gnu/libc.so.6
4  0x00007f833f63cfb4 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
5  0x00007f833f63fbc8 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
6  0x00007f833f64172a in malloc () from /lib/x86_64-linux-gnu/libc.so.6
7  0x00007f833f6c3fd2 in backtrace_symbols () from /lib/x86_64-linux-gnu/libc.so.6
8  0x00007f833f9013fc in zlog_backtrace_sigsafe (priority=priority@entry=2, program_counter=program_counter@entry=0x7f833f5f48eb <raise+267>) at lib/log.c:222
9  0x00007f833f901593 in zlog_signal (signo=signo@entry=6, action=action@entry=0x7f833f988ee8 "aborting...", siginfo_v=siginfo_v@entry=0x7ffee1ce4a30,
    program_counter=program_counter@entry=0x7f833f5f48eb <raise+267>) at lib/log.c:154
10 0x00007f833f92dbd1 in core_handler (signo=6, siginfo=0x7ffee1ce4a30, context=<optimized out>) at lib/sigevent.c:254
11 <signal handler called>
12 0x00007f833f5f48eb in raise () from /lib/x86_64-linux-gnu/libc.so.6
13 0x00007f833f5df535 in abort () from /lib/x86_64-linux-gnu/libc.so.6
14 0x00007f833f958f96 in _zlog_assert_failed (xref=xref@entry=0x7f833f9e4080 <_xref.10705>, extra=extra@entry=0x0) at lib/zlog.c:680
15 0x00007f833f905400 in mt_count_free (mt=0x7f833fa02800 <MTYPE_NH_LABEL>, ptr=0x51) at lib/memory.c:84
16 mt_count_free (ptr=0x51, mt=0x7f833fa02800 <MTYPE_NH_LABEL>) at lib/memory.c:80
17 qfree (mt=0x7f833fa02800 <MTYPE_NH_LABEL>, ptr=0x51) at lib/memory.c:140
18 0x00007f833f90799c in nexthop_del_labels (nexthop=nexthop@entry=0x56091d776640) at lib/nexthop.c:563
19 0x00007f833f907b91 in nexthop_free (nexthop=0x56091d776640) at lib/nexthop.c:393
20 0x00007f833f907be8 in nexthops_free (nexthop=<optimized out>) at lib/nexthop.c:408
21 0x000056091c21aa76 in zebra_nhg_free_members (nhe=0x56091d890840) at zebra/zebra_nhg.c:1628
22 zebra_nhg_free (nhe=0x56091d890840) at zebra/zebra_nhg.c:1628
23 0x000056091c21bab2 in zebra_nhg_proto_add (id=<optimized out>, type=9, instance=<optimized out>, session=0, nhg=nhg@entry=0x56091d7da028, afi=afi@entry=AFI_UNSPEC)
    at zebra/zebra_nhg.c:3532
24 0x000056091c22bc4e in process_subq_nhg (lnode=0x56091d88c540) at zebra/zebra_rib.c:2689
25 process_subq (qindex=META_QUEUE_NHG, subq=0x56091d24cea0) at zebra/zebra_rib.c:3290
26 meta_queue_process (dummy=<optimized out>, data=0x56091d24d4c0) at zebra/zebra_rib.c:3343
27 0x00007f833f9492c8 in work_queue_run (thread=0x7ffee1ce55a0) at lib/workqueue.c:285
28 0x00007f833f93f60d in thread_call (thread=thread@entry=0x7ffee1ce55a0) at lib/thread.c:2008
29 0x00007f833f8f9888 in frr_run (master=0x56091d068660) at lib/libfrr.c:1223
30 0x000056091c1b8366 in main (argc=12, argv=0x7ffee1ce5988) at zebra/main.c:551

Issue: 3492162

Ticket# 3492162

Signed-off-by: Chirag Shah <chirag@nvidia.com>
Signed-off-by: Rajasekar Raja <rajasekarr@nvidia.com>
(cherry picked from commit 27ccfd9aa69f05646439e46db6e25945a9ce8c19)

19 months agoFRR Release 9.0.1 docker/9.0.1 frr-9.0.1
Jafar Al-Gharaibeh [Sat, 2 Sep 2023 04:17:37 +0000 (23:17 -0500)]
FRR Release 9.0.1

Bug Fixes:

bgpd
    Add peers back to peer hash when peer_xfer_conn fails
    Check the length of the rcv software version
    Do not explicitly print maxttl value for ebgp-multihop vty output
    Do not process nlris if the attribute length is zero
    Don't read the first byte of orf header if we are ahead of stream
    Evpn code was not properly unlocking rd_dest
    Fix `show bgp all rpki notfound`
    Make sure we have enough data to read two bytes when validating aigp
    Use treat-as-withdraw for tunnel encapsulation attribute

zebra
    Fix evpn nexthop config order

lib
    Allow unsetting walltime-warning and cpu-warning

ospfd
    Prevent use after free( and crash of ospf ) when no router ospf

pimd
    Prevent crash when receiving register message when the rp() is unknown
    When receiving a packet be more careful with length in pim_pim_packet

vtysh
    Print uniq lines when parsing `no service ...`

Signed-off-by: Jafar Al-Gharaibeh <jafar@atcorp.com>
19 months agoMerge pull request #14336 from FRRouting/mergify/bp/stable/9.0/pr-14294
Jafar Al-Gharaibeh [Sat, 2 Sep 2023 03:18:55 +0000 (22:18 -0500)]
Merge pull request #14336 from FRRouting/mergify/bp/stable/9.0/pr-14294

pimd: Prevent crash when receiving register message when the RP() is … (backport #14294)

19 months agoMerge pull request #14334 from FRRouting/mergify/bp/stable/9.0/pr-14327
Jafar Al-Gharaibeh [Fri, 1 Sep 2023 21:12:09 +0000 (16:12 -0500)]
Merge pull request #14334 from FRRouting/mergify/bp/stable/9.0/pr-14327

bgpd: Fix `show bgp all rpki notfound` (backport #14327)

19 months agoMerge pull request #14339 from opensourcerouting/fix/backport_ce1f5d3774935e1694fd140...
Jafar Al-Gharaibeh [Fri, 1 Sep 2023 21:10:13 +0000 (16:10 -0500)]
Merge pull request #14339 from opensourcerouting/fix/backport_ce1f5d3774935e1694fd140858f3c3cdecf64ba4_9.0

bgpd: Add peers back to peer hash when peer_xfer_conn fails

19 months agobgpd: Add peers back to peer hash when peer_xfer_conn fails
Donald Sharp [Wed, 30 Aug 2023 11:25:06 +0000 (07:25 -0400)]
bgpd: Add peers back to peer hash when peer_xfer_conn fails

It was noticed that occassionally peering failed in a testbed
upon investigation it was found that the peer was not in the
peer hash and we saw these failure messages:

Aug 25 21:31:15 doca-hbn-service-bf3-s06-1-ipmi bgpd[3048]: %NOTIFICATION: sent to neighbor 2001:cafe:1ead:4::4 4/0 (Hold Timer Expired) 0 bytes
Aug 25 21:31:22 doca-hbn-service-bf3-s06-1-ipmi bgpd[3048]: [EC 100663299] Can't get remote address and port: Transport endpoint is not connected
Aug 25 21:31:22 doca-hbn-service-bf3-s06-1-ipmi bgpd[3048]: [EC 100663299] %bgp_getsockname() failed for  peer 2001:cafe:1ead:4::4 fd 27 (from_peer fd -1)
Aug 25 21:31:22 doca-hbn-service-bf3-s06-1-ipmi bgpd[3048]: [EC 33554464] %Neighbor failed in xfer_conn

root@doca-hbn-service-bf3-s06-1-ipmi:/var/log/hbn/frr# vtysh -c 'show bgp peerhash' | grep 2001:cafe:1ead:4::4
root@doca-hbn-service-bf3-s06-1-ipmi:/var/log/hbn/frr#

Upon looking at the code the peer_xfer_conn function can fail
and the bgp_establish code will then return before adding the
peer back to the peerhash.

This is only part of the failure.  The peer also appears to
be in a state where it is no longer initiating connection attempts
but that will be another commited fix when we figure that one out.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
19 months agopimd: Prevent crash when receiving register message when the RP() is unknown
Donald Sharp [Tue, 29 Aug 2023 18:59:34 +0000 (14:59 -0400)]
pimd: Prevent crash when receiving register message when the RP() is unknown

When receiving a register message for a Group, that the group has no
associated RP specified.  Prevent a crash from happening.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
(cherry picked from commit 54aa0bf6f294bd3a722d1707aa071ce97aa09a22)

19 months agobgpd: Fix `show bgp all rpki notfound`
Ryo Nakano [Fri, 1 Sep 2023 02:44:03 +0000 (11:44 +0900)]
bgpd: Fix `show bgp all rpki notfound`

The command "show bgp all rpki notfound" includes not only RPKI
notfound routes but also RPKI valid and invalid routes in its results.

Fix the code to display only RPKI notfound routes.

Old output:
```
frr# show bgp all rpki notfound

For address family: IPv4 Unicast
BGP table version is 0, local router ID is 10.0.0.1, vrf id 0
Default local pref 100, local AS 64512
Status codes:  s suppressed, d damped, h history, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

    Network          Next Hop            Metric LocPrf Weight Path
N   x.x.x.0/18       a.a.a.a                       100      0 64513 i
V   y.y.y.0/19       a.a.a.a                       200      0 64513 i
I   z.z.z.0/16       a.a.a.a                        10      0 64513 i

Displayed  3 routes and 3 total paths
```

New output:
```
frr# show bgp all rpki notfound

For address family: IPv4 Unicast
BGP table version is 0, local router ID is 10.0.0.1, vrf id 0
Default local pref 100, local AS 64512
Status codes:  s suppressed, d damped, h history, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

    Network          Next Hop            Metric LocPrf Weight Path
N   x.x.x.0/18       a.a.a.a                       100      0 64513 i

Displayed  1 routes and 3 total paths
```

Signed-off-by: Ryo Nakano <ryo.z.nakano@gmail.com>
(cherry picked from commit 65d6b56a063006c38ee695e711be3b3e78fb1745)

19 months agoMerge pull request #14321 from opensourcerouting/fix/backport_530be6a4d089600f1028439...
Jafar Al-Gharaibeh [Thu, 31 Aug 2023 17:01:15 +0000 (12:01 -0500)]
Merge pull request #14321 from opensourcerouting/fix/backport_530be6a4d089600f1028439ddec420ef651b983b_9.0

ospfd: Prevent use after free( and crash of ospf ) when no router ospf [backport]

19 months agoMerge pull request #14324 from FRRouting/mergify/bp/stable/9.0/pr-14322
Donald Sharp [Thu, 31 Aug 2023 15:05:30 +0000 (11:05 -0400)]
Merge pull request #14324 from FRRouting/mergify/bp/stable/9.0/pr-14322

Revert "bgpd: Add peers back to peer hash when peer_xfer_conn fails" (backport #14322)

19 months agoRevert "bgpd: Add peers back to peer hash when peer_xfer_conn fails"
Donatas Abraitis [Thu, 31 Aug 2023 14:33:57 +0000 (17:33 +0300)]
Revert "bgpd: Add peers back to peer hash when peer_xfer_conn fails"

peer is NULL, but we pass it to hash_get().

This reverts commit 6f8c927b03c454aa309b84cefccc4faa31e0c03f.

(cherry picked from commit bc81691247228ad14501b86afe63dff0daf96ab6)

19 months agoospfd: Prevent use after free( and crash of ospf ) when no router ospf
Donald Sharp [Wed, 30 Aug 2023 14:33:29 +0000 (10:33 -0400)]
ospfd: Prevent use after free( and crash of ospf ) when no router ospf

Consider this config:

router ospf
  redistribute kernel

Then you issue:

no router ospf

ospf will crash with a use after free.

The problem is that the event's associated with the
ospf pointer were shut off then the ospf_external_delete
was called which rescheduled the event.  Let's just move
event deletion to the end of the no router ospf.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
20 months agoMerge pull request #14311 from FRRouting/mergify/bp/stable/9.0/pr-14302
Jafar Al-Gharaibeh [Thu, 31 Aug 2023 05:22:41 +0000 (00:22 -0500)]
Merge pull request #14311 from FRRouting/mergify/bp/stable/9.0/pr-14302

pimd: When receiving a packet be more careful with length in pim_pim_… (backport #14302)

20 months agoMerge pull request #14309 from FRRouting/mergify/bp/stable/9.0/pr-14301
Jafar Al-Gharaibeh [Thu, 31 Aug 2023 05:22:24 +0000 (00:22 -0500)]
Merge pull request #14309 from FRRouting/mergify/bp/stable/9.0/pr-14301

bgpd: Add peers back to peer hash when peer_xfer_conn fails (backport #14301)

20 months agopimd: When receiving a packet be more careful with length in pim_pim_packet
Donald Sharp [Wed, 30 Aug 2023 12:54:33 +0000 (08:54 -0400)]
pimd: When receiving a packet be more careful with length in pim_pim_packet

a) If the length passed is the header length then it is possible that
assignment of data will happen without data actually existing.

b) Just move the assignment to after we ensure that the pim packet
received is the minimum possible length that can be received.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
(cherry picked from commit 3163c64d2893b5411d299952ff16dfc05e2c7a86)

20 months agobgpd: Add peers back to peer hash when peer_xfer_conn fails
Donald Sharp [Wed, 30 Aug 2023 11:25:06 +0000 (07:25 -0400)]
bgpd: Add peers back to peer hash when peer_xfer_conn fails

It was noticed that occassionally peering failed in a testbed
upon investigation it was found that the peer was not in the
peer hash and we saw these failure messages:

Aug 25 21:31:15 doca-hbn-service-bf3-s06-1-ipmi bgpd[3048]: %NOTIFICATION: sent to neighbor 2001:cafe:1ead:4::4 4/0 (Hold Timer Expired) 0 bytes
Aug 25 21:31:22 doca-hbn-service-bf3-s06-1-ipmi bgpd[3048]: [EC 100663299] Can't get remote address and port: Transport endpoint is not connected
Aug 25 21:31:22 doca-hbn-service-bf3-s06-1-ipmi bgpd[3048]: [EC 100663299] %bgp_getsockname() failed for  peer 2001:cafe:1ead:4::4 fd 27 (from_peer fd -1)
Aug 25 21:31:22 doca-hbn-service-bf3-s06-1-ipmi bgpd[3048]: [EC 33554464] %Neighbor failed in xfer_conn

root@doca-hbn-service-bf3-s06-1-ipmi:/var/log/hbn/frr# vtysh -c 'show bgp peerhash' | grep 2001:cafe:1ead:4::4
root@doca-hbn-service-bf3-s06-1-ipmi:/var/log/hbn/frr#

Upon looking at the code the peer_xfer_conn function can fail
and the bgp_establish code will then return before adding the
peer back to the peerhash.

This is only part of the failure.  The peer also appears to
be in a state where it is no longer initiating connection attempts
but that will be another commited fix when we figure that one out.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
(cherry picked from commit 6f8c927b03c454aa309b84cefccc4faa31e0c03f)

20 months agoMerge pull request #14297 from FRRouting/mergify/bp/stable/9.0/pr-14290
Donatas Abraitis [Wed, 30 Aug 2023 07:02:55 +0000 (10:02 +0300)]
Merge pull request #14297 from FRRouting/mergify/bp/stable/9.0/pr-14290

bgpd: Use treat-as-withdraw for tunnel encapsulation attribute (backport #14290)

20 months agoMerge pull request #14291 from FRRouting/mergify/bp/stable/9.0/pr-14243
Jafar Al-Gharaibeh [Wed, 30 Aug 2023 03:25:31 +0000 (22:25 -0500)]
Merge pull request #14291 from FRRouting/mergify/bp/stable/9.0/pr-14243

bgpd: Do not explicitly print MAXTTL value for ebgp-multihop vty output (backport #14243)

20 months agobgpd: Use treat-as-withdraw for tunnel encapsulation attribute
Donatas Abraitis [Thu, 13 Jul 2023 19:32:03 +0000 (22:32 +0300)]
bgpd: Use treat-as-withdraw for tunnel encapsulation attribute

Before this path we used session reset method, which is discouraged by rfc7606.

Handle this as rfc requires.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit bcb6b58d9530173df41d3a3cbc4c600ee0b4b186)

20 months agobgpd: Do not explicitly print MAXTTL value for ebgp-multihop vty output
Donatas Abraitis [Sun, 20 Aug 2023 21:01:42 +0000 (00:01 +0300)]
bgpd: Do not explicitly print MAXTTL value for ebgp-multihop vty output

1. Create /etc/frr/frr.conf
```
frr version 7.5
frr defaults traditional
hostname centos8.localdomain
no ip forwarding
no ipv6 forwarding
service integrated-vtysh-config
line vty
router bgp 4250001000
  neighbor 192.168.122.207 remote-as 65512
  neighbor 192.168.122.207 ebgp-multihop
```

2. Start FRR
`# systemctl start frr
`
3. Show running configuration. Note that FRR explicitly set and shows the default TTL (225)

```
Building configuration...

Current configuration:
!
frr version 7.5
frr defaults traditional
hostname centos8.localdomain
no ip forwarding
no ipv6 forwarding
service integrated-vtysh-config
!
router bgp 4250001000
 neighbor 192.168.122.207 remote-as 65512
 neighbor 192.168.122.207 ebgp-multihop 255
!
line vty
!
end
```
4. Copy initial frr.conf to frr.conf.new (no changes)
`# cp /etc/frr/frr.conf /root/frr.conf.new
`
5. Run frr-reload.sh:

```
$ /usr/lib/frr/frr-reload.py --test  /root/frr.conf.new
2023-08-20 20:15:48,050  INFO: Called via "Namespace(bindir='/usr/bin', confdir='/etc/frr', daemon='', debug=False, filename='/root/frr.conf.new', input=None, log_level='info', overwrite=False, pathspace=None, reload=False, rundir='/var/run/frr', stdout=False, test=True, vty_socket=None)"
2023-08-20 20:15:48,050  INFO: Loading Config object from file /root/frr.conf.new
2023-08-20 20:15:48,124  INFO: Loading Config object from vtysh show running

Lines To Delete
===============
router bgp 4250001000
 no neighbor 192.168.122.207 ebgp-multihop 255

Lines To Add
============
router bgp 4250001000
 neighbor 192.168.122.207 ebgp-multihop
```

Closes https://github.com/FRRouting/frr/issues/14242

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit 767aaa3a80489bfc4ff097f932fc347e3db25b89)

20 months agoMerge pull request #14269 from FRRouting/mergify/bp/stable/9.0/pr-14260
Donald Sharp [Thu, 24 Aug 2023 18:54:03 +0000 (14:54 -0400)]
Merge pull request #14269 from FRRouting/mergify/bp/stable/9.0/pr-14260

bgpd: Do not process NLRIs if the attribute length is zero (backport #14260)

20 months agobgpd: Do not process NLRIs if the attribute length is zero
Donatas Abraitis [Tue, 22 Aug 2023 19:52:04 +0000 (22:52 +0300)]
bgpd: Do not process NLRIs if the attribute length is zero

```
3  0x00007f423aa42476 in __GI_raise (sig=sig@entry=11) at ../sysdeps/posix/raise.c:26
4  0x00007f423aef9740 in core_handler (signo=11, siginfo=0x7fffc414deb0, context=<optimized out>) at lib/sigevent.c:246
5  <signal handler called>
6  0x0000564dea2fc71e in route_set_aspath_prepend (rule=0x564debd66d50, prefix=0x7fffc414ea30, object=0x7fffc414e400)
    at bgpd/bgp_routemap.c:2258
7  0x00007f423aeec7e0 in route_map_apply_ext (map=<optimized out>, prefix=prefix@entry=0x7fffc414ea30,
    match_object=match_object@entry=0x7fffc414e400, set_object=set_object@entry=0x7fffc414e400, pref=pref@entry=0x0) at lib/routemap.c:2690
8  0x0000564dea2d277e in bgp_input_modifier (peer=peer@entry=0x7f4238f59010, p=p@entry=0x7fffc414ea30, attr=attr@entry=0x7fffc414e770,
    afi=afi@entry=AFI_IP, safi=safi@entry=SAFI_UNICAST, rmap_name=rmap_name@entry=0x0, label=0x0, num_labels=0, dest=0x564debdd5130)
    at bgpd/bgp_route.c:1772
9  0x0000564dea2df762 in bgp_update (peer=peer@entry=0x7f4238f59010, p=p@entry=0x7fffc414ea30, addpath_id=addpath_id@entry=0,
    attr=0x7fffc414eb50, afi=afi@entry=AFI_IP, safi=<optimized out>, safi@entry=SAFI_UNICAST, type=9, sub_type=0, prd=0x0, label=0x0,
    num_labels=0, soft_reconfig=0, evpn=0x0) at bgpd/bgp_route.c:4374
10 0x0000564dea2e2047 in bgp_nlri_parse_ip (peer=0x7f4238f59010, attr=attr@entry=0x7fffc414eb50, packet=0x7fffc414eaf0)
    at bgpd/bgp_route.c:6249
11 0x0000564dea2c5a58 in bgp_nlri_parse (peer=peer@entry=0x7f4238f59010, attr=attr@entry=0x7fffc414eb50,
    packet=packet@entry=0x7fffc414eaf0, mp_withdraw=mp_withdraw@entry=false) at bgpd/bgp_packet.c:339
12 0x0000564dea2c5d66 in bgp_update_receive (peer=peer@entry=0x7f4238f59010, size=size@entry=109) at bgpd/bgp_packet.c:2024
13 0x0000564dea2c901d in bgp_process_packet (thread=<optimized out>) at bgpd/bgp_packet.c:2933
14 0x00007f423af0bf71 in event_call (thread=thread@entry=0x7fffc414ee40) at lib/event.c:1995
15 0x00007f423aebb198 in frr_run (master=0x564deb73c670) at lib/libfrr.c:1213
16 0x0000564dea261b83 in main (argc=<optimized out>, argv=<optimized out>) at bgpd/bgp_main.c:505
```

With the configuration:

```
frr version 9.1-dev-MyOwnFRRVersion
frr defaults traditional
hostname ip-172-31-13-140
log file /tmp/debug.log
log syslog
service integrated-vtysh-config
!
debug bgp keepalives
debug bgp neighbor-events
debug bgp updates in
debug bgp updates out
!
router bgp 100
 bgp router-id 9.9.9.9
 no bgp ebgp-requires-policy
 bgp bestpath aigp
 neighbor 172.31.2.47 remote-as 200
 !
 address-family ipv4 unicast
  neighbor 172.31.2.47 default-originate
  neighbor 172.31.2.47 route-map RM_IN in
 exit-address-family
exit
!
route-map RM_IN permit 10
 set as-path prepend 200
exit
!
```

The issue is that we try to process NLRIs even if the attribute length is 0.

Later bgp_update() will handle route-maps and a crash occurs because all the
attributes are NULL, including aspath, where we dereference.

According to the RFC 4271:

A value of 0 indicates that neither the Network Layer
         Reachability Information field nor the Path Attribute field is
         present in this UPDATE message.

But with a fuzzed UPDATE message this can be faked. I think it's reasonable
to skip processing NLRIs if both update_len and attribute_len are 0.

Reported-by: Iggy Frankovic <iggyfran@amazon.com>
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit 28ccc24d38df1d51ed8a563507e5d6f6171fdd38)

20 months agoMerge pull request #14267 from FRRouting/mergify/bp/stable/9.0/pr-14232
Donald Sharp [Thu, 24 Aug 2023 14:52:56 +0000 (10:52 -0400)]
Merge pull request #14267 from FRRouting/mergify/bp/stable/9.0/pr-14232

bgpd: Make sure we have enough data to read two bytes when validating AIGP (backport #14232)

20 months agobgpd: Make sure we have enough data to read two bytes when validating AIGP
Donatas Abraitis [Fri, 18 Aug 2023 08:28:03 +0000 (11:28 +0300)]
bgpd: Make sure we have enough data to read two bytes when validating AIGP

Found when fuzzing:

```
==3470861==ERROR: AddressSanitizer: heap-buffer-overflow on address 0xffff77801ef7 at pc 0xaaaaba7b3dbc bp 0xffffcff0e760 sp 0xffffcff0df50
READ of size 2 at 0xffff77801ef7 thread T0
    0 0xaaaaba7b3db8 in __asan_memcpy (/home/ubuntu/frr_8_5_2/frr_8_5_2_fuzz_clang/bgpd/bgpd+0x363db8) (BuildId: cc710a2356e31c7f4e4a17595b54de82145a6e21)
    1 0xaaaaba81a8ac in ptr_get_be16 /home/ubuntu/frr_8_5_2/frr_8_5_2_fuzz_clang/./lib/stream.h:399:2
    2 0xaaaaba819f2c in bgp_attr_aigp_valid /home/ubuntu/frr_8_5_2/frr_8_5_2_fuzz_clang/bgpd/bgp_attr.c:504:3
    3 0xaaaaba808c20 in bgp_attr_aigp /home/ubuntu/frr_8_5_2/frr_8_5_2_fuzz_clang/bgpd/bgp_attr.c:3275:7
    4 0xaaaaba7ff4e0 in bgp_attr_parse /home/ubuntu/frr_8_5_2/frr_8_5_2_fuzz_clang/bgpd/bgp_attr.c:3678:10
```

Reported-by: Iggy Frankovic <iggyfran@amazon.com>
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit f96201e104892e18493f24cf67bb713678e8237b)

20 months agoMerge pull request #14248 from FRRouting/mergify/bp/stable/9.0/pr-14245
Donald Sharp [Mon, 21 Aug 2023 17:19:22 +0000 (13:19 -0400)]
Merge pull request #14248 from FRRouting/mergify/bp/stable/9.0/pr-14245

bgpd: Don't read the first byte of ORF header if we are ahead of stream (backport #14245)

20 months agoMerge pull request #14250 from FRRouting/mergify/bp/stable/9.0/pr-14241
Donald Sharp [Mon, 21 Aug 2023 17:18:58 +0000 (13:18 -0400)]
Merge pull request #14250 from FRRouting/mergify/bp/stable/9.0/pr-14241

bgpd: Check the length of the rcv software version (backport #14241)

20 months agobgpd: Check the length of the rcv software version
Donatas Abraitis [Sun, 20 Aug 2023 18:37:25 +0000 (21:37 +0300)]
bgpd: Check the length of the rcv software version

Make sure we don't exceed the maximum of BGP_MAX_SOFT_VERSION.

The Capability Length SHOULD be no greater than 64.

Reported-by: Iggy Frankovic <iggyfran@amazon.com>
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit b4d09af9194d20a7f9f16995a062f5d8e3d32840)

20 months agobgpd: Don't read the first byte of ORF header if we are ahead of stream
Donatas Abraitis [Sun, 20 Aug 2023 19:15:27 +0000 (22:15 +0300)]
bgpd: Don't read the first byte of ORF header if we are ahead of stream

Reported-by: Iggy Frankovic iggyfran@amazon.com
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit 9b855a692e68e0d16467e190b466b4ecb6853702)

20 months agoMerge pull request #14210 from FRRouting/mergify/bp/stable/9.0/pr-14184
Donatas Abraitis [Wed, 16 Aug 2023 07:27:35 +0000 (10:27 +0300)]
Merge pull request #14210 from FRRouting/mergify/bp/stable/9.0/pr-14184

lib: Allow unsetting walltime-warning and cpu-warning (backport #14184)

20 months agovtysh: Print uniq lines when parsing `no service ...`
Donatas Abraitis [Fri, 11 Aug 2023 15:21:12 +0000 (18:21 +0300)]
vtysh: Print uniq lines when parsing `no service ...`

Before this patch:

```
no service cputime-warning
no service cputime-warning
no ipv6 forwarding
no service cputime-warning
no service cputime-warning
no service cputime-warning
```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit 8fa9f2bc2af058650c60a574ff99783ca098c046)

20 months agolib: Allow unsetting walltime-warning and cpu-warning
Donatas Abraitis [Fri, 11 Aug 2023 15:11:03 +0000 (18:11 +0300)]
lib: Allow unsetting walltime-warning and cpu-warning

With a negative form we get:

```
Internal CLI error [walltime_warning_str]
Internal CLI error [cputime_warning_str]
```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit fedf9119a1964abf8e476f239d81b3f4ce385b1d)

20 months agoMerge pull request #14192 from FRRouting/mergify/bp/stable/9.0/pr-14182
Donald Sharp [Sat, 12 Aug 2023 18:02:31 +0000 (14:02 -0400)]
Merge pull request #14192 from FRRouting/mergify/bp/stable/9.0/pr-14182

bgpd: evpn code was not properly unlocking rd_dest (backport #14182)

20 months agobgpd: evpn code was not properly unlocking rd_dest
Donald Sharp [Fri, 11 Aug 2023 13:53:42 +0000 (09:53 -0400)]
bgpd: evpn code was not properly unlocking rd_dest

Found some code where bgp was not unlocking the dest
and rd_dest when walking the tree attempting to
find something to install.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
(cherry picked from commit 1e8ac95bfb757b85d02514dd0f708974cdc22899)

20 months agoMerge pull request #14187 from FRRouting/mergify/bp/stable/9.0/pr-12524
Jafar Al-Gharaibeh [Fri, 11 Aug 2023 18:58:09 +0000 (13:58 -0500)]
Merge pull request #14187 from FRRouting/mergify/bp/stable/9.0/pr-12524

lib, zebra: Fix EVPN nexthop config order (backport #12524)

20 months agolib, zebra: Fix EVPN nexthop config order
Xiao Liang [Thu, 15 Dec 2022 09:04:32 +0000 (17:04 +0800)]
lib, zebra: Fix EVPN nexthop config order

Delay EVPN route addition to synchronize with rib_delete(), which now
uses early route queue.

Signed-off-by: Xiao Liang <shaw.leon@gmail.com>
(cherry picked from commit cea3f7f25a23e485d4f814b670c11c92249568e1)

20 months agoFRR Release 9.0.0 frr-9.0
Jafar Al-Gharaibeh [Tue, 8 Aug 2023 17:06:22 +0000 (12:06 -0500)]
FRR Release 9.0.0

- Major Highlights:
-   Introduce `mgmtd` daemon
-   Add BGP `neighbor path-attribute treat-as-withdraw` command
-   Add BGP ASN dot notation support (RFC 5396)
-   Add BGP Software Version capability
-   Allow BGP peering via 127.0.0.0/8
-   Deprecate BGP `internet` community - this is the Cisco-specific community, which is never been RFC-defined and confusing
-   Implement `match source-protocol` for BGP route maps
-   Implement BGP Node Target extended communities (draft-ietf-idr-node-target-ext-comm)
-   Implement Flex-Algo for SR-MPLS (RFC 9350)
-   Add support for IS-IS `advertise-passive-only`
-   Add IS-IS `affinity-map` support
-   Add the `graceful-restart hello-delay` OSPFv2/OSPFv3 command
-   Add the `ipv6 mld join` PIMv6 command
-   Add `allow-ecmp x` RIP/RIPng Command
-   Add BFD support for RIP
- For a full list of new features and bug fixes, please refer to:
-   https://frrouting.org/release/

Signed-off-by: Jafar Al-Gharaibeh <jafar@atcorp.com>
20 months agoMerge pull request #14132 from FRRouting/mergify/bp/stable/9.0/pr-14129 docker/9.0.0
Donatas Abraitis [Thu, 3 Aug 2023 19:30:29 +0000 (22:30 +0300)]
Merge pull request #14132 from FRRouting/mergify/bp/stable/9.0/pr-14129

bgpd: Fix for session reset issue caused by malformed core attributes  in update message (backport #14129)

20 months agobgpd: Fix session reset issue caused by malformed core attributes
Samanvitha B Bhargav [Wed, 2 Aug 2023 06:10:35 +0000 (23:10 -0700)]
bgpd: Fix session reset issue caused by malformed core attributes

RCA:
On encountering any attribute error for core attributes in update message,
the error handling is set to 'treat as withdraw' and
further parsing of the remaining attributes is skipped.
But the stream pointer is not being correctly adjusted to
point to the next NLRI field skipping the rest of the attributes.
This leads to incorrect parsing of the NLRI field,
which causes BGP session to reset.

Fix:
The stream pointer offset is rightly adjusted to point to the NLRI field correctly
when the malformed attribute is encountered and remaining attribute parsing is skipped.

Signed-off-by: Samanvitha B Bhargav <bsamanvitha@vmware.com>
(cherry picked from commit 70ff940fd1cbf920958116c558150ca5d3200eb8)

20 months agoMerge pull request #14128 from FRRouting/mergify/bp/stable/9.0/pr-14125
Donatas Abraitis [Wed, 2 Aug 2023 08:56:42 +0000 (11:56 +0300)]
Merge pull request #14128 from FRRouting/mergify/bp/stable/9.0/pr-14125

lib: Do not use time_t as a special Lua encoder/decoder (backport #14125)

20 months agolib: Do not use time_t as a special Lua encoder/decoder
Donatas Abraitis [Tue, 1 Aug 2023 11:08:25 +0000 (14:08 +0300)]
lib: Do not use time_t as a special Lua encoder/decoder

This is purely an integer (long long/long), and causes issues for 32-bit systems.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit 27dbf81a7375ccb352a35261c6c9ee3aa3fcb98f)

20 months agoMerge pull request #14122 from FRRouting/mergify/bp/stable/9.0/pr-14121
Donald Sharp [Tue, 1 Aug 2023 11:50:31 +0000 (07:50 -0400)]
Merge pull request #14122 from FRRouting/mergify/bp/stable/9.0/pr-14121

debian: Add missing protobuf dependency (backport #14121)

20 months agoMerge pull request #14123 from FRRouting/mergify/bp/stable/9.0/pr-14115
Donatas Abraitis [Tue, 1 Aug 2023 10:38:36 +0000 (13:38 +0300)]
Merge pull request #14123 from FRRouting/mergify/bp/stable/9.0/pr-14115

docker: Adjustments for Alpine 3.18 and buildx (backport #14115)

20 months agodocker: Install the apk packages regardless of the platform
Donatas Abraitis [Mon, 31 Jul 2023 08:05:15 +0000 (11:05 +0300)]
docker: Install the apk packages regardless of the platform

It was hardcoded to x86_64, but we build Alpine images for more platforms, let's
be dynamical here.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit 18becdc29e9898dc33806d072ed45c7ca9d45de2)

20 months agodocker: Use openssl instead of libressl
Donatas Abraitis [Mon, 31 Jul 2023 08:04:30 +0000 (11:04 +0300)]
docker: Use openssl instead of libressl

libressl is dropped from Alpine 3.18 for s390x.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit 617b450d0131e7925bb407fc7f4375c10fac426b)

20 months agodebian: Add missing protobuf dependency
Martin Winter [Mon, 31 Jul 2023 22:48:26 +0000 (00:48 +0200)]
debian: Add missing protobuf dependency

Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
(cherry picked from commit 62559e53acd849001e21535ffcd25923b709b2fc)

21 months agoFRR Release 9.0
Jafar Al-Gharaibeh [Wed, 26 Jul 2023 05:07:52 +0000 (00:07 -0500)]
FRR Release 9.0

- Major Highlights:
-   Introduce `mgmtd` daemon
-   Add BGP `neighbor path-attribute treat-as-withdraw` command
-   Add BGP ASN dot notation support (RFC 5396)
-   Add BGP Software Version capability
-   Allow BGP peering via 127.0.0.0/8
-   Deprecate BGP `internet` community - this is the Cisco-specific community, which is never been RFC-defined and confusing
-   Implement `match source-protocol` for BGP route maps
-   Implement BGP Node Target extended communities (draft-ietf-idr-node-target-ext-comm)
-   Implement Flex-Algo for SR-MPLS (RFC 9350)
-   Add support for IS-IS `advertise-passive-only`
-   Add IS-IS `affinity-map` support
-   Add the `graceful-restart hello-delay` OSPFv2/OSPFv3 command
-   Add the `ipv6 mld join` PIMv6 command
-   Add `allow-ecmp x` RIP/RIPng Command
-   Add BFD support for RIP
- For a full list of new features and bug fixes, please refer to:
-   https://frrouting.org/release/

Signed-off-by: Jafar Al-Gharaibeh <jafar@atcorp.com>
21 months agoMerge pull request #14090 from FRRouting/mergify/bp/dev/9.0/pr-14079
Donald Sharp [Tue, 25 Jul 2023 18:26:18 +0000 (14:26 -0400)]
Merge pull request #14090 from FRRouting/mergify/bp/dev/9.0/pr-14079

bgpd: The last_reset_cause in the peer structure is too large (backport #14079)

21 months agoMerge pull request #14091 from FRRouting/mergify/bp/dev/9.0/pr-14081
Donald Sharp [Tue, 25 Jul 2023 18:25:48 +0000 (14:25 -0400)]
Merge pull request #14091 from FRRouting/mergify/bp/dev/9.0/pr-14081

Bgp ringbuf cleanup (backport #14081)

21 months agobgpd: Reduce size of ibuf_work ringbuf
Donald Sharp [Mon, 24 Jul 2023 14:33:21 +0000 (10:33 -0400)]
bgpd: Reduce size of ibuf_work ringbuf

The ringbuf is 650k in size.  This is obscenely large and
in practical experimentation FRR never even approaches
that size at all.  Let's reduce this to 1.5 max packet sizes.

If a BGP_MAX_PACKET_SIZE packet is ever received having a bit
of extra space ensures that we can read at least 1 packet.

This also will significantly reduce memory usage when the
operator has a lot of peers.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
(cherry picked from commit fe1c72a57315a7c9fc3c63dd2fbf3a10dafbc10b)

21 months agobgpd: With io limit allow parsing to continue even if memory is low
Donald Sharp [Mon, 24 Jul 2023 14:13:32 +0000 (10:13 -0400)]
bgpd: With io limit allow parsing to continue even if memory is low

Commit: a0b937de428e14e869b8541f0b7810113d619c2e

Introduced the idea of a input Q packet limit.  Say you read in
635000 bytes of data and the input Q is already at it's limit
(currently 1000) then when bgp_process_reads runs it will
assert because there is less then a BGP_MAX_PACKET_SIZE in ibuf_work.

Don't assert as that it's irrelevant.  Even if we can't read a full packet
in let's let the whole system keep working as that as the input Q length
comes down we will start pulling down the ibuf_work and it will be ok.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
(cherry picked from commit 102bad0a9b65279358db787e2972a1711606d224)

21 months agobgpd: The last_reset_cause in the peer structure is too large
Donald Sharp [Mon, 24 Jul 2023 00:30:47 +0000 (20:30 -0400)]
bgpd: The last_reset_cause in the peer structure is too large

The last_reset_cause is a plain old BGP_MAX_PACKET_SIZE buffer
that is really enlarging the peer data structure.  Let's just
copy the stream that failed and only allocate how ever much
the packet size actually was.  While it's likely that we have
a reset reason, the packet typically is not going to be 65k
in size.  Let's save space.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
(cherry picked from commit 73b66bed83a38eea37371c6bbb0655c72c903293)

21 months agoMerge pull request #14077 from FRRouting/mergify/bp/dev/9.0/pr-14075
Donatas Abraitis [Sat, 22 Jul 2023 07:29:42 +0000 (10:29 +0300)]
Merge pull request #14077 from FRRouting/mergify/bp/dev/9.0/pr-14075

Remove unused memory allocations associated with bgp (backport #14075)

21 months agobgpd: Replace peer->ibuf_scratch
Donald Sharp [Fri, 21 Jul 2023 17:10:03 +0000 (13:10 -0400)]
bgpd: Replace peer->ibuf_scratch

The peer->ibuf_scratch was allocating 65535 * 10 bytes
for scratch space to hold data incoming from a read
from a peer.  When you have 4k peers this is 262,1400,000
or 262 mb of data.  Which is crazy large.  Especially
since the i/o pthread is reading per peer without
any chance of having the data interfere with other reads.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
(cherry picked from commit bdc17624059c1722e5208523cb06fe9b0ed7acb2)

21 months agobgpd: Remove withdraw_low from system, it is never used
Donald Sharp [Fri, 21 Jul 2023 16:46:31 +0000 (12:46 -0400)]
bgpd: Remove withdraw_low from system, it is never used

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
(cherry picked from commit 4215e8011b52abaccc96198cb8fa6d7034521dc9)

21 months agobgpd: Remove peer->sync array
Donald Sharp [Fri, 21 Jul 2023 16:41:35 +0000 (12:41 -0400)]
bgpd: Remove peer->sync array

It is never used.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
(cherry picked from commit c81d6d4d5fbd551888d9297038fa19eb27ef9d50)

21 months agobgpd: Remove peer->obuf_work
Donald Sharp [Fri, 21 Jul 2023 16:23:23 +0000 (12:23 -0400)]
bgpd: Remove peer->obuf_work

This is never used.  Free up another 65k of stream data
never used per peer.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
(cherry picked from commit acf4defcd80d7dd84e1fd4ed626e286eba41d848)

21 months agobgpd: Remove peer->scratch
Donald Sharp [Fri, 21 Jul 2023 16:14:59 +0000 (12:14 -0400)]
bgpd: Remove peer->scratch

This was only ever being allocated and de-allocated.
Let's save 65k per peer

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
(cherry picked from commit b157af0ac12f4d39e635ad814d4a42d670f4c328)

21 months agoMerge pull request #14068 from opensourcerouting/fix/backport_libyang_to_9.0
Donald Sharp [Fri, 21 Jul 2023 12:59:24 +0000 (08:59 -0400)]
Merge pull request #14068 from opensourcerouting/fix/backport_libyang_to_9.0

Switch to libyang 2.1.80

21 months agodocker: Use libyang 2.1.80 for Alpine builds
Donatas Abraitis [Thu, 20 Jul 2023 20:16:38 +0000 (23:16 +0300)]
docker: Use libyang 2.1.80 for Alpine builds

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
21 months agodocker: Move Alpine dependency packages to APKBUILD file
Donatas Abraitis [Thu, 20 Jul 2023 19:39:14 +0000 (22:39 +0300)]
docker: Move Alpine dependency packages to APKBUILD file

Do not mix APKBUILD and Dockerfile when installing dependencies.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
21 months agodocker: Install protobuf-c-devel for ubi8-minimal
Donatas Abraitis [Thu, 20 Jul 2023 19:33:10 +0000 (22:33 +0300)]
docker: Install protobuf-c-devel for ubi8-minimal

configure: error: in `/src':
configure: error: protobuf requested but protoc-c not found.  Install protobuf-c.
See `config.log' for more details

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
21 months agodocker: Use Alpine Linux 3.18
Donatas Abraitis [Thu, 20 Jul 2023 19:11:03 +0000 (22:11 +0300)]
docker: Use Alpine Linux 3.18

It has the newer libyang version 2.1.55, while 3.17 has 2.1.30.

3.19 will have 2.1.80.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
21 months agodocker: Use libyang 2.1.80
Donatas Abraitis [Thu, 20 Jul 2023 19:10:19 +0000 (22:10 +0300)]
docker: Use libyang 2.1.80

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
21 months agoredhat: Require libyang 2.1.80
Donatas Abraitis [Thu, 20 Jul 2023 18:54:22 +0000 (21:54 +0300)]
redhat: Require libyang 2.1.80

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
21 months agodebian: Require libyang 2.1.80
Donatas Abraitis [Thu, 20 Jul 2023 18:52:26 +0000 (21:52 +0300)]
debian: Require libyang 2.1.80

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
21 months agosnapcraft: Use libyang 2.1.80
Donatas Abraitis [Thu, 20 Jul 2023 18:46:38 +0000 (21:46 +0300)]
snapcraft: Use libyang 2.1.80

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
21 months agoMerge pull request #14063 from FRRouting/mergify/bp/dev/9.0/pr-14006
Donald Sharp [Thu, 20 Jul 2023 16:38:44 +0000 (12:38 -0400)]
Merge pull request #14063 from FRRouting/mergify/bp/dev/9.0/pr-14006

pim6d: Fixing core while running MLD conformance test. (backport #14006)

21 months agopim6d: Fixing core while running MLD conformance test.
Abhishek N R [Thu, 13 Jul 2023 09:54:27 +0000 (02:54 -0700)]
pim6d: Fixing core while running MLD conformance test.

While running MLD conformance test 9.2 core is getting generated.

Test setps:
1. ANVL: Listen (for upto <GeneralQueryRecvWaitTime> seconds) on <AIface-0>.
2. DUT: Send MLD General Query Message.
3. ANVL: Send MLD Report Message to <DIface-0> containing:
• IPv6 Source Address field set to link-local IPv6 Address of HOST-1
• IPv6 Destination Address field set to <McastAddrGroup>
• MLD Multicast Address field set to <McastAddrGroup>.
4. ANVL: Wait for <ProcessTime> seconds for DUT to process and add <Mcas- tAddrGroup> to its Multicast Address list.
5. ANVL: Send MLD General Query Message to <DIface-0> containing:
• IPv6 Source Address field set to link-local IPv6 Address of RTR-1 which is numerically less than the link-local IPv6 unicast address of <DIface-0>
• IPv6 Destination Address field set to link-scope all-nodes multicast address.
6. ANVL: Send MLD Multicast-Address-Specific Query Message to <DIface-0> containing:
• IPv6 Source Address field set to link-local IPv6 Address of RTR-1
• IPv6 Destination Address field set to <McastAddrGroup>
• MLD Multicast Address field set to <McastAddrGroup>
• MLD Maximum Response Delay field value set to 0.
7. ANVL: Verify that the Maximum Response Delay timer for <McastAd- drGroup> is set to zero.

While running above test, when group specific query is received we start gm_t_sg_expire timer.
Once this timer expires, we clear the corresponding entry.
During this sg->state was still set to JOIN. This happened because receiver went down without sending leave.

Added a condition to update the sg->state before starting the timer.
If receiver goes down without sending leave we will update sg->state to GM_SG_JOIN_EXPIRING or GM_SG_NOPRUNE_EXPIRING based on previous state.
If we receive a join then sg->state will be refreshed and will be updated to JOIN state.

Fixes: #13387
Signed-off-by: Abhishek N R <abnr@vmware.com>
(cherry picked from commit e9484001ee2a1030228de39c997e19f90e32516b)

21 months agoMerge pull request #14047 from FRRouting/mergify/bp/dev/9.0/pr-13918
Donatas Abraitis [Wed, 19 Jul 2023 11:09:01 +0000 (14:09 +0300)]
Merge pull request #14047 from FRRouting/mergify/bp/dev/9.0/pr-13918

bgpd: fix bgp evpn cli memory leaks. (backport #13918)

21 months agoMerge pull request #14045 from FRRouting/mergify/bp/dev/9.0/pr-14041
Donald Sharp [Tue, 18 Jul 2023 19:07:57 +0000 (15:07 -0400)]
Merge pull request #14045 from FRRouting/mergify/bp/dev/9.0/pr-14041

bgpd: Do not try to redistribute routes if we are shutting down (backport #14041)

21 months agobgpd: fix bgp evpn cli memory leaks.
Abhinay Ramesh [Mon, 3 Jul 2023 09:40:11 +0000 (09:40 +0000)]
bgpd: fix bgp evpn cli memory leaks.

problem:
In CLI config codeflow there are memory leaks in failure scenario

Fix:
Code changes are done to free ecommunity

Signed-off-by: Abhinay Ramesh <rabhinay@vmware.com>
(cherry picked from commit 56b895c17242a608731b6b03a4909f258805caee)

21 months agobgpd: Do not try to redistribute routes if we are shutting down
Donatas Abraitis [Tue, 18 Jul 2023 10:14:08 +0000 (13:14 +0300)]
bgpd: Do not try to redistribute routes if we are shutting down

When switching `router bgp`, `no router bgp` and doing redistributions, we should
ignore this action, otherwise memory leak happens:

```
Indirect leak of 400 byte(s) in 2 object(s) allocated from:
    0 0x7f81b36b3a06 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cc:153
    1 0x7f81b327bd2e in qcalloc lib/memory.c:105
    2 0x55f301d28628 in bgp_node_create bgpd/bgp_table.c:92
    3 0x7f81b3309d0b in route_node_new lib/table.c:52
    4 0x7f81b3309d0b in route_node_set lib/table.c:61
    5 0x7f81b330be0a in route_node_get lib/table.c:319
    6 0x55f301ce89df in bgp_redistribute_add bgpd/bgp_route.c:8907
    7 0x55f301dac182 in zebra_read_route bgpd/bgp_zebra.c:593
    8 0x7f81b334dcd7 in zclient_read lib/zclient.c:4179
    9 0x7f81b331d702 in event_call lib/event.c:1995
    10 0x7f81b325d597 in frr_run lib/libfrr.c:1213
    11 0x55f301b94b12 in main bgpd/bgp_main.c:505
    12 0x7f81b2b57082 in __libc_start_main ../csu/libc-start.c:308
```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit bddf5c13b277195e6e654401fe3f5490b183cda4)

21 months agoMerge pull request #14039 from FRRouting/mergify/bp/dev/9.0/pr-14033
Donatas Abraitis [Tue, 18 Jul 2023 12:22:22 +0000 (15:22 +0300)]
Merge pull request #14039 from FRRouting/mergify/bp/dev/9.0/pr-14033

Zebra same route (backport #14033)

21 months agozebra: Further handle route replace semantics
Donald Sharp [Mon, 17 Jul 2023 14:00:32 +0000 (10:00 -0400)]
zebra: Further handle route replace semantics

When an upper level protocol is installing a route X that needs to be
route replaced and at the same time the same or another protocol installs a
different route that depends on route X for nexthop resolution can leave
us with a state where the route is not accepted because zebra is still
really early in the route replace semantics ( route X is still on the work
Queue to be processed ) then the dependent route would not be installed.
This came up in the bgp_default_originate test cases frequently.

Further extendd the ROUTE_ENTR_ROUTE_REPLACING flag to cover this case
as well.  This has come up because the early route processing queueing
that was implemented late last year.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
(cherry picked from commit af80201876db00f339e2fbb9036942629aad9e67)