commit 258f3dad6471a680c2c583a300cfd396efe9a037
Author: Paul Jakma <[email protected]>
Date:   Tue Oct 18 14:03:52 2016 +0100

   release: Bump version to 1.1.0

commit de58bdb9cdbd88baae7123856462380df365b7ff
Author: Paul Jakma <[email protected]>
Date:   Tue Oct 18 14:03:37 2016 +0100

   build: remove werror from buildtest.sh for now

commit cfb1fae25f8c092e0d17073eaf7bd428ce1cd546
Author: David Lamparter <[email protected]>
Date:   Wed Aug 31 13:31:16 2016 +0200

   zebra: stack overrun in IPv6 RA receive code (CVE-2016-1245)

   The IPv6 RA code also receives ICMPv6 RS and RA messages.
   Unfortunately, by bad coding practice, the buffer size specified on
   receiving such messages mixed up 2 constants that in fact have
   different values.

   The code itself has:
    #define RTADV_MSG_SIZE 4096
   While BUFSIZ is system-dependent, in my case (x86_64 glibc):
    /usr/include/_G_config.h:#define _G_BUFSIZ 8192
    /usr/include/libio.h:#define _IO_BUFSIZ _G_BUFSIZ
    /usr/include/stdio.h:# define BUFSIZ _IO_BUFSIZ

   FreeBSD, OpenBSD, NetBSD and Illumos are not affected, since all of them
   have BUFSIZ == 1024.

   As the latter is passed to the kernel on recvmsg(), it's possible to
   overwrite 4kB of stack -- with ICMPv6 packets that can be globally sent
   to any of the system's addresses (using fragmentation to get to 8k).

   (The socket has filters installed limiting this to RS and RA packets,
   but does not have a filter for source address or TTL.)

   Issue discovered by trying to test other stuff, which randomly caused
   the stack to be smaller than 8kB in that code location, which then
   causes the kernel to report EFAULT (Bad address).

   Signed-off-by: David Lamparter <[email protected]>
   Reviewed-by: Donald Sharp <[email protected]>

commit ef9bc88981570ef8ea744f0ab96730d192328a49
Author: Christian Franke <[email protected]>
Date:   Tue Jun 14 20:07:06 2016 +0200

   isisd: Fix size of malloc

   Signed-off-by: Christian Franke <[email protected]>
   Signed-off-by: Christian Franke <[email protected]>
   Acked-by: Donald Sharp <[email protected]>

commit 985823ff91ed784b9affdb0104f617b2c1732dab
Author: Christian Franke <[email protected]>
Date:   Tue Jun 14 20:07:05 2016 +0200

   isisd: fix an error that was probably a result of copypasting

   The code should check for the existance of the correct list prior to
   accessing it.

   Signed-off-by: Christian Franke <[email protected]>
   Signed-off-by: Christian Franke <[email protected]>
   Acked-by: Donald Sharp <[email protected]>

commit 8548973ace90a78035893c3663c18b485425e291
Author: Christian Franke <[email protected]>
Date:   Tue Jun 14 20:07:04 2016 +0200

   ospf6d: fix off-by-one on display of spf reasons

   The loop should only iterate to array_size - 1.

   Signed-off-by: Christian Franke <[email protected]>
   Signed-off-by: Christian Franke <[email protected]>
   Acked-by: Donald Sharp <[email protected]>

commit 7fca43f7184f6eb9fbe952f1eecaafcf079502f2
Author: Christian Franke <[email protected]>
Date:   Tue Jun 14 20:07:03 2016 +0200

   ospf6d: don't access nexthops out of bounds

   Given that the && is evaluated lazily from left to right,
   i < OSPF6_MULTI_PATH_LIMIT should be checked prior to calling
   ospf6_nexthop_is_set on the array element, not the other way around.

   Signed-off-by: Christian Franke <[email protected]>
   Signed-off-by: Christian Franke <[email protected]>
   Acked-by: Donald Sharp <[email protected]>

commit 0d8b32a5ee43ccc4a67dd87ab21a4ab553e3bf44
Author: Christian Franke <[email protected]>
Date:   Tue Jun 14 20:07:00 2016 +0200

   bgpd: fix off-by-one in attribute flags handling

   bgp_attr_flag_invalid can access beyond the last element of attr_flags_values.
   Fix this by initializing attr_flags_values_max to the correct value.

   Signed-off-by: Christian Franke <[email protected]>
   Signed-off-by: Christian Franke <[email protected]>
   Acked-by: Donald Sharp <[email protected]>

commit bb04351973bd369623a0fbed3ef59e7b4fd0bd05
Author: Lou Berger <[email protected]>
Date:   Mon Oct 10 11:56:52 2016 -0400

   bgp: restore missing check from original ignore NHT change

commit e33545cb9d7a8c7875f18b6d44bf75d320ccedfb
Author: Lou Berger <[email protected]>
Date:   Mon Oct 10 09:50:58 2016 -0400

   bgp: fix warning in bgp_nht.c

commit 68bfb6190e19898adc0e420b6346cf4778705e60
Author: Lou Berger <[email protected]>
Date:   Thu Oct 6 09:59:32 2016 -0400

   bgp: ignore NHT when bgpd has never connected zebra

commit 743dd42b3f5d4bc5f9a86b91364c67217f42c6d1
Author: Paul Jakma <[email protected]>
Date:   Fri Sep 30 13:55:47 2016 +0100

   bgpd: Fix NHT race with Connect leading to test tool issues

   * The NHT change:

      "bgpd, zebra: Use next hop tracking for connected routes too"

     introduces a race where bgp_connect_check can be called on a peer in
     Connect state before the TCP handshake has completed. If this happens,
     then the SO_ERROR sockopt to check the state of the socket is undefined
     or at least does not return a useful result - it returns 0, as with
     a connected socket. SO_ERROR should only be called on non-block sockets
     after the socket has been ready for writing.

     The net result is that bgpd can then incorrectly advance the peer FSM for
     the socket (also the main 'peer'), to OpenSent. As part of which, any
     incoming connection from the peer will pass through collision_detect and
     may be (incorrectly) closed, depending on the RIDs.

     This race is reliably hit with testing tools which wait to listen for
     incoming BGP connections from the RUT to know it is in Connect/Active, and
     which ignore the TCP connection (no SYN|ACK, no RST), and then launch their
     own connection.

     The fix is to better integrate the BGP FSM and the NHT update, to ensure
     connect_check is not called on peers in Connect state.

     Note: There may be no need at all for NHT to tickle FSM.

   * bgpd.h: Add NHT_Update FSM event for NHT valid.

   * bgp_fsm.c: (bgp_fsm_nht_update) There is no need to have a separate
     switch based FSM with its own event via an exported function.  Have
     NHT raise the NHT_Update even on the peer, instead of calling a
     side-channel function into a sub-FSM in the FSM.  No need to have
     code for BGP_Start, FSM can call that.  Actions for Connect and
     Active are the same and just lead to ConnectRetry_timer_expired
     event - so FSM can just call same transition func as that.

     No need to call bgp_connect_check on Connect, as Connect implies no
     connection.

     (FSM) Handle the NHT_Update event, replacing bgp_fsm_nht_update.
     Idle -> bgp_start, Connect and Active were doing the same as
     ConnectRetry_timer_expired so replicate those. Rest are No-Ops.

   * bgp_nht.c: (evaluate_paths) Raise NHT_Update FSM event. Always valid.
   * bgp_packet.{c,h}: (bgp_connect_check) NHT change now unnecessary, revert.

commit af177b245ef3f092ecd0ae75cb75c2d797a7b139
Author: Christian Franke <[email protected]>
Date:   Mon Aug 15 13:36:59 2016 +0200

   isisd: warn if there is an MTU issue on circuits

   Instead of later tripping over an assert, add a proper warning for
   interfaces whose MTU is too low.

   Signed-off-by: David Lamparter <[email protected]>

commit 4c7d7173baa9fe064349f5fe2e0bdcb367475499
Author: David Lamparter <[email protected]>
Date:   Sat Aug 13 01:32:52 2016 +0200

   isisd: fold up isis_circuit_is_type_set()

   see previous commit.

   Signed-off-by: David Lamparter <[email protected]>

commit 1187e25191b38a1876fafbfd733a70942ebcb062
Author: David Lamparter <[email protected]>
Date:   Sat Aug 13 01:20:20 2016 +0200

   isisd: fix is_type_set

   Code's "is_type" is "circuit-type" in CLI, "circuit_type" is "network"
   (type) in CLI, and the function to change is_type is
   isis_event_circuit_type_change()... *headdesk*

   Reported-by: Martin Winter <[email protected]>
   Signed-off-by: David Lamparter <[email protected]>

commit a798abbe65cc2cdce050a1aef85c6d243d44a575
Author: Christian Franke <[email protected]>
Date:   Thu Aug 11 16:08:05 2016 +0200

   isisd: fix network-type configuration

   Reported-by: Martin Winter <[email protected]>
   Signed-off-by: David Lamparter <[email protected]>

commit 5a1a087baebcc4a996de66c558bac49419034ee0
Author: David Lamparter <[email protected]>
Date:   Thu Aug 11 17:02:50 2016 +0200

   isisd: fix isis_circuit_af_set() on fresh circuit

   A newly-created circuit will be in enabled state but have neither IPv4
   nor IPv6 configured.  The logic in isis_circuit_af_set assumed that
   "enabled" is equivalent to "ip || ipv6".

   This is the only place where this distinction is currently relevant, as
   the CLI won't allow enabling an interface without enabling either IPv4
   or IPv6;  and it will also disable a circuit when both are deconfigured.

   Reported-by: Martin Winter <[email protected]>
   Signed-off-by: David Lamparter <[email protected]>

commit 515812ddbbb6a41298261688c8ccd0df8e900f17
Author: David Lamparter <[email protected]>
Date:   Thu Aug 11 16:59:08 2016 +0200

   isisd: fix isis_circuit_create()

   Between the awkwardly managed CSM and the tacked-on IPv6 support, the
   simplified logic to setup a circuit wasn't quite right.

   Note that the API essentially allows creating a circuit without enabling
   either IPv4 or IPv6.  This wasn't possible before and probably breaks
   isisd in 'interesting' ways.  The CLI won't do this, so it's only an
   issue when adding on other configuration mechanisms.

   Reported-by: Martin Winter <[email protected]>
   Signed-off-by: David Lamparter <[email protected]>

commit f263413f762058d887aa7b2b6c502bd84af3c923
Author: David Lamparter <[email protected]>
Date:   Thu Jul 28 17:23:32 2016 +0200

   isisd: drop unused per-type metric values

   Expense, Error and Delay metrics never quite made it into the real
   world.  Either way isisd does nothing useful with them, so let's drop
   them from the code.  If someone wants to implement them, this patch can
   still be reverted.

   Signed-off-by: David Lamparter <[email protected]>

commit 68845c19e468480dbdf5483f0b60323674a5ec28
Author: Christian Franke <[email protected]>
Date:   Thu Jul 28 17:23:31 2016 +0200

   isisd: API: area (L1), domain (L2) passwords

   Last isisd CLI cleanup for now.  This also folds L1 & L2 configs into
   common functions, reducing CLI function bloat by a bit.

   (This patch contains changes authored by both Christian Franke and David
   Lamparter.)

   Signed-off-by: David Lamparter <[email protected]>

commit 4570ca47e11602b25e37ab709fa00bdf8c183afb
Author: Christian Franke <[email protected]>
Date:   Thu Jul 28 17:23:30 2016 +0200

   isisd: API: timers (LSP, SPF)

   See previous commits...

   Signed-off-by: David Lamparter <[email protected]>

commit 304c7dac53e2b1b3dc135ce2ff1aa38df46ec727
Author: Christian Franke <[email protected]>
Date:   Thu Jul 28 17:23:29 2016 +0200

   isisd: API: LSP-MTU & area level

   Yet more CLI functions in isis_vty.c using more nice setters.

   Signed-off-by: David Lamparter <[email protected]>

commit b5d2f5f5085147ff9e9d5ace7705c422cbc6afd0
Author: David Lamparter <[email protected]>
Date:   Thu Jul 28 17:23:28 2016 +0200

   isisd: API: timers (IIH, CSNP, PSNP)

   No setters needed since change of fields doesn't require any
   specific action to make it apply.  Just move the CLI defs to isis_vty.c.

   Signed-off-by: David Lamparter <[email protected]>

commit f5fbfb26e961d6b4b129f98bc27a3e822620eba3
Author: Christian Franke <[email protected]>
Date:   Thu Jul 28 17:23:27 2016 +0200

   isisd: API: circuit password

   This cleans up circuit password configuration a little bit.
   (Restructured several times by both Christian Franke and David
   Lamparter.)

   Signed-off-by: David Lamparter <[email protected]>

commit ccd485d17b13f3b6f5669be9b8820d8807468d98
Author: Christian Franke <[email protected]>
Date:   Thu Jul 28 17:23:26 2016 +0200

   isisd: API: basic area config

   Move out basic area configuration (metric type, overload and attachment
   bits, dynamic hostname extension enable) into isis_vty.c.

   [v2: moved stuff back here that accidentally was in the previous patch]

   Signed-off-by: David Lamparter <[email protected]>

commit 3732cba03049b18fc414c36254cfc11186b2ba53
Author: David Lamparter <[email protected]>
Date:   Fri Jul 29 16:19:40 2016 +0200

   isisd: API: basic circuit config

   Create isis_vty.c and start moving off CLI functions into that.  These
   then call newly-added "nice" API wrappers.

   Patch contains significant work authored by Christian Franke.

   [v2: removed stuff that crept in from the next patch]

   Signed-off-by: David Lamparter <[email protected]>

commit f5603ccd01131a1905b842e36171d0f5c0424496
Author: Paul Jakma <[email protected]>
Date:   Mon Sep 12 13:53:08 2016 +0100

   isisd: cleanup isis_circuit_lookup, errant from TE changes?

commit b4e011985232f28d98e4df88c7cb13ee8f95ef46
Author: Evgeny Uskov <[email protected]>
Date:   Wed Jan 13 13:58:00 2016 +0300

   bgpd: Fix buffer overflow error in bgp_dump_routes_func

   Now if the number of entries for some prefix is too large, multiple
   TABLE_DUMP_V2 records are created.  In the previous version in such
   situation bgpd crashed with SIGABRT.

commit 810ab34c56a9b9b8870b961bc96986e6b8550863
Author: Lou Berger <[email protected]>
Date:   Mon Sep 5 12:18:15 2016 -0400

   bgp: bgp_nexthop init/free AFI_ETHER related NH tables

commit 19e6c193db0c74ed08dbb5cd30dfa8f6a4377af0
Author: Paul Jakma <[email protected]>
Date:   Tue Sep 6 17:23:48 2016 +0100

   bgpd: bgp_nexthop_cache not deleted with peers

   * Fix mild leak, bgp_nexthop_caches were not deleted when their peer was.
     Not a huge one, but makes valgrinding for other leaks noisier.

     Credit to Lou Berger <[email protected]> for doing the hard work of
     debugging and pinning down the leak, and supplying an initial fix.
     That one didn't quite get the refcounting right, it seemed, hence
     this version.

     This version also keeps bncs pinned so long as the peer is defined, where
     Lou's tried to delete whenever the peer went through bgp_stop. That causes
     lots of zebra traffic if down peers go Active->Connect->Active, etc., so
     leaving bnc's in place until peer_delete seemed better.

   * bgp_nht.c: (bgp_unlink_nexthop_by_peer) similar to bgp_unlink_nexthop, but
     by peer.
   * bgp_nht.c: (bgp_unlink_nexthop_check) helper to consolidate checking
     if a bnc should be deleted.
     (bgp_unlink_nexthop_by_peer) ensure the bnc->nht_info peer reference
     is removed, and hence allow bncs to be removed by previous.
   * bgpd.c: (peer_delete) cleanup the peer's bnc.

commit c365b534623279049bc4cc0c5d03fdbcd2d466b0
Author: Lou Berger <[email protected]>
Date:   Tue Jul 26 10:58:53 2016 -0400

   bgpd: Remove unused and leaking code

commit 4b502fdb64db6fcad5359973e3ff7e7c88e93a7d
Author: Paul Jakma <[email protected]>
Date:   Wed Jul 27 17:06:32 2016 +0100

   tests: Fix testbgpmpattr and make check, broken by BGP NHT.

   * bgp_mp_attr_test.c: Fix segfault due to uninitialised bgp_nexthop_cache
     globals in nexthop parsing path, which require bgp_scan_init() to have
     been called.

     Fixes issue introduced with:

     'bgpd, zebra: Use next hop tracking for connected routes too'

commit 789dfc9fe07e23e6c73a299ecbbcbb6d3d411391
Author: Paul Jakma <[email protected]>
Date:   Tue Sep 6 11:20:27 2016 +0100

   bgpd: Fix crash in 'show ip bgp nexthop'

   * bgp_nexthop.c: (show_ip_bgp_nexthop_table) the AFIs are sparse, and start
     from 1, check there's a table before derefing so as not to crash.

commit d9ab53ab40dcba66f34ca75695dc930e6093f789
Author: Dinesh Dutt <[email protected]>
Date:   Tue May 19 17:47:21 2015 -0700

   bgpd, zebra: Use next hop tracking for connected routes too

   Allow next hop tracking to work with connected routes
   And cleanup obsolete code in bgp_scan and bgp_import.

   Signed-off-by: Dinesh Dutt <[email protected]>
   Signed-off-by: Donald Sharp <[email protected]>
   Edits: Paul Jakma <[email protected]> Rebase re-ordering conflicts with
          NHT route-map, potential errors.

commit 5bcd754ff8d7947978acb44e77dcab323973fb1e
Author: Daniel Walton <[email protected]>
Date:   Tue May 19 17:58:10 2015 -0700

   bgpd: crash if attributes alone consume > 4096 bytes

   This patch fixes a crash if attributes on a patch consume
   more than 4096 bytes.

   Signed-off-by: Daniel Walton <[email protected]>

commit 6c6c1bf0fc66713cb0b3448a4323042f44016502
Author: Daniel Walton <[email protected]>
Date:   Mon Nov 9 20:21:56 2015 -0500

   bgpd: Improve peer scaling

   Reduce the amount of time it takes to bring up a large number of peers.

   This is accomplished by removing jitter and reducing the number
   of seconds to wait before connecting to a peer.

   Signed-off-by: Daniel Walton <[email protected]>

   Edited-by: Paul Jakma <[email protected]> for rebase conflicts, and to add
              jitter on connect timer back in. Can be removed in an update.

commit e25a9741fb1ba52a69833687caa01f13cd4d1320
Author: Daniel Walton <[email protected]>
Date:   Mon Nov 9 20:21:50 2015 -0500

   bgpd: don't count a route with an unreachable nexthop in PfxRcd

   When a route is received from a peer that we cannot
   reach do not count that route as a received route.

   Signed-off-by: Daniel Walton <[email protected]>

commit cb9ed1d867f6ac9e0bad85c47aabeb10b94be2e5
Author: Donald Sharp <[email protected]>
Date:   Thu Jan 14 09:19:29 2016 -0500

   ospf6d: Fix double increment of Sequence Number

   When OSPF6 is creating the header for the ROUTER LSA type
   if the packet being sent has interface information to add
   to the data, the Sequence Number is at least double incremented.

   This commit may cause issues with ANVL 16.10.

   [note: folded in:
    "ospf6d: Fix Some ANVL test cases 16.6 and partial 16.10"
    -- Paul Jakma]

   Signed-off-by: Donald Sharp <[email protected]>

commit 4f84737dee1e84b7219f66e983812abd8a6ca1d3
Author: Donald Sharp <[email protected]>
Date:   Tue Dec 22 15:24:25 2015 -0500

   zebra: Fix some warnings found during compile.

   This commit fixes some warnings found in Martin's Testbed
   that compiles sun solaris and freebsd images.

   Signed-off-by: Donald Sharp <[email protected]>

commit afc9cf97363c0b7ec6c253731a75ac83e70ea190
Author: Vipin Kumar <[email protected]>
Date:   Tue May 19 18:03:50 2015 -0700

   osfd: Make OSPF compliant to the last sentence of this section in RFC 2328

   9.5 Sending Hello packets

   Hello packets are sent out each functioning router interface.
   They are used to discover and maintain neighbor
   relationships.[6] On broadcast and NBMA networks, Hello Packets
   are also used to elect the Designated Router and Backup
   Designated Router.
   The format of an Hello packet is detailed in Section A.3.2.  The
   Hello Packet contains the router's Router Priority (used in
   choosing the Designated Router), and the interval between Hello
   Packets sent out the interface (HelloInterval).  The Hello
   Packet also indicates how often a neighbor must be heard from to
   remain active (RouterDeadInterval).  Both HelloInterval and
   RouterDeadInterval must be the same for all routers attached to
   a common network.  The Hello packet also contains the IP address
   mask of the attached network (Network Mask).  On unnumbered
   point-to-point networks and on virtual links this field should
   be set to 0.0.0.0.

   Signed-off-by: Vipin Kumar <[email protected]>
   Reviewed-by: Vivek Venkatraman <[email protected]>
   Reviewed-by: Dinesh G Dutt <[email protected]>

commit fc2cee2bed4ebf664ba0afa1678027365f3923f7
Author: Daniel Walton <[email protected]>
Date:   Tue May 19 18:03:44 2015 -0700

   zebra: Fix incorrectly flagged nexthop

   A valid BGP nexthop is sometimes flagged as invalid, this patch
   fixes that issue.

   Signed-off-by: Daniel Walton <[email protected]>
   Edited-by: Paul Jakma <[email protected]>, also add the check for
   NEXTHOP_FLAG_ACTIVE which was added in a separate, route-map related commit
   (6baeed5 lib, zebra: Add route-map support for Next Hop Tracking)

commit c69698704806a9ac5035521b1820057097919227
Author: Daniel Walton <[email protected]>
Date:   Tue May 19 18:03:43 2015 -0700

   bgpd: Correct a few fuzz failures in BGP

   Testing revealed some issues with handling data input.
   This patch fixes those issues.

   Signed-off-by: Daniel Walton <[email protected]>

commit cb37de4c6863c772b654a851c9fe3eeb1f677692
Author: Vipin Kumar <[email protected]>
Date:   Tue May 19 18:03:40 2015 -0700

   ospf6d: Fix loss of hello's on interface

   SYMPTOM:

   With quagga running on Linux, 'ifdown <if-name>' followed by 'ifup <ifname>
   can cause OSPFv3 to not receive Hello packets on the interface.

   ISSUE:

   Operating System's interface IPv6 readiness may not be guaranteed at the
   time of interface-up event. Thats because the ipv6 components in an OS may
   also be listening to the same interface-up event that (in this case) is
   relayed to OSPFv3.

   In this failure case, setsockopt with option IPV6_JOIN_GROUP on the interface
   returned EINVAL.

   Error logs -
   OSPF6: Zebra Interface state change: swp1 index 3 flags 11043 metric 1 mtu 1500
   OSPF6: Interface Event swp1: [InterfaceUp]
   OSPF6: Network: setsockopt (20) on ifindex 3 failed: Invalid argument

   FIX:

   To take care of this possible race condition, any address-family related
   setting should be retried. Given it's a rare condition and window of this
   race should be short, the patch adds a limited retry mechanism for the
   IPV6 membership setting on the socket.

   Signed-off-by: Vipin Kumar <[email protected]>
   Reviewed-by: Dinesh Dutt <[email protected]>
                Satish Ashok <[email protected]>

commit 2153090340f059eb787d72ba973ea55e150e9dec
Author: Daniel Walton <[email protected]>
Date:   Tue May 19 18:03:38 2015 -0700

   bgpd: Fix BGP_INFO_ATTR_CHANGED being cleared incorrectly

   back to back route refreshes can set BGP_INFO_ATTR_CHANGED
   on the first route refresh but then clear it on the second

   Signed-off-by: Daniel Walton <[email protected]>

commit 4c7efde6db75229069be72b34a93f279fe57d23b
Author: Donald Sharp <[email protected]>
Date:   Mon Nov 16 18:19:18 2015 -0500

   zebra: Add check to notice when an interface is unnumbered

   If an interface is not a loopback and it's prefixlen == 32
   assume that it is unnumbered.

   Signed-off-by: Donald Sharp <[email protected]>

commit 988a50c54dbd20290c085a36d4c2893f3d515803
Author: Daniel Walton <[email protected]>
Date:   Tue May 19 17:58:11 2015 -0700

   bgpd, lib: Clarify the different permutations of soft clearing a peer

   Cleanup vtysh output for the soft clearing of a bgp peer so
   that it is clearer what is going to happen.

   Signed-off-by: Daniel Walton <[email protected]>

commit 9e518dd52b1fbf7d395a6bb49a101d632ced5e5b
Author: Daniel Walton <[email protected]>
Date:   Tue May 19 17:47:26 2015 -0700

   bgpd: Alow gracefull shutdown of peers

   Send CEASE NOTIFICATIONS to all peers on "no router bgp"

   Signed-off-by: Daniel Walton <[email protected]>

commit 9ae8552c7341071ffac34aec9902fa3dd7dc8fdf
Author: Dinesh Dutt <[email protected]>
Date:   Tue May 19 17:47:22 2015 -0700

   zebra: Gather and display detailed info about clients of Zebra

   The display of zebra client info is rather paltry: just the name and the FD.
   For troubleshooting and general helpfulness, its useful to gather more info
   about each client and display that. This patch does just that.

   Signed-off-by: Dinesh Dutt <[email protected]>

commit c7f25b90902d4be39132b1174440746b571220ce
Author: Daniel Walton <[email protected]>
Date:   Tue May 19 17:47:22 2015 -0700

   bgpd, ospfd, ospf6d, ripd, ripngd, zebra: 'set metric -12' is broken in the parser

   Signed-off-by: Daniel Walton <[email protected]>

commit f2eb9caac6425473af8d6d15534439fe715f7426
Author: Daniel Walton <[email protected]>
Date:   Tue May 19 17:47:21 2015 -0700

   bgpd: atomic-aggregate is lost when we aggregate another aggregate that has atomic-aggregate

   This patch ensures that we don't accidently loose the atomic-aggregate
   when we aggregate another aggregate that also has atomic-aggregates.

   Signed-off-by: Daniel Walton <[email protected]>

commit 96d1060a704d88e04fcd446cce078a6131c3f6db
Author: Paul Jakma <[email protected]>
Date:   Fri Jul 1 14:23:45 2016 +0100

   *: Widen width of Zserv routing tag field.

   * lib/zebra.h: Introduce a route_tag_t type for route tags generally,
     and make it 4 bytes wide - so it can directly hold things like an ASN, or
     the OSPF ASE-LSA tag.
   * zebra/rib.h: Use route_tag_t instead of u_short.
   * *: Update 'u_short (*)?(tag|tmp)' to use route_tag_t instead of u_short.
     Update stream_{get,put} to l instead of w.
   * ospf_zebra.c: (ospf_zebra_add) test OSPF tag within range of ROUTE_TAG_MAX.

commit 3b4fb574b414e7b7776b581688f189f2fc736a38
Author: Piotr Chytła <[email protected]>
Date:   Tue Dec 1 10:16:02 2015 -0500

   ripd, ripngd: add support for route tags

   [Forward ported by Cumulus]

   Documentation
   -------------
   All ipv4 and ipv6 static route commands now have a "tag" option
   which allows the user to set a tag between 1 and 65535.

   quagga(config)# ip route 1.1.1.1/32 10.1.1.1 tag ?
     <1-65535>  Tag value
   quagga(config)# ip route 1.1.1.1/32 10.1.1.1 tag 40
   quagga(config)#

   quagga# show ip route 1.1.1.1/32
   Routing entry for 1.1.1.1/32
     Known via "static", distance 1, metric 0, tag 40, best
     * 10.1.1.1, via swp1

   quagga#

   The route-map parser supports matching on tags and setting tags
   !
   route-map MATCH_TAG_18 permit 10
     match tag 18
   !

   !
   route-map SET_TAG_22 permit 10
     set tag 22
   !

   BGP and OSPF support:
   - matching on tags when redistribing routes from the RIB into BGP/OSPF.
   - setting tags when redistribing routes from the RIB into BGP/OSPF.

   BGP also supports setting a tag via a table-map, when installing BGP
   routes into the RIB.

   Signed-off-by: Daniel Walton <[email protected]>
   Signed-off-by: Piotr Chytla <[email protected]>
   Signed-off-by: Donald Sharp <[email protected]>

commit fb214471c88616d67ece3734128ef04ed4a8ed86
Author: Piotr Chytła <[email protected]>
Date:   Tue Dec 1 13:47:06 2015 -0500

   zebra: add support for route tags

   [Forward ported by Cumulus]

   Documentation
   -------------
   All ipv4 and ipv6 static route commands now have a "tag" option
   which allows the user to set a tag between 1 and 65535.

   quagga(config)# ip route 1.1.1.1/32 10.1.1.1 tag ?
     <1-65535>  Tag value
   quagga(config)# ip route 1.1.1.1/32 10.1.1.1 tag 40
   quagga(config)#

   quagga# show ip route 1.1.1.1/32
   Routing entry for 1.1.1.1/32
    Known via "static", distance 1, metric 0, tag 40, best
    * 10.1.1.1, via swp1

   quagga#

   The route-map parser supports matching on tags and setting tags
   !
   route-map MATCH_TAG_18 permit 10
    match tag 18
   !

   !
   route-map SET_TAG_22 permit 10
    set tag 22
   !

   BGP and OSPF support:
   - matching on tags when redistribing routes from the RIB into BGP/OSPF.
   - setting tags when redistribing routes from the RIB into BGP/OSPF.

   BGP also supports setting a tag via a table-map, when installing BGP
   routes into the RIB.

   Signed-off-by: Daniel Walton <[email protected]>
   Signed-off-by: Piotr Chytla <[email protected]>
   Signed-off-by: Donald Sharp <[email protected]>

commit 605aa331d814b0977dd8435168dca5b2b7928996
Author: Piotr Chytła <[email protected]>
Date:   Tue Dec 1 10:03:54 2015 -0500

   bgpd, vtysh: Add support for route tags

   [Forward ported by Cumulus]

   Documentation
   -------------
   All ipv4 and ipv6 static route commands now have a "tag" option
   which allows the user to set a tag between 1 and 65535.

   quagga(config)# ip route 1.1.1.1/32 10.1.1.1 tag ?
     <1-65535>  Tag value
   quagga(config)# ip route 1.1.1.1/32 10.1.1.1 tag 40
   quagga(config)#

   quagga# show ip route 1.1.1.1/32
   Routing entry for 1.1.1.1/32
     Known via "static", distance 1, metric 0, tag 40, best
     * 10.1.1.1, via swp1

   quagga#

   The route-map parser supports matching on tags and setting tags
   !
   route-map MATCH_TAG_18 permit 10
    match tag 18
   !

   !
   route-map SET_TAG_22 permit 10
    set tag 22
   !

   BGP and OSPF support:
   - matching on tags when redistribing routes from the RIB into BGP/OSPF.
   - setting tags when redistribing routes from the RIB into BGP/OSPF.

   BGP also supports setting a tag via a table-map, when installing BGP
   routes into the RIB.

   Signed-off-by: Daniel Walton <[email protected]>
   Signed-off-by: Piotr Chytla <[email protected]>
   Signed-off-by: Donald Sharp <[email protected]>

   Edits by: Paul Jakma <[email protected] - conflicts on re-ordering with the
   rmap-event and table-map patches, those will now need to update the tags stuff.

commit 2b2e38c3169ae0221645e4dd9b40388660ce3f68
Author: Piotr Chytła <[email protected]>
Date:   Tue Dec 1 10:10:41 2015 -0500

   ospfd, vtysh: Add support for Route tags

   [Forward ported by Cumulus]

   Credit
   ------
   A huge amount of credit for this patch goes to Piotr Chytla for
   their 'route tags support' patch that was submitted to quagga-dev
   in June 2007.

   Documentation
   -------------
   All ipv4 and ipv6 static route commands now have a "tag" option
   which allows the user to set a tag between 1 and 65535.

   quagga(config)# ip route 1.1.1.1/32 10.1.1.1 tag ?
    <1-65535>  Tag value
   quagga(config)# ip route 1.1.1.1/32 10.1.1.1 tag 40
   quagga(config)#

   quagga# show ip route 1.1.1.1/32
   Routing entry for 1.1.1.1/32
     Known via "static", distance 1, metric 0, tag 40, best
     * 10.1.1.1, via swp1

   quagga#

   The route-map parser supports matching on tags and setting tags
   !
   route-map MATCH_TAG_18 permit 10
    match tag 18
   !

   !
   route-map SET_TAG_22 permit 10
    set tag 22
   !

   BGP and OSPF support:
   - matching on tags when redistribing routes from the RIB into BGP/OSPF.
   - setting tags when redistribing routes from the RIB into BGP/OSPF.

   Signed-off-by: Daniel Walton <[email protected]>
   Signed-off-by: Piotr Chytla <[email protected]>
   Signed-off-by: Donald Sharp <[email protected]>

commit eefddcc78abcc91d1d88633a3c6d5a438fe58790
Author: Piotr Chytła <[email protected]>
Date:   Tue Dec 1 09:48:02 2015 -0500

   bgpd, lib, ospfd, zebra: Add ability to read/write tag value

   Modify zebra to pass the tag value to and from the
   various protocols.

   [forward ported by Cumulus]

   Signed-off-by: Daniel Walton <[email protected]>
   Signed-off-by: Piotr Chytla <[email protected]>
   Signed-off-by: Donald Sharp <[email protected]>
   Edits: Paul Jakma <[email protected]> rebase conflicts in bgp_zebra.c

commit de24f82d0ea7eadd0db7d5c0d340a0579312237c
Author: Piotr Chytła <[email protected]>
Date:   Thu Jun 28 00:09:28 2007 +0200

   zebra: Add internal support for route tags

   Add internal support for a route tag to be applied to routes.
   At this point in time, tags are not being used.

   [forward ported by Cumulus]

   Signed-off-by: Daniel Walton <[email protected]>
   Signed-off-by: Piotr Chytła <[email protected]>
   Signed-off-by: Donald Sharp <[email protected]>
   Edited-by: Paul Jakma <[email protected]> - rebase conflicts

commit 147a812ed15e171d1db882ac96f0f15723bf8b8f
Author: Donald Sharp <[email protected]>
Date:   Thu May 21 16:06:21 2015 -0700

   vtysh: service integrated-vtysh-config not being written to file

   The vtysh commands:
   service integrated-vtysh-config
   hostname XXXX

   were not being written to the /etc/quagga/Quagga.conf file with a wr mem
   when service integrated-vtysh-config was issued.  This patch fixes this
   issue

   Signed-off-by: Donald Sharp <[email protected]>

commit 768d9098a526841d22a8f0b740a919bd6eccee47
Author: Dinesh Dutt <[email protected]>
Date:   Tue May 19 18:04:13 2015 -0700

   zebra: Suppress displaying default config as part of running config

   Quagga doesn't display default config as part of the running config, only
   what is different from the default. However, in the case of rtadv, every
   link displays the default "ipv6 nd suppress-ra" as part of running config.
   This patch fixes that.

   Signed-off-by: Dinesh Dutt <[email protected]>

commit d8c5f27777051b3ea32f8b5979ecd9bb7b9475b9
Author: Donald Sharp <[email protected]>
Date:   Wed Mar 16 08:10:56 2016 -0400

   bgpd: flag paths for multipath if we RX link-local and global nexthops

   Paths with global and link-local nexthops should be considered for multipath

   Signed-off-by: Daniel Walton <[email protected]>

commit 743219e9abe79e8a3828fc00de679098061960bb
Author: Daniel Walton <[email protected]>
Date:   Tue May 19 18:03:57 2015 -0700

   ospfd: "show ip ospf neighbor" header spacing

   The column headers for displaying OSPF neighbors are not aligned,
   this patch addresses this issue

   Signed-off-by: Daniel Walton <[email protected]>

commit fa2e78677bde6926dc7cfa29e14925eb6d8e87b3
Author: Vivek Venkatraman <[email protected]>
Date:   Tue May 19 18:03:54 2015 -0700

   bgpd: Make source interface selection in BGP for nexthop determination more robust

   Ensure that if 'update-source <interface>' is specified, that interface is
   chosen as the source for the local nexthops. Otherwise, do a complete
   match on the local IP address of the connection to determine the source
   interface for the local nexthops; this will handle scenarios where there
   is an overlap of subnets between interfaces (e.g., loopback and another
   interface).

   Signed-off-by: Vivek Venkatraman <[email protected]>

commit 7d39125ea4d54624a4865dd272df5041ccac655e
Author: Vipin Kumar <[email protected]>
Date:   Tue May 19 18:03:53 2015 -0700

   ospf6d: Adding the initialization check in ospfv3_clean()

   This is to avoid a crash triggered by process termination
   when ospf6d daemon is running and 'router ospf6' config has not been done yet.

   Signed-off-by: Vipin Kumar <[email protected]>
   Reviewed-by: Daniel Walton <[email protected]>

commit 8c075ef01d64cba7dd52bdc642ccee22a8538b62
Author: Vipin Kumar <[email protected]>
Date:   Tue May 19 18:03:53 2015 -0700

   ospf6d: Fixing a couple of issues with ospf6_route_remove () routine.

   When a route_node has multiple ospf6_routes under it (common subnet case),
   then the current implementation has an issue in adjusting the route_node->info
   on a ospf6_route_remove() call.

   The main reason is that it ends up using exact match to determine if the next
   ospf6_route belongs to the same route_node or not. Fixing that part to use
   rnode (the existing back-pointer to the route_node) from the ospf6_route to
   determine that.

   Also fixing some of the walks to turn them safe so that the route deletion is
   fine.

   Signed-off-by: Vipin Kumar <[email protected]>
   Reviewed-by: Vivek Venkatraman <[email protected]>

commit f1b9611821bb73b6bc664afa263cdaa851e09d34
Author: Vipin Kumar <[email protected]>
Date:   Tue May 19 18:03:51 2015 -0700

   ospf6d: LA (local-address) bit related inter-op fix.

   As per the RFC, when the NU bit is set, prefix should be ignored.
   However, the code is currently ignoring prefix with LA bit too.

   Fixing that part.

   In future, we should also set LA bit for the loopback addresses. Not doing this
   part right away, as quagga wont be backward compatible with its own previous
   releases. Maybe after a release or so, we should start setting LA bit too.

   Signed-off-by: Vipin Kumar <[email protected]>
   Reviewed-by: Daniel Walton <[email protected]>

commit f687b62b14dd4e79528e9ba607da1ebdc44cf28d
Author: Dinesh Dutt <[email protected]>
Date:   Tue May 19 18:03:50 2015 -0700

   ospfd: Don't wait for state change to Exchange to start LSReq

   ANVL test 17.5. The current implementation wouldn't start sending LSReq unti
   the DB Desc packets have all been received (no M bit). This caused the test
   choke up. RFC 2328 allows for sending LSReq on receiving the first DbDesc
   packet as long as the nbr state is Exchange. This patch fixes that.

   Signed-off-by: Dinesh Dutt <[email protected]>

   Edited-by: Paul Jakma <[email protected]> to start the sending of LsReq
   from the nsm_negotiation_done FSM transition function for ExStart->Exchange,
   rather than tacking the call to ospf_ls_req_send to the bottom of the DD
   desc processing function.

commit 24521e24c739b130c247e864d22b734daa4281d1
Author: Daniel Walton <[email protected]>
Date:   Tue May 19 18:03:48 2015 -0700

   ospfd: Fix no ip ospf hello-interval

   OSPF silently ignores 'no ip ospf hello-interval X' and 'no ip ospf hello-interval X'

   Signed-off-by: Daniel Walton <[email protected]>
   Reviewed-by: Dinesh G Dutt <[email protected]>

commit 45af55a70379da6e1534185ffa20238aa6026d52
Author: Vipin Kumar <[email protected]>
Date:   Tue May 19 18:03:43 2015 -0700

   ospfd: Make destination of p2p to multicast for LS-ACKS

   ISSUE:

   LSAcks (for directed acks) are being sent to neighbor's unicast address.

   RFC 2328 says:

   "The IP destination address for the packet is selected as
    follows.  On physical point-to-point networks, the IP
    destination is always set to the address AllSPFRouters"

   Fix is to unconditionally set the destination address for LSAcks over
   point-to-point links as AllSPFRouters. Quagga OSPF already has similar
   change for OSPF DBD, LSUpdate and LSrequest packets.

   Signed-off-by: Vipin Kumar <[email protected]>
   Reviewed-by: Daniel Walton <[email protected]>
   Reviewed-by: Dinesh G Dutt <[email protected]>

commit e2a0ebf26c640822c3488e6f371a043a91fdcc1b
Author: Daniel Walton <[email protected]>
Date:   Tue May 19 18:03:43 2015 -0700

   bgpd: Display BGP paths with unreachable nexthops as invalid

   If a BGP path has an unreachable nexthop display that path as invalid

   Signed-off-by: Daniel Walton <[email protected]>

commit 69424be09ccf7233b184b89bb7bd6e98f72d252b
Author: Daniel Walton <[email protected]>
Date:   Tue May 19 18:03:41 2015 -0700

   ospf6d: We should accept long form of "no redistribute"

   When turning off redistribution in ospf6, allow the
   user to specify the full form of the command entered.

   Signed-off-by: Daniel Walton <[email protected]>

commit f972dec83308986082b04711c8915e13c0a5e1c1
Author: Vipin Kumar <[email protected]>
Date:   Tue May 19 18:03:41 2015 -0700

   ospf6d: Add the missing ospf6 running check in show cmds

   SYMPTOM:

   If some of the ospfv3 commands like 'show ipv6 ospf6 route' are executed
   with ospf6d daemon running but before having any ospfv3 configuration, then
   ospf6d crash is seen.

   ISSUE:

   There are a few show commands, which are (unlike others) not checking if
   ospf6 instance is initialized already.

   FIX:

   Add the missing checks, by using OSPF6_CMD_CHECK_RUNNING() in the commands
   where its needed and not yet used.

   Signed-off-by: Vipin Kumar <[email protected]>
   Reviewed-by: Pradosh Mohapatra <[email protected]>
                Dinesh Dutt <[email protected]>

commit e87f8083ff677b569048ce7560169b64daee0c57
Author: Vipin Kumar <[email protected]>
Date:   Tue May 19 18:03:40 2015 -0700

   ospf6d: Support for 'clear ipv6 ospf6 interface [ifname]

   Clear interface commands for ospfv3.  Allow the user
   to clear all peers out the specified interface.

   Signed-off-by: Vipin Kumar <[email protected]>

commit e509af86e3579944b7cde942ca3ee3427db1936a
Author: Vipin Kumar <[email protected]>
Date:   Tue May 19 18:03:40 2015 -0700

   opsf6d: Update router-LSA when nbr's interface-ID changes

   This is a fix to make sure router-LSA is updated when neighbor's interface
   ID change is received in hello packet.

   Signed-off-by: Vipin Kumar <[email protected]>

commit a90dc8752723ef6bad6fc5a7d5180ab313b0317c
Author: Vipin Kumar <[email protected]>
Date:   Tue May 19 17:58:13 2015 -0700

   ospfd: Support for 'clear ip ospf interface [IFNAME]'

   Allow the user to enter the 'clear ip ospf interface [IFNAME]' command
   this resets the connection between ospf and any peers out the
   specified interface.

   Signed-off-by: Vipin Kumar <[email protected]>

commit 59fe0eecd3498f28ec1b1cdb2de5dcc7c507f83f
Author: Daniel Walton <[email protected]>
Date:   Tue May 19 17:58:11 2015 -0700

   bgpd: Add [bestpath|multipath] option to 'show ip bgp x.x.x.x'

   When showing a prefix in bgp allow user to specify output
   based upon the bestpath chosen, multipath information of all
   information about a prefix(the default)

   Signed-off-by: Daniel Walton <[email protected]>

commit 325fcfb6d83c9add415e24e786035b67b00fd719
Author: Daniel Walton <[email protected]>
Date:   Tue May 19 17:58:10 2015 -0700

   bgpd: Add clear command to force a bestpath recalculation and re-advertisement of a prefix

   Add these commands to bgp:

   clear ip bgp prefix A.B.C.D/M
   clear bgp ipv6 (unicast|multicast) prefix X:X::X:X/M

   These two commands forces a bestpath calculation to happen again if
   necessary to re-advertise the prefix.

   Signed-off-by: Daniel Walton <[email protected]>

commit 76a7280ddebd94b20c545e93d9773e7ad4db91de
Author: Daniel Walton <[email protected]>
Date:   Tue May 19 17:47:24 2015 -0700

   bgpd: Fix aggregation issues found via ANVL

   There were various failures in ANVL's aggregation tests, this
   patch fixes those issues found

   Signed-off-by: Daniel Walton <[email protected]>

commit 78243040fc60babf83ef02572ad7966ebd20192e
Author: Daniel Walton <[email protected]>
Date:   Tue May 19 17:47:23 2015 -0700

   bgpd: iBGP multipath is broken if 'bgp deterministic-med' is enabled.

   AS_PATH comparison is broken if CONFED_AS_SEQ are present.
   This patch fixes this issue

   Signed-off-by: Daniel Walton <[email protected]>

commit d0aa6e8b222f44949b0a190d8ff70d90333b775c
Author: Daniel Walton <[email protected]>
Date:   Fri Jun 17 14:45:42 2016 +0100

   bgpd: Make aspath_highest 4-byte compatible for private AS

   * bgp_aspath.h: Add BGP_AS_IS_PRIVATE macro.
   * bgp_aspath.c: (aspath_highest) use said macro to also ensure 4-byte private
     AS range is ignored in calculating highest public ASN.
     (aspath_private_as_check) consolidate to use said macro.

   Note: Extracted from 'bgpd: Add replace-as option to remove-private-as'
   by [email protected].

commit 5552da8f9abd786fb76019135277003f489626d6
Author: Paul Jakma <[email protected]>
Date:   Fri Jun 17 11:36:59 2016 +0100

   bgpd: Fix use after free in aspath_prepend with confeds

   * bgp_aspath.c: (aspath_prepend) aspath_delete_confed_seq may result
     in as2 being updated, and seg2 becoming invalid. E.g. if the first
     segment of of as2 is confeds. However, code there after unconditionally
     reads from seg2.

     Reset seg2, and re-do the empty check on it.

     Caught by valgrinding tools/aspathtest.

commit dcc21851aa5f284bf57ccb2b662f4ff5b5a44321
Author: Vipin Kumar <[email protected]>
Date:   Tue May 19 17:47:20 2015 -0700

   bgpd: Make the private AS number check 4 byte compatible.

   Signed-off-by: Vipin Kumar <[email protected]>
   Reviewed-by: Dinesh Dutt <[email protected]>
   Reviewed-by: Daniel Walton <[email protected]>

commit c0a4cc74ef6994f9b4e4c1351d67a55a684faf38
Author: Daniel Walton <[email protected]>
Date:   Mon Nov 9 20:22:00 2015 -0500

   bgpd: Make "no redistribute" always remove the redistribute statement

   Signed-off-by: Daniel Walton <[email protected]>

commit 62f936e7960a7c08f4ae42ad43726d8d6e8e949d
Author: Daniel Walton <[email protected]>
Date:   Mon Nov 9 20:21:59 2015 -0500

   ospf6d, ripd, vtysh: Fix "no set metric" for ospf6 and RIP

   Allow the user to actually turn off the set metric command
   in ospf6d and rip.

   Signed-off-by: Daniel Walton <[email protected]>

commit 92992c69afd0095b183a3b905598d194115b27a7
Author: James Li <[email protected]>
Date:   Mon Nov 9 20:21:57 2015 -0500

   zebra: Dissallow outside programs to delete Quagga routes

   Do not allow a program outside Quagga to delete a Quagga route from the kernel.
   To delete a Quagga route, do it inside Quagga.

   Signed-off-by: James Li <[email protected]>

commit 083e5e2d7bc8098b92572792ab807da381db95ea
Author: Dinesh Dutt <[email protected]>
Date:   Mon Nov 9 20:21:54 2015 -0500

   bgpd, doc: Allow route-map policy modifications to also affect route reflectors.

   By default, attribute modification via route-map policy out is ignored on
   reflected routes. This patch provides an option to allow this modification
   to occur. Once enabled, it affects all reflected routes.

   Signed-off-by: Dinesh G Dutt <[email protected]>

commit 5cf768a3f53029ecc482367a1ceaf7578237b06a
Author: Dinesh Dutt <[email protected]>
Date:   Mon Nov 9 20:21:53 2015 -0500

   bgpd: Support matching on local preference in route-map

   This patch adds support for matching on local preference in
   BGP route-map.

   Signed-off-by: Dinesh Dutt <[email protected]>

commit af309fa58f41457eed226d6650d0b780c053c4d8
Author: Pradosh Mohapatra <[email protected]>
Date:   Mon Nov 9 20:21:47 2015 -0500

   bgpd: Show more meaningful outq value in 'show ip bgp summary' output.

   'outq' field in 'show ip bgp sum' displays the number of formatted packets
   to a peer. Since the route announcement follows an input-buffered pattern
   (i.e. adj-rib-out is a separate queue of routes per peer and packets are
   formatted from the routes at the time of TCP write), the outq field doesn't
   show any interesting data worth watching.

   The patch is to display the adj-rib-out queue depth instead.

   signed-off-by: [email protected]
   reviewed-by: [email protected]

commit a4f40293db1055387d5b901fe0dbb556226b2024
Author: vivek <[email protected]>
Date:   Mon Nov 9 20:21:46 2015 -0500

   vtysh: Make ipv6 unicast/multicast address-family work

   In the absence of this patch, attempting to type "address-family ipv6 unicast"
   would result in an "Ambiguous command" error and in the case of
   "address-family ipv6 multicast", the command would silently fail, without the
   prompt dropping into the address-family mode.

   The cause is how the parse tree is constructed for ipv6 address family. There
   was an error in extract.pl.in script and in vtysh.c files which assumed that
   there was only address family ipv6 command, without unicast or multicast and
   so the command was failing.

   Signed-off-by: vivek <[email protected]>

commit 0f2f7a3fa5d55e682d0739d586da021cbd43bc3c
Author: Paul Jakma <[email protected]>
Date:   Thu Jun 16 15:40:02 2016 +0100

   *: Fix duplicate commands from view/enable node consolidation

commit 94627e670d661f95217521ef0bfba141e5e37e68
Author: Pradosh Mohapatra <[email protected]>
Date:   Mon Nov 9 20:21:45 2015 -0500

   bgpd: Add a null check in bgp_address_del() function when connected addresses are removed.

   When you flap an interface repeatedly, you can get into situations where
   the code has not quite finished cleaning up before the next event happens.
   Gracefully prevent a NULL dereference.

   Signed-off-by: Pradosh Mohapatra <[email protected]>

commit 60cc95921ae663de325ca3e76e8c05d8224986ab
Author: Pradosh Mohapatra <[email protected]>
Date:   Mon Nov 9 20:21:41 2015 -0500

   bgpd, doc, lib, zebra: nexthop-tracking in zebra

   0. Introduction

   This is the design specification for next hop tracking feature in
   Quagga.

   1. Background

   Recursive routes are of the form:

      p/m --> n
     [Ex: 1.1.0.0/16 --> 2.2.2.2]

   where 'n' itself is resolved through another route as follows:

      p2/m --> h, interface
     [Ex: 2.2.2.0/24 --> 3.3.3.3, eth0]

   Usually, BGP routes are recursive in nature and BGP nexthops get
   resolved through an IGP route. IGP usually adds its routes pointing to
   an interface (these are called non-recursive routes).

   When BGP receives a recursive route from a peer, it needs to validate
   the nexthop. The path is marked valid or invalid based on the
   reachability status of the nexthop.  Nexthop validation is also
   important for BGP decision process as the metric to reach the nexthop
   is a parameter to best path selection process.

   As it goes with routing, this is a dynamic process. Route to the
   nexthop can change. The nexthop can become unreachable or
   reachable. In the current BGP implementation, the nexthop validation
   is done periodically in the scanner run. The default scanner run
   interval is one minute. Every minute, the scanner task walks the
   entire BGP table. It checks the validity of each nexthop with Zebra
   (the routing table manager) through a request and response message
   exchange between BGP and Zebra process. BGP process is blocked for
   that duration. The mechanism has two major drawbacks:

   (1) The scanner task runs to completion. That can potentially starve
       the other tasks for long periods of time, based on the BGP table
       size and number of nexthops.

   (2) Convergence around routing changes that affect the nexthops can be
       long (around a minute with the default intervals). The interval
       can be shortened to achieve faster reaction time, but it makes the
       first problem worse, with the scanner task consuming most of the
       CPU resources.

   "Next hop tracking" feature makes this process event-driven. It
   eliminates periodic nexthop validation and introduces an asynchronous
   communication path between BGP and Zebra for route change notifications
   that can then be acted upon.

   2. Goal

   Stating the obvious, the main goal is to remove the two limitations we
   discussed in the previous section. The goals, in a constructive tone,
   are the following:

   - fairness: the scanner run should not consume an unjustly high amount
     of CPU time. This should give an overall good performance and
     response time to other events (route changes, session events,
     IO/user interface).

   - convergence: BGP must react to nexthop changes instantly and provide
     sub-second convergence. This may involve diverting the routes from
     one nexthop to another.

   3. Overview of the changes

   The changes are in both BGP and Zebra modules.  The short summary is
   the following:

   - Zebra implements a registration mechanism by which clients can
      register for next hop notification. Consequently, it maintains a
      separate table, per (VRF, AF) pair, of next hops and interested
      client-list per next hop.

   - When the main routing table changes in Zebra, it evaluates the next
      hop table: for each next hop, it checks if the route table
      modifications have changed its state. If so, it notifies the
      interested clients.

   - BGP is one such client. It registers the next hops corresponding to
      all of its received routes/paths. It also threads the paths against
      each nexthop structure.

   - When BGP receives a next hop notification from Zebra, it walks the
      corresponding path list. It makes them valid or invalid depending
      on the next hop notification. It then re-computes best path for the
      corresponding destination. This may result in re-announcing those
      destinations to peers.

   4. Design

   4.1. Modules

   The core design introduces an "nht" (next hop tracking) module in BGP
   and "rnh" (recursive nexthop) module in Zebra. The "nht" module
   provides the following APIs:

   bgp_find_or_add_nexthop() : find or add a nexthop in BGP nexthop table
   bgp_find_nexthop() : find a nexthop in BGP nexthop table
   bgp_parse_nexthop_update() : parse a nexthop update message coming
                                 from zebra

   The "rnh" module provides the following APIs:

   zebra_add_rnh() : add a recursive nexthop
   zebra_delete_rnh() : delete a recursive nexthop
   zebra_lookup_rnh() : lookup a recursive nexthop

   zebra_add_rnh_client() : register a client for nexthop notifications
                            against a recursive nexthop

   zebra_remove_rnh_client(): remove the client registration for a
                               recursive nexthop

   zebra_evaluate_rnh_table(): (re)evaluate the recursive nexthop table
                               (most probably because the main routing
                               table has changed).

   zebra_cleanup_rnh_client(): Cleanup a client from the "rnh" module
                               data structures (most probably because the
                               client is going away).

   4.2. Control flow

   The next hop registration control flow is the following:

   <====      BGP Process       ====>|<====      Zebra Process      ====>
                                     |
   receive module     nht module     |  zserv module        rnh module
   ----------------------------------------------------------------------
                 |                   |                  |
   bgp_update_   |                   |                  |
         main()  | bgp_find_or_add_  |                  |
                 |        nexthop()  |                  |
                 |                   |                  |
                 |                   | zserv_nexthop_   |
                 |                   |       register() |
                 |                   |                  | zebra_add_rnh()
                 |                   |                  |

   The next hop notification control flow is the following:

   <====     Zebra Process    ====>|<====      BGP Process       ====>
                                   |
   rib module         rnh module   |     zebra module        nht module
   ----------------------------------------------------------------------
                 |                 |                   |
   meta_queue_   |                 |                   |
       process() | zebra_evaluate_ |                   |
                 |     rnh_table() |                   |
                 |                 |                   |
                 |                 | bgp_read_nexthop_ |
                 |                 |          update() |
                 |                 |                   | bgp_parse_
                 |                 |                   | nexthop_update()
                 |                 |                   |

   4.3. zclient message format

   ZEBRA_NEXTHOP_REGISTER and ZEBRA_NEXTHOP_UNREGISTER messages are
   encoded in the following way:

   /*
    *     0                   1                   2                   3
    *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    * |     AF                        |  prefix len   |
    * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    * .      Nexthop prefix                                           .
    * .                                                               .
    * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    * .                                                               .
    * .                                                               .
    * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    * |     AF                        |  prefix len   |
    * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    * .      Nexthop prefix                                           .
    * .                                                               .
    * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    */

   ZEBRA_NEXTHOP_UPDATE message is encoded as follows:

   /*
    *     0                   1                   2                   3
    *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    * |     AF                        |  prefix len   |
    * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    * .      Nexthop prefix getting resolved                          .
    * .                                                               .
    * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    * |        metric                                                 |
    * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    * |  #nexthops    |
    * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    * | nexthop type  |
    * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    * .      resolving Nexthop details                                .
    * .                                                               .
    * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    * .                                                               .
    * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    * | nexthop type  |
    * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    * .      resolving Nexthop details                                .
    * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    */

   4.4. BGP data structure

   Legend:

   /\   struct bgp_node: a BGP destination/route/prefix
   \/

   [ ]  struct bgp_info: a BGP path (e.g. route received from a peer)

    _
   (_)  struct bgp_nexthop_cache: a BGP nexthop

      /\         NULL
      \/--+        ^
          |        :
          +--[ ]--[ ]--[ ]--> NULL
      /\           :
      \/--+        :
          |        :
          +--[ ]--[ ]--> NULL
                   :
     _             :
    (_).............

   4.5. Zebra data structure

   rnh table:

              O
             / \
            O   O
               / \
              O   O

           struct rnh
           {
             u_char flags;
             struct rib *state;
             struct list *client_list;
             struct route_node *node;
           };

   5. User interface changes

   quagga# show ip nht
   3.3.3.3
    resolved via kernel
    via 11.0.0.6, swp1
    Client list: bgp(fd 12)
   11.0.0.10
    resolved via connected
    is directly connected, swp2
    Client list: bgp(fd 12)
   11.0.0.18
    resolved via connected
    is directly connected, swp4
    Client list: bgp(fd 12)
   11.11.11.11
    resolved via kernel
    via 10.0.1.2, eth0
    Client list: bgp(fd 12)

   quagga# show ip bgp nexthop
   Current BGP nexthop cache:
    3.3.3.3 valid [IGP metric 0], #paths 3
     Last update: Wed Oct 16 04:43:49 2013

    11.0.0.10 valid [IGP metric 1], #paths 1
     Last update: Wed Oct 16 04:43:51 2013

    11.0.0.18 valid [IGP metric 1], #paths 2
     Last update: Wed Oct 16 04:43:47 2013

    11.11.11.11 valid [IGP metric 0], #paths 1
     Last update: Wed Oct 16 04:43:47 2013

   quagga# show ipv6 nht
   quagga# show ip bgp nexthop detail

   quagga# debug bgp nht
   quagga# debug zebra nht

   6. Sample test cases

        r2----r3
       /  \  /
     r1----r4

   - Verify that a change in IGP cost triggers NHT
     + shutdown the r1-r4 and r2-r4 links
     + no shut the r1-r4 and r2-r4 links and wait for OSPF to come back
       up
     + We should be back to the original nexthop via r4 now
   - Verify that a NH becoming unreachable triggers NHT
     + Shutdown all links to r4
   - Verify that a NH becoming reachable triggers NHT
     + no shut all links to r4

   7. Future work

   - route-policy for next hop validation (e.g. ignore default route)
   - damping for rapid next hop changes
   - prioritized handling of nexthop changes ((un)reachability vs. metric
     changes)
   - handling recursion loop, e.g.
      11.11.11.11/32 -> 12.12.12.12
      12.12.12.12/32 -> 11.11.11.11
      11.0.0.0/8 -> <interface>
   - better statistics
   Addresses upstream comments.

   "show ip bgp nexthop detail" couldn't display multiple NHs due to a bug.
   Fix that.

   Fix reference counts for the nexthop cache entries

   Signed-off-by: Pradosh Mohapatra <[email protected]>
   Signed-off-by: Daniel Walton <[email protected]>
   Signed-off-by: Dinesh Dutt <[email protected]>
   Signed-off-by: Donald Sharp <[email protected]>
   Signed-off-by: Vivek Venkatraman <[email protected]>

   Fix reference counts for the nexthop cache entries.

   Signed-off-by: Vivek Venkatraman <[email protected]>

   Edited-by: Paul Jakma <[email protected]>
   - Fix nexthop_ipv6_add defs in rib.h not having been modified with rib_ prefix.
   - Remove rib_lookup_and_pushup, appears not to be used except for
     !HAVE_NETLINK && HAVE_STRUCT_IFALIASREQ case of ioctl.c::if_set_prefix,
     so it's not being used at all on platform with most testing of RIB.

commit 4feb0d02c029e2e4f229f6283f579b8673b0ac11
Author: Dinesh Dutt <[email protected]>
Date:   Mon Nov 9 20:14:55 2015 -0500

   bgpd: IPv6 Multipath broken with nexthop global address

   IPv6 multipath is broken in BGP if nexthop contains only global address.
   IPv6 always uses both nextop IPv6 address and ifIndex in sending routes down to
   zebra. In cases where only the global IPv6 address is present in the nexthop
   information, the existing code doesn't set the ifIndex. An example of such a
   case is when a route-map isused with "set ipv6 next-hop" and only global
   address is specified. This code causes the ifIndex to be determined and
   set thereby fixing the multipath programming.

   Signed-off-by: Dinesh G Dutt <[email protected]>
   Reviewed-by: Shrijeet Mukherjee <[email protected]>

commit b8d1f713ba6bc91138debe9f895621b8f91a43c7
Author: Ayan Banerjee <[email protected]>
Date:   Mon Nov 9 20:14:54 2015 -0500

   bgpd: Enable support for BGP IPV6 multipath.

   This commit adds these two commands:
   maximum-paths <1-MULTIPATH_NUM>
   maximum-paths ibgp <1-MULTIPATH_NUM>

   under address-family ipv6 mode.  In addition adding the ability
   to pass multiple paths down into zebra from bgp.

   Signed-off-by: Ayan Banerjee <[email protected]>
   Signed-off-by: Dinesh G Dutt <[email protected]>
   Reviewed-by: Scott Feldman <[email protected]>

commit 34c5d89fed6e8e91ae3cde478f1f4816d69bf09e
Author: Ayan Banerjee <[email protected]>
Date:   Mon Nov 9 20:14:53 2015 -0500

   zebra: ipv6 multipath support

   This patch enables support for multipath for IPV6. The nexthop information
   from the protocols have ifindices and nexthop addresses in two different
   structures. This patch combines them to ensure that the correct APIs can
   be called. Also, given that IPV6 Linux implementation does not support the
   rta_XXX APIs for multipath, the communication with the kernel is in terms
   of a single nh/ifindex pair.

   Signed-off-by: Ayan Banerjee <[email protected]>
   Signed-off-by: Dinesh Dutt <[email protected]>
   Signed-off-by: Donald Sharp <[email protected]>

commit 6f235418ad911040c5a6252d11b05cef5984fd8e
Author: Paul Jakma <[email protected]>
Date:   Tue Apr 5 13:21:20 2016 +0100

   zebra: *addattr should use size_t len args, quell signed v unsigned warning

commit c7c5b02480a506c6d687bf0d3a0c2a7d3e7cfbf6
Author: Paul Jakma <[email protected]>
Date:   Mon Apr 4 15:19:37 2016 +0100

   vtysh: auto-generated vtysh_cmd.c file should depend on its creator

commit 3b847ef4e81c6f1a5d4994680d530045765fd053
Author: Paul Jakma <[email protected]>
Date:   Fri Apr 22 12:48:49 2016 +0100

   bgpd: Squash spurious "unknown afi" log messages

   * bgp_packet.c: (bgp_update_receive) doesn't differentiate between NLRIs that
     are 0 AFI/SAFI cause they weren't set, and those because a peer sent a
     bogus AFI/SAFI, before sending sending what may be a misleading, spurious
     log message.  Check the .nlri pointer is set and avoid this.

   Incorporating a suggestion from: G. Paul Ziemba <[email protected]>

commit 7f39242bf44c85bb651506214666b3ebdd78b928
Author: Paul Jakma <[email protected]>
Date:   Wed Aug 24 15:53:36 2016 +0100

   *: Remove C99ism, CI system runs builds with CFLAGS and compilers that barf

commit 23cd586eac3cde789e02c13a1236a4fe33dfc5d9
Author: Paul Jakma <[email protected]>
Date:   Wed Apr 6 14:03:33 2016 +0100

   zebra: Update news with the status of link-detect and the global default

commit 8f4269ddff1becca94687252b9571b096cb45b43
Author: Paul Jakma <[email protected]>
Date:   Fri Sep 18 11:50:33 2015 +0100

   zebra: Add command to configure default for link-state, and make it sticky

   * Provide a way for the user to specify their own preference for the default
     behaviour of link-detect, independent of the compiled in default.

     Add a global "default link-detect (on|off)" command to zebra, to set
     the default policy for link-detect accordingly.  The command is "sticky" -
     when set it will stay set and always be written out, regardless of how it
     compares to the baked-in, compile-time default.

     The per-interface "link-detect" command is similarly made sticky.

   * zebra/interface.h: (zebra_if_linkdetect;) enum for link-detect configured
     state.
     (struct zebra_if_defaults) Global link-detect default
     (struct zebra_if) Add field for per-iface link-detect default.
   * lib/if.c: (if_create_vrf) Remove the default flag setting on if-create
     here, it's a zebra flag so do it in zebra's if_zebra_new_hook
   * zebra/interface.c: Add static storage for global defaults.
     (if_zebra_new_hook) Set the link-detect flag on new ifaces according to the
     baked in default or else the configured global default.
     (config_write_zebra_if_defaults,default_linkdetect_cmd) global link-detect
     command and config write out machinery.
     (linkdetect_cmd) Set the configuration state rather than the flag.
     The new hook will then set the interface flag when the if comes up.
     (if_config_write) Write config according to configured state, not the
     low-level flag.
     (zebra_if_init) add new commands.

commit a6d400c9158b10207cde40a428ebf2c27f105c0a
Author: Dinesh G Dutt <[email protected]>
Date:   Fri Sep 18 08:32:56 2015 -0400

   zebra: Set link-detect on by default

   Signed-off-by: Roopa Prabhu <[email protected]>
   Reviewed-by: Dinesh G Dutt <ddutt at cumulusnetworks.com>
   Reviewed-by: Scott Feldman <sfeldma at cumulusnetworks.com>

   Edited by Christian Franke: Fix OSPF Virtual Links
   Edited by Donald Sharp: Add NEWS notification

   Signed-off-by: Christian Franke <[email protected]>
   Acked-By: [email protected]

commit 3bccb4f3df0530bb4d8961b0867ea04c1bca065f
Author: Avneesh Sachdev <[email protected]>
Date:   Fri Mar 11 12:21:26 2016 -0800

   zebra: add developer test functions for FPM code

   Add test functions for the zebra code that interfaces with the
   Forwarding Plane Manager. These functions can be invoked in a
   development build via the recently-added 'invoke' command.

   For example:

     # invoke zebra function zfpm_dt_benchmark_protobuf_encode 100000

   Changes:

     * zebra/zebra_fpm_dt.c

       Add the following functions. Each function encodes or decodes a
       route in a particular FPM format a specified number of times.

       - zfpm_dt_benchmark_netlink_encode()
       - zfpm_dt_benchmark_protobuf_encode()
       - zfpm_dt_benchmark_protobuf_decode()

     * zebra/Makefile.am

       Compile zebra_fpm_dt when building a development build.

   Signed-off-by: Avneesh Sachdev <[email protected]>

commit 7e4025cb65f79d584911042d3e19eee787b9115b
Author: Avneesh Sachdev <[email protected]>
Date:   Fri Mar 11 12:21:24 2016 -0800

   build: support for "development build"

   * configure.ac

       Add the --enable-dev-build flag. It controls the DEV_BUILD
       define for autoconf and automake, which can be used to
       conditionally build in code that is only intended for development..

   Signed-off-by: Avneesh Sachdev <[email protected]>

commit 6112d11a978af54f87ac55daa9e965d949cb0041
Author: Avneesh Sachdev <[email protected]>
Date:   Mon Apr 4 10:54:59 2016 -0700

   doc: add blurb on use of protobuf with FPM

   Add text about using protobuf as an alternative format for the FPM
   interface.

   Signed-off-by: Avneesh Sachdev <[email protected]>

commit 5779fda137803a4b1e534f6ba70781681baf3fda
Author: Avneesh Sachdev <[email protected]>
Date:   Mon Apr 4 10:54:58 2016 -0700

   zebra: optionally use protobuf with FPM

   Change zebra so that it can optionally use protobuf serialization when
   communicating with a Forwarding Plane Manager component.

     * zebra/main.c

       Add the --fpm-format/-F command line option. This allows the user
       to control the format (protbuf|netlink) that is used to
       communicate with the FPM.

     * zebra/zebra_fpm.c

       - zebra_init_msg_format(),

         This new function is invoked on process startup to determine the
         FPM format that should be used.

       - zfpm_init()

         Change to accept any 'FPM message format' specified by the user
         (via the new command line flag).

       - zebra_encode_route()

         Tweak to use the selected FPM format.

     * zebra_fpm_protobuf.c

       New code to build protobuf messages to be sent to the FPM.

     * zebra/Makefile.am

       - Include common.am

       - Build new file zebra_fpm_protobuf.c when protobuf is available.

       - Link with the fpm_pb library.

   Signed-off-by: Avneesh Sachdev <[email protected]>

commit b8ae330cd3c65808044d344b24f0917b312c4fb9
Author: Avneesh Sachdev <[email protected]>
Date:   Thu Jul 14 09:59:30 2016 -0700

   Use only the ISC license for .proto files.

   Simplify licensing for protobuf files based on discussion on the
   quagga-dev mailing list.

   Previously, users could choose between the GPL and the ISC license.

   Signed-off-by: Avneesh Sachdev <[email protected]>
   Signed-off-by: Avneesh Sachdev <[email protected]>

commit ef20ef7de9fe52931e7a5ce07b8228e87f7f52b6
Author: Avneesh Sachdev <[email protected]>
Date:   Mon Apr 4 10:54:57 2016 -0700

   fpm: Add protobuf support for FPM.

   Code that allows a client to convey routes to a Forwarding Plane
   Manager component using protobuf instead of netlink..

     * fpm/fpm.proto

       Protobuf definitions pertaining to the Forwarding Plane Manager.
       In particular, this file defines the AddRoute and DeleteRoute
       messages.

     * fpm/fpm.h

       Tweak FPM message header definition to also allow messages to be
       encoded in protobuf format.

     * fpm/{fpm_pb.h,.gitignore,.Makefile.am}

       Add the fpm_pb library, which contains code for interfacing with
       the FPM using protobuf.

     * configure.ac

       Generate fpm/Makefile.

     * Makefile.am

       Add fpm subdirectory to build.

     * common.am

       Add flags to be used by clients of the fpm_pb library.

   Signed-off-by: Avneesh Sachdev <[email protected]>

commit b2624487659d8148ca253147fd7e63560a439c8b
Author: Avneesh Sachdev <[email protected]>
Date:   Mon Apr 4 10:54:56 2016 -0700

   build: turn off automake portability warnings

   Modify configure.ac to disable portability warnings for automake --
   our automake code (in particular common.am) uses some constructs
   specific to gmake.

   Signed-off-by: Avneesh Sachdev <[email protected]>

commit 07e5b645059167a37ccf1079a125114339c0df9e
Author: Avneesh Sachdev <[email protected]>
Date:   Mon Apr 4 10:54:55 2016 -0700

   qpb: Add support for protobuf.

   Infrastructure that allows protocol buffers to be used in Quagga. The
   changes below comprise of:

     - Build hooks

     - Protobuf definitions for common types.

     - Library routines for working with protobuf, including functions
       that help translate between common quagga types and their protobuf
       equivalents.

   Changes:

     * qpb/{Makefile.am,README.txt,qpb.h,.gitignore}

       Add the qpb library, which provides shared code and definitions
       for using protocol buffers in quagga code.

     * qpb/qpb.proto

       Protobuf definitions that can be shared by all of quagga.

     * qpb/linear_allocator.h

       An allocator that allocates memory by walking down towards the end
       of a buffer. This is used to cheaply allocate/deallocate memory on
       the stack for protobuf operations.

     * qpb/qpb_allocator.[ch]

       Thin layer that allows a linear allocator to be used with the
       protobuf-c library.

     * common.am

       This is an automake fragment that is intended to be shared by
       Makefile.am files in the tree. It currently includes definitions
       related to protobuf.

     * configure.ac

       - Add logic to optionally build protobuf code.

         By default, protobuf support is enabled if the protobuf C
         compiler (protoc-c) is available, and the associated header
         files/library can be found.

         The user can choose to override this behavior via the new
         --disable-protobuf/--enable-protobuf flags.

       - Include the quagga protobuf library (qpb) in the build.

     * .gitignore

       Ignore source code generated by protobuf compiler.

     * Makefile.am

       Add 'qpb' to the list of subdirectories.

   Signed-off-by: Avneesh Sachdev <[email protected]>

   Edited: Paul Jakma <[email protected]>: Change the sense of the
           configure enable option to require explicit specifying, as
           an experimental feature.

commit cbd976b54d51fea2f3d532e8d5aac66d6294acc2
Author: Paul Jakma <[email protected]>
Date:   Fri Feb 26 10:34:01 2016 +0000

   HACKING: Document how to add standard copyright claims to files

   * (REQUIRED READING) Copyright claims may be documented in the standard way,
      with a "Copyright ..." line near the beginning of the file.

   Incorporating suggestions and refinements from:

   Lou Berger <[email protected]>

commit 57439bf2dd0e2aa9c5a4c95919503dae1e360a19
Author: Paul Jakma <[email protected]>
Date:   Fri Feb 5 14:46:58 2016 +0000

   HACKING: New code _MUST_ use a bounded-buffer in handling untrusted data.

   * Guidelines: New code must use a bounded-buffer abstraction that provides
     at least some level of sanity checks on accesses.  Direct pointer
     twiddling based on untrustable buffers is not generally acceptable in new
     code in Quagga.
   Tested-by: NetDEF CI System <[email protected]>

commit d1aa80f04d12c096b10ba0862edbe6c30b5f7ebb
Author: Paul Jakma <[email protected]>
Date:   Tue Jan 26 14:00:12 2016 +0000

   HACKING: Note that "Signed-off-by" not used for authorship/rights info

   * "Signed-off-by" is overloaded, and possibly not even well understood.
     As per the text, it should not be used to indicate authorship or other
     rights information, within Quagga.

commit d3cf6c689a64ab83ba574e7df2472129603f1875
Author: Paul Jakma <[email protected]>
Date:   Tue Jan 26 14:00:11 2016 +0000

   HACKING: Add required reading section & commit should give full rights details

   * HACKING.tex: (COMMIT MESSAGES) It's pretty critical that commit messages
     give all the detail required to figure out what authorship/copyright
     claims might come into play.

     (REQUIRED READING) Add a section on what people are implicitly agreeing to
     when they contribute.  It's fairly obvious, common sense stuff.  Spell it
     out though.  Note that COMMIT MESSAGES are also required reading.

     (Cover page) Draw attention to REQUIRED READING.

   A previous version was:
   Acked-by: Vincent Jardin <[email protected]>

commit 2f6aa36e8d72d712738fad2c53ab95f7fcbefc61
Author: Paul Jakma <[email protected]>
Date:   Tue Jan 26 14:00:10 2016 +0000

   HACKING: Fix internal section links

   Seems when pandoc converts tex to markdown it doesn't output internal
   reference links in a format it recognises itself. Fix.

commit 3affb6c04881f99aafbbb12de76bdde1dbea0408
Author: Paul Jakma <[email protected]>
Date:   Tue Jan 26 14:34:41 2016 +0000

   HACKING: Update HACKING with anything relevant from pending and prune

   * HACKING.md: Add USEFUL URLs section, add link to patchwork
   * HACKING.pending: Prune out stuff moved to HACKING or well out of date or
     unreachable.
   Tested-by: NetDEF CI System <[email protected]>

commit f458d88e57e982e8f00a3d2db35a2c6e0bb331fa
Author: David Lamparter <[email protected]>
Date:   Tue May 24 18:58:09 2016 +0200

   bgpd: ditch unused bgp_node_*() functions

   Signed-off-by: David Lamparter <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>

commit 584083d50511e19b228cce1e4a1cbcb28fae6b49
Author: David Lamparter <[email protected]>
Date:   Tue May 24 18:58:08 2016 +0200

   bgpd: divorce router-id logic from CLI & zebra

   Logic for determining the router-id was spread out over bgp_zebra.c and
   bgp_vty.c.  Move to bgpd/bgpd.c and have these two call more properly
   encapsulated functions.

   Signed-off-by: David Lamparter <[email protected]>

commit dfb9bd7aaadc2f5abb9bc9aecbd73b9d8b3a788c
Author: David Lamparter <[email protected]>
Date:   Tue May 24 18:58:07 2016 +0200

   bgpd: minor header/API clean up

   Adds "const" on:
   - peer_update_source_addr_set()
   - peer_description_set()
   Adds parameter names on:
   - bgp_timers_set()
     (really confusing, this one, with 2 unexplained args of same type)
   Adds new setter:
   - peer_afc_set(), calling peer_activate/peer_deactivate.
     (intended for API consumers, matches peer->afc)

   Signed-off-by: David Lamparter <[email protected]>

commit 4afa3ddd17464ecce91b6ed9df27b1231fb3e939
Author: Philippe Guibert <[email protected]>
Date:   Tue May 24 16:52:02 2016 +0200

   bgpd: Add new configuration cli for graceful restart.

   There is support to configure graceful restart timer. This is the
   time to wait to delete stale routes before a BGP open message is
   received.

   bgp graceful-restart restart-time <1-3600>
   no bgp graceful-restart [<1-255>]

   * bgpd/bgp_vty.c
     * Define command strings for above CLI
   * bgpd/bgpd.c
     * bgp_config_write(): Output graceful restart-time configuration

   Signed-off-by: Philippe Guibert <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>

commit d83b8d6d73021815a87e000c50863a105af80226
Author: Lou Berger <[email protected]>
Date:   Tue May 17 07:10:41 2016 -0400

   lib: add AF_ETHERNET/AFI_ETHER

commit ee5fbe26f2b7561457a1d0c8b5ce72b512638cb0
Author: Lou Berger <[email protected]>
Date:   Tue May 17 07:10:38 2016 -0400

   lib: dump memory stats on core

commit b8cb7c3fd44cfd0781a5e80a369ecb19eee9a4a7
Author: Lou Berger <[email protected]>
Date:   Tue May 17 07:10:33 2016 -0400

   lib: fix memory leak in zprivs_caps_init

commit 93b493a2b010df4f67c7173c0928c8f86d9e1aa2
Author: Igor Ryzhov <[email protected]>
Date:   Wed May 11 15:26:39 2016 +0300

   bgpd: fix wrong help strings of "match peer" and "no match peer" commands

   Signed-off-by: Igor Ryzhov <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>

commit 49c370b74df11832239408f68119bd0a0a19a6e8
Author: Colin Petrie <[email protected]>
Date:   Wed May 11 11:56:58 2016 +0200

   bgpd: fix MRT table dumps for locally-originated routes

   I've been working on a small patch to correct an issue in the BGP MRT
   table dump code. It's a quick'n'easy fix initially, and I'd appreciate
   any feedback on making it better :)

   Issue:

   When the BGP table dump code runs, it generates the peer_index_table.
   This walks the list of peers, and dumps out their IP, ASN, address
   family, etc. It also sets the peer index number in the peer struct.

   Then the code walks the RIB, and for each prefix, writes out RIB
   entries, that refer to the peer index number.

   However, when it finds prefixes that are locally originated, the
   associated peer is the 'self' peer, which wasn't in the list of peers,
   never gets an index number assigned, but because it is calloc'd, the
   index number is set to 0.

   End result: locally-originated routes are associated with whichever peer
   happens to be first in the list of remote peers in the index table :)

   Example (from one of our route collectors) - these are two of our
   originated prefixes (bgpdump output):
   TABLE_DUMP2|1457568002|B|12.0.1.63|7018|84.205.80.0/24||IGP|193.0.4.28|0|0||NAG|64512
   10.255.255.255|
   TABLE_DUMP2|1457568006|B|12.0.1.63|7018|2001:7fb:ff00::/48||IGP|::|0|0||NAG||

   The prefixes are announced by us (note it has an empty AS PATH (the
   field after the prefix)) but also looks like it was received from AS7018
   (12.0.1.63). In fact, the AS7018 peer just happens to be the first peer
   in the index table.

   Fix:

   The simplest fix (which is also the method adopted by both OpenBGPd and
   the BIRD mrtdump branch) is to create an empty placeholder 'peer' at the
   start of the peer index table, for all the routes which are locally
   originated to refer to.

   I've attached a patch for this.
   Here's a resulting bgpdump output after the patch:
   TABLE_DUMP2|1458828539|B|0.0.0.0|0|93.175.150.0/24||IGP|0.0.0.0|0|0||NAG||
   Now it is more obvious that the prefix is locally originated.

   There are more complicated potential ways of fixing it
   1) skip the local routes when dumping the RIB. This leads to questions
   about what an MRT table dump *should* contain :)
   2) include the 'self' peer in the list of peers used to generate the
   index table.
   etc etc.

   But I'm quite happy with my 'create a fake peer, and associate local
   routes with it' method :)

   Your thoughts and feedback are welcome!

   Regards,

   Colin Petrie
   Systems Engineer
   RIPE NCC RIS Project
   Tested-by: NetDEF CI System <[email protected]>

commit 06de82eaeb11a1c84798cc222af77cdb07af2e4e
Author: Jafar Al-Gharaibeh <[email protected]>
Date:   Mon May 9 15:18:56 2016 -0500

   pimd: send pim prune via correct interface when rpf upstream interface for a source changes

   When the rpf upstream interface for a joined source changes, a prune was
   being sent out the new rpf upstream interface that was intended for the old
   upstream router.  The prune should be sent out the old rpf upstream
   interface so that the old route for the multicast source is pruned.

   Reviewed-by: Jafar Al-Gharaibeh <[email protected]>
   Signed-off-by: Taylor Bouvin <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>

commit 220355df533f9c127c32de296513fae180c1568d
Author: Andrej Ota <[email protected]>
Date:   Mon May 9 20:49:01 2016 +0200

   bgpd: fix BGP IPv6 route map error

   BGP refactoring in commit f3cfc46450cccc5ac035a5a97c5a1a5484205705
   introduced an error which broke route map processing for IPv6 where
   AFI_IP was used instead of AFI_IP6.

   This patch fixes the typo.

   Signed-off-by: Andrej Ota <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>

commit 0ffd69a9bf58ab2e0105336f10753293230a4360
Author: Paul Jakma <[email protected]>
Date:   Wed Aug 3 15:22:39 2016 +0100

   doc: Add isisd.texi to quagga_TEXINFOS so it gets in dist tarball

commit 3676cb0c029c8f8f06ab703dd441c1e23e5ef333
Author: Paul Jakma <[email protected]>
Date:   Fri Jul 29 13:39:37 2016 +0100

   *: Remove some for statement declarations

   We generally require C99.  Some compilers, e.g.  gcc, barf on
   'for' statement declared variables, if std={gnu,c}99 or higher is not
   given - even while seemingly accepting other C99 constructs.

   As it's trivial, remove these.

commit 481986950290323e2f5d1e774a666d4b7ed510d6
Author: Olivier Dugeon <[email protected]>
Date:   Tue Apr 19 19:21:17 2016 +0200

   ospfd: Add support Router Capabilities support to OSPF

   This is an implementation of RFC4970 (Router Information) and
   RFC5088 (PCE Capabilities announcement)

   * ospfd/Makefile.am: Add new file ospf_ri.c and ospf_ri.h
   * ospfd/ospf_opaque.c: Add new Router Capabilities code point
   * ospfd/ospf_ri.[c,h]: Implementation of RFC4970 & RFC5088

   Signed-off-by: Olivier Dugeon <[email protected]>

commit ec04b9faf9ec55ccf7d5bb16cf17a85051fc8270
Author: Olivier Dugeon <[email protected]>
Date:   Tue Apr 19 19:18:18 2016 +0200

   doc: Update documentation for Traffic Engineering

   Signed-off-by: Olivier Dugeon <[email protected]>

commit 4f593574c41deb598cbbefde5c6d938799e81d5a
Author: Olivier Dugeon <[email protected]>
Date:   Tue Apr 19 19:03:05 2016 +0200

   isisd: Add support of Traffic Engineering

   These patches is an implementation of RFC5305 that enable the
   support of Traffic Engineering in IS-IS

   * isisd/Makefile.am: Add new files isis_te.c and isis_te.h

   * isisd/isis_circuit.[c,h]: Add new mpls_te_circuit structure to
     isis_circuit structure to handle new Traffic Engineering TLVs
   * isisd/isis_lsp.c: Update LSP handler to mux/demux Traffic Engineering TLVs
   * isisd/isis_main.c: Add initialisation of ISIS TE
   * isisd/isis_pdu.c: Update function process_p2p_hello() to retrieve remote
     IP address to populate Traffic Engineering TLV.
   * isisd/isis_te.[c,]: Implementation of RFC5305
   * isisd/isis_tlv.[c,h]: Update TLV definition and function to handle
     Traffic Engineering ones
   * isisd/isis_zebra.c: Add new function isis_zebra_link_params() to retrieve
     the link parameters of interfaces from ZBus to populate the Traffic
     Engineering TLVs
   * isisd/isisd.[c,h]: Add Traffic Engineering support with new debug command

   Signed-off-by: Olivier Dugeon <[email protected]>

commit 29a1401706a762541b366c7844507efe2bc1345d
Author: Olivier Dugeon <[email protected]>
Date:   Tue Apr 19 18:42:40 2016 +0200

   ospfd: Update Traffic Engineering support

   These patches update original code to RFC3630 (OSPF-TE) and add support of
   RFC5392 (Inter-AS v2) & RFC7471 (TE metric extensions) and partial support
   of RFC6827 (ASON - GMPLS).

   * ospfd/ospf_dump.[c,h]: Add new dump functions for Traffic Engineering
   * ospfd/ospf_opaque.[c,h]: Add new TLV code points for RFC5392
   * ospfd/ospf_packet.c: Update checking of OSPF_OPTION
   * ospfd/ospf_vty.[c,h]: Update ospf_str2area_id
   * ospfd/ospf_zebra.c: Add new function ospf_interface_link_params() to get
     Link Parameters information from the interface to populate Traffic
     Engineering metrics
   * ospfd/ospfd.[c,h]: Update OSPF_OPTION flags (T -> MT and new DN)
   * ospfd/ospf_te.[c,h]: Major modifications to update the code to new
     link parameters structure and new RFCs

   Signed-off-by: Olivier Dugeon <[email protected]>

commit ac10d30c03091eace3c0405aa8ccb7d3c09e7bd2
Author: Olivier Dugeon <[email protected]>
Date:   Tue Apr 19 18:33:42 2016 +0200

   vtysh: Add support of new link-params CLI

   In vtysh_config.c/vtysh_config_parse_line(), it is not possible to continue
   to use the ordered version for adding line i.e. config_add_line_uniq() to print
   Interface CLI commands as it completely break the new LINK_PARAMS_NODE.

   Signed-off-by: Olivier Dugeon <[email protected]>

commit 15773a87ce652da5b02ca14dc0088408899ea007
Author: Olivier Dugeon <[email protected]>
Date:   Tue Apr 19 18:29:55 2016 +0200

   zebra: Add link parameters support to Zebra

   * zebra/interface.c:
      - Add new link-params CLI commands
      - Add new functions to set/get link parameters for interface
   * zebra/redistribute.[c,h]: Add new function to propagate link parameters
     to routing daemon (essentially OSPFD and ISISD) for Traffic Engineering.
   * zebra/redistribute_null.c: Add new function
     zebra_interface_parameters_update()
   * zebra/zserv.[c,h]: Add new functions to send link parameters

   Signed-off-by: Olivier Dugeon <[email protected]>

commit ae51c9d510fb7d9cc41ead8803af916c1f4b34ca
Author: Olivier Dugeon <[email protected]>
Date:   Tue Apr 19 16:21:46 2016 +0200

   lib: Add new if_link_params structure

   This new structure is the basis to get new link parameters for
   Traffic Engineering from Zebra/interface layer to OSPFD and ISISD
   for the support of Traffic Engineering

   * lib/if.[c,h]: link parameters struture and get/set functions
   * lib/command.[c,h]: creation of a new link-node
   * lib/zclient.[c,h]: modification to the ZBUS message to convey the
     link parameters structure
   * lib/zebra.h: New ZBUS message
   * lib/memtypes.c: Add new memory type for Traffic Engineering support

   Signed-off-by: Olivier Dugeon <[email protected]>

commit 7e49a4f99273858887806c6251d958e1e664bedf
Author: Paul Jakma <[email protected]>
Date:   Tue Aug 2 13:36:03 2016 +0100

   build: Test for features.h and move include to lib/zebra.h

   * configure.ac: Check for features.h, which is needed to get Clang to
     define __STDC_IEC_559__.
   * lib/{stream.c,zebra.h}: move the features.h include to zebra.h, so
     lib/network.c also gets it.

commit a3b161bb72d7fdb58e79afd0f706849601f77fe2
Author: Paul Jakma <[email protected]>
Date:   Mon Aug 1 15:13:58 2016 +0100

   lib: IEC559 tests are fragile, reduce to warning rather than error.

   * {network,stream}.c: Weaken the compile time tests for IEEE754 / IEC-559
     binary floating point format from an error to a warning when not detected.

     I can't think of any platforms that are not IEEE-754 format, and as the
     testing for the defines appears to be fragile (often not set) the error
     just gives false positives.

     Even the warnings may be too much.  Those should probably be moved
     to some configure test.  Will do for now though, to fix compilation
     on CentOS and some BSDs.

commit 4359501e1a427159c9b49f3041889837aaaf2eb3
Author: Paul Jakma <[email protected]>
Date:   Tue May 19 18:50:49 2015 +0100

   lib: consolidate ntohf/htonf from ospfd/isisd TE to lib/network

   * lib/network.{c,h}: Consolidate the ntohf/htonf functions used in ospfd
     TE to here, using the value-passing variant that fits with existing
     ntoh/hton functions.
   * ospfd/ospf_opaque.c: Remove its variants.
   * ospfd/ospf_te.c: Update to use the consolidated, by-value variant.

commit d41e7b975b901f109608471b77c46718c1fb5b45
Author: Paul Jakma <[email protected]>
Date:   Tue May 19 15:38:43 2015 +0100

   lib/stream: add float/double <-> IEEE-754 single/double mux/demuxers

   * stream.{c,h}: Add stream_get{f,d} and stream_put{f,d}) demux and muxers to
     safely convert between big-endian IEEE-754 single and double binary
     format, as used in IETF RFCs, and C99.  Implementation depends on host
     using __STDC_IEC_559__, which should be everything we care about.  Should
     correctly error out otherwise.

     Thanks to Aidan Delaney <[email protected]> and Olivier Dugeon for pointing
     out the __STDC_IEC_559__ macro.

     Update: GCC does not per se set __STDC_IEC_559__, so also test for
     __GCC_IEC_559 >= 1.

commit 581ecbfe91d23791c116a8e3790208a17c1a5983
Author: Christian Franke <[email protected]>
Date:   Tue May 3 19:59:43 2016 +0200

   zebra: count iface up/down events and keep last time of their occurrence

   It is quite useful to be able to assert whether specific interfaces have
   flapped or also to verify that specific interfaces have not flapped.

   By having counters for those events and storing the last time of their
   occurrence, this is made possible.

   Signed-off-by: Christian Franke <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>

commit 00667cea1fbd088900f7909f2044da2a7e26270d
Author: Christian Franke <[email protected]>
Date:   Tue May 3 19:59:42 2016 +0200

   lib: add event_counter

   Signed-off-by: Christian Franke <[email protected]>

commit 880e31ca2d8a8a8fcbc28bfeac9bd13fc76dd2c1
Author: Christian Franke <[email protected]>
Date:   Tue May 3 19:59:40 2016 +0200

   lib: use constant to replace magic value for length of quagga_timestamp

   Signed-off-by: Christian Franke <[email protected]>

commit 2ab67a7591d7693bb726dd82795017c8c3f52d99
Author: Pawel Wieczorkiewicz <[email protected]>
Date:   Fri Apr 1 12:54:38 2016 +0200

   build: detect and create AM_SILENT_RULES macro if needed

   Older libs have problem with that:
   configure.ac:17: warning: macro `AM_SILENT_RULES'
     not found in library
   ...
   configure.ac:24: error: possibly undefined macro:
      AM_SILENT_RULES
   Tested-by: NetDEF CI System <[email protected]>

commit 811577eaede8b6a7ea6ba3731c82eed1c4d07500
Author: Donald Sharp <[email protected]>
Date:   Thu Mar 10 20:16:48 2016 -0500

   lib: Remove unnecessary parentheses

   The freebsd compiler complains that there is an extra set of ()'s
   around the if statement.

   Signed-off-by: Donald Sharp <[email protected]>

commit 985c3556921fa669f86fe5e62130fbeb93d94ca9
Author: Donald Sharp <[email protected]>
Date:   Thu Mar 10 20:16:47 2016 -0500

   bgpd: Fix code path that leads to uninitialized variables

   subtype and sublength are not initialized and if on Line 1877
   BGP_ATTR_ENCAP != type we will not set subtype and sublength,
   but these variables are used immediately below that if statement.

   This issue was discovered via the freebsd compiler.

   Signed-off-by: Donald Sharp <[email protected]>

commit 54406ac4c6883725f8a337bdc4f15fb015926b0f
Author: Donald Sharp <[email protected]>
Date:   Fri Mar 4 15:28:57 2016 -0500

   lib: Refactor thread_process_fd

   thread_process_fd is looping over the read and write
   fd's separately.  There is no need to do this individually.
   loop over both the read and write fdset's at the same time.
   This will improve select processing performance, especially
   for large data sets.

   Signed-off-by: Donald Sharp <[email protected]>

commit 1ad00b07a10eb8b3f5c94348488735fb08f28717
Author: Donald Sharp <[email protected]>
Date:   Wed Jul 13 11:02:38 2016 -0400

   lib: Fix regression in thread.c

   * Fix regression introduced with merging of

       'lib: Refactor read/write functionality'

commit e0b8324deb490c52834775d2b805cbb57e003ce0
Author: Donald Sharp <[email protected]>
Date:   Fri Mar 4 15:28:56 2016 -0500

   lib: Refactor read/write functionality

   Both the read and write functions used the same code
   slightly modified for reading and writing.  Combine this
   code together.

   Signed-off-by: Donald Sharp <[email protected]>

   Edited-by: Paul Jakma <[email protected]> to retain the
   external library symbols, for ease of merging.

commit 19be18a929c3afa343ac5435dba25f522e294d9b
Author: Donald Sharp <[email protected]>
Date:   Fri Mar 4 15:28:55 2016 -0500

   lib: Abstract fd set operations

   Abstract FD set operations so that we can eventually
   choose what type of select/poll operation that
   we want to use.

   Signed-off-by: Donald Sharp <[email protected]>

commit 6bcee414a487024e7865fb29d4e583870406d914
Author: David Lamparter <[email protected]>
Date:   Sat Mar 12 19:58:09 2016 +0100

   lib: fix MIN/MAX macros to not double-eval

   cf. https://gcc.gnu.org/onlinedocs/gcc/Typeof.html
   (Works on all compilers on Quagga's compiler support list in
   doc/overview.texi)

   Signed-off-by: David Lamparter <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>
   Acked-by: Donald Sharp <[email protected]>

commit 921936652359fe72728eb196aa9107310f02a4d4
Author: Paul Jakma <[email protected]>
Date:   Thu Jun 16 15:53:26 2016 +0100

   lib: keep hash of node's commands to detect duplicate installs

   * command.h: (struct cmd_node) Add a hash, so duplicate installs of
     a cmd_element to a command node can be detected.  To help catch
     strays from the VIEW/ENABLE node consolidation particularly
     (installs to VIEW automatically install to ENABLE too now).
   * command.c: (cmd_hash_{key,cmp}) helpers for the hash - just directly
     on the pointer value is sufficient to catch the main problem.
     (install_node) setup the hash for the command node.
     (install_element) check for duplicate installs.
     The assert on the cmd_parse_format seems misplaced.
     (install_default_basic) separate the basic, VIEW, node default commands
     to here.
     (cmd_init) get rid of dupes, given consolidation.
     (cmd_terminate) clean up the node command hash.

   Not done: The (struct cmd_node)'s vector could be replaced with the
   cmd hash, however much of the command parser depends heavily on the
   vector and it's a lot of work to change.  A vector_lookup_value could
   also work, particularly if vector could be backed by a hash.

   The duplicate check could be disabled in releases - but useful in
   development.  It's a little extra overhead at startup.  The command
   initialisation overhead is already something that bites in
   micro-benchmarks - makes it easy for other implementations to show
   how much faster they are with benchmarks where other load is low
   enough that startup time is a factor.

commit 41de629c1fe88f9ea95d0400af6896f3c84a0dff
Author: Christian Franke <[email protected]>
Date:   Tue May 3 19:59:41 2016 +0200

   lib: add api method to read current config path

   Signed-off-by: Christian Franke <[email protected]>

commit 68b45cc592d5d61e748e8d99ec9f84e63aa73213
Author: Donald Sharp <[email protected]>
Date:   Fri Mar 11 14:27:13 2016 -0500

   *: Consolidate all double VIEW_NODE and ENABLE_NODE's

   If a command is put into the VIEW_NODE, it is going into the
   ENABLE_NODE as well.  This is especially true for show commands.
   As such if a command is in both consolidate it down to VIEW_NODE.

   Signed-off-by: Donald Sharp <[email protected]>

commit b9ac2f320922542e0320ceeced4aa7264564e98a
Author: Donald Sharp <[email protected]>
Date:   Fri Mar 11 14:27:12 2016 -0500

   lib: Consolidate VIEW_NODE to be ENABLE_NODE as well

   If you are in VIEW_NODE, the command should exist in ENABLE_NODE
   as well.  This is being done to reduce chances of code being
   added to one but not the other NODE.

   Signed-off-by: Donald Sharp <[email protected]>

commit 4ab273bb60606ed681bee1be6fb2c8bb31dc26a7
Author: Denil Vira <[email protected]>
Date:   Fri Mar 4 15:28:54 2016 -0500

   lib: Replace lists with arrays to store read and write threads

   With arrays, a thread corresponding to given fd is looked up in constant time
   versus the linear time taken for list traversals.

   Signed-off-by: Denil Vira <[email protected]>
   Signed-off-by: Donald Sharp <[email protected]>

commit 0744040564ece3f4b9fe39fcf857e466a5f68a72
Author: Donald Sharp <[email protected]>
Date:   Thu Feb 25 07:39:45 2016 -0500

   vtysh: Add ability to only look at one processes work queue

   When examining performance information it is nice to not
   have to look at daemons who you are not interested in.

   Signed-off-by: Donald Sharp <[email protected]>
   Reviewed-by: Don Slice <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>

commit 23757db11c5378521b7948847e17691f4fc35e0a
Author: David Lamparter <[email protected]>
Date:   Wed Feb 24 06:26:02 2016 +0100

   *: get rid of "MTYPE 0"

   A few places are using 0 in place of the MTYPE_* argument.  The
   following rewrite of the alloc tracking won't deal with that, so let's
   use MTYPE_TMP instead.

   Signed-off-by: David Lamparter <[email protected]>
   Acked-by: Donald Sharp <[email protected]>

commit 7bd31774cf2c1cfaf74bca87f57f698e20a07e65
Author: kitty <[email protected]>
Date:   Thu Feb 18 21:33:40 2016 -0800

   ospfd: fix non-zero metric when describing loopback addresses

   Fixes Quagga Bugzilla #842

   Change-Id: Iff33d70089d1393bf3e9c757d9e9faf134699121
   Signed-off-by: kitty <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>
   Acked-by: Donald Sharp <[email protected]>

commit 47dd9af50d7fcf3ea25ebb8c8c4e9c4726a072f6
Author: David Lamparter <[email protected]>
Date:   Tue Feb 16 19:50:16 2016 +0100

   build/pimd: remove special shell scripts

   Signed-off-by: David Lamparter <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>

commit 8b3ab1f1c8172ff7c77b382b6636c8e8314d7ebc
Author: David Lamparter <[email protected]>
Date:   Tue Feb 16 19:50:15 2016 +0100

   isisd: fix assert warning

   icc (the Intel C Compiler) "knows" that assert() can be disabled by
   setting specific optimisation flags, and therefore emits a warning about
   missing a return value after an "always-error" assert.

   Workaround by returning a value - this probably needs discussion and a
   better fix (for all places where the code needs to abort due to internal
   errors).

   Signed-off-by: David Lamparter <[email protected]>

commit d869dbd03b4d75d512552d07ed8fbe0807272a9c
Author: Udaya Shankara KS <[email protected]>
Date:   Thu Feb 11 21:42:29 2016 +0530

   zebra: Enable fpm module to connect to remote fpm server

   FPM aims to provide cross platform mechanism to support the scenario
   where the router has forwarding path distinct fromt the kernel.Commonly
   Hardware based fast path.Hence it is non-configurable paramter.This
   limits us to use funcationality to update FIB information to remote
   hosts, like SDN controller.

   This implementation provides the CLI to configure remote hosts and port
   information of remote fpm controller.Otherwise default fpm server will
   be localhost and default fpm port will be well know port 2620.

   * zebra_fpm.c: added fpm_server paramter to zfpm_global_t handler.
       Implemented CLI for configuring the fpm server and no fpm
       command to revert back to default configuration.

   * zserv.c: Install zebra node to write fpm configuration info
      on console/config file.

   Further documentation supplied:
   -------------------------------

                  ZEBRA : CLI CONFIGURATION FOR FPM MODULE
            ========================================================

   1. INTRODUCTION
   ================================
      1.1 scope

        This memo discusses the configuration option for zebra to update
        FIB information to local and remote modules.
        This will also helps to address the issue associated with CORD project.
        https://jira.onosproject.org/browse/CORD-411

   2. REFERENCE
   ================================
     Quagga version 99.24+ ( main branch committed on 29-sep-2015)

   3. PROBLEM DESCRIPTION
   ================================

       Once FPM is enabled, Quagga periodically tries to initiate fpm
   connection to localhost:2620.  These values are non configurable in
   existing implementation.  There is no CLI available to configure
   "host:port".  hence limits us to use it for hardware based fast path
   modules only.

   4. PROPOSED CHANGES
   ================================
   Following changes are done to the quagga code
      a) Added new CLI to configure "host address : port".
         The CLI format
         <conf t>
              $ fpm connection ip <ipv4 address> port <tcp port num>

         and no fpm command to revert back to default
         <conf t>
              $ no fpm connection ip <ipv4 address> port <tcp port num>

      b) Allowed values are ipv4 address and tcp port range <1-65535>

      c) FPM initialization code has been enhanced to pick the "host
         address : port" values from zebra.conf.  if not found then
         default values as localhost:2620 will be used.  and updated the
         information on to config file on write config command

   5. FILES MODIFIED
   ================================
     1) fpm/fpm.h :
        a) Added MACRO to represent network order loopback ip

     2) zebra/zebra_fpm.h :

        a) introduced fpm_server variable in zfpm_glob_t handler to hold
           the remote fpm server address

        b) Hooked 'fpm_remote_ip_cmd' and 'no_fpm_remote_ip_cmd' at CONFIG
           node to configure remote fpm detail and to revert back to
           default respectively

     3) zebra/zserv.c :
        a) Hooked 'config_write_fpm' callback function, at ZEBRA_NODE to
           display the fpm connection details on console on entering
           command

            $ show running_config
           and to write to configuration file on entering command
            $ write config

   6. TESTING DETAILS
   ================================

      6.1. default behavior

             In default configuration FPM will attempt to connect to
             localhost:2620

      6.2. update fpm info
           a) Using CLI command user can configure fpm host:port details
              and can be able to write to config file(zebra.conf) using
              write config command.  this parameters has no
              dependency/impact on other parameters of config file

           b) show running-config/write config will display the fpm
              information if configured.  and will not display any
              information related to fpm for default configuration

           c) these configured information will be stored to config file.
              only on write config command.

      6.3 loading from config file
           a) zebra attempts to connect to fpm server if fpm parameter
              found in config file.else connects to default parameters.

           b) if fpm connection drops, fpm will periodically attempts to
              connect to remote server.

           c) if fpm connections already established. then newly
              configured fpm parameters will not disconnect the existing
              connection.  new connection to the different fpm server will
              happen only after existing connection closes by either of
              the end.

commit 9da9a61e2f8afb61aa31c17fb810169290bf96ee
Author: Donald Sharp <[email protected]>
Date:   Tue Feb 2 21:11:40 2016 -0500

   config: Remove unused library check

   configure.ac is looking for the setproctitle library,
   which while it might be useful, we never call setproctitle
   or any other function that the library might expose.

   Signed-off-by: Donald Sharp <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>

commit 071cfcd2e315499f0a4fa8c23779468eacc20033
Author: Donald Sharp <[email protected]>
Date:   Tue Feb 2 21:02:42 2016 -0500

   bgpd: Removed unused variable from 'struct attr_extra'

   The mp_nexthop_local_in variable is never used.  Remove it
   from the code base.

   Signed-off-by: Donald Sharp <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>

commit 9514fee4b37a9043738aa16ca8684993a1b572ad
Author: Donald Sharp <[email protected]>
Date:   Tue Jan 26 11:44:14 2016 -0500

   bgpd, ripngd, zebra: Remove duplicate PSIZE define

   The PSIZE macro is defined the same in multiple places.  Remove
   the duplicates.

   Signed-off-by: Donald Sharp <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>

commit 3c964045459f66921f8a3dc33fe4c028e6b0b141
Author: Donald Sharp <[email protected]>
Date:   Mon Jan 25 23:38:53 2016 -0500

   bgpd: Fix 'show bgp ipv4 vpnv4 statistics' cli.

   When attempting to use the 'show bgp ipv4 vpnv4 statistics' cli, the safi
   choosen is BGP_MPLS_LABELED_VPN which is #defined to 128.  The afi/safi
   combination is fed to bgp->rib, which limits the size of the safi to BGP_SAFI_MAX
   which is #defined to 5.   The correct value to use is BGP_MPLS_VPN

   The bgp code differentiates between the actual safi value for BGP_MPLS_LABELED_VPN
   used defined by RFC 4364, to a internal SAFI value used to limit array size.

   Signed-off-by: Donald Sharp <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>

commit 687bea20fa61d8fc7cf48c0b227f16d0b324778c
Author: Donald Sharp <[email protected]>
Date:   Mon Jan 25 14:56:26 2016 -0500

   lib: Allow zclient do-over of connect on initial attempt

   When a protocol is attempting to connect to the zebra daemon
   through it's socket.  If the inital attempt fails, give it a
   few more attempts before giving up and leaving the daemon in
   a bizarre state.

   This problem was found by Ashley Penney, and Ashley was of
   immense help in debugging and testing the fix for this issue.

   Signed-off-by: Donald Sharp <[email protected]>
   Tested-by: Ashley Penney <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>

commit 9145f0e4cf776bd3156620da6c8a772fee4d4383
Author: Balaji <[email protected]>
Date:   Wed Jan 20 22:59:27 2016 +0530

   bgpd: Addition of bgp dampening configuration commands under IPv4/multicast

   Signed-off-by: Balaji Gurudoss <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>

commit 9c52caeaf40e32701ff79a721f0fee52cfcbd77c
Author: Balaji <[email protected]>
Date:   Wed Jan 20 22:59:26 2016 +0530

   bgpd: Addition of dampening show commands under v4 unicast/multicast tree

   Patch contains addition of show ip bgp ipv4 (unicast| multicast)
   dampening tree.

   Signed-off-by: Balaji Gurudoss <[email protected]>

commit df2ef24fb73c83a6e733be9eb8cac3e0df8467f8
Author: Matthieu Boutier <[email protected]>
Date:   Wed Sep 10 16:50:45 2014 +0200

   lib: Make distribute.c accepts both v4 and v6.

   distribute.c doesn't allow to manage both v4 and v6 distribute lists.  This
   patch fix this problem by having 4 DISTRIBUTE* values in the enumeration instead
   of two. The code in all daemons using distribute.c is adapted.

commit 543e791be9257e60d4d02abd0cdac7337a31636a
Author: Matthieu Boutier <[email protected]>
Date:   Wed Sep 10 16:50:44 2014 +0200

   ripngd: code simplification for redistribution.

   Use loops and variables instead of doing each cases by hand.
   Use boolean instead of having 2 almost identical functions.

commit fafa899b4e84c7b9fd07b076517744d9351aaa6b
Author: Matthieu Boutier <[email protected]>
Date:   Wed Sep 10 16:50:43 2014 +0200

   ripd: code simplification for redistribution.

   Use loops and variables instead of doing each cases by hand.
   Use boolean instead of having 2 almost identical functions.

commit 2074d6752d1dafcd6511677e2bdc9bbe0b73c388
Author: Matthieu Boutier <[email protected]>
Date:   Wed Sep 10 16:50:42 2014 +0200

   lib: simplify distribute.c's code.

   Use loops and variables instead of doing each cases by hand.
   Use static functions instead of rewriting code.

commit a3936d04942795bb92f04fefd25957c327e31c20
Author: Boian Bonev <[email protected]>
Date:   Wed Jun 25 20:26:44 2014 +0300

   bgpd: add aspath_aggregate_mpath that preserves path length

   Issue - when two aspaths are aggregated the result will be with
   different length if the two paths do not share common prefix.

   E.g.: aggregation of 100 101 400 500 and 200 201 400 500 currently
   will result in {100,101,200,201,400,500} which is of much shorter
   length and is not ok to be readvertised becase may create shortest
   path on the internet and cause infinite flapping.

   aspath_aggregate_mpath will construct the followin path for the
   above example: {100,200} {101,201} 400 500

   Signed-off-by: Boian Bonev <bbonev at ipacct.com>

   patchwork #994: http://patchwork.quagga.net/patch/994/

commit 6184c39e27d4b6f3721b8c4dc3df1b968e09606a
Author: Roman Hoog Antink <[email protected]>
Date:   Mon Mar 17 14:01:42 2014 +0100

   bgpd: implement admin distance

   Until today the admin distance cannot be configured for any IPv6
   routing protocol. This patch implements it for bgp.

   Signed-off-by: Maitane Zotes <[email protected]>

   patchwork #993: http://patchwork.quagga.net/patch/993/

commit d8f7f86a64842fcc6200c2fa4f560b9aa7a279bb
Author: Roman Hoog Antink <[email protected]>
Date:   Wed Mar 5 09:13:43 2014 +0100

   ospf6d: implement admin distance

   Until today the admin distance cannot be configured for any IPv6
   routing protocol. This patch implements it for ospf6.

   Signed-off-by: Maitane Zotes <[email protected]>

commit a0a661f982c4a9726573faf28817d77d3e7cdad5
Author: boris yakubov <[email protected]>
Date:   Fri Apr 26 14:38:34 2013 -0400

   isisd: Segmentation fault on isis daemon fixes

   I have a fix for 2 segmentation fault scenarios on the isis daemon:
   1. When running a command "isis passive" on an interface in the
   following context:
   "end"
   "configure terminal "
   "interface dummy0"
   "isis passive"
   The trace back collected:
   isis_adjacency.c:521
   family=2,
        root_sysid=0x20aee6d0 "", parent=0x20af4d68) at isis_spf.c:999
   sysid=0x20aee6d0 "")
        at isis_spf.c:1217
   isis_spf.c:1372
   isis_lsp.c:416
   isis_lsp.c:1660
   isis_main.c:368

   The fix location:
   file name: isisd/isis_adjacency.c
   routine name: isis_adj_build_up_list

   2. When deleting the existing isis router instance:
   "end"
   "configure terminal "
   "no router isis DEAD"

   The fix location:
   isisd/isis_events.c, routine circuit_resign_level
   isisd/isis_lsp.c, routine lsp_destroy
   isisd/isis_route.c, isis_route_validate

   The trace back collection:
   "DEAD") at isisd.c:252
   argc=1, argv=0xbfc39054) at isisd.c:1520
   vty=0x20d6f528, cmd=0x0) at command.c:2121
   cmd=0x0, vtysh=0) at command.c:2155
   isis DEAD") at vty.c:433
   isis_main.c:368

   and

   "DEAD") at isisd.c:260
   argc=1, argv=0xbfd6cf54) at isisd.c:1520
   vty=0x208cb528, cmd=0x0) at command.c:2121
   cmd=0x0, vtysh=0) at command.c:2155
   isis DEAD") at vty.c:433
   isis_main.c:368

   The patch is included.

   patchwork #833: http://patchwork.quagga.net/patch/833/

commit a343cf8d74920752ba0e35142e23a3ca56620755
Author: Christian Franke <[email protected]>
Date:   Mon Jan 14 23:41:57 2013 +0100

   lib: update Solaris multicast API (BZ#725)

   On OpenIndiana/Solaris the build fails with "unsupported multicast API".
   It's only in the IPv4 part where setsockopt IP_MULTICAST_IF needs a
   local address and not the index (IPv6 wants the index).
   The following code walks the list of interfaces until it finds the matching
   index and uses the interface's local address for the setsockopt call.
   I don't know if it works on Solaris < 10 (I guess yes, but I don't have
   any machine to verify it).

   [NB: this breaks unnumbered setups that use the same IPv4 address on
   multiple interfaces. -- [email protected]]

   Reported-by: Brian Utterback <[email protected]>
   Signed-off-by: Christian Franke <[email protected]>

   Patchwork #762

commit d319a3abbf6e6c310b6b6a6891ebe1957592f9a9
Author: Paul Jakma <[email protected]>
Date:   Wed May 25 14:47:00 2016 +0100

   ripd: split-horizon default differed between rip_interface_new and _reset

   * rip_interface.c: Default for split_horizon_default differed between
     rip_interface_new and rip_interface_reset, causing at least some issues
     after interface events. See patchwork #604. Fix, and consolidate code.

     (rip_interface_{reset,clean}) rename these to 'interface', as that's more
     appropriate.  Spin the ri specific bodies of these functions out to
     rip_interface_{reset,clean} helpers.  Factor out the overlaps, so
     rip_interface_reset uses rip_interface_clean.

     (rip_interface_new) just use rip_interface_reset.

   * ripd.h: Update for (rip_interface_{reset,clean})

   Reported by xufeng zhang, with a suggested fix on which this commit expands.
   See patchwork #604.  This commit addresses only the split-horizon
   discrepency, issue #2.  The other issue they reported, #1, is not addressed,
   though suggested fix seems inappropriate.

   Cc: [email protected]

commit 86b2a0a12ace817e64e8e4a719b1ba9a8e6af253
Author: Lou Berger <[email protected]>
Date:   Tue May 17 12:19:51 2016 -0400

   lib: change command logging to be off by default

   * lib/vty.c: add 'log_command' to enable logging of vty commands executed.
     Default command logging to off.

commit f53585d59b62b12d68282154af346796b75c7f2f
Author: Lou Berger <[email protected]>
Date:   Tue May 17 07:10:36 2016 -0400

   bgp: add "debug bgp allow-martians" next hops and related code/commands

commit ac6ff4643645315db648604771926218aa4ead2d
Author: Lou Berger <[email protected]>
Date:   Tue May 17 07:10:37 2016 -0400

   bgpd: Add flag to not change e{u,g}id on startup and run as unprivileged user

   * bgp_main.c: add -S / --skip_runas flag to not change effective user/group
     on start up.  Enables bgpd to be run by unprivileged user.

commit 5f678889843fb9bc3f07d05eebc2f8fb35584a91
Author: Igor Ryzhov <[email protected]>
Date:   Fri Apr 22 17:38:24 2016 +0300

   zebra: add missing vty commands

   Signed-off-by: Igor Ryzhov <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>

commit aef4650851cf0f74d944466d50e26bb8f8635c3d
Author: Stas Nichiporovich <[email protected]>
Date:   Tue Apr 26 08:14:36 2016 +0000

   zebra: fix crash caused by using route-map with "set src"

   Signed-off-by: Stas Nichiporovich <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>

commit bb01bdd740339b0c07d8ed0786811801b2a79192
Author: Jafar Al-Gharaibeh <[email protected]>
Date:   Thu Apr 21 16:22:33 2016 -0500

   ospfd: fix - correct neighbor index on changing/p2p/virtual links

   ospfd keeps a list of neighbor routers for each configured interface. This
    list is indexed using the neighbor router id in case of point-to-point and
    virtual link types, otherwise the list is indexed using the neighbor's
    source IP (RFC 2328, page 96). The router adds itself as a "pseudo" neighbor
    on each link, and also keeps a pointer called (nbr_self) to the neighbor
    structure. This takes place when the interface is first configured. Currently
    ospfd adds this pseudo neighbor before the link parameters are fully configure,
    including whether the link type is point-to-point or virtual link. This causes
    the pseudo neighbor to be always indexed using the source IP address regardless
    of th link type. For point-to-point and virtual links, this causes the lookup
    for the pseudo neighbor to always fail because the lookup is done using the
    router id whereas the neighbor was added using its source IP address.
    This becomes really problematic if there is a state change that requires a
    rebuild of nbr_self, changing the router id for example. When resetting
    nbr_self, the router first tries to remove the pseudo neighbor form its
    neighbor list on each link by looking it up and resetting any references to it
    before freeing the neighbor structure. since the lookup fails to retrieve any
    references in the case of point-to-point and virtual links the neighbor
    structure is freed leaving dangling references to it. Any access to the
    neighbor list after that is bound to stumble over this dangling pointer
    causing ospfd to crash.

   Signed-off-by: Jafar Al-Gharaibeh <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>

commit e6ec2d6d18dadb119b93284ef2f5f5b5440d6f66
Author: Donald Sharp <[email protected]>
Date:   Fri Apr 8 19:30:51 2016 -0400

   lib: Fix priviledge modification for vty group specified

   When attempting to switch runtime permissions over to
   the correct group specified for the vty group, if the
   user specified to run as does not have that vty group
   then do warn about the issue and stop running

   Signed-off-by: Donald Sharp <[email protected]>
   Reported-by: Thomas Martin <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>

commit 190591f0fe3388c746ea48f69a439f4bd0b49834
Author: Jafar Al-Gharaibeh <[email protected]>
Date:   Thu Apr 21 17:40:12 2016 -0500

   zserv: [pimd] fix - avoid dereferencing a NULL pointer

   Signed-off-by: Jafar Al-Gharaibeh <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>

commit 80f61a9979079ed16b9eff50ba65ad8bf1b15fb6
Author: Jonathan Hart <[email protected]>
Date:   Tue Apr 19 22:13:49 2016 -0700

   pimd: Fix hang when doing nexthop lookup from zebra

   I was running in to a bug when pimd would hang in some cases when
   it had to do a nexthop lookup from zebra, such as when a PIM JOIN
   was received. This issue could be easily reproduced by running
   'show ip rib <ip>' from the pimd vty which forces a nexthop lookup.

   The issue is in zclient_read_nexthop, the zclient_read_header function
   reads the message content into the stream, but then after that the
   zclient_read_nexthop function tries to read the message content again
   from the socket, but there are no bytes so it hangs waiting for input.
   The solution is to not try to read the message content the second time.
   Acked-by: Jafar Al-Gharaibeh
   Tested-by: NetDEF CI System <[email protected]>

commit 7e73eb740f3c52a5b7c0ae9c2cd33b486d885552
Author: Timo Teräs <[email protected]>
Date:   Sat Apr 9 17:22:32 2016 +0300

   zebra: handle multihop nexthop changes properly

   The rib entries are normally added and deleted when they are
   changed. However, they are modified in placae when the nexthop
   reachability changes. This fixes to:
    - properly detect nexthop changes from nexthop_active_update()
      calls from rib_process()
    - rib_update_kernel() to not reset FIB flags when a RIB entry
      is being modifed (old and new RIB are same)
    - improves the "show ip route <prefix>" output to display
      both ACTIVE and FIB flags for each nexthop

   Fixes: 325823a5 "zebra: support FIB override routes"
   Signed-off-by: Timo Teräs <[email protected]>
   Reported-By: Igor Ryzhov <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>

commit 7e7a101dde5969f62074801d84bb4cc75e50f548
Author: Donald Sharp <[email protected]>
Date:   Fri Apr 8 22:03:22 2016 -0400

   ripd: Fix Null pointer dereference

   The rip_output_process function dereferenced a NULL
   pointer.  Core file examination showed that tmp_rinfo
   was NULL on line 2435.  Looking at the last diff
   associated with this commit, it was obvious that
   a formating mistake had been made in the loop over
   the route nodes list of possible paths.

   Signed-off-by: Donald Sharp <[email protected]>
   Reported-by: Sebastian Kricner <[email protected]>
   Tested-by: NetDEF CI System <[email protected]>

commit e7207098c0fa88af6899c1b1483e3ddb19f5336a
Author: Christian Franke <[email protected]>
Date:   Sun Apr 3 12:46:28 2016 -0300

   isisd: ignore unknown interfaces when adjusting IS-IS mtu

   For example during startup of isisd, the MTU of interfaces is not
   known, since this information will only be available once the
   interfaces have been learned from zebra.

   It makes no sense to include the MTU 0 that is stored for interfaces
   in this state in the consideration whether a new lsp-mtu for an
   area is valid, so skip interfaces which are in this state.

   Signed-off-by: Christian Franke <[email protected]>

commit 84a4da039fa620942b6c3a9ff21b7502803f53be
Author: Christian Franke <[email protected]>
Date:   Sun Apr 3 12:46:27 2016 -0300

   isisd: make sure that all interface addresses are advertised

   If the following configuration commands are run interactively in
   succession, the ipv6 addresses of this interface won't be advertised
   in the router's LSP immediately:

      # interface eth0
      # ip router isis test
      # ipv6 router isis test

   This is because the ipv6 router command won't trigger a state change
   for the interface and therefore, it won't trigger a regeneration of
   the LSPs.

   The same thing happens if IPv4 is enabled after IPv6, or for the cases
   where IPv4 is disabled and IPv6 stays enabled or vice-versa.

   Fix this by explicitly calling lsp_regenerate_schedule for the cases
   where it won't be called implicitly.

   Signed-off-by: Christian Franke <[email protected]>

commit 8ed8d0b5d1596ec9a6cce5ca45eb1cb1dff94978
Author: Christian Franke <[email protected]>
Date:   Sun Apr 3 12:46:26 2016 -0300

   isisd: fix a crash due to an lsp-mtu issue

   isisd crashed on startup if it was enabled for an interface with
   a too small MTU.

   To fix this, we treat this case as an invalid configuration and
   disable isis on that interface if that case happens, since it is
   a configuration error.

   Signed-off-by: Christian Franke <[email protected]>

commit 106e38e4d42ecd94c083907872d514e8c67036f6
Author: Christian Franke <[email protected]>
Date:   Sun Apr 3 12:46:25 2016 -0300

   isisd: work around route table asserts for deleting node with info

   The route table code in lib/table.c triggers an assertion when a route
   node with rn->info != NULL reaches refcount 0, probably to avoid
   memleaks. In this particular case, this is not an issue, since the
   info will be freed by the destructor.

   However, since removing this assertion probably requires more
   discussion, just make sure that rn->info gets freed and unset before
   its refcount is decremented to zero.

   Signed-off-by: Christian Franke <[email protected]>