0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-10-18 18:08:45 +00:00
Commit Graph

1419 Commits

Author SHA1 Message Date
Maria Matejka
a19d0de42f Table: Freeing routes deferred to save rcu synchronization 2024-06-04 22:20:18 +02:00
Maria Matejka
d617801c31 Route attributes now use the common lockfree usecount
Also route attributes are not freed immediately anymore.
2024-06-04 22:20:18 +02:00
Maria Matejka
b033561045 Route attribute hash replaced with the generic one 2024-06-04 22:20:18 +02:00
Maria Matejka
d4ea561917 Common parts of the ROA updater moved into the table
Channel is now just subscribing to yet another journal announcing
digested tries from the ROA table.

Creating tries in every channel on-the-fly was too slow to handle
and it ate obnoxious amounts of memory. Instead, the tries are
constructed directly in the table and the channels are notified
with the completed tries.

The delayed export-release mechanism is used to keep the tries allocated
until routes get reloaded.
2024-06-04 10:11:36 +02:00
Maria Matejka
b287c13f21 Task deferrer: kinda more dumb-resistant macro
Originally, this mechanism required to check whether there's enough time to work
and then to send an event. This macro combines all the logic and goes more straightforwardly
to the _end_ of the export processing loop.

One should note that there were two cases where the export processing loop
was deferred at the _beginning_, which led to ignoring some routes on
reimports. This wasn't easily noticeable in the tests until the one-task
limit got a ceiling on 300 ms to keep reasonable latency.
2024-06-04 10:11:36 +02:00
Maria Matejka
7a169e46a8 BGP: export table stores routes, reloads and shows in CLI.
In future, this and rtable's data structures should be probably merged
but it isn't a good idea to do now. The used data structure is similar
to rtable -- an array of pointers to linked lists.

Feed is lockless, as with all tables.

Full export (receiving updates) is not supported yet but we don't have
any method how to use it anyway. Gonna implement it later.
2024-06-04 10:11:36 +02:00
Maria Matejka
34acf22fc7 Netindex: consistency checks and deletion of whole hash 2024-06-04 10:11:36 +02:00
Maria Matejka
ce1a8be9af Hostentry: made src ea_list atomic to help with consistency 2024-06-04 10:11:36 +02:00
Maria Matejka
9490ed2bc5 Export: Next feed step-up is now internal
There is no much reason to do anything else than the netindex technique.
2024-06-04 10:11:36 +02:00
Maria Matejka
10bb1c1e9d Real almost-lockless feeds and more pull-like exports
Introducing a new omnipotent internal API to just pass route updates
from whatever point wherever we want.

From now on, all the exports should be processed by RT_WALK_EXPORTS
macro, and you can also issue a separate feed-only request to just get a
feed and finish.

The exporters can now also stop and the readers must expect that to
happen and recover. Main tables don't stop, though.
2024-06-04 10:11:36 +02:00
Maria Matejka
e17824f5e5 Protocol filter reload is now done by 'reload filters'
This prepares for the separate 'reload bgp' command triggering BGP Route Refresh
2024-05-29 10:39:01 +02:00
Maria Matejka
4581ecd8de Dropping obsolete protocol Perf
We have now better methods how to measure overall performance
and this obsolete protocol has basically rotten away. If anybody
needs its features, feel free to revive it in future.
2024-05-25 19:37:16 +02:00
Maria Matejka
76ca53e4f8 SKIP_BACK_DECLARE: easier embedded-to-parent typecasting 2024-05-25 19:37:16 +02:00
Maria Matejka
f6ad42777d Lockless feed of a single net 2024-05-25 19:37:16 +02:00
Maria Matejka
091130e84b Using ea_lookup_tmp() for temporarily keeping attribute references
To avoid needs for keeping local temporary references for attributes,
now one can use ea_lookup_tmp() to ensure that the attributes are
valid and stored until the task ends. After that, the attributes are
automatically unref'd and also deallocated if needed.
2024-05-25 19:37:16 +02:00
Maria Matejka
2b38a833cd Avoiding RCU synchronization deadlock when locking in critical section
Explicitly marking domains eligible for RCU synchronization. It's then
forbidden to lock these domains in RCU critical section to avoid
possible deadlock.
2024-05-22 11:34:34 +02:00
Maria Matejka
6fb467a54c RCU Unwinder refactored from route table to a separate structure 2024-05-22 11:34:34 +02:00
Maria Matejka
eaf187b57b Table feeds are now lockless
This commit makes the route chains in the tables atomic. This allows not
only standard exports but also feeds and bulk exports to be processed
without ever locking the table.

Design note: the overall data structures are quite brittle. We're using
RCU read-locks to keep track about readers, and we're indicating ongoing
work on the data structures by prepending a REF_OBSOLETE sentinel node
to make every reader go waiting.

All the operations are intended to stay inside nest/rt-table.c and it
may be even best to further refactor the code to hide the routing table
internal structure inside there. Nobody shall definitely write any
routines manipulating live routes in tables from outside.
2024-05-22 11:34:34 +02:00
Maria Matejka
be902fc55c Fixed flush condition when stale cycle valid/set indicators wrap around 2024-05-22 11:34:34 +02:00
Maria Matejka
182a97f5e6 Lockless hostentry resolution
Now the hostentry doesn't need to lock table, instead it tracks the
hostentry version and retries if the hostentry changed while updating.
2024-05-22 11:34:34 +02:00
Maria Matejka
83a409abd2 Cached route attributes now have explicitly marked layers
Also the rta_* functions renamed to ea_* functions
2024-05-22 11:34:34 +02:00
Maria Matejka
46164395b2 Fixed all implicit seq_cst warnings caused by the previous commit 2024-05-22 11:34:34 +02:00
Maria Matejka
670c46725b Fixed announcement inconsistency between feeds and regular exports 2024-05-22 11:34:34 +02:00
Maria Matejka
2eebb680c2 Fixed best route announcements after NHU
When more routes in one net changed at once, the best route
announcements were inconsistent which confused exporters.
2024-05-22 11:34:34 +02:00
Maria Matejka
67aafd99d3 Route flag REF_OBSOLETE
Marking routes obsolete when being removed from table, just to be sure.
2024-05-22 11:34:34 +02:00
Maria Matejka
6a13c02d3b Removed the obsolete birdloop flagger
This was useful when events were locking. As now sending events is lockless,
we can drop this obsolete routine for good.
2024-05-22 11:34:34 +02:00
Maria Matejka
59dc95aa25 Simplified table deletion (one less step) 2024-05-22 11:34:34 +02:00
Maria Matejka
728d19703d Hostentry usecount converted to lfuc 2024-05-22 11:34:34 +02:00
Maria Matejka
e0a1bbdf65 Lockfree usecount: deferring unlocks to the metaloop
This allows us for easy temporary locks without additional burden of explicit cleanup.
2024-05-22 11:34:34 +02:00
Maria Matejka
a6ef8cd492 Route table export journal converted to the generic structure 2024-05-22 11:34:34 +02:00
Maria Matejka
684332b7d2 Replacing the NHU table loop flag with a proper event 2024-05-22 11:34:34 +02:00
Maria Matejka
6bbe9dea3a Flowspec links don't peruse the all-hooks list for lookup 2024-05-22 11:34:34 +02:00
Maria Matejka
77a0310f87 Refactoring: back-merged export data structures
Table-specific structures inheriting commons are too crazy.
2024-05-22 11:34:33 +02:00
Maria Matejka
261a953d7e Export table dump temporarily switched off 2024-05-22 11:34:33 +02:00
Maria Matejka
cb2c9c8cc0 Added and explicit target table to the ROA subscription object 2024-05-22 11:34:33 +02:00
Maria Matejka
10f41cda87 Refactoring of struct rt_pending_export
Now it stores const rte * instead of struct rte_storage * to allow for
different storage backends.
2024-05-22 11:34:33 +02:00
Maria Matejka
fe3d7c1a17 Merge a branch of fixes and updates needed for stabilization of v3.
Merge commit 'c06ce709' into HEAD
2024-05-19 11:28:03 +02:00
Maria Matejka
c06ce7090f Static: Unlock IGP tables on cleanup to avoid problems with hostentry unlocking 2024-05-18 15:50:03 +02:00
Maria Matejka
1e55a8168a Fixed in-table route refresh counter to not randomly add 256 2024-05-18 15:47:45 +02:00
Maria Matejka
a9124be384 Fixed hostcache notifier pool
This pool has to be the service pool to allow the seq bitmaps to grow
from the exporter and feeder routines
2024-05-18 15:47:45 +02:00
Maria Matejka
e38cd2b215 Fixed reporting about exported routes 2024-05-18 15:47:12 +02:00
Maria Matejka
3a2e423d3e Undefined behavior fix 2024-05-18 15:41:33 +02:00
Maria Matejka
3371ea0843 CLang compilation fix 2024-05-18 15:41:10 +02:00
Ondrej Zajicek
0883ce66bf Merge commit '1b064355f752b9bfe4644f775697bbd9b711f762' into thread-next 2024-04-01 18:20:18 +02:00
Ondrej Zajicek
4036da3732 Nest: Fix bitfield attributes
Fix missing route lookup, causing crash when accessing route attribute.

Also fix additional space in bitfield formatting.
2024-03-28 19:46:24 +01:00
Ondrej Zajicek
c195c7a0d5 Merge commit '224a152c53f304881f8616a1c9255b467062a069' into thread-next 2024-03-28 16:22:23 +01:00
Ondrej Zajicek
62c9f12dfc Merge commit '574d7eb241a60622b0573ab1460cb23d968ba1cc' into thread-next 2024-03-28 15:00:40 +01:00
Ondrej Zajicek
468f1d6547 Nest: Improve printing of hostentries with MPLS labels
MPLS labels in hostentry should be printed with 'mpls' keyword instead of
'labels' to be consistent with the rest of the 'show route' output.
2024-03-27 23:26:25 +01:00
Ondrej Zajicek
eadebc287b Nest: Fix printing of hostentry table
When hostentry is printed, it should show the table in which the nexthop
is resolved, not the dependend one.
2024-03-27 23:16:51 +01:00
Maria Matejka
b95dc8f29f Expanded usage of stdbool.h to the whole BIRD 2024-03-25 09:39:58 +01:00
Ondrej Zajicek
1b064355f7 Client: Add support for completion of command options
We can easily extend command completion to handle also keywords for
command options. Help for command options is not yet supported.
2024-03-05 19:04:10 +01:00
Ondrej Zajicek
114be2af28 Filter: Add route attribute gw_mpls_stack
Add route attribute gw_mpls_stack to make MPLS stack of route nexthop
accessible from filters. Its type is T_CLIST, which is really not correct
(as it is a list, while T_CLIST is a set). Therefore, we keep this
attribute *undocumented* and it will be *changed* without further notice.

Based on a patch from Trisha Biswas <tbiswas@fastly.com>, thanks!
2024-03-05 16:47:08 +01:00
Ondrej Zajicek
224a152c53 Filter: Add support for string route attribute 2024-02-14 14:29:19 +01:00
Alexander Zubkov
574d7eb241 BGP: Allow multiple EBGP neighbors with the same peer.
We can distinguish BGP sessions if at least one side uses a different IP
address. Extend olock mechanism to handle local IP as a part of key, with
optional wildcard, so BGP sessions could local IP in the olock and not
block themselves.
2024-02-07 19:11:10 +01:00
Maria Matejka
3b217f2984 Fixed L3VPN after merge to v3.
Semantics of rt_get_source() has changed between v2 and v3. Also other
minor fixes were needed to make it run.
2024-01-30 23:14:10 +01:00
Maria Matejka
06030d8bf0 Hostentry eattrs are now properly zeroed 2024-01-30 23:14:10 +01:00
Maria Matejka
95adf7b0fa Fixed regression in route feeding.
We were, once again, forgetting to mark empty-net journal entries as
processed, as was fixed in 32bb548c11.

Introduced in 548dbb2252.
Caught by cf-ebgp-graceful.
2024-01-30 21:31:13 +01:00
Maria Matejka
29e7cd4a7c Showing MPLS labels in hostentry display 2024-01-29 22:12:38 +01:00
Maria Matejka
1b0d3f5c8c Merge commit 'v2.14-83-g1709843f' into thread-next 2024-01-28 14:56:01 +01:00
Maria Matejka
1709843f15 Merge commit 'v2.14-30-g41d6002f' into mq-merge-step-2 2024-01-28 14:55:50 +01:00
Maria Matejka
41d6002f59 Merge commit 'a740054db50b8532680bd1673a5d4519af889c0f' into mq-merge-step-1 2024-01-28 14:55:49 +01:00
Maria Matejka
94a95a6944 Merge commit 'v2.14-28-g87fcb810' into mq-merge-step-2 2024-01-28 14:54:06 +01:00
Maria Matejka
87fcb810af Merge commit '06301a991d80597a2a0a9e449d0cdf4bc1eda6d1' into mq-merge-step-1 2024-01-28 14:54:05 +01:00
Maria Matejka
bd56a41b3a Merge commit '5973031460372a4d695c44a9f398d516b0e5bac1' into mq-merge-step-1 2024-01-28 14:45:04 +01:00
Maria Matejka
8d2ec536d9 Merge commit 'v2.13.1-183-g2b05844c' into thread-next 2024-01-28 14:28:17 +01:00
Maria Matejka
2b05844cfb Merge commit 'v2.13.1-139-gc9d1ebbd' into mq-merge-step-2 2024-01-28 14:28:09 +01:00
Maria Matejka
c9d1ebbd42 Merge commit 'ba01a6f2e66d03eb5d9426fdf4973f30e09c5710' into mq-merge-step-1 2024-01-28 14:28:07 +01:00
Maria Matejka
ea0f2c6194 Fixed attributes normalization with underlays in place 2024-01-28 13:16:25 +01:00
Maria Matejka
f9d3112d01 Interfaces: fixed locking when address is deleted implicitly 2024-01-27 19:01:34 +01:00
Maria Matejka
57b5eb5cbd Merge commit 'v2.13.1-162-g5bf25678' into thread-next 2024-01-27 19:01:06 +01:00
Ondrej Zajicek
f40e2bc270 Nest: Fix bug in recursive routes with MPLS-labeled nexthops
When a recursive route with MPLS-labeled nexthop was exported to kernel
and read back, the nexthop_same() failed due to different labels_orig
field and kernel protocol reinstalled it unnecessarily.

For comparing hext hops, route cache has to distinguish ones with
different labels_orig, but KRT has to ignore that, so we need two
nexthop compare functions.

Thanks to Marcel Menzel for the bugreport.
2024-01-27 17:38:06 +01:00
Maria Matejka
5bf2567853 Merge commit 'v2.13.1-125-g90b9e871' into mq-merge-step-2 2024-01-26 23:29:17 +01:00
Maria Matejka
90b9e871b9 Merge commit 'be09b030ed40c76ee0727dd3980df77094fdc907' into mq-merge-step-1 2024-01-26 23:29:14 +01:00
Maria Matejka
8fb1f098d1 Fixes for CLang 2024-01-26 14:50:56 +01:00
Maria Matejka
25e20485ae Fixed route table attribute caching 2024-01-26 14:42:55 +01:00
Maria Matejka
365ea12ea1 MPLS Subsystem Proper Locking
Added also some debug lines if debug is on.
2024-01-26 14:42:44 +01:00
Maria Matejka
e711a991d4 MPLS: FEC Map moved from protocol to MPLS channel 2024-01-08 13:03:25 +01:00
Maria Matejka
34d040a034 MPLS: Domain list locked by The BIRD Lock 2024-01-08 13:03:25 +01:00
Maria Matejka
9815353c5e MPLS: Putting internal objects aside 2024-01-08 13:03:25 +01:00
Maria Matejka
f0da632b3c Channels now can have external obstacles temporarily blocking their shutdown 2024-01-08 13:03:25 +01:00
Maria Matejka
e4e90c6f4d Channel: Replacing refeed status trie by bitmap
This fixes a bug with reloading non-IP channels.
2024-01-08 12:02:25 +01:00
Maria Matejka
548dbb2252 Replacing table FIB by netindex and simple pointer block
Using the netindex data structure to simplify route storage inside route
tables. This should also help with future unlocking of route import.
2024-01-08 09:34:32 +01:00
Maria Matejka
3b31138854 Dropped forgotten pieces of orphaned internal API 2024-01-08 09:23:35 +01:00
Ondrej Zajicek
7d2c7d59a3 Nest: Fix memory alignment in attribute cache
In attribute cache, adata structures were stored densely in one memory
block, without regard to alignment. Let's force at least u32 alignment.
2023-12-13 17:46:16 +01:00
Maria Matejka
25906bc5e9 Merge commit 'ef814fb2d6415206fce280c37466ea889291b043' into HEAD 2023-12-08 12:13:58 +01:00
Maria Matejka
8cf1be6f67 Merge commit 'bb094fb6' 2023-12-08 12:09:30 +01:00
Maria Matejka
ef814fb2d6 Merge commit 'bb094fb6' into mq-aggregator-for-v3 2023-12-08 12:09:17 +01:00
Maria Matejka
bb094fb6c7 Refactoring also net_roa_check
Having 4 functions doing almost the same is more mess than three macros.
2023-12-08 12:08:28 +01:00
Maria Matejka
8c19f8a209 Merge commit 'db1eb46664d4c76d56dc55a63ce7abe853fc6862' into HEAD 2023-12-08 11:33:43 +01:00
Maria Matejka
db1eb46664 Merge commit '54ddf90f6370f06efc71c3ffd6e02d031a86866f' into mq-aggregator-for-v3 2023-12-08 09:08:38 +01:00
Maria Matejka
4aac1b259f Merge commit '54ddf90f' 2023-12-08 08:30:30 +01:00
Maria Matejka
54ddf90f63 Conf: debug tables
For now just a dummy config but it is needed for forward
compatibility with v3.
2023-12-07 14:38:05 +01:00
Maria Matejka
9a91ea52db Refactoring of net_route 2023-12-07 14:11:16 +01:00
Maria Matejka
3b48dc9bce Table: Adding route refresh begin and end debug messages 2023-12-07 14:11:16 +01:00
Maria Matejka
1df615991c Generalized the rte_src lockfree usecount algorithm 2023-12-04 10:39:32 +01:00
Maria Matejka
0bcbff42ca Table: nicer route validation errors 2023-12-04 10:39:32 +01:00
Maria Matejka
5a916ed53f Locking: Dropping DEFINE_DOMAIN ugly macro 2023-12-04 10:39:32 +01:00
Maria Matejka
080e580834 Route table objects use the new locked object macro stack 2023-11-20 12:09:31 +01:00
Maria Matejka
8558e666e0 Merge branch 'mq-aggregator-for-v3' into thread-next 2023-11-09 17:38:31 +01:00
Maria Matejka
219dc0fdb5 Merge branch 'mq-aggregator-for-v3' into thread-next 2023-11-09 16:53:34 +01:00