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 command that shows memory usage.
Avoid warning if not compiled with pipes.
Implements BGP 'show protocols' info details.
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...
Fix configure to enable warnings and fix most of them.
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....
Adds asterisk to the primary route in 'show route' cmd.
And also fixes a minor bug.
Adds some log messages related to configure.
Also fixes a bug in the previous patch.
Modifies configure to just reload protocols when filters change.
Before this change, protocols were restarted in that case.
Makes date/time formats configurable.
Implements MRTdump feature.
Finishes 'route reload' feature.
Fixes silly bug.
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.
Replace assert with log.
Although it is true unless there is a bug in BIRD, this assert is notneeded (code below does not require that assumption), so we should notcrash.
Adds support for soft reconfiguration.
Implements route statistics and fixes some minor bugs.
Fixes bug in protocol state machine
Scheduling flush must be done before resource pool freeing as itfrees some allocated list nodes from a global list.
Fixes core state machine.
The core state machine was broken - it didn't free resourcesin START -> DOWN transition and might freed resources afterUP -> STOP transition before protocol turned down. It leadsto deadlock on olock acquisition when lock was not freed...
Fixes race condition leading to memory corruption and crash.
When protocol started, feeding was scheduled. If protocolgot down before feeding was executed, then functionresponsible for connecting protocol to kernel routingtables was called after the function responsible for...
Marked unused parameters in core code as such.
Spelling fixes to progdoc.
Added documentation on protocols.
Protocol hooks deserve an extra chapter (to come soon).
Better formatting of protocol status.
No more problems when protocols gets disabled during feeding.
Asynchronous feeding of protocols.
Don't log state changes if nothing user-visible has changed.
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.)
Event handlers no longer return re-queue flag. Instead of using it, justcall ev_schedule() on the same handler which should work perfectly now.
Fixed several bugs in protocol state machine. Reconfigurations andrestarts of BGP seem to work now.
Don't forget to set filter pointers in struct proto when reconfiguring.
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,...
Include "lib/string.h" instead of <string.h>. It should give us bzero()and other non-portable functions on all systems.
Bare skeleton of the BGP.
Fixed a bunch of FIXME's by removing them :)
Great cleanup of debug messages. LOCAL_DEBUG turned off in most modules,several debug() calls converted to DBG.
Added debugging of protocol state transitions.
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.
Moved initlialization of protocol lists to global init. Argh.
Don't forget changing proto->name to point to name in new configuration(to avoid the name being freed with the old config).
Also remember to add proto_pipe to protocol_list.
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.
Added filter_same() for comparision of two filters.
Pavel, please implement this as soon as possible.
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.
Moved initialization of protocol list to proto.c.
Added sysdep configuration hooks.
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.
`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).
Events now return a value. If it's non-zero, the event is re-queuedfor processing in next event cycle. This can be used to prevent backgroundactions (hint: user commands) from hogging the CPU for too long time.
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...
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...
Changed syntax of attaching filters to protocols to hopefully the finalversion:
EXPORT <filter-spec> for outbound routes (i.e., those announced by BIRD to the rest of the world). IMPORT <filter-spec> for inbound routes (i.e., those imported by BIRD from the rest of the world)....
Clarify resource dumps and include them in the main debugging dump.
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.
Yes, joining the crew. Sorry for being late. Added dummy functions for OSPF.
Initialize allocated struct proto :-)
Fix several things I broke today.
Added a hack forcing protocols with priority>0 to be started upimmediately. Grrr, need to find a real solution some day.
Introduced protocol priority (all 'normal' protocols should use thedefault zero priority). No more "kernel syncer initialized beforedevice routes" problems.
When protocols go down, prune the neighbor list.
Perform gracious shutdown upon receipt of SIGTERM. Finally we cantest the whole protocol shutdown code... :)
Implemented real cleanup and pruning of routing table on protocol shutdown.
Real implementation of protocol state machines. Delayed startup/shutdownshould work now. Initial feeding of protocols by interfaces/routes isdone from the event queue to prevent unwanted recursion.
Implemented new configuration/reconfiguration interface and defined protocolstate machines. Full explanation will follow soon.
Initialize only protocols which are compiled in :)
Handle disabled protocol instances.
Replaced nest/confile.h by conf/conf.h, added a lot of new definitions.
Proto struct now contain (down | starting | up) state.
Preconfig, postconfig and init hooks can be NULL.
Split protocol init to building of protocol list and real protocol init.Added kernel route table syncer skeleton.
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.
Adding proto_dump_all() function
Basic protocol operations.
protos_init, not proto_init.
Added routing table and routing attribute code.