)]}'
{
  "log": [
    {
      "commit": "c11a918021c025f84bd3b8d40df8ae00439cd4ef",
      "tree": "3cb298cbee720e8ac716b32ac001ee5d3adacea7",
      "parents": [
        "82ca4c4b367bc467b3e76b5ff511182bb47a746d"
      ],
      "author": {
        "name": "Wilson Ng",
        "email": "wilson.ng@bigswitch.com",
        "time": "Mon Oct 28 16:02:03 2013 -0700"
      },
      "committer": {
        "name": "Wilson Ng",
        "email": "wilson.ng@bigswitch.com",
        "time": "Mon Oct 28 16:02:03 2013 -0700"
      },
      "message": "When handling OF messages from switch, use matching OF version.\n"
    },
    {
      "commit": "e53294aeaa71ff5afedb3f24b1bfa46e5a41632d",
      "tree": "50f2ef3e967123d19fb28e58a06b162ecb3190a8",
      "parents": [
        "2d2e7ae7c08aa8309ed5c5cbae5664c2c2b846d1",
        "4d1f3eb2c792f679ccc05ab2aae1af1c97182b52"
      ],
      "author": {
        "name": "abat",
        "email": "abat@bigswitch.com",
        "time": "Fri Oct 11 02:18:48 2013 -0700"
      },
      "committer": {
        "name": "abat",
        "email": "abat@bigswitch.com",
        "time": "Fri Oct 11 02:18:48 2013 -0700"
      },
      "message": "Merge into master from pull request #73:\noft: change default port to 6653 (https://github.com/floodlight/oftest/pull/73)\n"
    },
    {
      "commit": "c9d3edd2d77c09f5f25d2261a83f5a430db3b005",
      "tree": "141dc2b90ba684cb149d42f7f36c1930059a9013",
      "parents": [
        "49b323f18f7fe07d8743a5a81cd20474a508c2c1"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Wed Oct 09 00:21:01 2013 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Wed Oct 09 00:21:01 2013 -0700"
      },
      "message": "controller: serialize calls to socket.sendall\n\nThe sendall method is not atomic. Concurrent calls may end up with their data\ninterleaved on the socket. This is especially likely when the socket buffer\nfills up, causing sendall to call select(2) between writes.\n\nI noticed this bug when installing many flows. The echo reply sent by the\ncontroller thread ended up in the middle of a flow mod.\n"
    },
    {
      "commit": "4d1f3eb2c792f679ccc05ab2aae1af1c97182b52",
      "tree": "0aabc9727dc8c90eacdc665fc7f1c4e370e268fb",
      "parents": [
        "07c1cc72b66a60b6fa69d767c44a31b36cc2501c"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Thu Oct 03 13:45:57 2013 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Fri Oct 04 12:50:44 2013 -0700"
      },
      "message": "oft: change default port to 6653\n\n6653 is the IANA assigned port number.\n"
    },
    {
      "commit": "720eaf272b8de1d5ffa810e5f8ec3e6678335931",
      "tree": "4ba70a72aeda1a4c147a51562c5593d16fa88297",
      "parents": [
        "a68176f803f56ead0e73ba8aac052e2886b6f2ef"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Fri Aug 09 18:00:45 2013 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Fri Aug 09 18:00:45 2013 -0700"
      },
      "message": "fix bugs found by pylint\n"
    },
    {
      "commit": "5542cf52a65b670aa6bfbf90cf5e27f72a92b3ce",
      "tree": "41f910ec7e6033d640f1d2a7f646bd5be5bdd3f8",
      "parents": [
        "7ecabd21e1787ba69b4455e7e06de5563b524c3f"
      ],
      "author": {
        "name": "sumithdev09",
        "email": "sumith.hy398@gmail.com",
        "time": "Fri Jul 12 14:56:28 2013 -0400"
      },
      "committer": {
        "name": "sumithdev09",
        "email": "sumith.hy398@gmail.com",
        "time": "Fri Jul 12 14:56:28 2013 -0400"
      },
      "message": "Update controller.py"
    },
    {
      "commit": "7ecabd21e1787ba69b4455e7e06de5563b524c3f",
      "tree": "63b1eafc635f5e54095872e0ca907237786a0a43",
      "parents": [
        "6d2e396f5561091c2ee34a903efab955dec0eeb9"
      ],
      "author": {
        "name": "sumithdev09",
        "email": "sumith.hy398@gmail.com",
        "time": "Fri Jul 12 11:10:53 2013 -0400"
      },
      "committer": {
        "name": "sumithdev09",
        "email": "sumith.hy398@gmail.com",
        "time": "Fri Jul 12 11:10:53 2013 -0400"
      },
      "message": "Update controller.py\n\nBugfix:We cannot poll the OFPT_HELLO message using the poll function if exp_msg\u003dNone."
    },
    {
      "commit": "7094ff189a698d3fba0807aaf4ccb58b14751e9f",
      "tree": "4af9c249ebd0361b9cdafab7ef5182b9d9b51ea7",
      "parents": [
        "90c961cc991ede8a34b1f54fe0d51616c5192a2a"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Tue May 07 14:57:53 2013 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Tue May 14 09:28:44 2013 -0700"
      },
      "message": "controller: log more usefully when checking message queue\n"
    },
    {
      "commit": "c4ab0beb2464abf5e29aa102c61ab0de257ed087",
      "tree": "949bec31dc8d7b2553bcf22ca392ca1290021470",
      "parents": [
        "377e74763eafedde3efaef92ffa4e954ee2e939c",
        "7071cf14dc17dd23214033349f8d08dfe15ca667"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Tue Apr 16 11:43:25 2013 -0700"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Tue Apr 16 11:43:25 2013 -0700"
      },
      "message": "Merge pull request #48 from floodlight/det-monitor-pkt-in\n\nTest to monitor and report packet-in rate.  Disabled by default as it is \"blocking\".  Note that this only supports a single controller (determined by the command line parameters)."
    },
    {
      "commit": "7071cf14dc17dd23214033349f8d08dfe15ca667",
      "tree": "bb507c73e53ac7974a46d90a3702ddb355f342e9",
      "parents": [
        "7e45412a921a3b7220b86d366048e27aeb395b62"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Tue Apr 16 11:02:13 2013 -0700"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Tue Apr 16 11:02:13 2013 -0700"
      },
      "message": "Minor updates for pkt in monitoring\n\nResponse to comment for rename of packet count\nClarified periodic_task name\nIndentation\n"
    },
    {
      "commit": "d929b8d132dd8ed000f9a6d331e39d25303310e6",
      "tree": "90194b8e5343ef7ee18984a9c89d6bd7bb893c4b",
      "parents": [
        "ea8c472f36be65f3a8f2d9a3f76c231e12524780"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Mon Apr 15 15:59:14 2013 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Mon Apr 15 15:59:14 2013 -0700"
      },
      "message": "controller: prevent switch from reconnecting\n\nIf a switch disconnects during a test we want to make sure we catch it.\n"
    },
    {
      "commit": "dd6b6ffabf26a9d5338c50093c30b89aae0f7edf",
      "tree": "61b7168a0cc43b87252a6c8d6d8d28fc95edd3fa",
      "parents": [
        "ea8c472f36be65f3a8f2d9a3f76c231e12524780"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Fri Apr 12 08:20:18 2013 -0700"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Fri Apr 12 08:20:18 2013 -0700"
      },
      "message": "Support counting pkt-in msgs in controller\n\nCount pkt-in messages as they are received\nAllow the message queue to be cleared with new clear_queue fn\nAlso small bug fix: deref null exp_msg\n"
    },
    {
      "commit": "1879dc74881a84e324aebfa5a6b33e8605e3ec18",
      "tree": "24bc003245743124713ccba053d46aac5c65151f",
      "parents": [
        "c7b85d2cdfade2a5b9af25fe4283a18a4de7e811"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Mon Mar 11 22:08:51 2013 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Tue Mar 12 11:04:30 2013 -0700"
      },
      "message": "loxi-prep: always handle missing entry in type map\n"
    },
    {
      "commit": "1622bbb4cab39b4d10f8a4c0c389ea08e1f46bb2",
      "tree": "17ae59eb625aa897f641a2719c5dbb23e7fb9129",
      "parents": [
        "f688351915a755359bde9dffc1e7ac5cb2d8e440"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Mon Mar 11 17:11:53 2013 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Tue Mar 12 11:04:30 2013 -0700"
      },
      "message": "loxi-prep: change parse_header to return a tuple\n"
    },
    {
      "commit": "f688351915a755359bde9dffc1e7ac5cb2d8e440",
      "tree": "1cb2047ad9a2656cbbcf206d60631a0752f27f51",
      "parents": [
        "06c17984b4144e9b2d9b0071380ae25fc8caa84d"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Mon Mar 11 17:00:09 2013 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Tue Mar 12 11:04:27 2013 -0700"
      },
      "message": "loxi-prep: move message parsing to ofp.message\n"
    },
    {
      "commit": "8fbfd66c4033bb81694a8d1b80a50f8125f53ae6",
      "tree": "c42575569e2481c4caed37d856b0368410cb6648",
      "parents": [
        "b73808cc3c603f1ff3cccf225c71ff2e76313308"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Mon Mar 11 15:30:44 2013 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Tue Mar 12 10:45:56 2013 -0700"
      },
      "message": "loxi-prep: default xid to None\n"
    },
    {
      "commit": "b73808cc3c603f1ff3cccf225c71ff2e76313308",
      "tree": "edf0dbed9a42596406cfe4b813d542b9faa21c39",
      "parents": [
        "7c7342aacc146b200e3c4def63c5280ed7adb4b9"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Mon Mar 11 15:22:23 2013 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Tue Mar 12 10:45:56 2013 -0700"
      },
      "message": "loxi-prep: move header fields into the message classes\n"
    },
    {
      "commit": "d7b0ffabfde4d7b10fc34d91b79b9fd9638c8760",
      "tree": "b3c25f1f914fca05f581636de7739dea995b759b",
      "parents": [
        "537247359caf0f7ad204d0fc1add4a48efe525a8"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Fri Mar 08 15:53:42 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Tue Mar 12 09:41:44 2013 -0700"
      },
      "message": "loxi-prep: remove uses of cstruct module\n\nThis module does not exist in PyLoxi.\n"
    },
    {
      "commit": "5d63b9c8bded2cfeb4b07c46e648c671cb683b1c",
      "tree": "072ea8b1751a43250ca1190bae3014322656efb4",
      "parents": [
        "e3a5972ae4dc86966f6ffce998cdd25ac02bfb02"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 14:12:37 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 14:12:37 2013 -0800"
      },
      "message": "controller: log xids and error messages\n"
    },
    {
      "commit": "9fd05683ca2baa9d04d4d3c1c563f5a7b45d5b1e",
      "tree": "995e00a335a8478742a211fb72cde04d1cd1d3be",
      "parents": [
        "af42815411a3b2f29c8a25c0ec7a8064cfc6fd1e"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jan 10 15:30:38 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 08:20:20 2013 -0800"
      },
      "message": "add --of-version option\n\nThis option is used to choose which OpenFlow protocol module is aliased to\n\"ofp\", which the controller and tests import. When we have an OpenFlow protocol\nmodule that works with all versions of OpenFlow we can remove this hack without\nchanging the command line interface or test API.\n"
    },
    {
      "commit": "c44b62489e4e54f3608e9a59217961e1ea77cf1b",
      "tree": "8b800d429ed2240536cac953813986d26590f4b2",
      "parents": [
        "78ef8b98ef2a87532c73644d62da804d7f1d5a1c"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jan 10 12:23:54 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 08:20:20 2013 -0800"
      },
      "message": "controller: fix version negotiation\n"
    },
    {
      "commit": "78ef8b98ef2a87532c73644d62da804d7f1d5a1c",
      "tree": "5c8fa5d06149750b1b3079310901e010e5e57290",
      "parents": [
        "c2f18764091fcdd2f4b80c9fe031d0ee40931592"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jan 10 12:19:23 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 08:20:20 2013 -0800"
      },
      "message": "use the generic name \"ofp\" to refer to the the OpenFLow protocol module\n\nThis makes it easier to switch out of10 for e.g. of12. This is a temporary\nsolution until we have a single protocol module that handles all versions of\nOpenFlow.\n"
    },
    {
      "commit": "ed1fa2d131e46967c2be6a811cefd00f69775e5a",
      "tree": "818a44fc1370b58ac52e9469fafd59500044e95f",
      "parents": [
        "93bed98736e86cc11e2769bc6dd345d8ae2872c7"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Tue Jan 08 13:23:37 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Tue Jan 08 13:23:37 2013 -0800"
      },
      "message": "parse: remove uses of from module import *\n\nSince there is now both an action class named \"vendor\" and a message class\nnamed \"vendor\" they clash when imported into the same namespace.\n"
    },
    {
      "commit": "cd97d3d7a4bef1346f8a57d1216b075e97ce019f",
      "tree": "dc776d3bb42cf071e9f8b7532d8540b29255960d",
      "parents": [
        "b2b401ef00e2dc2315e16f1299d2855103f581ac"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Jan 07 18:50:06 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Tue Jan 08 10:09:49 2013 -0800"
      },
      "message": "minimize use of \"from module import *\"\n\nThis statement was causing strange bugs because of namespace pollution. The\norder of imports mattered because later \"from module import *\" statements would\noverwrite modules imported earlier. Transitive imports also made it difficult\nto figure out where an identifier was being imported.\n\nThis statement is still allowed in test code since nothing else should be\nimporting it.\n"
    },
    {
      "commit": "6242d9f6474fa78b2d1c5db116831dc15ce00b6e",
      "tree": "e7ed7d1549020dea63fda35c63b832bb39b4c554",
      "parents": [
        "ea5060dff597e6e722ce49ec6f0116b6b7d5776d"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sun Jan 06 17:35:39 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sun Jan 06 17:35:39 2013 -0800"
      },
      "message": "move and check in OpenFlow protocol modules\n\nMove all the protocol code out of the oftest package and into a of10 package to\nprepare for supporting more OpenFlow versions.\n\nThe generated code is now checked-in to make it simpler to use OFTest.\n\nBackwards compatibility with out of tree tests is maintained by aliasing the\nold module names. The basic test module has been changed to use the new API.\n"
    },
    {
      "commit": "5c3151c308aec2178ec516ae074f07a4fb18a619",
      "tree": "d5236bb64ae0a77f1954779467683a0ecbd5198c",
      "parents": [
        "e30455b947669e3dd9adc9f2e591a0c5f3b97d7f"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jan 03 17:15:41 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jan 03 18:03:45 2013 -0800"
      },
      "message": "throw AssertionError if controller.message_send fails\n\nUnlike other types of exception an AssertionError will cause the test to \"fail\"\ninstead of \"error\". Using an exception instead of checking return values\nremoves a lot of boilerplate code that wasn\u0027t always present (or correct). It\nmay also help disabuse test writers of the dangerous notion that succeeding in\nwriting a message to the TCP socket means anything.\n"
    },
    {
      "commit": "f18980d722058180d7a38adb7cd2579448c6fcfd",
      "tree": "4b81edd5de5c61140954b8bfb21d9f1fef84f8d0",
      "parents": [
        "30ca70c643eefa1f287c96f7bca7b33285898ca3"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Dec 31 17:11:41 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Dec 31 17:16:11 2012 -0800"
      },
      "message": "controller: improve log message when sending OF msg\n"
    },
    {
      "commit": "376bb40e04193564a7e4e326be16ab6c09051f2f",
      "tree": "8207c96e7a9e4293fe063ea7645944bf8e6bd566",
      "parents": [
        "d5915041612530d62545303cad4a6f6e5cdb514a"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Dec 31 15:20:16 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Dec 31 15:20:16 2012 -0800"
      },
      "message": "controller: join controller thread in kill()\n"
    },
    {
      "commit": "207502ecd1656aacf3ade3697e5fc65de6e2f497",
      "tree": "7d8c218f23ca8d6f730aaf0aedf1efac30e644f5",
      "parents": [
        "7c64a42d8f4a658a424eb7273beabf66ecc70438"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Dec 31 14:29:12 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Dec 31 14:29:12 2012 -0800"
      },
      "message": "controller: move creation of listening connection to constructor\n\nDoing this synchronously results in better error messages.\n"
    },
    {
      "commit": "4dfd5e19c74d1a9591e88927e93a326818aa38b6",
      "tree": "4b672910b8538ccfd921cbd89d4e1f00c67c0ba3",
      "parents": [
        "4d46dbd5348cc2db996e8e3d521d0597f372eeb0"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 19:48:01 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 19:48:01 2012 -0800"
      },
      "message": "factor out EventDescriptor from Controller\n"
    },
    {
      "commit": "3279754f96efb78e32aa226543ff5f0df26c7089",
      "tree": "a9cd0310586fe0ca3df4064dfc6556c2929fc2f3",
      "parents": [
        "71d887d2e3836649b650939ee3c1e6e91cde16e2"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 17:46:05 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 17:46:05 2012 -0800"
      },
      "message": "controller: use a pipe to wake up event loop from a different thread\n"
    },
    {
      "commit": "82ef183784dfddd4fc790ea50fe7d04ea149d86f",
      "tree": "23e022c878017e08d3895c0e2e23de9e04db5bed",
      "parents": [
        "e912d03d5dd19039abe599af85feb03eb6ec68f2"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 17:04:35 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 17:04:35 2012 -0800"
      },
      "message": "disable Nagle\u0027s algorithm\n"
    },
    {
      "commit": "74be472440365351820efd3786f92f207f74e949",
      "tree": "487a00a10f3ca22b488e380f4d492952f258032e",
      "parents": [
        "9c93e670e07836d4e0e38eb4f47eafa6c55ec63e"
      ],
      "author": {
        "name": "Ken Chiang",
        "email": "ken.chiang@bigswitch.com",
        "time": "Fri Dec 21 13:07:03 2012 -0800"
      },
      "committer": {
        "name": "Ken Chiang",
        "email": "ken.chiang@bigswitch.com",
        "time": "Fri Dec 21 13:07:03 2012 -0800"
      },
      "message": "controller.py: clear pending packets on disconnect.\n\ncxn.py: store switch addr to detect when switch has disconnected and\nreconnected.\n"
    },
    {
      "commit": "69ca4d6f9345e031b701d0ea62e5bcfed66139d6",
      "tree": "f38bf5368e140026c0c1337723e58ea8d910eb91",
      "parents": [
        "afcf467ee2c362c8e7445d84a61467e191bf5ceb"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Thu Nov 15 11:50:22 2012 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Thu Nov 15 11:50:22 2012 -0800"
      },
      "message": "Support active connect, overwrite log\n\nAdded options:\n  --switch-ip   If set, actively connect to this switch on controller-port\n  --log-append  Append to existing log\n\nThe default log file generation behavior has changed.  By default, now\nover-write the existing log.  To have the old append behavior, use the\n--log-append option.\n\nActive switch connections have been tested, but not exhaustively.  It\nshold still be considered experimental.  The old behavior (listen for\nswitch connections) should be unchanged.\n"
    },
    {
      "commit": "7717399c71be9ef6d9f396c17e8191811baa1a28",
      "tree": "e9d64d753d9370bf224a937052e6843b78380ada",
      "parents": [
        "e53897c14357d7ad562ebfc75ff209f53306ff17"
      ],
      "author": {
        "name": "Ken Chiang",
        "email": "ken.chiang@bigswitch.com",
        "time": "Tue Oct 30 15:44:39 2012 -0700"
      },
      "committer": {
        "name": "Ken Chiang",
        "email": "ken.chiang@bigswitch.com",
        "time": "Tue Oct 30 15:44:39 2012 -0700"
      },
      "message": "Rework HandshakeAndKeepalive test to handle more than one controller.\nAllow controller.poll() to poll for OFPT_HELLO.\n"
    },
    {
      "commit": "e875baf604d374ef04a9a8388a8b7f2f556ef469",
      "tree": "7b06542a0120eae778d5939b5ec37fd87b242421",
      "parents": [
        "adc950f39bca913271eceb69e850f21488dd9b79",
        "e703c6801ddb686e042bc82589e1ae4a7a4b1a41"
      ],
      "author": {
        "name": "Ken Chiang",
        "email": "ken.chiang@bigswitch.com",
        "time": "Tue Oct 09 15:24:40 2012 -0700"
      },
      "committer": {
        "name": "Ken Chiang",
        "email": "ken.chiang@bigswitch.com",
        "time": "Tue Oct 09 15:24:40 2012 -0700"
      },
      "message": "Merge branch \u0027master\u0027 into kenc\n\nConflicts:\n\ttests/cxn.py - manually resolved\n"
    },
    {
      "commit": "1a8d5aab3d18952a4d03e166e1c9a39b64dbad5a",
      "tree": "4d8685c068f3d3a7f09ef6d3738b7272c8a9e802",
      "parents": [
        "51b3fe9fd9e06153990426b763da27586e0c4f17"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Oct 08 15:40:03 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Oct 08 15:45:51 2012 -0700"
      },
      "message": "ensure first message switch receieves is hello\n\nA test waiting in controller.connect() could wake up and send e.g. a\nfeatures_request message before the controller thread sends a hello message,\ncausing the switch to drop the connection.\n"
    },
    {
      "commit": "adc950f39bca913271eceb69e850f21488dd9b79",
      "tree": "318a2d4afb6ad12e6381013f5dd982552fea84e9",
      "parents": [
        "123928cd3c6a26ecbd852e2e01d6a5b921a5256a"
      ],
      "author": {
        "name": "Ken Chiang",
        "email": "ken.chiang@bigswitch.com",
        "time": "Fri Oct 05 13:50:03 2012 -0700"
      },
      "committer": {
        "name": "Ken Chiang",
        "email": "ken.chiang@bigswitch.com",
        "time": "Fri Oct 05 13:50:03 2012 -0700"
      },
      "message": "Add disconnect() and wait_disconnect() methods to controller.\nWhen current connection to the switch is disconnected,\nallow controller to continue listening without killing controller thread.\nRework cxn tests to use this new controller model.\n"
    },
    {
      "commit": "b4f8ecb9a45525aecd250592869e3ef2ed67067a",
      "tree": "616c3d439a839877b5792fe7a6c1d52802beabdd",
      "parents": [
        "bc3d2968465e5ab0ad27203e85b06ee6587be118"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Tue Sep 25 09:36:26 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Tue Sep 25 09:36:26 2012 -0700"
      },
      "message": "accept incoming connections even if ignoring them\n\nIf the connection isn\u0027t accepted then the listener socket will continue being\nreturned by select.\n"
    },
    {
      "commit": "9e55e282acfe725a663fca03771bcb496f0d401e",
      "tree": "fdfd1394d64ac3cf6620de2adeb87267583d9ff1",
      "parents": [
        "c7193a2c126a18d0c3821675fd3e6a921fd36fb8"
      ],
      "author": {
        "name": "Ed Swierk",
        "email": "eswierk@bigswitch.com",
        "time": "Wed Aug 22 06:57:28 2012 -0700"
      },
      "committer": {
        "name": "Ed Swierk",
        "email": "eswierk@bigswitch.com",
        "time": "Wed Aug 22 07:46:42 2012 -0700"
      },
      "message": "Change controller.message_send to use exceptions for exceptional conditions\ninstead of converting them to return codes and losing useful information in the\nprocess; fix a minor bug in controller.poll\n"
    },
    {
      "commit": "8806bc4712c5bee1eb48a6cb1d94380150c86935",
      "tree": "d7ce3e7185941cfb6b527bf1241f785b19c68b59",
      "parents": [
        "db9d866ddc23f7520f25485b98ab18dd40ac8bc1"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jul 26 19:18:37 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jul 26 19:18:37 2012 -0700"
      },
      "message": "standardize on -1 for default timeouts\n"
    },
    {
      "commit": "e1da7eaf40daddec475b57becd8c367a0b51a992",
      "tree": "89c607bf9582f5354f0fd1da609211b18b5e3420",
      "parents": [
        "b64ce3dc57d2adb8fe5df16683b1aadca5c29534"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jul 26 15:58:45 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jul 26 15:58:45 2012 -0700"
      },
      "message": "convert controller.py to use timed_wait\n"
    },
    {
      "commit": "b64ce3dc57d2adb8fe5df16683b1aadca5c29534",
      "tree": "4357840a680fa6f51c17d2f293e9c2bb4e7eca36",
      "parents": [
        "17cdb12b642280be8525186fb12d8fc7641a5fd9"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jul 26 15:37:57 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jul 26 15:37:57 2012 -0700"
      },
      "message": "factor out ofutils.timed_wait and simplify Controller.poll\n"
    },
    {
      "commit": "9aca199e38890652679287dc5b2ff93cfa2ac6a0",
      "tree": "fe7f1e6bda53e514f9743ef0e312dc018a3e94ab",
      "parents": [
        "ee3586c6de57b92debf64ca0726383cf1d93554b"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Jul 11 17:26:31 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jul 12 11:56:46 2012 -0700"
      },
      "message": "fix multithreading issues with xid_response\n"
    },
    {
      "commit": "ee3586c6de57b92debf64ca0726383cf1d93554b",
      "tree": "5a9bcb8c5e8f010dd2baa88b546a8a35a362bc83",
      "parents": [
        "c4f071b6570c3305007a0f83bf827709dc88ceb8"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Jul 11 17:26:02 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jul 12 11:47:01 2012 -0700"
      },
      "message": "Use the \"with\" statement to acquire a few locks\n\nThis ensures that the locks are released if an exception occurs.\n"
    },
    {
      "commit": "c4f071b6570c3305007a0f83bf827709dc88ceb8",
      "tree": "0f619d0cb7402213b7fff82afc5d60a2670690db",
      "parents": [
        "58cf05fd00d425329cb251267f668546535de397"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Jul 11 17:25:57 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jul 12 11:44:26 2012 -0700"
      },
      "message": "fix multithreading issues with packet queue\n\nThis change probably breaks some of the semantics of handling incoming openflow\nmessages.\n"
    },
    {
      "commit": "f8de518772c7622fffef1dee0381db5ce388475a",
      "tree": "93a8baf16b462ba75ca40fff2c0f129d30b36231",
      "parents": [
        "942f5302a764944e4f7a47cd794f45a2299aa6b8"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Thu Apr 12 22:38:41 2012 -0700"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Thu Apr 12 22:38:41 2012 -0700"
      },
      "message": "Support for filtering pkt ins, cleanup\n\nReplaced barrier_to with transact_to.  Allow filtering of packet-in\nmessages which is disabled by default.  A threshold is set and,\nwhen enabled, if N packet ins are received without other messages\nintervening (and without packet-in being expected) subsequent\npacket ins are dropped.\n\nWith packet storms on OVS, this has detected some overrun errors\non buffering and framing gets messed up.\n\nCleaned up some termination code; _socket_ready_handle now\nreturns an error code rather than True/False.\n"
    },
    {
      "commit": "0fc08bddeee38f13c2f9125b78fab44dff803d0d",
      "tree": "57b5beccbd6bff294cb87eed744a421194da2886",
      "parents": [
        "488fbc52b4986db4d69f881209391f2321393af2"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Mon Apr 09 16:56:18 2012 -0700"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Mon Apr 09 16:56:18 2012 -0700"
      },
      "message": "Add default timeout for do_barrier\n\nAnd check the result do_barrier in all calls.\n"
    },
    {
      "commit": "c00c7473b53139fd6a459756ac0e9a58952c86b0",
      "tree": "968f259fe8432904878844a75eb24a7a46e0b58c",
      "parents": [
        "07d99e69d30bcbfe54bf8911c2efdf09cceb9848"
      ],
      "author": {
        "name": "Howard Persh",
        "email": "howard.persh@bigswitch.com",
        "time": "Mon Apr 09 15:49:07 2012 -0700"
      },
      "committer": {
        "name": "Howard Persh",
        "email": "howard.persh@bigswitch.com",
        "time": "Mon Apr 09 15:49:07 2012 -0700"
      },
      "message": "Copied over from master branch\n"
    },
    {
      "commit": "2843d2b26c03e27ef531be64e0ed0842014f17b1",
      "tree": "76fb7c2729187274b2da2eb13e08d025488fb62f",
      "parents": [
        "f6af1678f6ad603c4ec8f0c5d52ba65ff950822d"
      ],
      "author": {
        "name": "root",
        "email": "root@Ubuntu-vm-1.(none)",
        "time": "Fri Apr 06 10:27:46 2012 -0700"
      },
      "committer": {
        "name": "root",
        "email": "root@Ubuntu-vm-1.(none)",
        "time": "Fri Apr 06 10:27:46 2012 -0700"
      },
      "message": "Goofed last minute change about action comparison for modifies, modify does not change timeouts -- fixed\n"
    },
    {
      "commit": "0214da2d5b72a833e31266b8667b080bd48b6125",
      "tree": "326fd7de4df8a599c211812b3e1e7768d4042099",
      "parents": [
        "4e2003090e3f5c55e4413514a15f8c67d8447add"
      ],
      "author": {
        "name": "Ed Swierk",
        "email": "eswierk@bigswitch.com",
        "time": "Mon Mar 19 14:58:02 2012 -0700"
      },
      "committer": {
        "name": "Ed Swierk",
        "email": "eswierk@bigswitch.com",
        "time": "Tue Mar 20 11:13:45 2012 -0700"
      },
      "message": "Once a switch is connected, ignore further connection attempts rather\nthan bailing out (this situation was hard to reproduce but seemed\ncorrelated with system load and how frequently the switch tries to\nestablish a controller connection...)\n"
    },
    {
      "commit": "4306d3e58d6534ab85410df68fd87eb9c5462169",
      "tree": "a38e0df312eb9401bd7a432948a5c857b8fdb4be",
      "parents": [
        "677c0b76152c167ff95bb8f23db571d45116478b"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Wed Sep 07 09:42:26 2011 -0700"
      },
      "committer": {
        "name": "Ed Swierk",
        "email": "eswierk@bigswitch.com",
        "time": "Tue Mar 20 11:13:44 2012 -0700"
      },
      "message": "Update packet offset before continue stmts\n"
    },
    {
      "commit": "836e5bd85531c1bf7ba7e7a73c7358ad732b7d1c",
      "tree": "ac99fc2cda375471ba181ca5f5390ec178402bbe",
      "parents": [
        "16eff42a95c55079d608512667c9b5d3091ca8d6"
      ],
      "author": {
        "name": "Ed Swierk",
        "email": "eswierk@bigswitch.com",
        "time": "Tue Mar 20 11:08:53 2012 -0700"
      },
      "committer": {
        "name": "Ed Swierk",
        "email": "eswierk@bigswitch.com",
        "time": "Tue Mar 20 11:13:44 2012 -0700"
      },
      "message": "Fix check for incomplete packet\n"
    },
    {
      "commit": "e3e452a3e5b2d6d288a6efeac52911f54175c6fa",
      "tree": "c2f108b5bd08b759a8fd6de0b423b9e1c58c3b68",
      "parents": [
        "3abf347f0a203cdc81ec682555c394d11b746e51"
      ],
      "author": {
        "name": "Rob Sherwood",
        "email": "rob.sherwood@bigswitch.com",
        "time": "Tue Mar 06 09:24:26 2012 -0800"
      },
      "committer": {
        "name": "Rob Sherwood",
        "email": "rob.sherwood@bigswitch.com",
        "time": "Tue Mar 06 09:24:26 2012 -0800"
      },
      "message": "Bugfix to controller I/O parsing\n\noftest incorrectly assumed that OF messages would\nnot span the data from a read(), and this is not\ntrue always.\n"
    },
    {
      "commit": "7455ed25ff380f32b8c0552c9fc012076757c2c6",
      "tree": "6184057bf7a1896c6b3371d722ac7bb0704e00ee",
      "parents": [
        "ba3745c94f562b2f89c6b7a6df7a9a7e945f4e4e"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Wed Oct 27 10:51:12 2010 -0700"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Wed Oct 27 10:51:12 2010 -0700"
      },
      "message": "Update buffer consumption for echo response\n"
    },
    {
      "commit": "741b118d4b68515796cd721c3459ed03ba274d24",
      "tree": "95ba41525d7f2cd8e67319e1da4239efaf141a87",
      "parents": [
        "6d4670680191633feca5a2eb638177c37d39a716"
      ],
      "author": {
        "name": "Glen Gibb",
        "email": "grg@stanford.edu",
        "time": "Thu Jul 08 16:43:58 2010 -0700"
      },
      "committer": {
        "name": "Glen Gibb",
        "email": "grg@stanford.edu",
        "time": "Thu Jul 08 16:43:58 2010 -0700"
      },
      "message": "Increase receive size for received OF msgs\n\nIt\u0027s possible for an OpenFlow instance to generate very large response\npackets if oftest and the device under test are communicating via the\nloopback interface (or using jumbo Ethernet frames). Increase the\nreceive size to prevent partial packets from being retrieved.\n"
    },
    {
      "commit": "6d4670680191633feca5a2eb638177c37d39a716",
      "tree": "900dee539387d5837ead34aed3f4dd953a40521c",
      "parents": [
        "39bf691b2a0427ccefeac3d2b964898e71f67536"
      ],
      "author": {
        "name": "Glen Gibb",
        "email": "grg@stanford.edu",
        "time": "Thu Jul 08 16:15:08 2010 -0700"
      },
      "committer": {
        "name": "Glen Gibb",
        "email": "grg@stanford.edu",
        "time": "Thu Jul 08 16:15:08 2010 -0700"
      },
      "message": "Support multiple OF msgs in a single pkt\n\nA single TCP packet may contain multiple OpenFlow messages. Update\n_pkt_handle to iterate through the set of OF msgs in a single packet.\n"
    },
    {
      "commit": "09c2c5986b137841adb59d25e26bf2a3dd29c549",
      "tree": "cf1741ac859241a4289da1d07cb3b0192278d31a",
      "parents": [
        "4aa1312087a5285f71f791b4c555a0fc62b31912"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Thu May 13 14:21:52 2010 -0700"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Thu May 13 14:21:52 2010 -0700"
      },
      "message": "Fix debug output for no resp on XID transaction\n"
    },
    {
      "commit": "b2d1d044758cc66949665215ce79116bbfbe8377",
      "tree": "76e4da76705485ef079e62453ba93d907a2ee8a6",
      "parents": [
        "ef701f4cf33eb44522c5d0e891940f360fd70de9"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Fri May 07 09:23:11 2010 -0700"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Fri May 07 09:23:11 2010 -0700"
      },
      "message": "Check for OpenFlow version compatibility\n"
    },
    {
      "commit": "11c26e7991de1a351e56a049fbca261a26493194",
      "tree": "894659869db051b45a7683c430a5299752ab99da",
      "parents": [
        "d12b661c13b90813e73aeb402d240b04b2d84dec"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Sun Mar 07 22:03:57 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Sun Mar 07 22:03:57 2010 -0800"
      },
      "message": "indentation, spaces\n"
    },
    {
      "commit": "d12b661c13b90813e73aeb402d240b04b2d84dec",
      "tree": "7941c4c3c9369e2dfa2b8bd3eff5cced737a20b3",
      "parents": [
        "1a88c12344b8e76a1a7a620809bcc61abafb3db6"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Sun Mar 07 22:00:46 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Sun Mar 07 22:00:46 2010 -0800"
      },
      "message": "Fixed race condition\n\nIt\u0027s possible that a packet is being processed when\npoll() is called, but that it has not been enqueued yet.\nIf poll gets control, it checks the queue and then sleeps\nif it can\u0027t find it\u0027s packet.  But if the check to notify\npoll has already taken place, the intended packet is\nenqueued after poll has checked for it.  Fix this by\nextending the period that the packet processing routine\nholds the mutex.\n"
    },
    {
      "commit": "4837010d858480e186a9aeb7b28dc2555db307d3",
      "tree": "57c9b4cb88846f288949fa0b53b66619f5b0352e",
      "parents": [
        "ea8ad807a0eef55315a251e055405ecdcc4fec41"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Wed Mar 03 15:17:33 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Wed Mar 03 15:17:33 2010 -0800"
      },
      "message": "Major overhaul of oftest command interface\n\nAdded tests/oft as top level executable\n\nSupport command line options for many config params\n\nUse logging module for output\n\nGot rid of oft_config.py; consolidate configuration in\noft (top level script) and pass around as a dictionary\n\nAdd oft_assert.py (the one useful piece of oft_config that\nremained).\n"
    },
    {
      "commit": "90576bddc22855f816bace1b8afb3a13913259b5",
      "tree": "c9c318a8d3e3d87f7abc5372e0ccefb755d564a4",
      "parents": [
        "4d065977ffd792f847b257347a26e8683ddc26b2"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Fri Feb 19 10:59:02 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Fri Feb 19 10:59:02 2010 -0800"
      },
      "message": "Comments and todo additions\n"
    },
    {
      "commit": "e226eb1a8a8257d43dd8bf7d5a619f8bb12c18a6",
      "tree": "fa099163d1eb7bff8b79e58c0fb73f2f7e8f75cf",
      "parents": [
        "4557d783e2a5983c17c857d185fc102ed58c313b"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Thu Feb 18 23:06:30 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Thu Feb 18 23:06:30 2010 -0800"
      },
      "message": "Mostly polling and timeout support\n\nSupport poll timeouts for controller messages\nSupport poll and timeouts for dataplane messages\nChanged name of dataplane pkt get to \u0027poll\u0027\nSix basic test cases now passing on LB4G\nAdded test-framework assertion\nAdded additional files to lint checking\n"
    },
    {
      "commit": "710438c723e18e9e0e2d2ef070f158ef7d24950a",
      "tree": "bc605e46253f8163a8c22613ce3b781bd0789c69",
      "parents": [
        "a92e75bcf162b6e998daa2ca7ffce2069dce9736"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Thu Feb 18 15:16:07 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Thu Feb 18 15:16:07 2010 -0800"
      },
      "message": "Mostly changes to socket deployment\n\nUse select for handling sockets; hopefully better cleanup approach\n\nAdded connection semaphore for controller\nSupport message objects as arguments to controller.message_send\nSupport initial hello from controller when connected to switch\n"
    },
    {
      "commit": "1b3f6906767c2c169b00b91312d8ddb71c72e59d",
      "tree": "205811371728a4429ab283616e7e82a55a296d94",
      "parents": [
        "dba4c34563f848906b1a5a63df1dd9ebb621b1ef"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Mon Feb 15 14:14:19 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Mon Feb 15 14:14:19 2010 -0800"
      },
      "message": "Lots of reorg and wrestling with sockets\n"
    },
    {
      "commit": "d7e2dbedd24da852edb42a68ba315da719db553e",
      "tree": "57ad07d074ee1cfdfcf7a7eaa780936a4fd686ac",
      "parents": [
        "ec857daa57c1f6cd6e9225b9a530560e2a6d9fd6"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Sat Feb 13 21:51:15 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Sat Feb 13 21:51:15 2010 -0800"
      },
      "message": "Moved core code up to oftest directory\n"
    },
    {
      "commit": "ec857daa57c1f6cd6e9225b9a530560e2a6d9fd6",
      "tree": "29632d9a7a800c96d95c555a6fb05a0214fbf9b4",
      "parents": [
        "3087a4632f30ba688dc50e4868d384dfa38bbf89"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Sat Feb 13 21:49:32 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Sat Feb 13 21:49:32 2010 -0800"
      },
      "message": "Moved code up one directory\n"
    },
    {
      "commit": "21c75c7fc01523e5e3283444a25d8bad17cc9df4",
      "tree": "656fd8a3d1b11c4e5499da05eec75588d7f20b39",
      "parents": [
        "9be11bc0b4979c17970e5cc8792680cf3434f5dc"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Fri Feb 12 22:59:24 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Fri Feb 12 22:59:24 2010 -0800"
      },
      "message": "Major changes\n\nAdded threading. Added queuing of received messages\nChanged function prototypes.  Debug counters.\n"
    },
    {
      "commit": "e37999f12704c95fe06a225e9bbda0a58da7acb8",
      "tree": "7be723e6697ace24c89d6d9437fde96ea1170759",
      "parents": [
        "b9cb548960025dab688f754d61d9479faa8b971b"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Tue Feb 09 15:27:12 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Tue Feb 09 15:27:12 2010 -0800"
      },
      "message": "Added netutils; update for changed paths\n"
    },
    {
      "commit": "34089522e7b488249bd9de2944d7199975655e8e",
      "tree": "91175e34189784cea14959fbaba99a1310a16215",
      "parents": [
        "10fe5c2c6a97bdd2b44331199a40cd5e03e7f42f"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Sun Feb 07 23:07:41 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Sun Feb 07 23:07:41 2010 -0800"
      },
      "message": "Added controller, dataplane and configuration files\n"
    }
  ]
}
