summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
1999-02-11Grrr, forgot to commit the event routines themselves :|Martin Mares
1999-02-11Added simple event scheduling system to avoid recursive callingMartin Mares
of various callbacks. Events are just another resource type objects (thus automatically freed and unlinked when the protocol using them shuts down). Each event can be linked in at most one event list. For most purposes, just use the global event list handled by the following functions: ev_schedule Schedule event to be called at the next event scheduling point. If the event was already scheduled, it's just re-linked to the end of the list. ev_postpone Postpone an already scheduled event, so that it won't get called. Postponed events can be scheduled again by ev_schedule(). You can also create custom event lists to build your own synchronization primitives. Just use: ev_init_list to initialize an event list ev_enqueue to schedule event on specified event list ev_postpone works as well for custom lists ev_run_list to run all events on your custom list ev_run to run a specific event and dequeue it
1999-02-08Propagate depend into all subdirectories; make rip compile afterPavel Machek
latest mj's changes.
1999-02-05Synced Linux sysdeps to new interface.Martin Mares
1999-02-05Synced kernel interface to new interface.Martin Mares
1999-02-05Modified static router to use new interface.Martin Mares
1999-02-05Implemented new configuration/reconfiguration interface and defined protocolMartin Mares
state machines. Full explanation will follow soon.
1999-02-05Added several parentheses to MIN/MAX macros.Martin Mares
1999-02-03Few fixes in parsing of filtersPavel Machek
1999-01-23Replaced the old ugly ipv6 compilation hack by a conditional in Modules.Martin Mares
1999-01-23Filter all `Modules' files through C preprocessor, so that they canMartin Mares
reference BIRD configuration. By the way: Do you know GCC by default does `#define unix 1'?
1999-01-15filters_init() renamed to filters_postconfig().Pavel Machek
1999-01-15Original `expr' is back, filter expressions renamed to `term'.Martin Mares
In the future, we'll allow any filter term in place of `expr' and we'll just evaluate it immediately, but not now as we have no evaluation routines.
1999-01-15Added bird.conf to .cvsignore and created an example configuration file.Martin Mares
If you want to run bird now, just copy doc/bird.conf.example as bird.conf and edit it to suit your needs.
1999-01-15Killed duplicate %type for expr.Martin Mares
1999-01-15Make filters actually compiled.Pavel Machek
1999-01-15Filters, second try. This time they have their own directory.Pavel Machek
1999-01-15Propagate "depend" target to real top-level Makefile.Martin Mares
1999-01-15#if 1 that creeped into cvs killed.Pavel Machek
1999-01-15Be a tiny bit more verbose.Pavel Machek
1999-01-15Filters added. They are unable to do anything interesting for nowPavel Machek
(with exception of printing integers to screen), but they exist.
1999-01-15Properly initialize filters. Also bumped version to 0.0.0 as itPavel Machek
actually does something.
1999-01-12Fixed trivial bug in naming of `depend' file. Argh.Martin Mares
1999-01-12Make it compile again (stupid makefiles!), make quiet option workPavel Machek
(multicast/broadcast options are currently unimplemented).
1999-01-12Keep protocol data out of iface_patt.Pavel Machek
1999-01-12Patterns expanded in the right wayPavel Machek
1999-01-10Initialize only protocols which are compiled in :)Martin Mares
1999-01-10Few last-minute bug fixes.Martin Mares
1999-01-10New makefiles. Includes support for out-of-source-tree builds.Martin Mares
1999-01-09First step of "autoconfization". Created a configure script whichMartin Mares
guesses most system-dependent parameters and determines name of system configuration file (sysdep/cf/...) with the remaining ones. To compile BIRD, you now need to do: autoconf # Create configure from configure.in ./configure # Run configure script make # Compile everything Configuration files: sysdep/config.h Master config file sysdep/autoconf.h Parameters determined by configure script sysdep/cf/*.h Fixed system configuration we're unable to guess. Makefiles are still the original ones, but this will change soon.
1998-12-22Bird now uses fib structure instead of linklist.Pavel Machek
1998-12-22Oops, previous modification for passing NULL to fib_init() did notPavel Machek
compile :-(.
1998-12-22Allow NULL to init_fib().Pavel Machek
1998-12-20log(), die() and bug() messages shound NOT contain trailing newlines.Martin Mares
1998-12-20die() -> bug() where appropriate.Martin Mares
1998-12-20Added #if 0 to rip_postconfig(), so that it doesn't crash whole daemonMartin Mares
when RIP is unconfigured. die() -> bug()
1998-12-20Finer grained logging levels:Martin Mares
#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. */ #define L_FATAL "\006" /* Fatal errors */ #define L_TRACE "\002" /* Protocol tracing */ #define L_INFO "\003" /* Informational messages */ #define L_REMOTE "\004" /* Remote protocol errors */ #define L_WARN "\004" /* Local warnings */ #define L_ERR "\005" /* Local errors */ #define L_AUTH "\006" /* Authorization failed etc. */ #define L_FATAL "\007" /* Fatal errors */ #define L_BUG "\010" /* BIRD bugs */ Introduced bug() which is like die(), but with level L_BUG. Protocols should _never_ call die() as it should be used only during initialization and on irrecoverable catastrophic events like out of memory. Also introduced ASSERT() which behaves like normal assert(), but it calls bug() when assertion fails. When !defined(DEBUGGING), it gets ignored.
1998-12-20When printing a routing table, fib_check() it.Martin Mares
1998-12-20Rewrote fib functions to make them insert/delete/asynchronous-walk safe.Martin Mares
This is implemented in a way similar to lib/slists.h, but it took some more effort to make rehashing not disturb the readers. We do it by just taking _highest_ k bits of ipa_hash as our hash value and sorting each box by whole ipa_hash(). Consult FIB_ITERATE_* macros in nest/route.h. Implemented fib_check() debugging function and also rewrote the rehashing algorithm to use better thresholds and not to waste time by rehashing forth and back.
1998-12-20New hash functions according to benchmarks posted yesterday. (The IPv6Martin Mares
version has not been benchmarked yet due to insufficient test data.) Now ipa_hash() returns a uniformely distributed 16-bit value.
1998-12-20Implemented deletion/insertion/asynchronous-walk lists.Martin Mares
For example of their use, look at comments in lib/slists.h.
1998-12-19Variance estimation fixed.Martin Mares
1998-12-19Added several tools for fib hashing function analysis. It turned outMartin Mares
we can use very simple function which is monotonic with respect to re-hashing: n ^= n >> 16; n ^= n << 10; h = (n >> (16 - o)) & ((1 << o) - 1); where o is table order. Statistical analysis for both backbone routing table and local OSPF routing tables gives values near theoretical optimum for uniform distribution (see ips.c for formulae). The trick is very simple: We always calculate a 16-bit hash value n and use o most significant bits (this gives us monotonity wrt. rehashing if we sort the chains by the value of n). The first shift/xor pair reduces the IP address to a 16-bit one, the second pair makes higher bits of the 16-bit value uniformly distributed even for tables containing lots of long prefixes (typical interior routing case with 24-bit or even longer prefixes).
1998-12-09debug() -> DBG() in rip.Pavel Machek
1998-12-09Initial multicast support (can not work, but skeleton is there)Pavel Machek
1998-12-08Hopefully finished kernel syncer (krt) rewrite:Martin Mares
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 to prevent lots of routes to non-existent destinations from appearing). Instead of its own timer, we just check if it's route scan time after each iface list scan. o Syncing of device routes implemented. o CONFIG_AUTO_ROUTES should control syncing of automatic device routes. o Rewrote krt_remove_route() to really remove routes :) o Better diagnostics. o Fixed a couple of bugs.
1998-12-08Fixed a couple of bugs in static protocol. All static routes except deviceMartin Mares
ones seem to work well.
1998-12-08Added source RTS_DUMMY for temporary routes. They should never appearMartin Mares
in the main table.
1998-12-08Rewritten kernel syncer. Now uses the rta trickery I've introduced yesterdayMartin Mares
and does things "the right way". Few things are still missing (device routes etc.), I'll add them later in the evening.
1998-12-07Minor rte/rta interface changes:Martin Mares
o rte can now contain a pointer to both cached and uncached rta. Protocols which don't need their own attribute caching can now just fill-in a rta, link it to rte without any calls to attribute cache and call rte_update() which will replace rte->attrs by a cached copy. o In order to support this, one of previously pad bytes in struct rta now holds new attribute flags (RTAF_CACHED). If you call rte_update() with uncached rta, you _must_ clear these flags. In other cases rta_lookup() sets it appropriately. o Added rte_free() which is useful when you construct a rte and then the circumstances change and you decide not to use it for an update. (Needed for temporary rte's in kernel syncer...)