Commit graph

231 commits

Author SHA1 Message Date
Ondrej Zajicek
b1a597e0c3 Reimplementation of prefix sets.
Prefix sets were broken beyond any repair and have to be reimplemented.
They are reimplemented using a trie with bitmasks in nodes.
There is also change in the interpretation of minus prefix pattern,
but the old interpretation was already inconsistent with
the documentation and broken.

There is also some bugfixes in filter code related to set variables.
2009-03-31 12:55:57 +02:00
Ondrej Zajicek
cb53039271 Rate limit for most abundant log messages 2009-02-26 14:23:54 +01:00
Ondrej Zajicek
02a9eeeb85 Slist update 2009-01-12 14:40:21 +01:00
Ondrej Zajicek
083c43e22e fixes some 64-bit related bugs.
Filter code used 'aux' integer field of 'symbol' struct to store ptr
to next symbol and both 'aux2' and 'def' fields for value.
Changed to just 'def' for value and 'aux2' for ptr to next symbol.
Also another minor bugfix.
2008-12-25 11:55:27 +01:00
Ondrej Zajicek
b933281ed5 Fixes nasty bug in event processing.
WALK_LIST_DELSAFE (in ev_run_list) is not safe with regard
to deletion of next node. When some events are rescheduled
during event execution, it may lead to deletion of next
node and some events are skipped. Such skipped nodes remain
in temporary list on stack and the last of them contains
'next' pointer to stack area. When this event is later
scheduled, it damages stack area trying to remove it from
the list, which leads to random crashes with funny
backtraces :-) .
2008-12-18 23:26:08 +01:00
Ondrej Zajicek
a39b165e45 Multihop BGP was completely broken, because listening socket has always
ttl 1.
2008-11-01 16:58:40 +01:00
Ondrej Zajicek
d51aa28190 Implementation of MD5 authentication of BGP sessions. 2008-10-26 22:42:39 +01:00
Martin Mares
057021df0d Fix behavior of ipa_opposite().
It was giving wrong results on /30 networks.
2008-08-25 11:19:49 +00:00
Martin Mares
9831e5916f Staticized lots of local functions. 2004-06-05 09:58:23 +00:00
Martin Mares
2f6de49f8c Better prototypes. 2004-06-05 09:57:49 +00:00
Martin Mares
fab37e8197 One more in the library. 2004-06-05 09:27:02 +00:00
Martin Mares
e98bc2ea9b Renamed log() to log_msg(), but still keeping the old name as a macro.
This is done to avoid clashes with gcc-3.3 which has built-in logarithms :)
2004-06-05 09:05:12 +00:00
Martin Mares
5da8f82feb A better comment. 2004-06-05 09:01:12 +00:00
Ondrej Filip
e7ef86a58c OSPF is ready for changing MTU. 2004-06-04 18:51:29 +00:00
Ondrej Filip
7fdd338c36 ALIGN -> BIRD_ALIGN 2004-06-01 10:28:25 +00:00
Martin Mares
38a608c55a Rewritten the I/O loop. All socket operations are now safe, meaning that
you can delete the socket from anywhere in the hooks and nothing should break.
Also, the receive/transmit buffers are now regular xmalloc()'ed buffers,
not separate resources which would need shuffling around between pools.

sk_close() is gone, use rfree() instead.
2004-05-31 21:48:19 +00:00
Martin Mares
206f59dfa8 Added UNUSED. 2004-05-31 21:02:09 +00:00
Martin Mares
2cc37815ae Added rmove() (by Andreas, tweaked by me). 2004-05-31 18:47:19 +00:00
Ondrej Filip
1bd897dd33 Changed of comments. 2004-05-31 17:27:21 +00:00
Ondrej Filip
7dbd4fd332 alloca.h added 2004-05-31 17:13:58 +00:00
Ondrej Filip
0e6eef620d Use #include "alloca.h" 2004-05-31 17:07:05 +00:00
Ondrej Filip
012279f395 Some include added. 2004-05-31 13:59:03 +00:00
Ondrej Filip
d93fb7e6b9 #ifndef ALIGN - it is defined on *BSD 2004-05-31 13:58:38 +00:00
Martin Mares
47f18ac39a ABS should be a macro. 2002-11-13 08:47:19 +00:00
Martin Mares
30b773041c IP address formatting now uses the same rules as formatting of strings
with two exceptions:

   o  Any non-zero field width is automatically replaced by standard
      IP address width. This hides dependences on IPv4/IPv6.
   o  %#I generates hexadecimal form of the address.

Therefore |%I| generates unpadded format, |%1I| full size flush-right,
and |%-1I| full size flush-left format.
2001-08-19 11:11:44 +00:00
Martin Mares
27e993fb4e Fixed duplicity in log category numbering.
Thanks to Zheng Yuan for spotting this.
2001-02-20 09:49:19 +00:00
Martin Mares
0766e962e9 Bug fix from Zheng Yuan <zyuan1@cig.mot.com>. 2001-01-17 08:32:28 +00:00
Martin Mares
a2d01907c5 Added an explanatory comment. 2001-01-15 09:24:16 +00:00
Martin Mares
725270cb1d Fixes for the programmer's manual. 2000-06-08 12:37:21 +00:00
Martin Mares
58f7d004fd Fixes to the progdoc. 2000-06-07 13:25:53 +00:00
Martin Mares
2e9b24211a Spelling fixes to progdoc. 2000-06-07 12:29:08 +00:00
Ondrej Filip
3df89cefc1 #define SIZE_OF_IP_HEADER 2000-06-07 01:18:36 +00:00
Martin Mares
525fa2c1f0 Documented sockets, events and timers. 2000-06-05 12:19:12 +00:00
Martin Mares
5cc1e1f805 Documented memory resources. 2000-06-05 11:41:41 +00:00
Martin Mares
7722938d63 Added library progdocs. 2000-06-04 18:34:39 +00:00
Martin Mares
38cf78a97a Added the introduction chapter of progdoc. 2000-05-31 13:30:58 +00:00
Martin Mares
fcb5f4a725 Updated all the Doc files to new format. 2000-05-31 11:30:18 +00:00
Martin Mares
cfa6ab0593 Added ipa_absolutize() which converts link-scope addresses to global scope
ones according to prefix assigned to the corresponding interface.
2000-05-30 22:47:33 +00:00
Martin Mares
be77b6890c Poisoning: take there... 2000-05-16 15:02:33 +00:00
Martin Mares
e2f4f27564 Oops, the poison was too deadly... 2000-05-16 13:53:44 +00:00
Martin Mares
b8e60d3562 Added poisoning of free'd objects when we're debugging. 2000-05-16 13:51:31 +00:00
Martin Mares
758458be05 Unified parsing of prefixes.
Had to rename `prefix' in filters to `fprefix'.
2000-05-13 11:17:49 +00:00
Martin Mares
c976342828 Implemented debugging function rlookup() which you can call from gdb
to see what resource does the address given as a parameter belong to.
2000-05-08 22:33:38 +00:00
Martin Mares
ab1129c1bd Added skeleton Doc files for the whole developer's documentation. 2000-05-05 17:17:42 +00:00
Martin Mares
2a149b18cc Unused variables in IPv6 code. 2000-05-04 20:38:44 +00:00
Martin Mares
93a786cb03 Removed a lot of unused variables.
Please try compiling your code with --enable-warnings to see them. (The
unused parameter warnings are usually bogus, the unused variable ones
are very useful, but gcc is unable to control them separately.)
2000-05-04 20:30:36 +00:00
Martin Mares
53943a0022 Defined format specifier %M' which behaves as %m', but takes the
error code as an argument.

Use it in socket hooks where we really shouldn't rely on errno containing
the right value or even existing.
2000-05-02 16:10:04 +00:00
Martin Mares
85a291ff30 IPv6 address classification fixes. 2000-05-02 15:21:51 +00:00
Martin Mares
8f6accb5bb Event handlers no longer return re-queue flag. Instead of using it, just
call ev_schedule() on the same handler which should work perfectly now.
2000-04-27 22:28:49 +00:00
Martin Mares
7750634946 Introduced `ARRAY_SIZE' macro to replace all the sizeof(a)/sizeof(*a) constructs. 2000-04-12 13:21:23 +00:00
Martin Mares
ac4b4683ae Removal of useless includes continues... 2000-03-31 23:40:00 +00:00
Martin Mares
a37410cbdd Use bsprintf() instead of sprintf(). 2000-03-31 23:33:03 +00:00
Martin Mares
221135d6bf Include "lib/string.h" instead of <string.h>. It should give us bzero()
and other non-portable functions on all systems.
2000-03-31 23:30:21 +00:00
Martin Mares
320f417357 Defined sk_close() which closes the socket safely even if called from
socket hook. Replaces the SK_DELETED hack.

Squashed a couple of bugs in handling of TCP sockets.
2000-03-30 10:43:37 +00:00
Martin Mares
3ee2310c5d Avoid conflicts with libraries defining their own xmalloc by defining
xmalloc to bird_xmalloc internally.
2000-03-29 22:57:46 +00:00
Martin Mares
a8f944cb6e Wrote real version of unaligned data access functions (needed for BGP). 2000-03-21 15:51:30 +00:00
Martin Mares
e68dd11c43 Use do { } while(0) instead of empty DBG if not debugging. 2000-03-12 21:47:25 +00:00
Martin Mares
3cbfcafecd DBG calls debug() if defined(LOCAL_DEBUG) || defined(GLOBAL_DEBUG). 2000-03-07 21:04:14 +00:00
Martin Mares
3549667925 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.
2000-03-05 22:48:30 +00:00
Martin Mares
4ebbbd4079 Changed comments regarding hash function. 2000-03-01 12:15:20 +00:00
Martin Mares
14a6c2a705 IP_PREC_INTERNET_CONTROL for IPv6 (see the comment). 2000-03-01 12:03:43 +00:00
Martin Mares
ebc793a5f5 No more problems when events get scheduled during event processing. 2000-01-16 17:39:16 +00:00
Martin Mares
12a9d139ee ipv6_compare() accepts non-lvalue arguments as well. This makes filters
compile with IPv6.
1999-12-16 13:13:22 +00:00
Martin Mares
a0c37b45e5 Logging is now configurable. You can define multiple log outputs (to both
files and syslog) and assign lists of message categories to each of them.
1999-12-06 13:45:56 +00:00
Martin Mares
ea32afb765 Added ip_scope_text() for translating of scopes to strings. 1999-11-25 15:34:20 +00:00
Martin Mares
84a7d7f77c 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.
1999-11-17 12:01:11 +00:00
Martin Mares
b93abffae4 Implemented unix-domain sockets. 1999-10-29 12:09:29 +00:00
Martin Mares
0d70292d88 Events now return a value. If it's non-zero, the event is re-queued
for processing in next event cycle. This can be used to prevent background
actions (hint: user commands) from hogging the CPU for too long time.
1999-10-29 12:08:49 +00:00
Martin Mares
92af6f309b Simplify handling of free chunks. 1999-10-29 10:08:27 +00:00
Martin Mares
89dc383a8c Changed syntax of ip_class_mask, the old one was stupid. 1999-10-12 07:46:08 +00:00
Martin Mares
507cb9e58b Don't forget to free large blocks. 1999-10-02 10:55:19 +00:00
Martin Mares
f651941402 Added a function for generating 32-bit random numbers. 1999-08-17 20:47:40 +00:00
Martin Mares
4f22c98185 Support for IPv6 sockets. How nice one doesn't have to ifdef around
ten years of API evolution :-)
1999-08-03 19:36:51 +00:00
Martin Mares
dce267832a 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.
   o  Router ID must be configured manually on IPv6 systems.
   o  Added SCOPE_ORGANIZATION for org-scoped IPv6 multicasts.
   o  Fixed few places where ipa_(hton|ntoh) was called as a function
      returning converted address.
1999-08-03 19:36:06 +00:00
Martin Mares
b6628a8c98 Added macros for walking lists backwards. 1999-08-03 19:31:30 +00:00
Martin Mares
5e13ffe6f4 Faster checksum function. 1999-08-03 19:29:57 +00:00
Martin Mares
3e1f30610e Defined IP_PREC_INTERNET_CONTROL and made all (well, both :)) protocols
use it when creating sockets.
1999-06-01 13:57:24 +00:00
Martin Mares
139ca21d05 Added sk_send_buffer_empty(). 1999-05-31 13:21:07 +00:00
Ondrej Filip
daeb60393d Small bug in ipv4_skip_header. 1999-05-24 17:37:45 +00:00
Martin Mares
b23c5e0ff4 Added ip_skip_header() and modified OSPF to use it. 1999-05-14 18:03:09 +00:00
Martin Mares
1a54d44a23 Added packet checksumming code. Watch the comments for an explanation. 1999-05-10 21:37:39 +00:00
Martin Mares
ec8b579e9c Recognize site scope for IPv4 addresses (prefixes reserved for private
networks).

Removed old #ifndef logic which was used to avoid IPv4/IPv6 clashes
before conditionals in Modules lists were introduced.
1999-04-27 16:03:17 +00:00
Martin Mares
2f5d154466 Added ipa_compare as requested. 1999-04-12 20:26:06 +00:00
Martin Mares
5a99ade413 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.
1999-04-12 14:57:46 +00:00
Martin Mares
7976a574b6 ip_pton: Avoid modification of the string we're converting. 1999-04-06 21:31:03 +00:00
Martin Mares
5bc512aa3a Clarify resource dumps and include them in the main debugging dump. 1999-03-29 20:14:33 +00:00
Martin Mares
f5c687f791 Added lp_flush() which flushes contents of a linear pool, leaving all the
memory available for subsequent allocations from the same pool. Both flushing
and re-using the memory costs just few instructions.
1999-03-29 19:35:47 +00:00
Martin Mares
f54801ffed Moved all system-dependent #include's containing endianity conversion
functions to sysdep header endian.h.
1999-03-29 19:14:43 +00:00
Martin Mares
6134024815 #define NULL if not defined by system includes. 1999-03-29 19:13:36 +00:00
Martin Mares
7a2105becd Use dmalloc instead of EFence when available (dmalloc has lot of improvements
over EFence and also hopefully smaller memory overhead, but sadly it's non-free
for commercial use).

If the DMALLOC_OPTIONS environment variable is not set, switch on `reasonable'
checks by default.

Also introduced mb_allocz() for cleared mb_alloc().
1999-03-04 11:36:26 +00:00
Martin Mares
b4b3b39e20 Added SK_MAGIC type sockets for internal use by system dependent code,
especially for netlink communication.
1999-03-01 22:30:33 +00:00
Martin Mares
67bd949a52 Real implementation of protocol state machines. Delayed startup/shutdown
should work now. Initial feeding of protocols by interfaces/routes is
done from the event queue to prevent unwanted recursion.
1999-02-11 22:59:06 +00:00
Martin Mares
3b15402fd4 Grrr, forgot to commit the event routines themselves :| 1999-02-11 22:18:36 +00:00
Martin Mares
e8f73195fa Added simple event scheduling system to avoid recursive calling
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-11 21:18:26 +00:00
Martin Mares
c4c63eecc3 Added several parentheses to MIN/MAX macros. 1999-02-05 21:29:19 +00:00
Martin Mares
294c182eb1 Replaced the old ugly ipv6 compilation hack by a conditional in Modules. 1999-01-23 21:08:59 +00:00
Martin Mares
98e87c8628 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. */
#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-20 14:24:35 +00:00
Martin Mares
a6f250f5c6 New hash functions according to benchmarks posted yesterday. (The IPv6
version has not been benchmarked yet due to insufficient test data.)
Now ipa_hash() returns a uniformely distributed 16-bit value.
1998-12-20 13:57:49 +00:00
Martin Mares
a05406e69c Implemented deletion/insertion/asynchronous-walk lists.
For example of their use, look at comments in lib/slists.h.
1998-12-20 13:56:27 +00:00
Martin Mares
b35d72ac66 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.
1998-12-06 11:59:18 +00:00
Martin Mares
dee929d868 Added function for shell-like pattern matching. Will be used for
matching interface names in protocol-to-iface bindings.
1998-11-29 14:47:24 +00:00
Martin Mares
0cf86f0fc3 Renamed DEBUG' symbol to DEBUGGING' to prevent collisions with token
names and include files.
1998-11-29 14:38:34 +00:00
Martin Mares
dfeef5d8bb Implemented ip_pton() 1998-11-27 19:29:27 +00:00
Martin Mares
a3afae585a Removed prototype of rp_free() since this function has never existed. 1998-11-27 19:29:00 +00:00
Martin Mares
4254dc45e7 Killed bug in processing of 'h' prefix. Patch taken from linux-2.1.129. 1998-11-21 10:25:34 +00:00
Martin Mares
53a416d376 Implemented snprintf and similar functions. It took a lot of thinking,
but the modifications were relatively simple and straightforward.
1998-11-16 21:40:35 +00:00
Martin Mares
ab3a76a382 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.
1998-10-18 22:22:28 +00:00
Martin Mares
d92882be9b WALK_LIST_DELSAFE now actually works (it really couldn't since it didn't
reference list head at all).
1998-10-17 11:02:39 +00:00
Pavel Machek
cf3934c569 Lists: unneccessary test killed, make code friendly to non-gcc. 1998-10-14 13:27:53 +00:00
Pavel Machek
a872b0f7da Reversed buggy patch. 1998-07-20 20:05:40 +00:00
Martin Mares
1be52eea57 Removed format specification attributes for log() and debug() until
GCC is fixed to handle custom formats.
1998-07-10 08:39:34 +00:00
Martin Mares
786d0bb9e7 Added ipa_class_mask() which guesses netmask for classful addressing.
For pure A/B/C class addresses it just returns the class netmask, for
subnets it tries to guess subnet mask. Please make sure the address
you pass to this function is really a valid host address (i.e., call
ipa_validate() first).
1998-07-10 08:38:29 +00:00
Pavel Machek
cf3527e2f4 Adding MIN()/MAX() macros 1998-07-09 19:36:05 +00:00
Pavel Machek
aea2dcabdc Adding walk list which permits you to delete entries. 1998-07-09 19:35:23 +00:00
Martin Mares
d997534f65 Oops, forgot '%m'... 1998-06-17 14:34:13 +00:00
Martin Mares
ecacdfa434 Added local version of sprintf (bsprintf and bvsprintf) offering few new
format strings:

	%I	IP address
	%#I	IP address in hexadecimal
	%1I	IP address padded to full length
	%m	strerror(errno)
1998-06-17 14:31:36 +00:00
Martin Mares
97d858c590 ip_ntop() and ip_ntox() for IPv4. 1998-06-17 14:28:46 +00:00
Martin Mares
6b5e06abb5 Added function for converting of IP addresses to printable form. 1998-06-17 14:26:30 +00:00
Martin Mares
0fe3b28b68 Added ipa_xor() and ipa_in_net(). 1998-06-01 21:36:58 +00:00
Martin Mares
b1487ee909 Added generic functions for unaligned data access. 1998-05-26 21:38:06 +00:00
Martin Mares
ed68a5c6a4 Resource pools are now named. 1998-05-26 21:37:37 +00:00
Martin Mares
d5417b379f Added ipa_opposite(). 1998-05-26 21:36:48 +00:00
Martin Mares
5222c46ceb DBG now calls debug() instead of sending it to log(). 1998-05-26 21:36:17 +00:00
Martin Mares
d804db0dab Added few socket declarations. 1998-05-24 15:00:48 +00:00
Martin Mares
d4bc8dc000 Staticized some variables and functions. 1998-05-24 14:46:20 +00:00
Martin Mares
480effedac Added declarations of all our socket functions. 1998-05-24 09:19:26 +00:00
Martin Mares
25697773b5 The library is now glued together from generic and OS-dependent parts
by the `mergedirs' script. Few more IP address manipulation functions
and some fixes.
1998-05-15 07:56:13 +00:00
Martin Mares
18c8241a91 BIRD library: The story continues.
Complete resource manages and IP address handling.
1998-05-03 16:43:39 +00:00
Martin Mares
1feea03e74 Changed #include <x/y> to #include "x/y" for our local includes, so that
gcc -MM can be used to separate them from the system ones.

Added automatic generation of dependencies.
1998-04-28 14:39:34 +00:00
Martin Mares
c40e05a0df Added IP address manipulation macros, interface declarations and logging. 1998-04-23 14:01:15 +00:00
Martin Mares
58ef912c6b First look at data structures. More to come tomorrow... 1998-04-22 12:58:34 +00:00