summaryrefslogtreecommitdiff
path: root/nest/rt-table.c
AgeCommit message (Collapse)Author
2021-11-09Refeed is done from export table when appropriateMaria Matejka
2021-11-09Recursive route nexthop updates now announced with valid new_best/old_best ↵Maria Matejka
information
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-11-09Extended route trace: logging Path IdentifiersMaria Matejka
2021-10-13Dropping the unused rte_same hookMaria Matejka
2021-10-13Dropping rte-local dumper entriesMaria Matejka
2021-10-13RIP fixup + dropping the tmp_attrs mechanism as obsoleteMaria Matejka
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-13IGP metric getter refactoring to protocol callbackMaria Matejka
Direct protocol hooks for IGP metric inside nest/rt-table.c make the protocol API unnecessarily complex. Instead, we use a proper callback.
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-10-13Preexport: No route modification, no linpool neededMaria Matejka
2021-10-13Export table: Delay freeing of old stored route.Maria Matejka
This is needed to provide the protocols the full old route after filters when export table is enabled.
2021-04-19Internal route tables have a reduced cleanup routineMaria Matejka
This fixes an internal table cleanup bug introduced in ff397df7edcbe7a8abca5b419729b9c64c063847.
2021-03-30Routing table is now a resource allocated from its own poolMaria Matejka
This also fixes memory leaks from import/export tables being never cleaned up and freed.
2021-03-30Routing tables list iteration should use explicit node struct positionMaria Matejka
2021-02-10Nest: Automatic channel reloads based on RPKI changesOndrej Zajicek (work)
If there are roa_check() calls in channel filters, then the channel subscribes to ROA table notifications, which are sent when ROA tables are updated (subject to settle time) and trigger channel reload or refeed.
2020-12-29Nest: Read Babel metric as IGP metricJames Lu
(Minor syntactic changes by committer)
2020-12-07Nest: Per-channel debug flagsOndrej Zajicek (work)
The patch add support for per-channel debug flags, currently just 'states', 'routes', and 'filters'. Flag 'states' is used for channel state changes, remaining two for routes passed through the channel. The per-protocol debug flags 'routes'/'filters' still enable reporting of routes for all channels, to keep existing behavior. The patch causes minor changes in some log messages.
2020-11-15Nest: Fix crash in receive limit handling in import tableOndrej Zajicek (work)
Logging as a result of triggered receive limit in import table code accesset rte->net, which was not filed yet. Thanks to Pier Carlo Chiodi for the bugreport.
2020-07-16Nest: Keep route ordering during route updatesOndrej Zajicek (work)
Put new non-best routes to the end of list instead of the second position. Put updated routes to their old position. Position is changed just by best route selection.
2020-05-01Uninitialized list nodes fixesMaria Matejka
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-07KRT: Improve syncer code to avoid using temporary data in rtableOndrej Zajicek (work)
The old code stored route verdicts and temporary routes directly in rtable. The new code do not store received routes (it immediately compares them with exported routes and resolves conflicts) and uses internal bitmap to keep track of which routes were received and which needs to be reinstalled. By not putting 'invalid' temporary routes to rtable, we keep rtable in consistent state, therefore scan no longer needs to be atomic operation and could be splitted to multiple events.
2019-11-26Nest: Use bitmaps to keep track of exported routesOndrej Zajicek (work)
Use a hierarchical bitmap in a routing table to assign ids to routes, and then use bitmaps (indexed by route id) in channels to keep track whether routes were exported. This avoids unreliable and inefficient re-evaluation of filters for old routes in order to determine whether they were exported.
2019-11-03Nest: Fix bug in export tableOndrej Zajicek (work)
For regular channels do not compare src in export table, as we want to keep here only the best (exported) route per network.
2019-10-10Nest: Handle non-MPLS on MPLS case in recursive route updateOndrej Zajicek (work)
When non-MPLS recursive route resolves to MPLS underlying route, then it should get MPLS labels from the the underlying route.
2019-10-10Nest: Handle PtP links in recursive route updateOndrej Zajicek (work)
Underlying (IGP) route may lead to PtP link, in this case it does not need gateway. Which is different than direct route without gateway. When recursive (BGP) route uses PtP route, it should not use recursive next hop as immediate next hop, while for direct routes it should.
2019-10-10Nest: Fix recursive route updateOndrej Zajicek (work)
Missing cleanup can lead to dangling pointer to old next hops.
2019-10-09BGP: AIGP metric support (RFC 7311)Ondrej Zajicek (work)
2019-09-24Nest: Fix bug in export tableOndrej Zajicek (work)
Exported route may be in modified state, we need to get cached one for rte_same() and rta_clone() to work properly.
2019-08-27Channel refeed with import table splitting between routes for one prefixMaria Matejka
2019-08-14BGP: implement Adj-RIB-OutOndrej Zajicek (work)
The patch implements optional internal export table to a channel and hooks it to BGP so it can be used as Adj-RIB-Out. When enabled, all exported (post-filtered) routes are stored there. An export table can be examined using e.g. 'show route export table bgp1.ipv4'.
2019-03-22Fixed one warning and one undefined value.Maria Matejka
2019-03-18Merge branch 'master' into HEADMaria Matejka
2019-03-14Nest: Update handling of temporary attributesOndrej Zajicek (work)
The temporary atttributes are no longer removed by ea_do_prune(), but they are undefined by store_tmp_attrs() protocol hooks. This fixes several bugs where temporary attributes were removed when they should not or not removed when they should be. The flag EAF_TEMP is no longer needed and was removed. Update all protocol make_tmp_attrs() / store_tmp_attrs() hooks to use helper functions and to handle unset attributes properly. Also fix some related bugs like improper handling of empty eattr list.
2019-03-06OSPF: Improved handling of tmpattrsOndrej Zajicek (work)
Keep track of whether OSPF tmpattrs are actually defined for given route (using flags in rte->pflags). That makes them behave more like real eattrs so a protocol can define just a subset of them or they can be undefined by filters. Do not set ospf_metric2 for other than type 2 external OSPF routes and do not set ospf_tag for non-external OSPF routes. That also fixes a bug where internal/inter-area route propagated from one OSPF instance to another is initiated with infinity ospf_metric2. Thanks to Yaroslav Dronskii for the bugreport.
2019-02-22Nest: Do not compare rte.flags during rte_update()Ondrej Zajicek (work)
Route flags are mosty internal state of rtable, they are not significant to whether a route has changed. With the old code, all routes received as a part of enhanced route refresh are always re-announced to other peers due to change in REF_STALE.
2019-02-20Conf: Symbol implementation converted from void pointers to unionMaria Matejka
... and consted some declarations.
2019-02-20Filter: merged filter instruction constructors, counting line size on ↵Maria Matejka
instruction construct
2019-02-20Filters: split the large filter.h file to smaller files.Maria Matejka
This should be revised, there are still ugly things in the filter API.
2019-02-19Nest: Prevent withdraws from propagation back to source protocol (for ↵Ondrej Zajicek (work)
accepted mode) Update for one of previous patches, handles the the issue for first-accepted mode of route propagation.
2019-02-09Merge remote-tracking branch 'origin/mq-opt'Ondrej Zajicek (work)
2019-02-05Nest: Improve export counter handlingOndrej Zajicek (work)
One of previous workarounds for phantom route avoidance breaks export counters by expanding sending of spurious withdraws, which are send when we are not sure whether we have advertised that routes in the past. If not, then export counter is decreased, but it was not increased before, so it overflows under zero. The patch fixes that by sendung spurious withdraws, but not counting them on export counter. That may lead to error in the other direction, but that happens only as a race condition (i.e., in normal operation filters return proper values about old route export state).
2019-02-02Nest: Reestablish preferred countersOndrej Zajicek (work)
2019-01-31Nest: Don't lookup net in table before filters are run.Maria Matejka
Using dummy net instead. This should help with performance on rejected routes.
2019-01-30Nest: Prevent withdraws from propagation back to source protocolOndrej Zajicek (work)
The earlier fix loosen conditions for not running filters on old route when deciding about route propagation to a protocol to avoid issues with ghost routes in some race conditions. Unfortunately, the fix also caused back-propagation of withdraws. For regular updates, back-propagation is prevented in import_control hooks, but these are not called on withdraws. For them, import_control hooks are called on old routes instead, changing (old, NULL) notification to (NULL, NULL), which is ignored. By not calling export processing in some cases, the withdraw is not ignored and is back-propagated. This patch fixes that by contract conditions so the earlier fix is not applied to back-propagated updates.
2019-01-17Nest: Don't make tmp_attr before preexport is calledJan Maria Matejka
2018-12-12Nest: Update statistics and rx-limit for Adj-RIB-InOndrej Zajicek (work)
2018-12-12BGP: implement Adj-RIB-InOndrej Zajicek (work)
The patch implements optional internal import table to a channel and hooks it to BGP so it can be used as Adj-RIB-In. When enabled, all received (pre-filtered) routes are stored there and import filters can be re-evaluated without explicit route refresh. An import table can be examined using e.g. 'show route import table bgp1.ipv4'.