Allow report lines to have no iperf files.

This fixes an edge case, since when our ping tests fail we won't output
iperf files. Normally this is due to being on the wrong network, but
sometimes it's an actual finding and we want to keep those runs.

Change-Id: Ic596fb34d76689b26a86da81b1570840911498fb
diff --git a/wifitables/report.py b/wifitables/report.py
index 92660b2..9ea993b 100755
--- a/wifitables/report.py
+++ b/wifitables/report.py
@@ -265,16 +265,18 @@
   else:
     line += ['', '']
 
-  it = open(os.path.join(report_dir, 'iperf'))
-  iu = open(os.path.join(report_dir, 'iperfu'))
+  # If the initial ping test fails, we won't collect performance information.
+  # deal with this gracefully.
+  for fn, infile in [(ParseIperfTCP, 'iperf'),
+                     (ParseIperfUDP, 'iperfu')]:
+    ipath = os.path.join(report_dir, infile)
+    if not os.path.isfile(ipath):
+      line += [None, None]
+      continue
 
-  tcp_perf = ParseIperfTCP(it.read())
-  udp_perf = ParseIperfUDP(iu.read())
-  line += [tcp_perf.get('bandwidth'), tcp_perf.get('bandwidth_unit'),
-           udp_perf.get('bandwidth'), udp_perf.get('bandwidth_unit')]
-
-  iu.close()
-  it.close()
+    with open(ipath) as ip:
+      perf = fn(ip.read())
+      line += [perf.get('bandwidth'), perf.get('bandwidth_unit')]
 
   return line
 
diff --git a/wifitables/report_test.py b/wifitables/report_test.py
index 3abc02e..b324fe4 100644
--- a/wifitables/report_test.py
+++ b/wifitables/report_test.py
@@ -103,5 +103,14 @@
     WVFAIL('Failed to read report directory with hyphens in path.')
     return
 
-  WVPASS('Report with hypens in path read successfully.')
+  WVPASS('Report with hyphens in path read successfully.')
+
+
+@wvtest
+def ReportWithoutIperfFiles():
+  try:
+    rl = report.ReportLine('testdata/wifi-1426545351.85-0085')
+    WVPASSEQ(rl[-4:], [None, None, None, None])
+  except IOError:
+    WVFAIL('Failed to read report without iperf output files.')
 
diff --git a/wifitables/testdata/wifi-1426545351.85-0085/airport b/wifitables/testdata/wifi-1426545351.85-0085/airport
new file mode 100644
index 0000000..5f16291
--- /dev/null
+++ b/wifitables/testdata/wifi-1426545351.85-0085/airport
@@ -0,0 +1,15 @@
+     agrCtlRSSI: -57
+     agrExtRSSI: 0
+    agrCtlNoise: -87
+    agrExtNoise: 0
+          state: running
+        op mode: station 
+     lastTxRate: 243
+        maxRate: 450
+lastAssocStatus: 0
+    802.11 auth: open
+      link auth: wpa2-psk
+          BSSID: e8:fc:af:fa:a1:8a
+           SSID: NETGEAR20-5G-2
+            MCS: 20
+        channel: 153,-1
diff --git a/wifitables/testdata/wifi-1426545351.85-0085/airportscan b/wifitables/testdata/wifi-1426545351.85-0085/airportscan
new file mode 100644
index 0000000..2da0158
--- /dev/null
+++ b/wifitables/testdata/wifi-1426545351.85-0085/airportscan
@@ -0,0 +1,125 @@
+                            SSID BSSID             RSSI CHANNEL HT CC SECURITY (auth/unicast/group)
+                        Google-A d8:c7:c8:d7:72:30 -63  36,+1   Y  US WPA2(802.1x/AES/AES) 
+                          GIN-3g d8:c7:c8:d7:72:32 -66  36,+1   Y  US WPA2(PSK/AES/AES) 
+                          GIN-2g d8:c7:c8:d7:72:35 -66  36,+1   Y  US WPA2(PSK/AES/AES) 
+                     GIN-2g-poor 9c:1c:12:a4:3e:d6 -80  36,+1   Y  US WPA2(PSK/AES/AES) 
+                     GoogleGuest d8:c7:c8:d7:72:71 -58  48,-1   Y  US NONE
+                      GoogleWiFi d8:c7:c8:d7:72:74 -58  48,-1   Y  US WPA2(802.1x/AES/AES) 
+                          GIN-3g d8:c7:c8:d7:72:72 -58  48,-1   Y  US WPA2(PSK/AES/AES) 
+                          GIN-2g d8:c7:c8:d7:72:75 -58  48,-1   Y  US WPA2(PSK/AES/AES) 
+                        Google-A d8:c7:c8:d7:72:70 -58  48,-1   Y  US WPA2(802.1x/AES/AES) 
+                     GIN-2g-poor d8:c7:c8:d7:72:76 -58  48,-1   Y  US WPA2(PSK/AES/AES) 
+                        Google-A 00:1a:1e:54:ce:70 -70  48,-1   Y  US WPA2(802.1x/AES/AES) 
+                       rofrankel f4:f5:e8:80:ff:92 -57  149,+1  Y  US WPA2(PSK/AES/AES) 
+                          eqvoip 0e:01:02:14:6d:39 -78  149,+1  Y  US WPA2(PSK/AES/AES) 
+               TWCWiFi-Passpoint dc:a5:f4:b8:f1:cb -88  149,+1  Y  US WPA2(802.1x/AES/AES) 
+                     GIN-2g-poor 6c:f3:7f:b1:a1:86 -72  11      Y  US WPA2(PSK/AES/AES) 
+                          Google 6c:f3:7f:b1:a1:81 -72  11      Y  US WPA2(802.1x/AES/AES) 
+                         TWCWiFi 7c:95:f3:8a:1e:ef -90  64,-1   Y  US NONE
+               TWCWiFi-Passpoint 7c:95:f3:8a:1e:eb -90  64,-1   Y  US WPA2(802.1x/AES/AES) 
+                       CableWiFi dc:a5:f4:b8:f1:cc -87  149,+1  Y  US NONE
+                         TWCWiFi dc:a5:f4:b8:f1:cf -87  149,+1  Y  US NONE
+                       CableWiFi 7c:95:f3:8a:1e:ec -89  64,-1   Y  US NONE
+                      NTTA-GUEST c0:25:5c:f3:d4:b6 -86  56      Y  US NONE
+                       NTTA-CORP c0:25:5c:f3:d4:b7 -87  56      Y  US WPA2(802.1x/AES/AES) 
+                      NTTA-GUEST c0:25:5c:f3:d4:be -79  56      Y  US NONE
+                       NTTA-CORP c0:25:5c:f3:d4:bf -80  56      Y  US WPA2(802.1x/AES/AES) 
+                           5UWN5 00:26:62:91:2b:02 -74  11      Y  US WEP
+                           T4393 00:26:b8:53:5b:22 -71  11      Y  US WEP
+                     GoogleGuest 6c:f3:7f:b1:a1:80 -67  11      Y  US NONE
+                     GIN-2g-poor 9c:1c:12:a4:4c:66 -62  11      Y  US WPA2(PSK/AES/AES) 
+                          GIN-2g 9c:1c:12:a4:4c:65 -63  11      Y  US WPA2(PSK/AES/AES) 
+                          GIN-3g 9c:1c:12:a4:4c:62 -62  11      Y  US WPA2(PSK/AES/AES) 
+                          Google 9c:1c:12:a4:4c:61 -63  11      Y  US WPA2(802.1x/AES/AES) 
+                          Google d8:c7:c8:d7:72:81 -53  11      Y  US WPA2(802.1x/AES/AES) 
+                     GIN-2g-poor d8:c7:c8:d7:72:66 -41  11      Y  US WPA2(PSK/AES/AES) 
+                          GIN-2g d8:c7:c8:d7:72:65 -41  11      Y  US WPA2(PSK/AES/AES) 
+                          GIN-3g d8:c7:c8:d7:72:62 -41  11      Y  US WPA2(PSK/AES/AES) 
+                          Google d8:c7:c8:d7:72:61 -41  11      Y  US WPA2(802.1x/AES/AES) 
+                     GoogleGuest d8:c7:c8:d7:72:60 -41  11      Y  US NONE
+                     GIN-2g-poor d8:c7:c8:d7:72:c6 -71  11      Y  US WPA2(PSK/AES/AES) 
+                          Google d8:c7:c8:d7:6b:01 -52  6       Y  US WPA2(802.1x/AES/AES) 
+                           jeltz 02:1a:11:f7:f0:c3 -69  6       Y  Q2 WPA2(PSK/AES/AES) 
+                       NETGEAR20 e8:fc:af:fa:a1:89 -47  5,+1    Y  -- WPA2(PSK/AES/AES) 
+        GSAFNS1441P0208_TestWifi f4:f5:e8:80:f3:cf -53  5       Y  US WPA2(PSK/AES/AES) 
+                    TG1672G12-5G 14:cf:e2:8c:02:15 -84  149,+1  Y  US WPA2(PSK/AES/AES) 
+                      GoogleWiFi d8:c7:c8:d7:73:64 -53  1       Y  US WPA2(802.1x/AES/AES) 
+                     GIN-2g-poor d8:c7:c8:d7:73:66 -44  1       Y  US WPA2(PSK/AES/AES) 
+                     GoogleGuest d8:c7:c8:d7:73:60 -45  1       Y  US NONE
+                          eqvoip 0e:01:01:14:6d:39 -52  1       Y  US WPA2(PSK/AES/AES) 
+                         Equinix 0e:02:01:14:6c:bd -58  1       Y  US NONE
+                         Equinix 0e:02:01:14:6d:39 -52  1       Y  US NONE
+                          eqvoip 0e:01:01:14:6c:bd -58  1       Y  US WPA2(PSK/AES/AES) 
+                         Equinix 0e:02:01:14:6c:c1 -55  1       Y  US NONE
+                          eqvoip 0e:01:01:14:6c:c1 -55  1       Y  US WPA2(PSK/AES/AES) 
+                          GIN-2g d8:c7:c8:d7:73:65 -44  1       Y  US WPA2(PSK/AES/AES) 
+                          GIN-3g d8:c7:c8:d7:73:62 -44  1       Y  US WPA2(PSK/AES/AES) 
+                          Google d8:c7:c8:d7:73:61 -44  1       Y  US WPA2(802.1x/AES/AES) 
+                          eqvoip 0e:01:01:14:6a:c3 -59  1       Y  US WPA2(PSK/AES/AES) 
+                    TG1672G82-5G 14:cf:e2:8d:a6:85 -86  149,+1  Y  US WPA2(PSK/AES/AES) 
+                          eqvoip 0e:01:02:14:6c:c1 -72  149,+1  Y  US WPA2(PSK/AES/AES) 
+                        Google-A 9c:1c:12:a4:4e:d0 -68  149,+1  Y  US WPA2(802.1x/AES/AES) 
+                          GIN-3g 9c:1c:12:a4:4e:d2 -67  149,+1  Y  US WPA2(PSK/AES/AES) 
+                         Equinix 0e:02:02:14:6c:bd -75  149,+1  Y  US NONE
+        GSAFNS1441P0208_TestWifi 88:dc:96:21:6d:45 -58  149,+1  Y  US WPA2(PSK/AES/AES) 
+                     GIN-2g-poor 9c:1c:12:a4:4e:d6 -67  149,+1  Y  US WPA2(PSK/AES/AES) 
+                          GIN-2g 9c:1c:12:a4:4e:d5 -68  149,+1  Y  US WPA2(PSK/AES/AES) 
+                     GoogleGuest 9c:1c:12:a4:4e:d1 -68  149,+1  Y  US NONE
+                             foo f8:8f:ca:00:19:b7 -72  149     Y  -- NONE
+                     GIN-2g-poor 00:1a:1e:54:ce:76 -75  48,-1   Y  US WPA2(PSK/AES/AES) 
+                          GIN-2g 00:1a:1e:54:ce:75 -76  48,-1   Y  US WPA2(PSK/AES/AES) 
+                          GIN-3g 00:1a:1e:54:ce:72 -76  48,-1   Y  US WPA2(PSK/AES/AES) 
+                     GoogleGuest 00:1a:1e:54:ce:71 -77  48,-1   Y  US NONE
+                     GIN-2g-poor 24:de:c6:06:7f:f6 -84  48,-1   Y  US WPA2(PSK/AES/AES) 
+                          GIN-2g 24:de:c6:06:7f:f5 -85  48,-1   Y  US WPA2(PSK/AES/AES) 
+                          GIN-3g 24:de:c6:06:7f:f2 -85  48,-1   Y  US WPA2(PSK/AES/AES) 
+                     GoogleGuest 24:de:c6:06:7f:f1 -84  48,-1   Y  US NONE
+                        Google-A 9c:1c:12:a4:4c:70 -66  48,-1   Y  US WPA2(802.1x/AES/AES) 
+                     GIN-2g-poor 9c:1c:12:a4:4c:76 -67  48,-1   Y  US WPA2(PSK/AES/AES) 
+                          GIN-2g 9c:1c:12:a4:4c:75 -67  48,-1   Y  US WPA2(PSK/AES/AES) 
+                          GIN-3g 9c:1c:12:a4:4c:72 -67  48,-1   Y  US WPA2(PSK/AES/AES) 
+                     GoogleGuest 9c:1c:12:a4:4c:71 -66  48,-1   Y  US NONE
+                  NETGEAR20-5G-1 e8:fc:af:fa:a1:88 -58  44,+1   Y  -- WPA2(PSK/AES/AES) 
+                       AutoMoose 00:1a:11:30:57:d5 -79  44      Y  US WPA2(PSK/AES/AES) 
+                        Google-A d8:c7:c8:d7:6b:10 -65  40,-1   Y  US WPA2(802.1x/AES/AES) 
+                     GIN-2g-poor d8:c7:c8:d7:6b:16 -65  40,-1   Y  US WPA2(PSK/AES/AES) 
+                          GIN-2g d8:c7:c8:d7:6b:15 -65  40,-1   Y  US WPA2(PSK/AES/AES) 
+                          GIN-3g d8:c7:c8:d7:6b:12 -65  40,-1   Y  US WPA2(PSK/AES/AES) 
+                     GoogleGuest d8:c7:c8:d7:6b:11 -62  40,-1   Y  US NONE
+                        Google-A d8:c7:c8:d7:73:70 -51  40,-1   Y  US WPA2(802.1x/AES/AES) 
+                     GIN-2g-poor d8:c7:c8:d7:73:76 -51  40,-1   Y  US WPA2(PSK/AES/AES) 
+                          GIN-2g d8:c7:c8:d7:73:75 -51  40,-1   Y  US WPA2(PSK/AES/AES) 
+                          GIN-3g d8:c7:c8:d7:73:72 -51  40,-1   Y  US WPA2(PSK/AES/AES) 
+                     GoogleGuest d8:c7:c8:d7:73:71 -51  40,-1   Y  US NONE
+                       AutoMoose a0:0b:ba:82:ff:1d -76  36      Y  US WPA2(PSK/AES/AES) 
+                     GIN-2g-poor d8:c7:c8:d7:72:36 -74  36,+1   Y  US WPA2(PSK/AES/AES) 
+                          GIN-2g 9c:1c:12:a4:3e:d5 -74  36,+1   Y  US WPA2(PSK/AES/AES) 
+                          GIN-3g 9c:1c:12:a4:3e:d2 -74  36,+1   Y  US WPA2(PSK/AES/AES) 
+                     GoogleGuest 9c:1c:12:a4:3e:d1 -73  36,+1   Y  US NONE
+                     GoogleGuest d8:c7:c8:d7:72:31 -75  36,+1   Y  US NONE
+                      GoogleWiFi d8:c7:c8:d7:72:94 -54  161,-1  Y  US WPA2(802.1x/AES/AES) 
+                          GIN-3g d8:c7:c8:d7:72:92 -53  161,-1  Y  US WPA2(PSK/AES/AES) 
+                        Google-A 24:de:c6:06:84:50 -78  161,-1  Y  US WPA2(802.1x/AES/AES) 
+                          GIN-2g 24:de:c6:e0:91:55 -76  161,-1  Y  US WPA2(PSK/AES/AES) 
+                          GIN-3g 24:de:c6:e0:91:52 -78  161,-1  Y  US WPA2(PSK/AES/AES) 
+                        Google-A d8:c7:c8:d7:72:90 -53  161,-1  Y  US WPA2(802.1x/AES/AES) 
+                     GIN-2g-poor d8:c7:c8:d7:72:96 -53  161,-1  Y  US WPA2(PSK/AES/AES) 
+                          GIN-2g d8:c7:c8:d7:72:95 -53  161,-1  Y  US WPA2(PSK/AES/AES) 
+                     GoogleGuest d8:c7:c8:d7:72:91 -52  161,-1  Y  US NONE
+                        Google-A d8:c7:c8:d7:73:d0 -65  157,+1  Y  US WPA2(802.1x/AES/AES) 
+                     GIN-2g-poor d8:c7:c8:d7:73:d6 -65  157,+1  Y  US WPA2(PSK/AES/AES) 
+                        Google-A 6c:f3:7f:b1:a1:90 -75  157,+1  Y  US WPA2(802.1x/AES/AES) 
+                          GIN-2g 6c:f3:7f:b1:a1:95 -76  157,+1  Y  US WPA2(PSK/AES/AES) 
+                     GIN-2g-poor 6c:f3:7f:b1:a1:96 -76  157,+1  Y  US WPA2(PSK/AES/AES) 
+                          GIN-2g d8:c7:c8:d7:73:d5 -65  157,+1  Y  US WPA2(PSK/AES/AES) 
+                          GIN-3g d8:c7:c8:d7:73:d2 -65  157,+1  Y  US WPA2(PSK/AES/AES) 
+                     GoogleGuest d8:c7:c8:d7:73:d1 -65  157,+1  Y  US NONE
+                     GoogleGuest 6c:f3:7f:b1:a1:91 -72  157,+1  Y  US NONE
+                      GoogleWiFi d8:c7:c8:d7:72:d4 -65  153,-1  Y  US WPA2(802.1x/AES/AES) 
+                     xfinitywifi dc:a5:f4:b8:f1:ce -87  149,+1  Y  US NONE
+                        Google-A d8:c7:c8:d7:72:d0 -67  153,-1  Y  US WPA2(802.1x/AES/AES) 
+                     GIN-2g-poor d8:c7:c8:d7:72:d6 -67  153,-1  Y  US WPA2(PSK/AES/AES) 
+                          GIN-2g d8:c7:c8:d7:72:d5 -67  153,-1  Y  US WPA2(PSK/AES/AES) 
+                          GIN-3g d8:c7:c8:d7:72:d2 -67  153,-1  Y  US WPA2(PSK/AES/AES) 
+                     GoogleGuest d8:c7:c8:d7:72:d1 -67  153,-1  Y  US NONE
+                  NETGEAR20-5G-2 e8:fc:af:fa:a1:8a -50  153,-1  Y  -- WPA2(PSK/AES/AES) 
diff --git a/wifitables/testdata/wifi-1426545351.85-0085/mcs b/wifitables/testdata/wifi-1426545351.85-0085/mcs
new file mode 100644
index 0000000..2775caf
--- /dev/null
+++ b/wifitables/testdata/wifi-1426545351.85-0085/mcs
@@ -0,0 +1,82 @@
+ .  23  15   .   .  23  15   .   .  23  15   .   .  23  15   .   .  23  15   .   .  23  21   .   . 
+23   .  15   .  23  15   .   .  23  15   .   .  23  15   .   .  23  15   .   .   .  23  15   .   . 
+23  15  15   .  23  23  15   .  15   .   .  15   .   .   .   .   .   .   .   .   .   .   .  15   . 
+15  15  15  15   .   .  23  23  23  23  15   .  15   .   .  23  23   .  23  23  15   .  15   .   . 
+23  23  15   .  15   .  15   .   .  23   .  23  23  15   .  15   .   .  23  15   .   .   .   .   . 
+ .  15  15   .  15  15  15   .   .  23  23  23  15   .  15  15   .   .  23  23  23   .  23  23  15 
+ .  15   .   .  23  23  21   .  15  15   .   .  23  15   .   .   .   .   .   .   .   .   .   .   . 
+ .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 
+ .  15   .  15   .  15  15   .   .  23  23  23   .  23  15   .   .  23  23  15   .  15   .   .  23 
+15   .  15   .   .  23  15  15   .  15  15  15   .   .  23   .  23  23  15   .  15   .   .   .  23 
+23  15   .  15   .  15  15   .   .  23   .  23  23  23  23  23  23  23  23  23  23  15   .   .  23 
+23  15  15   .  15  15   .   .  23  23  23  23  23  23  23  23  23  23  23  23  23  23  15   .  15 
+15   .  15  15   .   .   .   .  23  23  23  23  23  23  23  23   .  23  23  23  23   .  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23   .  23  23  23  23  23  23  23  23  15   .   . 
+15  15  15  15   .  15  15   .  15  15   .  15   .   .  23  23  23  23  21   .  15  15   .   .   . 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23   .   .  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23   .  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  15   .  15  15  15  15  15  15  15  15  15  15  15  15  15  15  15  15  15  15  15  15  15   . 
+ .  23  23  23  23  23  23  23  23  23  23  15   .   .   .  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23   .  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23  15   .   .  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23   .  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23   .  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  15   .  15  15  15  15  15  15  15  15  15 
+15  15  15  15  15  15   .  15  15  15  15  15  15  15  15   .  15  15  15   .   .  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  20  20  20   .  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23   .  23  23  23  23  23  23  23  23  23  23  23  23  15   .  15  15  15  15   .   .  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  15  15  15  15  15  15  15  15   . 
+ .  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  15  15  15  15  15 
+ .   .  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  15  15  15  15  15  15   .   . 
+23  23  23  23  23  23  23  23  23  23  23  15  15  15  15   .   .  23  23  23  23  23  23  23  15 
+15  15  15  15  15  15   .   .  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  15  15  15   .   .  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  15  15 
+15  15  15   .  15   .   .  23  23  23  23  23  23  23  23  23  23  23  23  23  23  15  15  15  15 
+15  15   .   .  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+14  14  14  14   .   .  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23   .  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  14  14  14  14  14   .   .  14  14  14  14  14  14  14  14  14  14  14 
+14  14  14  14  14  14  14  14  14  14  14  14   .   .  23  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  14   .  14   .   .  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  14   .   .  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  14   .  20   .   .  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  14   .  14   .   .  23  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23  23  14   .  14  14   .   .  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23   .  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23   .  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23   .  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  14   .  14  14  14  14  14   .   .  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  14   .  14   .   .  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  14   .  14   .   .  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  14   .  14   .   .  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  14   .   .  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23   .  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  14   .  14   .   .  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20 
+20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  14   .   .  23  23  23  23 
+23  23  23  23  14   .  14  14  14  14   .   .  23  23  23  23  23  23  23  23  23  23  23  23  14 
+ .  14   .   .  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  15   .  15   .   .  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  15   .   .  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  15   .   .   .  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23   .  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  15  15   .  15   .  14   .   .  23  23  14   .  14   .   .  14   .  14  14   .  13   .   .  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23  23  23  23  23  23  23   .  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23 
+23  23  13   .   .  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  23  13  13  13 
+13  13   .   .   .  13   .   .  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20 
+20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  
\ No newline at end of file
diff --git a/wifitables/testdata/wifi-1426545351.85-0085/mcserr b/wifitables/testdata/wifi-1426545351.85-0085/mcserr
new file mode 100644
index 0000000..639dbc7
--- /dev/null
+++ b/wifitables/testdata/wifi-1426545351.85-0085/mcserr
@@ -0,0 +1,5 @@
+tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
+listening on en0, link-type IEEE802_11_RADIO (802.11 plus radiotap header), capture size 65535 bytes
+2352 packets captured
+7333 packets received by filter
+1187 packets dropped by kernel