123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- /**
- \page eap_peer_module EAP peer implementation
- Extensible Authentication Protocol (EAP) is an authentication framework
- defined in RFC 3748. wpa_supplicant uses a separate code module for EAP
- peer implementation. This module was designed to use only a minimal set
- of direct function calls (mainly, to debug/event functions) in order for
- it to be usable in other programs. The design of the EAP
- implementation is based loosely on RFC 4137. The state machine is
- defined in this RFC and so is the interface between the peer state
- machine and methods. As such, this RFC provides useful information for
- understanding the EAP peer implementation in wpa_supplicant.
- Some of the terminology used in EAP state machine is referring to
- EAPOL (IEEE 802.1X), but there is no strict requirement on the lower
- layer being IEEE 802.1X if EAP module is built for other programs than
- wpa_supplicant. These terms should be understood to refer to the
- lower layer as defined in RFC 4137.
- \section adding_eap_methods Adding EAP methods
- Each EAP method is implemented as a separate module, usually as one C
- file named eap_<name of the method>.c, e.g., \ref eap_md5.c. All EAP
- methods use the same interface between the peer state machine and
- method specific functions. This allows new EAP methods to be added
- without modifying the core EAP state machine implementation.
- New EAP methods need to be registered by adding them into the build
- (Makefile) and the EAP method registration list in the
- \ref eap_peer_register_methods() function of \ref eap_methods.c. Each EAP
- method should use a build-time configuration option, e.g., EAP_TLS, in
- order to make it possible to select which of the methods are included
- in the build.
- EAP methods must implement the interface defined in \ref eap_i.h. struct
- \ref eap_method defines the needed function pointers that each EAP method
- must provide. In addition, the EAP type and name are registered using
- this structure. This interface is based on section 4.4 of RFC 4137.
- It is recommended that the EAP methods would use generic helper
- functions, \ref eap_msg_alloc() and \ref eap_hdr_validate() when processing
- messages. This allows code sharing and can avoid missing some of the
- needed validation steps for received packets. In addition, these
- functions make it easier to change between expanded and legacy EAP
- header, if needed.
- When adding an EAP method that uses a vendor specific EAP type
- (Expanded Type as defined in RFC 3748, Chapter 5.7), the new method
- must be registered by passing vendor id instead of EAP_VENDOR_IETF to
- \ref eap_peer_method_alloc(). These methods must not try to emulate
- expanded types by registering a legacy EAP method for type 254. See
- \ref eap_vendor_test.c for an example of an EAP method implementation that
- is implemented as an expanded type.
- \section used_eap_library Using EAP implementation as a library
- The Git repository has an eap_example directory that contains an
- example showing how EAP peer and server code from wpa_supplicant and
- hostapd can be used as a library. The example program initializes both
- an EAP server and an EAP peer entities and then runs through an
- EAP-PEAP/MSCHAPv2 authentication.
- \ref eap_example_peer.c shows the initialization and glue code needed to
- control the EAP peer implementation. \ref eap_example_server.c does the
- same for EAP server. \ref eap_example.c is an example that ties in both the
- EAP server and client parts to allow an EAP authentication to be
- shown.
- In this example, the EAP messages are passed between the server and
- the peer are passed by direct function calls within the same process.
- In practice, server and peer functionalities would likely reside in
- separate devices and the EAP messages would be transmitted between the
- devices based on an external protocol. For example, in IEEE 802.11
- uses IEEE 802.1X EAPOL state machines to control the transmission of
- EAP messages and WiMax supports optional PMK EAP authentication
- mechanism that transmits EAP messages as defined in IEEE 802.16e.
- The EAP library links in number of helper functions from \ref src/utils and
- \ref src/crypto directories. Most of these are suitable as-is, but it may
- be desirable to replace the debug output code in \ref src/utils/wpa_debug.c
- by dropping this file from the library and re-implementing the
- functions there in a way that better fits in with the main
- application.
- */
|