| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Introduced separate types for qtime_mono_t and qtime_real_t, to
distinguish the time base of a given value.
Revised all users of timeouts so that they are all expressed as
qtime_mono_t values, so are all Quagga monotonic time based.
Revised qpt_cond_timedwait() so that all condition variables use the
same timebase (CLOCK_MONOTONIC if available, by default). Now all
timeout times are qtime_mono_t, and are converted to whatever the
condition variable is set to, if necessary.
Added explicit timeout to mqueue.
Fixed qps_pselect() to zeroise result vectors if no fds are
reported pending -- seems the O/S does not do this.
|
| | |
| | |
| | |
| | | |
mnum, not mbits.
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | | |
Also, added testing for qps_make_super_set_map() to simulate wide
range of little-/big-endian word sizes and forwards/backwards bit
numbering.
|
| | | |
|
| | | |
|
| | | |
|
| | |
| | |
| | |
| | | |
Tidied up and implemented qps_selection_validate() as a debug aid.
|
| | | |
|
| | |
| | |
| | |
| | | |
Needs debugging.
|
| | |
| | |
| | |
| | | |
Needs to use lldiv in qtime.c on 32bit machine.
|
|\ \ \ |
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Improved the arithmetic and changed code to deal with wrap around
only if clock_t is 32-bits (and not to compile if it is less !).
Updated documentation.
|
|/ / /
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
For use when preparing for pselect or other timed wait.
Simplified the handling of pending unsets.
Tidied up in heap.c & .h.
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This allows mutexes to be initialised as recursive.
Required correctly placed setting of _GNU_SOURCE (for gcc).
It is assumed that "config.h" will enable the required pthreads
features -- which are now documented in lib/qpthread.c.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
lib/qpselect supports data structure to multiplex between many file
descriptors using pselect().
lib/qtimers supports data structures to run multiple timers.
Also affected:
lib/Makefile.am -- to add the new files
lib/memtypes.c -- to add further memory types for the above
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Added conversion routines for CLOCK_REALTIME/timeofday to/from
monotonic clock -- so can set timers to actual time, if required.
Added confirms and tidied up documentation.
|
| | |
| | |
| | |
| | |
| | |
| | | |
Added qpt_thread_self().
Initialised output sigset_t before setting it in qpt_thread_sigmask().
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Added vector_unset_item() & recast vector_unset().
Added heap_pop_push_item() and made a number of simple operations
Inline functions.
|
| | |
| | |
| | |
| | |
| | | |
Adds message queue structure to manage the passing of messages
between qpthreads.
|
| | |
| | |
| | |
| | | |
Adding qpt_thread_sigmask() and qpt_thread_signal().
|
| | |
| | |
| | |
| | |
| | | |
Changed casts around so that the seconds argument can be a floating
point value. So that, in particular, QTIME(2.33) works.
|
| | | |
|
|\ \ \ |
|
| | | | |
|
| | | | |
|
| | | |
| | | |
| | | |
| | | | |
pthread safe interface for logging. log.h is that interface.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
lib.c: use a mutex to protect all public methods. Replaced
code in command.c etc that modified zlog_default directly with
interlocked getters and setters. Requires that vty_log in vty.c
handles its own pthread safety TBA.
privs.c: use a mutex to protect all public methods. Counts RAISE
and LOWER so that privilege stays RAISED until all pthreads
have lowered. Improved messages in test-privs.c
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
New files: lib/qpthreads.c & .h
Encapsulates the Pthreads facilities to be used in Quagga.
Implicitly documents the sub-set of Pthreads being used.
Provides error checking for a number of functions which may return
errors, but are not generally expected to and for whom an error is
treated as fatal.
Could be modified to "null out" the use of Pthreads.
New files: lib/qtime.c & .h
Defines a 64-bit integer time value which is a lot easier to
handle than the usual timespec and timeval structures. (C99
requires a 64-bit integer.)
Provides front ends for gettimeofday() & clock_gettime() which
return 64-bit time value. Also conversions to and from timespec and
timeval.
Provides a monotonic clock for when CLOCK_MONOTONIC is not available.
(This is based on code from Joakim Tjernlund.)
New files: lib/heap.c & .h
Implements a heap data structure closely allied to the vector.
This will be used for timer handling.
Modified: lib/memtypes.c
New memory types for qpthreads structures and for the heap.
Modified: lib/zassert.h
Added explicit "passert" == assert which is not subject to NDEBUG.
Added explicit "nassert" == assert which is subject to NDEBUG.
Added zabort, zabort_errno and zabbort_err for when something has
gone fatally wrong. (Require changes to lib/log.c which are TBD.)
|
|\ \ \ \
| |/ / /
|/| | /
| | |/
| |/| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Affects: lib/plist.c
Merged otherwise unused prefix_list_free() into prefix_list_delete(),
and removed second call of symbol_unset_value().
|
|/ / |
|
| |
| |
| |
| |
| |
| | |
There appears to be some divergence of opinion over the return values
from these functions. This change makes the return == 1 if OK, and
0 otherwise. This is consistent with all usage.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Affects: lib/plist.c & .h and bgpd/bgp_clist.c & .h
With very long prefix-lists the repeated scanning of the linked list
of prefix_list_entry slowed things down (scaled O(n**2)). For lists
of 10,000 or more entries this could consume several *minutes* while
reading a configuration file.
This is a substantial re-working of the code, making use of new
facilities introduced in lib/symtab and lib/vector.
The prefix-list names are held in a symbol table. The addition of
entries to a prefix-list uses binary-chop searches rather than linear
list scans.
For bgpd, all references to prefix-lists are replaced by symbol table
references. The peer_prefix_list_update function is called every time
a prefix-list changes. This used to run through every possible
reference to a prefix-list to see if its address needed updating.
For other daemons, the old interfaces have been preserved.
The prefix match code has been stream-lined a little.
The BGP community-list and extcommunity-list handling has also been
updated to use a symbol table to hold the names. This improves the
processing of route-maps, which look-up the list by name each time
it is used. (In the longer term, this should be replaced by the use
of symbol references.)
Other files affected:
bgpd/bgpd.c & .h
bgpd/bgp_route.c & .h
bgpd/bgp_packet.c
bgpd/bgp_vty.c
updated to use prefix list references & community list symbols.
symtab.c & .h
small change to symbol_dec_ref & symbol_zero_ref to return NULL
if reference count goes to zero, and the symbol otherwise.
|
| |
| |
| |
| |
| | |
Enabled building of the test programs. Added tests for vectors and
sybtabs.
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Added: vty_puts -- output string
vty_out_newline -- output newline of appropriate form
vty_out_indent -- output given number of spaces
Made (vty == NULL) a synonym for VTY_TERM, for vty_out and related
functions.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
These are two brand new files.
They provide a "Symbol Table" data structure, which maps symbol "names"
to symbol "values. (Inside the dta structure is a hash table.)
There is also support for managing references to symbols, and the
ability to visit all references to a symbol when its value is
set or unset.
Other files affected:
lib/Makefile.am
-- to add the new files.
lib/memtypes.c
-- additional memory types for symbol table stuff
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This upgrade maintains the existing vector operations, but changes the
underlying mechanisms. It then adds a number of new functions,
extending the operations on vectors.
The "struct vector" is redefined, which affects only some code in
lib/command.c -- which pokes around inside what should be treated as a
private data structure. Pro tem this is supported by a macro.
The constant VECTOR_MIN_SIZE has been removed -- if there is a minimum
size that should be enforced by the vector code.
New functions include:
vector_insert_item -- insert item, moving existing items
vector_move_item -- move item from place to place in vector
vector_delete_item -- delete item and close up gap
vector_reverse -- reverse order of vector
vector_push_item -- simple push
vector_pop_item -- simple pop
vector_insert -- insert 1 or more NULL items, moving
existing items
vector_delete -- delete 1 or more items and close up gap
vector_bsearch -- perform binary search on vector
vector_sort -- qsort vector
vector_copy_here -- make copy of body of vector
vector_move_here -- move body of vector
vector_copy_append -- append copy of vector to end of another
vector_move_append -- move body of vector to the end of another
vector_copy_extract -- copy part of one vector to another
vector_move_extract -- move part of one vector to another
vector_copy_splice -- copy part of one vector to replace part of
another, taking a copy of the replaced part
vector_move_splice -- move part of one vector to replace part of
another, taking a copy of the replaced part
vector_copy_replace -- copy part of one vector to replace part of
another
vector_move_replace -- move part of one vector to replace part of
another
vector_discard -- discard body of vector
vector_chop -- discard any unused memory in body of vector
vector_decant -- decant vector to new body
Other files affected:
command.c:
-- removal of VECTOR_MIN_SIZE
-- use of vector_sort()
-- use of VECTOR_INDEX to poke around inside vector
(removing this is TODO)
memtypes.c & memory.c
-- updating names and comments for vectors
vty.c
-- removal of VECTOR_MIN_SIZE
memory.h
-- added SIZE(t,n) macro -- (sizeof(t) * (n))
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
The following syntax forms were not historically supported
by Quagga, although IOS accepted them w/o a problem:
no ip ospf cost <1-65535>
no ospf cost <1-65535>
no ip ospf cost <1-65535> A.B.C.D
no ospf cost <1-65535> A.B.C.D
From now on Quagga also supports these variants.
|
|
|
|
|
| |
* rtadv.c: round up when calculating the link-layer address option length;
add padding to the option if needed to end on an octet boundary
|
|
|
|
| |
* configure.ac: Bump to 0.99.15
|
|
|
|
|
|
| |
* ospf6_lsa.c: (ospf6_lsa_age_current) arithmetical compares make no sense
in non-host order..
|
|
|
|
|
|
| |
* bgp_network.c: (bgp_md5_set) Missing piece from earlier listener change
did not get ported from Vyatta code into upstream. The list
listener_sockets changed from (int *) to (struct bgp_listener *).
|
|
|
|
|
| |
* prefix.c: (str2prefix_ipv6) inet_pton succesful return is presumed to be
1, rather than the "not zero" the man page describes - seemed fragile.
|
|
|
|
| |
* testrib.conf: Example config file for testzebra
|
|
|
|
| |
* test_main.c: If required arguments are missing, say that.
|