diff options
author | Chris Hall (GMCH) <chris.hall@highwayman.com> | 2009-11-26 19:39:35 +0000 |
---|---|---|
committer | Chris Hall (GMCH) <chris.hall@highwayman.com> | 2009-11-26 19:39:35 +0000 |
commit | 2317760c2dc2348851b68238b83550f38406c307 (patch) | |
tree | 83c8a5939e22f03a900c1f664cfccfdd5849cacb /lib/qpthreads.c | |
parent | a7fcfaccece80218c981bdc18837d41e28555305 (diff) | |
download | quagga-2317760c2dc2348851b68238b83550f38406c307.tar.bz2 quagga-2317760c2dc2348851b68238b83550f38406c307.tar.xz |
Upgrade Prefix-List & BGP Community-List handling
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.
Diffstat (limited to 'lib/qpthreads.c')
0 files changed, 0 insertions, 0 deletions