)]}'
{
  "log": [
    {
      "commit": "6dbb58c04078c31ca3f43e9754b498aa3be6518b",
      "tree": "aa3e45faeb5fd7979a4026550382f0feb95def26",
      "parents": [
        "c876b0b27e398c7d733966ce8636c26dd7a8e6eb"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Wed Feb 08 15:05:06 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Feb 23 12:31:00 2017 +0000"
      },
      "message": "zebra: Make the --nl-bufsize arg set the input parse buffer too\n\n* See bug #887. Existing statically sized NL_PKT_BUF_SIZE input parse buffer\n  in netlink_parse_info may not be enough. As an initial hacky fix, at least\n  give admins a runtime way to change this buffer, with the existing\n  --nl-bufsize argument to zebra.\n* rt_netlink.c: (nl_rcvbuf) static input buffer and length.\n  (netlink_parse_info) replace the local fixed size buffer with nl_rcvbuf.\n  Improve warning on MSG_TRUNC to advise admin on what to do.\n  (kernel_init) Dynamically allocate nl_rcvbuf input parse buffer to\n  at least 2 pages, or nl_rcvbufsize argument, whichever is greater.\n\nBased on the debugging and investigation of:\n\n  Konstantin \u003ctempest921@gmail.com\u003e\n"
    },
    {
      "commit": "2c0adbf9bc0c2425f567848ba7f790059d18b253",
      "tree": "45a7267272bb312c13d24db395e7cd94c95094bb",
      "parents": [
        "f2f44eaa321be5a52e5ad67069bd8061603589a1"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Nov 18 15:42:41 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:57 2017 +0000"
      },
      "message": "vtysh, zebra: Fix link-params to use exit-link-params\n\nFix the link-params submode to use the \u0027exit-link-params\u0027\nto indicate we are exiting a submode.\n\nFixup all the relevant bits.\n"
    },
    {
      "commit": "f2f44eaa321be5a52e5ad67069bd8061603589a1",
      "tree": "c4d73f47fb23cf972b0cd1bd18efd37aca06978d",
      "parents": [
        "a53d4e55a51518ae5735a65405dcee88c59cd5d8"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Nov 12 17:43:15 2016 +0900"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:57 2017 +0000"
      },
      "message": "zebra: fix link-params CLI handling\n\nvtysh was breaking in a rather ugly way, and some \"no\" forms were\nmissing too.\n"
    },
    {
      "commit": "ddc160cce1767ef006a812f5213cabfb24e3cd4d",
      "tree": "6e4aa078fb897d77edcb7ef16282471c518440b4",
      "parents": [
        "5958b8f790f0049f980b74b3e2916979850e5d09"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Sat Oct 01 20:42:34 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:56 2017 +0000"
      },
      "message": "*: Port Christians tweaks for 32-bit route tags\n\nPort over Christian\u0027s tweaks from his port of my commit widening the\nroute-tag field width to 32-bit.  Commit dc9ffce8786844\n \"*: Consistently support 32-bit route tags\".\n\nwith \"changes which make this actually useful for all the daemons\".\n\nThis is missing the zebra route-map changes.\n"
    },
    {
      "commit": "dafa05e65fe4b3b3ed5525443f554215ba14f42c",
      "tree": "77d152b32b3fc3766f1813927b0eb40efa36425e",
      "parents": [
        "56ae5c4847f53f10e2151039556ec76a7a94c7fb"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Thu Jan 19 17:27:01 2017 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:55 2017 +0000"
      },
      "message": "nhrpd: implement next hop resolution protocol\n\nThis provides DMVPN support and integrates to strongSwan. Please read\nREADME.nhrpd and README.kernel for more details.\n"
    },
    {
      "commit": "56ae5c4847f53f10e2151039556ec76a7a94c7fb",
      "tree": "087d428b4d3c64b8b2a4b068aa31c50551f508f3",
      "parents": [
        "54f1476c2ab201808fae1ec9f2ee1a5460f7882b"
      ],
      "author": {
        "name": "Jafar Al-Gharaibeh",
        "email": "jafar@atcorp.com",
        "time": "Fri Jun 17 16:01:12 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:55 2017 +0000"
      },
      "message": "zserv: get rid of code duplication in nexthop_lookup[_mrib] functions\n\nz[send/read]_ipv4_nexthop_lookup functions have been duplicated for multicast mrib lookup. The mrib versions are identical to the unicast versions except for a couple of places. The differences do not justify duplicating two functions and 80 lines of codes. Code refactoring and an if statement with a few lines of code are enough to handle the differences with a lot less and cleaner code.\n\nSigned-off-by: Jafar Al-Gharaibeh \u003cjafar@atcorp.com\u003e\nSigned-off-by: Jafar Al-Gharaibeh \u003cjafar@atcorp.com\u003e\nTested-by: NetDEF CI System \u003ccisystem@netdef.org\u003e\n"
    },
    {
      "commit": "54f1476c2ab201808fae1ec9f2ee1a5460f7882b",
      "tree": "038a2fe8af729e9cbf18af0cbbd3cc284581cfbc",
      "parents": [
        "be987c2804730f39828e2e047fb09f05ebd9915a"
      ],
      "author": {
        "name": "Quentin Young",
        "email": "qlyoung@cumulusnetworks.com",
        "time": "Mon Jun 20 13:58:05 2016 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:55 2017 +0000"
      },
      "message": "zebra: Change bitwise operations to purpose-built macros\n\nSome bitfields for zebra_debug_* flags were being modified\nwith bitwise operators instead of the purpose-built macros\nin lib/zebra.h. Changed such instances to use the macros.\n\nSigned-off-by: Quentin Young \u003cqlyoung@cumulusnetworks.com\u003e\nSigned-off-by: Quentin Young \u003cqlyoung@cumulusnetworks.com\u003e\nAcked-by: Jafar Al-Gharaibeh \u003cjafar@atcorp.com\u003e\nTested-by: NetDEF CI System \u003ccisystem@netdef.org\u003e\n"
    },
    {
      "commit": "51b45a52adf944ac391c0e90f86597454ab4d657",
      "tree": "3cc9fc8966b99333da565eb9cd6606ed11730da3",
      "parents": [
        "8db38639cc4cf796484b352c57f2709151f0e2e4"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "nobody@nowhere.ws",
        "time": "Mon Jun 06 22:04:30 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:53 2017 +0000"
      },
      "message": "zebra: make fpm netlink_route_info_fill more robust\n\nHaving an RTM_ADDROUTE with a rib \u003d\u003d NULL would lead\nto a crash due to a NULL pointer dereference.\n\nSince an RTM_ADDROUTE without a rib object doesn\u0027t make\nmuch sense, print a warning and remove the concerned\nroute instead.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nTested-by: NetDEF CI System \u003ccisystem@netdef.org\u003e\n"
    },
    {
      "commit": "68cfaabc2e281b6ef9810138db3b42e52f1f0060",
      "tree": "16766ab85cf16643e4dba71ede5dd85e7654c312",
      "parents": [
        "456cb633436c567a173dadb9b6fb4610266c2ef9"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "nobody@nowhere.ws",
        "time": "Mon Jun 06 21:10:24 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:52 2017 +0000"
      },
      "message": "zebra: fix a crash in static_add_ipv6 caused by a NULL dereference\n\nsi will be NULL after end of the preceeding for loop. update is the\nright static route info to use for deleting the old route.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nTested-by: NetDEF CI System \u003ccisystem@netdef.org\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "b41bb62e039454f53e54959b2c3f7eea816e6422",
      "tree": "91d50d30c96a60359a20c89dbbcd1171c2f4c200",
      "parents": [
        "631fcd2e51b02b3d5548bee4108044921fb3e58b"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Oct 19 16:02:32 2016 +0300"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:51 2017 +0000"
      },
      "message": "zebra: fix nht validity checking to be same as when it\u0027s resolved\n\nThis reverts commit 7e3a435bd99 \"A valid BGP nexthop is flagged as invalid\"\n\nProblem is BGP thinks the nexthop is accessible when it\u0027s recursive, and\nselects it, but zebra rejects it at route install time. Causing FIB and\nBGP state to be out-of-sync. Fix nht to follow same rules as zebra rib.\n"
    },
    {
      "commit": "631fcd2e51b02b3d5548bee4108044921fb3e58b",
      "tree": "0723168ac470f529f2fbed9259196d62a5474c55",
      "parents": [
        "3b0e3008e41c967e459f87b6ca8658ef26f49bc9"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Oct 19 16:02:31 2016 +0300"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:50 2017 +0000"
      },
      "message": "zebra: use FIB state for nexthop tracking\n\nThe FIB override routes can override ZEBRA_FLAG_SELECTED routes\nin FIB. Use the FIB state instead to report correct nexthop when\nFIB override routes are present.\n"
    },
    {
      "commit": "a64c66b105929b0f0fc19743f34dc29c760df967",
      "tree": "a8aa6907f32b27db0348501262513d6109c1a03a",
      "parents": [
        "99e00a19bb8afcf081d1551b886c6d85188e6c60"
      ],
      "author": {
        "name": "Renato Westphal",
        "email": "renato@opensourcerouting.org",
        "time": "Fri Jan 06 16:30:03 2017 +0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 17:20:50 2017 +0000"
      },
      "message": "zebra: fix build on OpenBSD \u003e\u003d 5.9\n\nRTF_XRESOLVE was removed from the OpenBSD tree recently.\n"
    },
    {
      "commit": "cfb1fae25f8c092e0d17073eaf7bd428ce1cd546",
      "tree": "60162a121a7898dc20e9a18ec12d3dc88edf1e61",
      "parents": [
        "ef9bc88981570ef8ea744f0ab96730d192328a49"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Aug 31 13:31:16 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Mon Oct 17 17:41:36 2016 +0100"
      },
      "message": "zebra: stack overrun in IPv6 RA receive code (CVE-2016-1245)\n\nThe IPv6 RA code also receives ICMPv6 RS and RA messages.\nUnfortunately, by bad coding practice, the buffer size specified on\nreceiving such messages mixed up 2 constants that in fact have\ndifferent values.\n\nThe code itself has:\n #define RTADV_MSG_SIZE 4096\nWhile BUFSIZ is system-dependent, in my case (x86_64 glibc):\n /usr/include/_G_config.h:#define _G_BUFSIZ 8192\n /usr/include/libio.h:#define _IO_BUFSIZ _G_BUFSIZ\n /usr/include/stdio.h:# define BUFSIZ _IO_BUFSIZ\n\nFreeBSD, OpenBSD, NetBSD and Illumos are not affected, since all of them\nhave BUFSIZ \u003d\u003d 1024.\n\nAs the latter is passed to the kernel on recvmsg(), it\u0027s possible to\noverwrite 4kB of stack -- with ICMPv6 packets that can be globally sent\nto any of the system\u0027s addresses (using fragmentation to get to 8k).\n\n(The socket has filters installed limiting this to RS and RA packets,\nbut does not have a filter for source address or TTL.)\n\nIssue discovered by trying to test other stuff, which randomly caused\nthe stack to be smaller than 8kB in that code location, which then\ncauses the kernel to report EFAULT (Bad address).\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nReviewed-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "d9ab53ab40dcba66f34ca75695dc930e6093f789",
      "tree": "552f537b8f5decf1b74d8fc98b96ef3e65a01051",
      "parents": [
        "5bcd754ff8d7947978acb44e77dcab323973fb1e"
      ],
      "author": {
        "name": "Dinesh Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue May 19 17:47:21 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:07:52 2016 +0100"
      },
      "message": "bgpd, zebra: Use next hop tracking for connected routes too\n\nAllow next hop tracking to work with connected routes\nAnd cleanup obsolete code in bgp_scan and bgp_import.\n\nSigned-off-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\nEdits: Paul Jakma \u003cpaul.jakma@hpe.com\u003e Rebase re-ordering conflicts with\n       NHT route-map, potential errors.\n"
    },
    {
      "commit": "4f84737dee1e84b7219f66e983812abd8a6ca1d3",
      "tree": "19a9ba0340602be5754a862686dc0a3738048bac",
      "parents": [
        "afc9cf97363c0b7ec6c253731a75ac83e70ea190"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 22 15:24:25 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:07:52 2016 +0100"
      },
      "message": "zebra: Fix some warnings found during compile.\n\nThis commit fixes some warnings found in Martin\u0027s Testbed\nthat compiles sun solaris and freebsd images.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "fc2cee2bed4ebf664ba0afa1678027365f3923f7",
      "tree": "11a65e7d126c07460cc72a605831128bfdf38ffe",
      "parents": [
        "c69698704806a9ac5035521b1820057097919227"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Tue May 19 18:03:44 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:07:51 2016 +0100"
      },
      "message": "zebra: Fix incorrectly flagged nexthop\n\nA valid BGP nexthop is sometimes flagged as invalid, this patch\nfixes that issue.\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nEdited-by: Paul Jakma \u003cpaul.jakma@hpe.com\u003e, also add the check for\nNEXTHOP_FLAG_ACTIVE which was added in a separate, route-map related commit\n(6baeed5 lib, zebra: Add route-map support for Next Hop Tracking)\n"
    },
    {
      "commit": "4c7efde6db75229069be72b34a93f279fe57d23b",
      "tree": "fb3850cefcb7024fef5f16cc9e056e137d814b04",
      "parents": [
        "988a50c54dbd20290c085a36d4c2893f3d515803"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Mon Nov 16 18:19:18 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:07:51 2016 +0100"
      },
      "message": "zebra: Add check to notice when an interface is unnumbered\n\nIf an interface is not a loopback and it\u0027s prefixlen \u003d\u003d 32\nassume that it is unnumbered.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "9ae8552c7341071ffac34aec9902fa3dd7dc8fdf",
      "tree": "37f7b06f2915025b64560e130764007d7914f73f",
      "parents": [
        "c7f25b90902d4be39132b1174440746b571220ce"
      ],
      "author": {
        "name": "Dinesh Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue May 19 17:47:22 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:07:50 2016 +0100"
      },
      "message": "zebra: Gather and display detailed info about clients of Zebra\n\nThe display of zebra client info is rather paltry: just the name and the FD.\nFor troubleshooting and general helpfulness, its useful to gather more info\nabout each client and display that. This patch does just that.\n\nSigned-off-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "c7f25b90902d4be39132b1174440746b571220ce",
      "tree": "b66ca69885ba36884b09473700f08cc3909cfea3",
      "parents": [
        "f2eb9caac6425473af8d6d15534439fe715f7426"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Tue May 19 17:47:22 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:07:50 2016 +0100"
      },
      "message": "bgpd, ospfd, ospf6d, ripd, ripngd, zebra: \u0027set metric -12\u0027 is broken in the parser\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "96d1060a704d88e04fcd446cce078a6131c3f6db",
      "tree": "89a6f1285550a2d2f149479cc272450e63294ebc",
      "parents": [
        "3b4fb574b414e7b7776b581688f189f2fc736a38"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Jul 01 14:23:45 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:07:50 2016 +0100"
      },
      "message": "*: Widen width of Zserv routing tag field.\n\n* lib/zebra.h: Introduce a route_tag_t type for route tags generally,\n  and make it 4 bytes wide - so it can directly hold things like an ASN, or\n  the OSPF ASE-LSA tag.\n* zebra/rib.h: Use route_tag_t instead of u_short.\n* *: Update \u0027u_short (*)?(tag|tmp)\u0027 to use route_tag_t instead of u_short.\n  Update stream_{get,put} to l instead of w.\n* ospf_zebra.c: (ospf_zebra_add) test OSPF tag within range of ROUTE_TAG_MAX.\n"
    },
    {
      "commit": "fb214471c88616d67ece3734128ef04ed4a8ed86",
      "tree": "04894d9d96861039b8b0cb1677d58c23e206acb3",
      "parents": [
        "605aa331d814b0977dd8435168dca5b2b7928996"
      ],
      "author": {
        "name": "Piotr Chytła",
        "email": "pch@packetconsulting.pl",
        "time": "Tue Dec 01 13:47:06 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:07:49 2016 +0100"
      },
      "message": "zebra: add support for route tags\n\n[Forward ported by Cumulus]\n\nDocumentation\n-------------\nAll ipv4 and ipv6 static route commands now have a \"tag\" option\nwhich allows the user to set a tag between 1 and 65535.\n\nquagga(config)# ip route 1.1.1.1/32 10.1.1.1 tag ?\n  \u003c1-65535\u003e  Tag value\nquagga(config)# ip route 1.1.1.1/32 10.1.1.1 tag 40\nquagga(config)#\n\nquagga# show ip route 1.1.1.1/32\nRouting entry for 1.1.1.1/32\n Known via \"static\", distance 1, metric 0, tag 40, best\n * 10.1.1.1, via swp1\n\nquagga#\n\nThe route-map parser supports matching on tags and setting tags\n!\nroute-map MATCH_TAG_18 permit 10\n match tag 18\n!\n\n!\nroute-map SET_TAG_22 permit 10\n set tag 22\n!\n\nBGP and OSPF support:\n- matching on tags when redistribing routes from the RIB into BGP/OSPF.\n- setting tags when redistribing routes from the RIB into BGP/OSPF.\n\nBGP also supports setting a tag via a table-map, when installing BGP\nroutes into the RIB.\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nSigned-off-by: Piotr Chytla \u003cpch@packetconsulting.pl\u003e\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "eefddcc78abcc91d1d88633a3c6d5a438fe58790",
      "tree": "1f5faa31c5070770c55e3f2c52911121fa095efe",
      "parents": [
        "de24f82d0ea7eadd0db7d5c0d340a0579312237c"
      ],
      "author": {
        "name": "Piotr Chytła",
        "email": "pch@packetconsulting.pl",
        "time": "Tue Dec 01 09:48:02 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:07:49 2016 +0100"
      },
      "message": "bgpd, lib, ospfd, zebra: Add ability to read/write tag value\n\nModify zebra to pass the tag value to and from the\nvarious protocols.\n\n[forward ported by Cumulus]\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nSigned-off-by: Piotr Chytla \u003cpch@packetconsulting.pl\u003e\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\nEdits: Paul Jakma \u003cpaul.jakma@hpe.com\u003e rebase conflicts in bgp_zebra.c\n"
    },
    {
      "commit": "de24f82d0ea7eadd0db7d5c0d340a0579312237c",
      "tree": "8538c0c863445588c7402672e1cb30596933f66a",
      "parents": [
        "147a812ed15e171d1db882ac96f0f15723bf8b8f"
      ],
      "author": {
        "name": "Piotr Chytła",
        "email": "pch@packetconsulting.pl",
        "time": "Thu Jun 28 00:09:28 2007 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:07:49 2016 +0100"
      },
      "message": "zebra: Add internal support for route tags\n\nAdd internal support for a route tag to be applied to routes.\nAt this point in time, tags are not being used.\n\n[forward ported by Cumulus]\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nSigned-off-by: Piotr Chytła \u003cpch@packetconsulting.pl\u003e\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\nEdited-by: Paul Jakma \u003cpaul.jakma@hpe.com\u003e - rebase conflicts\n"
    },
    {
      "commit": "768d9098a526841d22a8f0b740a919bd6eccee47",
      "tree": "adcc88e6c578b62f04933d8741a02245150ebbdb",
      "parents": [
        "d8c5f27777051b3ea32f8b5979ecd9bb7b9475b9"
      ],
      "author": {
        "name": "Dinesh Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue May 19 18:04:13 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:07:48 2016 +0100"
      },
      "message": "zebra: Suppress displaying default config as part of running config\n\nQuagga doesn\u0027t display default config as part of the running config, only\nwhat is different from the default. However, in the case of rtadv, every\nlink displays the default \"ipv6 nd suppress-ra\" as part of running config.\nThis patch fixes that.\n\nSigned-off-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "92992c69afd0095b183a3b905598d194115b27a7",
      "tree": "ebe6c8bb20afd1b7ee9de87e5de281bc05a98022",
      "parents": [
        "083e5e2d7bc8098b92572792ab807da381db95ea"
      ],
      "author": {
        "name": "James Li",
        "email": "jli@cumulusnetworks.com",
        "time": "Mon Nov 09 20:21:57 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:45 2016 +0100"
      },
      "message": "zebra: Dissallow outside programs to delete Quagga routes\n\nDo not allow a program outside Quagga to delete a Quagga route from the kernel.\nTo delete a Quagga route, do it inside Quagga.\n\nSigned-off-by: James Li \u003cjli@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "0f2f7a3fa5d55e682d0739d586da021cbd43bc3c",
      "tree": "a8bdff569d71a784e2ba4ab154ce6ab70103638a",
      "parents": [
        "94627e670d661f95217521ef0bfba141e5e37e68"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Thu Jun 16 15:40:02 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:44 2016 +0100"
      },
      "message": "*: Fix duplicate commands from view/enable node consolidation\n"
    },
    {
      "commit": "60cc95921ae663de325ca3e76e8c05d8224986ab",
      "tree": "7d78102aa9650da4bba1355b2a6601135d687b37",
      "parents": [
        "4feb0d02c029e2e4f229f6283f579b8673b0ac11"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Mon Nov 09 20:21:41 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:44 2016 +0100"
      },
      "message": "bgpd, doc, lib, zebra: nexthop-tracking in zebra\n\n0. Introduction\n\nThis is the design specification for next hop tracking feature in\nQuagga.\n\n1. Background\n\nRecursive routes are of the form:\n\n   p/m --\u003e n\n  [Ex: 1.1.0.0/16 --\u003e 2.2.2.2]\n\nwhere \u0027n\u0027 itself is resolved through another route as follows:\n\n   p2/m --\u003e h, interface\n  [Ex: 2.2.2.0/24 --\u003e 3.3.3.3, eth0]\n\nUsually, BGP routes are recursive in nature and BGP nexthops get\nresolved through an IGP route. IGP usually adds its routes pointing to\nan interface (these are called non-recursive routes).\n\nWhen BGP receives a recursive route from a peer, it needs to validate\nthe nexthop. The path is marked valid or invalid based on the\nreachability status of the nexthop.  Nexthop validation is also\nimportant for BGP decision process as the metric to reach the nexthop\nis a parameter to best path selection process.\n\nAs it goes with routing, this is a dynamic process. Route to the\nnexthop can change. The nexthop can become unreachable or\nreachable. In the current BGP implementation, the nexthop validation\nis done periodically in the scanner run. The default scanner run\ninterval is one minute. Every minute, the scanner task walks the\nentire BGP table. It checks the validity of each nexthop with Zebra\n(the routing table manager) through a request and response message\nexchange between BGP and Zebra process. BGP process is blocked for\nthat duration. The mechanism has two major drawbacks:\n\n(1) The scanner task runs to completion. That can potentially starve\n    the other tasks for long periods of time, based on the BGP table\n    size and number of nexthops.\n\n(2) Convergence around routing changes that affect the nexthops can be\n    long (around a minute with the default intervals). The interval\n    can be shortened to achieve faster reaction time, but it makes the\n    first problem worse, with the scanner task consuming most of the\n    CPU resources.\n\n\"Next hop tracking\" feature makes this process event-driven. It\neliminates periodic nexthop validation and introduces an asynchronous\ncommunication path between BGP and Zebra for route change notifications\nthat can then be acted upon.\n\n2. Goal\n\nStating the obvious, the main goal is to remove the two limitations we\ndiscussed in the previous section. The goals, in a constructive tone,\nare the following:\n\n- fairness: the scanner run should not consume an unjustly high amount\n  of CPU time. This should give an overall good performance and\n  response time to other events (route changes, session events,\n  IO/user interface).\n\n- convergence: BGP must react to nexthop changes instantly and provide\n  sub-second convergence. This may involve diverting the routes from\n  one nexthop to another.\n\n3. Overview of the changes\n\nThe changes are in both BGP and Zebra modules.  The short summary is\nthe following:\n\n- Zebra implements a registration mechanism by which clients can\n   register for next hop notification. Consequently, it maintains a\n   separate table, per (VRF, AF) pair, of next hops and interested\n   client-list per next hop.\n\n- When the main routing table changes in Zebra, it evaluates the next\n   hop table: for each next hop, it checks if the route table\n   modifications have changed its state. If so, it notifies the\n   interested clients.\n\n- BGP is one such client. It registers the next hops corresponding to\n   all of its received routes/paths. It also threads the paths against\n   each nexthop structure.\n\n- When BGP receives a next hop notification from Zebra, it walks the\n   corresponding path list. It makes them valid or invalid depending\n   on the next hop notification. It then re-computes best path for the\n   corresponding destination. This may result in re-announcing those\n   destinations to peers.\n\n4. Design\n\n4.1. Modules\n\nThe core design introduces an \"nht\" (next hop tracking) module in BGP\nand \"rnh\" (recursive nexthop) module in Zebra. The \"nht\" module\nprovides the following APIs:\n\nbgp_find_or_add_nexthop() : find or add a nexthop in BGP nexthop table\nbgp_find_nexthop() : find a nexthop in BGP nexthop table\nbgp_parse_nexthop_update() : parse a nexthop update message coming\n                              from zebra\n\nThe \"rnh\" module provides the following APIs:\n\nzebra_add_rnh() : add a recursive nexthop\nzebra_delete_rnh() : delete a recursive nexthop\nzebra_lookup_rnh() : lookup a recursive nexthop\n\nzebra_add_rnh_client() : register a client for nexthop notifications\n                         against a recursive nexthop\n\nzebra_remove_rnh_client(): remove the client registration for a\n                            recursive nexthop\n\nzebra_evaluate_rnh_table(): (re)evaluate the recursive nexthop table\n                            (most probably because the main routing\n                            table has changed).\n\nzebra_cleanup_rnh_client(): Cleanup a client from the \"rnh\" module\n                            data structures (most probably because the\n                            client is going away).\n\n4.2. Control flow\n\nThe next hop registration control flow is the following:\n\n\u003c\u003d\u003d\u003d\u003d      BGP Process       \u003d\u003d\u003d\u003d\u003e|\u003c\u003d\u003d\u003d\u003d      Zebra Process      \u003d\u003d\u003d\u003d\u003e\n                                  |\nreceive module     nht module     |  zserv module        rnh module\n----------------------------------------------------------------------\n              |                   |                  |\nbgp_update_   |                   |                  |\n      main()  | bgp_find_or_add_  |                  |\n              |        nexthop()  |                  |\n              |                   |                  |\n              |                   | zserv_nexthop_   |\n              |                   |       register() |\n              |                   |                  | zebra_add_rnh()\n              |                   |                  |\n\nThe next hop notification control flow is the following:\n\n\u003c\u003d\u003d\u003d\u003d     Zebra Process    \u003d\u003d\u003d\u003d\u003e|\u003c\u003d\u003d\u003d\u003d      BGP Process       \u003d\u003d\u003d\u003d\u003e\n                                |\nrib module         rnh module   |     zebra module        nht module\n----------------------------------------------------------------------\n              |                 |                   |\nmeta_queue_   |                 |                   |\n    process() | zebra_evaluate_ |                   |\n              |     rnh_table() |                   |\n              |                 |                   |\n              |                 | bgp_read_nexthop_ |\n              |                 |          update() |\n              |                 |                   | bgp_parse_\n              |                 |                   | nexthop_update()\n              |                 |                   |\n\n4.3. zclient message format\n\nZEBRA_NEXTHOP_REGISTER and ZEBRA_NEXTHOP_UNREGISTER messages are\nencoded in the following way:\n\n/*\n *     0                   1                   2                   3\n *  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\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * |     AF                        |  prefix len   |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * .      Nexthop prefix                                           .\n * .                                                               .\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * .                                                               .\n * .                                                               .\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * |     AF                        |  prefix len   |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * .      Nexthop prefix                                           .\n * .                                                               .\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n */\n\nZEBRA_NEXTHOP_UPDATE message is encoded as follows:\n\n/*\n *     0                   1                   2                   3\n *  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\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * |     AF                        |  prefix len   |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * .      Nexthop prefix getting resolved                          .\n * .                                                               .\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * |        metric                                                 |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * |  #nexthops    |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * | nexthop type  |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * .      resolving Nexthop details                                .\n * .                                                               .\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * .                                                               .\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * | nexthop type  |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * .      resolving Nexthop details                                .\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n */\n\n4.4. BGP data structure\n\nLegend:\n\n/\\   struct bgp_node: a BGP destination/route/prefix\n\\/\n\n[ ]  struct bgp_info: a BGP path (e.g. route received from a peer)\n\n _\n(_)  struct bgp_nexthop_cache: a BGP nexthop\n\n   /\\         NULL\n   \\/--+        ^\n       |        :\n       +--[ ]--[ ]--[ ]--\u003e NULL\n   /\\           :\n   \\/--+        :\n       |        :\n       +--[ ]--[ ]--\u003e NULL\n                :\n  _             :\n (_).............\n\n4.5. Zebra data structure\n\nrnh table:\n\n           O\n          / \\\n         O   O\n            / \\\n           O   O\n\n        struct rnh\n        {\n          u_char flags;\n          struct rib *state;\n          struct list *client_list;\n          struct route_node *node;\n        };\n\n5. User interface changes\n\nquagga# show ip nht\n3.3.3.3\n resolved via kernel\n via 11.0.0.6, swp1\n Client list: bgp(fd 12)\n11.0.0.10\n resolved via connected\n is directly connected, swp2\n Client list: bgp(fd 12)\n11.0.0.18\n resolved via connected\n is directly connected, swp4\n Client list: bgp(fd 12)\n11.11.11.11\n resolved via kernel\n via 10.0.1.2, eth0\n Client list: bgp(fd 12)\n\nquagga# show ip bgp nexthop\nCurrent BGP nexthop cache:\n 3.3.3.3 valid [IGP metric 0], #paths 3\n  Last update: Wed Oct 16 04:43:49 2013\n\n 11.0.0.10 valid [IGP metric 1], #paths 1\n  Last update: Wed Oct 16 04:43:51 2013\n\n 11.0.0.18 valid [IGP metric 1], #paths 2\n  Last update: Wed Oct 16 04:43:47 2013\n\n 11.11.11.11 valid [IGP metric 0], #paths 1\n  Last update: Wed Oct 16 04:43:47 2013\n\nquagga# show ipv6 nht\nquagga# show ip bgp nexthop detail\n\nquagga# debug bgp nht\nquagga# debug zebra nht\n\n6. Sample test cases\n\n     r2----r3\n    /  \\  /\n  r1----r4\n\n- Verify that a change in IGP cost triggers NHT\n  + shutdown the r1-r4 and r2-r4 links\n  + no shut the r1-r4 and r2-r4 links and wait for OSPF to come back\n    up\n  + We should be back to the original nexthop via r4 now\n- Verify that a NH becoming unreachable triggers NHT\n  + Shutdown all links to r4\n- Verify that a NH becoming reachable triggers NHT\n  + no shut all links to r4\n\n7. Future work\n\n- route-policy for next hop validation (e.g. ignore default route)\n- damping for rapid next hop changes\n- prioritized handling of nexthop changes ((un)reachability vs. metric\n  changes)\n- handling recursion loop, e.g.\n   11.11.11.11/32 -\u003e 12.12.12.12\n   12.12.12.12/32 -\u003e 11.11.11.11\n   11.0.0.0/8 -\u003e \u003cinterface\u003e\n- better statistics\nAddresses upstream comments.\n\n\"show ip bgp nexthop detail\" couldn\u0027t display multiple NHs due to a bug.\nFix that.\n\nFix reference counts for the nexthop cache entries\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nSigned-off-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\nSigned-off-by: Vivek Venkatraman \u003cvivek@cumulusnetworks.com\u003e\n\nFix reference counts for the nexthop cache entries.\n\nSigned-off-by: Vivek Venkatraman \u003cvivek@cumulusnetworks.com\u003e\n\nEdited-by: Paul Jakma \u003cpaul.jakma@hpe.com\u003e\n- Fix nexthop_ipv6_add defs in rib.h not having been modified with rib_ prefix.\n- Remove rib_lookup_and_pushup, appears not to be used except for\n  !HAVE_NETLINK \u0026\u0026 HAVE_STRUCT_IFALIASREQ case of ioctl.c::if_set_prefix,\n  so it\u0027s not being used at all on platform with most testing of RIB.\n"
    },
    {
      "commit": "34c5d89fed6e8e91ae3cde478f1f4816d69bf09e",
      "tree": "2bb502e14677feb9db54f4986bf0934a0b7a66db",
      "parents": [
        "6f235418ad911040c5a6252d11b05cef5984fd8e"
      ],
      "author": {
        "name": "Ayan Banerjee",
        "email": "ayan@cumulusnetworks.com",
        "time": "Mon Nov 09 20:14:53 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:43 2016 +0100"
      },
      "message": "zebra: ipv6 multipath support\n\nThis patch enables support for multipath for IPV6. The nexthop information\nfrom the protocols have ifindices and nexthop addresses in two different\nstructures. This patch combines them to ensure that the correct APIs can\nbe called. Also, given that IPV6 Linux implementation does not support the\nrta_XXX APIs for multipath, the communication with the kernel is in terms\nof a single nh/ifindex pair.\n\nSigned-off-by: Ayan Banerjee \u003cayan@cumulusnetworks.com\u003e\nSigned-off-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "6f235418ad911040c5a6252d11b05cef5984fd8e",
      "tree": "7471ac66ae42c0f1c5d10cc592dac768e375ae77",
      "parents": [
        "c7c5b02480a506c6d687bf0d3a0c2a7d3e7cfbf6"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Apr 05 13:21:20 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:43 2016 +0100"
      },
      "message": "zebra: *addattr should use size_t len args, quell signed v unsigned warning\n"
    },
    {
      "commit": "8f4269ddff1becca94687252b9571b096cb45b43",
      "tree": "1fa611b63988898d448c14efa617ae8b63c6a20a",
      "parents": [
        "a6d400c9158b10207cde40a428ebf2c27f105c0a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Fri Sep 18 11:50:33 2015 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:43 2016 +0100"
      },
      "message": "zebra: Add command to configure default for link-state, and make it sticky\n\n* Provide a way for the user to specify their own preference for the default\n  behaviour of link-detect, independent of the compiled in default.\n\n  Add a global \"default link-detect (on|off)\" command to zebra, to set\n  the default policy for link-detect accordingly.  The command is \"sticky\" -\n  when set it will stay set and always be written out, regardless of how it\n  compares to the baked-in, compile-time default.\n\n  The per-interface \"link-detect\" command is similarly made sticky.\n\n* zebra/interface.h: (zebra_if_linkdetect;) enum for link-detect configured\n  state.\n  (struct zebra_if_defaults) Global link-detect default\n  (struct zebra_if) Add field for per-iface link-detect default.\n* lib/if.c: (if_create_vrf) Remove the default flag setting on if-create\n  here, it\u0027s a zebra flag so do it in zebra\u0027s if_zebra_new_hook\n* zebra/interface.c: Add static storage for global defaults.\n  (if_zebra_new_hook) Set the link-detect flag on new ifaces according to the\n  baked in default or else the configured global default.\n  (config_write_zebra_if_defaults,default_linkdetect_cmd) global link-detect\n  command and config write out machinery.\n  (linkdetect_cmd) Set the configuration state rather than the flag.\n  The new hook will then set the interface flag when the if comes up.\n  (if_config_write) Write config according to configured state, not the\n  low-level flag.\n  (zebra_if_init) add new commands.\n"
    },
    {
      "commit": "3bccb4f3df0530bb4d8961b0867ea04c1bca065f",
      "tree": "828d3df7e320019acee4e7df40bc26cdd1f0f6a9",
      "parents": [
        "7e4025cb65f79d584911042d3e19eee787b9115b"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@sproute.com",
        "time": "Fri Mar 11 12:21:26 2016 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:42 2016 +0100"
      },
      "message": "zebra: add developer test functions for FPM code\n\nAdd test functions for the zebra code that interfaces with the\nForwarding Plane Manager. These functions can be invoked in a\ndevelopment build via the recently-added \u0027invoke\u0027 command.\n\nFor example:\n\n  # invoke zebra function zfpm_dt_benchmark_protobuf_encode 100000\n\nChanges:\n\n  * zebra/zebra_fpm_dt.c\n\n    Add the following functions. Each function encodes or decodes a\n    route in a particular FPM format a specified number of times.\n\n    - zfpm_dt_benchmark_netlink_encode()\n    - zfpm_dt_benchmark_protobuf_encode()\n    - zfpm_dt_benchmark_protobuf_decode()\n\n  * zebra/Makefile.am\n\n    Compile zebra_fpm_dt when building a development build.\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@sproute.com\u003e\n"
    },
    {
      "commit": "5779fda137803a4b1e534f6ba70781681baf3fda",
      "tree": "8529f38977a19590ac5ecbb273c6629aec0b83da",
      "parents": [
        "b8ae330cd3c65808044d344b24f0917b312c4fb9"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@sproute.com",
        "time": "Mon Apr 04 10:54:58 2016 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:42 2016 +0100"
      },
      "message": "zebra: optionally use protobuf with FPM\n\nChange zebra so that it can optionally use protobuf serialization when\ncommunicating with a Forwarding Plane Manager component.\n\n  * zebra/main.c\n\n    Add the --fpm-format/-F command line option. This allows the user\n    to control the format (protbuf|netlink) that is used to\n    communicate with the FPM.\n\n  * zebra/zebra_fpm.c\n\n    - zebra_init_msg_format(),\n\n      This new function is invoked on process startup to determine the\n      FPM format that should be used.\n\n    - zfpm_init()\n\n      Change to accept any \u0027FPM message format\u0027 specified by the user\n      (via the new command line flag).\n\n    - zebra_encode_route()\n\n      Tweak to use the selected FPM format.\n\n  * zebra_fpm_protobuf.c\n\n    New code to build protobuf messages to be sent to the FPM.\n\n  * zebra/Makefile.am\n\n    - Include common.am\n\n    - Build new file zebra_fpm_protobuf.c when protobuf is available.\n\n    - Link with the fpm_pb library.\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@sproute.com\u003e\n"
    },
    {
      "commit": "3676cb0c029c8f8f06ab703dd441c1e23e5ef333",
      "tree": "613e8f2a7c7b2b9e2d334830ce994f50611e9d4e",
      "parents": [
        "481986950290323e2f5d1e774a666d4b7ed510d6"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Jul 29 13:39:37 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:39 2016 +0100"
      },
      "message": "*: Remove some for statement declarations\n\nWe generally require C99.  Some compilers, e.g.  gcc, barf on\n\u0027for\u0027 statement declared variables, if std\u003d{gnu,c}99 or higher is not\ngiven - even while seemingly accepting other C99 constructs.\n\nAs it\u0027s trivial, remove these.\n"
    },
    {
      "commit": "15773a87ce652da5b02ca14dc0088408899ea007",
      "tree": "0c4d6ceab9ca1d8183382f40601265133b15f68b",
      "parents": [
        "ae51c9d510fb7d9cc41ead8803af916c1f4b34ca"
      ],
      "author": {
        "name": "Olivier Dugeon",
        "email": "olivier.dugeon@orange.com",
        "time": "Tue Apr 19 18:29:55 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:38 2016 +0100"
      },
      "message": "zebra: Add link parameters support to Zebra\n\n* zebra/interface.c:\n   - Add new link-params CLI commands\n   - Add new functions to set/get link parameters for interface\n* zebra/redistribute.[c,h]: Add new function to propagate link parameters\n  to routing daemon (essentially OSPFD and ISISD) for Traffic Engineering.\n* zebra/redistribute_null.c: Add new function\n  zebra_interface_parameters_update()\n* zebra/zserv.[c,h]: Add new functions to send link parameters\n\nSigned-off-by: Olivier Dugeon \u003colivier.dugeon@orange.com\u003e\n"
    },
    {
      "commit": "581ecbfe91d23791c116a8e3790208a17c1a5983",
      "tree": "c6087fe822be69a1b424b2453aa87ac30014ec5e",
      "parents": [
        "00667cea1fbd088900f7909f2044da2a7e26270d"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "nobody@nowhere.ws",
        "time": "Tue May 03 19:59:43 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:38 2016 +0100"
      },
      "message": "zebra: count iface up/down events and keep last time of their occurrence\n\nIt is quite useful to be able to assert whether specific interfaces have\nflapped or also to verify that specific interfaces have not flapped.\n\nBy having counters for those events and storing the last time of their\noccurrence, this is made possible.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nTested-by: NetDEF CI System \u003ccisystem@netdef.org\u003e\n"
    },
    {
      "commit": "68b45cc592d5d61e748e8d99ec9f84e63aa73213",
      "tree": "eb1008834813757b86e5f4bc439e7b2b3188adbf",
      "parents": [
        "b9ac2f320922542e0320ceeced4aa7264564e98a"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Mar 11 14:27:13 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 20 12:58:33 2016 +0100"
      },
      "message": "*: Consolidate all double VIEW_NODE and ENABLE_NODE\u0027s\n\nIf a command is put into the VIEW_NODE, it is going into the\nENABLE_NODE as well.  This is especially true for show commands.\nAs such if a command is in both consolidate it down to VIEW_NODE.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "23757db11c5378521b7948847e17691f4fc35e0a",
      "tree": "5b62d70b558c89ab751626e5b3f1a028a0be431e",
      "parents": [
        "7bd31774cf2c1cfaf74bca87f57f698e20a07e65"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 24 06:26:02 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 20 12:58:32 2016 +0100"
      },
      "message": "*: get rid of \"MTYPE 0\"\n\nA few places are using 0 in place of the MTYPE_* argument.  The\nfollowing rewrite of the alloc tracking won\u0027t deal with that, so let\u0027s\nuse MTYPE_TMP instead.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "d869dbd03b4d75d512552d07ed8fbe0807272a9c",
      "tree": "2ade0de7288c4dd3fc68232708346881fd1a59fa",
      "parents": [
        "9da9a61e2f8afb61aa31c17fb810169290bf96ee"
      ],
      "author": {
        "name": "Udaya Shankara KS",
        "email": "shankara.k.s.u@gmail.com",
        "time": "Thu Feb 11 21:42:29 2016 +0530"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 20 12:58:32 2016 +0100"
      },
      "message": "zebra: Enable fpm module to connect to remote fpm server\n\nFPM aims to provide cross platform mechanism to support the scenario\nwhere the router has forwarding path distinct fromt the kernel.Commonly\nHardware based fast path.Hence it is non-configurable paramter.This\nlimits us to use funcationality to update FIB information to remote\nhosts, like SDN controller.\n\nThis implementation provides the CLI to configure remote hosts and port\ninformation of remote fpm controller.Otherwise default fpm server will\nbe localhost and default fpm port will be well know port 2620.\n\n* zebra_fpm.c: added fpm_server paramter to zfpm_global_t handler.\n    Implemented CLI for configuring the fpm server and no fpm\n    command to revert back to default configuration.\n\n* zserv.c: Install zebra node to write fpm configuration info\n   on console/config file.\n\nFurther documentation supplied:\n-------------------------------\n\n               ZEBRA : CLI CONFIGURATION FOR FPM MODULE\n         \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\n1. INTRODUCTION\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n   1.1 scope\n\n     This memo discusses the configuration option for zebra to update\n     FIB information to local and remote modules.\n     This will also helps to address the issue associated with CORD project.\n     https://jira.onosproject.org/browse/CORD-411\n\n2. REFERENCE\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n  Quagga version 99.24+ ( main branch committed on 29-sep-2015)\n\n3. PROBLEM DESCRIPTION\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\n    Once FPM is enabled, Quagga periodically tries to initiate fpm\nconnection to localhost:2620.  These values are non configurable in\nexisting implementation.  There is no CLI available to configure\n\"host:port\".  hence limits us to use it for hardware based fast path\nmodules only.\n\n4. PROPOSED CHANGES\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nFollowing changes are done to the quagga code\n   a) Added new CLI to configure \"host address : port\".\n      The CLI format\n      \u003cconf t\u003e\n           $ fpm connection ip \u003cipv4 address\u003e port \u003ctcp port num\u003e\n\n      and no fpm command to revert back to default\n      \u003cconf t\u003e\n           $ no fpm connection ip \u003cipv4 address\u003e port \u003ctcp port num\u003e\n\n   b) Allowed values are ipv4 address and tcp port range \u003c1-65535\u003e\n\n   c) FPM initialization code has been enhanced to pick the \"host\n      address : port\" values from zebra.conf.  if not found then\n      default values as localhost:2620 will be used.  and updated the\n      information on to config file on write config command\n\n5. FILES MODIFIED\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n  1) fpm/fpm.h :\n     a) Added MACRO to represent network order loopback ip\n\n  2) zebra/zebra_fpm.h :\n\n     a) introduced fpm_server variable in zfpm_glob_t handler to hold\n        the remote fpm server address\n\n     b) Hooked \u0027fpm_remote_ip_cmd\u0027 and \u0027no_fpm_remote_ip_cmd\u0027 at CONFIG\n        node to configure remote fpm detail and to revert back to\n        default respectively\n\n  3) zebra/zserv.c :\n     a) Hooked \u0027config_write_fpm\u0027 callback function, at ZEBRA_NODE to\n        display the fpm connection details on console on entering\n        command\n\n         $ show running_config\n        and to write to configuration file on entering command\n         $ write config\n\n6. TESTING DETAILS\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\n   6.1. default behavior\n\n          In default configuration FPM will attempt to connect to\n          localhost:2620\n\n   6.2. update fpm info\n        a) Using CLI command user can configure fpm host:port details\n           and can be able to write to config file(zebra.conf) using\n           write config command.  this parameters has no\n           dependency/impact on other parameters of config file\n\n        b) show running-config/write config will display the fpm\n           information if configured.  and will not display any\n           information related to fpm for default configuration\n\n        c) these configured information will be stored to config file.\n           only on write config command.\n\n   6.3 loading from config file\n        a) zebra attempts to connect to fpm server if fpm parameter\n           found in config file.else connects to default parameters.\n\n        b) if fpm connection drops, fpm will periodically attempts to\n           connect to remote server.\n\n        c) if fpm connections already established. then newly\n           configured fpm parameters will not disconnect the existing\n           connection.  new connection to the different fpm server will\n           happen only after existing connection closes by either of\n           the end.\n"
    },
    {
      "commit": "9514fee4b37a9043738aa16ca8684993a1b572ad",
      "tree": "715d5bfb6824dc213a3f0c98cf149bfb5e104ea7",
      "parents": [
        "3c964045459f66921f8a3dc33fe4c028e6b0b141"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Jan 26 11:44:14 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 20 12:58:32 2016 +0100"
      },
      "message": "bgpd, ripngd, zebra: Remove duplicate PSIZE define\n\nThe PSIZE macro is defined the same in multiple places.  Remove\nthe duplicates.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\nTested-by: NetDEF CI System \u003ccisystem@netdef.org\u003e\n"
    },
    {
      "commit": "5f678889843fb9bc3f07d05eebc2f8fb35584a91",
      "tree": "284e203bd4345265fae0648bbdd54460171951f0",
      "parents": [
        "aef4650851cf0f74d944466d50e26bb8f8635c3d"
      ],
      "author": {
        "name": "Igor Ryzhov",
        "email": "iryzhov@nfware.com",
        "time": "Fri Apr 22 17:38:24 2016 +0300"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Apr 29 19:48:45 2016 -0400"
      },
      "message": "zebra: add missing vty commands\n\nSigned-off-by: Igor Ryzhov \u003ciryzhov@nfware.com\u003e\nTested-by: NetDEF CI System \u003ccisystem@netdef.org\u003e\n"
    },
    {
      "commit": "aef4650851cf0f74d944466d50e26bb8f8635c3d",
      "tree": "0fa32e61bc3c9d715247091fd3003690b3e056a1",
      "parents": [
        "bb01bdd740339b0c07d8ed0786811801b2a79192"
      ],
      "author": {
        "name": "Stas Nichiporovich",
        "email": "stas@iptel.by",
        "time": "Tue Apr 26 08:14:36 2016 +0000"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Apr 29 19:46:16 2016 -0400"
      },
      "message": "zebra: fix crash caused by using route-map with \"set src\"\n\nSigned-off-by: Stas Nichiporovich \u003cstas@iptel.by\u003e\nTested-by: NetDEF CI System \u003ccisystem@netdef.org\u003e\n"
    },
    {
      "commit": "190591f0fe3388c746ea48f69a439f4bd0b49834",
      "tree": "de1420f8f017c3e36b5ce6233d01af4f75960c9e",
      "parents": [
        "80f61a9979079ed16b9eff50ba65ad8bf1b15fb6"
      ],
      "author": {
        "name": "Jafar Al-Gharaibeh",
        "email": "jafar@atcorp.com",
        "time": "Thu Apr 21 17:40:12 2016 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Apr 22 08:37:53 2016 -0400"
      },
      "message": "zserv: [pimd] fix - avoid dereferencing a NULL pointer\n\nSigned-off-by: Jafar Al-Gharaibeh \u003cjafar@atcorp.com\u003e\nTested-by: NetDEF CI System \u003ccisystem@netdef.org\u003e\n"
    },
    {
      "commit": "7e73eb740f3c52a5b7c0ae9c2cd33b486d885552",
      "tree": "610292c5f4b071790a9fba7bcd77f68934a31809",
      "parents": [
        "7e7a101dde5969f62074801d84bb4cc75e50f548"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Sat Apr 09 17:22:32 2016 +0300"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Apr 22 08:36:40 2016 -0400"
      },
      "message": "zebra: handle multihop nexthop changes properly\n\nThe rib entries are normally added and deleted when they are\nchanged. However, they are modified in placae when the nexthop\nreachability changes. This fixes to:\n - properly detect nexthop changes from nexthop_active_update()\n   calls from rib_process()\n - rib_update_kernel() to not reset FIB flags when a RIB entry\n   is being modifed (old and new RIB are same)\n - improves the \"show ip route \u003cprefix\u003e\" output to display\n   both ACTIVE and FIB flags for each nexthop\n\nFixes: 325823a5 \"zebra: support FIB override routes\"\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nReported-By: Igor Ryzhov \u003ciryzhov@nfware.com\u003e\nTested-by: NetDEF CI System \u003ccisystem@netdef.org\u003e\n"
    },
    {
      "commit": "d849e23b1c6b7278aef2f460723ac17cdc63e1a7",
      "tree": "d0627a3b565375788d11f930143afe561d9b0d2b",
      "parents": [
        "f9f4731245eb9f83d0795acac24183c6cf709288"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Thu Feb 18 18:19:54 2016 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Mar 08 18:05:23 2016 +0000"
      },
      "message": "zebra: Fix route deletion on *BSD\n\nFix for not handling RTM_CHANGE correctly.  This patch change it to\ndelete/add instead.  Using RTM_CHANGE on kernels where it works is better,\nbut is left as an exercise for developer who has access and will to fix it\non *BSD.\n\n[ed note: collaboration with Martin Winter]\n"
    },
    {
      "commit": "91ce87aacfd8718b5a52fb0f4453e9f72d8bdb53",
      "tree": "8abce3edf10e5874aa342090810adcfbf2380053",
      "parents": [
        "d18396369ff85517cd4b0b7abe96f6f706710dc7"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Dec 09 08:24:45 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:47 2016 +0000"
      },
      "message": "zebra, bgpd: Fixup MULTIPATH_NUM usage to not consider 0\n\nThe code has spots where MULTIPATH_NUM set to 0 is equal to 64.\nNow that MULTIPATH_NUM is set from the makefile to never be 0,\nremove the code that depends on this.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "d18396369ff85517cd4b0b7abe96f6f706710dc7",
      "tree": "748597138dba3b393808782c8767fdf886b603f4",
      "parents": [
        "693da6096a28eef5eadeea699771265987b3ec0c"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Dec 09 08:24:44 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:47 2016 +0000"
      },
      "message": "build: Rework how MULTIPATH_NUM is delivered to build\n\nChanges made here:\n\n1) MULTIPATH_NUM will never be 0.  If user specifies --enable-multipath\u003d0\nthen this translates to MULTIPATH_NUM being set to 64 inside of the build\nsystem.\n\n2) Move MULTIPATH_NUM from a Makefile construct to a config.h construct.\n\n3) Allowed MULTIPATH_NUM to be a number \u003e 99 but \u003c 1000\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "9099f9b2a66e86f8a90d7fe18f61bd2bb1bc6744",
      "tree": "1ce5d2e4ecff6b57eb00d40b1a91b3f363ff35fe",
      "parents": [
        "954c7d6bcd04c2cf037965adda0f9d11afdcd165"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Mon Jan 18 10:12:10 2016 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:46 2016 +0000"
      },
      "message": "*: use an ifindex_t type, defined in lib/if.h, for ifindex values\n"
    },
    {
      "commit": "954c7d6bcd04c2cf037965adda0f9d11afdcd165",
      "tree": "707ba870b0989d08a98e6b969fc1e2388f09e1c0",
      "parents": [
        "4d3ae716ce86c28e3979c9ae57c4e717ac5e27e4"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Fri Jan 15 17:36:33 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:46 2016 +0000"
      },
      "message": "lib, zebra: unify link layer type and hardware address handling\n\nThis removes the BSD specific usage of struct sockaddr_dl\nhardware address. This unifies to use explict hw_addr member for\nthe address, and zebra specific enumeration for the link layer\ntype.\n\nAdditionally the zapi is updated to never send platform specific\nstructures over the wire, but the ll_type along with hw_addr_len\nand hw_addr are now sent for all platforms.\n\nBased on initial work by Paul Jakma.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "4d3ae716ce86c28e3979c9ae57c4e717ac5e27e4",
      "tree": "42d84ffb3cfe8a1f267c059e3a62fea87554f1c7",
      "parents": [
        "325823a5f07d6850318e52f6e66691eca59d24fe"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Fri Jan 15 17:36:32 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:46 2016 +0000"
      },
      "message": "zebra: remove metric from kernel\n\nIt simplifies things as we can do atomic replace of route prefix.\nAnd it seems there\u0027s some race condition somewhere that can result\nin an incorrect change request leaving prefixes in kernel when\nthey were intended to be replaced/deleted.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "325823a5f07d6850318e52f6e66691eca59d24fe",
      "tree": "9be443652c5c0734b6761a84f44980be7958b708",
      "parents": [
        "82a6635ca580ccd3c31551c960ec3de816b6c15d"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Fri Jan 15 17:36:31 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:46 2016 +0000"
      },
      "message": "zebra: support FIB override routes\n\nFIB override routes are for routing protocols that establish\nshortcut routes, or establish point-to-point routes that should\nnot be redistributed. Namely this is useful NHRP daemon to come.\n\nZebra is extended to select two entries from RIB the \"best\" entry\nfrom routing protocols, and the FIB entry to install to kernel.\nFIB override routes are never selected as best entry, and thus\nare never adverticed to other routing daemons. The best FIB\noverride, or if it does not exist the otherwise best RIB is\nselected as FIB entry to be installed.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "82a6635ca580ccd3c31551c960ec3de816b6c15d",
      "tree": "d55f7b9894ccfda8f6b3295fd1efdf86356c1969",
      "parents": [
        "0abf6796c3d8ae8f5ea8624668424bc1554de25e"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Fri Jan 15 17:36:30 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:46 2016 +0000"
      },
      "message": "zebra: use link scope for interface routes\n\nIn linux, \u0027scope\u0027 is a hint of distance of the IP. And this is\nevident from the fact that only lower scope can be used as recursive\nvia lookup result. This changes all interface routes scope to link\nso kernel will allow regular routes to use it as via. Then we do\nnot need to use the \u0027onlink\u0027 attribute.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\n"
    },
    {
      "commit": "0abf6796c3d8ae8f5ea8624668424bc1554de25e",
      "tree": "2d1713deeb970d79930912588341ff756949b49c",
      "parents": [
        "b0d02889624eaafa0984873dcd78c086418bdf13"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Fri Jan 15 17:36:29 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:46 2016 +0000"
      },
      "message": "zebra: atomic FIB updates\n\nThis commit updates the kernel API so that route changes are\natomically updated using change/replaces messages instead\nof first sending a withdraw followed with update.\n\nSame for zclient updates, changes are sent as single ADD\ninstead of DELETE + ADD.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\n"
    },
    {
      "commit": "40278bd4c51939ccf8ec06ef1f33aedf8f05e86c",
      "tree": "569686df98a09491cf051593b91ea43206f956f4",
      "parents": [
        "b05c6ca57130f079f8a8a6686d9d4ffa5ff440f0"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:41:45 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:41 2016 +0000"
      },
      "message": "zebra: additional redistribute related logging\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b05c6ca57130f079f8a8a6686d9d4ffa5ff440f0",
      "tree": "5533689d6a3ff733280cd7a5458a562a8fe032d7",
      "parents": [
        "d7be042378eac103634ab62abf4b2a5ca225092d"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:41:44 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:41 2016 +0000"
      },
      "message": "zebra: make RTF_LLINFO optional to fix FreeBSD\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d7be042378eac103634ab62abf4b2a5ca225092d",
      "tree": "63901594ccd70f4fa15d9f9b90a578e8573f931b",
      "parents": [
        "0490729cc033a3483fc6b0ed45085ee249cac779"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:41:43 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:40 2016 +0000"
      },
      "message": "zebra: wire up \"debug zebra packet detail\"\n\nThere was no way to actually set ZEBRA_DEBUG_DETAIL, even though some\ndebug output was conditional to it.  Add CLI command.\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "eae18d16fefed42af33e63e096a2889b9c70b9cb",
      "tree": "ca1a184a44902f2d6a9c7dfa92cf50225b8e8cd8",
      "parents": [
        "0d27129ac5fd70b90820e3dde05c085d1a0f63a8"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Sat Nov 21 07:55:42 2015 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Dec 09 08:54:37 2015 -0500"
      },
      "message": "zebra: Fix solaris build issue\n\nThe number of parameters to rib_add_ipv4 has been increased.\nSubmitter of original patch failed to modify solaris code path.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "0d27129ac5fd70b90820e3dde05c085d1a0f63a8",
      "tree": "c0267ab193459bd71f217dcbd0905ad0b9db012e",
      "parents": [
        "64e0ac29ddc43bb5b1a2999a8ebedbdff115e3ca"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Thu Nov 19 07:21:30 2015 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:16:24 2015 -0500"
      },
      "message": "zebra: Fix non usage of VRF_DEFAULT\n\nA vrf_id was being set to 0 instead of VRF_DEFAULT\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "642577340cfb7ad66d021ab2b86d72f7cdde03bc",
      "tree": "981104744f3fb913ec3e5a006199e6810101ab55",
      "parents": [
        "8253b73c3c71d4102c0010f63b59b2829f3b0f90"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Nov 20 08:33:30 2015 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:16:12 2015 -0500"
      },
      "message": "zebra: Cleanup RTADV define\n\nThe RTADV define was not being set correctly or consistently.\nMake the code consistent with our HAVE_IPV6 define.\n\nIf the user wants to explicitly turn it off then they should\nrun --disable-rtadv from the configure cli\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "c1900e09a7fdd70437f3ba0329868f1eee3f5a1a",
      "tree": "5f1032936f4413f7dc12935eabbdf62f940ffd12",
      "parents": [
        "949b719eac0c8b51c73f144eb035fab27a16c2a6"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Nov 04 13:26:40 2015 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:12:10 2015 -0500"
      },
      "message": "zebra: Fix change of distance on ipv6 route creating duplicate routes\n\nIf you enter:\n\nipv6 route 2002:44:44:44::44/128 swp1 4\nipv6 route 2002:44:44:44::44/128 swp1 99\n\nYou get:\n\nhost-111# show ipv6 route\nCodes: K - kernel route, C - connected, S - static, R - RIPng,\nO - OSPFv6, I - IS-IS, B - BGP, A - Babel, T - Table,\n\u003e - selected route, * - FIB route\nS 2002:44:44:44::44/128 [99/0] is directly connected, swp1\nS\u003e* 2002:44:44:44::44/128 [4/0] is directly connected, swp1\n\nThis problem is fixed in the ipv4 code path.  Copying the same\ncode from the ipv4 into the ipv6 code path fixes the issue.\n\nWith the fix:\n\nhost-111(config)# ipv6 route 2002:44:44:44::44/128 swp1 4\nhost-111(config)# do show ipv6 route\nCodes: K - kernel route, C - connected, S - static, R - RIPng,\n       O - OSPFv6, I - IS-IS, B - BGP, A - Babel, T - Table,\n       \u003e - selected route, * - FIB route\n\nS\u003e* 2002:44:44:44::44/128 [4/0] is directly connected, swp1\nC * fe80::/64 is directly connected, swp1\nC\u003e* fe80::/64 is directly connected, eth0\nhost-111(config)# ipv6 route 2002:44:44:44::44/128 swp1 99\nhost-111(config)# do show ipv6 route\nCodes: K - kernel route, C - connected, S - static, R - RIPng,\n       O - OSPFv6, I - IS-IS, B - BGP, A - Babel, T - Table,\n       \u003e - selected route, * - FIB route\n\nS\u003e* 2002:44:44:44::44/128 [99/0] is directly connected, swp1\nC * fe80::/64 is directly connected, swp1\nC\u003e* fe80::/64 is directly connected, eth0\nhost-111(config)#\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "949b719eac0c8b51c73f144eb035fab27a16c2a6",
      "tree": "ca22748a46ab77ab04354d13890335a3bcb690a1",
      "parents": [
        "a979ab70e0ec51f3cf779edae509f3c52be0b0f4"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Nov 04 13:26:39 2015 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:12:10 2015 -0500"
      },
      "message": "zebra: Combine static_uninstall_ipv[4|6] into one function\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "a979ab70e0ec51f3cf779edae509f3c52be0b0f4",
      "tree": "f81b6472598e824ea37e3f17e1dd8b167044fbeb",
      "parents": [
        "9bcdd1a252ba84424eb06e84adf7fb48ae66ce1f"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Nov 04 13:26:38 2015 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:12:10 2015 -0500"
      },
      "message": "zebra: combine static_ipv[4|6]_nexthop_same into one function\n\nCombine the static_ipv[4|6]_nexthop_same into static_nexthop_same.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "9bcdd1a252ba84424eb06e84adf7fb48ae66ce1f",
      "tree": "e604d71dcc41c9449d91c6d85c732320d6a112ec",
      "parents": [
        "0d955affd51df42dd5ae24b0d41edd992fb59a78"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Nov 04 13:26:37 2015 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:12:10 2015 -0500"
      },
      "message": "zebra: Combine static_install_ipv[4|6]\n\nCombine the static_install_ipv[4|6] function calls into\nstatic_install_route.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "0d955affd51df42dd5ae24b0d41edd992fb59a78",
      "tree": "8cdf0f263b5c9950c598e6ef2908efbb55004845",
      "parents": [
        "d4c27d656d072fbd81003a71c4f3391c96852c60"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Nov 04 13:26:36 2015 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:12:10 2015 -0500"
      },
      "message": "zebra: Remove HAVE_IPV6 from rib.h and zebra_rib.c\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "d4c27d656d072fbd81003a71c4f3391c96852c60",
      "tree": "27f40829775ca271f6a7d7b5031284b264c0f479",
      "parents": [
        "b11f3b54c842117e22e2f5cf1561ea34eee8dfcc"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Nov 04 13:26:35 2015 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:12:10 2015 -0500"
      },
      "message": "zebra: Collapse struct static_ipv[4|6] into struct static_route\n\nThe \u0027struct static_ipv4\u0027 and \u0027struct static_ipv6\u0027 structures\nare essentially the same.  Collapse them into one data structure\n\u0027struct static_route\u0027.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "b11f3b54c842117e22e2f5cf1561ea34eee8dfcc",
      "tree": "c31f9893baa2a05db24ea72d1370fb6b11f59c20",
      "parents": [
        "7eb6136b2732d4782360f9f376336c6d4f667ff0"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Mon Nov 02 16:50:07 2015 +0200"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:12:10 2015 -0500"
      },
      "message": "zebra: implement per-route mtu handling\n\nThis commits allow overriding MTU using netlink attributes on\nper-route basis. This is useful for routing protocols that can\nadvertice prefix specific MTUs between routers (e.g. NHRP).\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\n"
    },
    {
      "commit": "7eb6136b2732d4782360f9f376336c6d4f667ff0",
      "tree": "5e77b44139cf542a18a949d1204ace4316b474f1",
      "parents": [
        "929a26a7cf80b2df9981595e6bcfcfc4a970052a"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Mon Nov 02 16:50:05 2015 +0200"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:12:10 2015 -0500"
      },
      "message": "zebra: make ZEBRA_FLAG_CHANGED internal status\n\nThis flag is used internally in zebra only. And it makes no sense\nto expose it over the zclient API, as having it set from client\ncould corrupt the internal state.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "983525e8b560fc44d2214ca3f6d72af809b6ebd9",
      "tree": "e746b161aa9266c270d80e2a51e01e49dad87e44",
      "parents": [
        "6d853c43d9dd315eb42211150b7a4a43bae4cb62"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Thu Oct 22 11:35:16 2015 +0300"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:11:18 2015 -0500"
      },
      "message": "zebra: fix rtadv detection\n\nThe GLIBC macro tests were just plain wrong. Glibc 2.1 is ancient\nand the support should be detected via configure.ac test, not\nmacro test. Build with HAVE_RTADV but !RTADV is broke after vrf,\nso for now, just define RTADV always if HAVE_RTADV is there.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\n"
    },
    {
      "commit": "283596fd6d49a5b2861a6923db9a88628ef0eca4",
      "tree": "1b461a1fea8840efaafd1250f729831be91fea9f",
      "parents": [
        "be62b17c736ea06181f2788e3011066830555610",
        "fc1c114aab24fe47bc6a1976c1c602d507fa4e69"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Wed Oct 28 14:25:06 2015 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Oct 28 14:25:06 2015 +0000"
      },
      "message": "Merge \u0027patch-tracking/4/proposed/netdef-solaris\u0027 into accepted\n"
    },
    {
      "commit": "7125293d65d73a451ec203c8c1630c236171f5a3",
      "tree": "f9d118c9a8f8374d69fb9c75c87531a2ca478fb2",
      "parents": [
        "fd1c1a133af47ae5533a5ed41b73ff62e7aa1058"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Thu Sep 24 09:25:19 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 27 10:53:21 2015 +0000"
      },
      "message": "lib: zclient.c remove extern struct thread_master *\n\nzclient.c depended upon link time inclusion of a\nextern struct thread_master *master.  This is a violation of the\nnamespace of the calling daemon.  If a library needs the pointer\npass it in and save it for future use.\n\nThis code change also makes the zclient code consistent with\nthe other lib functions that need to schedule work on your behalf\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "7904509bdf9ec7fad3ac1aee763ae39e7c308c52",
      "tree": "3bb692701804c22e215828b87f4c11451b5a93e1",
      "parents": [
        "8fa1d027f23115dcb1c38b09c6e46edf5b8f7238"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 22:09:30 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:47 2015 -0700"
      },
      "message": "zebra/if_ioctl_solaris: Make foo static\n\nmake interface_ioctl_ioctl() and if_get_index() static\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8fa1d027f23115dcb1c38b09c6e46edf5b8f7238",
      "tree": "73ed587d0f0967ee78e93f64d95be6ba3b9aaf68",
      "parents": [
        "ebd2687a531a0f9b9449f6fcf7001f53afa99d02"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 21:55:38 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:47 2015 -0700"
      },
      "message": "zebra/rt_socket: Fix warnings\n\nFix warning about unused sin_masklen / sin6_masklen\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ebd2687a531a0f9b9449f6fcf7001f53afa99d02",
      "tree": "b37a4a6bdb5a3b5dfc3e69a6e882f5dad76925ba",
      "parents": [
        "f90ce64d68cf0ad56ff0370338ec58c883a3448d"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 21:40:31 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "zebra/rtread_getmsg: fix sign warnings\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "da1b7eaa0ac5d590818e1cde92a9807a2f0e07f2",
      "tree": "17bfadeef20983eb5cd070734f0d2b02f23a9663",
      "parents": [
        "a2b503131b188292ede08df99309bcbef4bd1a52"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 20:36:20 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "solaris: more warnings fixed\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a2b503131b188292ede08df99309bcbef4bd1a52",
      "tree": "9e834012068d8f2106fd3846fac62d080e3248d8",
      "parents": [
        "fe56125bbcbc0c503ae6bd0b934a4940c4693b4f"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 19:35:41 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "solaris: no ROUNDUP\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "fe56125bbcbc0c503ae6bd0b934a4940c4693b4f",
      "tree": "25dc1d7b525c4c5cfead2fec9d4061eed4f9399a",
      "parents": [
        "ba6cd587b4114528c8d6af439c4f49c7bb95a92b"
      ],
      "author": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Tue Sep 15 19:12:31 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "zebra/ioctl_solaris: Fix use of prefix2str in if_prefix_add/delete_ipv6\n\nFirst argument of prefix2str pointed to ifc-\u003eaddress-\u003eprefix, but\nno prefix exists in address. Should have been ifc-\u003eaddress.\n\nSigned-off-by: Martin Winter \u003cmwinter@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "6d9362274e8ba2d57ffe17aa735eb941ac3d5fbc",
      "tree": "690bb673621812ce671cac14927933af460a457c",
      "parents": [
        "285ed0c62af4f57902d5deacc621f290fdeec276"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 02:59:04 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "zebra/solaris: fix uninitialised vars\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "285ed0c62af4f57902d5deacc621f290fdeec276",
      "tree": "ef1559318aef1e718f09d829c586c009e02920cf",
      "parents": [
        "12bbd62112724483f72c4040a4c4b585aff8eb54"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 02:46:53 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "build/solaris: create ioctl_solaris.h\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c8394ace7081ef0e71f3d162067c83c2629fc088",
      "tree": "7736d5d1ca6d3ea79c3f43e32dccf4baf0fa1094",
      "parents": [
        "75daab1784f515104ceef747d134981ecee7b0af"
      ],
      "author": {
        "name": "Morgan Stewart",
        "email": "morgan@cumulusnetworks.com",
        "time": "Thu Sep 17 19:04:30 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:46 2015 +0100"
      },
      "message": "Fixed if_add_update possible null dereference\n\nCoverity Scan #1221454\nIn zebra/interface.c if_data could be null dereferenced without early\ncheck.\n\nSigned-off-by: Morgan Stewart \u003cmorgan@cumulusnetworks.com\u003e\nReviewed-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "26b663da7ea8a3efae816d6e7fda293bdc1082f5",
      "tree": "dfaf1057216d4dd0e750ff1a2aa2a2653a1c6202",
      "parents": [
        "782c882077b5a63213b3d160535d5e8259f6df61"
      ],
      "author": {
        "name": "Morgan Stewart",
        "email": "morgan@cumulusnetworks.com",
        "time": "Wed Sep 16 13:17:54 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:45 2015 +0100"
      },
      "message": "zebra: Fix leaked sockets in rtadv.c\n\nCoverity Scan #709790\nIn zebra/rtadv.c: rtadv_make_socket leaks socket for error cases.\nAdded lines to close the socket for each error case or return.\n\nSigned-off-by: Morgan Stewart \u003cmorgan@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "782c882077b5a63213b3d160535d5e8259f6df61",
      "tree": "31a9ed3f8d228f41080e684557b48939943ee6a8",
      "parents": [
        "8ccd74c29f5242f312c1e0561497558482c9be65"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Mon Sep 14 13:29:37 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:45 2015 +0100"
      },
      "message": "zebra: rib-\u003enexthop_num is double incremented\n\nWhile reading linux kernel netlink messages, rib-\u003enexthop_num is incremented\nin the read loop as well as the underlying nexthop_add() function call.  This\nnumber should only be incremented in one spot.  Removing the increment from\nthe read loop and allowing the underlying code to track this data as it is\nalready.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "8ccd74c29f5242f312c1e0561497558482c9be65",
      "tree": "5cfa8948b7f55bce37923a2607c4d7a4c21b241d",
      "parents": [
        "8965be4baaa1a4c619cbb4a8a10d15a72d80b60d"
      ],
      "author": {
        "name": "Hiroshi Yokoi",
        "email": "hiroshi.yokoi.0313@gmail.com",
        "time": "Tue Sep 08 11:52:20 2015 +0900"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:45 2015 +0100"
      },
      "message": "zebra: fix addr sent in ZEBRA_IPV6_NEXTHOP_LOOKUP\n\nI found that zebra doesn\u0027t set correct IPv6 address in its result because of\nusing *addr\u0027s address.  Although I\u0027m using 0.99.22, the latest version has\nalso use \"\u0026addr\".  Shouldn\u0027t it use \"addr\"?\n\nSigned-off-by: Hiroshi Yokoi \u003chiroshi.yokoi.0313@gmail.com\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "52c0bc739b1184621525e64720b944268d6b0eeb",
      "tree": "a556a51ef56f6ccaa63c942c9880c684fc4b3bae",
      "parents": [
        "c8ee940cc695cbcf9c0156ee6f72730f1fff9814"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Thu Aug 20 21:30:17 2015 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 03 16:44:48 2015 +0100"
      },
      "message": "build: Remove the old PIC/PIE patch, let libtool sort it out\n\n* Remove the old change from \u002708 to add in PIE arguments at automake level.\n  Versions of libtool since then know how to deal with -fpie and do the right\n  thing according to whether its building shared or executable objects.\n  So just pass \u0027-fpie\u0027 as CFLAG and let libtool do its thing.\n"
    },
    {
      "commit": "8b84c2762ccd2d47a115824ee083d33e697a7741",
      "tree": "6f561e4d5b78e3cc5b8388d7cbaf6dbe512ce50b",
      "parents": [
        "8c56b44de0fa8100b6f0b367dbc604d41b94025f"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Sat May 30 18:57:54 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Aug 04 16:39:27 2015 +0100"
      },
      "message": "Removal of \u0027show ip mroute\u0027\n\nThe \u0027show ip mroute\u0027 in zebra_vty.c collided with the\n\u0027show ip mroute\u0027 command in pim_cmd.c.  The \u0027show ip rpf\u0027\ncommand is functionally equivalent to the zebra_vty.c\n\u0027show ip mroute\u0027.  Therefore remove the \u0027show ip mroute\u0027 command\nin zebra_vty.c.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "8c56b44de0fa8100b6f0b367dbc604d41b94025f",
      "tree": "c7f04ccf33183b461c10b636dbe48ded10222e06",
      "parents": [
        "9487b4fcfc0754109e49240214e283fd58756843"
      ],
      "author": {
        "name": "Kaloyan Kovachev",
        "email": "kkovachev@varna.net",
        "time": "Mon Jun 15 17:08:48 2015 +0300"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 29 21:47:57 2015 +0100"
      },
      "message": "Fix _netlink_route_debug message\n"
    },
    {
      "commit": "c99f3481a598e9cadd1de96714f6b5df9ad85c4a",
      "tree": "aac6df566f28c13fce5c9f02275f159fab73a24d",
      "parents": [
        "758fb8f99a7bfac3d31c419fd1a5694fc5f33f6a"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Thu Oct 16 09:52:36 2014 +0800"
      },
      "committer": {
        "name": "Nicolas Dichtel",
        "email": "nicolas.dichtel@6wind.com",
        "time": "Wed Jun 03 10:24:12 2015 +0200"
      },
      "message": "*: add VRF ID in the API message header\n\nThe API messages are used by zebra to exchange the interfaces, addresses,\nroutes and router-id information with its clients. To distinguish which\nVRF the information belongs to, a new field \"VRF ID\" is added in the\nmessage header. And hence the message version is increased to 3.\n\n* The new field \"VRF ID\" in the message header:\n\n    Length    (2 bytes)\n    Marker    (1 byte)\n    Version   (1 byte)\n    VRF ID    (2 bytes, newly added)\n    Command   (2 bytes)\n\n  - Client side:\n\n    - zclient_create_header() adds the VRF ID in the message header.\n    - zclient_read() extracts and validates the VRF ID from the header,\n      and passes the VRF ID to the callback functions registered to\n      the API messages.\n    - All relative functions are appended with a new parameter \"vrf_id\",\n      including all the callback functions.\n    - \"vrf_id\" is also added to \"struct zapi_ipv4\" and \"struct zapi_ipv6\".\n      Clients need to correctly set the VRF ID when using the API\n      functions zapi_ipv4_route() and zapi_ipv6_route().\n    - Till now all messages sent from a client have the default VRF ID\n      \"0\" in the header.\n    - The HELLO message is special, which is used as the heart-beat of\n      a client, and has no relation with VRF. The VRF ID in the HELLO\n      message header will always be 0 and ignored by zebra.\n\n  - Zebra side:\n\n    - zserv_create_header() adds the VRF ID in the message header.\n    - zebra_client_read() extracts and validates the VRF ID from the\n      header, and passes the VRF ID to the functions which process\n      the received messages.\n    - All relative functions are appended with a new parameter \"vrf_id\".\n\n* Suppress the messages in a VRF which a client does not care:\n\n  Some clients may not care about the information in the VRF X, and\n  zebra should not send the messages in the VRF X to those clients.\n\n  Extra flags are used to indicate which VRF is registered by a client,\n  and a new message ZEBRA_VRF_UNREGISTER is introduced to let a client\n  can unregister a VRF when it does not need any information in that\n  VRF.\n\n  A client sends any message other than ZEBRA_VRF_UNREGISTER in a VRF\n  will automatically register to that VRF.\n\n  - lib/vrf:\n\n    A new utility \"VRF bit-map\" is provided to manage the flags for\n    VRFs, one bit per VRF ID.\n\n    - Use vrf_bitmap_init()/vrf_bitmap_free() to initialize/free a\n      bit-map;\n    - Use vrf_bitmap_set()/vrf_bitmap_unset() to set/unset a flag\n      in the given bit-map, corresponding to the given VRF ID;\n    - Use vrf_bitmap_check() to test whether the flag, in the given\n      bit-map and for the given VRF ID, is set.\n\n  - Client side:\n\n    - In \"struct zclient\", the following flags are changed from\n      \"u_char\" to \"vrf_bitmap_t\":\n          redist[ZEBRA_ROUTE_MAX]\n          default_information\n      These flags are extended for each VRF, and controlled by the\n      clients themselves (or with the help of zclient_redistribute()\n      and zclient_redistribute_default()).\n\n  - Zebra side:\n\n    - In \"struct zserv\", the following flags are changed from\n      \"u_char\" to \"vrf_bitmap_t\":\n          redist[ZEBRA_ROUTE_MAX]\n          redist_default\n          ifinfo\n          ridinfo\n\n      These flags are extended for each VRF, as the VRF registration\n      flags. They are maintained on receiving a ZEBRA_XXX_ADD or\n      ZEBRA_XXX_DELETE message.\n\n      When sending an interface/address/route/router-id message in\n      a VRF to a client, if the corresponding VRF registration flag\n      is not set, this message will not be dropped by zebra.\n\n    - A new function zread_vrf_unregister() is introduced to process\n      the new command ZEBRA_VRF_UNREGISTER. All the VRF registration\n      flags are cleared for the requested VRF.\n\n  Those clients, who support only the default VRF, will never receive\n  a message in a non-default VRF, thanks to the filter in zebra.\n\n* New callback for the event of successful connection to zebra:\n\n  - zclient_start() is splitted, keeping only the code of connecting\n    to zebra.\n\n  - Now zclient_init()\u003d\u003ezclient_connect()\u003d\u003ezclient_start() operations\n    are purely dealing with the connection to zbera.\n\n  - Once zebra is successfully connected, at the end of zclient_start(),\n    a new callback is used to inform the client about connection.\n\n  - Till now, in the callback of connect-to-zebra event, all clients\n    send messages to zebra to request the router-id/interface/routes\n    information in the default VRF.\n\n    Of corse in future the client can do anything it wants in this\n    callback. For example, it may send requests for both default VRF\n    and some non-default VRFs.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "758fb8f99a7bfac3d31c419fd1a5694fc5f33f6a",
      "tree": "4aa860a2b96ec03622376bf3753840155ab478fe",
      "parents": [
        "d6cf5134c05a7890738411852d9357ee5bb322f3"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Thu Jul 03 18:23:09 2014 +0800"
      },
      "committer": {
        "name": "Nicolas Dichtel",
        "email": "nicolas.dichtel@6wind.com",
        "time": "Wed Jun 03 10:23:32 2015 +0200"
      },
      "message": "zebra, lib/memtypes.c: the netlink sockets work per VRF\n\nThis patch lets the netlink sockets work per VRF.\n\n* The definition of \"struct nlsock\" is moved into zebra/rib.h.\n\n* The previous global variables \"netlink\" and \"netlink_cmd\" now\n  become the members of \"struct zebra_vrf\", and are initialized\n  in zebra_vrf_alloc().\n\n* All relative functions now work for a specific VRF, by adding\n  a new parameter which specifies the working VRF, except those\n  functions in which the VRF ID can be obtained from the interface.\n\n* kernel_init(), interface_list() and route_read() are now also\n  working per VRF, and moved from main() to zebra_vrf_enable().\n\n* A new function kernel_terminate() is added to release the\n  netlink sockets. It is called from zebra_vrf_disable().\n\n* Correct VRF ID, instead of the previous VRF_DEFAULT, are now\n  passed to the functions of processing interfaces or route\n  entries.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "d6cf5134c05a7890738411852d9357ee5bb322f3",
      "tree": "d39b1880b82497d68b1d44623278eec27f4ef349",
      "parents": [
        "49f76097fc191761db8482aa3bf6e6322c52c647"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 08:31:38 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 08:31:38 2015 +0200"
      },
      "message": "zebra: fix VRF code for *BSD\n\nThere seems to be no rtm_table in struct rt_msghdr, at least on the\nsystems I have access to...\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "49f76097fc191761db8482aa3bf6e6322c52c647",
      "tree": "c7aef97b17e3dd41b19fa53535ecf1a9ca8aafb9",
      "parents": [
        "267ceb2ce3adf4ce1357deb7ce48f151d6c58b92"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:10 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 07:48:34 2015 +0200"
      },
      "message": "zebra: maintain RTADV per VRF\n\nThis moves the global variable \"rtadv\" into the \"struct zebra_vrf\",\nso that RTADV feature can work per VRF.\n\n* rtadv.c/rtadv.h:\n\n  Add a proper parameter to the functions so that the entity of the\n  \"struct zebra_vrf\" and interfaces can be obtained from the specified\n  VRF.\n\n  The old rtadv_init() is splitted into:\n  - rtadv_cmd_init(): it installs the RTADV commands; is called from\n                      main();\n  - new rtadv_init(): it creates the socket; is called from\n                      zebra_vrf_enable().\n\n  rtadv_terminate() is added to stop the threads, close the socket and\n  clear the counters. It is called from zebra_vrf_disable().\n\n  rtadv_make_socket() now calls vrf_socket() to create a socket in\n  the VRF.\n\n* interface.h and rib.h: define the macro RTADV.\n* main.c: according changes, refer to rtadv.c.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "267ceb2ce3adf4ce1357deb7ce48f151d6c58b92",
      "tree": "0b86ed01d5d2ea61f0bb509a60cad32916de061e",
      "parents": [
        "fb2bfc1ba2416c1561bc9bfb30dfb5adf3e65616"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:09 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 07:48:34 2015 +0200"
      },
      "message": "zebra: add hooks upon enabling / disabling a VRF\n\nzebra_vrf_enable() is the callback for VRF_ENABLE_HOOK.\nIt presently needs do nothing.\n\nzebra_vrf_disable() is the callback for VRF_DISABLE_HOOK.\nIt presently withdraws routes, shuts down interfaces, and\nclears the router-id candidates in that VRF.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ac19a449261bf69e83827f4bb0c6e5526277b41b",
      "tree": "a93cc7cde55a9c0c65da4b09fc309b503807ffda",
      "parents": [
        "7aaf4ea990398335bd40b56cc9586ab6a7178a4f"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:07 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 07:48:34 2015 +0200"
      },
      "message": "zebra: maintain the router-id per VRF\n\nA router may need different identifier among the VRFs. So move the\nmaintenance of router-id per VRF.\n\n* rib.h:\n\n  Move the previous global variables in router-id.c into the\n  \"struct zebra_vrf\":\n  - struct list _rid_all_sorted_list/*rid_all_sorted_list\n  - struct list _rid_lo_sorted_list/*rid_lo_sorted_list\n  - struct prefix rid_user_assigned\n\n* router-id.c/router-id.h:\n\n  A new parameter \"vrf_id\" is added to all the router-id APIs.\n  Their operations are done only within the specified VRF.\n\n  A new command \"router-id A.B.C.D vrf N\" is added to allow\n  manual router-id for any VRF.\n\n  The old router_id_init() function is splitted into two:\n  - router_id_cmd_init(): it only installs the commands\n  - router_id_init(): this new one initializes the variables for\n                      a specified VRF\n\n* zebra_rib.c: Add new functions zebra_vrf_get/lookup() called\n               from router-id.c.\n\n* main.c: Replace router_id_init() with router_id_cmd_init() and\n          call the new router_id_init() in zebra_vrf_new().\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "7aaf4ea990398335bd40b56cc9586ab6a7178a4f",
      "tree": "12800739e1a926cff27d4d676323be35318ef8ac",
      "parents": [
        "8970f74ec77f93eb862ab8803d9d7c76c7128940"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:06 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 07:48:34 2015 +0200"
      },
      "message": "zebra: configure static routes in any VRF\n\nIntroduce new commands to configure static routes in any VRF, by\nappending the old static route commands with a new parameter\n\"vrf N\".\n\nA new parameter \"const char *vrf_id_str\" is added to the functions\nzebra_static_ipv4() and static_ipv6_func() to get the configured\nVRF ID.\n\nA new member \"vrf_id\" is added to the \"struct static_ipv4\" and\n\"struct static_ipv6\", indicating which VRF this static route is\nconfigured in.\n\nBut till now, no interface can exist in any non-default VRF. So\nthese static routes in non-default VRFs are kept inactive.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8970f74ec77f93eb862ab8803d9d7c76c7128940",
      "tree": "9659720ad515d0aea454ab42bc424ea34150f7b9",
      "parents": [
        "1885d0a5274cd78e46ad6c22171a5240a2f27f64"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:05 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 07:48:34 2015 +0200"
      },
      "message": "zebra: lookup the address in all VRFs when set the route-map rule \"set src\"\n\nWhen configuring the route-map rule \"set src A.B.C.D\", it checked\nwhether the source address exists on some interface.\n\nNow it checks the source address throughout all VRFs.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "1885d0a5274cd78e46ad6c22171a5240a2f27f64",
      "tree": "acaf9496dcdd722400d5634e58180f17350cc0b6",
      "parents": [
        "4364ee5b6f65008fe19225f05e489ad8257a7df8"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:04 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 07:48:34 2015 +0200"
      },
      "message": "zebra: let the route-map rule \"match interface\" work for VRFs\n\nIntroduce a new \"struct nexthop_vrfid\" to specify a nexthop together\nwith the VRF ID it belongs to.\n\nThus in route_match_interface(), we can lookup the interface from\nthe correct VRF.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "4364ee5b6f65008fe19225f05e489ad8257a7df8",
      "tree": "dd6b5e9e5e5e7cf5c212b3b9182d6231d8166e97",
      "parents": [
        "0d0686f98e64017415071e590bde262f0ab5a4c9"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:03 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 07:48:30 2015 +0200"
      },
      "message": "zebra: show routes in a specified VRF or all VRFs\n\nThe present \"show ip[v6] [m]route [xxx]\" and \"show ip rpf [xxx]\"\ncommands now show routes only in the default VRF.\n\nA new option is introduced to show routes in a specified VRF:\n    show ip[v6] [m]route [xxx] vrf N\n    show ip rpf [xxx] vrf N\n\nand a new option is used to show routes through all VRFs:\n    show ip[v6] [m]route [xxx] vrf all\n    show ip rpf [xxx] vrf all\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\n[DL: conflicts resolved]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "0d0686f98e64017415071e590bde262f0ab5a4c9",
      "tree": "a8ffef2548d24ce9a7662a20573d2a26a8e17142",
      "parents": [
        "a2854770ff839553c9444193e84a1593645fa848"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:02 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 07:46:17 2015 +0200"
      },
      "message": "zebra: let FIB stand for its respective VRF\n\nA new member \"vrf_id\" is added to \"struct rib\", reflecting the VRF\nwhich it belongs to.\n\nA new parameter \"vrf_id\" is added to the relative functions where\nneed, except those:\n- which already have the parameter \"vrf_id\"; or\n- which have a parameter in type of \"struct rib\"; or\n- which have a parameter in type of \"struct interface\".\n\nAll incoming routes are set to default VRF.\n\nIn fact, all routes in FIB are kept in default VRF. And the logic\nis not changed.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\n[DL: conflicts fixed + compile warning fix]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a2854770ff839553c9444193e84a1593645fa848",
      "tree": "f10e20591ccf74ae1e5a9015cb9dd6aadfecd67d",
      "parents": [
        "471ea39ce54537194ff2f22420589ddec5ef5ada"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:01 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 07:22:58 2015 +0200"
      },
      "message": "zebra: show interfaces in a specified VRF or all VRFs\n\nThe following commands only show interfaces in the default VRF:\n    show interface\n    show interface IFNAME\n    show interface description\n\nNew options are introduced to show interfaces in a specified VRF:\n    show interface vrf N\n    show interface IFNAME vrf N\n    show interface description vrf N\n\nor all VRFs:\n    show interface vrf all\n    show interface IFNAME vrf all\n    show interface description vrf all\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "471ea39ce54537194ff2f22420589ddec5ef5ada",
      "tree": "65b04ef42d4ece7e4a44d230fcc0a15f388755c4",
      "parents": [
        "5a5702fac5458d63d7a099c4db7ac387afefd2de"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:00 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 06:59:36 2015 +0200"
      },
      "message": "lib, zebra, vtysh: configure an interface in non-default VRF\n\nIntroduce a new command \"interface IFNAME vrf N\" to configure an\ninterface in the non-default VRF.\n\nTill now, only zebra uses this command. Other daemons will install\nthe command when they support multiple VRFs.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "126215c1238eb42cc92d23aefbe1fac3b204438f",
      "tree": "22910b50f39003e297efc6236711581cbf3b2ada",
      "parents": [
        "2fc97f6335dd5d7df2c285b363c6ef56bb98dcf8"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:39:58 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 06:58:12 2015 +0200"
      },
      "message": "*: call if_init()/if_terminate() from vrf_init()/vrf_terminate()\n\nLater, an interface will belong to a specific VRF, and the interface\ninitialization will be a part of the VRF initialization. So now call\nif_init() from vrf_init(), and if_terminate() from vrf_terminate().\n\nDaemons have the according changes:\n- if if_init() was called or \"iflist\" was initialized, now call\n  vrf_init() instead;\n- if if_terminate() was called or \"iflist\" was destroyed, now call\n  vrf_terminate() instead.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "2fc97f6335dd5d7df2c285b363c6ef56bb98dcf8",
      "tree": "22361093e3faf9587d055474c1163796aae94194",
      "parents": [
        "41f44a23e86a65a5cad7e5e8cafd7e935f153232"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:39:57 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 06:58:12 2015 +0200"
      },
      "message": "lib, zebra: add \"vrf_id\" into the \"struct interface\"\n\nLater, an interface will belong to a specific VRF. Now we add a\nproperty \"vrf_id\" to the \"struct interface\", and keep it as the\ndefault value 0.\n\nThis property is shown when displaying interfaces information.\nIt is also added in some logs.\n\nThis is just the preparation to move the interace list into the\n\"struct vrf\". The main logic is not changed.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "41f44a23e86a65a5cad7e5e8cafd7e935f153232",
      "tree": "1fcffa568b188ae66e5f18df09f6960522dfe564",
      "parents": [
        "395828eea809e8b2b8c5824d3639cefedd7aa9f0"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:39:56 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 06:58:12 2015 +0200"
      },
      "message": "lib, zebra: move \"struct vrf\" to be a lib module\n\nPreviously \"struct vrf\" is defined locally in zebra. Now it is moved\nto be a lib module.\n\nThis is the first step to support multi-VRF in quagga. The\nimplementation is splitted into small patches for the purpose of\neasy review.\n\n* lib:\n    \"struct vrf\" with basic members is defined in vrf.c. The member\n    \"void *info\" is for user data.\n\n    Some basic functions are defined in vrf.c for adding/deleting/\n    looking up a VRF, scanning the VRF table and initializing the\n    VRF module.\n\n    The type \"vrf_id_t\" is defined specificly for VRF ID.\n\n* zebra:\n    The previous \"struct vrf\" is re-defined as \"struct zebra_vrf\";\n    and previous \"vrf\" variables are renamed to \"zvrf\".\n\n    The previous \"struct vrf\" related functions are removed from\n    zbera_rib.c. New functions are defined to maintain the new\n    \"struct zebra_vrf\".\n\n    The names vrf_xxx are reserved for the functions in VRF module.\n    So:\n    - the previous vrf_table() are renamed to zebra_vrf_table();\n    - the previous vrf_static_table() are renamed to\n      zebra_vrf_static_table().\n\n    The main logic is not changed.\n\n    BTW: Add a statement to zebra_snmp.c telling that the SNMP is\n         running only for the MIBs in the default VRF.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    }
  ],
  "next": "be6335d682c5ee1b6930345193eda875705fbab2"
}
