)]}'
{
  "log": [
    {
      "commit": "537247359caf0f7ad204d0fc1add4a48efe525a8",
      "tree": "bddef1bf755394be5987c8c285b3399a9fb034cf",
      "parents": [
        "53b9681ed6299a0da9ea4e2a99f46006c798f11b"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Fri Mar 08 23:54:02 2013 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Fri Mar 08 23:54:02 2013 -0800"
      },
      "message": "Qualify sleep calls with time\n"
    },
    {
      "commit": "53b9681ed6299a0da9ea4e2a99f46006c798f11b",
      "tree": "8643d7af09572557afd05ff15f8ae78d18848bdc",
      "parents": [
        "6a3349220285c09ae642b0a745f1f3df56f89af8"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Thu Mar 07 16:54:50 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Thu Mar 07 16:54:50 2013 -0800"
      },
      "message": "testutils: add 10% fuzz to byte counter matching\n\nSome switches include the 4-byte Ethernet CRC in their counters. Since the spec\nis ambiguous here we allow this and similar behavior by allowing the byte\ncounters to increment up to 10% more than we\u0027d usually expect.\n"
    },
    {
      "commit": "6a3349220285c09ae642b0a745f1f3df56f89af8",
      "tree": "fbf4c304800e63044c0971210d4b10b18f18b518",
      "parents": [
        "968b61972f18bc2813558cd1373cc3c6fdc19709"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Thu Mar 07 16:14:52 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Thu Mar 07 16:52:34 2013 -0800"
      },
      "message": "refactor verify_queuestats and move to testutils\n"
    },
    {
      "commit": "968b61972f18bc2813558cd1373cc3c6fdc19709",
      "tree": "6a1dfdd9572c4350dea5f9e95590aa4b945b43ff",
      "parents": [
        "ae3428c00817b638d0b2595872676e6e7f29c690"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Thu Mar 07 15:34:43 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Thu Mar 07 16:52:33 2013 -0800"
      },
      "message": "refactor verify_portstats and move to testutils\n"
    },
    {
      "commit": "ae3428c00817b638d0b2595872676e6e7f29c690",
      "tree": "ebb83e87d8ba9618c3b5347fd6b582ebb7dac516",
      "parents": [
        "34593fa8f4f0234f7f2e073de1079ead09b4053f"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Thu Mar 07 14:37:42 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rlane@bigswitch.com",
        "time": "Thu Mar 07 16:35:25 2013 -0800"
      },
      "message": "refactor verify_flowstats and move to testutils\n\nThis needs to be centralized for later byte counter fuzzing changes.\n"
    },
    {
      "commit": "2940fdd2a83a02b4fd3e79ff4cd6b3e21bb0dacd",
      "tree": "44ed7a1bf636443056107056be3ae72f172c949c",
      "parents": [
        "9cf018c6557fded5602845ff106b4c2ad5a822c7"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Wed Feb 06 15:01:35 2013 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Wed Feb 06 15:01:35 2013 -0800"
      },
      "message": "Fix skip report config key error\n"
    },
    {
      "commit": "c7562b123fc44e78a55166ed08c7743063328f42",
      "tree": "185d83d89a7e6a8be7a0fa6f8151c3feb6bd10a4",
      "parents": [
        "857fb606e3173b528f518740e7f2ac073e5789a0"
      ],
      "author": {
        "name": "Shudong Zhou",
        "email": "shudongzhou@gmail.com",
        "time": "Wed Feb 06 01:12:18 2013 -0800"
      },
      "committer": {
        "name": "Shudong Zhou",
        "email": "shudongzhou@gmail.com",
        "time": "Wed Feb 06 01:12:18 2013 -0800"
      },
      "message": "Add simple_arp_packet\n"
    },
    {
      "commit": "3c26683d57deed514e64d945c881221486d6cde5",
      "tree": "9a47e523747ac902fca41040535ebf104435d441",
      "parents": [
        "dacbe738d5bb92d0e8e3d5733edc2c96cf7edd59"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Tue Jan 29 18:29:15 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Tue Jan 29 18:29:15 2013 -0800"
      },
      "message": "testutils: fix wording in receive_pkt_check\n"
    },
    {
      "commit": "9cc93345f9948ebb54e28e7333f406d82b1cf3b5",
      "tree": "c6adabf0c0b29a0ead21e2c630b1eed61a1af97c",
      "parents": [
        "bde05edf0a77d9c1a0fd0ad9375b2b6f88918816"
      ],
      "author": {
        "name": "Gregor Maier",
        "email": "gregor.maier@bigswitch.com",
        "time": "Tue Jan 29 16:55:28 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Tue Jan 29 16:55:28 2013 -0800"
      },
      "message": "testutils: add ip_ttl option to simple_*_packet\n"
    },
    {
      "commit": "fdedc07bbf8f942833acb722e8c206131dec627e",
      "tree": "1b91b57585ad88bc590140d085030956ef2ffc13",
      "parents": [
        "f16b557da3163a0c3d54b2da27596d0d8f67b0c5"
      ],
      "author": {
        "name": "ederlf",
        "email": "ederlf@cpqd.com.br",
        "time": "Fri Jan 18 09:32:00 2013 -0200"
      },
      "committer": {
        "name": "ederlf",
        "email": "ederlf@cpqd.com.br",
        "time": "Fri Jan 18 09:32:00 2013 -0200"
      },
      "message": "This commit has some improvements for the code related to the OpenFlow 1.2\nThe changes are:\n\n    - On match unpack, insert the proper match tlv object. (e.g, if the oxm field is\nan inport, insert and inport object).\n    - Add a compare method to oxm_tlvs and match_list, because there was not how to test\nif the match in messages like flow_stats or flow_removed were correctly sent by the switch.\n    - Improvements to the print format of oxm_tlvs.\n\nAlso, there is a minor fix for the groups test.\n"
    },
    {
      "commit": "7744e11daf890cbb0b815e51ce4781de78624c51",
      "tree": "8bdb5b76058cc53be78eac7f560b63dfccf62203",
      "parents": [
        "5a9a192ab77c53024bfd2f9864488906c093a7d3"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 17:23:57 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 17:23:57 2013 -0800"
      },
      "message": "testutils: define __all__ to limit the variables imported by tests\n"
    },
    {
      "commit": "5a9a192ab77c53024bfd2f9864488906c093a7d3",
      "tree": "0a47fbdd7bc1caf4152b8bf6b6d7ad7e1fa3ee5c",
      "parents": [
        "5d63b9c8bded2cfeb4b07c46e648c671cb683b1c"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 14:29:30 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 14:29:30 2013 -0800"
      },
      "message": "add version decorator\n\nAlso adds the TableModConfig test to the main basic test module, using the new\ndecorator.\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": "e3a5972ae4dc86966f6ffce998cdd25ac02bfb02",
      "tree": "7722d40dace1507cc5af3a50ec6c3c2f963e73f0",
      "parents": [
        "5de2d94348b08b05f3ea510cc73b97886700bc89"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 12:50:25 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 12:50:25 2013 -0800"
      },
      "message": "of12: support actions keyword argument in packet_out message\n"
    },
    {
      "commit": "5de2d94348b08b05f3ea510cc73b97886700bc89",
      "tree": "5cd18b01c8ec044fb22959b473b49f8517264979",
      "parents": [
        "aecd7163f3c230f788a8df53d91d997450566ec4"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 11:49:36 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 11:49:36 2013 -0800"
      },
      "message": "of12: add keyword arguments to action and message classes\n"
    },
    {
      "commit": "aecd7163f3c230f788a8df53d91d997450566ec4",
      "tree": "c8d4cbd6b9832b8fb951735f9806cb61a4492f79",
      "parents": [
        "63393495124c77d79b2319d96550a8bc3ab6e35b"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 11:33:00 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 11:33:00 2013 -0800"
      },
      "message": "of10: simplify importing\n"
    },
    {
      "commit": "63393495124c77d79b2319d96550a8bc3ab6e35b",
      "tree": "8e0e80d75de6925e5d081544bb654a48d30f093d",
      "parents": [
        "2fe6beac0c69eb9108be08112b1e9d727ff11d4c"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 09:21:12 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 09:24:31 2013 -0800"
      },
      "message": "of12: remove redundant action_ prefix from action classes\n"
    },
    {
      "commit": "dc04c91a4c3f9c170688a6d8cffda254ff2426c5",
      "tree": "781f35473fd033fc8b4b4c2c35ace24656f1a9ad",
      "parents": [
        "8f2861eb5c879d7761d458204c9ad59e4fe2e576"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 09:13:37 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 09:13:37 2013 -0800"
      },
      "message": "of12: fix bug in packet_to_flow_match\n"
    },
    {
      "commit": "8f2861eb5c879d7761d458204c9ad59e4fe2e576",
      "tree": "8bfa3cbb8f5bb2847cda64044b347ef441952840",
      "parents": [
        "ea8732650f81771e585f7405df46b6a08237ee03"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 09:13:20 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 09:13:20 2013 -0800"
      },
      "message": "import scapy.contrib.mpls for ease of installation\n"
    },
    {
      "commit": "02eb6b0d18297b6fc371d035110dc99ee9b2a5a3",
      "tree": "2216043104e9de51f60eed0a612fae8f207aca6f",
      "parents": [
        "f9aa5022c4707485455a9476912ea13e20e6baac"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 08:08:37 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 08:20:20 2013 -0800"
      },
      "message": "of12: simplify importing\n"
    },
    {
      "commit": "f9aa5022c4707485455a9476912ea13e20e6baac",
      "tree": "87c7fd3c19293d2f1d8c03345f61e7430889091c",
      "parents": [
        "629393f7b71a12026e5d719f2551cafe264ccd52"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jan 10 16:36:15 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 08:20:20 2013 -0800"
      },
      "message": "oft12 testutils: remove uses of parent.logger\n"
    },
    {
      "commit": "629393f7b71a12026e5d719f2551cafe264ccd52",
      "tree": "421463e8f2ea2336fe088e94af2e6748620726a1",
      "parents": [
        "9fd05683ca2baa9d04d4d3c1c563f5a7b45d5b1e"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jan 10 15:37:33 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 08:20:20 2013 -0800"
      },
      "message": "import OpenFlow 1.2 protocol module and basic test cases from CPqD/oftest12\n\nFor now these tests will live in a separate directory. The goal is to merge\nthem where possible but this has to wait for an OpenFlow protocol module that\nsupports all versions of OpenFlow.\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": "af42815411a3b2f29c8a25c0ec7a8064cfc6fd1e",
      "tree": "1cad6f7b73c070a750582456e60f0f2a05c425bb",
      "parents": [
        "c44b62489e4e54f3608e9a59217961e1ea77cf1b"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jan 10 12:24:44 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 11 08:20:20 2013 -0800"
      },
      "message": "base_tests: only use supported_actions field for OF 1.0\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": "38eea081bae71bacae7336cd459dc570fd1bfdc5",
      "tree": "02bf0a2d11f4e1e3f86398de88c7a23de3c68fa7",
      "parents": [
        "cfdcbd34e4428108dd1e9cd04306fc2416ee8361"
      ],
      "author": {
        "name": "Ed Swierk",
        "email": "eswierk@bigswitch.com",
        "time": "Wed Jan 02 19:46:20 2013 -0800"
      },
      "committer": {
        "name": "Ed Swierk",
        "email": "eswierk@bigswitch.com",
        "time": "Mon Jan 07 15:31:58 2013 -0800"
      },
      "message": "Allow skipping testing of packet_out actions\nsince some switches don\u0027t support them\n"
    },
    {
      "commit": "8d84ce08af73ae7f514bfdeccc04f23f7d3ea672",
      "tree": "20f01ce6376f1d471d37dfffce8d470200960433",
      "parents": [
        "948f0301255759957e148a5a99aa3844c644c99c"
      ],
      "author": {
        "name": "Ed Swierk",
        "email": "eswierk@bigswitch.com",
        "time": "Thu Dec 27 15:36:48 2012 -0800"
      },
      "committer": {
        "name": "Ed Swierk",
        "email": "eswierk@bigswitch.com",
        "time": "Mon Jan 07 15:30:34 2013 -0800"
      },
      "message": "Send port_mod message even if features_reply contains no ports\nsince basic.PortConfigModErr deliberately uses a bogus port number anyway\n"
    },
    {
      "commit": "5ec97b8249e8b7c97c2af2bcb9c9ae60255fe07e",
      "tree": "ed1f6ac1b96affd96d11829ec5b66edb49f874c8",
      "parents": [
        "6242d9f6474fa78b2d1c5db116831dc15ce00b6e"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sun Jan 06 18:04:25 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sun Jan 06 18:04:25 2013 -0800"
      },
      "message": "copy in of11 package\n\nThese modules were copied from the oft-1.1 branch.\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": "95f078b7d0dcc168c9e92f037812d3b3075ef0f8",
      "tree": "ddc19940a0e43bd4523f4da94e34c8491996c27d",
      "parents": [
        "1dfd9f11bd2d7f83e1adbe434f2b131f829774fd"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sun Jan 06 13:24:58 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sun Jan 06 13:55:27 2013 -0800"
      },
      "message": "oft: improve help text\n"
    },
    {
      "commit": "adf64b10a5f5f74c159c99c3d4eac1c5c9d89a37",
      "tree": "2605dc0c91ad8336575880ccda1f6fbee7c60c5a",
      "parents": [
        "9527101cbf353f23f6fc616077ca1fae4746992d",
        "37f4211a4e12181744f0236f65e9050967eee782"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 04 15:32:01 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 04 15:32:01 2013 -0800"
      },
      "message": "Merge branch \u0027annotations\u0027\n\nConflicts:\n\toft\n"
    },
    {
      "commit": "72a0cfed2fe38ed1c1e20805598fb893673b8b5b",
      "tree": "70b22bd4836abe4d2a27d603c3fdd2cd54863773",
      "parents": [
        "c52a1c46dac37c3d1d4ad6672e33abe635982bd1"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 04 14:37:53 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Jan 04 15:08:58 2013 -0800"
      },
      "message": "action_list: support setting actions in constructor\n"
    },
    {
      "commit": "308d976197427f3ccc2e0b3c2500d4f92b1010fc",
      "tree": "2c3bf2dd6a882f7cb9a36fa5d09f9bb02460052c",
      "parents": [
        "3a261d5f415f91a06afe06437b66ed84ff266571"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jan 03 17:47:49 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jan 03 18:03:45 2013 -0800"
      },
      "message": "remove unused oft_assert module\n"
    },
    {
      "commit": "3a261d5f415f91a06afe06437b66ed84ff266571",
      "tree": "adedcf0c7e809f7d3f69e56ef966e4704e1b65bd",
      "parents": [
        "32bf948a5f640a07c89926fb10ebe4b0d9cb01da"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jan 03 17:45:08 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jan 03 18:03:45 2013 -0800"
      },
      "message": "raise an AssertionError if do_barrier fails\n\nThis removes a lot of boilerplate code.\n"
    },
    {
      "commit": "32bf948a5f640a07c89926fb10ebe4b0d9cb01da",
      "tree": "2d0253fbc801f82658c8a34cbb2961fecb314947",
      "parents": [
        "5c3151c308aec2178ec516ae074f07a4fb18a619"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jan 03 17:26:30 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jan 03 18:03:45 2013 -0800"
      },
      "message": "remove assertions on the return value of delete_all_flows\n\nThis function can no longer fail.\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": "e30455b947669e3dd9adc9f2e591a0c5f3b97d7f",
      "tree": "e1b5155c05c4e978c78b8b51297e00ba8429b478",
      "parents": [
        "80efd65292c3d4f4fb81fb0c4c0bc5b8724b86e7"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jan 03 16:24:44 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jan 03 18:03:45 2013 -0800"
      },
      "message": "action_list: throw exception if value is not an action\n\nThis is a programmer error, not a switch issue.\n"
    },
    {
      "commit": "97e9965c918bcf05f563d9977b6cf9f28e6044d3",
      "tree": "b8d27b2b87f940a9f1b9997607222d826d8a66e8",
      "parents": [
        "c76b09a91b9085fc905b44d4b72a119a06febb7f"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Jan 02 17:23:20 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Jan 02 17:23:20 2013 -0800"
      },
      "message": "add group decorator and smoke test group\n\nThe smoke group is intended to be very fast while covering most important\nfeatures.\n"
    },
    {
      "commit": "cc45b8ed30ae043f5883ad7f9fb5fbaffc328940",
      "tree": "21eed19ad40782544b383b37004c58afc8ffe22a",
      "parents": [
        "0a4f6377b4bbd222e442f17a8429064bccecea01"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Jan 02 15:55:02 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Jan 02 15:55:02 2013 -0800"
      },
      "message": "rewrite test spec code in terms of groups\n"
    },
    {
      "commit": "0a4f6377b4bbd222e442f17a8429064bccecea01",
      "tree": "9cb96f0c71ef4806f7ffb4e119486257840bf35e",
      "parents": [
        "0f5b9c7830726eab86adb4f977dcf3610e0a44c3"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Jan 02 14:40:22 2013 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Jan 02 14:40:22 2013 -0800"
      },
      "message": "use class decorators to mark tests that shouldn\u0027t be run by default\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": "d5915041612530d62545303cad4a6f6e5cdb514a",
      "tree": "79c9e0bae7a0c16df64ac5b92f5aac9f0fe5ae38",
      "parents": [
        "207502ecd1656aacf3ade3697e5fc65de6e2f497"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Dec 31 14:58:35 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Dec 31 15:00:23 2012 -0800"
      },
      "message": "base_tests: cleanup controller if setup fails\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": "7c64a42d8f4a658a424eb7273beabf66ecc70438",
      "tree": "bf152432c9454d1f5536572d1344b946e750754b",
      "parents": [
        "d9ef7c3357e6d746053d19f6d381a7a9933f552c"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Dec 31 13:46:34 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Dec 31 13:46:34 2012 -0800"
      },
      "message": "base_tests: remove unused clean_shutdown field\n"
    },
    {
      "commit": "2c7812ce1e1d869eb3dfa0e59bf96b386d95c0f1",
      "tree": "68654d4d40452b9aa2137047180ce496eab52998",
      "parents": [
        "e1b8da9513d907758fef264839c56fab09761c95"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Dec 27 17:52:23 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Dec 27 17:52:23 2012 -0800"
      },
      "message": "use a single dataplane instance for all tests\n\nCreating and destroying dataplane instances was taking about 1/3 of the total\nruntime.\n"
    },
    {
      "commit": "e1b8da9513d907758fef264839c56fab09761c95",
      "tree": "49090625972a5a9e876130f1f65efedbc32a66de",
      "parents": [
        "fb7183008e8fb5a15572cb2b33a08d1fbf1e9bb9"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Dec 26 22:47:13 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Dec 26 22:52:50 2012 -0800"
      },
      "message": "dataplane: single-threaded rewrite\n\nThere\u0027s now just one thread for the dataplane instead of one per port. This\ngreatly reduces the amount of code needed for each port implementation.\n"
    },
    {
      "commit": "fb7183008e8fb5a15572cb2b33a08d1fbf1e9bb9",
      "tree": "43810e1920e5f5a25c90d6955b4c39ea1835ef30",
      "parents": [
        "e7b0ecb155278f0c0a21ae6299baaa516a5140b1"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Dec 26 21:02:31 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Dec 26 21:02:31 2012 -0800"
      },
      "message": "DataPlane: cleanup and remove dead code\n"
    },
    {
      "commit": "e7b0ecb155278f0c0a21ae6299baaa516a5140b1",
      "tree": "cae51d2fd83e4e08137c8e8959dfaae5eaf32af7",
      "parents": [
        "2e37ec25b27ea3474d2a5adf0dd3adf422ad2585"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Dec 26 10:01:01 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Dec 26 10:01:01 2012 -0800"
      },
      "message": "manually release controller and dataplane references\n\nThe GC wasn\u0027t collecting these objects in a timely manner, which caused the\nprocess to run out of file descriptors.\n"
    },
    {
      "commit": "2e37ec25b27ea3474d2a5adf0dd3adf422ad2585",
      "tree": "cbd5ffe9956c5e6b4e3a282919b22f199b06ebb2",
      "parents": [
        "a718c669273689d1d44ca42dcbb4464cfa2c45e8"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Dec 26 09:47:39 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Dec 26 09:47:39 2012 -0800"
      },
      "message": "EventDescriptor: fix log statement\n"
    },
    {
      "commit": "d7d3292a587e7450855adbd714f98bf8f5e02d96",
      "tree": "00ba05833d8248db3b86dcce7a43a3b21240e0f9",
      "parents": [
        "7e1d5c54487356c0a1ef86f88f800a7d24d34283"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Dec 24 15:03:20 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Dec 24 15:03:20 2012 -0800"
      },
      "message": "DataPlanePort: fix race between thread start and kill\n\nA very short test could kill the port before the port\u0027s thread started running.\nThe thread would overwrite self.running with True and thus never exit.\n"
    },
    {
      "commit": "7e1d5c54487356c0a1ef86f88f800a7d24d34283",
      "tree": "57a57e50e3a32ed44e4a78983b32699771466b91",
      "parents": [
        "5b5da2d4413ff7249522d9f167c61cd2e298f9ca"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Dec 24 14:08:32 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Dec 24 14:08:32 2012 -0800"
      },
      "message": "EventDescriptor: dont block notify() if pipe is full\n"
    },
    {
      "commit": "5b5da2d4413ff7249522d9f167c61cd2e298f9ca",
      "tree": "e2adf618a0e67102452025dfc9997b99d8de2cba",
      "parents": [
        "4dfd5e19c74d1a9591e88927e93a326818aa38b6"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 19:56:32 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 19:56:32 2012 -0800"
      },
      "message": "dataplane: use an EventDescriptor to speed up killing ports\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": "4d46dbd5348cc2db996e8e3d521d0597f372eeb0",
      "tree": "1991a83cafc224ff92185623538566e7b549716b",
      "parents": [
        "bd186803c8aaf15c4ba20e34c0b7da3d74cc9636"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 19:26:19 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 19:26:19 2012 -0800"
      },
      "message": "dataplane: kill port threads concurrently\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": "e912d03d5dd19039abe599af85feb03eb6ec68f2",
      "tree": "db18a5492aa711be24884740eb91ba10b12a106d",
      "parents": [
        "74be472440365351820efd3786f92f207f74e949"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 14:28:33 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Sat Dec 22 14:28:33 2012 -0800"
      },
      "message": "flow_msg_install: dont send redundant barriers\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": "43ee54c1bccc3ec44a520d25995074ba08ccee96",
      "tree": "5c2b5ed97ba6232eb841582dce41ff5748a71a92",
      "parents": [
        "2bb7a272749bb1a9126b347c80c494d18516c322"
      ],
      "author": {
        "name": "Shudong Zhou",
        "email": "shudongzhou@gmail.com",
        "time": "Thu Dec 13 15:52:37 2012 -0800"
      },
      "committer": {
        "name": "Shudong Zhou",
        "email": "shudongzhou@gmail.com",
        "time": "Thu Dec 13 15:52:37 2012 -0800"
      },
      "message": "Move qinq out of simple_tcp_packet\n"
    },
    {
      "commit": "ab0bab3d52c110ee57c16014ba36d07bd5e20558",
      "tree": "7e59128fe9d1251dba8d3e4a8c545b886c27e24b",
      "parents": [
        "e6fca642a6e7e066ec2edf7e33969148d2e9a0f1"
      ],
      "author": {
        "name": "Ed Swierk",
        "email": "eswierk@bigswitch.com",
        "time": "Fri Nov 30 13:31:00 2012 -0800"
      },
      "committer": {
        "name": "Ed Swierk",
        "email": "eswierk@bigswitch.com",
        "time": "Tue Dec 11 16:29:06 2012 -0800"
      },
      "message": "Don\u0027t try to use the incompatible pylibpcap library\n"
    },
    {
      "commit": "47fe471addfd055828b73341f87c3cc89e81ae9c",
      "tree": "5fa1de974cc1eec1c3534570ee1da92ab597147e",
      "parents": [
        "ba9eee87b344e49741b9faa7c6ffa4ff1ba0cecb",
        "75bcf4d2e0d7446a2a337e445ba0708bef1bafd3"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "lanerl@gmail.com",
        "time": "Sun Dec 09 23:24:38 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "lanerl@gmail.com",
        "time": "Sun Dec 09 23:24:38 2012 -0800"
      },
      "message": "Merge pull request #27 from InCNTRE/master\n\nmessage_types "
    },
    {
      "commit": "9176567db0278481ff43bf0eeee7a8f8b99f6453",
      "tree": "a69086c746105517e3a2828c17246972e118d0c0",
      "parents": [
        "d2e93aa1cc8366e43a5115631ca307c99e11f356"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Dec 06 16:33:04 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Dec 06 17:02:48 2012 -0800"
      },
      "message": "speed up negative tests in receive_pkt_check\n"
    },
    {
      "commit": "d2e93aa1cc8366e43a5115631ca307c99e11f356",
      "tree": "a0af3a507c495151872215863fff7e6aa7a2e2c5",
      "parents": [
        "b5c7379adf9f909d2f50c2481f523e5d39cf3617"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Dec 05 17:55:46 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Dec 06 17:02:48 2012 -0800"
      },
      "message": "dataplane: record wall clock time when receiving packet\n\ntime.clock() returns processor time which is not useful.\n"
    },
    {
      "commit": "89725bb41c7da04c685a8c31fee0a0bdb1b5bd00",
      "tree": "9972070b1c5170e0b6b8e9a2bcca6ee978a848f2",
      "parents": [
        "95e6a45ae51b4f5f768260d78d498c4dd5430157"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Dec 03 16:23:27 2012 -0800"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Mon Dec 03 17:55:44 2012 -0800"
      },
      "message": "also test packet-out in flow_match_test\n\nThe goal is to test the actions taken on the packet, not the matching which is\nof course irrelevant.\n"
    },
    {
      "commit": "5e0a6e374200833af692315b6117b21b2b560068",
      "tree": "b3e64c854b5db4d926ce1a9a3ee76973bc49eaad",
      "parents": [
        "8a0406e29aea1747c65bb67c62235f3149628c21"
      ],
      "author": {
        "name": "ShreyaPandita",
        "email": "sdnadmin@SDNLABCOMPUTER.ads.iu.edu",
        "time": "Sun Dec 02 18:34:35 2012 -0500"
      },
      "committer": {
        "name": "ShreyaPandita",
        "email": "sdnadmin@SDNLABCOMPUTER.ads.iu.edu",
        "time": "Sun Dec 02 18:34:35 2012 -0500"
      },
      "message": "reverted the line specified\n"
    },
    {
      "commit": "cd8e1cf846ad071c530a677406d8c02c0df429bf",
      "tree": "d77917b31ddafee4d559e69f8ef5d62a3497ec87",
      "parents": [
        "055102a3cf0cc183ce418c7b17999775837f7384"
      ],
      "author": {
        "name": "ShreyaPandita",
        "email": "sdnadmin@SDNLABCOMPUTER.ads.iu.edu",
        "time": "Wed Nov 28 11:44:42 2012 -0500"
      },
      "committer": {
        "name": "ShreyaPandita",
        "email": "sdnadmin@SDNLABCOMPUTER.ads.iu.edu",
        "time": "Wed Nov 28 11:44:42 2012 -0500"
      },
      "message": "added port down and up functions\n"
    },
    {
      "commit": "b10ebd61faa5db8a9d5bb7013e46e3939501f700",
      "tree": "39ee4e7fcb5647f6d101dee572e46032418b2020",
      "parents": [
        "8b27474b25b89364db6bdd153a8d467d01470468"
      ],
      "author": {
        "name": "Shudong Zhou",
        "email": "shudongzhou@gmail.com",
        "time": "Tue Nov 27 01:42:51 2012 -0800"
      },
      "committer": {
        "name": "Shudong Zhou",
        "email": "shudongzhou@gmail.com",
        "time": "Tue Nov 27 01:42:51 2012 -0800"
      },
      "message": "Generate tcp packets with double vlan tags\n"
    },
    {
      "commit": "b7f12466ae1b55525d260591cba1e762e63de433",
      "tree": "feb53e4b819e7297510665cf936c33de2d839349",
      "parents": [
        "d71c4a7fd4a9eeaa8fcd7611ef2988db797f0c48"
      ],
      "author": {
        "name": "Shudong Zhou",
        "email": "shudongzhou@gmail.com",
        "time": "Tue Nov 20 13:01:12 2012 -0800"
      },
      "committer": {
        "name": "Shudong Zhou",
        "email": "shudongzhou@gmail.com",
        "time": "Tue Nov 20 13:01:12 2012 -0800"
      },
      "message": "Allow longer barrier timeout in caps test\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": "5d7e89a2aca40438bcdb041217c78f07dedf6c30",
      "tree": "52d75669b2ec3bd97f2be2c3073cae1f39d55f27",
      "parents": [
        "01c2b86587d029af198e26f6aeb7fce1e16943a8"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 26 16:43:13 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Tue Oct 30 08:54:47 2012 -0700"
      },
      "message": "testutils: add inspect_packet() and use it when receive_pkt_verify() fails\n"
    },
    {
      "commit": "110e0e3ace5d7dfa534e6c9fe3f3c8cbbbae8c6e",
      "tree": "130e5ce6e4aafe99179bcf0668aaf30abb1992c4",
      "parents": [
        "6ee7bea2a7054422f6e71119ea3767dd16310077"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 26 16:21:46 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Tue Oct 30 08:54:47 2012 -0700"
      },
      "message": "testutils: add UDP support to pkt_action_setup\n"
    },
    {
      "commit": "6ee7bea2a7054422f6e71119ea3767dd16310077",
      "tree": "f1840c343f1874110beeea0abcaf7b01846b2a65",
      "parents": [
        "1a5b0822fd098adac5ac46ba0531bcb833ee3d39"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 26 16:19:29 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Tue Oct 30 08:54:47 2012 -0700"
      },
      "message": "testutils: add simple_udp_packet()\n"
    },
    {
      "commit": "b371430baebd8c3b130e418e0c6f5a5a2144ece2",
      "tree": "05a3259bd8c41a933b332450abc5b3da4a0af8a4",
      "parents": [
        "b42a31c55479f89417469265f34eb4c50b00aa6b",
        "265fc49f484ce85340ca480dfad22a4edba18c96"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Wed Oct 24 15:09:47 2012 -0700"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Wed Oct 24 15:09:47 2012 -0700"
      },
      "message": "Merge branch \u0027kenc\u0027\n"
    },
    {
      "commit": "b42a31c55479f89417469265f34eb4c50b00aa6b",
      "tree": "deb11a5447ab3e73aaac3db4d20d4517ebda3034",
      "parents": [
        "387fcd7e22c5df376937e3533e57ecb021017b2a"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 05 17:54:17 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Tue Oct 16 16:24:17 2012 -0700"
      },
      "message": "libpcap dataplane\n\nAlternate port implementation using libpcap. This is required for recent\nversions of Linux (such as Linux 3.2 included in Ubuntu 12.04) which\noffload the VLAN tag, so it isn\u0027t in the data returned from a read on a raw\nsocket. libpcap understands how to read the VLAN tag from the kernel.\n\nIf pypcap is installed on the host then the new dataplane is used. Otherwise\nthe old one will still work.\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": "8b59b4b3f39e61d6c5f4bcde42415adf20408dc4",
      "tree": "976d023e7375d7461f8ec2718285705ceb8043ba",
      "parents": [
        "e703c6801ddb686e042bc82589e1ae4a7a4b1a41"
      ],
      "author": {
        "name": "Christian Dickmann",
        "email": "christian.dickmann@gmail.com",
        "time": "Sun Sep 23 16:48:30 2012 -0700"
      },
      "committer": {
        "name": "Christian Dickmann",
        "email": "christian.dickmann@gmail.com",
        "time": "Mon Oct 08 21:11:16 2012 -0700"
      },
      "message": "Add packet parsing/matching verification\n\nNew tests that deal with parsing and matching of valid and\ncorrupted packets. Current coverage includes corrupted IP\nand TCP headers, valid and corrupted LLC (with and without\nSNAP), basic ARP and basic VLAN.\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": "e5779d33367b23c44e9794a1d1bfca5e3892b20a",
      "tree": "1ce35ac68a0221ab53da3599bcced18d22c40ce8",
      "parents": [
        "2014f9b1c88efef6116d5b3f5dae552e5c9741c6"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 05 17:56:04 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 05 18:10:21 2012 -0700"
      },
      "message": "fix pylint errors\n\nAlso removed some testutils code that must have been dead because it had\nrotten.\n"
    },
    {
      "commit": "2014f9b1c88efef6116d5b3f5dae552e5c9741c6",
      "tree": "903a6842d75d708e90f04e7128a8cc3ac4e320b8",
      "parents": [
        "483e15412b1c3902ec398cdaa7c79d9cec147d76"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 05 15:29:40 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 05 18:10:21 2012 -0700"
      },
      "message": "remove config parameter from several testutils functions\n"
    },
    {
      "commit": "b90a1c4dfc0cfe40251187124ff89d7651f2755d",
      "tree": "1ba481298fbd4379fa1eedc0acc35899d7c33a38",
      "parents": [
        "477f4817eedc0ef6306459de1f88d77739bee7cf"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 05 09:16:05 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 05 18:10:14 2012 -0700"
      },
      "message": "move base test classes to oftest.base_tests\n\nThis lets them be shared between separate directories of tests.\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": "477f4817eedc0ef6306459de1f88d77739bee7cf",
      "tree": "2133c905fdd5da93949bd4cc8bb343be93370b1c",
      "parents": [
        "d1d9c287220588b5e8cff337f4f136ab9660a235"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Oct 04 22:49:00 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 05 12:30:31 2012 -0700"
      },
      "message": "add a global config dictionary\n\nThere was no need for each test module to keep a copy for itself. This means we\ncan also get rid of test_set_init.\n"
    },
    {
      "commit": "a92f2526be41f5334728f36be4b6d6dd4db6f46e",
      "tree": "fdddd0d859e98741cc87b1b4b5cfbcfb65e05d6f",
      "parents": [
        "5bd6cf94def52d433139d430cc34a6c1c49f8fd8"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Oct 04 18:11:04 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 05 08:44:34 2012 -0700"
      },
      "message": "remove unnecessary uses of eval\n\nThere are easier ways to do everything that was being done with eval.\n"
    },
    {
      "commit": "9a00381ec150547bc039a60b5c5f0269bc0a8dfb",
      "tree": "49572bb0e31027cc02a46d5a2f52d29c1b954eec",
      "parents": [
        "123928cd3c6a26ecbd852e2e01d6a5b921a5256a"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Oct 04 17:17:59 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Oct 05 08:39:50 2012 -0700"
      },
      "message": "use the singleton logger object\n\nThere was no need for each test file to have its own logger.\n"
    },
    {
      "commit": "2a3bbb4f5d7e1cdd48704a53d8d8f22c5590abbc",
      "tree": "ea0e8d61849717b6c7a83c8e59da3710c7509f63",
      "parents": [
        "114d143de7a82f9cde4923e0bd91fa894d32f6f2"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Oct 04 15:45:32 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Oct 04 17:28:05 2012 -0700"
      },
      "message": "nuke setuptools and \"make install\"\n\nThis code didn\u0027t work. If we ever want setup.py back we can get it from version\ncontrol.\n"
    },
    {
      "commit": "da3b5ad89ce995cbc3a08dfff06dcb4f66f85578",
      "tree": "dab88f247ee287b8efaee8ae287676aa13241fb9",
      "parents": [
        "fb9ce27051f9df1a3f43e43154d0443f06f80287"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Oct 03 09:05:32 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Oct 03 10:15:27 2012 -0700"
      },
      "message": "move testutils to src/python/oftest\n\ntestutils.py needs to be in a common location for different directories of\ntests to use it.\n"
    },
    {
      "commit": "fb9ce27051f9df1a3f43e43154d0443f06f80287",
      "tree": "642d4401393d366d197e369741e333d4ad24f7e6",
      "parents": [],
      "author": {
        "name": "Jeffrey Townsend",
        "email": "jeffrey.townsend@bigswitch.com",
        "time": "Tue Oct 02 21:10:29 2012 -0700"
      },
      "committer": {
        "name": "Jeffrey Townsend",
        "email": "jeffrey.townsend@bigswitch.com",
        "time": "Tue Oct 02 21:10:29 2012 -0700"
      },
      "message": "Do not include tests with a negative priority.\n"
    }
  ]
}
