if r_res['ifname'] in utils.get_ifnames():
raise Exception("Group interface netdev was not removed")
+def test_grpform4(dev):
+ """P2P group formation response during p2p_find"""
+ addr1 = dev[1].p2p_dev_addr()
+ dev[1].p2p_listen()
+ dev[0].discover_peer(addr1)
+ dev[1].p2p_find(social=True)
+ time.sleep(0.4)
+ dev[0].global_request("P2P_CONNECT " + addr1 + " 12345670 display")
+ ev = dev[1].wait_global_event(["P2P-GO-NEG-REQUEST"], timeout=15)
+ if ev is None:
+ raise Exception("GO Negotiation RX timed out")
+ time.sleep(0.5)
+ dev[1].p2p_stop_find()
+ dev[0].p2p_stop_find()
+
def test_grpform_pbc(dev):
"""P2P group formation using PBC and re-init GO Negotiation"""
[i_res, r_res] = go_neg_pbc(i_dev=dev[0], i_intent=15, r_dev=dev[1], r_intent=0)
if "OK" not in dev[1].global_request("P2P_EXT_LISTEN"):
raise Exception("Failed to clear extended listen timing")
+def test_grpform_ext_listen_oper(dev):
+ """P2P extended listen timing operations"""
+ try:
+ _test_grpform_ext_listen_oper(dev)
+ finally:
+ dev[0].global_request("P2P_EXT_LISTEN")
+
+def _test_grpform_ext_listen_oper(dev):
+ addr0 = dev[0].p2p_dev_addr()
+ dev[0].global_request("SET p2p_no_group_iface 0")
+ wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
+ wpas.interface_add("wlan5")
+ addr1 = wpas.p2p_dev_addr()
+ wpas.request("P2P_SET listen_channel 1")
+ wpas.global_request("SET p2p_no_group_iface 0")
+ wpas.request("P2P_LISTEN")
+ if not dev[0].discover_peer(addr1):
+ raise Exception("Could not discover peer")
+ dev[0].request("P2P_LISTEN")
+ if not wpas.discover_peer(addr0):
+ raise Exception("Could not discover peer (2)")
+
+ dev[0].global_request("P2P_EXT_LISTEN 300 500")
+ dev[0].global_request("P2P_CONNECT " + addr1 + " 12345670 display auth go_intent=0 freq=2417")
+ wpas.global_request("P2P_CONNECT " + addr0 + " 12345670 enter go_intent=15 freq=2417")
+ ev = dev[0].wait_global_event(["P2P-GO-NEG-SUCCESS"], timeout=15)
+ if ev is None:
+ raise Exception("GO Negotiation failed")
+ ifaces = wpas.request("INTERFACES").splitlines()
+ iface = ifaces[0] if "p2p-wlan" in ifaces[0] else ifaces[1]
+ wpas.group_ifname = iface
+ if "OK" not in wpas.group_request("STOP_AP"):
+ raise Exception("STOP_AP failed")
+ wpas.group_request("SET ext_mgmt_frame_handling 1")
+ dev[1].p2p_find(social=True)
+ time.sleep(1)
+ if dev[1].peer_known(addr0):
+ raise Exception("Unexpected peer discovery")
+ ifaces = dev[0].request("INTERFACES").splitlines()
+ iface = ifaces[0] if "p2p-wlan" in ifaces[0] else ifaces[1]
+ if "OK" not in dev[0].global_request("P2P_GROUP_REMOVE " + iface):
+ raise Exception("Failed to request group removal")
+ wpas.remove_group()
+
+ count = 0
+ timeout = 15
+ found = False
+ while count < timeout * 4:
+ time.sleep(0.25)
+ count = count + 1
+ if dev[1].peer_known(addr0):
+ found = True
+ break
+ dev[1].p2p_stop_find()
+ if not found:
+ raise Exception("Could not discover peer that was supposed to use extended listen")
+
def test_both_go_intent_15(dev):
"""P2P GO Negotiation with both devices using GO intent 15"""
go_neg_pin_authorized(i_dev=dev[0], i_intent=15, r_dev=dev[1], r_intent=15, expect_failure=True, i_go_neg_status=9)
if "OK" not in dev[1].global_request("P2P_CONNECT " + addr0 + " pbc go_intent=15 freq=2412"):
raise Exception("Failed to initiate GO Neg")
ev = dev[0].wait_global_event(["WPS-OVERLAP-DETECTED"], timeout=15)
- print ev
if ev is None:
raise Exception("PBC overlap not reported")
if ev is None:
raise Exception("Group formation timed out on P2P Client")
dev[0].remove_group()
+ dev[1].wait_go_ending_session()
if mode != "P2P GO - group formation":
raise Exception("Unexpected mode on GO during group formation: " + mode)
ev = dev[0].wait_global_event(["P2P-GROUP-STARTED"], timeout=15)
if ev is None:
raise Exception("Group formation timed out")
+ dev[0].group_form_result(ev)
+
dev[0].request("SET extra_roc_dur 0")
ev = dev[1].wait_global_event(["P2P-GROUP-STARTED"], timeout=15)
if ev is None:
if "FAIL-INVALID-PIN" not in dev[0].request("P2P_CONNECT 00:11:22:33:44:55 1234567"):
raise Exception("Invalid PIN was not rejected")
+ if "FAIL-INVALID-PIN" not in dev[0].request("P2P_CONNECT 00:11:22:33:44:55 12345678a"):
+ raise Exception("Invalid PIN was not rejected")
if "FAIL-CHANNEL-UNSUPPORTED" not in dev[0].request("P2P_CONNECT 00:11:22:33:44:55 pin freq=3000"):
raise Exception("Unsupported channel not reported")
finally:
dev[1].request("SET passive_scan 0")
dev[1].flush_scan_cache()
+
+def test_grpform_not_ready(dev):
+ """Not ready for GO Negotiation (listen)"""
+ addr0 = dev[0].p2p_dev_addr()
+ addr2 = dev[2].p2p_dev_addr()
+ dev[0].p2p_listen()
+ if not dev[1].discover_peer(addr0):
+ raise Exception("Could not discover peer")
+ dev[1].global_request("P2P_CONNECT " + addr0 + " pbc")
+ ev = dev[0].wait_global_event(["P2P-GO-NEG-REQUEST"], timeout=5)
+ if ev is None:
+ raise Exception("No P2P-GO-NEG-REQUEST event")
+ dev[0].dump_monitor()
+ time.sleep(5)
+ if not dev[2].discover_peer(addr0):
+ raise Exception("Could not discover peer(2)")
+ for i in range(3):
+ dev[i].p2p_stop_find()
+
+def test_grpform_not_ready2(dev):
+ """Not ready for GO Negotiation (search)"""
+ addr0 = dev[0].p2p_dev_addr()
+ addr2 = dev[2].p2p_dev_addr()
+ dev[0].p2p_find(social=True)
+ if not dev[1].discover_peer(addr0):
+ raise Exception("Could not discover peer")
+ dev[1].global_request("P2P_CONNECT " + addr0 + " pbc")
+ ev = dev[0].wait_global_event(["P2P-GO-NEG-REQUEST"], timeout=5)
+ if ev is None:
+ raise Exception("No P2P-GO-NEG-REQUEST event")
+ dev[0].dump_monitor()
+ time.sleep(1)
+ dev[2].p2p_listen()
+ ev = dev[0].wait_global_event(["P2P-DEVICE-FOUND"], timeout=10)
+ if ev is None:
+ raise Exception("Peer not discovered after GO Neg Resp(status=1) TX")
+ if addr2 not in ev:
+ raise Exception("Unexpected peer discovered: " + ev)
+ for i in range(3):
+ dev[i].p2p_stop_find()