Implemented a Table-to-Table protocol a.k.a The Pipe.
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 extended attributes for rip.
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...
Implemented extended route attributes and all related functions.
KRT: Implemented asynchronous route / interface state notifications(via Netlink). Tweaked kernel synchronization rules a bit. Discoveredlocking bug in kernel Netlink :-)
Future plans: Hunt all the bugs and solve all the FIXME's.
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.
Fixed bug in FIB_ITERATE_END: it assumed the control variable is named"z". I've added an argument specifying name of the variable.
Renamed "again" label in FIB_ITERATE_* to "fis_again" to avoid nameclashes.
Rewrote fib functions to make them insert/delete/asynchronous-walk safe.This is implemented in a way similar to lib/slists.h, but it took somemore effort to make rehashing not disturb the readers. We do it by justtaking highest k bits of ipa_hash as our hash value and sorting each...
Added source RTS_DUMMY for temporary routes. They should never appearin the main table.
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()...
KRF_* flags moved to krt.h as they are internal to kernel syncer,fib->pad0,pad1 renamed to x0,x1 and in case of struct net x0 is reservedfor kernel syncing as well.
Removed protocol-specific data in rte for protocol static since nosuch data ever existed.
RIP now actually talks to itself.
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).
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.
FIB_WALK and friends are now slightly more friendly.
- 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...
Implemented timers. Using bird_clock_t for absolute time from now...
Added routing table and routing attribute code.
Parts of routing table code. Data structure declarations should becomplete now.
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.
Added few route attributes.
First look at data structures. More to come tomorrow...