Step-by-step guide for setting up hostapd/wpa_supplicant test framework
-----------------------------------------------------------------------

This document can be used as a quick guide for getting started with
hostapd/wpa_supplicant test framework with mac80211_hwsim. While the
example here uses Ubuntu 14.04.1 server to have a list of exact steps,
there are no requirements for using that specific distribution in the
testing setup.

The steps here describe how to run a full Linux installation in a
virtual machine with any host system (e.g., Linux, Windows, or OS X as
the host and using kvm, VirtualBox, etc. for running the virtual guest
system). For more advanced (and significantly faster and with more
testing coverage) configuration on a Linux host system, parallel virtual
machines can be used as an alternative setup. See tests/hwsim/vm/README
for more details on that.


Install Ubuntu Server 14.04.1 in the virtual machine

- download installation image, e.g.,
  http://releases.ubuntu.com/14.04.1/ubuntu-14.04.1-server-amd64.iso
- use virtualization software specific steps to create a new VM and
  install the the guest system with default settings (i.e., no need to
  select any extra packages during initial installation)
- if the host system has multiple CPU cores, it is likely a good idea to
  enabled at least two CPUs in the guest; 1024 MB of RAM should be enough
  for testing purposes
- 8 GB of virtual hard driver should be fine for this purpose
- boot to the installed operating system


Install the prerequisite packages that may not have been installed by default

sudo apt-get install build-essential git libpcap-dev libsqlite3-dev binutils-dev libnl-3-dev libnl-genl-3-dev libnl-route-3-dev libssl-dev libiberty-dev libdbus-1-dev iw bridge-utils python-pyrad python-crypto


Install a recent kernel wireless components (mac80211_hwsim, mac80211,
cfg80211)

For this step, the kernel version may be updated, but the simpler option
is to install the latest version of Backports package. For example:

wget http://www.kernel.org/pub/linux/kernel/projects/backports/stable/v3.19-rc1/backports-3.19-rc1-1.tar.xz
tar xJf backports-3.19-rc1-1.tar.xz
cd backports-3.19-rc1-1

cat > defconfigs/mac80211_hwsim <<EOF
CPTCFG_CFG80211=m
CPTCFG_CFG80211_WEXT=y
CPTCFG_MAC80211=m
CPTCFG_MAC80211_LEDS=y
CPTCFG_MAC80211_MESH=y
CPTCFG_WLAN=y
CPTCFG_MAC80211_HWSIM=m
EOF

make defconfig-mac80211_hwsim
make
sudo make install
cd ..


Update iw based on custom iw.git build

Couple of the test cases expect iw to have support for requesting
cfg80211 scan results to be flushed. That functionality is not included
in the version that Ubuntu 14.04.1 includes (iw v3.4). Following steps
can be used to replace that version with a custom build. This is
optional, i.e., most test cases will work with the old iw version, but
some test cases are skipped and some are more likely to fail if iw does
not get updated.

wget https://www.kernel.org/pub/software/network/iw/iw-3.17.tar.gz
tar xf iw-3.17.tar.gz
cd iw-3.17
make
sudo mv /sbin/iw{,-distro}
sudo cp iw /sbin/iw
cd ..


Update wireless-regdb

Number of VHT and DFS test cases are skipped if the old wireless-regdb
version from Ubuntu 14.04 (2013.02.13) is used. Following steps can
optionally be used to update wireless-regdb to a newer snapshot to
enable additional test cases:

wget http://kernel.org/pub/software/network/wireless-regdb/wireless-regdb-2014.10.07.tar.xz
tar xJf wireless-regdb-2014.10.07.tar.xz
sudo mv /lib/crda/regulatory.bin{,-distro}
sudo cp wireless-regdb-2014.10.07/regulatory.bin /lib/crda/regulatory.bin

# following command can be used to verify that the new version is trusted
regdbdump /lib/crda/regulatory.bin


Download a snapshot of the hostap.git repository and build the programs

git clone git://w1.fi/hostap.git
cd hostap/tests/hwsim
./build.sh


Setup is now ready for testing. You can run a quick test to confirm that
things work as expected:

# load mac80211_hwsim and start test software
./start.sh

# run a single test case ap_open
sudo ./run-tests.py ap_open

This should print out following style results:

DEV: wlan0: 02:00:00:00:00:00
DEV: wlan1: 02:00:00:00:01:00
DEV: wlan2: 02:00:00:00:02:00
APDEV: wlan3
APDEV: wlan4
START ap_open 1/1
Test: AP with open mode (no security) configuration
Starting AP wlan3
Connect STA wlan0 to AP
PASS ap_open 0.175895 2015-01-17 20:12:07.486006
passed all 1 test case(s)

(If that "PASS ap_open" line does not show up, something unexpected has
happened and the setup is not in working condition.)

# to stop test software and unload mac80211_hwsim
./stop.sh


To run all available test cases (about thousand or so), you can run following:

./run-all.sh

This will take about half an hour to hour to run (if that sounds long, see
vm/README for information on how parallel VMs can be used to speed this
up; e.g., a 4-core i7-4770K can run these in under 10 minutes with 7
parallel VMs).

The results may look something like this:

START grpform_goneg_fail_with_group_iface 1/981
PASS grpform_goneg_fail_with_group_iface 0.371424 2015-01-17 22:17:16.659803
START grpform2 2/981
PASS grpform2 1.476142 2015-01-17 22:17:18.136539
...
START ext_password_psk_not_found 981/981
PASS ext_password_psk_not_found 1.544709 2015-01-17 22:46:56.489764
failed tests: wext_wpa2_psk wext_wep_open_auth wext_open wext_rfkill wext_scan_hidden wext_pmksa_cache wext_wep_shared_key_auth


In this example, about 860 test cases passed and about 100 were skipped.

Most of the skipped test cases are in following categories:
- D-Bus (requires kvm-based test run, see vm/README)
- VHT 80 and 160 MHz channels (requires wireless-regdb update)
- DFS (requires wireless-regdb updates)

The following test failed every time (i.e., other failed cases could be
passed on second attempt):

wext_pmf wext_wpa2_psk wext_wep_open_auth wext_open wext_rfkill wext_scan_hidden wext_pmksa_cache wext_wep_shared_key_auth

WEXT failures are due to the specific cfg80211/mac80211 version from
Backports not allowing WEXT support to be enabled. A newer build
addresses that and these WEXT test cases pass, e.g., with this snapshot
build:
http://buildbot.w1.fi/backports-wireless-testing/backports-wireless-testing-2015-01-18-ba3f765.tar.bz2

With that version, ibss_rsn is failing due to a known cfg80211
regression in the specific snapshot build. All other test cases passed
at least on retry or were skipped due to missing testing capability.
