summaryrefslogtreecommitdiffstats
path: root/lib
Commit message (Collapse)AuthorAgeFilesLines
...
| | * bgpd: Cleanups & fixes for minttl / GTSMStephen Hemminger2011-03-241-8/+8
| | | | | | | | | | | | | | | | | | | | | | | | * bgp_vty.c: (peer_ebgp_multihop_{un,}set_vty) tail-call cleanup. ({no_,}neighbor_ttl_security) ditto. * bgpd.c: (peer_ttl_security_hops_set) Peer group checks and TTL set only need to be done on transition. * sockunion.c: (sockopt_minttl) remove always-on debug and improve readability.
| | * bgpd: RFC 5082 Generalized TTL Security Mechanism supportNick Hilliard2011-03-232-0/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * bgpd: Add support for RFC 5082 GTSM, which allows the TTL field to be used to verify that incoming packets have been sent from neighbours no more than X IP hops away. In other words, this allows packets that were sent from further away (i.e. not by the neighbour with known distance, and so possibly a miscreant) to be filtered out. * lib/sockunion.{c,h}: (sockopt_minttl) new function, to set a minimum TTL using the IP_MINTTL socket opt. * bgpd.h: (BGP_ERR_NO_EBGP_MULTIHOP_WITH_TTLHACK) define for command error for minttl. (struct peer) add a config variable, to store the configured minttl. (peer_ttl_security_hops_{set,unset}) configuration handlers * bgpd.c: (peer_group_get) init gtsm_hops (peer_ebgp_multihop_{un,}set) check for conflicts with GTSM. Multihop and GTSM can't both be active for a peer at the same time. (peer_ttl_security_hops_set) set minttl, taking care to avoid conflicts with ebgp_multihop. (bgp_config_write_peer) write out minttl as "neighbor .. ttl-security hops X". * bgp_vty.c: (bgp_vty_return) message for BGP_ERR_NO_EBGP_MULTIHOP_WITH_TTLHACK (peer_ebgp_multihop_{un,}set_vty) * bgp_network.c: (bgp_accept) set minttl on accepted sockets if appropriate. (bgp_connect) ditto for outbound.
| | * lib: fix more format warnings (#637)Christian Hammers2011-03-232-2/+2
| | | | | | | | | | | | | | | | | | | | | The following patch was also neccessary to compile. * command.c: (config_logmsg_cmd) use "%s" format spec * if.c: (connected_log) ditto
| | * lib: add TCP_CORK wrapperStephen Hemminger2011-03-212-0/+11
| | | | | | | | | | | | | | | * sockunion.{c,h}: (sockopt_cork) wrapper for TCP_CORK socket option for those platforms that provide it. For other platforms, it is just a nop.
| | * lib: zlog should clean up its memoryTom Goff2011-03-211-0/+3
| | | | | | | | | | | | | | | * log.c: (closezlog) Also free the dynamically allocated filename when a log is closed.
| | * lib: Add a function to delete all interfacesTom Goff2011-03-212-0/+19
| | | | | | | | | | | | | | | if.c: (if_terminate) This adds a cleanup function that can be called when a daemon exits, similar to vty_terminate().
| | * lib: Better hashing of string values using Bernstein hashStephen Hemminger2011-03-214-16/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | * hash.{h,c}: (string_hash_make) Hash optimised for strings, current implementation using Bernstein hash, which offers a good compromise between distribution and performance. * distribute.c: (distribute_hash_make) use previous instead of additive string hash. * if_rmap.c: (if_rmap_hash_make) ditto
| | * bgpd: fix bgp_node locking issuesChris Caputo2011-03-211-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * bgpd: Connected table locks were being locked but not unlocked, such that eventually a lock would exceed 2^31 and become negative, thus triggering an assert later on. * bgp_main.c: (bgp_exit) delete connected elements along with ifp's. * bgp_nexthop.c: (bgp_nexthop_lookup{,_ipv6}) add missing unlocks (bgp_multiaccess_check_v4) ditto (bgp_connected_{add,delete}) Use a distinct memtype for bgp_connected_ref. (bgp_scan_finish) reset the nexthop cache to clean it up when bgpd exits * bgp_route.c: fix missing bgp_node unlocks * lib/memtype.c: (memory_list_bgp) add MTYPE_BGP_CONN * testing: has been tested for almost 2 months now.
| | * lib: Fix accounting of memoryChris Hall2011-03-211-2/+8
| | | | | | | | | | | | | | | | | | | | | | | | * lib/memory.c: (zrealloc) If is called with NULL pointer then it should increment allocations because it behaves the same as zmalloc. (zfree) is called with NULL pointer, it does nothing therefore allocation count should not change.
| | * lib: Fix bug in prefix trie lookupPaul Jakma2010-12-081-6/+8
| | | | | | | | | | | | | | | | | | | | | * lib/table.c: (route_node_match) fix overshoot that was causing this function to go 1 bit too far and thus reading past end of prefix. (route_node_lookup) be defensive - don't assume others will clean up leaves when removing info.
| | * lib: prefix.c nano-optimisationPaul Jakma2010-12-081-4/+5
| | | | | | | | | | | | | | | * lib/prefix.c: (prefix_match) nano-optimisation, let it return early without copying pointers.
| | * lib: Make workqueue more conservative about ramping upPaul Jakma2010-12-081-8/+9
| | | | | | | | | | | | | | | | | | * workqueue.c: (work_queue_run) Err more on the side of keeping granularity down, by being more conservative about increasing it. Also, fix mispelling.
| | * lib: Add a command to clear the thread CPU history dataPaul Jakma2010-12-083-0/+86
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * (general) this can be useful when investigating thread latency problems, when you don't want to have to restart a daemon between tests. * thread.c: (cpu_record_(hash_)clear) wipe the stored thread cpu history data, according to the filter, similar to the vty print code. (clear_thread_cpu_cmd) new command to clear data. * thread.h: export new command * command.c: install it
| | * lib: Thread scheduler should be fair and not let events starve I/O and timersPaul Jakma2010-12-081-16/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * thread.c: (thread_fetch) the current scheduler will service events indefinitely, ignoring I/O and timers, so long as there are events. In other words, events can crowd out I/O and timers. In theory this shouldn't be a huge problem as events are generated only by timers and I/O, however in practice it means normal-load behaviour is not as useful a predictor of high-load behaviour as it should be. Fix this by considering all the kinds of threads, in every run of the scheduler. For any given run, we prioritise events, however across runs the scheduler should be fair. This has been observed to give more stable inter-packet times in testing of ospfd (i.e. lower std-dev). (thread_process) new heler to queue all the given threads onto the ready list
| | * lib: thread history funcname shouldn't be constant, it's freedPaul Jakma2010-12-082-2/+2
| | | | | | | | | | | | | | | | | | | | | * thread.h: (struct cpu_thread_history.funcname) malloc gets called on this so it should not be const * thread.c: (cpu_record_print) cast the (const char *) to (char *), this function knows what it's doing (free wont be called on it).
| | * zclient: fix router-id calculation for IPv6 (#595)Dmitry Tejblum2010-10-181-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If router-id is not specified in ospf6d.conf, ospf6d will get it from the zebra daemon. But ospf6d originates Link LSAs before the router-id is returned by zebra, thus this router's Link LSAs will be flooded with AdvRouter set to 0. * zclient.c: zclient_start(): send ZEBRA_INTERFACE_ADD message after ZEBRA_ROUTER_ID_ADD, not before
| | * bgpd, lib: adopt afi_t and safi_t in several placesMichael Lambert2010-10-062-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | * bgpd/bgp_attr.c, bgpd/bgp_open.h, bgpd/bgp_route.c, lib/prefix.c, lib/prefix.h: Various integer types were being used where, if we had strict type checking, afi_t and safi_t would be required. Signed-off-by: G.Balaji <balajig81@gmail.com> (cherry picked from commit c8af35ffa2dc79ff7d7ff00b1b61f1f50a100ab6)
| | * lib/vty.c: add missing format string when printing out motd messageNico Golde2010-09-171-1/+1
| | | | | | | | | | | | Signed-off-by: G.Balaji <balajig81@gmail.com>
| | * Document rules for zalloc and friends.Greg Troxel2010-09-171-5/+27
| | | | | | | | | | | | | | | lib/memory.c:z{a,c,re}alloc, zfree, zdup: add requires/effects comments.
| | * lib: undo the last PIE commitStephen Hemminger2010-01-271-3/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Stephen: A recent change breaks build Quagga on Debian Lenny with amd64 (but not i386). Not sure whether this is cause by ld, gcc, or libtool; but whatever it just won't work for a large number of users. Mathias: I would guess it's a problem of libtool because it adds "-fPIC -DPIC" to the compiler flags but doesn't remove -fPIE. That wouldn't be a problem if the compiler would ignore the -fPIE in favor to the latter -fPIC, but obviously it does not. [...] Those objects were actually compiled with -fPIC but also -fPIE which seems to confuse gcc.
| | * lib: fix PIE build flagsMathias Krause2010-01-201-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Because the final executables are built as position independent executables (PIE) -- when configure has detected compiler supported for PIE -- the objects in the library archive must be built in that way, too. Otherwise the runtime linker has to do unneccesary relocation for each start of the program. Even worse, the programs won't even be able to start on a (hardened) kernel that doesn't allow those relocations to happen by preventing making the .text segment writable (PaX's MPROTECT feature comes to mind). The attached patch fixes this issue by adding the appropriate flags to the Makefile.am.
| | * lib: fix memory loggingDavid Ward2010-01-131-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * lib/memory.h * mtype_zcalloc(): correct function prototype * XFREE(): make both definitions consistent in setting the pointer to NULL after freeing the memory These changes will only have an effect if MEMORY_LOG is defined (it is not by default).
| | * lib: make some structures constantStephen Hemminger2009-12-212-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * isisd/isis_pdu.c * maskbit: this pre-initialized array is not modified * lib/prefix.c * maskbit: idem * lib/command.c * facility_map: idem * itoa64: idem * default_motd: make local var static * facility_name(): update local var accordingly * facility_match(): idem
| * | Fix SEGV when closing legacy threaded VTYex20bChris Hall2011-08-021-1/+1
| | | | | | | | | | | | Fix of simple typo.
* | | Disable the "~" VTY Terminal prompt.Chris Hall2011-07-212-2/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commands sent to the Routing Engine are now sent as priority messages, so should no longer be a need for the "~" prompt which kept the CLI "live" while a command was waiting for the Routing Engine to pay attention. Also: reinstated test-vector.c tests for vector_move_item_here(), which seem somehow to have got lost.
* | | Added features to configure.Chris Hall2011-07-211-629/+0
| | | | | | | | | | | | | | | | | | | | | | | | --with-defines -Dxxx -Dyyy -- can add things to the cc line --with-memory-tracker -- add -DMEMORY_TRACKER to cc line --enable-gcc-debug -- -O0 -g3
* | | Update pipework and improve memory reporting.Chris Hall2011-07-2159-4229/+9770
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Improve error handling for all new pipework inputs and outputs. Change behaviour of ^C from VTY Terminal, so that will interrupt output and terminate all running pipes -- including running shell commands. In pipe commands, recognise "~/..." and "~user/..." home directory forms. Changed "~/" to mean the usual home for the current user. "~~/" now means the configuration file directory. Introduced "shdir DIR" command to show what is (currently) what. Changed "<|" so that if the command has a path, it is expanded using Quagga's rules (including "~~/" and "~./") and the "here" directory is set to that path. Fixed collection of stderr output from all pipes so that is separate from stdout output, and is always sent to the base output (eg VTY Terminal). Increase amount of information about the heap that "show mem" shows -- particularly if the "memory_tracker" is enabled. Tested and applied resulting fixes.
* | | Merge branch 'master' of /git/quagga.euro-ix into pipeworkChris Hall2011-05-243-37/+96
|\| |
| * | Improve writing of pid lock file and error reporting.Chris Hall2011-05-181-34/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Added fsync() after writing the pid to the lock file to push the result to the file system immediately. Any error in the procedure is now treated as fatal, and the daemon will exit(1). (Previously only the open and the lock had to succeed.) Any error is logged and is (now) output to stderr. If the pid file is locked, the error message reports the pid which owns the lock.
| * | Fix for changing of prefix-list entries.Chris Hall2011-05-171-3/+14
| | | | | | | | | | | | | | | | | | | | | A bug in vector_move_item_here() meant that under some circumstances an "ip prefix-list" command would trigger an assert() because updating an existing entry (with a sequence number) failed to keep the cache of entries correctly sorted.
| * | Fix assert() in lib/vty_cli so does not go off during "write file"Chris Hall2011-05-121-2/+1
| | | | | | | | | | | | | | | | | | Previously, assert failed to take into account possible extra state of vty during "write file", so with particular sleight of hand could be persuaded to go off invalidly.
| * | Fix to include all new show commands from 0.99.18.Chris Hall2011-04-051-0/+9
| | | | | | | | | | | | | | | A couple of RESTRICTED_NODE entries went astray and have been brought back into the fold.
* | | Small improvements to speed of reading of configuration file.Chris Hall2011-03-3114-153/+606
| | | | | | | | | | | | | | | Tidy up signalling of "ready" to command loop, and checking of appropriate state to close written configuration file.
* | | Better mechanism for handling depth_mark in vty->vio.Chris Hall2011-03-307-20/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | Previous mechanism required special steps before any new output vty was opened -- which was easy to forget. New mechanism requires extra step when input and output are opened at the same time, which is less common, and more obviously requires the extra step. Fixes problem with "write memory" command.
* | | Fix compile on older gcc, and other minor fixes.Chris Hall2011-03-294-20/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Slightly older gcc would not tolerate an offsetof() where the type part contained a '->' -- replaced foo->bar by foo[0].bar, which is more readily tolerated. Fixed assert() in "--more--". Improved some shut-down code.
* | | Merge branch 'master' of /git/quagga.euro-ix into pipeworkex16pChris Hall2011-03-298-26/+71
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This ensures that the two branches are consistent after the merging of the old-Quagga 0.99.18 changes. Release: 0.99.18ex16p. Eliminated some whitespace differences ! Collected RESTRICTED_NODE show_bgp_ipv6_safi_route_cmd and show_bgp_ipv6_safi_prefix_cmd, and one HAVE_IPV6 skip. Also releasing filename in closezlog(). Removed strlen() from lib/qfstring.c for async-signal-safe purposes.
| * | Bring "ex" version up to date with 0.99.18ex14Chris Hall2011-03-2923-85/+312
| | | | | | | | | | | | | | | | | | | | | | | | Release: 0.99.18ex14 Also fixes issue with unknown attributes -- does not release them prematurely. Contains the "bgpd: New show commands for improved view and address family support", which is post 0.99.18. (But not RFC 5082 GTSM.)
| * | Correct logging output on 32-bit machines.ex12Chris Hall2011-03-211-59/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | v0.99.15ex12 Construction of log messages using qfs_printf()/qfs_vprintf() did not produce the intended results on 32-bit machines -- so that some logging messages were garbled. On 64-bit machines the log messages were formed as expected.
| * | ex09: Fix "no ip community-list"ex09Chris Hall2010-12-211-2/+7
| | | | | | | | | | | | | | | "no ip community-list" leaves a named list with NULL value, and some operations did not check for that NULL value.
* | | Bring "ex" version up to date with 0.99.18ex15pChris Hall2011-03-2965-1493/+1568
| | | | | | | | | | | | | | | | | | | | | | | | | | | Release: 0.99.18ex15p -- Pipework Branch Also fixes issue with unknown attributes -- does not release them prematurely. Contains the "bgpd: New show commands for improved view and address family support", which is post 0.99.18. (But not RFC 5082 GTSM.)
* | | Upgrade of "pipework" -- including piping to/from shell commandsex11pChris Hall2011-03-2181-9227/+14689
| | | | | | | | | | | | | | | | | | Version 0.99.15ex11p A major overhaul.
* | | Second tranche of updates for pipework branch.Chris Hall2011-02-1369-11537/+12109
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | modified: bgpd/bgp_connection.c modified: bgpd/bgp_debug.c modified: bgpd/bgp_engine.h modified: bgpd/bgp_main.c modified: bgpd/bgp_packet.c modified: bgpd/bgp_peer.c modified: bgpd/bgp_route.c modified: bgpd/bgp_routemap.c modified: bgpd/bgp_session.c modified: bgpd/bgp_vty.c modified: bgpd/bgpd.c modified: bgpd/bgpd.h modified: configure.ac modified: isisd/dict.h modified: isisd/isis_misc.c modified: isisd/isis_routemap.c modified: isisd/isis_spf.c modified: lib/Makefile.am modified: lib/command.c modified: lib/command.h modified: lib/command_execute.h modified: lib/command_parse.c modified: lib/command_parse.h modified: lib/command_queue.c modified: lib/command_queue.h modified: lib/elstring.h modified: lib/heap.c modified: lib/if.c modified: lib/if.h modified: lib/keychain.c modified: lib/keystroke.c modified: lib/keystroke.h modified: lib/list_util.c modified: lib/list_util.h modified: lib/log.c modified: lib/log.h modified: lib/memory.c modified: lib/memory.h modified: lib/memtypes.c modified: lib/misc.h modified: lib/mqueue.c modified: lib/mqueue.h deleted: lib/node_type.h modified: lib/pthread_safe.c modified: lib/qfstring.c modified: lib/qiovec.c modified: lib/qiovec.h modified: lib/qpath.c modified: lib/qpnexus.c modified: lib/qpnexus.h modified: lib/qpselect.c modified: lib/qpthreads.h modified: lib/qstring.c modified: lib/qstring.h modified: lib/qtime.c modified: lib/qtime.h modified: lib/qtimers.c modified: lib/qtimers.h modified: lib/routemap.c modified: lib/symtab.h modified: lib/thread.h deleted: lib/uty.h modified: lib/vector.c modified: lib/vector.h modified: lib/version.h.in modified: lib/vio_fifo.c modified: lib/vio_fifo.h modified: lib/vio_lines.c modified: lib/vio_lines.h modified: lib/vty.c modified: lib/vty.h modified: lib/vty_cli.c modified: lib/vty_cli.h modified: lib/vty_io.c modified: lib/vty_io.h modified: lib/vty_io_basic.c modified: lib/vty_io_basic.h modified: lib/vty_io_file.c modified: lib/vty_io_file.h modified: lib/vty_io_shell.c modified: lib/vty_io_term.c modified: lib/vty_io_term.h modified: lib/vty_local.h modified: lib/vty_pipe.c modified: lib/workqueue.h modified: lib/zebra.h modified: ospf6d/ospf6_lsa.c modified: ripngd/ripngd.c modified: tests/test-list_util.c modified: tests/test-vector.c modified: vtysh/vtysh.c modified: vtysh/vtysh_config.c
* | | Initial commit to seed the "pipework" branchex10pChris Hall2011-02-1311-0/+2809
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a major revision of the command processing, in order to support new lexical level for command lines, plus all the necessary I/O redirection for the pipes. This is version 0.99.15ex10p. This supports: < filename <+ filename .... > filename .... >> filename .... >* Also contains all lexical level handling of '...', "...." and \x in order to allow use of '>' et al if required. Updated command line completion and help is a work in progress.
* | | Creation of pipework branchChris Hall2010-12-2167-4757/+15769
|/ /
* | Fix "neighbor xx peer-group" and "show bgp XX::"Chris Hall2010-12-141-66/+67
| | | | | | | | | | | | | | | | | | | | | | | | 1234567890123456789012345678901234567890123456789012345678901234567890 For an unknown reason "neighbor xx peer-group" returned a CMD_WARNING even when everything was fine. Fixed. "show bgp XX::" issued a spurious "address is malformed" error message. Fixed. Small change to AS_PATH handling to clarify the checking of as-segment lengths.
* | Change prefix-list to allow: len <= ge <= le <= maxex08Chris Hall2010-12-091-17/+21
| | | | | | | | | | | | | | | | | | Cisco claim to require: len < ge < le <= max but are thought to allow: len < ge <= le <= max Later model Cisco IOS has an "eq" option, for ge == le ! Increase version number to ex08.
* | Make routemap sequence numbers 32-bitChris Hall2010-10-293-80/+144
| | | | | | | | | | | | | | Standard Cisco routemap sequence numbers are 1..65535, and Quagga has followed that. This change extends the range to 4,294,967,295. Also fixes bug in prefix-list handling for IPv6 /32 prefixes.
* | Fix neighbor override-capabilityChris Hall2010-08-031-1/+1
| | | | | | | | Update version to "ex04".
* | Introduce "rs-in" route-maproot2010-07-282-11/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | All peers may be configured with an "rs-in" route-map, whether they are rsclients, or not. All routes from a given peer are passed through the "rs-in" route-map before being considered for inclusion in any rsclients RIBs. Routes pass through the "rs-in" route-map once, irrespective of the number of rsclients. An "rs-in" route-map is intended to be used to ensure that routes from a given peer are kosher, before being passed to rsclients. The "in" route-map and filters may do the same, but for the main RIB. Any route-selection type actions that the "in" route-map may do for the main RIB will probably be done in the "import" route-map for an rsclient RIB. Also: * make zfree() work for NULL items, in lib/memory.c * fix clear ip bgp .... so works when pEstablished Version change to ex03.
* | Trap SIGABRT so that get backtrace in the log.root2010-07-225-14/+71
| | | | | | | | | | Improve handling of notification objects, and the printing of same to the logs.