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...