From d1fcf34cb5aca8c6896da6abdc71521f326866e7 Mon Sep 17 00:00:00 2001 From: Sven Eckelmann Date: Fri, 12 Jul 2019 12:48:53 +0200 Subject: [PATCH] tests: Fix wlan.mesh.config.cap workaround for test_wpas_mesh_max_peering The wlan.mesh.config doesn't have to be the last element of beacon. Things like VHT or HE oper/cap are usually follow the mesh configuration element. The workaround must first get the position of a correct reference value in wlan.mesh.config (ps_protocol) and then calculate the correct wlan.mesh.config.cap offset based on that. Reported-by: Johannes Berg Fixes: 2cbaf0de223b ("tests: Work around tshark bug in wpas_mesh_max_peering") Signed-off-by: Sven Eckelmann --- tests/hwsim/test_wpas_mesh.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/tests/hwsim/test_wpas_mesh.py b/tests/hwsim/test_wpas_mesh.py index 5b8b16602..cb1bb8c31 100644 --- a/tests/hwsim/test_wpas_mesh.py +++ b/tests/hwsim/test_wpas_mesh.py @@ -877,8 +877,21 @@ def test_wpas_mesh_max_peering(dev, apdev, params): out = run_tshark_json(capfile, filt + " && wlan.sa == " + addr) pkts = json.loads(out) for pkt in pkts: + wlan = pkt["_source"]["layers"]["wlan"] + if "wlan.tagged.all" not in wlan: + continue + + tagged = wlan["wlan.tagged.all"] + if "wlan.tag" not in tagged: + continue + + wlan_tag = tagged["wlan.tag"] + if "wlan.mesh.config.ps_protocol_raw" not in wlan_tag: + continue + frame = pkt["_source"]["layers"]["frame_raw"][0] - cap = int(frame[-2:], 16) + cap_offset = wlan_tag["wlan.mesh.config.ps_protocol_raw"][1] + 6 + cap = int(frame[(cap_offset * 2):(cap_offset * 2 + 2)], 16) if cap & 0x01: one[idx] += 1 else: