Commit Graph

22265 Commits

Author SHA1 Message Date
Philippe Guibert
6cb6c403f1 topotests: python3, replace execfile with exec
python3 does not support execfile implementation.
replace it with open and exec api that are available in both python 2
and 3 implementations.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2020-11-25 16:19:33 +00:00
Donald Sharp
cf0f13de29 ospfd: Prevent crash by accessing memory not owned.
When allocating memory for the `struct ospf_metric` we
were using `uint32_t` instead of the actual size of this
structure.  When we wrote to it we would be writing
into other people's memory.

Found-by: Amol Lad
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2020-11-25 09:49:28 -05:00
Donald Sharp
59c5b83b58 ldpd: Prevent usage after free
We are using data after it has been freed and handed back to the
OS.
Address Sanitizer output:

error	23-Nov-2020 18:53:57	ERROR: AddressSanitizer: heap-use-after-free on address 0x631000024838 at pc 0x55f825998f58 bp 0x7fffa5b0f5b0 sp 0x7fffa5b0f5a0
error	23-Nov-2020 18:53:57	READ of size 4 at 0x631000024838 thread T0
error	23-Nov-2020 18:53:57	    #0 0x55f825998f57 in lde_imsg_compose_parent_sync ldpd/lde.c:226
error	23-Nov-2020 18:53:57	    #1 0x55f8259ca9ed in vlog ldpd/log.c:48
error	23-Nov-2020 18:53:57	    #2 0x55f8259cb1c8 in log_info ldpd/log.c:102
error	23-Nov-2020 18:53:57	    #3 0x55f82599e841 in lde_shutdown ldpd/lde.c:208
error	23-Nov-2020 18:53:57	    #4 0x55f8259a2703 in lde_dispatch_parent ldpd/lde.c:666
error	23-Nov-2020 18:53:57	    #5 0x55f825ac3815 in thread_call lib/thread.c:1681
error	23-Nov-2020 18:53:57	    #6 0x55f825998d5e in lde ldpd/lde.c:160
error	23-Nov-2020 18:53:57	    #7 0x55f82598a289 in main ldpd/ldpd.c:320
error	23-Nov-2020 18:53:57	    #8 0x7fe3f749db96 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21b96)
error	23-Nov-2020 18:53:57	    #9 0x55f825982579 in _start (/usr/lib/frr/ldpd+0xb3579)
error	23-Nov-2020 18:53:57
error	23-Nov-2020 18:53:57	0x631000024838 is located 65592 bytes inside of 65632-byte region [0x631000014800,0x631000024860)
error	23-Nov-2020 18:53:57	freed by thread T0 here:
error	23-Nov-2020 18:53:57	    #0 0x7fe3f8a4d7a8 in __interceptor_free (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xde7a8)
error	23-Nov-2020 18:53:57	    #1 0x55f82599e830 in lde_shutdown ldpd/lde.c:206
error	23-Nov-2020 18:53:57	    #2 0x55f8259a2703 in lde_dispatch_parent ldpd/lde.c:666
error	23-Nov-2020 18:53:57	    #3 0x55f825ac3815 in thread_call lib/thread.c:1681
error	23-Nov-2020 18:53:57	    #4 0x55f825998d5e in lde ldpd/lde.c:160
error	23-Nov-2020 18:53:57	    #5 0x55f82598a289 in main ldpd/ldpd.c:320
error	23-Nov-2020 18:53:57	    #6 0x7fe3f749db96 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21b96)
error	23-Nov-2020 18:53:57
error	23-Nov-2020 18:53:57	previously allocated by thread T0 here:
error	23-Nov-2020 18:53:57	    #0 0x7fe3f8a4dd28 in __interceptor_calloc (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xded28)
error	23-Nov-2020 18:53:57	    #1 0x55f825998cb7 in lde ldpd/lde.c:151
error	23-Nov-2020 18:53:57	    #2 0x55f82598a289 in main ldpd/ldpd.c:320
error	23-Nov-2020 18:53:57	    #3 0x7fe3f749db96 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21b96)
error	23-Nov-2020 18:53:57

The fix is to put this in global space.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2020-11-25 07:36:43 -05:00
Donald Sharp
f286bcf5fc
Merge pull request #7594 from ton31337/feature/show_pfxSnt_for_show_bgp_summary
bgpd: Show pfxSnt in JSON output for show bgp summary even if not established
2020-11-25 07:02:13 -05:00
Patrick Ruddy
ad88608a36
Merge pull request #7502 from AnuradhaKaruppiah/evpn-mh-irb
evpn-mh: support for symmetric routing
2020-11-25 09:57:56 +00:00
Kuldeep Kashyap
2f4455fc4c tests: Add tests to bgp_multi_vrf_topo2
1. Added 4 test cases for frr/daemon restart(chaos testing)

Signed-off-by: Kuldeep Kashyap <kashyapk@vmware.com>
2020-11-25 08:57:08 +00:00
Donatas Abraitis
a616dd1fa0 bgpd: Show pfxSnt in JSON output for show bgp summary even if not established
spine1-debian-9# show ip bgp summary json
{
"ipv4Unicast":{
  "routerId":"192.168.3.2",
  "as":200,
  "vrfId":0,
  "vrfName":"default",
  "tableVersion":4,
  "ribCount":1,
  "ribMemory":184,
  "peerCount":1,
  "peerMemory":23384,
  "peers":{
    "192.168.0.1":{
      "hostname":"exit1-debian-9",
      "remoteAs":100,
      "version":4,
      "msgRcvd":5,
      "msgSent":6,
      "tableVersion":0,
      "outq":0,
      "inq":0,
      "peerUptime":"00:00:09",
      "peerUptimeMsec":9000,
      "peerUptimeEstablishedEpoch":1606206209,
      "pfxRcd":0,
      "pfxSnt":0,
      "state":"Idle (Admin)",
      "connectionsEstablished":1,
      "connectionsDropped":1,
      "idType":"ipv4"
    }
  },
  "failedPeers":1,
  "totalPeers":1,
  "dynamicPeers":0,
  "bestPath":{
    "multiPathRelax":"false"
  }
}
}

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2020-11-25 08:50:28 +02:00
Donald Sharp
5a6947e530
Merge pull request #7591 from opensourcerouting/isisd-bug-fixes
isisd: assorted bug fixes
2020-11-24 20:59:50 -05:00
Donald Sharp
44da982cba
Merge pull request #7595 from ton31337/feature/bgpState_json
bgpd: Add peerStatus for show bgp summary json
2020-11-24 20:55:34 -05:00
nguggarigoud
816fdbbf53 tests : Adding 3 base ospf testcases.
Test suite execution time is 90 Secs.

Signed-off-by: nguggarigoud <nguggarigoud@vmware.com>
2020-11-25 05:34:06 +05:30
Renato Westphal
66e5fbe08f tests: add IS-IS classic LFA topotest
This new topotest comprises of 13 testing steps and tests essentially
all implemented LFA knobs.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2020-11-24 20:15:52 -03:00
Renato Westphal
c8a4f33195 tests: add IS-IS classic LFA unit tests
These unit tests check the basic LFA loop-free condition on a
variety of different network topologies. None of the implemented
LFA tie-breakers are tested here.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2020-11-24 20:15:52 -03:00
Renato Westphal
fc156c28a5 isisd: add the "show isis fast-reroute summary" command
Add new "show" command to make it easy to see the protection coverage
provided by LFA/rLFA/TI-LFA.

Example output:

debian# show isis fast-reroute summary
Area 1:
 IS-IS L1 IPv4 Fast ReRoute summary:

 Protection \ Priority     Critical  High      Medium    Low       Total
 --------------------------------------------------------------------------
 Classic LFA               0         0         1         3         4
 Remote LFA                0         0         0         0         0
 Topology Independent LFA  0         0         0         0         0
 ECMP                      0         0         0         0         0
 Unprotected               0         0         2         1         3
 Protection coverage       0.00%     0.00%     33.33%    75.00%    54.17%

 IS-IS L1 IPv6 Fast ReRoute summary:

 Protection \ Priority     Critical  High      Medium    Low       Total
 --------------------------------------------------------------------------
 Classic LFA               0         0         1         0         1
 Remote LFA                0         0         0         0         0
 Topology Independent LFA  0         0         0         0         0
 ECMP                      0         0         0         0         0
 Unprotected               0         0         2         0         2
 Protection coverage       0.00%     0.00%     33.33%    0.00%     33.33%

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2020-11-24 20:15:52 -03:00
Renato Westphal
e886416f81 isisd: add support for classic LFA (RFC 5286)
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2020-11-24 20:15:52 -03:00
Renato Westphal
2d560b3d6d isisd: store LSPs associated to all SPF adjacencies
Instead of storing the LSP associated to pseudonodes only, store the
LSP associated to all SPF adjacencies instead.

The upcoming LFA work will need to have that piece of information
for all SPF adjacencies in order to know which ones have the overload
bit set or not. Other use cases might arise in the future.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2020-11-24 20:15:52 -03:00
Renato Westphal
d20b14bcd7 yang, isisd: add LFA nodes, NB skeleton callbacks and CLI commands
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2020-11-24 20:15:52 -03:00
Renato Westphal
2866b11911 isisd: rename the "debug isis ti-lfa" command to make it more generic
Rename "debug isis ti-lfa" to "debug isis lfa". Having different
debug guards for different kinds of LFA (classic, remote and TI-LFA)
doesn't make sense since all LFA solutions share code to certain
extent.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2020-11-24 20:15:51 -03:00
Renato Westphal
35f70ed3f9 isisd: move and rename the infinity metric constants
Those constants are also useful in contexts other than LDP-IGP
Synchronization (e.g. the upcoming LFA work will need them). Move
them to a more general header to reflect that.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2020-11-24 20:15:51 -03:00
Renato Westphal
6dfb7f5961 isisd: consult locally configured MSD when computing TI-LFA repair paths
Do not attempt to install a TI-LFA backup nexthop if its number of
labels exceeds the locally configured MSD (Maximum Stack Depth). The
idea is to prevent forward-plane installation failures before they
happen. The MSD check should also allow the "show isis fast-reroute
summary" command (not implemented yet) to display the actual
protection coverage provided by TI-LFA, which might not be 100%
if the MSD isn't big enough.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2020-11-24 20:15:51 -03:00
Anuradha Karuppiah
a92764da0b bgpd: enable L3NHG installation for EVPN host routes by default
L3NHG allows for fast failover of routed traffic (from remote-rack
to local-rack).

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-11-24 11:06:08 -08:00
Anuradha Karuppiah
2867823e49 bgpd: add a config knob to enable use of L3 NHG for EVPN host routes
Sample config -
vtysh -c "conf t"  -c "router bgp <N>" -c "address-family l2vpn evpn" -c "use-es-l3nhg"

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-11-24 11:06:08 -08:00
Anuradha Karuppiah
8bcb09a18c bgpd: Use L3NHGs for symmetric IRB host routes
Two L3 next groups are installed per-VRF per-ES for v4 and v6. These
NHGs are used as an indirect destination for symmetric IRB host routes.

Using L3NHGs allows for efficient failover of an ES (similar to the
use of L2NHGs) i.e. when an ES goes down the number of dataplane
updates are limited to 2xN (where N is the number of tenant VRFs
associated with the ES) instead of updating all host-routes behind the
ES.

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-11-24 11:06:08 -08:00
Anuradha Karuppiah
dfa3d3d70a zebra: change the nhg format from hex to dec for easy match up with the dp
Dataplane/kernel prints the NHG and NH ids as decimal. Zebra
was printing it as hex (to display type vs. val). This became a
debugging hassle hence normalizing the format.

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-11-24 11:06:08 -08:00
Anuradha Karuppiah
229587fb46 bgpd: commands to display L3 NHGs and MAC-IP paths linked to an ES
Sample output -
===============
torm-11# sh bgp l2vpn evpn es-vrf
ES-VRF Flags: A Active
ESI                            VRF             Flags IPv4-NHG IPv6-NHG Ref
03:44:38:39:ff:ff:01:00:00:01  vrf3            A     1        0        2
03:44:38:39:ff:ff:01:00:00:01  vrf2            A     6        0        4
03:44:38:39:ff:ff:01:00:00:01  vrf1            A     7        0        4
03:44:38:39:ff:ff:01:00:00:02  vrf3            A     2        0        2
03:44:38:39:ff:ff:01:00:00:02  vrf2            A     4        0        4
03:44:38:39:ff:ff:01:00:00:02  vrf1            A     8        0        4

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-11-24 11:06:08 -08:00
Anuradha Karuppiah
6348981a60 bgpd: use L3NHG while installing EVPN host routes in zebra
Host routes imported into the VRF can have a destination ES (per-VRF)
which is set up as a L3NHG for efficient failover.

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-11-24 11:06:08 -08:00
Anuradha Karuppiah
26c03e43fb bgpd: Handle ES VTEP add/del to a host route
1. MAC-IP routes in the VPN routing table are linked to the
destination ES for efficient handling for remote ES link flaps.
2. Only MAC-IP paths whose nexthops are active (added via EAD-ES)
are imported into the VRF routing table.

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-11-24 11:06:08 -08:00
Anuradha Karuppiah
c589d84746 bgpd: L3NHG infrastructure for host routes in EVPN
ES-VRF entries are maintained for the purpose of L3-NHG creation -
1. Each ES-EVI entry is associated with a tenant VRF. This associaton
triggers the creation of an ES-VRF entry.
2. Type-2/MAC-IP routes are imported into a tenant VRF and programmed as
a /32 or host route entry in the dataplane. If the destination of
the host route is a remote-ES the route is programmed with the
corresponding (keyed in by {vrf,ES-id}) L3-NHG.
3. The reason for this indirection (route->L3-NHG, L3-NHG->list-of-VTEPs)
is to avoid route updates to the dplane when a remote-ES link flaps i.e.
instead of updating all the dependent routes the NHG's contents are
updated. This reduces the amount of dataplane updates (fewer nhg updates vs.
route updates) allowing for a faster failover.

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-11-24 11:06:08 -08:00
Anuradha Karuppiah
bbc57c6cfa bgpd: skip VRF import of MAC-IP routes that belong to locally attached hosts
Local attached hosts are routed via the access ports using the neigh and
fdb/MAC dplane entries.

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-11-24 10:22:48 -08:00
Anuradha Karuppiah
b2ee2b71f4 zebra: Keep DAD disabled if EVPN MH is turned on
DAD is not supported currently with EVPN-MH so we turn it off internally
when the first ES config is detected.

PS: Note that when all local ESs are deleted DAD will stay off and
will need to be cleared via a daemon restart.

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-11-24 10:20:32 -08:00
Quentin Young
2784d2c7d2
Merge pull request #7475 from eololab/add-more-parameters-for-crosscompilation
build: add more precious variables for cross-compilation
2020-11-24 11:44:29 -05:00
Donald Sharp
7b1d13bb1f
Merge pull request #7560 from opensourcerouting/fix_topotest_logs
topotests: Fix logging by redirecting it to correct file
2020-11-24 11:30:14 -05:00
ckishimo
d12566a16b ospfd: fix a couple of typos
Signed-off-by: ckishimo <carles.kishimoto@gmail.com>
2020-11-24 07:35:49 -08:00
Donatas Abraitis
0e1f8ab575 bgpd: Add peerState field into JSON output for show bgp summary
vtysh -c 'show bgp summary json' | \
> jq '.ipv4Unicast.peers."192.168.0.2".peerState'
"Passive"

vtysh -c 'show bgp summary json' | \
> jq '.ipv4Unicast.peers."192.168.0.2".state'
"Established"

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2020-11-24 16:04:45 +02:00
Donatas Abraitis
0b34518c56 Revert "bgpd: identify passive connections in JSON summary"
This reverts commit 266ae3aa53.
2020-11-24 15:32:35 +02:00
Rafael Zalamena
ec62c60fc8 bfdd: move interface/vrf reset code
Don't reset interface/vrf pointer everytime a session is disabled
instead only do it when it was explicitly removed.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2020-11-24 07:55:07 -03:00
Rafael Zalamena
6655b43d51 bfdd: support connecting to BFD data plane
Add option to connect to a data plane server instead of receiving
connections.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2020-11-24 07:55:07 -03:00
Rafael Zalamena
319d840c02 redhat: include new BFD development header
Add to the package the BFD data plane protocol development header.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2020-11-24 07:55:07 -03:00
Rafael Zalamena
c4a2166339 doc: add information about distributed BFD
Document the new feature to let users that it exists.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2020-11-24 07:55:07 -03:00
Rafael Zalamena
400632a9a2 bfdd: distributed BFD show commands
Show BFD sessions updated counters by asking the data plane for this
information and show data plane statistics.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2020-11-24 07:54:07 -03:00
Rafael Zalamena
efd04d60ca bfdd: integrate distributed BFD
Add hooks in the correct places so the BFD daemon uses the data plane
instead of the software packet sending implementation to monitor the
session.

This code also adds some handlers to support fallback to FRR BFD session
handling, however since this complicates the code it won't work at the
moment (the BFD sockets are disabled by default when using data plane).

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2020-11-24 07:54:07 -03:00
Rafael Zalamena
29397ec1ab bfdd: disable sockets when using distributed BFD
The current distributed BFD implementantion doesn't support falling back
to software implementation in FRR, so to keep the code simple lets give
the data plane full control of the BFD packet handling (helps running a
software data plane for testing too otherwise it would fail with 'address
in use' error).

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2020-11-24 07:54:07 -03:00
Rafael Zalamena
8ba709dd1c bfdd: distributed BFD debugging knob
Add a knob to show/hide the distributed BFD (data plane) debug messages.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2020-11-24 07:54:07 -03:00
Rafael Zalamena
230aefe258 bfdd: import distributed BFD implementation
Distributed BFD is a term used for BFD implementations that do not run
on the routing engine, instead it is run on a data plane (software or
hardware based).

The current code implements the basic communication between FRR BFD
daemon with an external BFD data plane and defines the protocol format
in the file `bfddp_packet.h`.

To enable/use data plane you need to start BFD daemon with the command
line `--dplaneaddr <type>:<address>`, then a socket will be opened to
listen for incoming data plane connections.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2020-11-24 07:54:07 -03:00
Rafael Zalamena
fe744cec64 bfdd: import data plane protocol header
The BFD data plane header has definitions for the data plane
communication protocol that will be used to implement the distributed
BFD feature.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2020-11-24 07:54:07 -03:00
Rafael Zalamena
91804f630c lib: add new stream function to reorganize buffer
The function was originally implemented for zebra data plane FPM plugin,
but another code places could use it.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2020-11-24 07:54:07 -03:00
Donatas Abraitis
9bcab3130b
Merge pull request #7577 from donaldsharp/datacenter_stuff
Datacenter stuff
2020-11-24 10:02:39 +02:00
Donatas Abraitis
0064614626
Merge pull request #7592 from mjstapp/fix_restore_topo_scale
tests: restore route scale test to 1M routes
2020-11-24 10:01:36 +02:00
Mark Stapp
d13964a914 tests: restore route scale test to 1M routes
Restore the scale topotest config to use 1M routes.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-11-23 16:53:43 -05:00
Quentin Young
a3014b9ac7
Merge pull request #7223 from idryzhov/fix-vtysh-view-node
vtysh: fix execution of commands from the view node
2020-11-23 13:36:41 -05:00
Renato Westphal
50ec21859f isisd, tests: fix bug when sending TI-LFA repair paths to zebra
Commit 4c75f7c773 fixed a bug in which the TI-LFA repair paths
weren't preserving the original Prefix-SID of the routes. That
commit, however, didn't update the zebra interface code to account
for backup nexthops that don't have a repair list but do have a
SR label. As a consequence, backup nexthops that didn't have any
repair label were not preserving the original Prefix-SID of the
corresponding routes. Fix this and update the TI-LFA topotest
accordingly.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2020-11-23 15:22:36 -03:00