)]}'
{
  "log": [
    {
      "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": "518a4b7eadcba567f01061e6659d8179380efcdf",
      "tree": "0bc751d4e0024954e1bf3bf5a7e0ce84b219ba1f",
      "parents": [
        "18ab08b71e6b29e67b36df5e2261569d381b1708"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Thu Feb 04 13:27:04 2016 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Mar 08 17:53:21 2016 +0000"
      },
      "message": "bgpd: Regularise bgp_update_receive, add missing notifies and checks\n\n* bgp_packet.c: (bgp_update_receive) Lots of repeated code, doing same\n  thing for each AFI/SAFI.  Except when it doesn\u0027t, e.g.  the IPv4/VPN\n  case was missing the EoR bgp_clear_stale_route call - the only action\n  really needed for EoR.\n\n  Make this function a lot more regular, using common, AFI/SAFI\n  independent blocks so far as possible.\n\n  Replace the 4 separate bgp_nlris with an array, indexed by an enum.\n\n  The distinct blocks that handle calling bgp_nlri_parse for each\n  different AFI/SAFI can now be replaced with a loop.\n\n  Transmogrify the nlri SAFI from the SAFI_MPLS_LABELED_VPN code-point\n  used on the wire, to the SAFI_MPLS_VPN safi_t enum we use internally\n  as early as possible.\n\n  The existing code was not necessarily sending a NOTIFY for NLRI\n  parsing errors, if they arose via bgp_nlri_sanity_check.  Send the\n  correct NOTIFY - INVAL_NETWORK for the classic NLRIs and OPT_ATTR_ERR\n  for the MP ones.\n\n  EoR can now be handled in one block.  The existing code seemed broken\n  for EoR recognition in a number of ways:\n\n  1.  A v4/unicast EoR should be an empty UPDATE.  However, it seemed\n     to be treating an UPDATE with attributes, inc.  MP REACH/UNREACH,\n     but no classic NLRIs, as a v4/uni EoR.\n\n  2.  For other AFI/SAFIs, it was treating UPDATEs with no classic\n     withraw and with a zero-length MP withdraw as EoRs.  However, that\n     would mean an UPDATE packet _with_ update NLRIs and a 0-len MP\n     withdraw could be classed as an EoR.\n\n  This seems to be loose coding leading to ambiguous protocol\n  situations and likely incorrect behaviour, rather than simply being\n  liberal.  Be more strict about checking that an UPDATE really is an\n  EoR and definitely is not trying to update any NLRIs.\n\n  This same loose EoR parsing was noted by Chris Hall previously on\n  list.\n\n  (bgp_nlri_parse) Front end NLRI parse function, to fan-out to the correct\n  parser for the AFI/SAFI.\n\n* bgp_route.c: (bgp_nlri_sanity_check) We try convert NLRI safi to\n  internal code-point ASAP, adjust switch for that.  Leave the wire\n  code point in for defensive coding.\n\n  (bgp_nlri_parse) rename to bgp_nlri_parse_ip.\n\n* tests/bgp_mp_attr_test.c: Can just use bgp_nlri_parse frontend.\n"
    },
    {
      "commit": "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": "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": "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": "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": "5228ad27e2f3abe0ebb69f66607aedc048b94a13",
      "tree": "a65817a03150dbfeb56a1eaceab526f31be1cc1d",
      "parents": [
        "c2bfbcc38428b53e856617e1da8bbe9f8d2ee2fa"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jun 04 17:58:18 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jun 04 17:58:18 2004 +0000"
      },
      "message": "2004-06-04 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * type mismatch fixes\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"
    }
  ]
}
