History | View | Annotate | Download (23.1 KB)
Merge branch 'int-new-rpki-squashed' (early part) into int-new
BGP redesign
Integrated and extensible BGP with generalized AFI handling,support for IPv4+IPv6 AFI and unicast+multicast SAFI.
RPKI protocol with one cache server per protocol
The RPKI protocol (RFC 6810) using the RTRLib(http://rpki.realmv6.org/) that is integrated insidethe BIRD's code.
Implemeted transports are: - unprotected transport over TCP - secure transport over SSHv2...
Merge remote-tracking branch 'origin/master' into int-new
Merge remote-tracking branch 'origin/rte-update' into int-new
Build system reworked to one global Makefile with includes and no nesting
Also removed the lib-dir merging with sysdep. Updated #include'saccordingly.
Fixed make doc on recent Debian together with moving generated doc intoobjdir.
Moved Makefile.in into root dir...
Add the Babel routing protocol (RFC 6126)
This patch implements the IPv6 subset of the Babel routing protocol.Based on the patch from Toke Hoiland-Jorgensen, with some heavymodifications and bugfixes.
Thanks to Toke Hoiland-Jorgensen for the original patch.
Route update: move table lookup from protocols into rte_update2().
Many protocols do almost the same when creating a rte_update requestbefore calling rte_update2(). This commit should simplify the protocolside of the route-creation routine.
Channelize: rt_notify arg conversion table -> channel
Channels - explicit links between protocols and tables
The patch adds support for channels, structures connecting protocols andtables and handling most interactions between them. The documentation ismissing yet.
BGP multipath support
Kernel option 'merge paths' allows to merge routes exported to kernelprotocol (currently BGP and static routes) to multipath routes.
unsigned [int] -> uint
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.
Fixes limit verification during reconfiguration.
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
Conflicts:
filter/filter.c nest/proto.c nest/rt-table.c proto/bgp/bgp.h proto/bgp/config.Y
BFD work in progress.
Now it compiles and mostly works.
Separate import and receive limits.
They have different behavior w.r.t. filtered routes that are kept.
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.
Fixes BGP subcode during global shutdown.
Some fixes in route export limits.
Implements generalized export limits.
And also fixes some minor bugs in limits.
Fixes in generalized import limits.
Implements generalized import hooks.
Thanks to Alexander V. Chernikov for the original patch.
Merge branch 'soon'
nest/proto.c nest/rt-table.c
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.
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...
Assign default protocol preference via proto_config_new().
The patch from Alexander V. Chernikov.
Implements deterministic MED handling.
Thanks to Alexander V. Chernikov for many suggestions.
Implements protocol templates.
Based on the patch from Alexander V. Chernikov.Extended to support almost all protocols.Uses 'protocol bgp NAME from TEMPLATE { ... }' syntax.
Implements Router Advertisement protocol.
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.
Implements BGP 'show protocols' info details.
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...
Restricted read-only CLI.
Also adds support for executing commands using birdc <cmd>.
Implements pattern match for 'show protocols' command.
And generally consolidates protocol commands.
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...
Fixes protocol statistics for pipes.
Fixes a tricky bug in the pipe protocol.
When uncofiguring the pipe and the peer table, the peer table wasunlocked when pipe protocol state changed to down/flushing and not todown/hungry. This leads to the removal of the peer table beforethe routes from the pipe were flushed....
Implements MRTdump feature.
Finishes 'route reload' feature.
Implements route re-feed.
This can be used to re-feed routes to protocol after soft change inexport filters.
Implements BGP route refresh.
Implement description field of protocol.
Implements protocol-specific router id and updates documentation.
Adds support for soft reconfiguration.
Implements route statistics and fixes some minor bugs.
Changes pipes to transfer all routes between routing table, not just optimal routes.
Proper format functions for ORIGINATOR_ID, CLUSTER_LIST
Asynchronous feeding of protocols.
Don't log state changes if nothing user-visible has changed.
Changed semantics of the rt_update hook. The attribute list we pass nowcontains all attributes, not just the temporary ones. This avoids havingto merge the lists inside protocols or doing searches on both of them.
Also, do filtering of routes properly. (I'd like to avoid it, but it's...
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...
When rte_update is called for an identical route, don't announce anything.
Please implement the rte_same hook in your protocols. It should justcompare your metrics stored directly in rte, the rest is done by the core.
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,...
Bare skeleton of the BGP.
Added tracing of interface events.
Added protocol debugging flags (protocol.h: D_xxx), parsing of themin configuration files and commands for manipulating them.
Current debug message policy:
o D_STATES, D_ROUTES and D_FILTERS are handled in generic code. o Other debug flags should be handled in the protocols and whenever...
Added proto->hash_key which contains randomly generated hash key usedfor calculation of hash functions depending on proto.
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).
protocol->startup_counter no longer exists.
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...
Reworked proto lists -- each proto is now in two lists: the global one(proto_list) and per-type one (original lists). A lot of things simplified.
Implemented `disable', `enable' and `restart' CLI commands.
Converted shutdown to a kind of reconfiguration, it's no more handledas a exception in protocol state machines. Introduced a `shutdown'CLI command. Killed few reconfiguration bugs.
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.
Added proto_get_named() to be used in CLI commands to get protocol instanceof a given protocol with optionally given name. See `show static' for anexample.
Added get_route_info and show_route_data hooks to struct protocol.Please implement them.
`show protocols' now shows time of last state change and protocol-dependentstatus information (obtained via newly introduced hook protocol->get_status).
Remember protocol instance in proto_config and use that for`show protocols <name>'.
`show interfaces' and `show protocols' works.
Added few basic commands: show status, show interfaces [summary],show protocols (incomplete).
Implemented a Table-to-Table protocol a.k.a The Pipe.
Protocol engine bug fixes:
o Make proto_config->table always point to the right table even if it should be the default one. o When shutting down, kill protocol in reverse order of their priority. o When stopping a protocol down, disconnect it from...
Added extra argument to rt_update hook which contains a pointer to thetemporary attribute list.
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...
I rewrote the interface handling code, so that it supports multipleaddresses per interface (needed for example for IPv6 support).
Visible changes:
o struct iface now contains a list of all interface addresses (represented by struct ifa), iface->addr points to the primary address (if any)....
Added some new protocol hooks (look at the comments for better explanation):
make_tmp_attrs Convert inline attributes to ea_list store_tmp_attrs Convert ea_list to inline attributes import_control Pre-import decisions
Added new protocol hook for dumping of protocol-dependent routeattributes.
Please implement in all protocols.
Added everything protocols need to know about multiple routing tables,i.e. struct proto now contains field 'table' pointing to routing tablethe protocol is attached to. Use this instead of &master_table.
Modified all protocols except the kernel syncer to use this field.
Slightly better generator of default protocol instance names.
Allow input and output filters (only accept/reject style as we didn't definemodifying filters yet) to be attached to protocol instances.
Removed the `rta_same' hook since it's no longer needed (all protocolsneeding some local information should use extended attrs and cachedrta's).
Yes, joining the crew. Sorry for being late. Added dummy functions for OSPF.
Introduced protocol priority (all 'normal' protocols should use thedefault zero priority). No more "kernel syncer initialized beforedevice routes" problems.
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.
Perform gracious shutdown upon receipt of SIGTERM. Finally we cantest the whole protocol shutdown code... :)
struct proto again contains instance name (a copy of proto->cf->name).
Implemented new configuration/reconfiguration interface and defined protocolstate machines. Full explanation will follow soon.
Added skeleton of static route protocol.
Added configuration of the device internal protocol. This is primarilyintended to serve as an example of interface pattern list use. As a sideeffect, you can disable generating of device routes by disablingthis protocol.
Allow setting debug value and `disabled' flag in protocol definition.
Insert/remove hooks return void, not int.
Proto struct now contain (down | starting | up) state.
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.