commit 998274cd7c559bd04d7b7f6e615ad120af915d86
Author: Paul Jakma <paul@quagga.net>
Date:   Tue Jul 21 15:21:20 2009 +0100

    [build] Bump release to 0.99.14

commit 638b70ba9893705bb3268aa00c25b8cb0e060b32
Author: Vasilis Tsiligiannis <b_tsiligiannis@silverton.gr>
Date:   Mon Jul 20 01:25:16 2009 +0300

    [bgp] Fix nexthop reachability check on confederations
    
    * bgp_route.c: (bgp_update_main) Nexthop reachability should be checked for
      confederations too in case a prefix is received from more than one
      confederation peers.

commit a294365797da8b72e51507cbf92dbc6940e5103b
Author: Paul Jakma <paul@quagga.net>
Date:   Tue Jul 21 14:02:04 2009 +0100

    [bgpd] fix typo made by paul in previous commit

commit e8eb000e15e2bbe63467d7c056f2b21b72ba7bd6
Author: Timo Teräs <timo.teras@iki.fi>
Date:   Tue Feb 17 12:14:23 2009 +0200

    [bgpd] Avoid zombie accepted peer entries
    
    Currently, when accepting the connection, it can be left as zombie, when the
    peer just initiates a connection, but never sends data (and the TCP
    connection end packets are lost).  This happens because for accepted
    connections a temporary new peer entry is created until OPEN message is
    exchanged, and this temporary peer entry does not get the hold time
    parameter set at all.
    
    * bgp_network.c: (bgp_accept) Set hold time and keepalive values for ACCEPT
      peers.

commit e7cc3b383e5e9190aa7784554c605a3a661ebe2b
Author: Nick Hilliard <nick@inex.ie>
Date:   Tue Mar 17 22:14:25 2009 +0000

    [bgpd] Small buffer overrun in bgp_clear_node_queue_init
    
    * bgp_route.c: (bgp_clear_node_queue_init) fix buffer
      overrun.

commit 67b9467f6cad5097a3e4c6e49348be4d6c17a5bb
Author: Chris Caputo <ccaputo@alt.net>
Date:   Sat Jul 18 04:02:26 2009 +0000

    [zebra] Silence noisy process_subq
    
    zebra_rib.c: process_subq(): #ifdef out debug code.

commit 228da42898c4f7bd72d9c1ee4135108e8d40d860
Author: Chris Caputo <ccaputo@alt.net>
Date:   Sat Jul 18 05:44:03 2009 +0000

    [bgpd] Stability fixes including bugs 397, 492
    
    I've spent the last several weeks working on stability fixes to bgpd.
    These patches fix all of the numerous crashes, assertion failures, memory
    leaks and memory stomping I could find.  Valgrind was used extensively.
    
    Added new function bgp_exit() to help catch problems.  If "debug bgp" is
    configured and bgpd exits with status of 0, statistics on remaining
    lib/memory.c allocations are printed to stderr.  It is my hope that other
    developers will use this to stay on top of memory issues.
    
    Example questionable exit:
    
      bgpd: memstats: Current memory utilization in module LIB:
      bgpd: memstats:  Link List                     :          6
      bgpd: memstats:  Link Node                     :          5
      bgpd: memstats:  Hash                          :          8
      bgpd: memstats:  Hash Bucket                   :          2
      bgpd: memstats:  Hash Index                    :          8
      bgpd: memstats:  Work queue                    :          3
      bgpd: memstats:  Work queue item               :          2
      bgpd: memstats:  Work queue name string        :          3
      bgpd: memstats: Current memory utilization in module BGP:
      bgpd: memstats:  BGP instance                  :          1
      bgpd: memstats:  BGP peer                      :          1
      bgpd: memstats:  BGP peer hostname             :          1
      bgpd: memstats:  BGP attribute                 :          1
      bgpd: memstats:  BGP extra attributes          :          1
      bgpd: memstats:  BGP aspath                    :          1
      bgpd: memstats:  BGP aspath str                :          1
      bgpd: memstats:  BGP table                     :         24
      bgpd: memstats:  BGP node                      :          1
      bgpd: memstats:  BGP route                     :          1
      bgpd: memstats:  BGP synchronise               :          8
      bgpd: memstats:  BGP Process queue             :          1
      bgpd: memstats:  BGP node clear queue          :          1
      bgpd: memstats: NOTE: If configuration exists, utilization may be expected.
    
    Example clean exit:
    
      bgpd: memstats: No remaining tracked memory utilization.
    
    This patch fixes bug #397: "Invalid free in bgp_announce_check()".
    
    This patch fixes bug #492: "SIGBUS in bgpd/bgp_route.c:
    bgp_clear_route_node()".
    
    My apologies for not separating out these changes into individual patches.
    The complexity of doing so boggled what is left of my brain.  I hope this
    is all still useful to the community.
    
    This code has been production tested, in non-route-server-client mode, on
    a linux 32-bit box and a 64-bit box.
    
    Release/reset functions, used by bgp_exit(), added to:
    
      bgpd/bgp_attr.c,h
      bgpd/bgp_community.c,h
      bgpd/bgp_dump.c,h
      bgpd/bgp_ecommunity.c,h
      bgpd/bgp_filter.c,h
      bgpd/bgp_nexthop.c,h
      bgpd/bgp_route.c,h
      lib/routemap.c,h
    
    File by file analysis:
    
    * bgpd/bgp_aspath.c: Prevent re-use of ashash after it is released.
    
    * bgpd/bgp_attr.c: #if removed uncalled cluster_dup().
    
    * bgpd/bgp_clist.c,h: Allow community_list_terminate() to be called from
      bgp_exit().
    
    * bgpd/bgp_filter.c: Fix aslist->name use without allocation check, and
      also fix memory leak.
    
    * bgpd/bgp_main.c: Created bgp_exit() exit routine.  This function frees
      allocations made as part of bgpd initialization and, to some extent,
      configuration.  If "debug bgp" is configured, memory stats are printed
      as described above.
    
    * bgpd/bgp_nexthop.c: zclient_new() already allocates stream for
      ibuf/obuf, so bgp_scan_init() shouldn't do it too.  Also, made it so
      zlookup is global so bgp_exit() can use it.
    
    * bgpd/bgp_packet.c: bgp_capability_msg_parse() call to bgp_clear_route()
      adjusted to use new BGP_CLEAR_ROUTE_NORMAL flag.
    
    * bgpd/bgp_route.h: Correct reference counter "lock" to be signed.
      bgp_clear_route() now accepts a bgp_clear_route_type of either
      BGP_CLEAR_ROUTE_NORMAL or BGP_CLEAR_ROUTE_MY_RSCLIENT.
    
    * bgpd/bgp_route.c:
      - bgp_process_rsclient(): attr was being zero'ed and then
        bgp_attr_extra_free() was being called with it, even though it was
        never filled with valid data.
    
      - bgp_process_rsclient(): Make sure rsclient->group is not NULL before
        use.
    
      - bgp_processq_del(): Add call to bgp_table_unlock().
    
      - bgp_process(): Add call to bgp_table_lock().
    
      - bgp_update_rsclient(): memset clearing of new_attr not needed since
        declarationw with "= { 0 }" does it.  memset was already commented
        out.
    
      - bgp_update_rsclient(): Fix screwed up misleading indentation.
    
      - bgp_withdraw_rsclient(): Fix screwed up misleading indentation.
    
      - bgp_clear_route_node(): Support BGP_CLEAR_ROUTE_MY_RSCLIENT.
    
      - bgp_clear_node_queue_del(): Add call to bgp_table_unlock() and also
        free struct bgp_clear_node_queue used for work item.
    
      - bgp_clear_node_complete(): Do peer_unlock() after BGP_EVENT_ADD() in
        case peer is released by peer_unlock() call.
    
      - bgp_clear_route_table(): Support BGP_CLEAR_ROUTE_MY_RSCLIENT.  Use
        struct bgp_clear_node_queue to supply data to worker.  Add call to
        bgp_table_lock().
    
      - bgp_clear_route(): Add support for BGP_CLEAR_ROUTE_NORMAL or
        BGP_CLEAR_ROUTE_MY_RSCLIENT.
    
      - bgp_clear_route_all(): Use BGP_CLEAR_ROUTE_NORMAL.
    
      Bug 397 fixes:
    
        - bgp_default_originate()
        - bgp_announce_table()
    
    * bgpd/bgp_table.h:
      - struct bgp_table: Added reference count.  Changed type of owner to be
        "struct peer *" rather than "void *".
    
      - struct bgp_node: Correct reference counter "lock" to be signed.
    
    * bgpd/bgp_table.c:
      - Added bgp_table reference counting.
    
      - bgp_table_free(): Fixed cleanup code.  Call peer_unlock() on owner if
        set.
    
      - bgp_unlock_node(): Added assertion.
    
      - bgp_node_get(): Added call to bgp_lock_node() to code path that it was
        missing from.
    
    * bgpd/bgp_vty.c:
      - peer_rsclient_set_vty(): Call peer_lock() as part of peer assignment
        to owner.  Handle failure gracefully.
    
      - peer_rsclient_unset_vty(): Add call to bgp_clear_route() with
        BGP_CLEAR_ROUTE_MY_RSCLIENT purpose.
    
    * bgpd/bgp_zebra.c: Made it so zclient is global so bgp_exit() can use it.
    
    * bgpd/bgpd.c:
      - peer_lock(): Allow to be called when status is "Deleted".
    
      - peer_deactivate(): Supply BGP_CLEAR_ROUTE_NORMAL purpose to
        bgp_clear_route() call.
    
      - peer_delete(): Common variable listnode pn.  Fix bug in which rsclient
        was only dealt with if not part of a peer group.  Call
        bgp_clear_route() for rsclient, if appropriate, and do so with
        BGP_CLEAR_ROUTE_MY_RSCLIENT purpose.
    
      - peer_group_get(): Use XSTRDUP() instead of strdup() for conf->host.
    
      - peer_group_bind(): Call bgp_clear_route() for rsclient, and do so with
        BGP_CLEAR_ROUTE_MY_RSCLIENT purpose.
    
      - bgp_create(): Use XSTRDUP() instead of strdup() for peer_self->host.
    
      - bgp_delete(): Delete peers before groups, rather than after.  And then
        rather than deleting rsclients, verify that there are none at this
        point.
    
      - bgp_unlock(): Add assertion.
    
      - bgp_free(): Call bgp_table_finish() rather than doing XFREE() itself.
    
    * lib/command.c,h: Compiler warning fixes.  Add cmd_terminate().  Fixed
      massive leak in install_element() in which cmd_make_descvec() was being
      called more than once for the same cmd->strvec/string/doc.
    
    * lib/log.c: Make closezlog() check fp before calling fclose().
    
    * lib/memory.c: Catch when alloc count goes negative by using signed
      counts.  Correct #endif comment.  Add log_memstats_stderr().
    
    * lib/memory.h: Add log_memstats_stderr().
    
    * lib/thread.c: thread->funcname was being accessed in thread_call() after
      it had been freed.  Rearranged things so that thread_call() frees
      funcname.  Also made it so thread_master_free() cleans up cpu_record.
    
    * lib/vty.c,h: Use global command_cr.  Add vty_terminate().
    
    * lib/zclient.c,h: Re-enable zclient_free().

commit 54a15182e05ca757db3bb90a4135e9f8fd3c84f2
Author: Chris Caputo <ccaputo@alt.net>
Date:   Sat Jul 18 05:42:34 2009 +0000

    [bgpd] Fix compiler warnings related to MD5
    
    This patch fixes:
    
    bgp_network.c: In function 'bgp_md5_set':
    bgp_network.c:107: warning: cast from pointer to integer of different size
    bgp_network.c: In function 'bgp_socket':
    bgp_network.c:447: warning: cast to pointer from integer of different size

commit 62c9f504bdd4b09df6cf677e96367f3b31ef9dea
Author: Paul Jakma <paul@quagga.net>
Date:   Sun Jul 19 17:33:21 2009 +0100

    [build] fix default CFLAGS and squish warning
    
    * configure.ac: Move down the AC_SYS_LARGEFILE test - it was setting CFLAGS
      and so disabling the default CFLAGS setting section.
      Squish warning by adding AC_CONFIG_MACRO_DIR on the reccommendation of
      autoreconf.

commit fd35b948dbb35674cd9ded431f94b59aeced40cc
Author: Paul Jakma <paul@quagga.net>
Date:   Thu Jul 16 19:27:32 2009 +0100

    [bgpd] Bug #533: Fix crash with copy/pasted commands, inc 'no bgp ...'
    
    * bgpd.c: Removal of (struct bgp *) from the master list was being left to
      bgp_free time.  This meant there was a window of time between bgp_delete
      and refcounts hitting 0 (e.g.  routes to be processed) where bgp_lookup's
      could return a deleted (struct bgp *).
    
      (bgp_delete) This is the logical place where a (struct bgp *) should lose
      its visibility, so move the deletion from the bgp-master list to here,
      from bgp_free.
    
      Many thanks to Fritz Reichmann for his thorough debugging of the problem
      and testing of fixes and Chris Caputo for his further analysis.

commit 3fa3f957e70f594cc2c1cac03644ddf48554c178
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Sat Jul 11 21:27:51 2009 -0700

    [lib] Fix IPv6 normalisation
    
    * lib/sockunion.c: (sockunion_normalise_mapped) The code to normalize
      address was not copying port value - probably reason why IPV4 in IPV6
      never worked right.

commit 9b4ef258a9d9c5f1052afe0e19ebaef9f6740fa2
Author: Tom Henderson <tomh@tomh.org>
Date:   Thu Jul 16 17:20:37 2009 +0100

    [ospf6d] Fix regression in monotonic time patch - LSA max-aging broke
    
    * ospf6_lsa.c: (ospf6_lsa_premature_aging) set age to MAX_AGE - don't
      rely on 0 magically meaning same.
      (ospf6_lsa_age_current) handle MAXAGE.

commit 41b2373cece77f0cc9a06fba076c99a7be653593
Author: Paul Jakma <paul@quagga.net>
Date:   Tue Jun 30 16:12:49 2009 +0100

    [lib/cleanup] Use a typedef for the thread type
    
    * lib/thread.{c,h}: As per subject. This will avoid head-scratching for next
      person who adds a thread-type and gets strange breakage.

commit bd2462425205a681d75e04c94a94bf4cea5da58b
Author: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
Date:   Mon Jan 5 17:44:46 2009 +0100

    [ospfd] Do not use stale Network/Router LSAs
    
    Should a self originated Network/Router LSA with higher
    LS seq. nr. be received we should flood and install it in
    the LSDB but we cannot use it for our internal calculations
    as it is stale.
    Reorginate an new LSA to replace the stale one as soon
    as possible.

commit 650f76c2e1b0b12e1c46fdd3be22c5f505245d83
Author: Paul Jakma <paul@quagga.net>
Date:   Thu Jun 25 18:06:31 2009 +0100

    [bgpd] Log a debug/update warning if filters are configured but don't exist
    
    * bgp_route.c: (bgp_{input,output}_filter) Log a debug warning if a route is
      received or sent and a filter name is configured for a prefix, as or
      distribute list but none is found - guaranteed configuration mistake.

commit 439c52f19007badffc6707673121f5a76784e728
Author: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
Date:   Mon Dec 1 16:25:06 2008 +0100

    Add test for Internet checksum.
    
    Add 2 impl. of the Internet Checksum. One new optimized nad
    one form RFC 1071. Turns out that the current Quagga in_cksum()
    is buggy. On Big Endian routers it miscalculates odd sized buffers.

commit 77a1c4e05ca5a7d7bf07456758f7c934ee867884
Author: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
Date:   Sun Feb 1 11:12:11 2009 +0100

    [ospfd] compare ifIndex too when matching paths
    
    ospf_path_lookup(), ospf_route_match_same() and
    ospf_ase_route_match_same() needs to
    compare if the interface matches too.

commit cbcd9bfc503f08b99f5360b1aae3a5362d25a665
Author: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
Date:   Mon Feb 16 09:40:39 2009 +0100

    [doc] Add "--disable-doc" to configure
    
    Configure option "--disable-doc" will prevent building
    the documents under doc. Saves build time and the need to
    have document building tools installed. Useful when your build
    machine is different from your development machine.

commit 3d8617b853af511ca5f019b2f51c7902e2689212
Author: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
Date:   Wed Feb 4 15:05:19 2009 +0100

    [ospfd] external LSA route_unlock_node() fixes
    
    A few route_unlock_node() calls was missing.

commit f65431380428c3cb8eb5c0a0ac93debc30717a3f
Author: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
Date:   Tue Nov 4 13:37:29 2008 +0000

    [ospfd] Fix a few LSA performance "bugs"
    
    ospf_lsa_install() will calculate LSA checksum so no
    need to do it before calling ospf_lsa_install().
    
    Set the OSPF_LSA_SELF_CHECKED flag on own LSA's to
    save ospf_lsa_is_self_originated() some work.
    
    Do not memset() memory that is about to overwritten
    with memcpy().

commit c3a5606302777cdd33d4025fc30bed723fc84d79
Author: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
Date:   Wed Jun 24 19:15:36 2009 +0200

    zebra: Static route does not reach kernel.
    
    A static route like below: ip route 172.16.1.0/30 192.168.101.162 11
    does not move properly to a new interface when the
    interface used goes down. Zebra reports that it have
    moved but kernel isn't informed so the route is lost.
    
    * zebra_rib.c: (nexthop_active_update) if ifindex has changed, then the
      route should be considered to have changed.
    
    Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>

commit 3f4ab7f9e9ffaee7c448744f45d6e5e2176cce89
Author: Tomasz Pala <gotar@pld-linux.org>
Date:   Wed Jun 24 22:23:11 2009 +0100

    [vtysh] Save vtysh history to a file
    
    vtsh_main.c: save 1000 last lines of history to $HOME/.history_quagga (the
    file must be created by hand first, this is intended behaviour)

commit 80abd9fe37d8aa5d929686f3d4a717b72bfacb3c
Author: Tomasz Pala <gotar@pld-linux.org>
Date:   Wed Jun 24 22:09:46 2009 +0100

    [configure] Allow for large-file support, e.g. for log files >2GB

commit 3fc1eca92a7022f1c5b567505a7d86aab0d3cbd4
Author: Tomasz Pala <gotar@pld-linux.org>
Date:   Wed Jun 24 21:48:22 2009 +0100

    [cleanup] Add log.h includes

commit 2a71e9ce89c6f76c099dea67dddbe8da454d9de7
Author: Tomasz Pala <gotar@pld-linux.org>
Date:   Wed Jun 24 21:36:50 2009 +0100

    [bgpd] Add 'show ip bgp view WORD neighbors IP (advertised|received)-routes'
    
    * bgp_route.c: Was missing these commands.

commit c9035ccd13078b6a5d53566979a66c1ac892b47a
Author: Dmitry Tejblum <tejblum@yandex-team.ru>
Date:   Wed Jun 24 20:14:30 2009 +0400

    [ospfd] discount IP header size from a new LSA pkt

commit 014b670e02cc1f38e8e4e786269fc1787412f9b7
Author: Denis Ovsienko <pilot@etcnet.org>
Date:   Tue Jun 23 21:10:45 2009 +0400

    [bgpd] review 32-bit AS-path hotfix for 0.99.12
    
    The patch by Chris Caputo, which was used to prepare 0.99.12
    release, consists of three parts:
    
    1. memory allocation fix itself
    2. fix for warnings about constant variables
    3. fix for printf format specs (%d was used instead of %u)
    
    It was confirmed later, that:
    a. a much simpler bugfix was available for memory allocation
    b. committed version of the bugfix wasn't optimal CPU-wise
    
    At this point I consider reasonable to revert the allocation
    portion of that patch and to replace it with the shorter
    version, which is:
    
    -#define ASN_STR_LEN (5 + 1)
    +#define ASN_STR_LEN (10 + 1)
    
    Other two parts of Mr. Caputo's patch remain intact.

commit d13c3b4fcf802f904ef47ad82fdc9763fc704fdf
Author: Mathieu Goessens <gebura@poolp.org>
Date:   Tue Jun 23 15:59:45 2009 +0100

    [zebra] linux policy routing support with ipv6
    
    Quagga support linux policy routing (ip route ... table $X) with zebra.conf
    table $X option.  It works fine on ipv4.  On ipv6 the parameter is ignored
    (table 0 is used).
    
    * zebra/...: Pass appropriate table arg to rib_{add,delete}_ipv6

commit 3523bea8cbe98c83e3d1bdeb60180c8e59622773
Author: Jingjing Duan <jingjing.duan@sun.com>
Date:   Tue Jun 23 17:28:23 2009 +0400

    [trivia] work around ksh93 builtin name (#451)
    
    ksh93 script cannot have 'stop' functions w/o cancelling
    existing definition first. Fixed.

commit 50aef6f3b0e36b56cfa9f3d374be0c1d25c30c45
Author: Chris Caputo <ccaputo@alt.net>
Date:   Tue Jun 23 06:06:49 2009 +0000

    Fix "show ip bgp dampened-paths" garbage output.
    
    * bgpd/bgp_damp.c: Make bgp_damp_reuse_time_vty() accept a buffer and
      length, rather than returning a local var buffer whose contents can get
      trounced.  Remove duplicate BGP_UPTIME_LEN define.
    * bgpd/bgp_damp.h: bgp_damp_reuse_time_vty() prototype change.
    * bgpd/bgp_route.c: Provide bgp_damp_reuse_time_vty() with a buffer and
      length.  Remove duplicate BGP_UPTIME_LEN define.
    
    This problem was noticed in 2005...
    
      http://hibernia.jakma.org/~paul/patches/quagga-test.diff
    
    ...but the fix didn't make it into the code.
    
    Signed-off-by: Chris Caputo <ccaputo@alt.net>

commit 6e79f8bba438823d84b7464a9acc1e6fc9126a27
Author: Chris Caputo <ccaputo@alt.net>
Date:   Tue Jun 23 05:55:57 2009 +0000

    Fix vtysh based "write term" output.
    
    * vtysh/vtysh.c: "end" should be printed at the bottom, not the top.
    * vtysh/vtysh_config.c: PROTOCOL_NODE was not being handled, and thus was
      being displayed at the top of a config, rather than in its rightful
      place near the bottom.
    
    Signed-off-by: Chris Caputo <ccaputo@alt.net>

commit 2b35ae41c2c5d39801c943fa740c72fc15613141
Author: Chris Caputo <ccaputo@alt.net>
Date:   Tue Jun 23 05:34:29 2009 +0000

    Fixes to RFC2385/MD5 BGP
    
    * bgpd/bgp_network.c: Fix MD5 listen in IPv4 version of bgp_socket() by
      adding listen socket to listen_sockets list so that MD5 passwords can
      get set.
    * lib/sockopt.c: (sockopt_tcp_signature) Fix bogus "% Error while applying
      TCP-Sig to session(s)" / "can't set TCP_MD5SIG option" startup error
      messages by not returning error when there isn't one.

commit 774eb1524c3a1e0a9567e6aff3315b4686ab3e75
Author: Dmitry Tejblum <tejblum@yandex-team.ru>
Date:   Tue Jun 23 17:16:32 2009 +0400

    [ospfd] cancel OSPF timer hack in nsm_change_state
    
    This piece of code causes all Quagga routers on a broadcast link to
    send a HELLO packet simultaneously if they see a new neighbor. It also
    resets the HELLO timer, so all the quagga routers will continue to
    send HELLO packets simultaneously in the future. This is not good
    (especially on networks with a lot of Quagga routers connected), and
    is explicitly discouraged by the OSPF standard, RFC 2328 (chapter
    4.4.Timers).
    
    I suggest to remove the code snippet, it does not provide much benefit
    anyway.

commit b60668d092f1778395b6c10b406059b8cbf235b8
Author: Chris Caputo <ccaputo@alt.net>
Date:   Sun May 3 04:40:57 2009 +0000

    RFC 4191 Default Router Preference support for router advertisements
    
    Adds "ipv6 nd router-preference (high|medium|low)" and
    "no ipv6 nd router-preference" interface commands.
    
    Files modified:
    
       doc/ipv6.texi
       zebra/interface.c
       zebra/interface.h
       zebra/rtadv.c
       zebra/rtadv.h
    
    Signed-off-by: Chris Caputo <ccaputo@alt.net>