)]}'
{
  "log": [
    {
      "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": "12bbd62112724483f72c4040a4c4b585aff8eb54",
      "tree": "74a4bca406b97b8f7b1ff015bbe8559bdafbb7cb",
      "parents": [
        "d8d5c60ecfab4dd609a07b4baa00d735f59002b9"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 02:26:44 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "lib: add getgrouplist() for Solaris\n\nOf course Solaris doesn\u0027t have getgrouplist()...\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d8d5c60ecfab4dd609a07b4baa00d735f59002b9",
      "tree": "e4b331c785e947a1a9685d2767ae656e2c2edbb9",
      "parents": [
        "cbc3f5232af5cacd6f88f2124c864bb91e851cde"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 02:19:46 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "build: make libraries self-reliant\n\nlibospf and libospfclient both need libzebra, so they should link\nagainst it. The days of libtool propagating upwards such dependencies\nare nearing their end...\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "cbc3f5232af5cacd6f88f2124c864bb91e851cde",
      "tree": "a786b63b29a006ab7b6120525c08791e89d99869",
      "parents": [
        "a4065069e6bdd0bc7475312530b0e9457f818e0d"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 02:18:23 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "pimd: use IPPROTO_IP (not SOL_IP) for IP_PKTINFO\n\nSolaris uses the same socket API for IP_PKTINFO as Linux, but doesn\u0027t\nhave a SOL_IP define.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a4065069e6bdd0bc7475312530b0e9457f818e0d",
      "tree": "b983314c1b7152fe7d351c99e79a7190d44ef363",
      "parents": [
        "ce93c34d51ea30d1ba4f699af5601502bbbbcdf8"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 02:12:23 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "ospf6d: fix uninitialized warning in SNMP\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ce93c34d51ea30d1ba4f699af5601502bbbbcdf8",
      "tree": "23b0233a0a7517a9ab5533e96c3fc009b7351c22",
      "parents": [
        "089e5eb7310683be6806726dbf7b7c94b1b66bfb"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 02:11:45 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "ospfd: fix unused warning in ospf_write\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "089e5eb7310683be6806726dbf7b7c94b1b66bfb",
      "tree": "15e431679f2fa9dc9880e9690bb9a11f9545a428",
      "parents": [
        "821df2cf18e5978cc7ab532a8695444380d08270"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 02:03:36 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "build/solaris: drop duplicate __EXTENSION__ define\n\n__EXTENSION__ is already defined in config.h by autoconf; drop the\nduplicate from zebra.h.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "821df2cf18e5978cc7ab532a8695444380d08270",
      "tree": "f306ad0e31d572c44193b5d709b4b3915ea89d90",
      "parents": [
        "ca8ec20b017393dbe91ff9e5ae2b7ff12872f869"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 01:53:09 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:45 2015 -0700"
      },
      "message": "*: make sure zebra.h is always included first\n\nzebra.h pulls in config.h, which results in fiddling with things like\n__FILE_OFFSET_BITS. It must always be included first, in order to set\nflags that influence the compiler via \u003cfeatures.h\u003e.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ca8ec20b017393dbe91ff9e5ae2b7ff12872f869",
      "tree": "50e8e04092234deb5d7c3534f4b7cb16d5308f99",
      "parents": [
        "d3ac733b41b69826ac4b5a86b881f33f3d383941"
      ],
      "author": {
        "name": "Michael Rossberg",
        "email": "michael.rossberg@tu-ilmenau.de",
        "time": "Tue Sep 29 14:32:14 2015 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Sep 30 16:51:25 2015 +0100"
      },
      "message": "ospf6d: Fix for fast OSPF convergence\n\nFixed use of OSPF_MIN_LS_ARRIVAL, which changed its unit from\nseconds to milliseconds\n"
    },
    {
      "commit": "d3ac733b41b69826ac4b5a86b881f33f3d383941",
      "tree": "fc994220633cbc366d1d15fc8ea2619250efe582",
      "parents": [
        "1994dc81458d646120659b543ad7ffc023cd8579"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Mon Aug 24 10:19:10 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:46 2015 +0100"
      },
      "message": "bgpd: \u0027set comm-list delete\u0027 stops as soon as it hits a community-list entry with a deny\n\n\u0027set comm-list delete\u0027 stops as soon as it hits a community-list entry with\na deny\n\nReviewed By: sharpd@cumulusnetworks.com\nTesting Done:\n\n\u0027set comm-list FOO delete\u0027 stops evaluating the community-list as soon as\nwe hit\nthe first \"delete\" statement. This makes it impossible to use\ncommunity-lists\nwhere you deny some subset of communities to delete and then permit all of\nthe\nothers.\n\nThis patch changes the behavior so that we no longer exit the\ncommunity-list at\nthe first delete statement. Here is our baseline, we are receiving multiple\ncommunities from 10.1.1.2 for the 10.1.3.0/24 prefix.\n\nqct-ly6-04# show ip bgp 10.1.3.0/24\n  BGP routing table entry for 10.1.3.0/24\n  Paths: (1 available, best #1, table Default-IP-Routing-Table)\n  Not advertised to any peer\n  Local\n  10.1.1.2 (metric 20) from 10.1.1.2 (10.1.1.2)\n    Origin IGP, metric 0, localpref 100, valid, internal, best\n    Community: 1:1 1:2 1:3 20:1 20:2 20:3 99:1\n    Last update: Wed Mar 4 13:50:36 2015\n\nqct-ly6-04#\n\nWe apply the following FOO route-map inbound to this peer and soft clear\nthe peer\n!\nip community-list expanded BAD_COMMS permit 99:.*\nip community-list expanded BAD_COMMS deny 1:.*\nip community-list expanded BAD_COMMS permit 20.*\n!\nroute-map FOO permit 10\nset comm-list BAD_COMMS delete\n!\nrouter bgp 10\nneighbor 10.1.1.2 route-map FOO in\n!\n\nqct-ly6-04# clear ip bgp * soft in\nqct-ly6-04# show ip bgp 10.1.3.0/24\n  BGP routing table entry for 10.1.3.0/24\n  Paths: (1 available, best #1, table Default-IP-Routing-Table)\n  Not advertised to any peer\n  Local\n  10.1.1.2 (metric 20) from 10.1.1.2 (10.1.1.2)\n    Origin IGP, metric 0, localpref 100, valid, internal, best\n    Community: 1:1 1:2 1:3\n    Last update: Wed Mar 4 13:51:12 2015\n\nqct-ly6-04#\nqct-ly6-04#\n\nWe deleted all communities flagged as \"permit\" by the BAD_COMMS\ncommunity-list\nwhile leaving the ones matched by \"deny 1:.*\" alone.\n\n #endif /* _QUAGGA_BGP_COMMUNITY_H */\n\n\u0027set comm-list delete\u0027 stops as soon as it hits a community-list entry with a deny\n\nTicket: CM-3513\nReviewed By: sharpd@cumulusnetworks.com\nTesting Done:\n\n\u0027set comm-list FOO delete\u0027 stops evaluating the community-list as soon as we hit\nthe first \"delete\" statement. This makes it impossible to use community-lists\nwhere you deny some subset of communities to delete and then permit all of the\nothers.\n\nThis patch changes the behavior so that we no longer exit the community-list at\nthe first delete statement. Here is our baseline, we are receiving multiple\ncommunities from 10.1.1.2 for the 10.1.3.0/24 prefix.\n\nqct-ly6-04# show ip bgp 10.1.3.0/24\n  BGP routing table entry for 10.1.3.0/24\n  Paths: (1 available, best #1, table Default-IP-Routing-Table)\n  Not advertised to any peer\n  Local\n  10.1.1.2 (metric 20) from 10.1.1.2 (10.1.1.2)\n    Origin IGP, metric 0, localpref 100, valid, internal, best\n    Community: 1:1 1:2 1:3 20:1 20:2 20:3 99:1\n    Last update: Wed Mar 4 13:50:36 2015\n\nqct-ly6-04#\n\nWe apply the following FOO route-map inbound to this peer and soft clear the peer\n!\nip community-list expanded BAD_COMMS permit 99:.*\nip community-list expanded BAD_COMMS deny 1:.*\nip community-list expanded BAD_COMMS permit 20.*\n!\nroute-map FOO permit 10\nset comm-list BAD_COMMS delete\n!\nrouter bgp 10\nneighbor 10.1.1.2 route-map FOO in\n!\n\nqct-ly6-04# clear ip bgp * soft in\nqct-ly6-04# show ip bgp 10.1.3.0/24\n  BGP routing table entry for 10.1.3.0/24\n  Paths: (1 available, best #1, table Default-IP-Routing-Table)\n  Not advertised to any peer\n  Local\n  10.1.1.2 (metric 20) from 10.1.1.2 (10.1.1.2)\n    Origin IGP, metric 0, localpref 100, valid, internal, best\n    Community: 1:1 1:2 1:3\n    Last update: Wed Mar 4 13:51:12 2015\n\nqct-ly6-04#\nqct-ly6-04#\n\nWe deleted all communities flagged as \"permit\" by the BAD_COMMS community-list\nwhile leaving the ones matched by \"deny 1:.*\" alone.\n"
    },
    {
      "commit": "1994dc81458d646120659b543ad7ffc023cd8579",
      "tree": "ee6179d70112a20038568a95dfa7e526dd7de8c9",
      "parents": [
        "c8394ace7081ef0e71f3d162067c83c2629fc088"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Thu Sep 17 10:15:59 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:46 2015 +0100"
      },
      "message": "bgpd: If route-map does not exist DENY for redistribute statements\n\nUpon usage of a route-map statement in bgp, if the route-map does not exist\nit turns into a implicit ALLOW, this causes issues in a wide variety\nof scenarios.\n\nWithout this fix:\n!\nrouter bgp 100\n bgp router-id 10.0.2.15\n redistribute static route-map FOOEY\n!\nip route 33.33.33.33/32 eth1\nip route 44.44.44.44/32 eth1\n!\n\nNow look at show ip bgp:\nshow ip bgp:\n\n   Network          Next Hop            Metric LocPrf Weight Path\n*\u003e 33.33.33.33/32   0.0.0.0                  0         32768 ?\n*\u003e 44.44.44.44/32   0.0.0.0                  0         32768 ?\n\nWith this fix:\n\nshow ip bgp:\n   Network          Next Hop            Metric LocPrf Weight Path\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by: Donald Sharp \u003csharpd@cumulusnetworks.com\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": "75daab1784f515104ceef747d134981ecee7b0af",
      "tree": "59568423721f1ce51699451390e735ee07d93a7f",
      "parents": [
        "e472b8a5141b91a4bb50f8ff55540cd601321572"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Thu Sep 24 10:26:55 2015 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:46 2015 +0100"
      },
      "message": "pimd: Fix compile warning (error with Werror) on BSD\n\n* ioctl commands can vary in type between systems, cast to an unsigned long\n  before passing to format command.\n"
    },
    {
      "commit": "e472b8a5141b91a4bb50f8ff55540cd601321572",
      "tree": "bd9045eface182f1101593a60138c70c0b77f451",
      "parents": [
        "44d03fd59eb7c9f83afcfbafbe014c95e0a8f539"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Sep 08 15:19:55 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:45 2015 +0100"
      },
      "message": "pimd: Remove stdout zlog changes\n\nQuagga start has unnecessary pim messages to stdout.  Causing some confusion.\nLogging is already saving this information in pimd.log\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "44d03fd59eb7c9f83afcfbafbe014c95e0a8f539",
      "tree": "2ca150c3e596814b3fcb848df872073928bf65d4",
      "parents": [
        "26b663da7ea8a3efae816d6e7fda293bdc1082f5"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Sep 08 15:02:07 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:45 2015 +0100"
      },
      "message": "pimd: Fix leaked fd\n\nWhen caling pim_sock_open if the failure cause happens, however\nunlikely, don\u0027t leak the fd on failure.\n\nSigned-off-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": "8965be4baaa1a4c619cbb4a8a10d15a72d80b60d",
      "tree": "86d0e591d014f4d6a7f1f6b69fd85e1fef3bfdd0",
      "parents": [
        "567a638fc7aee31c9421159140b8e18b83a099b3"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Sep 04 14:21:23 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:45 2015 +0100"
      },
      "message": "vtysh: allow --with-libpam to build with --enable-werror\n\nThe function vtysh_pam fails the build with --enable-werror enabled\nbecause it is a static function not declared as such\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "567a638fc7aee31c9421159140b8e18b83a099b3",
      "tree": "f56772e9d62e6115c058c1d2aace2fc41498777c",
      "parents": [
        "04a3aabf58d95d01c4c8168eeff43cf9d9892eee"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Aug 19 21:22:17 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:45 2015 +0100"
      },
      "message": "vtysh: Add missing show thread/work-queues commands\n\n\u0027show thread cpu ..\u0027 and \u0027show work-queues\u0027 are missing\nfrom vtysh, but are available from telnet.\n\nThis commit adds these commands to the vtysh interface.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "04a3aabf58d95d01c4c8168eeff43cf9d9892eee",
      "tree": "c810fdc3ff48d185bb34ce73e986a2c88da3780f",
      "parents": [
        "0bc874b88cf86fca4b18f3672a441ed142fc499d"
      ],
      "author": {
        "name": "Nicolas Dichtel",
        "email": "nicolas.dichtel@6wind.com",
        "time": "Thu Sep 03 10:47:43 2015 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:45 2015 +0100"
      },
      "message": "vrf: add a runtime check before playing with netns\n\nThis patch adds a runtime check to determine if netns are available. Some\nsystems like OpenWRT have the system call setns() but don\u0027t have the kernel\noption CONFIG_NET_NS enabled.\n\nReported-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nTested-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "0bc874b88cf86fca4b18f3672a441ed142fc499d",
      "tree": "35781fe9f0d71c7df85fe07c3461553eb4901215",
      "parents": [
        "fbc3e97d747862fd47f711c9f15b8166bdf94b18"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Jul 29 19:16:13 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:44 2015 +0100"
      },
      "message": "build/arm: Arm compilation warning fix\n\nThe arm cross compiler is issuing warnings for signed/unsigned\ncomparisons for ntohs.  ntohs returns a unsigned int, while\nthe counting variables are signed.  Fixed to allow -Werror\nto work properly\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "fbc3e97d747862fd47f711c9f15b8166bdf94b18",
      "tree": "1474fb1b2c1210231731bfdbc195da31fd3d7c02",
      "parents": [
        "4fdb5f401eb277fa54d80e99d241bd9b03895a6a"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Aug 12 14:32:47 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:44 2015 +0100"
      },
      "message": "lib: Remove unused \u0027show memory XXX\u0027 functionality\n\nThe \u0027show memory XXXX\u0027 functionality is not used at all.\nThis removes the unused code\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "4fdb5f401eb277fa54d80e99d241bd9b03895a6a",
      "tree": "9048bb26214861b9bef418c7d5bee5f213bf5d6f",
      "parents": [
        "a9d4cb33faa6af622240190a80f41c4672374925"
      ],
      "author": {
        "name": "Denil Vira",
        "email": "denil@cumulusnetworks.com",
        "time": "Thu Jul 23 06:52:16 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:44 2015 +0100"
      },
      "message": "lib: Fix Free Pointer dereference in lib/filter.c\n\nCoverity Scan ID 23056. access is accessed after free in access_list_delete\n\nSigned-off-by: Denil Vira \u003cdenil@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "a9d4cb33faa6af622240190a80f41c4672374925",
      "tree": "9590bb1715d7418b50a742a3c83363d4e4b67755",
      "parents": [
        "f733280419f18b1a0e3b06ec3681781689d57053"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Thu Sep 17 10:54:25 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:44 2015 +0100"
      },
      "message": "lib/zclient: Consolidate error reporting for zclient_read_header\n\nAll functions that call zclient_read_header immediately turn around\nand check to ensure that the version and marker fields are correct\nMove this code into zclient_read_header\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "f733280419f18b1a0e3b06ec3681781689d57053",
      "tree": "95e34d98165eac4245f5b51cb2727a6b57f88259",
      "parents": [
        "e675678789b11d175a08a9e0be73917aa8f23a15"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Jul 17 22:36:57 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:44 2015 +0100"
      },
      "message": "lib/command: Fix optional arguments with description interactions\n\nIf you have a cli like this:\n\"neighbor WORD interface {v6only}\"\n\nWhen in the cli you hit ? after entering v6only you get this:\n\ntor-11(config-router)# neighbor swp1 interface v6only\n% There is no matched command.\ntor-11(config-router)# neighbor swp1 interface v6only\n\nWith this fix we now see:\ntor-22(config-router)# neighbor swp1 interface v6only\n  \u003ccr\u003e\ntor-22(config-router)# neighbor swp1 interface v6only\n\nThis behavior is now consistent with non-optional last\narguments.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "e675678789b11d175a08a9e0be73917aa8f23a15",
      "tree": "96a700a8bd9b1f5a22c1389025c7bbf4909e8ae9",
      "parents": [
        "b3eeabee657df14509ce50d5f64262b672e87d62"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Thu Jul 16 21:18:34 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:44 2015 +0100"
      },
      "message": "build: Enable vtysh and pimd as part of default build\n\nThe default build needs vtysh and pimd as a default build so\nthat when a change is made we can catch build issues before they\nbecome a problem.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "b3eeabee657df14509ce50d5f64262b672e87d62",
      "tree": "81b2a1382e84f4c0754c6c3814222b90106f04b5",
      "parents": [
        "104576dcafe356985326b2950bfc50962702b4fb"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Sep 16 13:17:56 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:44 2015 +0100"
      },
      "message": "bgpd: Fix \u0027struct peer\u0027 memory leaks\n\npeer_delete has been written to handle the peer-\u003egroup pointer and\nto remove the peer from the peer group if it exists upon deletion being\ncalled.  Shutdown/deletion Code was intentionally setting the peer-group\nto NULL prior to calling peer_delete.  This leaked the memory associated\nwith the peer-\u003egroup because of refcnt accounting.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "104576dcafe356985326b2950bfc50962702b4fb",
      "tree": "6aac83534a8bfb991dfa5fd35a83dec044072d20",
      "parents": [
        "58a83f2f5dc24da3194bfa8255499029315e8649"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Sep 16 13:17:55 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:44 2015 +0100"
      },
      "message": "bgpd: Add some peer_lock/unlock debug code\n\nFinding memory leaks associated with the peer data structure\nis incredibly hard, add some code to allow you to find this\nleaked code when needed.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "58a83f2f5dc24da3194bfa8255499029315e8649",
      "tree": "7dc5143fac70d71814a448ed3116e389d17fe8fa",
      "parents": [
        "79969960aae4adbae1eac6caebc289fe09ddc1d6"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Sep 11 10:11:42 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:43 2015 +0100"
      },
      "message": "bgpd: Warn user that bgp is setting maximum-paths larger than MULTIPATH_NUM\n\nIn cases where a distribution has compiled zebra with a MULTIPATH_NUM\nthat is less than what the user is setting the maximum-paths in bgp,\nwarn them that some of the nexthops will not make it into zebra and\nby extension the kernel for routing.  The command is still accepted.\n\ndell-s6000-02(config)# router bgp 100\ndell-s6000-02(config-router)# maximum-paths 3\n% Warning: maximum-paths set to 3 is greater than 2 that zebra is compiled to support\ndell-s6000-02(config-router)# maximum-paths ibgp 44\n% Warning: maximum-paths set to 44 is greater than 2 that zebra is compiled to support\ndell-s6000-02(config-router)#\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "79969960aae4adbae1eac6caebc289fe09ddc1d6",
      "tree": "a915a98d648f6a8ff0aab2754e46e2398be23d15",
      "parents": [
        "a752c3be8c2436941311788f2e7b644a2af0fd65"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Aug 19 21:27:24 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:43 2015 +0100"
      },
      "message": "bgpd: Fix small memory leak in str2prefix_rd\n\nstr2prefix_rd has a memory leak.  This commit fixes that issue\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "a752c3be8c2436941311788f2e7b644a2af0fd65",
      "tree": "78637b4cbf2f1dbb98d0d30207ad8c252493496a",
      "parents": [
        "e2a9258c16bce1b3797efb9be354d20d68236194"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Aug 18 08:48:53 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:43 2015 +0100"
      },
      "message": "bgpd: Remove unnecessary stream_dup calls\n\nBGP packet handling creates a stream to handle data for an outgoing packet.\nIn some cases the code would create a new stream, add data, then duplicate\nthe stream and then free the original stream.  This change removes\nthe unnecessary duplication, which entails a malloc and memcpy.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "e2a9258c16bce1b3797efb9be354d20d68236194",
      "tree": "f08790964b068afe0724518774dfe315a75200ca",
      "parents": [
        "57cd5e7a2623258e1a095d63e0faaad2cddf61e8"
      ],
      "author": {
        "name": "Denil Vira",
        "email": "denil@cumulusnetworks.com",
        "time": "Tue Aug 11 13:34:59 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:43 2015 +0100"
      },
      "message": "bgpd: Fix memory leak in bgpd/bgp_route.c\n\nIn function bgp_aggregate_add, variables \u0027aspath\u0027 and \u0027community\u0027\nare malloced but not guaranteed to be freed before the function\nreturns.\n\nSigned-off-by: Denil Vira \u003cdenil@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "57cd5e7a2623258e1a095d63e0faaad2cddf61e8",
      "tree": "ef9652852d52217f032f69708a33de4dce384010",
      "parents": [
        "7053d8176ce502aabe39bf167f01354654bde5df"
      ],
      "author": {
        "name": "Denil Vira",
        "email": "denil@cumulusnetworks.com",
        "time": "Mon Aug 10 12:46:14 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:43 2015 +0100"
      },
      "message": "bgpd: Variable reuse in bgpd/bgpd.c\n\nIn bgp_delete(), variables \u0027node\u0027 and \u0027next\u0027 are overwritten in\nthe nested for loop.\n\nSigned-off-by: Denil Vira \u003cdenil@cumulusnetworks.com\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "7053d8176ce502aabe39bf167f01354654bde5df",
      "tree": "95c7398ecd35ea875111cf896a78ed5038b62755",
      "parents": [
        "3921cc54445417aa1ca22668063701a626e93098"
      ],
      "author": {
        "name": "Denil Vira",
        "email": "denil@cumulusnetworks.com",
        "time": "Thu Jul 23 06:52:18 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:43 2015 +0100"
      },
      "message": "bgpd: Fix useless call in bgpd/bgp_mplsvpn.c\n\nCoverity scan ID : 1302528. Calling \"decode_label(pnt)\" is only useful for its return value, which is\nignored. Removed the call.\n\nSigned-off-by: Denil Vira \u003cdenil@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "3921cc54445417aa1ca22668063701a626e93098",
      "tree": "700432e3eb6802c56ae3fd823505c04ef659dad3",
      "parents": [
        "2820a01eed1c616d490ddbfd17793c19597459d1"
      ],
      "author": {
        "name": "Balaji",
        "email": "balajig81@gmail.com",
        "time": "Sat May 16 23:12:17 2015 +0530"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:43 2015 +0100"
      },
      "message": "bgpd: Addition of \"show ip bgp dampening\" command tree\n\nThis patch addresses David\u0027s comments and contains:\n\n1.Addition of show ip bgp dampening command tree\n2.Addition of show ip bgp dampening parameters to display BGP dampening\n  parameters.\n\nSigned-off-by: Balaji.G \u003cbalajig81@gmail.com\u003e\n"
    },
    {
      "commit": "2820a01eed1c616d490ddbfd17793c19597459d1",
      "tree": "6a0e418ca25166bd2edcc23a070b4c23d6f99a81",
      "parents": [
        "782fb0770080d0e2970fc63af8645e82543aa4d0"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Jun 24 15:27:21 2015 +0300"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:42 2015 +0100"
      },
      "message": "bgpd: Make bgp_info_cmp robust to paths that do not have su_remote info\n\nMy original su_remote \u003d\u003d NULL check is not correct. It seems that\n\n* bgp_route.c: (bgp_info_cmp) Some bgp_info is compared with su_remote\u003dNULL\n  and it\u0027s supposed to be perfectly legal.  E.g.  configured subnet announces\n  (\"network a.b.c.d/n\"). Ensure bgp_info_cmp is robust if such a path gets\n  as far as the neighbour address comparison step.\n"
    },
    {
      "commit": "782fb0770080d0e2970fc63af8645e82543aa4d0",
      "tree": "ee4c4f3d0f30fc694865c57484d8b453f2775bd9",
      "parents": [
        "13c2a3db503fde67f647fa58fd4e1077517ebb5c"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Tue Sep 15 16:17:22 2015 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:42 2015 +0100"
      },
      "message": "bgpd: Compile fix for clearing-completion FSM fix, using workqueue helper.\n"
    },
    {
      "commit": "13c2a3db503fde67f647fa58fd4e1077517ebb5c",
      "tree": "506bead8b2040e9c216f18e76df3091a5924a31f",
      "parents": [
        "e8441a81f6c9f73bc8a25669003abffb40066703"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Tue Sep 15 16:16:42 2015 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:42 2015 +0100"
      },
      "message": "lib/workqueue: Add trivial work_queue_is_scheduled helper\n"
    },
    {
      "commit": "e8441a81f6c9f73bc8a25669003abffb40066703",
      "tree": "4d15512b9a10d863fa831d9b611f1d9092ee74ae",
      "parents": [
        "7ef4221c3f85121edb68a6a54ebd6bb167408e47"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Tue Sep 15 16:15:27 2015 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:42 2015 +0100"
      },
      "message": "build/lib: Check for and include stdbool.h by default\n\n* stdbool.h should be widely supported by now, and the \u0027bool\u0027 type makes\n  more semantic sense than an integer type for boolean values.\n"
    },
    {
      "commit": "7ef4221c3f85121edb68a6a54ebd6bb167408e47",
      "tree": "fc347b5fa1935a8ef801c3af4b75167af0716934",
      "parents": [
        "234e5c8d5a35339fb319affb952581bf5abb48a7"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Mon Mar 30 06:32:52 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:42 2015 +0100"
      },
      "message": "bgpd: Fix race in clearing completion\n\nWhen a peer that is Established goes down, it is moved into the Clearing\nstate to facilitate clearing of the routes received from the peer - remove\nfrom the RIB, reselect best path, update/delete from Zebra and to other\npeers etc. At the end of this, a Clearing_Completed event is generated to\nthe FSM which will allow the peer to move out of Clearing to Idle.\n\nThe issue in the code is that there is a possibility of multiple Clearing\nCompleted events being generated for a peer, one per AFI/SAFI. Upon the\nfirst such event, the peer would move to Idle. If other events happened\n(e.g., new connection got established) before the last Clearing_Completed\nevent is received, bad things can happen.\n\nFix to ensure only one Clearing_Completed event is generated.\n\nSigned-off-by: Vivek Venkataraman \u003cvivek@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "234e5c8d5a35339fb319affb952581bf5abb48a7",
      "tree": "1d7c03380a8a9a34e71f52e841bed2a81bece36b",
      "parents": [
        "bd4b7f1559ab5cb52bbe9dc2db9e50a032ccdbb7"
      ],
      "author": {
        "name": "Dinesh G Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Sun Feb 01 00:56:12 2015 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:42 2015 +0100"
      },
      "message": "bgpd: Only use routes from Established peers for best path selection\n\nEnsure that routes from a peer are not considered for best path\ncomparison if the peer is not in an Established state. There can\nbe a window between a peer being deleted and the background\nthread that actually clears the routes (marks them as \"removed\")\nruns during which best path may run. If this path selection\ncompared two prefixes all the way down to peer IP addresses and\none of these two peers had just been deleted, that peer would\nnot have its sockunion structures, especially su_remote, resulting\nin a BGPD exception.\n\nSigned-off-by: Vivek Venkatraman \u003cvivek@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "bd4b7f1559ab5cb52bbe9dc2db9e50a032ccdbb7",
      "tree": "158439c616739d81afa59a1b1954cc5ef9e29c02",
      "parents": [
        "b6404390a713144252b62f49a328315d1952c6d8"
      ],
      "author": {
        "name": "vivek",
        "email": "vivek@cumulusnetworks.com",
        "time": "Tue Sep 30 15:54:45 2014 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:41 2015 +0100"
      },
      "message": "bgpd: Ignore stale entry candidates during bestpath selection.\n\nDuring best path selection, if one of the candidates is a stale entry, do not\nperform the neighbor address comparison as that information is invalid for\nthe stale entry. Attempting to perform the comparison results in a bgpd\nexception.\n\nSigned-off-by: Vivek Venkataraman \u003cvivek@cumulusnetworks.com\u003e\nReviewed-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "b6404390a713144252b62f49a328315d1952c6d8",
      "tree": "5a1662864effa82f5ed60b853401407d3d73ed9e",
      "parents": [
        "b075e8728f650b0850e20fdf8dde467440a24b28"
      ],
      "author": {
        "name": "Fernando Soto",
        "email": "fsoto@bluecatnetworks.com",
        "time": "Mon May 11 20:52:00 2015 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:41 2015 +0100"
      },
      "message": "ospfd: trap on state change seems to send incorrect value for ospfNbrState\n\nThe ospfNbrState in the ospf trap sent from ospfd shows an incorrect state.\n\nFor example, when the connection goes down, the ospfNbrState in the trap is\nsent as \u00278\u0027 (full).  When the connection is reestablished, the state is sent\nas \u00277\u0027 (loading).\n\nThe reason seems to be that the trap is sent from nsm_notice_state_change()\nbefore the state is actually updated by calling nsm_change_state().\n\nAfter applying the attached patch, the traps are sent with nbrState \u00271\u0027 when\nthe connection goes down and \u00278\u0027 when it goes back up.\n\nBugzilla #833 https://bugzilla.quagga.net/show_bug.cgi?id\u003d833\n"
    },
    {
      "commit": "b075e8728f650b0850e20fdf8dde467440a24b28",
      "tree": "62966835f757e550e6e78e08611f3b4f49a64ecd",
      "parents": [
        "2ef762ed9b88e5745012c5829f8f526c95443ddf"
      ],
      "author": {
        "name": "Vystoropskyi, Sergii",
        "email": "vistorop@amazon.com",
        "time": "Sun Aug 16 13:25:36 2015 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:41 2015 +0100"
      },
      "message": "ospfd: Fix for \u0027no\u0027 + \u0027debug command\u0027 does not disable \u0027debug command\u0027\n\n\"no debug ospf packet all detail\" does not cancel \"debug ospf packet all detail\"\ndue to the code inconsistency in setting/unsetting debug flags.\n\n* ospf_dump.c: added missing flags.\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "2ef762ed9b88e5745012c5829f8f526c95443ddf",
      "tree": "8b2867c9c5938551f7e86881104dad61be3f18b6",
      "parents": [
        "c920e510d09c6c4ab63a3da5375009442a950f82"
      ],
      "author": {
        "name": "Michael Rossberg",
        "email": "michael.rossberg@tu-ilmenau.de",
        "time": "Mon Jul 27 07:56:25 2015 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:41 2015 +0100"
      },
      "message": "ospfd: Fast OSPF convergence\n\nWhen considering small networks that have extreme requirements on\navailability and thus convergence delay, the timers given in the OSPF RFC\nseem a little “conservative”, i.e., the delay between accepted LSAs and the\nrate at which LSAs are sent.  Cisco introduced two commands \u0027timers throttle\nlsa all’ and \u0027timers lsa arrival’, which allow operators to tune these\nparameters.\n\nI have been writing a patch to also support \u0027timers lsa arrival’ fully and\n‘timers throttle lsa all’ (without the throttling part) also in quagga.\n"
    },
    {
      "commit": "c920e510d09c6c4ab63a3da5375009442a950f82",
      "tree": "4ef39abc6d53eed748cd7898621dae21a776e550",
      "parents": [
        "794c4735f81289d9fc603b5fd5e4a5d39dbb5ca5"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Tue Sep 08 15:31:45 2015 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:41 2015 +0100"
      },
      "message": "ospfd: Fix bug in 94266fa822ba, nbr_self rebuild didn\u0027t add valid nbr_self\n\n* 94266fa822ba \"ospfd: Self nbrs needs to be rebuilt when router ID changes.\"\n  deleted the nbr_self, and added it back, but ospf_nbr_add_self doesn\u0027t\n  actually create the nbr_self - it assumes it\u0027s already there. Leading\n  to use after free and crashes after a router-id change.\n* ospfd/ospf_neighbor.{c,h}: (ospf_nbr_self_reset) Little helper to reset the\n  nbr_self correctly.\n* ospf_interface.c: (ospf_if_cleanup) moved code to ospf_nbr_self_reset\n* ospfd.c: (ospf_router_id_update) Use ospf_nbr_self_reset instead of doing\n  the reset badly, fixing 94266fa822ba.\n"
    },
    {
      "commit": "794c4735f81289d9fc603b5fd5e4a5d39dbb5ca5",
      "tree": "b81f6a549fe0916bdf25b5a5a88745c34a4e816d",
      "parents": [
        "a29c8a23a35b3f94c6aea5b3b7578b5dbf81ad71"
      ],
      "author": {
        "name": "Nicolas Dichtel",
        "email": "nicolas.dichtel@6wind.com",
        "time": "Wed Sep 16 09:42:36 2015 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:41 2015 +0100"
      },
      "message": "bgpd/pimd: fix zAPI parsing\n\nCommit c99f3481a598 has changed the API. Now, the vrfid has been added in\nthe header, thus we must read it before parsing the rest of the message.\n\nTo ease code maintenance, let\u0027s add a new function to read a zAPI header.\n\nFixes: c99f3481a598 (\"*: add VRF ID in the API message header\")\nReported-by: Martin Winter \u003cmwinter@opensourcerouting.org\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\nTested-by: Martin Winter \u003cmwinter@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a29c8a23a35b3f94c6aea5b3b7578b5dbf81ad71",
      "tree": "3308184cd4316dcf42a496ff16e0ea2dad8f15d5",
      "parents": [
        "52c0bc739b1184621525e64720b944268d6b0eeb"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Mon Sep 21 10:26:02 2015 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:41 2015 +0100"
      },
      "message": "Revert \"ospfd: Use route_node_lookup() instaed of route_node_get()\"\n\nThis reverts commit c9b07581e0df8867499e97e08b382b6d3cc9c4c4.\n\nSee: http://patchwork.quagga.net/patch/410/\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": "c8ee940cc695cbcf9c0156ee6f72730f1fff9814",
      "tree": "135552b88429e1b9a6c8d08ad45bd19eaf39032d",
      "parents": [
        "06cc655c0345d610eb946bd41968caa03dc118ed"
      ],
      "author": {
        "name": "Amritha Nambiar",
        "email": "amritha.nambiar@intel.com",
        "time": "Mon Aug 24 16:40:14 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 03 16:29:18 2015 +0100"
      },
      "message": "isisd: Attached-bit in LSP header\n\nSet/reset attached-bit in LSP header:\n    This patch provides support for set/reset attached_bit in the LSP header.\n    In IS-IS networks, routing inter-area traffic from L1 areas is\n    accomplished by sending the traffic to the nearest L1/L2 router.\n    A L1/L2 router identifies itself by setting an attach-bit (ATT-bit) in its (LSP).\n\n    The ATT-bit in LSP can be changed using the set-attached-bit or\n    no-set-attached-bit commands (similar to ‘set-overload-bit’ and\n    \u0027no set-overload-bit’) using telnet terminal in router configuration mode.\n\n    Steps:\n    enable\n    configure terminal\n    router isis \u003cRouting area\u003e\n    set-attached-bit\n\n    V2: Removed looping through area list as this well set the bit for all\n        areas in the list. This implementation now looks exactly like the\n        current overload bit implementation.\n\n    Signed-off-by: Amritha Nambiar \u003camritha.nambiar@intel.com\u003e\n"
    },
    {
      "commit": "06cc655c0345d610eb946bd41968caa03dc118ed",
      "tree": "7bf4e19ccaf35c96b81e8202d36aa23bff0d7c0b",
      "parents": [
        "22e0224d4148e0e4fd5952020fd6ae74efd1bf93"
      ],
      "author": {
        "name": "Amritha Nambiar",
        "email": "amritha.nambiar@intel.com",
        "time": "Thu Jul 02 15:42:58 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 03 16:29:18 2015 +0100"
      },
      "message": "isisd: Add new adjacency to LSP neighbor list\n\nisis_pdu.c :\nNew adjacency did not always get added to LSP neighbor list.\n\nThe adjacencies that were created once minimum time allowed before LSP\nretransmission had surpassed, instantly got their LSP regenerated, but\nthe adjacency circuit type was not set to IIH PDU circuit type before\nthe LSP was regenerated , hence didn\u0027t pass the check for adjacency\ncircuit type in lsp_build(), and the adjacency was not added to neighbor list.\n\nWhen a new adjacency is up, to build LSP with neighbor entry corresponding\nto the adjacency, set adjacency circuit type to circuit type from hello PDU\nheader before new LSP is regenerated/built. This will result in the new\nadjacency entry getting added to the LSP neighbor list TLV.\n\nSigned-off-by: Amritha Nambiar \u003camritha.nambiar@intel.com\u003e\n"
    },
    {
      "commit": "22e0224d4148e0e4fd5952020fd6ae74efd1bf93",
      "tree": "152c51f12832812c84ffdb1b8cce9208abfe3f46",
      "parents": [
        "d2c6da209cec42c05941eff52d88f0ed7eabad48"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Aug 21 19:35:27 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 03 16:29:09 2015 +0100"
      },
      "message": "pimd: Create ability to modify hell and hold timers per interface\n\nCreate new per interface command:\n\u0027ip pim hello \u003c1-180\u003e {\u003c1-180\u003e}\u0027\n\nThe first number is the Hello Timer for this interface\nThe second number is the Hold Timer to pass to neighbors on this interface.\nThe second number is optional.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "d2c6da209cec42c05941eff52d88f0ed7eabad48",
      "tree": "31f1258990cc7d83442a057bec90c2ac57888cac",
      "parents": [
        "a031c4dd72514232296e9a570c3d701f5f33ad63"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Thu Jul 02 09:53:59 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 21 17:25:18 2015 +0100"
      },
      "message": "pimd: Change ioctl call failure from vty_out to zlog_warn\n\nThe command \u0027show ip multicast\u0027 when run, iterates over all interfaces\non the router, if you do not have pim configured on that interface\nit would generate an error message:\n\nInterface Address         ifi Vif  PktsIn PktsOut    BytesIn   BytesOut\nbr1       20.0.15.1         7   7       0       0          0          0\nswp1      169.254.0.10      3   3       0       0          0          0\nswp2      169.254.0.26      4   4       0       0          0          0\nioctl(SIOCGETVIFCNT\u003d35296) failure for interface swp3 vif_index\u003d-1: errno\u003d22: Invalid argument\nioctl(SIOCGETVIFCNT\u003d35296) failure for interface swp4 vif_index\u003d-1: errno\u003d22: Invalid argument\n\nThis fixes the issue to display this instead:\n\nInterface Address         ifi Vif  PktsIn PktsOut    BytesIn   BytesOut\nbr1       20.0.15.1         7   7       0       0          0          0\nswp1      169.254.0.10      3   3       0       0          0          0\nswp2      169.254.0.26      4   4       0       0          0          0\nswp3      0.0.0.0           5  -1       0       0          0          0\nswp4      0.0.0.0           6  -1       0       0          0          0\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "a031c4dd72514232296e9a570c3d701f5f33ad63",
      "tree": "7c155a444fa26bc8c30426ae5905c9f6f6c2fab3",
      "parents": [
        "73de55a53c78d572f63d45115681567a4c0cef65"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Thu Jul 02 13:22:49 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 21 17:25:18 2015 +0100"
      },
      "message": "pimd: Ensure new generation_id is different from previous\n\nThe RFC states that an interfaces generation_id must be changed\nif it experiences an if down.  From 4.3.1:\n\nThe GenID option contains a randomly generated\n32-bit value that is regenerated each time PIM forwarding is started\nor restarted on the interface, including when the router itself\nrestarts.\n\nSince we are only grabbing a new generation_id without comparing\nit to the previous generation_id, it is possible that random\ncan generate the exact same number.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "73de55a53c78d572f63d45115681567a4c0cef65",
      "tree": "a6e671a17ca5f9098be0c8c65665a2be0162fd68",
      "parents": [
        "76240f11e640824438605012a8e44c968bc9e5b0"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Jun 16 13:19:56 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 21 17:25:18 2015 +0100"
      },
      "message": "pimd: Stop DR election on every hello\n\nThe DR election is occurring on every hello received.\nThis is because the hello receive packet returns a 0\nfor any successfully received packet.  PIMD then looked\nat the 0 returned and did a DR election.\n\nCode was inspected for the cases where DR should happen:\n(A) Interface ip address change\n(B) DR priority in hello packet changes\n(C) Received a new neighbor on an interface\n(D) Neighbor timer pops.\n\nEach of these initiate a DR election in the code currently.\n\nTesting was initiated on a pim network:\ntor-11# show ip pim designated-router\nNonPri: Number of neighbors missing DR Priority hello option\n\nInterface Address         DR              Uptime   Elections Changes NonPri\nbr1       20.0.15.1       20.0.15.1       00:08:16         1       1      0\nswp1      169.254.0.10    169.254.0.10    00:08:16         2       1      0\nswp2      169.254.0.26    169.254.0.26    00:08:16         2       1      0\ntor-11#\n\nAs you can see Elections \u003d\u003d 2.  This is because pimd performs\nan election on (A) and (C) above.  I see no need to modify\n(A) to check if we have any knowledge of the interface before\nthis call.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "76240f11e640824438605012a8e44c968bc9e5b0",
      "tree": "9e03c16d454d0b44d1c361d97aafed950f45ea4f",
      "parents": [
        "6ae80e0d80531f602c3cb0e535c4e12bd2181b40"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Thu Jun 18 17:01:34 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 21 17:25:18 2015 +0100"
      },
      "message": "pimd: Fix first DR Election\n\nThe function pim_neighbor_new caused the dr election before\nthe addition of the neighbor to the pim_ifp-\u003epim_neighbor_list,\nin pim_neighbor_add, which is needed to properly elect the\ncorrect DR.\n\nMove the dr_election and hello trigger till after the addition\nto the list.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "6ae80e0d80531f602c3cb0e535c4e12bd2181b40",
      "tree": "2d62c703648a90b46d5a4dec680a126667246128",
      "parents": [
        "030674d7f9b2a25d4d337459ef32287de8f9879d"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Thu Jun 18 18:14:20 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 21 17:25:18 2015 +0100"
      },
      "message": "pimd: Add ability to set DR Priority for an interface\n\nFrom RFC 4601, Section 4.3.1:\n\nThe DR_Priority Option allows a network administrator to give\npreference to a particular router in the DR election process by\ngiving it a numerically larger DR Priority.  The DR_Priority Option\nSHOULD be included in every Hello message, even if no DR Priority is\nexplicitly configured on that interface.  This is necessary because\npriority-based DR election is only enabled when all neighbors on an\ninterface advertise that they are capable of using the DR_Priority\nOption.  The default priority is 1.\n\nThis modification allows the setting of the DR Priority on a per\ninterface basis.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "030674d7f9b2a25d4d337459ef32287de8f9879d",
      "tree": "a826aef3d6a95cf7816e65fef77cf39946d0463b",
      "parents": [
        "6064613154b6302606547735f0c466910a6443ea"
      ],
      "author": {
        "name": "Jafar Al-Gharaibeh",
        "email": "jafar@atcorp.com",
        "time": "Thu Jun 11 18:29:02 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 21 16:30:20 2015 +0100"
      },
      "message": "pimd: add support for configuring multicast static routes\n\nHi,\n\nThis patch adds the ability to configure multicast static routes\ndirectly into pimd. Two source files are introduced to implement the new\nfeature in addition to changes to existing files.\n\nHere is how it can be used the CLI:\n\ninterface \u003cincoming interface\u003e\nip mroute \u003coutgoing interface\u003e \u003cgroup addr\u003e                          #\nfor asm\nor ip mroute \u003coutgoing interface\u003e \u003cgroup addr\u003e \u003csource\u003e    # for ssm\n\nPlease let me know if you have any questions or concerns,\n\nRegards,\nJafar\n\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "6064613154b6302606547735f0c466910a6443ea",
      "tree": "6f30a6c896ff67c2cb6b7494f5d03d45f341f5ae",
      "parents": [
        "c9b07581e0df8867499e97e08b382b6d3cc9c4c4"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Aug 04 17:37:16 2015 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Aug 04 17:40:25 2015 +0100"
      },
      "message": "vtysh: adjust bad_cli_stomps in extract.pl.in to reflect fixes \u0026 fix build\n"
    },
    {
      "commit": "c9b07581e0df8867499e97e08b382b6d3cc9c4c4",
      "tree": "5cf4a31ba7e152a706a72b32b32939d265e8d426",
      "parents": [
        "8b84c2762ccd2d47a115824ee083d33e697a7741"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Mar 08 13:58:11 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Aug 04 16:39:27 2015 +0100"
      },
      "message": "ospfd: Use route_node_lookup() instaed of route_node_get()\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\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": "9487b4fcfc0754109e49240214e283fd58756843",
      "tree": "fba1723ffa40f3d9749b764056166e355542f7eb",
      "parents": [
        "cd557c3d766a7233490b8cf7325219ffa1398ef2"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Sat May 23 18:16:50 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 29 21:44:07 2015 +0100"
      },
      "message": "watchquagga.c does not compile without warnings\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "cd557c3d766a7233490b8cf7325219ffa1398ef2",
      "tree": "b69b7c4a2639e5acc6bdc457bbfa4752732afc28",
      "parents": [
        "08d95905acd0cbb810831429b638ac2d1604ca37"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed May 27 17:40:46 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 29 21:44:02 2015 +0100"
      },
      "message": "pim: \u0027show debugging\u0027 collision\n\nThe \u0027show debugging\u0027 cli as setup by pim collided with \u0027show debugging isis\u0027.\nFix that and clean up cli help commands to actually display correctly.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "08d95905acd0cbb810831429b638ac2d1604ca37",
      "tree": "c756e8f530aaaa2b24a3b1f50196895401eed218",
      "parents": [
        "4de398e3b676bcf041984e285dba12f229215419"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed May 27 17:57:31 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 29 21:43:51 2015 +0100"
      },
      "message": "Fixup of redhat control files to properly start pimd\n"
    },
    {
      "commit": "4de398e3b676bcf041984e285dba12f229215419",
      "tree": "e06791bda93d63d30f9187c5df8064f0f1fa9f29",
      "parents": [
        "4eaecdc403461fe59026e1ce3a217526d75eca25"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Mar 08 13:58:14 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 29 21:43:08 2015 +0100"
      },
      "message": "ospfd: ospf_nbr_nbma_set()/ospf_snmp_vl_add() add unlock\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "4eaecdc403461fe59026e1ce3a217526d75eca25",
      "tree": "fcb6ae38db620f25a5931a1867c48c0396d5d564",
      "parents": [
        "fc363cd8a02ad1ac8a6ca57013fd8c531d45926a"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Mar 08 13:58:13 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 29 21:43:03 2015 +0100"
      },
      "message": "ospfd: ospf_ls_upd_send() add missing unlock.\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "fc363cd8a02ad1ac8a6ca57013fd8c531d45926a",
      "tree": "fc821d3992d87c8b85d244ceece7f004f8a06f72",
      "parents": [
        "d5643f5a477e099a3dcae4a707ccb5ca66bfee66"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Mar 08 13:58:12 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 29 21:42:58 2015 +0100"
      },
      "message": "ospfd: ospf_ase.c, external_lsa locking fixes.\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "d5643f5a477e099a3dcae4a707ccb5ca66bfee66",
      "tree": "9c82ee88bc3173ca327f392e13862300d76f6148",
      "parents": [
        "fbb6c8650344fe72d39f538c681659e8b76a39d0"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Mar 08 13:58:10 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 29 21:42:54 2015 +0100"
      },
      "message": "ospfd: Move route_unlock_node() in ospf_ase_incremental_update()\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "fbb6c8650344fe72d39f538c681659e8b76a39d0",
      "tree": "0b896f15681a030f69d42ab7b8c061c0ee3627b5",
      "parents": [
        "94266fa822baf9b9c9e10ac03ccec8ccf3ce0c98"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Mar 08 13:58:09 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 29 21:42:45 2015 +0100"
      },
      "message": "ospfd: add missing unlock for ospf_interface_address_delete()\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "94266fa822baf9b9c9e10ac03ccec8ccf3ce0c98",
      "tree": "61cc2746b57155d6ba932aa6bdde44a40cb8d4e8",
      "parents": [
        "7f56743f7d4b3dcdae329de2de2aba820368c3d9"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Thu Nov 19 15:27:30 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 29 21:40:32 2015 +0100"
      },
      "message": "ospfd: Self nbrs needs to be rebuilt when router ID changes.\n\nSome self nbrs are identified by router_id, these needs\nto be rebuilt instead of just resetting router ID.\nPossibly one could optimize for !(virtual | ptop) links\nby doing oi-\u003enbr_self-\u003erouter_id \u003d router_id instead.\n\nRouter ID will change once after startup config has been\nread and zebra reports router ID, unless router ID has\nbeen configured in ospf.\n"
    },
    {
      "commit": "7f56743f7d4b3dcdae329de2de2aba820368c3d9",
      "tree": "22f257e60e1bf6361f35b89307d51a82554e2339",
      "parents": [
        "b1891fb9705b6085f81269dec0795f2065442047"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Jun 12 17:47:26 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jun 21 14:56:56 2015 +0100"
      },
      "message": "pimd assert when no route to source from a new igmp join\n\nWhen pim_upstream_new is called the code looks up the nexthop.\nIf there is no route to the source, the code silently ignored\nthe error returned.  When the nexthop lookup fails don\u0027t create\nthe \u0027struct pim_stream *\u0027 to return.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "b1891fb9705b6085f81269dec0795f2065442047",
      "tree": "002bccbf21caf38ec1dab8f36020b3eab7356a30",
      "parents": [
        "1934e7895ded8d9d7a76ab3f482c381bf5f6725c"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Jun 09 20:22:42 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jun 21 14:56:55 2015 +0100"
      },
      "message": "Add code to extract.pl.in to prevent further cli function overwrites\n\nCurrently extract.pl.in is used to build the vtysh cli.  When two\ndifferent cli\u0027s collide with the same command name, the original\ncli is never called, because it is dropped.  This code notes the\nsilent drop and tracks the number of drops.  If they change then\nthe code will fail the build.  The current number of drops was\nfigured out by running extract.pl and counting up the drops\nthen adding code to compare the numbers returned.\n\nIf you have added to the problem, the solution is to fix your cli\ncommand to not stomp on someone else\u0027s command.  If you have removed\na stomp, safely modify extract.pl.in as part of your commit.\n\nSigned-off-by: Donald Sharp \u003csharpd at cumulusnetworks.com\u003e\nAcked-by: Vincent Jardin \u003cvincent.jardin@6wind.com\u003e\n"
    },
    {
      "commit": "1934e7895ded8d9d7a76ab3f482c381bf5f6725c",
      "tree": "96631dc7dc52c9ed6f2143675d0e95885df8fcfc",
      "parents": [
        "f31bab4fbf367a4417784ba9873e524d42242036"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Jun 05 12:15:44 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jun 21 14:56:16 2015 +0100"
      },
      "message": "pim_mroute.h has a different version of code than linux/mroute.h provides\n\nlinux/mroutes.h and pim_mroute.h both have copies of the same structures.\nThis is causing failures in setsockopt(..., MRT_ADD_MFC,...) because\nof data structure incompatibilities between the kernel and what\npim_mroute.h was providing.  Modify the code to check for mroute.h\nand include it if necessary.  I did not modify the non linux/mroute.h\npath because I do not have other systems to test on easily.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "f31bab4fbf367a4417784ba9873e524d42242036",
      "tree": "c624feca43613e738e4756ad6b3b555c1402e465",
      "parents": [
        "771626860adfc30c00f70d993ccb8f4d7c0c0c63"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Jun 19 19:26:19 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jun 21 14:39:26 2015 +0100"
      },
      "message": "Quagga: Fix code to use srandom/random\n\nQuagga was using a mix of srand/rand and srandom/random.\nConsolidate to use srandom/random which are the POSIX\nversions of random number generators\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "771626860adfc30c00f70d993ccb8f4d7c0c0c63",
      "tree": "86335b9708c5d88c1709c36386bf72d04843d6ec",
      "parents": [
        "1ed8ce47b922b71f3b3cdd661e647bbe7ed2eca7"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Jun 19 19:26:18 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jun 21 14:39:22 2015 +0100"
      },
      "message": "PIMD: Fix code to use srandom/random\n\npimd rolled it\u0027s own solution to random #\u0027s, that was not\nterribly random.  Rely on the underlying system to generate\nrandom #\u0027s for us\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "1ed8ce47b922b71f3b3cdd661e647bbe7ed2eca7",
      "tree": "8991923fd48342254db78275f2776480b824e18d",
      "parents": [
        "84c3840c7157438b5cb2e324d184ca08ac07fb41"
      ],
      "author": {
        "name": "Wenjian Ma",
        "email": "ytmwjian@163.com",
        "time": "Fri Jun 19 10:53:26 2015 +0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jun 21 12:32:29 2015 +0100"
      },
      "message": "lib, stream: fix stream sanity checks\n\nBecause  operator \"!\" has higher priority  than \"\u0026\u0026\",\nSo we put the \"\u0026\u0026\" expression in \"()\" to check both getp and endp.\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "84c3840c7157438b5cb2e324d184ca08ac07fb41",
      "tree": "1022dc746e3c2f6498ebc94a632ce3f4f2f0c32e",
      "parents": [
        "55cfa2f190620f7c711944637659bc208970324d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Tue May 26 15:19:38 2015 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jun 21 12:31:53 2015 +0100"
      },
      "message": "bgpd: peer_uptime overflows after 1 year\n\n* bgpd.c: (peer_uptime) Wraps after 1 year, and doesn\u0027t indicate years.\n  Fix. Assume a year is 365 days, for an easy life.\n\nFixes: Bug #836\nReported-by: Rolf Hanßen\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "55cfa2f190620f7c711944637659bc208970324d",
      "tree": "13e8a607e6e552da0f4218b4a8473dbcd738845b",
      "parents": [
        "c99f3481a598e9cadd1de96714f6b5df9ad85c4a"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Thu Jul 03 18:24:34 2014 +0800"
      },
      "committer": {
        "name": "Nicolas Dichtel",
        "email": "nicolas.dichtel@6wind.com",
        "time": "Wed Jun 03 17:26:27 2015 +0200"
      },
      "message": "lib, vtysh: support multiple VRFs by using linux netns\n\nWe realize VRFs with linux netns by default. The main job is\nto associate a VRF with a netns. Currently this is done by\nthe configuration:\n\n  [no] vrf N netns \u003cnetns-name\u003e\n\nThis command is also available in vtysh and goes to only\nzebra, because presently only zebra supports multiple VRF.\n\nA file descriptor is added to \"struct vrf\". This is for the\nassociated netns file. Once the command \"vrf N netns NAME\"\nis executed, the specified file is opened and the file\ndescriptor is stored in the VRF N. In this way the\nassociation is formed.\n\nIn vrf_socket(), we first switch to the specified VRF by\nusing the stored file descriptor, and then can allocate\na socket which is working in the associated netns.\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\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": "fb2bfc1ba2416c1561bc9bfb30dfb5adf3e65616",
      "tree": "361484e61445a5e7efc9dfab2d6c47cd4c63846c",
      "parents": [
        "ac19a449261bf69e83827f4bb0c6e5526277b41b"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:08 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 07:48:34 2015 +0200"
      },
      "message": "lib/vrf: enable / disable a VRF\n\nA new API vrf_is_enabled() is defined to check whether a VRF is ready\nto use, that is, to allocate resources in that VRF. Currently there\u0027s\nonly one type of resource: socket.\n\nTwo new hooks VRF_ENABLE_HOOK/VRF_DISABLE_HOOK are introduced to tell\nthe user when a VRF gets ready or to be unavailable.\n\nThe VRF_ENABLE_HOOK callback is called in the new function vrf_enable(),\nwhich is used to let the VRF be ready to use. Till now, only the default\nVRF can be enabled, and we need do nothing to enable the default, except\ncalling the hook.\n\nThe VRF_DISABLE_HOOK callback is called in the new function\nvrf_disable(), which is used to let the VRF be unusable. Till now,\nit is called only when the VRF is to be deleted.\n\nA new utility vrf_socket() is defined to provide a socket in a given\nVRF to the user.\n\nTill now before introducing a way of VRF realization, only the default\nVRF is enabled since its birth, and vrf_socket() creates socket for\nonly the default VRF.\n\nThis patch defines the framework of the VRF APIs. The way they serve\nthe users is:\n- vrf_is_enabled() is used to tell the user whether a VRF is usable;\n- users are informed by the VRF_ENABLE_HOOK that a VRF gets usable;\n  they can allocate resources after that;\n- users are informed by the VRF_DISABLE_HOOK that a VRF is to be\n  unavailable, and they must release the resources instantly;\n- vrf_socket() is used to provide a socket in a given 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": "5a5702fac5458d63d7a099c4db7ac387afefd2de",
      "tree": "0547fea145cb10fb9ed6d9493963d374556eb65f",
      "parents": [
        "126215c1238eb42cc92d23aefbe1fac3b204438f"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:39:59 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 06:59:28 2015 +0200"
      },
      "message": "lib: move the interface list into \"struct vrf\"\n\nAn interface belongs to a specific VRF. So move the interface list\ninto the \"struct vrf\".\n\n* vrf.c/vrf.h:\n  - add a new member \"struct list *iflist\" to the the \"struct vrf\";\n  - call if_init() in vrf_new();\n  - call if_terminate() in vrf_delete();\n  - add utilities to access the interface list and VRF ID in the\n    specified VRF.\n\n* if.c/if.h:\n  - the global \"iflist\" now only exists for the default VRF;\n  - the global \"if_master\" is initialized on the definition;\n  - in if_create(), the interface is added into the list in the\n    specified VRF; if the VRF does not exist, create one;\n  - add parameters to if_init()/if_terminate() so that the\n    interface list in the VRF can be initialized/destroyed;\n  - in if_dump_all() scan the interfaces in all the VRFs;\n  - add a command \"show address vrf N\" to show addresses in a\n    specified VRF;\n  - add a command \"show address vrf all\" to show addresses in all\n    VRFs;\n  - new APIs ifxxx_vrf() are added to access an interface in a\n    specified VRF.\n\nThe old interface APIs (the global variable \"iflist\" and the API\nfunctions) are not changed to keep the backward compatibility.\nThe new APIs are used in the daemons which support multiple VRFs\n(till now only zebra).\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"
    },
    {
      "commit": "395828eea809e8b2b8c5824d3639cefedd7aa9f0",
      "tree": "61341d0667a67d8645455fad7029cc916eb9a3e2",
      "parents": [
        "be6335d682c5ee1b6930345193eda875705fbab2"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:39:55 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 06:58:12 2015 +0200"
      },
      "message": "ospf6d, bgpd: avoid calling if_nametoindex\n\nAs the comments in if.h, it is better to call ifname2ifindex()\ninstead of if_nametoindex().\n\nAnd ifname2ifindex() can work for VRF by appending a parameter\nwhile if_nametoindex() can not.\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"
}
