Maria Matejka
dc416d2de3
RCU: Rewritten to be more straightforward
2024-06-04 10:11:36 +02:00
Maria Matejka
7c41d860af
Unit test for RCU
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
31d5ffa4a9
If debugging, store a malloc circular log for easier debugging
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
a2ddd3d443
Slab: can be deleted as a single object
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
abcdde1b38
BGP: Simpler hashing in export table
...
We need a hashing simple enough to allow for feeding by netindex.
2024-06-04 10:11:36 +02:00
Maria Matejka
d01a7c2bda
BGP: Export uses common attribute cache
...
There is no real need for storing bucket attributes locally and we may
save some memory by caching the attributes in one central place.
If this becomes a contention problem, we should reduce the lock load
of the central attribute cache.
2024-06-04 10:11:36 +02:00
Maria Matejka
73afffc464
BGP: pending TX prefixes link netindex instead of copying net_addr
...
This helps with memory consumption, allows for removal of multiple
slab/mblock ifs and prepares for easier feeds.
2024-06-04 10:11:36 +02:00
Maria Matejka
6f59a414b1
BGP: refactored pending TX back into channel
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
ee7afdabc7
BGP: explicitly sending route refresh from CLI
2024-05-29 17:09:50 +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
492c416c0a
Static: Fixed undefined nexthop padding problems
2024-05-25 19:37:26 +02:00
Maria Matejka
03731bf356
Netindex: fixed resolving net by index
2024-05-25 19:37:16 +02:00
Maria Matejka
1d1338c4f5
RIP partial reload never worked properly, running full reload always
2024-05-25 19:37:16 +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
030044b2f6
OSPF partial reload never worked properly, running full reload always
2024-05-25 19:37:16 +02:00
Maria Matejka
b5f803ce4a
Simplified temporary resources
...
Also TMP_SAVED now uses the CLEANUP hook to allow for breaks and returns
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
29cd2c0170
Refactored the deferring framework into a separate structure
2024-05-22 11:34:34 +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
a716e7ea79
Kernel: replaced synchronous prune by a refeed
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
77659b1994
Netindex: Dropping tmp handle mechanism in favor of deferred lfuc_unlock
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
9c564eff27
Enabling warnings for implicit seq_cst in atomic access
2024-05-22 11:34:34 +02:00
Maria Matejka
2aee389ef5
Doc: short migration info for BIRD 2 -> 3
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
23f7208a82
Lock free journal refactored into a separate data 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