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.
Temporary work-arounds for multicast problems. Needs further investigation.
Allow logging to stderr as well.
Added tracked_fopen() which is a fopen registered in resource database.Will be used for log files.
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.
Implemented unix-domain sockets.
Failure to set socket TOS is not a fatal error.
Added a function for generating 32-bit random numbers.
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....
Added functions for parsing and formatting of dates.
Grrr, the "obvious fix" to multicasting code from yesterday wasfundamentally wrong. Reversed.
Fix potential multicasting bug.
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.
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.
First few FreeBSD portability fixes.
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...
Added SK_MAGIC type sockets for internal use by system dependent code,especially for netlink communication.
Perform gracious shutdown upon receipt of SIGTERM. Finally we cantest the whole protocol shutdown code... :)
Synchronize signals to the main select/event/timer loop.
Parse command line options.
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...
die() -> bug() where appropriate.
Exporting fill_in_sockaddr() for use by other unix-dependent code.
Replaced remaining references of clock_t by bird_clock_t.
Fixed processing of timers.
Synced to new interface code.
Whee, multicast sockets work!
Implemented recurrent timers.
Added UNIX implementation of both timers and sockets. Timers should work,sockets were tested only in TCP mode. main.c now contains some testcases for socket code.