commit 828f235df4b6a322aac58e1b7d5089c7f9d6cc0a
Author: David Lamparter <equinox@diac24.net>
Date:   Tue May 1 21:43:53 2012 +0200

    release: 0.99.21

commit d78e2b8b562f8496aaf2977f7371415b71e82433
Author: David Lamparter <equinox@diac24.net>
Date:   Tue May 1 18:08:43 2012 +0200

    tests: disable broken tests/bgp_mp_attr_test.c
    
    it doesn't compile currently; it'll be fixed after the 0.99.21 release.
    
      * tests/bgp_mp_attr_test.c: wrap in #if 0 for now
    
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit 4b5a2103b7d03b9209cfa3668d9cebead697bc82
Author: David Ward <david.ward@ll.mit.edu>
Date:   Sun Apr 29 16:47:08 2012 -0400

    redhat: add systemd service files
    
     * redhat/*.service: add systemd service file for each routing daemon
     * redhat/quagga.sysconfig: add comment about watchquagga and systemd
     * redhat/Makefile.am: add systemd service files to distribution
    
    Signed-off-by: David Ward <david.ward@ll.mit.edu>
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit a41242bed823db77186ed7d11953cffaa0c3b733
Author: David Ward <david.ward@ll.mit.edu>
Date:   Sun Apr 29 16:47:07 2012 -0400

    redhat: update initscripts
    
    Taken from Fedora packaging with additional fixes.
    
     * redhat/*.init: make all initscripts LSB-compliant;
         store the daemon configuration file location in $CONF_FILE,
         and perform existence testing before starting the daemon
     * redhat/babeld.init: add initscript for Babel routing engine
     * redhat/quagga.sysconfig: add command-line options for babeld;
         remove the daemon configuration file locations from $*_OPTS;
         clarify directions for configuring watchquagga
     * redhat/Makefile.am: add babeld.init to distribution
    
    Signed-off-by: David Ward <david.ward@ll.mit.edu>
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit 0bd268a5232f91c8cf01366b7ae43bcfed1dc8fe
Author: David Ward <david.ward@ll.mit.edu>
Date:   Sun Apr 29 16:47:06 2012 -0400

    redhat: add logrotate configuration for babeld and isisd
    
    Signed-off-by: David Ward <david.ward@ll.mit.edu>
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit 7b0df9c5bad83e2a2eb047e84edc00b3bc1d562c
Author: David Ward <david.ward@ll.mit.edu>
Date:   Mon Apr 30 11:36:16 2012 -0400

    doc: add ospfclient(8) and watchquagga(8) man pages
    
    Taken from Fedora packaging.
    
    Signed-off-by: David Ward <david.ward@ll.mit.edu>
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit f027d331fc24c0b4aed77ab7507a9635db313f3c
Author: David Ward <david.ward@ll.mit.edu>
Date:   Mon Apr 30 11:36:15 2012 -0400

    doc: only package man pages for daemons that are built
    
    Signed-off-by: David Ward <david.ward@ll.mit.edu>
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit 2e14a748061921f1f656b07890c4932f97c2baaa
Author: David Ward <david.ward@ll.mit.edu>
Date:   Sun Apr 29 16:47:03 2012 -0400

    tools: use standard interpreter path in all Perl scripts
    
    Signed-off-by: David Ward <david.ward@ll.mit.edu>
    [changed /usr/bin/perl to /usr/bin/env perl]
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit fac3c2453a06bce773a3f4ae6834f5f9a317b88c
Author: David Lamparter <equinox@diac24.net>
Date:   Sat Apr 28 22:37:20 2012 +0200

    bgpd: fix up multipath merge breakage
    
    the BGP multipath code was developed against a pre-f6f434b Quagga where
    bgp_attr_unintern and ecommunity_free took single-star pointers.  They
    now take double-star pointers.
    
      * bgpd/bgp_mpath.c: fix up bgp_attr_unintern & ecommunity_free calls.
    
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit 27f689793a25a66cf62561ac1d1302e01983a805
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Mon Mar 12 13:52:42 2012 +0100

    babeld: merge kernel_zebra.c into kernel.c.
    
    In upstream babel, we include different kernel_foo files depending on the
    platform we compile for.  In Quagga, this is not needed, and it avoids
    tricky autotools issues.  (All autotools issues are tricky.)
    
    [David: without this commit, build breaks.]
    
    From: Juliusz Chroboczek <jch@pps.jussieu.fr>
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit 61a81bea6d21dedc62931d6925d0608ebc45c196
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Mar 12 13:51:49 2012 +0100

    babeld: Include babel_main.h in noinst_HEADERS.
    
    babeld wouldn't build in a dist tarball without this.
    
    From: Denis Ovsienko <infrastation@yandex.ru>
    Signed-off-by: Juliusz Chroboczek <jch@pps.jussieu.fr>
    [fixed up git message]
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit 8d79efddb9c63f3b45e0ee7cac9508509b3b939c
Author: David Lamparter <equinox@diac24.net>
Date:   Fri Apr 20 17:26:48 2012 +0200

    lib: bump ZSERV_VERSION to 2
    
    continually changing the zserv protocol without bumping up the version
    number has made it impossible to talk to zebra without knowing the exact
    version.  in reality, increasing the version number more often guards
    against inadvertedly running incompatible versions of a daemon and zebra
    as well as aids external development.
    
      * lib/zclient.h: #define ZSERV_VERSION 2
    
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit 9665856e3718e42068e7d897f5e2468e77fb8c17
Author: David Lamparter <equinox@diac24.net>
Date:   Fri Apr 20 17:23:39 2012 +0200

    Revert "zebra: clean up client routes when client goes away"
    
    This reverts commit af56d404cd56d94ad3b2ec3f159650eb72baef0a,
    which was accidentally duplicating functionality from commit
    2ea1ab1 "zebra: ZEBRA_HELLO and mopping up routes (BZ#448)"
    
    Conflicts:
    
    	zebra/zebra_rib.c
    
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit fa4094ac49b4cc23589f5c5b7e608c4b4ee6ca04
Author: Jorge Boncompte [DTI2] <jorge@dti2.net>
Date:   Fri Apr 13 13:46:09 2012 +0200

    bgpd: Fix crash when disabling dampening (BZ#687)
    
        Vladimir Podobaev reported that the following commands crashed the
    daemon.
    
    router bgp 123
     bgp dampening
     no bgp dampening 1 2 3 4
     no bgp dampening
    
        The problem was that bgp_damp_info_clean() tried to dereference the
    already freed reuse_list array in the second call to "no bgp dampening".
    
        Fixed by checking in bgp_damp_disable() that the dampening it's
    enabled before doing the cleanup.
    
    Signed-off-by: Jorge Boncompte [DTI2] <jorge@dti2.net>

commit 7939e016b3d4ecd2f5b8ad708b69607e05a084a6
Author: Jorge Boncompte [DTI2] <jorge@dti2.net>
Date:   Mon Apr 9 18:03:57 2012 +0200

    ospfd: Fixes a crash of the daemon with a snmp walk
    
        - And allows to walk the LSDB.
    
    Signed-off-by: Jorge Boncompte [DTI2] <jorge@dti2.net>

commit 3cadc0cdebb8f8262b1c1fbb8bfcbcdc3baa3733
Author: JR Rivers <jrrivers@cumulusnetworks.com>
Date:   Sun Apr 1 12:16:31 2012 -0700

    zebra: use larger buffer (4096) for netlink messages
    
    Increase the maximum number of nexthops per route by using a larger
    buffer for netlink messages.
    
      * zebra/rt_netlink.c: Use a buffer of 4096 bytes to parse/build
        netlink messages. Add a hash define for this number
        (NL_PKT_BUF_SIZE). Most places in the code were previously using a
        buffer of 1024 bytes.

commit d75318cc8de91d94649106f4ea3122d0d21ac9eb
Merge: 6e493a4 48d8bea
Author: David Lamparter <equinox@diac24.net>
Date:   Mon Apr 16 18:24:40 2012 +0200

    isisd: merge osr/google-is-is
    
    this is essentially half of a rewrite of isisd. please note that a lot
    of things are still broken and isisd is not ready for production use.

commit 48d8bea8b7c83cf186460f711ab166455b5ed676
Author: Vyacheslav Trushkin <me@dogonthesun.net>
Date:   Fri Nov 25 18:51:48 2011 +0400

    quagga: option "-z" ("--socket <path>") added
    
    All daemons modified to support custom path to zserv
    socket.
    
    [reapplied from b511468 after isisd merge]

commit 1627b20fd4fe431558d0f77aff98cbee29ca15d8
Author: Vyacheslav Trushkin <me@dogonthesun.net>
Date:   Fri Nov 25 17:56:21 2011 +0400

    isisd: indent longopts array

commit 086695cb8eea5b405b21e66b92ef0348355c4821
Author: David Lamparter <equinox@diac24.net>
Date:   Mon Apr 16 18:14:50 2012 +0200

    isisd: reapply removal of CVS cruft
    
    this re-removes CVS keywords and .cvsignore files. original commits:
    	b82cdeb delete CVS keywords
    	05e54ee build: delete .cvsignore files

commit 6e493a44836d3b034ed3421e866878de3fbfcc5b
Merge: 9bb5870 3b381c3
Author: David Lamparter <equinox@diac24.net>
Date:   Mon Apr 16 16:46:13 2012 +0200

    bgpd: merge osr/quagga-osr-patches (BZ#700)
    
    this merges a bgp capability negotiation fix where bgpd would fail if no
    multiprotocol capability was present, but other capabilities were.

commit 9bb5870e26a4089f599b24adf822c4d1a9870a44
Merge: a25a44d 3cf6c2b
Author: David Lamparter <equinox@diac24.net>
Date:   Mon Apr 16 13:54:37 2012 +0200

    bgpd: merge osr/google-bgp-multipath
    
    this patchset allows collapsing multiple received routes in BGP into one
    multipath route that will, if readvertised, contain an aggregate of all
    received attributes.

commit aa3b264282677fcd33513352aa878d00163d2dbf
Author: Avneesh Sachdev <avneesh@opensourcerouting.org>
Date:   Wed Apr 11 23:56:03 2012 -0700

    isisd: reapply patch to fix zebra protocol
    
    Reapply the bits of revision b4e45f6 that pertain to isisd. That is:
      git log -n 1 -p b4e45f6 -- isisd
    
    These were dropped in the merge with the Google ISIS code (14d2bbaa).
    
    The commit message for b4e45f6 is:
    
        fix zebra protocol after MP-BGP changes
    
        The previous commits modified both zebra and bgpd for additional
        SAFI field, but not any other routing daemon, which led to zebra
        daemon crashing with failed assertion.

commit 14d2bbaa3f4aa53152472694c29f336808e47313
Merge: 51d4ef8 e96b312
Author: Avneesh Sachdev <avneesh@opensourcerouting.org>
Date:   Wed Apr 11 23:51:08 2012 -0700

    Merge quagga mainline into the google ISIS code.
    
    The steps were:
    
      $ git checkout google-is-is
      $ git merge quagga
      $ git checkout google-is-is -- isisd
    
      # Resolve conflicts in the following:
      lib/md5.h
      zebra/rt_netlink.c
      zebra/zebra_rib.c
      zebra/zserv.c
    
    Note that the content in the isisd directory is left unchanged in the
    merge. As a result, changes made to isisd as part of the following
    commits on the quagga mainline are dropped.
    
      # 8ced4e82 is the merge base, e96b3121 is the current quagga master
      $ git log --oneline --reverse 8ced4e82..e96b3121 -- isisd
      5574999 isisd: fix crash on "no router isis" (BZ#536)
      8998075 isisd: raise hello rate for DIS (BZ#539)
      306ca83 isisd: include hash.h, not hash.c
      b82cdeb delete CVS keywords
      2f65867 isisd: indent longopts array
      b511468 quagga: option "-z" ("--socket <path>") added
      05e54ee build: delete .cvsignore files
      b4e45f6 fix zebra protocol after MP-BGP changes
      7fd6cd8 isisd: fix circuit state machine
      907fd95 isisd: send proper LSP after DIS election
      d034aa0 isisd: fix wrong next-hops from SPF
      c25eaff isisd: unexpected kernel routing table (BZ#544)
      e6b03b7 isisd: implement MD5 circuit authentication

commit a25a44dba84e9a6ac2b87e24472b6e9f959d845b
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Apr 3 20:33:24 2012 +0400

    ospfd: adjust OSPF_ROUTER_LSA_MIN_SIZE for VL case

commit 3cf6c2b4e43f44a977d218c96c26250654ae333e
Merge: 01d7ff0 e96b312
Author: Avneesh Sachdev <avneesh@opensourcerouting.org>
Date:   Mon Apr 9 00:25:15 2012 -0700

    Merge branch 'quagga' into google-bgp-multipath
    
    Conflicts:
    	bgpd/bgp_route.c

commit 3b381c32fc2c325cc4ffb9f9f30a7e96e9bd87c6
Author: Avneesh Sachdev <avneesh@opensourcerouting.org>
Date:   Sun Feb 19 10:19:52 2012 -0800

    bgpd: fix issue in capability negotiation (BZ#700)
    
    Address problem where bgpd would reject a session if a peer sent some
    capabilities in its Open message, but did not include a Multiprotocol
    extensions capability. Note that the session would come up if there
    were no capabilities at all in the Open message.
    
      * Add the 'mp_capability' out parameter to
        bgp_capability_parse(). Set it to '1' if a Multiprotocol
        extensions capability is encountered.
    
      * Switch on 'mp_capability' instead of 'capability' in the calling
        functions to determine if the peer indicated the set of AFI/SAFIs
        it supports.
    
        The net result is that when a peer does not send an MP capability,
        it is assumed to support the AFI/SAFIs configured for it locally.

commit 51d4ef832c1e58150325630e25c442866e5a6cf5
Author: Josh Bailey <joshb@google.com>
Date:   Wed Mar 21 17:13:39 2012 -0700

    zebra: include hardware addr in if up/down messages
    
    Change interface up/down notification messages to also include the
    hardware address of the interface. The format of these messages is now
    identical to the interface add message -- move the serialization code
    to common functions.
    
      * lib/zclient.c: Modify zebra_interface_if_set_value() to also parse
        the hardware address. Invoke it from zebra_interface_add_read()
        and and zebra_interface_state_read().
    
      * zebra/zserv.c: Add zserv_encode_interface(). Invoke it from
        zserv_interface_add(), zserv_interface_delete() and
        zserv_interface_update().

commit 2dd04c5dc8b5a09cce1c251361fa58f26398fd9f
Author: Josh Bailey <joshb@google.com>
Date:   Wed Mar 21 10:37:03 2012 -0700

    lib: Tweak to if_delete_retain()
    
      * lib/if.c: Change if_delete_retain() to delete all connected
        addresses, but to not free the list that holds them. Free the list
        just before the interface structure itself is freed, in
        if_delete().

commit af56d404cd56d94ad3b2ec3f159650eb72baef0a
Author: Josh Bailey <joshb@google.com>
Date:   Wed Mar 21 18:47:51 2012 -0700

    zebra: clean up client routes when client goes away
    
      * zebra/zebra_rib.c: Add code to clean up routes added by a client
        (as identfied by 'rib type').
    
      * zebra/zserv.[ch]: Maintain the type of the routes added by a
        client on the 'zserv' structure -- assume that a given client uses
        a single route type for now.
    
        Clean up routes from a client when the client goes away (in
        zebra_client_close()).
    
    From: Josh Bailey <joshb@google.com>
    Signed-off-by: Avneesh Sachdev <avneesh@opensourcerouting.org>
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit fc328ac9d3d49b871c1139f36deb702a254c0d4f
Author: Subbaiah Venkata <svenkata@google.com>
Date:   Tue Mar 27 16:35:22 2012 -0700

    zebra: add more logs/asserts to rib work queue code
    
      * zebra/zebra_rib.c: (rib_queue_add, rib_queue_init) Add some more
        logs and asserts.
    
    From: Subbaiah Venkata <svenkata@google.com>
    Signed-off-by: Avneesh Sachdev <avneesh@opensourcerouting.org>
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit e38e0df01ad305ad48ecf816b52fa99fd3f2a4e1
Author: Subbaiah Venkata <svenkata@google.com>
Date:   Tue Mar 27 23:48:05 2012 -0700

    isisd: couple of bug fixes

commit 3f045a08812525505e165deea99a79447b44506b
Author: Josh Bailey <joshb@google.com>
Date:   Sat Mar 24 08:35:20 2012 -0700

    isisd: add Google's changes to IS-IS

commit 6902c69aa30a73ecd70ef8941518b541ca02b878
Author: Subbaiah Venkata <svenkata@google.com>
Date:   Tue Mar 27 19:21:29 2012 -0700

    zebra: tweak deletion of routes without nexthop addr
    
      * zebra/zserv.c
    
        - zread_ipv4_delete(): Pass a null 'gate' parameter to
          rib_delete_ipv4() if the route being deleted does not specify a
          next hop IP address. We were previously passing a pointer to a
          cleared out IP address.
    
        - zread_ipv4_add(): Fix indentation.
    
    From: Subbaiah Venkata <svenkata@google.com>
    Signed-off-by: Avneesh Sachdev <avneesh@opensourcerouting.org>
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit 26e2ae362baf207d82e4c1ac76bc1c2b2df6ccaa
Author: Josh Bailey <joshb@google.com>
Date:   Thu Mar 22 01:09:21 2012 -0700

    zebra: read multipath routes and hw addr from netlink
    
      * zebra/rt_netlink.c:
    
        - Pick up the hardware address of an interface when we receive a
          netlink link change message. Extract code for parsing the
          link-layer hardware address into a new function so we can reuse
          it.
    
        - netlink_routing_table(): Update to handle multipath routes.
    
        - netlink_route_change(): Update to handle multipath routes. Fix
          problem where the metric was not being read out.
    
      * zebra/zebra_rib.[ch]: Extern nexthop_ipv4_ifindex_add() -- it is
        now called from the netlink code.
    
    From: Josh Bailey <joshb@google.com>
    Signed-off-by: Avneesh Sachdev <avneesh@opensourcerouting.org>
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit d531050b7bf0f93d4d29a7a2f7b745641778b483
Author: Subbaiah Venkata <svenkata@google.com>
Date:   Sat Mar 24 13:10:19 2012 -0700

    lib: add stream_set_endp()
    
      * lib/stream.[ch]:
    
        - Add stream_set_endp(). This can be used to trim data (for
          example, padding) at the end of a stream.
    
        - Fix swapped 'getp' and 'endp' parameters in STREAM_WARN_OFFSETS.
    
    From: Subbaiah Venkata <svenkata@google.com>
    Signed-off-by: Avneesh Sachdev <avneesh@opensourcerouting.org>
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit bed930fd70742af5ae138e0a5ee629dda296ea36
Author: Josh Bailey <joshb@google.com>
Date:   Wed Mar 21 10:22:19 2012 -0700

    lib: add support for keyed-hashing with MD5
    
      * lib/md5.[ch] Add implementation of HMAC-MD5 from RFC 2104.
    
    From: Josh Bailey <joshb@google.com>
    Signed-off-by: Avneesh Sachdev <avneesh@opensourcerouting.org>
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit 54dd61227352dd1dd4db4fe76dbf7d2e92522e74
Author: Josh Bailey <joshb@google.com>
Date:   Wed Mar 21 10:00:07 2012 -0700

    lib: Tweaks to linked list macros
    
      * lib/linklist.h
    
        - Change the listnextnode, listhead and listtail macros so that
          they allow the list pointer to be NULL.
    
        - Modify the ALL_LIST_ELEMENTS* macros such that they clear the
          data pointer at the beginning and end of the loop.
    
    From: Josh Bailey <joshb@google.com>
    Signed-off-by: Avneesh Sachdev <avneesh@opensourcerouting.org>
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit e96b312150d8e376c1ef463793d1929eca3618d5
Author: David Lamparter <equinox@diac24.net>
Date:   Wed Apr 4 00:14:36 2012 +0200

    lib: pretty ip_masklen and masklen2ip
    
    nonwithstanding any desire for optimisation, these versions are shorter
    and more concise.  reading the comments, they might even be easier to
    understand.
    
    I've tested them on i686 and x86_64, and checked that correct assembler
    code is emitted for ARM, MIPS and PowerPC.
    
    IPv6 is left as an exercise for another day, none of the ideas I had led
    to a "yes, this is the one to go with" solution.
    
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit a3537862f3c00b60fc52a67c1cc447c2a65f97bd
Author: David Lamparter <equinox@diac24.net>
Date:   Fri Mar 23 22:48:05 2012 +0100

    Revert "lib: optimize ip_masklen()" (BZ#720)
    
    This reverts commit d171bf58ef12ace43d48565e6870722dece1e6ed.
    
    There are multiple reasons for this revert, including bug #720, but also
    quite simply the unreadability of having 2000 lines of an autogenerated
    table in the middle of a source file.
    
    Signed-off-by: David Lamparter <equinox@diac24.net>
    Reported-by: Martin Winter <mwinter@opensourcerouting.org>

commit fa5831e85ae9ba7008fb4b4e2d4c7561ae5cb697
Author: Paul Jakma <paul@quagga.net>
Date:   Tue Mar 27 11:54:04 2012 +0100

    bgpd: bgp_attr_flags_diagnose shouldn't assert
    
    * bgpd/bgp_attr.c: (bgp_attr_flags_diagnose) debug code for error-handling
      paths probably shouldn't assert, instead it should just log that there
      was no problem.

commit fa61e16ddebe10a71d98bcd2eba0f630071ea4a7
Author: Paul Jakma <paul@quagga.net>
Date:   Sun Mar 25 21:31:47 2012 +0100

    bgpd: attr_parse call to attr_malformed should deal with PROCEED error case
    
    * bgpd/bgp_attr.c: (bgp_attr_parse) the invalid flag check call to
      bgp_attr_malformed is pretty useless if it doesn't actually allow
      for the PROCEED non-error case.

commit 683f2b86d89fa356d3d1f7a54b0c269baa38b836
Author: Paul Jakma <paul@quagga.net>
Date:   Fri Mar 23 14:58:45 2012 +0000

    bgpd: Fix silly mistake in bgp_attr_flag_invalid
    
    * bgp_attr.c: (bgp_attr_flag_invalid) flags is meant to be masked
      off with the mask variable...

commit bd471fea4ec965c71d6c2201745995092fbc36f6
Author: Paul Jakma <paul@quagga.net>
Date:   Thu Mar 15 11:30:00 2012 +0000

    bgpd: malformed attribute error that can still proceed should fixup getp
    
    * bgp_attr.c: (bgp_attr_malformed) When a malformed attribute error can be
      ignored, and BGP message processing may still proceed, the stream getp
      should be adjusted to the end of the attribute - the caller may not have
      consumed all the attribute. Problem noted by Martin Winter in bug 678.
    
      Also, rename the 'startp' local to 'notify_datap', for clarity.

commit 81c3e5006e5d29e305cbc0ab482617d7e570e8c0
Merge: fe67e66 6881f26
Author: Paul Jakma <paul@quagga.net>
Date:   Sun Mar 25 17:10:22 2012 +0100

    Merge branch 'babeld-merge' into master-copy

commit 6881f2698279f3c47a55e8969860eeac59e8c3d7
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Tue Feb 14 15:43:34 2012 +0100

    babeld: remove "parasitic" mode.
    
    This is the functionality described in Appendix C of RFC 6126.  Its
    main purpose is to avoid keeping a full source table, which makes it
    possible to implement a subset of Babel in just a few hundred lines of
    code.  However, in Quagga the code for maintaining the source table is
    already there, and a parasitic implementation can be simulated using
    filtering -- so it makes little sense to keep the functionality.

commit cbde15513ba47f6e7f6d02fcafcfb12cd5b1df77
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Feb 14 15:12:03 2012 +0400

    babeld: 3 more timing statements in config text
    
    This commit makes the following lines visible in running-config text,
    when respective intervals are configured to non-default values:
    
    * babel hello-interval
    * babel update-interval
    * babel resend-delay

commit 5ca7986d546a1b65a4917aec0f1b594f950f7c27
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Tue Feb 14 11:22:29 2012 +0100

    babeld: consolidate zebra interface into fewer functions.

commit b63b4484c6d2c9d304d4ddd0756a4847c6dc5359
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Tue Feb 14 11:17:32 2012 +0100

    babeld: fix typo in kernel_route_add_v6.

commit 260948cdd6030b332137dfa0580d5a9ba651b145
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Tue Feb 14 09:09:32 2012 +0100

    babeld: set interface flags eagerly, not at interface up.

commit 46b92c043f1a83d8343a4a0345a7b69bac3cdf20
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Tue Feb 14 08:53:51 2012 +0100

    babeld: more helpful sample conf file.

commit 4d176dc07ccdcdefcd0e40043233a8c4f136f5c1
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Tue Feb 14 08:52:19 2012 +0100

    babeld: fix documentation.

commit 36329c02c36703cc2158c1c99b86045fed26d4ae
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Tue Feb 14 08:49:57 2012 +0100

    babeld: remove remains of standalone babeld's configuration code.
    
    Standalone babeld has a configuration interface that is not used in
    Quagga.  This removes a few bits of this code that survived the
    port to Quagga.

commit cb4b13d945a4b44282e59fa2be9ceda752420a13
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Feb 13 22:13:37 2012 +0400

    babeld: drive interface_config_write() forward

commit a14ef5eeccc8c76c41830475bbe3c31c9e14faa5
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Feb 11 21:06:16 2012 +0400

    babeld: justify "running-config" meaning in CLI
    
    The primary focus of this commit is to make "show running-config"
    command display more current configuration, including some of the bits
    previously seen in the output of "show babel running-config". Besides
    that, the following commands were renamed for consistency with the
    syntax of other components:
    
    "debug *" to "debug babel *" (and moved to top level)
    "show babel running-config" to "show babel parameters"
    
    * babel_interface.c
      * show_babel_running_config(): rename to show_babel_parameters(),
        update syntax pattern, don't call show_babeld_configuration()
      * babel_if_init(): update respectively
      * babel_enable_if_config_write(): new VTY helper for static
        babel_enable_if
    * babel_interface.h: add extern declaration
    * babel_main.c: unset all debug options by default
      * show_babel_main_configuration(): remove debug options decoder
    * babel_zebra.c
      * babel_debug(): rename to debug_babel(), update syntax pattern
      * no_babel_debug(): rename to no_debug_babel(), update syntax pattern
      * babelz_zebra_init(): update respectively
      * debug_babel_config_write() new VTY helper for static debug_type
    * babel_zebra.h: add extern declaration
    * babeld.c
      * babel_config_write(): add the code to output "debug babel *",
        "router babel", "redistribute *" and "network *" statements
      * show_babeld_configuration(): dismiss
    * babeld.h: remove extern declaration
    * babeld.texi: update for renamed commands
    * babeld.conf.sample: idem, add debug statements block

commit ce590ecd85b3cf32c5429f09e12d92248cc01ef2
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Sat Feb 11 17:48:05 2012 +0100

    Remove dead variable reboot_time.
    
    Thanks to Denis Ovsienko.

commit 8a46e12f5f0b02d58b1d7bc6c0d140aeec6c80c2
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Sat Feb 11 15:09:33 2012 +0100

    doc: fix typo.

commit 68c65a5d3a6a8cb8133b5e9311fc5dc21de88e9c
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Sat Feb 11 14:28:17 2012 +0100

    doc: update babeld documentation.

commit 173982334c978fdf2e7030d32a2cdc99587fb434
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Sat Feb 11 14:27:16 2012 +0100

    doc: fix Makefile dependencies for babeld.

commit 9c298c7119c1dba6c589b8f4c358debd8e694b72
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Sat Feb 11 14:06:24 2012 +0100

    babeld: display update-interval and resend-delay in show commands"

commit c428edba5fb151844d28fbb41fce1df466a74e42
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Sat Feb 11 14:02:10 2012 +0100

    babeld: vty commands (hello-interval, update-interval, resend-delay).

commit b58871ee4d54989c16a60a839a592c9c4ab19cc3
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Sat Feb 11 13:34:30 2012 +0100

    babeld: remove port and group setting commands.
    
    They didn't work anyway, since they're called too late.

commit 52d54422bdc0b70356d84a38a0ce15ba5dea03e0
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Sat Feb 11 13:08:00 2012 +0100

    Resynchronise with babeld-1.3.1.

commit 359be3d0e4db5c931b1ad0dabbac2dea77394de1
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Feb 11 15:25:01 2012 +0400

    babeld: dismiss babel_redistribute_unset()
    
    The function was effectively duplicating existing
    zclient_redistribute(). This makes no_babel_redistribute_type()
    consistent with babel_redistribute_type()

commit 3c442e8802c260a0ce9787b5f432a7a2a093be25
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Wed Feb 8 23:30:46 2012 +0100

    babeld: fix wire{d,less} commands name.

commit 9c58fbd7d7658055c2b3074489c6d338448d88e9
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Thu Feb 9 21:51:17 2012 +0100

    ripd: add babel for redistribution.

commit 93079db65cbb678d7fb67f7dd871e24c12b86f09
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Thu Feb 9 20:58:07 2012 +0100

    ripngd: Replace redistribution strings with route_types.h defines.

commit d70ab9dcd8f054ebd5f60a29dbbd9b39f9fe7566
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Thu Feb 9 17:23:09 2012 +0100

    babeld: Add support for blackhole routes.
    
    Babel makes use of blackhole routes to prevent routing loops between
    overlapping prefixes shortly after a route is retracted (see RFC 6126
    sections 2.8 and 3.5.5).  This patch adds support for installing such
    blackhole routes.

commit 31e2a19fd2b4aca34b1d2f5e2eb8c9a44b9ea6c9
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Thu Feb 9 14:06:11 2012 +0100

    babeld: refactor filtering stubs.
    
    Factorise the common parts of the in/out filtering functions.  This also
    fixes a bug with filtered out routes, which in babeld are signalled by
    a filter returing INFINITY, not -1.

commit 578ce371d12422ce444f31ae4e51b21675c74b55
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Thu Feb 9 13:42:28 2012 +0100

    zebra: Display uptime of Babel routes in show ip[v6] route.

commit 82509bfde09b15ac8856a374aac6d5d62b91f54a
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Thu Feb 9 13:35:27 2012 +0100

    babeld: Use quagga_gettime.

commit b6475ecb14abab936919894050f9ca47415d0f48
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Thu Feb 9 12:29:10 2012 +0100

    babeld: Don't use an ifindex when installing IPv4 routes.
    
    Stand-alone babeld installs routes using both a next-hop gateway
    and an interface index.  Unfortunately, this doesn't work for IPv4
    under Quagga.
    
    We now ignore the ifindex when installing IPv4 routes, which makes
    Babel work for IPv4 in prefix-based networks.  Of course this breaks
    IPv4 mesh networks, unless you play some tricks with your interfaces'
    netmasks.

commit 53b21956f650df86a76b7a7047cfa85114c99dcc
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Tue Jan 31 17:09:55 2012 +0100

    babeld: remove some unused functions' arguments.

commit 73c74d4ee8bd0bc3fae899679e852df9c61f0ed3
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Wed Feb 8 00:32:59 2012 +0100

    doc: fix typo in babeld.

commit f92a55ff0ef8e1186ad52369ace299bc91fdb791
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Tue Feb 7 16:33:17 2012 +0100

    doc: Document babeld.

commit ec0c848047954158b4316d45586079cbb774a7fe
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Tue Feb 7 05:44:41 2012 +0100

    babeld: Indentation fix.

commit 38846de1fd7fa9005933564de28360fb9bdf02bb
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Tue Feb 7 05:43:36 2012 +0100

    babeld: Error handling and tweaks for babeld commands.

commit e19ed8c4516621be74b9a28c887185fc66b67430
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Tue Feb 7 05:36:06 2012 +0100

    babeld: Fix typo in hello interval command.

commit feb6c53eacf630bf18d29e1994f65e567dbdd985
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Tue Feb 7 04:58:49 2012 +0100

    vtysh: Vtysh support for babeld.

commit 831aeb9a87d9071829758caf11130aee5578f9c2
Author: Juliusz Chroboczek <jch@pps.jussieu.fr>
Date:   Tue Feb 7 04:56:47 2012 +0100

    babeld: Replace the babeld.conf.sample file by one that actually works.

commit 8c4e57a57562c9329b1de4c29ee921ab98182c6b
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Sat Jan 28 00:29:51 2012 +0100

    babeld: fix interface bug, simplify code.
    
    Perhaps could it be able to free already free memory (so free(NULL)),
    in function interface_reset().  On other hand, it initiated untracked
    interfaces, raising (at least) inappropriate messages. Finally, I
    remove the BABEL_IF_IS_ENABLE flag, witch was not really usefull.
    Note the test if_up isn't weaker, because (...IS_UP => ...IS_ENABLE).

commit 69394543597a0fd8c161c5c8a0d25c8b1cfa8a93
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Sat Jan 28 10:35:12 2012 +0100

    babeld: state-file was loaded too early. Initial seqno too.

commit 210f6f66287c40f247c1a4ff983aae85b9e42e2c
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Sat Jan 28 00:07:14 2012 +0100

    babeld: fix eui64 features.
    
    We are interested by eui64 with at least 6 octets.

commit a0edef1b74bc9785b2aa1ed292a2777b6a75d40e
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Fri Jan 27 22:54:11 2012 +0100

    babeld: "return CMD_SUCCESS" was missing for command 'no debug'.

commit 05c943ac43087750ebc81b916b7dccfe4ae074ff
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Thu Jan 26 22:15:34 2012 +0100

    babeld: Replace redistribution strings with route_types.h defines.

commit c35fafdf887aa32c5be6ad738d3a3b0140cea6e8
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Mon Jan 23 23:46:32 2012 +0100

    babeld: babelz merge.
    
    Babelz is the last version of the stand-alone babel daemon. In
    particular, it use multiple channels to diminuate
    interferences. Please refer to this one for more details.

commit 16e51b246be6b18641327685f44bd4f5f6649367
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Mon Jan 23 00:22:14 2012 +0100

    babeld: remove unused variable.

commit 0b42c70840e16b048f62a38652123eb2cb900b65
Author: Ang Way Chuang <wcang79@gmail.com>
Date:   Fri Jan 27 20:52:27 2012 +0400

    vtysh: fix regexp for install_element() in babeld

commit a19a3bf94740aebff6fdfc76f3d4b17c0013fae4
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Jan 21 23:16:00 2012 +0400

    babeld: add MP-specific zclient API fix
    
    Add proper initialization of SAFI field, which is present in the
    revisions of zapi_ipv4 and zapi_ipv6 structures specific to
    MP-BGP patchset. Without this change no Babel routes could make
    into zebra RIB.

commit ec8d8d5ba648302cf9405f1346e3760d9b9d061c
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Fri Jan 20 15:32:16 2012 +0100

    babeld: change the modify route system.
    
    Zebra doesn't set errno to EEXIST if we add a route who was already in
    the kernel, so we always returned after just doing "add; delete". This
    patch fix the problem by doing "delete; add" always.

commit 6dfeb3f6cfaf89ce0e11421b48feb2965a43ffd6
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Fri Jan 20 17:53:57 2012 +0100

    babeld: fix bug due to v4mapped addresses.

commit f1305cbfbed050ed4f389fa282bef49917ffd638
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Fri Jan 20 00:19:35 2012 +0100

    babeld: add command (config) to set debug flags.

commit b5d43c939476b49106b1ab80b61609aba43c915d
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Thu Jan 19 22:38:56 2012 +0100

    babeld: remove useless variable, make local another.

commit 2236df03898f82e627f865e11157a5e08dd2e4ba
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Thu Jan 19 22:37:38 2012 +0100

    memory: install babel memory informations.

commit 3f031ed536cf96d44015cf49d1f734d15d194f0a
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Wed Jan 18 23:03:00 2012 +0100

    babeld: fix commands informations messages.

commit 72db20bf8f6af1fd70ae42f287360cad835f042b
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Wed Jan 18 22:06:10 2012 +0100

    babeld: place the babel-state file in the quagga vars directory.

commit 3cb4134bcfb2b9f7aa885a39cc0efc3b18125490
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Wed Jan 18 20:20:59 2012 +0100

    babeld: use zlog_debug instead of do_debugf, for debugf.

commit d3351d1ebf99591cf436035bb148e4ae0b351ffc
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Thu Jan 19 22:36:56 2012 +0100

    babeld: add command: "show_babel_running_config".

commit 1f39f466e439f217dcbae741ddc23a5340a05ec9
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Wed Jan 18 20:01:31 2012 +0100

    babeld: add command: "show_babel_database".

commit 297a55ba1ce58b281b825400abeca6c32b99db52
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Wed Jan 18 16:39:29 2012 +0100

    babeld: add command: "show_babel_neighbour".

commit 0ee8a1f1d61ce55642d9164625ab36700fe2c3a9
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Wed Jan 18 00:52:06 2012 +0100

    babeld: avoid segfault (bug 706).

commit 4eedea551290906fc76f3a0c908ae759e78bb68a
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Tue Jan 17 22:46:21 2012 +0100

    babeld: change fprintf(stderr) in term of zlog_err.

commit d4e46e681434e768b870679b998eb1ac7635fdfc
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Jan 17 19:25:03 2012 +0400

    babeld: implement "show babel interface" command
    
    * babel_interface.c
      * show_babel_interface_sub(): new function to process one ifp
      * show_babel_interface(): new function, VTY wrapper
      * babel_if_init(): update respectively

commit 8f3607f84eb5d21d4732a51b39775b7edf8796c2
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Jan 17 17:04:00 2012 +0400

    babeld: add handling of "-z" cmdline arg

commit 446d73b7ae544df3af68b4e85ddcd06c2d3589bf
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Jan 17 17:00:20 2012 +0400

    babeld: bring babel_usage() into focus

commit f8a246d6df0556fb897e1785d1c2ea81caf8956d
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Wed Jan 11 18:18:56 2012 +0400

    lib: update proto_redistnum() for Babel

commit 87c271c69330cfcea7955503eba3ed15a15cb634
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Jan 10 15:58:04 2012 +0400

    babeld: address remaining -Wcast-qual warnings
    
    * net.c
      * babel_send(): arguments are not treated as "const", justify
        declaration
    * babel_main.c: declare constant pointers as such

commit 528eab1fd04434e0befe9a98191b11602e3cb2ff
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Sun Jan 8 17:07:10 2012 +0100

    babeld: fix bug concerning pidfile.

commit c7c53fa88ccdbc2d48cf7327c9e4f33cdc517a8a
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Sun Jan 8 16:43:08 2012 +0100

    babeld: address some other compilation warnings.

commit 3dbda0ceebe369a1071600fe7d8d8ecf45f1027c
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sun Jan 8 16:52:36 2012 +0400

    babeld: address some compilation warnings
    
    Including system headers is not necessary with zebra.h included and
    sometimes results in "__ASSERT_FUNCTION redefined" compilation warning.
    
    * babeld.c
      * babel_distribute_update_interface(): make static
    * babel_interface.c
      * interface_config_write(): unused 'babel_ifp'
      * don't include system headers
    * message.c
      * send_request(): unused 'babel_ifp'
      * send_multihop_request(): idem
      * don't include system headers
    * route.c: don't include system headers
    * xroute.c: idem
    * source.h: newline at EOF
    * message.h: idem

commit ef4de4d36c2dc10a68d41e518057d04b262ec867
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sun Jan 8 15:29:19 2012 +0400

    babeld: address FreeBSD "struct route" issue
    
    FreeBSD system headers have their own "struct route", which made it
    impossible to compile babeld. Switching babeld to "struct babel_route".

commit 089082b5d51c41a4498edb6a3f495ade0d517e73
Author: Matthieu Boutier <boutier@pps.jussieu.fr>
Date:   Fri Jan 6 23:09:23 2012 +0100

    babeld: clean kernel_zebra (old functions, fields...).

commit 5734509c0545ebd95a5b8e3f22a911c1a39ffa1b
Author: Paul Jakma <paul@quagga.net>
Date:   Sun Dec 25 17:52:09 2011 +0100

    babeld: Initial import, for Babel routing protocol.
    
    * Initial import of the Babel routing protocol, ported to Quagga.
    * LICENCE: Update the original LICENCE file to include all known potentially
      applicable copyright claims.  Ask that any future contributors to babeld/
      grant MIT/X11 licence to their work.
    * *.{c,h}: Add GPL headers, in according with the SFLC guidance on
      dealing with potentially mixed GPL/other licensed work, at:
    
      https://www.softwarefreedom.org/resources/2007/gpl-non-gpl-collaboration.html

commit fe67e668881b8b8d71b1570575c913cd287fafcf
Author: Renato Westphal <renatowestphal@gmail.com>
Date:   Fri Mar 23 16:27:40 2012 -0300

    lib: fix endianness bug in prefix.c
    
    While defining two "maskbytes" arrays for the respective endiannesses,
    the code was unconditionally using one that only worked on little endian
    systems.
    
    Use preprocessor macros to avoid the somewhat expensive
    htonl/ntohl macros.
    
    From: Renato Westphal <renatowestphal@gmail.com>
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit aee567450eaf32877d00f47c4cc5d05c5fb85a51
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Feb 28 15:15:29 2012 +0400

    ospfd: reduce ospf_verify_header()
    
    Protocol version checks fits ospf_packet_examin() better (like it is
    implemented in ospf6d), and packet type check is already there.

commit bd5651f0ec7aa94627a2a6868dd458f016750a35
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sun Feb 26 17:59:43 2012 +0400

    ospfd: bring ospf_check_auth() into focus
    
    The old ospf_check_auth() function did two different jobs depending on
    AuType. For Null and Simple cases it actually authenticated the packet,
    but for Cryptographic case it only checked declared packet size (not
    taking the actual number of bytes on wire into account). The calling
    function, ospf_verify_header(), had its own set of MD5/checksum checks
    dispatched depending on AuType.
    
    This commit makes the packet size check work against the real number of
    bytes and moves it to ospf_packet_examine(). All MD5/checksum
    verification is now performed in ospf_check_auth() function.
    
    * ospf_packet.c
      * ospf_packet_examin(): check length with MD5 bytes in mind
      * ospf_verify_header(): remove all AuType-specific code
      * ospf_check_auth(): completely rewrite

commit ef1b78cbcd8ade0c5444f3ff9dd00a40e760ec92
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sun Feb 26 17:00:57 2012 +0400

    ospfd: introduce ospf_auth_type_str[]

commit b29adf9c3e69f298f748564a20abdf7274bbc549
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Feb 20 23:08:10 2012 +0400

    ospfd: fix packet length check for auth/LLS cases
    
    An OSPFv2 packet with trailing data blocks (authentication and/or
    link-local signaling) failed the recently implemented packet length
    check, because trailing data length isn't counted in the packet header
    "length" field. This commit fixes respective check conditions.
    
    * ospf_packet.c
      * ospf_packet_examin(): use "bytesdeclared" instead of "bytesonwire"

commit 4e31de792ec5e48a97360b5b86196b4fa02996a3
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Feb 17 16:20:50 2012 +0400

    ospfd: introduce ospf_lsa_minlen[] (BZ#705)
    
    This commit ports more packet checks to OSPFv2, in particular, LSA size
    verification and Router-LSA link blocks verification.
    
    * ospf_lsa.h: add LSA size macros
    * ospf_packet.h: add struct ospf_ls_update
    * ospf_packet.c
      * ospf_lsa_minlen[]: a direct equivalent of ospf6_lsa_minlen[]
      * ospf_router_lsa_links_examin(): new function, verifies trailing
        part of a Router-LSA
      * ospf_lsa_examin(): new function like ospf6_lsa_examin()
      * ospf_lsaseq_examin(): new function like ospf6_lsaseq_examin()
      * ospf_packet_examin(): add type-specific deeper level checks

commit 2d8223c5472129eba89d630dc4f2688ebeae1dd8
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Jan 30 20:32:39 2012 +0400

    ospfd: review ospf_check_md5_digest()
    
    Rewrite some pointer arithmetics without the additional variables and
    move byte order conversion inside the function.

commit e52591481ed64e4cf9f26a76ad682ed7e6b451e7
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Jan 30 16:07:18 2012 +0400

    ospfd: review ospf_check_auth()
    
    1. The only purpose of "ibuf" argument was to get stream size, which
    was always equal to OSPF_MAX_PACKET_SIZE + 1, exactly as initialized
    in ospf_new().
    
    2. Fix the packet size check condition, which was incorrect for very
    large packets, at least in theory.

commit 75c8eabbb5d3dc8aa21b61e8700ab939ce272f5c
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Jan 30 15:41:39 2012 +0400

    ospfd: introduce ospf_packet_minlen[] (BZ#705)
    
    This commit ports some of the OSPFv3 packet reception checks
    to OSPFv2.
    
    * ospf_packet.c
      * ospf_packet_minlen[]: a direct equivalent of ospf6_packet_minlen[]
      * ospf_packet_examin(): new function designed after the first part
        of ospf6_packet_examin()
      * ospf_read(): verify received packet with ospf_packet_examin()
    * ospf_packet.h: add convenience macros

commit 7e0e2cb14ca16ce9eaca3b0300c1ffa92a6a104b
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Jan 20 22:32:10 2012 +0400

    ospfd: fix ospf_packet_add_top() to use LOOKUP()

commit 272ca1e33016b1cbf9c72038d5e631b0adb04dc9
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sun Jan 15 19:12:19 2012 +0400

    ospfd: use LOOKUP() for ospf_packet_type_str
    
    * ospf_packet.h: add proper str/max extern declarations
    * ospf_packet.c
      * ospf_packet_type_str: rewrite in "struct message", add max value
      * ospf_packet_add(): use LOOKUP()
      * ospf_write(): ditto
      * ospf_hello(): ditto
      * ospf_read(): ditto
    * ospf_dump.h: the declaration does not belong here
    * ospf_dump.c
      * ospf_header_dump(): use LOOKUP()
      * show_debugging_ospf(): ditto

commit a20a4060c8b90e3d88ce97d439eee1a38260d7c5
Author: Paul Jakma <paul@quagga.net>
Date:   Thu Mar 8 16:42:31 2012 +0000

    doc: Fix an apparently no longer legal @itemize @asis
    
    * basic.texi: @asis isn't legal with @itemize apparently, should be @w
      according to docs, but @w{} seems to be needed. Fixes doc build error.

commit fa482834ea1a30eff056dbf0f36a6f3262460a08
Author: Paul Jakma <paul@quagga.net>
Date:   Thu Mar 8 13:51:21 2012 +0000

    HACKING.tex: Change to a LaTeX version of HACKING
    
    * configure.ac: Check for latexmk and pdflatex
    * Makefile.am: Add a conditional target to build HACKING.pdf, as a convenience
    * HACKING.tex: A slightly more structured HACKING, is readable on its own.
    * HACKING: removed

commit 096259d0623ad1a30c5da139af180909b322c91f
Author: Paul Jakma <paul@quagga.net>
Date:   Wed Mar 7 11:42:03 2012 +0000

    HACKING: Typo fix

commit 724b3aef4e59a48e9404ee17f09a504b20af0d37
Author: Paul Jakma <paul@quagga.net>
Date:   Wed Mar 7 11:02:05 2012 +0000

    HACKING: Updates that have some initial consensus, for further iteration.

commit 9fc75742397cf942ca9d684815ce63058b2576ff
Merge: 543fb49 5861739
Author: Paul Jakma <paul@quagga.net>
Date:   Mon Mar 5 11:55:53 2012 +0000

    Merge remote-tracking branch 'quagga-gnu.org/master'

commit 5861739f8c38bc36ea9955e5cb2be2bf2f482d70
Author: Paul Jakma <paul@quagga.net>
Date:   Mon Jan 9 20:59:26 2012 +0000

    bgpd: Open option parse errors don't NOTIFY, resulting in abort & DoS
    
    * bgp_packet.c: (bgp_open_receive) Errors from bgp_open_option_parse are
      detected, and the code will stop processing the OPEN and return.  However
      it does so without calling bgp_notify_send to send a NOTIFY - which means
      the peer FSM doesn't get stopped, and bgp_read will be called again later.
      Because it returns, it doesn't go through the code near the end of the
      function that removes the current message from the peer input streaam.
      Thus the next call to bgp_read will try to parse a half-parsed stream as
      if it were a new BGP message, leading to an assert later in the code when
      it tries to read stuff that isn't there. Add the required call to
      bgp_notify_send before returning.
    * bgp_open.c: (bgp_capability_as4) Be a bit stricter, check the length field
      corresponds to the only value it can be, which is the amount we're going to
      read off the stream. And make sure the capability flag gets set, so
      callers can know this capability was read, regardless.
      (peek_for_as4_capability) Let bgp_capability_as4 do the length check.

commit 50e7a3885da44f8f6c5c639e111109deb055cdf3
Author: Paul Jakma <paul@quagga.net>
Date:   Mon Jan 9 13:54:33 2012 +0000

    tools/multiple-bgpd: Fix the PREV calculation so it works for <4 bgpd
    
    * tools/multiple-bgpd: Make PREV more general and correct. Add comment
      to route-map about why rt/soo sets are there - cause it's still broken.

commit 543fb49c316df9af2d25f08ba7e0da0305c36b5e
Author: Paul Jakma <paul@quagga.net>
Date:   Fri Mar 2 11:56:38 2012 +0000

    HACKING.pending: Add Quagga-RE details

commit b5043aabb03567b46a16463d88a8afce2acda35e
Author: Paul Jakma <paul@quagga.net>
Date:   Tue Feb 28 18:32:56 2012 +0000

    lib: fix incorrect thread list processing loops
    
    * thread.c: (thread_timer_process,thread_process) thread_list_delete nulls
      thread->next. Loops need to save next first, or will only process the head.
      Problem noted by Lou Berger <lberger@labn.net>.

commit 835315bfb49bff2b2fb354f2075c6d6693c2a151
Author: Paul Jakma <paul@quagga.net>
Date:   Wed Jan 18 12:28:30 2012 +0000

    bgpd: Move up flag-check calls, parcel up attr-parser args, and other cleanups
    
    * bgp_attr.h: (struct bgp_attr_parser_args) Attribute parsing context,
      containing common arguments.
    * bgp_attr.c: (general) Move the bgp_attr_flag_invalid flag-check calls up,
      out of each individual attr parser function, to be done once in attr_parse.
    
      Similarly move the calculation of the 'total' attribute length field up
      to attr_parse.
    
      Bundle together common arguments to attr-parsing functions and helpers
      into (struct bgp_attr_parser_args), so it can be passed by reference down
      the stack & also de-clutter the argument lists & make it easier to
      add/modify the context for attr-parsing - add local const aliases to avoid
      modifying body of code too much. This also should help avoid cut & paste
      errors, where calls to helpers with hard-coded attribute types are pasted
      to other functions but the code isn't changed.
    
      (bgp_attr_flags_diagnose) as above.
      (bgp_attr_flag_invalid) as above.
      (bgp_attr_{origin,aspath,as4_path,nexthop,med,local_pref,atomic}) as above.
      (bgp_attr_{aggregator,as4_aggregator,community,originator_id}) as above
      (bgp_attr_{cluster_list,ext_communities},bgp_mp_{un,}reach_parse) as above
      (bgp_attr_unknown) as above.
    
      (bgp_attr_malformed) as above. Also, startp and length have to be
      special-cased, because whether or not to send attribute data depends
      on the particular error - a separate length argument, distinct from
      args->length, indicates whether or not the attribute data should be sent
      in the NOTIFY.
      (bgp_attr_aspath_check) Call to bgp_attr_malformed is wrong here, there is
      no attribute parsing context - e.g. the 'flag' argument is unlikely to be
      right, remove it. Explicitly handle the error instead.
      (bgp_attr_munge_as4_attrs) Flag argument is pointless.
    
      As the comment notes, the check here is pointless as AS_PATH presence
      already checked elsewhere.
    
      (bgp_attr_parse) Do bgp_attr_flag_invalid call here.
      Use (struct bgp_attr_parser_args) for args to attr parser functions.
      Remove out-of-context 'flag' argument to as4 checking functions.

commit 3ecab4c8549574d09f8d8366098939a8ad3da6c4
Author: Paul Jakma <paul@quagga.net>
Date:   Tue Jan 17 13:31:33 2012 +0000

    bgpd: consolidate attribute flag checks
    
    * bgpd/bgp_attr.c: (attr_flags_values []) array of required flags for
      attributes, EXTLEN & PARTIAL masked off as "dont care" as appropriate.
      (bgp_attr_flag_invalid) check if flags may be invalid, according to
      the above table & RFC rules.
      (bgp_attr_*) Use bgp_attr_flag_invalid.
      (bgp_attr_as4_aggregator) ditto, also take startp argument for the
      NOTIFY data.
      (bgp_attr_parse) pass startp to bgp_attr_as4_aggregator

commit b51a3a31500133e3e26f12e7639f297c655bc735
Author: Vyacheslav Trushkin <me@dogonthesun.net>
Date:   Fri Feb 10 10:42:45 2012 +0400

    ospf6d: remove defaults from iface config (BZ#550)

commit ef2d5d100431031c32ea35b3c834b46cff16f511
Author: Phil Laverdiere <phil_laverdiere@securecomputing.com>
Date:   Mon Jan 2 20:04:26 2012 +0400

    ospf6d: remove own routes on SIGTERM (BZ#448)

commit 4c78376f96cd2ca56f1c6476b76fd659654431f5
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Jan 21 22:50:19 2012 +0400

    lib: fix logging of ZEBRA_HELLO message

commit e854095932260b3e6187902aa9a7baa0e96b9428
Author: Everton Marques <everton.marques@gmail.com>
Date:   Thu Feb 16 06:14:54 2012 +0100

    lib: add THREAD_TIMER_MSEC_ON()
    
     * lib/thread.h: new timer macro, millisecond precision
    
    (this was cherrypicked from pimd to isolate all non-contained changes)
    
    From: Everton Marques <everton.marques@gmail.com>
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit e6b03b77766dce8009ad7b4a2392e14addf4ab0f
Author: Fritz Reichmann <fritz@reichmann.nl>
Date:   Sat Oct 1 17:49:48 2011 +0400

    isisd: implement MD5 circuit authentication
    
    * Replace command "isis passwd" with "isis passwd {clear|md5}"
    * Verify HMAC MD5 on ISIS Hello PDUs
    * Add HMAC MD5 authentication to md5.h/md5.c from RFC2104

commit c25eaffdb2190149e768dc4ee4efc913c6d02992
Author: Fritz Reichmann <fritz@reichmann.nl>
Date:   Sat Oct 1 17:43:12 2011 +0400

    isisd: unexpected kernel routing table (BZ#544)
    
    Fix bug 544: isisd produces an unexpected routing table for wide-metric.
    
    * isis_spf.c: Accept VTYPE_PSEUDO_TE_IS and VTYPE_NONPSEUDO_TE_IS
      vertex types for SPF calculation
    * isis_pdu.c: Change order of TLVs to match Cisco to make bitwise
      comparison easier for Wireshark
    * isis_tlv.c: EXTREME_TLV_DEBUG for TLV debugging instead of
      EXTREME_DEBUG

commit d034aa027ef44d0a74805c27ad2a4d8ea20395d1
Author: Peter Szilagyi <peszilagyi@gmail.com>
Date:   Sat Oct 1 17:22:51 2011 +0400

    isisd: fix wrong next-hops from SPF
    
    The forwarding table was filled with wrong next-hops, and which is even
    worse, it was done in a totally non-deterministic way.
    
    The next-hop set for an IP prefix by isisd was the neighbor IS from
    which the flooded LSP about the IP prefix was arrived. So, if an IS
    received all the LSPs through its, say, eth0 interface, all entries
    in the forwarding table contained the next IS reachable via eth0 as
    the next-hop.
    
    The solution is to propagate the correct next-hop further from node to
    node as the SPF algorithm traverses the graph and selects the next
    node to be added to the set of already covered nodes.
    
    Also, the construction of the tentative node list (the nodes where the
    shortest path is not known yet) was buggy: if a node was already a
    member of this list with a certain path cost, and an alternative path
    was found to it with a lower cost while processing a pseudo-node LSP,
    it was not added to the list. This way, the path selected by isisd for
    a certain prefix was the first one it encountered during the LSDB
    processing.
    
    Signed-off-by: Fritz Reichmann <fritz@reichmann.nl>

commit 907fd95e502e10334e5390c73cc57588b88b8171
Author: Peter Szilagyi <peszilagyi@gmail.com>
Date:   Sat Oct 1 17:15:46 2011 +0400

    isisd: send proper LSP after DIS election
    
    After an IS has been elected as the Designated IS for a LAN, it did
    not refresh the content of the pseudo-node after a new node has been
    connected to the same LAN. Instead, the periodically reoriginated
    pseudo-node LSP still contained only those IS neighbors that were
    already present when the DIS election process was commenced.
    
    The fix for the problem schedules an LSP regeneration rather than
    just reoriginating the same LSP with the old content.
    
    Signed-off-by: Fritz Reichmann <fritz@reichmann.nl>

commit 7fd6cd819ff98f0580b745ba637990df9c20ef0f
Author: Peter Szilagyi <peszilagyi@gmail.com>
Date:   Sat Oct 1 17:11:45 2011 +0400

    isisd: fix circuit state machine
    
    isisd has a so-called circuit state machine that takes care about
    the interface state changes, such as initializing, down, up. When
    an interface was brought down by a link failure, the interface
    information was deleted and set to NULL. When the link was restored
    later, the interface was looked up by the old pointer, but since it
    was cleared, it was never found again, resulting in an interface
    never entering the up state again.
    
    Also, the program regularly crashed because of a deleted pointer in
    the same context which was later accessed without any further
    checking.
    
    Signed-off-by: Fritz Reichmann <fritz@reichmann.nl>

commit 4c0cf00afc4340a429a9c4830f638b4593d7c3af
Author: David Lamparter <equinox@diac24.net>
Date:   Mon May 31 12:02:31 2010 +0200

    ospf6d: fix out of bounds write in ospf6_prefix_apply_mask
    
    ospf6_prefix_apply_mask would write one byte beyond the 4/8/12
    bytes allocated for prefixes of length 32/64/96.
    
    based on report and patch by Jon Andersson <jon.andersson@thales.no>
    
    Reported-by: Jon Andersson <jon.andersson@thales.no>
    Signed-off-by: David Lamparter <equinox@diac24.net>

commit 4afa50b393ff1fb34dd577888a05b81dfdced5af
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Jan 24 12:39:58 2012 +0400

    zebra: justify rtadv VTY commands with arguments
    
    ipv6 nd ra-interval
    ipv6 nd ra-lifetime
    ipv6 nd reachable-time
    ipv6 nd home-agent-preference
    ipv6 nd home-agent-lifetime
    ipv6 nd router-preference
    
    Calls to atoi() and atol() are replaced with VTY_GET_INTEGER_RANGE()
    macro, command patterns are clarified and aliases of some commands
    are added for consistency. Other changes are listed below.
    
    * zebra/rtadv.c
      * ipv6_nd_ra_interval_msec(): resolve -Wsign-compare
      * ipv6_nd_ra_interval(): idem
      * rtadv_init(): update to list new aliases
    * doc/ipv6.texi: update to match current implementation

commit 6eb0c5ab1d43bcf9edd4fefd19031f2b96ded728
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Jan 24 11:02:03 2012 +0400

    zebra: freshen RFC references in rtadv
    
    RFC2461 was replaced by RFC4861
    RFC3775 was replaced by RFC6275
    draft-ietf-mip6-mipext-advapi-03 was replaced by RFC4584

commit aca43b656623f38dfa6ea835dacbdfec51d03a67
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sun Jan 8 18:27:12 2012 +0400

    zebra: use prefix_ipv6 in rtadv_prefix
    
    rtadv_prefix.prefix was casted to "struct prefix_ipv6" and had the same
    size, make it exactly this type to make the code a bit cleaner.

commit 6bb1273e83c29b3aeff9584bc8f6272e773294ad
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sun Jan 8 17:46:34 2012 +0400

    zebra: clear host bits of ND RA prefix option
    
    RFC4861 4.6.2. Prefix Information
    
    Prefix         An IP address or a prefix of an IP address.  The
                   Prefix Length field contains the number of valid
                   leading bits in the prefix.  The bits in the prefix
                   after the prefix length are reserved and MUST be
                   initialized to zero by the sender and ignored by
                   the receiver.
    
    * rtadv.c
      * ipv6_nd_prefix(): add missing call to apply_mask_ipv6()
      * no_ipv6_nd_prefix(): idem

commit d660f698427277ce695a5b756f3143c8304274ea
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Dec 30 21:55:49 2011 +0400

    zebra: justify some IPv6 ND RA timers wrt RFC
    
    There was a regression introduced with the previous commit:
    "ipv6 nd home-agent-lifetime 1800000" appeared by default in every
    interface section of running-config, although this  command is
    invalid in this context. Troubleshooting and bugfixing of the issue
    tracked out several bugs in router advertisement procedures, some of
    which are fixed in this commit.
    
    * zebra/interface.c
      * if_zebra_new_hook(): update to treat -1 as "uninitialized"
      * nd_dump_vty(): idem
    * zebra/rtadv.c
      * rtadv_send_packet(): update processing of "router lifetime" field,
        "home agent" option and "home agent lifetime" field to conform to
        RFC6275 better
      * ipv6_nd_ra_interval_msec(): update MaxRtrAdvInterval range check,
        make sure it never exceeds (initialized) AdvDefaultLifetime
      * ipv6_nd_ra_interval(): idem
      * ipv6_nd_ra_lifetime(): update AdvDefaultLifetime range check, make
        sure it never falls below MaxRtrAdvInterval
      * ipv6_nd_homeagent_lifetime(): update HomeAgentLifetime range check
      * no_ipv6_nd_ra_lifetime(): update to treat -1 as "uninitialized"
      * no_ipv6_nd_homeagent_lifetime(): idem
      * rtadv_config_write(): idem

commit 6134b875f39986564aced5e2d7329fcd852f17f4
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Dec 27 18:49:15 2011 +0400

    zebra: fix output of IPv6 ND RA options
    
    The following options could be configured for an interface, but were
    never visible in the config text:
    
    ipv6 nd adv-interval-option
    ipv6 nd home-agent-preference
    ipv6 nd home-agent-lifetime
    ipv6 nd home-agent-config-flag

commit b4e45f67057be22133b6bec88cdf285d5c8214db
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Dec 5 16:35:14 2011 +0400

    fix zebra protocol after MP-BGP changes
    
    The previous commits modified both zebra and bgpd for additional
    SAFI field, but not any other routing daemon, which led to zebra
    daemon crashing with failed assertion.

commit 6eac79a6fed4842e00607c00c445213b51bba377
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Dec 5 13:43:18 2011 +0400

    zebra: fix recent MP-BGP commits for FreeBSD

commit cb32fd690a957819865219a847e3c21a53a0f419
Author: G.Balaji <balajig81@gmail.com>
Date:   Sun Nov 27 20:09:40 2011 +0530

    zebra: Removal of the following warning messages
           warning: too many arguments for format [-Wformat-extra-args]

commit 73bfe0bd9adb8e4dfcee7239e56a425c6d58f4e9
Author: G.Balaji <balajig81@gmail.com>
Date:   Fri Sep 23 22:36:20 2011 +0530

    bgpd: Addition of ipv6 network command in Multicast address family mode.
    
          The patch adds the ipv6 network command in the BGP multicast address
          family mode.

commit f768f367bcd1f37a53c563495176a5a134caf234
Author: G.Balaji <balajig81@gmail.com>
Date:   Sat Nov 26 22:10:39 2011 +0400

    zebra: IPv6 MP-BGP Routes addition and deletion
    
    This patch contains the following:
    1. Addition of IPv6 SAFI_MULTICAST BGP routes into the RTM's RIB.
    2. Deletion of IPv6 SAFI_MULTICAST BGP routes from the RTM's RIB.

commit c7ec179a95c1ed4fcd3d3be3f981c8c20dce534a
Author: G.Balaji <balajig81@gmail.com>
Date:   Sat Nov 26 22:04:05 2011 +0400

    bgpd: IPv6 MP-BGP Routes addition and deletion
    
    This patch contains the following:
    1. Addition of IPv6 SAFI_MULTICAST BGP routes into the BGP Multicast RIB.
    2. Deletion of IPv6 SAFI_MULTICAST BGP routes from the BGP Multicast RIB.

commit cddf391bf6839e9f093cef15508669c1f3f92122
Author: G.Balaji <balajig81@gmail.com>
Date:   Sat Nov 26 21:59:32 2011 +0400

    zebra: IPv4 MP-BGP Routes addition and deletion
    
    This patch contains the following:
    1. Addition of IPv4 SAFI_MULTICAST BGP routes into the RTM's RIB.
    2. Deletion of IPv4 SAFI_MULTICAST BGP routes from the RTM's RIB.

commit 5a616c08ce089e25dc0e8da920727af4d11279bf
Author: G.Balaji <balajig81@gmail.com>
Date:   Sat Nov 26 21:58:42 2011 +0400

    bgpd: IPv4 MP-BGP Routes addition and deletion
    
    This patch contains the following:
    1. Addition of IPv4 SAFI_MULTICAST BGP routes into the BGP Multicast RIB.
    2. Deletion of IPv4 SAFI_MULTICAST BGP routes from the BGP Multicast RIB.

commit 6ae93c058725991df5a9ae35cefec368919b5fea
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Dec 27 10:45:36 2011 +0400

    zebra: include MTU option in RA on request (BZ#665)
    
    This implements a new "ipv6 nd mtu <1-65535>" interface-level command.
    
    * doc/ipv6.texi: add description
    * zebra/rtadv.c
      * rtadv_send_packet(): send option type 5, when configured
      * ipv6_nd_mtu(): new VTY helper
      * no_ipv6_nd_mtu(): ditto
      * rtadv_config_write(): add new option
      * rtadv_init(): list new helpers

commit fc98d16ea77372f4ab4231e8904f8467e8d1ef71
Author: Paul Jakma <paul@quagga.net>
Date:   Mon Jan 9 11:36:23 2012 +0000

    bgpd: reinstate zlookup checks, required for BGP without zebra
    
    * bgp_nexthop.c: The nexthop lookup cache has to return success for queried
      nexthops if bgpd isn't connected to zebra, or else BGP without zebra doesn't
      work.

commit dc00d2bb56aa6a84dd2328133f69db3c3e6d9dc7
Merge: f31d692 708a758
Author: Paul Jakma <paul@quagga.net>
Date:   Sun Jan 8 14:47:06 2012 +0000

    Marker merge for 'RE-0.99.17.6'
    
    This marker merge (i.e. an 'ours' strategy merge) is a placeholder to show
    that all commits in Quagga-RE stable, to its release RE-0.99.17.6 tag, have
    been reviewed and merged into 'master'.

commit f31d6927b2df4340bf9ff1cc9f20d52e168a3766
Author: Paul Jakma <paul@quagga.net>
Date:   Sun Jan 8 14:17:42 2012 +0000

    bgpd: Fix incorrect attribute type code in call to bgp_attr_malformed

commit 83a9a2213a73aeb9796b69327c87e89e2d3327ed
Author: Paul Jakma <paul@quagga.net>
Date:   Sun Jan 8 14:15:03 2012 +0000

    bgpd: Improve flag error messages in bgp_attr_aspath
    
    * bgpd/bgp_attr.c: (bgp_attr_aspath) error message could be misleading,
      clearly log what flag was incorrect.
    
      (Problem noted in "bgpd: fix error message in bgp_attr_aspath()" in
       Quagga-RE)

commit 9ed79b53eb89b8a663eb368ef5f7d47701f231df
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Oct 24 18:45:05 2011 +0400

    lib: use prefix bit length macros

commit ce3cdcfbed2ca65d0d3a12b926dd1103910a6056
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Oct 24 18:17:09 2011 +0400

    ospfd: use IS_LSA_SELF() where appropriate

commit afcb767922509c4d998f1c567e350b9809c148ab
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sun Oct 23 22:32:44 2011 +0400

    bgpd: rewrite attr flag error logging
    
    * bgp_attr.c
      * attr_flag_str: new message list
      * bgp_attr_flags_diagnose(): new function, implements previously added
        error logging in a generic way
      * bgp_attr_origin(): use bgp_attr_flags_diagnose()
      * bgp_attr_nexthop(): ditto
      * bgp_attr_med(): ditto
      * bgp_attr_local_pref(): ditto
      * bgp_attr_atomic(): ditto
      * bgp_attr_originator_id(): ditto
      * bgp_attr_cluster_list(): ditto
      * bgp_mp_reach_parse(): ditto
      * bgp_mp_unreach_parse(): ditto

commit d8bcd9e9c6a1801b52b166fa3873eb468ac3c5cb
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Oct 7 20:43:59 2011 +0400

    doc: "[no] router zebra" does not belong to ospfd

commit 8216f53b73d8eb375615ad4395deace11d1e22d6
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Oct 3 14:08:01 2011 +0400

    ospfd: justify ospf_default_originate_timer()
    
    The function is implemented in ospf_lsa.c, move its "extern" declaration
    to ospf_lsa.h for consistency.

commit 72f062b6ebd7f279dc3f0b66acdb0b718ff42e40
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sun Aug 28 22:38:45 2011 +0400

    ospfd: address more trivial compiler warnings
    
    * ospf_ase.c
      * ospf_ase_complete_direct_routes(): dismiss unused variable

commit 5e1731ac1d8593c1317d5d907eda62b52b17470f
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Aug 20 22:45:58 2011 +0400

    ospf6d: ospf6_lsa_cmd_init() does not exist

commit 0e8032d69961ae196c11ba6ead856084c7acf7c2
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Aug 9 14:42:58 2011 +0400

    bgpd: improve "show ip bgp scan detail"
    
    * bgp_nexthop.c (show_ip_bgp_scan_tables): access proper structure field
      in AF_INET6 case, handle ifindex NH type properly

commit b64bfc1c4a552fc0b4dd024d5f77171ec848a5df
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Aug 8 19:36:44 2011 +0400

    bgpd: dismiss some zlookup checks
    
    bgp_nexthop_onlink(): zlookup is not used here at all
    bgp_nexthop_lookup_ipv6(): rely on the detection performed by "query"
      function (this also changes the fallback value to 0), reorder if-block
    bgp_nexthop_lookup(): idem

commit 318f0d8a7f5e8e87086bbf2a9e7c4b35638951ac
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Aug 5 21:47:08 2011 +0400

    bgpd: add "show ip bgp scan detail" command
    
    * bgp_nexthop.c: (show_ip_bgp_scan) transform into
      show_ip_bgp_scan_tables(), which uses inet_ntop() and can dump
      nexthops on request; (show_ip_bgp_scan_detail_cmd) new function

commit 8e80bdf20f493a71bcf74262ed3aa3a2437f4df6
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Aug 5 18:52:52 2011 +0400

    bgpd: touch nexthop handling code
    
    bgp_nexthop_lookup_ipv6(): declare variables where they are actually
    used, drop no-op initialization (the field is already 0)
    bgp_nexthop_lookup(): ditto
    bgp_nexthop_check_ebgp(): rename to bgp_nexthop_onlink()
    bgp_nexthop_cache_changed(): rename to bgp_nexthop_cache_different()

commit 23be94ea00fadace0007b6ffa6c9107124249e91
Author: Paul Jakma <paul@quagga.net>
Date:   Fri Jan 6 16:07:39 2012 +0000

    lib/if: trivial, fix rarely used if debug function to print everything
    
    * if.c: (if_dump) loop that doesn't do anything, wants to be
      before the zlog of what it's meant to print out so all the connected
      addresses get printed out. Trival: just a debug function

commit f63f06da2e7be6b17c72dd6110aae179f42f3700
Author: Paul Jakma <paul@quagga.net>
Date:   Fri Apr 8 12:44:43 2011 +0100

    general: remove inline qualifiers and move in-header functions to objects
    
    * (general) Move functions in headers into files, to be compiled into
      shared object files. Remove inline qualifier from functions. Let the
      compiler do the work.

commit 708a758fb8013d4b40ae09f81e4c5830279bf10c
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Thu Jan 5 17:46:53 2012 +0400

    version RE-0.99.17.6

commit f382ad5696a2b0d4cc1dd16752638c9c4dc2b2f8
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Dec 27 18:06:45 2011 +0400

    doc: update BGP RFC references

commit 2894cdc344ab15d8a80906d77cfe90378f82f71d
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Dec 27 10:18:47 2011 +0400

    zebra: fix IPv6 RA wrt interface removal (BZ#480)

commit 6dd6c307bf697184a77fd777c0226399de630be5
Author: Matthias Ferdinand <mf@14v.de>
Date:   Mon Dec 26 16:35:30 2011 +0400

    zebra: fix ifindex test condition (BZ#487)
    
    When the same ip address is used on several interfaces,
    and one of them gets deleted (or equivalent: set to down and
    then address removed), rib_delete_ipv[46] will also remove
    the connected route from other interfaces.
    
    rib_delete_ipv[46] is called twice when an interface is
    deleted:
        - for the "ifdown" event
        - for the address removal
    (note: this may be specific to the netlink interface of linux)
    The second call does not find the connected route to that same
    ifindex anymore, but deletes similar connected routes to any
    other ifindex instead.
    
    Reason: the ifindex check is on the same level as the check
    for ZEBRA_ROUTE_CONNECT/NEXTHOP_TYPE_IFINDEX. If everything
    matches except for the ifindex, the "else" part (intended for
    different route types) is executed, thus removing the route
    from the wrong interface.
    
    fix: move ifindex check inside the "then" part of the check
    for ZEBRA_ROUTE_CONNECT/NEXTHOP_TYPE_IFINDEX. Now connected
    routes to other ifindexes will not spill over to the "else"
    part for different route types anymore.

commit b4b315989f9f73bdab4224eb3df80781fa986143
Author: Vyacheslav Trushkin <me@dogonthesun.net>
Date:   Thu Dec 22 18:24:19 2011 +0400

    ospf6d: fix compiler warning messages
    
    * fix disagreement with C99 in zlog_debug calls
    Format specifier in some zlog_debug calls for size_t values
    was changed in order to C99 ('%u' -> '%zu').
    
    * fix -Wsign-compare warnings
    Type of return value of ospf6_packet_max() was changed.

commit 830526a51292e6241f7b6415e070f3780fe18e1e
Author: Ulrich Weber <ulrich.weber@sophos.com>
Date:   Wed Dec 21 02:24:11 2011 +0400

    lib: fix some strtoul() use cases
    
    ...otherwise 4294967295 is not a valid value on 32bit systems

commit 65cd7a4a66145cf666df707781c3e46297158c58
Author: Tom Goff <thomas.goff@boeing.com>
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.
    
    Signed-off-by: Vyacheslav Trushkin <me@dogonthesun.net>

commit 36d3e8d828e18c5c4cd097f659e3984ff02532cb
Author: Tom Goff <thomas.goff@boeing.com>
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.
    
    Signed-off-by: Vyacheslav Trushkin <me@dogonthesun.net>
    
    Conflicts:
    
    	ospf6d/ospf6_lsa.h

commit a809d1cc54a621f4b31397ee5b8b79151baa4bf2
Author: Tom Goff <thomas.goff@boeing.com>
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 651e70d7f419ee7af75113f80e688c0100e9cff5
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Dec 27 18:06:45 2011 +0400

    doc: update BGP RFC references

commit fb5174a27e4122edf849c524861dfcd92d8b19f5
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Dec 27 10:18:47 2011 +0400

    zebra: fix IPv6 RA wrt interface removal (BZ#480)

commit 4f1735fd6ac5d0881bafa9bd421e00645b6c60fd
Author: Matthias Ferdinand <mf@14v.de>
Date:   Mon Dec 26 16:35:30 2011 +0400

    zebra: fix ifindex test condition (BZ#487)
    
    When the same ip address is used on several interfaces,
    and one of them gets deleted (or equivalent: set to down and
    then address removed), rib_delete_ipv[46] will also remove
    the connected route from other interfaces.
    
    rib_delete_ipv[46] is called twice when an interface is
    deleted:
        - for the "ifdown" event
        - for the address removal
    (note: this may be specific to the netlink interface of linux)
    The second call does not find the connected route to that same
    ifindex anymore, but deletes similar connected routes to any
    other ifindex instead.
    
    Reason: the ifindex check is on the same level as the check
    for ZEBRA_ROUTE_CONNECT/NEXTHOP_TYPE_IFINDEX. If everything
    matches except for the ifindex, the "else" part (intended for
    different route types) is executed, thus removing the route
    from the wrong interface.
    
    fix: move ifindex check inside the "then" part of the check
    for ZEBRA_ROUTE_CONNECT/NEXTHOP_TYPE_IFINDEX. Now connected
    routes to other ifindexes will not spill over to the "else"
    part for different route types anymore.

commit cba1fab2d7e22921a03b8b886772daec8b5977c4
Author: Vyacheslav Trushkin <me@dogonthesun.net>
Date:   Thu Dec 22 18:24:19 2011 +0400

    ospf6d: fix compiler warning messages
    
    * fix disagreement with C99 in zlog_debug calls
    Format specifier in some zlog_debug calls for size_t values
    was changed in order to C99 ('%u' -> '%zu').
    
    * fix -Wsign-compare warnings
    Type of return value of ospf6_packet_max() was changed.

commit 664711c1f4cc218073783ff6ce362093debd7b53
Author: Ulrich Weber <ulrich.weber@sophos.com>
Date:   Wed Dec 21 02:24:11 2011 +0400

    lib: fix some strtoul() use cases
    
    ...otherwise 4294967295 is not a valid value on 32bit systems

commit 6fd16207fee6d4d09f29ed7ecf26303a7220e473
Author: Vyacheslav Trushkin <me@dogonthesun.net>
Date:   Tue Dec 20 20:52:31 2011 +0400

    ospf6d: add verifying user's privileges

commit 4e677f52db2276b92bcc201b4379a66a83d45caa
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sun Dec 18 16:27:02 2011 +0400

    ospfd: fix bug in NSSA ABR status check
    
    * ospf_abr.c
      * ospf_abr_nssa_am_elected(): feed "best" instead of "address of best"
        into IPV4_ADDR_CMP(), because "best" is a pointer; also, mean s_addr
        field of the structures to get better typed pointers

commit fe40bfa2e1b913e24d6b8374fd83a19d00ad7c1c
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sun Dec 18 15:40:17 2011 +0400

    lib: address type-punned pointers in prefix_same()
    
    IPV4_ADDR_SAME() wasn't passed the right union member, this could cause
    a bug due to strict-aliasing. IPV6_ADDR_SAME() case got its fix before
    the error could be created by macro upgrade.

commit 733cd9e5792648de50da3c00805aacb51cb27048
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Dec 17 19:39:30 2011 +0400

    bgpd: justify checks for IPv4 class D/E
    
    * lib/prefix.h
      * IPV4_CLASS_DE(): make consistent with counterpart macros
    * bgp_packet.c
      * bgp_open_receive(): test using macro instead of ">="
    * bgp_route.c
      * bgp_update_rsclient(): idem
      * bgp_update_main(): idem

commit de5ccb96023181765c9904ab40e645c397f536d6
Author: Dmitrij Tejblum <tejblum@yandex-team.ru>
Date:   Mon Dec 12 20:30:10 2011 +0400

    ospfd: fix packet reception for FreeBSD 10.
    
    * ospf_packet.c (ospf_recv_packet): FreeBSD, starting from version 10, will not
      subtract the IP header size from ip_len.
    
    This is the patch from FreeBSD's ports/net/quagga/files/patch-ospfd__ospf_packet.c,
    by Boris Kovalenko.

commit 2ea1ab1c30c765cd4703794fcfaf044454fb533c
Author: Vyacheslav Trushkin <me@dogonthesun.net>
Date:   Sun Dec 11 18:48:47 2011 +0400

    zebra: ZEBRA_HELLO and mopping up routes (BZ#448)
    
    ZEBRA_HELLO message is used by routing daemons to inform zebra
    what type of routes daemon will be announcing to zebra. Also
    zebra uses route_type_oaths array to track which daemon announces
    which protocol. Zebra mops up routes if daemon didn't for some
    reason.

commit 2654e43ca2eaa8d93268c9ec85ac2dd968e5fb94
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Dec 16 16:25:02 2011 +0400

    lib: fix type-punning in ip_masklen()
    
    ip_masklen() was likely to return incorrect results after being compiled
    with -fstrict-aliasing (-O2, -O3, -Os)

commit d171bf58ef12ace43d48565e6870722dece1e6ed
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sun Dec 4 23:21:55 2011 +0400

    lib: optimize ip_masklen()
    
    The new implementation makes use of a 64KB mapping table, which makes it
    possible to compute masklen faster and with constant execution time. The
    map also allows for additional version of the function, which can detect
    errors in input argument.
    
    The previous implementation had a variable cost of execution, which
    depended on masklen in a non-linear manner, and at its worst (/31) was
    4 times slower, than the new implementation. The only case of old
    function just slightly outperforming the new one is /0, which is of
    little practical interest.

commit 13351032d1d1632dbaf540cf33b7bebbc748c415
Author: Vyacheslav Trushkin <me@dogonthesun.net>
Date:   Tue Dec 20 20:52:31 2011 +0400

    ospf6d: add verifying user's privileges

commit 85136e904861775bdf6fbbbd4f0080f06e749bcb
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sun Dec 18 16:27:02 2011 +0400

    ospfd: fix bug in NSSA ABR status check
    
    * ospf_abr.c
      * ospf_abr_nssa_am_elected(): feed "best" instead of "address of best"
        into IPV4_ADDR_CMP(), because "best" is a pointer; also, mean s_addr
        field of the structures to get better typed pointers

commit 7eed92b9653b09f064e827e887c29ee11122b4fe
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sun Dec 18 15:40:17 2011 +0400

    lib: address type-punned pointers in prefix_same()
    
    IPV4_ADDR_SAME() wasn't passed the right union member, this could cause
    a bug due to strict-aliasing. IPV6_ADDR_SAME() case got its fix before
    the error could be created by macro upgrade.

commit 45b341f72df6d7dd89133dfd21f43cf1cca74ce5
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Dec 17 19:39:30 2011 +0400

    bgpd: justify checks for IPv4 class D/E
    
    * lib/prefix.h
      * IPV4_CLASS_DE(): make consistent with counterpart macros
    * bgp_packet.c
      * bgp_open_receive(): test using macro instead of ">="
    * bgp_route.c
      * bgp_update_rsclient(): idem
      * bgp_update_main(): idem

commit b31d8fc3016615571f79161b8405aa4033cdfb8d
Author: Dmitrij Tejblum <tejblum@yandex-team.ru>
Date:   Mon Dec 12 20:30:10 2011 +0400

    ospfd: fix packet reception for FreeBSD 10.
    
    * ospf_packet.c (ospf_recv_packet): FreeBSD, starting from version 10, will not
      subtract the IP header size from ip_len.
    
    This is the patch from FreeBSD's ports/net/quagga/files/patch-ospfd__ospf_packet.c,
    by Boris Kovalenko.

commit 89e9f82e0b717c0e39bbffa104f9d9f817c19b46
Author: Vyacheslav Trushkin <me@dogonthesun.net>
Date:   Sun Dec 11 18:48:47 2011 +0400

    zebra: ZEBRA_HELLO and mopping up routes (BZ#448)
    
    ZEBRA_HELLO message is used by routing daemons to inform zebra
    what type of routes daemon will be announcing to zebra. Also
    zebra uses route_type_oaths array to track which daemon announces
    which protocol. Zebra mops up routes if daemon didn't for some
    reason.

commit 07bb964ef11d34235570427cd9bc4111956e31b7
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Wed Dec 7 01:29:49 2011 +0400

    lib: fix compile warnings from set-never-used
    
    The if_dump code had empty loop, that caused set-never-used warning.

commit 94e7cd90feb6af51b7e21d5289dc0edc1ba94a99
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Wed Dec 7 01:35:11 2011 +0400

    Revert "lib: address -Wunused-but-set-variable"
    
    Stephen Hemminger's commits contain all the changes and
    several other warning fixes.
    
    This reverts commit 6947dbebdc91b6272f8107a6e0dd211457438606.

commit 4f5e717413b6627310a245d16f945660c9d60736
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Wed Dec 7 00:55:15 2011 +0400

    lib: fix SMUX compiler warnings
    
    Make progname a string, and cast when calling asn1.
    Remove variable set but never used.

commit 7e7a2d38b2d5d5edd3be7d6754d67c3231ee215e
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Wed Dec 7 00:09:56 2011 +0400

    zebra: fix warnings in forward proc
    
    Check result of fgets(), and don't set variable that is
    never used.

commit 8502229b7ed198d994017e4fd04000d429ca9c8d
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Wed Dec 7 00:04:46 2011 +0400

    bgpd: cleanup privs on termination
    
    When doing valgrind testing, the privledges from zprivs_init() need
    to be cleaned up on exit.

commit a80e20d17597253e74e22aed6b1a85417f667b49
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Tue Dec 6 23:54:17 2011 +0400

    ospfd: remove unused code
    
    The code for nssa_range and other bits that were written but
    never used.

commit 840faaeb00f1617649332dad82952e21e7c7fda7
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Tue Dec 6 14:51:10 2011 +0400

    bgpd: store nexthop info for redistributed IPV6 routes
    
    BGP was ignoring nexthop info for static and other redistributed
    routes for IPv6.  Build extra attribute info to store the nexthop.
    See also:
      https://bugzilla.vyatta.com/show_bug.cgi?id=6073

commit 4fafd3deef6eecab229e8b35189ffbc1f1ce9806
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Tue Dec 6 14:46:42 2011 +0400

    ospfd: avoid redundant lookup in ospf_redistribute_withdraw
    
    The old algorithim looked up every node twice as it withdrew
    the entry. It looks up entry once in redistribute_withdraw, then
    looks it up again info_delete. Use result of first lookup
    to do the free directly.
    
    This may explain the slow performance observed in
     https://bugzilla.vyatta.com/show_bug.cgi?id=4421

commit c17fbd6b1eb38e71aba65c593fa41f2e54f0b896
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Tue Dec 6 14:09:18 2011 +0400

    lib: fix memory leak on connect() failure
    
    Change sockunion_log() to not use strdup(). This fixes a small memory
    leak that occurs on every failed connect(), and is simpler/cleaner.

commit ed269db39a167251f9b7e8e261c7f53902c094f9
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Tue Dec 6 14:04:12 2011 +0400

    lib: call filter delete hook before freeing access list
    
    The delete_hook was being run after calling access list delete function.
    This would cause ospf to dereference a NULL, in ospf_filter_update
    because 'access->name' was already freed.
    
    See also:
        https://bugzilla.vyatta.com/show_bug.cgi?id=7654

commit ce77002e908e8c9eeff780a6a34143af6758a17f
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Dec 16 16:25:02 2011 +0400

    lib: fix type-punning in ip_masklen()
    
    ip_masklen() was likely to return incorrect results after being compiled
    with -fstrict-aliasing (-O2, -O3, -Os)

commit e1fabbb86c2558b336b83de443a4fde4b2a8db90
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sun Dec 4 23:21:55 2011 +0400

    lib: optimize ip_masklen()
    
    The new implementation makes use of a 64KB mapping table, which makes it
    possible to compute masklen faster and with constant execution time. The
    map also allows for additional version of the function, which can detect
    errors in input argument.
    
    The previous implementation had a variable cost of execution, which
    depended on masklen in a non-linear manner, and at its worst (/31) was
    4 times slower, than the new implementation. The only case of old
    function just slightly outperforming the new one is /0, which is of
    little practical interest.

commit 8c7f49d27767886b3706dfca11c1e13abeab7c63
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sun Jan 1 16:33:12 2012 +0400

    Revert "lib: optimize apply_mask_ipv6()"
    
    Experience with IPv4 counterpart of this function suggests, that
    this way of type-punning is likely to cause errors.

commit bf19277c341e6c1b94046c628c0e6d0f0b20d536
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sun Jan 1 16:33:12 2012 +0400

    Revert "lib: optimize apply_mask_ipv6()"
    
    Experience with IPv4 counterpart of this function suggests, that
    this way of type-punning is likely to cause errors.

commit 223da1a912305f2cac6f72c3b480ce103a25d7d6
Author: Jaroslav Fojtik <jafojtik@seznam.cz>
Date:   Sun Dec 11 18:22:16 2011 +0400

    ospfd: more info in LSA checksum warning (BZ#685)

commit 7b0d1c6d31d50fbf74f84cb60daaedd904b35171
Author: Jaroslav Fojtik <jafojtik@seznam.cz>
Date:   Sun Dec 11 18:22:16 2011 +0400

    ospfd: more info in LSA checksum warning (BZ#685)

commit 9206f9ecd5526778bf449bbb12f056d681d3b040
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Sun Dec 18 19:43:40 2011 +0400

    fix set never used warnings
    
    (This patch was modified to leave calls to stream_getl() in place, they
    are necessary for the stream's internal pointer to advance to the
    correct position. -- Denis)
    
    Signed-off-by: Denis Ovsienko <infrastation@yandex.ru>
    
    Fix gcc warnings about varables that are set but never used.
    
    * bgpd/bgp_attr.c
      * cluster_unintern(): ret
      * transit_unintern(): ret
      * bgp_attr_default_intern(): attre
      * bgp_mp_reach_parse(): rd_high, rd_low
    * bgpd/bgp_route.c
      * bgp_announce_check_rsclient(): bgp
    * bgpd/bgp_zebra.c
      * zebra_read_ipv4(): ifindex
      * zebra_read_ipv6(): ifindex
    * bgpd/bgpd.c
      * bgp_config_write_peer(): filter
    * lib/distribute.c
      * distribute_list_all(): dist
      * distribute_list(): dist
      * distribute_list_prefix_all(): dist
      * distribute_list_prefix(): dist
    * lib/if_rmap.c
      * if_rmap(): if_rmap
    * lib/vty.c
      * vty_accept(): vty
    * lib/zclient.c
      * zclient_read(): ret
    * zebra/irdp_interface.c
      * if_group(): zi
    * zebra/rt_netlink.c
      * kernel_read(): ret, sock

commit b48cebbba0dc01ad7d1fbd7cbcc39a11e1ae972d
Author: Tom Goff <thomas.goff@boeing.com>
Date:   Wed Dec 14 14:11:29 2011 +0400

    ospf6d: always remove the result of a previous SPF calculation
    
    This is needed to avoid stale routes in some cases; the regression was
    introduced by commit 1d19234e79c77a7d55194b513f2a77c6a691bc2c.
    
    * ospf6_spf.c: (ospf6_spf_calculation) Call ospf6_spf_table_finish()
      before possibly returning if no router-LSA is found for the root of
      the SPF tree.

commit bb915f5fa60de1a5b7e6089fcfc680281a590463
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Dec 13 21:11:39 2011 +0400

    bgpd: fix regression in ORF procesing (BZ#688)
    
    This issue has been pointed out by Lou Berger and Tim Browski.
    
    * bgp_packet.c
      * bgp_route_refresh_receive(): restore if() condition, which was
        broken by commit fdbc8e77c88f751924299d0bc752371d5cc31116

commit 32ca97392057d279eeddd1aef36c1836880e8b89
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Oct 18 22:02:52 2011 +0400

    lib: optimize apply_mask_ipv6()

commit caff7905e2d28e4d5e25c0a4ffacbb22e28a7121
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Oct 18 18:33:53 2011 +0400

    lib: optimize apply_mask_ipv4()

commit 21f569e37d62e3c1de6e41a4e5667c0e28279bb8
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Oct 17 21:11:10 2011 +0400

    lib: make masklen2ip6() safer and faster

commit 051954f574b9c26458518a7029aeed118f0da620
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Oct 11 15:17:45 2011 +0400

    lib: fix endianness of masklen2ip()

commit 9663386f16e6285a322747514527fdf1d19788e4
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Oct 8 18:15:21 2011 +0400

    lib: make masklen2ip() safer and faster

commit 5031ed1347191ee3e0767cfa44e7047c36d37bd1
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Oct 14 21:59:58 2011 +0400

    ospf6d: decode message type with LOOKUP()
    
    * ospf6_message.h
      * OSPF6_MESSAGE_TYPE_CANONICAL(): dismiss
      * OSPF6_MESSAGE_TYPE_NAME(): dismiss
    * ospf6_message.c
      * ospf6_message_type_str: rewrite as a message list, add max value
      * ospf6_packet_examin(): update to use LOOKUP()
      * ospf6_receive(): idem
      * ospf6_send(): idem

commit fa0796661c9cd68f20882ceb16e9d304a12a6acd
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Oct 8 17:22:45 2011 +0400

    ospf6d: make some old sizing checks assertions
    
    As long as ospf6_packet_examin() is now the single checkpoint for
    received packets, most of the old checks performed elsewhere can
    be converted into assert() constructs. Malformed input data at
    respective points can be attributed solely to a programming error,
    not a malformed packet.
    
    * ospf6_message.c
      * ospf6_hello_print()
      * ospf6_dbdesc_print()
      * ospf6_lsreq_print()
      * ospf6_lsupdate_print()
      * ospf6_lsack_print()
      * ospf6_hello_recv()
      * ospf6_dbdesc_recv_master()
      * ospf6_dbdesc_recv_slave()
      * ospf6_lsreq_recv()
      * ospf6_lsupdate_recv()
      * ospf6_lsupdate_recv()
      * ospf6_lsack_recv()
      * ospf6_receive()

commit 0ead5c183c36b36c8545ef8b04b778f5238a5db9
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Oct 14 20:56:19 2011 +0400

    lib: spelling

commit ca0512692156d5bbb902523d2f123fc89dbec1ab
Author: David Lamparter <equinox@diac24.net>
Date:   Sun Oct 4 16:21:49 2009 +0200

    lib: add sockopt helper for setting IPV6_V6ONLY and use it
    
    getaddrinfo returns a list of socket parameters for listening. it
    will contain both IPv4 and IPv6 listening sockets. unless we use
    IPV6_V6ONLY on the IPv6 ones, only the socket listed first will
    work. if the IPv4 one came first, the IPv6 one would get an
    "Address in use" error.
    
    this functionality was already present for bgpd and its listening
    sockets. as it is needed for vtys as well, make it a common helper.
    
    Conflicts:
    
    	lib/sockunion.c

commit e0ca5fde7be5b5ce90dae78c2477e8245aecb8e9
Author: David Lamparter <equinox@diac24.net>
Date:   Wed Sep 16 01:52:42 2009 +0200

    lib: put route_types.txt to real use
    
    this replaces most occurences of routing protocol lists by preprocessor
    defines from route_types.h. the latter is autogenerated from
    route_types.txt by a perl script (previously awk). adding a routing
    protocol now is mostly a matter of changing route_types.txt and log.c.
    
    Conflicts:
    
    	lib/route_types.awk

commit ebf08631cad8a420fc6bfb7c45af5496dc11023e
Author: David Lamparter <equinox@diac24.net>
Date:   Thu Aug 27 00:27:40 2009 +0200

    zebra: fix redistribution of new protocols
    
    redistribute is currently limited to "known" protocols. there is no
    reason for this limitation, so, remove it.

commit 7052f22880f439a6ee691dd9436e1bda932f7b3b
Author: David Lamparter <equinox@diac24.net>
Date:   Thu Aug 27 00:28:28 2009 +0200

    rib: default distance value for new protocols (v2)
    
    adding protocols and forgetting to update zebra_rib.c currently causes
    a beyond end of array access for the default distance value. fix by
    making 150 the default distance for unknown routing protocols.
    
    150 is higher than all other IGPs but lower than iBGP (200)

commit ca9f342c2c35523b7bb34631b4f75cad1232355b
Author: David Lamparter <equinox@diac24.net>
Date:   Wed Sep 16 02:11:00 2009 +0200

    build: fixup autoconf for cross-compiling (to OpenWRT)
    
    MALLOC/REALLOC aren't used properly (no rpl_malloc), remove them
    
    while at it, infer some sane ipforwarding method from the OS value.
    (v2 on that, "==" is not a proper operator for standard "test")

commit a34eb3689ca0bb88e2ae7b95b01eb8887048ce15
Author: Tom Goff <thomas.goff@boeing.com>
Date:   Wed Nov 25 20:36:06 2009 +0000

    zebra: set the interface link-layer socket address
    
    * kernel_socket.c: (ifm_read) The reorganization from commit
      6fe70d1b35c189cb1e488b2c26551ba7baac6148 removed setting the
      interface link-layer socket address structure on routing socket
      platforms.  This restores saving the link-layer information because
      it might be used elsewhere: rtm_write() when no gateway is given,
      if_dump_vty() and rtadv_send_packet().

commit 85a2ebf2a14d8d7b40fd25b1217f953dbf69f065
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Dec 5 19:36:06 2011 +0400

    zebra: spelling

commit 05e54ee3df973194f2a00e3ea0b1da7bebc71fd6
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Dec 3 17:45:17 2011 +0400

    build: delete .cvsignore files

commit ad8d4802a3078de694539fa9bae12322fc82042f
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Dec 2 20:02:40 2011 +0400

    ospfd: spelling

commit 3414d03545205eda9fb47890e01b780485a613c6
Author: Vyacheslav Trushkin <me@dogonthesun.net>
Date:   Wed Nov 30 21:03:44 2011 +0400

    lib: clearing zclient.c for some cases of building
    
    lib/zclient.c: using of HAVE_TCP_ZEBRA in zclient_socket_*
    definitions extended by else clause.

commit b51146856e660bcec723f535c17dc1c38b2f6efc
Author: Vyacheslav Trushkin <me@dogonthesun.net>
Date:   Fri Nov 25 18:51:48 2011 +0400

    quagga: option "-z" ("--socket <path>") added
    
    All daemons modified to support custom path to zserv
    socket.
    
    lib: generalize a zclient connection
    
    zclient_socket_connect added. zclient_socket and
    zclient_socket_un were hidden under static expression.
    "zclient_serv_path_set" modified.

commit 2f658673fa477b58ed38caf94c156c95948de382
Author: Vyacheslav Trushkin <me@dogonthesun.net>
Date:   Fri Nov 25 17:56:21 2011 +0400

    isisd: indent longopts array

commit 1add115a9cfd3a2ee33a61731008b6ece90ec61d
Author: Vyacheslav Trushkin <me@dogonthesun.net>
Date:   Tue Nov 22 20:15:10 2011 +0400

    bgpd: implement 'match probability' in route-maps
    
    New clause 'match probability <percentage value>'
    was added in route-maps (bgpd/bgp_routemap.c modified).

commit 9a9446eabb8f153251d6d93d225a68ca44b436ac
Author: Vyacheslav Trushkin <me@dogonthesun.net>
Date:   Mon Nov 21 20:26:39 2011 +0400

    ospf6d: justify multicast group management
    
    * ospf6_network.[ch]
      * ospf6_sso(): new function supersedes ospf6_join_allspfrouters(),
        ospf6_leave_allspfrouters(), ospf6_join_alldrouters() and
        ospf6_leave_alldrouters()
    * ospf6_interface.c
      * ospf6_interface_state_change(): update respectively
      * interface_up(): ditto
      * interface_down(): ditto

commit 6989880ad7699cb6bf0cfc0fbb95da51430652cf
Author: Ulrich Weber <ulrich.weber@sophos.com>
Date:   Thu Nov 17 21:35:08 2011 +0400

    ripngd: limit max of "timers basic" to 65535 as documented
    
    and use VTY_GET_INTEGER_RANGE instead of calling strtoul

commit bde12e3fd5e498a266e813a5751c1b2d21e46ca5
Author: Ulrich Weber <ulrich.weber@sophos.com>
Date:   Wed Nov 16 19:32:12 2011 +0400

    bgp: use VTY_GET_INTEGER_RANGE() in bgp_clear()
    
    Second patch replaces "VTY_GET_LONG ("AS", as_ul, arg);"
    by "VTY_GET_INTEGER_RANGE ("AS", as, arg, 1, BGP_AS4_MAX);"
    as done in all other code, which parses AS numbers.

commit 42a7debf3c76b8001ce820e104a29d2f693c7cb7
Author: Vyacheslav Trushkin <me@dogonthesun.net>
Date:   Wed Nov 16 14:22:03 2011 +0400

    ospf6d: implement 'match interface' for route-maps
    
    ospf6_routemap_rule_match_interface* was imported from ospfd
    daemon with minor changes. new CLI options defined.
    
    `ospf6_routemap_rule_match_interface' was changed to support
    IPv6 (ospfv3) route's external information.

commit 6258c2ae35ec40c07e87c010423e6b93ac39bd66
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Dec 5 19:36:06 2011 +0400

    zebra: spelling

commit 1b960ed436a5515747ff4f4d15b1389e43f3b63c
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Dec 3 17:45:17 2011 +0400

    build: delete .cvsignore files

commit 42140fb1b1f88310565c6b1d36645aa15c58424d
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Dec 2 20:02:40 2011 +0400

    ospfd: spelling

commit d5cd9a9758932dc644eb8b3f0eff3d2e17a7d677
Author: Vyacheslav Trushkin <me@dogonthesun.net>
Date:   Wed Nov 30 21:03:44 2011 +0400

    lib: clearing zclient.c for some cases of building
    
    lib/zclient.c: using of HAVE_TCP_ZEBRA in zclient_socket_*
    definitions extended by else clause.

commit 271ee735ed3a42a1fe52f6401ddf72bd5d3e4f10
Author: Vyacheslav Trushkin <me@dogonthesun.net>
Date:   Fri Nov 25 18:51:48 2011 +0400

    quagga: option "-z" ("--socket <path>") added
    
    All daemons modified to support custom path to zserv
    socket.
    
    lib: generalize a zclient connection
    
    zclient_socket_connect added. zclient_socket and
    zclient_socket_un were hidden under static expression.
    "zclient_serv_path_set" modified.

commit 844ee4a8acf1a7b34e6a4a0bdf701496302a7416
Author: Vyacheslav Trushkin <me@dogonthesun.net>
Date:   Fri Nov 25 17:56:21 2011 +0400

    isisd: indent longopts array

commit 1c8afb7c20600165f882d87d7564c6c982c65665
Author: Vyacheslav Trushkin <me@dogonthesun.net>
Date:   Tue Nov 22 20:15:10 2011 +0400

    bgpd: implement 'match probability' in route-maps
    
    New clause 'match probability <percentage value>'
    was added in route-maps (bgpd/bgp_routemap.c modified).

commit fd31c50bc30d002e334c9764293f1c4f04a99515
Author: Vyacheslav Trushkin <me@dogonthesun.net>
Date:   Mon Nov 21 20:26:39 2011 +0400

    ospf6d: justify multicast group management
    
    * ospf6_network.[ch]
      * ospf6_sso(): new function supersedes ospf6_join_allspfrouters(),
        ospf6_leave_allspfrouters(), ospf6_join_alldrouters() and
        ospf6_leave_alldrouters()
    * ospf6_interface.c
      * ospf6_interface_state_change(): update respectively
      * interface_up(): ditto
      * interface_down(): ditto

commit c0cad4368858d24caedd7e7d2bb776b6d4dd6eb3
Author: Ulrich Weber <ulrich.weber@sophos.com>
Date:   Thu Nov 17 21:35:08 2011 +0400

    ripngd: limit max of "timers basic" to 65535 as documented
    
    and use VTY_GET_INTEGER_RANGE instead of calling strtoul

commit 5009160c748b19a543a2f4fbd01d9de69ca71955
Author: Ulrich Weber <ulrich.weber@sophos.com>
Date:   Wed Nov 16 19:32:12 2011 +0400

    bgp: use VTY_GET_INTEGER_RANGE() in bgp_clear()
    
    Second patch replaces "VTY_GET_LONG ("AS", as_ul, arg);"
    by "VTY_GET_INTEGER_RANGE ("AS", as, arg, 1, BGP_AS4_MAX);"
    as done in all other code, which parses AS numbers.

commit 1ce08787910a60635d9b5c09617aaabd55ee00ac
Author: Vyacheslav Trushkin <me@dogonthesun.net>
Date:   Wed Nov 16 14:22:03 2011 +0400

    ospf6d: implement 'match interface' for route-maps
    
    ospf6_routemap_rule_match_interface* was imported from ospfd
    daemon with minor changes. new CLI options defined.
    
    `ospf6_routemap_rule_match_interface' was changed to support
    IPv6 (ospfv3) route's external information.

commit 004b1238a21b9b6c28640f37213dc85f0da39abe
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Wed Dec 7 00:55:15 2011 +0400

    lib: fix SMUX compiler warnings
    
    Make progname a string, and cast when calling asn1.
    Remove variable set but never used.

commit 3c14ebb0810e73ad899ae45e5fb2758153057e0e
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Wed Dec 7 01:29:49 2011 +0400

    lib: fix compile warnings from set-never-used
    
    The if_dump code had empty loop, that caused set-never-used warning.

commit c143c38bc707194d52aec544e62e5485c6c4bc08
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Wed Dec 7 01:25:46 2011 +0400

    ospf6d: fix compile warning from falling off end of main
    
    ospf6 main always calls ospf6_exit() which always calls exit.
    Use attributes to tell GCC that this is ok.

commit d7a083844db63b3dda412c755ce69bf13f41961f
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Wed Dec 7 00:09:56 2011 +0400

    zebra: fix warnings in forward proc
    
    Check result of fgets(), and don't set variable that is
    never used.

commit 04d5e24d7425a52f13abcb6d2a30aa6246d837e7
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Wed Dec 7 00:04:46 2011 +0400

    bgpd: cleanup privs on termination
    
    When doing valgrind testing, the privledges from zprivs_init() need
    to be cleaned up on exit.

commit 46901400a3401a4a6caa40435241b4546bb2a5c5
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Thu Dec 10 17:19:09 2009 +0000

    vty_serv_sock_family unused
    
    If the vty_serv_sock_addrinfo is being used, then vty_serv_sock_family
    is unsed. Fix by adjusting ifdef/else/endif

commit 075e12f57d6c0b115cd177c7b244d9810460e3ff
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Tue Dec 6 23:54:17 2011 +0400

    ospfd: remove unused code
    
    The code for nssa_range and other bits that were written but
    never used.

commit f04a80a5d209dbb54f6fec5d0149b7c0e489d29e
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Tue Dec 6 14:51:10 2011 +0400

    bgpd: store nexthop info for redistributed IPV6 routes
    
    BGP was ignoring nexthop info for static and other redistributed
    routes for IPv6.  Build extra attribute info to store the nexthop.
    See also:
      https://bugzilla.vyatta.com/show_bug.cgi?id=6073

commit fb01f87f4f50744206222343a780721af19fe56c
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Tue Dec 6 14:46:42 2011 +0400

    ospfd: avoid redundant lookup in ospf_redistribute_withdraw
    
    The old algorithim looked up every node twice as it withdrew
    the entry. It looks up entry once in redistribute_withdraw, then
    looks it up again info_delete. Use result of first lookup
    to do the free directly.
    
    This may explain the slow performance observed in
     https://bugzilla.vyatta.com/show_bug.cgi?id=4421

commit b24b19f719fdd9c3d61a0c93552cd64d832d964c
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Tue Dec 6 14:09:18 2011 +0400

    lib: fix memory leak on connect() failure
    
    Change sockunion_log() to not use strdup(). This fixes a small memory
    leak that occurs on every failed connect(), and is simpler/cleaner.

commit 6a2e0f36b103386e57dbe3a6ee4716e809111198
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Tue Dec 6 14:04:12 2011 +0400

    lib: call filter delete hook before freeing access list
    
    The delete_hook was being run after calling access list delete function.
    This would cause ospf to dereference a NULL, in ospf_filter_update
    because 'access->name' was already freed.
    
    See also:
        https://bugzilla.vyatta.com/show_bug.cgi?id=7654

commit ce0af6ff5a4f200035ed4134da72a67f49a21dd6
Author: Oleg A. Arkhangelsky <sysoleg@yandex.ru>
Date:   Sat Dec 3 15:18:19 2011 +0400

    bgpd: fix memory leak for extra attributes
    
    this fixes commit b881c7074bb698aeb1b099175b325734fc6e44d2

commit 1ffe5e794c3cd4a2ef84cac937d377de89b721f8
Author: Roderick Schertler <roderick@argon.org>
Date:   Wed Nov 16 15:03:14 2011 +0400

    doc: rectify "match ip next-hop" in ripd (BZ#537)

commit 2fbd6f5a62f654c59aec5e1707c859d6ed79c6b0
Author: David Lamparter <equinox@diac24.net>
Date:   Tue Feb 2 20:20:35 2010 +0100

    bgpd: remove unused function bgp_bind_address
    
    bgp_bind_address is replaced with sockunion_bind.

commit 1727d2e2b939c8670d0f0e0d1a0e5eb0a8be2135
Author: David Lamparter <equinox@diac24.net>
Date:   Tue Feb 2 20:18:23 2010 +0100

    bgpd: fix update-source for IPv6 (BZ#548)
    
    if update-source was given as interface name, bgpd was unconditionally
    trying to bind to an IPv4 address from that interface.
    
    change function to find the best-matching (number of address bits)
    same-family address on the interface.

commit 17e52061bacec93e84324b23382e5ec61e1f16d0
Author: David Lamparter <equinox@diac24.net>
Date:   Tue Feb 2 20:16:35 2010 +0100

    lib: prefix2sockunion, prefix_common_bits helper functions
    
    prefix2sockunion converts a struct prefix* to a union sockunion *;
    prefix_common_bits counts the number of common bits in the prefix's
    address part.

commit a994c7b6bb0976e86756f39b89200d711a1d39a3
Author: Roderick Schertler <roderick@argon.org>
Date:   Wed Nov 16 15:03:14 2011 +0400

    doc: rectify "match ip next-hop" in ripd (BZ#537)

commit 9ebf400a1c21117ff40cb78f0b023bf1cb4e9f6c
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Thu Oct 27 20:04:08 2011 +0400

    bgpd: fix AS4_PATH attr flag check (BZ#676)
    
    AS_PATH is a well-known, transitive path attribute and cannot be flagged
    as "Partial". This is what commit
    77a20b8af32c926176f8492a086d9e4ec670496b implemented, but it did not
    account, that bgp_attr_aspath() is also used to process AS4_PATH, which
    is an optional, transitive path attribute and as such may be flagged as
    "Partial". This change justfies the test condition.

commit 0f572cde26208254f779933f0e8ec953ad2a3a8a
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Wed Oct 26 19:34:30 2011 +0400

    bgpd: fix 2 more cases of length error reporting
    
    * bgp_attr.c (bgp_attr_originator_id, bgp_attr_cluster_list): use
      bgp_notify_send_with_data()

commit d3962ba7c75db6aeb926bf909e643cef12a843ef
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Oct 24 18:45:05 2011 +0400

    lib: use prefix bit length macros

commit f6247bf278861c41a5cb61639176d5ed1301e81e
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Oct 24 18:17:09 2011 +0400

    ospfd: use IS_LSA_SELF() where appropriate

commit 26f5e782ef43dbe4496d795d70c490b42da31c6a
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sun Oct 23 22:32:44 2011 +0400

    bgpd: rewrite attr flag error logging
    
    * bgp_attr.c
      * attr_flag_str: new message list
      * bgp_attr_flags_diagnose(): new function, implements previously added
        error logging in a generic way
      * bgp_attr_origin(): use bgp_attr_flags_diagnose()
      * bgp_attr_nexthop(): ditto
      * bgp_attr_med(): ditto
      * bgp_attr_local_pref(): ditto
      * bgp_attr_atomic(): ditto
      * bgp_attr_originator_id(): ditto
      * bgp_attr_cluster_list(): ditto
      * bgp_mp_reach_parse(): ditto
      * bgp_mp_unreach_parse(): ditto

commit 5c8d16fd853c29856e45709424701c93ef626f2f
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Oct 22 22:18:55 2011 +0400

    ospfd: spelling/format fix

commit 12da1a188a5e5bfdfecb98c48ecca48ed38e2d89
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Oct 22 22:11:31 2011 +0400

    bgpd: check AGGREGATOR attr flags (BZ#678)
    
    * bgp_attr.c
      * bgp_attr_aggregator(): check Optional/Transitive flag bits

commit c6cb2d9151fc14f9c2b1b7618695874cc8d97286
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Oct 18 22:02:52 2011 +0400

    lib: optimize apply_mask_ipv6()

commit ed7a62efea6d957b0c5f60ec52644bba062f6c29
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Oct 18 18:33:53 2011 +0400

    lib: optimize apply_mask_ipv4()

commit 3062d2dab6e8bea9003d67a05d1e018a927d6f1d
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Oct 18 15:27:21 2011 +0400

    bgpd: fix error message in bgp_attr_aspath()

commit 49ff274c29eaa45ae85766e62dab32faea7f32b8
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Oct 17 21:11:10 2011 +0400

    lib: make masklen2ip6() safer and faster

commit ba1a944aa7adffd9194ef0ad61649fe3e02b0f38
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Thu Dec 10 17:19:09 2009 +0000

    vty_serv_sock_family unused
    
    If the vty_serv_sock_addrinfo is being used, then vty_serv_sock_family
    is unsed. Fix by adjusting ifdef/else/endif

commit ed72156c9d4512217f5c80b8e20e4de024246502
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Oct 14 21:59:58 2011 +0400

    ospf6d: decode message type with LOOKUP()
    
    * ospf6_message.h
      * OSPF6_MESSAGE_TYPE_CANONICAL(): dismiss
      * OSPF6_MESSAGE_TYPE_NAME(): dismiss
    * ospf6_message.c
      * ospf6_message_type_str: rewrite as a message list, add max value
      * ospf6_packet_examin(): update to use LOOKUP()
      * ospf6_receive(): idem
      * ospf6_send(): idem

commit 8fee927850e9011b3bf46f2a8a0d54521d00a807
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Oct 14 20:59:43 2011 +0400

    lib: address -Wunused-but-set-variable
    
    * if.c
      * if_dump(): 'node', 'c'
    * distribute.c
      * distribute_list_all(): 'dist'
      * distribute_list(): 'dist'
      * districute_list_prefix_all(): 'dist'
    * if_rmap.c
      * if_rmap(): 'if_rmap'
    * vty.c
      * vty_accept(): 'vty'

commit bb6ef3e270f9ae53ac46461962500cf94ecdff08
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Oct 14 20:56:19 2011 +0400

    lib: spelling

commit 7d3d2de4657a080275a705fbf3bd21a484cb3e4b
Author: David Lamparter <equinox@diac24.net>
Date:   Sun Oct 4 16:21:49 2009 +0200

    lib: add sockopt helper for setting IPV6_V6ONLY and use it
    
    getaddrinfo returns a list of socket parameters for listening. it
    will contain both IPv4 and IPv6 listening sockets. unless we use
    IPV6_V6ONLY on the IPv6 ones, only the socket listed first will
    work. if the IPv4 one came first, the IPv6 one would get an
    "Address in use" error.
    
    this functionality was already present for bgpd and its listening
    sockets. as it is needed for vtys as well, make it a common helper.

commit daca2cf463496e5844812ea13a4fafefafe4853f
Author: David Lamparter <equinox@diac24.net>
Date:   Wed Sep 16 01:52:42 2009 +0200

    lib: put route_types.txt to real use
    
    this replaces most occurences of routing protocol lists by preprocessor
    defines from route_types.h. the latter is autogenerated from
    route_types.txt by a perl script (previously awk). adding a routing
    protocol now is mostly a matter of changing route_types.txt and log.c.
    
    Conflicts:
    
    	lib/route_types.awk

commit 6864a990771c66384a66cd6e7db443529460b0a6
Author: David Lamparter <equinox@diac24.net>
Date:   Thu Aug 27 00:27:40 2009 +0200

    zebra: fix redistribution of new protocols
    
    redistribute is currently limited to "known" protocols. there is no
    reason for this limitation, so, remove it.

commit 87254a3f48874d7bbb127a118781d8ad1f017178
Author: David Lamparter <equinox@diac24.net>
Date:   Thu Aug 27 00:28:28 2009 +0200

    rib: default distance value for new protocols (v2)
    
    adding protocols and forgetting to update zebra_rib.c currently causes
    a beyond end of array access for the default distance value. fix by
    making 150 the default distance for unknown routing protocols.
    
    150 is higher than all other IGPs but lower than iBGP (200)

commit 3480674a41cba545a1f546e012939e286909b10c
Author: David Lamparter <equinox@diac24.net>
Date:   Wed Sep 16 02:11:00 2009 +0200

    build: fixup autoconf for cross-compiling (to OpenWRT)
    
    MALLOC/REALLOC aren't used properly (no rpl_malloc), remove them
    
    while at it, infer some sane ipforwarding method from the OS value.
    (v2 on that, "==" is not a proper operator for standard "test")

commit 337cdd69d9d5b5ef842d1be2e67126fdc6840181
Author: Tom Goff <thomas.goff@boeing.com>
Date:   Wed Nov 25 20:36:06 2009 +0000

    zebra: set the interface link-layer socket address
    
    * kernel_socket.c: (ifm_read) The reorganization from commit
      6fe70d1b35c189cb1e488b2c26551ba7baac6148 removed setting the
      interface link-layer socket address structure on routing socket
      platforms.  This restores saving the link-layer information because
      it might be used elsewhere: rtm_write() when no gateway is given,
      if_dump_vty() and rtadv_send_packet().

commit d9ddd5731d31a7bc1f0a39b7e4b0944dec7a2bdc
Author: David Lamparter <equinox@diac24.net>
Date:   Tue Feb 2 20:20:35 2010 +0100

    bgpd: remove unused function bgp_bind_address
    
    bgp_bind_address is replaced with sockunion_bind.

commit 5d3c53b9995dd9cbfa08edfcb03a2dcb47b170f4
Author: David Lamparter <equinox@diac24.net>
Date:   Tue Feb 2 20:18:23 2010 +0100

    bgpd: fix update-source for IPv6 (BZ#548)
    
    if update-source was given as interface name, bgpd was unconditionally
    trying to bind to an IPv4 address from that interface.
    
    change function to find the best-matching (number of address bits)
    same-family address on the interface.

commit 188506f4c618626e3da2c1e657100315f49664ee
Author: David Lamparter <equinox@diac24.net>
Date:   Tue Feb 2 20:16:35 2010 +0100

    lib: prefix2sockunion, prefix_common_bits helper functions
    
    prefix2sockunion converts a struct prefix* to a union sockunion *;
    prefix_common_bits counts the number of common bits in the prefix's
    address part.

commit 681b84e8f50a09ff871d9e6536e8d8afb115ce13
Author: Dmitrij Tejblum <tejblum@yandex-team.ru>
Date:   Tue Jul 12 17:53:33 2011 +0400

    ospf6d: check MTU with message header size in mind
    
    * ospf6_message.c: (ospf6_packet_max): new function, return maximum IPv6
      payload on an interface; (ospf6_hello_send, ospf6_dbdesc_send,
      ospf6_dbdesc_send_newone, ospf6_lsreq_send, ospf6_lsupdate_send_neighbor,
      ospf6_lsupdate_send_interface, ospf6_lsack_send_neighbor,
      ospf6_lsack_send_interface): compare message size with the maximum
      payload instead of the MTU.

commit 3cf1288bfd855e339fe2283c79a3ef3746e61737
Author: Dylan Hall <dylan@deedums.com>
Date:   Thu Oct 27 15:28:17 2011 +0400

    bgpd: fix "nexthop-local unchanged" (BZ#350)

commit 8b1eb59bb954af49455a97dbabf65321001d0225
Author: Dylan Hall <dylan@deedums.com>
Date:   Thu Oct 27 15:28:17 2011 +0400

    bgpd: fix "nexthop-local unchanged" (BZ#350)

commit 90d181bd1a7e03d41df3cb2f51530ab47d818caa
Author: Chris Luke <chrisy@flirble.org>
Date:   Tue Oct 18 17:26:51 2011 +0400

    bgpd: justify capabilities for TOS setting
    
    To set the TOS bits on TCP connections, platforms that restrict
    capabilities need the priv level to be raised before the sockopt
    is set, and this requires the ZCAP_NET_ADMIN priv.
    
    * bgp_main.c: update _caps_p to include ZCAP_NET_ADMIN
    * bgp_network.c
      * bgp_connect(): request ZPRIVS_RAISE/ZPRIVS_LOWER
      * bgp_listener(): request ZPRIVS_RAISE earlier

commit 70e3ca2ccedca2cae58bd91c968714cad0f9d5d6
Author: Thomas Ries <tries@gmx.net>
Date:   Thu Oct 27 17:43:38 2011 +0400

    ospfd: improve fix to CVE-2011-3326 (BZ#586)
    
    Make ospf_flood() propagate error returned by ospf_lsa_install() further
    to properly discard the malformed LSA, not just prevent the immediate
    crash.

commit 5c88f19d5b166c6afa8a9b8501badb785afa553b
Author: Chris Luke <chrisy@flirble.org>
Date:   Tue Oct 18 17:26:51 2011 +0400

    bgpd: justify capabilities for TOS setting
    
    To set the TOS bits on TCP connections, platforms that restrict
    capabilities need the priv level to be raised before the sockopt
    is set, and this requires the ZCAP_NET_ADMIN priv.
    
    * bgp_main.c: update _caps_p to include ZCAP_NET_ADMIN
    * bgp_network.c
      * bgp_connect(): request ZPRIVS_RAISE/ZPRIVS_LOWER
      * bgp_listener(): request ZPRIVS_RAISE earlier

commit 4de148e5d6f6f7885b2c0952a236a3bc3ec36250
Author: Thomas Ries <tries@gmx.net>
Date:   Thu Oct 27 17:43:38 2011 +0400

    ospfd: improve fix to CVE-2011-3326 (BZ#586)
    
    Make ospf_flood() propagate error returned by ospf_lsa_install() further
    to properly discard the malformed LSA, not just prevent the immediate
    crash.

commit 1758dbaa3b69bd6e95fb501c40f044f751557e76
Author: Sergey Y. Afonin <asy@altlinux.ru>
Date:   Thu Oct 27 17:01:11 2011 +0400

    bgpd: revised fix to --dryrun (BZ#622)

commit f85bab1482b0db4cfdf90a2fd50f42d6dae96b42
Author: Sergey Y. Afonin <asy@altlinux.ru>
Date:   Thu Oct 27 17:01:11 2011 +0400

    bgpd: revised fix to --dryrun (BZ#622)

commit 267551879e57a5c590f9e12b3a7d6985b28b3dac
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Wed Oct 26 19:34:30 2011 +0400

    bgpd: fix 2 more cases of length error reporting
    
    * bgp_attr.c (bgp_attr_originator_id, bgp_attr_cluster_list): provide
      required arguments to bgp_attr_malformed()

commit b4cd2421518be7e18046e974e25b9bf4cf769bd2
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Oct 22 22:32:26 2011 +0400

    bgpd: check AGGREGATOR attr flags (BZ#678)
    
    * bgp_attr.c
      * bgp_attr_aggregator(): check Optional/Transitive flag bits

commit bbb04bf3bb03be27fbf17b6b3ee903b168201cf0
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Oct 18 14:20:04 2011 +0400

    bgpd: fix more regressions in attr flag checks
    
    Commit 05a4936b713b9882171d0f7fb20b8439df23939e fixed some of the
    attributes involved, but not all. This commit should do it.
    
    * bgp_attr.c
      * bgp_attr_originator_id()
      * bgp_attr_cluster_list()
      * bgp_mp_reach_parse()
      * bgp_mp_unreach_parse()

commit 7ebd47095b178e91c3c3ef514e0ddd0afe1a97a9
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Oct 18 14:20:04 2011 +0400

    bgpd: fix more regressions in attr flag checks
    
    Commit 05a4936b713b9882171d0f7fb20b8439df23939e fixed some of the
    attributes involved, but not all. This commit should do it.
    
    * bgp_attr.c
      * bgp_attr_originator_id()
      * bgp_attr_cluster_list()
      * bgp_mp_reach_parse()
      * bgp_mp_unreach_parse()

commit abc384f85b622471ef5ba6c86acc540856da05cf
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Oct 18 13:55:07 2011 +0400

    bgpd: use bgp_attr_malformed()
    
    Some of the recent attribute flags/length checks copied from QRE use
    bgp_notify_send_with_data() directly, but master branch assumes
    using bgp_attr_malformed().
    
    * bgp_attr.c
      * bgp_attr_med()
      * bgp_attr_local_pref()
      * bgp_attr_atomic()
      * bgp_attr_originator_id()
      * bgp_attr_cluster_list()
      * bgp_mp_reach_parse()
      * bgp_mp_unreach_parse()

commit 565b828dc00cafd477dd69ce15f0f551ece67710
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Oct 10 21:08:33 2011 +0400

    bgpd: add flag checks for MP_(UN)REACH_NLRI
    
    * bgp_attr.[ch]
      * bgp_mp_reach_parse(): add extra arguments and a uniform flag
        check block
      * bgp_mp_unreach_parse(): idem
      * bgp_attr_parse(): provide extra arguments
    * bgp_mp_attr_test.c
      * parse_test(): justify respective calls

commit f8627ff1ef7642c8ee4758b1f046ef0d166dfbec
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Oct 10 16:52:20 2011 +0400

    bgpd: fix spelling of CLUSTER_LIST

commit 0b83044b91d7ea50824cfd803d77213b9ff38ed9
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Sep 30 15:12:17 2011 +0400

    bgpd: check CLUSTER_LIST attribute flags
    
    * bgp_attr.c
      * bgp_attr_cluster_list(): accept extra argument, add checks for
        "optional", "transitive" and "partial" bits, log each error
        condition independently
      * bgp_attr_parse(): provide extra arguments

commit d595b566bca1de8b026c469a31ae50f2aee11781
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Sep 30 15:08:54 2011 +0400

    bgpd: check ORIGINATOR_ID attribute flags
    
    * bgp_attr.c
      * bgp_attr_originator_id(): accept extra argument, add checks for
        "optional", "transitive" and "partial" bits, log each error
        condition independently
      * bgp_attr_parse(): provide extra arguments

commit 566b36ebf903fd873c974ba34c19097d8fb48ce4
Author: Dmitrij Tejblum <tejblum@yandex-team.ru>
Date:   Tue Sep 27 19:27:17 2011 +0400

    vtysh: [build] silence preprocessor errors in some cases
    
    * extract.pl.in: use configured CPPFLAGS in cpp invocation.

commit ad61af67b548fa787d4c1da0024ba30f8c3b19c8
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Wed Oct 12 15:07:34 2011 +0400

    lib: compile even without IPV6_TCLASS

commit 6d0732c8abad7ace509d033a41814ea03a3a1b16
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Wed Sep 28 14:23:35 2011 +0400

    IPv6 transport class suppport
    
    IPv6 supports the same concept of differentiated service for routing
    protocols as IPv4, but like too many things, the standards committee
    decided that having two names for the same thing wasn't good enough and
    introduced a third more generic term transport class.
    
    The socket option to set transport class works the same as IPv4, but the
    arguments are different.
    
    * lib/sockopt.[ch]
      * setsockopt_ipv6_tclass(): new function
    * bgpd/bgp_network.c
      * bgp_connect(): set socket option
      * bgp_listener(): set socket option
    * ospf6d/ospf6_network.c
      * ospf6_set_transport_class(): new function
      * ospf6_serv_sock(): set socket option
    * ripngd/ripngd.c
      * ripng_make_socket(): set socket option

commit 89a7fd150d2408e4c6fe853a3461aa23a16d9111
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Oct 11 15:17:45 2011 +0400

    lib: fix endianness of masklen2ip()

commit cc6647f230a55f1f4fd765a2012561047d9ae6d1
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Oct 8 18:15:21 2011 +0400

    lib: make masklen2ip() safer and faster

commit 484af2c2e0efe660e00e27647a19f1837a7fa437
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Oct 8 17:22:45 2011 +0400

    ospf6d: make some old sizing checks assertions
    
    As long as ospf6_packet_examin() is now the single checkpoint for
    received packets, most of the old checks performed elsewhere can
    be converted into assert() constructs. Malformed input data at
    respective points can be attributed solely to a programming error,
    not a malformed packet.
    
    * ospf6_message.c
      * ospf6_hello_print()
      * ospf6_dbdesc_print()
      * ospf6_lsreq_print()
      * ospf6_lsupdate_print()
      * ospf6_lsack_print()
      * ospf6_hello_recv()
      * ospf6_dbdesc_recv_master()
      * ospf6_dbdesc_recv_slave()
      * ospf6_lsreq_recv()
      * ospf6_lsupdate_recv()
      * ospf6_lsupdate_recv()
      * ospf6_lsack_recv()
      * ospf6_receive()

commit f17b65213712f324314c58866c4f4f8ed9c95dc7
Author: Paul Jakma <paul@quagga.net>
Date:   Mon Apr 11 16:33:20 2011 +0100

    zebra: trivial warning fix
    
    * zebra_routemap.c: (route_set_src) get rid of the dummy family variable.

commit 4b6a7b902065e038f415a8b728df1709db00425d
Author: Paul Jakma <paul@quagga.net>
Date:   Wed Mar 30 14:30:20 2011 +0100

    doc: Add dependency for quagga.pdf make target
    
    * doc/Makefile.am: pdf target needs to depend on all the input files.

commit cc0b6c122f2d01d886e1ebde15cd2e7c5442c598
Author: John Kemp <kemp@network-services.uoregon.edu>
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 1809ec13def22bc6c2c30d9e8d37a74095bcfb64
Author: Stephen Hemminger <shemminger@vyatta.com>
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 8422e8b91bc9a0f4b8381ac0474a4d5b914869a9
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Oct 7 20:43:59 2011 +0400

    doc: "[no] router zebra" does not belong to ospfd

commit e48591a63220a90af9276a21877d80362bc6a408
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Oct 3 14:08:01 2011 +0400

    ospfd: justify ospf_default_originate_timer()
    
    The function is implemented in ospf_lsa.c, move its "extern" declaration
    to ospf_lsa.h for consistency.

commit efb2c331e70eb3b913aeba3b62dfb54e68bd6de0
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Oct 10 21:08:33 2011 +0400

    bgpd: add flag checks for MP_(UN)REACH_NLRI
    
    * bgp_attr.[ch]
      * bgp_mp_reach_parse(): add extra arguments and a uniform flag
        check block
      * bgp_mp_unreach_parse(): idem
      * bgp_attr_parse(): provide extra arguments
    * bgp_mp_attr_test.c
      * parse_test(): justify respective calls

commit 047d6a601f7842d445d478d51d90b006829df945
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Oct 8 13:54:48 2011 +0400

    bgpd: improve attr length error handling (BZ#679)
    
    * bgp_attr.c
      * bgp_attr_parse(): provide extra argument to bgp_attr_aggregator()
      * bgp_attr_local_pref(): use bgp_notify_send_with_data()
      * bgp_attr_atomic(): idem
      * bgp_attr_aggregator(): idem

commit 452db84a79df073d30ecc0b3f7bdad4143020681
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Oct 10 16:52:20 2011 +0400

    bgpd: fix spelling of CLUSTER_LIST

commit cadc4cf05da46c44a2fb596260d4ef70d7ed6011
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Sep 30 15:12:17 2011 +0400

    bgpd: check CLUSTER_LIST attribute flags
    
    * bgp_attr.c
      * bgp_attr_cluster_list(): accept extra argument, add checks for
        "optional", "transitive" and "partial" bits, log each error
        condition independently
      * bgp_attr_parse(): provide extra arguments

commit 5de1719994fd3677b361ad71ac8bd16cf9c31706
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Sep 30 15:08:54 2011 +0400

    bgpd: check ORIGINATOR_ID attribute flags
    
    * bgp_attr.c
      * bgp_attr_originator_id(): accept extra argument, add checks for
        "optional", "transitive" and "partial" bits, log each error
        condition independently
      * bgp_attr_parse(): provide extra arguments

commit 566941f953b025598134109c5f9547dc4fea287e
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Wed Oct 12 13:54:21 2011 +0400

    bgpd: fix regression in improved attr flag checks
    
    Commit 2febf323411c1aed9d7694898f852ce2ef36a7e5 assumed every flag
    bit except optional/transitive/partial unset, which at times could
    not be true for "extended length" bit.
    
    * bgp_attr.c
      * bgp_attr_origin(): exclude BGP_ATTR_FLAG_EXTLEN from comparison
      * bgp_attr_nexthop(): idem
      * bgp_attr_med(): idem
      * bgp_attr_local_pref(): idem
      * bgp_attr_atomic(): idem

commit 395ec7f5ab794eb5205a7386b890ccb9b1313580
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Sep 27 15:47:25 2011 +0400

    bgpd: improve attr flags checks
    
    Do not check each of the Optional/Transitive/Partial attribute
    flag bits, when their only valid combination is known in advance,
    but still perform bit-deep error message logging. This change
    assumes unused (low-order) 4 bits of the flag octet cleared.
    
    * bgp_attr.c
      * bgp_attr_origin(): rewrite check
      * bgp_attr_nexthop(): idem
      * bgp_attr_med(): idem
      * bgp_attr_local_pref(): idem
      * bgp_attr_atomic(): idem

commit e531d4a662749fdd2a2f83f16e0b1cd252b23ea1
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Sep 24 13:20:43 2011 +0400

    bgpd: add missing "partial" flag checks (BZ#676)
    
    ORIGIN handling function used to have "partial" bit check and recent
    commits added it for NEXT_HOP, MULTI_EXIT_DISC and ATOMIC_AGGREGATE
    cases. This commit adds "partial" check for AS_PATH and LOCAL_PREF
    cases, which should leave attributes 1 through 6 inclusive completely
    covered with attribute flags checks.
    
    * bgp_attr.c
      * bgp_attr_origin(): use bit-by-bit checks for better diagnostics
      * bgp_attr_aspath(): add flag check
      * bgp_attr_local_pref(): idem

commit 19e7654a293cd76854eb5cf98707826efb639326
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Sep 27 15:35:39 2011 +0400

    bgpd: ignore 4 bits of attribute flags byte

commit 17801d1e8bf377ec8e4962dda0293de935629903
Author: Dmitrij Tejblum <tejblum@yandex-team.ru>
Date:   Tue Sep 27 19:27:17 2011 +0400

    vtysh: [build] silence preprocessor errors in some cases
    
    * extract.pl.in: use configured CPPFLAGS in cpp invocation.

commit d14a71d7209dc642f83929e48b525631a1bb09cb
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Wed Oct 12 15:07:34 2011 +0400

    lib: compile even without IPV6_TCLASS

commit d1e2faa40e17fe8f3db591021994d2f5e8b11335
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Wed Sep 28 14:23:35 2011 +0400

    IPv6 transport class suppport
    
    IPv6 supports the same concept of differentiated service for routing
    protocols as IPv4, but like too many things, the standards committee
    decided that having two names for the same thing wasn't good enough and
    introduced a third more generic term transport class.
    
    The socket option to set transport class works the same as IPv4, but the
    arguments are different.
    
    * lib/sockopt.[ch]
      * setsockopt_ipv6_tclass(): new function
    * bgpd/bgp_network.c
      * bgp_connect(): set socket option
      * bgp_listener(): set socket option
    * ospf6d/ospf6_network.c
      * ospf6_set_transport_class(): new function
      * ospf6_serv_sock(): set socket option
    * ripngd/ripngd.c
      * ripng_make_socket(): set socket option

commit a5b228b3792937c93b589938a2545b9311b7938e
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Wed Oct 12 13:54:21 2011 +0400

    bgpd: fix regression in improved attr flag checks
    
    Commit 2febf323411c1aed9d7694898f852ce2ef36a7e5 assumed every flag
    bit except optional/transitive/partial unset, which at times could
    not be true for "extended length" bit.
    
    * bgp_attr.c
      * bgp_attr_origin(): exclude BGP_ATTR_FLAG_EXTLEN from comparison
      * bgp_attr_nexthop(): idem
      * bgp_attr_med(): idem
      * bgp_attr_local_pref(): idem
      * bgp_attr_atomic(): idem

commit 21cc76941abc60b5b5ece0a71ace0b69d6f4572c
Author: Peter Pentchev <roam@ringlet.net>
Date:   Mon Sep 12 16:30:31 2011 +0400

    bgpd: fix parsing of graceful restart cap. (#663)
    
    "While setting up a testbed, I ran across a little problem in the
    parsing of the "graceful restart" BGP capability that resulted in
    Quagga not actually activating it for the peer in question - when
    the peer sent a single AFI/SAFI block."
    
    * bgp_open.c
      * bgp_capability_restart(): actually process the last AFI/SAFI block

commit a624cae2b210a0e81c80c473f86b73e2be169962
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Oct 8 13:54:48 2011 +0400

    bgpd: improve attr length error handling (BZ#679)
    
    * bgp_attr.c
      * bgp_attr_parse(): provide extra argument to bgp_attr_aggregator()
      * bgp_attr_local_pref(): use bgp_notify_send_with_data()
      * bgp_attr_atomic(): idem
      * bgp_attr_aggregator(): idem
    
    Conflicts:
    
    	bgpd/bgp_attr.c

commit b84b62dfb6ee9daf46c9e4c2c372b179f33be44c
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Sep 27 15:47:25 2011 +0400

    bgpd: improve attr flags checks
    
    Do not check each of the Optional/Transitive/Partial attribute
    flag bits, when their only valid combination is known in advance,
    but still perform bit-deep error message logging. This change
    assumes unused (low-order) 4 bits of the flag octet cleared.
    
    * bgp_attr.c
      * bgp_attr_origin(): rewrite check
      * bgp_attr_nexthop(): idem
      * bgp_attr_med(): idem
      * bgp_attr_local_pref(): idem
      * bgp_attr_atomic(): idem
    
    Conflicts:
    
    	bgpd/bgp_attr.c

commit 2d42e68aa032ed2f11471aee444935918d35c8bb
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Sep 27 15:35:39 2011 +0400

    bgpd: ignore 4 bits of attribute flags byte

commit 214bcaa13e092d9fff8f233e62ba28ca7eefbc43
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Sep 24 13:20:43 2011 +0400

    bgpd: add missing "partial" flag checks (BZ#676)
    
    ORIGIN handling function used to have "partial" bit check and recent
    commits added it for NEXT_HOP, MULTI_EXIT_DISC and ATOMIC_AGGREGATE
    cases. This commit adds "partial" check for AS_PATH and LOCAL_PREF
    cases, which should leave attributes 1 through 6 inclusive completely
    covered with attribute flags checks.
    
    * bgp_attr.c
      * bgp_attr_origin(): use bit-by-bit checks for better diagnostics
      * bgp_attr_aspath(): add flag check
      * bgp_attr_local_pref(): idem
    
    Conflicts:
    
    	bgpd/bgp_attr.c

commit bc3443ebf032b5fcc9e0ccb94641e4e899cd17d8
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Thu Sep 22 12:48:14 2011 +0400

    bgpd: improve NEXT_HOP attribute checks (BZ#680)
    
    * lib/prefix.h
      * IPV4_CLASS_DE(): new helper macro
    * bgp_attr.c
      * bgp_attr_nexthop(): add check for "partial" bit, refresh flag error
        reporting, explain meaning of RFC4271 section 6.3 and implement it
    
    Conflicts:
    
    	bgpd/bgp_attr.c

commit 0a28130d35bbba47faf47bf9451ba0eb195fcbb7
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sun Jul 17 19:33:21 2011 +0400

    bgpd: rename SAFI 3 according to RFC4760
    
    - SAFI value 3 is reserved.  It was assigned by RFC 2858 for a use
      that was never fully implemented, so it is deprecated by this
      document.
    
    * zebra.h: rename macro
    * bgp_fsm.c: (bgp_graceful_restart_timer_expire,
      bgp_graceful_stale_timer_expire, bgp_stop, bgp_establish): update
    * bgpd.c: (peer_nsf_stop): update
    * bgp_open.c: (bgp_capability_vty_out): SAFI 3 isn't a recognized case
      any more

commit 42e6d745d105018a9469dabad65bd4cf942dcf3c
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Thu Jul 14 12:36:19 2011 +0400

    bgpd: more SAFI fixes
    
    (with resolved conflict in bgpd/bgp_packet.c)
    
    Two macros resolving to the same integer constant broke a case block and
    a more thorough merge of BGP_SAFI_VPNV4 and BGP_SAFI_VPNV6 was
    performed.
    
    * bgpd.h: MPLS-labeled VPN SAFI is AFI-independent, switch to single
    * macro
    * bgp_capability_test.c: update test data
    * bgp_mp_attr_test.c: idem
    * bgp_route.c: (bgp_maximum_prefix_overflow, bgp_table_stats_vty) update
      macro and check conditions (where appropriate)
    * bgp_packet.c: (bgp_route_refresh_send, bgp_capability_send,
      bgp_update_receive, bgp_route_refresh_receive): idem
    * bgp_open.c: (bgp_capability_vty_out, bgp_afi_safi_valid_indices,
      bgp_open_capability_orf, bgp_open_capability): idem
    * bgp_attr.c: (bgp_mp_reach_parse, bgp_packet_attribute,
      bgp_packet_withdraw): idem

commit beb1ca03bfe707d6d1fcad21fcbaa63af49c82f8
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Wed Jul 13 16:53:13 2011 +0400

    bgpd: fix SAFI for for MPLS labeled VPN-IPv6
    
    * bgpd.h: change value of BGP_SAFI_VPNV6 to 128 (RFC4659, BZ#659)
    * bgp_route.c: (bgp_table_stats_vty) fix length argument to strncmp()

commit 792b6fa2c40f820df07caa80fbc6ed9c4191ef9b
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Thu Sep 29 16:46:49 2011 +0400

    version RE-0.99.17.5

commit 992d4d1ca90025ccac2456643bc2c8cb6790350b
Author: YAMAMOTO Shigeru <shigeru@iij.ad.jp>
Date:   Wed Sep 28 21:00:14 2011 +0400

    ospfd: fix regression in recent commit
    
    commit '717750433839762d23a5f8d88fe0b4d57c8d490a' causes SEGV error,
    when 'oi = ospf_if_lookup_recv_if (ospf, iph->ip_src, ifp);' returns
    NULL.
    
    * ospf_packet.c
      * ospf_read(): change a place of calling 'ospf_verify_header()'

commit 2bb2664e2957c587d8ad2d3d1d26de981983406e
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Sep 26 18:37:06 2011 +0400

    version RE-0.99.17.4

commit 552563a1c443ec876edd92bf79f29ff3afe2c01e
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Sep 26 13:18:51 2011 +0400

    ospf6d: CVE-2011-3323 (fortify packet reception)
    
    This vulnerability (CERT-FI #514840) was reported by CROSS project.
    
    ospf6d processes IPv6 prefix structures in incoming packets without
    verifying that the declared prefix length is valid. This leads to a
    crash
    caused by out of bounds memory access.
    
    * ospf6_abr.h: new macros for size/alignment validation
    * ospf6_asbr.h: idem
    * ospf6_intra.h: idem
    * ospf6_lsa.h: idem
    * ospf6_message.h: idem
    * ospf6_proto.h: idem
    * ospf6_message.c
      * ospf6_packet_minlen: helper array for ospf6_packet_examin()
      * ospf6_lsa_minlen: helper array for ospf6_lsa_examin()
      * ospf6_hello_recv(): do not call ospf6_header_examin(), let upper
        layer verify the input data
      * ospf6_dbdesc_recv(): idem
      * ospf6_lsreq_recv(): idem
      * ospf6_lsupdate_recv(): idem
      * ospf6_lsack_recv(): idem
      * ospf6_prefixes_examin(): new function, implements A.4.1
      * ospf6_lsa_examin(): new function, implements A.4
      * ospf6_lsaseq_examin(): new function, an interface to above
      * ospf6_packet_examin(): new function, implements A.3
      * ospf6_rxpacket_examin(): new function, replaces
        ospf6_header_examin()
      * ospf6_header_examin(): sayonara
      * ospf6_receive(): perform passive interface check earliest possible,
        employ ospf6_rxpacket_examin()

commit 308687b7d73c5cacf927a3a33efbfaea627ccc09
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Sep 26 13:18:36 2011 +0400

    ospf6d: CVE-2011-3324 (DD LSA assertion)
    
    This vulnerability (CERT-FI #514839) was reported by CROSS project.
    
    When Database Description LSA header list contains trailing zero octets,
    ospf6d tries to process this data as an LSA header. This triggers an
    assertion in the code and ospf6d shuts down.
    
    * ospf6_lsa.c
      * ospf6_lsa_is_changed(): handle header-only argument(s)
        appropriately, do not treat LSA length underrun as a fatal error.

commit 1f54cef38dab072f1054c6cfedd9ac32af14a120
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Sep 26 13:18:02 2011 +0400

    ospfd: CVE-2011-3325 part 2 (OSPF pkt type segv)
    
    This vulnerability (CERT-FI #514838) was reported by CROSS project.
    
    The error is reproducible only when ospfd debugging is enabled:
      * debug ospf packet all
      * debug ospf zebra
    When incoming packet header type field is set to 0x0a, ospfd will crash.
    
    * ospf_packet.c
      * ospf_verify_header(): add type field check
      * ospf_read(): perform input checks early

commit 3d3380d4fda43924171bc0866746c85634952c99
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Sep 26 13:17:52 2011 +0400

    ospfd: CVE-2011-3325 part 1 (OSPF header underrun)
    
    This vulnerability (CERT-FI #514838) was reported by CROSS project.
    
    When only 14 first bytes of a Hello packet is delivered, ospfd crashes.
    
    * ospf_packet.c
      * ospf_read(): add size check

commit af143a26ef96ba9be7b9c0b151b7605e1c2c74cd
Author: CROSS <info@codenomicon.com>
Date:   Mon Sep 26 13:17:21 2011 +0400

    ospfd: CVE-2011-3326 (uknown LSA type segfault)
    
    This vulnerability (CERT-FI #514837) was reported by CROSS project.
    They have also suggested a fix to the problem, which was found
    acceptable.
    
    Quagga ospfd does not seem to handle unknown LSA types in a Link State
    Update message correctly. If LSA type is something else than one
    supported
    by Quagga, the default handling of unknown types leads to an error.
    
    * ospf_flood.c
      * ospf_flood(): check return value of ospf_lsa_install()

commit a1afbc6e1d56b06409de5e8d7d984d565817fd96
Author: CROSS <info@codenomicon.com>
Date:   Mon Sep 26 13:17:05 2011 +0400

    bgpd: CVE-2011-3327 (ext. comm. buffer overflow)
    
    This vulnerability (CERT-FI #513254) was reported by CROSS project.
    They have also suggested a fix to the problem, which was found
    acceptable.
    
    The problem occurs when bgpd receives an UPDATE message containing
    255 unknown AS_PATH attributes in Path Attribute Extended Communities.
    This causes a buffer overlow in bgpd.
    
    * bgp_ecommunity.c
      * ecommunity_ecom2str(): perform size check earlier

commit 3eca6f099d5a3aac0b66dfbf98fd8be84ea426b7
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Thu Sep 22 12:48:14 2011 +0400

    bgpd: improve NEXT_HOP attribute checks (BZ#680)
    
    * lib/prefix.h
      * IPV4_CLASS_DE(): new helper macro
    * bgp_attr.c
      * bgp_attr_nexthop(): add check for "partial" bit, refresh flag error
        reporting, explain meaning of RFC4271 section 6.3 and implement it

commit c347846e4f917339fd7b4c122a343f93ef621c40
Author: Dmitrij Tejblum <tejblum@yandex-team.ru>
Date:   Wed Sep 21 23:13:22 2011 +0400

    bgpd: don't be confused by "unspecific" subcode in the NOTIFY message.
    
    * bgp_debug.c (bgp_notify_open_msg, bgp_notify_update_msg,
      bgp_notify_cease_msg, bgp_notify_capability_msg): add messages for
      "unspecific" subcode.

commit 614da2bf57d7df965d41869d1aa8321210d6560e
Author: Dmitrij Tejblum <tejblum@yandex-team.ru>
Date:   Wed Sep 21 17:41:41 2011 +0400

    lib: provide more information in case of failed LOOKUP.
    
    * log.[ch]
      * mes_lookup: add a parameter with the name of the message list, print
        the name in case of failure.
      * LOOKUP macro: pass the name of the message list.

commit ca22cc4cc397dac8f3bf57eca516360085d44214
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Sep 20 14:43:50 2011 +0400

    bgpd: check ATOMIC_AGGREGATE attr flags (BZ#678)
    
    * bgp_attr.c
      * bgp_attr_atomic(): accept extra argument, add checks for
        "optional", "transitive" and "partial" bits, log each error
        condition independently
      * bgp_attr_parse(): provide extra argument

commit 7d25f1883f9a391ad16ec57c06ae71df616b00d8
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Sep 20 10:54:25 2011 +0400

    bgpd: check MULTI_EXIT_DISC attr flags (BZ#677)
    
    * bgp_attr.c
      * bgp_attr_med(): add checks for "optional", "transitive" and
        "partial" bits, log each error condition independently

commit d0511bd9b09a6952f18bf3a926de759638a5cda7
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Sep 19 16:30:47 2011 +0400

    bgpd: check LOCAL_PREF attribute flags (BZ#674)
    
    * bgp_attr.c
      * bgp_attr_local_pref(): accept extra argument, add checks for
        "optional" and "transitive" bits, log each error condition
        independently
      * bgp_attr_parse(): provide extra argument

commit dda8187956966b2cc977855603a5beeeada3cc76
Author: Dmitrij Tejblum <tejblum@yandex-team.ru>
Date:   Thu Sep 15 20:00:33 2011 +0400

    configure: test for glibc backtrace even without glibc.
    
    Other platform may have compatible facilities.

commit 254f118d8671926f946a0b7221f89794cf4bf732
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Thu Sep 15 15:40:47 2011 +0400

    ospfd: remove unused macro

commit e7da9d51dff9d244711758d3019381447a6d5657
Author: Roman Hoog Antink <rha@open.ch>
Date:   Thu Sep 15 11:47:00 2011 +0400

    doc: fix typo

commit 4e60f63ccc7a46b1b8500fce657b0164d881a585
Author: Fritz Reichmann <fritz@reichmann.nl>
Date:   Wed Sep 14 20:46:57 2011 +0400

    isisd: raise hello rate for DIS (BZ#539)
    
    * isis_pdu.c: Divide hello interval by three, depending if we are DIS or
      not.

commit d0d29979d05ddc532475b595b32041412de523c7
Author: Fritz Reichmann <fritz@reichmann.nl>
Date:   Wed Sep 14 19:31:51 2011 +0400

    isisd: fix crash on "no router isis" (BZ#536)
    
    The crash is due to threads accessing data that gets destroyed
    during the removal of the configuration.
    
    * isis_circuit.c: Destroy adjacencies to stop adjacency expiry thread.
      Stop PSNP threads.
    * isisd.c: Change state of circuit back to INIT and reassign the
      circuit structure to isis->init_circ_list rather than destroying
      the circuit data structure. Stop SPF threads. Stop LSP generation
      threads.
    * isisd.h: Add pointers to LSP threads into area structure in order to
      stop them in isisd.c
    * isis_lsp.c: Store pointer to LSP thread in area structure.
    * isis_pdu.c: Stop PDU generation for a circuit with a removed area.
    * isis_pfpacket.c: Stop processing received PDUs for a circuit with a
      removed area.

commit 158dd4d00ecb0af0d1a77fdc7d4844fc88a0f10f
Author: Tom Goff <thomas.goff@boeing.com>
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.

commit f7c91fc330b802e95e23d52b498ae61b0e8669a9
Author: Tom Goff <thomas.goff@boeing.com>
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 a7c21ecd6df936b2f6614956ef9167b5fcc165c8
Author: Peter Szilagyi <peszilagyi@gmail.com>
Date:   Tue Sep 13 17:37:06 2011 +0400

    isisd: include hash.h, not hash.c

commit 3f0d3a1f9c7b7f751473d9293ba2272a28e2a8f2
Author: Stephen Hemminger <shemminger@vyatta.com>
Date:   Tue Sep 13 17:15:51 2011 +0400

    configure: dismiss libutil.h
    
    Recent versions of libc on Linux (Debian Testing) create lots of
    compile warnings about direct usage of libutil.h

commit b38639ca49e2d0348bdc774f987a8f2f9d2ede74
Author: Alexandre Chappuis <alc@open.ch>
Date:   Tue Sep 13 16:33:45 2011 +0400

    doc: add missing word
    
    * ospfd.texi: Adjust meaning of the rfc1583compatibility option in
      order to match the RFC specification and the actual source code.

commit 4fe20b3f7d13252348e7efaedbaa8f10456cfd52
Author: Jon Andersson <jonirucoeith@gmail.com>
Date:   Tue Sep 13 15:47:14 2011 +0400

    ospf6d: add lost lines to area config block
    
    * ospf6_area.c
      * ospf6_area_config_write(): write filter-list, import-list and
        export-list lines

commit 74ffab30c360e2a603247f574577b3a8a74db4b2
Author: Peter Pentchev <roam@ringlet.net>
Date:   Mon Sep 12 16:30:31 2011 +0400

    bgpd: fix parsing of graceful restart cap. (#663)
    
    "While setting up a testbed, I ran across a little problem in the
    parsing of the "graceful restart" BGP capability that resulted in
    Quagga not actually activating it for the peer in question - when
    the peer sent a single AFI/SAFI block."
    
    * bgp_open.c
      * bgp_capability_restart(): actually process the last AFI/SAFI block

commit c8049c165cdab08cb8024881376080b58ebc9eae
Author: Christian Hammers <ch@debian.org>
Date:   Mon Sep 12 14:23:05 2011 +0400

    ospf6d: fix crash on filter-list handling (BZ#530)
    
    This essentially merges the fix available from Debian build of Quagga.
    
    * ospf6_area.c
      * area_filter_list(): use correct argv indices
      * no_area_filter_list(): idem

commit 2e35e96a11ac7bdf82ad68056f94135dc41a0995
Author: heasley <heas@shrubbery.net>
Date:   Mon Sep 12 13:27:52 2011 +0400

    bgpd: add useful notification logs (BZ#616)
    
    * bgp_packet.c
      * bgp_notify_send_with_data(): add calls to zlog_info()

commit 99dc8691caa8bd1eaf4d5784bdb72a10966f2007
Author: Alexandre Chappuis <alc@open.ch>
Date:   Sun Sep 11 16:54:11 2011 +0400

    doc: BGP route-flap dampening

commit 257c0eb350f314014ff1f8a993f3cf2456964cda
Author: Dmitry Popov <dp@highloadlab.com>
Date:   Sun Sep 11 13:48:25 2011 +0400

    zebra: fix loss of metric for Linux routes
    
    * rt_netlink.c
      * netlink_route_change(): fetch metric information like
        netlink_routing_table() does and pass it further

commit e00d4e2e3dd20d567d670cae1c33618910c639fa
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Sep 10 23:29:19 2011 +0400

    ospfd: spelling

commit 6787978cc8c15b16fff3e6d6e09e02518dc045f2
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Sep 10 21:50:53 2011 +0400

    bgpd: spelling

commit 71008de7c8d47e5163d103b0b509d4a899044014
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Sep 10 16:53:30 2011 +0400

    bgpd: spelling

commit 4f151e5cc6ac6cfb1042dc3e5a1139a9f3138d91
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Sep 10 16:40:23 2011 +0400

    ospfd: use existing macro for consistency

commit 2f7d5fb38a284a00f990f943fbd3fbd8961ef52e
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Wed Sep 7 17:44:10 2011 +0400

    version RE-0.99.17.3

commit 6caee4c9cdcf72e603b1ebd70f209ccdc75f0b95
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Wed Sep 7 17:40:38 2011 +0400

    ospfd: revert recent PIE change to fix amd64 build
    
    This reverts commit 68575f4babf4d6fc302c366898a1047f13629214.

commit c66caa83f96cd11c95c05b40da9ed8064e236005
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Wed Sep 7 15:40:06 2011 +0400

    version RE-0.99.17.2

commit 68575f4babf4d6fc302c366898a1047f13629214
Author: Dmitrij Tejblum <tejblum@yandex-team.ru>
Date:   Sat Sep 3 14:35:24 2011 +0400

    build: build ospfd as Position-Independed Executable (if appropriate)
    
    Since 46bc0e432e75, all the binaries are built as Position-Independed
    Executables (if available and enabled). ospfd was missed for some
    unknown reason.

commit 84f6c0d6cecd039b5dc529b6c5eba136840a4010
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sun Aug 28 22:38:45 2011 +0400

    ospfd: address more trivial compiler warnings
    
    * ospf_ase.c
      * ospf_ase_complete_direct_routes(): dismiss unused variable
      * ospf_ase_calculate_route(): put assignments into parentheses

commit 695421486d651816a7082447adf2fec9fea50930
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sun Aug 28 22:29:52 2011 +0400

    zebra: add missing includes

commit 330835409fb82522082eba4d4819467e5ab2de84
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Aug 27 22:19:34 2011 +0400

    ospf6d: address more trivial compiler warnings
    
    * ospf6_main.c: include required headers
    * ospf6_asbr.h: idem
    * ospf6_spf.c
      * ospf6_spf_install(): remove unused variables

commit 68aa0c58717b3f2648533b54fb4ec689fd2d7c5c
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Aug 23 11:36:27 2011 +0400

    ospfd: sizing macros cleanup
    
    * ospf_spf.c
      * ROUTER_LSA_TOS_SIZE: prepend OSPF_ and move to ospf_lsa.h
      * ROUTER_LSA_MIN_SIZE: replace with existing OSPF_ROUTER_LSA_LINK_SIZE

commit d6af701250915fdc7449500d9191f4eb2e6cfa4d
Author: Dmitrij Tejblum <tejblum@yandex-team.ru>
Date:   Mon Aug 22 11:39:35 2011 +0400

    lib: use "protocol-independed API" from RFC3678, if that is available
    
    (This commit is based on the patch from BZ#420, and should fix that bug.)
    
    * configure.ac: detect availability of that API
    * sockopt.c (setsockopt_ipv4_multicast): use it for join/leave IPv4
      multicast groups

commit 96a0a39261b5a848228f096a1a1836fa12ed3e69
Author: Dmitrij Tejblum <tejblum@yandex-team.ru>
Date:   Fri Aug 19 23:00:30 2011 +0400

    lib: futher simplification of setsockopt_ipv4_multicast()
    
    * sockopt.c (setsockopt_ipv4_multicast): check for wrong optname with
      assert(), rather than return an error.

commit b62987450e4d4e0dd18a2766aff220d42174042b
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Aug 20 23:12:00 2011 +0400

    ospf6d: add missing include
    
    Two extern declarations in ospf6_abr.h are based on struct ospf6_route,
    which may not be available at the time ospf6_abr.h is included. This may
    lead to warnings after including ospf6_abr.h just for the structures
    defined in it.

commit eb223062582ba463856119efa30ae1989c2a901d
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Aug 20 22:45:58 2011 +0400

    ospf6d: ospf6_lsa_cmd_init() does not exist

commit a44ed99c57f340a75e94e13edfb047e3f5a49539
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sat Aug 20 20:58:15 2011 +0400

    ospf6d: move named constants to ospf6d.h

commit 87d29037b3f390cfb9d4e9e2aef4f0b49f98d557
Author: Dmitrij Tejblum <tejblum@yandex-team.ru>
Date:   Fri Aug 19 22:25:23 2011 +0400

    lib: fix omission in the previous commit to lib/sockopt.c
    
    * sockopt.c (setsockopt_ipv4_multicast_if): fix missed line in
      the previous commit.

commit 9504a6ea39a68523733a8abb147da62deae061a9
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Aug 19 22:24:27 2011 +0400

    ospf6d: justify some ABR debug code
    
    * ospf6_abr.c
      * ospf6_abr_examin_summary(): only fill "buf" when it is used

commit bf510e9bc06b55ae9d9c1d6ed67152b94e80977e
Author: Dmitrij Tejblum <tejblum@yandex-team.ru>
Date:   Thu Aug 18 20:22:17 2011 +0400

    lib: simplify interface of setsockopt_multicast_ipv4().
    
    * sockopt.[ch] (setsockopt_ipv4_multicast): ifindex is now mandatory (all
      non-ancient OSes can use it anyway), and if_addr parameter (the address
      of the interface) is now gone. (setsockopt_ipv4_multicast_if):
      IP_MULTICAST_IF processing moved to this new function
    
    * ospf_network.c (ospf_if_add_allspfrouters, ospf_if_drop_allspfrouters,
      ospf_if_add_alldrouters, ospf_if_drop_alldrouters, ospf_if_ipmulticast),
      rip_interface.c (ipv4_multicast_join, ipv4_multicast_leave,
      rip_interface_new): adapt to the new interface

commit 9fa6be78ecbbda17be20b8d2bc4fdde915e33d7e
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Aug 19 16:27:16 2011 +0400

    ospf6d: spelling

commit 22aefb2270a0cd3b1ba0f309e136e0250bd0332e
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Aug 9 14:42:58 2011 +0400

    bgpd: improve "show ip bgp scan detail"
    
    * bgp_nexthop.c (show_ip_bgp_scan_tables): access proper structure field
      in AF_INET6 case, handle ifindex NH type properly

commit 15b1d9d0b0f54b9afbfdb784d535b3761d5efde7
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Aug 8 19:36:44 2011 +0400

    bgpd: dismiss some zlookup checks
    
    bgp_nexthop_onlink(): zlookup is not used here at all
    bgp_nexthop_lookup_ipv6(): rely on the detection performed by "query"
      function (this also changes the fallback value to 0), reorder if-block
    bgp_nexthop_lookup(): idem

commit 5990281d4e91e40e0e3cc9149e73c887a7119415
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Aug 5 21:47:08 2011 +0400

    bgpd: add "show ip bgp scan detail" command
    
    * bgp_nexthop.c: (show_ip_bgp_scan) transform into
      show_ip_bgp_scan_tables(), which uses inet_ntop() and can dump
      nexthops on request; (show_ip_bgp_scan_detail_cmd) new function

commit 5c98c5a7b1d3d71ff40b477b246b859cd22ddeed
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Aug 5 18:52:52 2011 +0400

    bgpd: touch nexthop handling code
    
    bgp_nexthop_lookup_ipv6(): declare variables where they are actually
    used, drop no-op initialization (the field is already 0)
    bgp_nexthop_lookup(): ditto
    bgp_nexthop_check_ebgp(): rename to bgp_nexthop_onlink()
    bgp_nexthop_cache_changed(): rename to bgp_nexthop_cache_different()

commit 0ddff5764f736c0a6d0d07b28bf98970624f263b
Author: Stephen Hemminger <shemminger@vyatta.com>
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 aad356a49d6b00590b21751ea560c54f321c73c9
Author: Christian Hammers <ch@debian.org>
Date:   Wed Mar 23 13:07:55 2011 +0300

    lib: fix more format warnings (#637)
    
    The following patch was also neccessary to compile.
    
    * command.c: (config_logmsg_cmd) use "%s" format spec
    * if.c: (connected_log) ditto

commit 1740f9e5906a7cb264e7741dd57a91654cb05dd0
Author: Alexandre Chappuis <alc@open.ch>
Date:   Tue Aug 2 17:37:39 2011 +0400

    ospfd: remove useless RFC1583 check
    
    * ospf_route.c: Function ospf_asbr_route_cmp is called uniquely from
      ospf_route_cmp() when the flag OSPF_RFC1583_COMPATIBLE is not set.
      Therefore, the check that the flag is set doesn't make sense at all
      and it can consequently be removed without doing any harm.
    
    Signed-off-by: Alexandre Chappuis <alc@open.ch>
    Signed-off-by: Roman Hoog Antink <rha@open.ch>

commit c69f91be67896e7e68adb7da4b5b9c5f6013f1a2
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Aug 1 21:59:04 2011 +0400

    lib: remove unused variable
    
    * sockopt.c (getsockopt_ifindex): "ifindex" was never used

commit cbfbf2f07bd90f48e268907a597652af6d2e019d
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Mon Aug 1 16:52:03 2011 +0400

    delete CVS keywords

commit 0e8257d21e814c46aca485d58bcfa73e06354cad
Author: Tom Goff <thomas.goff@boeing.com>
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 cd3355b83202bc109045ba1e90b6725610aa256d
Author: Tom Goff <thomas.goff@boeing.com>
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 f4ac0fee73100c6268365df31096a64443bfb93b
Author: Wataru Tanitsu <wataru@ate-mahoroba.jp>
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 999a305c89b12b8d059f118bf01556b9a6fd62b3
Author: Paul Jakma <paul@quagga.net>
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 e9e42170c63efcdb14b9389f481f2fa8fcb4092a
Author: Paul Jakma <paul@quagga.net>
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 01d7ff0a2166a422c56bd26f04fc22832a9e690b
Author: Josh Bailey <joshb@google.com>
Date:   Wed Jul 20 20:52:06 2011 -0700

    bgpd: We try to skip out of updating the multipath aggregate if there are no
    changes in the multipath set or attributes, but failed to check for
    just a bestpath change. The result is there is no attribute on the new
    bestpath and we hit the assert. Added the bestpath check and
    rearranged the code to only check attributes when there is no bestpath
    or multipath change, so we only scan the for attribute changes when
    necessary.
    
    * bgpd/bgp_mpath.c
      * bgp_info_mpath_aggregate_update(): Added check for bestpath
        change before skipping the aggregate generation. Skip the attribute
        check if either the multipath set or bestpath has changed.

commit 78d92e1721538ec41feb2b1c34712675b830087b
Author: Josh Bailey <joshb@google.com>
Date:   Wed Jul 20 20:51:07 2011 -0700

    bgpd: Fix a crash caused by mistakenly dequeueing the bestpath on the
    multipath list. This causes the multipath list to get truncated
    but the multipath count still reflects what it was before truncation.
    When we install the route to zebra we fail to fill the nexthop
    array with the number of nexthop pointers indicated by the
    multipath count and this leads to a NULL pointer crash in
    stream_put_in_addr().
    
    Changes:
    
    * bgpd/bgp_mpath.c
      * bgp_info_mpath_update(): If new_mpath is the bestpath we should
        just move to the next mp_list node. Move dequeue of new_mpath and
        the code that updates next_mpath to inside the check that
        new_mpath is not the bestpath.

commit 0b597ef00ec7c7eebd836e2b1d5a266efcd60005
Author: Josh Bailey <joshb@google.com>
Date:   Wed Jul 20 20:49:11 2011 -0700

    bgpd: When advertising a multipath route, the attribute set to be
    advertised is based on the bestpath attribute set, but the
    following attributes are aggregated from the attribute sets
    of the multipath constituents:
    - AS_PATH
    - ORIGIN
    - COMMUNITIES
    - EXTENDED COMMUNITIES
    
    In addition the route is advertised with the NEXT_HOP set
    to the router's interface IP address, instead of the NEXT_HOP
    of the best path. This is to ensure that traffic will go to this
    router so it can be fanned out via the multipath route.
    
    * bgpd/ecommunity.c
      * ecommunity_uniq_sort(): Make this function externally accessible
    * bgpd/ecommunity.h
      * Add external declaration for ecommunity_uniq_sort()
    * bgpd/bgp_mpath.c
      * bgp_info_nexthop_cmp(): Replace calls to bgp_attr_extra_get()
        to avoid unwanted memory allocation
      * bgp_info_mpath_free(): Free aggregate attribute for multipath
      * bgp_info_mpath_attr(): Lookup aggregate attribute of a multipath route
      * bgp_info_mpath_attr_set(): Set aggregate attribute of a multipath route
      * bgp_info_mpath_aggregate_update(): Update the aggregate attribute
        of a multipath route
    * bgpd/bgp_mpath.h
      * bgp_info_mpath: Add pointer to hold aggregate attribute of a multipath
      * Add external declarations for new functions
    * bgpd/bgp_route.c
      * bgp_announce_check(): Use aggregate attribute when announcing multipath
        route
      * bgp_announce_check_rsclient(): Use aggregate attribute when announcing
        multipath route
      * bgp_best_selection(): After updating multipath set, update the
        multipath aggregate attribute

commit 6918e74b97fd40f947ebd2eded9ab24b8569d3b8
Author: Josh Bailey <joshb@google.com>
Date:   Wed Jul 20 20:48:20 2011 -0700

    bgpd: For deterministic MED build a multipath set for each peer AS as the
    first stage of the best path calculation. The second stage then
    selects a winner from each peer AS's best path. In the second stage we
    clear multipath set of the non-selected best paths via
    bgp_mp_dmed_deselect(). Since the multipath set is already marked up
    for the winning path, we don't call bgp_info_mpath_update() after the
    second stage calculation.
    
    * bgpd/bgp_mpath.c
      * bgp_mp_dmed_deselect(): New function to cleanup the multipath
        markup if a DMED selected path loses in stage 2 of the best path
        calculation
    * bgpd/bgp_mpath.h
      * Add external declaration of bgp_mp_dmed_deselect()
    * bgpd/bgp_route.c
      * bgp_best_selection(): If multipath is enabled, build up the mp_list
        for the current peer AS, and do the RIB markup the best path from
        that AS. In the second stage, clear the RIB markup for the DMED
        selected path if it is not selected as best. Only call
        bgp_info_mpath_update() in the second stage when not doing
        deterministic MED.

commit 8196f13d2ab7f3b09150c00328228f90391acb7c
Author: Josh Bailey <joshb@google.com>
Date:   Wed Jul 20 20:47:07 2011 -0700

    bgpd: Modify the BGP to zebra route announcement to support multipath
    routes. Use a growable buffer (bgp_nexthop_buf) to collect nexthops
    that are included in the announcement. Use the BGP_INFO_MULTIPATH_CHG
    flag to trigger zebra announcement so zebra will be updated if the
    multipath set changes. Display all multipath nexthops in
    'debug bgp zebra' output.
    
    * bgpd/bgp_main.c
      * bgp_exit(): Free bgp_nexthop_buf when exiting
    * bgpd/bgp_route.c
      * bgp_process_rsclient(): Clear BGP_INFO_MULTIPATH_CHG after processing
      * bgp_process_main(): Check BGP_INFO_MULTIPATH_CHG to trigger zebra
        announcement and clear aftr processing
    * bgpd/bgp_zebra.c
      * bgp_nexthop_buf: Growable buffer used to collect nexthops for zebra
        announcement
      * bgp_zebra_announce(): Grow bgp_nexthop_buf if needed. Include
        multipath count in zebra announcement and add all nexthops to
        bgp_nexthop_buf. Pass bgp_nexthop_buf data to zebra announcement.
        Added nexthops to debug output.
      * bgp_zebra_init(): Initialize bgp_nexthop_buf at startup
    * bgpd/bgp_zebra.h
      * BGP_NEXTHOP_BUF_SIZE: Default initial bgp_nexthop_buf size has room
        for 8 nexthops

commit de8d5dff1523bb9fe47d54f31c9e5322bd805b44
Author: Josh Bailey <joshb@google.com>
Date:   Wed Jul 20 20:46:01 2011 -0700

    bgpd: Adds support to mark up the BGP rib table entry with multipath
    information based on the multipath list (mp_list) generated during
    the best path calculation. Display "multipath" for paths that are
    multipath and also on bestpath if the route is multipath. Flag a
    best path with the BGP_INFO_MULTIPATH_CHG if the multipath
    set has changed since the last update. This can be used to trigger
    updates to zebra and peers.
    
    The multipath markup is a lazily allocated bgp_info_mpath structure
    that is added to the best path and any multipaths. The mpath structures
    are linked together with the best path element at the head and the
    other elements ordered by nexthop and then by peer address. This
    markup scheme is updated by calling bgp_info_mpath_update() and passing
    in a new mp_list the the current multipath set. There are additional
    API's for walking the multipath set, querying the count of multipaths,
    and for cleaning up the multipath markup information when freeing path
    information.
    
    * bgpd/bgp_mpath.c
      * bgp_info_mpath_new(): Allocation of new mpath element
      * bgp_info_mpath_free(): Release memory for mpath element
      * bgp_info_mpath_get(): Access mpath element of path. Allocate memory
        on-demand
      * bgp_info_mpath_enqueue(): Enqueue a path onto the multipath list
      * bgp_info_mpath_dequeue(): Remove a path from the multipath list
      * bgp_info_mpath_first(): Return first path on the multipath list
      * bgp_info_mpath_next(): Return next path on the multipath list
      * bgp_info_mpath_count(): Return the number of paths on the multipath list
      * bgp_info_mpath_count_set(): Set the number of paths on the multipath list
      * bgp_info_mpath_update(): Update multipath markup on bgp route table entry
        and flag any changes. Emit 'debug bgp event' output on any multipath
        change.
    * bgpd/bgp_mpath.h
      * struct bgp_info_mpath: Information added to a bgp_info path to record
        multipath information
      * External declarations for new functions in bgp_mpath.c
    * bgpd/bgp_route.c
      * bgp_info_free(): Free mpath memory when freeing path information
      * bgp_info_reap(): Dequeue path from multipath queue before deleting it
      * bgp_best_selection(): Calls bgp_info_mpath_update() with latest
        mp_list to mark-up rib table entry
      * bgp_vty_out_detail(): Add display of multipath flag for a path. Also
        display 'multipath' for bestpath if it is a multipath route
    * bgpd/bgp_route.h
      * struct bgp_info: Add pointer to bgp_info_mpath information
      * Add flags to mark a path as multipath (BGP_INFO_MULTIPATH) and
        to mark bestpath if multipath information has changed
        (BGP_INFO_MULTIPATH_CHG)
    * lib/memtypes.c
      * Add MTYPE_BGP_MPATH_INFO for allocating memory for bgp_info_mpath
    * tests/bgp_mpath_test.c
      * Add test case for bgp_info_mpath_update() and supporting functions

commit 96450faf3385a6ed9f4dd5c2c58776c4a664a8da
Author: Josh Bailey <joshb@google.com>
Date:   Wed Jul 20 20:45:12 2011 -0700

    bgpd: Adds equal-paths check to path comparison. Paths that are
    equal to the best path are accumulated onto an ordered list (mp_list)
    if maximum-paths is configured. A future commit will add the
    multipath markup to the BGP rib table based on the mp_list. Add
    unit test for the added mp_list functions.
    
    Deterministic MED is not supported in this commit, it will be
    added later.
    
    * bgpd/bgp_aspath.c
      * Make aspath_cmp() an external symbol so it can be used in
        equivalent paths check
    * bgpd/bgp_aspath.h
      * Add extern declaration of aspath_cmp()
    * bgpd/bgp_mpath.c
      * bgp_info_nexthop_cmp(): Compares nexthops of two paths
      * bgp_info_mpath_cmp(): Compare function to order multipaths by
        nexthop and then by peer address
      * bgp_mp_list_init(): Initialize a list with the multipath order function
      * bgp_mp_list_clear(): Clear out the mp_list
      * bgp_mp_list_add(): Add a multipath to mp_list
    * bgpd/bgp_mpath.h
      * External declarations for above added functions in bgp_mpath.c
    * bgpd/bgp_route.c
      * bgp_info_cmp(): Add equivalent paths result (paths_eq). If eBGP
        paths are equal down to IGP metric check, flag as equal if peer AS
        matches. Similarly for iBGP paths but compare full AS_PATH.
      * bgp_best_selection(): If multipath is enabled, accumulate equivalent paths
        in mp_list. Add debug bgp event output to see result (will be filtered
        later to display only when change occurs)
      * bgp_process_rsclient(): Pass multipath config to bgp_best_selection()
      * bgp_process_main(): Pass multipath config to bgp_best_selection()
    * tests/bgp_mpath_test.c
      * Add unit test case for bgp_mp_list functions

commit 42ea68512fc4d04b500def45e8f899321f4081e7
Author: Josh Bailey <joshb@google.com>
Date:   Wed Jul 20 20:44:23 2011 -0700

    bgpd: add bgp_mpath_test.c
    
    * tests/bgp_mpath_test.c
      * New file with test framework for testing BGP multipath
      * Add test for CLI support functions
    * tests/Makefile.am
      * Add new testbgpmpath target

commit 165b5fff9dde5536d9cb1f850b36c17bf5654f0f
Author: Josh Bailey <joshb@google.com>
Date:   Wed Jul 20 20:43:22 2011 -0700

    bgpd: Add new configuration cli for eBGP and iBGP multipath.
    There is support to configure this for each (AFI,SAFI), but
    currently this configuration is only present for IPv4 unicast:
    
     maximum-paths [ibgp] <1-255>
     no maximum-paths [ibgp] [<1-255>]
    
    * bgpd/Makefile.am
      * Add bgp_mpath.h and bgp_mpath.c to build
    * bgpd/bgp_mpath.h
      * New file for bgp multipath declarations
      * define BGP_DEFAULT_MAXPATHS
    * bgpd/bgp_mpath.c
      * bgp_maximum_paths_set(): Configure maximum paths for the given
        afi, safi and bgp instance
      * bgp_maximum_paths_unset(): Return maximum paths configuration to
        the default setting for the given afi, safi and bgp instance
    * bgpd/bgp_vty.c
      * Define command strings for above CLI
      * bgp_config_write_maxpaths(): Outputs configuration for the given
        afi, safi and bgp instance
      * Install command elements for IPv4 unicast
    * bgpd/bgp_zebra.h
      * bgp_config_write_maxpaths(): External declaration
    * bgpd/bgpd.c
      * bgp_create(): Initialize bgp instance to default maximum paths setting
      * bgp_config_write_family(): Output maximum paths configuration
        for the given address family
      * bgp_config_write(): Output maximum paths configuration for
        IPv4 unicast address family
    * bgpd/bgpd.h
      * struct bgp: Add storage for maximum paths configuration for
        each afi, safi

commit a8b79422aadf5dc821af6699e468379002cc61f9
Author: Paul Jakma <paul@quagga.net>
Date:   Wed Mar 23 10:30:30 2011 +0000

    bgpd: Fix compile failure if IPv6 build was disabled.
    
    * bgp_route.c: ({no_,}ipv6_bgp_network_ttl_cmd) depends on ipv6_bgp_network
      which is HAVE_IPV6, so these should be too.
      (bgp_route_init) and the installs should be similarly ifdefed

commit fdc38db248a220dcb80ec0ba1f1981087213651d
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Sun Jul 17 19:33:21 2011 +0400

    bgpd: rename SAFI 3 according to RFC4760
    
    - SAFI value 3 is reserved.  It was assigned by RFC 2858 for a use
      that was never fully implemented, so it is deprecated by this
      document.
    
    * zebra.h: rename macro
    * bgp_fsm.c: (bgp_graceful_restart_timer_expire,
      bgp_graceful_stale_timer_expire, bgp_stop, bgp_establish): update
    * bgpd.c: (peer_nsf_stop): update
    * bgp_open.c: (bgp_capability_vty_out): SAFI 3 isn't a recognized case
      any more

commit 4a1342a56c6fdb90d9af3109afa9442ff0b850d6
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Jul 15 00:24:15 2011 +0400

    configure: fix OpenPAM detection

commit 5112233b7929299b5200ef820d1567f5d7db50e6
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Thu Jul 14 16:30:08 2011 +0400

    configure: fix FreeBSD header detection (BZ#408)
    
    This change is based on Xavier Beaudouin's patch (which fixes detection
    of 3 config.h macros on FreeBSD without any impact to Linux build of
    Quagga) and FreeBSD port patch (which fixes 5 config.h macros, but
    breaks the Linux build), it fixes 5 macros and works for both FreeBSD 8
    and Linux.

commit e81537d3be9f95d333d658329e5d69e6188b53c0
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Thu Jul 14 12:36:19 2011 +0400

    bgpd: more SAFI fixes
    
    Two macros resolving to the same integer constant broke a case block and
    a more thorough merge of BGP_SAFI_VPNV4 and BGP_SAFI_VPNV6 was
    performed.
    
    * bgpd.h: MPLS-labeled VPN SAFI is AFI-independent, switch to single
    * macro
    * bgp_capability_test.c: update test data
    * bgp_mp_attr_test.c: idem
    * bgp_route.c: (bgp_maximum_prefix_overflow, bgp_table_stats_vty) update
      macro and check conditions (where appropriate)
    * bgp_packet.c: (bgp_route_refresh_send, bgp_capability_send,
      bgp_update_receive, bgp_route_refresh_receive): idem
    * bgp_open.c: (bgp_capability_vty_out, bgp_afi_safi_valid_indices,
      bgp_open_capability_orf, bgp_open_capability): idem
    * bgp_attr.c: (bgp_mp_reach_parse, bgp_packet_attribute,
      bgp_packet_withdraw): idem

commit 87f011e5297ab9d3c599916800aab1198613071e
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Wed Jul 13 16:53:13 2011 +0400

    bgpd: fix SAFI for for MPLS labeled VPN-IPv6
    
    * bgpd.h: change value of BGP_SAFI_VPNV6 to 128 (RFC4659, BZ#659)
    * bgp_route.c: (bgp_table_stats_vty) fix length argument to strncmp()

commit ea15b20a7cb8e41e61c48e36a554c576ed6f2f91
Author: heasley <heas@shrubbery.net>
Date:   Tue Jul 12 20:09:18 2011 +0400

    bgpd: consistent log msg format (BZ#565)

commit 82a963a1b8d9066f5e3e24e98b65398d32a73876
Author: Dmitrij Tejblum <tejblum@yandex-team.ru>
Date:   Tue Jul 12 17:53:33 2011 +0400

    ospf6d: check MTU with message header size in mind
    
    * ospf6_message.c: (ospf6_packet_max): new function, return maximum IPv6
      payload on an interface; (ospf6_hello_send, ospf6_dbdesc_send,
      ospf6_dbdesc_send_newone, ospf6_lsreq_send, ospf6_lsupdate_send_neighbor,
      ospf6_lsupdate_send_interface, ospf6_lsack_send_neighbor,
      ospf6_lsack_send_interface): compare message size with the maximum
      payload instead of the MTU.

commit ab1be8a20de4db0d17e28483660627fd843845f1
Author: Dmitrij Tejblum <tejblum@yandex-team.ru>
Date:   Fri Apr 22 19:27:54 2011 +0400

    ospf6d: copy "mtu-ignore" option from ospfd
    
    "mtu-ignore" is an option ospfd used to mimic from the vendor's
    implementation, now ospf6d will also implement it.
    
    * ospf6_interface.h: extend ospf6_interface structure by one flag
    * ospf6_interface.c: (ipv6_ospf6_mtu_ignore, no_ipv6_ospf6_mtu_ignore):
      new declarations; (ospf6_interface_create): show initial value for
      consistency; (ospf6_interface_show): print flag status
    * ospf6_message.c: (ospf6_dbdesc_recv): consider interface-specific flag
      when checking MTU

commit 878715cc78de825894d83458b7c8bd68e3f347cc
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Tue Jul 12 17:14:13 2011 +0400

    version RE-0.99.17.1

commit e70e575a8cb1edcab2eedade04bb4ac31938bddf
Author: Paul Jakma <paul@quagga.net>
Date:   Tue Jul 5 00:41:59 2011 +0400

    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.
    (cherry picked from commit c8f3fe3063cb9ff193b13011cfbda3e605395340)
    
    Conflicts:
    
    	bgpd/bgp_attr.c (caused by c8e7b895, resolved)

commit fc09716b81e67f2d06dc92ff7bcb1efdf18c4eec
Author: Paul Jakma <paul@quagga.net>
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.
    (cherry picked from commit 0c46638122f10019a12ae9668aec91691cf2e017)

commit f668053f1453d64296db6807101450ad749ba730
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Fri Mar 18 20:20:53 2011 +0300

    doc: fix "ipv6 address" interface command syntax (#608)
    (cherry picked from commit e6844aa5d23cf56dd1f31afc96e8145ab188953f)

commit 49efb768502ddb1bb78d609c25b3818c6a519a2a
Author: Andrew J. Schorr <ajschorr@alumni.princeton.edu>
Date:   Thu Feb 24 13:52:14 2011 +0300

    ripd: resolve debug statements issue (bug 442)
    
    ...A nasty bug, if you forgot to disable debugging, stored the config
    and reboot your machine - if you really depend on ripd, then the machine
    will not fully come back on the network, because ripd fails.
    (cherry picked from commit 0fa0335316ce14a79ea4bbb0c40e1322c9941dd3)

commit 16ac59798e0bafc5083ae4b3be2c3edd89a62e5f
Author: David Ward <david.ward@ll.mit.edu>
Date:   Mon Jan 17 10:58:52 2011 +0300

    bgpd: VTY string fixes for debug commands
    
    * bgpd/bgp_debug.c: fix VTY strings for BGP debug commands to match
      correct syntax
    (cherry picked from commit 6e22b9017e1ae2ce61c383b1b2b63973207704ac)

commit bbccf41f8e5fb83831da81a339a578a3d5fc5f4a
Author: Dmitrij Tejblum <tejblum@yandex-team.ru>
Date:   Fri Jan 14 18:27:05 2011 +0300

    bgpd: fix handling of "Unsupported Capability"
    
    * bgp_packet.c: (bgp_notify_receive) justify the difference between
    BGP_NOTIFY_OPEN_UNSUP_PARAM and BGP_NOTIFY_OPEN_UNSUP_CAPBL cases, as
    it is explained in RFC5492, page 3, paragraph 1.
    
    "Unsupported Capability" error does not mean, that the peer doesn't
    support capabilities advertisement -- quite the opposite (if the peer
    would not support capabilities advertisement, the code would be
    "Unsupported Optional Parameter"). Thus there is no reason to mark
    the peer as one non-supporting capabilities advertisement.
    
    Example: suppose the peer is in fact IPv6-only, but we didn't configure
    anything address-family specific for it. Then, the peer would refuse
    the session with "Unsupported Capability" code. If we internally set
    the peer as non-supporting capabilities advertisement after that, we
    will not be able to establish the session with it ever, even with a
    fixed configuration -- IPv6-only BGP session cannot be established
    without capabilities.
    
    In practice an edge case would be seen as the same IPv6 peer working
    with its "neighbor" block read from bgpd.conf, but not working, when
    slowly input in "conf t" mode.
    (cherry picked from commit c7aa8abd8788c3607ad0131f02e892cf92221e40)

commit a1239bc50d26ce963352f8ddaa6c1382e437d286
Author: Dmitrij Tejblum <tejblum@yandex-team.ru>
Date:   Thu Jan 13 18:25:40 2011 +0300

    ospf6d: fix crash in SPF calculation
    
    * ospf6_spf.c: Don't replace a node with another node with a lower
      number of hops, instead get them from the queue in the correct
      order. (Actually, the replacement crashed the ospf6d daemon
      rather than worked.)
    (cherry picked from commit 403138e189c24f6867824c4eeb668d11564e1ca0)

commit dfc1d5caacfe0346499f2eceff18d56af0b85e2f
Author: Denis Ovsienko <infrastation@yandex.ru>
Date:   Wed Dec 8 18:51:37 2010 +0300

    bgpd: fix community-list error message spelling
    
    * bgp_vty.c: (community_list_perror, show_ip_community_list_arg,
      show_ip_extcommunity_list_arg) fix spelling
    (cherry picked from commit b729294c8c5c6f2af8ddf6cfbea2374b6faabe9d)