tests: P2P peer table limit
Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
This commit is contained in:
parent
1a47e2ff8f
commit
43a65b40b9
1 changed files with 51 additions and 0 deletions
|
@ -818,3 +818,54 @@ def test_p2p_group_cli_invalid(dev, apdev):
|
||||||
ev = dev[i].wait_global_event(["P2P-DEVICE-FOUND"], timeout=5)
|
ev = dev[i].wait_global_event(["P2P-DEVICE-FOUND"], timeout=5)
|
||||||
if not ev:
|
if not ev:
|
||||||
raise Exception("P2P device not found")
|
raise Exception("P2P device not found")
|
||||||
|
|
||||||
|
def test_discovery_max_peers(dev):
|
||||||
|
"""P2P device discovery and maximum peer limit exceeded"""
|
||||||
|
dev[0].p2p_listen()
|
||||||
|
dev[0].request("SET ext_mgmt_frame_handling 1")
|
||||||
|
probereq1 = "40000000ffffffffffff"
|
||||||
|
probereq2 = "ffffffffffff000000074449524543542d01080c1218243048606c0301012d1afe131bffff000000000000000000000100000000000000000000ff16230178c812400000bfce0000000000000000fafffaffdd730050f204104a000110103a00010110080002314810470010572cf82fc95756539b16b5cfb298abf1105400080000000000000000103c0001031002000200001009000200001012000200001021000120102300012010240001201011000844657669636520421049000900372a000120030101dd11506f9a0902020025000605005858045106"
|
||||||
|
|
||||||
|
# Fill the P2P peer table with max+1 entries based on Probe Request frames
|
||||||
|
# to verify correct behavior on# removing the oldest entry when running out
|
||||||
|
# of room.
|
||||||
|
for i in range(101):
|
||||||
|
addr = "0202020202%02x" % i
|
||||||
|
probereq = probereq1 + addr + probereq2
|
||||||
|
if "OK" not in dev[0].request("MGMT_RX_PROCESS freq=2412 datarate=60 ssi_signal=-30 frame=" + probereq):
|
||||||
|
raise Exception("MGMT_RX_PROCESS failed")
|
||||||
|
|
||||||
|
res = dev[0].global_request("P2P_PEER FIRST")
|
||||||
|
addr = res.splitlines()[0]
|
||||||
|
peers = [addr]
|
||||||
|
limit = 200
|
||||||
|
while limit > 0:
|
||||||
|
res = dev[0].global_request("P2P_PEER NEXT-" + addr)
|
||||||
|
addr = res.splitlines()[0]
|
||||||
|
if addr == "FAIL":
|
||||||
|
break
|
||||||
|
peers.append(addr)
|
||||||
|
limit -= 1
|
||||||
|
logger.info("Peers: " + str(peers))
|
||||||
|
|
||||||
|
if len(peers) != 100:
|
||||||
|
raise Exception("Unexpected number of peer entries")
|
||||||
|
oldest = "02:02:02:02:02:00"
|
||||||
|
if oldest in peers:
|
||||||
|
raise Exception("Oldest entry is still present")
|
||||||
|
for i in range(101):
|
||||||
|
addr = "02:02:02:02:02:%02x" % i
|
||||||
|
if addr == oldest:
|
||||||
|
continue
|
||||||
|
if addr not in peers:
|
||||||
|
raise Exception("Peer missing from table: " + addr)
|
||||||
|
|
||||||
|
# Provision Discovery Request from the oldest peer (SA) using internally
|
||||||
|
# different P2P Device Address as a regression test for incorrect processing
|
||||||
|
# for this corner case.
|
||||||
|
dst = dev[0].own_addr().replace(':', '')
|
||||||
|
src = peers[99].replace(':', '')
|
||||||
|
devaddr = "0202020202ff"
|
||||||
|
pdreq = "d0004000" + dst + src + dst + "d0000409506f9a090701dd29506f9a0902020025000d1d00" + devaddr + "1108000000000000000000101100084465766963652041dd0a0050f204100800020008"
|
||||||
|
if "OK" not in dev[0].request("MGMT_RX_PROCESS freq=2412 datarate=60 ssi_signal=-30 frame=" + pdreq):
|
||||||
|
raise Exception("MGMT_RX_PROCESS failed")
|
||||||
|
|
Loading…
Reference in a new issue