Fixes for the programmer's manual.
Fixes to the progdoc.
Spelling fixes to progdoc.
#define SIZE_OF_IP_HEADER
Documented sockets, events and timers.
Documented memory resources.
Added library progdocs.
Added the introduction chapter of progdoc.
Updated all the Doc files to new format.
Added ipa_absolutize() which converts link-scope addresses to global scopeones according to prefix assigned to the corresponding interface.
Poisoning: take there...
Oops, the poison was too deadly...
Added poisoning of free'd objects when we're debugging.
Unified parsing of prefixes.
Had to rename `prefix' in filters to `fprefix'.
Implemented debugging function rlookup() which you can call from gdbto see what resource does the address given as a parameter belong to.
Added skeleton Doc files for the whole developer's documentation.
Unused variables in IPv6 code.
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.)
Defined format specifier `%M' which behaves as `%m', but takes theerror code as an argument.
Use it in socket hooks where we really shouldn't rely on errno containingthe right value or even existing.
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.
Introduced `ARRAY_SIZE' macro to replace all the sizeof(a)/sizeof(*a) constructs.
Removal of useless includes continues...
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.
Avoid conflicts with libraries defining their own xmalloc by definingxmalloc to bird_xmalloc internally.
Wrote real version of unaligned data access functions (needed for BGP).
Use do { } while(0) instead of empty DBG if not debugging.
DBG calls debug() if defined(LOCAL_DEBUG) || defined(GLOBAL_DEBUG).
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.
Changed comments regarding hash function.
IP_PREC_INTERNET_CONTROL for IPv6 (see the comment).
No more problems when events get scheduled during event processing.
ipv6_compare() accepts non-lvalue arguments as well. This makes filterscompile with IPv6.
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 ip_scope_text() for translating of scopes to strings.
ev_run() now returns whether the event has been requeued or not.ev_run_list() now returns number of events which remain in the list.
Implemented unix-domain sockets.
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.
Simplify handling of free chunks.
Changed syntax of ip_class_mask, the old one was stupid.
Don't forget to free large blocks.
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 macros for walking lists backwards.
Faster checksum function.
Defined IP_PREC_INTERNET_CONTROL and made all (well, both :)) protocolsuse it when creating sockets.
Added sk_send_buffer_empty().
Small bug in ipv4_skip_header.
Added ip_skip_header() and modified OSPF to use it.
Added packet checksumming code. Watch the comments for an explanation.
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.
Added ipa_compare as requested.
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.
ip_pton: Avoid modification of the string we're converting.
Clarify resource dumps and include them in the main debugging dump.
Added lp_flush() which flushes contents of a linear pool, leaving all thememory available for subsequent allocations from the same pool. Both flushingand re-using the memory costs just few instructions.
Moved all system-dependent #include's containing endianity conversionfunctions to sysdep header endian.h.
#define NULL if not defined by system includes.
Use dmalloc instead of EFence when available (dmalloc has lot of improvementsover EFence and also hopefully smaller memory overhead, but sadly it's non-freefor commercial use).
If the DMALLOC_OPTIONS environment variable is not set, switch on `reasonable'...
Added SK_MAGIC type sockets for internal use by system dependent code,especially for netlink communication.
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.
Grrr, forgot to commit the event routines themselves :|
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...
Added several parentheses to MIN/MAX macros.
Replaced the old ugly ipv6 compilation hack by a conditional in Modules.
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. */...
New hash functions according to benchmarks posted yesterday. (The IPv6version has not been benchmarked yet due to insufficient test data.)Now ipa_hash() returns a uniformely distributed 16-bit value.
Implemented deletion/insertion/asynchronous-walk lists.For example of their use, look at comments in lib/slists.h.
Name cleanups as suggested by Pavel:
- cfg_strcpy() > cfg_strdup() mempool -> linpool, mp_* -> lp_* [to avoid confusion with memblock, mb_*]
Anyway, it might be better to stop ranting about names and do some real work.
Added function for shell-like pattern matching. Will be used formatching interface names in protocol-to-iface bindings.
Renamed `DEBUG' symbol to `DEBUGGING' to prevent collisions with tokennames and include files.
Implemented ip_pton()
Removed prototype of rp_free() since this function has never existed.
Killed bug in processing of 'h' prefix. Patch taken from linux-2.1.129.
Implemented snprintf and similar functions. It took a lot of thinking,but the modifications were relatively simple and straightforward.
Added ipa_from_u32 and ipa_from_u32 for use in the kernel sync code (IPv4 only).Don't ever think of using it in routing protocols.
WALK_LIST_DELSAFE now actually works (it really couldn't since it didn'treference list head at all).
Lists: unneccessary test killed, make code friendly to non-gcc.
Reversed buggy patch.
Removed format specification attributes for log() and debug() untilGCC is fixed to handle custom formats.
Added ipa_class_mask() which guesses netmask for classful addressing.For pure A/B/C class addresses it just returns the class netmask, forsubnets it tries to guess subnet mask. Please make sure the addressyou pass to this function is really a valid host address (i.e., call...
Adding MIN/MAX macros
Adding walk list which permits you to delete entries.
Oops, forgot '%m'...
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)
ip_ntop() and ip_ntox() for IPv4.
Added function for converting of IP addresses to printable form.
Added ipa_xor() and ipa_in_net().
Added generic functions for unaligned data access.
Resource pools are now named.
Added ipa_opposite().
DBG now calls debug() instead of sending it to log().
Added few socket declarations.
Staticized some variables and functions.
Added declarations of all our socket functions.
The library is now glued together from generic and OS-dependent partsby the `mergedirs' script. Few more IP address manipulation functionsand some fixes.
BIRD library: The story continues.
Complete resource manages and IP address handling.