b.liu | e958203 | 2025-04-17 19:18:16 +0800 | [diff] [blame^] | 1 | /** |
| 2 | \mainpage Developers' documentation for wpa_supplicant and hostapd |
| 3 | |
| 4 | The goal of this documentation and comments in the source code is to |
| 5 | give enough information for other developers to understand how |
| 6 | wpa_supplicant and hostapd have been implemented, how they can be |
| 7 | modified, how new drivers can be supported, and how the source code |
| 8 | can be ported to other operating systems. If any information is |
| 9 | missing, feel free to contact Jouni Malinen <j@w1.fi> for more |
| 10 | information. Contributions as patch files are also very welcome at the |
| 11 | same address. Please note that this software is licensed under the |
| 12 | BSD license (the one with advertisement clause removed). All |
| 13 | contributions to wpa_supplicant and hostapd are expected to use |
| 14 | compatible licensing terms. |
| 15 | |
| 16 | The source code and read-only access to the combined wpa_supplicant |
| 17 | and hostapd Git repository is available from the project home page at |
| 18 | http://w1.fi/wpa_supplicant/. This developers' documentation is also |
| 19 | available as a PDF file from |
| 20 | http://w1.fi/wpa_supplicant/wpa_supplicant-devel.pdf . |
| 21 | |
| 22 | |
| 23 | \section _wpa_supplicant wpa_supplicant |
| 24 | |
| 25 | wpa_supplicant is a WPA Supplicant for Linux, BSD and Windows with |
| 26 | support for WPA and WPA2 (IEEE 802.11i / RSN). Supplicant is the IEEE |
| 27 | 802.1X/WPA component that is used in the client stations. It |
| 28 | implements key negotiation with a WPA Authenticator and it can optionally |
| 29 | control roaming and IEEE 802.11 authentication/association of the wlan |
| 30 | driver. |
| 31 | |
| 32 | The design goal for wpa_supplicant was to use hardware, driver, and |
| 33 | OS independent, portable C code for all WPA functionality. The source |
| 34 | code is divided into separate C files as shown on the \ref |
| 35 | code_structure "code structure page". All hardware/driver specific |
| 36 | functionality is in separate files that implement a \ref |
| 37 | driver_wrapper "well-defined driver API". Information about porting |
| 38 | to different target boards and operating systems is available on |
| 39 | the \ref porting "porting page". |
| 40 | |
| 41 | EAPOL (IEEE 802.1X) state machines are implemented as a separate |
| 42 | module that interacts with \ref eap_peer_module "EAP peer implementation". |
| 43 | In addition to programs aimed at normal production use, |
| 44 | wpa_supplicant source tree includes number of \ref testing_tools |
| 45 | "testing and development tools" that make it easier to test the |
| 46 | programs without having to setup a full test setup with wireless |
| 47 | cards. These tools can also be used to implement automatic test |
| 48 | suites. |
| 49 | |
| 50 | wpa_supplicant implements a |
| 51 | \ref ctrl_iface_page "control interface" that can be used by |
| 52 | external programs to control the operations of the wpa_supplicant |
| 53 | daemon and to get status information and event notifications. There is |
| 54 | a small C library that provides helper functions to facilitate the use of the |
| 55 | control interface. This library can also be used with C++. |
| 56 | |
| 57 | \image html _wpa_supplicant.png "wpa_supplicant modules" |
| 58 | \image latex _wpa_supplicant.eps "wpa_supplicant modules" width=15cm |
| 59 | |
| 60 | |
| 61 | \section _hostapd hostapd |
| 62 | |
| 63 | hostapd includes IEEE 802.11 access point management (authentication / |
| 64 | association), IEEE 802.1X/WPA/WPA2 Authenticator, EAP server, and |
| 65 | RADIUS authentication server functionality. It can be build with |
| 66 | various configuration option, e.g., a standalone AP management |
| 67 | solution or a RADIUS authentication server with support for number of |
| 68 | EAP methods. |
| 69 | |
| 70 | The design goal for hostapd was to use hardware, driver, and |
| 71 | OS independent, portable C code for all WPA functionality. The source |
| 72 | code is divided into separate C files as shown on the \ref |
| 73 | code_structure "code structure page". All hardware/driver specific |
| 74 | functionality is in separate files that implement a \ref |
| 75 | driver_wrapper "well-defined driver API". Information about porting |
| 76 | to different target boards and operating systems is available on |
| 77 | the \ref porting "porting page". |
| 78 | |
| 79 | EAPOL (IEEE 802.1X) state machines are implemented as a separate |
| 80 | module that interacts with \ref eap_server_module "EAP server implementation". |
| 81 | Similarly, RADIUS authentication server is in its own separate module. |
| 82 | Both IEEE 802.1X and RADIUS authentication server can use EAP server |
| 83 | functionality. |
| 84 | |
| 85 | hostapd implements a \ref hostapd_ctrl_iface_page "control interface" |
| 86 | that can be used by external programs to control the operations of the |
| 87 | hostapdt daemon and to get status information and event notifications. |
| 88 | There is a small C library that provides helper functions to facilitate |
| 89 | the use of the control interface. This library can also be used with |
| 90 | C++. |
| 91 | |
| 92 | \image html hostapd.png "hostapd modules" |
| 93 | \image latex hostapd.eps "hostapd modules" width=15cm |
| 94 | |
| 95 | */ |