BGP multipath support
Kernel option 'merge paths' allows to merge routes exported to kernelprotocol (currently BGP and static routes) to multipath routes.
Moving of mulipath merging code from OSPF to nest
unsigned [int] -> uint
unsgined char -> byte
KRT: Add support for plenty of kernel route metrics
Linux kernel route metrics (RTA_METRICS netlink route attribute) arerepresented and accessible as new route attributes:
krt_mtu, krt_window, krt_rtt, krt_rttvar, krt_sstresh, krt_cwnd, krt_advmss,krt_reordering, krt_hoplimit, krt_initcwnd, krt_rto_min, krt_initrwnd,...
Add bitfield route attribute type
Implements show route noexport option.
Shows routes that would be exported to the protocol but are rejected bythe export filter.
BGP graceful restart support.
Also significant core protocol state changes needed for that,global graceful restart recovery state and kernel proto supportfor recovery.
Merge branch 'master' into add-path
filter/filter.c nest/proto.c nest/rt-table.c proto/bgp/bgp.h proto/bgp/config.Y
Some fixes in filter code.
Thanks to Sergey Popovich for original patches.
Fixes bug in protocol flushing and rtable pruning.
When route was propagated to another rtable through a pipe and then thepipe was reconfigured softly in such a way that any subsequent routeupdates are filtered, then the source protocol shutdown didn't clean up...
Implements router advertisements activated by received routes.
The RAdv protocol could be configured to change its behavior based onavailability of routes, e.g., do not announce router lifetime when adefault route is not available.
Changes 'rejected' to 'filtered' in one of the last patches.
Allows rejected routes to be kept and examined.
When 'import keep rejected' protocol option is activated, routesrejected by the import filter are kept in the routing table, but theyare hidden and not propagated to other protocols. It is possible toexamine them using 'show route rejected'.
Implements ADD-PATH extension for BGP.
Allows to send and receive multiple routes for one network by one BGPsession. Also contains necessary core changes to support this (routingtables accepting several routes for one network from one protocol).It needs some more cleanup before merging to the master branch.
Finalize RA_ACCEPTED handling.
Implement RA_ACCEPTED mode of route propagation.
Merge branch 'soon'
Fixes responsiveness for protocol shutdown.
When a protocol went down, all its routes were flushed in one step, thatmay block BIRD for too much time. The patch fixes that by limitingmaximum number of routes flushed in one step.
Route Origin Authorization basics.
- ROA tables, which are used as a basic part for RPKI. - Commands for examining and modifying ROA tables. - Filter operators based on ROA tables consistent with RFC 6483.
Better support for multitable protocols.
The nest-protocol interaction is changed to better handle multitableprotocols. Multitable protocols now declare that by 'multitable' field,which tells nest that a protocol handles things related to proto-rtableinteraction (table locking, announce hook adding, reconfiguration of...
Implements deterministic MED handling.
Thanks to Alexander V. Chernikov for many suggestions.
Signal problems with route installation to kernel tables.
BGP Extended communities.
Prints full community lists during 'show route all'.
Adds support for several Linux kernel route attributes.
Core multipath support.
Adds igp_metric attribute.
Implements IGP metric comparison for BGP routes.
Use link-local addresses in recursive next hops for IPv6 BGP.
Hostcache should use trie to filter relevant route changes.
For hostentry cache, replace FIB with a hash table using (IP, dep table) as a key.
Implements hostcache and recursive next hops.
Hostcache is a structure for monitoring changes in a routing table thatis used for routes with dynamic/recursive next hops. This is needed forproper iBGP next hop handling.
Shows source (Router ID) for OSPF routes and adds such attribute.
A sad thing is that we does not have a 'router_id' filter type,so it must be given as decimal number in filters.
Implement proper LSA ID generation.
The pipe cleanup.
Changes pipes to transfer all routes between routing table, not just optimal routes.
Change import/preimport to export/preexport to be consistent with filters.
'show route protocol <p>' added to CLI.
A lot of changes: - metric is 3 byte long now - summary lsa originating - more OSPF areas possible - virtual links - better E1/E2 routes handling - some bug fixes..
I have to do: - md5 auth (last mandatory item from rfc2328) - !!!!DEBUG!!!!! (mainly virtual link system has probably a lot of bugs)...
RTS_OSPF_BONDARY is nonsense, RTS_OSPF_IA must have smaller id than RTS_OSPF_EXT
Added RTD_NONE /* Just for internal use */
Removed rta_find() since nobody uses it and it's more convenientto use ea_find() directly.
I've changed the init callback type to a typedef to work around a bugin kernel-doc I'm too lazy to hunt now.
Route attributes for OSPF.
Better rt dumping.
To find out a type of route (external, inter/intra area)
Fixed a very nasty bug in FIB iterators.
Asynchronous feeding of protocols.
Added fib_route() which does (although very slow) lookup of longest-matchrouting in a FIB.
Fixed nasty segfault in rip.
Added more convient interface for ea_find.
What is special about int default;? Compiler chokes on that!
Several simplifications of the fib iterators.
Use preferences properly.
Implemented `show route <...> stats'.
Added commands `show route protocol <p>' and `show route import <p>' whichshow the routing table as exported to the protocol given resp. as returnedfrom its import control hook.
To get handling of filtered extended attributes right (even in the old`show route where <filter>' command), the get_route_info hook gets an...
Define EAF_ORIGINATED and propagate it properly when merging attribute lists.
Printing of AS paths and community sets.
As usuall, most important info was missing.
Export ea_same() and ea_hash().
BGP doesn't need any inline attributes.
Changed initialization of protocol list -- now we call proto_build() insteadof calling the protocols manually.
Implemented printing of dynamic attributes in `show route all'.
Each protocol can now register its own attribute class (protocol->attr_class,...
Define new data types for BGP.
Renamed EAF_INLINE to EAF_TEMP to make the name reflect the real meaning.
Garbage collector events and counters are now per table and one daythey can be made configurable if it turns out to be useful.
Implemented real attribute cache.
Removed RTF_EXTERIOR and RTF_TAGGED (unused).
First attempt on dynamic reconfiguration. There are still lots of bugsand problems to solve, but the hardest part works.
Added dumping of routing tables (`show route'). This includes filtering.
Fix timeouts. Triggered updates are not done, yet.
Allow EA type to be set to 'undefined' which overrides all further definitonsof that EA in the same list and causes ea_find() to fail unless you addEA_ALLOW_UNDEF to the second argument.
ea_sort (resp. ea_do_prune()) removes all undef'd attributes from the list....
DEF_PREF_UKR and DEF_PREF_SINK removed.
Renamed attr->attrs to attr->eattrs.
Implemented a Table-to-Table protocol a.k.a The Pipe.
Kernel route syncer supports multiple tables.
The changes are just too extensive for lazy me to list themthere, but see the comment at the top of sysdep/unix/krt.c.The code got a bit more ifdeffy than I'd like, though.
Also fixed a bunch of FIXME's and added a couple of others. :)
Added extended attributes for rip.
From now we support multiple tables. The master_table variable isdefinitely gone. Both rte_update() and rte_discard() have an additionalargument telling which table should they modify.
Also, rte_update() no longer walks the whole protocol list -- each table...
Removed TOS support. This simplifies many things a lot.
Routing table core changes to support full route filtering:
o Introduced rte_cow() which should be used for copying on write the rte's in filters. Each rte now carries a flag saying whether it's a real route (possessing table linkage and other insignia) or a local...
More changes to the kernel syncer.
o Now compatible with filtering.o Learning of kernel routes supported only on CONFIG_SELF_CONSCIOUS systems (on the others it's impossible to get it semantically correct).o Learning now stores all of its routes in a separate fib and selects...
Implemented extended route attributes and all related functions.
KRT: Implemented asynchronous route / interface state notifications(via Netlink). Tweaked kernel synchronization rules a bit. Discoveredlocking bug in kernel Netlink :-)
Future plans: Hunt all the bugs and solve all the FIXME's.
Renamed struct rtattr to struct rta to make things more consistent andavoid namespace clashes with <linux/rtnetlink.h>. Other files shouldnot be affected since they use 'rta' directly.
Fixed bug in FIB_ITERATE_END: it assumed the control variable is named"z". I've added an argument specifying name of the variable.
Renamed "again" label in FIB_ITERATE_* to "fis_again" to avoid nameclashes.
Rewrote fib functions to make them insert/delete/asynchronous-walk safe.This is implemented in a way similar to lib/slists.h, but it took somemore effort to make rehashing not disturb the readers. We do it by justtaking highest k bits of ipa_hash as our hash value and sorting each...
Added source RTS_DUMMY for temporary routes. They should never appearin the main table.
Minor rte/rta interface changes:
o rte can now contain a pointer to both cached and uncached rta. Protocols which don't need their own attribute caching can now just fill-in a rta, link it to rte without any calls to attribute cache and call rte_update()...
KRF_* flags moved to krt.h as they are internal to kernel syncer,fib->pad0,pad1 renamed to x0,x1 and in case of struct net x0 is reservedfor kernel syncing as well.
Removed protocol-specific data in rte for protocol static since nosuch data ever existed.
RIP now actually talks to itself.
Added pointer to network to RTE. The complications with passing NET separatelyaren't worth 4 bytes per RTE.
rte_discard and rte_dump don't need net * as parameter.
o FIB flags now available for FIB users.o struct network: FIB flags used for kernel syncing.o struct network: `next' field deleted (historical relic).
Split protocol init to building of protocol list and real protocol init.Added kernel route table syncer skeleton.
After contemplating about RIP route timeouts for a long time, I've implementedprotocol callbacks for route insertion and deletion from the central table.RIP should maintain its own per-protocol queue of existing routes, scan itperiodically and call rte_discard() for routes that have timed out.
Solve chicken-and-egg problems with protocol startup. We now queue all inactiveprotocols and don't send route/interface updates to them and when they come up,we resend the whole route/interface tables privately.
Removed the "scan interface list after protocol start" work-around.