Fixes for the programmer's manual.
... as well there.
Updated CLI helps.
Fixes to the progdoc.
Spelling fixes to progdoc.
Documented all the sysdeps (only briefly, I admit).
Except for Filters, RIP and OSPF, the progdocs are complete.
Documented sockets, events and timers.
Split random number functions off io.c, so that they can be documentedseparately.
tm_format_reltime() works with both past and future timestamps.
Updated for new scope handling.
Also, provide proper address scopes in struct ifa.
Before configuration file is read, log to both syslog and stderr.
Updated all the Doc files to new format.
Tracing of CLI connections/commands can be now controlledby `debug commands <level>' in the configuration. Level 0 meansno tracing, 1 means connections only, 2 includes all commands.
Support --version and --help.
When in persist mode, don't delete routes from kernel tables even ifthey cease to exist in our routing tables due to protocols having shut down.
Adapted to new rt_notify semantics.
In non-debug mode, set default logging to syslog only, not stderr.
Fixed type in daemonization code.
When not debugging, daemonize automatically.
When reporting a bug(), call abort() instead of exit(), so that wecan analyse the core.
Some less socket error messages.
Don't report refused connections.
Use preferences properly.
Don't crash when reporting deleted routes.
Set preferences correctly.
Added skeleton Doc files for the whole developer's documentation.
#ifdef out lots of debugging information.
The long resource/routing table dump printed upon startup is gone nowand if you wish to see it, just send bird SIGUSR1 or use the `debug'commands.
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.)
Split CF_HDR section to CF_HDR (only includes) and CF_DEFINES (defines,C declarations etc.).
Fixed a couple of nasty CLI bugs which were triggered on long or multi-partoutputs. It took a whole evening to hunt them down, but now the CLI seemsto work fine.
Now I run three BGP connections with several thousand routes!
Changed handling of incoming connections, so that we can send datafrom the send hook without worrying about existence of socket buffers.
Also, don't forget to copy peer addresses.
Removed several FIXME's.
IPv6 compiles with glibc 2.1.
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().
Include "lib/string.h" instead of <string.h>. It should give us bzero()and other non-portable functions on all systems.
Defined sk_close() which closes the socket safely even if called fromsocket hook. Replaces the SK_DELETED hack.
Squashed a couple of bugs in handling of TCP sockets.
Handle EINPROGRESS properly.
Set IP_DONTROUTE sockopt only if sk->ttl == 1.
Fixed a bunch of FIXME's by removing them :)
Yet another LOCAL_DEBUG turned off.
Cleaned up debugging in kernel syncer. Netlink has still LOCAL_DEBUGturned on, but after some testing I'll gag it.
Great cleanup of debug messages. LOCAL_DEBUG turned off in most modules,several debug() calls converted to DBG.
Renamed command `shutdown' to `down', so that `s' can be used as anabbreviation for `show'.
Garbage collector events and counters are now per table and one daythey can be made configurable if it turns out to be useful.
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.
Put client on a stony ground. The whole client is going to be system-specific(the current version UNIX-specific) anyway, so it's useless to try splitting itto sysdep and generic part. Instead of this, configure script decides (based onsystem type and user's wish) what (if any) client should be built and what...
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).
Kernel route syncer now supports dynamic reconfiguration. Also it doesn'tdepend on the startup counter hack now and uses a zero-time timer insteadto make itself scheduled after normal protocol startup.
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...
Reconfiguration for device protocol.
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).
Better order of includes.
set_inaddr() moved to sysio.h.
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.
Added universal locking mechanism which will solve problemswith protocols wanting to use the same port on the same interfaceduring reconfiguration time.
How to use locks: In the if_notify hook, just order locks for theinterfaces you want to work with and do the real socket opening after the...
Temporary work-arounds for multicast problems. Needs further investigation.
Except for special protocols (nowadays only the kernel syncer), don'texport host and link scope routes.
- Path to control socket is selectable via command-line option.- die() when control socket open failed.
Allow logging to stderr as well.
Logging is now configurable. You can define multiple log outputs (to bothfiles and syslog) and assign lists of message categories to each of them.
Added tracked_fopen() which is a fopen registered in resource database.Will be used for log files.
Implemented echoing of log messages to CLI connections. Just try `echo all'.
Added tm_format_reltime() for formatting of relative time quantities.
Moved TIME_INFINITY to timer.h, so that it's publicly available.
If the main event queue is not empty, call select() with zero timeout, sothat the events are ran again after the FD's are checked. This allows usto schedule I/O checks between processing of user commands.
The CLI I/O functions work as desired.
First steps of the Command Line Interface: I/O routines.
Implemented unix-domain sockets.
Added skeleton of the client. Does nothing, but at least compiles.
Failure to set socket TOS is not a fatal error.
Added a function for generating 32-bit random numbers.
Taught Netlink how to behave in IPv6 world.
Support for IPv6 sockets. How nice one doesn't have to ifdef aroundten years of API evolution :-)
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....
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. :)
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.
Added functions for parsing and formatting of dates.
Grrr, the "obvious fix" to multicasting code from yesterday wasfundamentally wrong. Reversed.
Fix potential multicasting bug.
Added extra argument to rt_update hook which contains a pointer to thetemporary attribute list.
Removed one unused structure field.
Kill remaining master_table relics in KRT code.
Make all protocols pass routing table to rte_update and rte_discard.
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)....
Multicasts once again: When using SO_BINDTODEVICE, don't specify IP addressof the interface.
Next attempt to get SO_BINDTODEVICE work :)
Use SO_BINDTODEVICE if we're using old multicast API (i.e., struct ip_mreqand not ip_mreqn). This should get multicasts on unnumbered PtP links work.
Ignore alias interfaces (some day, we will treat them as pure secondaryinterface addresses).
Removed TOS support. This simplifies many things a lot.
Use `struct ip_mreqn' instead of `struct ip_mreq' for multicastoperations on 2.1/2.2 kernels. This allows passing of real interfaceindexes instead of referencing interfaces by their IP addresses whichfails badly in presence of unnumbered interfaces.
Unfortunately, this structure is not visible with glibc 2.0 as it provides...
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.
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...
Fixed `too many interfaces' cases.
Believe it or not, printf()'s does not work too much without this one.
Argh, the fix was wrong.