]> git.ipfire.org Git - thirdparty/hostap.git/blobdiff - tests/hwsim/hostapd.py
tests: remote: Generate and send BSS configuration files
[thirdparty/hostap.git] / tests / hwsim / hostapd.py
index 7a52ebea3bfa30ddbf24b32d6e4ffe67a92bd98f..04e460c1d73669a065c4d20900ade368bb186e46 100644 (file)
@@ -5,6 +5,7 @@
 # See README for more details.
 
 import os
+import re
 import time
 import logging
 import binascii
@@ -135,6 +136,9 @@ class HostapdGlobal:
         self.ctrl.terminate()
         self.ctrl = None
 
+    def send_file(self, src, dst):
+        self.host.send_file(src, dst)
+
 class Hostapd:
     def __init__(self, ifname, bssidx=0, hostname=None, port=8877):
         self.hostname = hostname
@@ -524,6 +528,9 @@ class Hostapd:
     def note(self, txt):
         self.request("NOTE " + txt)
 
+    def send_file(self, src, dst):
+        self.host.send_file(src, dst)
+
 def add_ap(apdev, params, wait_enabled=True, no_enable=False, timeout=30,
            global_ctrl_override=None, driver=False):
         if isinstance(apdev, dict):
@@ -587,6 +594,8 @@ def add_bss(apdev, ifname, confname, ignore_error=False):
         hostname = None
         port = 8878
     hapd_global = HostapdGlobal(apdev)
+    confname = cfg_file(apdev, confname, ifname)
+    hapd_global.send_file(confname, confname)
     hapd_global.add_bss(phy, confname, ignore_error)
     port = hapd_global.get_ctrl_iface_port(ifname)
     hapd = Hostapd(ifname, hostname=hostname, port=port)
@@ -605,6 +614,8 @@ def add_iface(apdev, confname):
         hostname = None
         port = 8878
     hapd_global = HostapdGlobal(apdev)
+    confname = cfg_file(apdev, confname, ifname)
+    hapd_global.send_file(confname, confname)
     hapd_global.add_iface(ifname, confname)
     port = hapd_global.get_ctrl_iface_port(ifname)
     hapd = Hostapd(ifname, hostname=hostname, port=port)
@@ -747,3 +758,77 @@ def ht40_minus_params(channel="1", ssid=None, country=None):
 def cmd_execute(apdev, cmd, shell=False):
     hapd_global = HostapdGlobal(apdev)
     return hapd_global.cmd_execute(cmd, shell=shell)
+
+def send_file(apdev, src, dst):
+    hapd_global = HostapdGlobal(apdev)
+    return hapd_global.send_file(src, dst)
+
+def acl_file(dev, apdev, conf):
+    filename = os.path.join("/tmp", conf)
+
+    if conf == 'hostapd.macaddr':
+        with open(filename, 'w') as f:
+            mac0 = dev[0].get_status_field("address")
+            f.write(mac0 + '\n')
+            f.write("02:00:00:00:00:12\n")
+            f.write("02:00:00:00:00:34\n")
+            f.write("-02:00:00:00:00:12\n")
+            f.write("-02:00:00:00:00:34\n")
+            f.write("01:01:01:01:01:01\n")
+            f.write("03:01:01:01:01:03\n")
+    elif conf == 'hostapd.accept':
+        with open(filename, 'w') as f:
+            mac0 = dev[0].get_status_field("address")
+            mac1 = dev[1].get_status_field("address")
+            f.write(mac0 + "    1\n")
+            f.write(mac1 + "    2\n")
+    elif conf == 'hostapd.accept2':
+        with open(filename, 'w') as f:
+            mac0 = dev[0].get_status_field("address")
+            mac1 = dev[1].get_status_field("address")
+            mac2 = dev[2].get_status_field("address")
+            f.write(mac0 + "    1\n")
+            f.write(mac1 + "    2\n")
+            f.write(mac2 + "    3\n")
+    else:
+        return conf
+
+    return filename
+
+def bssid_inc(apdev, inc=1):
+    parts = apdev['bssid'].split(':')
+    parts[5] = '%02x' % (int(parts[5], 16) + int(inc))
+    bssid = '%s:%s:%s:%s:%s:%s' % (parts[0], parts[1], parts[2],
+                                   parts[3], parts[4], parts[5])
+    return bssid
+
+def cfg_file(apdev, conf, ifname=None):
+    # put cfg file in /tmp directory
+    fname = os.path.join("/tmp", conf)
+
+    match = re.search(r'^bss-\d+', conf)
+    if match:
+        with open(fname, 'w') as f:
+            idx = ''.join(filter(str.isdigit, conf))
+            if ifname is None:
+                ifname = apdev['ifname']
+                if idx != '1':
+                    ifname = ifname + '-' + idx
+
+            f.write("driver=nl80211\n")
+            f.write("ctrl_interface=/var/run/hostapd\n")
+            f.write("hw_mode=g\n")
+            f.write("channel=1\n")
+            f.write("ieee80211n=1\n")
+            f.write("interface=%s\n" % ifname)
+
+            f.write("ssid=bss-%s\n" % idx)
+            if conf == 'bss-2-dup.conf':
+                bssid = apdev['bssid']
+            else:
+                bssid = bssid_inc(apdev, int(idx) - 1)
+            f.write("bssid=%s\n" % bssid)
+    else:
+        return conf
+
+    return fname