Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(179)

Side by Side Diff: server/site_linux_router.py

Issue 2054004: Added support for per-band phys. (Closed) Base URL: ssh://git@chromiumos-git/autotest.git
Patch Set: Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 logging, 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
11 class LinuxRouter(object): 11 class LinuxRouter(object):
12 """ 12 """
13 Linux/mac80211-style WiFi Router support for WiFiTest class. 13 Linux/mac80211-style WiFi Router support for WiFiTest class.
14 14
15 This class implements test methods/steps that communicate with a 15 This class implements test methods/steps that communicate with a
(...skipping 10 matching lines...) Expand all
26 self.cmd_ip = "/usr/sbin/ip" 26 self.cmd_ip = "/usr/sbin/ip"
27 self.cmd_brctl = "/usr/sbin/brctl" 27 self.cmd_brctl = "/usr/sbin/brctl"
28 self.cmd_hostapd = "/usr/sbin/hostapd" 28 self.cmd_hostapd = "/usr/sbin/hostapd"
29 29
30 # Router host. 30 # Router host.
31 self.router = host 31 self.router = host
32 32
33 # Network interfaces. 33 # Network interfaces.
34 self.bridgeif = params.get('bridgedev', "br-lan") 34 self.bridgeif = params.get('bridgedev', "br-lan")
35 self.wiredif = params.get('wiredev', "eth1") 35 self.wiredif = params.get('wiredev', "eth1")
36 self.wlanif = "wlan0" 36 self.wlanif2 = "wlan2"
37 self.wlanif5 = "wlan5"
37 38
38 # Default to 1st available wireless phy. 39 # Default to 1st available wireless phy.
39 if "phydev" not in params: 40 if "phydev2" not in params:
40 output = self.router.run("%s list" % self.cmd_iw).stdout 41 output = self.router.run("%s list" % self.cmd_iw).stdout
41 test = re.compile("Wiphy (.*)") 42 test = re.compile("Wiphy (.*)")
42 for line in output.splitlines(): 43 for line in output.splitlines():
43 m = test.match(line) 44 m = test.match(line)
44 if m: 45 if m:
45 self.phydev = m.group(1) 46 self.phydev2 = m.group(1)
47 self.phydev5 = self.phydev2
46 break 48 break
47 else: 49 else:
48 raise error.TestFail("No Wireless NIC detected on the device") 50 raise error.TestFail("No Wireless NIC detected on the device")
49 else: 51 else:
50 self.phydev = params['phydev'] 52 self.phydev2 = params['phydev2']
53 self.phydev5 = params.get('phydev5', self.phydev2)
51 54
52 55
53 # hostapd configuration persists throughout the test, subsequent 56 # hostapd configuration persists throughout the test, subsequent
54 # 'config' commands only modify it. 57 # 'config' commands only modify it.
55 self.hostapd = { 58 self.hostapd = {
56 'configured': False, 59 'configured': False,
57 'file': "/tmp/%s.conf" % self.phydev, 60 'file': "/tmp/hostapd-test.conf",
58 'driver': "nl80211", 61 'driver': "nl80211",
59 'conf': { 62 'conf': {
60 'ssid': defssid, 63 'ssid': defssid,
61 'interface': self.wlanif,
62 'bridge': self.bridgeif, 64 'bridge': self.bridgeif,
63 'hw_mode': 'g' 65 'hw_mode': 'g'
64 } 66 }
65 } 67 }
66 68
67 # Kill hostapd if already running. 69 # Kill hostapd if already running.
68 self.router.run("pkill hostapd >/dev/null 2>&1", ignore_status=True) 70 self.router.run("pkill hostapd >/dev/null 2>&1", ignore_status=True)
69 71
70 # Remove all bridges. 72 # Remove all bridges.
71 output = self.router.run("%s show" % self.cmd_brctl).stdout 73 output = self.router.run("%s show" % self.cmd_brctl).stdout
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 phytype = { 105 phytype = {
104 "sta" : "managed", 106 "sta" : "managed",
105 "monitor" : "monitor", 107 "monitor" : "monitor",
106 "adhoc" : "adhoc", 108 "adhoc" : "adhoc",
107 "ibss" : "ibss", 109 "ibss" : "ibss",
108 "ap" : "managed", # NB: handled by hostapd 110 "ap" : "managed", # NB: handled by hostapd
109 "hostap" : "managed", # NB: handled by hostapd 111 "hostap" : "managed", # NB: handled by hostapd
110 "mesh" : "mesh", 112 "mesh" : "mesh",
111 "wds" : "wds", 113 "wds" : "wds",
112 }[params['type']] 114 }[params['type']]
113 phydev = params.get('phydev', self.phydev) 115
114 self.router.run("%s phy %s interface add %s type %s" % 116 self.router.run("%s phy %s interface add %s type %s" %
115 (self.cmd_iw, phydev, self.wlanif, phytype)) 117 (self.cmd_iw, self.phydev2, self.wlanif2, phytype))
116 118 self.router.run("%s phy %s interface add %s type %s" %
119 (self.cmd_iw, self.phydev5, self.wlanif5, phytype))
117 120
118 121
119 def destroy(self, params): 122 def destroy(self, params):
120 """ Destroy a previously created device """ 123 """ Destroy a previously created device """
121 # For linux, this is the same as deconfig. 124 # For linux, this is the same as deconfig.
122 self.deconfig(params) 125 self.deconfig(params)
123 126
124 127
125 128
126 def config(self, params): 129 def config(self, params):
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 elif k == '-ampdu': 233 elif k == '-ampdu':
231 pass # TODO(sleffler) need hostapd support 234 pass # TODO(sleffler) need hostapd support
232 else: 235 else:
233 conf[k] = v 236 conf[k] = v
234 237
235 # Aggregate ht_capab. 238 # Aggregate ht_capab.
236 if htcaps: 239 if htcaps:
237 conf['ieee80211n'] = 1 240 conf['ieee80211n'] = 1
238 conf['ht_capab'] = ''.join(htcaps) 241 conf['ht_capab'] = ''.join(htcaps)
239 242
243 # Figure out the correct interface.
244 if conf.get('hw_mode', 'b') == 'a':
245 conf['interface'] = self.wlanif5
246 else:
247 conf['interface'] = self.wlanif2
248
240 # Generate hostapd.conf. 249 # Generate hostapd.conf.
241 self.router.run("cat <<EOF >%s\n%s\nEOF\n" % 250 self.router.run("cat <<EOF >%s\n%s\nEOF\n" %
242 (self.hostapd['file'], '\n'.join( 251 (self.hostapd['file'], '\n'.join(
243 "%s=%s" % kv for kv in conf.iteritems()))) 252 "%s=%s" % kv for kv in conf.iteritems())))
244 253
245 # Run hostapd. 254 # Run hostapd.
255 logging.info("Starting hostapd...")
246 self.router.run("%s -B %s" % 256 self.router.run("%s -B %s" %
247 (self.cmd_hostapd, self.hostapd['file'])) 257 (self.cmd_hostapd, self.hostapd['file']))
248 258
259
249 # Set up the bridge. 260 # Set up the bridge.
261 logging.info("Setting up the bridge...")
250 self.router.run("%s setfd %s %d" % 262 self.router.run("%s setfd %s %d" %
251 (self.cmd_brctl, self.bridgeif, 0)) 263 (self.cmd_brctl, self.bridgeif, 0))
252 self.router.run("%s addif %s %s" % 264 self.router.run("%s addif %s %s" %
253 (self.cmd_brctl, self.bridgeif, self.wiredif)) 265 (self.cmd_brctl, self.bridgeif, self.wiredif))
254 self.router.run("%s link set %s up" % 266 self.router.run("%s link set %s up" %
255 (self.cmd_ip, self.wiredif)) 267 (self.cmd_ip, self.wiredif))
256 self.router.run("%s link set %s up" % 268 self.router.run("%s link set %s up" %
257 (self.cmd_ip, self.bridgeif)) 269 (self.cmd_ip, self.bridgeif))
258 270
271 logging.info("AP configured.")
272
259 # else: 273 # else:
260 # # use iw to manually configure interface 274 # # use iw to manually configure interface
261 275
262 self.hostapd['configured'] = True 276 self.hostapd['configured'] = True
263 277
264 278
265 def deconfig(self, params): 279 def deconfig(self, params):
266 """ De-configure the AP (will also bring wlan and the bridge down) """ 280 """ De-configure the AP (will also bring wlan and the bridge down) """
267 281
268 if not self.hostapd['configured']: 282 if not self.hostapd['configured']:
269 return 283 return
270 284
271 # Taking down hostapd takes wlan0 and mon.wlan0 down. 285 # Taking down hostapd takes wlan0 and mon.wlan0 down.
272 self.router.run("pkill hostapd >/dev/null 2>&1", ignore_status=True) 286 self.router.run("pkill hostapd >/dev/null 2>&1", ignore_status=True)
273 # self.router.run("rm -f %s" % self.hostapd['file']) 287 # self.router.run("rm -f %s" % self.hostapd['file'])
274 288
275 # Tear down the bridge. 289 # Tear down the bridge.
276 self.router.run("%s link set %s down" % (self.cmd_ip, self.bridgeif), 290 self.router.run("%s link set %s down" % (self.cmd_ip, self.bridgeif),
277 ignore_status=True) 291 ignore_status=True)
278 self.router.run("%s delbr %s" % (self.cmd_brctl, self.bridgeif), 292 self.router.run("%s delbr %s" % (self.cmd_brctl, self.bridgeif),
279 ignore_status=True) 293 ignore_status=True)
280 294
281 self.hostapd['configured'] = False 295 self.hostapd['configured'] = False
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698