Please note: This project is no longer active. The website is kept online for historic purposes only.
If you´re looking for a Linux driver for your Atheros WLAN device, you should continue here .

Developer Documentation

Unfortunately there is not (yet) a lot of documentation for developers. Check the source, it's quite readable and well commented.


The code consists mainly of 4 parts:

  • The net80211 stack from FreeBSD: Contains generic 802.11 functions and callback functions which can be overridden by devices. In the BSDs this stack supports multiple wlan hardware, but in madwifi it's obviously only used for atheros devices.
  • The ath part: Defines Atheros specific callbacks for the net80211 layer and accesses the hardware thru the About/HAL.
  • The About/HAL: Hardware Abstraction Layer. All access to the hardware has to go thru this closed source component which is maintained by Atheros. Unfortunately there is no documentation for it except the public interfaces in hal/ah.h.
  • The rate algorithms: Different algorithms for selecting the best transmission rate have been implemented by the rate modules in ath_rate. See UserDocs/RateControl

Dipankar Biswas has written his thesis on Madwifi/Atheros stuff: "Prototyping a Packet Scheduler..." where he examines a "global" time driven scheduling concept and discusses aspects of madwifi code in detail. The link also offers a pdf.

As part of his master thesis, Wenhua Zhao has written up a description explaining AP and STA mode operation of MadWifi. You find it here:

Version Control Management

The versioning control management software that is being used is Subversion.

See Getting MadWifi for instructions how to check out the MadWifi sources.

If you're new to Subversion, be sure to check out the excellent book "Version Control With Subversion", which is freely available. Those of you who are familiar with CVS might want to start with Appendix A - Subversion for CVS users.

The Subversion FAQ is also a very valuable source. Oh, and if you're behind a proxy, you may want to read this.

Developer HOWTOs and notes