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

5005 Commits

Author SHA1 Message Date
Maria Matejka
66e98f69f8 Lockless feed of a single net 2024-06-24 09:42:03 +02:00
Maria Matejka
21c1df625a 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-06-24 09:42:03 +02:00
Maria Matejka
bff3b7eb2c Refactored the deferring framework into a separate structure 2024-06-24 09:42:03 +02:00
Maria Matejka
e39a76d6f6 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-06-24 09:42:03 +02:00
Maria Matejka
2ca9e6fdeb RCU Unwinder refactored from route table to a separate structure 2024-06-24 09:42:03 +02:00
Maria Matejka
020c34136f 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-06-24 09:42:03 +02:00
Maria Matejka
629e29febf Fixed flush condition when stale cycle valid/set indicators wrap around 2024-06-24 09:42:03 +02:00
Maria Matejka
074384d6ba Kernel: replaced synchronous prune by a refeed 2024-06-24 09:42:03 +02:00
Maria Matejka
37e8cffc0a 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-06-24 09:42:03 +02:00
Maria Matejka
c872b8f826 Cached route attributes now have explicitly marked layers
Also the rta_* functions renamed to ea_* functions
2024-06-24 09:42:03 +02:00
Maria Matejka
ba3b8607fb Netindex: Dropping tmp handle mechanism in favor of deferred lfuc_unlock 2024-06-24 09:42:03 +02:00
Maria Matejka
a66be7641e Fixed all implicit seq_cst warnings caused by the previous commit 2024-06-24 09:42:03 +02:00
Maria Matejka
51795c3e05 Enabling warnings for implicit seq_cst in atomic access 2024-06-24 09:42:03 +02:00
Maria Matejka
72ecc1d99d Doc: short migration info for BIRD 2 -> 3 2024-06-24 09:42:03 +02:00
Maria Matejka
53e3bf9063 Fixed announcement inconsistency between feeds and regular exports 2024-06-24 09:42:03 +02:00
Maria Matejka
51ebbda95c 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-06-24 09:42:03 +02:00
Maria Matejka
35ff820a3b Route flag REF_OBSOLETE
Marking routes obsolete when being removed from table, just to be sure.
2024-06-24 09:42:03 +02:00
Maria Matejka
929df85f1e 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-06-24 09:42:03 +02:00
Maria Matejka
feb16991ee Simplified table deletion (one less step) 2024-06-24 09:42:03 +02:00
Maria Matejka
7c4db11b9f Hostentry usecount converted to lfuc 2024-06-24 09:42:03 +02:00
Maria Matejka
a3b125e223 Lockfree usecount: deferring unlocks to the metaloop
This allows us for easy temporary locks without additional burden of explicit cleanup.
2024-06-24 09:42:03 +02:00
Maria Matejka
08f67979ce Route table export journal converted to the generic structure 2024-06-24 09:42:03 +02:00
Maria Matejka
3787c0f7a5 Lock free journal refactored into a separate data structure 2024-06-24 09:42:03 +02:00
Maria Matejka
cb6e7123c4 Replacing the NHU table loop flag with a proper event 2024-06-24 09:42:03 +02:00
Maria Matejka
90127cb2d2 Flowspec links don't peruse the all-hooks list for lookup 2024-06-24 09:42:03 +02:00
Maria Matejka
22f58ac316 Refactoring: back-merged export data structures
Table-specific structures inheriting commons are too crazy.
2024-06-24 09:42:03 +02:00
Maria Matejka
dea78a5c51 Export table dump temporarily switched off 2024-06-24 09:42:03 +02:00
Maria Matejka
561116f6fb Added and explicit target table to the ROA subscription object 2024-06-24 09:42:03 +02:00
Maria Matejka
35fe916155 Refactoring of struct rt_pending_export
Now it stores const rte * instead of struct rte_storage * to allow for
different storage backends.
2024-06-24 09:42:03 +02:00
Maria Matejka
c8fad656c2 Missing definition of RTAX_FASTOPEN_NO_COOKIE shouldn't kill the whole build 2024-06-24 09:42:03 +02:00
Maria Matejka
95748b6c55 Static: Unlock IGP tables on cleanup to avoid problems with hostentry unlocking 2024-06-24 09:42:03 +02:00
Maria Matejka
eeaeaa1557 Loop run waits until pingers finish
This ensures that if somebody passes an event to a loop which
has just started executing, then the event gets picked up. Otherwise
there is a race condition causing stray events pending in queue
but without the ping (because the run actually finishes too fast
to pickup the later events).
2024-06-24 09:42:03 +02:00
Maria Matejka
d1103b8e77 IO Loop: provide information about current loop and task time limit 2024-06-24 09:42:03 +02:00
Maria Matejka
3549a98578 Allowing to send events to the metaloop's priority list 2024-06-24 09:42:03 +02:00
Maria Matejka
f5a93eef7d Net: explicit generic-to-specific typecast with checking 2024-06-24 09:42:03 +02:00
Maria Matejka
4874a30422 Bitops: bitflip function
to flip order of bits in 32b numbers
2024-06-24 09:42:03 +02:00
Maria Matejka
ff35d2b4f8 Locking: forcefully unwinding locks to a previously stored state 2024-06-24 09:42:03 +02:00
Maria Matejka
6af2a7e606 Typed list: macro for list length 2024-06-24 09:42:03 +02:00
Maria Matejka
24d2259dc8 Typed lists: enabled defining the list structure independently on the node 2024-06-24 09:42:03 +02:00
Maria Matejka
247d4b538d Event: fixed race condition between ev_send and ev_postpone 2024-06-24 09:42:03 +02:00
Maria Matejka
05e73911d7 IO loop: fixed local hot page cache flushing condition 2024-06-24 09:42:03 +02:00
Maria Matejka
3b50b11e9a lib/printf_test.c: test on strcmp fixed
we mistakenly required the return value to be only -1, 0 or 1
2024-06-24 09:42:03 +02:00
Maria Matejka
f4d4f81c7d BGP: Fixed corking of RX
If cork occurred after some incoming data had been already processed,
BGP incorrectly processed them again after uncorking because it forgot
to store the actual socket state.

Now storing the socket state (done at the end of bgp_rx()) and
therefore the bug is fixed.
2024-06-24 09:42:03 +02:00
Maria Matejka
aee44d1ef0 Fixed in-table route refresh counter to not randomly add 256 2024-06-24 09:42:03 +02:00
Maria Matejka
8408d5c4e1 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-06-24 09:42:03 +02:00
Maria Matejka
cdadd2b53d Fixed reporting about exported routes 2024-06-24 09:42:03 +02:00
Maria Matejka
6a6f291c7d Fixed annoying undefined values with nexthops 2024-06-24 09:42:03 +02:00
Maria Matejka
4a2dc1dc8b Undefined behavior fix 2024-06-24 09:42:03 +02:00
Maria Matejka
683b59bba0 CLang compilation fix 2024-06-24 09:42:03 +02:00
Maria Matejka
2900a608f0 L3VPN: Setting the bgp_ext_community flags properly 2024-05-19 11:27:18 +02:00