0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-09-19 20:05:21 +00:00
Commit Graph

429 Commits

Author SHA1 Message Date
Maria Matejka
e565e045b6 Flowspec links must have the destination table service loop locked 2023-04-04 17:00:58 +02:00
Maria Matejka
7bb93efc27 Merge commit '6d1ae197d189d50e60279796441c6e74272ddc54' into thread-next 2023-01-23 19:03:16 +01:00
Maria Matejka
343628d8c0 Fixed various build problems on FreeBSD and/or CLang 2023-01-20 18:31:57 +01:00
Maria Matejka
4d8d81f144 Table prune routine doesn't walk over lists unless needed.
If no channel is flushing, table prune doesn't walk over routes in nets
and also doesn't walk over importing channel lists. This helps to
alleviate the memory caching burdens a lot.
2023-01-19 11:10:25 +01:00
Ondrej Zajicek
6d1ae197d1 Nest: Fix several issues with pflags
There were some confusion about validity and usage of pflags, which
caused incorrect usage after some flags from (now removed) protocol-
specific area were moved to pflags.

We state that pflags:

 - Are secondary data used by protocol-specific hooks
 - Can be changed on an existing route (in contrast to copy-on-write
   for primary data)
 - Are irrelevant for propagation (not propagated when changed)
 - Are specific to a routing table (not propagated by pipe)

The patch did these fixes:

 - Do not compare pflags in rte_same(), as they may keep cached values
   like BGP_REF_STALE, causing spurious propagation.

 - Initialize pflags to zero in rte_get_temp(), avoid initialization in
   protocol code, fixing at least two forgotten initializations (krt
   and one case in babel).

 - Improve documentation about pflags
2023-01-01 20:10:23 +01:00
Ondrej Zajicek
e80156d936 Nest: Avoid spurious announcements triggered by filtered routes
When filtered routes (enabled by 'import keep filtered' option) are
updated, they trigger announcements by rte_announce(). For regular
channels (e.g. type RA_OPTIMAL or RA_ANY) such announcement is just
ignored, but in case of RA_ACCEPTED (BGP peer with 'secondary' option)
it just reannounces the old (and still valid) best route.

The patch ensures that such no-change is ignored even for these channels.
2022-12-06 19:51:50 +01:00
Maria Matejka
54179a1ab3 Merge commit '8f79e6b9' into thread-next 2022-11-07 10:24:56 +01:00
Maria Matejka
d3af586da4 Removed an accidentally merged debug call introduced in 5395880908 2022-10-12 18:02:34 +02:00
Maria Matejka
ff24f027a6 Merge commit '53958809' into thread-next 2022-10-12 11:30:27 +02:00
Maria Matejka
c4957647b4 Merge commit '4ba991f1' into thread-next 2022-10-12 11:24:23 +02:00
Maria Matejka
c1cb2dc31c TES_HUNGRY doesn't inhibit export cleanup any more 2022-10-12 10:05:16 +02:00
Maria Matejka
6d5929be24 More thorough logging of route update corner cases 2022-10-12 10:05:16 +02:00
Maria Matejka
2ae32374dd Fixed export hook stopping in some corner cases.
Notably, it's in a corked state and also when refeed is pending.
2022-10-12 10:05:14 +02:00
Ondrej Zajicek
8f79e6b93e BGP: Add option 'next hop prefer global'
Add BGP channel option 'next hop prefer global' that modifies BGP
recursive next hop resolution to use global next hop IPv6 address instead
of link-local next hop IPv6 address for immediate next hop of received
routes.
2022-10-10 05:06:19 +02:00
Maria Matejka
6cfe2066ab Higher export settle times when route refresh is running.
This helps the route refresh procedures to finish or at least
do more work before the exporters jump in and steal all the CPU time
for themselves.
2022-09-26 12:09:14 +02:00
Maria Matejka
ecaa3df3c4 More verbose logging of table auxiliary export states 2022-09-23 09:58:00 +02:00
Maria Matejka
5338a779c9 Fixed possible race condition in hostcache trie matching code not triggering HCU 2022-09-23 09:57:40 +02:00
Maria Matejka
b1ade5efa1 Fixed the export settle timer to be actually a settle timer 2022-09-21 18:47:43 +02:00
Maria Matejka
4ba52a2687 Route export may get corked on refeed startup 2022-09-20 12:40:23 +02:00
Maria Matejka
cf38092b2d Fix for table hostcache corking and shutdown race conditions 2022-09-18 16:35:49 +02:00
Maria Matejka
c9d18e5ec5 Table: Re-scheduling prune event when another prune loop is pending 2022-09-18 16:33:51 +02:00
Maria Matejka
ff86f23dc7 Export event doesn't have to be postponed before requeuing as an export-stop event 2022-09-18 16:33:51 +02:00
Maria Matejka
769224d79c Converted simple table events to loop flags 2022-09-18 16:33:51 +02:00
Maria Matejka
c49ee6e1a6 Routing tables have their own service loops. 2022-09-18 16:33:51 +02:00
Maria Matejka
3d627d09d4 Table export announcer needs both an event and a timer to do export bundling the right way 2022-09-09 19:09:31 +02:00
Maria Matejka
fb7fb67445 Table access is now locked. 2022-09-08 15:24:02 +02:00
Maria Matejka
a42877b9bf Table feed refactoring to allow for locking and unlocking 2022-09-08 15:13:38 +02:00
Maria Matejka
5103de4e8e Table long-locking debug code 2022-09-08 15:13:37 +02:00
Maria Matejka
e2c6120636 Next hop updater has its own event 2022-09-08 15:13:37 +02:00
Maria Matejka
a61a04b5c8 Next hop refactoring to allow for table locking 2022-09-07 13:54:55 +02:00
Maria Matejka
71b3456eed Better profylaction recursive route loops
In some specific configurations, it was possible to send BIRD into an
infinite loop of recursive next hop resolution. This was caused by route
priority inversion.

To prevent priority inversions affecting other next hops, we simply
refuse to resolve any next hop if the best route for the matching prefix
is recursive or any other route with the same preference is recursive.

Next hop resolution doesn't change route priority, therefore it is
perfectly OK to resolve BGP next hops e.g. by an OSPF route, yet if the
same (or covering) prefix is also announced by iBGP, by retraction of
the OSPF route we would get a possible priority inversion.
2022-09-06 15:15:03 +02:00
Maria Matejka
28accd4f05 Next hop update triggered at the very end of hostcache update 2022-09-05 12:55:36 +02:00
Maria Matejka
636bc44e61 Exporter routine refactoring to allow for nicer table locking 2022-09-05 12:19:38 +02:00
Maria Matejka
66ccdc2a0c Added an indirection to the export announcement routine
There are performance reasons for this, mostly that we don't want to
ping the table service routine with every import.
2022-09-01 22:22:31 +02:00
Maria Matejka
dd786e338c ROA subscriptions are also converted to export requests.
By this, the requesting channels do the timers in their own loops,
avoiding unnecessary synchronization when the central timer went off.

This is of course less effective for now, yet it allows to easily
implement selective reloads in future.
2022-09-01 18:46:40 +02:00
Maria Matejka
cd628d124d Flowspec revalidate notification converted to an export hook
Instead of synchronous notifications, we use the asynchronous export
framework to notify flowspec src route updates. This allows us to
invoke flowspec revalidation without locking collisions.
2022-09-01 18:46:40 +02:00
Maria Matejka
ecdb1ec6ea Hostcache update notification converted to an export hook
Instead of synchronous notifications, we use the asynchronous export
framework to notify also hostcache updates. This allows us to do the
hostcache update and the subsequent next hop update notification without
locking collisions.
2022-09-01 18:46:40 +02:00
Maria Matejka
7450eea071 Miscellaneous refactoring 2022-09-01 18:46:40 +02:00
Maria Matejka
83ceb91b50 Table debug is now a per-table setting and has categories. 2022-09-01 18:46:40 +02:00
Maria Matejka
397fec4741 Default tables are not created unless actually used.
This allows for setting default table values at the beginning of config
file before "master4" and "master6" tables are initialized.
2022-09-01 17:44:46 +02:00
Maria Matejka
34912b029b Tables: Requesting prune only after export cleanup
We can't free the network structures before the export has been cleaned
up, therefore it makes more sense to request prune only after export
cleanup. This change also reduces prune calls on table shutdown.
2022-08-30 18:05:06 +02:00
Maria Matejka
74eb4bad5f Merge commit 'c7d0c5b2' into thread-next 2022-08-03 20:01:42 +02:00
Maria Matejka
e60b83d8ac Merge commit '18f66055' into thread-next 2022-08-03 18:00:17 +02:00
Maria Matejka
71b434a987 Merge commit 'f0507f05ce57398e135651896dace4cb68eeed54' into thread-next 2022-08-02 22:08:59 +02:00
Maria Matejka
db9153e216 Also next hop update routines are corking themselves when congestion is detected 2022-08-02 17:51:58 +02:00
Maria Matejka
f8500b5943 Route table cork: Indicate whether the export queues are congested.
These routines detect the export congestion (as defined by configurable
thresholds) and propagate the state to readers. There are no readers for
now, they will be added in following commits.
2022-08-02 17:34:38 +02:00
Maria Matejka
e858dce757 Moved the thread starting code to IO loop code 2022-07-28 19:49:03 +02:00
Maria Matejka
4d48ede51d Revert "Export table: Delay freeing of old stored route."
This reverts commit cee0cd148c.
This change is not needed in version 2 and the surrounding code has
disappeared mostly in version 3.
2022-07-22 15:37:21 +02:00
Maria Matejka
08c8484608 Merge commit '94eb0858' into thread-next 2022-07-18 12:33:00 +02:00
Maria Matejka
05673b16a8 Merge commit 'c70b3198' into thread-next [lots of conflicts]
There were more conflicts that I'd like to see, most notably in route
export. If a bisect identifies this commit with something related, it
may be simply true that this commit introduces that bug. Let's hope it
doesn't happen.
2022-07-15 14:57:02 +02:00