Commit Graph

23995 Commits

Author SHA1 Message Date
Donald Sharp
eda0ea2949 lib: Remove dead code
The distribute_list_init command is not used and is setup
code that will never be used because it makes assumptions about
how distribute-lists work that are fundamentally incorrect.

Remove the code.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-05-04 16:23:37 -04:00
Donald Sharp
32282a6ecf babeld: Allow babeld to actually register to use distribute-list
The `distribute-list` commands were registered but never setup
properly to work.  Put the commands in place.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-05-04 16:23:37 -04:00
Donald Sharp
5463d7c374 eigrpd: fix distribute-list... command for EIGRP
The distribute-list command was being registered but never
setup properly in EIGRP.  Put it into place.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-05-04 16:23:37 -04:00
Donald Sharp
458133dbc5 lib, ripd, ripngd, vtysh: Move distribute list to correct spot
Allow the `distribute-list...` command in ripd and ripngd to
work correctly.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-05-04 16:23:37 -04:00
Donald Sharp
df19c76a53 lib: Abstract parsing of distribute lists
Abstract the parsing of distribute lists so that we
don't have as much cut-n-paste code.

This is a setup commit for future work.  In effect
current distribute-list handling is all kinds of messed up

a) eigrp and babel both attempt to use distribute-lists, they just plain
don't work.
b) `distribute-list` is only sent to rip.  `ipv6 distribute-list`
is sent to ripngd.  If you use `distribute-list` under `router ripng`
it sends the command to rip but ripd is in the wrong mode and it
never works.
c) Should ripngd care about v4 and v6 specific distribute-lists?
This dichotomy was added for babel but babel has been broke
about this since day 1( see a ).

All in all we need to unwind this whole mess.  Make distribute-list
commands specific to the daemons( so that we can be in the right
sub-mode ).  But the parsing is going to be the same across all
daemons.  So let's provide that functionality in `lib/distribute.c`

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-05-04 16:23:37 -04:00
Rafael Zalamena
bc79672d3e
Merge pull request #8499 from donaldsharp/ospf_what
Ospf what
2021-05-04 14:41:42 -03:00
Russ White
52a65a8cc6
Merge pull request #8587 from volta-networks/fix_ospf6_message_logs
ospf6d: Make debug logs configurable to only display message headers
2021-05-04 11:53:17 -04:00
Russ White
4ae7bb11fc
Merge pull request #8620 from donaldsharp/redistribution_and_infinite
zebra: Allow redistribution for routes selected
2021-05-04 11:14:35 -04:00
Russ White
be7916a032
Merge pull request #8504 from ranjanyash54/link_lsa_priority
ospf6d: Send Link LSAs when interface priority is changed
2021-05-04 10:24:45 -04:00
Russ White
7e4085ca98
Merge pull request #8506 from ranjanyash54/route_json_change
ospf6d: Change structure of "show ipv6 ospf6 route json" command
2021-05-04 10:24:03 -04:00
Donald Sharp
674c29dd23 ospfd: Use %pI4 in some places
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-05-04 09:06:14 -04:00
Donald Sharp
5e5181bbe2 ospfd: Fix some deep indentation issues in ospf_asbr.c
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-05-04 09:06:13 -04:00
Donald Sharp
b259f5af14 ospfd: Fix indentation in ospf_is_type_redistributed
clang-format was not happy.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-05-04 09:03:27 -04:00
Donald Sharp
5d8c8d0b1d ospfd: Do not use case default for switches that have enum
Found a couple spots where FRR was using `case default` when
using a switch over an enum.  In this case we *must* enumerate
all states as part of the switch.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-05-04 09:03:27 -04:00
Donald Sharp
6ec9c6a899 ospfd: Cleanup some awful deep indentation in ospf_zebra.c
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-05-04 09:03:27 -04:00
Russ White
8ad44ef497
Merge pull request #8514 from donaldsharp/connected_is_limited
zebra: Allow one connected route per network mask on a interface
2021-05-04 07:45:33 -04:00
Russ White
c973779d02
Merge pull request #8615 from dslicenc/eigrp-asn-check
eigrpd: Test for EIGRP AS number and ensure it's the same
2021-05-04 07:43:48 -04:00
Donald Sharp
2fd97fd87d
Merge pull request #8614 from opensourcerouting/msdp-fixes
pimd: MSDP trivial fixes
2021-05-04 07:21:51 -04:00
Igor Ryzhov
10839180a9
Merge pull request #8621 from donaldsharp/bgp_pbr_clang_sa
bgpd: Prevent test against uninited data
2021-05-04 14:06:51 +03:00
Donald Sharp
fc1391a840
Merge pull request #8617 from opensourcerouting/pim-bsm-cleanup
lib, pimd: move bsm code to typesafe lists
2021-05-04 07:05:24 -04:00
Donatas Abraitis
98d742c6f7
Merge pull request #8606 from donaldsharp/peer_cleanups
Peer cleanups
2021-05-04 08:47:26 +03:00
Donald Sharp
645a1f1d5f bgpd: Prevent test against uninited data
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-05-03 21:03:31 -04:00
Donald Sharp
9f54dfd8b7
Merge pull request #8613 from opensourcerouting/build-fix-pb-assert
build: fix assert() use in .pb-c.c files
2021-05-03 20:46:58 -04:00
Donald Sharp
c3d0d6e8a1 zebra: Allow redistribution for routes selected
Current code has an inconsistent behavior with redistribute routes.
Suppose you have a kernel route that is being read w/ a distance
of 255:

eva# show ip route kernel
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

K>* 0.0.0.0/0 [0/100] via 192.168.161.1, enp39s0, 00:06:39
K>* 4.4.4.4/32 [255/8192] via 192.168.161.1, enp39s0, 00:01:26
eva#

If you have redistribution already turned on for kernel routes
you will be notified of the 4.4.4.4/32 route.  If you turn
on kernel route redistribution watching after the 4.4.4.4/32 route
has been read by zebra you will never learn of it.

There is no need to look for infinite distance in the redistribution
code.  Either we are selected or not.  In other words non kernel routes
with an 255 distance are never installed so the checks were pointless.

So let's just remove the distance checking and tell interested parties
about the 255 kernel route if it exists.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-05-03 19:53:12 -04:00
Renato Westphal
e34248cf3f
Merge pull request #8577 from volta-networks/fix_ldp_broken_lsps
ldpd: make allowing broken-lsps to be installed configurable
2021-05-03 20:46:32 -03:00
Igor Ryzhov
c0ec883b45
Merge pull request #8603 from Fredi-raspall/pr_tilfa_link_fallback
Pr tilfa link fallback
2021-05-03 22:51:38 +03:00
David Lamparter
62cd66d90b tests: add scapy to topotests Docker
Not having scapy in the docker image leads to very obtuse failures in
the pim bsm tests (obtuse, as in, it just fails without any hint as to
why...)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2021-05-03 20:56:55 +02:00
David Lamparter
02fb02de37 lib: kill unused list_filter_out_nodes()
pimd was the only user of this function, and that has gone away now.
So just kill the function.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2021-05-03 20:56:55 +02:00
David Lamparter
fdab294037 pimd: cleanup & convert bsm_rpinfo to TS list
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2021-05-03 20:56:51 +02:00
David Lamparter
d4a4525c12 pimd: cleanup & convert bsm_info to TS list
Just some cleanup before I touch this code;  switching to typesafe list
macros & putting the data directly inline.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2021-05-03 20:55:59 +02:00
David Lamparter
6669282091 pimd: remove unused sz_timer
... yes we may need it later, but if and when that happens we can put it
back there.  No point carrying around unused things.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2021-05-03 20:55:04 +02:00
David Lamparter
507e0e5d66 lib: add *_swap_all to typesafe containers
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2021-05-03 20:55:04 +02:00
Don Slice
9f92e2352b eigrpd: Test for EIGRP AS number and ensure it's the same
When receiving a packet, ensure that the AS number is the same.

Fixes: 8515
Signed-off-by: Don Slice <dslice@nvidia.com>
2021-05-03 14:26:27 -04:00
David Lamparter
20a4a2e9e6 build: fix assert() use in .pb-c.c files
The .pb-c.c files pick up our assert() override, but that needs config.h
to be included too, and that needs to go at the very top of the file...

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2021-05-03 18:48:33 +02:00
Rafael Zalamena
ccfd681d98 doc: improve PIM documentation
Remove duplicates and explain MSDP better.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2021-05-03 13:38:21 -03:00
Rafael Zalamena
8c70c9e290 pimd: show MSDP configuration
Display the MSDP peer configuration in `show running-config` so it can
be saved on configuration write.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2021-05-03 12:30:40 -03:00
Rafael Zalamena
5a1a392032 pimd: reduce code duplication
Standardize a function to get the current VRF node name.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2021-05-03 12:30:02 -03:00
Fredi Raspall
c2b0cb2cc4 doc: document link-fallback ti-lfa option
Signed-off-by: Fredi Raspall <fredi@voltanet.io>
2021-05-03 17:27:37 +02:00
Fredi Raspall
ce4eccfa80 isisd: link protection optional fallback in ti-lfa
The current implementation of TI-LFA computes link-protecting
repair paths (even when node protection is enabled) to have repair
paths to all destinations when no node-protecting repair has been
found. This may be desired or not. E.g. the link-protecting paths
may use the protected node and be, therefore, useless if the node
fails. Also, computing link-protecting repairs incurs extra
calculations.

With this patch, when node protection is enabled, link protecting
repair paths are only computed if "link-fallback" is specified in
the configuration, on a per interface and IS-IS level.

Signed-off-by: Fredi Raspall <fredi@voltanet.io>
2021-05-03 17:27:37 +02:00
Mark Stapp
f71e1ff6a9
Merge pull request #8545 from opensourcerouting/assert-our-own
*: make our own assert() actually work
2021-05-03 11:17:36 -04:00
Igor Ryzhov
92046e6540
Merge pull request #8605 from donaldsharp/libyang_version
build: Limit libyang version to under 2.0
2021-05-03 16:55:11 +03:00
Mark Stapp
2a27bd976c
Merge pull request #8571 from donaldsharp/ifp_speed
zebra: Allow interface up events to read speed
2021-05-03 09:39:41 -04:00
Donald Sharp
9298056138 zebra: Allow one connected route per network mask on a interface
Currently FRR reads the kernel for interface state and FRR
creates a connected route per address on an interface.  If
you are in a situation where you have multiple addresses
on an interface just create 1 connected route for them:

sharpd@eva:/tmp/topotests$ vtysh -c "show int dummy302"
Interface dummy302 is up, line protocol is up
  Link ups:       0    last: (never)
  Link downs:     0    last: (never)
  vrf: default
  index 3279 metric 0 mtu 1500 speed 0
  flags: <UP,BROADCAST,RUNNING,NOARP>
  Type: Ethernet
  HWaddr: aa:4a:ed:95:9f:18
  inet 10.4.1.1/24
  inet 10.4.1.2/24 secondary
  inet 10.4.1.3/24 secondary
  inet 10.4.1.4/24 secondary
  inet 10.4.1.5/24 secondary
  inet6 fe80::a84a:edff:fe95:9f18/64
  Interface Type Other
  Interface Slave Type None
  protodown: off

sharpd@eva:/tmp/topotests$ vtysh -c "show ip route connected"
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

C>* 10.4.1.0/24 is directly connected, dummy302, 00:10:03
C>* 192.168.161.0/24 is directly connected, enp39s0, 00:10:03

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-05-03 09:17:22 -04:00
lynne
ff5279ba48 ldpd: make allowing broken-lsps to be installed with pop operation configurable
If LDP is miss configured in a setup and the router has LSPs with no remote
label, this code installs the LSP with a pop instruction of the top-level
label so the packet can be forwarded using IP.   This is a best-effort
attempt to deliver labeled IP packets to their final destination instead of
dropping them.    If this config is turned off the code will only install
LSPs that have a valid remote label.

Signed-off-by: Lynne Morrison <lynne@voltanet.io>
2021-05-03 09:02:36 -04:00
David Lamparter
adf1bb9f0c
Merge pull request #8566 from rubensfig/isis_metricstyle
doc: isis: document default value for metric-style
2021-05-03 13:30:35 +02:00
David Lamparter
0a1970c356
Merge pull request #8599 from Jafaral/old-doc
doc: remove obsolete Netlink discussion, fix svi cmd doc
2021-05-03 10:45:38 +02:00
David Lamparter
9cd090488c
Merge pull request #8479 from mjstapp/zlog_immediate 2021-05-03 10:40:54 +02:00
David Lamparter
c8b084aab7
Merge pull request #8607 from donaldsharp/better_reasoning
lib: Provide some better error handling for operator
2021-05-03 10:07:43 +02:00
Yash Ranjan
17ab36c6c4 ospf6d: Send Link LSAs when interface priority is changed
As per the ospfv3 conformance test 24.3

SETUP: Configure DIface-0 with priority set to <hprty>.
ANVL: Establish full adjacency with DUT for neighbor Rtr-0-A on DIface-0.
DUT: Exchange all the <OSPF-DD> packets, during adjacency establish- ment.
ANVL: Verify that the received <OSPF-DD> packets contain: • one header of Link-LSA, originated by DUT.
ANVL: Send <OSPF-LSR> packet from neighbor Rtr-0-A to DIface-0 con- taining:
• One Request Tuple for Link-LSA originated by DUT.
ANVL: Listen (for upto 2 * <RxmtInterval> seconds) on DIface-0. DUT: Send <OSPF-LSU> packet.
ANVL: Verify that the received <OSPF-LSU> packet contains:
• •
one Link-LSA, originated by DUT, contains: Rtr Pri field set to <hprty>.
----------
When interface priority is changed Link LSAs should be tranmitted
with the priority set.

When the link priorty chanages, the drbdr algorithm is called, which
can change the state of the interface. But if the state does not
changes then LINK LSAs are not transmitted.

This PR fixes this issue. If the state is changed, then LINK LSAs
will anyways be tranmitted. But in case the state is not changed,
even in that case Link LSAs are tranmitted.

Signed-off-by: Yash Ranjan <ranjany@vmware.com>
2021-05-02 10:19:16 -07:00
David Lamparter
4f1a6d98da lib: fix random C++ compat problem w/ printfrr
These hoops to get warnings for mis-printing `uint64_t` are apparently
breaking some C++ bits...

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2021-05-02 16:27:17 +02:00