protocol->import_control() could potentially call rte_cow() as well.AFAIK it doesn't happen in any of our protocol, but better be sure.
This was a potential memory leak, but not the one Feela observed.
This one could happen when an import filter of some protocol modifiedthe rte (so that it would be rte_cow()ed) and later rejected it.
Added missing includes.
Fix %<something>I format strings.
Fixes for the programmer's manual.
Fixes to the progdoc.
Spelling fixes to progdoc.
Better description of the route distribution process.
Documentation on routing tables and route attributes.
Killed bug in merging of dynamic attributes.
Routing table garbage collector gets really called.
Fixed a buglet in asynchronous feeding and increased maximum numberof routes allowed per feeding phase.
Asynchronous feeding of protocols.
Added `show route for
' which looks up route leading to
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...
rt_prune: Don't kill routes from protocols in FS_FEEDING state. If debugging,call fib_check() on the table's fib.
Implemented `show route count' which is `show route stats' withexception that it doesn't print the routes themselves.
Stop feeding the protocol if it suddenly shuts down.
Fixed `show route primary'.
Don't count networks with no routes (they are not displayed at all andwill be removed during the next garbage collection pass).
Implemented `show route <...> stats'.
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...
Fixed silly bug in previous commit.
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.
Removed a lot of unused variables.
Please try compiling your code with --enable-warnings to see them. (Theunused parameter warnings are usually bogus, the unused variable onesare very useful, but gcc is unable to control them separately.)
IPv6 address classification fixes.
Event handlers no longer return re-queue flag. Instead of using it, justcall ev_schedule() on the same handler which should work perfectly now.
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,...
When tracing, always print incoming part of the trace before the outgoing one.
Avoid buffer overflows in `show routes' command.
Include "lib/string.h" instead of <string.h>. It should give us bzero()and other non-portable functions on all systems.
Use FF_FORCE_TMPATTR where appropriate.
f_run gets one more parameter to distinguish between in and out modes.
Protocol tracing: Don't dump core on filtered out routes.
Fixed a bunch of FIXME's by removing them :)
Great cleanup of debug messages. LOCAL_DEBUG turned off in most modules,several debug() calls converted to DBG.
Oops, got `<' and `>' markers in trace output reversed.
Added debugging of communication between protocols and routing tables.Just ask for "debug routes" if you want to see the routes and "debug filters" if you want even the rejected ones.
Garbage collector events and counters are now per table and one daythey can be made configurable if it turns out to be useful.
If the user has specified identical preferences for instances of differentprotocols, break the tie by comparing addresses, so we keep the orderingunambiguous.
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.
Avoid touching F_MODIFY, it no longer exists.
Except for special protocols (nowadays only the kernel syncer), don'texport host and link scope routes.
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.