)]}'
{
  "log": [
    {
      "commit": "a3936d04942795bb92f04fefd25957c327e31c20",
      "tree": "1d75c7ed70aa655c4cc0429264bfb1832afe8636",
      "parents": [
        "6184c39e27d4b6f3721b8c4dc3df1b968e09606a"
      ],
      "author": {
        "name": "Boian Bonev",
        "email": "bbonev@ipacct.com",
        "time": "Wed Jun 25 20:26:44 2014 +0300"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 20 12:58:30 2016 +0100"
      },
      "message": "bgpd: add aspath_aggregate_mpath that preserves path length\n\nIssue - when two aspaths are aggregated the result will be with\ndifferent length if the two paths do not share common prefix.\n\nE.g.: aggregation of 100 101 400 500 and 200 201 400 500 currently\nwill result in {100,101,200,201,400,500} which is of much shorter\nlength and is not ok to be readvertised becase may create shortest\npath on the internet and cause infinite flapping.\n\naspath_aggregate_mpath will construct the followin path for the\nabove example: {100,200} {101,201} 400 500\n\nSigned-off-by: Boian Bonev \u003cbbonev at ipacct.com\u003e\n\npatchwork #994: http://patchwork.quagga.net/patch/994/\n"
    },
    {
      "commit": "6184c39e27d4b6f3721b8c4dc3df1b968e09606a",
      "tree": "2307896d8cbec453b3d2c829c1b299d3d3f996e1",
      "parents": [
        "d8f7f86a64842fcc6200c2fa4f560b9aa7a279bb"
      ],
      "author": {
        "name": "Roman Hoog Antink",
        "email": "rha@open.ch",
        "time": "Mon Mar 17 14:01:42 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 20 12:58:30 2016 +0100"
      },
      "message": "bgpd: implement admin distance\n\nUntil today the admin distance cannot be configured for any IPv6\nrouting protocol. This patch implements it for bgp.\n\nSigned-off-by: Maitane Zotes \u003cmaz@open.ch\u003e\n\npatchwork #993: http://patchwork.quagga.net/patch/993/\n"
    },
    {
      "commit": "f53585d59b62b12d68282154af346796b75c7f2f",
      "tree": "23c84a60e16058427c069f0a406ff8f44f73b19b",
      "parents": [
        "ac6ff4643645315db648604771926218aa4ead2d"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue May 17 07:10:36 2016 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 20 12:58:29 2016 +0100"
      },
      "message": "bgp: add \"debug bgp allow-martians\" next hops and related code/commands\n"
    },
    {
      "commit": "ac6ff4643645315db648604771926218aa4ead2d",
      "tree": "39a8c4f4910060019b2d6df9c944eb456f1d9579",
      "parents": [
        "5f678889843fb9bc3f07d05eebc2f8fb35584a91"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue May 17 07:10:37 2016 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 20 12:58:29 2016 +0100"
      },
      "message": "bgpd: Add flag to not change e{u,g}id on startup and run as unprivileged user\n\n* bgp_main.c: add -S / --skip_runas flag to not change effective user/group\n  on start up.  Enables bgpd to be run by unprivileged user.\n"
    },
    {
      "commit": "5e57b5fc621300427d3818f0723b8cd8d5e5ca6a",
      "tree": "738345e0c3121f329266e8b8faaa88661e7cdb2e",
      "parents": [
        "e3f623be8b6556db9d70c2fc5d3c2b152f36dc1d"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Mar 11 16:28:34 2016 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Mar 11 18:29:14 2016 -0500"
      },
      "message": "quagga: Remove double read of stream\n\nThe addition of a MIN(X,Y) with a stream_getc in the Y\ncauses a double read of the stream due to the way that\nMIN is defined.\n\nThis fix removes a crash in all protocols.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "c0cb90c608f7dcb0807e05c70050d2e238d6c4e9",
      "tree": "b66b70468004343789d532b1dc757e71177b0966",
      "parents": [
        "d849e23b1c6b7278aef2f460723ac17cdc63e1a7"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Mar 08 18:14:50 2016 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Mar 08 18:16:47 2016 +0000"
      },
      "message": "Revert \"bgpd: Lower BGP\u0027s default keepalive/holdtime to 3s/9s\"\n\nThis reverts commit f89b09be92bed03b1e5add55dc14ef92e94c52e1.\n\nMartin Winter has reported reliability issues in testing on some platforms.\nWe need a more comprehensive way to deal with defaults and updating them, e.g.\nprofiles of some kind.\n\nDefer this change till after next release.\n"
    },
    {
      "commit": "370b7e59170acf853ca3357c71dd5ab0d85e763c",
      "tree": "24cd286ecd47f6c6439e1c5971a1abbacb9e5c3a",
      "parents": [
        "bf83fa25f1bddec6f09ad879cba5e975a3ae5495"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Thu Feb 04 21:29:49 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Mar 08 17:53:22 2016 +0000"
      },
      "message": "bgpd: Fix crash reported by NetDEF CI\n\nThis patch is part of the previously submitted\n patch set on VPN and Encap SAFIs.  It fixes\n an issue identified by NetDEF CI.\n\n Ensure temp stack structures are initialized\n Add protection against double frees / post\n free access to bgp_attr_flush\n\n    Signed-off-by: Lou Berger \u003clberger@labn.net\u003e\n"
    },
    {
      "commit": "bf83fa25f1bddec6f09ad879cba5e975a3ae5495",
      "tree": "a01a0137a4193d2d33d61bb43c113afef3e421a6",
      "parents": [
        "2db962760426ddb9e266f9a4bc0b274584c819cc"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Feb 09 15:23:03 2016 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Mar 08 17:53:22 2016 +0000"
      },
      "message": "lib: Check prefix length from zebra is sensible\n\n* zclient.c: prefix length on router-id and interface address add\n  messages not sanity checked.  fix.\n\n* */*_zebra.c: Prefix length on zebra route read was not checked, and\n  clients use it to write to storage.  An evil zebra could overflow\n  client structures by sending overly long prefixlen.\n\nPrompted by discussions with:\n\nDonald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "405e9e19eb6ce62fa4f3f39a1f73990db9e146b7",
      "tree": "e3e6c66af5ed0a6d7270a842986487ba5e8c8c26",
      "parents": [
        "518a4b7eadcba567f01061e6659d8179380efcdf"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Thu Feb 04 17:00:18 2016 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Mar 08 17:53:22 2016 +0000"
      },
      "message": "bgpd: Remove the double-pass parsing of NLRIs\n\n* bgpd parses NLRIs twice, a first pass \"sanity check\" and then a second pass\n  that changes actual state. For most AFI/SAFIs this is done by\n  bgp_nlri_sanity_check and bgp_nlri_parse, which are almost identical.\n\n  As the required action on a syntactic error in an NLRI is to NOTIFY and\n  shut down the session, it should be acceptable to just do a one pass\n  parse.  There is no need to atomically handle the NLRIs.\n\n* bgp_route.h: (bgp_nlri_sanity_check) Delete\n* bgp_route.c: (bgp_nlri_parse) Make the prefixlen size check more general\n  and don\u0027t hard-code AFI/SAFI details, e.g. use prefix_blen library function.\n\n  Add error logs consistent with bgp_nlri_sanity_check as much as possible.\n\n  Add a \"defense in depth\" type check of the prefixlen against the sizeof\n  the (struct prefix) storage - ala bgp_nlri_parse_vpn.\n  Update standards text from draft RFC4271 to the actual RFC4271 text.\n\n  Extend the semantic consistency test of IPv6. E.g. it should skip mcast\n  NLRIs for unicast safi as v4 does.\n\n* bgp_mplsvpn.{c,h}: Delete bgp_nlri_sanity_check_vpn and make\n  bgp_nlri_parse_vpn_body the bgp_nlri_parse_vpn function again.\n\n  (bgp_nlri_parse_vpn) Remove the notifies.  The sanity checks were\n  responsible for this, but bgp_update_receive handles sending NOTIFY\n  generically for bgp_nlri_parse.\n\n* bgp_attr.c: (bgp_mp_reach_parse,bgp_mp_unreach_parse) Delete sanity check.\n  NLRI parsing done after attr parsing by bgp_update_receive.\n\nArising out of discussions on the need for two-pass NLRI parse with:\n\nLou Berger \u003clberger@labn.net\u003e\nDonald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "518a4b7eadcba567f01061e6659d8179380efcdf",
      "tree": "0bc751d4e0024954e1bf3bf5a7e0ce84b219ba1f",
      "parents": [
        "18ab08b71e6b29e67b36df5e2261569d381b1708"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Thu Feb 04 13:27:04 2016 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Mar 08 17:53:21 2016 +0000"
      },
      "message": "bgpd: Regularise bgp_update_receive, add missing notifies and checks\n\n* bgp_packet.c: (bgp_update_receive) Lots of repeated code, doing same\n  thing for each AFI/SAFI.  Except when it doesn\u0027t, e.g.  the IPv4/VPN\n  case was missing the EoR bgp_clear_stale_route call - the only action\n  really needed for EoR.\n\n  Make this function a lot more regular, using common, AFI/SAFI\n  independent blocks so far as possible.\n\n  Replace the 4 separate bgp_nlris with an array, indexed by an enum.\n\n  The distinct blocks that handle calling bgp_nlri_parse for each\n  different AFI/SAFI can now be replaced with a loop.\n\n  Transmogrify the nlri SAFI from the SAFI_MPLS_LABELED_VPN code-point\n  used on the wire, to the SAFI_MPLS_VPN safi_t enum we use internally\n  as early as possible.\n\n  The existing code was not necessarily sending a NOTIFY for NLRI\n  parsing errors, if they arose via bgp_nlri_sanity_check.  Send the\n  correct NOTIFY - INVAL_NETWORK for the classic NLRIs and OPT_ATTR_ERR\n  for the MP ones.\n\n  EoR can now be handled in one block.  The existing code seemed broken\n  for EoR recognition in a number of ways:\n\n  1.  A v4/unicast EoR should be an empty UPDATE.  However, it seemed\n     to be treating an UPDATE with attributes, inc.  MP REACH/UNREACH,\n     but no classic NLRIs, as a v4/uni EoR.\n\n  2.  For other AFI/SAFIs, it was treating UPDATEs with no classic\n     withraw and with a zero-length MP withdraw as EoRs.  However, that\n     would mean an UPDATE packet _with_ update NLRIs and a 0-len MP\n     withdraw could be classed as an EoR.\n\n  This seems to be loose coding leading to ambiguous protocol\n  situations and likely incorrect behaviour, rather than simply being\n  liberal.  Be more strict about checking that an UPDATE really is an\n  EoR and definitely is not trying to update any NLRIs.\n\n  This same loose EoR parsing was noted by Chris Hall previously on\n  list.\n\n  (bgp_nlri_parse) Front end NLRI parse function, to fan-out to the correct\n  parser for the AFI/SAFI.\n\n* bgp_route.c: (bgp_nlri_sanity_check) We try convert NLRI safi to\n  internal code-point ASAP, adjust switch for that.  Leave the wire\n  code point in for defensive coding.\n\n  (bgp_nlri_parse) rename to bgp_nlri_parse_ip.\n\n* tests/bgp_mp_attr_test.c: Can just use bgp_nlri_parse frontend.\n"
    },
    {
      "commit": "18ab08b71e6b29e67b36df5e2261569d381b1708",
      "tree": "1160aff3b43a6e0bdf5e8b553425ad5bea12640f",
      "parents": [
        "c49a2747f6a6199dba27c0c413f4de6112fa649e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Wed Jan 27 16:37:33 2016 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Mar 08 17:53:10 2016 +0000"
      },
      "message": "bgpd: Regularise BGP NLRI sanity checks a bit\n\n* bgp_route.h: (bgp_nlri_sanity_check) The bulk of the args are equivalent\n  to a (struct bgp_nlri), consolidate.\n* bgp_route.c: (bgp_nlri_sanity_check) Make this a frontend for all afi/safis.\n  Including SAFI_MPLS_LABELED_VPN.\n  (bgp_nlri_sanity_check_ip) Regular IP NLRI sanity check based on the\n  existing code, and adjusted for (struct bgp_nlri *) arg.\n* bgp_attr.c: (bgp_mp_reach_parse) Adjust for passing (struct bgp_nlri *)\n  to bgp_nlri_sanity_check.\n  Get rid of special-casing to not sanity check VPN.\n  (bgp_mp_unreach_parse) Ditto.\n\n* bgp_mplsvpn.c: Use the same VPN parsing code for both the sanity\n  check and the actual parse.\n\n  (bgp_nlri_parse_vpn) renamed to bgp_nlri_parse_vpn_body and made\n  internal.\n\n  (bgp_nlri_parse_vpn_body) Added (bool) argument to control whether it\n  is sanity checking or whether it should update routing state for each\n  NLRI.  Send a NOTIFY and reset the session, if there\u0027s a parsing\n  error, as bgp_nlri_sanity_check_ip does, and as is required by the\n  RFC.\n\n  (bgp_nlri_parse_vpn) now a wrapper to call _body with update.\n\n  (bgp_nlri_sanity_check_vpn) wrapper to call parser without\n  updating.\n\n* bgp_mplsvpn.h: (bgp_nlri_sanity_check_vpn) export for\n  bgp_nlri_sanity_check.\n\n* bgp_packet.c: (bgp_update_receive) Adjust for bgp_nlri_sanity_check\n  argument changes.\n\n* test/bgp_mp_attr_test.c: Extend to also test the NLRI parsing functions,\n  if the initial MP-attr parsing has succeeded.  Fix the NLRI in the\n  VPN cases.  Add further VPN tests.\n\n* tests/bgpd.tests/testbgpmpattr.exp: Add the new test cases.\n\nThis commit a joint effort of:\n\nLou Berger \u003clberger@labn.net\u003e\nDonald Sharp \u003csharpd@cumulusnetworks.com\u003e\nPaul Jakma \u003cpaul.jakma@hpe.com\u003e / \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "c49a2747f6a6199dba27c0c413f4de6112fa649e",
      "tree": "27bc97363bf8e3f25535f39c030e6da7b37e4a0e",
      "parents": [
        "e98dce60cea213a4155a0db60b463e40c67aa77f"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 05 14:57:17 2016 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:48 2016 +0000"
      },
      "message": "bgpd: make bgp_nlri_parse_encap conform with other nlri_parse funcs\n\n* bgp_encap.{c,h} (bgp_nlri_parse_encap) afi is already in the NLRI argument.\n  update or withdraw is signalled by attr being non-NULL or NULL.\n\n* bgp_packet.c: (update_receive) fixup to match, and also make the attr\n  argument conform with NLRI_ATTR_ARG for correct error handling on\n  optional, transitive, partial, attributes.\n"
    },
    {
      "commit": "e98dce60cea213a4155a0db60b463e40c67aa77f",
      "tree": "bd9704ae2d834fef5882eb094d6df90fb4097dba",
      "parents": [
        "ecc1a136e10e0717761b6f436d299938a05a1309"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Jan 20 07:53:51 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:47 2016 +0000"
      },
      "message": "bgpd: Fix Null pointer dereference in bgp_info_mpath_update\n\nbgp_info_mpath_update is called with new_best \u003d\u003d NULL, this\ncauses the dereference of new_best in order to get at the mpath_cfg.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "ecc1a136e10e0717761b6f436d299938a05a1309",
      "tree": "b2158970126f59d00e76dba8029441ac7738608f",
      "parents": [
        "b2a2fd788f34a4f5d1bbd92a283e47704f05ae8f"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Dec 09 08:24:47 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:47 2016 +0000"
      },
      "message": "bgpd: Modify maxpaths cli\u0027s to use MULTIPATH_NUM for range\n\nModify the various maxpath commands to use MULTIPATH_NUM\nas the upper limit of allowed max paths in BGP.  There\nis no point in allowing a number of maximum paths greater\nthan what Quagga is compiled for.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\nTested-by: NetDEF CI System \u003ccisystem@netdef.org\u003e\n"
    },
    {
      "commit": "91ce87aacfd8718b5a52fb0f4453e9f72d8bdb53",
      "tree": "8abce3edf10e5874aa342090810adcfbf2380053",
      "parents": [
        "d18396369ff85517cd4b0b7abe96f6f706710dc7"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Dec 09 08:24:45 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:47 2016 +0000"
      },
      "message": "zebra, bgpd: Fixup MULTIPATH_NUM usage to not consider 0\n\nThe code has spots where MULTIPATH_NUM set to 0 is equal to 64.\nNow that MULTIPATH_NUM is set from the makefile to never be 0,\nremove the code that depends on this.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "d18396369ff85517cd4b0b7abe96f6f706710dc7",
      "tree": "748597138dba3b393808782c8767fdf886b603f4",
      "parents": [
        "693da6096a28eef5eadeea699771265987b3ec0c"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Dec 09 08:24:44 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:47 2016 +0000"
      },
      "message": "build: Rework how MULTIPATH_NUM is delivered to build\n\nChanges made here:\n\n1) MULTIPATH_NUM will never be 0.  If user specifies --enable-multipath\u003d0\nthen this translates to MULTIPATH_NUM being set to 64 inside of the build\nsystem.\n\n2) Move MULTIPATH_NUM from a Makefile construct to a config.h construct.\n\n3) Allowed MULTIPATH_NUM to be a number \u003e 99 but \u003c 1000\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "9099f9b2a66e86f8a90d7fe18f61bd2bb1bc6744",
      "tree": "1ce5d2e4ecff6b57eb00d40b1a91b3f363ff35fe",
      "parents": [
        "954c7d6bcd04c2cf037965adda0f9d11afdcd165"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Mon Jan 18 10:12:10 2016 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:46 2016 +0000"
      },
      "message": "*: use an ifindex_t type, defined in lib/if.h, for ifindex values\n"
    },
    {
      "commit": "b0d02889624eaafa0984873dcd78c086418bdf13",
      "tree": "8f15cb8a76935d04c0a18d28a647bc0915d7d86a",
      "parents": [
        "205e6744f2dc2909dd494c9ce8acb82821459f1f"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Jan 08 07:37:14 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:45 2016 +0000"
      },
      "message": "lib, bgpd: Remove \u0027struct fifo\u0027 from lib/zebra.h\n\nThe \u0027struct fifo\u0027 and it\u0027s accompanying #defines do not\nbelong in lib/zebra.h.  Move them into their own header.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "205e6744f2dc2909dd494c9ce8acb82821459f1f",
      "tree": "a996419a840766d2ffa1025805e1be84a2dacdf4",
      "parents": [
        "544ec70f66d0ec081dadde79bec1f25c2241f57f"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:42:11 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:45 2016 +0000"
      },
      "message": "bgpd: remove HAVE_IPV6 conditionals\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\nTested-by: NetDEF CI System \u003ccisystem@netdef.org\u003e\n"
    },
    {
      "commit": "f9b6c3938642090ffa1cae8b7125abff2b1e9fb0",
      "tree": "f6e9632134c3d8bb81b681b28e635eefd167dd46",
      "parents": [
        "bf1ae6c683a53d7f43c273afb55d52ccc233296b"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:42:09 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:45 2016 +0000"
      },
      "message": "bgpd: Add back old forms of \u0027show \u003cafi\u003e \u003csafi\u003e\u0027 for compatibility\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\n"
    },
    {
      "commit": "bf1ae6c683a53d7f43c273afb55d52ccc233296b",
      "tree": "3224355a90930170b47cccfafbeabe6bb9f27d09",
      "parents": [
        "651b402d32b52ecf7ea1d979bf83b88ff799e134"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:42:08 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:45 2016 +0000"
      },
      "message": "bgpd: drop machineparse / random \"show\" improvements\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\n"
    },
    {
      "commit": "651b402d32b52ecf7ea1d979bf83b88ff799e134",
      "tree": "57af25243a7523908a2f76c1832267dd2708e364",
      "parents": [
        "35c36863f42e3c3e61a0cae400ffa80905c96d45"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:42:07 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:44 2016 +0000"
      },
      "message": "bgpd: encap show commands\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\n"
    },
    {
      "commit": "35c36863f42e3c3e61a0cae400ffa80905c96d45",
      "tree": "0bfe81796a7fa5887b797c89f6c558e5ee70f278",
      "parents": [
        "135ca1502cc54d9ad00b60b3410a0932bfeceb29"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:42:06 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:44 2016 +0000"
      },
      "message": "bgpd: VPNv6 show commands\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\n"
    },
    {
      "commit": "135ca1502cc54d9ad00b60b3410a0932bfeceb29",
      "tree": "5bffa5f6cc373e3c5d4522768a52973b6bb8973c",
      "parents": [
        "a3fda886cdd48b6d8c421ebb1401142fa9ee93b0"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:42:05 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:44 2016 +0000"
      },
      "message": "bgpd: cleanup vty bgp_node_afi/safi utils\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\n"
    },
    {
      "commit": "a3fda886cdd48b6d8c421ebb1401142fa9ee93b0",
      "tree": "42a5e6fda0978185128544fd199caf8ed93e58a3",
      "parents": [
        "637035710a2f8e1e5944ee714135b7f88ac15ac4"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:42:04 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:44 2016 +0000"
      },
      "message": "bgpd, lib, vtysh: hook up bgp ENCAP CLI node\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "637035710a2f8e1e5944ee714135b7f88ac15ac4",
      "tree": "857f655fcd45e10f2947457f66e3a0d293c89955",
      "parents": [
        "298cc2f688dbadf0a447fcd06ae8e20fa5006ce4"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:42:03 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:44 2016 +0000"
      },
      "message": "bgp: Reorg cleanup to align process and bgp instance init/destroy\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\n"
    },
    {
      "commit": "298cc2f688dbadf0a447fcd06ae8e20fa5006ce4",
      "tree": "50a27a17c45edc4e6a0b200617db0f066bb42fc2",
      "parents": [
        "c3741789530ee824693fd606356acac2ad695f83"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:42:02 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:44 2016 +0000"
      },
      "message": "bgpd: encap: add encap SAFI (RFC5512)\n\nAdds RFC5512 and Encapsulation Attribute.\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\n"
    },
    {
      "commit": "c3741789530ee824693fd606356acac2ad695f83",
      "tree": "ad68a56ed567517367a3916ff4372f420b139326",
      "parents": [
        "5a81fc9ae610ff343902ebabc12237d6e40d91cb"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:42:01 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:43 2016 +0000"
      },
      "message": "bgpd: encap: add attribute handling\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\nReviewed-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "5a81fc9ae610ff343902ebabc12237d6e40d91cb",
      "tree": "734cdcaca446bf42934bb2fce98c1799c88c1bfb",
      "parents": [
        "050defe816e4bd4cac7b028f69e45cb1974ca96d"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:42:00 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:43 2016 +0000"
      },
      "message": "bgpd: encap: extend extcommunity handling\n\nAdd code to print ENCAP communities.\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "050defe816e4bd4cac7b028f69e45cb1974ca96d",
      "tree": "212e07eb351c8ebd2282e4798d493cf2e64492c9",
      "parents": [
        "d5d5e3e04fc41b9a89b7ce9049fd322bdbde2e4d"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:41:59 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:43 2016 +0000"
      },
      "message": "bgpd: general MP/SAFI improvements\n\nThis fixes some minor mixups particularly in MPLS-related SAFIs, as well\nas doing some stylistic changes \u0026 adding comments.\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\nReviewed-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d5d5e3e04fc41b9a89b7ce9049fd322bdbde2e4d",
      "tree": "7199aaf51bd89a8532b46cff042316ed00a2d6ad",
      "parents": [
        "82dd707988b7481e203cab058c92f0b3041dd558"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:41:58 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:43 2016 +0000"
      },
      "message": "bgpd: tests - add null pointer protection to fix bgp test failures\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\n"
    },
    {
      "commit": "82dd707988b7481e203cab058c92f0b3041dd558",
      "tree": "01923f2a1a5b0ca381e9eb7b093f467ca4cc942b",
      "parents": [
        "13c378d96a57017f5995b2e0df46cfc31123f0e8"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:41:57 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:43 2016 +0000"
      },
      "message": "bgpd: improve cleanup in bgp_delete()\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\n"
    },
    {
      "commit": "13c378d96a57017f5995b2e0df46cfc31123f0e8",
      "tree": "6b4669bf22264a816ef451f3058cd8f59872eab5",
      "parents": [
        "9da04bca0e994ec92b9242159bf27d89c6743354"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:41:56 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:43 2016 +0000"
      },
      "message": "bgpd, lib, vtysh: hook up bgp VPNv6 CLI node\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "9da04bca0e994ec92b9242159bf27d89c6743354",
      "tree": "3c38048088082749e2ba7f03f15bdbff19234f0c",
      "parents": [
        "a03bd16eedc5077e98716509b8918ed365227e02"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:41:55 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:42 2016 +0000"
      },
      "message": "bgpd: wire up VPNv6 protocol processing\n\nThere wasn\u0027t much missing for VPNv6 to begin with; just a few bits of\nde- \u0026 encoding and a few lists to be updated.\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n\n[Editorial note: Signed-off-by may imply an authorship claim, but need not]\n\nEdited-by: Paul Jakma \u003cpaul.jakma@hpe.com\u003e / \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "a03bd16eedc5077e98716509b8918ed365227e02",
      "tree": "ce2cdce1e28a98318bd4605e7f70c43267cc5eb7",
      "parents": [
        "a76d9ca3584c1751a592457c167c1e146648ceb6"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:41:54 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:42 2016 +0000"
      },
      "message": "bgpd: handle AS4 and EOI route distinguishers\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a76d9ca3584c1751a592457c167c1e146648ceb6",
      "tree": "6415cbd12e4f1cfeadc552b05f6ac06da10d51f6",
      "parents": [
        "4d80560a2b064182191371fd7e4304bf829a4d9f"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:41:53 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:42 2016 +0000"
      },
      "message": "bgpd: make _vpnv4 static handling SAFI-agnostic\n\nThis changes the existing _vpnv4 functions for MPLS-VPN into\nSAFI-agnostic functions, renaming them from *_vpnv4 to *_safi.\n\nAlso adds route-map support while at it.\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\nReviewed-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "4d80560a2b064182191371fd7e4304bf829a4d9f",
      "tree": "d99a5c6f87bc92e0201afa263b4bd853e07a26b1",
      "parents": [
        "3e841d3b49bdb475ce793eee5d82e5137dff57d3"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:41:52 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:42 2016 +0000"
      },
      "message": "bgpd: kill unused variable in bgp_socket()\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3e841d3b49bdb475ce793eee5d82e5137dff57d3",
      "tree": "6d3d9a0dde3bcd83631b2abd7764e13d7485b9ae",
      "parents": [
        "2daf7f3a8d69213f35b16a04dbe300957481a811"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:41:51 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:42 2016 +0000"
      },
      "message": "bgpd: add nexthop length to AF macro\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "0490729cc033a3483fc6b0ed45085ee249cac779",
      "tree": "fb2822462801e3bc82ae1425d065d3d5e4d71954",
      "parents": [
        "7748fdc757a2181649dd4956f2767545673ef28d"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Thu Jan 07 10:03:01 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:40 2016 +0000"
      },
      "message": "lib, bgpd, tests: Refactor FILTER_X in zebra.h\n\nlib/zebra.h has FILTER_X #define\u0027s.  These do not belong there.\nPut them in lib/filter.h where they belong.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "7748fdc757a2181649dd4956f2767545673ef28d",
      "tree": "b101c98aefe861b23515b9314b611ace7b87531f",
      "parents": [
        "f3cfc46450cccc5ac035a5a97c5a1a5484205705"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Wed Feb 10 14:24:00 2016 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:40 2016 +0000"
      },
      "message": "bgpd: Fix graceful restart capability minsize\n\n* bgp_open.c: cap_minsize should be CAPABILITY_CODE_RESTART_LEN for RESTART\n  not 6.\n"
    },
    {
      "commit": "f3cfc46450cccc5ac035a5a97c5a1a5484205705",
      "tree": "3ae512da65c1b4962363c038b8b2c94e27decf65",
      "parents": [
        "d5062d218994885710fe02f516f0c06025b4fc9a"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Thu Jan 07 09:33:28 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:40 2016 +0000"
      },
      "message": "lib, bgpd: Fixup afi_t to be an enum and cleanup zebra.h\n\nThis code change does two things:\n\n1) Removes ZEBRA_AFI_XXX #defines since they were redundant information\n2) Switches afi_t to an enumerated type so that the compiler\ncan do a bit more compile time checking.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "6d4742bef722e6fab45fb6eb22ed2c7b7570a2e6",
      "tree": "5f448656a3f81e684df289e42cc3bd051850e17f",
      "parents": [
        "91b9e8547a7c5697d5d7481f9476778077024019"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Wed Nov 25 17:14:37 2015 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Thu Feb 18 15:54:45 2016 +0000"
      },
      "message": "bgpd: make bgp_info_cmp and multiple-path decision logic more regular\n\n* bgp_route.c: (bgp_info_cmp) This function is supposed to return a\n  preference between the given paths, and does so as binary either or.  When\n  mpath was added, the binary return value was left as is and instead an out\n  parameter \u0027paths_eq\u0027 was added to indicate the mpath-equality case.  It\u0027s\n  a bit odd, as is the resulting logic in the caller.\n\n  Regularise things again by making the function return a strcmp like\n  trinary return value of -1,0,1.  Get rid of the mpath specific arguments,\n  but pass in afi/safi as part of the general context - that plus the\n  (struct bgp *) is enough to access configuration.\n\n  Update the return values.\n\n  The mpath check was testing the IGP metric for equality, even though\n  previous to the mpath changes (and consistent with the behaviour of all\n  the other tests bar the end), equality results in continuing through to\n  the next comparison. Just go back to the previous way - each test finds a\n  preference to return, or continues on to let further tests have a go.\n\n  (bgp_best_selection) Get rid of the (struct bgp_maxpaths_cfg *) arg, we\n  can\u0027t add state for every optional feature to the argument list - they\n  have to look it up as needed. Do pass through the very general afi/safi\n  context though (saves several lookups through the route_node).\n\n  Adjust for the new trinary bgp_info_cmp return value and updated args.\n  Do the mpath clearing/accumulation in one place, in each loop.\n\n  Call to bgp_info_mpath_update similarly gets updated, as there\u0027s no cfg to\n  pass.\n\n  (bgp_process_{rsclient,main}) match bgp_best_selection changes.\n* bgp_mpath.c: (bgp_mpath_is_configured_sort) Helper for whether mpath is\n  enabled by peer sort.\n  (bgp_mpath_is_configured) ditto, generally.\n  (bgp_info_mpath_update) caller no longer has the cfg to pass in, look it\n  up.\n* bgp_mpath.h: Export the above and Match .c changes.\n\nRequires commit:\n \"bgpd: bgp_scan shouldn\u0027t queue up route_nodes with no routes for processing\"\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "91b9e8547a7c5697d5d7481f9476778077024019",
      "tree": "e1cf2b9d29c4dcfd0b3d429551e50f0d6f7848cf",
      "parents": [
        "321d4130a615445d0f49f41c909c92d5401fd5ff"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Dec 01 14:32:11 2015 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Thu Feb 18 11:46:24 2016 +0000"
      },
      "message": "bgpd: bgp_scan shouldn\u0027t queue up route_nodes with no routes for processing\n\n* bgp_nexthop.c: (bgp_scan) There is little point queueing an rn with no routing\n  information for processing.\n* bgp_route.c: (bgp_process) Do nothing on rn\u0027s with no routes. Add an assert\n  for now, to try catch any other cases, but prob should be removed.\n  (bgp_best_selection) rn with no routes \u003d\u003d finish early.\n"
    },
    {
      "commit": "4078f2eb7a3a94ddb30cfd8b76b054e790aab524",
      "tree": "3b9d32198d677be63a3587ad6f9ea06506437192",
      "parents": [
        "68ec424eb8557f86d08fcb7ab3c5366cbf3eca0e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Wed Nov 25 17:14:35 2015 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Wed Feb 10 15:06:17 2016 +0000"
      },
      "message": "bgpd: Check capability falls on right multiple of size, where possible.\n\n* bgp_open.c: (cap_modsizes) Table of multiple a capability\u0027s data size\n  should fall on, if applicable.\n  (bgp_capability_parse) Check the header lengthcap_modsizes should fall on.\n\n  Inspiration from Cumulus bgpd-capability-cleanup.patch patch, with a\n  slightly different approach.\n\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "68ec424eb8557f86d08fcb7ab3c5366cbf3eca0e",
      "tree": "63d4630ccfb5e0f366881fa98d42e62842d67239",
      "parents": [
        "cc216b7978b038667626afd3f70dda8f70c46e4e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Wed Nov 25 17:14:34 2015 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Wed Feb 10 15:06:17 2016 +0000"
      },
      "message": "bgpd: OPEN parse errors should send OPEN_ERR and UNSPECIFIC subcode.\n\nCEASE NOTIFICATION for OPEN parsing errors seems, to my reading of RFC4271\n§6.2 to be incorrect.\n\n* bgp_packet.c: (bgp_open_receive) OPEN/UNACEP_HOLDTIME is not an\n  appropriate error subcode if bgp_open_option_parse returns an error.  Set\n  it to \"Unspecific\". Where a more specific subcode is appropriate, then lower\n  level should send that.\n* bgp_open.c: (bgp_open_option_parse) Malformed OPENs should result in\n  NOTIFICATION with OPEN error, and OPEN/UNSPECIFIC sub-code - not CEASE.\n  (bgp_capability_{parse,orf_entry}) ditto.\n* bgpd.h: Add BGP_NOTIFY_OPEN_UNSPECIFIC for 0.  Note that IANA lists 0 as\n  reserved in the OPEN error sub-code registry, but RFC4271 page 32 says 0\n  is the \"Unspecific\" OPEN error subcode.\n\n  Have emailed IANA, they says it\u0027s a known errate to 4271 under review.\n\n  Some inspiration from Cumulus\u0027 bgpd-capability-cleanup.patch, though\n  v different result.\n"
    },
    {
      "commit": "a3bc7e9400b214a0f078fdb19596ba54214a1442",
      "tree": "5268048e32b24b2bac3c8a55f41ef25a0b15ff91",
      "parents": [
        "eae18d16fefed42af33e63e096a2889b9c70b9cb"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Jan 27 16:54:45 2016 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Wed Feb 10 15:02:07 2016 +0000"
      },
      "message": "bgpd: Fix VU#270232, VPNv4 NLRI parser memcpys to stack on unchecked length\n\nAddress CERT vulnerability report VU#270232, memcpy to stack data structure\nbased on length field from packet data whose length field upper-bound was\nnot properly checked.\n\nThis likely allows BGP peers that are enabled to send Labeled-VPN SAFI\nroutes to Quagga bgpd to remotely exploit Quagga bgpd.\n\nMitigation: Do not enable Labeled-VPN SAFI with untrusted neighbours.\n\nImpact: Labeled-VPN SAFI is not enabled by default.\n\n* bgp_mplsvpn.c: (bgp_nlri_parse_vpnv4) The prefixlen is checked for\n  lower-bound, but not for upper-bound against received data length.\n  The packet data is then memcpy\u0027d to the stack based on the prefixlen.\n\n  Extend the prefixlen check to ensure it is within the bound of the NLRI\n  packet data AND the on-stack prefix structure AND the maximum size for the\n  address family.\n\nReported-by: Kostya Kortchinsky \u003ckostyak@google.com\u003e\n\nThis commit a joint effort between:\n\nLou Berger \u003clberger@labn.net\u003e\nDonald Sharp \u003csharpd@cumulusnetworks.com\u003e\nPaul Jakma \u003cpaul.jakma@hpe.com\u003e / \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "64e0ac29ddc43bb5b1a2999a8ebedbdff115e3ca",
      "tree": "00f5d62575cbc5eb4744179e21bf1ac5ccb63f55",
      "parents": [
        "76764ddcf53fa4840993c395fdf383a47ad61e8e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Wed Nov 18 16:00:54 2015 +0000"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:16:24 2015 -0500"
      },
      "message": "bgpd: Implicit updates in BGP may require a withdrawal from zebra RIB\n\n*  J Yu \u003cjackiesyu@hotmail.com\u003e noted a problem with bgpd of routes not\n   having their nexthop updated correctly.\n\n   Martin Winter \u003cmwinter@opensourcerouting.org\u003e pinned this down to the\n   case where a BGP route is updated from one with a valid nexthop to an\n   invalid next-hop, using a test tool. Once the problem occurs, the incorrect\n   route may remain, even after further UPDATEs, so long as the nexthop in the\n   zebra RIB does not match the BGP route\u0027s nexthop.\n\n   Jacqueline Yu then pinned the issue down further to being due to bgpd\n   sending the DELETE for the route to zebra with the new nexthop after a\n   BGP UPDATE updates an existing route, but then is found to be invalid,\n   and zebra not finding the route as it requires a match on all attributes.\n\n* bgp_zebra.c: (bgp_zebra_withdraw) When deleting a prefix, we want it gone.\n  Do not send additional matching attributes like the nexthop, which can\n  only cause incorrect non-matches.\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "dbe99e0c407bcb383d0be0c0010fefccc5b46866",
      "tree": "db2828cebc59de453dde7061539d9140fadec17b",
      "parents": [
        "76fbc64c5d82c6f540cb4a1ac855f9f098fa6c5f"
      ],
      "author": {
        "name": "Alexis Fasquel",
        "email": "alexis@pch.net",
        "time": "Mon Nov 16 13:55:16 2015 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:12:46 2015 -0500"
      },
      "message": "bgpd: Update dump to allow Extended Time Format\n\nAllow the bgp dump functionality to handle the Extended Time format\nas specified in RFC 6396.\n\nFixes a segmentation fault with multiple dump rules as well.\n\nSigned-off-by: Alexis Fasquel \u003calexis@pch.net\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "0d7435f2138955b4b8aa9044eefbaff31ec33248",
      "tree": "a7f3583dc4dbb582aa16fadc259241a661c6e8de",
      "parents": [
        "5a2a1ec18c89daec5de6690a9b0f47c0d11a0f2d"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton76@gmail.com",
        "time": "Thu Oct 22 11:35:20 2015 +0300"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:12:09 2015 -0500"
      },
      "message": "bgpd: Add support for timer commands with peer-group syntax\n\nThe peer-groups parser is missing advertisement-interval and \u0027timers connect\u0027\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\n"
    },
    {
      "commit": "5a2a1ec18c89daec5de6690a9b0f47c0d11a0f2d",
      "tree": "a824c25e85d8d5be9690524ff6061293b5f56315",
      "parents": [
        "0edba8b6ad9c83fa0a3cc58765fe9f123f4109ac"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Thu Oct 22 11:35:18 2015 +0300"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:11:18 2015 -0500"
      },
      "message": "bgpd: update rtt on soft clear\n\nrtt is calculated dynamically by the kernel. Refresh it on\nsoft clear.\n\nFixes: ef757700d0 \"bgpd: allow using rtt in route-map\u0027s set metric\"\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\n"
    },
    {
      "commit": "0edba8b6ad9c83fa0a3cc58765fe9f123f4109ac",
      "tree": "52e0410279dc9b20ba0bc8453e0e0c1f72e081cb",
      "parents": [
        "983525e8b560fc44d2214ca3f6d72af809b6ebd9"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Thu Oct 22 11:35:17 2015 +0300"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:11:18 2015 -0500"
      },
      "message": "bgpd: check rtt later after the real peer is known\n\nOPEN message handler moves the connection from the temporary\n\"struct peer\" (used to accept it) to the real \"struct peer\" based\non the configuration. RTT needs to be updated only to the real\nstruct peer, and this patch moves the RTT query to point where\nrealpeer is known.\n\nFixes: ef757700d0 \"bgpd: allow using rtt in route-map\u0027s set metric\"\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\n"
    },
    {
      "commit": "bf99b420a57b7c5bf44c8ab528d0a2e416b66d81",
      "tree": "1e44abc69995f5210cc7ddb1cfb8f6f29406db87",
      "parents": [
        "c8af680df5beb613fd50c265773a6beb0f1768c9"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Oct 21 10:00:47 2015 -0400"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:11:18 2015 -0500"
      },
      "message": "bgpd: Fix bgp_btoa to compile\n\nbgp_btoa was abandoned at some point in time in the past.\nThis commit gets it to compile and to be added to /usr/bin.\n\nAt this point in time no work has done for \u0027correctness\u0027 of execution\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "363c903435b154e989f0544d12d4ac8d50174c0b",
      "tree": "3efcda7bc9e934ea17f2787a9f0ea9d59738ebea",
      "parents": [
        "92e62e06ba9e03c4603538b3138298b274e3c167"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Wed Oct 21 06:42:54 2015 -0700"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:11:10 2015 -0500"
      },
      "message": "bgpd: crash from not NULLing freed pointers\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by:   Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n\nThere was a crash from not NULLing out peer-\u003ehostname but I cleaned\nup a bunch of other suspect ones as well.\n"
    },
    {
      "commit": "f89b09be92bed03b1e5add55dc14ef92e94c52e1",
      "tree": "a9662e2a506a8377b53864d2ea99c5c71978e5e0",
      "parents": [
        "8e644534b4d20dde07306700be0503d09d30a16e"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Wed Oct 21 06:42:52 2015 -0700"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:11:01 2015 -0500"
      },
      "message": "bgpd: Lower BGP\u0027s default keepalive/holdtime to 3s/9s\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by:   Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "8e644534b4d20dde07306700be0503d09d30a16e",
      "tree": "ad52e0dd0c99f32f6d04f32eaee017794f1b711d",
      "parents": [
        "c37b9bccdcc1266f52e50fa3e5a8dc81086c3fe7"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Wed Oct 21 06:42:51 2015 -0700"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:10:58 2015 -0500"
      },
      "message": "bgpd: Remove BGP_ERROR_START_TIMER, it was no longer used\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by:   Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "c37b9bccdcc1266f52e50fa3e5a8dc81086c3fe7",
      "tree": "e1aa8b92d71d434c4b4ca45eebe2089028ce7098",
      "parents": [
        "57fcfda56ad091a6850e190f5788361bf921699e"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Wed Oct 21 06:42:50 2015 -0700"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:10:53 2015 -0500"
      },
      "message": "bgpd: Enable \"bgp log-neighbor-changes\" by default\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by:   Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "57fcfda56ad091a6850e190f5788361bf921699e",
      "tree": "ff31b969ae0565268ff15b71b6e0083dc6d28873",
      "parents": [
        "3ff77fe62ecdabc01f576de8c4e5d78d16e3e436"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Wed Oct 21 06:42:49 2015 -0700"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:10:45 2015 -0500"
      },
      "message": "bgpd: Do not allow a timers connect of 0, this can hammer the CPU\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by:   Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "3ff77fe62ecdabc01f576de8c4e5d78d16e3e436",
      "tree": "597e8e707b0ce9d1f919741f868d15a560548527",
      "parents": [
        "f822ad4326e8b279e028b8b2ca2282475b5e27de"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Wed Oct 21 06:42:48 2015 -0700"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:10:42 2015 -0500"
      },
      "message": "bgpd: Remove BGP\u0027s asorig timer, it is no longer used\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by:   Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "f822ad4326e8b279e028b8b2ca2282475b5e27de",
      "tree": "c8ffb4dd4af36d59d8e0f8901f5b11f81844c3c1",
      "parents": [
        "e56aab94a615a2b676473fbd09145b444a348029"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Wed Oct 21 06:42:47 2015 -0700"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:10:29 2015 -0500"
      },
      "message": "bgpd: Lower the default \u0027timers connect\u0027 in BGP to 10 seconds\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by:   Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "283596fd6d49a5b2861a6923db9a88628ef0eca4",
      "tree": "1b461a1fea8840efaafd1250f729831be91fea9f",
      "parents": [
        "be62b17c736ea06181f2788e3011066830555610",
        "fc1c114aab24fe47bc6a1976c1c602d507fa4e69"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Wed Oct 28 14:25:06 2015 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Oct 28 14:25:06 2015 +0000"
      },
      "message": "Merge \u0027patch-tracking/4/proposed/netdef-solaris\u0027 into accepted\n"
    },
    {
      "commit": "056f3760cd311faf088d6f5fe06498960788c8c7",
      "tree": "6098f68402cefc8dbf0b832636390c453802a245",
      "parents": [
        "5c1791f28e2e831e4e9b92c3c2f7d8ed832cb968"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Wed Apr 10 12:30:04 2013 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 27 11:00:29 2015 +0000"
      },
      "message": "bgpd, lib: memory cleanups for valgrind, plus debug changes\n\nDescription:\n    We use valgrind memcheck quite a bit to spot leaks in\n    our work with bgpd. In order to eliminate false positives,\n    we added code in the exit path to release the remaining\n    allocated memory.\n\n    Bgpd startup log message now includes pid.\n\nSome little tweaks by Paul Jakma \u003cpaul.jakma@hpe.com\u003e:\n\n* bgp_mplsvpn.c: (str2prefix_rd) do the cleanup in common code at the end\n  and goto it.\n"
    },
    {
      "commit": "774914f4223532256051bd6dd61cac20e8f9649f",
      "tree": "c6cecfa4c6c1eaff07638d2903e195571baa39b0",
      "parents": [
        "eeef0db2e9260fe76acb328a339025c432eb7c22"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Oct 14 08:50:39 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 27 10:53:22 2015 +0000"
      },
      "message": "bgpd: fix using of two pointers for struct thread_master *\n\nbgp is using both bm-\u003emaster and master pointers interchangebly\nfor thread manipulation.  Since they are the same thing consolidate\nto one pointer.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "26a18eb223d26011ac4f1d608f6775ed7ebf8efb",
      "tree": "116460f0d57e4e0e7f2cfa20ea6a9b30be19a16f",
      "parents": [
        "d8aa4beab72cdd2c2d78f9e624fd4b704eec488f"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Sep 29 09:25:10 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 27 10:53:21 2015 +0000"
      },
      "message": "quagga: Additional centos 6 -enable-werror fixes\n\nThis commit fixes these warnings:\n\n1) bgpd/bgp_nexthop.c - dereferencing pointer \u0027X\u0027 does break strict-aliasing rules\n2) pimd/pim_igmp_join.c - dereferencing pointer \u0027X\u0027 does break strict-aliasing rules\n3) ripd/ripd.c - \u0027ifaddr.prefixlen\u0027 may be used uninitialized in this function\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "7125293d65d73a451ec203c8c1630c236171f5a3",
      "tree": "f9d118c9a8f8374d69fb9c75c87531a2ca478fb2",
      "parents": [
        "fd1c1a133af47ae5533a5ed41b73ff62e7aa1058"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Thu Sep 24 09:25:19 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 27 10:53:21 2015 +0000"
      },
      "message": "lib: zclient.c remove extern struct thread_master *\n\nzclient.c depended upon link time inclusion of a\nextern struct thread_master *master.  This is a violation of the\nnamespace of the calling daemon.  If a library needs the pointer\npass it in and save it for future use.\n\nThis code change also makes the zclient code consistent with\nthe other lib functions that need to schedule work on your behalf\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "5181a0296687a6004dd00c7c0874886c9ff0bf60",
      "tree": "f7c4fb6596af18dabc52513e17febf2e2e213c22",
      "parents": [
        "6d9362274e8ba2d57ffe17aa735eb941ac3d5fbc"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 03:00:09 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "*: fix in_addr initialisers\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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"
    },
    {
      "commit": "c1c69e43cda64122b599746df4d1c6c5d8b52e37",
      "tree": "cccc035647931b79657438087f92bc6a387aae96",
      "parents": [
        "80c9354835bb924983d12b0efad957e78f219287"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Fri May 22 13:40:57 2015 +0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri May 29 07:30:44 2015 +0200"
      },
      "message": "lib: allow caller to provide prefix storage in sockunion2hostprefix\n\nAvoids a dynamic allocation which is usually freed immediate afterwards.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ef757700d0fd51dc0b46df9d3631208919f9b779",
      "tree": "722b3898fc1793cda897fa685df7128df4dfbc56",
      "parents": [
        "6b2672f3c9493aef3495192e113f95a7db4b65bc"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Apr 29 09:43:04 2015 +0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 20 18:52:22 2015 +0200"
      },
      "message": "bgpd: allow using rtt in route-map\u0027s set metric\n\nUseful when the BGP neighbors are over tunnels that have large\ndifferences in geographic distances and RTTs. Especially useful\nfor DMVPN setups to allow preferring closes hub.\n\nThe parameter is added as new alias command as otherwise it seems\nthe command parser is not able to match it properly (it seems\nmerging is done for the various \u0027set metric\u0027 route-map objects in\ndifferent routing engines). For same reason also they are listed\nas three separate options: optional +/- seems not possibly easily.\n\nRelated research papers:\nhttp://www.pps.univ-paris-diderot.fr/~jch/research/delay-based.pdf\nhttp://arxiv.org/pdf/1309.0632.pdf\n\nPaper on similar extension to Babel:\nhttp://www.pps.univ-paris-diderot.fr/~jch/research/rapport-jonglez-2013.pdf\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "38f22ab07c8e1f0f12e23c2e2d0a3e1f71bef695",
      "tree": "fdb9d52bea1f2105885182aef92691a5bf01e47a",
      "parents": [
        "5460baef7f0014f2d0c3459aa9c4180da19d6850"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Apr 29 09:43:02 2015 +0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 20 18:50:21 2015 +0200"
      },
      "message": "bgpd: refactor route-map objects modifying integer values\n\nUse common code to parse, validate and adjust the route-map\nobjects that contain a simple integer value. This also allows\ncompiling the add/sub format metric object.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c9c06d0d8cbc766374c43328e91b7a87f93e9c62",
      "tree": "7079c5e07ab0941949373d901bbd672066b9e4c6",
      "parents": [
        "e66cbd10d52a79fd61acab9d615683eebdbf1df5"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Apr 13 10:21:35 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 05 15:07:45 2015 +0200"
      },
      "message": "lib: straighten out ORF prefix list support\n\nBGP ORF prefix lists are in a separate namespace; this was previously\nhooked up with a special-purpose AFI value.  This is a little kludgy for\nextension, hence this splits it off.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Paul Jakma \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "4584c239201037648abf1a6615186f9cdeb86b23",
      "tree": "1af059ebcc0b9229aa78c9e775120ae8ae4a8c2f",
      "parents": [
        "e30677a5537f67e37938954cf7347e9a9c0b922d"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Apr 13 09:50:00 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 05 15:05:34 2015 +0200"
      },
      "message": "bgpd: speed up \"no-hit\" withdraws for routeservers\n\nThis accelerates handling of incoming Withdraw messages for routes that\ndon\u0027t exist in the table to begin with.  Cisco IOS 12.4(24)T4 has a bug\nin this regard - it sends withdraws instead of doing nothing for\nprefixes that are filtered.\n\nPulling up the adj_in removal in Quagga should have no ill effect, but\nwe can avoid the costly iteration over all rsclients if there was no\nadj_in entry.\n\nPerformance impact of this change on routeserver with 3 buggy peers,\nstartup/sync time:\n\nbefore patch:  143.12 seconds (user cpu)\nafter patch:     7.01 seconds (user cpu)\n\nMany thanks to Nick Hilliard \u0026 INEX for providing real-world test data!\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Paul Jakma \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "dc684eb9976f8a1170312be42d142effce26b568",
      "tree": "1d1354118bc0b063e7048c86154339aa2f141d1c",
      "parents": [
        "06bd420d4646333bc7ed9964e348f19a942fcfe2",
        "e691c3bb972c0baf610d9e210ce20ea6546e1de0"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Apr 23 13:31:17 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Apr 23 13:36:08 2015 +0200"
      },
      "message": "Merge branch \u0027volatile/fix_warnings\u0027\n\nThanks to Donald Sharp and Greg Troxel for providing feedback!\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "6ed810d986df5d843c89166fee6b73a71222b7bd",
      "tree": "86ac070fc69ae3e62fc6bf5d8750990bf0fa6c3e",
      "parents": [
        "c313895dec3c176584d99f7b8684ddc3f9141d88"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:13:07 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:44:56 2015 +0200"
      },
      "message": "*: fix more initialisers (for BSD)\n\nFreeBSD and NetBSD spew a few more warnings about variable initialisers.\nFound with OSR\u0027s/NetDEF\u0027s fancy new CI system.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c0bedebfe9ca1a1ded02f1f481762dd41defa63e",
      "tree": "9c040f71733fb7509c03457bc146373e65e95536",
      "parents": [
        "3a7e83c2387885075c9ecf1912dd6c9399c6947a"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 10:00:43 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:19:33 2015 +0200"
      },
      "message": "build: add --enable-werror\n\nThis allows enabling -Werror in a consistent way.  Note that this is\ndifferent from just specifiying it in CFLAGS, since that would either\nbreak configure tests (if done on ./configure), or would override\nconfigure\u0027s CFLAGS (if done on make).\n\nUsing --enable-werror instead provides a new WERROR variable that is\nadditionally used during make with a consistent set of warning flags.\n\nThe tests/ directory is exempt.  (Rationale being, better to have more\ntests than pedantically complain about them.)\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "53780e30c90ae393467afaf3ccff9e3791df5133",
      "tree": "a02c36b3e1740c457bd3a5a6fd93847d8aaead9f",
      "parents": [
        "d689d1a0c69726330d69b2dd412fdb8dcb23394b"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 09:07:09 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:19:19 2015 +0200"
      },
      "message": "bgpd: drop unused static variable\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d689d1a0c69726330d69b2dd412fdb8dcb23394b",
      "tree": "ff0d7e24363df5021d9a51bd79c04728398c82c6",
      "parents": [
        "dfee58f1d41a2e36c7f5f38a3ef5712224131824"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 13:54:30 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:19:14 2015 +0200"
      },
      "message": "bgpd: fix SNMP write support\n\nThis code - dating back to the initial import in 2002 - probably never\nworked.  Calling asn_parse_int seems to always have been wrong, and in\nthe meantime, there no longer is a \"struct variable *\" argument for\nwrite_method.  If anyone tried to use it, it\u0027d probably have crashed.\n(I didn\u0027t try.)\n\nFix this up so it actually works.  It\u0027s the only place in Quagga where a\nSNMP write is actually supported, so it\u0027s an odd one out anyway, but\nheh.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8c9cd85631b77fac0bc30ffb9f23b29c466d31c4",
      "tree": "73c0687a1306f4a274ba3a057f4913a5d77734fb",
      "parents": [
        "94bad67cd8fe7ad023a40547a1153a414d70fa0a"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Apr 19 14:40:02 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:04 2015 +0200"
      },
      "message": "bgpd: random() returns long\n\nbgpd was using unsigned to store a probability value to be used with\nrandom().  That, however, returns long, running into some warnings (and\nworst case, if RAND_MAX \u003e UINT_MAX, won\u0027t work correctly.\n\nJust use long to shuffle the value around.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    }
  ],
  "next": "94bad67cd8fe7ad023a40547a1153a414d70fa0a"
}
