)]}'
{
  "log": [
    {
      "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": "19df87e1aebc96d155819a0aca78b40729b7447c",
      "tree": "0e368b944194cc7d631af4b099984ef8f95d5e31",
      "parents": [
        "130b6a33a9858351886668f7ef07be121cc6a0e1"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Sep 28 12:45:56 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Fri Sep 28 12:45:56 2012 -0700"
      },
      "message": "Revert \"Merge pull request #19 from rlane/move-oftest\"\n\nThis reverts commit 130b6a33a9858351886668f7ef07be121cc6a0e1, reversing\nchanges made to 5d2a768c671a549473f68131a0fc11737bf43952.\n\nMoving testutils.py broke some imports.\n"
    },
    {
      "commit": "23f08d61388887f48b19b0c74919cfad2dfe4b4e",
      "tree": "dcf5225fa0652dd659ecdd44ce7c692d719c2c4c",
      "parents": [
        "1673b8f166159e16ba1112a7d737f4878c6cf027"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Tue Sep 25 20:40:38 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Sep 27 13:44:55 2012 -0700"
      },
      "message": "move oft script to the top level\n\ntestutils.py also had to be moved because of import path issues.\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": "6cc1fda14edd47a0e34b8efd088062f1bd2bd800",
      "tree": "7f653516c31d9f6586f4a084f23d1b0c29a34b07",
      "parents": [
        "97d4f3644e917a7417b38829b7998dcb46324f4c"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Tue Sep 18 06:39:24 2012 -0700"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Tue Sep 18 06:39:24 2012 -0700"
      },
      "message": "OFTEST-7 Add file for illegal message generation\n\nNote that you may need to \u0027make install\u0027 again in\noftest/tools/munger to pick up these changes\n\nThis file allows you to generate a message with an illegal\ntype in the header.  See the new test (coming) in tests/basic.py.\n"
    },
    {
      "commit": "b6fc23f12d7181eb3c86444814c81fc6b8314f63",
      "tree": "f45867ced5f5eabbdd1e1339f8dc3efd378ef3c6",
      "parents": [
        "aeb23d615776bf54323b7e9b1038a5113ca81b2f"
      ],
      "author": {
        "name": "Shudong Zhou",
        "email": "shudongzhou@gmail.com",
        "time": "Sat Sep 01 16:43:41 2012 -0700"
      },
      "committer": {
        "name": "Shudong Zhou",
        "email": "shudongzhou@gmail.com",
        "time": "Sat Sep 01 16:43:41 2012 -0700"
      },
      "message": "Ignore .pyc files\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": "e55abf725e212af6708e7cbed639fbf451537662",
      "tree": "28ad8c71352d9ea8d5474faae661c0b71aca90f1",
      "parents": [
        "c8aaa3e5376205cee5094d8c0d6dcb23cba8ea40"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jul 26 20:11:42 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jul 26 20:11:42 2012 -0700"
      },
      "message": "add --default-timeout option\n"
    },
    {
      "commit": "c8aaa3e5376205cee5094d8c0d6dcb23cba8ea40",
      "tree": "45affb6a2979770637e84e82e7865a853f80391a",
      "parents": [
        "8806bc4712c5bee1eb48a6cb1d94380150c86935"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jul 26 19:28:02 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jul 26 20:11:11 2012 -0700"
      },
      "message": "use default timeout in most cases\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": "db9d866ddc23f7520f25485b98ab18dd40ac8bc1",
      "tree": "b9ef8480c62cf2f7f7e4f698bf68c7e8ef2d6bf2",
      "parents": [
        "e1da7eaf40daddec475b57becd8c367a0b51a992"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jul 26 18:04:24 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Thu Jul 26 18:04:24 2012 -0700"
      },
      "message": "fix usage of condition variables in dataplane\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": "0e8b0924791643ce114c68fac2e4aaefd3b3863d",
      "tree": "331f4f40327e6422804550d8877b56559ddc7adf",
      "parents": [
        "4d5ca926e657cb15cbac8c61f6e35590ec99615a"
      ],
      "author": {
        "name": "Jeffrey Townsend",
        "email": "jeffrey.townsend@bigswitch.com",
        "time": "Wed Jul 11 11:37:46 2012 -0700"
      },
      "committer": {
        "name": "Jeffrey Townsend",
        "email": "jeffrey.townsend@bigswitch.com",
        "time": "Wed Jul 11 11:37:46 2012 -0700"
      },
      "message": "- The DataPlane class now accepts the global configuration when created.\n- The DataPlane class now allows the platform/configuration to override\n  the class used for port traffic. The default class remains DataPlanePort.\n"
    },
    {
      "commit": "8ed984711821afb39f73990a88cc37edfdb07ff2",
      "tree": "10e9ef85e31f64aa13ad36ae3e9b0cf09a8dceaf",
      "parents": [
        "20a3da53bc0971be388361d3eaff01ea5e55091e"
      ],
      "author": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Jul 11 10:34:52 2012 -0700"
      },
      "committer": {
        "name": "Rich Lane",
        "email": "rich.lane@bigswitch.com",
        "time": "Wed Jul 11 10:34:52 2012 -0700"
      },
      "message": "add gitignores\n"
    },
    {
      "commit": "3978f24c0b64a8e4d51ef75beda47998c4583bb0",
      "tree": "8a92a319dd6be67f3ca3293be0a6151a930076e5",
      "parents": [
        "899ff8e0325247413c979c7a6364b537e3b896c0"
      ],
      "author": {
        "name": "Ken Chiang",
        "email": "ken.chiang@bigswitch.com",
        "time": "Wed Jun 13 14:14:09 2012 -0700"
      },
      "committer": {
        "name": "Ken Chiang",
        "email": "ken.chiang@bigswitch.com",
        "time": "Wed Jun 13 14:14:09 2012 -0700"
      },
      "message": "Fix typo.\nRename pktact.WildcardPriority2 to pktact.WildcardPriorityWithDelete.\n"
    },
    {
      "commit": "1729fdb9b9a1e41529e4b9ad035c919991ca780b",
      "tree": "5e62ce8d54c56629f47352c465212bedf03b6690",
      "parents": [
        "2757e0a1d9d166fde09a50432dc05e768b5a9283"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Thu May 03 09:35:56 2012 -0700"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Thu May 03 09:39:19 2012 -0700"
      },
      "message": "Support specifying expect pkt and not expect port\n\nPreviously, in dataplane poll, if you did not specify a port, then\nspecifying an expected packet would be ignored.\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": "eddea776f0dd938977106695f9e3eecb4afb74d7",
      "tree": "50381f905fff438e39bdfda52e3d953eaf2a23b0",
      "parents": [
        "89f7835f53adf198f24439fcf626d016e5fc2dad"
      ],
      "author": {
        "name": "Ed Swierk",
        "email": "eswierk@bigswitch.com",
        "time": "Sat Mar 31 18:34:32 2012 -0700"
      },
      "committer": {
        "name": "Ed Swierk",
        "email": "eswierk@bigswitch.com",
        "time": "Mon Apr 02 08:00:46 2012 -0700"
      },
      "message": "Just print a warning when reading from the controller returns 0 bytes\n"
    },
    {
      "commit": "506614a62cd06c4de63f8e017f9bd8511e797b9f",
      "tree": "94ae771ce1ad00b40474c49f4e7266de0f694b81",
      "parents": [
        "aa5bc065333e901cb2795273e5d1ea522ff2db17"
      ],
      "author": {
        "name": "Ed Swierk",
        "email": "eswierk@bigswitch.com",
        "time": "Thu Mar 29 08:16:59 2012 -0700"
      },
      "committer": {
        "name": "Ed Swierk",
        "email": "eswierk@bigswitch.com",
        "time": "Sat Mar 31 14:38:56 2012 -0700"
      },
      "message": "Ignore padding bytes in the received packet when the length of the\nexpected packet is less than the minimum Ethernet frame size (60 bytes)\n"
    },
    {
      "commit": "04ead7d9880891d7320e16790289d3a3b566339c",
      "tree": "7753b0ef914e75df095a765208e3db9d6d512c2e",
      "parents": [
        "4b29529d5bc101e004ce4c9f31c0b2db46c01b29"
      ],
      "author": {
        "name": "Ken Chiang",
        "email": "ken.chiang@bigswitch.com",
        "time": "Sat Mar 31 13:30:45 2012 -0700"
      },
      "committer": {
        "name": "Ken Chiang",
        "email": "ken.chiang@bigswitch.com",
        "time": "Sat Mar 31 13:30:45 2012 -0700"
      },
      "message": "Fix typo in debug message.\n"
    },
    {
      "commit": "4b29529d5bc101e004ce4c9f31c0b2db46c01b29",
      "tree": "dde0b984c04ebeab6257b1011186a4bca0bba245",
      "parents": [
        "dc6fca3d311dfa132f3c6c46ff22a0f719e3e85d"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Fri Mar 30 11:54:14 2012 -0700"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Fri Mar 30 11:54:14 2012 -0700"
      },
      "message": "Hopefully addressing race condition\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": "4e2003090e3f5c55e4413514a15f8c67d8447add",
      "tree": "39a34b5ddaeb64bd6599900e52ec39c18cc02dc5",
      "parents": [
        "6ccbb07fbe7af377bcb746487d9c9be3f3f0d7a9"
      ],
      "author": {
        "name": "Ed Swierk",
        "email": "eswierk@bigswitch.com",
        "time": "Mon Mar 19 14:53:31 2012 -0700"
      },
      "committer": {
        "name": "Ed Swierk",
        "email": "eswierk@bigswitch.com",
        "time": "Tue Mar 20 11:13:44 2012 -0700"
      },
      "message": "Log the ingress port of each packet received\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": "cf26b7a4bd60f6b47709aa34f33aac48e7ab0b61",
      "tree": "444688861823fe6ff85e4f5ff2f60239e95020e0",
      "parents": [
        "836e5bd85531c1bf7ba7e7a73c7358ad732b7d1c"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dan.talayco@bigswitch.com",
        "time": "Fri Aug 05 10:15:35 2011 -0700"
      },
      "committer": {
        "name": "Ed Swierk",
        "email": "eswierk@bigswitch.com",
        "time": "Tue Mar 20 11:13:44 2012 -0700"
      },
      "message": "Added relax option to oftest\n\nThis option relaxes restrictions around receiving unexpected packets.\nIt\u0027s main use case is in evironments where in-band control is enabled and\nas a consequence packets are forwarded to dataplane ports.\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": "8dbc4d73059a623b4103c5f8c4354343ae221997",
      "tree": "81381faadc242d8fb29b829d61aa7171371e7a6c",
      "parents": [
        "551befadb763269637cb38372400a31ad1a2ee1f"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Sat Jul 17 00:32:46 2010 -0700"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Sat Jul 17 00:32:46 2010 -0700"
      },
      "message": "Correct dl_match type when generating flow match from a tagged pkt\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": "9c31e22302d39eb7ae5361fa3dec5e8763bc5553",
      "tree": "c63466d34c0124f4385d5417cb24c10cd482ad8f",
      "parents": [
        "8b886b16b434476a9c1c0063e35c6bcc9c30392e",
        "b8fb3c382fa1564bc276277c54f9c4156055727f"
      ],
      "author": {
        "name": "Tatsuya Yabe",
        "email": "tyabe@stanford.edu",
        "time": "Wed Jun 16 13:48:02 2010 -0700"
      },
      "committer": {
        "name": "Tatsuya Yabe",
        "email": "tyabe@stanford.edu",
        "time": "Wed Jun 16 13:48:02 2010 -0700"
      },
      "message": "Merge branch \u0027tyabe\u0027\n\nConflicts:\n\ttests/pktact.py\n"
    },
    {
      "commit": "b8fb3c382fa1564bc276277c54f9c4156055727f",
      "tree": "61efcafe033ac2c9f1bccd54dec1eaa15ea7a31e",
      "parents": [
        "f5ffb97b92a933ed7781a0a2e36b101b3f62c5e3"
      ],
      "author": {
        "name": "Tatsuya Yabe",
        "email": "tyabe@stanford.edu",
        "time": "Mon Jun 14 15:48:36 2010 -0700"
      },
      "committer": {
        "name": "Tatsuya Yabe",
        "email": "tyabe@stanford.edu",
        "time": "Mon Jun 14 15:48:36 2010 -0700"
      },
      "message": "Added: DirectPacket test with ICMP matching\n"
    },
    {
      "commit": "89d5734045e35fe0998f5c372fb5116e4f763e20",
      "tree": "32dfa4b2fe391f297d116472e996640466269849",
      "parents": [
        "9f47f4d4dd1f73db0f2f45c53680f865f65116d6"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Mon Jun 07 16:24:59 2010 -0700"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Mon Jun 07 16:24:59 2010 -0700"
      },
      "message": "Added flow expire/stats tests\n\nContributions from Google test engineers.  Basic tests for flow\nexpiration message generation and stats checking.  They also\nadded code for properly managing network prototype and wildcards\nfor TCP/UDP packets in parse.py.\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": "3afcf72f4d904dcfeb2cc3d6b2b965d7d67552fa",
      "tree": "2106f33270230490f5aa3be25563d396dc97261b",
      "parents": [
        "f31718773f1d4e8634a96d02ad0f93fc2bea307b"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Tue May 11 15:05:11 2010 -0700"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Tue May 11 15:05:11 2010 -0700"
      },
      "message": "Copy actions put on lists\n\nPrior to adding an action to a list, do a deep copy of it.\nThis allows the caller to update the action object without\naffecting the actions already on the list.\n"
    },
    {
      "commit": "a99c21ad8909883b5040a1bac384f81410bf987a",
      "tree": "d68ee0e8f5baef8f7296cea7e49dd6861ab5b765",
      "parents": [
        "b2d1d044758cc66949665215ce79116bbfbe8377"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Fri May 07 09:23:34 2010 -0700"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Fri May 07 09:23:34 2010 -0700"
      },
      "message": "Debug output change\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": "958f3b9e93b6110735fab508e5868526e40e61fb",
      "tree": "a83c2728a07f2a88bb7088dc8be8d33b571f0e1a",
      "parents": [
        "6f223c841534e682d00f40f6341230f4264beb71"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@snowcrash.dbd.mogulmouse.net",
        "time": "Fri Mar 12 21:58:57 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@snowcrash.dbd.mogulmouse.net",
        "time": "Fri Mar 12 21:58:57 2010 -0800"
      },
      "message": "Clean up scapy references\n"
    },
    {
      "commit": "9f088483ac78d32547ff99e3d7c3a8fd4e2234b0",
      "tree": "5a93aed30e2e8c172fc3add92abefe6f7c393de5",
      "parents": [
        "f4426d5e9d379c4a08f8002b0cd46faaef35719e"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Fri Mar 12 13:56:02 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Fri Mar 12 13:56:02 2010 -0800"
      },
      "message": "Bad mixed import for scapy\n"
    },
    {
      "commit": "235d7cbbc96908d10bbf30d52ee8950e3b881f9b",
      "tree": "341fd10a5b635c4d23a820720fd5585cba7a37b8",
      "parents": [
        "fa16d59a54dd507c063860286a86df693ac98f14"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Fri Mar 12 10:03:18 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Fri Mar 12 10:03:18 2010 -0800"
      },
      "message": "Explicit logging import; was failing on CentOS 5.2\n"
    },
    {
      "commit": "f3d64d69dae47818152f015d469aeadd1eb66961",
      "tree": "61b9be2bc2348b6498daca3305a0f543fa692443",
      "parents": [
        "79f3608496bd5c1f10b5414e787407d00bc23a50"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Thu Mar 11 20:17:35 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Thu Mar 11 20:17:35 2010 -0800"
      },
      "message": "Do not list scapy as a rqmt for now as it breaks on CentOS\n"
    },
    {
      "commit": "d2ca1031708f717da7e8db5b05a87972a0a429a9",
      "tree": "6be35dcf9ae05fd5cbde36552cb86cf6a266a21a",
      "parents": [
        "0db53eb3dd0c33696698798244ca2f397b8b2ba8"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Wed Mar 10 14:40:26 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Wed Mar 10 14:40:26 2010 -0800"
      },
      "message": "As much as possible, remove dependence on python 2.5\n"
    },
    {
      "commit": "0db53eb3dd0c33696698798244ca2f397b8b2ba8",
      "tree": "0cc0086091629babf2f7c1774a369ef62c7e266d",
      "parents": [
        "cb6b5d7ec084e01f353e837d99b7382ca408ea99"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Wed Mar 10 14:00:02 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Wed Mar 10 14:00:02 2010 -0800"
      },
      "message": "Catch exception on socket open and exit\n"
    },
    {
      "commit": "cb6b5d7ec084e01f353e837d99b7382ca408ea99",
      "tree": "4e2bccb46b223424215109728cd44c8f13998b4b",
      "parents": [
        "5eba844727d48f669c643238ccf4ed2cb6204c1c"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Wed Mar 10 13:59:33 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Wed Mar 10 13:59:33 2010 -0800"
      },
      "message": "Support scapy packet as input for flow match\n"
    },
    {
      "commit": "46755faa9b26c268ea60002531f610a9c3eb965e",
      "tree": "43c5a0cb7cd6db3b4a2882d44de2d1e3d8ab09da",
      "parents": [
        "11c26e7991de1a351e56a049fbca261a26493194"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Tue Mar 09 21:44:29 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Tue Mar 09 21:44:29 2010 -0800"
      },
      "message": "Changed show to return a string rather than print\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": "2c0dba3b10266936d137c8756ef5dbc41a48a67f",
      "tree": "924417aa0c787ab2312751904e0c22eca92fe0c1",
      "parents": [
        "52f6444dcad3650d6eb0844ac140d69295335b5d"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Sat Mar 06 22:47:06 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Sat Mar 06 22:47:06 2010 -0800"
      },
      "message": "Setup and test spec implementation\n\nSetup now installs code as normal conventions:\ncd oftest/src/python\npython setup.py install\n\nSee basic.py for recommended import conventions\n\nCommand line parsing significantly updated; allow --test-spec\nto indicate a module or specific tests to include.\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": "ea8ad807a0eef55315a251e055405ecdcc4fec41",
      "tree": "4c940a7eb24b8287d8aa816157cefaef6487c7da",
      "parents": [
        "c4747969e0dc491ea58aa485358c2454acbdeb23"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Mon Feb 22 20:30:18 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Mon Feb 22 20:30:18 2010 -0800"
      },
      "message": "Oops, missed this file in original commit\n"
    },
    {
      "commit": "f307f3fb64453a1abb9fbbeeabe31af28aad7434",
      "tree": "8826533f7b18fcb65aed7afae4332544bcf2d69c",
      "parents": [
        "90576bddc22855f816bace1b8afb3a13913259b5"
      ],
      "author": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Fri Feb 19 11:42:29 2010 -0800"
      },
      "committer": {
        "name": "Dan Talayco",
        "email": "dtalayco@stanford.edu",
        "time": "Fri Feb 19 11:42:29 2010 -0800"
      },
      "message": "Removed a bunch of unused clutter\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"
    }
  ],
  "next": "4d065977ffd792f847b257347a26e8683ddc26b2"
}
