mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2024-12-11 00:28:19 -05:00
8454e1fd33
These are still disabled by default since they require mac80211_hwsim changes that are not yet in the upstream kernel and because the test cases do not fully work yet. Anyway, they are quite convenient for development use, so good to have them available in the main repository. Signed-hostap: Jouni Malinen <j@w1.fi>
131 lines
3.9 KiB
Python
131 lines
3.9 KiB
Python
#!/usr/bin/python
|
|
#
|
|
# Test cases for DFS
|
|
# Copyright (c) 2013, Jouni Malinen <j@w1.fi>
|
|
#
|
|
# This software may be distributed under the terms of the BSD license.
|
|
# See README for more details.
|
|
|
|
import os
|
|
import subprocess
|
|
import time
|
|
import logging
|
|
logger = logging.getLogger()
|
|
|
|
import hwsim_utils
|
|
import hostapd
|
|
|
|
def wait_dfs_event(hapd, event, timeout):
|
|
dfs_events = [ "DFS-RADAR-DETECTED", "DFS-NEW-CHANNEL",
|
|
"DFS-CAC-START", "DFS-CAC-COMPLETED",
|
|
"DFS-NOP-FINISHED", "AP-ENABLED" ]
|
|
ev = hapd.wait_event(dfs_events, timeout=timeout)
|
|
if not ev:
|
|
raise Exception("DFS event timed out")
|
|
if event not in ev:
|
|
raise Exception("Unexpected DFS event")
|
|
return ev
|
|
|
|
def start_dfs_ap(ap):
|
|
ifname = ap['ifname']
|
|
logger.info("Reset regulatory setup")
|
|
subprocess.call(['sudo', 'iw', 'reg', 'set', '00'])
|
|
time.sleep(1)
|
|
subprocess.call(['sudo', 'iw', 'reg', 'set', 'FI'])
|
|
logger.info("Starting AP " + ifname + " on DFS channel")
|
|
hapd_global = hostapd.HostapdGlobal()
|
|
hapd_global.remove(ifname)
|
|
hapd_global.add(ifname)
|
|
hapd = hostapd.Hostapd(ifname)
|
|
if not hapd.ping():
|
|
raise Exception("Could not ping hostapd")
|
|
hapd.set_defaults()
|
|
hapd.set("ssid", "dfs")
|
|
hapd.set("country_code", "FI")
|
|
hapd.set("ieee80211d", "1")
|
|
hapd.set("ieee80211h", "1")
|
|
hapd.set("hw_mode", "a")
|
|
hapd.set("channel", "52")
|
|
hapd.enable()
|
|
|
|
ev = wait_dfs_event(hapd, "DFS-CAC-START", 5)
|
|
if "DFS-CAC-START" not in ev:
|
|
raise Exception("Unexpected DFS event")
|
|
|
|
state = hapd.get_status_field("state")
|
|
if state != "DFS":
|
|
raise Exception("Unexpected interface state")
|
|
|
|
return hapd
|
|
|
|
def test_dfs(dev, apdev):
|
|
"""DFS CAC functionality on clear channel"""
|
|
if not os.path.exists("dfs"):
|
|
return "skip"
|
|
hapd = start_dfs_ap(apdev[0])
|
|
|
|
ev = wait_dfs_event(hapd, "DFS-CAC-COMPLETED", 70)
|
|
if "success=1" not in ev:
|
|
raise Exception("CAC failed")
|
|
if "freq=5260" not in ev:
|
|
raise Exception("Unexpected DFS freq result")
|
|
|
|
ev = hapd.wait_event(["AP-ENABLED"], timeout=5)
|
|
if not ev:
|
|
raise Exception("AP setup timed out")
|
|
|
|
state = hapd.get_status_field("state")
|
|
if state != "ENABLED":
|
|
raise Exception("Unexpected interface state")
|
|
|
|
freq = hapd.get_status_field("freq")
|
|
if freq != "5260":
|
|
raise Exception("Unexpected frequency")
|
|
|
|
#TODO: need to fix hwsim for DFS?!
|
|
#dev[0].connect("dfs", key_mgmt="NONE")
|
|
|
|
def test_dfs_radar(dev, apdev):
|
|
"""DFS CAC functionality with radar detected"""
|
|
if not os.path.exists("dfs"):
|
|
return "skip"
|
|
hapd = start_dfs_ap(apdev[0])
|
|
|
|
hapd.request("RADAR DETECTED freq=5260 ht_enabled=1 chan_width=1")
|
|
ev = wait_dfs_event(hapd, "DFS-RADAR-DETECTED", 70)
|
|
if "freq=5260" not in ev:
|
|
raise Exception("Unexpected DFS radar detection freq")
|
|
|
|
state = hapd.get_status_field("state")
|
|
if state != "DFS":
|
|
raise Exception("Unexpected interface state")
|
|
|
|
ev = wait_dfs_event(hapd, "DFS-NEW-CHANNEL", 5)
|
|
if "freq=5260" in ev:
|
|
raise Exception("Unexpected DFS new freq")
|
|
|
|
ev = wait_dfs_event(hapd, "DFS-CAC-START", 5)
|
|
if "DFS-CAC-START" not in ev:
|
|
raise Exception("Unexpected DFS event")
|
|
|
|
ev = wait_dfs_event(hapd, "DFS-CAC-COMPLETED", 70)
|
|
if "success=1" not in ev:
|
|
raise Exception("CAC failed")
|
|
if "freq=5260" in ev:
|
|
raise Exception("Unexpected DFS freq result - radar channel")
|
|
|
|
ev = hapd.wait_event(["AP-ENABLED"], timeout=5)
|
|
if not ev:
|
|
raise Exception("AP setup timed out")
|
|
|
|
state = hapd.get_status_field("state")
|
|
if state != "ENABLED":
|
|
raise Exception("Unexpected interface state")
|
|
|
|
freq = hapd.get_status_field("freq")
|
|
if freq != "5260":
|
|
raise Exception("Unexpected frequency")
|
|
|
|
#TODO: need to fix hwsim for DFS?!
|
|
#dev[0].connect("dfs", key_mgmt="NONE")
|