2009-11-28 14:19:48 -05:00
|
|
|
/**
|
|
|
|
\mainpage Developers' documentation for wpa_supplicant and hostapd
|
|
|
|
|
|
|
|
The goal of this documentation and comments in the source code is to
|
|
|
|
give enough information for other developers to understand how
|
|
|
|
%wpa_supplicant and hostapd have been implemented, how they can be
|
|
|
|
modified, how new drivers can be supported, and how the source code
|
|
|
|
can be ported to other operating systems. If any information is
|
|
|
|
missing, feel free to contact Jouni Malinen <j@w1.fi> for more
|
|
|
|
information. Contributions as patch files are also very welcome at the
|
2012-02-11 07:04:12 -05:00
|
|
|
same address. Please note that this software is licensed under the
|
|
|
|
BSD license (the one with advertisement clause removed). All
|
|
|
|
contributions to %wpa_supplicant and hostapd are expected to use
|
|
|
|
compatible licensing terms.
|
2009-11-28 14:19:48 -05:00
|
|
|
|
|
|
|
The source code and read-only access to the combined %wpa_supplicant
|
|
|
|
and hostapd Git repository is available from the project home page at
|
|
|
|
http://w1.fi/wpa_supplicant/. This developers' documentation is also
|
|
|
|
available as a PDF file from
|
|
|
|
http://w1.fi/wpa_supplicant/wpa_supplicant-devel.pdf .
|
|
|
|
|
|
|
|
|
|
|
|
\section wpa_supplicant wpa_supplicant
|
|
|
|
|
|
|
|
%wpa_supplicant is a WPA Supplicant for Linux, BSD and Windows with
|
|
|
|
support for WPA and WPA2 (IEEE 802.11i / RSN). Supplicant is the IEEE
|
|
|
|
802.1X/WPA component that is used in the client stations. It
|
|
|
|
implements key negotiation with a WPA Authenticator and it can optionally
|
|
|
|
control roaming and IEEE 802.11 authentication/association of the wlan
|
|
|
|
driver.
|
|
|
|
|
|
|
|
The design goal for %wpa_supplicant was to use hardware, driver, and
|
|
|
|
OS independent, portable C code for all WPA functionality. The source
|
|
|
|
code is divided into separate C files as shown on the \ref
|
|
|
|
code_structure "code structure page". All hardware/driver specific
|
|
|
|
functionality is in separate files that implement a \ref
|
|
|
|
driver_wrapper "well-defined driver API". Information about porting
|
|
|
|
to different target boards and operating systems is available on
|
|
|
|
the \ref porting "porting page".
|
|
|
|
|
|
|
|
EAPOL (IEEE 802.1X) state machines are implemented as a separate
|
2009-11-28 14:28:53 -05:00
|
|
|
module that interacts with \ref eap_peer_module "EAP peer implementation".
|
2009-11-28 14:19:48 -05:00
|
|
|
In addition to programs aimed at normal production use,
|
|
|
|
%wpa_supplicant source tree includes number of \ref testing_tools
|
|
|
|
"testing and development tools" that make it easier to test the
|
|
|
|
programs without having to setup a full test setup with wireless
|
|
|
|
cards. These tools can also be used to implement automatic test
|
|
|
|
suites.
|
|
|
|
|
|
|
|
%wpa_supplicant implements a
|
|
|
|
\ref ctrl_iface_page "control interface" that can be used by
|
|
|
|
external programs to control the operations of the %wpa_supplicant
|
|
|
|
daemon and to get status information and event notifications. There is
|
|
|
|
a small C library that provides helper functions to facilitate the use of the
|
|
|
|
control interface. This library can also be used with C++.
|
|
|
|
|
|
|
|
\image html wpa_supplicant.png "wpa_supplicant modules"
|
|
|
|
\image latex wpa_supplicant.eps "wpa_supplicant modules" width=15cm
|
|
|
|
|
|
|
|
|
|
|
|
\section hostapd hostapd
|
|
|
|
|
|
|
|
hostapd includes IEEE 802.11 access point management (authentication /
|
|
|
|
association), IEEE 802.1X/WPA/WPA2 Authenticator, EAP server, and
|
|
|
|
RADIUS authentication server functionality. It can be build with
|
|
|
|
various configuration option, e.g., a standalone AP management
|
|
|
|
solution or a RADIUS authentication server with support for number of
|
|
|
|
EAP methods.
|
|
|
|
|
|
|
|
The design goal for hostapd was to use hardware, driver, and
|
|
|
|
OS independent, portable C code for all WPA functionality. The source
|
|
|
|
code is divided into separate C files as shown on the \ref
|
|
|
|
code_structure "code structure page". All hardware/driver specific
|
|
|
|
functionality is in separate files that implement a \ref
|
|
|
|
driver_wrapper "well-defined driver API". Information about porting
|
|
|
|
to different target boards and operating systems is available on
|
|
|
|
the \ref porting "porting page".
|
|
|
|
|
|
|
|
EAPOL (IEEE 802.1X) state machines are implemented as a separate
|
2009-11-28 14:28:53 -05:00
|
|
|
module that interacts with \ref eap_server_module "EAP server implementation".
|
2009-11-28 14:19:48 -05:00
|
|
|
Similarly, RADIUS authentication server is in its own separate module.
|
|
|
|
Both IEEE 802.1X and RADIUS authentication server can use EAP server
|
|
|
|
functionality.
|
|
|
|
|
|
|
|
hostapd implements a \ref hostapd_ctrl_iface_page "control interface"
|
|
|
|
that can be used by external programs to control the operations of the
|
|
|
|
hostapdt daemon and to get status information and event notifications.
|
|
|
|
There is a small C library that provides helper functions to facilitate
|
|
|
|
the use of the control interface. This library can also be used with
|
|
|
|
C++.
|
|
|
|
|
|
|
|
\image html hostapd.png "hostapd modules"
|
|
|
|
\image latex hostapd.eps "hostapd modules" width=15cm
|
|
|
|
|
|
|
|
*/
|