Commit Graph

4271 Commits

Author SHA1 Message Date
Mark Stapp
4c99d413e6 zebra: debug messages go under conditionals
Move a couple of unprotected debug calls in the netlink code
under DEBUG_KERNEL.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2021-01-26 12:29:39 -05:00
Donald Sharp
431deca7ea
Merge pull request #7905 from mjstapp/fix_zapi_nhg
zebra, sharpd: async results for NHGs
2021-01-25 10:29:04 -05:00
Mark Stapp
ee94437e28 zebra: send async nhg update results
Send the results of daemons' nhg updates asynchronously,
after the update has actually completed. Capture additional
info about the source daemon in order to locate the correct
zapi session. Simplify the result types considered by the
zebra_nhg module.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2021-01-22 16:33:01 -05:00
Mark Stapp
f5b7e50f9a zebra: use afi_t for route-map address family arg
Use afi_t in the route_map_check api

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2021-01-21 10:13:57 -05:00
Mark Stapp
bdbef5edc6
Merge pull request #7233 from donaldsharp/route_map_optimizations
Route map optimizations
2021-01-19 13:20:02 -05:00
Patrick Ruddy
f87fe77aeb
Merge pull request #7723 from AnuradhaKaruppiah/fdb-ext-attrs
zebra: move from NDA_NOTIFY to NDA_FDB_EXT_ATTRS
2021-01-19 16:27:54 +00:00
Mark Stapp
5898ce6f35 libs,zebra: remove zapi nhg encode and decode public apis
The raw zapi apis to encode and decode NHGs don't need to be
public; also add a little more validity-checking.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2021-01-19 08:48:54 -05:00
Donald Sharp
3a15018892 zebra: Tell SA that we are intentionally ignoring the return
Calling fpm_nl_enqueue we should expect a it fit or not
return value on the outgoing stream.  This is not necessary
to check here because the while loop where we are checking this
already has ensured that the data being written will fit.

CID -> 1499854
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-01-18 09:06:49 -05:00
Donald Sharp
d33da0e071 zebra: A zebra route-map delay-timer 0 command should still run the route-map
Setting `zebra route-map delay-timer 0` completely turns of any
route-map processing in zebra.  Which is completely wrong.  A timer
of 0 means `do it now`.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-01-15 19:34:33 -05:00
Donald Sharp
4dfcfabfa9 zebra: Push timer out if another route-map change comes in for zebra
If we are running with a delayed timer to handle route-map changes
in zebra, if another route-map change is made to the cli, push
out the timer instead of not modifying the timer.  This will
allow a large set of route-maps to be possibly be read in by
the system and we don't have a state where new route-map
changes are being read in and having the timer pop in
the middle of it.

Additionally convert to use THREAD_OFF, preventing a possible
use after free as well as aligning the thread api usage
with what we consider correct.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-01-15 19:34:33 -05:00
Donald Sharp
cfcd844c0b zebra: Limit routemap changes to reconsider only routes associated with that rm
Current code when a route map changes schedules a rerun of all routes in the
particular table.  So if you modify the `ip protocol XX route-map FOO`
route-map `FOO` all routes will be rechecked.  This is extremely expensive.

Modify zebra to only update the routes associated with the route-map.  So
if we have 800k bgp routes and 50 ospf routes and we are route-map'ing
the ospf routes we'll only look at 50 routes.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-01-15 19:34:33 -05:00
Donald Sharp
54aeba3540 zebra: Allow rib_update_table to receive a specified route type
When we need to cause a reprocessing of data the code currently
marks all routes as needing to be looked at.  Modify the
rib_update_table code to allow us to specify a specific route
type we only want to reprocess.  At this point none
of the code is behaving differently this is just setup
for a future code change.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-01-15 19:34:33 -05:00
Donald Sharp
1866a6f65b zebra: remove unused function rib_update_vrf
The function rib_update_vrf is never used.  Remove it.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-01-15 19:34:33 -05:00
Donald Sharp
3d34678f1d doc: Document the "zebra route-map delay-timer" functionality
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-01-15 19:34:33 -05:00
Duncan Eastoe
869a5f7168 zebra: set nlmsg_pid in netlink msgs sent by 'fpm'
Use nl_pid from the netlink socket used for programming the kernel
(netlink_dplane) in netlink route messages sent by the 'fpm' module.

This makes 'fpm' consistent with 'dplane_fpm_nl' which already
behaves this way, and allows FPM server implementations to determine
route origin via nlmsg_pid.

Signed-off-by: Duncan Eastoe <duncan.eastoe@att.com>
2021-01-15 16:28:06 +00:00
Donald Sharp
f7f52f0d2b
Merge pull request #7868 from mjstapp/fix_fpm_conn_up
zebra: don't set connection-up event pointer directly
2021-01-15 06:55:29 -05:00
Mark Stapp
9fad1340d4
Merge pull request #7866 from kishorekunal01/fpm_dump_issue
zebra: Scale setup RMAC is send multiple time to fpm
2021-01-14 14:13:31 -05:00
Mark Stapp
ef1dbba83a zebra: don't set connection-up event pointer directly
Use thread_cancel to reset the connection-up processing timer.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2021-01-14 14:09:14 -05:00
Kishore Kunal
e840edcacb zebra: Scale setup RMAC is send multiple time to fpm
Thread zfpm_conn_up_thread_cb can Yield and send RMAC multiple
times to FPM.

Signed-off-by: Kishore Kunal <kishorekunal01@broadcom.com>
2021-01-14 15:53:52 +00:00
Donald Sharp
700cae7698 zebra: in zebra_evpn_mac.c use size_t for buffer length
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-01-13 13:22:29 -05:00
Donald Sharp
b16e800423 zebra: Create a dump function for mac->flags and use it
Create a function that can dump the mac->flags in human readable
output and convert all debugs to use it.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-01-13 13:22:29 -05:00
Donald Sharp
bf902d4c52 zebra: Create function to dump MACIP flags
Create a function to dump MACIP flags and to use it.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-01-13 13:22:27 -05:00
Mark Stapp
d7ceaa8f5a
Merge pull request #7819 from donaldsharp/more_data_for_debug_dumps
zebra: Add ability to display human readable format re->flags and status
2021-01-13 13:06:23 -05:00
Mark Stapp
3c57be5936
Merge pull request #7818 from donaldsharp/ip_proto_denied
zebra: notify installing protocol when nexthops cannot be resolved
2021-01-13 10:33:33 -05:00
Donald Sharp
61e6de9d57 zebra: Add ability to display in human readable format re->flags and status
The re->flags and re->status in debugs were being dumped as hex values.
I can never quickly decode this.  Here is an idea.  Let's let FRR do
it for me.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-01-13 10:16:06 -05:00
Donald Sharp
1afacb94e6
Merge pull request #6853 from mjstapp/fix_rib_dups
zebra: reduce impact of route-update overload
2021-01-13 09:42:34 -05:00
Donald Sharp
7874422ad2
Merge pull request #7850 from mjstapp/build_dplane_plugin
zebra: build the sample dataplane plugin
2021-01-12 08:43:53 -05:00
Mark Stapp
b9f15b49b2 zebra: add the sample dataplane plugin to the build
Build the sample dataplane plugin with debug/dev builds.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2021-01-11 16:33:55 -05:00
Mark Stapp
fb913e53a5 zebra: remove unused local in dplane sample plugin
Remove an unused local in the sample dataplane plugin.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2021-01-11 16:33:27 -05:00
Donald Sharp
7e010c4b78 zebra: notify installing protocol when nexthops cannot be resolved
In the case where a routes nexthops cannot be resolved as part
of route processing, immmediately notify the upper level protocol
that their routes failed to install if they are interested in
being informed about this issue.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-01-11 10:11:35 -05:00
Donatas Abraitis
88ffa95dc3
Merge pull request #7823 from donaldsharp/zebra_delay_timer
Zebra delay timer
2021-01-11 16:46:23 +02:00
Donald Sharp
f10f8f0e98
Merge pull request #7652 from adharkar/frr-vni_switch
zebra: L3VNI to L2VNI conversion is not handled
2021-01-10 18:44:49 -05:00
Donald Sharp
7df0e6bb3b
Merge pull request #7756 from pjdruddy/bgplu-fixes
Bgplu fixes
2021-01-09 15:48:22 -05:00
Donald Sharp
24420c8200
Merge pull request #7787 from deastoe/fpm-work-ready-fixes
dplane_fpm_nl: routes stuck with 'q' flag (revisited)
2021-01-09 15:38:46 -05:00
Donald Sharp
9df81095f8 zebra: zebra route-map delay-timer is global not per vrf
The zebra route-map delay timer value is a global value
not a per vrf change.  As such we should only print it
out one time.

We are seeing this:

zebra route-map delay-timer 33
 exit-vrf
zebra route-map delay-timer 33

When we have 2 vrf's configured.

Fix the code to only write it out for the default vrf

Ticket: CM-32888
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-01-08 22:34:41 -05:00
Donald Sharp
c70e585e05 zebra: Remove uncalled function
Remove the dead function zebra_route_map_write_delay_timer

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-01-08 22:34:41 -05:00
Renato Westphal
dc70c83afa
Merge pull request #7816 from pjdruddy/revert_labelmanager_statics
Revert labelmanager statics
2021-01-08 20:57:25 -03:00
Mark Stapp
6b66913275
Merge pull request #7762 from sworleys/PBR-Ipv4/Ipv6-Match-Fixes
pbrd: pbr ipv4/ipv6 match fixes
2021-01-05 13:54:06 -05:00
Pat Ruddy
507d2737d6 zebra: expose label-manager util-funcs
Revert "zebra: unexpose label-manager util-funcs as static"
This reverts commit d3d9639d9a.

Signed-off-by: Pat Ruddy <pat@voltanet.io>
2021-01-05 18:19:44 +00:00
Patrick Ruddy
b567ed7eeb
Merge pull request #7722 from AnuradhaKaruppiah/mh-fixes
bgpd, zebra: evpn mh fixes
2021-01-05 09:26:17 +00:00
Pat Ruddy
189982283a zebra: labelmanager could return reserved labels
when checking if there is a "hole" behind the current reservation
marker the calculation of whether the hole is big enough to satisfy
the requested chunk is out by 1. This could result in returning a label
which has already been allocated.

Signed-off-by: Pat Ruddy <pat@voltanet.io>
2021-01-04 14:29:44 +00:00
Pat Ruddy
3c84497943 zebra: label manager should never return a reserved block
if the requested chunk size was less than 16 then a chunk
within the reserved block would be returned. Make sure that
we never return labels that are below MPLS_LABEL_UNRESERVED_MIN

Signed-off-by: Pat Ruddy <pat@voltanet.io>
2021-01-04 14:29:44 +00:00
Quentin Young
19ff5340a1
Merge pull request #7777 from volta-networks/fix_zebra_rib_c++
zebra: avoid c++ reserved keyword
2020-12-29 11:07:12 -05:00
Stephen Worley
a4525d25b5
Merge pull request #7788 from deastoe/zebra2proto-kernel-connect
zebra: zebra2proto() handle kernel/connect type
2020-12-28 14:57:41 -05:00
Mark Stapp
7c08b70a53
Merge pull request #7724 from donaldsharp/pbr_zebra_was_wrong
Pbr zebra was wrong
2020-12-23 13:34:18 -05:00
Duncan Eastoe
911d4d4804 zebra: zebra2proto() handle kernel/connect type
When dplane_fpm_nl is used the "Please add this protocol(n) to proper
rt_netlink.c handling" debug message is emitted for any route of type
kernel or connected.

This severely reduces performance of dplane_fpm_nl when large numbers
of these routes are present in the RIB.

The messages are not observed when using the original fpm module since
this uses a custom function, netlink_proto_from_route_type().

zebra2proto() now returns RTPROT_KERNEL for ZEBRA_ROUTE_CONNECT and
ZEBRA_ROUTE_KERNEL. This should only impact dplane_fpm_nl's use of
the common netlink routines since these routes generally ignored via
checking of RSYSTEM_ROUTE().

Signed-off-by: Duncan Eastoe <duncan.eastoe@att.com>
2020-12-22 21:27:52 +00:00
Duncan Eastoe
b677907c99 zebra: fpm_nl_process() reschedule dp thread
fpm_nl_process() now ensures that the dataplane thread is rescheduled
if it hits the work limit while processing its incoming work queue.

This would probably already occur due to some other event, such as
fpm_process_queue() enqueuing completed work to the output queue,
however it does no harm to add this explicit reschedule.

Signed-off-by: Duncan Eastoe <duncan.eastoe@att.com>
2020-12-22 21:14:03 +00:00
Duncan Eastoe
f1595ce439 zebra: resched dp thread if output queue limit hit
If the dataplane thread hits the work limit while processing the
output queue for any given provider, we now explicitly reschedule
the thread.

Otherwise, if the number of items in the output queue is greater than
the work limit, draining of that output queue is dependent on new
dataplane work.

Routes which are not drained from the output queue are stuck with
the 'q' flag, so this is a similar issue to that observed in
164d8e8608.

Signed-off-by: Duncan Eastoe <duncan.eastoe@att.com>
2020-12-22 21:14:03 +00:00
Rafael Zalamena
fb1e954880
Merge pull request #7767 from mjstapp/fix_dplane_extra_info
zebra: fix loop logic in dplane for extra intf info
2020-12-22 15:08:35 -03:00
Mark Stapp
700ff41ed3
Merge pull request #7472 from opensourcerouting/fpm-fixes
fpm: frr-reload, IPv6 and an improvement
2020-12-22 11:37:58 -05:00