bgpd/bgp_attr.c        |  176 +----
 bgpd/bgp_attr.h        |    6 
 bgpd/bgp_community.c   |    7 
 bgpd/bgp_community.h   |    1 
 bgpd/bgp_damp.c        |    6 
 bgpd/bgp_dump.c        |    4 
 bgpd/bgp_main.c        |   10 
 bgpd/bgp_network.c     |    1 
 bgpd/bgp_nexthop.c     |   22 
 bgpd/bgp_packet.c      |   61 -
 bgpd/bgp_route.c       | 1604 ++++++++++++++++++++++++++++++++++---------------
 bgpd/bgp_route.h       |    3 
 bgpd/bgp_routemap.c    |  129 ---
 bgpd/bgp_table.c       |    1 
 bgpd/bgp_vty.c         |  151 ++++
 configure.ac           |    2 
 doc/bgpd.texi          |   23 
 doc/main.texi          |    4 
 doc/routemap.texi      |   14 
 lib/command.c          |    2 
 lib/distribute.c       |   13 
 lib/hash.c             |   11 
 lib/hash.h             |    2 
 lib/if.c               |   18 
 lib/if.h               |    1 
 lib/if_rmap.c          |    9 
 lib/log.c              |    3 
 lib/memory.c           |   10 
 lib/memtypes.c         |    1 
 lib/prefix.c           |    9 
 lib/sockunion.c        |   10 
 lib/sockunion.h        |    1 
 lib/table.c            |   14 
 lib/thread.c           |  142 +++-
 lib/thread.h           |    3 
 lib/workqueue.c        |   17 
 ospf6d/ospf6_area.c    |    6 
 ospf6d/ospf6_asbr.c    |    5 
 ospf6d/ospf6_asbr.h    |    1 
 ospf6d/ospf6_intra.c   |    2 
 ospf6d/ospf6_lsa.c     |    5 
 ospf6d/ospf6_lsa.h     |    1 
 ospf6d/ospf6_main.c    |   35 -
 ospf6d/ospf6_message.c |   18 
 ospf6d/ospf6_message.h |    1 
 ospf6d/ospf6_route.c   |   15 
 ospf6d/ospf6_spf.c     |   13 
 ospf6d/ospf6_top.c     |    9 
 ospf6d/ospf6_top.h     |    1 
 ospfd/ospf_abr.c       |    7 
 ospfd/ospf_asbr.c      |    3 
 ospfd/ospf_ase.c       |   12 
 ospfd/ospf_flood.c     |   34 -
 ospfd/ospf_flood.h     |    1 
 ospfd/ospf_interface.c |   20 
 ospfd/ospf_interface.h |    6 
 ospfd/ospf_ism.c       |   17 
 ospfd/ospf_lsa.c       |  351 ++++------
 ospfd/ospf_lsa.h       |   23 
 ospfd/ospf_lsdb.c      |   15 
 ospfd/ospf_network.c   |   14 
 ospfd/ospf_nsm.c       |   31 
 ospfd/ospf_nsm.h       |    2 
 ospfd/ospf_opaque.c    |    4 
 ospfd/ospf_packet.c    |  116 +--
 ospfd/ospf_packet.h    |    1 
 ospfd/ospf_vty.c       |   14 
 ospfd/ospfd.c          |   15 
 ospfd/ospfd.h          |    9 
 ripngd/ripng_debug.c   |   26 
 ripngd/ripng_debug.h   |    2 
 71 files changed, 2079 insertions(+), 1247 deletions(-)

New commits:
commit eac5702d06ee574e9e155c4e60c251e525dc4149
Author: Stephen Hemminger <[email protected]>
Date:   Thu Aug 5 10:26:25 2010 -0700

    bgpd: enable TCP corking
    
    * bgp_packet.c: (bgp_write) On BGP write, use TCP_CORK to provide hints to
      kernel about TCP buffering.  This will cause BGP packets to occur in
      bigger chunks (full size MTU), improving performance and getting rid of
      one of the problems reported in the UNH BGP conformance test.

commit 58192df7746231fbc82e248b5ddfc7cab95ab1e7
Author: Stephen Hemminger <[email protected]>
Date:   Thu Aug 5 10:26:24 2010 -0700

    lib: add TCP_CORK wrapper
    
    * 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.

commit 35398589cf1293956dfefb5096aa5284c72a696f
Author: Stephen Hemminger <[email protected]>
Date:   Thu Aug 5 10:26:23 2010 -0700

    bgpd: leave peer socket in non-blocking mode (mostly)
    
    * bgpd: Rather than toggling socket in/out of non-block mode, just leave it
      in nonblocking mode.
    
      One exception is in bgp_notify which only happens just before close.

commit 2c9fd7e07283b8904ef20030c9dadb032e999b12
Author: Michael Lambert <[email protected]>
Date:   Sat Jul 24 12:44:07 2010 -0400

    bgpd: "Intern" communities in route maps
    
    * bgp_community.[ch]: (community_lookup) New helper function to look
      up a community list in the hash table.
    
    * bgp_routemap.c: A new community structure was being allocated for
      every BGP update which matched a route map which set a community.
      This behavior led to rapid growth in the memory consumed by bgpd.
      Adding the communities to the hash table addresses the memory
      growth, but may introduce a problem in modifying or deleting the
      'set community' statement in the route map.

commit 95cbbd2ace2f88019a7a54e67b4b12aaeda177f7
Author: Michael Lambert <[email protected]>
Date:   Fri Jul 23 14:43:04 2010 -0400

    bgpd: New show commands for improved view and address family support
    
    Many show commands do not have support for multiple views and do not
    treat different address families uniformly.  The following changes add
    a number of commands with support for views and rationalized treatment
    of IPv4 v IPv6 and unicast v multicast (such as in JUNOS, IOS XR and
    more recent versions of IOS).
    
    * bgp_route.c: (bgp_show_community) Inserted a new second argument (the
      name of the view) and the code to look up that name in the BGP structure.
      The NULL argument in the call to bgp_show (indicating the default view)
      was replaced by the specified view.  The existing calls to
      bgp_show_community had a NULL second argument inserted to make clear
      that they refer to the default view.
    
      (top level) Added new functions via the DEFUN and/or ALIAS macros (and
      the associated command table entries) to add the commands
    
        show bgp ipv4 (unicast|multicast)
        show bgp ipv4 (unicast|multicast) A.B.C.D
        show bgp ipv4 (unicast|multicast) A.B.C.D/M
        show bgp ipv6 (unicast|multicast)
        show bgp ipv6 (unicast|multicast) X:X::X:X
        show bgp ipv6 (unicast|multicast) X:X::X:X/M
    
          These show either the full BGP table or the specified route or
          prefix for the given address family.
    
        show bgp view WORD (ipv4|ipv6) (unicast|multicast) community
        show bgp view WORD (ipv4|ipv6) (unicast|multicast) community \
                (AA:NN|local-AS|no-advertise|no-export){1,4}
    
          For the specified view and address family, these show entries
          matching any community or the specified communit(y)(ies).
    
        show bgp view WORD (ipv4|ipv6) (unicast|multicast) neighbors \
                (A.B.C.D|X:X::X:X) (advertised-routes|received-routes)
    
          For the specified view and address family, show the routes
          advertised to or received from the given BGP neighbor.
    
        show bgp [view WORD] ipv4 (unicast|multicast) \
                rsclient (A.B.C.D|X:X::X:X)
        show bgp [view WORD] ipv4 (unicast|multicast) \
                rsclient (A.B.C.D|X:X::X:X) A.B.C.D
        show bgp [view WORD] ipv4 (unicast|multicast) \
                rsclient (A.B.C.D|X:X::X:X) A.B.C.D/M
        show bgp [view WORD] ipv6 (unicast|multicast) \
                rsclient (A.B.C.D|X:X::X:X)
        show bgp [view WORD] ipv6 (unicast|multicast) \
                rsclient (A.B.C.D|X:X::X:X) X:X::X:X
        show bgp [view WORD] ipv6 (unicast|multicast) \
                rsclient (A.B.C.D|X:X::X:X) X:X::X:X/M
    
          For the specifed (optional) view and address family, show either
          the full BGP table or the specified route or prefix for the given
          route server client peer.
    
    * bgp_vty.c: (top level) Added new functions via the DEFUN and/or ALIAS
      macros (and the associated command table entries) to add the commands
    
        show bgp [view WORD] (ipv4|ipv6) (unicast|multicast) summary
        show bgp [view WORD] (ipv4|ipv6) (unicast|multicast) rsclient summary
    
          For the specified (optional) view and address family, display
          either the normal summary table for BGP peers, or the route server
          client table showing the import and export policies.

commit d8509631b47aba867c59eb463bb346d7ae5b91c7
Author: Paul Jakma <[email protected]>
Date:   Mon Mar 21 14:56:00 2011 +0000

    release: 0.99.18
    
    * configure.ac: Bump to 0.99.18

commit c8f3fe3063cb9ff193b13011cfbda3e605395340
Author: Paul Jakma <[email protected]>
Date:   Sun Dec 5 20:28:02 2010 +0000

    bgpd: Remove AS Path limit/TTL functionality
    
    * draft-ietf-idr-as-pathlimit doesn't seem to have gone anywhere, and its
      author does not think it will make progress in IDR. Remove all support
      introduced for it, but leave stubs for the commands to avoid breaking
      any configurations.
    
      Basically reverts cecab5e9725792e60a5e4b473e238a14cd85815d.

commit 0c46638122f10019a12ae9668aec91691cf2e017
Author: Paul Jakma <[email protected]>
Date:   Sun Dec 5 17:17:26 2010 +0000

    bgpd/security: CVE-2010-1674 Fix crash due to extended-community parser 
error
    
    * bgp_attr.c: (bgp_attr_ext_communities) Certain extended-community attrs
      can leave attr->flag indicating ext-community is present, even though no
      extended-community object has been attached to the attr structure.  Thus a
      null-pointer dereference can occur later.
      (bgp_attr_community) No bug fixed here, but tidy up flow so it has same
      form as previous.
    
      Problem and fix thanks to anonymous reporter.

commit 8f228de7b3f9d6f641c75b27ac7ac6e5862cf804
Author: Tom Goff <[email protected]>
Date:   Wed Nov 10 13:02:11 2010 -0800

    ospf6d: Extend the "[no] debug ospf6 route" vty commands
    
    * ospf6_route.c ([no_]debug_ospf6_route) Include memory as a debug
      option.  This allows ospf6 route memory debugging to be enabled or
      disabled interactively or from a config file.

commit e7a6d80d4fe70a546a33ffe063f182252237ccd8
Author: Tom Goff <[email protected]>
Date:   Wed Nov 10 13:03:02 2010 -0800

    ospf6d: Route locking (memory) cleanup
    
    * ospf6_route.c: (ospf6_route_best_next) Allows unlock route, even
      when there's no next route.  This is consistent with how
      ospf6_route_next() behaves.
    
    * ospf6_intra.c: (ospf6_intra_prefix_lsa_remove) Make sure the last
      route considered is always unlocked.  This is needed when the for
      loop terminates because ospf6_route_is_prefix() returns zero.

commit ae2254aa7f2eb7436734f497658f1f26f4bf37c7
Author: Tom Goff <[email protected]>
Date:   Wed Nov 10 13:01:41 2010 -0800

    ospf6d: Have ospf6d cleanup when it terminates normally
    
    A clean exit makes it easier to use memory debuggers.
    
    * ospf6_asbr.c: (ospf6_asbr_terminate) Add a function to do route map
      cleanup.
    * ospf6_lsa.c: (ospf6_lsa_terminate) Add a function to cleanup the lsa
      handler vector.
    * ospf6_main.c: (ospf6_exit) Add an function that causes ospf6d to
      gracefully exit.
    * ospf6_message.c: (ospf6_message_terminate) Add a function that frees
      the send and receive buffers.
    * ospf6_top.c: (ospf6_delete) Enable the ospf6_delete() function.
      Disable ospf6 before freeing everything.

commit fd795eb89cc421097f6580016ea9fbd3585d07bb
Author: Tom Goff <[email protected]>
Date:   Wed Nov 10 13:03:23 2010 -0800

    ospf6d: Remove obsolete code
    
    * ospf6_area.c: (ospf6_area_delete) Get rid of unused code that refers
        to a nonexistent function and structure member.

commit 1d19234e79c77a7d55194b513f2a77c6a691bc2c
Author: Tom Goff <[email protected]>
Date:   Wed Nov 10 13:02:38 2010 -0800

    ospf6d: Fix memory allocation issues in SPF
    
    * ospf6_area.c: Call ospf6_spf_table_finish() before deleting the spf
        table.  This ensures that the associated ospf6_vertex structures
        are also freed.
    * ospf6_spf.c: Only allocate a priority queue when a spf calculation
        is actually performed.  Also defer calling ospf6_spf_table_finish().

commit 7e69d993673597334b1e1b3d1072a4c064f293d5
Author: Tom Goff <[email protected]>
Date:   Wed Nov 10 13:01:17 2010 -0800

    lib: zlog should clean up its memory
    
    * log.c: (closezlog) Also free the dynamically allocated filename when
        a log is closed.

commit 4bd045d5dd28653af899c01d6f0c413d74677114
Author: Tom Goff <[email protected]>
Date:   Wed Nov 10 13:00:54 2010 -0800

    lib: Add a function to delete all interfaces
    
    if.c: (if_terminate) This adds a cleanup function that can be called
        when a daemon exits, similar to vty_terminate().

commit c8e7b8959051bf525183bdbff605e54b4b532e2c
Author: Stephen Hemminger <[email protected]>
Date:   Fri Aug 27 14:12:54 2010 -0700

    bgpd: use Jenkins hash for BGP transit, cluster and attr hashes
    
    * bgp_attr.c: I observed while doing some debugging that even for simple
      tests there was a lot of hash collisions for BGP attributes.  Switch to
      using Jhash rather than additive hashing.  Probably overkill, but the
      function is fast and available.
    
      ({attrhash,cluster,transit}_hask_key_make) convert to Jenkins hash,
      instead of additive hash.

commit 6392aa83c4f895ebbd23817c68d9b0da0de2e0f8
Author: Stephen Hemminger <[email protected]>
Date:   Fri Aug 27 14:11:14 2010 -0700

    lib: Better hashing of string values using Bernstein hash
    
    * 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

commit 25ff1e88bb5f1b0a16a364d7206db3ebdc5ecf52
Author: Barry Friedman <[email protected]>
Date:   Thu Feb 3 14:02:53 2011 -0800

    bgpd: Remove extra lock on interior table node
    
    If the radix tree creates an extra interior node in bgp_node_get(),
    it locks the interior node even though this node is not returned to
    the caller, so it may never be unlocked. The lock prevents this node
    from being deleted.
    
    * bgpd/bgp_table.c: (bgp_node_get) Remove lock on interior node which
      prevents proper node deletion

commit c099baf6f0a6509d70fb62a8d6341432abb50d91
Author: Wataru Tanitsu <[email protected]>
Date:   Fri Sep 10 09:47:56 2010 -0700

    bgpd: Fix display of unsigned attributes
    
    * bgp_route.c: (route_vty_out*) The local prefix, metric and weight values
      are all stored as uint32_t.  Change the format to %u so that large values
      are not displayed as negative integers.

commit 7badc26301c8063dc2c6f171c11f9af4f3d0df20
Author: Stephen Hemminger <[email protected]>
Date:   Thu Aug 5 10:26:31 2010 -0700

    bgpd: fix use of free memory by update_rsclient
    
    * bgp_route.c: (bgp_static_update_rsclient) BGP sometimes crashes when
      removing route server client because of use after free.
    
      The code to update rsclient created a local static copy of bgp attributes
      but neglected to handle the extra information pointer.  The extra
      information was getting freed by bgp_attr_unintern() and reused later when
      the copy was passed to bgp_attr_intern().
    
      The fix is to use the attr_dup function to create a copy of the extra
      information, then clean it up.

commit 368473f6120ff295253bcc0d774c6bd75d8cf98b
Author: Robert Bays <[email protected]>
Date:   Thu Aug 5 10:26:29 2010 -0700

    bgpd: unlock node on aggregate error
    
    * bgp_route.c: (bgp_aggregate_set) make sure to unlock BGP node if failure

commit f6269b4f7a2faddc44d03ff0a0e4d141562c67ee
Author: Robert Bays <[email protected]>
Date:   Thu Aug 5 10:26:28 2010 -0700

    bgpd: fix errors in aggregate address command
    
    * bgpd: (bgp_aggregate_{set,unset,delete}) This fixes locking and other
      issues with aggregate set/unset command

commit fac9c6b63aa74b34a22c89f005f7241d65a1765a
Author: Stephen Hemminger <[email protected]>
Date:   Thu Aug 5 10:26:30 2010 -0700

    bgpd: use XCALLOC to allocate bgpd damp array
    
    * bgpd: (bgp_damp_parameter_set) The BGP reuse_index is not initialized
      properly.  This would cause sporadic crash when disabling dampening.  Use
      XCALLOC correctly and the right size array is initialized and no memset is
      needed.

commit 6c88b44dcb26b60bb1f93e5c387aa102019ed849
Author: Chris Caputo <[email protected]>
Date:   Tue Jul 27 16:28:55 2010 +0000

    bgpd: fix bgp_node locking issues
    
    * 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.

commit cca85d27a59c31e1b20e4c4adc7d9bb57606e584
Author: Chris Hall <chris.hall.list.highwayman.com>
Date:   Fri Jul 23 11:27:11 2010 -0700

    lib: Fix accounting of memory
    
    * 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.

commit e6844aa5d23cf56dd1f31afc96e8145ab188953f
Author: Denis Ovsienko <[email protected]>
Date:   Fri Mar 18 20:20:53 2011 +0300

    doc: fix "ipv6 address" interface command syntax (#608)

commit 30b0017696dfe300b6ea630a6b6c91ea440d7828
Author: John Kemp <[email protected]>
Date:   Fri Mar 18 17:52:18 2011 +0300

    bgpd: improve "monotonic" uptime correction
    
    Older versions of Quagga/Zebra would output a value in MRT table
    dump files for "uptime" aka "ORIGINATED" that was a WALL clock
    value.  Given that uptime is now internally a bgp_clock MONOTONIC
    value, the output in the MRT files is showing up as monotonic.
    
    Note: time of MRT dump is still recorded correctly as a
    time() based value, so we haven't lost that value.
    
    Proposal is to correct the uptime output on the vty and in the
    MRT files to again display something more akin to WALL time.
    
    * bgp_dump.c: (bgp_dump_routes_func) add conditional correction
    * bgp_route.c: (route_vty_out_detail) make correction conditional, move
      variable declaration to beginning of the function

commit b016e9def4255a7406f5633c6edb820e13c9088e
Author: Stephen Hemminger <[email protected]>
Date:   Sun Mar 13 01:14:08 2011 +0300

    ripngd: copy debug statements fix from ripd
    
    Doesn't ripng needs same fix as ripd.

commit 4dd87df5af8a59174362e44f83df11f12457c8b4
Author: Paul Jakma <[email protected]>
Date:   Thu Apr 15 08:11:51 2010 +0100

    ospfd: Remove oi field from LSA, have network_lsa_refresh look up when 
needed
    
    * ospf_lsa.h: (struct ospf_lsa) remove oi pointer
    * ospf_lsa.c: (ospf_network_lsa_refresh) instead of keeping a pointer, just
      lookup the oi when it's needed. This decouples network LSA from oi 
lifetime
      and avoids having to invalidate pointers in LSAs when an oi changes,
      simplifying the code.

commit dfbd5176ea863e378999c03314dc42adfdd4e424
Author: Paul Jakma <[email protected]>
Date:   Wed Apr 14 10:32:12 2010 +0100

    ospfd: potential fix for router-id change assert on refresh cleanup patch
    
    * ospf_lsa.c: (various) unregister LSAs from refresher before flushing.

commit 02d942c9d4afabf04bd781f0e1e5e8aa36945df2
Author: Paul Jakma <[email protected]>
Date:   Sun Jan 24 23:36:20 2010 +0000

    ospfd: Fix maxage/flush to not try flood twice, remember maxages for longer
    
    2006-05-30 Paul Jakma <[email protected]>
    
        * (general) Fix confusion around MaxAge-ing and problem with
          high-latency networks. Analysis and suggested fixes by
          Phillip Spagnolo, in [quagga-dev 4132], on which this commit
          expands slightly.
        * ospf_flood.{c,h}: (ospf_lsa_flush) new function.
          Scope-general form of existing flush functions, essentially
          the dormant ospf_maxage_flood() but without the ambiguity of
          whether it is responsible for flooding.
        * ospf_lsa.c: (ospf_lsa_maxage) Role minimised to simply setup
          LSA on the Maxage list and schedule removal - no more.
          ospf_lsa_flush* being the primary way to kick-off flushes
          of LSAs.
          Don't hardcode the remover-timer value, which was too
          short for very high-latency networks.
          (ospf_maxage_lsa_remover) Just do what needs to be done to
          remove maxage LSAs from the maxage list, remove the call
          to ospf_flood_through().
          Don't hardcode remove-timer value.
          (ospf_lsa_{install,flush_schedule}) ospf_lsa_flush is the correct
          entrypoint to flushing maxaged LSAs.
          (lsa_header_set) Use a define for the initial age, useful for
          testing.
        * ospf_opaque.c: (ospf_opaque_lsa_refresh) ditto.
          (ospf_opaque_lsa_flush_schedule) ditto.
        * ospfd.h: ({struct ospf,ospf_new}) Add maxage_delay parameter,
          interval to wait before running the maxage_remover. Supply a
          suitable default.
          Add a define for OSPF_LSA_INITIAL_AGE, see lsa_header_set().

commit c363d3861b5384a31465a72ddc3b0f6ff007a95a
Author: Paul Jakma <[email protected]>
Date:   Sun Jan 24 22:42:13 2010 +0000

    ospfd: Unify router and network LSA refresh logic with general refresher
    
    * (general) Get rid of the router and network LSA specific refresh timers
      and make the general refresher do this instead. Get rid of the twiddling
      of timers for router/network LSA that was spread across the code.
    
      This lays the foundations for future, general LSA refresh improvements,
      such as making sequence rollover work, and having generic LSA delays.
    
    * ospfd.h: (struct ospf) Bye bye to the router-lsa update timer thread
      pointer.
      (struct ospf_area) and to the router-lsa refresh timer.
    * ospf_interface.h: Remove the network_lsa_self timer thread pointer
    * ospf_lsa.h: (struct ospf_lsa) oi field should always be there, for benefit
      of type-2/network LSA processing.
      (ospf_{router,network}_lsa_{update_timer,timer_add}) no timers for these
      more
      (ospf_{router,network}_lsa_update) more generic functions to indicate 
that some
      router/network LSAs need updating
      (ospf_router_lsa_update_area) update router lsa in a particular area 
alone.
      (ospf_{summary,summary_asbr,network}_lsa_refresh) replaced by the general
      ospf_lsa_refresh function.
      (ospf_lsa_refresh) general LSA refresh function

commit 7eb5b47e54169ac0da40ed1a6760db5d5f915a4d
Author: Paul Jakma <[email protected]>
Date:   Tue Oct 13 16:13:13 2009 +0100

    ospfd: Remember network LSA sequence numbers across up/downs of an interface
    
    * ospf_interface.h: (struct ospf_if_params) add field for saved network LSA
      seqnum
    * ospf_interfa.c: (ospf_new_if_params) init network_lsa_seqnum field to
      initial seqnum - doesnt matter though.
    * ospf_lsa.c: (ospf_network_lsa_new) check for any saved sequence number,
      and use if it exists.  Save the result back. This should help avoid 
needless
      round of LSUpdate/LSRequests when a neighbour has to tell the originator
      "uhm, i have something newer than that already".
    * ospf_vty.c: (show_ip_ospf_interface_sub) Show the saved network LSA seqnum

commit aa276fd783f5cdbeefe22bf54109fe523a465e07
Author: Paul Jakma <[email protected]>
Date:   Fri Jan 8 17:11:15 2010 +0000

    ospfd: Prioritise hellos for sending by queueing to head of output buffer
    
    * It's possible for the packet output buffer to be filled up with a long
      series of non-Hello packets in between Hellos packets, such that the
      router's neighbours don't receive the Hello packet in time, even though
      the hello-timer ran at about the right time. Fix this by prioritising
      Hello packets, letting them skip the queue and go ahead of any packets
      already on the queue.
    
      This problem can occur when there are lots of LSAs and slow links.
    
    * ospf_packet.h: (ospf_hello_send_sub) not used outside of ospf_packet.c
    * ospf_packet.c: (ospf_fifo_push_head) add packet to head of fifo (so its
      no longer really a fifo, but hey)
      (ospf_packet_add_top) add packet to top of the packet output queue.
      (ospf_hello_send_sub) Put Hello's at the top of the packet output queue.
      make it take in_addr_t parameter, so that this
      ospf_hello_send can re-use this code too.
      (ospf_hello_send) consolidate code by using ospf_hello_send_sub
      (ospf_poll_send,ospf_hello_reply_timer) adjust for ospf_hello_send_sub.

commit 57c5c6526df82970ca24293798d278862cf55106
Author: Paul Jakma <[email protected]>
Date:   Thu Jan 7 06:12:53 2010 +0000

    ospfd: Reset neighbour inactivity timer for any packet arrival
    
    * The hello protocol monitors connectivity in 2 different ways:
    
      a) local -> remote
      b) remote -> local
    
      Connectivity is required in both directions (2-way) for adjacencies to
      form.
    
      The first requires a round-trip to detect, and is done by advertising
      which other hosts a router knows about in its hello messages.  This allows
      a host to detect which other routers are and are not receiving its
      message.  If a remote neighbour delists the local router, then the local
      router raises a "1-Way Received" event.
    
      The latter is straight-forward, and is detected by setting a timer for the
      neighbour. If another Hello packet is not received within this time then
      the neighbour is dead, and a separate "Inactive" event is raised.
    
      These are 2 different and relatively independent measures.
    
      Knowing that we can optimise the 2nd, remote->local measure and reset
      the timer when /any/ packet arrives from that neighbour. For any packet
      is as good as a Hello packet. This can help in marginal situations, where
      the number of protocol messages that must be sent sometimes can exceed
      the capacity of the network to transmit the messages within the configured
      dead-time. I.e. an OSPF network with lots of LSAs, slow links and/or
      slow hosts (e.g. O(10k) LSAs, O(100kbit) links, embedded CPUs, and O(10s)
      dead-times).
    
      This optimisation allows an OSPF network to run closer to this margin,
      and/or allows networks to perhaps better cope with rare periods of
      exceptional load, where otherwise they would not.
    
      It's fully compatible with plain OSPF implementations and doesn't
      prejudice dead-neighbour detection.
    
    * ospf_nsm.h: Rename HelloReceived event to PacketReceived.
    * ospf_nsm.c: (nsm_hello_received) -> nsm_packet_received
    * ospf_packet.c: Schedule PacketReceived whenever a valid message is
      received.

commit 94b6bfd28357dfa5a4f478b7393522816976c0b0
Author: Paul Jakma <[email protected]>
Date:   Sat Jan 9 14:11:02 2010 +0000

    ospfd: the maxage_lsa_remover should check whether it needs to yield the cpu

commit e8f2226195e86f90f2409549ad8a8e5c8d64d23b
Author: Paul Jakma <[email protected]>
Date:   Tue Apr 13 22:43:34 2010 +0100

    ospfd: Fix various route_unlock discrepencies
    
    * ospf_ase.c: (ospf_ase_calculate_route) Fix compiler warning about eval
      needing brackets.
      (various) add defensive asserts.
    * ospf_lsdb.c: (ospf_lsdb_add) add missing node unlock if same lsa already
      was indexed.
      (ospf_lsdb_delete) check it's actually the same as specified lsa before
      deleting
      (ospf_lsdb_lookup_by_id_next) fix another corner case - no result =>
      don't go on.

commit 6634974d68b8cc78cdde1104636fe97d7e310845
Author: Paul Jakma <[email protected]>
Date:   Tue Apr 13 22:33:54 2010 +0100

    ospfd: fix lsa_refresh_walker unlock before use bug
    
    * ospf_lsa.c: (ospf_lsa_refresh_walker) fix an "unlock before use" bug
      (various) add asserts for lsa refcounting.

commit 8a81ee114a122966cb396d53dd8fcbda2eb619f5
Author: Paul Jakma <[email protected]>
Date:   Sun Jan 24 21:34:54 2010 +0000

    ospfd: interface code should leave  network_lsa_self alone
    
    * ospf_interface.c: (ospf_if_{new,cleanup}) don't touch the 
network_lsa_self,
      ISM and NSM take care of cleaning it up if needs be + we want to keep
      network_lsa_self around when possible for the the seqnum.
    
      This shouldn't really make much difference though, particularly as we have
      a separate sequence number memory mechanism.

commit 2c9f8e36c4de4bb1412364b79c3a44881208266e
Author: Paul Jakma <[email protected]>
Date:   Mon Jan 11 16:22:12 2010 +0000

    ospfd: OSPF_MIN_LS_ARRIVAL compare should be >= to match ospf_flood
    
    * ospf_packet.c: (ospf_ls_upd) the corresponding test on the arrival side
      in (ospf_flood) is <, so this should be >=, not >, purely for consistency.
    
      There is no practical effect here though.

commit cfd670f3af25dfc34d5c06e30d21160e3dfb6421
Author: Paul Jakma <[email protected]>
Date:   Thu Apr 15 11:39:05 2010 +0100

    ospfd: ospf_if_free can leave dangling references on ISM events - cancel 
them
    
    * ospf_interface.c: (ospf_if_free) events with dangling pointers left
      scheduled can be seriously bad for ospfd's health. Cancel the event.

commit ec70497bc5eac732139c3d94987ecb6691557795
Author: Paul Jakma <[email protected]>
Date:   Mon Dec 6 12:21:52 2010 +0000

    ospfd: Lower level of some common messages from info to debug
    
    * ospf_{ism,network}.c: Certain oft-repeated but trivial messages should be
      debug log level, not info, to avoid spamming 'terminal monitor'

commit f8416810aad4cba6f622c6b3f9352abdd54cd01e
Author: Paul Jakma <[email protected]>
Date:   Tue Apr 13 22:42:33 2010 +0100

    lib: Fix bug in prefix trie lookup
    
    * 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.

commit d358344759d85a965bbd767f4a994695f99b842e
Author: Paul Jakma <[email protected]>
Date:   Sun Jan 24 21:41:02 2010 +0000

    lib: prefix.c nano-optimisation
    
    * lib/prefix.c: (prefix_match) nano-optimisation, let it return early
      without copying pointers.

commit 3322055b392f20f4b97122a8034e479719e4b86d
Author: Paul Jakma <[email protected]>
Date:   Mon Jan 11 13:55:01 2010 +0000

    lib: Make workqueue more conservative about ramping up
    
    * workqueue.c: (work_queue_run) Err more on the side of keeping granularity
      down, by being more conservative about increasing it.
      Also, fix mispelling.

commit e276eb82820eb92d221f183496e28da4ffe0fe68
Author: Paul Jakma <[email protected]>
Date:   Sat Jan 9 16:15:00 2010 +0000

    lib: Add a command to clear the thread CPU history data
    
    * (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

commit 2613abe64fe48761d798942af8dc0ec90c804b22
Author: Paul Jakma <[email protected]>
Date:   Mon Jan 11 16:33:07 2010 +0000

    lib: Thread scheduler should be fair and not let events starve I/O and 
timers
    
    * 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

commit 8526100eebf9c56ff6fac2b80938b232bb687946
Author: Paul Jakma <[email protected]>
Date:   Mon Jan 11 16:30:45 2010 +0000

    lib: thread history funcname shouldn't be constant, it's freed
    
    * 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).

commit 838bbde0426e562132d22fb11932ea413aebf928
Author: Paul Jakma <[email protected]>
Date:   Fri Jan 8 14:05:32 2010 +0000

    bgpd: Simplify process queue init
    
    * bgp_route.c: (bgp_process_queue_init) rsclient wasn't getting all the
      same things initialised as the main queue. Simplify to make it more 
robust.

http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=eac5702d06ee574e9e155c4e60c251e525dc4149
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=58192df7746231fbc82e248b5ddfc7cab95ab1e7
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=35398589cf1293956dfefb5096aa5284c72a696f
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=2c9fd7e07283b8904ef20030c9dadb032e999b12
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=95cbbd2ace2f88019a7a54e67b4b12aaeda177f7
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=d8509631b47aba867c59eb463bb346d7ae5b91c7
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=c8f3fe3063cb9ff193b13011cfbda3e605395340
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=0c46638122f10019a12ae9668aec91691cf2e017
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=8f228de7b3f9d6f641c75b27ac7ac6e5862cf804
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=e7a6d80d4fe70a546a33ffe063f182252237ccd8
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=ae2254aa7f2eb7436734f497658f1f26f4bf37c7
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=fd795eb89cc421097f6580016ea9fbd3585d07bb
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=1d19234e79c77a7d55194b513f2a77c6a691bc2c
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=7e69d993673597334b1e1b3d1072a4c064f293d5
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=4bd045d5dd28653af899c01d6f0c413d74677114
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=c8e7b8959051bf525183bdbff605e54b4b532e2c
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=6392aa83c4f895ebbd23817c68d9b0da0de2e0f8
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=25ff1e88bb5f1b0a16a364d7206db3ebdc5ecf52
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=c099baf6f0a6509d70fb62a8d6341432abb50d91
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=7badc26301c8063dc2c6f171c11f9af4f3d0df20
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=368473f6120ff295253bcc0d774c6bd75d8cf98b
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=f6269b4f7a2faddc44d03ff0a0e4d141562c67ee
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=fac9c6b63aa74b34a22c89f005f7241d65a1765a
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=6c88b44dcb26b60bb1f93e5c387aa102019ed849
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=cca85d27a59c31e1b20e4c4adc7d9bb57606e584
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=e6844aa5d23cf56dd1f31afc96e8145ab188953f
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=30b0017696dfe300b6ea630a6b6c91ea440d7828
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=b016e9def4255a7406f5633c6edb820e13c9088e
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=4dd87df5af8a59174362e44f83df11f12457c8b4
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=dfbd5176ea863e378999c03314dc42adfdd4e424
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=02d942c9d4afabf04bd781f0e1e5e8aa36945df2
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=c363d3861b5384a31465a72ddc3b0f6ff007a95a
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=7eb5b47e54169ac0da40ed1a6760db5d5f915a4d
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=aa276fd783f5cdbeefe22bf54109fe523a465e07
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=57c5c6526df82970ca24293798d278862cf55106
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=94b6bfd28357dfa5a4f478b7393522816976c0b0
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=e8f2226195e86f90f2409549ad8a8e5c8d64d23b
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=6634974d68b8cc78cdde1104636fe97d7e310845
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=8a81ee114a122966cb396d53dd8fcbda2eb619f5
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=2c9f8e36c4de4bb1412364b79c3a44881208266e
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=cfd670f3af25dfc34d5c06e30d21160e3dfb6421
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=ec70497bc5eac732139c3d94987ecb6691557795
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=f8416810aad4cba6f622c6b3f9352abdd54cd01e
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=d358344759d85a965bbd767f4a994695f99b842e
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=3322055b392f20f4b97122a8034e479719e4b86d
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=e276eb82820eb92d221f183496e28da4ffe0fe68
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=2613abe64fe48761d798942af8dc0ec90c804b22
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=8526100eebf9c56ff6fac2b80938b232bb687946
http://suva.vyatta.com/git/?p=vyatta-quagga.git;a=commitdiff;h=838bbde0426e562132d22fb11932ea413aebf928
_______________________________________________
svn mailing list
[email protected]
http://mailman.vyatta.com/mailman/listinfo/svn

Reply via email to