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