summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
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...)
1998-12-07Comparison of kernel reject routes fixed.Martin Mares
1998-12-07KRF_* flags moved to krt.h as they are internal to kernel syncer,Martin Mares
fib->pad0,pad1 renamed to x0,x1 and in case of struct net x0 is reserved for kernel syncing as well.
1998-12-06All static routes except for device ones should work and appear/disappearMartin Mares
when their destination comes on/off link. Deserves better testing :) See example in bird.conf.
1998-12-06Removed protocol-specific data in rte for protocol static since noMartin Mares
such data ever existed.
1998-12-06Aesthetic fix for neighbor cache debug dump.Martin Mares
1998-12-06Added new rule for prefix length / netmask.Martin Mares
1998-12-06cf_error() now accepts any format strings instead of just an errorMartin Mares
message. Also added extra kludge to get rid of collisions of REJECT symbols.
1998-12-06Added skeleton of static route protocol.Martin Mares
1998-12-06Kernel syncer is now configurable. It will probably need some moreMartin Mares
options, but at least basic tuning is possible now.
1998-12-06Fixed bug in CF_ADDTO. How it's possible it has ever worked?Martin Mares
1998-12-06Added rule "bool" for boolean switches.Martin Mares
1998-12-06Name cleanups as suggested by Pavel:Martin Mares
- 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.
1998-12-04Rip now has configurable per-interface metric (please rewiev), and fewPavel Machek
more configurable parameters. To do that, union was added into iface_patt.
1998-12-01Infinity is now configurable ammount.Pavel Machek
1998-11-29Added configuration of the device internal protocol. This is primarilyMartin Mares
intended to serve as an example of interface pattern list use. As a side effect, you can disable generating of device routes by disabling this protocol.
1998-11-29Handle disabled protocol instances.Martin Mares
1998-11-29Added functions for manipulating interface name pattern lists:Martin Mares
o iface_patt_match(list, iface) -- match interface against list o iface_patts_equal(a, b, c) -- compare whether two pattern lists are equal or not. c(x,y) is called for comparison of protocol-dependent data.
1998-11-29Created new functions for allocating configuration data:Martin Mares
o cfg_alloc(size) -- generic memory allocation o cfg_allocu(size) -- unaligned memory allocation o cfg_allocz(size) -- zeroed memory allocation o cfg_strcpy(str) -- allocate a copy of a string Also fixed a bug in lexing of string literals.
1998-11-29`wc -l TODO` decreased.Martin Mares
1998-11-29Added function for shell-like pattern matching. Will be used forMartin Mares
matching interface names in protocol-to-iface bindings.
1998-11-29Allow setting debug value and `disabled' flag in protocol definition.Martin Mares
1998-11-29Renamed `DEBUG' symbol to `DEBUGGING' to prevent collisions with tokenMartin Mares
names and include files.
1998-11-27Oops, forgot to remove a debugging kludge.Martin Mares
1998-11-27Trivial 15-line bison excercise: Implemented expressions includingMartin Mares
user-defined numeric symbols. Whenever possible, use `expr' instead of `NUM' to get full express ion power :-)
1998-11-27First attempt at protocol configuration (now done only for RIP).Martin Mares
1998-11-27Fixed few misspellings and exported instance init as rip_init_instance().Martin Mares
1998-11-27Added generator of default names.Martin Mares
1998-11-27Experimental config file.Martin Mares
1998-11-27Dummy grammar for RIP configuration. Now empty, but must be here sinceMartin Mares
it's referenced in the makefiles.
1998-11-27Parser fragment for the core. Now handles only router ID setting.Martin Mares
1998-11-27Compile and use the new configuration code by default.Martin Mares
1998-11-27Base of the parser.Martin Mares
1998-11-27Lexical analyser.Martin Mares
1998-11-27Replaced nest/confile.h by conf/conf.h, added a lot of new definitions.Martin Mares
1998-11-27This script takes configuration fragments and generates full Bison grammarMartin Mares
from them.
1998-11-27This script takes configuration fragments and extracts keyword listMartin Mares
from them.
1998-11-27Now merges configuration fragments (*.Y) as well.Martin Mares
1998-11-27Implemented ip_pton()Martin Mares