Commit Graph

24361 Commits

Author SHA1 Message Date
David Lamparter
49fc8264e9 tools: adapt frr-llvm-cg to xref changes
These caused some function names to change, which frr-llvm-cg looks at
in order to improve callgraph accuracy.

Signed-off-by: David Lamparter <equinox@diac24.net>
2021-03-27 20:59:45 +01:00
David Lamparter
a077ec8620 build: ignore test-suite.log
Seems to be created (indirectly, through automake?) by pceplib's CUnit
tests.

Signed-off-by: David Lamparter <equinox@diac24.net>
2021-03-27 20:59:45 +01:00
David Lamparter
8304bb4c11 build: ignore LLVM disassembly files (.ll)
Signed-off-by: David Lamparter <equinox@diac24.net>
2021-03-27 20:59:45 +01:00
David Lamparter
fa03d806ef build: ignore frr-llvm-cg binary
Signed-off-by: David Lamparter <equinox@diac24.net>
2021-03-27 20:59:39 +01:00
David Lamparter
5d38779233 lib: fix transparent_union for clang++
clang does not accept __attribute__((transparent_union)) in C++ source
code.  We don't need it there anyway so let's just limit it to C.

Signed-off-by: David Lamparter <equinox@diac24.net>
2021-03-27 20:59:39 +01:00
David Lamparter
487eefcfbe lib: record output positions in printfrr
This replaces `%n` with a safe, out-of-band option that simply records
the start and end offset of the output produced for each `%...`
specifier.

The old `%n` code is removed.

Signed-off-by: David Lamparter <equinox@diac24.net>
2021-03-27 17:01:29 +01:00
David Lamparter
eba599a397 lib: print (null) rather than NULL
... for consistency with `%s`, which also prints `(null)`.

Signed-off-by: David Lamparter <equinox@diac24.net>
2021-03-27 16:56:56 +01:00
David Lamparter
212e04e5a7 lib: rework printfrr extensions to output directly
Allowing printfrr extensions to directly write to the output buffer has
a few advantages:
- there is no arbitrary length limit imposed (previously 64)
- the output doesn't need to be copied another time
- the extension can directly use bprintfrr() to put together pieces

The downside is that the theoretical length (regardless of available
buffer space) must be computed correctly.

Extended unit tests to test these paths a bit more thoroughly.

Signed-off-by: David Lamparter <equinox@diac24.net>
2021-03-27 16:56:55 +01:00
Mark Stapp
ee6ccc96b4 ospf6d: fix unguarded debug
Put a debug under a conditional.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2021-03-26 16:00:25 -04:00
Mark Stapp
c33cb9fba6 isisd: fix coverity SA warning
Add assert to clear SA warning.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2021-03-26 16:00:25 -04:00
David Lamparter
9a5d359ce8
Merge pull request #8317 from mjstapp/fix_short_printfrr_buf 2021-03-26 19:40:21 +01:00
Karen Schoener
d8ff370922 ospf6d: fix ospf6_abr_examin_summary to check for a path cost change
Fixes a regression in test case: anvl-ospfv3-16.14.

Signed-off-by: Karen Schoener <karen@voltanet.io>
2021-03-26 14:20:40 -04:00
Donald Sharp
9b8e01cae4 lib: Incorporate Wall and Cpu warning into show thread cpu
Incorporate into the `show thread cpu` the number of times
we have issued warnings about a particular thread being
too slow.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-03-26 13:27:45 -04:00
David Lamparter
bcf9d7d8aa tools/gcc-plugin: support [un]signed in pragma
Need `unsigned char *` for `%pHX`.

Signed-off-by: David Lamparter <equinox@diac24.net>
2021-03-26 17:51:55 +01:00
David Lamparter
23922bbc08 tools/gcc-plugin: fix format precision/width type
`%*.*pEXT` applied the extension type to the precision and width (*.*)
too.  Oops.

Signed-off-by: David Lamparter <equinox@diac24.net>
2021-03-26 17:51:55 +01:00
Donald Sharp
039d547f6f lib: Differentiate between real and cpu bound processes
When generating SLOW_THREAD warnings let's differentiate between
a cpu bound process and a wall bound process.  Effectively
a slow thread can now be a process in FRR doing lots of work( cpu bound )
or wall bound ( the cpu is heavy load and a FRR process may be pre-empted
and never scheduled ).

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-03-26 11:41:57 -04:00
Donald Sharp
4027d19b08 bgpd: Use rpki_curr_state instead of curr_state
During Review it was suggested that appending rpki_
to curr_state and target_state would be better
variable names.  Instead of going and fixing
3 or so commits up.  Just do this one.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-03-26 08:26:53 -04:00
Donald Sharp
08f782417a doc: Add doc for new rpki commands
`show bgp [afi] [safi] A.B.C.D rpki <valid|invalid|notfound>`
`show bgp [afi] [safi] rpki <valid|invalid|notfound>`

commands need to be documented

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-03-26 08:23:33 -04:00
Donald Sharp
1e2ce4f12f bgpd: Add rpki filter to some more show commands
Add a `show bgp ipv4 uni rpki ...` command.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-03-26 08:23:33 -04:00
Donald Sharp
8aa22bbb72 bgpd: Add show bgp <afi> <safi> A.B.C.D [rpki <valid|invalid|notfound>]
Add the ability for the end operator to query the state of valid
or invalid or no information rpki prefix information.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-03-26 08:23:33 -04:00
Donald Sharp
4933eaafab bgpd: Figure out rpki validation state earlier
Figure out the rpki validation state earlier and also check
to see if we care about this state or not.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-03-26 08:23:33 -04:00
Donald Sharp
1d327209be bgpd: Convert string output to rpki validation-state:
When displaying data about the rpki state, use the
string `rpki validation-state` instead of `validation-state:`
to avoid confusion with `(valid)`

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-03-26 08:23:33 -04:00
Donald Sharp
fdeb5a8135 bgpd: Convert RPKI states to an enum and use them
Convert the rpki states to an enum and use them in the code

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-03-26 08:23:33 -04:00
Patrick Ruddy
694df37daf
Merge pull request #8154 from AnuradhaKaruppiah/evpn-mh-irb-2
bgpd, lib, zebra: Complete support for sym-IRB with EVPN-MH
2021-03-26 12:16:01 +00:00
Chirag Shah
8be861e60b bgpd: convert l2vpn evpn nbr route-map to nb
Add transactional northbound callbacks for route-map
options for unnumbered neighbor and peer-group under
l2vpn-evpn address-family.

Signed-off-by: Chirag Shah <chirag@nvidia.com>
2021-03-25 21:52:30 -07:00
Anuradha Karuppiah
70545a2939 bgpd: cleanup prefix2str usage
Use %pFX where possible.

Signed-off-by: Anuradha Karuppiah <anuradhak@nvidia.com>
2021-03-25 19:24:39 -07:00
Anuradha Karuppiah
d57e0c05cc bgpd: fix crash in the MH cleanup handling
The MH datastructures were being released before the paths that were
referencing them. Fix is to do the MH cleanup last.

The MH finish function has also been stripped down to only do a
datastructure cleanup i.e. avoid sending route updates etc.

Ticket: 31376

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2021-03-25 19:24:39 -07:00
Anuradha Karuppiah
74efb82223 bgpd: handle local ES del or transition to LACP bypass
1. When a local ES is deleted or the ES-bond goes into bypass we treat
imported MAC-IP routes with that ES destination as remote routes instead
of sync routes. This requires a re-evaluation of the routes as
"non-local-dest" and an update to zebra.
2. When a ES is attached to an access port or the ES-bond transitions from
bypass to LACP-up we treat imported MAC-IP routes with that ES destination as
sync routes. This requires a re-evaluation of the routes as
"local-dest" and an update to zebra.

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2021-03-25 19:24:39 -07:00
Chirag Shah
36ace674c4 yang: add policy support for l2vpn-evpn nbr tree
Add bgp routing policy support for unnumbered and peer-group.
For numbered peer the policy support is already present.

+--rw bgp!
       +--rw neighbors
       |  +--rw unnumbered-neighbor* [interface]
       |     +--rw afi-safis
       |        +--rw afi-safi* [afi-safi-name]
                   +--rw l2vpn-evpn
       |  |        |  +--rw filter-config
       |  |        |     +--rw rmap-import?                  frr-route-map:route-map-ref
       |  |        |     +--rw rmap-export?                  frr-route-map:route-map-ref
       |  |        |     +--rw plist-import?                 frr-bgp-types:plist-ref
       |  |        |     +--rw plist-export?                 frr-bgp-types:plist-ref
       |  |        |     +--rw access-list-import?           frr-bgp-types:access-list-ref
       |  |        |     +--rw access-list-export?           frr-bgp-types:access-list-ref
       |  |        |     +--rw as-path-filter-list-import?   frr-bgp-types:as-path-filter-ref
       |  |        |     +--rw as-path-filter-list-export?   frr-bgp-types:as-path-filter-ref
       |  |        |     +--rw unsuppress-map-import?        frr-route-map:route-map-ref
       |  |        |     +--rw unsuppress-map-export?        frr-route-map:route-map-ref
       ...
       +--rw peer-groups
          +--rw peer-group* [peer-group-name]
       |     +--rw afi-safis
       |        +--rw afi-safi* [afi-safi-name]
                   +--rw l2vpn-evpn
       |  |        |  +--rw filter-config
       |  |        |     +--rw rmap-import?                  frr-route-map:route-map-ref
       |  |        |     +--rw rmap-export?                  frr-route-map:route-map-ref
       |  |        |     +--rw plist-import?                 frr-bgp-types:plist-ref
       |  |        |     +--rw plist-export?                 frr-bgp-types:plist-ref
       |  |        |     +--rw access-list-import?           frr-bgp-types:access-list-ref
       |  |        |     +--rw access-list-export?           frr-bgp-types:access-list-ref
       |  |        |     +--rw as-path-filter-list-import?   frr-bgp-types:as-path-filter-ref
       |  |        |     +--rw as-path-filter-list-export?   frr-bgp-types:as-path-filter-ref
       |  |        |     +--rw unsuppress-map-import?        frr-route-map:route-map-ref
       |  |        |     +--rw unsuppress-map-export?        frr-route-map:route-map-ref
       ...

Signed-off-by: Chirag Shah <chirag@nvidia.com>
2021-03-25 18:37:39 -07:00
Anuradha Karuppiah
090efa2fb7 bgpd: changes for maintaining evpn nexthops and their rmac mapping
In the case of EVPN type-2 routes that use ES as destination, BGP
consolidates the nh (and nh->rmac mapping) and sends it to zebra as
a nexthop add.

This nexthop is the EVPN remote PE and is created by reference of
VRF IPvx unicast paths imported from EVPN Type-2 routes.

zebra uses this nexthop for setting up a remote neigh enty for the PE
and a remote fdb entry for the PE's RMAC.

Ticket: CM-31398

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2021-03-25 17:12:50 -07:00
Anuradha Karuppiah
60605cbc78 bgpd: ES evpn nexthop prep work
Setup a mh_info indirection in the path extra. This has been done to
avoid increasing evpn route's path size to add new (type based) pointers
in path_info_extra.

Ticket: CM-31398

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2021-03-25 17:09:53 -07:00
Anuradha Karuppiah
7bfa7d0233 lib/zebra: zapi for installing EVPN nexthops from bgp
EVPN nexthops are installed as remote neighs by zebra. This was earlier
done only via VRF IPvX uni routes imported from EVPN routes.

With EVPN-MH these VRF routes now reference a L3NHG which is setup based
on the EAD and doesn't include the RMAC. To workaround that BGP now
consolidates and maintains EVPN nexthops which are then sent to zebra.

zebra sets up these nexthops as L3-VNI nh entries using a dummy type-1
route as reference.

Ticket: CM-31398

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2021-03-25 17:09:53 -07:00
Anuradha Karuppiah
9f570418a3 bgpd: Disable L3NHG support for routes leaked from another VRF
Theoretically we should just be able to use the L3 NHG in the other-VRF/nh-VRF.
But there is some change list handling (when an ES is added to or
removed from a VRF) that needs to be updated to account for routes in other
VRFs using that ES-VRF as nexthop. Till that is done we will disable L3-NHG
use for routes leaked from a different VRF.

Route in tenant2 with ES/NHG as destination -
===========================================
root@leaf11:mgmt:~# ip route show vrf tenant2 22.1.0.7
22.1.0.7 nhid 75000012 proto bgp metric 20
root@leaf11:mgmt:~# ip nexthop list id 75000012
id 75000012 group 103/107/111 proto bgp
root@leaf11:mgmt:~# ip nexthop |grep "103\|107\|111"
id 103 via 6.0.0.11 dev vlan12 scope link proto bgp onlink
id 107 via 6.0.0.12 dev vlan12 scope link proto bgp onlink
id 111 via 6.0.0.13 dev vlan12 scope link proto bgp onlink
id 75000012 group 103/107/111 proto bgp
root@leaf11:mgmt:~#

Leaked into VRF1 with a flat/exploded mpaths
============================================
root@leaf11:mgmt:~# ip route show vrf tenant1 |grep -A3 22.1.0.7
22.1.0.7 proto bgp metric 20
        nexthop via 6.0.0.11 dev vlan12 weight 1 onlink
        nexthop via 6.0.0.12 dev vlan12 weight 1 onlink
        nexthop via 6.0.0.13 dev vlan12 weight 1 onlink
root@leaf11:mgmt:~#

Ticket: CM-31115

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2021-03-25 17:09:53 -07:00
Anuradha Karuppiah
333ad64b87 bgpd: flush remote ES-EVI entries when a L2-VNI is deleted
Force flush all ES-EVI PE entries when a L2-VNI is deleted. This will
implicitly free up the remote ES-EVI and deref the ES entry.

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2021-03-25 17:09:53 -07:00
Anuradha Karuppiah
58bff4d12e bgpd: re-eval use-l3nhg when a remote ES is [de]activated in a VRF
There are two changes in this commit -

1. Maintain a list of global MAC-IP routes per-ES. This list is maintained
for quick processing on the following events -
a. When the first VTEP/PE becomes active in the ES-VRF, the L3 NHG is
activated and the route can be sent to zebra.
b. When there are no active PEs in the ES-VRF the L3 NHG is
de-activated and -
- If the ES is present in the VRF -
The route is not installed in zebra as there are no active PEs for
the ES-VRF
- If the ES is not present in the VRF -
The route is installed with a flat multi-path list i.e. without L3NHG.
This is to handle the case where there are no locally attached L2VNIs
on the ES (for that tenant VRF).

2. Reinstall VRF route when an ES is installed or uninstalled in a
tenant VRF (the global MAC-IP list in #1 is used for this purpose also).
If an ES is present in the VRF we use L3NHG to enable fast-failover of
routed traffic.

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2021-03-25 17:09:53 -07:00
Anuradha Karuppiah
d656e0aea6 bgpd: Rename macip_path_list to macip_evi_path_list
This is done to clearly indicate what routes are being linked to
the list i.e. MAC-IP routes in the VNI table.

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2021-03-25 17:09:53 -07:00
Anuradha Karuppiah
36dd457465 bgpd: allow routes to be imported if the ES/ES-VRF is not present
In a sym-IRB setup the remote ES may not be installed if the tenant
VRF is not present locally. To allow that case while retaining the
fast-failover benefits for the case where the tenant VRF is locally
present we use the following approach -
1. If ES is present in the tenant VRF we use the L3NHG for installing
the MAC-IP based tenant route. This allows for efficient failover via
L3NHG updates.
2. If the ES is not present locally in the corresponding tenant VRF we
fall back to a non-NHG multi-path based routing approach. In this
case individual routes are updated when the ES links flap.

PS: #1 can be turned off entirely by disabling use-l3-nhg in BGP.

Ticket: CM-30935

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2021-03-25 17:09:53 -07:00
Anuradha Karuppiah
70524092b2 bgpd: on ES down re-advertise the MAC-IP entry without the L3 ECOM
When an ES goes down the MAC-IP route must be updated to remove it from
the tenant VRF routing table. This is because the fast-failover
(via EAD-per-ES withdraw) procedures described in RFC 7432 are only
applicable to L2 forwarding/MAC-ECMP. For L3/routed traffic (in a
sym-IRB setup) failover, individual paths need to be withdrawn.

To handle this difference in L2/L3 requirements BGP updates the MAC-IP
route to include the L3 ECOM if local destination ES is oper-up and
to exclude the L3 ECOM if local ES is oper-down.

Ticket: CM-30935

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2021-03-25 17:09:53 -07:00
Donald Sharp
1267dd416e
Merge pull request #8344 from pjdruddy/coverity_mpls_l3vpn
lib, bgpd: add a specific oid_copy function for IPv6 addrs
2021-03-25 19:40:34 -04:00
Donald Sharp
1a6aa9d098
Merge pull request #8341 from simondeziel/systemd-onfailure
systemd's %n already includes the type suffix (.service)
2021-03-25 15:00:13 -04:00
Donald Sharp
845c04d384
Merge pull request #8340 from mjstapp/fix_pcep_timer_race
libs: fix race in pcep lib
2021-03-25 14:31:04 -04:00
Mark Stapp
d21eac422f
Merge pull request #8292 from donaldsharp/isis_crash
isisd: Prevent OOM crash in isis
2021-03-25 12:52:45 -04:00
Mark Stapp
9e0a845861
Merge pull request #8338 from idryzhov/fix-ospfd-sa-warning
ospfd: fix SA warning
2021-03-25 12:15:05 -04:00
Donald Sharp
95a2b8f9eb
Merge pull request #8252 from SaiGomathiN/8249
pimd: support bundle commands added
2021-03-25 11:52:12 -04:00
Pat Ruddy
9e26322126 lib, bgpd: add a specific oid_copy function for IPv6 addrs
Do not overload the v4 oid_copy_addr function for ipv6
coverity does not like this kind of thing.

Signed-off-by: Pat Ruddy <pat@voltanet.io>
2021-03-25 15:24:50 +00:00
David Lamparter
d8701d6a9a
Merge pull request #8332 from donaldsharp/yang_clean
yang: Allow `make clean` to actually clean up dependant files
2021-03-25 15:50:18 +01:00
Simon Deziel
489faf5e4a tools: fix systemd OnFailure directive
systemd's %n already includes the type suffix (.service)

Signed-off-by: Simon Deziel <simon@sdeziel.info>
2021-03-25 10:37:23 -04:00
Donald Sharp
ecf9b1bb50
Merge pull request #8167 from LabNConsulting/chopps/tests-add-gdb
tests: add option for auto-launching gdb
2021-03-25 10:27:50 -04:00
Donald Sharp
89bf9d220d
Merge pull request #8333 from mobash-rasool/pim-fixes-2
pimd: Fix hold time related issues
2021-03-25 10:19:12 -04:00
Mark Stapp
cdcb405119 libs: fix race in pcep lib
Fix a race in the libpcep timer code; reported by coverity.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2021-03-25 09:56:11 -04:00