Merge "/bin/wifi:  Fix a MAC parsing bug."
diff --git a/cmds/dhcpvendorlookup.gperf b/cmds/dhcpvendorlookup.gperf
index 884625a..e1e0c40 100644
--- a/cmds/dhcpvendorlookup.gperf
+++ b/cmds/dhcpvendorlookup.gperf
@@ -46,10 +46,10 @@
 MicroChip Network Stack| "Microchip board", "Microchip board"
 Motorola_AP| "Motorola Wifi AP", "Motorola Wifi AP"
 OptiIpPhone| "Siemens IP Phone", "Siemens IP Phone"
-PS3| "Sony Playstation", "PS3"
-PS4| "Sony Playstation", "PS4"
-PS Vita| "Sony Playstation", "PS-Vita"
-PS Vita TV| "Sony Playstation", "PS-Vita"
+PS3| "Playstation", "3"
+PS4| "Playstation", "4"
+PS Vita| "Playstation", "Vita"
+PS Vita TV| "Playstation", "Vita"
 Ruckus CPE| "Ruckus Wifi AP", "Ruckus Wifi AP"
 SAMSUNG Network Printer| "Samsung Printer", "Samsung Printer"
 SEC_ITP| "Samsung IP Phone", "Samsung IP Phone"
diff --git a/taxonomy/.gitignore b/taxonomy/.gitignore
index b1c9bfa..4f84e9a 100644
--- a/taxonomy/.gitignore
+++ b/taxonomy/.gitignore
@@ -1,2 +1,3 @@
 /build
 tax_signature
+anonymize_pcap
diff --git a/taxonomy/Makefile b/taxonomy/Makefile
index 1acd7b2..7de62f7 100644
--- a/taxonomy/Makefile
+++ b/taxonomy/Makefile
@@ -2,11 +2,14 @@
 
 all: build
 
-test: tax_signature
+test: tax_signature anonymize_pcap
 	set -e; \
 	for d in $(wildcard tests/*_test.py); do \
 		PYTHONPATH=. $(PYTHON) $$d; \
 	done
+	for d in $(wildcard tests/*_test.sh); do \
+		$$d; \
+	done
 	PYTHONPATH=. $(PYTHON) ./pcaptest.py
 
 PREFIX=/usr
@@ -31,12 +34,13 @@
 
 CFLAGS += -g -Os -Wall -Werror $(EXTRACFLAGS)
 LDFLAGS += $(EXTRALDFLAGS)
-
-SRCS = tax_signature.c
 INCS =
 
-tax_signature: $(SRCS) $(INCS)
-	$(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) -lpcap
+tax_signature: tax_signature.o $(INCS)
+	$(CC) $(CFLAGS) -I$(HOSTDIR)/usr/include tax_signature.c -o $@ $(LDFLAGS) -lpcap
+
+anonymize_pcap: anonymize_pcap.o $(INCS)
+	$(CC) $(CFLAGS) -I$(HOSTDIR)/usr/include anonymize_pcap.c -o $@ $(LDFLAGS) -lpcap
 
 clean:
-	rm -f tax_signature *.o
+	rm -f tax_signature anonymize_pcap *.o
diff --git a/taxonomy/anonymize_pcap.c b/taxonomy/anonymize_pcap.c
new file mode 100644
index 0000000..a68c075
--- /dev/null
+++ b/taxonomy/anonymize_pcap.c
@@ -0,0 +1,322 @@
+/*
+ * Copyright 2016 Google Inc. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <fcntl.h>
+#include <limits.h>
+#include <linux/audit.h>
+#include <linux/filter.h>
+#include <linux/seccomp.h>
+#include <pcap.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/prctl.h>
+#include <sys/resource.h>
+#include <sys/stat.h>
+#include <sys/syscall.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <endian.h>
+
+typedef uint8_t u8;
+typedef uint16_t u16;
+typedef uint32_t u32;
+#define le_to_host16  le16toh
+#define le_to_host32  le32toh
+
+struct ieee80211_radiotap_hdr {
+  uint8_t it_version;
+  uint8_t it_pad;
+  uint16_t it_len;
+  uint32_t it_present;
+} __attribute__ ((packed));
+
+struct ieee80211_mgmt {
+  uint16_t frame_control;
+  uint16_t duration;
+  uint8_t da[6];
+  uint8_t sa[6];
+  uint8_t bssid[6];
+  uint16_t seq_ctrl;
+  union {
+    struct {
+      uint16_t cap;
+      uint16_t listen;
+      uint8_t variable[0];
+    } __attribute__ ((packed)) assoc_req;
+    struct {
+      uint8_t variable[0];
+    } __attribute__ ((packed)) probe_req;
+    struct {
+      uint32_t timestamp1;
+      uint32_t timestamp2;
+      uint16_t beacon_interval;
+      uint16_t capabilities;
+      uint8_t variable[0];
+    } __attribute__ ((packed)) probe_resp;
+    struct {
+      uint32_t timestamp1;
+      uint32_t timestamp2;
+      uint16_t beacon_interval;
+      uint16_t capabilities;
+      uint8_t variable[0];
+    } __attribute__ ((packed)) beacon;
+  } u;
+} __attribute__ ((packed));
+
+
+#define ASSOC_REQ         0
+#define PROBE_REQ         4
+#define PROBE_RESP        5
+#define BEACON            8
+#define AUTH_REQ          11
+
+
+int usage(const char *progname)
+{
+  fprintf(stderr, "usage: %s -f pcap\n", progname);
+  exit(1);
+}
+
+
+/* from the very helpful https://eigenstate.org/notes/seccomp */
+void enable_seccomp()
+{
+  #define ArchField offsetof(struct seccomp_data, arch)
+  #define Allow(syscall) \
+    BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, __NR_##syscall, 0, 1), \
+    BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_ALLOW)
+
+  struct sock_filter filter[] = {
+    /* validate arch */
+#ifdef __x86_64__
+    BPF_STMT(BPF_LD+BPF_W+BPF_ABS, ArchField),
+    BPF_JUMP( BPF_JMP+BPF_JEQ+BPF_K, AUDIT_ARCH_X86_64, 1, 0),
+    BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_KILL),
+#else
+#error Please add support for this architecture to the SECCOMP BPF code.
+#endif
+
+    /* load syscall */
+    BPF_STMT(BPF_LD+BPF_W+BPF_ABS, offsetof(struct seccomp_data, nr)),
+
+    /* list of allowed syscalls */
+    Allow(exit_group),
+    Allow(read),
+    Allow(rename),
+    Allow(write),
+    Allow(stat),
+    Allow(close),
+    Allow(munmap),
+    Allow(mmap),
+    Allow(fstat),
+
+    /* and if we don't match above, die */
+    BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_KILL),
+  };
+
+  struct sock_fprog filterprog = {
+    .len = sizeof(filter)/sizeof(filter[0]),
+    .filter = filter
+  };
+
+  /* set up the restricted environment */
+  if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0)) {
+    perror("prctl(PR_SET_NO_NEW_PRIVS)");
+    exit(1);
+  }
+  if (prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &filterprog) == -1) {
+    perror("prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER)");
+    exit(1);
+  }
+}
+
+
+int is_broadcast_mac(uint8_t *mac)
+{
+  if (mac[0] == 0xff && mac[1] == 0xff && mac[2] == 0xff &&
+      mac[3] == 0xff && mac[4] == 0xff && mac[5] == 0xff) {
+    return 1;
+  }
+
+  return 0;
+}
+
+
+void rewrite_ssid(uint8_t *ie, size_t ie_len)
+{
+  while (ie_len >= 2) {
+    u8 id, elen;
+
+    id = *ie++;
+    elen = *ie++;
+    ie_len -= 2;
+
+    if (elen > ie_len) {
+      break;
+    }
+
+    /* Replace SSID with 'XXXXXXXX' */
+    if ((id == 0) && (elen > 0)) {
+      int i;
+      for (i = 0; i < elen; ++i) {
+        ie[i] = 'X';
+      }
+    }
+
+    ie += elen;
+    ie_len -= elen;
+  }
+}
+
+
+int main(int argc, char **argv)
+{
+  int opt;
+  pcap_t *handle;
+  pcap_dumper_t *outhandle;
+  char errbuf[PCAP_ERRBUF_SIZE];
+  struct rlimit lim;
+  struct pcap_pkthdr hdr;
+  const uint8_t *pkt;
+  const char *filename = NULL;
+  char outfile[PATH_MAX];
+  struct stat in_st, out_st;
+  FILE *pcapfp, *outfp;
+
+  while ((opt = getopt(argc, argv, "f:")) != -1) {
+    switch(opt){
+      case 'f':
+        filename = optarg;
+        break;
+      default:
+        usage(argv[0]);
+        break;
+    }
+  }
+
+  if (filename == NULL) {
+    usage(argv[0]);
+  }
+  if ((pcapfp = fopen(filename, "rb")) == NULL) {
+    perror("fopen(pcapfile)");
+    exit(1);
+  }
+
+  snprintf(outfile, sizeof(outfile), "%s.anon", filename);
+  if ((outfp = fopen(outfile, "wb")) == NULL) {
+    perror("fopen(outfile)");
+    exit(1);
+  }
+
+  /* No more files should be opened after this. */
+  if (getrlimit(RLIMIT_NOFILE, &lim)) {
+    perror("getrlimit");
+    exit(1);
+  }
+  lim.rlim_cur = 0;
+  if (setrlimit(RLIMIT_NOFILE, &lim)) {
+    perror("setrlimit");
+    exit(1);
+  }
+
+  /* We're about to parse packets, limit damage if we process
+   * something malicious. */
+  enable_seccomp();
+
+  if ((handle = pcap_fopen_offline(pcapfp, errbuf)) == NULL) {
+    perror("Cannot open pcap file");
+    exit(1);
+  }
+  if (pcap_datalink(handle) != DLT_IEEE802_11_RADIO) {
+    fprintf(stderr, "pcap file is not DLT_IEEE802_11_RADIO");
+    exit(1);
+  }
+
+  if ((outhandle = pcap_dump_fopen(handle, outfp)) == NULL) {
+    perror("Cannot open output pcap file");
+    exit(1);
+  }
+
+  while ((pkt = pcap_next(handle, &hdr)) != NULL) {
+    struct ieee80211_radiotap_hdr *rtap;
+    struct ieee80211_mgmt *mlme;
+    uint16_t fc, type, subtype;
+
+    rtap = (struct ieee80211_radiotap_hdr *)pkt;
+    mlme = (struct ieee80211_mgmt *)(pkt + rtap->it_len);
+    fc = le_to_host16(mlme->frame_control);
+    type = (fc >> 2) & 0x0003;
+    subtype = (fc >> 4) & 0x000f;
+
+    if (type == 0 && subtype == ASSOC_REQ) {
+      uint8_t *ie = mlme->u.assoc_req.variable;
+      size_t ie_len = hdr.caplen - (ie - (uint8_t *)mlme) - rtap->it_len - 4;
+      rewrite_ssid(ie, ie_len);
+    }
+
+    if (type == 0 && subtype == PROBE_REQ) {
+      uint8_t *ie = mlme->u.probe_req.variable;
+      size_t ie_len = hdr.caplen - (ie - (uint8_t *)mlme) - rtap->it_len - 4;
+      rewrite_ssid(ie, ie_len);
+    }
+
+    if (type == 0 && subtype == PROBE_RESP) {
+      uint8_t *ie = mlme->u.probe_resp.variable;
+      size_t ie_len = hdr.caplen - (ie - (uint8_t *)mlme) - rtap->it_len - 4;
+      rewrite_ssid(ie, ie_len);
+    }
+
+    if (type == 0 && subtype == BEACON) {
+      uint8_t *ie = mlme->u.beacon.variable;
+      size_t ie_len = hdr.caplen - (ie - (uint8_t *)mlme) - rtap->it_len - 4;
+      rewrite_ssid(ie, ie_len);
+    }
+
+    /* Anonymize the MAC addresses (but preserve OUI). */
+    mlme->sa[3] = mlme->sa[4] = mlme->sa[5] = 0;
+    if (!is_broadcast_mac(mlme->da)) {
+      mlme->da[3] = mlme->da[4] = mlme->da[5] = 0;
+    }
+    if (!is_broadcast_mac(mlme->bssid)) {
+      mlme->bssid[3] = mlme->bssid[4] = mlme->bssid[5] = 0;
+    }
+
+    pcap_dump((u_char *)outhandle, &hdr, pkt);
+  }
+
+  pcap_dump_close(outhandle);
+
+  if (stat(filename, &in_st) || stat(outfile, &out_st)) {
+    perror("stat");
+    exit(1);
+  }
+  if (in_st.st_size != out_st.st_size) {
+    fprintf(stderr, "Output truncated: got %jd bytes, want %jd bytes",
+        out_st.st_size, in_st.st_size);
+    exit(1);
+  }
+  if (rename(outfile, filename)) {
+    perror("rename");
+    exit(1);
+  }
+
+  exit(0);
+}
diff --git a/taxonomy/ethernet.py b/taxonomy/ethernet.py
index 295652d..f73cb9e 100644
--- a/taxonomy/ethernet.py
+++ b/taxonomy/ethernet.py
@@ -90,6 +90,7 @@
     '84:7a:88': ['htc'],
     '90:e7:c4': ['htc'],
     'a0:f4:50': ['htc'],
+    'ac:37:43': ['htc'],
     'b4:ce:f6': ['htc'],
     'd8:b3:77': ['htc'],
     'e8:99:c4': ['htc'],
diff --git a/taxonomy/pcaptest.py b/taxonomy/pcaptest.py
index 116b4d1..fc5806e 100644
--- a/taxonomy/pcaptest.py
+++ b/taxonomy/pcaptest.py
@@ -65,9 +65,17 @@
   ('Amazon Kindle', './testdata/pcaps/Amazon Kindle Touch 2.4GHz Specific Probe B011.pcap'),
   ('Amazon Kindle', './testdata/pcaps/Amazon Kindle Voyage 2.4GHz B013.pcap'),
   ('Amazon Kindle', './testdata/pcaps/Amazon Kindle Voyage 2.4GHz B054.pcap'),
-  ('iPad 1st or 2nd gen', './testdata/pcaps/iPad 1st gen 5GHz.pcap'),
-  ('iPad 1st or 2nd gen', './testdata/pcaps/iPad 2nd gen 5GHz.pcap'),
-  ('iPhone 6/6+', './testdata/pcaps/iPhone 6 5GHz iOS 9.pcap'),
+  ('iPad 1st or 2nd gen', './testdata/pcaps/iPad 1st gen 5GHz GFRG210 iOS5.1.1 MB292LL Specific Probe.pcap'),
+  ('iPad 1st or 2nd gen', './testdata/pcaps/iPad 2nd gen 5GHz GFRG210 iOS9.3.5 FC979LL Specific Probe.pcap'),
+  ('iPad 1st or 2nd gen', './testdata/pcaps/iPad 2nd gen 5GHz Google Wifi iOS9.3.5 FC979LL Specific Probe.pcap'),
+  ('iPad 1st or 2nd gen', './testdata/pcaps/iPad 1st gen 5GHz OnHub iOS5.1.1 MB292LL Broadcast Probe.pcap'),
+  ('iPad 1st or 2nd gen', './testdata/pcaps/iPad 1st gen 5GHz Google Wifi iOS5.1.1 MB292LL Broadcast Probe.pcap'),
+  ('iPad 1st or 2nd gen', './testdata/pcaps/iPad 2nd gen 5GHz OnHub iOS9.3.5 FC979LL Broadcast Probe.pcap'),
+  ('iPad 1st or 2nd gen', './testdata/pcaps/iPad 2nd gen 5GHz OnHub iOS9.3.5 FC979LL Specific Probe.pcap'),
+  ('iPad 1st or 2nd gen', './testdata/pcaps/iPad 2nd gen 5GHz GFRG210 iOS9.3.5 FC979LL Broadcast Probe.pcap'),
+  ('iPad 1st or 2nd gen', './testdata/pcaps/iPad 1st gen 5GHz GFRG210 iOS5.1.1 MB292LL Broadcast Probe.pcap'),
+  ('iPad 1st or 2nd gen', './testdata/pcaps/iPad 2nd gen 5GHz Google Wifi iOS9.3.5 FC979LL Broadcast Probe.pcap'),
+  ('iPhone 6/6+', './testdata/pcaps/iPhone 6 5GHz GFRG210 iOS 9 MG552LL.pcap'),
   ('iPhone 6/6+', './testdata/pcaps/iPhone 6+ 5GHz iOS 9.pcap'),
   ('iPhone 6s/6s+', './testdata/pcaps/iPhone 6s 2.4GHz.pcap'),
   ('iPhone 6s/6s+', './testdata/pcaps/iPhone 6s 5GHz.pcap'),
@@ -78,6 +86,24 @@
   ('iPhone 6s/6s+', './testdata/pcaps/iPhone 6s+ 2.4GHz iOS 10.0.2 Specific Probe.pcap'),
   ('iPhone 6s/6s+', './testdata/pcaps/iPhone 6s+ 5GHz.pcap'),
   ('iPhone 6s/6s+', './testdata/pcaps/iPhone 6s+ 5GHz RRM.pcap'),
+  ('iPhone 6s/6s+', './testdata/pcaps/iPhone 6s 2.4GHz GFRG210 iOS10.2 MKRD2LL Broadcast Probe.pcap'),
+  ('iPhone 6s/6s+', './testdata/pcaps/iPhone 6s 2.4GHz GFRG210 iOS10.2 MKRD2LL Specific Probe.pcap'),
+  ('iPhone 6s/6s+', './testdata/pcaps/iPhone 6s 2.4GHz OnHub iOS10.2 MKRD2LL Broadcast Probe.pcap'),
+  ('iPhone 6s/6s+', './testdata/pcaps/iPhone 6s 2.4GHz Google Wifi iOS10.2 MKRD2LL Broadcast Probe.pcap'),
+  ('iPhone 6s/6s+', './testdata/pcaps/iPhone 6s 2.4GHz OnHub iOS10.2 MKRD2LL Specific Probe.pcap'),
+  ('iPhone 6s/6s+', './testdata/pcaps/iPhone 6s 2.4GHz Google Wifi iOS10.2 MKRD2LL Specific Probe.pcap'),
+  ('iPhone 6s/6s+', './testdata/pcaps/iPhone 6s+ 2.4GHz Google Wifi iOS10.2 MKV22LL Broadcast Probe.pcap'),
+  ('iPhone 6s/6s+', './testdata/pcaps/iPhone 6s+ 2.4GHz OnHub iOS10.2 MKV22LL Broadcast Probe.pcap'),
+  ('iPhone 6s/6s+', './testdata/pcaps/iPhone 6s+ 2.4GHz OnHub iOS10.2 MKV22LL Specific Probe.pcap'),
+  ('iPhone 6s/6s+', './testdata/pcaps/iPhone 6s+ 2.4GHz Google Wifi iOS10.2 MKV22LL Specific Probe.pcap'),
+  ('iPhone 6s/6s+', './testdata/pcaps/iPhone 6s+ 2.4GHz GFRG210 iOS10.2 MKV22LL Broadcast Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7 2.4GHz GFRG210 iOS10.2 MN8H2LL Broadcast Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7+ 2.4GHz.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7 2.4GHz GFRG210 iOS10.2 MN8H2LL Specific Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7 2.4GHz Google Wifi iOS10.2 MN8H2LL Broadcast Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7 2.4GHz OnHub iOS10.2 MN8H2LL Specific Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7 2.4GHz OnHub iOS10.2 MN8H2LL Broadcast Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7 2.4GHz Google Wifi iOS10.2 MN8H2LL Specific Probe.pcap'),
   ('iPod Touch 1st or 2nd gen', './testdata/pcaps/iPod Touch 1st gen 2.4GHz.pcap'),
   ('Moto G or Moto X', './testdata/pcaps/Moto X 2.4GHz Specific.pcap'),
   ('Moto G or Moto X', './testdata/pcaps/Moto X 2.4GHz.pcap'),
@@ -88,6 +114,16 @@
   ('Roku 4 or TV', './testdata/pcaps/Roku 4 5GHz.pcap'),
   ('Samsung Galaxy Note or S2+', './testdata/pcaps/Samsung Galaxy S2+ 5GHz.pcap'),
   ('Samsung Galaxy Note or S2+', './testdata/pcaps/Samsung Galaxy Note 5GHz.pcap'),
+  ('Samsung Galaxy Note or S2+', './testdata/pcaps/Samsung Galaxy Note 5GHz GFRG210 An4.0.4 SGH-T879 Broadcast Probe.pcap'),
+  ('Samsung Galaxy Note or S2+', './testdata/pcaps/Samsung Galaxy Note 5GHz GFRG210 An4.0.4 SGH-T879 Specific Probe.pcap'),
+  ('Samsung Galaxy Note or S2+', './testdata/pcaps/Samsung Galaxy Note 5GHz OnHub An4.0.4 SGH-T879 Broadcast Probe.pcap'),
+  ('Samsung Galaxy Note or S2+', './testdata/pcaps/Samsung Galaxy Note 5GHz OnHub An4.0.4 SGH-T879 Specific Probe.pcap'),
+  ('Samsung Galaxy Note or S2+', './testdata/pcaps/Samsung Galaxy Note 5GHz Google Wifi An4.0.4 SGH-T879 Specific Probe.pcap'),
+  ('Samsung Galaxy Note or S2+', './testdata/pcaps/Samsung Galaxy Note 5GHz Google Wifi An4.0.4 SGH-T879 Broadcast Probe.pcap'),
+  ('Samsung Galaxy Note 5 or S7 Edge', './testdata/pcaps/Samsung Galaxy S7 Edge 5GHz GFRG210 An6.0.1 SM-G935F Specific Probe.pcap'),
+  ('Samsung Galaxy Note 5 or S7 Edge', './testdata/pcaps/Samsung Galaxy S7 Edge 5GHz GFRG210 An6.0.1 SM-G935F Broadcast Probe.pcap'),
+  ('Samsung Galaxy Note 5 or S7 Edge', './testdata/pcaps/Samsung Galaxy Note 5 5GHz GFRG210 An6.0.1 SM-N920C Broadcast Probe.pcap'),
+  ('Samsung Galaxy Note 5 or S7 Edge', './testdata/pcaps/Samsung Galaxy Note 5 5GHz GFRG210 An6.0.1 SM-N920C Specific Probe.pcap'),
   ('Samsung Galaxy S2 or Infuse', './testdata/pcaps/Samsung Galaxy S2 2.4GHz.pcap'),
   ('Samsung Galaxy S2 or Infuse', './testdata/pcaps/Samsung Infuse 2.4GHz.pcap'),
   ('Sony Xperia Z4 or Z5', './testdata/pcaps/Sony Xperia Z5 5GHz.pcap'),
diff --git a/taxonomy/testdata/anonymize_pcap/chromebook_unanonymized.pcap b/taxonomy/testdata/anonymize_pcap/chromebook_unanonymized.pcap
new file mode 100644
index 0000000..9cb877c
--- /dev/null
+++ b/taxonomy/testdata/anonymize_pcap/chromebook_unanonymized.pcap
Binary files differ
diff --git a/taxonomy/testdata/dhcp.leases b/taxonomy/testdata/dhcp.leases
index f46e1f1..4d6c71c 100644
--- a/taxonomy/testdata/dhcp.leases
+++ b/taxonomy/testdata/dhcp.leases
@@ -11,11 +11,11 @@
 duid 00:01:00:01:00:00:11:03:f4:f5:e8:00:00:01
 1432237016 c8:69:cd:5e:b5:43 192.168.42.5 Apple-TV *
 1432237016 6c:29:95:7c:25:fe 192.168.42.6 * *
-1432237016 b0:34:95:02:66:83 192.168.42.7 iPaad-4th-gen *
+1432237016 b0:34:95:00:00:00 192.168.42.7 iPaad-Air-1st-gen *
 1432237016 04:69:f8:00:00:00 192.168.42.8 iPad-Air-2nd-gen *
-1432237016 1c:e6:2b:9b:41:91 192.168.42.9 iPaad-Mini-1st-gen *
+1432237016 1c:e6:2b:00:00:00 192.168.42.9 iPaad-Mini-1st-gen *
 1432237016 84:8e:0c:99:48:d5 192.168.42.10 iPaad-Mini-2nd-gen *
-1432237016 24:ab:81:e4:74:bc 192.168.42.11 iPhoone-4 *
+1432237016 24:ab:81:00:00:00 192.168.42.11 iPhoone-4 *
 1432237016 54:26:96:29:3e:39 192.168.42.12 iPhoone-5 *
 1432237016 54:26:96:27:8a:10 192.168.42.12 iPhoone-5 *
 1432237016 f0:db:e2:5e:a3:1a 192.168.42.13 iPhoone-6 *
@@ -30,51 +30,54 @@
 1432237016 08:05:81:21:68:57 192.168.42.21 Roku4 *
 1432237016 5c:f6:dc:16:6a:17 192.168.42.22 SamsungSmartTV *
 1432237016 6c:40:08:00:00:00 192.168.42.23 iPhoone-5s *
-1432237016 00:23:12:28:de:6e 192.168.42.24 AppleTV1
-1432237016 28:cf:da:24:f4:ab 192.168.42.25 AppleTV2
-1432237016 68:64:4b:11:ce:2b 192.168.42.26 AppleTV3A
-1432237016 b8:ff:61:85:9f:39 192.168.42.27 iPaad-2
-1432237016 fc:25:3f:d7:de:5a 192.168.42.28 iPaad-3
-1432237016 9c:f3:87:cc:38:1e 192.168.42.29 MacBoookAir2014
-1432237016 34:23:87:5c:86:39 192.168.42.30 HPChromeboook
-1432237016 34:af:2c:ff:80:ef 192.168.42.31 WiiU
-1432237016 00:26:4a:e6:b7:4e 192.168.42.32 iPhoone-3GS
-1432237016 d0:23:db:a2:e5:02 192.168.42.33 iPhoone-4s
-1432237016 00:26:4a:c2:89:58 192.168.42.33 iPhoone-3GS
-1432237016 74:c2:46:fc:bb:d6 192.168.42.34 AmazonDashButton
-1432237016 04:0c:ce:cf:40:2c 192.168.42.35 MacbookAir2010
-1432237016 8c:2d:aa:9c:ce:0f 192.168.42.36 iPood-5
-1432237016 dc:86:d8:a0:c8:de 192.168.42.37 iPhoone-5c
-1432237016 54:ae:27:32:ef:7f 192.168.42.38 iPaad-Air-1
-1432237016 00:1e:c2:24:7f:10 192.168.42.39 iPhoone-2
-1432237016 00:23:12:99:30:93 192.168.42.39 iPhoone-3
-1432237016 34:c8:03:89:d3:e8 192.168.42.40 Nokia-Lumia-920
-1432237016 14:91:82:07:c7:ed 192.168.42.41 WeMo
-1432237016 08:05:81:c5:1f:31 192.168.42.42 Roku3
-1432237016 5c:93:a2:00:00:00 192.168.42.43 Playstation 4
-1432237016 e0:c7:67:00:00:00 192.168.42.44 iPhoone SE
-1432237016 a4:8d:3b:00:00:00 192.168.42.45 VizioSmartTV
-1432237016 00:11:d9:00:00:00 192.168.42.46 TiVoBOLT
-1432237016 ac:3a:7a:00:00:00 192.168.42.47 Roku3-4230
-1432237016 d4:63:fe:00:00:00 192.168.42.48 LGSmartTV
-1432237016 bc:14:85:00:00:00 192.168.42.49 SamsungTizenTV
-1432237016 78:bd:bc:00:00:00 192.168.42.50 SamsungTizenTV
-1432237016 54:88:0e:00:00:00 192.168.42.51 SamsungLED75TV
-1432237016 bc:30:7d:00:00:00 192.168.42.52 PanasonicTV
-1432237016 60:12:8b:00:00:00 192.168.42.53 CanonPixma
-1432237016 88:87:17:00:00:00 192.168.42.54 CanonPixma
-1432237016 cc:95:d7:00:00:00 192.168.42.55 VizioTV
-1432237016 c0:f2:fb:00:00:00 192.168.42.56 iPaadMini3
-1432237016 04:52:f3:00:00:00 192.168.42.57 iPaadMini4
-1432237016 a4:d1:d2:00:00:00 192.168.42.58 iPaadOldiOS
-1432237016 70:48:0f:00:00:00 192.168.42.59 iPadPro12_9
-1432237016 6c:c2:17:00:00:00 192.168.42.60 HPPrinter
-1432237016 dc:2b:2a:00:00:00 192.168.42.61 iPhoone 6s+
-1432237016 2c:33:61:00:00:00 192.168.42.62 iPhoone 7
-1432237016 58:bd:a3:00:00:00 192.168.42.63 Wii
-1432237016 28:0d:fc:00:00:00 192.168.42.64 Playstation 3
-1432237016 2c:1f:23:00:00:00 192.168.42.65 iPaadAir2ndGen
-1432237016 e0:b5:2d:00:00:00 192.168.42.66 iPhoone-6+
-1432237016 6c:72:e7:00:00:00 192.168.42.67 iPhoone-6s
-1432237016 f0:db:e2:00:00:00 192.168.42.68 iPhoone-6
-1432237016 b8:53:ac:00:00:00 192.168.42.67 iPhoone-7
+1432237016 00:23:12:28:de:6e 192.168.42.24 AppleTV1 *
+1432237016 28:cf:da:24:f4:ab 192.168.42.25 AppleTV2 *
+1432237016 68:64:4b:11:ce:2b 192.168.42.26 AppleTV3A *
+1432237016 b8:ff:61:00:00:00 192.168.42.27 iPaad-2 *
+1432237016 fc:25:3f:00:00:00 192.168.42.28 iPaad-3 *
+1432237016 9c:f3:87:cc:38:1e 192.168.42.29 MacBoookAir2014 *
+1432237016 34:23:87:5c:86:39 192.168.42.30 HPChromeboook *
+1432237016 34:af:2c:ff:80:ef 192.168.42.31 WiiU *
+1432237016 00:26:4a:e6:b7:4e 192.168.42.32 iPhoone-3GS *
+1432237016 d0:23:db:a2:e5:02 192.168.42.33 iPhoone-4s *
+1432237016 00:26:4a:c2:89:58 192.168.42.33 iPhoone-3GS *
+1432237016 74:c2:46:fc:bb:d6 192.168.42.34 AmazonDashButton *
+1432237016 04:0c:ce:cf:40:2c 192.168.42.35 MacbookAir2010 *
+1432237016 8c:2d:aa:9c:ce:0f 192.168.42.36 iPood-5 *
+1432237016 dc:86:d8:a0:c8:de 192.168.42.37 iPhoone-5c *
+1432237016 54:ae:27:32:ef:7f 192.168.42.38 iPaad-Air-1 *
+1432237016 00:1e:c2:24:7f:10 192.168.42.39 iPhoone-2 *
+1432237016 00:23:12:99:30:93 192.168.42.39 iPhoone-3 *
+1432237016 34:c8:03:89:d3:e8 192.168.42.40 Nokia-Lumia-920 *
+1432237016 14:91:82:07:c7:ed 192.168.42.41 WeMo *
+1432237016 08:05:81:c5:1f:31 192.168.42.42 Roku3 *
+1432237016 5c:93:a2:00:00:00 192.168.42.43 Playstation 4 *
+1432237016 e0:c7:67:00:00:00 192.168.42.44 iPhoone SE *
+1432237016 a4:8d:3b:00:00:00 192.168.42.45 VizioSmartTV *
+1432237016 00:11:d9:00:00:00 192.168.42.46 TiVoBOLT *
+1432237016 ac:3a:7a:00:00:00 192.168.42.47 Roku3-4230 *
+1432237016 d4:63:fe:00:00:00 192.168.42.48 LGSmartTV *
+1432237016 bc:14:85:00:00:00 192.168.42.49 SamsungTizenTV *
+1432237016 78:bd:bc:00:00:00 192.168.42.50 SamsungTizenTV *
+1432237016 54:88:0e:00:00:00 192.168.42.51 SamsungLED75TV *
+1432237016 bc:30:7d:00:00:00 192.168.42.52 PanasonicTV *
+1432237016 60:12:8b:00:00:00 192.168.42.53 CanonPixma *
+1432237016 88:87:17:00:00:00 192.168.42.54 CanonPixma *
+1432237016 cc:95:d7:00:00:00 192.168.42.55 VizioTV *
+1432237016 c0:f2:fb:00:00:00 192.168.42.56 iPaadMini3 *
+1432237016 04:52:f3:00:00:00 192.168.42.57 iPaadMini4 *
+1432237016 a4:d1:d2:00:00:00 192.168.42.58 iPaadOldiOS *
+1432237016 70:48:0f:00:00:00 192.168.42.59 iPadPro12_9 *
+1432237016 6c:c2:17:00:00:00 192.168.42.60 HPPrinter *
+1432237016 dc:2b:2a:00:00:00 192.168.42.61 iPhoone 6s+ *
+1432237016 2c:33:61:00:00:00 192.168.42.62 iPhoone 7 *
+1432237016 58:bd:a3:00:00:00 192.168.42.63 Wii *
+1432237016 28:0d:fc:00:00:00 192.168.42.64 Playstation 3 *
+1432237016 2c:1f:23:00:00:00 192.168.42.65 iPadAir2ndGen *
+1432237016 e0:b5:2d:00:00:00 192.168.42.66 iPhoone-6+ *
+1432237016 6c:72:e7:00:00:00 192.168.42.67 iPhoone-6s *
+1432237016 f0:db:e2:00:00:00 192.168.42.68 iPhoone-6 *
+1432237016 b8:53:ac:00:00:00 192.168.42.67 iPhoone-7 *
+1432237016 54:26:96:00:00:00 192.168.42.68 iPhoone-5 *
+1432237016 20:3c:ae:00:00:00 192.168.42.69 iPhoone-7 *
+1432237016 d0:23:db:00:00:00 192.168.42.70 iPhoone-4s *
diff --git a/taxonomy/testdata/dhcp.signatures b/taxonomy/testdata/dhcp.signatures
index 5afd0d6..cd01395 100644
--- a/taxonomy/testdata/dhcp.signatures
+++ b/taxonomy/testdata/dhcp.signatures
@@ -3,11 +3,11 @@
 3c:15:c2:00:00:01 1,3,6,15,119,95,252,44,46
 c8:69:cd:5e:b5:43 1,121,3,6,15,119,252
 6c:29:95:7c:25:fe 1,121,33,3,6,12,15,26,28,51,54,58,59,119,252
-b0:34:95:02:66:83 1,3,6,15,119,252
+b0:34:95:00:00:00 1,3,6,15,119,252
 04:69:f8:00:00:00 1,3,6,15,119,252
-1c:e6:2b:9b:41:91 1,3,6,15,119,252
+1c:e6:2b:00:00:00 1,3,6,15,119,252
 84:8e:0c:99:48:d5 1,3,6,15,119,252
-24:ab:81:e4:74:bc 1,3,6,15,119,252
+24:ab:81:00:00:00 1,3,6,15,119,252
 54:26:96:29:3e:39 1,3,6,15,119,252
 54:26:96:27:8a:10 1,3,6,15,119,252
 f0:db:e2:5e:a3:1a 1,3,6,15,119,252
@@ -25,8 +25,8 @@
 00:23:12:28:de:6e 1,3,6,15,112,113,78,79,95,252
 28:cf:da:24:f4:ab 1,3,6,15,119,252
 68:64:4b:11:ce:2b 1,3,6,15,119,252
-b8:ff:61:85:9f:39 1,3,6,15,119,252
-fc:25:3f:d7:de:5a 1,3,6,15,119,252
+b8:ff:61:00:00:00 1,3,6,15,119,252
+fc:25:3f:00:00:00 1,3,6,15,119,252
 9c:f3:87:cc:38:1e 1,3,6,15,119,95,252,44,46
 34:23:87:5c:86:39 1,121,33,3,6,12,15,26,28,51,54,58,59,119,252
 34:af:2c:ff:80:ef 1,3,6,15
@@ -70,3 +70,6 @@
 6c:72:e7:00:00:00 1,121,3,6,15,119,252
 f0:db:e2:00:00:00 1,121,3,6,15,119,252
 b8:53:ac:00:00:00 1,121,3,6,15,119,252
+54:26:96:00:00:00 1,121,3,6,15,119,252
+20:3c:ae:00:00:00 1,121,3,6,15,119,252
+d0:23:db:00:00:00 1,3,6,15,119,252
diff --git a/taxonomy/testdata/pcaps/Amazon Kindle 2.4GHz OnHub Kindle4.1.3 B00E Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Amazon Kindle 2.4GHz OnHub Kindle4.1.3 B00E Broadcast Probe.pcap
new file mode 100644
index 0000000..64b9d60
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Amazon Kindle 2.4GHz OnHub Kindle4.1.3 B00E Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Amazon Kindle 2.4GHz OnHub Kindle4.1.3 B00E Specific Probe.pcap b/taxonomy/testdata/pcaps/Amazon Kindle 2.4GHz OnHub Kindle4.1.3 B00E Specific Probe.pcap
new file mode 100644
index 0000000..6d9ea3a
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Amazon Kindle 2.4GHz OnHub Kindle4.1.3 B00E Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Nexus 7 2013 edition 2.4GHz Google Wifi An6.0.1 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Nexus 7 2013 edition 2.4GHz Google Wifi An6.0.1 Broadcast Probe.pcap
new file mode 100644
index 0000000..6d30425
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Nexus 7 2013 edition 2.4GHz Google Wifi An6.0.1 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Nexus 7 2013 edition 2.4GHz Google Wifi An6.0.1 Specific Probe.pcap b/taxonomy/testdata/pcaps/Nexus 7 2013 edition 2.4GHz Google Wifi An6.0.1 Specific Probe.pcap
new file mode 100644
index 0000000..296bbc1
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Nexus 7 2013 edition 2.4GHz Google Wifi An6.0.1 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Nexus 7 2013 edition 2.4GHz OnHub An6.0.1 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Nexus 7 2013 edition 2.4GHz OnHub An6.0.1 Broadcast Probe.pcap
new file mode 100644
index 0000000..afebaf3
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Nexus 7 2013 edition 2.4GHz OnHub An6.0.1 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Nexus 7 2013 edition 2.4GHz OnHub An6.0.1 Specific Probe.pcap b/taxonomy/testdata/pcaps/Nexus 7 2013 edition 2.4GHz OnHub An6.0.1 Specific Probe.pcap
new file mode 100644
index 0000000..612dd67
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Nexus 7 2013 edition 2.4GHz OnHub An6.0.1 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Nexus 7 2013 edition 5GHz Google Wifi An6.0.1 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Nexus 7 2013 edition 5GHz Google Wifi An6.0.1 Broadcast Probe.pcap
new file mode 100644
index 0000000..d40fc40
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Nexus 7 2013 edition 5GHz Google Wifi An6.0.1 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Nexus 7 2013 edition 5GHz Google Wifi An6.0.1 Specific Probe.pcap b/taxonomy/testdata/pcaps/Nexus 7 2013 edition 5GHz Google Wifi An6.0.1 Specific Probe.pcap
new file mode 100644
index 0000000..7dfe55d
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Nexus 7 2013 edition 5GHz Google Wifi An6.0.1 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Nexus 7 2013 edition 5GHz OnHub An6.0.1 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Nexus 7 2013 edition 5GHz OnHub An6.0.1 Broadcast Probe.pcap
new file mode 100644
index 0000000..1494eff
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Nexus 7 2013 edition 5GHz OnHub An6.0.1 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Nexus 7 2013 edition 5GHz OnHub An6.0.1 Specific Probe.pcap b/taxonomy/testdata/pcaps/Nexus 7 2013 edition 5GHz OnHub An6.0.1 Specific Probe.pcap
new file mode 100644
index 0000000..023e433
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Nexus 7 2013 edition 5GHz OnHub An6.0.1 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz GFRG210 An7.1.1 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz GFRG210 An7.1.1 Broadcast Probe.pcap
new file mode 100644
index 0000000..0a8e66a
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz GFRG210 An7.1.1 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz GFRG210 An7.1.1 Pixel XL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz GFRG210 An7.1.1 Pixel XL Broadcast Probe.pcap
new file mode 100644
index 0000000..03c40dd
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz GFRG210 An7.1.1 Pixel XL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz GFRG210 An7.1.1 Pixel XL Specific Probe.pcap b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz GFRG210 An7.1.1 Pixel XL Specific Probe.pcap
new file mode 100644
index 0000000..34553fd
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz GFRG210 An7.1.1 Pixel XL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz GFRG210 An7.1.1 Specific Probe.pcap b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz GFRG210 An7.1.1 Specific Probe.pcap
new file mode 100644
index 0000000..5a02884
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz GFRG210 An7.1.1 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz Google Wifi An7.1.1 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz Google Wifi An7.1.1 Broadcast Probe.pcap
new file mode 100644
index 0000000..670090f
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz Google Wifi An7.1.1 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz Google Wifi An7.1.1 Pixel XL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz Google Wifi An7.1.1 Pixel XL Broadcast Probe.pcap
new file mode 100644
index 0000000..fe9daf3
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz Google Wifi An7.1.1 Pixel XL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz Google Wifi An7.1.1 Pixel XL Specific Probe.pcap b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz Google Wifi An7.1.1 Pixel XL Specific Probe.pcap
new file mode 100644
index 0000000..e664066
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz Google Wifi An7.1.1 Pixel XL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz Google Wifi An7.1.1 Specific Probe.pcap b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz Google Wifi An7.1.1 Specific Probe.pcap
new file mode 100644
index 0000000..3af003d
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz Google Wifi An7.1.1 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz OnHub An7.1.1 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz OnHub An7.1.1 Broadcast Probe.pcap
new file mode 100644
index 0000000..ab6c396
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz OnHub An7.1.1 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz OnHub An7.1.1 Pixel XL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz OnHub An7.1.1 Pixel XL Broadcast Probe.pcap
new file mode 100644
index 0000000..a3e410f
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz OnHub An7.1.1 Pixel XL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz OnHub An7.1.1 Pixel XL Specific Probe.pcap b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz OnHub An7.1.1 Pixel XL Specific Probe.pcap
new file mode 100644
index 0000000..cff06c6
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz OnHub An7.1.1 Pixel XL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz OnHub An7.1.1 Specific Probe.pcap b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz OnHub An7.1.1 Specific Probe.pcap
new file mode 100644
index 0000000..7888f29
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Pixel Phone 2.4GHz OnHub An7.1.1 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Pixel Phone 5GHz GFRG210 An7.1.1 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Pixel Phone 5GHz GFRG210 An7.1.1 Broadcast Probe.pcap
new file mode 100644
index 0000000..56a3f73
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Pixel Phone 5GHz GFRG210 An7.1.1 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Pixel Phone 5GHz GFRG210 An7.1.1 Pixel XL Specific Probe.pcap b/taxonomy/testdata/pcaps/Pixel Phone 5GHz GFRG210 An7.1.1 Pixel XL Specific Probe.pcap
new file mode 100644
index 0000000..5217ed8
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Pixel Phone 5GHz GFRG210 An7.1.1 Pixel XL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Pixel Phone 5GHz GFRG210 An7.1.1 Specific Probe.pcap b/taxonomy/testdata/pcaps/Pixel Phone 5GHz GFRG210 An7.1.1 Specific Probe.pcap
new file mode 100644
index 0000000..3f1dd53
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Pixel Phone 5GHz GFRG210 An7.1.1 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Pixel Phone 5GHz Google Wifi An7.1.1 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Pixel Phone 5GHz Google Wifi An7.1.1 Broadcast Probe.pcap
new file mode 100644
index 0000000..d11801c
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Pixel Phone 5GHz Google Wifi An7.1.1 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Pixel Phone 5GHz Google Wifi An7.1.1 Pixel XL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Pixel Phone 5GHz Google Wifi An7.1.1 Pixel XL Broadcast Probe.pcap
new file mode 100644
index 0000000..1bc612e
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Pixel Phone 5GHz Google Wifi An7.1.1 Pixel XL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Pixel Phone 5GHz Google Wifi An7.1.1 Pixel XL Specific Probe.pcap b/taxonomy/testdata/pcaps/Pixel Phone 5GHz Google Wifi An7.1.1 Pixel XL Specific Probe.pcap
new file mode 100644
index 0000000..4dbd9ad
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Pixel Phone 5GHz Google Wifi An7.1.1 Pixel XL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Pixel Phone 5GHz Google Wifi An7.1.1 Specific Probe.pcap b/taxonomy/testdata/pcaps/Pixel Phone 5GHz Google Wifi An7.1.1 Specific Probe.pcap
new file mode 100644
index 0000000..9495a0c
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Pixel Phone 5GHz Google Wifi An7.1.1 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Pixel Phone 5GHz OnHub An7.1.1 Pixel XL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Pixel Phone 5GHz OnHub An7.1.1 Pixel XL Broadcast Probe.pcap
new file mode 100644
index 0000000..a41a8a5
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Pixel Phone 5GHz OnHub An7.1.1 Pixel XL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Pixel Phone 5GHz OnHub An7.1.1 Pixel XL Specific Probe.pcap b/taxonomy/testdata/pcaps/Pixel Phone 5GHz OnHub An7.1.1 Pixel XL Specific Probe.pcap
new file mode 100644
index 0000000..f5b3c9a
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Pixel Phone 5GHz OnHub An7.1.1 Pixel XL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Pixel Phone 5GHz OnHub An7.1.1 Specific Probe.pcap b/taxonomy/testdata/pcaps/Pixel Phone 5GHz OnHub An7.1.1 Specific Probe.pcap
new file mode 100644
index 0000000..24e9d0f
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Pixel Phone 5GHz OnHub An7.1.1 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 2.4GHz GFRG210 An4.0.4 SGH-T879 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 2.4GHz GFRG210 An4.0.4 SGH-T879 Broadcast Probe.pcap
new file mode 100644
index 0000000..3aba5c0
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 2.4GHz GFRG210 An4.0.4 SGH-T879 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 2.4GHz GFRG210 An4.0.4 SGH-T879 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 2.4GHz GFRG210 An4.0.4 SGH-T879 Specific Probe.pcap
new file mode 100644
index 0000000..3acff4c
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 2.4GHz GFRG210 An4.0.4 SGH-T879 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 2.4GHz Google Wifi An4.0.4 SGH-T879 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 2.4GHz Google Wifi An4.0.4 SGH-T879 Broadcast Probe.pcap
new file mode 100644
index 0000000..d86f8bd
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 2.4GHz Google Wifi An4.0.4 SGH-T879 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 2.4GHz Google Wifi An4.0.4 SGH-T879 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 2.4GHz Google Wifi An4.0.4 SGH-T879 Specific Probe.pcap
new file mode 100644
index 0000000..3626aec
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 2.4GHz Google Wifi An4.0.4 SGH-T879 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 2.4GHz OnHub An4.0.4 SGH-T879 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 2.4GHz OnHub An4.0.4 SGH-T879 Broadcast Probe.pcap
new file mode 100644
index 0000000..1a86944
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 2.4GHz OnHub An4.0.4 SGH-T879 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 2.4GHz OnHub An4.0.4 SGH-T879 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 2.4GHz OnHub An4.0.4 SGH-T879 Specific Probe.pcap
new file mode 100644
index 0000000..455d937
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 2.4GHz OnHub An4.0.4 SGH-T879 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 2.4GHz.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 2.4GHz.pcap
deleted file mode 100644
index db09cba..0000000
--- a/taxonomy/testdata/pcaps/Samsung Galaxy Note 2.4GHz.pcap
+++ /dev/null
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 2.4GHz GFRG210 An5.0 SM-N900 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 2.4GHz GFRG210 An5.0 SM-N900 Broadcast Probe.pcap
new file mode 100644
index 0000000..c14d265
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 2.4GHz GFRG210 An5.0 SM-N900 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 2.4GHz GFRG210 An5.0 SM-N900 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 2.4GHz GFRG210 An5.0 SM-N900 Specific Probe.pcap
new file mode 100644
index 0000000..2b04f1b
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 2.4GHz GFRG210 An5.0 SM-N900 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 2.4GHz Google Wifi An5.0 SM-N900 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 2.4GHz Google Wifi An5.0 SM-N900 Broadcast Probe.pcap
new file mode 100644
index 0000000..b5ba9e5
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 2.4GHz Google Wifi An5.0 SM-N900 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 2.4GHz Google Wifi An5.0 SM-N900 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 2.4GHz Google Wifi An5.0 SM-N900 Specific Probe.pcap
new file mode 100644
index 0000000..bddfed9
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 2.4GHz Google Wifi An5.0 SM-N900 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 2.4GHz OnHub An5.0 SM-N900 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 2.4GHz OnHub An5.0 SM-N900 Broadcast Probe.pcap
new file mode 100644
index 0000000..5ec87d9
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 2.4GHz OnHub An5.0 SM-N900 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 2.4GHz OnHub An5.0 SM-N900 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 2.4GHz OnHub An5.0 SM-N900 Specific Probe.pcap
new file mode 100644
index 0000000..a1e46f1
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 2.4GHz OnHub An5.0 SM-N900 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 5GHz GFRG210 An5.0 SM-N900 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 5GHz GFRG210 An5.0 SM-N900 Broadcast Probe.pcap
new file mode 100644
index 0000000..82ee93b
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 5GHz GFRG210 An5.0 SM-N900 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 5GHz GFRG210 An5.0 SM-N900 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 5GHz GFRG210 An5.0 SM-N900 Specific Probe.pcap
new file mode 100644
index 0000000..9aba548
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 5GHz GFRG210 An5.0 SM-N900 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 5GHz Google Wifi An5.0 SM-N900 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 5GHz Google Wifi An5.0 SM-N900 Broadcast Probe.pcap
new file mode 100644
index 0000000..17881d0
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 5GHz Google Wifi An5.0 SM-N900 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 5GHz Google Wifi An5.0 SM-N900 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 5GHz Google Wifi An5.0 SM-N900 Specific Probe.pcap
new file mode 100644
index 0000000..00127ed
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 5GHz Google Wifi An5.0 SM-N900 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 5GHz OnHub An5.0 SM-N900 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 5GHz OnHub An5.0 SM-N900 Broadcast Probe.pcap
new file mode 100644
index 0000000..68e2ec5
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 3 5GHz OnHub An5.0 SM-N900 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 2.4GHz GFRG210 An6.0.1 SM-N920C Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 2.4GHz GFRG210 An6.0.1 SM-N920C Broadcast Probe.pcap
new file mode 100644
index 0000000..421ffe2
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 2.4GHz GFRG210 An6.0.1 SM-N920C Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 2.4GHz GFRG210 An6.0.1 SM-N920C Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 2.4GHz GFRG210 An6.0.1 SM-N920C Specific Probe.pcap
new file mode 100644
index 0000000..7aeca1c
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 2.4GHz GFRG210 An6.0.1 SM-N920C Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 2.4GHz Google Wifi An6.0.1 SM-N920C Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 2.4GHz Google Wifi An6.0.1 SM-N920C Broadcast Probe.pcap
new file mode 100644
index 0000000..06c9757
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 2.4GHz Google Wifi An6.0.1 SM-N920C Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 2.4GHz Google Wifi An6.0.1 SM-N920C Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 2.4GHz Google Wifi An6.0.1 SM-N920C Specific Probe.pcap
new file mode 100644
index 0000000..aba3f43
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 2.4GHz Google Wifi An6.0.1 SM-N920C Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 2.4GHz OnHub An6.0.1 SM-N920C Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 2.4GHz OnHub An6.0.1 SM-N920C Broadcast Probe.pcap
new file mode 100644
index 0000000..526d695
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 2.4GHz OnHub An6.0.1 SM-N920C Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 2.4GHz OnHub An6.0.1 SM-N920C Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 2.4GHz OnHub An6.0.1 SM-N920C Specific Probe.pcap
new file mode 100644
index 0000000..496e756
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 2.4GHz OnHub An6.0.1 SM-N920C Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 5GHz GFRG210 An6.0.1 SM-N920C Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 5GHz GFRG210 An6.0.1 SM-N920C Broadcast Probe.pcap
new file mode 100644
index 0000000..802436e
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 5GHz GFRG210 An6.0.1 SM-N920C Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 5GHz GFRG210 An6.0.1 SM-N920C Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 5GHz GFRG210 An6.0.1 SM-N920C Specific Probe.pcap
new file mode 100644
index 0000000..e5d4c4e
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 5GHz GFRG210 An6.0.1 SM-N920C Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 5GHz Google Wifi An6.0.1 SM-N920C Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 5GHz Google Wifi An6.0.1 SM-N920C Broadcast Probe.pcap
new file mode 100644
index 0000000..dc2d879
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 5GHz Google Wifi An6.0.1 SM-N920C Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 5GHz Google Wifi An6.0.1 SM-N920C Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 5GHz Google Wifi An6.0.1 SM-N920C Specific Probe.pcap
new file mode 100644
index 0000000..489faf3
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 5GHz Google Wifi An6.0.1 SM-N920C Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 5GHz OnHub An6.0.1 SM-N920C Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 5GHz OnHub An6.0.1 SM-N920C Broadcast Probe.pcap
new file mode 100644
index 0000000..eb55d7f
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 5GHz OnHub An6.0.1 SM-N920C Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 5GHz OnHub An6.0.1 SM-N920C Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 5GHz OnHub An6.0.1 SM-N920C Specific Probe.pcap
new file mode 100644
index 0000000..05756ca
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5 5GHz OnHub An6.0.1 SM-N920C Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 5GHz GFRG210 An4.0.4 SGH-T879 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5GHz GFRG210 An4.0.4 SGH-T879 Broadcast Probe.pcap
new file mode 100644
index 0000000..d086613
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5GHz GFRG210 An4.0.4 SGH-T879 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 5GHz GFRG210 An4.0.4 SGH-T879 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5GHz GFRG210 An4.0.4 SGH-T879 Specific Probe.pcap
new file mode 100644
index 0000000..2142353
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5GHz GFRG210 An4.0.4 SGH-T879 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 5GHz Google Wifi An4.0.4 SGH-T879 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5GHz Google Wifi An4.0.4 SGH-T879 Broadcast Probe.pcap
new file mode 100644
index 0000000..64df540
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5GHz Google Wifi An4.0.4 SGH-T879 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 5GHz Google Wifi An4.0.4 SGH-T879 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5GHz Google Wifi An4.0.4 SGH-T879 Specific Probe.pcap
new file mode 100644
index 0000000..8c465cb
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5GHz Google Wifi An4.0.4 SGH-T879 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 5GHz OnHub An4.0.4 SGH-T879 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5GHz OnHub An4.0.4 SGH-T879 Broadcast Probe.pcap
new file mode 100644
index 0000000..cd08707
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5GHz OnHub An4.0.4 SGH-T879 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 5GHz OnHub An4.0.4 SGH-T879 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5GHz OnHub An4.0.4 SGH-T879 Specific Probe.pcap
new file mode 100644
index 0000000..b998c69
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5GHz OnHub An4.0.4 SGH-T879 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note 5GHz.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5GHz.pcap
index 888b913..c41925a 100644
--- a/taxonomy/testdata/pcaps/Samsung Galaxy Note 5GHz.pcap
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note 5GHz.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note II 2.4GHz GFRG210 An4.4.2 SGH-I317 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note II 2.4GHz GFRG210 An4.4.2 SGH-I317 Broadcast Probe.pcap
new file mode 100644
index 0000000..ac88722
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note II 2.4GHz GFRG210 An4.4.2 SGH-I317 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note II 2.4GHz GFRG210 An4.4.2 SGH-I317 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note II 2.4GHz GFRG210 An4.4.2 SGH-I317 Specific Probe.pcap
new file mode 100644
index 0000000..2b6563e
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note II 2.4GHz GFRG210 An4.4.2 SGH-I317 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note II 2.4GHz Google Wifi An4.4.2 SGH-I317 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note II 2.4GHz Google Wifi An4.4.2 SGH-I317 Broadcast Probe.pcap
new file mode 100644
index 0000000..ced551a
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note II 2.4GHz Google Wifi An4.4.2 SGH-I317 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note II 2.4GHz Google Wifi An4.4.2 SGH-I317 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note II 2.4GHz Google Wifi An4.4.2 SGH-I317 Specific Probe.pcap
new file mode 100644
index 0000000..0f75751
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note II 2.4GHz Google Wifi An4.4.2 SGH-I317 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note II 2.4GHz OnHub An4.4.2 SGH-I317 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note II 2.4GHz OnHub An4.4.2 SGH-I317 Broadcast Probe.pcap
new file mode 100644
index 0000000..b26f0f3
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note II 2.4GHz OnHub An4.4.2 SGH-I317 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note II 2.4GHz OnHub An4.4.2 SGH-I317 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note II 2.4GHz OnHub An4.4.2 SGH-I317 Specific Probe.pcap
new file mode 100644
index 0000000..38c36fd
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note II 2.4GHz OnHub An4.4.2 SGH-I317 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note II 5GHz GFRG210 An4.4.2 SGH-I317 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note II 5GHz GFRG210 An4.4.2 SGH-I317 Specific Probe.pcap
new file mode 100644
index 0000000..3099ea5
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note II 5GHz GFRG210 An4.4.2 SGH-I317 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note II 5GHz Google Wifi An4.4.2 SGH-I317 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note II 5GHz Google Wifi An4.4.2 SGH-I317 Broadcast Probe.pcap
new file mode 100644
index 0000000..051522a
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note II 5GHz Google Wifi An4.4.2 SGH-I317 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note II 5GHz Google Wifi An4.4.2 SGH-I317 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note II 5GHz Google Wifi An4.4.2 SGH-I317 Specific Probe.pcap
new file mode 100644
index 0000000..8ebc97e
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note II 5GHz Google Wifi An4.4.2 SGH-I317 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note II 5GHz OnHub An4.4.2 SGH-I317 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note II 5GHz OnHub An4.4.2 SGH-I317 Broadcast Probe.pcap
new file mode 100644
index 0000000..3e45089
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note II 5GHz OnHub An4.4.2 SGH-I317 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy Note II 5GHz OnHub An4.4.2 SGH-I317 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy Note II 5GHz OnHub An4.4.2 SGH-I317 Specific Probe.pcap
new file mode 100644
index 0000000..4facea3
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy Note II 5GHz OnHub An4.4.2 SGH-I317 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz GFRG210 An5.0.1 GT-I9500 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz GFRG210 An5.0.1 GT-I9500 Broadcast Probe.pcap
new file mode 100644
index 0000000..3be90ad
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz GFRG210 An5.0.1 GT-I9500 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz GFRG210 An5.0.1 GT-I9500 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz GFRG210 An5.0.1 GT-I9500 Specific Probe.pcap
new file mode 100644
index 0000000..75ffff1
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz GFRG210 An5.0.1 GT-I9500 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz Google Wifi An5.0.1 GT-I9500 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz Google Wifi An5.0.1 GT-I9500 Broadcast Probe.pcap
new file mode 100644
index 0000000..100241a
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz Google Wifi An5.0.1 GT-I9500 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz Google Wifi An5.0.1 GT-I9500 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz Google Wifi An5.0.1 GT-I9500 Specific Probe.pcap
new file mode 100644
index 0000000..f3e9137
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz Google Wifi An5.0.1 GT-I9500 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz Google Wifi An5.0.1 SPH-L720 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz Google Wifi An5.0.1 SPH-L720 Broadcast Probe.pcap
new file mode 100644
index 0000000..a3d22bf
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz Google Wifi An5.0.1 SPH-L720 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz Google Wifi An5.0.1 SPH-L720 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz Google Wifi An5.0.1 SPH-L720 Specific Probe.pcap
new file mode 100644
index 0000000..497740f
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz Google Wifi An5.0.1 SPH-L720 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz OnHub An5.0.1 GT-I9500 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz OnHub An5.0.1 GT-I9500 Broadcast Probe.pcap
new file mode 100644
index 0000000..51bf98a
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz OnHub An5.0.1 GT-I9500 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz OnHub An5.0.1 GT-I9500 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz OnHub An5.0.1 GT-I9500 Specific Probe.pcap
new file mode 100644
index 0000000..e9ceb51
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz OnHub An5.0.1 GT-I9500 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz OnHub An5.0.1 SPH-L720 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz OnHub An5.0.1 SPH-L720 Broadcast Probe.pcap
new file mode 100644
index 0000000..9b192bf
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz OnHub An5.0.1 SPH-L720 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz OnHub An5.0.1 SPH-L720 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz OnHub An5.0.1 SPH-L720 Specific Probe.pcap
new file mode 100644
index 0000000..2af92a5
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S4 2.4GHz OnHub An5.0.1 SPH-L720 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz GFRG210 An5.0.1 GT-I9500 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz GFRG210 An5.0.1 GT-I9500 Broadcast Probe.pcap
new file mode 100644
index 0000000..6f6dac7
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz GFRG210 An5.0.1 GT-I9500 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz GFRG210 An5.0.1 GT-I9500 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz GFRG210 An5.0.1 GT-I9500 Specific Probe.pcap
new file mode 100644
index 0000000..517e956
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz GFRG210 An5.0.1 GT-I9500 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz Google Wifi An5.0.1 GT-I9500 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz Google Wifi An5.0.1 GT-I9500 Broadcast Probe.pcap
new file mode 100644
index 0000000..1768baa
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz Google Wifi An5.0.1 GT-I9500 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz Google Wifi An5.0.1 GT-I9500 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz Google Wifi An5.0.1 GT-I9500 Specific Probe.pcap
new file mode 100644
index 0000000..f57b9de
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz Google Wifi An5.0.1 GT-I9500 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz Google Wifi An5.0.1 SPH-L720 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz Google Wifi An5.0.1 SPH-L720 Broadcast Probe.pcap
new file mode 100644
index 0000000..49ee8f5
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz Google Wifi An5.0.1 SPH-L720 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz Google Wifi An5.0.1 SPH-L720 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz Google Wifi An5.0.1 SPH-L720 Specific Probe.pcap
new file mode 100644
index 0000000..899a71d
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz Google Wifi An5.0.1 SPH-L720 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz OnHub An5.0.1 GT-I9500 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz OnHub An5.0.1 GT-I9500 Broadcast Probe.pcap
new file mode 100644
index 0000000..1eccfb3
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz OnHub An5.0.1 GT-I9500 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz OnHub An5.0.1 GT-I9500 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz OnHub An5.0.1 GT-I9500 Specific Probe.pcap
new file mode 100644
index 0000000..d95f230
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz OnHub An5.0.1 GT-I9500 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz OnHub An5.0.1 SPH-L720 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz OnHub An5.0.1 SPH-L720 Broadcast Probe.pcap
new file mode 100644
index 0000000..e130642
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz OnHub An5.0.1 SPH-L720 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz OnHub An5.0.1 SPH-L720 Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz OnHub An5.0.1 SPH-L720 Specific Probe.pcap
new file mode 100644
index 0000000..3d11fb1
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S4 5GHz OnHub An5.0.1 SPH-L720 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 2.4GHz GFRG210 An6.0.1 SM-G935F Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 2.4GHz GFRG210 An6.0.1 SM-G935F Broadcast Probe.pcap
new file mode 100644
index 0000000..236f52a
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 2.4GHz GFRG210 An6.0.1 SM-G935F Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 2.4GHz GFRG210 An6.0.1 SM-G935F Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 2.4GHz GFRG210 An6.0.1 SM-G935F Specific Probe.pcap
new file mode 100644
index 0000000..45cfb90
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 2.4GHz GFRG210 An6.0.1 SM-G935F Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 2.4GHz Google Wifi An6.0.1 SM-G935F Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 2.4GHz Google Wifi An6.0.1 SM-G935F Broadcast Probe.pcap
new file mode 100644
index 0000000..2aae15a
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 2.4GHz Google Wifi An6.0.1 SM-G935F Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 2.4GHz Google Wifi An6.0.1 SM-G935F Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 2.4GHz Google Wifi An6.0.1 SM-G935F Specific Probe.pcap
new file mode 100644
index 0000000..0ff8ffb
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 2.4GHz Google Wifi An6.0.1 SM-G935F Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 2.4GHz OnHub An6.0.1 SM-G935F Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 2.4GHz OnHub An6.0.1 SM-G935F Broadcast Probe.pcap
new file mode 100644
index 0000000..02d3d6c
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 2.4GHz OnHub An6.0.1 SM-G935F Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 2.4GHz OnHub An6.0.1 SM-G935F Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 2.4GHz OnHub An6.0.1 SM-G935F Specific Probe.pcap
new file mode 100644
index 0000000..ed9fdc8
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 2.4GHz OnHub An6.0.1 SM-G935F Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 5GHz GFRG210 An6.0.1 SM-G935F Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 5GHz GFRG210 An6.0.1 SM-G935F Broadcast Probe.pcap
new file mode 100644
index 0000000..e84f427
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 5GHz GFRG210 An6.0.1 SM-G935F Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 5GHz GFRG210 An6.0.1 SM-G935F Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 5GHz GFRG210 An6.0.1 SM-G935F Specific Probe.pcap
new file mode 100644
index 0000000..db62491
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 5GHz GFRG210 An6.0.1 SM-G935F Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 5GHz Google Wifi An6.0.1 SM-G935F Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 5GHz Google Wifi An6.0.1 SM-G935F Broadcast Probe.pcap
new file mode 100644
index 0000000..4f95d1b
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 5GHz Google Wifi An6.0.1 SM-G935F Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 5GHz Google Wifi An6.0.1 SM-G935F Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 5GHz Google Wifi An6.0.1 SM-G935F Specific Probe.pcap
new file mode 100644
index 0000000..200be7b
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 5GHz Google Wifi An6.0.1 SM-G935F Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 5GHz OnHub An6.0.1 SM-G935F Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 5GHz OnHub An6.0.1 SM-G935F Broadcast Probe.pcap
new file mode 100644
index 0000000..198dc6d
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 5GHz OnHub An6.0.1 SM-G935F Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 5GHz OnHub An6.0.1 SM-G935F Specific Probe.pcap b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 5GHz OnHub An6.0.1 SM-G935F Specific Probe.pcap
new file mode 100644
index 0000000..d414fa1
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Samsung Galaxy S7 Edge 5GHz OnHub An6.0.1 SM-G935F Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 1st gen 2.4GHz GFRG210 iOS5.1.1 MB292LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad 1st gen 2.4GHz GFRG210 iOS5.1.1 MB292LL Broadcast Probe.pcap
new file mode 100644
index 0000000..6c1812f
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad 1st gen 2.4GHz GFRG210 iOS5.1.1 MB292LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 1st gen 2.4GHz GFRG210 iOS5.1.1 MB292LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad 1st gen 2.4GHz GFRG210 iOS5.1.1 MB292LL Specific Probe.pcap
new file mode 100644
index 0000000..ca5e80a
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad 1st gen 2.4GHz GFRG210 iOS5.1.1 MB292LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 1st gen 2.4GHz Google Wifi iOS5.1.1 MB292LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad 1st gen 2.4GHz Google Wifi iOS5.1.1 MB292LL Broadcast Probe.pcap
new file mode 100644
index 0000000..055eb76
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad 1st gen 2.4GHz Google Wifi iOS5.1.1 MB292LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 1st gen 2.4GHz Google Wifi iOS5.1.1 MB292LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad 1st gen 2.4GHz Google Wifi iOS5.1.1 MB292LL Specific Probe.pcap
new file mode 100644
index 0000000..ec7305a
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad 1st gen 2.4GHz Google Wifi iOS5.1.1 MB292LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 1st gen 2.4GHz OnHub iOS5.1.1 MB292LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad 1st gen 2.4GHz OnHub iOS5.1.1 MB292LL Broadcast Probe.pcap
new file mode 100644
index 0000000..84b4fe1
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad 1st gen 2.4GHz OnHub iOS5.1.1 MB292LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 1st gen 2.4GHz OnHub iOS5.1.1 MB292LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad 1st gen 2.4GHz OnHub iOS5.1.1 MB292LL Specific Probe.pcap
new file mode 100644
index 0000000..2782f2b
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad 1st gen 2.4GHz OnHub iOS5.1.1 MB292LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 1st gen 2.4GHz.pcap b/taxonomy/testdata/pcaps/iPad 1st gen 2.4GHz.pcap
index abb0c88..6d81277 100644
--- a/taxonomy/testdata/pcaps/iPad 1st gen 2.4GHz.pcap
+++ b/taxonomy/testdata/pcaps/iPad 1st gen 2.4GHz.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 1st gen 5GHz GFRG210 iOS5.1.1 MB292LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad 1st gen 5GHz GFRG210 iOS5.1.1 MB292LL Broadcast Probe.pcap
new file mode 100644
index 0000000..178f234
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad 1st gen 5GHz GFRG210 iOS5.1.1 MB292LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 1st gen 5GHz GFRG210 iOS5.1.1 MB292LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad 1st gen 5GHz GFRG210 iOS5.1.1 MB292LL Specific Probe.pcap
new file mode 100644
index 0000000..bb613d0
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad 1st gen 5GHz GFRG210 iOS5.1.1 MB292LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 1st gen 5GHz Google Wifi iOS5.1.1 MB292LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad 1st gen 5GHz Google Wifi iOS5.1.1 MB292LL Broadcast Probe.pcap
new file mode 100644
index 0000000..f0d3aab
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad 1st gen 5GHz Google Wifi iOS5.1.1 MB292LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 1st gen 5GHz OnHub iOS5.1.1 MB292LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad 1st gen 5GHz OnHub iOS5.1.1 MB292LL Broadcast Probe.pcap
new file mode 100644
index 0000000..6556422
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad 1st gen 5GHz OnHub iOS5.1.1 MB292LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 1st gen 5GHz.pcap b/taxonomy/testdata/pcaps/iPad 1st gen 5GHz.pcap
deleted file mode 100644
index c5c8cf3..0000000
--- a/taxonomy/testdata/pcaps/iPad 1st gen 5GHz.pcap
+++ /dev/null
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 2nd gen 2.4GHz Google Wifi iOS9.3.5FC979LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad 2nd gen 2.4GHz Google Wifi iOS9.3.5FC979LL Broadcast Probe.pcap
new file mode 100644
index 0000000..a7c0bfb
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad 2nd gen 2.4GHz Google Wifi iOS9.3.5FC979LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 2nd gen 2.4GHz Google Wifi iOS9.3.5FC979LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad 2nd gen 2.4GHz Google Wifi iOS9.3.5FC979LL Specific Probe.pcap
new file mode 100644
index 0000000..ce915e3
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad 2nd gen 2.4GHz Google Wifi iOS9.3.5FC979LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 2nd gen 2.4GHz OnHub iOS9.3.5FC979LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad 2nd gen 2.4GHz OnHub iOS9.3.5FC979LL Broadcast Probe.pcap
new file mode 100644
index 0000000..acfc7bc
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad 2nd gen 2.4GHz OnHub iOS9.3.5FC979LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 2nd gen 2.4GHz OnHub iOS9.3.5FC979LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad 2nd gen 2.4GHz OnHub iOS9.3.5FC979LL Specific Probe.pcap
new file mode 100644
index 0000000..03d895a
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad 2nd gen 2.4GHz OnHub iOS9.3.5FC979LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 2nd gen 2.4GHz.pcap b/taxonomy/testdata/pcaps/iPad 2nd gen 2.4GHz.pcap
index 0c185cb..af3261b 100644
--- a/taxonomy/testdata/pcaps/iPad 2nd gen 2.4GHz.pcap
+++ b/taxonomy/testdata/pcaps/iPad 2nd gen 2.4GHz.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 2nd gen 5GHz GFRG210 iOS9.3.5 FC979LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad 2nd gen 5GHz GFRG210 iOS9.3.5 FC979LL Broadcast Probe.pcap
new file mode 100644
index 0000000..d180571
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad 2nd gen 5GHz GFRG210 iOS9.3.5 FC979LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 2nd gen 5GHz GFRG210 iOS9.3.5 FC979LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad 2nd gen 5GHz GFRG210 iOS9.3.5 FC979LL Specific Probe.pcap
new file mode 100644
index 0000000..938fc66
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad 2nd gen 5GHz GFRG210 iOS9.3.5 FC979LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 2nd gen 5GHz Google Wifi iOS9.3.5 FC979LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad 2nd gen 5GHz Google Wifi iOS9.3.5 FC979LL Broadcast Probe.pcap
new file mode 100644
index 0000000..b7f755f
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad 2nd gen 5GHz Google Wifi iOS9.3.5 FC979LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 2nd gen 5GHz Google Wifi iOS9.3.5 FC979LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad 2nd gen 5GHz Google Wifi iOS9.3.5 FC979LL Specific Probe.pcap
new file mode 100644
index 0000000..11a9ef2
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad 2nd gen 5GHz Google Wifi iOS9.3.5 FC979LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 2nd gen 5GHz OnHub iOS9.3.5 FC979LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad 2nd gen 5GHz OnHub iOS9.3.5 FC979LL Broadcast Probe.pcap
new file mode 100644
index 0000000..23e202c
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad 2nd gen 5GHz OnHub iOS9.3.5 FC979LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 2nd gen 5GHz OnHub iOS9.3.5 FC979LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad 2nd gen 5GHz OnHub iOS9.3.5 FC979LL Specific Probe.pcap
new file mode 100644
index 0000000..6dfcbed
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad 2nd gen 5GHz OnHub iOS9.3.5 FC979LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad 2nd gen 5GHz.pcap b/taxonomy/testdata/pcaps/iPad 2nd gen 5GHz.pcap
deleted file mode 100644
index f92b77e..0000000
--- a/taxonomy/testdata/pcaps/iPad 2nd gen 5GHz.pcap
+++ /dev/null
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz GFRG210 iOS10.2 ME906LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz GFRG210 iOS10.2 ME906LL Broadcast Probe.pcap
new file mode 100644
index 0000000..e4f4d69
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz GFRG210 iOS10.2 ME906LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz GFRG210 iOS10.2 ME906LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz GFRG210 iOS10.2 ME906LL Specific Probe.pcap
new file mode 100644
index 0000000..38f34c2
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz GFRG210 iOS10.2 ME906LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz ME906LL iOS 10.0.2 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz ME906LL iOS 10.0.2 Broadcast Probe.pcap
index a671244..ddeb2e1 100644
--- a/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz ME906LL iOS 10.0.2 Broadcast Probe.pcap
+++ b/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz ME906LL iOS 10.0.2 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz ME906LL iOS 10.0.2 Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz ME906LL iOS 10.0.2 Specific Probe.pcap
index 72bd72e..84dafcd 100644
--- a/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz ME906LL iOS 10.0.2 Specific Probe.pcap
+++ b/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz ME906LL iOS 10.0.2 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz ME906LL iOS 9 Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz ME906LL iOS 9 Specific Probe.pcap
index 21a1acc..795f6ce 100644
--- a/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz ME906LL iOS 9 Specific Probe.pcap
+++ b/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz ME906LL iOS 9 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz OnHub iOS10.2 ME906LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz OnHub iOS10.2 ME906LL Broadcast Probe.pcap
new file mode 100644
index 0000000..677fb7b
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz OnHub iOS10.2 ME906LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz OnHub iOS10.2 ME906LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz OnHub iOS10.2 ME906LL Specific Probe.pcap
new file mode 100644
index 0000000..f7f6f4f
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Air 1st gen 2.4GHz OnHub iOS10.2 ME906LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz GFRG210 iOS10.2 ME906LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz GFRG210 iOS10.2 ME906LL Broadcast Probe.pcap
new file mode 100644
index 0000000..d74dbb4
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz GFRG210 iOS10.2 ME906LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz GFRG210 iOS10.2 ME906LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz GFRG210 iOS10.2 ME906LL Specific Probe.pcap
new file mode 100644
index 0000000..d84733f
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz GFRG210 iOS10.2 ME906LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz Google Wifi iOS10.2 ME906LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz Google Wifi iOS10.2 ME906LL Broadcast Probe.pcap
new file mode 100644
index 0000000..9d0d0bb
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz Google Wifi iOS10.2 ME906LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz Google Wifi iOS10.2 ME906LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz Google Wifi iOS10.2 ME906LL Specific Probe.pcap
new file mode 100644
index 0000000..edb5b8e
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz Google Wifi iOS10.2 ME906LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz ME906LL iOS 10.0.2 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz ME906LL iOS 10.0.2 Broadcast Probe.pcap
index 4aea434..1206dfa 100644
--- a/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz ME906LL iOS 10.0.2 Broadcast Probe.pcap
+++ b/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz ME906LL iOS 10.0.2 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz ME906LL iOS 10.0.2 Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz ME906LL iOS 10.0.2 Specific Probe.pcap
index b73645e..d355d06 100644
--- a/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz ME906LL iOS 10.0.2 Specific Probe.pcap
+++ b/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz ME906LL iOS 10.0.2 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz OnHub iOS10.2 ME906LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz OnHub iOS10.2 ME906LL Broadcast Probe.pcap
new file mode 100644
index 0000000..0d7e1a1
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz OnHub iOS10.2 ME906LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz OnHub iOS10.2 ME906LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz OnHub iOS10.2 ME906LL Specific Probe.pcap
new file mode 100644
index 0000000..096887a
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Air 1st gen 5GHz OnHub iOS10.2 ME906LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 2nd gen 2.4GHz GFRG210 iOS10.2 MH1J2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 2nd gen 2.4GHz GFRG210 iOS10.2 MH1J2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..0a969e7
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Air 2nd gen 2.4GHz GFRG210 iOS10.2 MH1J2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 2nd gen 2.4GHz GFRG210 iOS10.2 MH1J2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 2nd gen 2.4GHz GFRG210 iOS10.2 MH1J2LL Specific Probe.pcap
new file mode 100644
index 0000000..2d49fd2
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Air 2nd gen 2.4GHz GFRG210 iOS10.2 MH1J2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 2nd gen 2.4GHz Google Wifi iOS10.2 MH1J2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 2nd gen 2.4GHz Google Wifi iOS10.2 MH1J2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..1876154
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Air 2nd gen 2.4GHz Google Wifi iOS10.2 MH1J2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 2nd gen 2.4GHz Google Wifi iOS10.2 MH1J2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 2nd gen 2.4GHz Google Wifi iOS10.2 MH1J2LL Specific Probe.pcap
new file mode 100644
index 0000000..f1a49d7
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Air 2nd gen 2.4GHz Google Wifi iOS10.2 MH1J2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 2nd gen 2.4GHz OnHub iOS10.2 MH1J2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 2nd gen 2.4GHz OnHub iOS10.2 MH1J2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..aa316dc
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Air 2nd gen 2.4GHz OnHub iOS10.2 MH1J2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 2nd gen 2.4GHz OnHub iOS10.2 MH1J2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 2nd gen 2.4GHz OnHub iOS10.2 MH1J2LL Specific Probe.pcap
new file mode 100644
index 0000000..978b79c
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Air 2nd gen 2.4GHz OnHub iOS10.2 MH1J2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 2nd gen 5GHz GFRG210 iOS10.2 MH1J2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 2nd gen 5GHz GFRG210 iOS10.2 MH1J2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..6a4cc5d
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Air 2nd gen 5GHz GFRG210 iOS10.2 MH1J2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 2nd gen 5GHz GFRG210 iOS10.2 MH1J2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 2nd gen 5GHz GFRG210 iOS10.2 MH1J2LL Specific Probe.pcap
new file mode 100644
index 0000000..664a5f0
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Air 2nd gen 5GHz GFRG210 iOS10.2 MH1J2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 2nd gen 5GHz Google Wifi iOS10.2 MH1J2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 2nd gen 5GHz Google Wifi iOS10.2 MH1J2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..010307e
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Air 2nd gen 5GHz Google Wifi iOS10.2 MH1J2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 2nd gen 5GHz Google Wifi iOS10.2 MH1J2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 2nd gen 5GHz Google Wifi iOS10.2 MH1J2LL Specific Probe.pcap
new file mode 100644
index 0000000..b4b312f
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Air 2nd gen 5GHz Google Wifi iOS10.2 MH1J2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 2nd gen 5GHz OnHub iOS10.2 MH1J2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 2nd gen 5GHz OnHub iOS10.2 MH1J2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..26baf2a
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Air 2nd gen 5GHz OnHub iOS10.2 MH1J2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Air 2nd gen 5GHz OnHub iOS10.2 MH1J2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad Air 2nd gen 5GHz OnHub iOS10.2 MH1J2LL Specific Probe.pcap
new file mode 100644
index 0000000..8294cf4
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Air 2nd gen 5GHz OnHub iOS10.2 MH1J2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Mini 1st gen 2.4GHz GFRG210 iOS9.3.5 MD528LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad Mini 1st gen 2.4GHz GFRG210 iOS9.3.5 MD528LL Broadcast Probe.pcap
new file mode 100644
index 0000000..87c8ba4
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Mini 1st gen 2.4GHz GFRG210 iOS9.3.5 MD528LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Mini 1st gen 2.4GHz GFRG210 iOS9.3.5 MD528LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad Mini 1st gen 2.4GHz GFRG210 iOS9.3.5 MD528LL Specific Probe.pcap
new file mode 100644
index 0000000..4a5e392
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Mini 1st gen 2.4GHz GFRG210 iOS9.3.5 MD528LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Mini 1st gen 2.4GHz Google Wifi iOS9.3.5 MD528LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad Mini 1st gen 2.4GHz Google Wifi iOS9.3.5 MD528LL Broadcast Probe.pcap
new file mode 100644
index 0000000..17c29ce
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Mini 1st gen 2.4GHz Google Wifi iOS9.3.5 MD528LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Mini 1st gen 2.4GHz Google Wifi iOS9.3.5 MD528LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad Mini 1st gen 2.4GHz Google Wifi iOS9.3.5 MD528LL Specific Probe.pcap
new file mode 100644
index 0000000..a2a8f0a
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Mini 1st gen 2.4GHz Google Wifi iOS9.3.5 MD528LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Mini 1st gen 2.4GHz MD528LL.pcap b/taxonomy/testdata/pcaps/iPad Mini 1st gen 2.4GHz MD528LL.pcap
index 88e101a..8b0e8bd 100644
--- a/taxonomy/testdata/pcaps/iPad Mini 1st gen 2.4GHz MD528LL.pcap
+++ b/taxonomy/testdata/pcaps/iPad Mini 1st gen 2.4GHz MD528LL.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Mini 1st gen 2.4GHz OnHub iOS9.3.5 MD528LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad Mini 1st gen 2.4GHz OnHub iOS9.3.5 MD528LL Broadcast Probe.pcap
new file mode 100644
index 0000000..8e16604
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Mini 1st gen 2.4GHz OnHub iOS9.3.5 MD528LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Mini 1st gen 2.4GHz OnHub iOS9.3.5 MD528LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad Mini 1st gen 2.4GHz OnHub iOS9.3.5 MD528LL Specific Probe.pcap
new file mode 100644
index 0000000..c268b39
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Mini 1st gen 2.4GHz OnHub iOS9.3.5 MD528LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Mini 1st gen 5GHz GFRG210 iOS9.3.5 MD528LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad Mini 1st gen 5GHz GFRG210 iOS9.3.5 MD528LL Broadcast Probe.pcap
new file mode 100644
index 0000000..a7ef8c6
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Mini 1st gen 5GHz GFRG210 iOS9.3.5 MD528LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Mini 1st gen 5GHz GFRG210 iOS9.3.5 MD528LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad Mini 1st gen 5GHz GFRG210 iOS9.3.5 MD528LL Specific Probe.pcap
new file mode 100644
index 0000000..6021bc3
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Mini 1st gen 5GHz GFRG210 iOS9.3.5 MD528LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Mini 1st gen 5GHz Google Wifi iOS9.3.5 MD528LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad Mini 1st gen 5GHz Google Wifi iOS9.3.5 MD528LL Broadcast Probe.pcap
new file mode 100644
index 0000000..c6532df
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Mini 1st gen 5GHz Google Wifi iOS9.3.5 MD528LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Mini 1st gen 5GHz Google Wifi iOS9.3.5 MD528LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad Mini 1st gen 5GHz Google Wifi iOS9.3.5 MD528LL Specific Probe.pcap
new file mode 100644
index 0000000..2931b8b
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Mini 1st gen 5GHz Google Wifi iOS9.3.5 MD528LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Mini 1st gen 5GHz MD528LL.pcap b/taxonomy/testdata/pcaps/iPad Mini 1st gen 5GHz MD528LL.pcap
index 7d2b6ac..3c2fcd3 100644
--- a/taxonomy/testdata/pcaps/iPad Mini 1st gen 5GHz MD528LL.pcap
+++ b/taxonomy/testdata/pcaps/iPad Mini 1st gen 5GHz MD528LL.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Mini 1st gen 5GHz OnHub iOS9.3.5 MD528LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPad Mini 1st gen 5GHz OnHub iOS9.3.5 MD528LL Broadcast Probe.pcap
new file mode 100644
index 0000000..8cfc225
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Mini 1st gen 5GHz OnHub iOS9.3.5 MD528LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPad Mini 1st gen 5GHz OnHub iOS9.3.5 MD528LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPad Mini 1st gen 5GHz OnHub iOS9.3.5 MD528LL Specific Probe.pcap
new file mode 100644
index 0000000..76480c6
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPad Mini 1st gen 5GHz OnHub iOS9.3.5 MD528LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 4 2.4GHz GFRG210 iOS7.1.2 MC676LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 4 2.4GHz GFRG210 iOS7.1.2 MC676LL Broadcast Probe.pcap
new file mode 100644
index 0000000..82d2479
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 4 2.4GHz GFRG210 iOS7.1.2 MC676LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 4 2.4GHz GFRG210 iOS7.1.2 MC676LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 4 2.4GHz GFRG210 iOS7.1.2 MC676LL Specific Probe.pcap
new file mode 100644
index 0000000..8a6c563
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 4 2.4GHz GFRG210 iOS7.1.2 MC676LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 4 2.4GHz Google Wifi iOS7.1.2 MC676LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 4 2.4GHz Google Wifi iOS7.1.2 MC676LL Broadcast Probe.pcap
new file mode 100644
index 0000000..dc2033d
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 4 2.4GHz Google Wifi iOS7.1.2 MC676LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 4 2.4GHz Google Wifi iOS7.1.2 MC676LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 4 2.4GHz Google Wifi iOS7.1.2 MC676LL Specific Probe.pcap
new file mode 100644
index 0000000..435dfef
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 4 2.4GHz Google Wifi iOS7.1.2 MC676LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 4 2.4GHz OnHub iOS7.1.2 MC676LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 4 2.4GHz OnHub iOS7.1.2 MC676LL Specific Probe.pcap
new file mode 100644
index 0000000..4c7d30d
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 4 2.4GHz OnHub iOS7.1.2 MC676LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 4 2.4GHz.pcap b/taxonomy/testdata/pcaps/iPhone 4 2.4GHz.pcap
deleted file mode 100644
index c339b79..0000000
--- a/taxonomy/testdata/pcaps/iPhone 4 2.4GHz.pcap
+++ /dev/null
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 4s 2.4GHz GFRG210 iOS9.3.5 MC920LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 4s 2.4GHz GFRG210 iOS9.3.5 MC920LL Broadcast Probe.pcap
new file mode 100644
index 0000000..9390fc4
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 4s 2.4GHz GFRG210 iOS9.3.5 MC920LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 4s 2.4GHz GFRG210 iOS9.3.5 MC920LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 4s 2.4GHz GFRG210 iOS9.3.5 MC920LL Specific Probe.pcap
new file mode 100644
index 0000000..d2b3c94
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 4s 2.4GHz GFRG210 iOS9.3.5 MC920LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 4s 2.4GHz Google Wifi iOS9.3.5 MC920LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 4s 2.4GHz Google Wifi iOS9.3.5 MC920LL Broadcast Probe.pcap
new file mode 100644
index 0000000..7094610
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 4s 2.4GHz Google Wifi iOS9.3.5 MC920LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 4s 2.4GHz Google Wifi iOS9.3.5 MC920LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 4s 2.4GHz Google Wifi iOS9.3.5 MC920LL Specific Probe.pcap
new file mode 100644
index 0000000..4cc0378
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 4s 2.4GHz Google Wifi iOS9.3.5 MC920LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 4s 2.4GHz OnHub iOS9.3.5 MC920LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 4s 2.4GHz OnHub iOS9.3.5 MC920LL Broadcast Probe.pcap
new file mode 100644
index 0000000..f0e8168
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 4s 2.4GHz OnHub iOS9.3.5 MC920LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 4s 2.4GHz OnHub iOS9.3.5 MC920LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 4s 2.4GHz OnHub iOS9.3.5 MC920LL Specific Probe.pcap
new file mode 100644
index 0000000..19b5f0c
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 4s 2.4GHz OnHub iOS9.3.5 MC920LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 2.4GHz GFRG210 iOS10.2 MD654LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 2.4GHz GFRG210 iOS10.2 MD654LL Broadcast Probe.pcap
new file mode 100644
index 0000000..0fc9907
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 2.4GHz GFRG210 iOS10.2 MD654LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 2.4GHz GFRG210 iOS10.2 MD654LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 2.4GHz GFRG210 iOS10.2 MD654LL Specific Probe.pcap
new file mode 100644
index 0000000..97380c6
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 2.4GHz GFRG210 iOS10.2 MD654LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 2.4GHz GFRG210 iOS9.3.5 MD654LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 2.4GHz GFRG210 iOS9.3.5 MD654LL Broadcast Probe.pcap
new file mode 100644
index 0000000..2793824
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 2.4GHz GFRG210 iOS9.3.5 MD654LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 2.4GHz GFRG210 iOS9.3.5 MD654LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 2.4GHz GFRG210 iOS9.3.5 MD654LL Specific Probe.pcap
new file mode 100644
index 0000000..868149b
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 2.4GHz GFRG210 iOS9.3.5 MD654LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 2.4GHz Google Wifi iOS10.2 MD654LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 2.4GHz Google Wifi iOS10.2 MD654LL Broadcast Probe.pcap
new file mode 100644
index 0000000..0b8eace
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 2.4GHz Google Wifi iOS10.2 MD654LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 2.4GHz Google Wifi iOS10.2 MD654LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 2.4GHz Google Wifi iOS10.2 MD654LL Specific Probe.pcap
new file mode 100644
index 0000000..7d36d8e
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 2.4GHz Google Wifi iOS10.2 MD654LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 2.4GHz Google Wifi iOS9.3.5 MD654LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 2.4GHz Google Wifi iOS9.3.5 MD654LL Specific Probe.pcap
new file mode 100644
index 0000000..5d1b5bd
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 2.4GHz Google Wifi iOS9.3.5 MD654LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 2.4GHz OnHub iOS10.2 MD654LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 2.4GHz OnHub iOS10.2 MD654LL Broadcast Probe.pcap
new file mode 100644
index 0000000..7ca999e
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 2.4GHz OnHub iOS10.2 MD654LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 2.4GHz OnHub iOS10.2 MD654LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 2.4GHz OnHub iOS10.2 MD654LL Specific Probe.pcap
new file mode 100644
index 0000000..474d1d6
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 2.4GHz OnHub iOS10.2 MD654LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 2.4GHz OnHub iOS9.3.5 MD654LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 2.4GHz OnHub iOS9.3.5 MD654LL Broadcast Probe.pcap
new file mode 100644
index 0000000..993d748
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 2.4GHz OnHub iOS9.3.5 MD654LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 2.4GHz OnHub iOS9.3.5 MD654LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 2.4GHz OnHub iOS9.3.5 MD654LL Specific Probe.pcap
new file mode 100644
index 0000000..96a47e0
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 2.4GHz OnHub iOS9.3.5 MD654LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 5GHz GFRG210 iOS10.2 MD654LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 5GHz GFRG210 iOS10.2 MD654LL Broadcast Probe.pcap
new file mode 100644
index 0000000..034d54a
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 5GHz GFRG210 iOS10.2 MD654LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 5GHz GFRG210 iOS10.2 MD654LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 5GHz GFRG210 iOS10.2 MD654LL Specific Probe.pcap
new file mode 100644
index 0000000..1303f3d
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 5GHz GFRG210 iOS10.2 MD654LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 5GHz GFRG210 iOS9.3.5 MD654LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 5GHz GFRG210 iOS9.3.5 MD654LL Broadcast Probe.pcap
new file mode 100644
index 0000000..e448568
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 5GHz GFRG210 iOS9.3.5 MD654LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 5GHz GFRG210 iOS9.3.5 MD654LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 5GHz GFRG210 iOS9.3.5 MD654LL Specific Probe.pcap
new file mode 100644
index 0000000..c683046
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 5GHz GFRG210 iOS9.3.5 MD654LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 5GHz Google Wifi iOS10.2 MD654LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 5GHz Google Wifi iOS10.2 MD654LL Broadcast Probe.pcap
new file mode 100644
index 0000000..dc26c1e
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 5GHz Google Wifi iOS10.2 MD654LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 5GHz Google Wifi iOS10.2 MD654LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 5GHz Google Wifi iOS10.2 MD654LL Specific Probe.pcap
new file mode 100644
index 0000000..a455e24
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 5GHz Google Wifi iOS10.2 MD654LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 5GHz Google Wifi iOS9.3.5 MD654LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 5GHz Google Wifi iOS9.3.5 MD654LL Broadcast Probe.pcap
new file mode 100644
index 0000000..36b39d4
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 5GHz Google Wifi iOS9.3.5 MD654LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 5GHz Google Wifi iOS9.3.5 MD654LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 5GHz Google Wifi iOS9.3.5 MD654LL Specific Probe.pcap
new file mode 100644
index 0000000..5dd17b4
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 5GHz Google Wifi iOS9.3.5 MD654LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 5GHz OnHub iOS10.2 MD654LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 5GHz OnHub iOS10.2 MD654LL Broadcast Probe.pcap
new file mode 100644
index 0000000..990cb8f
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 5GHz OnHub iOS10.2 MD654LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 5GHz OnHub iOS10.2 MD654LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 5GHz OnHub iOS10.2 MD654LL Specific Probe.pcap
new file mode 100644
index 0000000..dc7217b
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 5GHz OnHub iOS10.2 MD654LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 5GHz OnHub iOS9.3.5 MD654LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 5GHz OnHub iOS9.3.5 MD654LL Broadcast Probe.pcap
new file mode 100644
index 0000000..cb95768
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 5GHz OnHub iOS9.3.5 MD654LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5 5GHz OnHub iOS9.3.5 MD654LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5 5GHz OnHub iOS9.3.5 MD654LL Specific Probe.pcap
new file mode 100644
index 0000000..81473cc
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5 5GHz OnHub iOS9.3.5 MD654LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5s 2.4GHz GFRG210 iOS10.2 ME299LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5s 2.4GHz GFRG210 iOS10.2 ME299LL Broadcast Probe.pcap
new file mode 100644
index 0000000..8b709d1
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5s 2.4GHz GFRG210 iOS10.2 ME299LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5s 2.4GHz GFRG210 iOS10.2 ME299LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5s 2.4GHz GFRG210 iOS10.2 ME299LL Specific Probe.pcap
new file mode 100644
index 0000000..dbf00ad
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5s 2.4GHz GFRG210 iOS10.2 ME299LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5s 2.4GHz Google Wifi iOS10.2 ME299LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5s 2.4GHz Google Wifi iOS10.2 ME299LL Broadcast Probe.pcap
new file mode 100644
index 0000000..9a76509
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5s 2.4GHz Google Wifi iOS10.2 ME299LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5s 2.4GHz Google Wifi iOS10.2 ME299LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5s 2.4GHz Google Wifi iOS10.2 ME299LL Specific Probe.pcap
new file mode 100644
index 0000000..bb73de5
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5s 2.4GHz Google Wifi iOS10.2 ME299LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5s 2.4GHz OnHub iOS10.2 ME299LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5s 2.4GHz OnHub iOS10.2 ME299LL Broadcast Probe.pcap
new file mode 100644
index 0000000..0f5d12c
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5s 2.4GHz OnHub iOS10.2 ME299LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5s 2.4GHz OnHub iOS10.2 ME299LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5s 2.4GHz OnHub iOS10.2 ME299LL Specific Probe.pcap
new file mode 100644
index 0000000..0ac687d
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5s 2.4GHz OnHub iOS10.2 ME299LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5s 5GHz GFRG210 iOS10.2 ME299LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5s 5GHz GFRG210 iOS10.2 ME299LL Broadcast Probe.pcap
new file mode 100644
index 0000000..9570e53
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5s 5GHz GFRG210 iOS10.2 ME299LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5s 5GHz GFRG210 iOS10.2 ME299LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5s 5GHz GFRG210 iOS10.2 ME299LL Specific Probe.pcap
new file mode 100644
index 0000000..8f61b95
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5s 5GHz GFRG210 iOS10.2 ME299LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5s 5GHz Google Wifi iOS10.2 ME299LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5s 5GHz Google Wifi iOS10.2 ME299LL Broadcast Probe.pcap
new file mode 100644
index 0000000..7f602f6
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5s 5GHz Google Wifi iOS10.2 ME299LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5s 5GHz Google Wifi iOS10.2 ME299LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5s 5GHz Google Wifi iOS10.2 ME299LL Specific Probe.pcap
new file mode 100644
index 0000000..075b73e
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5s 5GHz Google Wifi iOS10.2 ME299LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5s 5GHz OnHub iOS10.2 ME299LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5s 5GHz OnHub iOS10.2 ME299LL Broadcast Probe.pcap
new file mode 100644
index 0000000..f144826
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5s 5GHz OnHub iOS10.2 ME299LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 5s 5GHz OnHub iOS10.2 ME299LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 5s 5GHz OnHub iOS10.2 ME299LL Specific Probe.pcap
new file mode 100644
index 0000000..bccb963
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 5s 5GHz OnHub iOS10.2 ME299LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6 2.4GHz GFRG210 iOS 9 MG552LL.pcap b/taxonomy/testdata/pcaps/iPhone 6 2.4GHz GFRG210 iOS 9 MG552LL.pcap
new file mode 100644
index 0000000..675486c
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6 2.4GHz GFRG210 iOS 9 MG552LL.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6 2.4GHz GFRG210 iOS10.2 MG552LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6 2.4GHz GFRG210 iOS10.2 MG552LL Broadcast Probe.pcap
new file mode 100644
index 0000000..b0f9b5e
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6 2.4GHz GFRG210 iOS10.2 MG552LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6 2.4GHz GFRG210 iOS10.2 MG552LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6 2.4GHz GFRG210 iOS10.2 MG552LL Specific Probe.pcap
new file mode 100644
index 0000000..063214d
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6 2.4GHz GFRG210 iOS10.2 MG552LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6 2.4GHz Google Wifi iOS10.2 MG552LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6 2.4GHz Google Wifi iOS10.2 MG552LL Broadcast Probe.pcap
new file mode 100644
index 0000000..4ed4697
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6 2.4GHz Google Wifi iOS10.2 MG552LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6 2.4GHz Google Wifi iOS10.2 MG552LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6 2.4GHz Google Wifi iOS10.2 MG552LL Specific Probe.pcap
new file mode 100644
index 0000000..174b804
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6 2.4GHz Google Wifi iOS10.2 MG552LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6 2.4GHz MG552LL iOS 10.0.2 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6 2.4GHz MG552LL iOS 10.0.2 Broadcast Probe.pcap
deleted file mode 100644
index 7ff9271..0000000
--- a/taxonomy/testdata/pcaps/iPhone 6 2.4GHz MG552LL iOS 10.0.2 Broadcast Probe.pcap
+++ /dev/null
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6 2.4GHz MG552LL iOS 10.0.2 Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6 2.4GHz MG552LL iOS 10.0.2 Specific Probe.pcap
deleted file mode 100644
index a592849..0000000
--- a/taxonomy/testdata/pcaps/iPhone 6 2.4GHz MG552LL iOS 10.0.2 Specific Probe.pcap
+++ /dev/null
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6 2.4GHz OnHub iOS10.2 MG552LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6 2.4GHz OnHub iOS10.2 MG552LL Broadcast Probe.pcap
new file mode 100644
index 0000000..099dcaa
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6 2.4GHz OnHub iOS10.2 MG552LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6 2.4GHz iOS 9.pcap b/taxonomy/testdata/pcaps/iPhone 6 2.4GHz iOS 9.pcap
deleted file mode 100644
index b35358f..0000000
--- a/taxonomy/testdata/pcaps/iPhone 6 2.4GHz iOS 9.pcap
+++ /dev/null
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6 5GHz GFRG210 iOS 9 MG552LL.pcap b/taxonomy/testdata/pcaps/iPhone 6 5GHz GFRG210 iOS 9 MG552LL.pcap
new file mode 100644
index 0000000..c38b520
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6 5GHz GFRG210 iOS 9 MG552LL.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6 5GHz GFRG210 iOS10.2 MG552LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6 5GHz GFRG210 iOS10.2 MG552LL Broadcast Probe.pcap
new file mode 100644
index 0000000..56fdb14
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6 5GHz GFRG210 iOS10.2 MG552LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6 5GHz Google Wifi iOS10.2 MG552LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6 5GHz Google Wifi iOS10.2 MG552LL Broadcast Probe.pcap
new file mode 100644
index 0000000..1836a37
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6 5GHz Google Wifi iOS10.2 MG552LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6 5GHz OnHub iOS10.2 MG552LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6 5GHz OnHub iOS10.2 MG552LL Broadcast Probe.pcap
new file mode 100644
index 0000000..e1a4025
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6 5GHz OnHub iOS10.2 MG552LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6 5GHz iOS 9.pcap b/taxonomy/testdata/pcaps/iPhone 6 5GHz iOS 9.pcap
deleted file mode 100644
index 33c3839..0000000
--- a/taxonomy/testdata/pcaps/iPhone 6 5GHz iOS 9.pcap
+++ /dev/null
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6+ 2.4GHz GFRG210 iOS10.2 MGC02LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6+ 2.4GHz GFRG210 iOS10.2 MGC02LL Broadcast Probe.pcap
new file mode 100644
index 0000000..cc40854
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6+ 2.4GHz GFRG210 iOS10.2 MGC02LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6+ 2.4GHz GFRG210 iOS10.2 MGC02LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6+ 2.4GHz GFRG210 iOS10.2 MGC02LL Specific Probe.pcap
new file mode 100644
index 0000000..22962d6
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6+ 2.4GHz GFRG210 iOS10.2 MGC02LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6+ 2.4GHz Google Wifi iOS10.2 MGC02LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6+ 2.4GHz Google Wifi iOS10.2 MGC02LL Specific Probe.pcap
new file mode 100644
index 0000000..7dbaf5a
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6+ 2.4GHz Google Wifi iOS10.2 MGC02LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6+ 2.4GHz OnHub iOS10.2 MGC02LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6+ 2.4GHz OnHub iOS10.2 MGC02LL Broadcast Probe.pcap
new file mode 100644
index 0000000..3ec4000
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6+ 2.4GHz OnHub iOS10.2 MGC02LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6+ 2.4GHz OnHub iOS10.2 MGC02LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6+ 2.4GHz OnHub iOS10.2 MGC02LL Specific Probe.pcap
new file mode 100644
index 0000000..b4e2d00
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6+ 2.4GHz OnHub iOS10.2 MGC02LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6+ 5GHz GFRG210 iOS10.2 MGC02LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6+ 5GHz GFRG210 iOS10.2 MGC02LL Specific Probe.pcap
new file mode 100644
index 0000000..d2e03dd
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6+ 5GHz GFRG210 iOS10.2 MGC02LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6+ 5GHz Google Wifi iOS10.2 MGC02LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6+ 5GHz Google Wifi iOS10.2 MGC02LL Broadcast Probe.pcap
new file mode 100644
index 0000000..345f19a
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6+ 5GHz Google Wifi iOS10.2 MGC02LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6+ 5GHz Google Wifi iOS10.2 MGC02LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6+ 5GHz Google Wifi iOS10.2 MGC02LL Specific Probe.pcap
new file mode 100644
index 0000000..e2a4433
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6+ 5GHz Google Wifi iOS10.2 MGC02LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6+ 5GHz OnHub iOS10.2 MGC02LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6+ 5GHz OnHub iOS10.2 MGC02LL Broadcast Probe.pcap
new file mode 100644
index 0000000..bdf27a3
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6+ 5GHz OnHub iOS10.2 MGC02LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6+ 5GHz OnHub iOS10.2 MGC02LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6+ 5GHz OnHub iOS10.2 MGC02LL Specific Probe.pcap
new file mode 100644
index 0000000..08ab191
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6+ 5GHz OnHub iOS10.2 MGC02LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6s 2.4GHz GFRG210 iOS10.2 MKRD2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6s 2.4GHz GFRG210 iOS10.2 MKRD2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..cda6aa0
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6s 2.4GHz GFRG210 iOS10.2 MKRD2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6s 2.4GHz GFRG210 iOS10.2 MKRD2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6s 2.4GHz GFRG210 iOS10.2 MKRD2LL Specific Probe.pcap
new file mode 100644
index 0000000..61508b3
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6s 2.4GHz GFRG210 iOS10.2 MKRD2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6s 2.4GHz Google Wifi iOS10.2 MKRD2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6s 2.4GHz Google Wifi iOS10.2 MKRD2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..0100883
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6s 2.4GHz Google Wifi iOS10.2 MKRD2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6s 2.4GHz Google Wifi iOS10.2 MKRD2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6s 2.4GHz Google Wifi iOS10.2 MKRD2LL Specific Probe.pcap
new file mode 100644
index 0000000..954e4f9
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6s 2.4GHz Google Wifi iOS10.2 MKRD2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6s 2.4GHz OnHub iOS10.2 MKRD2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6s 2.4GHz OnHub iOS10.2 MKRD2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..bc425d6
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6s 2.4GHz OnHub iOS10.2 MKRD2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6s 2.4GHz OnHub iOS10.2 MKRD2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6s 2.4GHz OnHub iOS10.2 MKRD2LL Specific Probe.pcap
new file mode 100644
index 0000000..170bf40
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6s 2.4GHz OnHub iOS10.2 MKRD2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6s 5GHz GFRG210 iOS10.2 MKRD2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6s 5GHz GFRG210 iOS10.2 MKRD2LL Specific Probe.pcap
new file mode 100644
index 0000000..e80ebd0
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6s 5GHz GFRG210 iOS10.2 MKRD2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6s 5GHz Google Wifi iOS10.2 MKRD2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6s 5GHz Google Wifi iOS10.2 MKRD2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..0a2afc8
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6s 5GHz Google Wifi iOS10.2 MKRD2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6s 5GHz Google Wifi iOS10.2 MKRD2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6s 5GHz Google Wifi iOS10.2 MKRD2LL Specific Probe.pcap
new file mode 100644
index 0000000..f69d77e
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6s 5GHz Google Wifi iOS10.2 MKRD2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6s 5GHz OnHub iOS10.2 MKRD2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6s 5GHz OnHub iOS10.2 MKRD2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..9289e65
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6s 5GHz OnHub iOS10.2 MKRD2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6s 5GHz OnHub iOS10.2 MKRD2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6s 5GHz OnHub iOS10.2 MKRD2LL Specific Probe.pcap
new file mode 100644
index 0000000..fa6d3e1
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6s 5GHz OnHub iOS10.2 MKRD2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6s+ 2.4GHz GFRG210 iOS10.2 MKV22LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6s+ 2.4GHz GFRG210 iOS10.2 MKV22LL Broadcast Probe.pcap
new file mode 100644
index 0000000..fec1857
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6s+ 2.4GHz GFRG210 iOS10.2 MKV22LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6s+ 2.4GHz Google Wifi iOS10.2 MKV22LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6s+ 2.4GHz Google Wifi iOS10.2 MKV22LL Broadcast Probe.pcap
new file mode 100644
index 0000000..2b74353
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6s+ 2.4GHz Google Wifi iOS10.2 MKV22LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6s+ 2.4GHz Google Wifi iOS10.2 MKV22LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6s+ 2.4GHz Google Wifi iOS10.2 MKV22LL Specific Probe.pcap
new file mode 100644
index 0000000..d1cd939
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6s+ 2.4GHz Google Wifi iOS10.2 MKV22LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6s+ 2.4GHz OnHub iOS10.2 MKV22LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6s+ 2.4GHz OnHub iOS10.2 MKV22LL Broadcast Probe.pcap
new file mode 100644
index 0000000..83a63f6
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6s+ 2.4GHz OnHub iOS10.2 MKV22LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6s+ 2.4GHz OnHub iOS10.2 MKV22LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6s+ 2.4GHz OnHub iOS10.2 MKV22LL Specific Probe.pcap
new file mode 100644
index 0000000..1c10867
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6s+ 2.4GHz OnHub iOS10.2 MKV22LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6s+ 5GHz GFRG210 iOS10.2 MKV22LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6s+ 5GHz GFRG210 iOS10.2 MKV22LL Broadcast Probe.pcap
new file mode 100644
index 0000000..fcefee5
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6s+ 5GHz GFRG210 iOS10.2 MKV22LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6s+ 5GHz GFRG210 iOS10.2 MKV22LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6s+ 5GHz GFRG210 iOS10.2 MKV22LL Specific Probe.pcap
new file mode 100644
index 0000000..ff0ca59
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6s+ 5GHz GFRG210 iOS10.2 MKV22LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6s+ 5GHz Google Wifi iOS10.2 MKV22LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6s+ 5GHz Google Wifi iOS10.2 MKV22LL Broadcast Probe.pcap
new file mode 100644
index 0000000..3d8592f
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6s+ 5GHz Google Wifi iOS10.2 MKV22LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6s+ 5GHz Google Wifi iOS10.2 MKV22LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6s+ 5GHz Google Wifi iOS10.2 MKV22LL Specific Probe.pcap
new file mode 100644
index 0000000..287f5d5
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6s+ 5GHz Google Wifi iOS10.2 MKV22LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6s+ 5GHz OnHub iOS10.2 MKV22LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6s+ 5GHz OnHub iOS10.2 MKV22LL Broadcast Probe.pcap
new file mode 100644
index 0000000..28b5b98
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6s+ 5GHz OnHub iOS10.2 MKV22LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 6s+ 5GHz OnHub iOS10.2 MKV22LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 6s+ 5GHz OnHub iOS10.2 MKV22LL Specific Probe.pcap
new file mode 100644
index 0000000..09c126b
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 6s+ 5GHz OnHub iOS10.2 MKV22LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7 2.4GHz GFRG210 iOS10.2 MN8H2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7 2.4GHz GFRG210 iOS10.2 MN8H2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..7bfde4d
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7 2.4GHz GFRG210 iOS10.2 MN8H2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7 2.4GHz GFRG210 iOS10.2 MN8H2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7 2.4GHz GFRG210 iOS10.2 MN8H2LL Specific Probe.pcap
new file mode 100644
index 0000000..cee17f5
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7 2.4GHz GFRG210 iOS10.2 MN8H2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7 2.4GHz Google Wifi iOS10.2 MN8H2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7 2.4GHz Google Wifi iOS10.2 MN8H2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..d5f7059
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7 2.4GHz Google Wifi iOS10.2 MN8H2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7 2.4GHz Google Wifi iOS10.2 MN8H2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7 2.4GHz Google Wifi iOS10.2 MN8H2LL Specific Probe.pcap
new file mode 100644
index 0000000..a7ae86d
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7 2.4GHz Google Wifi iOS10.2 MN8H2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7 2.4GHz OnHub iOS10.2 MN8H2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7 2.4GHz OnHub iOS10.2 MN8H2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..33f7ef4
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7 2.4GHz OnHub iOS10.2 MN8H2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7 2.4GHz OnHub iOS10.2 MN8H2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7 2.4GHz OnHub iOS10.2 MN8H2LL Specific Probe.pcap
new file mode 100644
index 0000000..dce5689
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7 2.4GHz OnHub iOS10.2 MN8H2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7 5GHz GFRG210 iOS10.2 MN8H2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7 5GHz GFRG210 iOS10.2 MN8H2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..135cf3a
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7 5GHz GFRG210 iOS10.2 MN8H2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7 5GHz GFRG210 iOS10.2 MN8H2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7 5GHz GFRG210 iOS10.2 MN8H2LL Specific Probe.pcap
new file mode 100644
index 0000000..16b61d4
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7 5GHz GFRG210 iOS10.2 MN8H2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7 5GHz Google Wifi iOS10.2 MN8H2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7 5GHz Google Wifi iOS10.2 MN8H2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..24156e3
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7 5GHz Google Wifi iOS10.2 MN8H2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7 5GHz Google Wifi iOS10.2 MN8H2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7 5GHz Google Wifi iOS10.2 MN8H2LL Specific Probe.pcap
new file mode 100644
index 0000000..8e4381f
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7 5GHz Google Wifi iOS10.2 MN8H2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7 5GHz OnHub iOS10.2 MN8H2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7 5GHz OnHub iOS10.2 MN8H2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..ada81e7
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7 5GHz OnHub iOS10.2 MN8H2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7 5GHz OnHub iOS10.2 MN8H2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7 5GHz OnHub iOS10.2 MN8H2LL Specific Probe.pcap
new file mode 100644
index 0000000..6da03d8
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7 5GHz OnHub iOS10.2 MN8H2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/tests/anonymize_pcap_test.sh b/taxonomy/tests/anonymize_pcap_test.sh
new file mode 100755
index 0000000..d7de444
--- /dev/null
+++ b/taxonomy/tests/anonymize_pcap_test.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+. ./wvtest/wvtest.sh
+
+export LC_ALL=C
+
+ORIGFILE="./testdata/anonymize_pcap/chromebook_unanonymized.pcap"
+ANONFILE="/tmp/anonpcaptest.$$.pcap"
+
+WVSTART "anonymize_pcap test"
+
+rm -f "$ANONFILE"
+cp "$ORIGFILE" "$ANONFILE"
+
+WVPASS ./anonymize_pcap -f "$ANONFILE"
+
+orig=$(./tax_signature -f "$ORIGFILE" | cut -d' ' -f2- )
+anon=$(./tax_signature -f "$ANONFILE" | cut -d' ' -f2- )
+WVPASSEQ "$orig" "$anon"
+
+# Obfuscate SSID
+WVPASSNE "$(strings "$ORIGFILE" | grep GEEKHOLD)" ""
+WVPASSEQ "$(strings "$ANONFILE" | grep GEEKHOLD)" ""
+
+# Obfuscate MAC address
+WVPASS grep -qP "\\x6c\\x29\\x95\\x7c\\x25\\xfe" "$ORIGFILE"
+WVFAIL grep -qP "\\x6c\\x29\\x95\\x7c\\x25\\xfe" "$ANONFILE"
diff --git a/taxonomy/wifi.py b/taxonomy/wifi.py
index b2a0086..4057db6 100644
--- a/taxonomy/wifi.py
+++ b/taxonomy/wifi.py
@@ -331,12 +331,16 @@
         ('iPad', 'Air 1st gen', '5GHz'),
     'wifi4|probe:0,1,45,127,221(0017f2,10),107,221(001018,2),221(00904c,51),221(0050f2,8),htcap:01fe,htagg:1b,htmcs:0000ffff,extcap:00000804|assoc:0,1,33,36,48,45,70,221(001018,2),221(00904c,51),221(0050f2,2),221(0017f2,10),htcap:01fe,htagg:1b,htmcs:0000ffff,txpow:e708|os:ios':
         ('iPad', 'Air 1st gen', '5GHz'),
+    'wifi4|probe:0,1,45,127,221(0017f2,10),107,221(001018,2),221(00904c,51),221(0050f2,8),htcap:01fe,htagg:1b,htmcs:0000ffff,extcap:00000804|assoc:0,1,33,36,48,45,127,221(001018,2),221(00904c,51),221(0050f2,2),221(0017f2,10),htcap:01fe,htagg:1b,htmcs:0000ffff,txpow:e708,extcap:000008|os:ios':
+        ('iPad', 'Air 1st gen', '5GHz'),
     'wifi4|probe:0,1,50,3,45,127,221(0017f2,10),107,221(001018,2),221(00904c,51),221(0050f2,8),htcap:01bc,htagg:1b,htmcs:0000ffff,extcap:00000804|assoc:0,1,33,36,48,50,45,221(001018,2),221(00904c,51),221(0050f2,2),221(0017f2,10),htcap:01bc,htagg:1b,htmcs:0000ffff,txpow:1805|os:ios':
         ('iPad', 'Air 1st gen', '2.4GHz'),
     'wifi4|probe:0,1,50,3,45,127,221(0017f2,10),107,221(001018,2),221(00904c,51),221(0050f2,8),htcap:01bc,htagg:1b,htmcs:0000ffff,extcap:00000804|assoc:0,1,33,36,48,50,45,70,221(001018,2),221(00904c,51),221(0050f2,2),221(0017f2,10),htcap:01bc,htagg:1b,htmcs:0000ffff,txpow:1805|os:ios':
         ('iPad', 'Air 1st gen', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,221(0017f2,10),107,221(001018,2),221(00904c,51),221(0050f2,8),htcap:01bc,htagg:1b,htmcs:0000ffff,extcap:00000804|assoc:0,1,33,36,48,50,45,127,221(001018,2),221(00904c,51),221(0050f2,2),221(0017f2,10),htcap:01bc,htagg:1b,htmcs:0000ffff,txpow:1805,extcap:000008|os:ios':
+        ('iPad', 'Air 1st gen', '2.4GHz'),
 
-    # iPad Air 2nd gen with iOS 9. Signatures identical to iPhone 6s, use name to distinguish them.
+    # iPad Air 2nd gen with iOS 9. 5GHz signatures identical to iPhone 6s, use name to distinguish them.
     'wifi4|probe:0,1,45,127,107,191,221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:0400088400000040|assoc:0,1,33,36,48,70,45,127,191,221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:e002,extcap:0400000000000040|name:ipad':
         ('iPad', 'Air 2nd gen', '5GHz'),
     'wifi4|probe:0,1,45,127,107,191,221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffe,extcap:0400088400000040|assoc:0,1,33,36,48,70,45,127,191,221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:e002,extcap:0400000000000040|name:ipad':
@@ -356,15 +360,23 @@
     'wifi4|probe:0,1,50,3,45,127,107,221(0050f2,8),221(001018,2),htcap:002d,htagg:17,htmcs:0000ffff,extcap:0400088400000040|assoc:0,1,50,33,36,48,70,45,127,221(001018,2),221(0050f2,2),htcap:002d,htagg:17,htmcs:0000ffff,txpow:1502,extcap:0000000000000040|os:ios':
         ('iPad', 'Air 2nd gen', '2.4GHz'),
 
-    # iPad Air 2nd gen with iOS 10 changed the 5GHz tx power, no longer identical to iPhone 6s.
-    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:0400088400000040|assoc:0,1,33,36,48,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1302,extcap:0400000000000040|os:ios':
+    # iPad Air 2nd gen with iOS 10. 5GHz signatures identical to iPhone 6s, use name to distinguish them.
+    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:0400088400000040|assoc:0,1,33,36,48,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1302,extcap:0400000000000040|name:ipad':
         ('iPad', 'Air 2nd gen', '5GHz'),
-    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:0400088400000040|assoc:0,1,33,36,48,70,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1302,extcap:0400000000000040|os:ios':
+    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:0400088400000040|assoc:0,1,33,36,48,70,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1302,extcap:0400000000000040|name:ipad':
+        ('iPad', 'Air 2nd gen', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:0400088400000040|assoc:0,1,33,36,48,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1302,extcap:0400080000000040|name:ipad':
+        ('iPad', 'Air 2nd gen', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:0400088400000040|assoc:0,1,33,36,48,70,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1302,extcap:0400080000000040|name:ipad':
         ('iPad', 'Air 2nd gen', '5GHz'),
     'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:002d,htagg:17,htmcs:0000ffff,extcap:0400088400000040|assoc:0,1,50,33,36,48,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:002d,htagg:17,htmcs:0000ffff,txpow:1502,extcap:0000000000000040|os:ios':
         ('iPad', 'Air 2nd gen', '2.4GHz'),
     'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:002d,htagg:17,htmcs:0000ffff,extcap:0400088400000040|assoc:0,1,50,33,36,48,70,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:002d,htagg:17,htmcs:0000ffff,txpow:1502,extcap:0000000000000040|os:ios':
         ('iPad', 'Air 2nd gen', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:002d,htagg:17,htmcs:0000ffff,extcap:0400088400000040|assoc:0,1,50,33,36,48,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:002d,htagg:17,htmcs:0000ffff,txpow:1502,extcap:0400080000000040|os:ios':
+        ('iPad', 'Air 2nd gen', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:002d,htagg:17,htmcs:0000ffff,extcap:0400088400000040|assoc:0,1,50,33,36,48,70,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:002d,htagg:17,htmcs:0000ffff,txpow:1502,extcap:0400080000000040|os:ios':
+        ('iPad', 'Air 2nd gen', '2.4GHz'),
 
     'wifi4|probe:0,1,45,127,107,221(001018,2),221(00904c,51),221(0050f2,8),htcap:0062,htagg:1a,htmcs:000000ff,extcap:00000004|assoc:0,1,33,36,48,45,221(001018,2),221(00904c,51),221(0050f2,2),htcap:0062,htagg:1a,htmcs:000000ff,txpow:1807|os:ios':
         ('iPad Mini', '1st gen', '5GHz'),
@@ -448,25 +460,35 @@
     'wifi4|probe:0,1,50,3,45,127,107,221(001018,2),221(00904c,51),221(0050f2,8),htcap:0020,htagg:1a,htmcs:000000ff,extcap:00000804|assoc:0,1,33,36,48,50,45,70,221(001018,2),221(00904c,51),221(0050f2,2),htcap:0020,htagg:1a,htmcs:000000ff,txpow:1704|os:ios':
         ('iPhone 5c', '', '2.4GHz'),
 
+    # iPhone 5s with iOS 9 and prior.
     'wifi4|probe:0,1,45,127,107,221(001018,2),221(00904c,51),221(0050f2,8),htcap:0062,htagg:1a,htmcs:000000ff,extcap:00000804|assoc:0,1,33,36,48,45,221(001018,2),221(00904c,51),221(0050f2,2),htcap:0062,htagg:1a,htmcs:000000ff,txpow:1603|os:ios':
         ('iPhone 5s', '', '5GHz'),
     'wifi4|probe:0,1,45,127,107,221(001018,2),221(00904c,51),221(0050f2,8),htcap:0062,htagg:1a,htmcs:000000ff,extcap:00000804|assoc:0,1,33,36,48,45,70,221(001018,2),221(00904c,51),221(0050f2,2),htcap:0062,htagg:1a,htmcs:000000ff,txpow:1603|os:ios':
         ('iPhone 5s', '', '5GHz'),
     'wifi4|probe:0,1,45,127,107,221(001018,2),221(00904c,51),221(0050f2,8),htcap:0062,htagg:1a,htmcs:000000ff,extcap:00000004|assoc:0,1,33,36,48,45,70,221(001018,2),221(00904c,51),221(0050f2,2),htcap:0062,htagg:1a,htmcs:000000ff,txpow:1603|os:ios':
         ('iPhone 5s', '', '5GHz'),
-    'wifi4|probe:0,1,45,127,221(0017f2,10),107,221(001018,2),221(00904c,51),221(0050f2,8),htcap:0062,htagg:1a,htmcs:000000ff,extcap:00000804|assoc:0,1,33,36,48,45,221(001018,2),221(00904c,51),221(0050f2,2),221(0017f2,10),htcap:0062,htagg:1a,htmcs:000000ff,txpow:1603|os:ios':
-        ('iPhone 5s', '', '5GHz'),
-    'wifi4|probe:0,1,45,127,221(0017f2,10),107,221(001018,2),221(00904c,51),221(0050f2,8),htcap:0062,htagg:1a,htmcs:000000ff,extcap:00000804|assoc:0,1,33,36,48,45,70,221(001018,2),221(00904c,51),221(0050f2,2),221(0017f2,10),htcap:0062,htagg:1a,htmcs:000000ff,txpow:1603|os:ios':
-        ('iPhone 5s', '', '5GHz'),
     'wifi4|probe:0,1,50,3,45,127,107,221(001018,2),221(00904c,51),221(0050f2,8),htcap:0020,htagg:1a,htmcs:000000ff,extcap:00000804|assoc:0,1,33,36,48,50,45,221(001018,2),221(00904c,51),221(0050f2,2),htcap:0020,htagg:1a,htmcs:000000ff,txpow:1805|os:ios':
         ('iPhone 5s', '', '2.4GHz'),
     'wifi4|probe:0,1,50,3,45,127,107,221(001018,2),221(00904c,51),221(0050f2,8),htcap:0020,htagg:1a,htmcs:000000ff,extcap:00000804|assoc:0,1,33,36,48,50,45,70,221(001018,2),221(00904c,51),221(0050f2,2),htcap:0020,htagg:1a,htmcs:000000ff,txpow:1805|os:ios':
         ('iPhone 5s', '', '2.4GHz'),
+
+    # iPhone 5s with iOS 10.
+    'wifi4|probe:0,1,45,127,221(0017f2,10),107,221(001018,2),221(00904c,51),221(0050f2,8),htcap:0062,htagg:1a,htmcs:000000ff,extcap:00000804|assoc:0,1,33,36,48,45,221(001018,2),221(00904c,51),221(0050f2,2),221(0017f2,10),htcap:0062,htagg:1a,htmcs:000000ff,txpow:1603|os:ios':
+        ('iPhone 5s', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,221(0017f2,10),107,221(001018,2),221(00904c,51),221(0050f2,8),htcap:0062,htagg:1a,htmcs:000000ff,extcap:00000804|assoc:0,1,33,36,48,45,70,221(001018,2),221(00904c,51),221(0050f2,2),221(0017f2,10),htcap:0062,htagg:1a,htmcs:000000ff,txpow:1603|os:ios':
+        ('iPhone 5s', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,221(0017f2,10),107,221(001018,2),221(00904c,51),221(0050f2,8),htcap:0062,htagg:1a,htmcs:000000ff,extcap:00000804|assoc:0,1,33,36,48,45,127,221(001018,2),221(00904c,51),221(0050f2,2),221(0017f2,10),htcap:0062,htagg:1a,htmcs:000000ff,txpow:1603,extcap:000008|os:ios':
+        ('iPhone 5s', '', '5GHz'),
     'wifi4|probe:0,1,50,3,45,127,221(0017f2,10),107,221(001018,2),221(00904c,51),221(0050f2,8),htcap:0020,htagg:1a,htmcs:000000ff,extcap:00000804|assoc:0,1,33,36,48,50,45,221(001018,2),221(00904c,51),221(0050f2,2),221(0017f2,10),htcap:0020,htagg:1a,htmcs:000000ff,txpow:1805|os:ios':
         ('iPhone 5s', '', '2.4GHz'),
     'wifi4|probe:0,1,50,3,45,127,221(0017f2,10),107,221(001018,2),221(00904c,51),221(0050f2,8),htcap:0020,htagg:1a,htmcs:000000ff,extcap:00000804|assoc:0,1,33,36,48,50,45,70,221(001018,2),221(00904c,51),221(0050f2,2),221(0017f2,10),htcap:0020,htagg:1a,htmcs:000000ff,txpow:1805|os:ios':
         ('iPhone 5s', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,45,3,221(001018,2),221(00904c,51),htcap:0100,htagg:19,htmcs:000000ff|assoc:0,1,33,36,48,50,45,70,221(001018,2),221(00904c,51),221(0050f2,2),221(0017f2,10),htcap:0020,htagg:1a,htmcs:000000ff,txpow:1805|os:ios':
+        ('iPhone 5s', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,221(0017f2,10),107,221(001018,2),221(00904c,51),221(0050f2,8),htcap:0020,htagg:1a,htmcs:000000ff,extcap:00000804|assoc:0,1,33,36,48,50,45,127,221(001018,2),221(00904c,51),221(0050f2,2),221(0017f2,10),htcap:0020,htagg:1a,htmcs:000000ff,txpow:1805,extcap:000008|os:ios':
+        ('iPhone 5s', '', '2.4GHz'),
 
+    # iPhone 6/6+ with iOS 9 and prior.
     'wifi4|probe:0,1,45,127,107,191,221(0050f2,8),221(001018,2),htcap:0063,htagg:17,htmcs:000000ff,vhtcap:0f805032,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:0400088400000040|assoc:0,1,33,36,48,70,45,127,191,221(001018,2),221(0050f2,2),htcap:0063,htagg:17,htmcs:000000ff,vhtcap:0f805032,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,txpow:e002,extcap:0400000000000040|os:ios':
         ('iPhone 6/6+', '', '5GHz'),
     'wifi4|probe:0,1,45,127,107,191,221(0050f2,8),221(001018,2),htcap:0063,htagg:17,htmcs:000000ff,vhtcap:0f805032,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:0400088400000040|assoc:0,1,33,36,48,45,127,191,221(001018,2),221(0050f2,2),htcap:0063,htagg:17,htmcs:000000ff,vhtcap:0f805032,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,txpow:e002,extcap:0400000000000040|os:ios':
@@ -495,34 +517,80 @@
         ('iPhone 6', '', '5GHz'),
     'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:0063,htagg:17,htmcs:000000ff,vhtcap:0f805032,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:0400088400000040|assoc:0,1,33,36,48,70,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:0063,htagg:17,htmcs:000000ff,vhtcap:0f805032,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,txpow:1202,extcap:0400000000000040|os:ios':
         ('iPhone 6', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:0063,htagg:17,htmcs:000000ff,vhtcap:0f805032,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:0400088400000040|assoc:0,1,33,36,48,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:0063,htagg:17,htmcs:000000ff,vhtcap:0f805032,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,txpow:1202,extcap:0400080000000040|os:ios':
+        ('iPhone 6', '', '5GHz'),
     'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:0021,htagg:17,htmcs:000000ff,extcap:0400088400000040|assoc:0,1,50,33,36,48,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:0021,htagg:17,htmcs:000000ff,txpow:1302,extcap:0000000000000040|os:ios':
         ('iPhone 6', '', '2.4GHz'),
     'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:0021,htagg:17,htmcs:000000ff,extcap:0400088400000040|assoc:0,1,50,33,36,48,70,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:0021,htagg:17,htmcs:000000ff,txpow:1302,extcap:0000000000000040|os:ios':
         ('iPhone 6', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:0021,htagg:17,htmcs:000000ff,extcap:0400088400000040|assoc:0,1,50,33,36,48,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:0021,htagg:17,htmcs:000000ff,txpow:1302,extcap:0400080000000040|os:ios':
+        ('iPhone 6', '', '2.4GHz'),
 
     # iPhone 6+ with iOS 10 changed txpow, now distinguishable from iPhone 6.
     'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:0063,htagg:17,htmcs:000000ff,vhtcap:0f805032,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:0400088400000040|assoc:0,1,33,36,48,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:0063,htagg:17,htmcs:000000ff,vhtcap:0f805032,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,txpow:1302,extcap:0400000000000040|os:ios':
         ('iPhone 6+', '', '5GHz'),
     'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:0063,htagg:17,htmcs:000000ff,vhtcap:0f805032,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:0400088400000040|assoc:0,1,33,36,48,70,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:0063,htagg:17,htmcs:000000ff,vhtcap:0f805032,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,txpow:1302,extcap:0400000000000040|os:ios':
         ('iPhone 6+', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:0063,htagg:17,htmcs:000000ff,vhtcap:0f805032,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:0400088400000040|assoc:0,1,33,36,48,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:0063,htagg:17,htmcs:000000ff,vhtcap:0f805032,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,txpow:1302,extcap:0400080000000040|os:ios':
+        ('iPhone 6+', '', '5GHz'),
     'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:0021,htagg:17,htmcs:000000ff,extcap:0400088400000040|assoc:0,1,50,33,36,48,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:0021,htagg:17,htmcs:000000ff,txpow:1402,extcap:0000000000000040|os:ios':
         ('iPhone 6+', '', '2.4GHz'),
     'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:0021,htagg:17,htmcs:000000ff,extcap:0400088400000040|assoc:0,1,50,33,36,48,70,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:0021,htagg:17,htmcs:000000ff,txpow:1402,extcap:0000000000000040|os:ios':
         ('iPhone 6+', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:0021,htagg:17,htmcs:000000ff,extcap:0400088400000040|assoc:0,1,50,33,36,48,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:0021,htagg:17,htmcs:000000ff,txpow:1402,extcap:0400080000000040|os:ios':
+        ('iPhone 6+', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:0021,htagg:17,htmcs:000000ff,extcap:0400088400000040|assoc:0,1,50,33,36,48,70,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:0021,htagg:17,htmcs:000000ff,txpow:1402,extcap:0400080000000040|os:ios':
+        ('iPhone 6+', '', '2.4GHz'),
 
     # iPhone 6s/6s+ with iOS 10 changed txpow, now distinguishable on 5GHz. 2.4GHz signatures are identical.
     'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:000000ff,vhtcap:0f815832,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:0400088400000040|assoc:0,1,33,36,48,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1302,extcap:0400000000000040|os:ios':
         ('iPhone 6s', '', '5GHz'),
     'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:000000ff,vhtcap:0f815832,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:0400088400000040|assoc:0,1,33,36,48,70,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1302,extcap:0400000000000040|os:ios':
         ('iPhone 6s', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:000000ff,vhtcap:0f815832,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:0400088400000040|assoc:0,1,33,36,48,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1302,extcap:0400080000000040|os:ios':
+        ('iPhone 6s', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:000000ff,vhtcap:0f815832,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:0400088400000040|assoc:0,1,33,36,48,70,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1302,extcap:0400080000000040|os:ios':
+        ('iPhone 6s', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:0400088400000040|assoc:0,1,33,36,48,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1302,extcap:0400080000000040|os:ios':
+        ('iPhone 6s', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:0400088400000040|assoc:0,1,33,36,48,70,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1302,extcap:0400080000000040|os:ios':
+        ('iPhone 6s', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:0400088400000040|assoc:0,1,33,36,48,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1302,extcap:0400000000000040|os:ios':
+        ('iPhone 6s', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:0400088400000040|assoc:0,1,33,36,48,70,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1302,extcap:0400000000000040|os:ios':
+        ('iPhone 6s', '', '5GHz'),
     'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:000000ff,vhtcap:0f815832,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:0400088400000040|assoc:0,1,33,36,48,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1102,extcap:0400000000000040|os:ios':
         ('iPhone 6s+', '', '5GHz'),
     'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:000000ff,vhtcap:0f815832,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:0400088400000040|assoc:0,1,33,36,48,70,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1102,extcap:0400000000000040|os:ios':
         ('iPhone 6s+', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:000000ff,vhtcap:0f815832,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:0400088400000040|assoc:0,1,33,36,48,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1102,extcap:0400080000000040|os:ios':
+        ('iPhone 6s+', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:000000ff,vhtcap:0f815832,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:0400088400000040|assoc:0,1,33,36,48,70,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1102,extcap:0400080000000040|os:ios':
+        ('iPhone 6s+', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:0400088400000040|assoc:0,1,33,36,48,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1102,extcap:0400080000000040|os:ios':
+        ('iPhone 6s+', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:0400088400000040|assoc:0,1,33,36,48,70,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1102,extcap:0400080000000040|os:ios':
+        ('iPhone 6s+', '', '5GHz'),
     'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:002d,htagg:17,htmcs:000000ff,extcap:0400088400000040|assoc:0,1,50,33,36,48,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:002d,htagg:17,htmcs:0000ffff,txpow:1202,extcap:0000000000000040|os:ios':
         ('iPhone 6s/6s+', '', '2.4GHz'),
     'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:002d,htagg:17,htmcs:000000ff,extcap:0400088400000040|assoc:0,1,50,33,36,48,70,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:002d,htagg:17,htmcs:0000ffff,txpow:1202,extcap:0000000000000040|os:ios':
         ('iPhone 6s/6s+', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:002d,htagg:17,htmcs:0000ffff,extcap:0400088400000040|assoc:0,1,50,33,36,48,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:002d,htagg:17,htmcs:0000ffff,txpow:1202,extcap:0000000000000040|os:ios':
+        ('iPhone 6s/6s+', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:002d,htagg:17,htmcs:0000ffff,extcap:0400088400000040|assoc:0,1,50,33,36,48,70,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:002d,htagg:17,htmcs:0000ffff,txpow:1202,extcap:0000000000000040|os:ios':
+        ('iPhone 6s/6s+', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:002d,htagg:17,htmcs:000000ff,extcap:0400088400000040|assoc:0,1,50,33,36,48,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:002d,htagg:17,htmcs:0000ffff,txpow:1202,extcap:0400080000000040|os:ios':
+        ('iPhone 6s/6s+', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:002d,htagg:17,htmcs:000000ff,extcap:0400088400000040|assoc:0,1,50,33,36,48,70,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:002d,htagg:17,htmcs:0000ffff,txpow:1202,extcap:0400080000000040|os:ios':
+        ('iPhone 6s/6s+', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:002d,htagg:17,htmcs:000000ff,extcap:0400088400000040|assoc:0,1,50,33,36,48,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:002d,htagg:17,htmcs:0000ffff,txpow:1202,extcap:0400080000000040|os:ios':
+        ('iPhone 6s/6s+', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:002d,htagg:17,htmcs:000000ff,extcap:0400088400000040|assoc:0,1,50,33,36,48,70,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:002d,htagg:17,htmcs:0000ffff,txpow:1202,extcap:0400080000000040|os:ios':
+        ('iPhone 6s/6s+', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:002d,htagg:17,htmcs:0000ffff,extcap:0400088400000040|assoc:0,1,50,33,36,48,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:002d,htagg:17,htmcs:0000ffff,txpow:1202,extcap:0400080000000040|os:ios':
+        ('iPhone 6s/6s+', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:002d,htagg:17,htmcs:0000ffff,extcap:0400088400000040|assoc:0,1,50,33,36,48,70,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:002d,htagg:17,htmcs:0000ffff,txpow:1202,extcap:0400080000000040|os:ios':
+        ('iPhone 6s/6s+', '', '2.4GHz'),
 
     # iOS 9 and earlier signature is identical between iPhone 6s and 6s+
     'wifi4|probe:0,1,45,127,107,191,221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:0400088400000040|assoc:0,1,33,36,48,70,45,127,191,221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:e002,extcap:0400000000000040|os:ios':
@@ -564,10 +632,28 @@
 
     'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:000000ff,vhtcap:0f807032,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:00000884|assoc:0,1,33,36,48,70,54,45,127,191,199,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f811032,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:13f9,extcap:000008|os:ios':
         ('iPhone 7', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f811032,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:00000884|assoc:0,1,33,36,48,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f811032,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:13f9,extcap:000008|os:ios':
+        ('iPhone 7', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f817032,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:00000884|assoc:0,1,33,36,48,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f811032,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:13f9,extcap:000008|os:ios':
+        ('iPhone 7', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:000000ff,vhtcap:0f801032,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:00000884|assoc:0,1,33,36,48,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f813032,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:13f9,extcap:000008|os:ios':
+        ('iPhone 7', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:000000ff,vhtcap:0f807032,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:00000884|assoc:0,1,33,36,48,45,127,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f813032,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:13f9,extcap:000008|os:ios':
+        ('iPhone 7', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:000000ff,vhtcap:0f803032,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:00000884|assoc:0,1,33,36,48,70,45,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f811032,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:13f9|os:ios':
+        ('iPhone 7', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:000000ff,vhtcap:0f807032,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:00000884|assoc:0,1,33,36,48,70,45,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f811032,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:13f9|os:ios':
+        ('iPhone 7', '', '5GHz'),
     'wifi4|probe:0,1,45,127,107,191,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f817032,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:00000884|assoc:0,1,33,36,48,45,191,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f817032,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:13f9|os:ios':
         ('iPhone 7+', '', '5GHz'),
+    'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:002d,htagg:17,htmcs:0000ffff,extcap:00000884|assoc:0,1,50,33,36,48,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:002d,htagg:17,htmcs:0000ffff,txpow:13f9,extcap:000008|os:ios':
+        ('iPhone 7/7+', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:002d,htagg:17,htmcs:000000ff,extcap:00000884|assoc:0,1,50,33,36,48,45,127,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:002d,htagg:17,htmcs:0000ffff,txpow:13f9,extcap:000008|os:ios':
+        ('iPhone 7/7+', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:002d,htagg:17,htmcs:000000ff,extcap:0000088400000040|assoc:0,1,50,33,36,48,70,45,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:002d,htagg:17,htmcs:0000ffff,txpow:13f9|os:ios':
+        ('iPhone 7/7+', '', '2.4GHz'),
     'wifi4|probe:0,1,50,3,45,127,107,221(0017f2,10),221(0050f2,8),221(001018,2),htcap:002d,htagg:17,htmcs:000000ff,extcap:00000884|assoc:0,1,50,33,36,48,70,45,221(0017f2,10),221(001018,2),221(0050f2,2),htcap:002d,htagg:17,htmcs:0000ffff,txpow:13f9|os:ios':
-        ('iPhone 7+', '', '2.4GHz'),
+        ('iPhone 7/7+', '', '2.4GHz'),
 
     'wifi4|probe:0,1,45,127,107,191,221(0050f2,8),221(001018,2),htcap:0063,htagg:17,htmcs:000000ff,vhtcap:0f805032,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:0400088400000040|assoc:0,1,33,36,45,127,221(001018,2),221(0050f2,2),htcap:0063,htagg:17,htmcs:000000ff,txpow:e002,extcap:000008|os:ios':
         ('iPhone SE', '', '5GHz'),
@@ -804,6 +890,8 @@
         ('Nexus 7', '2013 edition', '5GHz'),
     'wifi4|probe:0,1,45,221(0050f2,8),htcap:016e,htagg:03,htmcs:000000ff|assoc:0,1,33,36,48,45,221(0050f2,2),127,htcap:016e,htagg:03,htmcs:000000ff,extcap:00000a02|oui:asus':
         ('Nexus 7', '2013 edition', '5GHz'),
+    'wifi4|probe:0,1,45,221(0050f2,8),htcap:016e,htagg:03,htmcs:000000ff|assoc:0,1,48,45,221(0050f2,2),127,htcap:016e,htagg:03,htmcs:000000ff,extcap:00000a02|oui:asus':
+        ('Nexus 7', '2013 edition', '5GHz'),
     'wifi4|probe:0,1,45,221(0050f2,8),127,221(0050f2,4),221(506f9a,9),htcap:016e,htagg:03,htmcs:000000ff,extcap:00000a02,wps:Nexus_7|assoc:0,1,33,36,48,45,221(0050f2,2),127,htcap:016e,htagg:03,htmcs:000000ff,extcap:00000a02':
         ('Nexus 7', '2013 edition', '5GHz'),
     'wifi4|probe:0,1,45,221(0050f2,8),221(0050f2,4),221(506f9a,10),221(506f9a,9),htcap:016e,htagg:03,htmcs:000000ff,wps:Nexus_7|assoc:0,1,33,36,48,45,221(0050f2,2),127,htcap:016e,htagg:03,htmcs:000000ff,extcap:00000a02':
@@ -907,12 +995,28 @@
 
     'wifi4|probe:0,1,45,221(0050f2,8),191,127,htcap:01ef,htagg:1f,htmcs:0000ffff,vhtcap:339071b2,vhtrxmcs:030cfffa,vhttxmcs:030cfffa,extcap:040000000000004080|assoc:0,1,33,36,48,70,45,221(0050f2,2),191,127,htcap:01ef,htagg:1f,htmcs:0000ffff,vhtcap:339071b2,vhtrxmcs:030cfffa,vhttxmcs:030cfffa,txpow:1e08,extcap:04000a020100004080|oui:htc':
         ('Pixel Phone', '', '5GHz'),
+    'wifi4|probe:0,1,45,191,221(0050f2,8),127,htcap:01ef,htagg:1f,htmcs:0000ffff,vhtcap:338001b2,vhtrxmcs:030cfffa,vhttxmcs:030cfffa,extcap:04000a020100004080|assoc:0,1,33,36,48,70,45,221(0050f2,2),191,127,htcap:01ef,htagg:1f,htmcs:0000ffff,vhtcap:339071b2,vhtrxmcs:030cfffa,vhttxmcs:030cfffa,txpow:1e08,extcap:04000a020100004080|oui:htc':
+        ('Pixel Phone', '', '5GHz'),
     'wifi4|probe:0,1,45,191,221(0050f2,8),127,htcap:01ef,htagg:df,htmcs:0000ffff,vhtcap:338001b2,vhtrxmcs:030cfffa,vhttxmcs:030cfffa,extcap:04000a020100004080|assoc:0,1,48,45,221(0050f2,2),191,127,htcap:01ef,htagg:1f,htmcs:0000ffff,vhtcap:339071b2,vhtrxmcs:030cfffa,vhttxmcs:030cfffa,extcap:04000a020100004080|oui:htc':
         ('Pixel Phone', '', '5GHz'),
+    'wifi4|probe:0,1,45,221(0050f2,8),191,127,htcap:01ef,htagg:1f,htmcs:0000ffff,vhtcap:339071b2,vhtrxmcs:030cfffa,vhttxmcs:030cfffa,extcap:040000000000004080|assoc:0,1,48,45,221(0050f2,2),191,127,htcap:01ef,htagg:1f,htmcs:0000ffff,vhtcap:339071b2,vhtrxmcs:030cfffa,vhttxmcs:030cfffa,extcap:04000a020100004080|oui:htc':
+        ('Pixel Phone', '', '5GHz'),
+    'wifi4|probe:0,1,45,221(0050f2,8),191,127,htcap:01ef,htagg:1f,htmcs:0000ffff,vhtcap:339031b2,vhtrxmcs:030cfffa,vhttxmcs:030cfffa,extcap:040000000000004080|assoc:0,1,48,45,221(0050f2,2),191,127,htcap:01ef,htagg:1f,htmcs:0000ffff,vhtcap:339031b2,vhtrxmcs:030cfffa,vhttxmcs:030cfffa,extcap:04000a020100004080|oui:htc':
+        ('Pixel Phone', '', '5GHz'),
+    'wifi4|probe:0,1,45,191,221(0050f2,8),127,htcap:01ef,htagg:1f,htmcs:0000ffff,vhtcap:338001b2,vhtrxmcs:030cfffa,vhttxmcs:030cfffa,extcap:04000a020100004080|assoc:0,1,48,45,221(0050f2,2),191,127,htcap:01ef,htagg:1f,htmcs:0000ffff,vhtcap:339031b2,vhtrxmcs:030cfffa,vhttxmcs:030cfffa,extcap:04000a020100004080|oui:htc':
+        ('Pixel Phone', '', '5GHz'),
+    'wifi4|probe:0,1,45,191,221(0050f2,8),127,htcap:01ef,htagg:1f,htmcs:0000ffff,vhtcap:338001b2,vhtrxmcs:030cfffa,vhttxmcs:030cfffa,extcap:04000a020100004080|assoc:0,1,48,45,221(0050f2,2),191,127,htcap:01ef,htagg:1f,htmcs:0000ffff,vhtcap:339071b2,vhtrxmcs:030cfffa,vhttxmcs:030cfffa,extcap:04000a020100004080|oui:htc':
+        ('Pixel Phone', '', '5GHz'),
     'wifi4|probe:0,1,50,3,45,221(0050f2,8),127,htcap:01ad,htagg:1f,htmcs:0000ffff,extcap:040000000000000080|assoc:0,1,50,33,48,70,45,221(0050f2,2),127,htcap:01ad,htagg:1f,htmcs:0000ffff,txpow:1e08,extcap:04000a020100000080|oui:htc':
         ('Pixel Phone', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,221(0050f2,8),127,htcap:01ad,htagg:1f,htmcs:0000ffff,extcap:040000000000000080|assoc:0,1,50,48,45,221(0050f2,2),127,htcap:01ad,htagg:1f,htmcs:0000ffff,extcap:04000a020100000080|oui:htc':
+        ('Pixel Phone', '', '2.4GHz'),
     'wifi4|probe:0,1,50,45,191,221(0050f2,8),3,127,htcap:01ef,htagg:df,htmcs:0000ffff,vhtcap:33800192,vhtrxmcs:030cfffa,vhttxmcs:030cfffa,extcap:04000a020100004080|assoc:0,1,50,48,45,221(0050f2,2),127,htcap:01ad,htagg:1f,htmcs:0000ffff,extcap:04000a020100000080|oui:htc':
         ('Pixel Phone', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,45,191,221(0050f2,8),3,127,htcap:01ef,htagg:1f,htmcs:0000ffff,vhtcap:33800192,vhtrxmcs:030cfffa,vhttxmcs:030cfffa,extcap:04000a020100004080|assoc:0,1,50,48,45,221(0050f2,2),127,htcap:01ad,htagg:1f,htmcs:0000ffff,extcap:04000a020100000080|oui:htc':
+        ('Pixel Phone', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,45,191,221(0050f2,8),3,127,htcap:01ef,htagg:1f,htmcs:0000ffff,vhtcap:33800192,vhtrxmcs:030cfffa,vhttxmcs:030cfffa,extcap:04000a020100004080|assoc:0,1,50,33,48,70,45,221(0050f2,2),127,htcap:01ad,htagg:1f,htmcs:0000ffff,txpow:1e08,extcap:04000a020100000080|oui:htc':
+        ('Pixel Phone', '', '2.4GHz'),
 
     'wifi4|probe:0,1|assoc:0,1,221(005043,1)|os:playstation':
         ('Playstation', '3', '2.4GHz'),
@@ -1017,9 +1121,13 @@
 
     'wifi4|probe:0,1,45,3,221(001018,2),221(00904c,51),htcap:000c,htagg:19,htmcs:000000ff|assoc:0,1,33,36,48,45,221(001018,2),221(00904c,51),221(0050f2,2),htcap:000c,htagg:19,htmcs:000000ff,txpow:0f09|oui:samsung':
         ('Samsung Galaxy Note or S2+', '', '5GHz'),
+    'wifi4|probe:0,1,45,221(001018,2),221(00904c,51),htcap:000c,htagg:19,htmcs:000000ff|assoc:0,1,33,36,48,45,221(001018,2),221(00904c,51),221(0050f2,2),htcap:000c,htagg:19,htmcs:000000ff,txpow:0f09|oui:samsung':
+        ('Samsung Galaxy Note or S2+', '', '5GHz'),
 
     'wifi4|probe:0,1,50,45,3,221(001018,2),221(00904c,51),htcap:100c,htagg:19,htmcs:000000ff|assoc:0,1,33,36,48,50,45,221(001018,2),221(00904c,51),221(0050f2,2),htcap:100c,htagg:19,htmcs:000000ff,txpow:1409|oui:samsung':
         ('Samsung Galaxy Note', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,45,221(001018,2),221(00904c,51),htcap:100c,htagg:19,htmcs:000000ff|assoc:0,1,33,36,48,50,45,221(001018,2),221(00904c,51),221(0050f2,2),htcap:100c,htagg:19,htmcs:000000ff,txpow:1409|oui:samsung':
+        ('Samsung Galaxy Note', '', '2.4GHz'),
 
     'wifi4|probe:0,1,45,221(001018,2),221(00904c,51),htcap:0062,htagg:1a,htmcs:000000ff|assoc:0,1,33,36,45,221(001018,2),221(00904c,51),221(0050f2,2),htcap:0062,htagg:1a,htmcs:000000ff,txpow:0e09|oui:samsung':
         ('Samsung Galaxy Note II', '', '5GHz'),
@@ -1033,15 +1141,27 @@
         ('Samsung Galaxy Note II', '', '2.4GHz'),
     'wifi4|probe:0,1,50,45,3,221(001018,2),221(00904c,51),htcap:1020,htagg:1a,htmcs:000000ff|assoc:0,1,33,36,48,50,45,221(001018,2),221(00904c,51),221(0050f2,2),htcap:1020,htagg:1a,htmcs:000000ff,txpow:1209|oui:samsung':
         ('Samsung Galaxy Note II', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,45,221(001018,2),221(00904c,51),htcap:1020,htagg:1a,htmcs:000000ff|assoc:0,1,33,36,48,50,45,221(001018,2),221(00904c,51),221(0050f2,2),htcap:1020,htagg:1a,htmcs:000000ff,txpow:1209|oui:samsung':
+        ('Samsung Galaxy Note II', '', '2.4GHz'),
 
     'wifi4|probe:0,1,3,45,127,191,221(001018,2),221(00904c,51),221(00904c,4),221(0050f2,8),htcap:016f,htagg:17,htmcs:000000ff,vhtcap:0f805932,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:0000080000000040|assoc:0,1,33,36,48,45,127,191,221(001018,2),221(00904c,4),221(0050f2,2),htcap:016f,htagg:17,htmcs:000000ff,vhtcap:0f805932,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,txpow:e008,extcap:0000000000000040|oui:samsung':
         ('Samsung Galaxy Note 3', '', '5GHz'),
     'wifi4|probe:0,1,45,127,191,221(001018,2),221(00904c,51),221(00904c,4),221(0050f2,8),htcap:016f,htagg:17,htmcs:000000ff,vhtcap:0f805932,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:0000080000000040|assoc:0,1,33,36,48,45,127,191,221(001018,2),221(00904c,4),221(0050f2,2),htcap:016f,htagg:17,htmcs:000000ff,vhtcap:0f805932,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,txpow:e008,extcap:0000000000000040|oui:samsung':
         ('Samsung Galaxy Note 3', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,191,221(001018,2),221(00904c,51),221(00904c,4),221(0050f2,8),htcap:016f,htagg:17,htmcs:000000ff,vhtcap:0f805932,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:0000088001400040|assoc:0,1,33,36,48,45,127,191,221(001018,2),221(00904c,4),221(0050f2,2),htcap:016f,htagg:17,htmcs:000000ff,vhtcap:0f805932,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,txpow:e008,extcap:0000008001400040|oui:samsung':
+        ('Samsung Galaxy Note 3', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,191,221(001018,2),221(00904c,51),221(00904c,4),221(0050f2,8),htcap:016f,htagg:17,htmcs:000000ff,vhtcap:0f805932,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,extcap:0000088001400040|assoc:0,1,33,36,48,45,127,191,221(001018,2),221(00904c,4),221(0050f2,2),htcap:016f,htagg:17,htmcs:000000ff,vhtcap:0f805932,vhtrxmcs:0000fffe,vhttxmcs:0000fffe,txpow:e008,extcap:0000088001400040|oui:samsung':
+        ('Samsung Galaxy Note 3', '', '5GHz'),
     'wifi4|probe:0,1,50,3,45,127,221(001018,2),221(00904c,51),221(00904c,4),221(0050f2,8),htcap:112d,htagg:17,htmcs:000000ff,extcap:0000080000000040|assoc:0,1,33,36,48,50,45,221(001018,2),221(0050f2,2),htcap:112d,htagg:17,htmcs:000000ff,txpow:1208|oui:samsung':
         ('Samsung Galaxy Note 3', '', '2.4GHz'),
     'wifi4|probe:0,1,50,3,45,127,221(001018,2),221(00904c,51),221(00904c,4),221(0050f2,8),htcap:112d,htagg:17,htmcs:000000ff,extcap:0000080000000040|assoc:0,1,33,36,48,50,45,127,221(001018,2),221(0050f2,2),htcap:112d,htagg:17,htmcs:000000ff,txpow:1208|oui:samsung':
         ('Samsung Galaxy Note 3', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,45,127,221(001018,2),221(00904c,51),221(00904c,4),221(0050f2,8),htcap:112d,htagg:17,htmcs:000000ff,extcap:0000088001400040|assoc:0,1,33,36,48,50,45,127,221(001018,2),221(00904c,4),221(0050f2,2),htcap:112d,htagg:17,htmcs:000000ff,txpow:1208,extcap:0000088001400040|oui:samsung':
+        ('Samsung Galaxy Note 3', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,221(001018,2),221(00904c,51),221(00904c,4),221(0050f2,8),htcap:112d,htagg:17,htmcs:000000ff,extcap:0000088001400040|assoc:0,1,33,36,48,50,45,127,221(001018,2),221(00904c,4),221(0050f2,2),htcap:112d,htagg:17,htmcs:000000ff,txpow:1208,extcap:0000088001400040|oui:samsung':
+        ('Samsung Galaxy Note 3', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,221(001018,2),221(00904c,51),221(00904c,4),221(0050f2,8),htcap:112d,htagg:17,htmcs:000000ff,extcap:0000088001400040|assoc:0,1,33,36,48,50,45,127,221(001018,2),221(0050f2,2),htcap:112d,htagg:17,htmcs:000000ff,txpow:1208,extcap:000000800140|oui:samsung':
+        ('Samsung Galaxy Note 3', '', '2.4GHz'),
 
     'wifi4|probe:0,1,45,127,107,191,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:0000088001400040|assoc:0,1,33,36,48,45,127,107,191,221(00904c,4),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:e009,extcap:0000088001400040|oui:samsung':
         ('Samsung Galaxy Note 4', '', '5GHz'),
@@ -1052,14 +1172,31 @@
     'wifi4|probe:0,1,50,3,45,127,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:002d,htagg:17,htmcs:0000ffff,extcap:0000088001400040|assoc:0,1,50,33,36,48,70,45,127,221(001018,2),221(0050f2,2),htcap:002d,htagg:17,htmcs:0000ffff,txpow:1509,extcap:0000088001400040|oui:samsung':
         ('Samsung Galaxy Note 4', '', '2.4GHz'),
 
+    'wifi4|probe:0,1,45,127,107,191,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9178b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:00080f8401400040|assoc:0,1,33,36,48,70,45,127,191,199,221(00904c,4),221(001018,2),221(0050f2,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9118b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1102,extcap:0000000000000040|oui:samsung':
+        ('Samsung Galaxy Note 5 or S7 Edge', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9118b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:00080f8401400040|assoc:0,1,33,36,48,70,45,127,191,199,221(00904c,4),221(001018,2),221(0050f2,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9118b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1102,extcap:0000000000000040|oui:samsung':
+        ('Samsung Galaxy Note 5 or S7 Edge', '', '5GHz'),
+
     'wifi4|probe:0,1,45,127,107,191,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9118b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:00080f8401400040|assoc:0,1,33,36,48,45,127,191,199,221(00904c,4),221(001018,2),221(0050f2,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9118b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1102,extcap:0000000000000040|oui:samsung':
         ('Samsung Galaxy Note 5', '', '5GHz'),
     'wifi4|probe:0,1,45,127,107,191,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9118b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:00080f8401400040|assoc:0,1,33,36,48,70,45,127,191,199,221(00904c,4),221(001018,2),221(0050f2,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9118b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1202,extcap:0000000000000040|oui:samsung':
         ('Samsung Galaxy Note 5', '', '5GHz'),
     'wifi4|probe:0,1,45,127,107,191,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9118b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:00080f840140|assoc:0,1,33,36,48,70,45,191,199,221(00904c,4),221(001018,2),221(0050f2,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9118b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1202|oui:samsung':
         ('Samsung Galaxy Note 5', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9178b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:00080f8401400040|assoc:0,1,33,36,48,45,127,191,199,221(00904c,4),221(001018,2),221(0050f2,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9118b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1102,extcap:0000080000000040|oui:samsung':
+        ('Samsung Galaxy Note 5', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9118b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:00080f8401400040|assoc:0,1,33,36,48,45,127,191,199,221(00904c,4),221(001018,2),221(0050f2,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9138b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1102,extcap:0000080000000040|oui:samsung':
+        ('Samsung Galaxy Note 5', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9178b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:00080f8401400040|assoc:0,1,33,36,48,45,127,191,199,221(00904c,4),221(001018,2),221(0050f2,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9138b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1102,extcap:0000080000000040|oui:samsung':
+        ('Samsung Galaxy Note 5', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9118b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:00080f8401400040|assoc:0,1,33,36,48,45,127,191,199,221(00904c,4),221(001018,2),221(0050f2,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9118b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1102,extcap:0000080000000040|oui:samsung':
+        ('Samsung Galaxy Note 5', '', '5GHz'),
     'wifi4|probe:0,1,50,3,45,127,107,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:01ad,htagg:17,htmcs:0000ffff,extcap:00080f8401400040|assoc:0,1,50,33,36,48,45,221(001018,2),221(0050f2,2),htcap:01ad,htagg:17,htmcs:0000ffff,txpow:1202|oui:samsung':
         ('Samsung Galaxy Note 5', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,107,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:01ad,htagg:17,htmcs:0000ffff,extcap:00080f8401400040|assoc:0,1,50,33,36,48,45,127,199,221(00904c,4),221(001018,2),221(0050f2,2),htcap:01ad,htagg:17,htmcs:0000ffff,txpow:1202,extcap:0000080000000040|oui:samsung':
+        ('Samsung Galaxy Note 5', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,107,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:01ad,htagg:17,htmcs:0000ffff,extcap:00080f8401400040|assoc:0,1,50,33,36,48,70,45,221(001018,2),221(0050f2,2),htcap:01ad,htagg:17,htmcs:0000ffff,txpow:1202|oui:samsung':
+        ('Samsung Galaxy Note 5', '', '2.4GHz'),
 
     'wifi4|probe:0,1,45,221(001018,2),221(00904c,51),htcap:000c,htagg:19,htmcs:000000ff|assoc:0,1,33,36,48,45,221(001018,2),221(00904c,51),221(0050f2,2),htcap:000c,htagg:19,htmcs:000000ff,txpow:0f0a|oui:samsung':
         ('Samsung Galaxy S2', '', '5GHz'),
@@ -1098,6 +1235,12 @@
         ('Samsung Galaxy S4', '', '2.4GHz'),
     'wifi4|probe:0,1,50,45,127,107,221(506f9a,16),221(001018,2),221(00904c,51),221(00904c,4),221(0050f2,8),htcap:102d,htagg:17,htmcs:000000ff,extcap:0000088000400040|assoc:0,1,33,36,48,50,45,127,107,221(001018,2),221(0050f2,2),htcap:102d,htagg:17,htmcs:000000ff,txpow:1201,extcap:000000800040|oui:samsung':
         ('Samsung Galaxy S4', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,221(001018,2),221(00904c,51),221(00904c,4),221(0050f2,8),htcap:102d,htagg:17,htmcs:000000ff,extcap:0000080000400040|assoc:0,1,33,36,48,50,45,127,221(001018,2),221(00904c,4),221(0050f2,2),htcap:102d,htagg:17,htmcs:000000ff,txpow:1201,extcap:0000000000400040|oui:samsung':
+        ('Samsung Galaxy S4', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,45,127,221(001018,2),221(00904c,51),221(00904c,4),221(0050f2,8),htcap:102d,htagg:17,htmcs:000000ff,extcap:0000080000400040|assoc:0,1,33,36,48,50,45,127,221(001018,2),221(00904c,4),221(0050f2,2),htcap:102d,htagg:17,htmcs:000000ff,txpow:1201,extcap:0000000000400040|oui:samsung':
+        ('Samsung Galaxy S4', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,221(001018,2),221(00904c,51),221(00904c,4),221(0050f2,8),htcap:102d,htagg:17,htmcs:000000ff,extcap:0000080000400040|assoc:0,1,33,36,48,50,45,127,221(001018,2),221(0050f2,2),htcap:102d,htagg:17,htmcs:000000ff,txpow:1201,extcap:000000000040|oui:samsung':
+        ('Samsung Galaxy S4', '', '2.4GHz'),
 
     'wifi4|probe:0,1,45,127,107,191,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:0000088001400040|assoc:0,1,33,36,48,45,127,107,191,221(00904c,4),221(001018,2),221(0050f2,2),htcap:006f,htagg:17,htmcs:0000ffff,vhtcap:0f815832,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:e20b,extcap:0000088001400040|oui:samsung':
         ('Samsung Galaxy S5', '', '5GHz'),
@@ -1138,8 +1281,20 @@
 
     'wifi4|probe:0,1,45,127,107,191,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9178b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:00080f840140|assoc:0,1,33,36,48,70,45,191,199,221(00904c,4),221(001018,2),221(0050f2,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9118b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1102|oui:samsung':
         ('Samsung Galaxy S7 Edge', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9118b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:00080f8401400040|assoc:0,1,33,36,48,45,127,191,199,221(00904c,4),221(001018,2),221(0050f2,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9138b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1002,extcap:0000080000000040|oui:samsung':
+        ('Samsung Galaxy S7 Edge', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9138b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:00080f8401400040|assoc:0,1,33,36,48,45,127,191,199,221(00904c,4),221(001018,2),221(0050f2,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9118b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1002,extcap:0000080000000040|oui:samsung':
+        ('Samsung Galaxy S7 Edge', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9178b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:00080f8401400040|assoc:0,1,33,36,48,45,127,191,199,221(00904c,4),221(001018,2),221(0050f2,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9118b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1002,extcap:0000080000000040|oui:samsung':
+        ('Samsung Galaxy S7 Edge', '', '5GHz'),
+    'wifi4|probe:0,1,45,127,107,191,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9178b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:00080f8401400040|assoc:0,1,33,36,48,45,127,191,199,221(00904c,4),221(001018,2),221(0050f2,2),htcap:01ef,htagg:17,htmcs:0000ffff,vhtcap:0f9138b2,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:1002,extcap:0000080000000040|oui:samsung':
+        ('Samsung Galaxy S7 Edge', '', '5GHz'),
     'wifi4|probe:0,1,50,3,45,127,107,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:1163,htagg:17,htmcs:0000ffff,extcap:00080f8401400040|assoc:0,1,50,33,36,48,70,45,221(001018,2),221(0050f2,2),htcap:01ad,htagg:17,htmcs:0000ffff,txpow:1302|oui:samsung':
         ('Samsung Galaxy S7 Edge', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,107,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:01ad,htagg:17,htmcs:0000ffff,extcap:00080f8401400040|assoc:0,1,50,33,36,48,70,45,221(001018,2),221(0050f2,2),htcap:01ad,htagg:17,htmcs:0000ffff,txpow:1302|oui:samsung':
+        ('Samsung Galaxy S7 Edge', '', '2.4GHz'),
+    'wifi4|probe:0,1,50,3,45,127,107,221(506f9a,16),221(00904c,4),221(0050f2,8),221(001018,2),htcap:01ad,htagg:17,htmcs:0000ffff,extcap:00080f8401400040|assoc:0,1,50,33,36,48,45,127,199,221(00904c,4),221(001018,2),221(0050f2,2),htcap:01ad,htagg:17,htmcs:0000ffff,txpow:1302,extcap:0000080000000040|oui:samsung':
+        ('Samsung Galaxy S7 Edge', '', '2.4GHz'),
 
     'wifi4|probe:0,1,45,221(001018,2),221(00904c,51),htcap:082c,htagg:1b,htmcs:000000ff|assoc:0,1,33,36,48,45,221(001018,2),221(00904c,51),221(0050f2,2),htcap:082c,htagg:1b,htmcs:000000ff,txpow:0f08|oui:samsung':
         ('Samsung Galaxy Tab', '', '5GHz'),
diff --git a/taxonomy/wvtest/LICENSE b/taxonomy/wvtest/LICENSE
new file mode 100644
index 0000000..eb685a5
--- /dev/null
+++ b/taxonomy/wvtest/LICENSE
@@ -0,0 +1,481 @@
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+                    675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL.  It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it.  You can use it for
+your libraries, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library.  If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software.  To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+  Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs.  This
+license, the GNU Library General Public License, applies to certain
+designated libraries.  This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+  The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it.  Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program.  However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+  Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries.  We
+concluded that weaker conditions might promote sharing better.
+
+  However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves.  This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them.  (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.)  The hope is that this
+will lead to faster development of free libraries.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+  Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License").  Each licensee is
+addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    c) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    d) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+     Appendix: How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public
+    License along with this library; if not, write to the Free
+    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/taxonomy/wvtest/__init__.py b/taxonomy/wvtest/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/taxonomy/wvtest/__init__.py
diff --git a/taxonomy/wvtest/wvtest.py b/taxonomy/wvtest/wvtest.py
new file mode 100755
index 0000000..8f2564c
--- /dev/null
+++ b/taxonomy/wvtest/wvtest.py
@@ -0,0 +1,252 @@
+#!/usr/bin/env python
+#
+# WvTest:
+#   Copyright (C)2007-2012 Versabanq Innovations Inc. and contributors.
+#       Licensed under the GNU Library General Public License, version 2.
+#       See the included file named LICENSE for license information.
+#       You can get wvtest from: http://github.com/apenwarr/wvtest
+#
+import atexit
+import inspect
+import os
+import re
+import sys
+import traceback
+
+# NOTE
+# Why do we do we need the "!= main" check?  Because if you run
+# wvtest.py as a main program and it imports your test files, then
+# those test files will try to import the wvtest module recursively.
+# That actually *works* fine, because we don't run this main program
+# when we're imported as a module.  But you end up with two separate
+# wvtest modules, the one that gets imported, and the one that's the
+# main program.  Each of them would have duplicated global variables
+# (most importantly, wvtest._registered), and so screwy things could
+# happen.  Thus, we make the main program module *totally* different
+# from the imported module.  Then we import wvtest (the module) into
+# wvtest (the main program) here and make sure to refer to the right
+# versions of global variables.
+#
+# All this is done just so that wvtest.py can be a single file that's
+# easy to import into your own applications.
+if __name__ != '__main__':   # we're imported as a module
+    _registered = []
+    _tests = 0
+    _fails = 0
+
+    def wvtest(func, innerfunc=None):
+        """ Use this decorator (@wvtest) in front of any function you want to
+            run as part of the unit test suite.  Then run:
+                python wvtest.py path/to/yourtest.py [other test.py files...]
+            to run all the @wvtest functions in the given file(s).
+        """
+        _registered.append((func, innerfunc or func))
+        return func
+
+
+    def _result(msg, tb, code):
+        global _tests, _fails
+        _tests += 1
+        if code != 'ok':
+            _fails += 1
+        (filename, line, func, text) = tb
+        filename = os.path.basename(filename)
+        msg = re.sub(r'\s+', ' ', str(msg))
+        sys.stderr.flush()
+        print '! %-70s %s' % ('%s:%-4d %s' % (filename, line, msg),
+                              code)
+        sys.stdout.flush()
+
+
+    def _check(cond, msg, xdepth):
+        tb = traceback.extract_stack()[-3 - xdepth]
+        if cond:
+            _result(msg, tb, 'ok')
+        else:
+            _result(msg, tb, 'FAILED')
+        return cond
+
+
+    def _code(xdepth):
+        (filename, line, func, text) = traceback.extract_stack()[-3 - xdepth]
+        text = re.sub(r'^[\w\.]+\((.*)\)(\s*#.*)?$', r'\1', str(text));
+        return text
+
+
+    def WVPASS(cond = True, xdepth = 0):
+        ''' Counts a test failure unless cond is true. '''
+        return _check(cond, _code(xdepth), xdepth)
+
+    def WVFAIL(cond = True, xdepth = 0):
+        ''' Counts a test failure  unless cond is false. '''
+        return _check(not cond, 'NOT(%s)' % _code(xdepth), xdepth)
+
+    def WVPASSIS(a, b, xdepth = 0):
+        ''' Counts a test failure unless a is b. '''
+        return _check(a is b, '%s is %s' % (repr(a), repr(b)), xdepth)
+
+    def WVPASSISNOT(a, b, xdepth = 0):
+        ''' Counts a test failure unless a is not b. '''
+        return _check(a is not b, '%s is not %s' % (repr(a), repr(b)), xdepth)
+
+    def WVPASSEQ(a, b, xdepth = 0):
+        ''' Counts a test failure unless a == b. '''
+        return _check(a == b, '%s == %s' % (repr(a), repr(b)), xdepth)
+
+    def WVPASSNE(a, b, xdepth = 0):
+        ''' Counts a test failure unless a != b. '''
+        return _check(a != b, '%s != %s' % (repr(a), repr(b)), xdepth)
+
+    def WVPASSLT(a, b, xdepth = 0):
+        ''' Counts a test failure unless a < b. '''
+        return _check(a < b, '%s < %s' % (repr(a), repr(b)), xdepth)
+
+    def WVPASSLE(a, b, xdepth = 0):
+        ''' Counts a test failure unless a <= b. '''
+        return _check(a <= b, '%s <= %s' % (repr(a), repr(b)), xdepth)
+
+    def WVPASSGT(a, b, xdepth = 0):
+        ''' Counts a test failure unless a > b. '''
+        return _check(a > b, '%s > %s' % (repr(a), repr(b)), xdepth)
+
+    def WVPASSGE(a, b, xdepth = 0):
+        ''' Counts a test failure unless a >= b. '''
+        return _check(a >= b, '%s >= %s' % (repr(a), repr(b)), xdepth)
+
+    def WVPASSNEAR(a, b, places = 7, delta = None, xdepth = 0):
+        ''' Counts a test failure unless a ~= b. '''
+        if delta:
+            return _check(abs(a - b) <= abs(delta),
+                          '%s ~= %s' % (repr(a), repr(b)), xdepth)
+        else:
+            return _check(round(a, places) == round(b, places),
+                          '%s ~= %s' % (repr(a), repr(b)), xdepth)
+
+    def WVPASSFAR(a, b, places = 7, delta = None, xdepth = 0):
+        ''' Counts a test failure unless a ~!= b. '''
+        if delta:
+            return _check(abs(a - b) > abs(delta),
+                          '%s ~= %s' % (repr(a), repr(b)), xdepth)
+        else:
+            return _check(round(a, places) != round(b, places),
+                          '%s ~= %s' % (repr(a), repr(b)), xdepth)
+
+    def _except_report(cond, code, xdepth):
+        return _check(cond, 'EXCEPT(%s)' % code, xdepth + 1)
+
+    class _ExceptWrapper(object):
+        def __init__(self, etype, xdepth):
+            self.etype = etype
+            self.xdepth = xdepth
+            self.code = None
+
+        def __enter__(self):
+          self.code = _code(self.xdepth)
+
+        def __exit__(self, etype, value, traceback):
+            if etype == self.etype:
+                _except_report(True, self.code, self.xdepth)
+                return 1  # success, got the expected exception
+            elif etype is None:
+                _except_report(False, self.code, self.xdepth)
+                return 0
+            else:
+                _except_report(False, self.code, self.xdepth)
+
+    def _WVEXCEPT(etype, xdepth, func, *args, **kwargs):
+        if func:
+            code = _code(xdepth + 1)
+            try:
+                func(*args, **kwargs)
+            except etype, e:
+                return _except_report(True, code, xdepth + 1)
+            except:
+                _except_report(False, code, xdepth + 1)
+                raise
+            else:
+                return _except_report(False, code, xdepth + 1)
+        else:
+            return _ExceptWrapper(etype, xdepth)
+
+    def WVEXCEPT(etype, func=None, *args, **kwargs):
+        ''' Counts a test failure unless func throws an 'etype' exception.
+            You have to spell out the function name and arguments, rather than
+            calling the function yourself, so that WVEXCEPT can run before
+            your test code throws an exception.
+        '''
+        return _WVEXCEPT(etype, 0, func, *args, **kwargs)
+
+
+    def _check_unfinished():
+        if _registered:
+            for func, innerfunc in _registered:
+                print 'WARNING: not run: %r' % (innerfunc,)
+            WVFAIL('wvtest_main() not called')
+        if _fails:
+            sys.exit(1)
+
+    atexit.register(_check_unfinished)
+
+
+def _run_in_chdir(path, func, *args, **kwargs):
+    oldwd = os.getcwd()
+    oldpath = sys.path
+    try:
+        if path: os.chdir(path)
+        sys.path += [path, os.path.split(path)[0]]
+        return func(*args, **kwargs)
+    finally:
+        os.chdir(oldwd)
+        sys.path = oldpath
+
+
+def _runtest(fname, f, innerfunc):
+    import wvtest as _wvtestmod
+    mod = inspect.getmodule(innerfunc)
+    relpath = os.path.relpath(mod.__file__, os.getcwd()).replace('.pyc', '.py')
+    print
+    print 'Testing "%s" in %s:' % (fname, relpath)
+    sys.stdout.flush()
+    try:
+        _run_in_chdir(os.path.split(mod.__file__)[0], f)
+    except Exception, e:
+        print
+        print traceback.format_exc()
+        tb = sys.exc_info()[2]
+        _wvtestmod._result(repr(e), traceback.extract_tb(tb)[-1], 'EXCEPTION')
+
+
+def _run_registered_tests():
+    import wvtest as _wvtestmod
+    while _wvtestmod._registered:
+        func, innerfunc = _wvtestmod._registered.pop(0)
+        _runtest(innerfunc.func_name, func, innerfunc)
+        print
+
+
+def wvtest_main(extra_testfiles=[]):
+    import wvtest as _wvtestmod
+    _run_registered_tests()
+    for modname in extra_testfiles:
+        if not os.path.exists(modname):
+            print 'Skipping: %s' % modname
+            continue
+        if modname.endswith('.py'):
+            modname = modname[:-3]
+        print 'Importing: %s' % modname
+        path, mod = os.path.split(os.path.abspath(modname))
+        nicename = modname.replace(os.path.sep, '.')
+        while nicename.startswith('.'):
+            nicename = modname[1:]
+        _run_in_chdir(path, __import__, nicename, None, None, [])
+        _run_registered_tests()
+    print
+    print 'WvTest: %d tests, %d failures.' % (_wvtestmod._tests,
+                                              _wvtestmod._fails)
+
+
+if __name__ == '__main__':
+    import wvtest as _wvtestmod
+    sys.modules['wvtest'] = _wvtestmod
+    sys.modules['wvtest.wvtest'] = _wvtestmod
+    wvtest_main(sys.argv[1:])
diff --git a/taxonomy/wvtest/wvtest.sh b/taxonomy/wvtest/wvtest.sh
new file mode 100644
index 0000000..19e0167
--- /dev/null
+++ b/taxonomy/wvtest/wvtest.sh
@@ -0,0 +1,140 @@
+#
+# WvTest:
+#   Copyright (C)2007-2012 Versabanq Innovations Inc. and contributors.
+#       Licensed under the GNU Library General Public License, version 2.
+#       See the included file named LICENSE for license information.
+#       You can get wvtest from: http://github.com/apenwarr/wvtest
+#
+# Include this file in your shell script by using:
+#         #!/bin/sh
+#         . ./wvtest.sh
+#
+
+# we don't quote $TEXT in case it contains newlines; newlines
+# aren't allowed in test output.  However, we set -f so that
+# at least shell glob characters aren't processed.
+_wvtextclean()
+{
+	( set -f; echo $* )
+}
+
+
+if [ -n "$BASH_VERSION" ]; then
+	_wvfind_caller()
+	{
+		LVL=$1
+		WVCALLER_FILE=${BASH_SOURCE[2]}
+		WVCALLER_LINE=${BASH_LINENO[1]}
+	}
+else
+	_wvfind_caller()
+	{
+		LVL=$1
+		WVCALLER_FILE="unknown"
+		WVCALLER_LINE=0
+	}
+fi
+
+
+_wvcheck()
+{
+	CODE="$1"
+	TEXT=$(_wvtextclean "$2")
+	OK=ok
+	if [ "$CODE" -ne 0 ]; then
+		OK=FAILED
+	fi
+	echo "! $WVCALLER_FILE:$WVCALLER_LINE  $TEXT  $OK" >&2
+	if [ "$CODE" -ne 0 ]; then
+		exit $CODE
+	else
+		return 0
+	fi
+}
+
+
+WVPASS()
+{
+	TEXT="$*"
+
+	_wvfind_caller
+	if "$@"; then
+		_wvcheck 0 "$TEXT"
+		return 0
+	else
+		_wvcheck 1 "$TEXT"
+		# NOTREACHED
+		return 1
+	fi
+}
+
+
+WVFAIL()
+{
+	TEXT="$*"
+
+	_wvfind_caller
+	if "$@"; then
+		_wvcheck 1 "NOT($TEXT)"
+		# NOTREACHED
+		return 1
+	else
+		_wvcheck 0 "NOT($TEXT)"
+		return 0
+	fi
+}
+
+
+_wvgetrv()
+{
+	( "$@" >&2 )
+	echo -n $?
+}
+
+
+WVPASSEQ()
+{
+	_wvfind_caller
+	_wvcheck $(_wvgetrv [ "$#" -eq 2 ]) "exactly 2 arguments"
+	echo "Comparing:" >&2
+	echo "$1" | sed -e 's/^/<<< /' >&2
+	echo "--" >&2
+	echo "$2" | sed -e 's/^/>>> /' >&2
+	_wvcheck $(_wvgetrv [ "$1" = "$2" ]) "'$1' = '$2'"
+}
+
+
+WVPASSNE()
+{
+	_wvfind_caller
+	_wvcheck $(_wvgetrv [ "$#" -eq 2 ]) "exactly 2 arguments"
+	echo "Comparing:" >&2
+	echo "$1" | sed -e 's/^/<<< /' >&2
+	echo "--" >&2
+	echo "$2" | sed -e 's/^/>>> /' >&2
+	_wvcheck $(_wvgetrv [ "$1" != "$2" ]) "'$1' != '$2'"
+}
+
+
+WVPASSRC()
+{
+	RC=$?
+	_wvfind_caller
+	_wvcheck $(_wvgetrv [ $RC -eq 0 ]) "return code($RC) == 0"
+}
+
+
+WVFAILRC()
+{
+	RC=$?
+	_wvfind_caller
+	_wvcheck $(_wvgetrv [ $RC -ne 0 ]) "return code($RC) != 0"
+}
+
+
+WVSTART()
+{
+	echo >&2
+	_wvfind_caller
+	echo "Testing \"$*\" in $WVCALLER_FILE:" >&2
+}
diff --git a/taxonomy/wvtest/wvtestrun b/taxonomy/wvtest/wvtestrun
new file mode 100755
index 0000000..897b95f
--- /dev/null
+++ b/taxonomy/wvtest/wvtestrun
@@ -0,0 +1,187 @@
+#!/usr/bin/perl -w
+#
+# WvTest:
+#   Copyright (C)2007-2012 Versabanq Innovations Inc. and contributors.
+#       Licensed under the GNU Library General Public License, version 2.
+#       See the included file named LICENSE for license information.
+#       You can get wvtest from: http://github.com/apenwarr/wvtest
+#
+use strict;
+use Time::HiRes qw(time);
+
+# always flush
+$| = 1;
+
+if (@ARGV < 1) {
+    print STDERR "Usage: $0 <command line...>\n";
+    exit 127;
+}
+
+print STDERR "Testing \"all\" in @ARGV:\n";
+
+my $pid = open(my $fh, "-|");
+if (!$pid) {
+    # child
+    setpgrp();
+    open STDERR, '>&STDOUT' or die("Can't dup stdout: $!\n");
+    exec(@ARGV);
+    exit 126; # just in case
+}
+
+my $istty = -t STDOUT && $ENV{'TERM'} ne "dumb";
+my @log = ();
+my ($gpasses, $gfails) = (0,0);
+
+sub bigkill($)
+{
+    my $pid = shift;
+
+    if (@log) {
+	print "\n" . join("\n", @log) . "\n";
+    }
+
+    print STDERR "\n! Killed by signal    FAILED\n";
+
+    ($pid > 0) || die("pid is '$pid'?!\n");
+
+    local $SIG{CHLD} = sub { }; # this will wake us from sleep() faster
+    kill 15, $pid;
+    sleep(2);
+
+    if ($pid > 1) {
+	kill 9, -$pid;
+    }
+    kill 9, $pid;
+
+    exit(125);
+}
+
+# parent
+local $SIG{INT} = sub { bigkill($pid); };
+local $SIG{TERM} = sub { bigkill($pid); };
+local $SIG{ALRM} = sub {
+    print STDERR "Alarm timed out!  No test results for too long.\n";
+    bigkill($pid);
+};
+
+sub colourize($)
+{
+    my $result = shift;
+    my $pass = ($result eq "ok");
+
+    if ($istty) {
+	my $colour = $pass ? "\e[32;1m" : "\e[31;1m";
+	return "$colour$result\e[0m";
+    } else {
+	return $result;
+    }
+}
+
+sub mstime($$$)
+{
+    my ($floatsec, $warntime, $badtime) = @_;
+    my $ms = int($floatsec * 1000);
+    my $str = sprintf("%d.%03ds", $ms/1000, $ms % 1000);
+
+    if ($istty && $ms > $badtime) {
+        return "\e[31;1m$str\e[0m";
+    } elsif ($istty && $ms > $warntime) {
+        return "\e[33;1m$str\e[0m";
+    } else {
+        return "$str";
+    }
+}
+
+sub resultline($$)
+{
+    my ($name, $result) = @_;
+    return sprintf("! %-65s %s", $name, colourize($result));
+}
+
+my $allstart = time();
+my ($start, $stop);
+
+sub endsect()
+{
+    $stop = time();
+    if ($start) {
+	printf " %s %s\n", mstime($stop - $start, 500, 1000), colourize("ok");
+    }
+}
+
+while (<$fh>)
+{
+    chomp;
+    s/\r//g;
+
+    if (/^\s*Testing "(.*)" in (.*):\s*$/)
+    {
+        alarm(120);
+	my ($sect, $file) = ($1, $2);
+
+	endsect();
+
+	printf("! %s  %s: ", $file, $sect);
+	@log = ();
+	$start = $stop;
+    }
+    elsif (/^!\s*(.*?)\s+(\S+)\s*$/)
+    {
+        alarm(120);
+
+	my ($name, $result) = ($1, $2);
+	my $pass = ($result eq "ok");
+
+	if (!$start) {
+	    printf("\n! Startup: ");
+	    $start = time();
+	}
+
+	push @log, resultline($name, $result);
+
+	if (!$pass) {
+	    $gfails++;
+	    if (@log) {
+		print "\n" . join("\n", @log) . "\n";
+		@log = ();
+	    }
+	} else {
+	    $gpasses++;
+	    print ".";
+	}
+    }
+    else
+    {
+	push @log, $_;
+    }
+}
+
+endsect();
+
+my $newpid = waitpid($pid, 0);
+if ($newpid != $pid) {
+    die("waitpid returned '$newpid', expected '$pid'\n");
+}
+
+my $code = $?;
+my $ret = ($code >> 8);
+
+# return death-from-signal exits as >128.  This is what bash does if you ran
+# the program directly.
+if ($code && !$ret) { $ret = $code | 128; }
+
+if ($ret && @log) {
+    print "\n" . join("\n", @log) . "\n";
+}
+
+if ($code != 0) {
+    print resultline("Program returned non-zero exit code ($ret)", "FAILED");
+}
+
+my $gtotal = $gpasses+$gfails;
+printf("\nWvTest: %d test%s, %d failure%s, total time %s.\n",
+    $gtotal, $gtotal==1 ? "" : "s",
+    $gfails, $gfails==1 ? "" : "s",
+    mstime(time() - $allstart, 2000, 5000));
+print STDERR "\nWvTest result code: $ret\n";
+exit( $ret ? $ret : ($gfails ? 125 : 0) );
diff --git a/wifi/configs.py b/wifi/configs.py
index 240dd63..4dcdaab 100644
--- a/wifi/configs.py
+++ b/wifi/configs.py
@@ -23,6 +23,7 @@
     'WifiShortAggTimeout',
     'WifiNoAggTimeout',
     'WifiNoAliveMonitor',
+    'MwifiexFirmwareRecovery',
 ]
 for _i in EXPERIMENTS:
   experiment.register(_i)
diff --git a/wifi/mwifiex.py b/wifi/mwifiex.py
new file mode 100755
index 0000000..8cad3ac
--- /dev/null
+++ b/wifi/mwifiex.py
@@ -0,0 +1,23 @@
+#!/usr/bin/python -S
+
+"""Special handling for mwifiex driver.
+
+   The mwifiex driver has a mechanism to detect when the firmware is
+   stuck and attempt a reset. It is disabled by default and can be
+   configured with this helper.
+"""
+import glob
+import utils
+
+_MWIFIEX_SYS_RECOVERY = '/sys/kernel/debug/mwifiex/*/firmware_recover'
+
+
+def set_recovery(recovery_flag):
+  # Marvell's firmware can get into a non-recovery state
+  # that hangs forever. The driver can detect this state and perform a
+  # a reset when enabled with a debug flag, which is done here when the
+  # corresponding experiment is active.
+  recovery_flag = int(recovery_flag)
+  for sys_path in glob.glob(_MWIFIEX_SYS_RECOVERY):
+    utils.log('mwifiex.py: set %r to %r.' % (sys_path, recovery_flag))
+    open(sys_path, 'w').write(str(recovery_flag))
diff --git a/wifi/wifi.py b/wifi/wifi.py
index a0aa84b..19e2d13 100755
--- a/wifi/wifi.py
+++ b/wifi/wifi.py
@@ -17,6 +17,7 @@
 import configs
 import experiment
 import iw
+import mwifiex
 import options
 import persist
 import qca9880_cal
@@ -252,6 +253,7 @@
 
   # Check for calibration errors on ath10k.
   qca9880_cal.qca8990_calibration()
+  mwifiex.set_recovery(experiment.enabled('MwifiexFirmwareRecovery'))
 
   client_interface = iw.find_interface_from_phy(
       phy, iw.INTERFACE_TYPE.client, opt.interface_suffix)
@@ -987,6 +989,8 @@
   if band == '5' and quantenna.set_client_wifi(opt):
     return True
 
+  mwifiex.set_recovery(experiment.enabled('MwifiexFirmwareRecovery'))
+
   phy = iw.find_phy(band, 'auto')
   if phy is None:
     utils.log("Couldn't find phy for band %s", band)