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. :)
Removed one unused structure field.
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...
Moved to a much more systematic way of configuring kernel protocols.
o Nothing is configured automatically. You need to specify the kernel syncer in config file in order to get it started. o Syncing has been split to route syncer (protocol "Kernel") and...
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.
Rewrote the kernel syncer. The old layering was horrible.
The new kernel syncer is cleanly split between generic UNIX moduleand OS dependent submodules:
- krt.c (the generic part) - krt-iface (low-level functions for interface handling) - krt-scan (low-level functions for routing table scanning)...
Use traditional Unix route/iface interface only when CONFIG_NETLINKis not defined. Also moved declarations of Unix iface logic to krt.h.
When shutting down, remove all routes (except for RTS_INHERIT and RTS_DEVICEroutes) from kernel routing tables unless the "persist" switch is set.
Synced kernel interface to new interface.
Hopefully finished kernel syncer (krt) rewrite:
o Interface syncing is now a part of krt and it can have configurable parameters. Actually, the only one is scan rate now :) o Kernel routing table syncing is now synchronized with interface syncing (we need the most recent version of the interface list...
Rewritten kernel syncer. Now uses the rta trickery I've introduced yesterdayand does things "the right way". Few things are still missing (deviceroutes etc.), I'll add them later in the evening.
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.
Kernel syncer is now configurable. It will probably need some moreoptions, but at least basic tuning is possible now.
Since almost every UNIX system requires different techniques for readingthe kernel routing table as opposed to modifying it which is approximatelythe same on non-netlink systems, I've split the kernel routing tableroutines to read and write parts. To be implemented later ;-)