54cf411f4c
This adds hwsim test ap_vlan_iface_cleanup_multibss. It connects two stations in different BSS but the same hostapd process. First both stations are in VLAN 1, then they get reauthenticated into VLAN 2. Due to the ordering of the stations moving around, this test checks that bridge and tagged interface referencing counting is done globally, such that the tagged interface is not removed too early and no bridge is left over. Signed-off-by: Michael Braun <michael-dev@fami-braun.de>
54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
# Testing utilities
|
|
# Copyright (c) 2013-2015, Jouni Malinen <j@w1.fi>
|
|
#
|
|
# This software may be distributed under the terms of the BSD license.
|
|
# See README for more details.
|
|
|
|
import os
|
|
|
|
def get_ifnames():
|
|
ifnames = []
|
|
with open("/proc/net/dev", "r") as f:
|
|
lines = f.readlines()
|
|
for l in lines:
|
|
val = l.split(':', 1)
|
|
if len(val) == 2:
|
|
ifnames.append(val[0].strip(' '))
|
|
return ifnames
|
|
|
|
class HwsimSkip(Exception):
|
|
def __init__(self, reason):
|
|
self.reason = reason
|
|
def __str__(self):
|
|
return self.reason
|
|
|
|
class alloc_fail(object):
|
|
def __init__(self, dev, count, funcs):
|
|
self._dev = dev
|
|
self._count = count
|
|
self._funcs = funcs
|
|
def __enter__(self):
|
|
cmd = "TEST_ALLOC_FAIL %d:%s" % (self._count, self._funcs)
|
|
if "OK" not in self._dev.request(cmd):
|
|
raise HwsimSkip("TEST_ALLOC_FAIL not supported")
|
|
def __exit__(self, type, value, traceback):
|
|
if type is None:
|
|
if self._dev.request("GET_ALLOC_FAIL") != "0:%s" % self._funcs:
|
|
raise Exception("Allocation failure did not trigger")
|
|
|
|
def require_under_vm():
|
|
with open('/proc/1/cmdline', 'r') as f:
|
|
cmd = f.read()
|
|
if "inside.sh" not in cmd:
|
|
raise HwsimSkip("Not running under VM")
|
|
|
|
def iface_is_in_bridge(bridge, ifname):
|
|
fname = "/sys/class/net/"+ifname+"/brport/bridge"
|
|
if not os.path.exists(fname):
|
|
return False
|
|
if not os.path.islink(fname):
|
|
return False
|
|
truebridge = os.path.basename(os.readlink(fname))
|
|
if bridge == truebridge:
|
|
return True
|
|
return False
|