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.
Removed lots of trailing newlines in log messages.
Please note that the only calls which don't add newlines automatically(i.e., don't print a full line of output) are debug() and DBG.
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.
Multicast problems should be gone, although the fix is Linux only and we'llneed to figure out something better when working on new ports.
If a broadcast address is missing, go fake one.
In non-debug mode, set default logging to syslog only, not stderr.
Fixed type in daemonization code.
When not debugging, daemonize automatically.
Forgot to add a spiky comment :)
Autoconf is evil. The sysconfdir and similar variables are unusable inC includes as they contain substitutions specific to make.
Worked around by creating sysconf/paths.h which is created fromthe Makefile instead of by the configure script.
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.
Removed the `async' switch which was used for debugging only anyway.
Don't moan when netlink reports lost packets.
Incoming buffer must be at least 8KB long.
Use preferences properly.
Don't crash when reporting deleted routes.
Set preferences correctly.
IPv6 support compiles on both glibc 2.0 and 2.1.
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.
Allow sk_close(NULL).
IPv6 compiles with glibc 2.1.
Dropped CPU_NEEDS_ALIGN_* as unaligned.h no longer uses them.
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 :)
Added tm_format_datetime().
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.
ipa_opposite hack is not applicable in IPv6.
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.
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...
Reconfiguration for device protocol.
Wording changes.
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.
Minor cleanups.
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.
Renamed attr->attrs to attr->eattrs.
The CLI I/O functions work as desired.
First steps of the Command Line Interface: I/O routines.
Implemented unix-domain sockets.
Configure PATH_CONTROL_SOCKET.autoconf.h is now written to obj/sysdep, the source tree is hopefullycompletely read-only now.
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.
Added CONFIG_MULTIPLE_TABLES whereever appropriate.
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.