Update `remains' counter correctly.
Implemented `show route <...> stats'.
Setup of incoming connection is now a separate function.
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...
IPv6 support compiles on both glibc 2.0 and 2.1.
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.
Connected the `doc' subtree to global makefiles.
All documentation is built in obj/doc (resp. doc/ if you do a stand-alone build).
Use `make docs' to make the whole documentation or `make userdocs' resp.`make progdocs' for user manual resp. developer's guide.
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,...
Use bsprintf() instead of sprintf().
Started work on BGP. Wrote main part of the connection handling code.
Fixed a bunch of FIXME's by removing them :)
Cleaned up debugging in kernel syncer. Netlink has still LOCAL_DEBUGturned on, but after some testing I'll gag it.
Added tracing of interface events.
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.
Added debugging of protocol state transitions.
Implemented real slab allocator. If you suspect it from being buggy,just #define FAKE_SLAB at the top of lib/slab.c to bypass it.
Implemented real attribute cache.
Reimplemented neighbor cache. Now uses real hashing.
Made `datetime' more user friendly. Now it should be a quoted stringof type "dd-mm-yyyy".
Rewrote interface type detection logic. The `unnumbered' flag is now peraddress, not per interface (hence it's ifa->flags & IA_UNNUMBERED) andshould be set reliably. IF_MULTIACCESS should be fixed now, but it isn'twise to rely on it on interfaces configured with /30 prefix.
Support expansion of command abbreviations.
Client considered finished (modulo bugs).
First usable version of the client. No command completion and similar niftyfeatures yet, but it works.
Split off general commands to cmds.c.
Added `show symbols' command which dumps whole symbol table togetherwith symbol types etc.
Killed protocol->priority. Protocol startup should be clean and hack-free now.It seems everything still works (except for disable/enable/restart which hangssometimes, but it's another story).
Removed point-to-point tunnel hack as it breaks ordinary PtP interfaces.I'll find a better solution soon.
Separated `official protocol names' used in status dumps from name templatesused for automatic generation of instance names.
protocol->name is the official name protocol->template is the name template (usually "name%d"), should be all lowercase.
Updated all protocols to define the templates, checked that their configuration...
Reworked proto lists -- each proto is now in two lists: the global one(proto_list) and per-type one (original lists). A lot of things simplified.
Implemented `disable', `enable' and `restart' CLI commands.
Added filter_same() for comparision of two filters.
Pavel, please implement this as soon as possible.
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.
Handle cases when SIOCGIFINDEX is defined, but doesn't work (new glibcwith 2.0 kernels).
Tried to clean up multicast handling. Now we don't try to guessmulticast abilities depending on definedness of symbols and use hard-wiredsystem-dependent configuration defines instead.
Please test whereever you can.
TODO entries and FIXME's.
Temporary work-arounds for multicast problems. Needs further investigation.
Implemented echoing of log messages to CLI connections. Just try `echo all'.
Added DEBUG commands.
Removed CLI tests, real commands now serve as much better examples.
Implemented `show route where <condition>' command.
Pavel, please check my addition to filter/config.Y.
Updated TODO file.
Added dumping of routing tables (`show route'). This includes filtering.
Remember protocol instance in proto_config and use that for`show protocols <name>'.
More CLI plans...
Added skeleton of command tree. Please inspect.
Basic support for IPv6. The system-dependent part doesn't work yet,but the core routines are there and seem to be working.
o lib/ipv6.[ch] written o Lexical analyser recognizes IPv6 addresses and when in IPv6 mode, treats pure IPv4 addresses as router IDs....
Pruned the TODO list.
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 missing structure declarations.
Changes to interface handling on traditional Unices:
o Aliases are interpreted as secondary addresses. o When the system doesn't supply interface indices, generate our ones.
Faster checksum function.
Added functions for parsing and formatting of dates.
Better date/time input methods need to be done
Added --with-sysinclude to allow explicitly setting where kernel includesreside, so that you can easily switch between 2.0 and 2.2 ones.
Check existence of <linux/rtnetlink.h> for linux-22 configs to make surewe're using the correct set of includes.
Added ip_skip_header() and modified OSPF to use it.
Netlink support for secondary interface addresses.
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)....
Recognize site scope for IPv4 addresses (prefixes reserved for privatenetworks).
Removed old #ifndef logic which was used to avoid IPv4/IPv6 clashesbefore conditionals in Modules lists were introduced.
Removed TOS support. This simplifies many things a lot.
Fixed a couple of bugs in handling of multicast sockets.
See comments in lib/socket.h for a detailed guide on how to use them.
Added new protocol hook for dumping of protocol-dependent routeattributes.
Please implement in all protocols.
Updated the TODO list.
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...
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)...
Netlink module supports interface scan on startup. Working on more.
Implemented netlink protocol parsing functions. More to come tomorrow.
Added skeletal version of Linux netlink interface. It doesn't work yet,but the framework is there and I'll try finish it soon.
Cleaned up TODO file.
That's all for today, midnight gets closer.
'#' comments in config files are equivalent to end of line, thereforealso to implicit ';'.
Squashed one bug in timing of route scans.
config->router_id works again.
Real implementation of protocol state machines. Delayed startup/shutdownshould work now. Initial feeding of protocols by interfaces/routes isdone from the event queue to prevent unwanted recursion.
Added simple event scheduling system to avoid recursive callingof various callbacks.
Events are just another resource type objects (thus automatically freedand unlinked when the protocol using them shuts down). Each event canbe linked in at most one event list. For most purposes, just use the...
Implemented new configuration/reconfiguration interface and defined protocolstate machines. Full explanation will follow soon.
New makefiles. Includes support for out-of-source-tree builds.
Finer grained logging levels:
#define L_DEBUG "\001" /* Debugging messages /#define L_INFO "\002" / Informational messages /#define L_WARN "\003" / Warnings /#define L_ERR "\004" / Errors /#define L_AUTH "\005" / Authorization failed etc. */...
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...
All static routes except for device ones should work and appear/disappearwhen their destination comes on/off link. Deserves better testing :)
See example in bird.conf.
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.
`wc -l TODO` decreased.
Trivial 15-line bison excercise: Implemented expressions includinguser-defined numeric symbols. Whenever possible, use `expr' insteadof `NUM' to get full express ion power :-)
We parse /proc/net/route and flag RT entries according to it. More to cometoday in the morning...
o There are cases when SIOCGIFINDEX is defined, but it doesn't work. When this happens, don't reject the whole interface, just mark it as index 0.o Removed Pavel's comment about EFAULT and SIGSEGV. EFAULT is a valid return code for cases where the buffer is too small....
Added local version of sprintf (bsprintf and bvsprintf) offering few newformat strings:
%I IP address %#I IP address in hexadecimal %1I IP address padded to full length %m strerror(errno)
- 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...
DBG now calls debug() instead of sending it to log().
BIRD library: The story continues.
Complete resource manages and IP address handling.
First look at data structures. More to come tomorrow...