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).
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.
Route update hook now gets network prefix as well as updatedroute attributes.
Adding proto_dump_all() function
Changed protocol declarations a bit.
- Rewrote whole interface logic. Removed support for multiple addresses per interface since it makes much trouble everywhere. Instead, we understand secondary addresses as subinterfaces.
- In case interface addresses or basic flags change, we simply convert it...
Added routing table and routing attribute code.
Next attempt on data structures...
Changed #include <x/y> to #include "x/y" for our local includes, so thatgcc -MM can be used to separate them from the system ones.
Added automatic generation of dependencies.
First look at data structures. More to come tomorrow...