tests: Add capture file validation for IPv4 in proxyarp_open
Verify that the expected frames were seend and unexpected frames weren't. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
210a4f6a13
commit
efd0a6fbf1
2 changed files with 83 additions and 4 deletions
|
@ -18,6 +18,7 @@ import subprocess
|
||||||
import hostapd
|
import hostapd
|
||||||
from utils import HwsimSkip
|
from utils import HwsimSkip
|
||||||
import hwsim_utils
|
import hwsim_utils
|
||||||
|
from tshark import run_tshark
|
||||||
from wlantest import Wlantest
|
from wlantest import Wlantest
|
||||||
from wpasupplicant import WpaSupplicant
|
from wpasupplicant import WpaSupplicant
|
||||||
from test_ap_eap import check_eap_capa, check_domain_match_full
|
from test_ap_eap import check_eap_capa, check_domain_match_full
|
||||||
|
@ -2920,6 +2921,17 @@ def get_bridge_macs(ifname):
|
||||||
cmd.stdout.close()
|
cmd.stdout.close()
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
def tshark_get_arp(cap, filter):
|
||||||
|
res = run_tshark(cap, filter,
|
||||||
|
[ "eth.dst", "eth.src",
|
||||||
|
"arp.src.hw_mac", "arp.src.proto_ipv4",
|
||||||
|
"arp.dst.hw_mac", "arp.dst.proto_ipv4" ],
|
||||||
|
wait=False)
|
||||||
|
frames = []
|
||||||
|
for l in res.splitlines():
|
||||||
|
frames.append(l.split('\t'))
|
||||||
|
return frames
|
||||||
|
|
||||||
def _test_proxyarp_open(dev, apdev, params, ebtables=False):
|
def _test_proxyarp_open(dev, apdev, params, ebtables=False):
|
||||||
prefix = "proxyarp_open"
|
prefix = "proxyarp_open"
|
||||||
if ebtables:
|
if ebtables:
|
||||||
|
@ -3013,6 +3025,7 @@ def _test_proxyarp_open(dev, apdev, params, ebtables=False):
|
||||||
|
|
||||||
addr0 = dev[0].p2p_interface_addr()
|
addr0 = dev[0].p2p_interface_addr()
|
||||||
addr1 = dev[1].p2p_interface_addr()
|
addr1 = dev[1].p2p_interface_addr()
|
||||||
|
addr2 = dev[2].p2p_interface_addr()
|
||||||
|
|
||||||
src_ll_opt0 = "\x01\x01" + binascii.unhexlify(addr0.replace(':',''))
|
src_ll_opt0 = "\x01\x01" + binascii.unhexlify(addr0.replace(':',''))
|
||||||
src_ll_opt1 = "\x01\x01" + binascii.unhexlify(addr1.replace(':',''))
|
src_ll_opt1 = "\x01\x01" + binascii.unhexlify(addr1.replace(':',''))
|
||||||
|
@ -3262,6 +3275,71 @@ def _test_proxyarp_open(dev, apdev, params, ebtables=False):
|
||||||
cmd.stdout.close()
|
cmd.stdout.close()
|
||||||
logger.info("ebtables results:\n" + res)
|
logger.info("ebtables results:\n" + res)
|
||||||
|
|
||||||
|
# Verify that expected ARP messages were seen and no unexpected
|
||||||
|
# ARP messages were seen.
|
||||||
|
|
||||||
|
arp_req = tshark_get_arp(cap_dev0, "arp.opcode == 1")
|
||||||
|
arp_reply = tshark_get_arp(cap_dev0, "arp.opcode == 2")
|
||||||
|
logger.info("dev0 seen ARP requests:\n" + str(arp_req))
|
||||||
|
logger.info("dev0 seen ARP replies:\n" + str(arp_reply))
|
||||||
|
|
||||||
|
if [ 'ff:ff:ff:ff:ff:ff', addr1,
|
||||||
|
addr1, '192.168.1.100',
|
||||||
|
'00:00:00:00:00:00', '192.168.1.123' ] in arp_req:
|
||||||
|
raise Exception("dev0 saw ARP request from dev1")
|
||||||
|
if [ 'ff:ff:ff:ff:ff:ff', addr2,
|
||||||
|
addr2, '192.168.1.103',
|
||||||
|
'00:00:00:00:00:00', '192.168.1.123' ] in arp_req:
|
||||||
|
raise Exception("dev0 saw ARP request from dev2")
|
||||||
|
# TODO: Uncomment once fixed in kernel
|
||||||
|
#if [ 'ff:ff:ff:ff:ff:ff', bssid,
|
||||||
|
# bssid, '192.168.1.101',
|
||||||
|
# '00:00:00:00:00:00', '192.168.1.123' ] in arp_req:
|
||||||
|
# raise Exception("dev0 saw ARP request from br")
|
||||||
|
|
||||||
|
if ebtables:
|
||||||
|
for req in arp_req:
|
||||||
|
if req[1] != addr0:
|
||||||
|
raise Exception("Unexpected foreign ARP request on dev0")
|
||||||
|
|
||||||
|
arp_req = tshark_get_arp(cap_dev1, "arp.opcode == 1")
|
||||||
|
arp_reply = tshark_get_arp(cap_dev1, "arp.opcode == 2")
|
||||||
|
logger.info("dev1 seen ARP requests:\n" + str(arp_req))
|
||||||
|
logger.info("dev1 seen ARP replies:\n" + str(arp_reply))
|
||||||
|
|
||||||
|
if [ 'ff:ff:ff:ff:ff:ff', addr2,
|
||||||
|
addr2, '192.168.1.103',
|
||||||
|
'00:00:00:00:00:00', '192.168.1.123' ] in arp_req:
|
||||||
|
raise Exception("dev1 saw ARP request from dev2")
|
||||||
|
if [addr1, addr0, addr0, '192.168.1.123', addr1, '192.168.1.100'] not in arp_reply:
|
||||||
|
raise Exception("dev1 did not get ARP response for 192.168.1.123")
|
||||||
|
|
||||||
|
if ebtables:
|
||||||
|
for req in arp_req:
|
||||||
|
if req[1] != addr1:
|
||||||
|
raise Exception("Unexpected foreign ARP request on dev1")
|
||||||
|
|
||||||
|
arp_req = tshark_get_arp(cap_dev2, "arp.opcode == 1")
|
||||||
|
arp_reply = tshark_get_arp(cap_dev2, "arp.opcode == 2")
|
||||||
|
logger.info("dev2 seen ARP requests:\n" + str(arp_req))
|
||||||
|
logger.info("dev2 seen ARP replies:\n" + str(arp_reply))
|
||||||
|
|
||||||
|
if [ addr2, addr0,
|
||||||
|
addr0, '192.168.1.123',
|
||||||
|
addr2, '192.168.1.103' ] not in arp_reply:
|
||||||
|
raise Exception("dev2 did not get ARP response for 192.168.1.123")
|
||||||
|
|
||||||
|
arp_req = tshark_get_arp(cap_br, "arp.opcode == 1")
|
||||||
|
arp_reply = tshark_get_arp(cap_br, "arp.opcode == 2")
|
||||||
|
logger.info("br seen ARP requests:\n" + str(arp_req))
|
||||||
|
logger.info("br seen ARP replies:\n" + str(arp_reply))
|
||||||
|
|
||||||
|
# TODO: Uncomment once fixed in kernel
|
||||||
|
#if [ bssid, addr0,
|
||||||
|
# addr0, '192.168.1.123',
|
||||||
|
# bssid, '192.168.1.101' ] not in arp_reply:
|
||||||
|
# raise Exception("br did not get ARP response for 192.168.1.123")
|
||||||
|
|
||||||
def test_proxyarp_open(dev, apdev, params):
|
def test_proxyarp_open(dev, apdev, params):
|
||||||
"""ProxyARP with open network"""
|
"""ProxyARP with open network"""
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -15,11 +15,12 @@ logger = logging.getLogger()
|
||||||
|
|
||||||
_tshark_filter_arg = '-Y'
|
_tshark_filter_arg = '-Y'
|
||||||
|
|
||||||
def run_tshark(filename, filter, display=None):
|
def run_tshark(filename, filter, display=None, wait=True):
|
||||||
global _tshark_filter_arg
|
global _tshark_filter_arg
|
||||||
|
|
||||||
# wait a bit to make it more likely for wlantest sniffer to have captured
|
if wait:
|
||||||
# and written the results into a file that we can process here
|
# wait a bit to make it more likely for wlantest sniffer to have
|
||||||
|
# captured and written the results into a file that we can process here
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in a new issue