History | View | Annotate | Download (26.5 KB)
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,...
KRT: Fixes route reload
Did not really worked
KRT: Fixes learning of preferred kernel routes.
When a new route was imported from kernel and chosen as preferred, thenthe old best route was propagated as a withdraw to the kernel protocol.Under some circumstances such withdraw propagated to the BSD kernel could...
BGP: Enhanced route refresh (RFC 7313) support
Also hook feed_done is renamed to feed_end.
Store protocol config size inside protocol structure
Make proto_config_new() use this info instead of supplied size.
Thanks to Alexander V. Chernikov for the patch.
Replacing GNU old-style field designator extension
Implements token bucket filter for rate limiting.
Refresh kernel protocol when interface disappears.
When an interface goes down, (Linux) kernel removes routes pointing tothat ifacem but does not send withdraws for them. We rescan thekernel table to ensure synchronization.
Thanks to Alexander Demenshin for the bugreport.
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
Changes primary addr selection on BSD to respect SIOCGIFADDR ioctl() result.
Thanks to Alexander V. Chernikov for the original patch.
Conflicts:
filter/filter.c nest/proto.c nest/rt-table.c proto/bgp/bgp.h proto/bgp/config.Y
Forces KRT rescan on syncer startup with multi syncer config.
Thanks to Sergey Popovich for the patch.
Fixes a bug in kernel extended attribute processing.
The bug caused that krt_prefsrc attribute was not processed when a routereceived from a kernel protocol was exported to another kernel protocol.
Thanks to Sergey Popovich for a bugreport.
Makes krt.c much more readable.
Implements undo command and optional timeout for configuration
Several new configure command variants:
configure undo - undo last reconfigurationconfigure timeout - configure with scheduled undo if not confirmed in timeoutconfigure confirm - confirm last configuration...
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'.
Fixes a bug in primary IP selection.
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.
Fixes flushing of device routes.
Cleanup in sysdep KRT code, part 3.
Just one more renaming, old krt_set_notify() to krt_replace_rte().
Cleanup in sysdep KRT code, part 2.
Remove support for historic Linux kernels,merge krt-iface, krt-set and krt-scan stub headers.
Cleanup in sysdep KRT code, part 1.
OS-dependent functions renamed to be more consistent,prepared to merge krt-set and krt-scan headers.
Name changes:
struct krt_if_params -> struct kif_paramsstruct krt_if_status -> struct kif_statusstruct krt_set/scan_params -> struct krt_params...
Merge branch 'soon'
nest/proto.c nest/rt-table.c
Fixes several minor bugs in kernel syncer.
Adds krt_metric linux route attribute.
Adds krt_source route attribute.
Thanks Jeremie Dimino for the original patch.
Fixes a bug causing crash during soft reconfiguration of export to kernel proto.
Assign default protocol preference via proto_config_new().
The patch from Alexander V. Chernikov.
Implements handling of BSD iface arrival/departure notifications.
Thanks to Alexander V. Chernikov for original patch.
Implements protocol templates.
Based on the patch from Alexander V. Chernikov.Extended to support almost all protocols.Uses 'protocol bgp NAME from TEMPLATE { ... }' syntax.
Adds support for several Linux kernel route attributes.
Fixes missing check in reconfiguration.
Restrict export of device routes to the kernel protocol.
In usual configuration, such export is already restrictedwith the aid of the direct protocol but there are someraces that can circumvent it. This makes it harder tobreak kernel device routes. Also adds an option to...
Better flushing of interfaces.
When device protocol goes down, interfaces should be flushedasynchronously (in the same way like routes from protocols are flushed),when protocol goes to DOWN/HUNGRY.
This fixes the problem with static routes staying in kernel routing...
Many changes in (mainly) kernel syncers.
- BSD kernel syncer is now self-conscious and can learn alien routes- important bugfix in BSD kernel syncer (crash after protocol restart)- many minor changes and bugfixes in kernel syncers and neighbor cache- direct protocol does not generate host and link local routes...
Removes phantom protocol from the pipe design.
It seems that by adding one pipe-specific exception to routeannouncement code and by adding one argument to rt_notify() callback icould completely eliminate the need for the phantom protocol instanceand therefore make the code more straightforward. It will also fix some...
The pipe cleanup.
Changes pipes to transfer all routes between routing table, not just optimal routes.
Implements primary address selection base on 'primary' option.
Syntax error fix for systems without CONFIG_SELF_CONSCIOUS (KRT_ALLOW_LEARN)
Fix bugs related to kernel table synchronization.
KRF_INSTALLED flag was not cleared during reconfigurationthat lead to not removing routes during reconfigure whenexport rules changed.
We also should not try to remove routes we didi not installed,on Linux this leads to warnings (as kernel checks route source...
Rate limit for most abundant log messages
Fixes segfault with multiple routing tables.
Bugfix for routing table breaking bug.
Here is a patch fixing a bug that causes breakage of a local routingtable during shutdown of Bird. The problem was caused by shutdownof 'device' protocol before shutdown of 'kernel' protocol. When'device' protocol went down, the route (with local network prefix)...
Used parameter can be marked as unused. :-) Thanx MJ.
Marked unused parameters as unused.
Marked unused parameters in sysdep code as such.
This probably IS the memory leak we're looking for. Alien routes weren'tcorrectly disposed of.
Added missing includes.
Fixes for the programmer's manual.
Fixes to the progdoc.
Spelling fixes to progdoc.
Documented all the sysdeps (only briefly, I admit).
Except for Filters, RIP and OSPF, the progdocs are complete.
When in persist mode, don't delete routes from kernel tables even ifthey cease to exist in our routing tables due to protocols having shut down.
Adapted to new rt_notify semantics.
Don't crash when reporting deleted routes.
Set preferences correctly.
Removed a lot of unused variables.
Please try compiling your code with --enable-warnings to see them. (Theunused parameter warnings are usually bogus, the unused variable onesare very useful, but gcc is unable to control them separately.)
Cleaned up debugging in kernel syncer. Netlink has still LOCAL_DEBUGturned on, but after some testing I'll gag it.
Garbage collector events and counters are now per table and one daythey can be made configurable if it turns out to be useful.
Killed protocol->priority. Protocol startup should be clean and hack-free now.It seems everything still works (except for disable/enable/restart which hangssometimes, but it's another story).
Kernel route syncer now supports dynamic reconfiguration. Also it doesn'tdepend on the startup counter hack now and uses a zero-time timer insteadto make itself scheduled after normal protocol startup.
Separated `official protocol names' used in status dumps from name templatesused for automatic generation of instance names.
protocol->name is the official name protocol->template is the name template (usually "name%d"), should be all lowercase.
Updated all protocols to define the templates, checked that their configuration...
Reconfiguration for device protocol.
First attempt on dynamic reconfiguration. There are still lots of bugsand problems to solve, but the hardest part works.
Except for special protocols (nowadays only the kernel syncer), don'texport host and link scope routes.
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 extra argument to rt_update hook which contains a pointer to thetemporary attribute list.
Kill remaining master_table relics in KRT code.
Make all protocols pass routing table to rte_update and rte_discard.
Removed TOS support. This simplifies many things a lot.
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...
Don't try to delete interface routes on CONFIG_AUTO_ROUTES systems.
Moved to a much more systematic way of configuring kernel protocols.
o Nothing is configured automatically. You need to specify the kernel syncer in config file in order to get it started. o Syncing has been split to route syncer (protocol "Kernel") and...
Fixed processing of !krt_capable() routes. Converted device route decisionsto the krt_capable mechanism as well.
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.
Fix several things I broke today.
Rewrote the kernel syncer. The old layering was horrible.
The new kernel syncer is cleanly split between generic UNIX moduleand OS dependent submodules:
- krt.c (the generic part) - krt-iface (low-level functions for interface handling) - krt-scan (low-level functions for routing table scanning)...