--- /dev/null
+# FST tests related definitions
+# Copyright (c) 2015, Qualcomm Atheros, Inc.
+#
+# This software may be distributed under the terms of the BSD license.
+# See README for more details.
+
+import subprocess
+import logging
+
+import hostapd
+
+logger = logging.getLogger()
+
+fst_test_def_group='fstg0'
+fst_test_def_freq_g='2412' # Channel 1
+fst_test_def_freq_a='5180' # Channel 36
+fst_test_def_chan_g='1'
+fst_test_def_chan_a='36'
+fst_test_def_prio_low='100'
+fst_test_def_prio_high='110'
+fst_test_def_llt='100'
+fst_test_def_reg_domain='00'
+
+class HapdRegCtrl:
+ def __init__(self):
+ self.refcnt = 0
+ self.ifname = None
+ self.changed = False
+
+ def __del__(self):
+ if self.refcnt != 0 and self.changed == True:
+ self.restore_reg_domain()
+
+ def start(self):
+ if self.ifname != None:
+ hapd = hostapd.Hostapd(self.ifname)
+ self.changed = self.wait_hapd_reg_change(hapd)
+
+ def stop(self):
+ if self.changed == True:
+ self.restore_reg_domain()
+ self.changed = False
+
+ def add_ap(self, ifname, chan):
+ if self.changed == False and self.channel_may_require_reg_change(chan):
+ self.ifname = ifname
+
+ @staticmethod
+ def channel_may_require_reg_change(chan):
+ if int(chan) > 14:
+ return True
+ return False
+
+ @staticmethod
+ def wait_hapd_reg_change(hapd):
+ state = hapd.get_status_field("state")
+ if state != "COUNTRY_UPDATE":
+ state = hapd.get_status_field("state")
+ if state != "ENABLED":
+ raise Exception("Unexpected interface state - expected COUNTRY_UPDATE")
+ else:
+ logger.debug("fst hostapd: regulatory domain already set")
+ return True
+
+ logger.debug("fst hostapd: waiting for regulatory domain to be set...")
+
+ ev = hapd.wait_event(["AP-ENABLED"], timeout=10)
+ if not ev:
+ raise Exception("AP setup timed out")
+
+ logger.debug("fst hostapd: regulatory domain set")
+
+ state = hapd.get_status_field("state")
+ if state != "ENABLED":
+ raise Exception("Unexpected interface state - expected ENABLED")
+
+ logger.debug("fst hostapd: regulatory domain ready")
+ return True
+
+ @staticmethod
+ def restore_reg_domain():
+ logger.debug("fst hostapd: waiting for regulatory domain to be restored...")
+
+ res = subprocess.call(['iw', 'reg', 'set', fst_test_def_reg_domain])
+ if res != 0:
+ raise Exception("Cannot restore regulatory domain")
+
+ logger.debug("fst hostapd: regulatory domain ready")