summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2005-06-012005-06-01 Paul Jakma <paul.jakma@sun.com>paul
* bgpd/(general) refcount struct peer and bgp_info, hence allowing us add work_queues for bgp_process. * bgpd/bgp_route.h: (struct bgp_info) Add 'lock' field for refcount. Add bgp_info_{lock,unlock} helper functions. Add bgp_info_{add,delete} helpers, to remove need for users managing locking/freeing of bgp_info and bgp_node's. * bgpd/bgp_table.h: (struct bgp_node) Add a flags field, and BGP_NODE_PROCESS_SCHEDULED to merge redundant processing of nodes. * bgpd/bgp_fsm.h: Make the ON/OFF/ADD/REMOVE macros lock and unlock peer reference as appropriate. * bgpd/bgp_damp.c: Remove its internal prototypes for bgp_info_delete/free. Just use bgp_info_delete. * bgpd/bgpd.h: (struct bgp_master) Add work_queue pointers. (struct peer) Add reference count 'lock' (peer_lock,peer_unlock) New helpers to take/release reference on struct peer. * bgpd/bgp_advertise.c: (general) Add peer and bgp_info refcounting and balance how references are taken and released. (bgp_advertise_free) release bgp_info reference, if appropriate (bgp_adj_out_free) unlock peer (bgp_advertise_clean) leave the adv references alone, or else call bgp_advertise_free cant unlock them. (bgp_adj_out_set) lock the peer on new adj's, leave the reference alone otherwise. lock the new bgp_info reference. (bgp_adj_in_set) lock the peer reference (bgp_adj_in_remove) and unlock it here (bgp_sync_delete) make hash_free on peer conditional, just in case. * bgpd/bgp_fsm.c: (general) document that the timers depend on bgp_event to release a peer reference. (bgp_fsm_change_status) moved up the file, unchanged. (bgp_stop) Decrement peer lock as many times as cancel_event canceled - shouldnt be needed but just in case. stream_fifo_clean of obuf made conditional, just in case. (bgp_event) always unlock the peer, regardless of return value of bgp_fsm_change_status. * bgpd/bgp_packet.c: (general) change several bgp_stop's to BGP_EVENT's. (bgp_read) Add a mysterious extra peer_unlock for ACCEPT_PEERs along with a comment on it. * bgpd/bgp_route.c: (general) Add refcounting of bgp_info, cleanup some of the resource management around bgp_info. Refcount peer. Add workqueues for bgp_process and clear_table. (bgp_info_new) make static (bgp_info_free) Ditto, and unlock the peer reference. (bgp_info_lock,bgp_info_unlock) new exported functions (bgp_info_add) Add a bgp_info to a bgp_node in correct fashion, taking care of reference counts. (bgp_info_delete) do the opposite of bgp_info_add. (bgp_process_rsclient) Converted into a work_queue work function. (bgp_process_main) ditto. (bgp_processq_del) process work queue item deconstructor (bgp_process_queue_init) process work queue init (bgp_process) call init function if required, set up queue item and add to queue, rather than calling process functions directly. (bgp_rib_remove) let bgp_info_delete manage bgp_info refcounts (bgp_rib_withdraw) ditto (bgp_update_rsclient) let bgp_info_add manage refcounts (bgp_update_main) ditto (bgp_clear_route_node) clear_node_queue work function, does per-node aspects of what bgp_clear_route_table did previously (bgp_clear_node_queue_del) clear_node_queue item delete function (bgp_clear_node_complete) clear_node_queue completion function, it unplugs the process queues, which have to be blocked while clear_node_queue is being processed to prevent a race. (bgp_clear_node_queue_init) init function for clear_node_queue work queues (bgp_clear_route_table) Sets up items onto a workqueue now, rather than clearing each node directly. Plugs both process queues to avoid potential race. (bgp_static_withdraw_rsclient) let bgp_info_{add,delete} manage bgp_info refcounts. (bgp_static_update_rsclient) ditto (bgp_static_update_main) ditto (bgp_static_update_vpnv4) ditto, remove unneeded cast. (bgp_static_withdraw) see bgp_static_withdraw_rsclient (bgp_static_withdraw_vpnv4) ditto (bgp_aggregate_{route,add,delete}) ditto (bgp_redistribute_{add,delete,withdraw}) ditto * bgpd/bgp_vty.c: (peer_rsclient_set_vty) lock rsclient list peer reference (peer_rsclient_unset_vty) ditto, but unlock same reference * bgpd/bgpd.c: (peer_free) handle frees of info to be kept for lifetime of struct peer. (peer_lock,peer_unlock) peer refcount helpers (peer_new) add initial refcounts (peer_create,peer_create_accept) lock peer as appropriate (peer_delete) unlock as appropriate, move out some free's to peer_free. (peer_group_bind,peer_group_unbind) peer refcounting as appropriate. (bgp_create) check CALLOC return value. (bgp_terminate) free workqueues too. * lib/memtypes.c: Add MTYPE_BGP_PROCESS_QUEUE and MTYPE_BGP_CLEAR_NODE_QUEUE
2005-05-31 * ospf6d.c: No need for double ';'. Fixes parsing "show ipv6 ospf6hasso
database ..." commands for vtysh by extract.pl. Remove duplicate install_element calls. Fixes bugzilla #194. [backport candidate]
2005-05-31Ignore generated prototype.smf.hasso
2005-05-312005-05-31 Paul Jakma <paul.jakma@sun.com>paul
* zserv.c: (zsend_route_multipath) Fix bug if route is sent with no NEXTHOP_FLAG_FIB nexthops. As ZAPI_MESSAGE_IFINDEX and ZAPI_MESSAGE_NEXTHOP are always set, clients would try read non-existent nexthop information and hit stream assert. Zserv is still broken for multi-nexthop messages, but it always was.
2005-05-292005-05-29 Paul Jakma <paul@dishone.st>paul
* ripd.c: (rip_output_process) fix error which crept in my previous rip auth untanglement commit - it had become impossible to not have authentication (even for v1).
2005-05-28Sync bgpd and ripd set_metric_addsub_cmd commands. Fixes bugzilla #192.hasso
[backport candidate]
2005-05-27 * bgp_routemap.c: Stop leaking communities.hasso
Fixes bugzilla #89. [backport candidate]
2005-05-26 * bgpd.c: Deleting bgp->rsclient list needs fix similar to pree-groupshasso
deleting fix. Avoid leaking bgp->group, bgp->peer and bgp->rsclient lists. [backport candidate]
2005-05-262005-05-26 Paul Jakma <paul.jakma@sun.com>paul
* ospf_abr.c: (ospf_abr_update_aggregate) Fix comment, cost bug itself had been fixed long ago by Sowmini.
2005-05-26 * isis_dr.c: Fix copy&paste error in isis_dr_resign().hasso
[backport candidate]
2005-05-26 * bgpd.c: Don't crash while deleting list of peer-groups.hasso
[backport candidate]
2005-05-26 * rip_routemap.c: In case of '0.0.0.0' used as 'nexthop', use senderhasso
address as nexthop in routemap. Fixes bugzilla #186. [backport candidate]
2005-05-25 * rip_routemap.c: Make "match interface" routemap command match both -hasso
in and out interfaces. Fixes bugzilla #185. [backport candidate]
2005-05-25 * bgpd.c: Fix obvious (routeserver patch) merge error. This makes "nohasso
neighbor x.x.x.x routemap [export|import] commands work again. Fixes bugzilla #184. [backport candidate]
2005-05-252005-05-25 Paul Jakma <paul@dishone.st>paul
* isisd.c: (show_isis_generated_topology) change to _RO version of list macro. remove the extra listnode variable. one of the macros had had incorrect number of arguments.
2005-05-242005-05-24 Paul Jakma <paul@dishone.st>paul
* memtypes.h: update this auto-built file. (maybe we should just remove it, is GNU awk a terrible dependency to have?)
2005-05-232005-05-23 Paul Jakma <paul@dishone.st>paul
* bgp_fsm.h: Add extern qualifier to exported functions * bgp_nexthop.c: add static to nexthop specific globals * *.h: Add guard defines
2005-05-232005-05-23 Paul Jakma <paul@dishone.st>paul
* workqueue.h: Add a WQ_QUEUE_BLOCKED item_status return code, to allow a queue function to indicate the queue is not ready/blocked - rather than any problem with the item at hand. Add a notion of being able to 'plug' and 'unplug' a queue. Add helpers to plug/unplug a queue. Add a completion callback, to be called when a queue is emptied. * workqueue.c: (work_queue_new) remove useless list_free. (work_queue_schedule) new internal helper function to schedule queue, if appropriate. (work_queue_add) use work_queue_schedule (show_work_queues) Print 'P' if queue is plugged. (work_queue_plug) new API function, plug a queue - ie prevent it from 'drained' / processed / scheduled. (work_queue_unplug) unplug a queue, allowing it to be drained / scheduled / processed again. (work_queue_run) Add support for WQ_QUEUE_BLOCKED. Add comment for RETRY_NOW case. Make hysteris more aggresive in ramping up granularity, improves performance significantly. Add support for calling completion callback when queue is emptied, possibly useful for knowing when to unplug a queue.
2005-05-232005-05-23 Paul Jakma <paul@dishone.st>paul
* bgp_routemap.c: add semi-colons to VTY_GET_* to match vty.h change
2005-05-232005-05-23 Paul Jakma <paul@dishone.st>paul
* routemap.c: (rmap_onmatch_goto) fix crash if 'continue' command is used, which does not supply an argv[0]. this is a backport candidate /iff/ the trailing ; is removed from VTY_GET_INTEGER_RANGE * vty.h: fix the VTY_GET macros, do {..} while(0) so they have correct function like syntax in usage.
2005-05-232005-05-23 Paul Jakma <paul@dishone.st>paul
* memtypes.awk: use character classes, which work correctly in all LC_COLLATE environments, unlike A-Z, which doesnt work in eg estonian collate order. Reported by Hasso.
2005-05-192005-05-19 Paul Jakma <paul@dishone.st>paul
* memtypes.c: (memory_list_bgp) add MTYPE_BGP_PEER_HOST
2005-05-192005-05-19 Paul Jakma <paul@dishone.st>paul
* bgp_network.c: (bgp_accept) use XSTRDUP * bgpd.c: (peer_delete) XFREE the correct memtype, not free. (peer_create) use XSTRDUP * bgp_packet.c: (bgp_stream_dup) deleted, stream_dup should be used (various) update -> s/bgp_stream_dup/stream_dup
2005-05-192005-05-19 Paul Jakma <paul@dishone.st>paul
* bgp_fsm.c: (bgp_stop) use sockunion_free, not XFREE.. * bgp_network.c: (bgp_getsockname) ditto * bgp_routemap.c: (route_match_peer) ditto, als use a ret value and remove one sockunion_free. * bgpd.c: (peer_delete) ditto
2005-05-192005-05-19 Paul Jakma <paul@dishone.st>paul
* sockunion.c: (sockunion_getsockname) use MTYPE_SOCKUNION, not TMP (sockunion_getpeername) ditto
2005-05-192005-05-19 Paul Jakma <paul@dishone.st>paul
* thread.c: (thread_cancel_event) the number of pending events cancelled is potentially useful information, dont throw it away, pass it back to the caller.
2005-05-182005-05-19 Paul Jakma <paul.jakma@sun.com>paul
* ospf_interface.c: (ospf_if_table_lookup) Fix a serious bug a less serious one. 1: this function is supposed to lookup entries in the oifs ospf_interface route_table and return either an existing oi or NULL to indicate not found, its caller depends on this, yet this function uses route_node_get which /always/ returns a route_node - one is created if none exists. Use route_node_lookup instead. This should fix root cause of the reports of the (ospf_add_to_if) assert being hit. 2: oi's are inserted into this table with prefixlength set to /32 (indeed, it should be a hash table, not a route_table), however prefixlength to lookup was not changed, if no valid entry can be inserted other than /32, then nothng but /32 should be looked up. This possibly only worked by fluke.. Fix confirmed by 2 reporters (one list, one IRC), definitely a backport candidate once it has been incubated in HEAD for a while. Thanks to Patrick Friedel and Ivan Warren for testing.
2005-05-152005-05-15 Paul Jakma <paul@dishone.st>paul
* getopt.h: It's not just __GNU_LIBRARY__ which defines getopt, eg __EXTENSIONS__ does too on SunOS. It still seems awfully fragile though. * getopt.c: include zebra.h after config.h, before including getopt.h so that things at least are consistent.. * getopt1.c: ditto
2005-05-13- revert the commenting of touch doc/quagga.info, wont work becausepaul
defines.texi is autogenerated every configure time so it will always be newer than quagga.info, and hence require quagga.info to be built. drat.
2005-05-132005-05-13 Paul Jakma <paul.jakma@sun.com>paul
* prototype.daemons.in: Move the Solaris 10 SMF specific stuff to a seperate package. * depend.smf: dependencies for smf package * pkginfo.smf.tmpl.in: pkginfo for smf * prototype.smf.in: prototype for smf * Makefile.am: Add smf to pkg_names
2005-05-13- Forgot to commit ChangeLogpaul
2005-05-132005-05-13 Paul Jakma <paul.jakma@sun.com>paul
* quagga.xml.in: Sigh, XML child elements are order-sensitive. * prototype.doc.in: info/dir doesnt get created always.. comment out for now, likely needs to be done with an install method.
2005-05-132005-05-13 Paul Jakma <paul.jakma@sun.com>paul
* configure.ac: Comment out the touch doc/quagga.info hack. I'm hoping it's not needed anymore, cause it breaks out of tree builds which i've become fond of.. Plus I think we sorted out most of the original problems (updated texinfo.tex, moved the version info to an autogenerated by automake version.texi). Dist users most definitely wont be affected.
2005-05-112005-05-11 Paul Jakma <paul.jakma@sun.com>paul
* (general) Fix memory leaks in opaque AS-scope LSAs, reported and with much debugging done by by scott collins <scollins@agile.tv>. (possible backport candidate?) * ospf_lsa.c: (ospf_discard_from_db) dont call ospf_ase_unregister_external_lsa for opaque-lsa's, opaques are never registered with ase in the first place. * ospf_packet.c: (general) Disabuse opaque related code of its tendency to try gather up things into temporary lists. (ospf_ls_upd) remove the temporary lists opaque uses, call opaque functions inline, just like all other types. (ospf_ls_ack) ditto. (ospf_recv_packet) fixup sign warning. * ospf_opaque.c: (general) fix the unneeded use of lists, and untwist some of the logic. (ospf_opaque_self_originated_lsa_received) take a single LSA as argument, not a list of them. Remove the list loop. Logic otherwise unchanged. (ospf_opaque_ls_ack_received) Mostly ditto. But untwist the logic, move the actions up into the switch block, remove the goto's and sanitise the logic near the end a bit. * ospf_opaque.h: Adjust definitions of aforementioned functions in ospf_opaque.c to match.
2005-05-112005-05-11 Andrew J. Schorr <ajschorr@alumni.princeton.edu>ajs
* rip_interface.c (rip_interface_add): Need to call rip_passive_interface_apply (was already calling it in rip_interface_up). [backport candidate]
2005-05-072005-05-07 Yar Tikhiy <yar@comp.chem.msu.su>paul
* configure.ac: Check for OSes which support passing ifindex in struct ip_mreq. * lib/sockopt.c: Add support for BSD style ifindex in ip_mreq. * ospfd/ospf_network.c: Log ifindex on multicast membership leave/join events.
2005-05-062005-05-06 Paul Jakma <paul.jakma@sun.com>paul
* (general) extern and static qualifiers added. unspecified arguments in definitions fixed, typically they should be 'void'. function casts added for callbacks. Guards added to headers which lacked them. Proper headers included rather than relying on incomplete definitions. gcc noreturn function attribute where appropriate. * ospf_opaque.c: remove the private definition of ospf_lsa's ospf_lsa_refresh_delay. * ospf_lsa.h: export ospf_lsa_refresh_delay * ospf_packet.c: (ospf_make_md5_digest) make *auth_key const, correct thing to do - removes need for the casts later. * ospf_vty.c: Use vty.h's VTY_GET_INTEGER rather than ospf_vty's home-brewed versions, shuts up several warnings. * ospf_vty.h: remove VTY_GET_UINT32. VTY_GET_IPV4_ADDRESS and VTY_GET_IPV4_PREFIX moved to lib/vty.h. * ospf_zebra.c: (ospf_distribute_list_update_timer) hacky overloading of the THREAD_ARG pointer should at least use uintptr_t.
2005-05-062005-05-06 Paul Jakma <paul.jakma@sun.com>paul
* zserv.h: Remove ZEBRA_PORT definition, its in lib/zebra.h now
2005-05-062005-05-06 Paul Jakma <paul@dishone.st>paul
* (general) extern and static'ification of functions in code and header. Cleanup any definitions with unspecified arguments. Add casts for callback assignments where the callback is defined, typically, as passing void *, but the function being assigned has some other pointer type defined as its argument, as gcc complains about casts from void * to X* via function arguments. Fix some old K&R style function argument definitions. Add noreturn gcc attribute to some functions, as appropriate. Add unused gcc attribute to some functions (eg ones meant to help while debugging) Add guard defines to headers which were missing them. * command.c: (install_node) add const qualifier, still doesnt shut up the warning though, because of the double pointer. (cmp_node) ditto * keychain.c: (key_str2time) Add GET_LONG_RANGE() macro, derived fromn vty.h ones to fix some of the (long) < 0 warnings. * thread.c: (various) use thread_empty (cpu_record_hash_key) should cast to uintptr_t, a stdint.h type * vty.h: Add VTY_GET_IPV4_ADDRESS and VTY_GET_IPV4_PREFIX so they removed from ospfd/ospf_vty.h * zebra.h: Move definition of ZEBRA_PORT to here, to remove dependence of lib on zebra/zserv.h
2005-05-06 * sockunion.c: Fix warning message.hasso
2005-05-032005-05-03 Paul Jakma <paul@dishone.st>paul
* (general) More cleaning up of stream abuse, isisd should be back to previous functionality. Replace various XMALLOC+memset's with XCALLOC * isis_tlv.c: (tlv_add_padding) use stream_put to clear the stream rather than forward endp, as isisd reuses streams. * isis_pdu.c: (process_lsp) cleanup direct reference to stream endp (send_lsp) manual copy of a stream cleaned up to use stream_copy. * isis_network.c: (isis_recv_pdu_bcast) replace direct memcpy with stream_write (isis_recv_pdu_p2p) replace recvfrom directly into stream with stream_recvfrom. Remove dangerous and now unneeded manual update of endp. (isis_recv_pdu_bcast / non-GNU_LINUX) Replace direct memcpy with stream_write. (isis_recv_pdu_p2p) replace read direct into stream with stream_read_try, and hence remove the manual update of endp. * isis_lsp.c: (lsp_update_data) manual stream dup replaced with stream_dup. (lsppdu_realloc) mempcy into stream data replaced with stream_put. (lsp_build_nonpseudo) remove mysterious stream_forward_endp's - which were originally stream_set_putp - shouldn't be needed now that all the manual fiddling of private stream data has been corrected. (build_topology_lsp_data) remove unneeded twiddling of endp, appears to be due to lsppdu_realloc(), but it appears to sort of do the right thing wrt streams.
2005-05-032005-05-03 Paul Jakma <paul@dishone.st>paul
* stream.h: Add comment about the special zero-ing ability of stream_put. (stream_recvmsg, stream_write) should return ssize_t and size_t respectively. Should both be extern linkage. (stream_recvfrom) Stream aware wrapper around recvfrom, in style of stream_read_try. * stream.c: (stream_recvfrom) new function, wrapper around recvfrom. (stream_recvmsg, stream_write) ssize_t and size_t return values
2005-04-292005-04-29 Paul Jakma <paul.jakma@sun.com>paul
* NEWS: Added some more 0.99 news. * configure.ac: bump to 0.99.1 (0.99.0 was never released except via CVS snapshots)
2005-04-292005-04-29 Paul Jakma <paul@dishone.st>paul
* defines.texi.in: Add PACKAGE_NAME, PACKAGE_STRING. * quagga.texi: Use PACKAGE_NAME, this is more to give me an excuse to update quagga.texi so that the 'UPDATED' in version.texi will be more recent, the Makefile seems to be dumb and not examine the texi files from which quagga.texi is generated. * quagga.info: Fresh copy to match updates.
2005-04-282005-04-28 Paul Jakma <paul@dishone.st>paul
* quagga.info: updated * Makefile.am: automake seems to depend doc built stuff on srcdir for some reason, or maybe its cause we have quagga.info, quagga.texi in CVS - not sure. Anyway, the static rule for quagga.pdf should depend on the srcdir quagga.texi in that case.
2005-04-282005-04-28 Paul Jakma <paul.jakma@sun.com>paul
* NEWS: Added some 0.99 news
2005-04-282005-04-28 Paul Jakma <paul@dishone.st>paul
* quagga.info: updated
2005-04-282005-04-28 Paul Jakma <paul.jakma@sun.com>paul
* rib.h: (struct rib) Add lock field for refcounting. * zserv.h: (struct zebra_t) Add a ribq workqueue to the zebra 'master' struct. * zserv.c: (zread_ipv4_add) XMALLOC then memset should be XCALLOC. * zebra_rib.c: Clean up refcounting of route_node, make struct rib refcounted and convert rib_process to work-queue. In general, rib's should be rib_addnode'd and delnode'd to route_nodes, and these symmetrical functions will manage the locking of referenced route_node and freeing of struct rib - rather than having users manage each seperately - with much scope for bugs.. (newrib_free) removed and replaced with rib_lock (rib_lock) new function, check state of lock and increment. (rib_unlock) new function, check lock state and decrement. Free struct rib if refcount hits 0, freeing struct nexthop's, as newrib_free did. (rib_addnode) Add RIB to route_node, locking both. (rib_delnode) Delete RIB from route_node, unlocking each. (rib_process) Converted to a work-queue work function. Functional changes are minimal, just arguments, comments and whitespace. (rib_queue_add_qnode) Helper function to setup a ribq item. (rib_queue_add) Helper function, same arguments as old rib_process, to replace in callers of rib_process. (rib_queue_qnode_del) ribq deconstructor. (rib_queue_init) Create the ribq. (rib_init) call rib_queue_init. (remainder) Sanitise refcounting of route_node's. Convert to rib_queue_add, rib_addnode and rib_delnode. Change XMALLOC/memset to XCALLOC. Remove calls to nexthop_delete and nexthop_free.
2005-04-282005-04-27 Andrew J. Schorr <ajschorr@alumni.princeton.edu>ajs
Add wall-clock timing statistics to 'show thread cpu' output. * thread.h: Define struct rusage_t to contain wall-clock time and cpu time. Change GETRUSAGE macro to collect both pieces of data. Make appropriate changes to struct cpu_thread_history to track CPU time and real time. Change proto for thread_consumed_time to return real and cpu time elapsed. And declare a new global variable 'struct timeval recent_time'. * thread.c (struct timeval recent_time): New global timestamp variable. (timeval_adjust): If timeout is negative, set to 0 (not 10 microseconds). And remove upper bound of 1,000,000 seconds, since this does not seem to make any sense (and it breaks funcname_thread_add_timer_timeval). (timeval_cmp): Should return long, not int. (vty_out_cpu_thread_history): Show CPU time and real time. (cpu_record_hash_print): Calculate totals for CPU and real time. (cpu_record_print): Change 'show thread cpu' title to show CPU and real time. (thread_timer_remain_second): Put current time in global recent_time. (funcname_thread_add_timer_timeval): Fix assert. Replace 2-case switch assignment with a ternary expression. Use global recent_time variable. Fix use of timeval_adjust (previously, the value was not actually being adjusted). (thread_cancel): Add missing "break" statement in case THREAD_BACKGROUND. (thread_timer_wait): Use global recent_time value instead of calling gettimeofday. And there's no need to check for negative timeouts, since timeval_subtract already sets these to zero. (thread_timer_process): Timers are sorted, so bail out once we encounter a timer that has not yet popped. And remove some extraneous asserts. (thread_fetch): Do not process foreground timers before calling select. Instead, add them to the ready list just after the select. Also, no need to maintain a count of the number of ready threads, since we don't care how many there are, just whether there's one at the head of the ready list (which is easily checked). Stick current time in global variable recent_time to reduce the number of calls to gettimeofday. Tighten logic for calculating the select timeout. (thread_consumed_time): Now returns real time and puts the elapsed cpu time in an additional argument. (thread_should_yield): Use real (wall-clock) time to decide whether to yield. (thread_call): Maintain CPU and real time statistics. * vty.c (vty_command): For slow commands, show real and cpu time.
2005-04-272005-04-27 Andrew J. Schorr <ajschorr@alumni.princeton.edu>ajs
* workqueue.c (show_work_queues): Remove unused gettimeofday call.