)]}'
{
  "log": [
    {
      "commit": "e3443a21552b6a3cd6ebdbb98336eede217a478f",
      "tree": "7465134a450f779b9fc314819aa1f1e1c5c956e3",
      "parents": [
        "c9cc52af9edf0f23a1434c944812064de220a7bf"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Oct 19 16:02:34 2016 +0300"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:51 2017 +0000"
      },
      "message": "bgpd: simplify ebgp-multihop and ttl-security handling\n\nChange to track configured value in -\u003ettl and -\u003egtsm_hops;\nnot the value set to sockopt. Instead, setting of socket\u0027s ttl\nand minttl options are now merged to one function which calculates\nit on demand. This greatly simplifies the code.\n"
    },
    {
      "commit": "743dd42b3f5d4bc5f9a86b91364c67217f42c6d1",
      "tree": "365a266a5e8b3602e359aeadfb921133a2c70c22",
      "parents": [
        "af177b245ef3f092ecd0ae75cb75c2d797a7b139"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Sep 30 13:55:47 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:07:56 2016 +0100"
      },
      "message": "bgpd: Fix NHT race with Connect leading to test tool issues\n\n* The NHT change:\n\n   \"bgpd, zebra: Use next hop tracking for connected routes too\"\n\n  introduces a race where bgp_connect_check can be called on a peer in\n  Connect state before the TCP handshake has completed. If this happens,\n  then the SO_ERROR sockopt to check the state of the socket is undefined\n  or at least does not return a useful result - it returns 0, as with\n  a connected socket. SO_ERROR should only be called on non-block sockets\n  after the socket has been ready for writing.\n\n  The net result is that bgpd can then incorrectly advance the peer FSM for\n  the socket (also the main \u0027peer\u0027), to OpenSent. As part of which, any\n  incoming connection from the peer will pass through collision_detect and\n  may be (incorrectly) closed, depending on the RIDs.\n\n  This race is reliably hit with testing tools which wait to listen for\n  incoming BGP connections from the RUT to know it is in Connect/Active, and\n  which ignore the TCP connection (no SYN|ACK, no RST), and then launch their\n  own connection.\n\n  The fix is to better integrate the BGP FSM and the NHT update, to ensure\n  connect_check is not called on peers in Connect state.\n\n  Note: There may be no need at all for NHT to tickle FSM.\n\n* bgpd.h: Add NHT_Update FSM event for NHT valid.\n\n* bgp_fsm.c: (bgp_fsm_nht_update) There is no need to have a separate\n  switch based FSM with its own event via an exported function.  Have\n  NHT raise the NHT_Update even on the peer, instead of calling a\n  side-channel function into a sub-FSM in the FSM.  No need to have\n  code for BGP_Start, FSM can call that.  Actions for Connect and\n  Active are the same and just lead to ConnectRetry_timer_expired\n  event - so FSM can just call same transition func as that.\n\n  No need to call bgp_connect_check on Connect, as Connect implies no\n  connection.\n\n  (FSM) Handle the NHT_Update event, replacing bgp_fsm_nht_update.\n  Idle -\u003e bgp_start, Connect and Active were doing the same as\n  ConnectRetry_timer_expired so replicate those. Rest are No-Ops.\n\n* bgp_nht.c: (evaluate_paths) Raise NHT_Update FSM event. Always valid.\n* bgp_packet.{c,h}: (bgp_connect_check) NHT change now unnecessary, revert.\n"
    },
    {
      "commit": "d9ab53ab40dcba66f34ca75695dc930e6093f789",
      "tree": "552f537b8f5decf1b74d8fc98b96ef3e65a01051",
      "parents": [
        "5bcd754ff8d7947978acb44e77dcab323973fb1e"
      ],
      "author": {
        "name": "Dinesh Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue May 19 17:47:21 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:07:52 2016 +0100"
      },
      "message": "bgpd, zebra: Use next hop tracking for connected routes too\n\nAllow next hop tracking to work with connected routes\nAnd cleanup obsolete code in bgp_scan and bgp_import.\n\nSigned-off-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\nEdits: Paul Jakma \u003cpaul.jakma@hpe.com\u003e Rebase re-ordering conflicts with\n       NHT route-map, potential errors.\n"
    },
    {
      "commit": "5bcd754ff8d7947978acb44e77dcab323973fb1e",
      "tree": "75fab09b53d3d810d327d8569e0f1e289550f941",
      "parents": [
        "6c6c1bf0fc66713cb0b3448a4323042f44016502"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Tue May 19 17:58:10 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:07:52 2016 +0100"
      },
      "message": "bgpd: crash if attributes alone consume \u003e 4096 bytes\n\nThis patch fixes a crash if attributes on a patch consume\nmore than 4096 bytes.\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "6c6c1bf0fc66713cb0b3448a4323042f44016502",
      "tree": "500f40a63728f968a8198db0300e8945131fb5b8",
      "parents": [
        "e25a9741fb1ba52a69833687caa01f13cd4d1320"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Mon Nov 09 20:21:56 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:07:52 2016 +0100"
      },
      "message": "bgpd: Improve peer scaling\n\nReduce the amount of time it takes to bring up a large number of peers.\n\nThis is accomplished by removing jitter and reducing the number\nof seconds to wait before connecting to a peer.\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\n\nEdited-by: Paul Jakma \u003cpaul.jakma@hpe.com\u003e for rebase conflicts, and to add\n           jitter on connect timer back in. Can be removed in an update.\n"
    },
    {
      "commit": "083e5e2d7bc8098b92572792ab807da381db95ea",
      "tree": "740c756c2d0483b194f801bbef763f4483a489d1",
      "parents": [
        "5cf768a3f53029ecc482367a1ceaf7578237b06a"
      ],
      "author": {
        "name": "Dinesh Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Mon Nov 09 20:21:54 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:45 2016 +0100"
      },
      "message": "bgpd, doc: Allow route-map policy modifications to also affect route reflectors.\n\nBy default, attribute modification via route-map policy out is ignored on\nreflected routes. This patch provides an option to allow this modification\nto occur. Once enabled, it affects all reflected routes.\n\nSigned-off-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "584083d50511e19b228cce1e4a1cbcb28fae6b49",
      "tree": "58d6f9bf006083287d212ea0a09892c16d9d1b66",
      "parents": [
        "dfb9bd7aaadc2f5abb9bc9aecbd73b9d8b3a788c"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 24 18:58:08 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:41 2016 +0100"
      },
      "message": "bgpd: divorce router-id logic from CLI \u0026 zebra\n\nLogic for determining the router-id was spread out over bgp_zebra.c and\nbgp_vty.c.  Move to bgpd/bgpd.c and have these two call more properly\nencapsulated functions.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "dfb9bd7aaadc2f5abb9bc9aecbd73b9d8b3a788c",
      "tree": "5fdaeee00ed73a504721d3144849394e6e3110ea",
      "parents": [
        "4afa3ddd17464ecce91b6ed9df27b1231fb3e939"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 24 18:58:07 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:40 2016 +0100"
      },
      "message": "bgpd: minor header/API clean up\n\nAdds \"const\" on:\n- peer_update_source_addr_set()\n- peer_description_set()\nAdds parameter names on:\n- bgp_timers_set()\n  (really confusing, this one, with 2 unexplained args of same type)\nAdds new setter:\n- peer_afc_set(), calling peer_activate/peer_deactivate.\n  (intended for API consumers, matches peer-\u003eafc)\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "9514fee4b37a9043738aa16ca8684993a1b572ad",
      "tree": "715d5bfb6824dc213a3f0c98cf149bfb5e104ea7",
      "parents": [
        "3c964045459f66921f8a3dc33fe4c028e6b0b141"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Jan 26 11:44:14 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 20 12:58:32 2016 +0100"
      },
      "message": "bgpd, ripngd, zebra: Remove duplicate PSIZE define\n\nThe PSIZE macro is defined the same in multiple places.  Remove\nthe duplicates.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\nTested-by: NetDEF CI System \u003ccisystem@netdef.org\u003e\n"
    },
    {
      "commit": "6184c39e27d4b6f3721b8c4dc3df1b968e09606a",
      "tree": "2307896d8cbec453b3d2c829c1b299d3d3f996e1",
      "parents": [
        "d8f7f86a64842fcc6200c2fa4f560b9aa7a279bb"
      ],
      "author": {
        "name": "Roman Hoog Antink",
        "email": "rha@open.ch",
        "time": "Mon Mar 17 14:01:42 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 20 12:58:30 2016 +0100"
      },
      "message": "bgpd: implement admin distance\n\nUntil today the admin distance cannot be configured for any IPv6\nrouting protocol. This patch implements it for bgp.\n\nSigned-off-by: Maitane Zotes \u003cmaz@open.ch\u003e\n\npatchwork #993: http://patchwork.quagga.net/patch/993/\n"
    },
    {
      "commit": "c0cb90c608f7dcb0807e05c70050d2e238d6c4e9",
      "tree": "b66b70468004343789d532b1dc757e71177b0966",
      "parents": [
        "d849e23b1c6b7278aef2f460723ac17cdc63e1a7"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Mar 08 18:14:50 2016 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Mar 08 18:16:47 2016 +0000"
      },
      "message": "Revert \"bgpd: Lower BGP\u0027s default keepalive/holdtime to 3s/9s\"\n\nThis reverts commit f89b09be92bed03b1e5add55dc14ef92e94c52e1.\n\nMartin Winter has reported reliability issues in testing on some platforms.\nWe need a more comprehensive way to deal with defaults and updating them, e.g.\nprofiles of some kind.\n\nDefer this change till after next release.\n"
    },
    {
      "commit": "9099f9b2a66e86f8a90d7fe18f61bd2bb1bc6744",
      "tree": "1ce5d2e4ecff6b57eb00d40b1a91b3f363ff35fe",
      "parents": [
        "954c7d6bcd04c2cf037965adda0f9d11afdcd165"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Mon Jan 18 10:12:10 2016 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:46 2016 +0000"
      },
      "message": "*: use an ifindex_t type, defined in lib/if.h, for ifindex values\n"
    },
    {
      "commit": "205e6744f2dc2909dd494c9ce8acb82821459f1f",
      "tree": "a996419a840766d2ffa1025805e1be84a2dacdf4",
      "parents": [
        "544ec70f66d0ec081dadde79bec1f25c2241f57f"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:42:11 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:45 2016 +0000"
      },
      "message": "bgpd: remove HAVE_IPV6 conditionals\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\nTested-by: NetDEF CI System \u003ccisystem@netdef.org\u003e\n"
    },
    {
      "commit": "c3741789530ee824693fd606356acac2ad695f83",
      "tree": "ad68a56ed567517367a3916ff4372f420b139326",
      "parents": [
        "5a81fc9ae610ff343902ebabc12237d6e40d91cb"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:42:01 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:43 2016 +0000"
      },
      "message": "bgpd: encap: add attribute handling\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\nReviewed-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "82dd707988b7481e203cab058c92f0b3041dd558",
      "tree": "01923f2a1a5b0ca381e9eb7b093f467ca4cc942b",
      "parents": [
        "13c378d96a57017f5995b2e0df46cfc31123f0e8"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:41:57 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:43 2016 +0000"
      },
      "message": "bgpd: improve cleanup in bgp_delete()\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\n"
    },
    {
      "commit": "68ec424eb8557f86d08fcb7ab3c5366cbf3eca0e",
      "tree": "63d4630ccfb5e0f366881fa98d42e62842d67239",
      "parents": [
        "cc216b7978b038667626afd3f70dda8f70c46e4e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Wed Nov 25 17:14:34 2015 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Wed Feb 10 15:06:17 2016 +0000"
      },
      "message": "bgpd: OPEN parse errors should send OPEN_ERR and UNSPECIFIC subcode.\n\nCEASE NOTIFICATION for OPEN parsing errors seems, to my reading of RFC4271\n§6.2 to be incorrect.\n\n* bgp_packet.c: (bgp_open_receive) OPEN/UNACEP_HOLDTIME is not an\n  appropriate error subcode if bgp_open_option_parse returns an error.  Set\n  it to \"Unspecific\". Where a more specific subcode is appropriate, then lower\n  level should send that.\n* bgp_open.c: (bgp_open_option_parse) Malformed OPENs should result in\n  NOTIFICATION with OPEN error, and OPEN/UNSPECIFIC sub-code - not CEASE.\n  (bgp_capability_{parse,orf_entry}) ditto.\n* bgpd.h: Add BGP_NOTIFY_OPEN_UNSPECIFIC for 0.  Note that IANA lists 0 as\n  reserved in the OPEN error sub-code registry, but RFC4271 page 32 says 0\n  is the \"Unspecific\" OPEN error subcode.\n\n  Have emailed IANA, they says it\u0027s a known errate to 4271 under review.\n\n  Some inspiration from Cumulus\u0027 bgpd-capability-cleanup.patch, though\n  v different result.\n"
    },
    {
      "commit": "f89b09be92bed03b1e5add55dc14ef92e94c52e1",
      "tree": "a9662e2a506a8377b53864d2ea99c5c71978e5e0",
      "parents": [
        "8e644534b4d20dde07306700be0503d09d30a16e"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Wed Oct 21 06:42:52 2015 -0700"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:11:01 2015 -0500"
      },
      "message": "bgpd: Lower BGP\u0027s default keepalive/holdtime to 3s/9s\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by:   Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "8e644534b4d20dde07306700be0503d09d30a16e",
      "tree": "ad52e0dd0c99f32f6d04f32eaee017794f1b711d",
      "parents": [
        "c37b9bccdcc1266f52e50fa3e5a8dc81086c3fe7"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Wed Oct 21 06:42:51 2015 -0700"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:10:58 2015 -0500"
      },
      "message": "bgpd: Remove BGP_ERROR_START_TIMER, it was no longer used\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by:   Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "3ff77fe62ecdabc01f576de8c4e5d78d16e3e436",
      "tree": "597e8e707b0ce9d1f919741f868d15a560548527",
      "parents": [
        "f822ad4326e8b279e028b8b2ca2282475b5e27de"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Wed Oct 21 06:42:48 2015 -0700"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:10:42 2015 -0500"
      },
      "message": "bgpd: Remove BGP\u0027s asorig timer, it is no longer used\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by:   Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "f822ad4326e8b279e028b8b2ca2282475b5e27de",
      "tree": "c8ffb4dd4af36d59d8e0f8901f5b11f81844c3c1",
      "parents": [
        "e56aab94a615a2b676473fbd09145b444a348029"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Wed Oct 21 06:42:47 2015 -0700"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:10:29 2015 -0500"
      },
      "message": "bgpd: Lower the default \u0027timers connect\u0027 in BGP to 10 seconds\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by:   Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "774914f4223532256051bd6dd61cac20e8f9649f",
      "tree": "c6cecfa4c6c1eaff07638d2903e195571baa39b0",
      "parents": [
        "eeef0db2e9260fe76acb328a339025c432eb7c22"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Oct 14 08:50:39 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 27 10:53:22 2015 +0000"
      },
      "message": "bgpd: fix using of two pointers for struct thread_master *\n\nbgp is using both bm-\u003emaster and master pointers interchangebly\nfor thread manipulation.  Since they are the same thing consolidate\nto one pointer.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "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": "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": "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": "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": "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": "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": "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": "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": "9d3f9705d8b386ccf006c106967c700141e5d049",
      "tree": "9edfe2653741fa0f49ffef15bd66f5a522dcd025",
      "parents": [
        "3b96b78136d04ddb7e39d86577cad75acb25237a"
      ],
      "author": {
        "name": "Andrew Certain",
        "email": "certain@amazon.com",
        "time": "Wed Nov 07 23:50:07 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:10:00 2012 +0100"
      },
      "message": "bgpd: add replace-as modifier for BGP neighbor\n\nAdded replace-as modifier for BGP neighbors when using\nlocal-as. If the replace-as modifier is specified, only the\nreplacement AS as specified by the local-as modifier is\nprepended to the AS_PATH, not the process\u0027s AS.\n\nIn bgp_attr.c, I decided that\n\nif (peer-\u003echange_local_as) {\n  /* If replace-as is specified, we only use the change_local_as when\n     advertising routes. */\n  if( ! CHECK_FLAG (peer-\u003eflags, PEER_FLAG_LOCAL_AS_REPLACE_AS) ) {\n    aspath \u003d aspath_add_seq (aspath, peer-\u003elocal_as);\n  }\n  aspath \u003d aspath_add_seq (aspath, peer-\u003echange_local_as);\n} else {\n  aspath \u003d aspath_add_seq (aspath, peer-\u003elocal_as);\n}\n\nwas clearer than the alternative that didn\u0027t duplicate the prepending of the\nprocess\u0027s AS:\n\n/* First, append the process local AS unless we have an alternate local_as\n * and we\u0027re replacing it (as opposed to just prepending it). */\nif (! (peer-\u003echange_local_as\n       \u0026\u0026 CHECK_FLAG (peer-\u003eflags, PEER_FLAG_LOCAL_AS_REPLACE_AS) ) ) {\n  aspath \u003d aspath_add_seq (aspath, peer-\u003elocal_as);\n}\n\nif (peer-\u003echange_local_as)\n  aspath \u003d aspath_add_seq (aspath, peer-\u003echange_local_as);\n}\n\nBut I could be convinced otherwise.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "cccbc0151883cfb4f43d6fa0a4a3caedc27e6cf5",
      "tree": "0c0296eb09551c556717e93250e5492fc1c7c85f",
      "parents": [
        "2fb2a455263c569119ca32be59b0337a3d8cd9b3"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 14 10:40:26 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 14 17:30:14 2012 +0100"
      },
      "message": "bgpd: Add \"no listen\" socket option for the BGP master configuration\n\n* bgpd.h: add a BGP_OPT_NO_LISTEN option for the master BGP configuration,\n  to prevent any listen socket being created automatically. Allows code\n  to be used outside of BGP daemon settings.\n* bgpd.c: (bgp_get) honour above the flag, suppress auto-creation of listen\n  socket on first BGP instance if set.\n  (bgp_option_set) whitelist BGP_OPT_NO_LISTEN\n"
    },
    {
      "commit": "ad12dde6f9596997337ebc210dd2d4593438556b",
      "tree": "661e013c488b2f7003b8b817d680fa9d03f4eb30",
      "parents": [
        "22714f99c4ffeb4d1bade7ad6374adeba0e06e4c"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jun 13 22:50:07 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jun 13 22:50:07 2012 +0100"
      },
      "message": "Revert \"bgpd: Make socket init separate, so unit tests work again.\"\n\nThis reverts commit 7621f336e2f346edee43227f0b1ef93fe769720b. See bug #727\n"
    },
    {
      "commit": "6d85b15bbb2fd3c263d5d4b402c88ff348af877b",
      "tree": "c8be5e782f4425840ee93e167eb8d7c1ed3f4e4c",
      "parents": [
        "14542f3edaa43113880e8bb69612c553f02bdf22"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:52:54 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:25:10 2012 +0200"
      },
      "message": "bgpd: remove calls to peer_sort() from fast-path\n\n  peer_sort() it\u0027s called so much as to be annoying. In the assumption\nthat the \u0027sort\u0027 of the peer doesn\u0027t change during an established session,\nI have changed all calls to peer_sort() in the \u0027fast-path\u0027 to only check\nthe \u0027sort\u0027. All the calls from the vty and such still recalculate the sort\nand store it in the peer.\n\n  There\u0027s a lot of other calls to peer_sort() that could be changed but some\nmaube tricky, someone more knowledgeable may try to reduce them.\n\n  This hits peer_sort() from 5th out of the stadium^H^H list on a full\ninternet table loading profiling session.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "7621f336e2f346edee43227f0b1ef93fe769720b",
      "tree": "2bda36681214336bf55345cd47efb2c25fc460c2",
      "parents": [
        "1dba254e107dd0c4254d58e9304fc6293b46fd4d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue May 01 16:24:35 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed May 02 11:02:11 2012 +0100"
      },
      "message": "bgpd: Make socket init separate, so unit tests work again.\n\n* Separate out BGP socket initialisation from bgp_get, and make it an\n  explicit function. Allows unit tests to work again and probably also\n  benefits dry-run.\n* bgpd.c: (bgp_get) move socket init out...\n  (bgp_socket_init) to here\n* bgp_main.c: and call it after dry-run.\n* bgpd.h: (bgp_socket_init) add prototype\n"
    },
    {
      "commit": "3cf6c2b4e43f44a977d218c96c26250654ae333e",
      "tree": "e017cde2015fbf3ef6c250327428d7c6152aa8f7",
      "parents": [
        "01d7ff0a2166a422c56bd26f04fc22832a9e690b",
        "e96b312150d8e376c1ef463793d1929eca3618d5"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Mon Apr 09 00:25:15 2012 -0700"
      },
      "committer": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Mon Apr 09 00:25:15 2012 -0700"
      },
      "message": "Merge branch \u0027quagga\u0027 into google-bgp-multipath\n\nConflicts:\n\tbgpd/bgp_route.c\n"
    },
    {
      "commit": "42e6d745d105018a9469dabad65bd4cf942dcf3c",
      "tree": "9e653fe2e44d2e3f8510fcb8451931e3b6153ebc",
      "parents": [
        "beb1ca03bfe707d6d1fcad21fcbaa63af49c82f8"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Jul 14 12:36:19 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Sep 29 22:14:11 2011 +0400"
      },
      "message": "bgpd: more SAFI fixes\n\n(with resolved conflict in bgpd/bgp_packet.c)\n\nTwo macros resolving to the same integer constant broke a case block and\na more thorough merge of BGP_SAFI_VPNV4 and BGP_SAFI_VPNV6 was\nperformed.\n\n* bgpd.h: MPLS-labeled VPN SAFI is AFI-independent, switch to single\n* macro\n* bgp_capability_test.c: update test data\n* bgp_mp_attr_test.c: idem\n* bgp_route.c: (bgp_maximum_prefix_overflow, bgp_table_stats_vty) update\n  macro and check conditions (where appropriate)\n* bgp_packet.c: (bgp_route_refresh_send, bgp_capability_send,\n  bgp_update_receive, bgp_route_refresh_receive): idem\n* bgp_open.c: (bgp_capability_vty_out, bgp_afi_safi_valid_indices,\n  bgp_open_capability_orf, bgp_open_capability): idem\n* bgp_attr.c: (bgp_mp_reach_parse, bgp_packet_attribute,\n  bgp_packet_withdraw): idem\n"
    },
    {
      "commit": "beb1ca03bfe707d6d1fcad21fcbaa63af49c82f8",
      "tree": "78ffcd5ec7e9bb80e92c108f5ca0268ec6cff262",
      "parents": [
        "48f99b0c2bfed8d3880732d188e1d5964f575ee4"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Jul 13 16:53:13 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Sep 29 22:07:54 2011 +0400"
      },
      "message": "bgpd: fix SAFI for for MPLS labeled VPN-IPv6\n\n* bgpd.h: change value of BGP_SAFI_VPNV6 to 128 (RFC4659, BZ#659)\n* bgp_route.c: (bgp_table_stats_vty) fix length argument to strncmp()\n"
    },
    {
      "commit": "4b4e07d2d83bdbe46ccf4b4a2fd2aa3842370098",
      "tree": "dde2abd7124f6d89e7d4695482f1abb8f4a0a447",
      "parents": [
        "51abba509a0997f05427a8acbe74dd07d8d6026e"
      ],
      "author": {
        "name": "Dmitrij Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Wed Sep 21 23:13:22 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 21:46:04 2011 +0400"
      },
      "message": "bgpd: don\u0027t be confused by \"unspecific\" subcode in the NOTIFY message.\n\n* bgp_debug.c (bgp_notify_open_msg, bgp_notify_update_msg,\n  bgp_notify_cease_msg, bgp_notify_capability_msg): add messages for\n  \"unspecific\" subcode.\n"
    },
    {
      "commit": "165b5fff9dde5536d9cb1f850b36c17bf5654f0f",
      "tree": "b02e2b71e2142348bce920f5c4a7ef5bd4708f3e",
      "parents": [
        "8ced4e82e6f417b13f4bfc09018fc51fd31058e2"
      ],
      "author": {
        "name": "Josh Bailey",
        "email": "joshb@google.com",
        "time": "Wed Jul 20 20:43:22 2011 -0700"
      },
      "committer": {
        "name": "Josh Bailey",
        "email": "joshb@google.com",
        "time": "Wed Jul 20 20:43:22 2011 -0700"
      },
      "message": "bgpd: Add new configuration cli for eBGP and iBGP multipath.\nThere is support to configure this for each (AFI,SAFI), but\ncurrently this configuration is only present for IPv4 unicast:\n\n maximum-paths [ibgp] \u003c1-255\u003e\n no maximum-paths [ibgp] [\u003c1-255\u003e]\n\n* bgpd/Makefile.am\n  * Add bgp_mpath.h and bgp_mpath.c to build\n* bgpd/bgp_mpath.h\n  * New file for bgp multipath declarations\n  * define BGP_DEFAULT_MAXPATHS\n* bgpd/bgp_mpath.c\n  * bgp_maximum_paths_set(): Configure maximum paths for the given\n    afi, safi and bgp instance\n  * bgp_maximum_paths_unset(): Return maximum paths configuration to\n    the default setting for the given afi, safi and bgp instance\n* bgpd/bgp_vty.c\n  * Define command strings for above CLI\n  * bgp_config_write_maxpaths(): Outputs configuration for the given\n    afi, safi and bgp instance\n  * Install command elements for IPv4 unicast\n* bgpd/bgp_zebra.h\n  * bgp_config_write_maxpaths(): External declaration\n* bgpd/bgpd.c\n  * bgp_create(): Initialize bgp instance to default maximum paths setting\n  * bgp_config_write_family(): Output maximum paths configuration\n    for the given address family\n  * bgp_config_write(): Output maximum paths configuration for\n    IPv4 unicast address family\n* bgpd/bgpd.h\n  * struct bgp: Add storage for maximum paths configuration for\n    each afi, safi\n"
    },
    {
      "commit": "f5a4827db60545309d0ee378b85acac56cf7837a",
      "tree": "a28de765a209f772d1b95b78a357ddf17318844a",
      "parents": [
        "d876bdf4a84f40ac3f9bec8d5040858b3725db3e"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Mar 24 17:30:21 2011 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 28 11:27:41 2011 +0100"
      },
      "message": "bgpd: refine the setting up of GTSM\n\n* bgpd.h: Add error code for setting GTSM on iBGP\n* bgpd.c: (peer_ttl_security_hops_set) use previous error code and signal\n  incompatibility of GTSM+iBGP to vty.\n  Consider the session state when setting GTSM, and reset Open/Active peers\n  to let them pick up new TTL from start.\n"
    },
    {
      "commit": "fa411a212b55bba650d68fd0456686f3e47b7395",
      "tree": "4d7ef846c2cbc154631a5901747b3384854d497c",
      "parents": [
        "db07ad7358cb5e26358326332629ffb658f5747a"
      ],
      "author": {
        "name": "Nick Hilliard",
        "email": "nick@inex.ie",
        "time": "Wed Mar 23 15:33:17 2011 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Mar 23 15:33:17 2011 +0000"
      },
      "message": "bgpd: RFC 5082 Generalized TTL Security Mechanism support\n\n* bgpd: Add support for RFC 5082 GTSM, which allows the TTL field to be used\n  to verify that incoming packets have been sent from neighbours no more\n  than X IP hops away. In other words, this allows packets that were sent from\n  further away (i.e. not by the neighbour with known distance, and so possibly\n  a miscreant) to be filtered out.\n* lib/sockunion.{c,h}: (sockopt_minttl) new function, to set a minimum TTL\n  using the IP_MINTTL socket opt.\n* bgpd.h: (BGP_ERR_NO_EBGP_MULTIHOP_WITH_TTLHACK) define for command\n  error for minttl.\n  (struct peer) add a config variable, to store the configured minttl.\n  (peer_ttl_security_hops_{set,unset}) configuration handlers\n* bgpd.c: (peer_group_get) init gtsm_hops\n  (peer_ebgp_multihop_{un,}set) check for conflicts with GTSM. Multihop and\n  GTSM can\u0027t both be active for a peer at the same time.\n  (peer_ttl_security_hops_set) set minttl, taking care to avoid conflicts with\n  ebgp_multihop.\n  (bgp_config_write_peer) write out minttl as \"neighbor .. ttl-security hops X\".\n* bgp_vty.c: (bgp_vty_return) message for\n  BGP_ERR_NO_EBGP_MULTIHOP_WITH_TTLHACK\n  (peer_ebgp_multihop_{un,}set_vty)\n* bgp_network.c: (bgp_accept) set minttl on accepted sockets if appropriate.\n  (bgp_connect) ditto for outbound.\n"
    },
    {
      "commit": "65957886bfd0dd9d95360d8b015781fc82cc09be",
      "tree": "71352e214bd59277a50a43779bb2cbafbace6cc3",
      "parents": [
        "2cd754de60210748e61069fed2c9d4086d24c21e"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Fri Jan 15 16:22:10 2010 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Jan 15 16:22:10 2010 +0300"
      },
      "message": "bgp: use monotonic clock for time of day\n\nBGP uses time() to get system time of day; but that value\nfluctuates with time adjustments from NTP. This can cause premature\nflapping of peer sessions and other failures.\n\nUse the system monotonic clock supported by Quagga thread library\nto avoid issue.\n\nSee: http://bugzilla.vyatta.com/show_bug.cgi?id\u003d4467\n\n* bgpd/bgp_fsm.c\n  * bgp_uptime_reset(): dismiss function\n* bgpd/bgpd.c\n  * bgp_clock(): new function\n* bgpd/bgp_damp.c\n  * bgp_reuse_timer(): employ bgp_clock() instead of time(NULL)\n  * bgp_damp_withdraw(): idem\n  * bgp_damp_update(): idem\n  * bgp_damp_scan(): idem\n  * bgp_damp_info_vty(): idem\n  * bgp_damp_reuse_time_vty(): idem\n* bgpd/bgp_fsm.c\n  * bgp_routeadv_timer(): idem\n  * bgp_stop(): idem\n  * bgp_establish(): idem\n* bgpd/bgp_packet.c\n  * bgp_update_receive(): idem\n* bgpd/bgp_route.c\n  * bgp_update_rsclient(): idem\n  * bgp_update_main(): idem\n  * bgp_static_update_rsclient(): idem\n  * bgp_static_update_main(): idem\n  * bgp_static_update_vpnv4(): idem\n  * bgp_aggregate_route(): idem\n  * bgp_aggregate_add(): idem\n  * bgp_redistribute_add(): idem\n* bgpd/bgp_snmp.c\n  * bgpPeerTable(): idem\n  * bgpTrapEstablished(): idem\n  * bgpTrapBackwardTransition(): idem\n* bgpd/bgpd.c\n  * peer_create(): idem\n  * peer_uptime(): idem\n  * bgp_master_init(): idem\n"
    },
    {
      "commit": "da88ea82acd70adf3bab641b2300ee24319da422",
      "tree": "81151de47e55067c4b7d9cd718c0e6c8ab07aa50",
      "parents": [
        "2c2397059d4d4177ed4636c08aa476a138425dc8"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Dec 17 13:14:28 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Dec 17 13:14:28 2009 +0300"
      },
      "message": "bgpd: code cleanup\n\n* bgpd/bgp_aspath.c\n  * ashash: only used in one file, make static\n  * aspath_count_numas(): dead code, sayonara\n* bgpd/bgpd.c\n  * peer_nsf_stop(): only used in one file, make static\n* bgpd/bgp_packet.h\n  * bgp_capability_receive(): add missing prototype for a\n    global function\n"
    },
    {
      "commit": "0088b5dc55a91d27e572484e61df71b8ca2eddf4",
      "tree": "f93714f98d12890f961794cd026b6bf2de75105e",
      "parents": [
        "dde7258666fd73878b4cc10b4b5b7c07e9be049e"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu May 21 08:51:03 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:28 2009 +0100"
      },
      "message": "[bgpd] reference count the BGP instance\n\nWhen a BGP instance is deleted with lots of routes and neighbors\nit is possible for the peer rsclient queue to run after\nbgp_delete has been called. This would lead to bgpd crashing,\nsee https://bugzilla.vyatta.com/show_bug.cgi?id\u003d3436\n\nThe fix is to add reference counting to the BGP instance and defer\nactual freeing until all references are gone.\n\nThis patch also fixes a memory leak where the self-reference\npeer instance was being created but never freed.\n\nThe check in bgp_clear_route is no longer valid because it is possible\nfor it to be called when peer is in Deleted state during cleanup.\n"
    },
    {
      "commit": "6556d8a04079eb54d1805df3bef3e66ff1267d02",
      "tree": "35b35c8f7fbad9e6622ab8adfd9f5d71e2cfc541",
      "parents": [
        "b38309a4ee831a440ef78f8a27db584f2f8e8276"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Aug 26 14:33:28 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Aug 26 14:33:28 2008 +0100"
      },
      "message": "Revert \"[bgpd] Add \u0027bgp open-accept\u0027 option, to send OPEN immediately on accepted conns\"\n\nRevert commit d664ae1182c29b74b409bc8594b7bd0575e91ce9. An experimental\npatch which violates RFC4271 quite badly, but managed to accidently sneak\nits way in.\n"
    },
    {
      "commit": "d664ae1182c29b74b409bc8594b7bd0575e91ce9",
      "tree": "dd7c7edf880483e1deade4e0c26e3844cd78a79e",
      "parents": [
        "e30db001530a39b827cc4f073033e35d9ca22662"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Aug 31 14:27:37 2007 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:52:12 2008 +0100"
      },
      "message": "[bgpd] Add \u0027bgp open-accept\u0027 option, to send OPEN immediately on accepted conns\n\n2007-08-31 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) Add \u0027bgp open-accept\u0027 option, to allow bgpd to send OPEN\n\t  on accepted connections, i.e. to not wait till after\n\t  collision-detect to send OPEN, which appears to be allowed in\n\t  RFC4271. This may help speed up establishing sessions, or help\n\t  avoid FSM problems with sessions to certain peers. Not enabled by\n\t  default though.\n"
    },
    {
      "commit": "0df7c91f048f2116610d6bdfce3ab6cad1981802",
      "tree": "18390aa845054b757fae86dde49b907ee7f14908",
      "parents": [
        "f04b0e6bb8c1339243717b156880d7e24c84c951"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Jul 21 21:02:49 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Jul 21 21:02:49 2008 +0000"
      },
      "message": "[bgpd] TCP-MD5: password vty configuration and initial Linux support\n\n2008-07-21 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_packet.c: (bgp_open_receive) fix warning in a zlog call\n\t* bgp_vty.c: (bgp_vty_return) add return code\n\t* bgpd.c: (bgp_master_init) setup the socket list.\n\t* bgp_network.c: Remove the dual IPv4/6 socket thing for now, which\n\t  was implemented by Michael, until such time as its clear its\n\t  required for Linux (see sockopt comments). IPv6 support, including\n\t  IPv4 sessions on AF_INET6 sockets, therefore is broken, and the\n\t  \u0027-l 0.0.0.0\u0027 arguments would need to be given to bgpd to make\n\t  things work here.\n\n2008-07-21 Michael H. Warfield \u003cmhw@wittsend.com\u003e\n           YOSHIFUJI Hideaki \u003cyoshfuji@linux-ipv6.org\u003e\n\t   Tomohiko Kusuda \u003ckusuda@inetcore.com\u003e\n           Leigh Brown \u003cleigh@solinno.co.uk\u003e\n\n\t* bgp_network.c: (bgp_md5_set_one) shim between libzebra tcp-md5\n\t  sockopt and bgpd.\n\t  (bgp_md5_set_socket) Helper for bgp_connect\n\t  (bgp_md5_set) setup TCP-MD5SIG for the given peer.\n\t  (bgp_connect) call out to bgp_md5_set_socket for the outgoing\n\t  connect socket.\n\t  (bgp_socket) save references to the listen sockets, needed if\n\t  TCP-MD5SIG is applied later or changed.\n\t* bgp_vty.c: (*neighbor_password_cmd) New \u0027neighbor ... password\u0027\n\t  commands.\n\t* bgpd.c: (peer_{new,delete) manage TCP-MD5 password\n\t  (peer_group2peer_config_copy) inherit TCP-MD5 password\n\t  (peer_password_{un,}set) orchestrate the whole add/remove of TCP-MD5\n\t  passwords: applying checks, stopping peers, and trying to return\n\t  errors to UI, etc.\n\t  (bgp_config_write_peer) save password.\n\t  Fix missing newline in writeout of neighbor ... port.\n\n2008-07-21 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* sockunion.c: ifdef out various places that converted\n\t  v4mapped sockets to pure v4. Doesn\u0027t seem necessary at all,\n\t  presumably a workaround for now historical inet_ntop bugs (?)\n\n2008-07-21 Michael H. Warfield \u003cmhw@wittsend.com\u003e\n           YOSHIFUJI Hideaki \u003cyoshfuji@linux-ipv6.org\u003e\n\n\t* sockopt.{c,h}: (sockopt_tcp_signature) Add TCP-MD5SIG support.\n"
    },
    {
      "commit": "3a02d1f7fb778a1ea4f45d037f13dfcd126e2337",
      "tree": "2ffa6c8c2c2feb9d423a277c0761151e56884d38",
      "parents": [
        "5619f56ba38b255f699f76b327cf82388c4a90cf"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Nov 01 14:29:11 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Nov 01 14:29:11 2007 +0000"
      },
      "message": "2007-10-30 Nick Hilliard \u003cnick@inex.ie\u003e\n\n\t* bgp_main.c: Add \u0027listenon\u0027 argument, to pass address to bind\n\t  to.\n\t* bgp_network.c: (bgp_socket) Extend to take bind address.\n\t* bgpd.c: (bgp_init) Pass stored address.\n\t* bgpd.h: (struct bgp_master) storage for bind address\n\n2007-11-01 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* tools/multiple-bgpd.sh: New, quick script to launch a bunch of\n\t  bgpds.\n"
    },
    {
      "commit": "0b2aa3a0a8b095bdef1eddda117d173af75dede2",
      "tree": "29201cb2beec187409e842b4078ed8a8047d3f11",
      "parents": [
        "7593fddfa1558d086e3142ad96cf2790007f5d84"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Oct 14 22:32:21 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Oct 14 22:32:21 2007 +0000"
      },
      "message": "[bgpd] Merge AS4 support\n\n2007-10-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* NEWS: Note that MRT dumps are now version 2\n\t* (general) Merge in Juergen Kammer\u0027s AS4 patch.\n\n2007-09-27 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_aspath.c: (assegment_normalise) remove duplicates from\n\t  from sets.\n\t  (aspath_reconcile_as4) disregard a broken part of the RFC around\n\t  error handling in path reconciliation.\n\t* aspath_test.c: Test dupe-weeding from sets.\n\t  Test that reconciliation merges AS_PATH and AS4_PATH where\n\t  former is shorter than latter.\n\n2007-09-26 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* aspath_test.c: Test AS4_PATH reconcilation where length\n\t  of AS_PATH and AS4_PATH is same.\n\n2007-09-25 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_open.c: (peek_for_as4_capability) Fix to work.\n\t* bgp_packet.c: (bgp_open_receive) Fix sanity check of as4.\n\t* tests/bgp_capability_test.c: (general) Extend tests to validate\n\t  peek_for_as4_capability.\n\t  Add test of full OPEN Option block, with multiple capabilities,\n\t  both as a series of Option, and a single option.\n\t  Add some crap to beginning of stream, to prevent code depending\n\t  on getp \u003d\u003d 0.\n\n2007-09-18 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_open.c: (bgp_capability_as4) debug printf inline with others.\n\t  (peek_for_as4_capability) There\u0027s no need to signal failure, as\n\t  failure is better dealt with through full capability parser -\n\t  just return the AS4, simpler.\n\t* bgp_packet.c: (bgp_open_receive) Update to match\n\t  peek_for_as4_capability change.\n\t  Allow use of BGP_AS_TRANS by 2b speakers.\n\t  Use NOTIFY_OPEN_ERR rather than CEASE for OPEN parsing errors.\n\t  (bgp_capability_msg_parse) missing argument to debug print\n\t  (bgp_capability_receive) missing return values.\n\t* tests/bgp_capability_test.c: (parse_test) update for changes to\n\t  peek_for_as4_capability\n\n2007-07-25 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* Remove 2-byte size macros, just make existing macros take\n\t  argument to indicate which size to use.\n\t  Adjust all users - typically they want \u00271\u0027.\n\t* bgp_aspath.c: (aspath_has_as4) New, return 1 if there are any\n\t  as4\u0027s in a path.\n\t  (aspath_put) Return the number of bytes actually written, to\n\t  fix the bug Juergen noted: Splitting of segments will change\n\t  the number of bytes written from that already written to the\n\t  AS_PATH header.\n\t  (aspath_snmp_pathseg) Pass 2-byte flag to aspath_put. SNMP\n\t  is still defined as 2b.\n\t  (aspath_aggregate) fix latent bug.\n\t  (aspath_reconcile_as4) AS_PATH+NEW_AS_PATH reconciliation\n\t  function.\n\t  (aspath_key_make) Hash the AS_PATH string, rather than\n\t  just taking the addition of assegment ASes as the hash value,\n\t  hopefully sligthly more collision resistant.\n\t  (bgp_attr_munge_as4_attrs) Collide the NEW_ attributes\n\t  together with the OLD 2-byte forms, code Juergen\n\t  had in bgp_attr_parse but re-organised a bit.\n\t  (bgp_attr_parse) Bunch of code from Juergen moves\n\t  to previous function.\n\t  (bgp_packet_attribute) Compact significantly by\n\t  just /always/ using extended-length attr header.\n\t  Fix bug Juergen noted, by using aspath_put\u0027s\n\t  (new) returned size value for the attr header rather\n\t  than the (guesstimate) of aspath_size() - the two could\n\t  differ when aspath_put had to split large segments, unlikely\n\t  this bug was ever hit in the \u0027wild\u0027.\n\t  (bgp_dump_routes_attr) Always use extended-len and\n\t  use aspath_put return for header length. Output 4b ASN\n\t  for AS_PATH and AGGREGATOR.\n\t* bgp_ecommunity.c: (ecommunity_{hash_make,cmp}) fix\n\t  hash callback declarations to match prototypes.\n\t  (ecommunity_gettoken) Updated for ECOMMUNITY_ENCODE_AS4,\n\t  complete rewrite of Juergen\u0027s changes (no asdot support)\n\t* bgp_open.c: (bgp_capability_as4) New, does what it says\n\t  on the tin.\n\t  (peek_for_as4_capability) Rewritten to use streams and\n\t  bgp_capability_as4.\n\t* bgp_packet.c: (bgp_open_send) minor edit\n\t  checked (in the abstract at least) with Juergen.\n\t  Changes are to be more accepting, e.g, allow AS_TRANS on\n\t  a 2-byte session.\n\t* (general) Update all commands to use CMD_AS_RANGE.\n\t* bgp_vty.c: (bgp_clear) Fix return vals to use CMD_..\n\t  Remove stuff replicated by VTY_GET_LONG\n\t  (bgp_clear_vty) Return bgp_clear directly to vty.\n\t* tests/aspath_test.c: Exercise 32bit parsing. Test reconcile\n\t  function.\n\t* tests/ecommunity_test.c: New, test AS4 ecommunity changes,\n\t  positive test only at this time, error cases not tested yet.\n\n2007-07-25 Juergen Kammer \u003cj.kammer@eurodata.de\u003e\n\n\t* (general) AS4 support.\n\t* bgpd.h: as_t changes to 4-bytes.\n\t* bgp_aspath.h: Add BGP_AS4_MAX and BGP_AS_TRANS defines.\n\t* bgp_aspath.c: AS_VALUE_SIZE becomes 4-byte, AS16_VALUE_SIZE\n\t  added for 2-byte.\n\t  Add AS16 versions of length calc macros.\n\t  (aspath_count_numas) New, count number of ASes.\n\t  (aspath_has_as4) New, return 1 if there are any as4\u0027s in a\n\t  path.\n\t  (assegments_parse) Interpret assegment as 4 or 2 byte,\n\t  according to how the caller instructs us, with a new\n\t  argument.\n\t  (aspath_parse) Add use32bit argument to pass to\n\t  assegments_parse. Adjust all its callers to pass 1, unless\n\t  otherwise noted.\n\t  (assegment_data_put) Adjust to be able to write 2 or 4 byte\n\t  AS, according to new use32bit argument.\n\t  (aspath_put) Adjust to write 2 or 4.\n\t  (aspath_gettoken) Use a long for passed in asno.\n\t* bgp_attr.c: (attr_str) Add BGP_ATTR_AS4_PATH and\n\t  BGP_ATTR_AS4_AGGREGATOR.\n\t  (bgp_attr_aspath) Call aspath_parse with right 2/4 arg, as\n\t  determined by received-capability flag.\n\t  (bgp_attr_aspath_check) New, code previously in attr_aspath\n\t  but moved to new func so it can be run after NEW_AS_PATH\n\t  reconciliation.\n\t  (bgp_attr_as4_path) New, handle NEW_AS_PATH.\n\t  (bgp_attr_aggregator) Adjust to cope with 2/4 byte ASes.\n\t  (bgp_attr_as4_aggregator) New, read NEW_AGGREGATOR.\n\t  (bgp_attr_parse) Add handoffs to previous parsers for the two\n\t  new AS4 NEW_ attributes.\n\t  Various checks added for NEW/OLD reconciliation.\n\t  (bgp_packet_attribute) Support 2/4 for AS_PATH and\n\t  AGGREGATOR, detect when NEW_ attrs need to be sent.\n\t* bgp_debug.{c,h}: Add \u0027debug bgp as4\u0027.\n\t* bgp_dump.c: MRTv2 support, unconditionally enabled, which\n\t  supports AS4. Based on patches from Erik (RIPE?).\n\t* bgp_ecommunity.c: (ecommunity_ecom2str) ECOMMUNITY_ENCODE_AS4\n\t  support.\n\t* bgp_open.c: (peek_for_as4_capability) New, peek for AS4\n\t  capability prior to full capability parsing, so we know which\n\t  ASN to use for struct peer lookup.\n\t  (bgp_open_capability) Always send AS4 capability.\n\t* bgp_packet.c: (bgp_open_send) AS4 handling for AS field\n\t  (bgp_open_receive) Peek for AS4 capability first, and figure\n\t  out which AS to believe.\n\t* bgp_vty.c: (bgp_show_peer) Print AS4 cap\n\t* tests/aspath_test.c: Support asn32 changes, call aspath_parse\n\t  with 16 bit.\n\t* vtysh/extract.pl: AS4 compatibility for router bgp ASNUMBER\n\t* vtysh/extract.pl.in: AS4 compatibility for router bgp ASNUMBER\n\t* vtysh/vtysh.c: AS4 compatibility for router bgp ASNUMBER\n"
    },
    {
      "commit": "41367172d812354c05b11818346f0d49c2245aef",
      "tree": "eb8f83ec0e93cb5a1d8470afd5c79ce55bc853da",
      "parents": [
        "6d58272b4cf96f0daa846210dd2104877900f921"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Aug 06 15:24:51 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Aug 06 15:24:51 2007 +0000"
      },
      "message": "[bgpd] Add support for AS_PATHLIMIT / draft-ietf-idr-as-pathlimit\n\n2007-07-31 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) Support for draft-ietf-idr-as-pathlimit-03.\n\t* bgp_attr.h: (struct attr) Add pathlimit struct\n          bgp_attr.c: (attr_str) Add BGP_ATTR_AS_PATHLIMIT string.\n          (attrhash_key_make) tally pathlimit too\n          (attrhash_cmp) cmp pathlimit attr\n          (bgp_attr_aspathlimit) New, parse AS_PATHLIMIT attr.\n          (bgp_attr_parse) ditto\n          (bgp_packet_attribute) Write out AS_PATHLIMIT when set\n          (bgp_dump_routes_attr) ditto\n         * bgp_route.h: (struct bgp_static) Add TTL field\n         * bgp_route.c: (bgp_announce_check) Drop paths that are over\n           their hop-count TTL before sending via EBGP.\n           Mangle ASN in pathlimit for confeds/private as best we can.\n           (bgp_static_update_{rsclient,main}) Add any configure pathlimit\n           information.\n           (bgp_pathlimit_update_parents) New, update atomic-aggr setting for\n           parents of an aspathlimit\u0027ed static.\n           (bgp_static_set) Add TTL argument, for all the \u0027bgp network\u0027\n           commands.\n           Call previous for TTL changed statics.\n           (bgp_static_unset) Call pathlimit_update_parents.\n           (various bgp network commands) Add \u0027pathlimit \u003c0-255\u003e\u0027 qualifier\n           to all the various forms, bar route-map - which can set ttl\n           itself.\n         * bgp_routemap.c: (general) Add support for \u0027set pathlimit ttl\u0027 and\n           \u0027match pathlimit as\u0027.\n         * doc/bgpd.texi: Document \u0027network ... pathlimit \u003cttl\u003e\u0027\n"
    },
    {
      "commit": "ca058a30b1ea57f83871ab4cf1c9a91ea4064d52",
      "tree": "ab38ab59bad607c9b41a093cb8b35bec766f30b3",
      "parents": [
        "2815e61ffbbf9c362896f3912d925cf78e125ee1"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Sep 14 02:58:49 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Sep 14 02:58:49 2006 +0000"
      },
      "message": "[bgpd] Fix 0.99 shutdown regression, introduce Clearing and Deleted states\n\n2006-09-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) Fix some niggly issues around \u0027shutdown\u0027 and clearing\n\t  by adding a Clearing FSM wait-state and a hidden \u0027Deleted\u0027\n\t  FSM state, to allow deleted peers to \u0027cool off\u0027 and hit 0\n\t  references. This introduces a slow memory leak of struct peer,\n\t  however that\u0027s more a testament to the fragility of the\n\t  reference counting than a bug in this patch, cleanup of\n\t  reference counting to fix this is to follow.\n\t* bgpd.h: Add Clearing, Deleted states and Clearing_Completed\n\t  and event.\n\t* bgp_debug.c: (bgp_status_msg[]) Add strings for Clearing and\n\t  Deleted.\n\t* bgp_fsm.h: Don\u0027t allow timer/event threads to set anything\n\t  for Deleted peers.\n\t* bgp_fsm.c: (bgp_timer_set) Add Clearing and Deleted. Deleted\n\t  needs to stop everything.\n\t  (bgp_stop) Remove explicit fsm_change_status call, the\n\t  general framework handles the transition.\n\t  (bgp_start) Log a warning if a start is attempted on a peer\n\t  that should stay down, trying to start a peer.\n\t  (struct .. FSM) Add Clearing_Completed\n\t  events, has little influence except when in state\n\t  Clearing to signal wait-state can end.\n\t  Add Clearing and Deleted states, former is a wait-state,\n\t  latter is a placeholder state to allow peers to disappear\n\t  quietly once refcounts settle.\n\t  (bgp_event) Try reduce verbosity of FSM state-change debug,\n\t  changes to same state are not interesting (Established-\u003eEstablished)\n\t  Allow NULL action functions in FSM.\n\t* bgp_packet.c: (bgp_write) Use FSM events, rather than trying\n\t  to twiddle directly with FSM state behind the back of FSM.\n\t  (bgp_write_notify) ditto.\n\t  (bgp_read) Remove the vague ACCEPT_PEER peer_unlock, or else\n\t  this patch crashes, now it leaks instead.\n\t* bgp_route.c: (bgp_clear_node_complete) Clearing_Completed\n\t  event, to end clearing.\n\t  (bgp_clear_route) See extensive comments.\n\t* bgpd.c: (peer_free) should only be called while in Deleted,\n\t  peer refcounting controls when peer_free is called.\n\t  bgp_sync_delete should be here, not in peer_delete.\n\t  (peer_delete) Initiate delete.\n\t  Transition to Deleted state manually.\n\t  When removing peer from indices that provide visibility of it,\n\t  take great care to be idempotent wrt the reference counting\n\t  of struct peer through those indices.\n\t  Use bgp_timer_set, rather than replicating.\n\t  Call to bgp_sync_delete isn\u0027t appropriate here, sync can be\n\t  referenced while shutting down and finishing deletion.\n\t  (peer_group_bind) Take care to be idempotent wrt list references\n\t  indexing peers.\n"
    },
    {
      "commit": "1a392d46db1917dfca2ddd06d7f0021396f8ecfa",
      "tree": "8dec4a2e583c9a1890fd62d647dcd5a27d14bde1",
      "parents": [
        "ff7924f6c0437e2f3cc3710570414ae87a828724"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Sep 07 00:24:49 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Sep 07 00:24:49 2006 +0000"
      },
      "message": "[bgpd] Handle pcount as flags are changed, fixing pcount issues\n\n2006-09-06 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) Squash any and all prefix-count issues by\n\t  abstracting route flag changes, and maintaining count as and\n\t  when flags are modified (rather than relying on explicit\n\t  modifications of count being sprinkled in just the right\n\t  places throughout the code).\n\t* bgp_route.c: (bgp_pcount_{dec,inc}rement) removed.\n\t  (bgp_pcount_adjust) new, update prefix count as\n\t  needed for a given route.\n\t  (bgp_info_{uns,s}et_flag) set/unset a BGP_INFO route status\n\t  flag, calling previous function when appropriate.\n\t  (general) Update all set/unsets of flags to use previous.\n\t  Remove pcount_{dec,inc}rement calls.\n\t  No need to unset BGP_INFO_VALID in places where\n\t  bgp_info_delete is called, it does that anyway.\n\t* bgp_{damp,nexthop}.c: Update to use bgp_info_{un,}set_flag.\n\t* bgp_route.h: Export bgp_info_{un,}set_flag.\n\t  Add a \u0027meta\u0027 BGP_INFO flag, BGP_INFO_UNUSEABLE.\n\t  Move BGP_INFO_HOLDDOWN macro to here from bgpd.h\n"
    },
    {
      "commit": "64e580a72deaa268e46559516663808503f347ec",
      "tree": "7b11b71858334f07a72d3885e00f63dd5c8efcf7",
      "parents": [
        "e24f0638e6fc7256580c185a631cbe5549bf7db3"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Feb 21 01:09:01 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Feb 21 01:09:01 2006 +0000"
      },
      "message": "[bgpd] Record afi/safi in bgp_table. Serialise peer clear with FSM.\n\n2006-02-21 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgpd.h: move the clear_node_queue to be peer specific.\n\t  Add a new peer status flag, PEER_STATUS_CLEARING.\n\t* bgp_table.h: (struct bgp_table) Add fields to record afi,\n          safi of the table.\n          (bgp_table_init) Take afi and safi to create table for.\n        * bgp_table.c: (bgp_table_init) record the afi and safi.\n        * bgp_nexthop.c: Update all calls to bgp_table_init.\n        * bgp_vty.c: ditto.\n        * bgpd.c: ditto.\n        * bgp_fsm.c: (bgp_timer_set) dont bring up a session which is\n\t  clearing.\n        * bgp_route.c: (general) Update all bgp_table_init calls.\n          (bgp_process_{rsclient,main}) clear_node is serialised\n          via PEER_STATUS_CLEARING and fsm now.\n          (struct bgp_clear_node_queue) can be removed. struct bgp_node\n          can be the queue item data directly, as struct peer can be\n          kept in the new wq global user data and afi/safi can be\n          retrieved via bgp_node -\u003e bgp_table.\n          (bgp_clear_route_node) fix to get peer via wq-\u003espec.data,\n          afi/safi via bgp_node-\u003ebgp_table.\n          (bgp_clear_node_queue_del) no more item data to delete, only\n          unlock the bgp_node.\n          (bgp_clear_node_complete) only need to unset CLEARING flag\n          and unlock struct peer.\n          (bgp_clear_node_queue_init) queue attaches to struct peer\n          now. record peer name as queue name.\n          (bgp_clear_route_table) If queue transitions to active,\n          serialise clearing by setting PEER_STATUS_CLEARING rather\n          than plugging process queue, and lock peer while queue\n          active.\n          Update to pass only bgp_node as per-queue-item specific data.\n"
    },
    {
      "commit": "37c38304e481037ed075f79f78a3d6f78038f907",
      "tree": "ee83dfe3f0ea07e3d99eb32e32a5902d6f627ce9",
      "parents": [
        "98429f6d07b0bac006eb14aea13c1d989fc835ed"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 10 22:15:45 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 10 22:15:45 2006 +0000"
      },
      "message": "[bgpd] remove export of long defunct function\n\n2006-01-10 Juris Kalnins \u003cjuris@mt.lv\u003e\n\n\t* bgpd.h: (bgp_router_id_unset) ex-function, remove.\n"
    },
    {
      "commit": "b40d939b477a08d79dbee947aea42ac652090f85",
      "tree": "fe160cd4514218baea57c2566e318fc66ea9a6ef",
      "parents": [
        "bb5b7552cc4f067fbb25f7a8f0c4fe558a508f3f"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Aug 22 22:34:41 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Aug 22 22:34:41 2005 +0000"
      },
      "message": "2005-08-22 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_route.h: (struct bgp_info) add a new flag, BGP_INFO_REMOVED.\n\t  BGP_INFO_VALID is already overloaded, don\u0027t care to do same thing\n\t  to STALE or HISTORY.\n\t* bgpd.h: (BGP_INFO_HOLDDOWN) Add INFO_REMOVED to the macro, as a\n\t  route which should generally be ignored.\n\t* bgp_route.c: (bgp_info_delete) Just set the REMOVE flag, rather\n\t  than doing actual work, so that bgp_process (called directly,\n\t  or indirectly via the scanner) can catch withdrawn routes.\n\t  (bgp_info_reap) Actually remove the route, what bgp_info_delete\n\t  used to do, only for use by bgp_process.\n\t  (bgp_best_selection) reap any REMOVED routes, other than the old\n\t  selected route.\n\t  (bgp_process_rsclient) reap the old-selected route, if appropriate\n\t  (bgp_process_main) ditto\n\t  (bgp_rib_withdraw, bgp_rib_remove) make them more consistent with\n\t  each other. Don\u0027t play games with the VALID flag, bgp_process\n\t  is async now, so it didn\u0027t make a difference anyway.\n\t  Remove the \u0027force\u0027 argument from bgp_rib_withdraw, withdraw+force\n\t  is equivalent to bgp_rib_remove. Update all its callers.\n\t  (bgp_update_rsclient) bgp_rib_withdraw and force set is same as\n\t  bgp_rib_remove.\n\t  (route_vty_short_status_out) new helper to print the leading\n\t  route-status string used in many command outputs. Consolidate.\n\t  (route_vty_out, route_vty_out_tag, damp_route_vty_out,\n\t   flap_route_vty_out) use route_vty_short_status_out rather than\n\t  duplicate.\n\t  (route_vty_out_detail) print state of REMOVED flag.\n\t  (BGP_SHOW_SCODE_HEADER) update for Removed flag.\n"
    },
    {
      "commit": "94f2b3923e9663d0355a829f22e4e31cf68ee7b8",
      "tree": "59c0291a76b1c97fbb089abb479307f19cdfd4c1",
      "parents": [
        "7cad40007b9714dba65065916ea68577f9d3d6dd"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jun 28 12:44:16 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jun 28 12:44:16 2005 +0000"
      },
      "message": "2005-06-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (global) The great bgpd extern and static\u0027ification.\n\t* bgp_routemap.c: remove unused ROUTE_MATCH_ASPATH_OLD code\n\t  (route_set_metric_compile) fix u_int32_t to ULONG_MAX comparison\n\t  warnings.\n\t* bgp_route.h: (bgp_process, bgp_withdraw, bgp_update) export these\n\t  used by various files which had their own private declarations,\n\t  in the case of mplsvpn - incorrect.\n"
    },
    {
      "commit": "200df115ea0ba6f54151d60fe5e9a7f6948de7c3",
      "tree": "2aedc0af80d2e805cdf2cefd50432423d2871216",
      "parents": [
        "b31b813671d96ea9e96801508442a90f0ef503fa"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jun 01 11:17:05 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jun 01 11:17:05 2005 +0000"
      },
      "message": "2005-06-01 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgpd/(general) refcount struct peer and bgp_info, hence allowing us\n\t  add work_queues for bgp_process.\n\t* bgpd/bgp_route.h: (struct bgp_info) Add \u0027lock\u0027 field for refcount.\n\t  Add bgp_info_{lock,unlock} helper functions.\n\t  Add bgp_info_{add,delete} helpers, to remove need for\n\t  users managing locking/freeing of bgp_info and bgp_node\u0027s.\n\t* bgpd/bgp_table.h: (struct bgp_node) Add a flags field, and\n\t  BGP_NODE_PROCESS_SCHEDULED to merge redundant processing of\n\t  nodes.\n\t* bgpd/bgp_fsm.h: Make the ON/OFF/ADD/REMOVE macros lock and unlock\n\t  peer reference as appropriate.\n\t* bgpd/bgp_damp.c: Remove its internal prototypes for\n\t  bgp_info_delete/free. Just use bgp_info_delete.\n\t* bgpd/bgpd.h: (struct bgp_master) Add work_queue pointers.\n\t  (struct peer) Add reference count \u0027lock\u0027\n\t  (peer_lock,peer_unlock) New helpers to take/release reference\n\t  on struct peer.\n\t* bgpd/bgp_advertise.c: (general) Add peer and bgp_info refcounting\n\t  and balance how references are taken and released.\n\t  (bgp_advertise_free) release bgp_info reference, if appropriate\n\t  (bgp_adj_out_free) unlock peer\n\t  (bgp_advertise_clean) leave the adv references alone, or else\n\t  call bgp_advertise_free cant unlock them.\n\t  (bgp_adj_out_set) lock the peer on new adj\u0027s, leave the reference\n\t  alone otherwise. lock the new bgp_info reference.\n\t  (bgp_adj_in_set) lock the peer reference\n\t  (bgp_adj_in_remove) and unlock it here\n\t  (bgp_sync_delete) make hash_free on peer conditional, just in\n\t  case.\n\t* bgpd/bgp_fsm.c: (general) document that the timers depend on\n\t  bgp_event to release a peer reference.\n\t  (bgp_fsm_change_status) moved up the file, unchanged.\n\t  (bgp_stop) Decrement peer lock as many times as cancel_event\n\t  canceled - shouldnt be needed but just in case.\n\t  stream_fifo_clean of obuf made conditional, just in case.\n\t  (bgp_event) always unlock the peer, regardless of return value\n\t  of bgp_fsm_change_status.\n\t* bgpd/bgp_packet.c: (general) change several bgp_stop\u0027s to BGP_EVENT\u0027s.\n\t  (bgp_read) Add a mysterious extra peer_unlock for ACCEPT_PEERs\n\t  along with a comment on it.\n\t* bgpd/bgp_route.c: (general) Add refcounting of bgp_info, cleanup\n\t  some of the resource management around bgp_info. Refcount peer.\n\t  Add workqueues for bgp_process and clear_table.\n\t  (bgp_info_new) make static\n\t  (bgp_info_free) Ditto, and unlock the peer reference.\n\t  (bgp_info_lock,bgp_info_unlock) new exported functions\n\t  (bgp_info_add) Add a bgp_info to a bgp_node in correct fashion,\n\t  taking care of reference counts.\n\t  (bgp_info_delete) do the opposite of bgp_info_add.\n\t  (bgp_process_rsclient) Converted into a work_queue work function.\n\t  (bgp_process_main) ditto.\n\t  (bgp_processq_del) process work queue item deconstructor\n\t  (bgp_process_queue_init) process work queue init\n\t  (bgp_process) call init function if required, set up queue item\n\t  and add to queue, rather than calling process functions directly.\n\t  (bgp_rib_remove) let bgp_info_delete manage bgp_info refcounts\n\t  (bgp_rib_withdraw) ditto\n\t  (bgp_update_rsclient) let bgp_info_add manage refcounts\n\t  (bgp_update_main) ditto\n\t  (bgp_clear_route_node) clear_node_queue work function, does\n\t  per-node aspects of what bgp_clear_route_table did previously\n\t  (bgp_clear_node_queue_del) clear_node_queue item delete function\n\t  (bgp_clear_node_complete) clear_node_queue completion function,\n\t  it unplugs the process queues, which have to be blocked while\n\t  clear_node_queue is being processed to prevent a race.\n\t  (bgp_clear_node_queue_init) init function for clear_node_queue\n\t  work queues\n\t  (bgp_clear_route_table) Sets up items onto a workqueue now, rather\n\t  than clearing each node directly. Plugs both process queues to\n\t  avoid potential race.\n\t  (bgp_static_withdraw_rsclient) let bgp_info_{add,delete} manage\n\t  bgp_info refcounts.\n\t  (bgp_static_update_rsclient) ditto\n\t  (bgp_static_update_main) ditto\n\t  (bgp_static_update_vpnv4) ditto, remove unneeded cast.\n\t  (bgp_static_withdraw) see bgp_static_withdraw_rsclient\n\t  (bgp_static_withdraw_vpnv4) ditto\n\t  (bgp_aggregate_{route,add,delete}) ditto\n\t  (bgp_redistribute_{add,delete,withdraw}) ditto\n\t* bgpd/bgp_vty.c: (peer_rsclient_set_vty) lock rsclient list peer\n\t  reference\n\t  (peer_rsclient_unset_vty) ditto, but unlock same reference\n\t* bgpd/bgpd.c: (peer_free) handle frees of info to be kept for lifetime\n\t  of struct peer.\n\t  (peer_lock,peer_unlock) peer refcount helpers\n\t  (peer_new) add initial refcounts\n\t  (peer_create,peer_create_accept) lock peer as appropriate\n\t  (peer_delete) unlock as appropriate, move out some free\u0027s to\n\t  peer_free.\n\t  (peer_group_bind,peer_group_unbind) peer refcounting as\n\t  appropriate.\n\t  (bgp_create) check CALLOC return value.\n\t  (bgp_terminate) free workqueues too.\n\t* lib/memtypes.c: Add MTYPE_BGP_PROCESS_QUEUE and\n\t  MTYPE_BGP_CLEAR_NODE_QUEUE\n"
    },
    {
      "commit": "00d252cb5ff21ecc537ab40385316b41622a95e2",
      "tree": "c0132f4be53d8ae251ecb1dd8c39816f8734d08f",
      "parents": [
        "269d74fdc39a612da8f627bf97628c68d25a16ab"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon May 23 14:19:54 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon May 23 14:19:54 2005 +0000"
      },
      "message": "2005-05-23 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* bgp_fsm.h: Add extern qualifier to exported functions\n\t* bgp_nexthop.c: add static to nexthop specific globals\n\t* *.h: Add guard defines\n"
    },
    {
      "commit": "6811845b67999861388cf00d3ca0ee8471d29876",
      "tree": "1f7f08f171164b1a75b66a45093ccb44217dff12",
      "parents": [
        "4a8164e5b310094315e2c50d73aeea489766a48a"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Fri Apr 08 15:40:36 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Fri Apr 08 15:40:36 2005 +0000"
      },
      "message": "\t* bgpd.texi: Document new \"bgp bestpath as-path confed\" command.\n\t* bgp_aspath.[ch], bgp_route.c, bgp_vty.c, bgpd.[ch]: Allow to enable\n\t  the length of confederation path segments to be included during the\n\t  as-path length check in the best path decision.\n"
    },
    {
      "commit": "6ffd2079596c232856dda0d56fddd9610e8d61fe",
      "tree": "d5c4906cbfb4af98a8c73be667a9ab2369a6c64b",
      "parents": [
        "93406d87e68a0e9cf5ce0240461395cd59c143b6"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Feb 02 14:50:11 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Feb 02 14:50:11 2005 +0000"
      },
      "message": "\t* bgp_route.c, bgp_vty.c, bgp_zebra.c, bgpd.[ch]: \"enforce-multihop\"\n\t  -\u003e \"disable-connected-check\".\n\n\t[merge from GNU Zebra]\n"
    },
    {
      "commit": "93406d87e68a0e9cf5ce0240461395cd59c143b6",
      "tree": "b1cb2bae2eca7c5206565f73169cf43bf8cf892d",
      "parents": [
        "c9502438e822199370fe87100c725e1092e943c1"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Feb 02 14:40:33 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Feb 02 14:40:33 2005 +0000"
      },
      "message": "\t* bgp_fsm.c, bgp_open.c, bgp_packet.c, bgp_route.[ch], bgp_vty.c,\n\t  bgpd.[ch]: Add BGP_INFO_STALE flag and end-of-rib support. \"bgp\n\t  graceful-restart\" commands added. Show numbers of individual\n\t  messages in \"show ip bgp neighbor\" command. Final pieces of graceful\n\t  restart.\n\n\t[merge from GNU Zebra]\n"
    },
    {
      "commit": "c9502438e822199370fe87100c725e1092e943c1",
      "tree": "bfeb6babd5d0ba6037ab2aa3a544b2d855e4e8d9",
      "parents": [
        "3d515fd9af9f126667a9c2da9c2f40c4c37c28df"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Feb 01 22:01:48 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Feb 01 22:01:48 2005 +0000"
      },
      "message": "\t* bgp_open.c, bgp_packet.c, bgp_vty.c, bgpd.[ch]: Remove \"no neighbor\n\t  capability route-refresh\" commands. Route refresh capability is sent\n\t  anyway now. Preserve dummy deprecated commands.\n\n\t[merge from GNU Zebra]\n"
    },
    {
      "commit": "3d515fd9af9f126667a9c2da9c2f40c4c37c28df",
      "tree": "c107224556ed7678d7a5afc42c19742948cda477",
      "parents": [
        "0a486e5fcb1b8dac7d8b4cf6ed93e82b8b72fed6"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Feb 01 21:30:04 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Feb 01 21:30:04 2005 +0000"
      },
      "message": "\t* bgp_attr.c, bgp_snmp.c, bgp_vty.c, bgpd.[ch]: Remove support for old\n\t  draft - ie. \"neighbor version 4-\" commands. Preserve dummy \"neighbor\n\t  version\" command as deprecated.\n\n\t[merge from GNU Zebra]\n"
    },
    {
      "commit": "0a486e5fcb1b8dac7d8b4cf6ed93e82b8b72fed6",
      "tree": "f63429ed7767e227457cb48196d82f12e4fcaad6",
      "parents": [
        "f418446bb767d79438e2df689c5bf9563c54b317"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Feb 01 20:57:17 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Feb 01 20:57:17 2005 +0000"
      },
      "message": "\t* bgpd.[ch], bgp_vty.c, bgp_route.c: \"Restart session after\n\t  maximum-prefix limit\" feature support.\n\n\t[merge from GNU Zebra]\n"
    },
    {
      "commit": "f418446bb767d79438e2df689c5bf9563c54b317",
      "tree": "a1c7322c8b54e46a09bf2f402537277fff59c1c3",
      "parents": [
        "6a52d0d155fc8b892e30cdb5e3fbe4c2779bd4cd"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Feb 01 20:13:16 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Feb 01 20:13:16 2005 +0000"
      },
      "message": "        * bgp_nexthop.c: Improve debug.\n        * bgpd.[ch], bgp_nexthop.c, bgp_snmp.c: Remove useless bgp_get_master()\n          function.\n        * bgp_packet.c: MP AFI_IP update and withdraw parsing.\n        * bgp_fsm.c: Reset peer synctime in bgp_stop(). bgp_fsm_change_status()\n          is better place to log about peer status change than bgp_event().\n          Log in bgp_connect_success().\n        * bgp_vty.c: Fix typo in comment.\n        * bgp_attr.c: Better log about unknown attribute.\n\n\t[merge from GNU Zebra]\n"
    },
    {
      "commit": "fd79ac918b8feaacebe9719adaac97dffb69137a",
      "tree": "d0665eb68e60da9d6e364414cdb61830f19f33d3",
      "parents": [
        "39db97e4e02eae08a1e18528367b6e9b07eb6a93"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Oct 13 05:06:08 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Oct 13 05:06:08 2004 +0000"
      },
      "message": "2004-10-13 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* (global) more const\u0027ification and fixups of types to clean up code.\n\t* bgp_mplsvpn.{c,h}: (str2tag) fix abuse. Still not perfect,\n          should use something like the VTY_GET_INTEGER macro, but without\n          the vty_out bits..\n        * bgp_routemap.c: (set_aggregator_as) use VTY_GET_INTEGER_RANGE\n          (no_set_aggregator_as) ditto.\n        * bgpd.c: (peer_uptime) fix unlikely bug, where no buffer is\n          returned, add comments about troublesome return value.\n"
    },
    {
      "commit": "18a6dce6f83dd20caf1f36c8e840868ff0bf6dbd",
      "tree": "ff832cbf6fe2b239bde06268820587bec671ae6d",
      "parents": [
        "a49c0ff6771975eeb1bd7da923a9dc830200cf65"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Oct 03 18:18:34 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Oct 03 18:18:34 2004 +0000"
      },
      "message": "Common router id.\n"
    },
    {
      "commit": "fee0f4c629412f422fc9a857e097ef335c2c576c",
      "tree": "14703e303ea2cecaee7728d9ee27075b0590a679",
      "parents": [
        "0e82d0e1204e45ecce773a7e19f7d64140f7a66a"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Sep 13 05:12:46 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Sep 13 05:12:46 2004 +0000"
      },
      "message": "2004-09-13 Jose Luis Rubio \u003cjrubio@dit.upm.es\u003e\n           (at Technical University of Madrid as part of Euro6ix Project)\n\n        Enhanced Route Server functionality and Route-Maps:\n\n        * bgpd/bgpd.h: Modified \u0027struct peer\u0027 and \u0027struct bgp_filter\u0027 to\n        support rs-clients. A \u0027struct bgp_table *rib\u0027 has been added to the\n        first (to mantain a separated RIB for each rs-client) and two new\n        route-maps have been added to the last (for import/export policies).\n        Added the following #defines: RMAP_{IN|OUT|IMPORT|EXPORT|MAX},\n        PEER_RMAP_TYPE_{IMPORT|EXPORT} and BGP_CLEAR_SOFT_RSCLIENT.\n\n        * bgpd/bgpd.c: Modified the functions that create/delete/etc peers in\n        order to consider the new fields included in \u0027struct peer\u0027 for\n        supporting rs-clients, i.e. the import/export route-maps and the\n        \u0027struct bgp_table\u0027.\n\n        * bgpd/bgp_route.{ch}: Modified several functions related with\n        receiving/sending announces in order to support the new Route Server\n        capabilities.\n        Function \u0027bgp_process\u0027 has been reorganized, creating an auxiliar\n        function for best path selection (\u0027bgp_best_selection\u0027).\n        Modified \u0027bgp_show\u0027 and \u0027bgp_show_route\u0027 for displaying information\n        about any RIB (and not only the main bgp RIB).\n        Added commands for displaying information about RS-clients RIBs:\n        \u0027show bgp rsclient (A.B.C.D|X:X::X:X)\u0027, \u0027show bgp rsclient\n        (A.B.C.D|X:X::X:X) X:X::X:X/M\u0027, etc\n\n        * bgpd/bgp_table.{ch}: The structure \u0027struct bgp_table\u0027 now has two\n        new fields: type (which can take the values BGP_TABLE_{MAIN|RSCLIENT})\n        and \u0027void *owner\u0027 which points to \u0027struct bgp\u0027 or \u0027struct peer\u0027 which\n        owns the table.\n        When creating a new bgp_table by default \u0027type\u003dBGP_TABLE_MAIN\u0027 is set.\n\n        * bgpd/bgp_vty.c: The commands \u0027neighbor ... route-server-client\u0027 and\n        \u0027no neighbor ... route-server-client\u0027 now not only set/unset the flag\n        PEER_FLAG_RSERVER_CLIENT, but they create/destroy the \u0027struct\n        bgp_table\u0027 of the peer. Special actions are taken for peer_groups.\n        Command \u0027neighbor ... route-map WORD (in|out)\u0027 now also supports two\n        new kinds of route-map: \u0027import\u0027 and \u0027export\u0027.\n        Added commands \u0027clear bgp * rsclient\u0027, etc. These commands allow a new\n        kind of soft_reconfig which affects only the RIB of the specified\n        RS-client.\n        Added commands \u0027show bgp rsclient summary\u0027, etc which display a\n        summary of the rs-clients configured for the corresponding address\n        family.\n\n        * bgpd/bgp_routemap.c: A new match statement is available,\n        \u0027match peer (A.B.C.D|X:X::X:X)\u0027. This statement can only be used in\n        import/export route-maps, and it matches when the peer who announces\n        (when used in an import route-map) or is going to receive (when used\n        in an export route-map) the route is the same than the one specified\n        in the statement.\n        For peer-groups the statement matches if the specified peer is member\n        of the peer-group.\n        A special version of the command, \u0027match peer local\u0027, matches with\n        routes originated by the Route Server (defined with \u0027network ...\u0027,\n        redistributed routes and default-originate).\n\n        * lib/routemap.{ch}: Added a new clause \u0027call NAME\u0027 for use in\n        route-maps. It jumps into the specified route-map and when it returns\n        the first route-map ends if the called RM returns DENY_MATCH, or\n        continues in other case.\n"
    },
    {
      "commit": "538621f2f80ced838048fa7402e57face3b224a5",
      "tree": "1193f5948da15db665aa6d4a43027c466c0614b4",
      "parents": [
        "3950fda506e4db58a0ccc50156cf70f97da95bc3"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Fri May 21 09:31:30 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Fri May 21 09:31:30 2004 +0000"
      },
      "message": "Merge graceful restart capability display and some small fixes from Zebra\nrepository by Rivo Nurges.\n"
    },
    {
      "commit": "e0701b7955b883c5437269a382e1afc76ee71e5c",
      "tree": "d00034c1b7f369fc8214d401b7a44ef586d73e15",
      "parents": [
        "62843e433d8f85bce381edc6202c4af6c5cec31b"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu May 20 09:19:34 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu May 20 09:19:34 2004 +0000"
      },
      "message": "Merge bgpd changeset 1176 from Zebra repository by Rivo Nurges.\n"
    },
    {
      "commit": "eb821189d2778a93069fc1fc2f104db529ec5a1e",
      "tree": "a623d680931ee722fb946f56476f23efd1f13685",
      "parents": [
        "eb3f463aab7f09e6c1041bf779fd5752b038f847"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sat May 01 08:44:08 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sat May 01 08:44:08 2004 +0000"
      },
      "message": "2004-05-01 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * Revert the attempted clean-up of the dummy peer hack, reverts\n          patchsets 435 (see 2004-02-17 below) and 456.\n"
    },
    {
      "commit": "545acafbf599b3d163813e6640a1f83703ebda2e",
      "tree": "dd2c4b6288cf4cd34a381c280c995d85c40c8ecc",
      "parents": [
        "6b3fac0aab9ea72c927531df4c20a6e60df650fe"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Apr 20 15:13:15 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Apr 20 15:13:15 2004 +0000"
      },
      "message": "2004-04-16 rivo nurges \u003crix@estpak.ee\u003e\n\n        * bgpd.h: update cease subcodes to draft-ietf-idr-cease-subcode-05\n        * bgpd.h, bgpd.c, bgp_route.c, bgp_route.h: fix UNH IOL BGP-4.1.6a\n"
    },
    {
      "commit": "6ad23f05e36e743b89fc5a9a41e3db7eccb917fb",
      "tree": "522a8914b6aefe124c2e972481e89f408110ef3c",
      "parents": [
        "5de5bbf107f9eacb8d8265f8c0b925b2aed21878"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Feb 17 19:45:10 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Feb 17 19:45:10 2004 +0000"
      },
      "message": "2004-02-17 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * bgpd.h: (bgp_peer) add fd_local and fd_accept\n          file descriptor\u0027s, fd becomes a pointer to one of these.\n        * bgpd.c: (global) adjust for fact that fd is now a pointer.\n          (peer_create_accept) removed.\n        * bgp_route.c: (global) adjust for change of peer fd to pointer\n        * bgp_packet.c: (bgp_collision_detect) adjust and remove the\n          \"replace with other peer\" hack.\n        * bgp_network.c: (bgp_accept) Remove the dummy peer hack.\n          Update peer-\u003efd_accept instead.\n          (global) Adjust fd references - now a pointer.\n        * bgp_fsm.c: (global) adjust peer fd to pointer.\n          (bgp_connection_stop) new function, to stop connection.\n          (global) adjust everything which closed peer fd to use\n          bgp_connection_stop().\n"
    },
    {
      "commit": "848973c71e75424d07c2cd52ba991aae1b9df12a",
      "tree": "0a46f5b0fea868dd2003a475d860108b14786fe1",
      "parents": [
        "e8f2984c00d406781eff42db7afcdae5d5a6a366"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Aug 13 00:32:49 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Aug 13 00:32:49 2003 +0000"
      },
      "message": "2003-08-13 kunihiro \u003ckunihiro@zebra.org\u003e\n\n\t* bgpd/bgp{_fsm.c,_vty.c,d.c,d.h}: Add support for \"bgp\n          log-neighbor-changes\" command.\n"
    },
    {
      "commit": "ac41b2a2d40356468edc84becc6d5800d119aef6",
      "tree": "8496bdd89af283f76ccd25b5ff24febcdcd93e0e",
      "parents": [
        "f1c61a0a5b5c4cfd0125f050568b8c1fb9953a96"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Aug 12 05:32:27 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Aug 12 05:32:27 2003 +0000"
      },
      "message": "2003-08-11 kunihiro \u003ckunihiro@zebra.org\n\n         * bgp_route{,map}.c: Extend \u0027set ip next-hop\u0027 in route-maps with\n         ability to specify \u0027peer-address\u0027 rather than IP.\n"
    },
    {
      "commit": "6cbbc3cc9fc3127c6ad45e73755b4f0c3afff31a",
      "tree": "4387bd7c1b0a42198ea56b5a939d96adbbc122f1",
      "parents": [
        "a2c6283126a48c915561364e8456894bf7089b2c"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Apr 28 17:11:02 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Apr 28 17:11:02 2003 +0000"
      },
      "message": "Import of zebra.org 20030428-18:07 IST\n"
    },
    {
      "commit": "23bd12c31d701376d45ab45aa8c838e9fb5e409c",
      "tree": "d8d6b789194b372dcf067bc1bc5169f0ff284e8d",
      "parents": [
        "3a6440d756863b602cfaaf0259b71950e67b2a6e"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Apr 07 06:11:09 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Apr 07 06:11:09 2003 +0000"
      },
      "message": "[zebra 18626] move zebra socket paths to configure.ac\n\nmoved definition of the various socket paths from the\nper daemon header files into configure.ac. it will set the paths to\nbe in the directory specified by --localstatedir\u003d\u003cprefix\u003e or\notherwise will try to guess as best it can ( a la pid file path\ndetection - which probably should try reference ${prefix} too).\n\nthe present hardcoded socket path, /tmp, isnt really correct. should\nbe in /var somewhere really.\n"
    },
    {
      "commit": "718e3744195351130f4ce7dbe0613f4b3e23df93",
      "tree": "bac2ad39971cd43f31241ef123bd4e470f695ac9",
      "parents": [],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 20:15:29 2002 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 20:15:29 2002 +0000"
      },
      "message": "Initial revision\n"
    }
  ]
}
