)]}'
{
  "log": [
    {
      "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"
    },
    {
      "commit": "94bad67cd8fe7ad023a40547a1153a414d70fa0a",
      "tree": "548a50421210ac372b2183f372cda2ff5e6928bc",
      "parents": [
        "d43f8b39b075fe60e0c8fdb33b07b284d3fae503"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:52:22 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:02 2015 +0200"
      },
      "message": "bgpd: don\u0027t use #ifdef inside macro args\n\nUsing #ifdef inside preprocessor macro argument lists is not guaranteed\nto work.  In reality it mostly does, but we don\u0027t need these ifdefs for\nHAVE_IPV6 anymore, so let\u0027s get rid of the warning nonetheless.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d43f8b39b075fe60e0c8fdb33b07b284d3fae503",
      "tree": "8c98dce915aaaabd0707a12c2c08199d0bfdec2e",
      "parents": [
        "b1672ce858cc9c16fd7cc67b673aa241d9583a59"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:54:54 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:01 2015 +0200"
      },
      "message": "bgpd, zebra: fix struct/pointer sizeof mixups\n\nTwo places were taking sizeof(pointer) instead of the sizeof(struct),\nwhile performing operations on the struct.  Both are initialisation\nfunctions;  I guess we haven\u0027t seen fallout since they weren\u0027t critical.\nFix anyway.\n\n[v2: fix mistake that actually broke bgpd RS workqueue init]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b1672ce858cc9c16fd7cc67b673aa241d9583a59",
      "tree": "bf7a76931a2dac5cb741f456f808f7d8ef012c01",
      "parents": [
        "ab90fc04a57b7b1d93ccddb8c9fbbf339a7ffc4c"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Apr 19 15:17:02 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:01 2015 +0200"
      },
      "message": "bgpd: fix ecommunity_token initialiser\n\nThis pulls up ecommunity_token_unknown to be the first enum value (at\n0), and uses that as initialiser to get rid of the uninitialised use\nwarning.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ab90fc04a57b7b1d93ccddb8c9fbbf339a7ffc4c",
      "tree": "7c75add9b86f59da16d636e963402494dfbf6ecd",
      "parents": [
        "388f8857eb81ef75014060976776523a58a99389"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 09:07:25 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:01 2015 +0200"
      },
      "message": "*: add/cleanup initialisers\n\nThere were some (inconsequential) warnings about uninitialised use of\nvariables.  Also, in one case, sub-structs were mixed in initialisation,\nwhich doesn\u0027t quite work as intended.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "21401f3215be26dcb0f787105f5907745498e966",
      "tree": "c99c59e06f3fddad44cbd977f8fadad2dc9e76a7",
      "parents": [
        "b7d5021bfa161f797cbfb1e92bf5b94327fb1b71"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:55:26 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:17:57 2015 +0200"
      },
      "message": "*: fix signedness mix-ups\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b7d5021bfa161f797cbfb1e92bf5b94327fb1b71",
      "tree": "37f3c702812e7fe9dec6ef33925df331d64e02c7",
      "parents": [
        "eed3c48d3a7d2dae2cae2f2f250deffb843754a6"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:53:18 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:17:47 2015 +0200"
      },
      "message": "*: remove stray extra semicolons\n\nSome places had extra semicolons where none belong.  Remove them.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "eed3c48d3a7d2dae2cae2f2f250deffb843754a6",
      "tree": "07b2252438225065024d4a534eddf0e86c9b87a4",
      "parents": [
        "ef008d2f8dc8f7160d8a3d24a15f2fad79ef3242"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:51:53 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:17:31 2015 +0200"
      },
      "message": "*: use void * for printing pointers\n\nOn higher warning levels, compilers expect %p printf arguments to be\nvoid *.  Since format string / argument warnings can be useful\notherwise, let\u0027s get rid of this noise by sprinkling casts to void *\nover printf calls.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ef008d2f8dc8f7160d8a3d24a15f2fad79ef3242",
      "tree": "036d3b4c7bc0071f045bc1cb3a54c422dffc1806",
      "parents": [
        "ec62e1438ece9af0546f9028aa1403f2c84bf177"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:48:11 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Apr 19 20:40:19 2015 +0200"
      },
      "message": "*: use long long to print time_t\n\nSince we can\u0027t assume time_t to be long, int, or even long long, this\nconsistently uses %lld/long long (or %llu/unsigned long long in a few\ncases) to print time_t/susecond_t values.  This should fix a bunch of\nwarnings, on NetBSD in particular.\n\n(Unfortunately, there seems to be no \"PRId64\" style printing macro for\ntime_t...)\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "06bd420d4646333bc7ed9964e348f19a942fcfe2",
      "tree": "d7d2ee186e7ed8e856da3b6d39bef86839d5040f",
      "parents": [
        "aa7dbb1067b7d02e1354fe1e5664ccb7d259d649"
      ],
      "author": {
        "name": "Balaji",
        "email": "balajig81@gmail.com",
        "time": "Mon Mar 16 16:55:29 2015 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 14 12:31:42 2015 +0200"
      },
      "message": "bgpd: Display of configured dampening parameters\n\nFunction to display configured bgp dampening parameters.\n\nSigned-off-by: Balaji.G \u003cbalajig81@gmail.com\u003e\n[DL: formatting adjustments]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "aa7dbb1067b7d02e1354fe1e5664ccb7d259d649",
      "tree": "43cc4818319a53e49a26f330952b37b417d44af9",
      "parents": [
        "941789e470199df4f612368f669ecc0fd096fb9a"
      ],
      "author": {
        "name": "Balaji",
        "email": "balajig81@gmail.com",
        "time": "Mon Mar 16 16:55:26 2015 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 14 12:04:29 2015 +0200"
      },
      "message": "bgpd: Configured suppress value cannot be less than the reuse value in bgp dampening\n\nRFC 2439, Section 4.2; the values pair up for hysteresis.\n\nSigned-off-by: Balaji.G \u003cbalajig81@gmail.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "237aac56960575f6ad2451ba2796d94bd5ae4b33",
      "tree": "f23c49fa32bc6b706bd5f37a9a3a45ce27adf15d",
      "parents": [
        "b6fa76098d127f5641a7dda0dee21f06ca167edb"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Jun 28 22:23:10 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 14 19:19:14 2015 +0100"
      },
      "message": "build: get rid of INCLUDES, use AM_CPPFLAGS\n\nINCLUDES in configure.ac was not used at all, and INCLUDES in\nMakefile.am is supposed to be AM_CPPFLAGS these days.\n\nReduces warnings spewed during bootstrap/autoreconf.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Greg Troxel \u003cgdt@ir.bbn.com\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nAcked-by: Paul Jakma \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "6d6df30386423518b5daef93c2f047b4140f85f4",
      "tree": "7da3226d3276e019c49a4b4a673911a85297ecc7",
      "parents": [
        "0f048b90b5d6e4bd185913945b68dd254126eb9f"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Jun 28 21:12:37 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 14 19:18:49 2015 +0100"
      },
      "message": "build: remove INRIA, NRL and MUSICA IPv6 quirks\n\nValar dohaeris.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Greg Troxel \u003cgdt@ir.bbn.com\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nAcked-by: Paul Jakma \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "cb4fc59c8a0f9df81109d38acbeaab5627e361f5",
      "tree": "a82f0bd7bf0d1fd11cdcd52d2dfa7562a64dabcb",
      "parents": [
        "143637198e333f0c822766b38f9d8cfe75c04e21"
      ],
      "author": {
        "name": "Milan Kocian",
        "email": "milon@wq.cz",
        "time": "Mon Dec 01 12:48:25 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Feb 06 21:53:53 2015 +0100"
      },
      "message": "bgpd: fix negative values in output\n\nNegative value in output of ecommunities (and as numbers)\nseems odd :-). This patch fixes it. And add minor formating\nmodification, better for big as numbers.\n\nSigned-off-by: Milan Kocian \u003cmilon@wq.cz\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "daefeb8755e194dd19a5f1910bc78d13c8147efb",
      "tree": "5e00bccf96a80388e7160aca7a9623c40f874b07",
      "parents": [
        "cffe7807c03b7edea005869086720e2f1fb070c6"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Dec 08 17:42:12 2014 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Dec 08 17:46:07 2014 +0100"
      },
      "message": "bgpd: set BGP_ATTR_MP_[UN]REACH_NLRI (fixes 1a211cb)\n\nUnfortunately, the attribute present bits for MP_REACH and MP_UNREACH\nwhich 1a211cb (\"bgpd: one more fix\"...) tests for are never set in their\ncorresponding attribute parsing functions.\n\nReported-by: Martin Winter \u003cmwinter@netdef.org\u003e\nFixes: 1a211cb \"bgpd: one more fix for tightening of check for missing well-known attributes\"\nCc: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "cffe7807c03b7edea005869086720e2f1fb070c6",
      "tree": "ba2106f3124a31e5cc3107ac75dc6aa16eab6970",
      "parents": [
        "273b1bd341afff86ba571e0be296d88dba627136"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Dec 07 03:27:13 2014 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Dec 07 22:53:20 2014 +0100"
      },
      "message": "bgpd: stop startup timer on stopping BGP (fixes dd49eb1)\n\nbgp_delete() really needs to kill t_startup, otherwise after creating\nand quickly destroying a BGP instance it may fire on a deallocated\nstruct bgp, overwriting memory.\n\nReported-by: Martin Winter \u003cmwinter@netdef.org\u003e\nFixes: dd49eb1 (\"Fix BGP\u0027s use of restart bit.\")\nCc: Vipin Kumar \u003cvipin@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\n"
    },
    {
      "commit": "85c854aa720c02a56b1ecbbf12a763a326d11a63",
      "tree": "23928a702774512c806782e98f9c1aab3eb2f5c5",
      "parents": [
        "1a211cb369dc865a4e7e9f58a100c041af457262"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue Sep 30 11:31:53 2014 +0300"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 25 15:57:12 2014 +0000"
      },
      "message": "bgpd: implement route-map set as-path prepend last-as\n\nIt picks up the AS to add from the aspath, or uses the peers\nAS number. Useful mostly in iBGP setups.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nReviewed-by: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "1a211cb369dc865a4e7e9f58a100c041af457262",
      "tree": "2f9bc481464ea27c46a0389134ee2e31df7e9c7a",
      "parents": [
        "ec98d90767b341877fb7f1547f025b946955899a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Sat Nov 01 17:21:47 2014 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 25 15:57:12 2014 +0000"
      },
      "message": "bgpd: one more fix for tightening of check for missing well-known attributes\n\n* bgp_attr.c: (bgp_attr_check) The check for missing NEXT_HOP has the right\n  spirit, but wrong where it counts, on the logic.  It wouldn\u0027t catch a\n  missing NEXT_HOP on a v4-only UPDATE.  It would though have incorrectly\n  flagged next-hop as missing on multi-protocol-only UPDATEs.\n\n  Caught by Martin Winter with a test-suite.\n"
    },
    {
      "commit": "ec98d90767b341877fb7f1547f025b946955899a",
      "tree": "3a467ac8a7457c55d8c77ea2549d4eb721d8cc61",
      "parents": [
        "dd49eb1f0232cd0600a3565b44b5c066a8d7872d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Tue Oct 14 11:14:06 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:26:16 2014 +0000"
      },
      "message": "bgpd: trivial, remove unneeded extra variable in bgp_capability_restart\n"
    },
    {
      "commit": "dd49eb1f0232cd0600a3565b44b5c066a8d7872d",
      "tree": "58598aae7dfc1c0ec2686314bf58b7e30d5e31a1",
      "parents": [
        "443010383e2c8e5dc1bc722d9e22a97c513b4647"
      ],
      "author": {
        "name": "Vipin Kumar",
        "email": "vipin@cumulusnetworks.com",
        "time": "Tue Sep 30 14:36:38 2014 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:26:10 2014 +0000"
      },
      "message": "Fix BGP\u0027s use of restart bit.\n\nbgpd-restart-bit-fix.patch\n\nISSUE:\n\nQuagga BGP doesn\u0027t send or use the restart-bit via the Graceful-Restart(GR)\ncapability. GR capability implementation isn\u0027t complete as per the RFC.\n\nPATCH:\n\nPatch uses BGP instance creation as the beginning of the startup period,\nand \u0027restart_time\u0027 is taken as the startup period. As a result, BGP will\nset the restart bit in the GR capability of the OPEN messages during the\nstartup period.\n\nAs an indication of quagga implementation\u0027s capability of sending End-Of-RIB,\nhelping a restarting neighbor, quagga BGP will now send global GR capability\nirrespective of the graceful-restart config in BGP and the address-family\nspecific GR capability will be sent only if the GR config is present.\nForwarding bit is not set assuming its not preserved.\n\nIncorporated feedback from David Lamparter via the quagga-dev mailing list.\n\nSigned-off-by: Vipin Kumar \u003cvipin@cumulusnetworks.com\u003e\nReviewed-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "443010383e2c8e5dc1bc722d9e22a97c513b4647",
      "tree": "567e65b01392dcc8183ee92648d2d56709035c43",
      "parents": [
        "4bab6806914dbb4b43f376ebf966a034a0ea72cd"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Thu Oct 09 18:14:54 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:26:10 2014 +0000"
      },
      "message": "bgpd: remove unused variables\n"
    },
    {
      "commit": "ad5233a1bcdd7124992300673ad9c1035336eadd",
      "tree": "bde5fc3a4e11d7b66cada6edbcd0c4c04ef988b0",
      "parents": [
        "8306be211f1bcd5a19e74d08cde399e1b518ed25"
      ],
      "author": {
        "name": "Dinesh G Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue Sep 30 14:19:57 2014 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:25:51 2014 +0000"
      },
      "message": "Add set ipv6 next-hop peer-address command.\n\nIPv4 has the ability to specify the peer address with the keyword peer-address.\nIPv6 mandates the use of a specific global or local address only in setting the\nnext-hop in routemaps. This makes it cumbersome to configure some large networks\nwith BGP and IPv6. This patch fixes that deficiency.\n\nSigned-off-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\nReviewed-by: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "aed1b556cf2f55680ae09d7ad1a1f22729dea8c5",
      "tree": "26f9f14848768bd7bc77fc28c1469b970c41e84a",
      "parents": [
        "9562a7774b76df050d3e01632c6203796dc72c87"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Tue Oct 21 16:59:01 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 28 10:46:24 2014 +0000"
      },
      "message": "bgpd: Fixes for recent well-known-attr check patch.\n\n* bgp_attr.c: Recent patch to tighten well-known attr checks and apply that\n  to all AFIs has some breakage with MP-extensions and GR, which needs to be\n  fixed.\n  (bgp_attr_check) Graceful Restart EoR can be an empty UPDATE for IPv4/uni.\n  MP-Ext allow UPDATE with just MP_UNREACH_NLRI. Check for these and return\n  proceed.\n  NEXT_HOP becomes optional, if MP_REACH_NLRI is present and there\u0027s no\n  v4 NLTI, update NEXT_HOP check accordingly.\n  Print the missing attr in string form in the log message.\n  (bgp_attr_parse) AS_PATH need not be there, so\n  bgp_attr_munge_as4_attrs call needs to be conditional on that.\n"
    },
    {
      "commit": "055086f70febc30fdfd94bb4406e9075d6934cd8",
      "tree": "2f511a8b1aca7b3e67e895321bbfef7d02f074b1",
      "parents": [
        "b166ea2dda9f04a8b75e0bf5adb7064580695f22"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Tue Sep 23 15:23:01 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Oct 17 14:09:02 2014 +0100"
      },
      "message": "bgpd: well-known attr check only run for v4/uni, which could cause a crash.\n\n* ANVL testing by Martin Winter threw up a crash in bgpd in aspath_dup\n  called from bgp_packet_attribute, if attr-\u003easpath was NULL, on an IPv6\n  UPDATE.\n\n  This root cause is that the checks for well-known, mandatory attributes\n  were being applied only if an UPDATE contained the IPv4 NLRI and the\n  peer was configured for v4/unicast (i.e. not deconfigured). This is\n  something inherited from GNU Zebra, and never noticed before.\n\n* bgp_attr.c: (bgp_attr_parse) Move the well-known mandatory attribute\n  check to here, so that it can be run immediately after all attributes\n  are parsed, and before any further processing of attributes that might\n  assume the existence of WK/M attributes (e.g. AS4-Path).\n  (bgp_attr_munge_as4_attrs) Missing AS_PATH shouldn\u0027t happen here anymore,\n  but retain a check anyway for robustness - it\u0027s definitely a hard error\n  though.\n* bgp_attr.h: (bgp_attr_check) No longer needs to be exported, make static.\n* bgp_packet.c: (bgp_update_receive) Responsibility for well-known check\n  now in bgp_attr_parse.\n"
    },
    {
      "commit": "b2dd59ee0e74926278e128846624f5c93288223b",
      "tree": "d54b3798315a2b0b46f8730747584eff75b5e370",
      "parents": [
        "7aa9dcef80b2ce50ecaa77653d87c8b84e009c49"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Fri Sep 19 15:34:48 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Sep 23 16:33:20 2014 +0100"
      },
      "message": "bgpd.c: Remove unused store to variable\n"
    },
    {
      "commit": "7aa9dcef80b2ce50ecaa77653d87c8b84e009c49",
      "tree": "bd4a8d881336a1551146725d7ae06b3e68553e4d",
      "parents": [
        "010ebbbca6396f272cc2d50d147dd922dda68213"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Fri Sep 19 14:42:23 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Sep 23 16:32:34 2014 +0100"
      },
      "message": "Fix most compiler warnings in default GCC build.\n\nFix lots of warnings. Some const and type-pun breaks strict-aliasing\nwarnings left but much reduced.\n\n* bgp_advertise.h: (struct bgp_advertise_fifo) is functionally identical to\n  (struct fifo), so just use that.  Makes it clearer the beginning of\n  (struct bgp_advertise) is compatible with with (struct fifo), which seems\n  to be enough for gcc.\n  Add a BGP_ADV_FIFO_HEAD macro to contain the right cast to try shut up\n  type-punning breaks strict aliasing warnings.\n* bgp_packet.c: Use BGP_ADV_FIFO_HEAD.\n  (bgp_route_refresh_receive) fix an interesting logic error in\n  (!ok || (ret !\u003d BLAH)) where ret is only well-defined if ok.\n* bgp_vty.c: Peer commands should use bgp_vty_return to set their return.\n* jhash.{c,h}: Can take const on * args without adding issues \u0026 fix warnings.\n* libospf.h: LSA sequence numbers use the unsigned range of values, and\n  constants need to be set to unsigned, or it causes warnings in ospf6d.\n* md5.h: signedness of caddr_t is implementation specific, change to an\n  explicit (uint_8 *), fix sign/unsigned comparison warnings.\n* vty.c: (vty_log_fixed) const on level is well-intentioned, but not going\n  to fly given iov_base.\n* workqueue.c: ALL_LIST_ELEMENTS_RO tests for null pointer, which is always\n  true for address of static variable.  Correct but pointless warning in\n  this case, but use a 2nd pointer to shut it up.\n* ospf6_route.h: Add a comment about the use of (struct prefix) to stuff 2\n  different 32 bit IDs into in (struct ospf6_route), and the resulting\n  type-pun strict-alias breakage warnings this causes.  Need to use 2\n  different fields to fix that warning?\n\ngeneral:\n\n* remove unused variables, other than a few cases where they serve a\n  sufficiently useful documentary purpose (e.g.  for code that needs\n  fixing), or they\u0027re required dummies.  In those cases, try mark them as\n  unused.\n* Remove dead code that can\u0027t be reached.\n* Quite a few \u0027no ...\u0027 forms of vty commands take arguments, but do not\n  check the argument matches the command being negated.  E.g., should\n  \u0027distance X \u003cprefix\u003e\u0027 succeed if previously \u0027distance Y \u003cprefix\u003e\u0027 was set?\n  Or should it be required that the distance match the previously configured\n  distance for the prefix?\n  Ultimately, probably better to be strict about this.  However, changing\n  from slack to strict might expose problems in command aliases and tools.\n* Fix uninitialised use of variables.\n* Fix sign/unsigned comparison warnings by making signedness of types consistent.\n* Mark functions as static where their use is restricted to the same compilation\n  unit.\n* Add required headers\n* Move constants defined in headers into code.\n* remove dead, unused functions that have no debug purpose.\n"
    },
    {
      "commit": "1520e4748129c4eb97ac3090bcc97149a1900611",
      "tree": "f4501a77bcb9e3ecabfd9dd5f80ee3e71cb35119",
      "parents": [
        "342a31bfda21616209366679ac522471e5772a2f",
        "90444ca35e3037ed43ec695428f0ef6d82f9a320"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Aug 19 18:15:40 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Aug 19 18:15:40 2014 +0200"
      },
      "message": "*: merge branch stable/0.99.23\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "4c005e3f65a1f5b4592b1ebbac392cbb1a710998",
      "tree": "ec2feadf6fe20841a179d31714a053863919ae1e",
      "parents": [
        "3ef0b877f08344aa52367794aa4ec32b12becd6d"
      ],
      "author": {
        "name": "John Glotzer",
        "email": "glotzer@amazon.com",
        "time": "Mon Aug 04 19:39:23 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Aug 18 01:52:26 2014 +0200"
      },
      "message": "bgpd: memmove needed in community_del_val\n\nIn bgpd/bgp_community_del_val memcpy is used for potentially overlapping\nregions which is *not* safe. It may \"work\" in some cases but is not\nguaranteed to work in all cases. The case that I saw fail was on an\nx86_64 architecture with the number of bytes being moved/copied equal to\n8.\n\nThe way the code is written the uint32_t pointers will always differ by\n1, which is equivalent to a memcpy/memmove of regions that are 4 bytes\naway from one another. So the code failed while copying an 8 byte region\nto an address that is 4 bytes lower i.e. overlapping regions.\n\nInterestingly, the same architecture had no problems with a 12 byte\ncopy.\n\nWhen the code failed the communities were [200,300,400] and a call was\nmade to delete the 200 community. The result of this was an array that\nlooked like [400,400] which was uniquified to [400]. Of course the\nexpected result should have been [300, 400].\n\nOne additional point - in our production environment memmove would not\n*link* without including \u003cstring.h\u003e but in an isolated quagga git repo\nthis #include does not seem to be required and I see memmove is used in\nvtysh.c without this #include either.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "052573ee2319b21657a79e1b76a5c801701fa38c",
      "tree": "32a731414c3b0a70516461befd9c22baf77b0587",
      "parents": [
        "0ff692ed59696c534e6bfd0f9d6e83706fbbec4a",
        "f57000c0dbdd0e30e71b6651022392f284201e19"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:52:52 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:52:52 2014 +0200"
      },
      "message": "*: merge branch stable/0.99.23\n\nbgp extcommunity fixes from stable branch\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f57000c0dbdd0e30e71b6651022392f284201e19",
      "tree": "9a00b90323fa93de9ecb10c65f9f82824fda99b8",
      "parents": [
        "bb02b82354a80f74706efc5e4c914b3f89fb033e"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 01:01:10 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: don\u0027t send NOTIFY twice for malformed attrs\n\nMost of the attribute parsing functions were already sending a notify,\nlet\u0027s clean up the code to make it happen only once.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "bb02b82354a80f74706efc5e4c914b3f89fb033e",
      "tree": "d7662f309686113478121b54859e048f44ee6ac2",
      "parents": [
        "f80f838b2f54738937ef1281b237710132195c44"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 01:01:00 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: fix IP endianness in debug message\n\ninet_ntop expects network byte order.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f80f838b2f54738937ef1281b237710132195c44",
      "tree": "e5dbb9062560ac02ad2e5baf62c8d820560c75d2",
      "parents": [
        "27bf90a14670283a899b96c56dd23f8413e0973e"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 01:00:51 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: fix memory leak on malformed attribute\n\nWhen bgp_attr_parse returns BGP_ATTR_PARSE_ERROR, it may already have\nparsed and allocated some attributes before hitting that error.  Free\nthe attr\u0027s data before returning.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "27bf90a14670283a899b96c56dd23f8413e0973e",
      "tree": "e52498c5d70f6efef4d9a827b6974a2f597b2e30",
      "parents": [
        "73d78ea0153fd36a300be5fec2ef0fca34a67477"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 00:59:01 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: fix double free after extcommunity set (BZ#799)\n\nThe route-map extcommunity set code was incorrectly assuming that it\nowns the intern\u0027d struct ecommunity reference.  In reality, the intern\u0027d\nreference belongs to bgp_update_receive() and we\u0027re not supposed to\ntouch it in the route-map code.\n\nInstead, like all the other set commands, we use a on-heap but\nnon-intern\u0027d ecommunity to set the new value.  This is then either\nintern\u0027d in bgp_update_main/_rsclient() through bgp_attr_intern(), or\nfree\u0027d through bgp_attr_flush().\n\nThis fixes Bugzilla #799, which is that bgpd otherwise crashes with a\ndouble free.  The ecommunity got unintern\u0027d first in the route-map set\ncommand, then in bgp_update_receive().\n\nDebugged-by: Milan Kocian \u003cmilon@wq.cz\u003e\nReported-by: Florian S \u003cflorian@herrenlohe.de\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "73d78ea0153fd36a300be5fec2ef0fca34a67477",
      "tree": "a56383725b587c60c584db85cb1757588d3ea2ed",
      "parents": [
        "c460e5720c1101a6da53e5b753b736ac2c7981af"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 00:58:47 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: remove duplicate route-map extcommunity code\n\nroute_set_ecommunity_rt and _soo share almost all of their code.\nLet\u0027s remove one of the redundant copies.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c460e5720c1101a6da53e5b753b736ac2c7981af",
      "tree": "a60baf501e16e92a472e50bc2383bfd937ba0bfd",
      "parents": [
        "a4b5665f76d9e907a547c85c9c4a7a656c568b9d"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 00:54:58 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: fix some bgp_update_main() attribute leaks\n\nbgp_update_main() wasn\u0027t doing anything to release attribute values\nset from route maps for two of its error paths.  To fix, pull up the\nappropriate cleanup from further down and apply it here.\n\nbgp_update_rsclient() doesn\u0027t have the issue since it immediately\ndoes bgp_attr_intern() on the results from bgp_{export,import}_modifier.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b304dcb8abc4e5b93f86a4024990980746e730be",
      "tree": "04ce8991a879b756c389370b5b7a9329fa13bb7b",
      "parents": [
        "9e7a53c179f6897128b24435452b5d3d0f8c715a"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue May 20 09:04:49 2014 +0300"
      },
      "committer": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Jun 25 21:21:52 2014 +0300"
      },
      "message": "bgpd: route-map: share aspath object compilation code where possible\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\n"
    },
    {
      "commit": "9e7a53c179f6897128b24435452b5d3d0f8c715a",
      "tree": "80a5cc6e9e6dc411587764d865a2bf5f489000ba",
      "parents": [
        "2aa640bd78b64821bde9a53ecdd1e96e91b20ae4"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Thu Apr 24 10:22:37 2014 +0300"
      },
      "committer": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Jun 25 21:20:20 2014 +0300"
      },
      "message": "bgpd: implement \"next-hop-self all\"\n\nAs specified in:\nhttp://www.cisco.com/c/en/us/td/docs/ios-xml/ios/iproute_bgp/command/irg-cr-book/bgp-m1.html#wp4972925610\n\nThis allows overriding next-hop for ibgp learned routes on an\nRR for reflected routes.\n\nEspecially useful for using iBGP in DMVPN setups. See:\nhttp://blog.ipspace.net/2014/04/changes-in-ibgp-next-hop-processing.html\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\n"
    },
    {
      "commit": "2aa640bd78b64821bde9a53ecdd1e96e91b20ae4",
      "tree": "419c61e63e6484031512e69435cdeaa6695d9aca",
      "parents": [
        "a4b5665f76d9e907a547c85c9c4a7a656c568b9d"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue May 20 08:57:26 2014 +0300"
      },
      "committer": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Jun 25 21:20:20 2014 +0300"
      },
      "message": "bgpd: fix route-map comments\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\n"
    },
    {
      "commit": "6b0655a25194c7c0331154edaa6124cf783e5e5e",
      "tree": "c0c7d479f2684531249668210da27a60322ba395",
      "parents": [
        "fdb913aedb5a9807ad60715e8badb4f25d57acea"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 06:53:35 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 06:58:02 2014 +0200"
      },
      "message": "*: nuke ^L (page feed)\n\nQuagga sources have inherited a slew of Page Feed (^L, \\xC) characters\nfrom ancient history.  Among other things, these break patchwork\u0027s\nXML-RPC API because \\xC is not a valid character in XML documents.\n\nNuke them from high orbit.\n\nPatches can be adapted simply by:\n\tsed -e \u0027s%^L%%\u0027 -i filename.patch\n(you can type page feeds in some environments with Ctrl-V Ctrl-L)\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d9d4ae5157207b9b8bdb167983519a7ffb860f2c",
      "tree": "8919a83dcb99aac5fa0141f873525517d5e3b7ac",
      "parents": [
        "8c71e481dae11b7ae3f1ef561a989624b2ae84b6"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen@networkplumber.org",
        "time": "Wed Jan 13 00:32:39 2010 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 03 15:30:22 2014 +0200"
      },
      "message": "bgpd: fix crash when allowas-in is done on inactive peer\n\nWhen allowas-in is changed on a peer that is not up, BGP would crash\ntrying to do route_refresh.  If peer is not up, there is no need\nto do notification or send.\n\nSigned-off-by: Stephen Hemminger \u003cstephen@networkplumber.org\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8c71e481dae11b7ae3f1ef561a989624b2ae84b6",
      "tree": "4c13b76e1b9aedc45ad9b086be972ba4999ada03",
      "parents": [
        "2c13299a05e5544a5e79c2a970256a21f488a3fa"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Wed Jan 15 06:57:57 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 03 15:08:32 2014 +0200"
      },
      "message": "bgpd: efficient NLRI packing for AFs !\u003d ipv4-unicast\n\nISSUE:\n\n  Currently, for non-ipv4-unicast address families where prefixes are\n  encoded in MP_REACH/MP_UNREACH attributes, BGP ends up sending one\n  prefix per UPDATE message. This is quite inefficient. The patch\n  addresses the issue.\n\nPATCH:\n\n  We introduce a scratch buffer in the peer structure that stores the\n  MP_REACH/MP_UNREACH attributes for non-ipv4-unicast families. This\n  enables us to encode multiple prefixes. In the end, the two buffers\n  are merged to create the UPDATE packet.\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\n[DL: removed no longer existing bgp_packet_withdraw prototype]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "2c13299a05e5544a5e79c2a970256a21f488a3fa",
      "tree": "1d277afb9b346388e1aa244484c3af41dcd6a72e",
      "parents": [
        "66d2ead7df2db9144605c973fcd80b88df33f81b"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Sat Sep 07 07:07:20 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 03 15:08:08 2014 +0200"
      },
      "message": "bgpd: don\u0027t compare next-hop to router-id\n\nWhile announcing a path to a peer, the code currently compares the path\u0027s\nnext-hop with the peer\u0027s router-id. This can lead to problems as the router\nIDs are unique only within an AS. Suppose AS 1 sends route with next-hop\n10.1.1.1. It is possible that the speaker has an established BGP peering\nwith a router in AS 2 with router ID 10.1.1.1. The route will not be\nadvertised to that peer in AS 2.\n\nThe patch removes this check.\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\nReviewed-by: Shrijeet Mukherjee \u003cshm@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "000e157c852653288c5a1e6d0dee821c1765d315",
      "tree": "28a654105d50b5f55c9e865a223ba93366fe3839",
      "parents": [
        "5d804b439a4138c77f81de30c64f923e2b5c1340"
      ],
      "author": {
        "name": "Milan Kocian",
        "email": "milon@wq.cz",
        "time": "Fri Oct 18 07:59:38 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:51:19 2014 +0200"
      },
      "message": "bgpd: Fix condition allowas-in in rsclient code\n\nCurrently when you set neighbour\u0027s \u0027allowas-in\u0027 option on route server side\nyou get redistribution of the prefixes from this neighbour\u0027s table into all\nneighbour\u0027s tables which have the same AS number. I think that wanted behaviour\nis to allow import prefixes from neighbour\u0027s tables with the same AS num\ninto neighbour which has \u0027allowas-in\u0027 option set.\n\nSigned-off-by: Milan Kocian \u003cmilon@wq.cz\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "5d804b439a4138c77f81de30c64f923e2b5c1340",
      "tree": "b63e3dc3a266d42311392e57c37e2b0a9855ff0b",
      "parents": [
        "5f9adb5d26d3af31b00c02084468e9f92b461b01"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Thu Sep 12 03:37:07 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:25:46 2014 +0200"
      },
      "message": "bgpd: support TTL-security with iBGP\n\nTraditionally, ttl-security feature has been associated with EBGP\nsessions as those identify directly connected external peers. The\nGTSM RFC (rfc 5082) does not make any restrictions on type of\npeering. In fact, it is beneficial to support ttl-security for both\nEBGP and IBGP sessions. Specifically, in data centers, there are\ndirectly connected IBGP peerings that will benefit from the protection\nttl-security provides.\n\nSigned-off-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\nReviewed-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\n[DL: function refactoring split out into previous 2 patches.  changes:\n     - bgp_set_socket_ttl(): ret type int -\u003e void\n     - is_ebgp_multihop_configured(): stripped peer \u003d\u003d NULL check\n     - comments/whitespace]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "5f9adb5d26d3af31b00c02084468e9f92b461b01",
      "tree": "640a6c4e855697777f672c384c37fffd5ae72d07",
      "parents": [
        "ef0b0c3e95a1f30d6f338100c689feef8ad5cd6e"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:15:02 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:25:46 2014 +0200"
      },
      "message": "bgpd: factor out eBGP multihop check\n\nThe check for an eBGP multihop configuration is unwieldy;  factor it out\ninto a separate function.\n\n[DL: originally by Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e,\n     split off from the next commit]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ef0b0c3e95a1f30d6f338100c689feef8ad5cd6e",
      "tree": "9848b1d05c2e1424e464cac41be51f32d7b87d78",
      "parents": [
        "8da8689d91a6436c17aca5000b1426aaea47e23c"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 22:52:04 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:25:46 2014 +0200"
      },
      "message": "bgpd: factor out TTL setting\n\nTTL/min TTL are set from both bgp_accept() and bgp_connect().  Factor\nthem out so the following change to enable iBGP GTSM becomes more\nreadable.\n\n[DL: originally by Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e,\n     split off from the next commit]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8da8689d91a6436c17aca5000b1426aaea47e23c",
      "tree": "f4929119d4f41c668708d19374719765d7cb7f25",
      "parents": [
        "3374bef0412ac11815779f54321cbc4bf96da909"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Wed Sep 11 03:33:55 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:25:39 2014 +0200"
      },
      "message": "bgpd: fix fast external fallover behavior\n\nISSUES\n\n1. When an interface goes down, the zclient callbacks are invoked\n   in the following order: (a) address_delete() that removes the\n   connected address list: ifp-\u003econnected, (b) interface_down()\n   that performs \"fast external fallover\" operation. The operation\n   relies on ifp-\u003econnected to look for peers that should be brought\n   down. That\u0027s a cyclic dependency.\n\n2. \u0027ttl-security\u0027 configuration handler sets peer-\u003ettl to\n   MAXTTL (so that BGP packets are sent with TTL\u003d255, as per the\n   requirement of ttl-security). This, however, is incompatible\n   with \u0027fast external fallover\u0027 as the fallover operation checks\n   for (ttl \u003d\u003d 1) to determine directly connected peers.\n\n3. The current fallover operation does not work for IPv6 address family.\n\nPATCH\n\n1. The patch removes the dependency on \u0027ifp-\u003econnected\u0027 list for fast\n   fallover. The peer already contains a nexthop structure that reflects\n   the peering address. The nexthop structure has a pointer to the\n   interface (ifp) that peering address resolves to. Everytime the TCP\n   connection succeeds, the ifp is updated. The patch uses this ifp in\n   the interface_down() callback for a match for the peers that should be\n   brought down.\n\n2. The evaluation for directly connected peering is enhanced as\n   \u0027peer-\u003ettl \u003d\u003d 1\u0027 OR \u0027peer-\u003egtsm_hops \u003d\u003d 1\u0027. Thus a ttl-security\n   configuration on the peer with one hop is directly connected and\n   should be brought down under \u0027fast external fallover\u0027.\n\n3. Because of fix (1), IPv6 address family works automatically.\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3374bef0412ac11815779f54321cbc4bf96da909",
      "tree": "bba5f91b10c31e5987aa2d02d44de7d5c74c537c",
      "parents": [
        "48fc05fb7e6ee44db9f73f3194bfd4738b7f9dc1"
      ],
      "author": {
        "name": "Vipin Kumar",
        "email": "vipin@cumulusnetworks.com",
        "time": "Thu Jan 09 00:31:22 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 20:34:53 2014 +0200"
      },
      "message": "bgpd: increase TCP socket buffer size\n\nBGP does not respond fairly in high scale.  As the number of BGP peers\nand prefixes increase, triggers like interface flaps which lead to BGP\npeer flaps, cause blockage in bgp_write.\n\nBGP does handle the cases of TCP socket buffer full by queuing a write\nevent back, there is no functional issue there as such. Still,\nincreasing the peer socket buffer size should help reduce event queueing\nin BGP.\n\nSigned-off-by: Vipin Kumar \u003cvipin@cumulusnetworks.com\u003e\nReviewed-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\n[DL: patch split, this is item 3.]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "48fc05fb7e6ee44db9f73f3194bfd4738b7f9dc1",
      "tree": "e0c11382f69fd3159600d18150f846dc104d8e43",
      "parents": [
        "6aa136f1eaeb0dfc1e39e6c2cd6380a399ef126f"
      ],
      "author": {
        "name": "Vipin Kumar",
        "email": "vipin@cumulusnetworks.com",
        "time": "Thu Jan 09 00:31:22 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 20:27:12 2014 +0200"
      },
      "message": "bgpd: fix O_NONBLOCK on outgoing connects\n\nBGP was setting sockets to be non-blocking only for the accepted passive\npeers.  As a fix, setting the BGP sockets to be non-blocking even for\nthe active peers.\n\nSigned-off-by: Vipin Kumar \u003cvipin@cumulusnetworks.com\u003e\nReviewed-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\n[DL: patch split, this is item 1.]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "6aa136f1eaeb0dfc1e39e6c2cd6380a399ef126f",
      "tree": "b1313a9961fe29a4ccf91571a5c772545351084d",
      "parents": [
        "b366b518401e0b0652cd70d297d3fb67b4803db0"
      ],
      "author": {
        "name": "Vitaliy Senchyshyn",
        "email": "vsenchyshyn@toroki.com",
        "time": "Wed Oct 02 10:40:20 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 19:54:04 2014 +0200"
      },
      "message": "bgpd: send notify in OpenSent when stopping manually\n\nThe issue it fixes is that the notification message is not sent to a\nsecond peer when bgp is stopped manually.\n\nAccording to BGP RFC4271, section 8.2.2, regarding the FSM transitions,\nin OpenSent state:\n\nIf a ManualStop event (Event 2) is issued in the OpenSent state, the\nlocal system:\n\n  * sends the NOTIFICATION with a Cease,\n  * sets the ConnectRetryTimer to zero,\n  * releases all BGP resources,\n  * drops the TCP connection,\n  * sets the ConnectRetryCounter to zero, and\n  * changes its state to Idle.\n\nI\u0027ve added a check for OpenSent state when the notification is sent from\nthe functions which are called from the CLI commands which\ndirectly/indirectly stop/restart BGP.\n\nAcked-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b366b518401e0b0652cd70d297d3fb67b4803db0",
      "tree": "5f05079e281f0ec503ee408b1f7502cc49cad82e",
      "parents": [
        "689bb66c6a92d238bed1a8b0920438c5a2271966"
      ],
      "author": {
        "name": "Boian Bonev",
        "email": "bbonev@ipacct.com",
        "time": "Mon Sep 09 16:41:35 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 19:23:36 2014 +0200"
      },
      "message": "bgpd: display multipath status in \"show ip bgp\"\n\nThe output of \"show ip bg\" does not show whether and which routes are\ninstalled as multipath routes along the best route:\n\nBGP table version is 0, local router ID is 10.10.100.209\nStatus codes: s suppressed, d damped, h history, * valid, \u003e best, i - internal,\n              r RIB-failure, S Stale, R Removed\nOrigin codes: i - IGP, e - EGP, ? - incomplete\n\n   Network          Next Hop            Metric LocPrf Weight Path\n*\u003ei1.0.0.0/24       10.10.100.1              1    111      0 15169 i\n* i                 10.10.100.2              1    111      0 15169 i\n* i                 10.10.100.3              1    111      0 65100 15169 i\n\nThis patch adds a new status code that is showing exactly which routes\nare used as multipath:\n\nBGP table version is 0, local router ID is 10.10.100.209\nStatus codes: s suppressed, d damped, h history, * valid, \u003e best, \u003d multipath,\n              i internal, r RIB-failure, S Stale, R Removed\nOrigin codes: i - IGP, e - EGP, ? - incomplete\n\n   Network          Next Hop            Metric LocPrf Weight Path\n*\u003ei1.0.0.0/24       10.10.100.1              1    111      0 15169 i\n*\u003di                 10.10.100.2              1    111      0 15169 i\n* i                 10.10.100.3              1    111      0 65100 15169 i\n\nThe inconsistency in the status code legend (\"i - internal\" vs. \"i internal\")\ninherent from old IOS was fixed. It had to be touched anyways.\n\nSigned-off-by: Boian Bonev \u003cbbonev at ipacct.com\u003e\n[DL: rewrap long line, clean whitespace in same chunk]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "689bb66c6a92d238bed1a8b0920438c5a2271966",
      "tree": "4cf3ee1be6acdb4cf3b85d3da83e09cb64d29ba9",
      "parents": [
        "2fdd455cfd1f758b7aa2e6c8e3d185098b93908c"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Sat Sep 07 07:13:37 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 19:15:45 2014 +0200"
      },
      "message": "bgpd: track correct originator-id in reflected routes\n\nISSUE:\n\nSuppose route1 and route2 received from route-reflector-client1 and client2\nrespectively have identical attributes. The current logic of creating the\nadj-rib-out for a peer threads the \u0027adv\u0027 structures for both routes against\nthe same attribute. This results in \u0027bgp_update_packet()\u0027 to pack those\nroutes in the same UPDATE message with one attr structure formatted. The\noriginator-id is thus set according to the first route\u0027s received router id.\nThis is incorrect.\n\nPATCH:\n\nFix bgp_announce_check() function to set the originator-id in the\nadvertising attr structure. Also, fix the attribute hash function and\ncompare function to consider originator-id. Otherwise attributes where all\nfields except the originator-id are identical get merged into one memory\nlocation.\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat at cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma at cumulusnetworks.com\u003e\nReviewed-by: Ken Yin \u003ckyin at cumulusnetworks.com\u003e\n[DL: whitespace changes dropped]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "2fdd455cfd1f758b7aa2e6c8e3d185098b93908c",
      "tree": "3b2d28c7b389228cc6c1e3809660c4f7f22c3f18",
      "parents": [
        "d92a2f39b46f1990052d2db046b47edf7bb21ebb"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Sat Sep 07 07:02:36 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 19:15:22 2014 +0200"
      },
      "message": "bgpd: add \u0027bgp bestpath as-path multipath-relax\u0027\n\nCompute multipath in BGP based on AS_PATH hop count match. If the knob\nis turned on, it is not required to have an exact match of AS_PATHs\n(provided other multipath conditions are met, of course).\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat at cumulusnetworks.com\u003e\nReviewed-by: Dinesh G Dutt \u003cddutt at cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d92a2f39b46f1990052d2db046b47edf7bb21ebb",
      "tree": "17d73b5e879e6ce15c28496d86166bd78ec3f3b0",
      "parents": [
        "cbf435cb72b937c9e5bfe38905e05de3755b1021"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Wed Jul 31 16:36:08 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 19:02:21 2014 +0200"
      },
      "message": "bgpd: use ATTR_FLAG_BIT() for BGP_ATTR_ values\n\n* bgp_attr.c: this UNSET_FLAG()s are bogus. I did a quick review and\n  I think that they could not cause any bug anyway.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "cd40b329a2e4da882bcad0431c048c876bbeafbd",
      "tree": "cfbdec5a7559c6d3e56766797896a18809aa1746",
      "parents": [
        "e712d0e3667ffad8109ef8bce3ce01927ee95bb7"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Mon Sep 30 12:27:51 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 01 20:21:41 2014 +0200"
      },
      "message": "lib/command.c: rewrite command matching/parsing\n\nAdd support for keyword commands.\n\nIncludes new documentation for DEFUN() in lib/command.h, for preexisting\nfeatures as well as new keyword specification.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "2b00515a9b639fd1e057f3ebf10ded2dde920764",
      "tree": "1167cb145764208a132599e5d83980708501bac4",
      "parents": [
        "f7bf41534e885c7bc077529c591a1bce24a5f1e9"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Mon Sep 30 12:27:49 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 01 17:32:49 2014 +0200"
      },
      "message": "bgpd, ospfd, zebra: fix some DEFUN definitions\n\nFixup some DEFUNS with incorrect command strings or mixed up helpstrings.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "6ee06fa9ed91412cb745668d462031cdbe2642e0",
      "tree": "107e951abc716c2ca15fbcc62bdb0858b35036e8",
      "parents": [
        "a83a1e9c2f035d3152451dcfc97ab13b4ac427b9"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Sun Jan 12 18:30:13 2014 +0000"
      },
      "committer": {
        "name": "Vincent JARDIN",
        "email": "vincent.jardin@6wind.com",
        "time": "Mon Feb 10 09:37:30 2014 +0100"
      },
      "message": "bgpd: bgpd-set-v4-nexthop-for-v6-peering.patch\n\nBGP: While advertising v4 prefixes over a v6 session, set the correct v4 nexthop.\n\nISSUE:\n\nFor an IPv6 peer, BGPd sets the local router-id as the next-hop\u0027s v4 address.\nThis is incorrect as the router-id may not be a valid next-hop to be included\nin UPDATEs that contain v4 prefixes.\n\nPATCH:\n\nSet the v4 address in the next-hop field based on the interface that the\npeering is on (directly connected interface or loopback).\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat at cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma at cumulusnetworks.com\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "a12afd5e8e57c95505d4d0166af234c7f19e9fe1",
      "tree": "62f3d6a2d92ce06d857fd90240a8a8806ff38951",
      "parents": [
        "bb97e4622ed6f48e2b8e07f1f94edd03162223a1"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Sat May 25 14:01:36 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Aug 06 12:41:46 2013 +0200"
      },
      "message": "bgpd, zebra: support NEXTHOP_IPV4_IFINDEX in bgp import check\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "bb97e4622ed6f48e2b8e07f1f94edd03162223a1",
      "tree": "5729ccb02f1de89d4d9bbe5b537de45803d1cf55",
      "parents": [
        "5b9f51828db732d56053500b1d257797f7f3401b"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Sat May 25 14:01:35 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Aug 06 12:41:46 2013 +0200"
      },
      "message": "bgpd, zebra: Support NEXTHOP_IPV4_IFINDEX in nexthop_lookup api\n\nSince commit ba281d3d040, ospfd uses NEXTHOP_IPV4_IFINDEX\nroutes. The API between zebra and bgpd which is used to query\nnexthops for recursive routes did not support this nexthop\ntype and therefore, ospf changes (or any other IGP changes\nwhich use NEXTHOP_IPV4_IFINDEX) would never trigger any\nrecursive route update.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a0f6ce5b41dcfa059074d72c8fc61896d3e996a9",
      "tree": "cfaa7586f2d5f434a851088dc7f29a546c74d26c",
      "parents": [
        "4ff3bcad8e81b643f3247317a3949d7867b36f75"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Thu Apr 11 08:24:30 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jul 31 18:49:50 2013 +0200"
      },
      "message": "bgpd: honor PEER_FLAG_DISABLE_CONNECTED_CHECK on bgp_scan\n\nWhen neighbor disable-connected-check was used, bgpd would accept routes\nwith unconnected nexthop as indended, however those routes would be\ninvalidated on the next bgp_scan run as that function did not know about\ndisable-connected-check.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8ff202e2d3fa7ebbd6728fdd230f3ad1a20578cd",
      "tree": "6f8ffd3a083bee4c8c8fa2b4e2eb5981b4af1cbe",
      "parents": [
        "9e47abd862f71847a85f330435c7b3a9b1f76099"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jul 31 14:39:41 2013 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jul 31 14:44:24 2013 +0200"
      },
      "message": "bgpd: write NOTIFY non-blockingly\n\nswitching the socket to blocking may well block the entire bgpd process\nfor some time if our peer is overloaded (which may well be the original\nreason for the NOTIFY)\n\nThe error handling is slightly different from the previous ML discussion\non this;  buffer exhaustion isn\u0027t technically a fatal TCP error, and we\nshould probably proceed with FSM actions according to a sent NOTIFY\n(adjusting timers) even if we didn\u0027t manage to get the NOTIFY onto the\nwire.\n\nAcked-by: Leonid Rosenboim \u003clrosenbo@wrs.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "9e47abd862f71847a85f330435c7b3a9b1f76099",
      "tree": "375f9e63d4a1b206addb615a906f2f5608823612",
      "parents": [
        "397b5bded5654a31b4bd3b904f091fd3859aecf7"
      ],
      "author": {
        "name": "Rakesh Garimella",
        "email": "rakesh.garimella@sophos.com",
        "time": "Mon Mar 11 12:38:31 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jul 30 20:27:50 2013 +0200"
      },
      "message": "bgpd: prevent double address delete on shutdown\n\nbgp_interface_down() and bgp_exit() both proceed to delete the address\nfrom bgpd\u0027s interface representation, so the second call gets a NULL\nresult from the hash lookup and subsequently crashes.\n\nSigned-off-by: Rakesh Garimella \u003crakesh.garimella@sophos.com\u003e\n[reformatted]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "397b5bded5654a31b4bd3b904f091fd3859aecf7",
      "tree": "5b2a0f99bfa8dd6b774c1149948bc7a5aec3d7d5",
      "parents": [
        "c423d413e464913ee88c1ee700e2c4037e6bdb24"
      ],
      "author": {
        "name": "Leonid Rosenboim",
        "email": "lrosenbo@wrs.com",
        "time": "Tue Jul 30 20:14:25 2013 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jul 30 20:20:07 2013 +0200"
      },
      "message": "bgpd: stricter packet handling in OpenSent\n\nKeepalives and updates are not expected in OpenSent, prior to receiving\nthe peer\u0027s open message.  Terminate the session with the proper\nnotification.\n\nFrom: Leonid Rosenboim \u003clrosenbo@wrs.com\u003e\n[split off FSM changes, some reordering \u0026 cleanup.  read handling needs\n to be separately addressed]\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "90645f5598ca8b25cd2692f2ac0d2778a3fd2755",
      "tree": "2b5e67b020eb3f7a2fd9df4faf2f0914e0cbf0cf",
      "parents": [
        "44a86a0278c1678fd4b8dfa56c4f5f2feb6df3ad"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Fri Jan 04 22:29:21 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Feb 24 20:42:40 2013 +0100"
      },
      "message": "hash: force size to be a power of 2\n\nBy forcing the hash table size to be a power of 2, a potentially\nexpensive divide can be replaced by a mask operation. Almost all\nusage of the hash table was using default size of 1024. Only places\nwith different size was thread library (1011) and bgp aspath.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "0e4303d3173ecc264b3ec39a863174670bbe2900",
      "tree": "f525c8543f07581c9a87fcffb843537e87ddf820",
      "parents": [
        "f1ef81b2476ea533ac3d2129aa0e89653c427323"
      ],
      "author": {
        "name": "Roman Hoog Antink",
        "email": "rha@open.ch",
        "time": "Fri Jan 18 13:52:03 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 23 18:22:34 2013 +0100"
      },
      "message": "bgpd: fix lost passwords of grouped neighbors\n\nThis patch resolves the significance of order of group and password\nstatements.\n\nIt prevents passwords from being lost in cases where all\nthree conditions apply:\n  1. the peer is member of a group with or without group password\n  2. the peer has an individual password set\n  3. the peer is added to a group within an address-family ipv6\n     section\n\nIn addition this patch prevents the same issue in cases, where an IPv4\npeer\u0027s password is set first and the peer is added to a group\nafterwards.\n\nAdding a peer to a group cancels his individual password. Without ipv6\nthis is not a problem, because choosing the right order of config\nstatements will do (set password only after adding peer to group).\n\nWhen adding the peer to a group within the address-family\nsection, his password is definitely lost. The same workaround (ie.\nsetting the password after the address-family section) can not be used,\nbecause \"show run\" will print the configuration statements in the wrong\norder.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d53d8fda42e1ce43852d3b4cff914ce79b5c6785",
      "tree": "65fabd06d7388d593c1260c18558acd29c82b523",
      "parents": [
        "aeef13b0d5b50a90f293c93eb5a34c2a099d140b"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Mon Jan 28 07:14:43 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Feb 01 17:55:04 2013 +0100"
      },
      "message": "bgpd: fix crash in soft-reconfiguration\n\nCommit 8692c50652 introduced a bug where bgpd would crash on\nsoft-reconfiguration.\n\nThis happens e.g. when there are filtered unicast routes because\nrn-\u003einfo is NULL in that case, which the code did not account for.\n\nReported-by: Paweł Staszewski \u003cpstaszewski@itcare.pl\u003e\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "5e728e929942d39ce5a4ab3d01c33f7b688c4e3f",
      "tree": "6f2b2413fc182b75b589fdb340c813d7da944771",
      "parents": [
        "f47e5a18b5beb00d6b5b94965e305dadb5aa5bad"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jan 23 05:50:24 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Feb 01 17:55:04 2013 +0100"
      },
      "message": "bgpd: relax ORF capability length handling\n\ncommit fe9bb64... \"bgpd: CVE-2012-1820, DoS in bgp_capability_orf()\"\nmade the length test in bgp_capability_orf_entry() stricter and is now\ncausing us to refuse (with CEASE) ORF capabilites carrying any excess\ndata.  This does not conform to the robustness principle as laid out by\nRFC1122 (\"be liberal in what you accept\").\n\nEven worse, RFC5291 is quite unclear on how to use the ORF capability\nwith multiple AFI/SAFIs.  It can be interpreted as either \"use one\ninstance, stuff everything in\" but also as \"use multiple instances\".\nSo, if not for applying robustness, we end up clearing sessions from\nimplementations going by the former interpretation.  (or if anyone dares\nadd a byte of padding...)\n\nCc: Denis Ovsienko \u003cinfrastation@yandex.ru\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f47e5a18b5beb00d6b5b94965e305dadb5aa5bad",
      "tree": "c870b37cdba8e36effae527faf6c266847ad2621",
      "parents": [
        "955be06f8a647d1149d5547e1265fb66f55a9161"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jan 20 18:29:28 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Feb 01 17:55:04 2013 +0100"
      },
      "message": "bgpd: don\u0027t try to reconcile AS4_PATH with NULL\n\nbgp_attr_munge_as4_attrs would previously try to reintegrate an AS4_PATH\nwith a NULL AS_PATH, leading to a rather nasty SEGV.  Let\u0027s go by\nRFC6793 and treat missing AS_PATH as 0-length AS_PATH, which in turn\nmeans discarding the AS4_PATH.\n\n[NB: we don\u0027t actually stick to the actual rule, which is discarding\nAS4_PATH if it\u0027s longer than AS_PATH; indeed we should probably fix that\ntoo]\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    }
  ],
  "next": "dcab1bb822161d55795aad59b14c5c5d79b71e1f"
}
