Added dumping of routing tables (`show route'). This includes filtering.
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.
Ouch, how could I write this?
Allow announces of rte's to protocols in FS_FEEDING state.Else, we would get chicken-egg problems in the table-to-table protocol.
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.
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...
Removed TOS support. This simplifies many things a lot.
Routing table core changes to support full route filtering:
o Introduced rte_cow() which should be used for copying on write the rte's in filters. Each rte now carries a flag saying whether it's a real route (possessing table linkage and other insignia) or a local...
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...
Allow different instances of the same protocol with identical preferences.
rte_update: Check sanity of incoming entries. Throw out (and log) all routesto bogus prefixes and non-local routes to host scope addresses.
Allow input and output filters (only accept/reject style as we didn't definemodifying filters yet) to be attached to protocol instances.
EFence helped to find using of already free rte's in rt_prune().
Implemented garbage collection of routing tables to delete orphaned networknodes having no routes attached. Such cleanup must be done from event handlersince most functions manipulating the routing tables expect network entrieswon't disappear from under their hands and it's also probably faster when...
Moved sanity check of protocol state during annoucements to rte_announce.
Implemented real cleanup and pruning of routing table on protocol shutdown.
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.
die() -> bug() where appropriate.
When printing a routing table, fib_check() it.
Minor rte/rta interface changes:
o rte can now contain a pointer to both cached and uncached rta. Protocols which don't need their own attribute caching can now just fill-in a rta, link it to rte without any calls to attribute cache and call rte_update()...
Previous fix was wrong.
rte_update: Doesn't loop forever when multiple routes point to the samedestination.
Beware the NULL route, my son... The bugs that bite, the BIRDs that crash :-)
Added pointer to network to RTE. The complications with passing NET separatelyaren't worth 4 bytes per RTE.
rte_discard and rte_dump don't need net * as parameter.
o FIB flags now available for FIB users.o struct network: FIB flags used for kernel syncing.o struct network: `next' field deleted (historical relic).
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.
Implemented `route last modified' time.
Each protocol now hears even its own routes and needs to make its ownloop detection. This is needed since both RIP and OSPF handle multipleneighbors and they need to redistribute routes learned from each neighborto the remaining ones.
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.
Use '%I' instead of dirty address printing hacks.
Handle route deletion without segfaults. A bit more debug dumps.
Protocol hooks. All of them may be NULL.
Added debug dump function, but it's still empty :(
Added routing table and routing attribute code.
Parts of routing table code. Data structure declarations should becomplete now.