219 lines
		
	
	
	
		
			5.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			219 lines
		
	
	
	
		
			5.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| Developer notes for hostapd
 | |
| ===========================
 | |
| 
 | |
| hostapd daemon setup, operations, and shutdown
 | |
| ----------------------------------------------
 | |
| 
 | |
| Files: hostapd.[ch]
 | |
| 
 | |
| Externally called functions:
 | |
|   hostapd_new_assoc_sta() is called when a station associates with the AP
 | |
| 
 | |
| Event loop functions:
 | |
|   handle_term() is called on SIGINT and SIGTERM to terminate hostapd process
 | |
|   handle_reload() is called on SIGHUP to reload configuration
 | |
|   handle_dump_state() is called on SIGUSR1 to dump station state data to a
 | |
| 	text file
 | |
|   hostapd_rotate_wep() is called to periodically change WEP keys
 | |
| 
 | |
| 
 | |
| Configuration parsing
 | |
| ---------------------
 | |
| 
 | |
| Configuration file parsing and data structure definition.
 | |
| 
 | |
| Files: config.[ch]
 | |
| 
 | |
| Externally called functions:
 | |
|   hostapd_config_read() is called to read and parse a configuration file;
 | |
| 	allocates and returns configuration data structure
 | |
|   hostapd_config_free() is called to free configuration data structure
 | |
|   hostapd_maclist_found() is called to check whether a given address is found
 | |
| 	in a list of MAC addresses
 | |
| 
 | |
| 
 | |
| Kernel driver access
 | |
| --------------------
 | |
| 
 | |
| Helper functions for configuring the Host AP kernel driver and
 | |
| accessing data from it.
 | |
| 
 | |
| Files: driver.[ch]
 | |
| 
 | |
| 
 | |
| IEEE 802.11 frame handling (netdevice wlan#ap)
 | |
| ----------------------------------------------
 | |
| 
 | |
| Receive all incoming IEEE 802.11 frames from the kernel driver via
 | |
| wlan#ap interface.
 | |
| 
 | |
| Files: receive.c
 | |
| 
 | |
| Externally called functions:
 | |
|   hostapd_init_sockets() is called to initialize sockets for receiving and
 | |
| 	sending IEEE 802.11 frames via wlan#ap interface
 | |
| 
 | |
| Event loop functions:
 | |
|   handle_read() is called for each incoming packet from wlan#ap net device
 | |
| 
 | |
| 
 | |
| Station table
 | |
| -------------
 | |
| 
 | |
| Files: sta_info.[ch], ap.h
 | |
| 
 | |
| Event loop functions:
 | |
|   ap_handle_timer() is called to check station activity and to remove
 | |
| 	inactive stations
 | |
| 
 | |
| 
 | |
| IEEE 802.11 management
 | |
| ----------------------
 | |
| 
 | |
| IEEE 802.11 management frame sending and processing (mainly,
 | |
| authentication and association). IEEE 802.11 station functionality
 | |
| (authenticate and associate with another AP as an station).
 | |
| 
 | |
| Files: ieee802_11.[ch]
 | |
| 
 | |
| Externally called functions:
 | |
|   ieee802_11_mgmt() is called for each received IEEE 802.11 management frame
 | |
| 	(from handle_frame() in hostapd.c)
 | |
|   ieee802_11_mgmt_cb() is called for each received TX callback of IEEE 802.11
 | |
| 	management frame (from handle_tx_callback() in hostapd.c)
 | |
|   ieee802_11_send_deauth() is called to send deauthentication frame
 | |
|   ieee802_11_send_disassoc() is called to send disassociation frame
 | |
|   ieee802_11_parse_elems() is used to parse information elements in
 | |
| 	IEEE 802.11 management frames
 | |
| 
 | |
| Event loop functions:
 | |
|   ieee802_11_sta_authenticate() called to retry authentication (with another
 | |
| 	AP)
 | |
|   ieee802_11_sta_associate() called to retry association (with another AP)
 | |
| 
 | |
| 
 | |
| IEEE 802.11 authentication
 | |
| --------------------------
 | |
| 
 | |
| Access control list for IEEE 802.11 authentication. Uses staticly
 | |
| configured ACL from configuration files or an external RADIUS
 | |
| server. Results from external RADIUS queries are cached to allow
 | |
| faster authentication frame processing.
 | |
| 
 | |
| Files: ieee802_11_auth.[ch]
 | |
| 
 | |
| Externally called functions:
 | |
|   hostapd_acl_init() called once during hostapd startup
 | |
|   hostapd_acl_deinit() called once during hostapd shutdown
 | |
|   hostapd_acl_recv_radius() called by IEEE 802.1X code for incoming RADIUS
 | |
| 	Authentication messages (returns 0 if message was processed)
 | |
|   hostapd_allowed_address() called to check whether a specified station can be
 | |
| 	authenticated
 | |
| 
 | |
| Event loop functions:
 | |
|   hostapd_acl_expire() is called to expire ACL cache entries
 | |
| 
 | |
| 
 | |
| IEEE 802.1X Authenticator
 | |
| -------------------------
 | |
| 
 | |
| Files: ieee802_1x.[ch]
 | |
| 
 | |
| 
 | |
| Externally called functions:
 | |
|   ieee802_1x_receive() is called for each incoming EAPOL frame from the
 | |
| 	wireless interface
 | |
|   ieee802_1x_new_station() is called to start IEEE 802.1X authentication when
 | |
| 	a new station completes IEEE 802.11 association
 | |
| 
 | |
| Event loop functions:
 | |
|   ieee802_1x_receive_auth() called for each incoming RADIUS Authentication
 | |
| 	message
 | |
| 
 | |
| 
 | |
| EAPOL state machine
 | |
| -------------------
 | |
| 
 | |
| IEEE 802.1X state machine for EAPOL.
 | |
| 
 | |
| Files: eapol_sm.[ch]
 | |
| 
 | |
| Externally called functions:
 | |
|   eapol_sm_step() is called to advance EAPOL state machines after any change
 | |
| 	that could affect their state
 | |
| 
 | |
| Event loop functions:
 | |
|   eapol_port_timers_tick() called once per second to advance Port Timers state
 | |
| 	machine
 | |
| 
 | |
| 
 | |
| IEEE 802.11f (IAPP)
 | |
| -------------------
 | |
| 
 | |
| Files: iapp.[ch]
 | |
| 
 | |
| Externally called functions:
 | |
|   iapp_new_station() is called to start accounting session when a new station
 | |
| 	completes IEEE 802.11 association or IEEE 802.1X authentication
 | |
| 
 | |
| Event loop functions:
 | |
|   iapp_receive_udp() is called for incoming IAPP frames over UDP
 | |
| 
 | |
| 
 | |
| Per station accounting
 | |
| ----------------------
 | |
| 
 | |
| Send RADIUS Accounting start and stop messages to a RADIUS Accounting
 | |
| server. Process incoming RADIUS Accounting messages.
 | |
| 
 | |
| Files: accounting.[ch]
 | |
| 
 | |
| Externally called functions:
 | |
|   accounting_init() called once during hostapd startup
 | |
|   accounting_deinit() called once during hostapd shutdown
 | |
|   accounting_sta_start() called when a station starts new session
 | |
|   accounting_sta_stop() called when a station session is terminated
 | |
| 
 | |
| Event loop functions:
 | |
|   accounting_receive() called for each incoming RADIUS Accounting message
 | |
|   accounting_list_timer() called to retransmit accounting messages and to
 | |
| 	remove expired entries
 | |
| 
 | |
| 
 | |
| RADIUS messages
 | |
| ---------------
 | |
| 
 | |
| RADIUS message generation and parsing functions.
 | |
| 
 | |
| Files: radius.[ch]
 | |
| 
 | |
| 
 | |
| Event loop
 | |
| ----------
 | |
| 
 | |
| Event loop for registering timeout calls, signal handlers, and socket
 | |
| read events.
 | |
| 
 | |
| Files: eloop.[ch]
 | |
| 
 | |
| 
 | |
| RC4
 | |
| ---
 | |
| 
 | |
| RC4 encryption
 | |
| 
 | |
| Files: rc4.[ch]
 | |
| 
 | |
| 
 | |
| MD5
 | |
| ---
 | |
| 
 | |
| MD5 hash and HMAC-MD5.
 | |
| 
 | |
| Files: md5.[ch]
 | |
| 
 | |
| 
 | |
| Miscellaneous helper functions
 | |
| ------------------------------
 | |
| 
 | |
| Files: common.[ch]
 | 
