summaryrefslogtreecommitdiffstats
path: root/lib/symtab.c
Commit message (Collapse)AuthorAgeFilesLines
* Creation of pipework branchChris Hall2010-12-211-33/+36
|
* Fix reaming of empty symbol table -- lib/symtab.cChris Hall (GMCH)2009-12-101-2/+3
|
* Allow orphan symbols to be unset -- lib/symtab.cChris Hall (GMCH)2009-12-101-6/+9
| | | | Improved version.
* Allow orphan symbols to be unset -- lib/symtab.cChris Hall (GMCH)2009-12-101-2/+3
| | | | | | | | | | May not set orphan symbol values to anything meaningful, but must be allowed to unset an orphan value (which is already unset) so that when reaming a symbol table ordinary value delete/unset functions can be called. So fixed the assert which was disallowing all value changes for orphans, in symbol_set_value().
* Upgrade Prefix-List & BGP Community-List handlingChris Hall (GMCH)2009-11-261-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* Introduce lib/symtab.c & .hChris Hall (GMCH)2009-11-241-0/+1178
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