WINLAB MadWifi
Madwifi is a Linux kernel driver for Wireless LAN chipsets from Atheros. The Wiki pages create here are used to store extensive knowledge about Madwifi driver and new feature developments for WINLAB developpers.The official MadWifi website has very limited useful information for new developments. This is a good starting point to learn, share and practise new implementations which could enhance MAC, PHY/Radio and other cross-layer wireless research projects of WINLAB.
Driver Features WishList
Here is a wish list of features we would like to be implemented or exposed
Currently Supported Per Packet Statistics by the Madwifi Driver
The following per packet statistics are currently being provided by madwifi driver.
- RSSI : RSSI is provided on a per packet basis by the madwifi driver. Libmac provides an interface to this parameter on a per packet basis as an appended parameter to each of the frames on the receive side.
- Timestamp : The receive side timestamp is provided as a 64 bit value of the microsecond resolution timer appended on the receive side by the madwifi driver on a per packet basis.
- Current Transmit Rate : The current transmit rate is provided on a per packet basis by the madwifi driver as a receive side appended parameter on the received frames.
- Priority : The 802.1q parameter “priority” of the MAC frames is provided by the madwifi driver. The priority field is used to set the priority field in the VLAN tagged MAC layer frames injected as 802.1q frames in case of non-zero value for the priority field.
FAQ
HAL
OpenHAL
Openhal is a port of the OpenBSD hal for atheros device drivers that is source-compatible with the Madwifi driver for linux. Openhal can be obtained directly from http://pdos.csail.mit.edu/~jbicket/openhal/. Openhal source is provided along with the WINLAB Madwifi and the user can build the driver with Openhal as opposed to the binary-only HAL in the madwifi driver source. To build with Openhal, place the Openhal source directory in the Madwifi directory. Now edit Makefile.inc and set the following:
HAL=${DEPTH}/openhal ATH_HAL=${DEPTH}/openhal
After this, go to the top directory and build like you normally would.
Madwifi-ng
Madwifi-ng is the new madwifi driver code from Atheros that supports additional features including Virtual AP’s, WDS, XR, Compression etc. Please refer to http://madwifi.org/wiki/ngFeatures for more information on the current state of madwifi-ng, features supported and planned in future releases. WINLAB specific features including per-packet statistics have been ported to madwifi-ng and is expected to be the madwifi driver to be supported in the future.
CW behaviour
CW cannot be set to arbitrary values, HAL accepts on power of 2 values. Hence, adjustments are restricted to discrete levels.
Rate Control Algorithms
- Introduction to Rate control
- ONOE
- SampleRate
- AMRR
Monitor Mode
- What happened if set to promiscuous?
Hacking CCA
Refer Multi-MAC Paper
Channel Switch
Atheros Tools
Ath Stats
The following ath stats have been added to libmac's mac_params and and accessible through the libmac provided interface mac_get_params() to driver statistics.
mac_watchdog, mac_hardware, mac_bmiss, mac_bstuck, mac_rxorn, mac_rxeol, mac_txurn, mac_mib, mac_intrcoal, mac_tx_packets, mac_tx_mgmt, mac_tx_discard, mac_tx_invalid, mac_tx_qstop, mac_tx_encap, mac_tx_nonode, mac_tx_nobuf, mac_tx_nobufmgt, mac_tx_linear, mac_tx_nodata, mac_tx_busdma, mac_tx_xretries, mac_tx_fifoerr, mac_tx_filtered, mac_tx_shortretry, mac_tx_longretry, mac_tx_badrate, mac_tx_noack, mac_tx_rts, mac_tx_cts, mac_tx_shortpre, mac_tx_altrate, mac_tx_protect, mac_tx_ctsburst, mac_rx_nobuf, mac_rx_busdma, mac_rx_orn, mac_rx_crcerr, mac_rx_fifoerr,
mac_rx_badcrypt,
mac_rx_badmic, mac_rx_phyerr, mac_rx_phy, mac_rx_tooshort, mac_rx_toobig, mac_rx_packets, mac_rx_mgt, mac_rx_ctl, mac_tx_rssi, mac_rx_rssi, mac_be_xmit, mac_be_nobuf, mac_per_cal, mac_per_calfail, mac_per_rfgain, mac_rate_calls, mac_rate_raise, mac_rate_drop, mac_ant_defswitch, mac_ant_txswitch, mac_ant_rx, mac_ant_tx
Please note that the above are the same aggregate statistics provided by ath_stats() and are read only using the libmac interface.