Commit Graph

29270 Commits

Author SHA1 Message Date
Donald Sharp
bddd6bb95e pimd: vrf may be NULL from pim_cmd_lookup_vrf
The call into pim_cmd_lookup_vrf may be NULL
and dereferencing it before ensuring that the
vrf pointer is non-NULL is a good way to crash.

A crash can be initiated in pim:

eva# show ip msdp vrf NOEXIST mesh-group
vtysh: error reading from pimd: Permission denied (13)Warning: closing connection to pimd because of an I/O error!
eva# 2022/08/15 11:47:38 [PHJDC-499N2][EC 100663314] STARVATION: task vtysh_rl_read (560b77f76de6) ran for 16777ms (cpu time 0ms)

eva#

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-15 15:45:05 -04:00
Donald Sharp
e89de02895 pimd: pim_upstream_add up must exist
When calling pim_upstream_add, the lookup for upstream
or the creation of the upstream cannot fail.  As such
up is never NULL.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-15 15:45:05 -04:00
Donald Sharp
29b458ef1f pimd: ch->upstream cannot be NULL
in pim_ifchannel.c there exists several spots where
the ch->upstream is assumed to be NULL.  This is not
possible.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-15 15:45:05 -04:00
Donald Sharp
7fc3f834e9 nhrpd: Use frr_weak_random()
Convert usage of rand() to frr_weak_random()

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-15 15:45:05 -04:00
Donald Sharp
3e140309a3 bgpd: Ensure bgp_vrf is non-null
When calling VTY_GET_CONTEXT to get the bgp pointer,
FRR needs to ensure that the pointer is valid.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-15 11:24:42 -04:00
Donald Sharp
50a38e23fd zebra: Remove unused assignment in zebra_dplane.c
Coverity spotted 3 places where `int ret = XXX` was
being used and FRR was immediately assigning a different
value.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-15 11:20:59 -04:00
Donald Sharp
0b368b50dd
Merge pull request #11785 from opensourcerouting/fix/remove_ospf6Enabled_from_JSON
ospf6d: Remove ospf6Enabled from JSON output
2022-08-12 20:29:47 -04:00
Donald Sharp
b481e15d7e
Merge pull request #11784 from anlancs/fix/ospfd-cost-zebra-speed
ospf6d: fix missing cost change
2022-08-12 20:29:16 -04:00
Donald Sharp
41bd80e5b9
Merge pull request #11795 from opensourcerouting/fix/drop_enable_systemd
redhat: Drop --enable-systemd from build specification
2022-08-12 20:28:27 -04:00
Donald Sharp
b2e2506c70
Merge pull request #11799 from sri-mohan1/sri-ospf-1
ospfd: debug string corrected
2022-08-12 20:27:55 -04:00
Donald Sharp
4058683909
Merge pull request #11798 from opensourcerouting/fix/convert_to_void
bgpd: Convert some int functions to void
2022-08-12 14:34:43 -04:00
sri-mohan1
88282a260c ospfd: debug string corrected
Debug string for ospf is corrected

Signed-off-by: sri-mohan1 <sri.mohan@samsung.com>
2022-08-12 18:37:42 +05:30
Donatas Abraitis
0b1fb52c2a bgpd: Convert some int functions to void
The output is not checked, we can have void instead.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-08-12 13:26:38 +03:00
Donatas Abraitis
192ab8212d redhat: Drop --enable-systemd from build specification
This option no longer exists.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-08-12 11:49:33 +03:00
Donatas Abraitis
1bf9112c24
Merge pull request #11789 from donaldsharp/pw_shutdown
zebra: Fix crash in shutdown w/ pw thread still running
2022-08-12 10:40:33 +03:00
Donald Sharp
86c4fdfac8 zebra: Fix crash in shutdown w/ pw thread still running
I am seeing the zebra_pw_install_retry timer thread crashing
on shutdown

The shutdown of the timer is only in an
if () {
   ...
} else if

Let's just always shut it down.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-11 16:31:28 -04:00
Donatas Abraitis
9951799fd3
Merge pull request #11757 from mjstapp/fix_bgp_cond_adv_dev
bgpd: conditional adv fixes
2022-08-11 21:57:21 +03:00
Quentin Young
0655090c6e bgpd: don't adv conditionally withdrawn routes
If we have conditional advertisement enabled, and conditionally withdrew
some prefixes, and then we do a 'clear bgp', those routes were getting
advertised again, and then withdrawn the next time the conditional
advertisement scanner executed.

When we go to advertise check the prefix against the conditional
advertisement status so we don't do that.

Signed-off-by: Quentin Young <qlyoung@nvidia.com>
2022-08-11 10:58:17 -04:00
Quentin Young
f373ce6cfc bgpd: apply cond-adv policy to update group
The new outbound filter to apply conditional advertisement policy was
not working properly due to complications with update groups. The two
routemaps were properly copied into the update group peer filter but not
the conditional advertisement state.

Signed-off-by: Quentin Young <qlyoung@nvidia.com>
Signed-off-by: Mark Stapp <mstapp@nvidia.com>
2022-08-11 10:58:17 -04:00
Donatas Abraitis
97b4474de1 ospf6d: Remove ospf6Enabled from JSON output
Time to deprecate it.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-08-11 17:32:24 +03:00
Donald Sharp
23f85c8dad
Merge pull request #11778 from AbhishekNR/ttable_mroute
pimd, pim6d:  Using ttable for displaying output of show mroute commands
2022-08-11 08:32:32 -04:00
Donald Sharp
2cf0c7fea0
Merge pull request #11782 from AbhishekNR/ttable_mroute_count
pimd, pim6d: Using ttable for displaying output of show mroute count command
2022-08-11 08:32:01 -04:00
anlan_cs
4f0d3f3e8a ospf6d: fix missing cost change
After all needed interfaces ( for example: interface "a1", vrf "vrf1", and
"a1" is binded to "vrf1" ) are ready/created, then restart/start frr. zebra
at startup will call `netlink_interface()` to process all interfaces and notify
all clients, but its calling `get_iflink_speed()` maybe fails for unexpected
order of the coming interfaces: when processing "a1", "vrf1" maybe is unknown
at that time. `if_zebra_speed_update()` timer is introduced to deal with this
order problem.

Currently only ospfd and ospf6d deal with this speed change to recalculated
route cost. ospfd can deal with this change, but ospf6d will wrongly missed it.

Since both `ipv6 ospf6 cost COST` and `auto-cost reference-bandwidth COST` are
not set, cost of this ospf6 interface should be calculated with interface
speed, but it is wrongly kept to `10`, which is based on interface speed being
`0` for it missed speed change. Further, ECMP function becomes invalid after
restart frr, beacuse some ospf6 interfaces of one ECMP are wrongly with cost
`10`.

To avoid missing, recalculate cost for ospf6 interfaces based on potentially
changed speed.

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-08-11 08:12:30 -04:00
Abhishek N R
88e9f3a009 pimd, pim6d: Using ttable for displaying "show ip/ipv6 mroute count" command output.
Signed-off-by: Abhishek N R <abnr@vmware.com>
2022-08-11 04:03:11 -07:00
Donald Sharp
68575e1605
Merge pull request #11775 from AbhishekNR/ttable
pimd, pim6d: Using ttable for displaying output of show multicast command
2022-08-10 12:29:26 -04:00
Abhishek N R
cb990f3819 pimd, pim6d: Using ttable for displaying "show ip/ipv6 mroute" command output.
Signed-off-by: Abhishek N R <abnr@vmware.com>
2022-08-10 09:05:40 -07:00
Donald Sharp
83e5d29b09
Merge pull request #11776 from opensourcerouting/fix/callback_readline
vtysh: Handle SIGTSTP (C-z) without exiting the vty shell
2022-08-10 12:05:21 -04:00
Donatas Abraitis
03efa836c6
Merge pull request #11774 from donaldsharp/zebra_meta_q_shakeups
Zebra meta q shakeups
2022-08-10 16:32:12 +03:00
Donatas Abraitis
149a3fffe0 vtysh: Handle SIGTSTP (C-z) without exiting the vty shell
After 4c92dd90d3 switching to poll-based I/O,
vtysh prompt exits on C-z signal.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-08-10 16:18:49 +03:00
Donald Sharp
1548fbbc44 zebra: Remove unused return codes in zebra_mpls.c
There are some return codes for functions that
are not really used.  Clean them up.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-10 07:15:31 -04:00
Donald Sharp
a310ebc114 zebra: Combine meta_queue_free and meta_queue_vrf_free functions
These functions essentially do the same thing.  Combine them
for the goodness of mankind.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-10 07:14:43 -04:00
Donald Sharp
57a5524578 zebra: System routes should be processed the same time as kernel
For whatever reason.  ZEBRA_ROUTE_SYSTEM routes were being processed
last.  Since a system route is just another kernel route type.  Let's
just switch it to be processed the same time as kernel routes.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-10 07:14:43 -04:00
Donald Sharp
014e732d3e zebra: Let's use enum for META Queue indexes
Convert the meta queue values to an enum and use
them.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-10 07:14:43 -04:00
Donald Sharp
4bbbd1f6b3 zebra: Explicitly call out the correct queue name
There were more than a few places where the NHG meta
queue was not being explicitly called out.  Let's
be consistent and use the same nomenclature as much
as possible when talking about metaQ's.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-10 07:14:43 -04:00
Donatas Abraitis
9ad7e387be
Merge pull request #11768 from donaldsharp/multiple_connected_installs
zebra: Don't install connected routes multiple times into FRR
2022-08-10 14:04:18 +03:00
Abhishek N R
7f0dc57f8e pimd, pim6d: Using ttable for displaying "show ip/ipv6 multicast count" command.
Signed-off-by: Abhishek N R <abnr@vmware.com>
2022-08-10 02:09:00 -07:00
Rafael Zalamena
ac2f410c37
Merge pull request #11668 from rampxxxx/bfd_rtt_in_echo_pkt
BFDD: Add RTT to BFD IPV4 Echo packet processing
2022-08-09 15:20:24 +00:00
Russ White
8eb2b1e8ea
Merge pull request #11752 from opensourcerouting/fix/update_policy_on_filters
bgpd: Handle ORF remove-all events correctly and update ORF prefix-list on changes
2022-08-09 08:32:33 -04:00
Russ White
d4800aaef3
Merge pull request #11770 from donaldsharp/static_mpls_label_change
staticd: When changing the underlying nh ensure it is reinstalled
2022-08-09 08:23:23 -04:00
Jafar Al-Gharaibeh
126b4166f3
Merge pull request #11765 from lyq140/patch-pimDoc
doc: pimd needs linux kernel 4.19(IGMPMSG_WRVIFWHOLE)
2022-08-09 01:12:18 -05:00
ron
0abc8254e9 doc: pimd needs linux kernel 4.19(IGMPMSG_WRVIFWHOLE)
Signed-off-by: ron <lyq140hf2006@163.com>
2022-08-09 09:13:08 +08:00
Donald Sharp
82dd2fe72e
Merge pull request #11769 from opensourcerouting/fix/no_rib_implied
bgpd: When specifying listen address for bgpd we shouldn't imply no fib flag
2022-08-08 18:34:39 -04:00
Donald Sharp
eb6249d27d staticd: When changing the underlying nh ensure it is reinstalled
There exists some nexthop attributes that are not the unique
part of the nexthop and if you change the static route
with those values then the route is not being updated
in zebra with the new values:

Example of brokenness:

eva# conf
eva(config)# ip route 1.2.3.9/32 192.168.119.1 enp39s0 label 16020
eva(config)# do show ip route 1.2.3.9
Routing entry for 1.2.3.9/32
  Known via "static", distance 1, metric 0, best
  Last update 00:00:05 ago
  * 192.168.119.1, via enp39s0, label 16020, weight 1

eva(config)# ip route 1.2.3.9/32 192.168.119.1 enp39s0 label 16040
eva(config)# do show ip route 1.2.3.9
Routing entry for 1.2.3.9/32
  Known via "static", distance 1, metric 0, best
  Last update 00:00:12 ago
  * 192.168.119.1, via enp39s0, label 16020, weight 1

Fixed behavior:

eva# conf
eva(config)# ip route 1.2.3.10/32 192.168.119.1 enp39s0 label 16020
eva(config)# do show ip route 1.2.3.10
Routing entry for 1.2.3.10/32
  Known via "static", distance 1, metric 0, best
  Last update 00:00:04 ago
  * 192.168.119.1, via enp39s0, label 16020, weight 1

eva(config)# ip route 1.2.3.10/32 192.168.119.1 enp39s0 label 16040
eva(config)# do show ip route 1.2.3.10
Routing entry for 1.2.3.10/32
  Known via "static", distance 1, metric 0, best
  Last update 00:00:01 ago
  * 192.168.119.1, via enp39s0, label 16040, weight 1

I've gone through most of the items in staticd that can change
the nexthop
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-08 16:02:40 -04:00
Donatas Abraitis
6595c22971 bgpd: When specifying listen address for bgpd we shouldn't imply no fib flag
When `-l` is used, then no routes are exported to the kernel.

```
$ grep bgpd_options /etc/frr/daemons
bgpd_options="   -A 127.0.0.1 -l 127.0.0.2"
```

Before:

```
donatas-pc# sh run | include no-rib
bgp no-rib
donatas-pc#
```

After:

```
donatas-pc# sh run | include no-rib
donatas-pc#
```

Signed-off-by: Kris Shannon <k.shannon@amaze.com.au>
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-08-08 21:30:14 +03:00
Donald Sharp
db1c2223fd zebra: Don't install connected routes multiple times into FRR
When moving an interface between vrf's we do not need
to install the connected routes multiple times.

eva# show ip route vrf all
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
       F - PBR, f - OpenFabric,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

VRF BLUE:
C>* 4.5.6.7/32 is directly connected, dummy7, 00:00:10

VRF default:
K>* 0.0.0.0/0 [0/100] via 192.168.119.1, enp39s0, 00:00:10
C>* 192.168.119.0/24 is directly connected, enp39s0, 00:00:10
eva# exit
sharpd@eva ~/f/t/topotests (multiple_connected_installs)> sudo ip link add GREEN type vrf table 11000
sharpd@eva ~/f/t/topotests (multiple_connected_installs)> sudo ip link set GREEN up
sharpd@eva ~/f/t/topotests (multiple_connected_installs)> sudo ip link set dummy7 master GREEN
sharpd@eva ~/f/t/topotests (multiple_connected_installs)> vtysh

Hello, this is FRRouting (version 8.4-dev).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

eva# show ip route vrf all
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
       F - PBR, f - OpenFabric,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

VRF GREEN:
C>* 4.5.6.7/32 is directly connected, dummy7, 00:00:05

VRF default:
K>* 0.0.0.0/0 [0/100] via 192.168.119.1, enp39s0, 00:01:03
C>* 192.168.119.0/24 is directly connected, enp39s0, 00:01:03
eva# exit
sharpd@eva ~/f/t/topotests (multiple_connected_installs)> sudo ip link set dummy7 nomaster
sharpd@eva ~/f/t/topotests (multiple_connected_installs)> sudo vtysh -c "show ip route vrf all"
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
       F - PBR, f - OpenFabric,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

VRF default:
K>* 0.0.0.0/0 [0/100] via 192.168.119.1, enp39s0, 00:03:22
C>* 4.5.6.7/32 is directly connected, dummy7, 00:00:08
C>* 192.168.119.0/24 is directly connected, enp39s0, 00:03:22
sharpd@eva ~/f/t/topotests (multiple_connected_installs)>
 @  11 0:-*                                                                                                                                                         5h50m 0.06 24x1.9GHz 31.4G26% 426G70% 2022-08-08 13:49:24

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-08 13:51:24 -04:00
Donatas Abraitis
8d60d4da50
Merge pull request #11501 from donaldsharp/mpls_turns_on
Mpls turns on
2022-08-08 19:04:49 +03:00
Donald Sharp
cbc08d1fb9 tests: Convert one test to use interface based mpls config
To prove that this works.  Modify a test that uses mpls to
turn on mpls for the interfaces that need mpls via the
new mpls command.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-08 09:15:22 -04:00
Donald Sharp
39ffa8e8e8 zebra: Add a mpls enable interface node command
Allow individual interfaces to turn on/off the mpls subsystem
for it in linux.

sharpd@eva:~/frr9$ sudo sysctl -a | grep enp39s0 | grep mpls
net.mpls.conf.enp39s0.input = 0
sharpd@eva:~/frr9$ vtysh -c "conf" -c "int enp39s0" -c "mpls enable"
sharpd@eva:~/frr9$ sudo sysctl -a | grep enp39s0 | grep mpls
net.mpls.conf.enp39s0.input = 1
sharpd@eva:~/frr9$ vtysh -c "conf" -c "int enp39s0" -c "no mpls enable"
sharpd@eva:~/frr9$ sudo sysctl -a | grep enp39s0 | grep mpls
net.mpls.conf.enp39s0.input = 0
sharpd@eva:~/frr9$

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-08 09:15:22 -04:00
Donald Sharp
c87f5c2392 zebra: Notice when an interface is turned on w/ mpls and enable mpls subsystem
Currently when FRR starts up it queries the kernel to see if mpls is turned on.
If not FRR does not enable zebra's mpls subsection.  If at a later time mpls
is turned on, let's notice that an interface now is enabled for mpls( thus
implying that all the bits and bobs in the kernel are now setup properly ).

a) convert mpls_enabled to a bool
b) abstract a new function zebra_mpls_turned_on and call it
when FRR notices that an interface now has mpls enabled.
c) mpls_processq_init cannot fail, so actually notice that
and don't have special code to detect a failure.

New results:

sharpd@eva ~> vtysh -c "show zebra"
 OS                           Linux(5.10.0-12-amd64)
 ECMP Maximum                 128
 v4 Forwarding                On
 v6 Forwarding                On
 MPLS                         Off
 EVPN                         Off
 Kernel socket buffer size    90000000
 VRF                          l3mdev Available
 ASIC offload                 Unavailable
 RA                           Compiled in
 RFC 5549                     BGP is not using
 Kernel NHG                   Available
 v4 All LinkDown Routes       Off
 v4 Default LinkDown Routes   Off
 v6 All LinkDown Routes       Off
 v6 Default LinkDown Routes   Off
 v4 All MC Forwarding         On
 v4 Default MC Forwarding     Off
 v6 All MC Forwarding         On
 v6 Default MC Forwarding     Off

                            Route      Route      Neighbor   LSP        LSP
VRF                         Installs   Removals    Updates   Installs   Removals
default                           26          7          0          0          0
<turn on mpls_iptunnel and mpls_router modules in the kernel and then do this>:
sharpd@eva ~> sudo sysctl -w net.mpls.conf.enp39s0.input=1
[sudo] password for sharpd:
net.mpls.conf.enp39s0.input = 1
sharpd@eva ~> vtysh -c "show zebra"
 OS                           Linux(5.10.0-12-amd64)
 ECMP Maximum                 128
 v4 Forwarding                On
 v6 Forwarding                On
 MPLS                         On
 EVPN                         Off
 Kernel socket buffer size    90000000
 VRF                          l3mdev Available
 ASIC offload                 Unavailable
 RA                           Compiled in
 RFC 5549                     BGP is not using
 Kernel NHG                   Available
 v4 All LinkDown Routes       Off
 v4 Default LinkDown Routes   Off
 v6 All LinkDown Routes       Off
 v6 Default LinkDown Routes   Off
 v4 All MC Forwarding         On
 v4 Default MC Forwarding     Off
 v6 All MC Forwarding         On
 v6 Default MC Forwarding     Off

                            Route      Route      Neighbor   LSP        LSP
VRF                         Installs   Removals    Updates   Installs   Removals
default                           26          7          0          0          0
sharpd@eva ~>

I am doing this work because FRR keeps having operators not know about how
to properly use mpls.  Let's make FRR behave a bit better in this weird edge
case.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-08 09:15:22 -04:00
Donald Sharp
e63831f133 zebra: Add IF_ZEBRA_DATA_X define
There are 2 defines IF_ZEBRA_MULTICAST_X and
IF_ZEBRA_SHUTDOWN_X macros that do the same
thing.  Combine into one.

Future commits will use the IF_ZEBRA_DATA_X macro
as well.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-08 09:15:22 -04:00