]>
git.ipfire.org Git - thirdparty/hostap.git/blob - tests/hwsim/hostapd.py
3 # Python class for controlling hostapd
4 # Copyright (c) 2013, Jouni Malinen <j@w1.fi>
6 # This software may be distributed under the terms of the BSD license.
7 # See README for more details.
14 logger
= logging
.getLogger(__name__
)
15 hapd_ctrl
= '/var/run/hostapd'
16 hapd_global
= 'hostapd-global'
20 self
.ctrl
= wpaspy
.Ctrl(hapd_global
)
22 def add(self
, ifname
):
23 res
= self
.ctrl
.request("ADD " + ifname
+ " " + hapd_ctrl
)
25 raise Exception("Could not add hostapd interface " + ifname
)
27 def remove(self
, ifname
):
28 self
.ctrl
.request("REMOVE " + ifname
)
32 def __init__(self
, ifname
):
34 self
.ctrl
= wpaspy
.Ctrl(os
.path
.join(hapd_ctrl
, ifname
))
36 def request(self
, cmd
):
37 logger
.debug(self
.ifname
+ ": CTRL: " + cmd
)
38 return self
.ctrl
.request(cmd
)
41 return "PONG" in self
.request("PING")
43 def set(self
, field
, value
):
44 logger
.debug(self
.ifname
+ ": SET " + field
+ "=" + value
)
45 if not "OK" in self
.request("SET " + field
+ " " + value
):
46 raise Exception("Failed to set hostapd parameter " + field
)
48 def set_defaults(self
):
49 self
.set("driver", "nl80211")
50 self
.set("hw_mode", "g")
51 self
.set("channel", "1")
52 self
.set("ieee80211n", "1")
54 def set_open(self
, ssid
):
56 self
.set("ssid", ssid
)
58 def set_wpa2_psk(self
, ssid
, passphrase
):
60 self
.set("ssid", ssid
)
61 self
.set("wpa_passphrase", passphrase
)
63 self
.set("wpa_key_mgmt", "WPA-PSK")
64 self
.set("rsn_pairwise", "CCMP")
66 def set_wpa_psk(self
, ssid
, passphrase
):
68 self
.set("ssid", ssid
)
69 self
.set("wpa_passphrase", passphrase
)
71 self
.set("wpa_key_mgmt", "WPA-PSK")
72 self
.set("wpa_pairwise", "TKIP")
74 def set_wpa_psk_mixed(self
, ssid
, passphrase
):
76 self
.set("ssid", ssid
)
77 self
.set("wpa_passphrase", passphrase
)
79 self
.set("wpa_key_mgmt", "WPA-PSK")
80 self
.set("wpa_pairwise", "TKIP")
81 self
.set("rsn_pairwise", "CCMP")
83 def set_wep(self
, ssid
, key
):
85 self
.set("ssid", ssid
)
86 self
.set("wep_key0", key
)
89 if not "OK" in self
.ctrl
.request("ENABLE"):
90 raise Exception("Failed to enable hostapd interface " + self
.ifname
)
93 if not "OK" in self
.ctrl
.request("ENABLE"):
94 raise Exception("Failed to disable hostapd interface " + self
.ifname
)
96 def add_ap(ifname
, params
):
97 logger
.info("Starting AP " + ifname
)
98 hapd_global
= HostapdGlobal()
99 hapd_global
.remove(ifname
)
100 hapd_global
.add(ifname
)
101 hapd
= Hostapd(ifname
)
103 raise Exception("Could not ping hostapd")
105 fields
= [ "ssid", "wpa_passphrase", "wpa_key_mgmt", "wpa",
106 "wpa_pairwise", "rsn_pairwise", "auth_server_addr" ]
109 hapd
.set(field
, params
[field
])
110 for f
,v
in params
.items():
113 if isinstance(v
, list):
120 def wpa2_params(ssid
=None, passphrase
=None):
121 params
= { "wpa": "2",
122 "wpa_key_mgmt": "WPA-PSK",
123 "rsn_pairwise": "CCMP" }
125 params
["ssid"] = ssid
127 params
["wpa_passphrase"] = passphrase
130 def wpa_params(ssid
=None, passphrase
=None):
131 params
= { "wpa": "1",
132 "wpa_key_mgmt": "WPA-PSK",
133 "wpa_pairwise": "TKIP" }
135 params
["ssid"] = ssid
137 params
["wpa_passphrase"] = passphrase
140 def wpa_mixed_params(ssid
=None, passphrase
=None):
141 params
= { "wpa": "3",
142 "wpa_key_mgmt": "WPA-PSK",
143 "wpa_pairwise": "TKIP",
144 "rsn_pairwise": "CCMP" }
146 params
["ssid"] = ssid
148 params
["wpa_passphrase"] = passphrase