Merge "conman:  Set WLAN retry delay properly after a new WLAN config."
diff --git a/antirollback/antirollback.py b/antirollback/antirollback.py
index d6839d9..49da6b5 100644
--- a/antirollback/antirollback.py
+++ b/antirollback/antirollback.py
@@ -26,7 +26,7 @@
 antirollback [options...]
 --
 i,interval=   seconds between updates [28800]
-p,persist=    path to persistent file [/config/ar_clock]
+p,persist=    path to persistent file [/fiber/config/ar_clock]
 u,user=       setuid to this user to run
 """
 
diff --git a/cache_warming/cache_warming.py b/cache_warming/cache_warming.py
index 986bcd7..e98e6f8 100644
--- a/cache_warming/cache_warming.py
+++ b/cache_warming/cache_warming.py
@@ -23,7 +23,7 @@
 TOP_N = 50
 FETCH_INTERVAL = 60  # seconds
 UDP_SERVER_PATH = '/tmp/dns_query_log_socket'
-HOSTS_JSON_PATH = '/config/cache_warming_hosts.json'
+HOSTS_JSON_PATH = '/fiber/config/cache_warming_hosts.json'
 
 
 def save_hosts(log):
diff --git a/cmds/dnsck.c b/cmds/dnsck.c
index a069345..38a914e 100644
--- a/cmds/dnsck.c
+++ b/cmds/dnsck.c
@@ -22,6 +22,7 @@
 #include <stdlib.h>
 #include <sys/stat.h>
 #include <time.h>
+#include <unistd.h>
 
 #define RESOLV_CONF "/etc/resolv.conf"
 #define RESOLV_CONF_EXTERNAL "/tmp/resolv.conf.external"
@@ -265,12 +266,20 @@
     free((char *)servers[i]);
 }
 
-int main(int argc, const char *argv[])
+void usage(const char *progname)
+{
+  fprintf(stderr, "usage: %s [-i interface]\nwhere:\n", progname);
+  fprintf(stderr, "\t-i : name of interface to SO_BINDTODEVICE, like br0\n");
+  exit(1);
+}
+
+int main(int argc, char * const argv[])
 {
   ares_channel channel;
   const char *servers[MAX_SERVERS];
   size_t count;
-  int rc;
+  const char *interface = NULL;
+  int rc, c;
 
   struct ares_options options = {
     .flags = ARES_FLAG_NOCHECKRESP,
@@ -278,6 +287,17 @@
     .tries = 1,
   };
 
+  while ((c = getopt(argc, argv, "i:")) != -1) {
+    switch (c) {
+    case 'i':
+      interface = optarg;
+      break;
+    default:
+      usage(argv[0]);
+      break;
+    }
+  }
+
   rc = ares_library_init(ARES_LIB_INIT_NONE);
   if (rc)
     ares_error_die(ares_strerror(rc));
@@ -287,6 +307,10 @@
   if (rc)
     ares_error_die(ares_strerror(rc));
 
+  if (interface) {
+    ares_set_local_dev(channel, interface);
+  }
+
   count = read_resolv_conf(servers, MAX_SERVERS);
   resolve_array(channel, servers, count);
   free_servers(servers, count);
@@ -295,8 +319,8 @@
   resolve_array(channel, servers, count);
   free_servers(servers, count);
 
-  if (argc > 1)
-    resolve_array(channel, argv + 1, argc - 1);
+  if (optind > 0)
+    resolve_array(channel, (const char **)&argv[optind], argc - optind);
 
   printf("\n");
   ares_destroy(channel);
diff --git a/cmds/logos.c b/cmds/logos.c
index 57a6d02..b5304b1 100644
--- a/cmds/logos.c
+++ b/cmds/logos.c
@@ -484,7 +484,7 @@
       "W: SIGUSR1: rate limit disabled.";
   static uint8_t now_limited[] =
       "W: SIGUSR2: rate limit re-enabled.";
-  const char *disable_limits_file = "/config/disable-log-limits";
+  const char *disable_limits_file = "/fiber/config/disable-log-limits";
   uint8_t buf[MAX_LINE_LENGTH], *header;
   ssize_t used = 0, got, headerlen;
   int overlong = 0;
diff --git a/conman/connection_manager.py b/conman/connection_manager.py
index 1de792d..c9a4db1 100755
--- a/conman/connection_manager.py
+++ b/conman/connection_manager.py
@@ -167,7 +167,10 @@
       self.logger.debug('Wifi client already started on %s GHz', self.band)
       return
 
-    if self._actually_start_client():
+    # /bin/wifi will return 0 if the config hasn't changed, even if it is not
+    # /currently associated, so we need to check self.client_up as well as
+    # /checking that /bin/wifi succeeded.
+    if self._actually_start_client() and self.client_up:
       self.wifi.status.connected_to_wlan = True
       self.logger.info('Started wifi client on %s GHz', self.band)
       self.try_after = now
@@ -241,7 +244,7 @@
   def __init__(self,
                bridge_interface='br0',
                tmp_dir='/tmp/conman',
-               config_dir='/config/conman',
+               config_dir='/fiber/config/conman',
                moca_tmp_dir='/tmp/cwmp/monitoring/moca2',
                run_duration_s=1, interface_update_period=5,
                wifi_scan_period_s=120, wlan_retry_s=120, associate_wait_s=15,
diff --git a/conman/interface.py b/conman/interface.py
index 245ca27..fbef47e 100755
--- a/conman/interface.py
+++ b/conman/interface.py
@@ -82,7 +82,7 @@
     if 'default' not in self.current_routes():
       return False
 
-    cmd = [self.CONNECTION_CHECK, '-I', self.name]
+    cmd = ['timeout', '5', self.CONNECTION_CHECK, '-I', self.name]
     if check_acs:
       cmd.append('-a')
 
diff --git a/craftui/craftui.py b/craftui/craftui.py
index f726bf2..f77213c 100755
--- a/craftui/craftui.py
+++ b/craftui/craftui.py
@@ -562,7 +562,7 @@
     data['cpu_temperature'] = self.ReadFile(sim + '/tmp/gpio/cpu_temperature')
     data['peer_up'] = os.path.exists(sim + '/tmp/peer-up')
     data['cpss_ready'] = os.path.exists(sim + '/tmp/cpss_ready')
-    cs = '/config/settings/'
+    cs = '/fiber/config/settings/'
     data['craft_ipaddr'] = self.ReadFile(sim + cs + 'craft_ipaddr')
     data['link_ipaddr'] = self.ReadFile(sim + cs + 'local_ipaddr')
     data['peer_ipaddr'] = self.ReadFile(sim + cs + 'peer_ipaddr')
diff --git a/experiment.py b/experiment.py
index 1318974..384c02a 100644
--- a/experiment.py
+++ b/experiment.py
@@ -9,7 +9,7 @@
 logger = logging.getLogger(__name__)
 
 EXPERIMENTS_TMP_DIR = '/tmp/experiments'
-EXPERIMENTS_DIR = '/config/experiments'
+EXPERIMENTS_DIR = '/fiber/config/experiments'
 
 _experiment_warned = set()
 _experiment_enabled = set()
diff --git a/libexperiments/experiments.h b/libexperiments/experiments.h
index 1f086ba..8f4981b 100644
--- a/libexperiments/experiments.h
+++ b/libexperiments/experiments.h
@@ -11,7 +11,7 @@
 //
 // C++ example:
 // ====================================
-//   const char* kConfigFolderPath[] = "/config/experiments";
+//   const char* kConfigFolderPath[] = "/fiber/config/experiments";
 //   int64_t kMinTimeBetweenRefreshUs = 60 * 1000 * 1000;  // 60 secs
 //   e = new Experiments();
 //   if (!e->Initialize(kConfigFolderPath, kMinTimeBetweenRefreshUs,
@@ -27,7 +27,7 @@
 //
 // C example:
 // ===================================
-//   const char* kConfigFolderPath[] = "/config/experiments";
+//   const char* kConfigFolderPath[] = "/fiber/config/experiments";
 //   int64_t kMinTimeBetweenRefreshUs = 60 * 1000 * 1000;  // 60 secs
 //   if (!experiments_initialize(kConfigFolderPath, kMinTimeBetweenRefreshUs,
 //                               NULL);  // use default register function
diff --git a/signing/S99readallfiles b/signing/S99readallfiles
index 00838fa..0132288 100755
--- a/signing/S99readallfiles
+++ b/signing/S99readallfiles
@@ -28,7 +28,7 @@
   start)
     (
       if is-fiberjack; then
-        nice -n 19 readallfiles -q /config && clear_failure_count
+        nice -n 19 readallfiles -q /fiber/config && clear_failure_count
       else
         nice -n 19 readallfiles -q / && clear_failure_count
       fi
diff --git a/speedtest/config.cc b/speedtest/config.cc
index 41803eb..cff195c 100644
--- a/speedtest/config.cc
+++ b/speedtest/config.cc
@@ -38,7 +38,7 @@
   }
 
   http::Url config_url(options.region_url);
-  config_url.set_path("/config");
+  config_url.set_path("/fiber/config");
   if (options.verbose) {
     std::cout << "Loading config from " << config_url.url() << "\n";
   }
diff --git a/speedtest/region.cc b/speedtest/region.cc
index 7e9e05a..ecb1f51 100644
--- a/speedtest/region.cc
+++ b/speedtest/region.cc
@@ -71,7 +71,7 @@
   }
 
   http::Url config_url(options.global_url);
-  config_url.set_path("/config");
+  config_url.set_path("/fiber/config");
   if (options.verbose) {
     std::cout << "Loading regions from " << config_url.url() << "\n";
   }
diff --git a/taxonomy/dhcp.py b/taxonomy/dhcp.py
index e415126..3affcef 100644
--- a/taxonomy/dhcp.py
+++ b/taxonomy/dhcp.py
@@ -18,8 +18,8 @@
 """
 
 # Unit tests can override these.
-DHCP_LEASES_FILE = '/config/dhcp.leases'
-DHCP_SIGNATURE_FILE = '/config/dhcp.fingerprints'
+DHCP_LEASES_FILE = '/fiber/config/dhcp.leases'
+DHCP_SIGNATURE_FILE = '/fiber/config/dhcp.fingerprints'
 
 
 # There is an enormous database of DHCP fingerprints at fingerbank.org.
diff --git a/taxonomy/ethernet.py b/taxonomy/ethernet.py
index f73cb9e..f80b3cf 100644
--- a/taxonomy/ethernet.py
+++ b/taxonomy/ethernet.py
@@ -53,6 +53,7 @@
 
     '58:67:1a': ['barnes&noble'],
 
+    '04:c9:d9': ['dish'],
     '2c:b0:5d': ['dish'],
 
     '30:8c:fb': ['dropcam'],
diff --git a/taxonomy/pcaptest.py b/taxonomy/pcaptest.py
index fc5806e..b6e4766 100644
--- a/taxonomy/pcaptest.py
+++ b/taxonomy/pcaptest.py
@@ -104,10 +104,39 @@
   ('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'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7+ 5GHz OnHub iOS10.1.1 MNQJ2LL Broadcast Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7+ 2.4GHz OnHub iOS10.1.1 MNQJ2LL Specific Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7+ 2.4GHz GFRG210 iOS10.1.1 MNQJ2LL Specific Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7+ 5GHz GFRG210 iOS10.1.1 MNQJ2LL Specific Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7+ 5GHz OnHub iOS10.1.1 MNQJ2LL Specific Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7+ 5GHz GFRG210 iOS10.2 MNQJ2LL Specific Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7 5GHz GFRG210 iOS10.2 MN8H2LL Specific Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7+ 2.4GHz Google Wifi iOS10.2 MNQJ2LL Specific Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7 5GHz GFRG210 iOS10.2 MN8H2LL Broadcast Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7+ 5GHz Google Wifi iOS10.2 MNQJ2LL Specific Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7+ 5GHz Google Wifi iOS10.1.1 MNQJ2LL Broadcast Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7 5GHz Google Wifi iOS10.2 MN8H2LL Specific Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7 5GHz.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7+ 2.4GHz OnHub iOS10.2 MNQJ2LL Specific Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7+ 2.4GHz Google Wifi iOS10.2 MNQJ2LL Broadcast Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7+ 2.4GHz Google Wifi iOS10.1.1 MNQJ2LL Specific Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7+ 5GHz.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7 5GHz Google Wifi iOS10.2 MN8H2LL Broadcast Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7+ 2.4GHz OnHub iOS10.2 MNQJ2LL Broadcast Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7 5GHz OnHub iOS10.2 MN8H2LL Specific Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7 5GHz OnHub iOS10.2 MN8H2LL Broadcast Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7+ 5GHz GFRG210 iOS10.2 MNQJ2LL Broadcast Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7+ 2.4GHz Google Wifi iOS10.1.1 MNQJ2LL Broadcast Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7+ 5GHz Google Wifi iOS10.1.1 MNQJ2LL Specific Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7+ 5GHz OnHub iOS10.2 MNQJ2LL Specific Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7+ 5GHz OnHub iOS10.2 MNQJ2LL Broadcast Probe.pcap'),
+  ('iPhone 7/7+', './testdata/pcaps/iPhone 7+ 5GHz Google Wifi iOS10.2 MNQJ2LL Broadcast 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'),
-  ('Nest Thermostat v1 or v2', './testdata/pcaps/Nest Thermostat 2.4GHz.pcap'),
+  ('Nest Thermostat v1 or v2', './testdata/pcaps/Nest Thermostat v1 2.4GHz OnHub sw 5.6-7 hw Diamond 1.10 Broadcast Probe.pcap'),
+  ('Nest Thermostat v1 or v2', './testdata/pcaps/Nest Thermostat v1 2.4GHz GFRG210 sw 5.6-7 hw Diamond 1.10 Broadcast Probe.pcap'),
+  ('Nest Thermostat v1 or v2', './testdata/pcaps/Nest Thermostat v1 2.4GHz Google Wifi sw 5.6-7 hw Diamond 1.10 Broadcast Probe.pcap'),
   ('Roku 2 or 3 or Streaming Stick', './testdata/pcaps/Roku 3 2.4GHz 4230.pcap'),
   ('Roku 2 or 3 or Streaming Stick', './testdata/pcaps/Roku 3 5GHz 4230.pcap'),
   ('Roku 4 or TV', './testdata/pcaps/Roku 4 2.4GHz.pcap'),
@@ -168,7 +197,10 @@
   rc = 0
 
   for (expected_model, pcap) in regression:
-    pcaps.remove(pcap)
+    try:
+      pcaps.remove(pcap)
+    except ValueError as e:
+      raise ValueError('%s : %s' % (str(e), pcap))
     if check_pcap(expected_model, pcap):
       rc = 1
 
diff --git a/taxonomy/testdata/dhcp.leases b/taxonomy/testdata/dhcp.leases
index 4d6c71c..af1f5e4 100644
--- a/taxonomy/testdata/dhcp.leases
+++ b/taxonomy/testdata/dhcp.leases
@@ -81,3 +81,4 @@
 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 *
+1432237016 7c:04:d0:00:00:00 192.168.42.71 iPhoone-7+ *
diff --git a/taxonomy/testdata/dhcp.signatures b/taxonomy/testdata/dhcp.signatures
index cd01395..b172fa7 100644
--- a/taxonomy/testdata/dhcp.signatures
+++ b/taxonomy/testdata/dhcp.signatures
@@ -73,3 +73,4 @@
 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
+7c:04:d0:00:00:00 1,121,3,6,15,119,252
diff --git a/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 2.4GHz GFRG210 sw U334 hw Hopper3 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 2.4GHz GFRG210 sw U334 hw Hopper3 Broadcast Probe.pcap
new file mode 100644
index 0000000..14483a1
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 2.4GHz GFRG210 sw U334 hw Hopper3 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 2.4GHz GFRG210 sw U334 hw Hopper3 Specific Probe.pcap b/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 2.4GHz GFRG210 sw U334 hw Hopper3 Specific Probe.pcap
new file mode 100644
index 0000000..16e5236
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 2.4GHz GFRG210 sw U334 hw Hopper3 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 2.4GHz Google Wifi sw U334 hw Hopper3 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 2.4GHz Google Wifi sw U334 hw Hopper3 Broadcast Probe.pcap
new file mode 100644
index 0000000..119483e
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 2.4GHz Google Wifi sw U334 hw Hopper3 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 2.4GHz Google Wifi sw U334 hw Hopper3 Specific Probe.pcap b/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 2.4GHz Google Wifi sw U334 hw Hopper3 Specific Probe.pcap
new file mode 100644
index 0000000..99784cb
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 2.4GHz Google Wifi sw U334 hw Hopper3 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 5GHz GFRG210 sw U334 hw Hopper3 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 5GHz GFRG210 sw U334 hw Hopper3 Broadcast Probe.pcap
new file mode 100644
index 0000000..0adacf1
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 5GHz GFRG210 sw U334 hw Hopper3 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 5GHz GFRG210 sw U334 hw Hopper3 Specific Probe.pcap b/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 5GHz GFRG210 sw U334 hw Hopper3 Specific Probe.pcap
new file mode 100644
index 0000000..d8ae927
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 5GHz GFRG210 sw U334 hw Hopper3 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 5GHz Google Wifi sw U334 hw Hopper3 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 5GHz Google Wifi sw U334 hw Hopper3 Broadcast Probe.pcap
new file mode 100644
index 0000000..b1898c1
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 5GHz Google Wifi sw U334 hw Hopper3 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 5GHz Google Wifi sw U334 hw Hopper3 Specific Probe.pcap b/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 5GHz Google Wifi sw U334 hw Hopper3 Specific Probe.pcap
new file mode 100644
index 0000000..9ba4923
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 5GHz Google Wifi sw U334 hw Hopper3 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 5GHz OnHub sw U334 hw Hopper3 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 5GHz OnHub sw U334 hw Hopper3 Broadcast Probe.pcap
new file mode 100644
index 0000000..e9cf0d6
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 5GHz OnHub sw U334 hw Hopper3 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 5GHz OnHub sw U334 hw Hopper3 Specific Probe.pcap b/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 5GHz OnHub sw U334 hw Hopper3 Specific Probe.pcap
new file mode 100644
index 0000000..15e7c1f
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Dish Network Receiver Hopper 3 5GHz OnHub sw U334 hw Hopper3 Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Nest Thermostat 2.4GHz.pcap b/taxonomy/testdata/pcaps/Nest Thermostat 2.4GHz.pcap
deleted file mode 100644
index d771711..0000000
--- a/taxonomy/testdata/pcaps/Nest Thermostat 2.4GHz.pcap
+++ /dev/null
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Nest Thermostat v1 2.4GHz GFRG210 sw 5.6-7 hw Diamond 1.10 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Nest Thermostat v1 2.4GHz GFRG210 sw 5.6-7 hw Diamond 1.10 Broadcast Probe.pcap
new file mode 100644
index 0000000..a261a2d
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Nest Thermostat v1 2.4GHz GFRG210 sw 5.6-7 hw Diamond 1.10 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Nest Thermostat v1 2.4GHz Google Wifi sw 5.6-7 hw Diamond 1.10 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Nest Thermostat v1 2.4GHz Google Wifi sw 5.6-7 hw Diamond 1.10 Broadcast Probe.pcap
new file mode 100644
index 0000000..4ec3660
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Nest Thermostat v1 2.4GHz Google Wifi sw 5.6-7 hw Diamond 1.10 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/Nest Thermostat v1 2.4GHz OnHub sw 5.6-7 hw Diamond 1.10 Broadcast Probe.pcap b/taxonomy/testdata/pcaps/Nest Thermostat v1 2.4GHz OnHub sw 5.6-7 hw Diamond 1.10 Broadcast Probe.pcap
new file mode 100644
index 0000000..c3d5479
--- /dev/null
+++ b/taxonomy/testdata/pcaps/Nest Thermostat v1 2.4GHz OnHub sw 5.6-7 hw Diamond 1.10 Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz GFRG210 iOS10.1.1 MNQJ2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz GFRG210 iOS10.1.1 MNQJ2LL Specific Probe.pcap
new file mode 100644
index 0000000..9f6b423
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz GFRG210 iOS10.1.1 MNQJ2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz Google Wifi iOS10.1.1 MNQJ2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz Google Wifi iOS10.1.1 MNQJ2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..282cc83
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz Google Wifi iOS10.1.1 MNQJ2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz Google Wifi iOS10.1.1 MNQJ2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz Google Wifi iOS10.1.1 MNQJ2LL Specific Probe.pcap
new file mode 100644
index 0000000..a953047
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz Google Wifi iOS10.1.1 MNQJ2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz Google Wifi iOS10.2 MNQJ2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz Google Wifi iOS10.2 MNQJ2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..79ce3f3
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz Google Wifi iOS10.2 MNQJ2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz Google Wifi iOS10.2 MNQJ2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz Google Wifi iOS10.2 MNQJ2LL Specific Probe.pcap
new file mode 100644
index 0000000..e462779
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz Google Wifi iOS10.2 MNQJ2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz OnHub iOS10.1.1 MNQJ2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz OnHub iOS10.1.1 MNQJ2LL Specific Probe.pcap
new file mode 100644
index 0000000..b5a086e
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz OnHub iOS10.1.1 MNQJ2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz OnHub iOS10.2 MNQJ2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz OnHub iOS10.2 MNQJ2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..100c71c
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz OnHub iOS10.2 MNQJ2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz OnHub iOS10.2 MNQJ2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz OnHub iOS10.2 MNQJ2LL Specific Probe.pcap
new file mode 100644
index 0000000..d84ad82
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7+ 2.4GHz OnHub iOS10.2 MNQJ2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7+ 5GHz GFRG210 iOS10.1.1 MNQJ2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7+ 5GHz GFRG210 iOS10.1.1 MNQJ2LL Specific Probe.pcap
new file mode 100644
index 0000000..56a4b6d
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7+ 5GHz GFRG210 iOS10.1.1 MNQJ2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7+ 5GHz GFRG210 iOS10.2 MNQJ2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7+ 5GHz GFRG210 iOS10.2 MNQJ2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..009be64
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7+ 5GHz GFRG210 iOS10.2 MNQJ2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7+ 5GHz GFRG210 iOS10.2 MNQJ2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7+ 5GHz GFRG210 iOS10.2 MNQJ2LL Specific Probe.pcap
new file mode 100644
index 0000000..f10b01d
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7+ 5GHz GFRG210 iOS10.2 MNQJ2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7+ 5GHz Google Wifi iOS10.1.1 MNQJ2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7+ 5GHz Google Wifi iOS10.1.1 MNQJ2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..84cc66c
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7+ 5GHz Google Wifi iOS10.1.1 MNQJ2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7+ 5GHz Google Wifi iOS10.1.1 MNQJ2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7+ 5GHz Google Wifi iOS10.1.1 MNQJ2LL Specific Probe.pcap
new file mode 100644
index 0000000..936362b
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7+ 5GHz Google Wifi iOS10.1.1 MNQJ2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7+ 5GHz Google Wifi iOS10.2 MNQJ2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7+ 5GHz Google Wifi iOS10.2 MNQJ2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..13ec753
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7+ 5GHz Google Wifi iOS10.2 MNQJ2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7+ 5GHz Google Wifi iOS10.2 MNQJ2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7+ 5GHz Google Wifi iOS10.2 MNQJ2LL Specific Probe.pcap
new file mode 100644
index 0000000..bbefd5c
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7+ 5GHz Google Wifi iOS10.2 MNQJ2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7+ 5GHz OnHub iOS10.1.1 MNQJ2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7+ 5GHz OnHub iOS10.1.1 MNQJ2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..6c09269
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7+ 5GHz OnHub iOS10.1.1 MNQJ2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7+ 5GHz OnHub iOS10.1.1 MNQJ2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7+ 5GHz OnHub iOS10.1.1 MNQJ2LL Specific Probe.pcap
new file mode 100644
index 0000000..34751a8
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7+ 5GHz OnHub iOS10.1.1 MNQJ2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7+ 5GHz OnHub iOS10.2 MNQJ2LL Broadcast Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7+ 5GHz OnHub iOS10.2 MNQJ2LL Broadcast Probe.pcap
new file mode 100644
index 0000000..ed0196a
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7+ 5GHz OnHub iOS10.2 MNQJ2LL Broadcast Probe.pcap
Binary files differ
diff --git a/taxonomy/testdata/pcaps/iPhone 7+ 5GHz OnHub iOS10.2 MNQJ2LL Specific Probe.pcap b/taxonomy/testdata/pcaps/iPhone 7+ 5GHz OnHub iOS10.2 MNQJ2LL Specific Probe.pcap
new file mode 100644
index 0000000..ec9d07f
--- /dev/null
+++ b/taxonomy/testdata/pcaps/iPhone 7+ 5GHz OnHub iOS10.2 MNQJ2LL Specific Probe.pcap
Binary files differ
diff --git a/taxonomy/wifi.py b/taxonomy/wifi.py
index 1d7e200..4173e55 100644
--- a/taxonomy/wifi.py
+++ b/taxonomy/wifi.py
@@ -199,6 +199,11 @@
     'wifi4|probe:0,1,50,45,221(001018,2),221(00904c,51),htcap:186c,htagg:1a,htmcs:0000ffff|assoc:0,1,33,36,48,50,45,221(001018,2),221(00904c,51),221(0050f2,2),htcap:186c,htagg:1a,htmcs:0000ffff,txpow:1408|oui:dish':
         ('Dish Network Receiver', '', '2.4GHz'),
 
+    'wifi4|probe:0,1,45,221(001018,2),htcap:087e,htagg:17,htmcs:0000ffff|assoc:0,1,33,36,48,45,221(001018,2),221(0050f2,2),htcap:087e,htagg:17,htmcs:0000ffff,txpow:000a|oui:dish':
+        ('Dish Network Receiver', 'Hopper 3', '5GHz'),
+    'wifi4|probe:0,1,50,3,45,221(001018,2),htcap:083c,htagg:17,htmcs:0000ffff|assoc:0,1,50,33,36,48,45,221(001018,2),221(0050f2,2),htcap:083c,htagg:17,htmcs:0000ffff,txpow:120a|oui:dish':
+        ('Dish Network Receiver', 'Hopper 3', '2.4GHz'),
+
     'wifi4|probe:0,1,45,htcap:106e,htagg:01,htmcs:000000ff|assoc:0,1,45,33,36,48,221(0050f2,2),htcap:106e,htagg:01,htmcs:000000ff,txpow:0e00|oui:dropcam':
         ('Dropcam', '', '5GHz'),
     'wifi4|probe:0,1,50,45,htcap:002c,htagg:01,htmcs:000000ff|assoc:0,1,50,45,48,221(0050f2,2),htcap:002c,htagg:01,htmcs:000000ff|oui:dropcam':
@@ -650,21 +655,33 @@
         ('iPhone 6s/6s+', '', '2.4GHz'),
 
     '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'),
+        ('iPhone 7/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'),
+        ('iPhone 7/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'),
+        ('iPhone 7/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'),
+        ('iPhone 7/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'),
+        ('iPhone 7/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'),
+        ('iPhone 7/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'),
+        ('iPhone 7/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'),
+        ('iPhone 7/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:0000088400000040|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:0000080000000040|os:ios':
+        ('iPhone 7/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:0f813032,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,extcap:0000088400000040|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:0000080000000040|os:ios':
+        ('iPhone 7/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:0000088400000040|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:0000080000000040|os:ios':
+        ('iPhone 7/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:0f813032,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:13f9,extcap:000008|os:ios':
+        ('iPhone 7/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:0f813032,vhtrxmcs:0000fffa,vhttxmcs:0000fffa,txpow:13f9,extcap:000008|os:ios':
+        ('iPhone 7/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:0000088400000040|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:0000080000000040|os:ios':
+        ('iPhone 7/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':
diff --git a/taxonomy/wtax b/taxonomy/wtax
index d49545d..ee765b9 100755
--- a/taxonomy/wtax
+++ b/taxonomy/wtax
@@ -15,7 +15,7 @@
     if contains "$leasemac" "$mac"; then
       echo "$name"
     fi
-  done </config/dhcp.leases
+  done </fiber/config/dhcp.leases
 }
 
 dhcpsig() {
@@ -24,7 +24,7 @@
     if contains "$leasemac" "$mac"; then
       echo "$sig"
     fi
-  done </config/dhcp.fingerprints
+  done </fiber/config/dhcp.fingerprints
 }
 
 stations24=""
diff --git a/waveguide/helpers.py b/waveguide/helpers.py
index 382504d..b9d3cad 100644
--- a/waveguide/helpers.py
+++ b/waveguide/helpers.py
@@ -133,7 +133,7 @@
       _experiment_warned.add(name)
       sys.stderr.write('Warning: experiment %r not registered\n' % name)
   else:
-    enabled = os.path.exists(os.path.join('/config/experiments',
+    enabled = os.path.exists(os.path.join('/fiber/config/experiments',
                                           name + '.active'))
     if enabled and name not in _experiment_enabled:
       _experiment_enabled.add(name)
diff --git a/wifi/persist.py b/wifi/persist.py
index 3290698..7b82b2e 100644
--- a/wifi/persist.py
+++ b/wifi/persist.py
@@ -9,7 +9,7 @@
 import utils
 
 # TODO(rofrankel):  Figure out the right way to delete old-style persisted
-# options (e.g. /config/wifi/hostapd.opts.5).
+# options (e.g. /fiber/config/wifi/hostapd.opts.5).
 
 
 def save_options(program, interface, argv, tmp=False):
diff --git a/wifi/utils.py b/wifi/utils.py
index 198bf16..3b2db84 100644
--- a/wifi/utils.py
+++ b/wifi/utils.py
@@ -15,7 +15,7 @@
 import unicodedata
 
 
-_CONFIG_DIR = '/config/wifi'
+_CONFIG_DIR = '/fiber/config/wifi'
 FILENAME_KIND = collections.namedtuple(
     'FilenameKind', ('options', 'config', 'pid', 'alive'))(
         options='opts', config='conf', pid='pid', alive='alive')
diff --git a/wifi/wifi.py b/wifi/wifi.py
index 19e2d13..42ed53c 100755
--- a/wifi/wifi.py
+++ b/wifi/wifi.py
@@ -1148,7 +1148,7 @@
       interface = iw.find_interface_from_band(opt.band, interface_type,
                                               opt.interface_suffix)
       if opt.persist:
-        # Save in /config.
+        # Save in /fiber/config.
         persist.save_options(program, interface, argv, False)
       # Save in /tmp.
       persist.save_options(program, interface, argv, True)