1# cfg80211 offchannel TX using remain-on-channel
2# Copyright (c) 2014, Jouni Malinen <j@w1.fi>
3#
4# This software may be distributed under the terms of the BSD license.
5# See README for more details.
6
7import logging
8logger = logging.getLogger()
9
10import hostapd
11from wpasupplicant import WpaSupplicant
12from test_gas import start_ap
13from test_gas import anqp_get
14from p2p_utils import *
15
16def test_offchannel_tx_roc_gas(dev, apdev):
17    """GAS using cfg80211 remain-on-channel for offchannel TX"""
18    start_ap(apdev[0])
19    bssid = apdev[0]['bssid']
20
21    wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
22    wpas.interface_add("wlan5", drv_params="no_offchannel_tx=1")
23    wpas.flush_scan_cache()
24    wpas.scan_for_bss(bssid, freq=2412)
25    anqp_get(wpas, bssid, 263)
26    ev = wpas.wait_event(["GAS-QUERY-DONE"], timeout=10)
27    if ev is None:
28        raise Exception("GAS query timed out")
29    if "result=SUCCESS" not in ev:
30        raise Exception("Unexpected GAS query result")
31
32def test_offchannel_tx_roc_grpform(dev, apdev):
33    """P2P group formation using cfg80211 remain-on-channel for offchannel TX"""
34    wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
35    wpas.interface_add("wlan5", drv_params="no_offchannel_tx=1")
36
37    [i_res, r_res] = go_neg_pin_authorized(i_dev=dev[0], i_freq=2412,
38                                           r_dev=wpas, r_freq=2412)
39    check_grpform_results(i_res, r_res)
40    remove_group(dev[0], wpas)
41
42def test_offchannel_tx_roc_grpform2(dev, apdev):
43    """P2P group formation(2) using cfg80211 remain-on-channel for offchannel TX"""
44    wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
45    wpas.interface_add("wlan5", drv_params="no_offchannel_tx=1")
46
47    [i_res, r_res] = go_neg_pin_authorized(i_dev=wpas, i_freq=2412,
48                                           r_dev=dev[0], r_freq=2412)
49    check_grpform_results(i_res, r_res)
50    remove_group(dev[0], wpas)
51