| OLD | NEW |
| 1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import re | 5 import re |
| 6 | 6 |
| 7 def isLinuxRouter(router): | 7 def isLinuxRouter(router): |
| 8 router_uname = router.run('uname').stdout | 8 router_uname = router.run('uname').stdout |
| 9 return re.search('Linux', router_uname) | 9 return re.search('Linux', router_uname) |
| 10 | 10 |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 # Remove all wifi devices. | 79 # Remove all wifi devices. |
| 80 output = self.router.run("%s dev" % self.cmd_iw).stdout | 80 output = self.router.run("%s dev" % self.cmd_iw).stdout |
| 81 test = re.compile("[\s]*Interface (.*)") | 81 test = re.compile("[\s]*Interface (.*)") |
| 82 for line in output.splitlines(): | 82 for line in output.splitlines(): |
| 83 m = test.match(line) | 83 m = test.match(line) |
| 84 if m: | 84 if m: |
| 85 device = m.group(1) | 85 device = m.group(1) |
| 86 self.router.run("%s link set %s down" % (self.cmd_ip, device)) | 86 self.router.run("%s link set %s down" % (self.cmd_ip, device)) |
| 87 self.router.run("%s dev %s del" % (self.cmd_iw, device)) | 87 self.router.run("%s dev %s del" % (self.cmd_iw, device)) |
| 88 | 88 |
| 89 # Place us in the US by default |
| 90 self.router.run("%s reg set US" % self.cmd_iw) |
| 89 | 91 |
| 90 def create(self, params): | 92 def create(self, params): |
| 91 """ Create a wifi device of the specified type """ | 93 """ Create a wifi device of the specified type """ |
| 92 # | 94 # |
| 93 # AP mode is handled entirely by hostapd so we only | 95 # AP mode is handled entirely by hostapd so we only |
| 94 # have to setup others (mapping the bsd type to what | 96 # have to setup others (mapping the bsd type to what |
| 95 # iw wants) | 97 # iw wants) |
| 96 # | 98 # |
| 97 # map from bsd types to iw types | 99 # map from bsd types to iw types |
| 98 if params['type'] == "ap" or params['type'] == "hostap": | 100 if params['type'] == "ap" or params['type'] == "hostap": |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 conf['channel'] = (freq - 2407) / 5 | 153 conf['channel'] = (freq - 2407) / 5 |
| 152 # Channel 14 is an exception | 154 # Channel 14 is an exception |
| 153 elif freq == 2484: | 155 elif freq == 2484: |
| 154 conf['channel'] = 14 | 156 conf['channel'] = 14 |
| 155 # 5GHz | 157 # 5GHz |
| 156 else: | 158 else: |
| 157 # Make sure hw_mode is set | 159 # Make sure hw_mode is set |
| 158 conf['hw_mode'] = 'a' | 160 conf['hw_mode'] = 'a' |
| 159 # Freq = 5 * chan + 4000 | 161 # Freq = 5 * chan + 4000 |
| 160 if freq >= 4915 and freq <= 4980: | 162 if freq >= 4915 and freq <= 4980: |
| 161 conf['channel'] = 183 + (freq - 4915) / 5 | 163 conf['channel'] = (freq - 4000) / 5 |
| 162 # Freq = 5 * chan + 5000 | 164 # Freq = 5 * chan + 5000 |
| 163 elif freq >= 5035 and freq <= 5825: | 165 elif freq >= 5035 and freq <= 5825: |
| 164 conf['channel'] = (freq - 5000) / 5 | 166 conf['channel'] = (freq - 5000) / 5 |
| 165 | 167 |
| 166 elif k == 'country': | 168 elif k == 'country': |
| 167 conf['country_code'] = v | 169 conf['country_code'] = v |
| 168 elif k == 'dotd': | 170 elif k == 'dotd': |
| 169 conf['ieee80211d'] = 1 | 171 conf['ieee80211d'] = 1 |
| 170 elif k == '-dotd': | 172 elif k == '-dotd': |
| 171 conf['ieee80211d'] = 0 | 173 conf['ieee80211d'] = 0 |
| 172 elif k == 'mode': | 174 elif k == 'mode': |
| 173 if v == '11a': | 175 if v == '11a': |
| 174 conf['hw_mode'] = 'a' | 176 conf['hw_mode'] = 'a' |
| 175 elif v == '11g': | 177 elif v == '11g': |
| 176 conf['hw_mode'] = 'g' | 178 conf['hw_mode'] = 'g' |
| 177 elif v == '11b': | 179 elif v == '11b': |
| 178 conf['hw_mode'] = 'b' | 180 conf['hw_mode'] = 'b' |
| 179 elif v == '11n': | 181 elif v == '11n': |
| 180 conf['ieee80211n'] = 1 | 182 conf['ieee80211n'] = 1 |
| 181 elif k == 'bintval': | 183 elif k == 'bintval': |
| 182 conf['beacon_int'] = v | 184 conf['beacon_int'] = v |
| 183 elif k == 'dtimperiod': | 185 elif k == 'dtimperiod': |
| 184 conf['dtim_period'] = v | 186 conf['dtim_period'] = v |
| 185 elif k == 'rtsthreshold': | 187 elif k == 'rtsthreshold': |
| 186 conf['rts_threshold'] = v | 188 conf['rts_threshold'] = v |
| 187 elif k == 'fragthreshold': | 189 elif k == 'fragthreshold': |
| 188 conf['fragm_threshold'] = v | 190 conf['fragm_threshold'] = v |
| 189 elif k == 'shortpreamble': | 191 elif k == 'shortpreamble': |
| 190 conf['preamble'] = 1 | 192 conf['preamble'] = 1 |
| 191 elif k == 'protmode': | |
| 192 pass # TODO(sleffler) need hostapd support | |
| 193 elif k == 'authmode': | 193 elif k == 'authmode': |
| 194 if v == "open": | 194 if v == "open": |
| 195 conf['auth_algs'] = 1 | 195 conf['auth_algs'] = 1 |
| 196 elif v == "shared": | 196 elif v == "shared": |
| 197 conf['auth_algs'] = 2 | 197 conf['auth_algs'] = 2 |
| 198 elif k == 'hidessid': | 198 elif k == 'hidessid': |
| 199 conf['ignore_broadcast_ssid'] = 1 | 199 conf['ignore_broadcast_ssid'] = 1 |
| 200 elif k == 'wme': | 200 elif k == 'wme': |
| 201 conf['wmm_enabled'] = 1 | 201 conf['wmm_enabled'] = 1 |
| 202 elif k == '-wme': | 202 elif k == '-wme': |
| 203 conf['wmm_enabled'] = 0 | 203 conf['wmm_enabled'] = 0 |
| 204 elif k == 'deftxkey': | 204 elif k == 'deftxkey': |
| 205 conf['wep_default_key'] = v | 205 conf['wep_default_key'] = v |
| 206 elif k == 'ht20': | 206 elif k == 'ht20': |
| 207 htcaps.add('') # NB: ensure 802.11n setup below | 207 htcaps.add('') # NB: ensure 802.11n setup below |
| 208 conf['wmm_enabled'] = 1 | 208 conf['wmm_enabled'] = 1 |
| 209 elif k == 'ht40': | 209 elif k == 'ht40': |
| 210 htcaps.add('[HT40-]') | 210 htcaps.add('[HT40-]') |
| 211 htcaps.add('[HT40+]') | 211 htcaps.add('[HT40+]') |
| 212 conf['wmm_enabled'] = 1 | 212 conf['wmm_enabled'] = 1 |
| 213 elif k == 'shortgi': | 213 elif k == 'shortgi': |
| 214 htcaps.add('[SHORT-GI-20]') | 214 htcaps.add('[SHORT-GI-20]') |
| 215 htcaps.add('[SHORT-GI-40]') | 215 htcaps.add('[SHORT-GI-40]') |
| 216 elif k == 'pureg': | 216 elif k == 'pureg': |
| 217 pass # TODO(sleffler) need hostapd support | 217 pass # TODO(sleffler) need hostapd support |
| 218 elif k == 'puren': | 218 elif k == 'puren': |
| 219 pass # TODO(sleffler) need hostapd support | 219 pass # TODO(sleffler) need hostapd support |
| 220 elif k == 'protmode': |
| 221 pass # TODO(sleffler) need hostapd support |
| 220 elif k == 'ht': | 222 elif k == 'ht': |
| 221 htcaps.add('') # NB: ensure 802.11n setup below | 223 htcaps.add('') # NB: ensure 802.11n setup below |
| 222 elif k == 'htprotmode': | 224 elif k == 'htprotmode': |
| 223 pass # TODO(sleffler) need hostapd support | 225 pass # TODO(sleffler) need hostapd support |
| 224 elif k == 'rifs': | 226 elif k == 'rifs': |
| 225 pass # TODO(sleffler) need hostapd support | 227 pass # TODO(sleffler) need hostapd support |
| 226 elif k == 'wepmode': | 228 elif k == 'wepmode': |
| 227 pass # NB: meaningless for hostapd; ignore | 229 pass # NB: meaningless for hostapd; ignore |
| 230 elif k == '-ampdu': |
| 231 pass # TODO(sleffler) need hostapd support |
| 228 else: | 232 else: |
| 229 conf[k] = v | 233 conf[k] = v |
| 230 | 234 |
| 231 # Aggregate ht_capab. | 235 # Aggregate ht_capab. |
| 232 if htcaps: | 236 if htcaps: |
| 233 conf['ieee80211n'] = 1 | 237 conf['ieee80211n'] = 1 |
| 234 conf['ht_capab'] = ''.join(htcaps) | 238 conf['ht_capab'] = ''.join(htcaps) |
| 235 | 239 |
| 236 # Generate hostapd.conf. | 240 # Generate hostapd.conf. |
| 237 self.router.run("cat <<EOF >%s\n%s\nEOF\n" % | 241 self.router.run("cat <<EOF >%s\n%s\nEOF\n" % |
| (...skipping 30 matching lines...) Expand all Loading... |
| 268 self.router.run("pkill hostapd >/dev/null 2>&1", ignore_status=True) | 272 self.router.run("pkill hostapd >/dev/null 2>&1", ignore_status=True) |
| 269 # self.router.run("rm -f %s" % self.hostapd['file']) | 273 # self.router.run("rm -f %s" % self.hostapd['file']) |
| 270 | 274 |
| 271 # Tear down the bridge. | 275 # Tear down the bridge. |
| 272 self.router.run("%s link set %s down" % (self.cmd_ip, self.bridgeif), | 276 self.router.run("%s link set %s down" % (self.cmd_ip, self.bridgeif), |
| 273 ignore_status=True) | 277 ignore_status=True) |
| 274 self.router.run("%s delbr %s" % (self.cmd_brctl, self.bridgeif), | 278 self.router.run("%s delbr %s" % (self.cmd_brctl, self.bridgeif), |
| 275 ignore_status=True) | 279 ignore_status=True) |
| 276 | 280 |
| 277 self.hostapd['configured'] = False | 281 self.hostapd['configured'] = False |
| OLD | NEW |