Name |
Date |
Size |
#Lines |
LOC |
||
---|---|---|---|---|---|---|
.. | - | - | ||||
auth_serv/ | 18-Mar-2025 | - | 6,618 | 6,242 | ||
tnc/ | 18-Mar-2025 | - | 562 | 394 | ||
vm/ | 18-Mar-2025 | - | 2,008 | 1,716 | ||
.gitignore | D | 18-Mar-2025 | 20 | 3 | 2 | |
README | D | 18-Mar-2025 | 8.7 KiB | 221 | 171 | |
build.sh | D | 18-Mar-2025 | 1.7 KiB | 84 | 68 | |
check_kernel.py | D | 18-Mar-2025 | 904 | 32 | 19 | |
devdetail.xml | D | 18-Mar-2025 | 1.2 KiB | 48 | 47 | |
devinfo.xml | D | 18-Mar-2025 | 190 | 8 | 7 | |
dictionary.radius | D | 18-Mar-2025 | 744 | 21 | 20 | |
example-hostapd.config | D | 18-Mar-2025 | 2.6 KiB | 126 | 111 | |
example-setup.txt | D | 18-Mar-2025 | 6.8 KiB | 192 | 142 | |
example-wpa_supplicant.config | D | 18-Mar-2025 | 3 KiB | 169 | 131 | |
fst_module_aux.py | D | 18-Mar-2025 | 32.4 KiB | 833 | 710 | |
fst_test_common.py | D | 18-Mar-2025 | 2.7 KiB | 93 | 68 | |
hostapd.py | D | 18-Mar-2025 | 34.1 KiB | 1,047 | 928 | |
hostapd.vlan | D | 18-Mar-2025 | 25 | 3 | 2 | |
hostapd.vlan2 | D | 18-Mar-2025 | 47 | 4 | 3 | |
hostapd.wlan3.vlan | D | 18-Mar-2025 | 20 | 3 | 2 | |
hostapd.wlan4.vlan | D | 18-Mar-2025 | 20 | 3 | 2 | |
hostapd.wpa_psk | D | 18-Mar-2025 | 236 | 6 | 5 | |
hwsim.py | D | 18-Mar-2025 | 4.7 KiB | 120 | 92 | |
hwsim_utils.py | D | 18-Mar-2025 | 10.3 KiB | 269 | 233 | |
multi-bss-acs.conf | D | 18-Mar-2025 | 404 | 29 | 23 | |
multi-bss-iface-per_sta_vif.conf | D | 18-Mar-2025 | 701 | 43 | 37 | |
multi-bss-iface.conf | D | 18-Mar-2025 | 673 | 41 | 35 | |
multi-bss.conf | D | 18-Mar-2025 | 271 | 22 | 15 | |
netlink.py | D | 18-Mar-2025 | 6.8 KiB | 238 | 192 | |
nl80211.py | D | 18-Mar-2025 | 8.8 KiB | 358 | 342 | |
owe-bss-1.conf | D | 18-Mar-2025 | 179 | 13 | 9 | |
owe-bss-2.conf | D | 18-Mar-2025 | 243 | 17 | 13 | |
p2p0.conf | D | 18-Mar-2025 | 97 | 4 | 3 | |
p2p1.conf | D | 18-Mar-2025 | 97 | 4 | 3 | |
p2p2.conf | D | 18-Mar-2025 | 97 | 4 | 3 | |
p2p_utils.py | D | 18-Mar-2025 | 15.8 KiB | 413 | 380 | |
pps-mo-1.xml | D | 18-Mar-2025 | 2.1 KiB | 63 | 62 | |
radius_das.py | D | 18-Mar-2025 | 1.7 KiB | 48 | 33 | |
remotehost.py | D | 18-Mar-2025 | 8 KiB | 273 | 222 | |
rfkill.py | D | 18-Mar-2025 | 3.6 KiB | 153 | 120 | |
run-all.sh | D | 18-Mar-2025 | 3.2 KiB | 169 | 146 | |
run-tests.py | D | 18-Mar-2025 | 29.4 KiB | 770 | 667 | |
start.sh | D | 18-Mar-2025 | 6.1 KiB | 219 | 189 | |
stop.sh | D | 18-Mar-2025 | 2 KiB | 81 | 68 | |
test_ap_acs.py | D | 18-Mar-2025 | 29.8 KiB | 820 | 698 | |
test_ap_ciphers.py | D | 18-Mar-2025 | 45.7 KiB | 1,205 | 1,016 | |
test_ap_config.py | D | 18-Mar-2025 | 26.7 KiB | 629 | 555 | |
test_ap_csa.py | D | 18-Mar-2025 | 9.7 KiB | 277 | 220 | |
test_ap_dynamic.py | D | 18-Mar-2025 | 22.8 KiB | 610 | 532 | |
test_ap_eap.py | D | 18-Mar-2025 | 348.8 KiB | 7,905 | 7,012 | |
test_ap_ft.py | D | 18-Mar-2025 | 148 KiB | 3,775 | 3,115 | |
test_ap_hs20.py | D | 18-Mar-2025 | 266.3 KiB | 6,589 | 5,676 | |
test_ap_ht.py | D | 18-Mar-2025 | 60.1 KiB | 1,645 | 1,415 | |
test_ap_mixed.py | D | 18-Mar-2025 | 4.3 KiB | 103 | 85 | |
test_ap_open.py | D | 18-Mar-2025 | 40.4 KiB | 1,022 | 859 | |
test_ap_params.py | D | 18-Mar-2025 | 38.6 KiB | 986 | 899 | |
test_ap_pmf.py | D | 18-Mar-2025 | 70.4 KiB | 1,771 | 1,526 | |
test_ap_psk.py | D | 18-Mar-2025 | 152 KiB | 3,837 | 3,169 | |
test_ap_qosmap.py | D | 18-Mar-2025 | 9 KiB | 223 | 194 | |
test_ap_roam.py | D | 18-Mar-2025 | 15.6 KiB | 398 | 333 | |
test_ap_tdls.py | D | 18-Mar-2025 | 24.8 KiB | 657 | 593 | |
test_ap_track.py | D | 18-Mar-2025 | 15.9 KiB | 438 | 365 | |
test_ap_vht.py | D | 18-Mar-2025 | 55.9 KiB | 1,377 | 1,229 | |
test_ap_vlan.py | D | 18-Mar-2025 | 33.6 KiB | 833 | 691 | |
test_ap_wps.py | D | 18-Mar-2025 | 420.3 KiB | 10,665 | 9,279 | |
test_authsrv.py | D | 18-Mar-2025 | 11.6 KiB | 263 | 223 | |
test_autoscan.py | D | 18-Mar-2025 | 3.2 KiB | 82 | 67 | |
test_bgscan.py | D | 18-Mar-2025 | 13.1 KiB | 343 | 276 | |
test_cert_check.py | D | 18-Mar-2025 | 11.9 KiB | 313 | 270 | |
test_cfg80211.py | D | 18-Mar-2025 | 6.6 KiB | 153 | 113 | |
test_connect_cmd.py | D | 18-Mar-2025 | 9.6 KiB | 256 | 199 | |
test_dbus.py | D | 18-Mar-2025 | 261.1 KiB | 6,427 | 5,473 | |
test_dfs.py | D | 18-Mar-2025 | 35.9 KiB | 957 | 785 | |
test_dpp.py | D | 18-Mar-2025 | 338.9 KiB | 7,863 | 6,634 | |
test_dpp3.py | D | 18-Mar-2025 | 24.3 KiB | 605 | 518 | |
test_dscp.py | D | 18-Mar-2025 | 15.6 KiB | 413 | 317 | |
test_eap.py | D | 18-Mar-2025 | 28.4 KiB | 619 | 550 | |
test_eap_proto.py | D | 18-Mar-2025 | 445.6 KiB | 10,423 | 9,234 | |
test_eht.py | D | 18-Mar-2025 | 84.2 KiB | 2,193 | 1,652 | |
test_erp.py | D | 18-Mar-2025 | 31.3 KiB | 740 | 660 | |
test_ext_password.py | D | 18-Mar-2025 | 5.2 KiB | 126 | 109 | |
test_fils.py | D | 18-Mar-2025 | 100 KiB | 2,611 | 2,225 | |
test_fst_config.py | D | 18-Mar-2025 | 22.6 KiB | 553 | 472 | |
test_fst_module.py | D | 18-Mar-2025 | 128.6 KiB | 2,833 | 2,402 | |
test_gas.py | D | 18-Mar-2025 | 82.8 KiB | 2,084 | 1,749 | |
test_hapd_ctrl.py | D | 18-Mar-2025 | 46.4 KiB | 1,078 | 976 | |
test_he.py | D | 18-Mar-2025 | 72.5 KiB | 1,847 | 1,605 | |
test_he_mbssid.py | D | 18-Mar-2025 | 17.3 KiB | 455 | 365 | |
test_hostapd_oom.py | D | 18-Mar-2025 | 6.5 KiB | 174 | 152 | |
test_hs20_filter.py | D | 18-Mar-2025 | 8.1 KiB | 206 | 160 | |
test_hs20_pps_mo.py | D | 18-Mar-2025 | 1.5 KiB | 44 | 32 | |
test_ibss.py | D | 18-Mar-2025 | 22.9 KiB | 602 | 478 | |
test_ieee8021x.py | D | 18-Mar-2025 | 22.8 KiB | 571 | 493 | |
test_kernel.py | D | 18-Mar-2025 | 5.8 KiB | 169 | 121 | |
test_macsec.py | D | 18-Mar-2025 | 33 KiB | 917 | 778 | |
test_mbo.py | D | 18-Mar-2025 | 26.7 KiB | 638 | 537 | |
test_module_tests.py | D | 18-Mar-2025 | 889 | 29 | 18 | |
test_monitor_interface.py | D | 18-Mar-2025 | 3.6 KiB | 95 | 72 | |
test_mscs.py | D | 18-Mar-2025 | 14.9 KiB | 416 | 310 | |
test_multi_ap.py | D | 18-Mar-2025 | 16.6 KiB | 381 | 313 | |
test_nan_usd.py | D | 18-Mar-2025 | 15.6 KiB | 421 | 344 | |
test_nfc_p2p.py | D | 18-Mar-2025 | 36.7 KiB | 842 | 739 | |
test_nfc_wps.py | D | 18-Mar-2025 | 32.4 KiB | 698 | 647 | |
test_oce.py | D | 18-Mar-2025 | 6.1 KiB | 186 | 140 | |
test_ocv.py | D | 18-Mar-2025 | 48.7 KiB | 1,263 | 1,093 | |
test_offchannel_tx.py | D | 18-Mar-2025 | 1.9 KiB | 51 | 37 | |
test_owe.py | D | 18-Mar-2025 | 41.8 KiB | 1,111 | 947 | |
test_p2p_autogo.py | D | 18-Mar-2025 | 38.9 KiB | 987 | 839 | |
test_p2p_channel.py | D | 18-Mar-2025 | 59 KiB | 1,440 | 1,214 | |
test_p2p_concurrency.py | D | 18-Mar-2025 | 11.3 KiB | 289 | 240 | |
test_p2p_device.py | D | 18-Mar-2025 | 26.3 KiB | 607 | 516 | |
test_p2p_discovery.py | D | 18-Mar-2025 | 35 KiB | 872 | 750 | |
test_p2p_ext.py | D | 18-Mar-2025 | 15.8 KiB | 385 | 345 | |
test_p2p_grpform.py | D | 18-Mar-2025 | 49.7 KiB | 1,188 | 1,050 | |
test_p2p_invitation.py | D | 18-Mar-2025 | 7.2 KiB | 196 | 154 | |
test_p2p_messages.py | D | 18-Mar-2025 | 87.7 KiB | 2,154 | 1,830 | |
test_p2p_persistent.py | D | 18-Mar-2025 | 30.3 KiB | 714 | 623 | |
test_p2p_service.py | D | 18-Mar-2025 | 27.7 KiB | 641 | 549 | |
test_p2p_set.py | D | 18-Mar-2025 | 4.7 KiB | 129 | 107 | |
test_p2p_wifi_display.py | D | 18-Mar-2025 | 19.9 KiB | 476 | 392 | |
test_p2ps.py | D | 18-Mar-2025 | 76.1 KiB | 1,690 | 1,381 | |
test_pasn.py | D | 18-Mar-2025 | 37.6 KiB | 1,089 | 818 | |
test_pmksa_cache.py | D | 18-Mar-2025 | 51.8 KiB | 1,276 | 1,106 | |
test_radio_work.py | D | 18-Mar-2025 | 5.3 KiB | 134 | 108 | |
test_radius.py | D | 18-Mar-2025 | 77.5 KiB | 1,879 | 1,651 | |
test_rfkill.py | D | 18-Mar-2025 | 8.1 KiB | 243 | 201 | |
test_rrm.py | D | 18-Mar-2025 | 96.1 KiB | 2,409 | 1,928 | |
test_rsn_override.py | D | 18-Mar-2025 | 16.9 KiB | 438 | 380 | |
test_sae.py | D | 18-Mar-2025 | 132.2 KiB | 3,276 | 2,830 | |
test_sae_pk.py | D | 18-Mar-2025 | 17.8 KiB | 465 | 389 | |
test_scan.py | D | 18-Mar-2025 | 78.9 KiB | 2,030 | 1,644 | |
test_scs.py | D | 18-Mar-2025 | 11.5 KiB | 216 | 182 | |
test_sigma_dut.py | D | 18-Mar-2025 | 276 KiB | 5,835 | 4,982 | |
test_ssid.py | D | 18-Mar-2025 | 5.1 KiB | 128 | 106 | |
test_sta_dynamic.py | D | 18-Mar-2025 | 21.2 KiB | 534 | 449 | |
test_suite_b.py | D | 18-Mar-2025 | 35.1 KiB | 856 | 766 | |
test_tnc.py | D | 18-Mar-2025 | 8.3 KiB | 195 | 166 | |
test_wep.py | D | 18-Mar-2025 | 6.7 KiB | 173 | 155 | |
test_wext.py | D | 18-Mar-2025 | 9.2 KiB | 255 | 204 | |
test_wmediumd.py | D | 18-Mar-2025 | 16.2 KiB | 481 | 370 | |
test_wnm.py | D | 18-Mar-2025 | 99.8 KiB | 2,242 | 1,928 | |
test_wpas_ap.py | D | 18-Mar-2025 | 44.5 KiB | 1,213 | 1,057 | |
test_wpas_config.py | D | 18-Mar-2025 | 32.1 KiB | 851 | 748 | |
test_wpas_ctrl.py | D | 18-Mar-2025 | 98.4 KiB | 2,194 | 1,937 | |
test_wpas_mesh.py | D | 18-Mar-2025 | 95.9 KiB | 2,616 | 2,133 | |
test_wpas_wmm_ac.py | D | 18-Mar-2025 | 15.3 KiB | 401 | 297 | |
tshark.py | D | 18-Mar-2025 | 3.9 KiB | 125 | 102 | |
utils.py | D | 18-Mar-2025 | 10.7 KiB | 340 | 284 | |
w1fi_logo.png | D | 18-Mar-2025 | 7.4 KiB | |||
wlantest.py | D | 18-Mar-2025 | 9.9 KiB | 290 | 241 | |
wpasupplicant.py | D | 18-Mar-2025 | 63.2 KiB | 1,738 | 1,562 | |
wps-ctrl-cred | D | 18-Mar-2025 | 67 | |||
wps-ctrl-cred2 | D | 18-Mar-2025 | 59 | |||
wps-mixed-cred | D | 18-Mar-2025 | 112 | |||
wps-wep-cred | D | 18-Mar-2025 | 53 |
README
1Automated hostapd/wpa_supplicant testing with mac80211_hwsim 2------------------------------------------------------------ 3 4This directory contains testing infrastructure and test cases to run 5automated tests of full hostapd and wpa_supplicant functionality. This 6testing is done with the help of mac80211_hwsim which is Linux kernel 7driver that simulates IEEE 802.11 radios without requiring any 8additional hardware. This setup most of the hostapd and wpa_supplicant 9functionality (and large parts of the Linux cfg80211 and mac80211 10functionality for that matter) to be tested. 11 12mac80211_hwsim is loaded with five simulated radios to allow different 13device combinations to be tested. wlantest is used analyze raw packets 14captured through the hwsim0 monitor interface that capture all frames 15sent on all channels. wlantest is used to store the frames for 16analysis. Three wpa_supplicant processes are used to control three 17virtual radios and one hostapd process is used to dynamically control 18the other two virtual radios. wpa_supplicant/hostapd test functionality 19is used to verify that data connection (both unicast and broadcast) 20works between two netdevs. 21 22The python scripts and tools in this directory control test case 23execution. They interact wpa_supplicant and hostapd through control 24interfaces to perform the operations. In addition, wlantest_cli is used 25to verify that operations have been performed correctly and that the 26network connection works in the expected way. 27 28These test cases are run automatically against the hostap.git commits 29for regression testing and to help in keeping the hostap.git main 30branch in stable state. Results from these tests are available here: 31http://buildbot.w1.fi/hwsim/ 32 33 34Building binaries for testing 35----------------------------- 36 37You will need to build (or use already built) components to be 38tested. These are available in the hostap.git repository and can be 39built for example as follows: 40 41cd ../../wpa_supplicant 42cp ../tests/hwsim/example-wpa_supplicant.config .config 43make clean 44make 45cd ../hostapd 46cp ../tests/hwsim/example-hostapd.config .config 47make clean 48make hostapd hostapd_cli hlr_auc_gw 49cd ../wlantest 50make clean 51make 52 53Alternatively, the build.sh script here can be used to run these steps 54with conditional creation of .config files only if they do not exist. 55 56The test scripts can find the binaries in the locations where they were 57built. It is also possible to install wlantest_cli somewhere on the path 58to use pre-built tools. 59 60Please note that some of the configuration parameters used to enable 61more testing coverage may require development packages that may not be 62installed by default in many distributions. For example, following 63Debian/Ubuntu packages are likely to be needed: 64- binutils-dev 65- libsqlite3-dev 66- libpcap-dev 67 68example-setup.txt provides more complete step-by-step example on how a 69test setup can be built. 70 71 72wpaspy 73------ 74 75The python scripts use wpaspy.py to interact with the wpa_supplicant 76control interface, but the run-tests.py script adds the (relative) 77path into the environment so it doesn't need to be installed. 78 79 80mac80211_hwsim 81-------------- 82 83mac80211_hwsim kernel module is available from the upstream Linux 84kernel. Some Linux distributions enable it by default. If that's not the 85case, you can either enable it in the kernel configuration 86(CONFIG_MAC80211_HWSIM=m) and rebuild your kernel or use Backports with 87CPTCFG_MAC80211_HWSIM=m to replace the wireless LAN components in the 88base kernel. 89 90 91sudo 92---- 93 94Some parts of the testing process requires root privileges. The test 95scripts are currently using sudo to achieve this. To be able to run the 96tests, you'll probably want to enable sudo with a timeout to not expire 97password entry very quickly. For example, use this in the sudoers file: 98 99Defaults env_reset,timestamp_timeout=180 100 101Or on a dedicated test system, you could even disable password prompting 102with this in sudoers: 103 104%sudo ALL=NOPASSWD: ALL 105 106 107Other network interfaces 108------------------------ 109 110Some of the test scripts are still using hardcoded interface names, so 111the easiest way of making things work is to avoid using other network 112devices that may use conflicting interface names. For example, unload 113any wireless LAN driver before running the tests and make sure that 114wlan0..4 gets assigned as the interface names for the mac80211_hwsim 115radios. It may also be possible to rename the interface expectations in 116run-tests.py to allow other names to be used. 117 118Please also note that some commonly enabled tools, like NetworkManager, 119may end up trying to control new network interfaces automatically. This 120can result in conflicts with the test scripts and you may need to 121disable such network services or at least mark the mac80211_hwsim wlan# 122interfaces as umanaged. As an example, this can be done in 123/etc/NetworkManager/NetworkManager.conf with following addition: 124 125[keyfile] 126unmanaged-devices=mac:02:00:00:00:00:00;mac:02:00:00:00:01:00;mac:02:00:00:00:02:00;mac:02:00:00:00:03:00;mac:02:00:00:00:04:00 127 128 129Running tests 130------------- 131 132Simplest way to run a full set of the test cases is by running 133run-all.sh in tests/hwsim directory. This will use start.sh to load the 134mac80211_hwsim module and start wpa_supplicant, hostapd, and various 135test tools. run-tests.sh is then used to run through all the defined 136test cases and stop.sh to stop the programs and unload the kernel 137module. 138 139run-all.sh can be used to run the same test cases under different 140conditions: 141 142# run normal test cases 143./run-all.sh 144 145# run normal test cases under valgrind 146./run-all.sh valgrind 147 148# run normal test cases with Linux tracing 149./run-all.sh trace 150 151# run normal test cases with multi channel support (see details below) 152./run-all.sh channels=<num of channels> 153 154run-all.sh directs debug logs into the logs subdirectory (or $LOGDIR if 155present in the environment). Log file names include the current UNIX 156timestamp and a postfix to identify the specific log: 157- *.log0 = wpa_supplicant debug log for the first radio 158- *.log1 = wpa_supplicant debug log for the second radio 159- *.log2 = wpa_supplicant debug log for the third radio 160- *.hostapd = hostapd debug log 161- hwsim0 = wlantest debug log 162- hwsim0.pcapng = capture with all frames exchanged during the tests 163- *.log = debug prints from the test scripts 164- trace.dat = Linux tracing record (if enabled) 165- hlr_auc_gw - hlr_auc_gw (EAP-SIM/AKA/AKA' authentication) log 166- auth_serv - hostapd as RADIUS authentication server log 167 168 169For manual testing, ./start.sh can be used to initialize interfaces and 170programs and run-tests.py to execute one or more test 171cases. run-tests.py output verbosity can be controlled with -d (more 172verbose debug output) and -q (less verbose output) on the command 173line. "-f <module name>" (pointing to file test_<module name>.py) can be 174used to specify that all test cases from a single file are to be 175run. Test name as the last command line argument can be specified that a 176single test case is to be run (e.g., "./run-tests.py ap_pmf_required"). 177 178Notice that some tests require the driver to support concurrent 179operation on multi channels in order to run. These tests will be skipped 180in case the driver does not support multi channels. To enable support 181for multi channel, the number of supported channel is passed as an 182argument to run-all.sh or start.sh 183 184 185Adding/modifying test cases 186--------------------------- 187 188All the test cases are defined in the test_*.py files. These are python 189scripts that can use the local helper classes to interact with the test 190components. While various python constructs can be used in the scripts, 191only a minimal level of python knowledge should really be needed to 192modify and add new test cases. The easiest starting point for this is 193likely to take a look at some of the example scripts. When working on a 194new test, run-tests.py with -d and the test case name on the command 195line is a convenient way of verifying functionality. 196 197run-tests.py will automatically import all test cases from the test_*.py 198files in this directory. All functions starting with the "test_" prefix 199in these files are assumed to be test cases. Each test case is named by 200the function name following the "test_" prefix. 201 202 203Results database 204---------------- 205 206run-tests.py can be requested to write results from the execution of 207each test case into an sqlite database. The "-S <path to database>" and 208"-b <build id>" command line arguments can be used to do that. The 209database must have been prepared before this, e.g., with following: 210 211cat | sqlite3 /tmp/example.db <<EOF 212CREATE TABLE results (test,result,run,time,duration,build,commitid); 213CREATE INDEX results_idx ON results (test); 214CREATE INDEX results_idx2 ON results (run); 215CREATE TABLE tests (test,description); 216CREATE UNIQUE INDEX tests_idx ON tests (test); 217CREATE TABLE logs (test,run,type,contents); 218CREATE INDEX logs_idx ON logs (test); 219CREATE INDEX logs_idx2 ON logs (run); 220EOF 221