# 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")