tests: VENDOR_ELEM_ADD for various frames
This increases testing coverage for VENDOR_ELEM mechanism by explicitly verifying that the requested element gets added to each of the supported frame types. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
4839da4d4f
commit
866eb800e5
1 changed files with 272 additions and 1 deletions
|
@ -1,8 +1,15 @@
|
|||
# P2P vendor specific extension tests
|
||||
# Copyright (c) 2014, Qualcomm Atheros, Inc.
|
||||
# Copyright (c) 2014-2015, Qualcomm Atheros, Inc.
|
||||
#
|
||||
# This software may be distributed under the terms of the BSD license.
|
||||
# See README for more details.
|
||||
|
||||
import logging
|
||||
logger = logging.getLogger()
|
||||
import os
|
||||
|
||||
from tshark import run_tshark
|
||||
from test_p2p_persistent import form
|
||||
|
||||
def test_p2p_ext_discovery(dev):
|
||||
"""P2P device discovery with vendor specific extensions"""
|
||||
|
@ -88,3 +95,267 @@ def test_p2p_ext_discovery_go(dev):
|
|||
dev[0].request("VENDOR_ELEM_REMOVE 2 *")
|
||||
dev[0].request("VENDOR_ELEM_REMOVE 3 *")
|
||||
dev[0].request("VENDOR_ELEM_REMOVE 12 *")
|
||||
|
||||
def test_p2p_ext_vendor_elem_probe_req(dev):
|
||||
"""VENDOR_ELEM in P2P Probe Request frames"""
|
||||
try:
|
||||
_test_p2p_ext_vendor_elem_probe_req(dev)
|
||||
finally:
|
||||
dev[0].request("VENDOR_ELEM_REMOVE 0 *")
|
||||
|
||||
def _test_p2p_ext_vendor_elem_probe_req(dev):
|
||||
addr1 = dev[1].p2p_dev_addr()
|
||||
if "OK" not in dev[0].request("VENDOR_ELEM_ADD 0 dd050011223300"):
|
||||
raise Exception("VENDOR_ELEM_ADD failed")
|
||||
dev[1].p2p_listen()
|
||||
if not dev[0].discover_peer(addr1):
|
||||
raise Exception("Device discovery timed out")
|
||||
if "FAIL" in dev[1].request("SET ext_mgmt_frame_handling 1"):
|
||||
raise Exception("Failed to enable external management frame handling")
|
||||
ev = dev[1].wait_event(["MGMT-RX"], timeout=5)
|
||||
if ev is None:
|
||||
raise Exception("MGMT-RX timeout")
|
||||
if " 40" not in ev:
|
||||
raise Exception("Not a Probe Request frame")
|
||||
if "dd050011223300" not in ev:
|
||||
raise Exception("Vendor element not found from Probe Request frame")
|
||||
dev[0].p2p_stop_find()
|
||||
dev[1].p2p_stop_find()
|
||||
|
||||
def test_p2p_ext_vendor_elem_pd_req(dev):
|
||||
"""VENDOR_ELEM in PD Request frames"""
|
||||
try:
|
||||
_test_p2p_ext_vendor_elem_pd_req(dev)
|
||||
finally:
|
||||
dev[0].request("VENDOR_ELEM_REMOVE 4 *")
|
||||
|
||||
def _test_p2p_ext_vendor_elem_pd_req(dev):
|
||||
addr0 = dev[0].p2p_dev_addr()
|
||||
addr1 = dev[1].p2p_dev_addr()
|
||||
if "OK" not in dev[0].request("VENDOR_ELEM_ADD 4 dd050011223301"):
|
||||
raise Exception("VENDOR_ELEM_ADD failed")
|
||||
dev[1].p2p_listen()
|
||||
if not dev[0].discover_peer(addr1):
|
||||
raise Exception("Device discovery timed out")
|
||||
dev[0].p2p_stop_find()
|
||||
if "FAIL" in dev[1].request("SET ext_mgmt_frame_handling 1"):
|
||||
raise Exception("Failed to enable external management frame handling")
|
||||
dev[0].global_request("P2P_PROV_DISC " + addr1 + " display")
|
||||
for i in range(5):
|
||||
ev = dev[1].wait_event(["MGMT-RX"], timeout=5)
|
||||
if ev is None:
|
||||
raise Exception("MGMT-RX timeout")
|
||||
if " d0" in ev:
|
||||
break
|
||||
if "dd050011223301" not in ev:
|
||||
raise Exception("Vendor element not found from PD Request frame")
|
||||
dev[1].p2p_stop_find()
|
||||
dev[0].p2p_stop_find()
|
||||
|
||||
def test_p2p_ext_vendor_elem_pd_resp(dev):
|
||||
"""VENDOR_ELEM in PD Response frames"""
|
||||
try:
|
||||
_test_p2p_ext_vendor_elem_pd_resp(dev)
|
||||
finally:
|
||||
dev[0].request("VENDOR_ELEM_REMOVE 5 *")
|
||||
|
||||
def _test_p2p_ext_vendor_elem_pd_resp(dev):
|
||||
addr0 = dev[0].p2p_dev_addr()
|
||||
addr1 = dev[1].p2p_dev_addr()
|
||||
if "OK" not in dev[0].request("VENDOR_ELEM_ADD 5 dd050011223302"):
|
||||
raise Exception("VENDOR_ELEM_ADD failed")
|
||||
dev[0].p2p_listen()
|
||||
if not dev[1].discover_peer(addr0):
|
||||
raise Exception("Device discovery timed out")
|
||||
dev[1].p2p_stop_find()
|
||||
if "FAIL" in dev[1].request("SET ext_mgmt_frame_handling 1"):
|
||||
raise Exception("Failed to enable external management frame handling")
|
||||
dev[1].global_request("P2P_PROV_DISC " + addr0 + " display")
|
||||
for i in range(5):
|
||||
ev = dev[1].wait_event(["MGMT-RX"], timeout=5)
|
||||
if ev is None:
|
||||
raise Exception("MGMT-RX timeout")
|
||||
if " d0" in ev:
|
||||
break
|
||||
if "dd050011223302" not in ev:
|
||||
raise Exception("Vendor element not found from PD Response frame")
|
||||
dev[0].p2p_stop_find()
|
||||
dev[1].p2p_stop_find()
|
||||
|
||||
def test_p2p_ext_vendor_elem_go_neg_req(dev):
|
||||
"""VENDOR_ELEM in GO Negotiation Request frames"""
|
||||
try:
|
||||
_test_p2p_ext_vendor_elem_go_neg_req(dev)
|
||||
finally:
|
||||
dev[0].request("VENDOR_ELEM_REMOVE 6 *")
|
||||
|
||||
def _test_p2p_ext_vendor_elem_go_neg_req(dev):
|
||||
addr0 = dev[0].p2p_dev_addr()
|
||||
addr1 = dev[1].p2p_dev_addr()
|
||||
if "OK" not in dev[0].request("VENDOR_ELEM_ADD 6 dd050011223303"):
|
||||
raise Exception("VENDOR_ELEM_ADD failed")
|
||||
dev[1].p2p_listen()
|
||||
if not dev[0].discover_peer(addr1):
|
||||
raise Exception("Device discovery timed out")
|
||||
dev[0].p2p_stop_find()
|
||||
if "FAIL" in dev[1].request("SET ext_mgmt_frame_handling 1"):
|
||||
raise Exception("Failed to enable external management frame handling")
|
||||
dev[0].global_request("P2P_CONNECT " + addr1 + " 12345670 display")
|
||||
for i in range(5):
|
||||
ev = dev[1].wait_event(["MGMT-RX"], timeout=5)
|
||||
if ev is None:
|
||||
raise Exception("MGMT-RX timeout")
|
||||
if " d0" in ev:
|
||||
break
|
||||
if "dd050011223303" not in ev:
|
||||
raise Exception("Vendor element not found from GO Negotiation Request frame")
|
||||
dev[1].p2p_stop_find()
|
||||
dev[0].p2p_stop_find()
|
||||
|
||||
def test_p2p_ext_vendor_elem_go_neg_resp(dev):
|
||||
"""VENDOR_ELEM in GO Negotiation Response frames"""
|
||||
try:
|
||||
_test_p2p_ext_vendor_elem_go_neg_resp(dev)
|
||||
finally:
|
||||
dev[0].request("VENDOR_ELEM_REMOVE 7 *")
|
||||
|
||||
def _test_p2p_ext_vendor_elem_go_neg_resp(dev):
|
||||
addr0 = dev[0].p2p_dev_addr()
|
||||
addr1 = dev[1].p2p_dev_addr()
|
||||
if "OK" not in dev[0].request("VENDOR_ELEM_ADD 7 dd050011223304"):
|
||||
raise Exception("VENDOR_ELEM_ADD failed")
|
||||
dev[0].p2p_listen()
|
||||
if not dev[1].discover_peer(addr0):
|
||||
raise Exception("Device discovery timed out")
|
||||
dev[1].p2p_stop_find()
|
||||
if "FAIL" in dev[1].request("SET ext_mgmt_frame_handling 1"):
|
||||
raise Exception("Failed to enable external management frame handling")
|
||||
dev[1].global_request("P2P_CONNECT " + addr0 + " 12345670 display")
|
||||
for i in range(5):
|
||||
ev = dev[1].wait_event(["MGMT-RX"], timeout=5)
|
||||
if ev is None:
|
||||
raise Exception("MGMT-RX timeout")
|
||||
if " d0" in ev:
|
||||
break
|
||||
if "dd050011223304" not in ev:
|
||||
raise Exception("Vendor element not found from GO Negotiation Response frame")
|
||||
dev[0].p2p_stop_find()
|
||||
dev[1].p2p_stop_find()
|
||||
|
||||
def test_p2p_ext_vendor_elem_go_neg_conf(dev, apdev, params):
|
||||
"""VENDOR_ELEM in GO Negotiation Confirm frames"""
|
||||
try:
|
||||
_test_p2p_ext_vendor_elem_go_neg_conf(dev, apdev, params)
|
||||
finally:
|
||||
dev[0].request("VENDOR_ELEM_REMOVE 8 *")
|
||||
|
||||
def _test_p2p_ext_vendor_elem_go_neg_conf(dev, apdev, params):
|
||||
addr0 = dev[0].p2p_dev_addr()
|
||||
addr1 = dev[1].p2p_dev_addr()
|
||||
if "OK" not in dev[0].request("VENDOR_ELEM_ADD 8 dd050011223305"):
|
||||
raise Exception("VENDOR_ELEM_ADD failed")
|
||||
dev[0].p2p_listen()
|
||||
dev[1].p2p_listen()
|
||||
dev[1].p2p_go_neg_auth(addr0, "12345670", "enter")
|
||||
dev[0].p2p_go_neg_init(addr1, "12345678", "display")
|
||||
dev[1].p2p_go_neg_auth_result(expect_failure=True)
|
||||
|
||||
out = run_tshark(os.path.join(params['logdir'], "hwsim0.pcapng"),
|
||||
"wifi_p2p.public_action.subtype == 2")
|
||||
if "Vendor Specific Data: 3305" not in out:
|
||||
raise Exception("Vendor element not found from GO Negotiation Confirm frame")
|
||||
|
||||
def test_p2p_ext_vendor_elem_invitation(dev):
|
||||
"""VENDOR_ELEM in Invitation frames"""
|
||||
try:
|
||||
_test_p2p_ext_vendor_elem_invitation(dev)
|
||||
finally:
|
||||
dev[0].request("VENDOR_ELEM_REMOVE 9 *")
|
||||
dev[0].request("VENDOR_ELEM_REMOVE 10 *")
|
||||
|
||||
def _test_p2p_ext_vendor_elem_invitation(dev):
|
||||
addr0 = dev[0].p2p_dev_addr()
|
||||
addr1 = dev[1].p2p_dev_addr()
|
||||
form(dev[0], dev[1])
|
||||
if "OK" not in dev[0].request("VENDOR_ELEM_ADD 9 dd050011223306"):
|
||||
raise Exception("VENDOR_ELEM_ADD failed")
|
||||
if "OK" not in dev[0].request("VENDOR_ELEM_ADD 10 dd050011223307"):
|
||||
raise Exception("VENDOR_ELEM_ADD failed")
|
||||
dev[1].p2p_listen()
|
||||
if not dev[0].discover_peer(addr1):
|
||||
raise Exception("Device discovery timed out")
|
||||
peer = dev[0].get_peer(addr1)
|
||||
dev[0].p2p_stop_find()
|
||||
if "FAIL" in dev[1].request("SET ext_mgmt_frame_handling 1"):
|
||||
raise Exception("Failed to enable external management frame handling")
|
||||
dev[0].global_request("P2P_INVITE persistent=" + peer['persistent'] + " peer=" + addr1)
|
||||
for i in range(5):
|
||||
ev = dev[1].wait_event(["MGMT-RX"], timeout=5)
|
||||
if ev is None:
|
||||
raise Exception("MGMT-RX timeout")
|
||||
if " d0" in ev:
|
||||
break
|
||||
if "dd050011223306" not in ev:
|
||||
raise Exception("Vendor element not found from Invitation Request frame")
|
||||
dev[0].p2p_stop_find()
|
||||
dev[1].p2p_stop_find()
|
||||
|
||||
dev[0].p2p_listen()
|
||||
if "FAIL" in dev[1].request("SET ext_mgmt_frame_handling 0"):
|
||||
raise Exception("Failed to disable external management frame handling")
|
||||
if not dev[1].discover_peer(addr0):
|
||||
raise Exception("Device discovery timed out")
|
||||
peer = dev[1].get_peer(addr0)
|
||||
dev[1].p2p_stop_find()
|
||||
if "FAIL" in dev[1].request("SET ext_mgmt_frame_handling 1"):
|
||||
raise Exception("Failed to enable external management frame handling")
|
||||
dev[1].global_request("P2P_INVITE persistent=" + peer['persistent'] + " peer=" + addr0)
|
||||
for i in range(5):
|
||||
ev = dev[1].wait_event(["MGMT-RX"], timeout=5)
|
||||
if ev is None:
|
||||
raise Exception("MGMT-RX timeout")
|
||||
if " d0" in ev:
|
||||
break
|
||||
if "dd050011223307" not in ev:
|
||||
raise Exception("Vendor element not found from Invitation Response frame")
|
||||
dev[0].p2p_stop_find()
|
||||
dev[1].p2p_stop_find()
|
||||
|
||||
def test_p2p_ext_vendor_elem_assoc(dev, apdev, params):
|
||||
"""VENDOR_ELEM in Association frames"""
|
||||
try:
|
||||
_test_p2p_ext_vendor_elem_assoc(dev, apdev, params)
|
||||
finally:
|
||||
dev[0].request("VENDOR_ELEM_REMOVE 11 *")
|
||||
dev[1].request("VENDOR_ELEM_REMOVE 12 *")
|
||||
dev[0].request("VENDOR_ELEM_REMOVE 13 *")
|
||||
|
||||
def _test_p2p_ext_vendor_elem_assoc(dev, apdev, params):
|
||||
addr0 = dev[0].p2p_dev_addr()
|
||||
addr1 = dev[1].p2p_dev_addr()
|
||||
if "OK" not in dev[0].request("VENDOR_ELEM_ADD 11 dd050011223308"):
|
||||
raise Exception("VENDOR_ELEM_ADD failed")
|
||||
if "OK" not in dev[1].request("VENDOR_ELEM_ADD 12 dd050011223309"):
|
||||
raise Exception("VENDOR_ELEM_ADD failed")
|
||||
if "OK" not in dev[0].request("VENDOR_ELEM_ADD 13 dd05001122330a"):
|
||||
raise Exception("VENDOR_ELEM_ADD failed")
|
||||
dev[0].p2p_listen()
|
||||
dev[1].p2p_listen()
|
||||
dev[1].p2p_go_neg_auth(addr0, "12345670", "enter", go_intent=15)
|
||||
dev[0].p2p_go_neg_init(addr1, "12345670", "display", go_intent=0,
|
||||
timeout=15)
|
||||
dev[1].p2p_go_neg_auth_result()
|
||||
dev[1].remove_group()
|
||||
dev[0].wait_go_ending_session()
|
||||
|
||||
out = run_tshark(os.path.join(params['logdir'], "hwsim0.pcapng"),
|
||||
"wlan.fc.type_subtype == 0x00", wait=False)
|
||||
if "Vendor Specific Data: 3308" not in out:
|
||||
raise Exception("Vendor element (P2P) not found from Association Request frame")
|
||||
if "Vendor Specific Data: 330a" not in out:
|
||||
raise Exception("Vendor element (non-P2P) not found from Association Request frame")
|
||||
|
||||
out = run_tshark(os.path.join(params['logdir'], "hwsim0.pcapng"),
|
||||
"wlan.fc.type_subtype == 0x01", wait=False)
|
||||
if "Vendor Specific Data: 3309" not in out:
|
||||
raise Exception("Vendor element not found from Association Response frame")
|
||||
|
|
Loading…
Reference in a new issue