summaryrefslogtreecommitdiff
path: root/filter
AgeCommit message (Collapse)Author
2021-11-30For safer memory allocations, resources are bound to loops.Maria Matejka
Also all loops have their basic resource pool for allocations which are auto-freed when the loop is stopping.
2021-11-22Routing tables now have their own loops.Maria Matejka
This basically means that: * there are some more levels of indirection and asynchronicity, mostly in cleanup procedures, requiring correct lock ordering * all the internal table operations (prune, next hop update) are done without blocking the other parts of BIRD * the protocols may get their own loops very soon
2021-11-22Route sources have an explicit ownerMaria Matejka
This commit prevents use-after-free of routes belonging to protocols which have been already destroyed, delaying also all the protocols' shutdown until all of their routes have been finally propagated through all the pipes down to the appropriate exports. The use-after-free was somehow hypothetic yet theoretically possible in rare conditions, when one BGP protocol authors a lot of routes and the user deletes that protocol by reconfiguring in the same time as next hop update is requested, causing rte_better() to be called on a not-yet-pruned network prefix while the owner protocol has been already freed. In parallel execution environments, this would happen an inter-thread use-after-free, causing possible heisenbugs or other nasty problems.
2021-11-22Converting the former BFD loop to a universal IO loop and protocol loop.Maria Matejka
There is a simple universal IO loop, taking care of events, timers and sockets. Primarily, one instance of a protocol should use exactly one IO loop to do all its work, as is now done in BFD. Contrary to previous versions, the loop is now launched and cleaned by the nest/proto.c code, allowing for a protocol to just request its own loop by setting the loop's lock order in config higher than the_bird. It is not supported nor checked if any protocol changed the requested lock order in reconfigure. No protocol should do it at all.
2021-11-22Table import and export are now explicit hooks.Maria Matejka
Channels have now included rt_import_req and rt_export_req to hook into the table instead of just one list node. This will (in future) allow for: * channel import and export bound to different tables * more efficient pipe code (dropping most of the channel code) * conversion of 'show route' to a special kind of export * temporary static routes from CLI The import / export states are also updated to the new algorithms.
2021-11-09Split route data structure to storage (ro) / manipulation (rw) structures.Maria Matejka
Routes are now allocated only when they are just to be inserted to the table. Updating a route needs a locally allocated route structure. Ownership of the attributes is also now not transfered from protocols to tables and vice versa but just borrowed which should be easier to handle in a multithreaded environment.
2021-10-13Dropping the RTS_DUMMY temporary route storage.Maria Matejka
Kernel route sync is done by other ways now and this code is not used currently.
2021-10-13Route: moved rte_src pointer from rta to rteMaria Matejka
It is an auxiliary key in the routing table, not a route attribute.
2021-10-13Preference moved to RTA and set explicitly in protocolsMaria Matejka
2021-09-10Reducing filter stack size to allow for lesser thread stack sizeMaria Matejka
2021-09-10Filter: Additional consistency checksMaria Matejka
2021-05-18Flowspec: Label field should use numeric operator and not bitmask operatorOndrej Zajicek (work)
2021-05-18Flowspec: Do not use comma for bitmask operatorsOndrej Zajicek (work)
For numeric operators, comma is used for disjunction in expressions like "10, 20, 30..40". But for bitmask operators, comma is used for conjunction in a way that does not really make much sense. Use always explicit logical operators (&& and ||) to connect bitmask operators. Thanks to Matt Corallo for the bugreport.
2021-05-17Filter: Add MPLS label route attributeTrisha Biswas
Add support to set or read outgoing MPLS labels using filters. Currently this supports the addition of one label per route for the first next hop. Minor changes by committer.
2021-03-15Filter: Update 'gw' to handle IPv6 link-local addressesOndrej Zajicek (work)
When a link-local address is set, use the existing iface for scope. Thanks to Marcel Krüger for the bugreport.
2021-02-07Filter: Recursive filter iteration codeOndrej Zajicek (work)
Add macros for recursive filter iteration that allows to examine all instructions reachable from a filter.
2020-12-28Filter: Fix return on top-levelOndrej Zajicek (work)
Broken detection of top-level case caused crash when return was called from top-of-stack position. It should behave as reject/accept. Thanks to Damian Zaremba for the bugreport.
2020-12-02Filter: Add 'weight' route attributeOndrej Zajicek (work)
Add 'weight' route attribute that allows to get and set ECMP weight of nexthops. Similar to 'gw' attribute, it is limited to the first nexthop, but it is useful for handling BGP multipath, where an ECMP route is merged from multiple regular routes.
2020-11-24Minor cleanups with cfg_allocz()Ondrej Zajicek (work)
Also fixes some more failed asserts due to add_tail().
2020-06-28Filter: Improve handling of sets in BGP path masksKazuki Yamaguchi
Compare the content of PM_ASN_SET in path masks. A reconfiguration was not properly triggering a reload of affected protocols when the members of a set in a path mask change. Also, update the printing code to so that it can display sets in a path mask.
2020-06-28Filter: Fix comparison of BGP path maskKazuki Yamaguchi
Add a missing return statement. Path masks with the same length were all considered the same. Comparing two with different length would cause out-of-bounds memory access.
2020-05-18Nest: Implement BGP path mask loop operatorOndrej Zajicek (work)
Implement regex-like '+' operator in BGP path masks to match previous path mask item multiple times. This is useful as ASNs may appear multiple times in paths due to path prepending for traffic engineering purposes.
2020-05-02Filter: Remove quitbird commandOndrej Zajicek (work)
No need for this debug filter command and it can be abused from CLI.
2020-05-01Filter: Don't alloc varargs array if its length would be zeroMaria Matejka
2020-05-01Filter: Removed forgotten dead codeMaria Matejka
2020-04-28Filter: fixed omitted overflow check in EC constructorMaria Matejka
2020-04-09Configuration strings are constant.Maria Matejka
This is merely a const propagation. There was no problem in there.
2020-03-26Filter: Remove mixed address tests and fix formattingOndrej Zajicek (work)
2020-03-26Filter: Optimize IPv4 prefix setsOndrej Zajicek (work)
Use separate IPv4 and IPv6 implementation of prefix sets. Just this change makes IPv4 prefix sets 60% smaller and 50% faster.
2020-01-07Filter: Fix typecheck for AND/OR.Ondrej Zajicek (work)
Do not apply dynamic type check for second argument of AND/OR, as it is not evaluated immediately like regular argument would be. Thanks to Mikael for the bugreport.
2019-12-17Test: Improve filter_testOndrej Zajicek (work)
Initial parsing of test.conf must be done directly in filter_test main, while reconfiguration is handled as a regular test. Also fix several minor issues in test code.
2019-12-12Filter: fix filter comparison testMaria Matejka
2019-12-10Filter: Fix function comparisonOndrej Zajicek (work)
Check the SYM_FLAG_SAME in new symbols. The old code checked that in old symbols (f2).
2019-12-09Filter: Add support for src/dst accessors for Flowspec and SADROndrej Zajicek (work)
2019-11-05Filter: Add type info for more instructionsOndrej Zajicek (work)
2019-11-05Filter: Improve typecheck error messagesOndrej Zajicek (work)
2019-11-05Filter: Better constant promotionOndrej Zajicek (work)
We use constant promotion from IPv4 to Router-ID values, as they have same literals. Instead of ad-hoc code in filter instructions, add constant promotion code to parse-time typecheck code.
2019-11-05Filter: Improved parse-time typechecksOndrej Zajicek (work)
2019-11-05Filter: Parse-time typechecksOndrej Zajicek
Most expressions can be type-validated in parse time. It is not strong enough to eliminate runtime checks, but at least one gets errors immediately during reconfigure.
2019-11-03Support for address family constantsOndrej Zajicek (work)
We already had them defined on BGP level, but they are more general.
2019-09-24Filter: Fix eval commandOndrej Zajicek (work)
2019-09-23Filters: Function body comparison result now used.Maria Matejka
Function bodies were compared in post-parse time, yet the result was not used and the functions were incorrectly considered the same as before. Now the result is used to reload affected protocols.
2019-09-10Filter: Fix crash with 'where' filters and function callsOndrej Zajicek (work)
The old 'where' code computed size value incorrectly, which leads to invalid instruction lines and filter errors or crashes.
2019-08-13Filter: Fixing empty block and never-executed-statement bugMaria Matejka
2019-08-06Filter: Allow to use set constants / expressions in path masksOndrej Zajicek (work)
Allow to not only use set literals in path masks, but also existing set constants or set expressions.
2019-08-06Filter: Allow to use sets in path masksOndrej Zajicek (work)
2019-07-30Conf: Fixed symbol redefinitionMaria Matejka
2019-07-15Filter: further split of print & die to FI_PRINT, FI_FLUSH and FI_DIEMaria Matejka
2019-07-15Filter: Simpler filter context allocationMaria Matejka
2019-07-15Filter: FID_MEMBER debug string is a C constant stringMaria Matejka