ChangeLog for hostapd

2015-09-27 - v2.5
	* fixed WPS UPnP vulnerability with HTTP chunked transfer encoding
	  [http://w1.fi/security/2015-2/] (CVE-2015-4141)
	* fixed WMM Action frame parser
	  [http://w1.fi/security/2015-3/] (CVE-2015-4142)
	* fixed EAP-pwd server missing payload length validation
	  [http://w1.fi/security/2015-4/]
	  (CVE-2015-4143, CVE-2015-4144, CVE-2015-4145)
	* fixed validation of WPS and P2P NFC NDEF record payload length
	  [http://w1.fi/security/2015-5/]
	* nl80211:
	  - fixed vendor command handling to check OUI properly
	* fixed hlr_auc_gw build with OpenSSL
	* hlr_auc_gw: allow Milenage RES length to be reduced
	* disable HT for a station that does not support WMM/QoS
	* added support for hashed password (NtHash) in EAP-pwd server
	* fixed and extended dynamic VLAN cases
	* added EAP-EKE server support for deriving Session-Id
	* set Acct-Session-Id to a random value to make it more likely to be
	  unique even if the device does not have a proper clock
	* added more 2.4 GHz channels for 20/40 MHz HT co-ex scan
	* modified SAE routines to be more robust and PWE generation to be
	  stronger against timing attacks
	* added support for Brainpool Elliptic Curves with SAE
	* increases maximum value accepted for cwmin/cwmax
	* added support for CCMP-256 and GCMP-256 as group ciphers with FT
	* added Fast Session Transfer (FST) module
	* removed optional fields from RSNE when using FT with PMF
	  (workaround for interoperability issues with iOS 8.4)
	* added EAP server support for TLS session resumption
	* fixed key derivation for Suite B 192-bit AKM (this breaks
	  compatibility with the earlier version)
	* added mechanism to track unconnected stations and do minimal band
	  steering
	* number of small fixes

2015-03-15 - v2.4
	* allow OpenSSL cipher configuration to be set for internal EAP server
	  (openssl_ciphers parameter)
	* fixed number of small issues based on hwsim test case failures and
	  static analyzer reports
	* fixed Accounting-Request to not include duplicated Acct-Session-Id
	* add support for Acct-Multi-Session-Id in RADIUS Accounting messages
	* add support for PMKSA caching with SAE
	* add support for generating BSS Load element (bss_load_update_period)
	* fixed channel switch from VHT to HT
	* add INTERFACE-ENABLED and INTERFACE-DISABLED ctrl_iface events
	* add support for learning STA IPv4/IPv6 addresses and configuring
	  ProxyARP support
	* dropped support for the madwifi driver interface
	* add support for Suite B (128-bit and 192-bit level) key management and
	  cipher suites
	* fixed a regression with driver=wired
	* extend EAPOL-Key msg 1/4 retry workaround for changing SNonce
	* add BSS_TM_REQ ctrl_iface command to send BSS Transition Management
	  Request frames and BSS-TM-RESP event to indicate response to such
	  frame
	* add support for EAP Re-Authentication Protocol (ERP)
	* fixed AP IE in EAPOL-Key 3/4 when both WPA and FT was enabled
	* fixed a regression in HT 20/40 coex Action frame parsing
	* set stdout to be line-buffered
	* add support for vendor specific VHT extension to enable 256 QAM rates
	  (VHT-MCS 8 and 9) on 2.4 GHz band
	* RADIUS DAS:
	  - extend Disconnect-Request processing to allow matching of multiple
	    sessions
	  - support Acct-Multi-Session-Id as an identifier
	  - allow PMKSA cache entry to be removed without association
	* expire hostapd STA entry if kernel does not have a matching entry
	* allow chanlist to be used to specify a subset of channels for ACS
	* improve ACS behavior on 2.4 GHz band and allow channel bias to be
	  configured with acs_chan_bias parameter
	* do not reply to a Probe Request frame that includes DSS Parameter Set
	  element in which the channel does not match the current operating
	  channel
	* add UPDATE_BEACON ctrl_iface command; this can be used to force Beacon
	  frame contents to be updated and to start beaconing on an interface
	  that used start_disabled=1
	* fixed some RADIUS server failover cases

2014-10-09 - v2.3
	* fixed number of minor issues identified in static analyzer warnings
	* fixed DFS and channel switch operation for multi-BSS cases
	* started to use constant time comparison for various password and hash
	  values to reduce possibility of any externally measurable timing
	  differences
	* extended explicit clearing of freed memory and expired keys to avoid
	  keeping private data in memory longer than necessary
	* added support for number of new RADIUS attributes from RFC 7268
	  (Mobility-Domain-Id, WLAN-HESSID, WLAN-Pairwise-Cipher,
	  WLAN-Group-Cipher, WLAN-AKM-Suite, WLAN-Group-Mgmt-Pairwise-Cipher)
	* fixed GET_CONFIG wpa_pairwise_cipher value
	* added code to clear bridge FDB entry on station disconnection
	* fixed PMKSA cache timeout from Session-Timeout for WPA/WPA2 cases
	* fixed OKC PMKSA cache entry fetch to avoid a possible infinite loop
	  in case the first entry does not match
	* fixed hostapd_cli action script execution to use more robust mechanism
	  (CVE-2014-3686)

2014-06-04 - v2.2
	* fixed SAE confirm-before-commit validation to avoid a potential
	  segmentation fault in an unexpected message sequence that could be
	  triggered remotely
	* extended VHT support
	  - Operating Mode Notification
	  - Power Constraint element (local_pwr_constraint)
	  - Spectrum management capability (spectrum_mgmt_required=1)
	  - fix VHT80 segment picking in ACS
	  - fix vht_capab 'Maximum A-MPDU Length Exponent' handling
	  - fix VHT20
	* fixed HT40 co-ex scan for some pri/sec channel switches
	* extended HT40 co-ex support to allow dynamic channel width changes
	  during the lifetime of the BSS
	* fixed HT40 co-ex support to check for overlapping 20 MHz BSS
	* fixed MSCHAP UTF-8 to UCS-2 conversion for three-byte encoding;
	  this fixes password with include UTF-8 characters that use
	  three-byte encoding EAP methods that use NtPasswordHash
	* reverted TLS certificate validation step change in v2.1 that rejected
	  any AAA server certificate with id-kp-clientAuth even if
	  id-kp-serverAuth EKU was included
	* fixed STA validation step for WPS ER commands to prevent a potential
	  crash if an ER sends an unexpected PutWLANResponse to a station that
	  is disassociated, but not fully removed
	* enforce full EAP authentication after RADIUS Disconnect-Request by
	  removing the PMKSA cache entry
	* added support for NAS-IP-Address, NAS-identifier, and NAS-IPv6-Address
	  in RADIUS Disconnect-Request
	* added mechanism for removing addresses for MAC ACLs by prefixing an
	  entry with "-"
	* Interworking/Hotspot 2.0 enhancements
	  - support Hotspot 2.0 Release 2
	    * OSEN network for online signup connection
	    * subscription remediation (based on RADIUS server request or
	      control interface HS20_WNM_NOTIF for testing purposes)
	    * Hotspot 2.0 release number indication in WFA RADIUS VSA
	    * deauthentication request (based on RADIUS server request or
	      control interface WNM_DEAUTH_REQ for testing purposes)
	    * Session Info URL RADIUS AVP to trigger ESS Disassociation Imminent
	    * hs20_icon config parameter to configure icon files for OSU
	    * osu_* config parameters for OSU Providers list
	  - do not use Interworking filtering rules on Probe Request if
	    Interworking is disabled to avoid interop issues
	* added/fixed nl80211 functionality
	  - AP interface teardown optimization
	  - support vendor specific driver command
	    (VENDOR <vendor id> <sub command id> [<hex formatted data>])
	* fixed PMF protection of Deauthentication frame when this is triggered
	  by session timeout
	* internal TLS implementation enhancements/fixes
	  - add SHA256-based cipher suites
	  - add DHE-RSA cipher suites
	  - fix X.509 validation of PKCS#1 signature to check for extra data
	* RADIUS server functionality
	  - add minimal RADIUS accounting server support (hostapd-as-server);
	    this is mainly to enable testing coverage with hwsim scripts
	  - allow authentication log to be written into SQLite databse
	  - added option for TLS protocol testing of an EAP peer by simulating
	    various misbehaviors/known attacks
	  - MAC ACL support for testing purposes
	* fixed PTK derivation for CCMP-256 and GCMP-256
	* extended WPS per-station PSK to support ER case
	* added option to configure the management group cipher
	  (group_mgmt_cipher=AES-128-CMAC (default), BIP-GMAC-128, BIP-GMAC-256,
	  BIP-CMAC-256)
	* fixed AP mode default TXOP Limit values for AC_VI and AC_VO (these
	  were rounded incorrectly)
	* added support for postponing FT response in case PMK-R1 needs to be
	  pulled from R0KH
	* added option to advertise 40 MHz intolerant HT capability with
	  ht_capab=[40-INTOLERANT]
	* remove WPS 1.0 only support, i.e., WSC 2.0 support is now enabled
	  whenever CONFIG_WPS=y is set
	* EAP-pwd fixes
	  - fix possible segmentation fault on EAP method deinit if an invalid
	    group is negotiated
	* fixed RADIUS client retransmit/failover behavior
	  - there was a potential ctash due to freed memory being accessed
	  - failover to a backup server mechanism did not work properly
	* fixed a possible crash on double DISABLE command when multiple BSSes
	  are enabled
	* fixed a memory leak in SAE random number generation
	* fixed GTK rekeying when the station uses FT protocol
	* fixed off-by-one bounds checking in printf_encode()
	  - this could result in deinial of service in some EAP server cases
	* various bug fixes

2014-02-04 - v2.1
	* added support for simultaneous authentication of equals (SAE) for
	  stronger password-based authentication with WPA2-Personal
	* added nl80211 functionality
	  - VHT configuration for nl80211
	  - support split wiphy dump
	  - driver-based MAC ACL
	  - QoS Mapping configuration
	* added fully automated regression testing with mac80211_hwsim
	* allow ctrl_iface group to be specified on command line (-G<group>)
	* allow single hostapd process to control independent WPS interfaces
	  (wps_independent=1) instead of synchronized operations through all
	  configured interfaces within a process
	* avoid processing received management frames multiple times when using
	  nl80211 with multiple BSSes
	* added support for DFS (processing radar detection events, CAC, channel
	  re-selection)
	* added EAP-EKE server
	* added automatic channel selection (ACS)
	* added option for using per-BSS (vif) configuration files with
	  -b<phyname>:<config file name>
	* extended global control interface ADD/REMOVE commands to allow BSSes
	  of a radio to be removed individually without having to add/remove all
	  other BSSes of the radio at the same time
	* added support for sending debug info to Linux tracing (-T on command
	  line)
	* replace dump_file functionality with same information being available
	  through the hostapd control interface
	* added support for using Protected Dual of Public Action frames for
	  GAS/ANQP exchanges when PMF is enabled
	* added support for WPS+NFC updates
	  - improved protocol
	  - option to fetch and report alternative carrier records for external
	    NFC operations
	* various bug fixes

2013-01-12 - v2.0
	* added AP-STA-DISCONNECTED ctrl_iface event
	* improved debug logging (human readable event names, interface name
	  included in more entries)
	* added number of small changes to make it easier for static analyzers
	  to understand the implementation
	* added a workaround for Windows 7 Michael MIC failure reporting and
	  use of the Secure bit in EAPOL-Key msg 3/4
	* fixed number of small bugs (see git logs for more details)
	* changed OpenSSL to read full certificate chain from server_cert file
	* nl80211: number of updates to use new cfg80211/nl80211 functionality
	  - replace monitor interface with nl80211 commands
	  - additional information for driver-based AP SME
	* EAP-pwd:
	  - fix KDF for group 21 and zero-padding
	  - added support for fragmentation
	  - increased maximum number of hunting-and-pecking iterations
	* avoid excessive Probe Response retries for broadcast Probe Request
	  frames (only with drivers using hostapd SME/MLME)
	* added preliminary support for using TLS v1.2 (CONFIG_TLSV12=y)
	* fixed WPS operation stopping on dual concurrent AP
	* added wps_rf_bands configuration parameter for overriding RF Bands
	  value for WPS
	* added support for getting per-device PSK from RADIUS Tunnel-Password
	* added support for libnl 3.2 and newer
	* increased initial group key handshake retransmit timeout to 500 ms
	* added a workaround for 4-way handshake to update SNonce even after
	  having sent EAPOL-Key 3/4 to avoid issues with some supplicant
	  implementations that can change SNonce for each EAP-Key 2/4
	* added a workaround for EAPOL-Key 4/4 using incorrect type value in
	  WPA2 mode (some deployed stations use WPA type in that message)
	* added a WPS workaround for mixed mode AP Settings with Windows 7
	* changed WPS AP PIN disabling mechanism to disable the PIN after 10
	  consecutive failures in addition to using the exponential lockout
	  period
	* added support for WFA Hotspot 2.0
	  - GAS/ANQP advertisement of network information
	  - disable_dgaf parameter to disable downstream group-addressed
	    forwarding
	* simplified licensing terms by selecting the BSD license as the only
	  alternative
	* EAP-SIM: fixed re-authentication not to update pseudonym
	* EAP-SIM: use Notification round before EAP-Failure
	* EAP-AKA: added support for AT_COUNTER_TOO_SMALL
	* EAP-AKA: skip AKA/Identity exchange if EAP identity is recognized
	* EAP-AKA': fixed identity for MK derivation
	* EAP-AKA': updated to RFC 5448 (username prefixes changed); note: this
	  breaks interoperability with older versions
	* EAP-SIM/AKA: allow pseudonym to be used after unknown reauth id
	* changed ANonce to be a random number instead of Counter-based
	* added support for canceling WPS operations with hostapd_cli wps_cancel
	* fixed EAP/WPS to PSK transition on reassociation in cases where
	  deauthentication is missed
	* hlr_auc_gw enhancements:
	  - a new command line parameter -u can be used to enable updating of
	    SQN in Milenage file
	  - use 5 bit IND for SQN updates
	  - SQLite database can now be used to store Milenage information
	* EAP-SIM/AKA DB: added optional use of SQLite database for pseudonyms
	  and reauth data
	* added support for Chargeable-User-Identity (RFC 4372)
	* added radius_auth_req_attr and radius_acct_req_attr configuration
	  parameters to allow adding/overriding of RADIUS attributes in
	  Access-Request and Accounting-Request packets
	* added support for RADIUS dynamic authorization server (RFC 5176)
	* added initial support for WNM operations
	  - BSS max idle period
	  - WNM-Sleep Mode
	* added new WPS NFC ctrl_iface mechanism
	  - removed obsoleted WPS_OOB command (including support for deprecated
	    UFD config_method)
	* added FT support for drivers that implement MLME internally
	* added SA Query support for drivers that implement MLME internally
	* removed default ACM=1 from AC_VO and AC_VI
	* changed VENDOR-TEST EAP method to use proper private enterprise number
	  (this will not interoperate with older versions)
	* added hostapd.conf parameter vendor_elements to allow arbitrary vendor
	  specific elements to be added to the Beacon and Probe Response frames
	* added support for configuring GCMP cipher for IEEE 802.11ad
	* added support for 256-bit AES with internal TLS implementation
	* changed EAPOL transmission to use AC_VO if WMM is active
	* fixed EAP-TLS/PEAP/TTLS/FAST server to validate TLS Message Length
	  correctly; invalid messages could have caused the hostapd process to
	  terminate before this fix [CVE-2012-4445]
	* limit number of active wildcard PINs for WPS Registrar to one to avoid
	  confusing behavior with multiple wildcard PINs
	* added a workaround for WPS PBC session overlap detection to avoid
	  interop issues with deployed station implementations that do not
	  remove active PBC indication from Probe Request frames properly
	* added support for using SQLite for the eap_user database
	* added Acct-Session-Id attribute into Access-Request messages
	* fixed EAPOL frame transmission to non-QoS STAs with nl80211
	  (do not send QoS frames if the STA did not negotiate use of QoS for
	  this association)

2012-05-10 - v1.0
	* Add channel selection support in hostapd. See hostapd.conf.
	* Add support for IEEE 802.11v Time Advertisement mechanism with UTC
	  TSF offset. See hostapd.conf for config info.
	* Delay STA entry removal until Deauth/Disassoc TX status in AP mode.
	  This allows the driver to use PS buffering of Deauthentication and
	  Disassociation frames when the STA is in power save sleep. Only
	  available with drivers that provide TX status events for Deauth/
	  Disassoc frames (nl80211).
	* Allow PMKSA caching to be disabled on the Authenticator. See
	  hostap.conf config parameter disable_pmksa_caching.
	* atheros: Add support for IEEE 802.11w configuration.
	* bsd: Add support for setting HT values in IFM_MMASK.
	* Allow client isolation to be configured with ap_isolate. Client
	  isolation can be used to prevent low-level bridging of frames
	  between associated stations in the BSS. By default, this bridging
	  is allowed.
	* Allow coexistance of HT BSSes with WEP/TKIP BSSes.
	* Add require_ht config parameter, which can be used to configure
	  hostapd to reject association with any station that does not support
	  HT PHY.
	* Add support for writing debug log to a file using "-f" option. Also
	  add relog CLI command to re-open the log file.
	* Add bridge handling for WDS STA interfaces. By default they are
	  added to the configured bridge of the AP interface (if present),
	  but the user can also specify a separate bridge using cli command
	  wds_bridge.
	* hostapd_cli:
	  - Add wds_bridge command for specifying bridge for WDS STA
	    interfaces.
	  - Add relog command for reopening log file.
	  - Send AP-STA-DISCONNECTED event when an AP disconnects a station
	    due to inactivity.
	  - Add wps_config ctrl_interface command for configuring AP. This
	    command can be used to configure the AP using the internal WPS
	    registrar. It works in the same way as new AP settings received
	    from an ER.
	  - Many WPS/WPS ER commands - see WPS/WPS ER sections for details.
	  - Add command get version, that returns hostapd version string.
	* WNM: Add BSS Transition Management Request for ESS Disassoc Imminent.
	  Use hostapd_cli ess_disassoc (STA addr) (URL) to send the
	  notification to the STA.
	* Allow AP mode to disconnect STAs based on low ACK condition (when
	  the data connection is not working properly, e.g., due to the STA
	  going outside the range of the AP). Disabled by default, enable by
	  config option disassoc_low_ack.
	* Add WPA_IGNORE_CONFIG_ERRORS build option to continue in case of bad
	  config file.
	* WPS:
	  - Send AP Settings as a wrapped Credential attribute to ctrl_iface
	    in WPS-NEW-AP-SETTINGS.
	  - Dispatch more WPS events through hostapd ctrl_iface.
	  - Add mechanism for indicating non-standard WPS errors.
	  - Change concurrent radio AP to use only one WPS UPnP instance.
	  - Add wps_check_pin command for processing PIN from user input.
	    UIs can use this command to process a PIN entered by a user and to
	    validate the checksum digit (if present).
	  - Add hostap_cli get_config command to display current AP config.
	  - Add new hostapd_cli command, wps_ap_pin, to manage AP PIN at
	    runtime and support dynamic AP PIN management.
	  - Disable AP PIN after 10 consecutive failures. Slow down attacks
	    on failures up to 10.
	  - Allow AP to start in Enrollee mode without AP PIN for probing,
	    to be compatible with Windows 7.
	  - Add Config Error into WPS-FAIL events to provide more info
	    to the user on how to resolve the issue.
	  - When controlling multiple interfaces:
	     - apply WPS commands to all interfaces configured to use WPS
	     - apply WPS config changes to all interfaces that use WPS
	     - when an attack is detected on any interface, disable AP PIN on
	       all interfaces
	* WPS ER:
	  - Show SetSelectedRegistrar events as ctrl_iface events.
	  - Add special AP Setup Locked mode to allow read only ER.
	    ap_setup_locked=2 can now be used to enable a special mode where
	    WPS ER can learn the current AP settings, but cannot change them.
	* WPS 2.0: Add support for WPS 2.0 (CONFIG_WPS2)
	  - Add build option CONFIG_WPS_EXTENSIBILITY_TESTING to enable tool
	    for testing protocol extensibility.
	  - Add build option CONFIG_WPS_STRICT to allow disabling of WPS
	    workarounds.
	  - Add support for AuthorizedMACs attribute.
	* TDLS:
	  - Allow TDLS use or TDLS channel switching in the BSS to be
	    prohibited in the BSS, using config params tdls_prohibit and
	    tdls_prohibit_chan_switch.
	* EAP server: Add support for configuring fragment size (see
	  fragment_size in hostapd.conf).
	* wlantest: Add a tool wlantest for IEEE802.11 protocol testing.
	  wlantest can be used to capture frames from a monitor interface
	  for realtime capturing or from pcap files for offline analysis.
	* Interworking: Support added for 802.11u. Enable in .config with
	  CONFIG_INTERWORKING. See hostapd.conf for config parameters for
	  interworking.
	* Android: Add build and runtime support for Android hostapd.
	* Add a new debug message level for excessive information. Use
	  -ddd to enable.
	* TLS: Add support for tls_disable_time_checks=1 in client mode.
	* Internal TLS:
	  - Add support for TLS v1.1 (RFC 4346). Enable with build parameter
	    CONFIG_TLSV11.
	  - Add domainComponent parser for X.509 names
	* Reorder some IEs to get closer to IEEE 802.11 standard. Move
	  WMM into end of Beacon, Probe Resp and (Re)Assoc Resp frames.
	  Move HT IEs to be later in (Re)Assoc Resp.
	* Many bugfixes.

2010-04-18 - v0.7.2
	* fix WPS internal Registrar use when an external Registrar is also
	  active
	* bsd: Cleaned up driver wrapper and added various low-level
	  configuration options
	* TNC: fixed issues with fragmentation
	* EAP-TNC: add Flags field into fragment acknowledgement (needed to
	  interoperate with other implementations; may potentially breaks
	  compatibility with older wpa_supplicant/hostapd versions)
	* cleaned up driver wrapper API for multi-BSS operations
	* nl80211: fix multi-BSS and VLAN operations
	* fix number of issues with IEEE 802.11r/FT; this version is not
	  backwards compatible with old versions
	* add SA Query Request processing in AP mode (IEEE 802.11w)
	* fix IGTK PN in group rekeying (IEEE 802.11w)
	* fix WPS PBC session overlap detection to use correct attribute
	* hostapd_notif_Assoc() can now be called with all IEs to simplify
	  driver wrappers
	* work around interoperability issue with some WPS External Registrar
	  implementations
	* nl80211: fix WPS IE update
	* hostapd_cli: add support for action script operations (run a script
	  on hostapd events)
	* fix DH padding with internal crypto code (mainly, for WPS)
	* fix WPS association with both WPS IE and WPA/RSN IE present with
	  driver wrappers that use hostapd MLME (e.g., nl80211)

2010-01-16 - v0.7.1
	* cleaned up driver wrapper API (struct wpa_driver_ops); the new API
	  is not fully backwards compatible, so out-of-tree driver wrappers
	  will need modifications
	* cleaned up various module interfaces
	* merge hostapd and wpa_supplicant developers' documentation into a
	  single document
	* fixed HT Capabilities IE with nl80211 drivers
	* moved generic AP functionality code into src/ap
	* WPS: handle Selected Registrar as union of info from all Registrars
	* remove obsolte Prism54.org driver wrapper
	* added internal debugging mechanism with backtrace support and memory
	  allocation/freeing validation, etc. tests (CONFIG_WPA_TRACE=y)
	* EAP-FAST server: piggyback Phase 2 start with the end of Phase 1
	* WPS: add support for dynamically selecting whether to provision the
	  PSK as an ASCII passphrase or PSK
	* added support for WDS (4-address frame) mode with per-station virtual
	  interfaces (wds_sta=1 in config file; only supported with
	  driver=nl80211 for now)
	* fixed WPS Probe Request processing to handle missing required
	  attribute
	* fixed PKCS#12 use with OpenSSL 1.0.0
	* detect bridge interface automatically so that bridge parameter in
	  hostapd.conf becomes optional (though, it may now be used to
	  automatically add then WLAN interface into a bridge with
	  driver=nl80211)

2009-11-21 - v0.7.0
	* increased hostapd_cli ping interval to 5 seconds and made this
	  configurable with a new command line options (-G<seconds>)
	* driver_nl80211: use Linux socket filter to improve performance
	* added support for external Registrars with WPS (UPnP transport)
	* 802.11n: scan for overlapping BSSes before starting 20/40 MHz channel
	* driver_nl80211: fixed STA accounting data collection (TX/RX bytes
	  reported correctly; TX/RX packets not yet available from kernel)
	* added support for WPS USBA out-of-band mechanism with USB Flash
	  Drives (UFD) (CONFIG_WPS_UFD=y)
	* fixed EAPOL/EAP reauthentication when using an external RADIUS
	  authentication server
	* fixed TNC with EAP-TTLS
	* fixed IEEE 802.11r key derivation function to match with the standard
	  (note: this breaks interoperability with previous version) [Bug 303]
	* fixed SHA-256 based key derivation function to match with the
	  standard when using CCMP (for IEEE 802.11r and IEEE 802.11w)
	  (note: this breaks interoperability with previous version) [Bug 307]
	* added number of code size optimizations to remove unnecessary
	  functionality from the program binary based on build configuration
	  (part of this automatic; part configurable with CONFIG_NO_* build
	  options)
	* use shared driver wrapper files with wpa_supplicant
	* driver_nl80211: multiple updates to provide support for new Linux
	  nl80211/mac80211 functionality
	* updated management frame protection to use IEEE Std 802.11w-2009
	* fixed number of small WPS issues and added workarounds to
	  interoperate with common deployed broken implementations
	* added some IEEE 802.11n co-existence rules to disable 40 MHz channels
	  or modify primary/secondary channels if needed based on neighboring
	  networks
	* added support for NFC out-of-band mechanism with WPS
	* added preliminary support for IEEE 802.11r RIC processing

2009-01-06 - v0.6.7
	* added support for Wi-Fi Protected Setup (WPS)
	  (hostapd can now be configured to act as an integrated WPS Registrar
	  and provision credentials for WPS Enrollees using PIN and PBC
	  methods; external wireless Registrar can configure the AP, but
	  external WLAN Manager Registrars are not supported); WPS support can
	  be enabled by adding CONFIG_WPS=y into .config and setting the
	  runtime configuration variables in hostapd.conf (see WPS section in
	  the example configuration file); new hostapd_cli commands wps_pin and
	  wps_pbc are used to configure WPS negotiation; see README-WPS for
	  more details
	* added IEEE 802.11n HT capability configuration (ht_capab)
	* added support for generating Country IE based on nl80211 regulatory
	  information (added if ieee80211d=1 in configuration)
	* fixed WEP authentication (both Open System and Shared Key) with
	  mac80211
	* added support for EAP-AKA' (draft-arkko-eap-aka-kdf)
	* added support for using driver_test over UDP socket
	* changed EAP-GPSK to use the IANA assigned EAP method type 51
	* updated management frame protection to use IEEE 802.11w/D7.0
	* fixed retransmission of EAP requests if no response is received

2008-11-23 - v0.6.6
	* added a new configuration option, wpa_ptk_rekey, that can be used to
	  enforce frequent PTK rekeying, e.g., to mitigate some attacks against
	  TKIP deficiencies
	* updated OpenSSL code for EAP-FAST to use an updated version of the
	  session ticket overriding API that was included into the upstream
	  OpenSSL 0.9.9 tree on 2008-11-15 (no additional OpenSSL patch is
	  needed with that version anymore)
	* changed channel flags configuration to read the information from
	  the driver (e.g., via driver_nl80211 when using mac80211) instead of
	  using hostapd as the source of the regulatory information (i.e.,
	  information from CRDA is now used with mac80211); this allows 5 GHz
	  channels to be used with hostapd (if allowed in the current
	  regulatory domain)
	* fixed EAP-TLS message processing for the last TLS message if it is
	  large enough to require fragmentation (e.g., if a large Session
	  Ticket data is included)
	* fixed listen interval configuration for nl80211 drivers

2008-11-01 - v0.6.5
	* added support for SHA-256 as X.509 certificate digest when using the
	  internal X.509/TLSv1 implementation
	* fixed EAP-FAST PAC-Opaque padding (0.6.4 broke this for some peer
	  identity lengths)
	* fixed internal TLSv1 implementation for abbreviated handshake (used
	  by EAP-FAST server)
	* added support for setting VLAN ID for STAs based on local MAC ACL
	  (accept_mac_file) as an alternative for RADIUS server-based
	  configuration
	* updated management frame protection to use IEEE 802.11w/D6.0
	  (adds a new association ping to protect against unauthenticated
	  authenticate or (re)associate request frames dropping association)
	* added support for using SHA256-based stronger key derivation for WPA2
	  (IEEE 802.11w)
	* added new "driver wrapper" for RADIUS-only configuration
	  (driver=none in hostapd.conf; CONFIG_DRIVER_NONE=y in .config)
	* fixed WPA/RSN IE validation to verify that the proto (WPA vs. WPA2)
	  is enabled in configuration
	* changed EAP-FAST configuration to use separate fields for A-ID and
	  A-ID-Info (eap_fast_a_id_info) to allow A-ID to be set to a fixed
	  16-octet len binary value for better interoperability with some peer
	  implementations; eap_fast_a_id is now configured as a hex string
	* driver_nl80211: Updated to match the current Linux mac80211 AP mode
	  configuration (wireless-testing.git and Linux kernel releases
	  starting from 2.6.29)

2008-08-10 - v0.6.4
	* added peer identity into EAP-FAST PAC-Opaque and skip Phase 2
	  Identity Request if identity is already known
	* added support for EAP Sequences in EAP-FAST Phase 2
	* added support for EAP-TNC (Trusted Network Connect)
	  (this version implements the EAP-TNC method and EAP-TTLS/EAP-FAST
	  changes needed to run two methods in sequence (IF-T) and the IF-IMV
	  and IF-TNCCS interfaces from TNCS)
	* added support for optional cryptobinding with PEAPv0
	* added fragmentation support for EAP-TNC
	* added support for fragmenting EAP-TTLS/PEAP/FAST Phase 2 (tunneled)
	  data
	* added support for opportunistic key caching (OKC)

2008-02-22 - v0.6.3
	* fixed Reassociation Response callback processing when using internal
	  MLME (driver_{hostap,nl80211,test}.c)
	* updated FT support to use the latest draft, IEEE 802.11r/D9.0
	* copy optional Proxy-State attributes into RADIUS response when acting
	  as a RADIUS authentication server
	* fixed EAPOL state machine to handle a case in which no response is
	  received from the RADIUS authentication server; previous version
	  could have triggered a crash in some cases after a timeout
	* fixed EAP-SIM/AKA realm processing to allow decorated usernames to
	  be used
	* added a workaround for EAP-SIM/AKA peers that include incorrect null
	  termination in the username
	* fixed EAP-SIM/AKA protected result indication to include AT_COUNTER
	  attribute in notification messages only when using fast
	  reauthentication
	* fixed EAP-SIM Start response processing for fast reauthentication
	  case
	* added support for pending EAP processing in EAP-{PEAP,TTLS,FAST}
	  phase 2 to allow EAP-SIM and EAP-AKA to be used as the Phase 2 method

2008-01-01 - v0.6.2
	* fixed EAP-SIM and EAP-AKA message parser to validate attribute
	  lengths properly to avoid potential crash caused by invalid messages
	* added data structure for storing allocated buffers (struct wpabuf);
	  this does not affect hostapd usage, but many of the APIs changed
	  and various interfaces (e.g., EAP) is not compatible with old
	  versions
	* added support for protecting EAP-AKA/Identity messages with
	  AT_CHECKCODE (optional feature in RFC 4187)
	* added support for protected result indication with AT_RESULT_IND for
	  EAP-SIM and EAP-AKA (eap_sim_aka_result_ind=1)
	* added support for configuring EAP-TTLS phase 2 non-EAP methods in
	  EAP server configuration; previously all four were enabled for every
	  phase 2 user, now all four are disabled by default and need to be
	  enabled with new method names TTLS-PAP, TTLS-CHAP, TTLS-MSCHAP,
	  TTLS-MSCHAPV2
	* removed old debug printing mechanism and the related 'debug'
	  parameter in the configuration file; debug verbosity is now set with
	  -d (or -dd) command line arguments
	* added support for EAP-IKEv2 (draft-tschofenig-eap-ikev2-15.txt);
	  only shared key/password authentication is supported in this version

2007-11-24 - v0.6.1
	* added experimental, integrated TLSv1 server implementation with the
	  needed X.509/ASN.1/RSA/bignum processing (this can be enabled by
	  setting CONFIG_TLS=internal and CONFIG_INTERNAL_LIBTOMMATH=y in
	  .config); this can be useful, e.g., if the target system does not
	  have a suitable TLS library and a minimal code size is required
	* added support for EAP-FAST server method to the integrated EAP
	  server
	* updated EAP Generalized Pre-Shared Key (EAP-GPSK) to use the latest
	  draft (draft-ietf-emu-eap-gpsk-07.txt)
	* added a new configuration parameter, rsn_pairwise, to allow different
	  pairwise cipher suites to be enabled for WPA and RSN/WPA2
	  (note: if wpa_pairwise differs from rsn_pairwise, the driver will
	  either need to support this or will have to use the WPA/RSN IEs from
	  hostapd; currently, the included madwifi and bsd driver interfaces do
	  not have support for this)
	* updated FT support to use the latest draft, IEEE 802.11r/D8.0

2007-05-28 - v0.6.0
	* added experimental IEEE 802.11r/D6.0 support
	* updated EAP-SAKE to RFC 4763 and the IANA-allocated EAP type 48
	* updated EAP-PSK to use the IANA-allocated EAP type 47
	* fixed EAP-PSK bit ordering of the Flags field
	* fixed configuration reloading (SIGHUP) to re-initialize WPA PSKs
	  by reading wpa_psk_file [Bug 181]
	* fixed EAP-TTLS AVP parser processing for too short AVP lengths
	* fixed IPv6 connection to RADIUS accounting server
	* updated EAP Generalized Pre-Shared Key (EAP-GPSK) to use the latest
	  draft (draft-ietf-emu-eap-gpsk-04.txt)
	* hlr_auc_gw: read GSM triplet file into memory and rotate through the
	  entries instead of only using the same three triplets every time
	  (this does not work properly with tests using multiple clients, but
	  provides bit better triplet data for testing a single client; anyway,
	  if a better quality triplets are needed, GSM-Milenage should be used
	  instead of hardcoded triplet file)
	* fixed EAP-MSCHAPv2 server to use a space between S and M parameters
	  in Success Request [Bug 203]
	* added support for sending EAP-AKA Notifications in error cases
	* updated to use IEEE 802.11w/D2.0 for management frame protection
	  (still experimental)
	* RADIUS server: added support for processing duplicate messages
	  (retransmissions from RADIUS client) by replying with the previous
	  reply

2006-11-24 - v0.5.6
	* added support for configuring and controlling multiple BSSes per
	  radio interface (bss=<ifname> in hostapd.conf); this is only
	  available with Devicescape and test driver interfaces
	* fixed PMKSA cache update in the end of successful RSN
	  pre-authentication
	* added support for dynamic VLAN configuration (i.e., selecting VLAN-ID
	  for each STA based on RADIUS Access-Accept attributes); this requires
	  VLAN support from the kernel driver/802.11 stack and this is
	  currently only available with Devicescape and test driver interfaces
	* driver_madwifi: fixed configuration of unencrypted modes (plaintext
	  and IEEE 802.1X without WEP)
	* removed STAKey handshake since PeerKey handshake has replaced it in
	  IEEE 802.11ma and there are no known deployments of STAKey
	* updated EAP Generalized Pre-Shared Key (EAP-GPSK) to use the latest
	  draft (draft-ietf-emu-eap-gpsk-01.txt)
	* added preliminary implementation of IEEE 802.11w/D1.0 (management
	  frame protection)
	  (Note: this requires driver support to work properly.)
	  (Note2: IEEE 802.11w is an unapproved draft and subject to change.)
	* hlr_auc_gw: added support for GSM-Milenage (for EAP-SIM)
	* hlr_auc_gw: added support for reading per-IMSI Milenage keys and
	  parameters from a text file to make it possible to implement proper
	  GSM/UMTS authentication server for multiple SIM/USIM cards using
	  EAP-SIM/EAP-AKA
	* fixed session timeout processing with drivers that do not use
	  ieee802_11.c (e.g., madwifi)

2006-08-27 - v0.5.5
	* added 'hostapd_cli new_sta <addr>' command for adding a new STA into
	  hostapd (e.g., to initialize wired network authentication based on an
	  external signal)
	* fixed hostapd to add PMKID KDE into 4-Way Handshake Message 1 when
	  using WPA2 even if PMKSA caching is not used
	* added -P<pid file> argument for hostapd to write the current process
	  id into a file
	* added support for RADIUS Authentication Server MIB (RFC 2619)

2006-06-20 - v0.5.4
	* fixed nt_password_hash build [Bug 144]
	* added PeerKey handshake implementation for IEEE 802.11e
	  direct link setup (DLS) to replace STAKey handshake
	* added support for EAP Generalized Pre-Shared Key (EAP-GPSK,
	  draft-clancy-emu-eap-shared-secret-00.txt)
	* fixed a segmentation fault when RSN pre-authentication was completed
	  successfully [Bug 152]

2006-04-27 - v0.5.3
	* do not build nt_password_hash and hlr_auc_gw by default to avoid
	  requiring a TLS library for a successful build; these programs can be
	  build with 'make nt_password_hash' and 'make hlr_auc_gw'
	* added a new configuration option, eapol_version, that can be used to
	  set EAPOL version to 1 (default is 2) to work around broken client
	  implementations that drop EAPOL frames which use version number 2
	  [Bug 89]
	* added support for EAP-SAKE (no EAP method number allocated yet, so
	  this is using the same experimental type 255 as EAP-PSK)
	* fixed EAP-MSCHAPv2 message length validation

2006-03-19 - v0.5.2
	* fixed stdarg use in hostapd_logger(): if both stdout and syslog
	  logging was enabled, hostapd could trigger a segmentation fault in
	  vsyslog on some CPU -- C library combinations
	* moved HLR/AuC gateway implementation for EAP-SIM/AKA into an external
	  program to make it easier to use for implementing real SS7 gateway;
	  eap_sim_db is not anymore used as a file name for GSM authentication
	  triplets; instead, it is path to UNIX domain socket that will be used
	  to communicate with the external gateway program (e.g., hlr_auc_gw)
	* added example HLR/AuC gateway implementation, hlr_auc_gw, that uses
	  local information (GSM authentication triplets from a text file and
	  hardcoded AKA authentication data); this can be used to test EAP-SIM
	  and EAP-AKA
	* added Milenage algorithm (example 3GPP AKA algorithm) to hlr_auc_gw
	  to make it possible to test EAP-AKA with real USIM cards (this is
	  disabled by default; define AKA_USE_MILENAGE when building hlr_auc_gw
	  to enable this)
	* driver_madwifi: added support for getting station RSN IE from
	  madwifi-ng svn r1453 and newer; this fixes RSN that was apparently
	  broken with earlier change (r1357) in the driver
	* changed EAP method registration to use a dynamic list of methods
	  instead of a static list generated at build time
	* fixed WPA message 3/4 not to encrypt Key Data field (WPA IE)
	  [Bug 125]
	* added ap_max_inactivity configuration parameter

2006-01-29 - v0.5.1
	* driver_test: added better support for multiple APs and STAs by using
	  a directory with sockets that include MAC address for each device in
	  the name (test_socket=DIR:/tmp/test)
	* added support for EAP expanded type (vendor specific EAP methods)

2005-12-18 - v0.5.0 (beginning of 0.5.x development releases)
	* added experimental STAKey handshake implementation for IEEE 802.11e
	  direct link setup (DLS); note: this is disabled by default in both
	  build and runtime configuration (can be enabled with CONFIG_STAKEY=y
	  and stakey=1)
	* added support for EAP methods to use callbacks to external programs
	  by buffering a pending request and processing it after the EAP method
	  is ready to continue
	* improved EAP-SIM database interface to allow external request to GSM
	  HLR/AuC without blocking hostapd process
	* added support for using EAP-SIM pseudonyms and fast re-authentication
	* added support for EAP-AKA in the integrated EAP authenticator
	* added support for matching EAP identity prefixes (e.g., "1"*) in EAP
	  user database to allow EAP-SIM/AKA selection without extra roundtrip
	  for EAP-Nak negotiation
	* added support for storing EAP user password as NtPasswordHash instead
	  of plaintext password when using MSCHAP or MSCHAPv2 for
	  authentication (hash:<16-octet hex value>); added nt_password_hash
	  tool for hashing password to generate NtPasswordHash

2005-11-20 - v0.4.7 (beginning of 0.4.x stable releases)
	* driver_wired: fixed EAPOL sending to optionally use PAE group address
	  as the destination instead of supplicant MAC address; this is
	  disabled by default, but should be enabled with use_pae_group_addr=1
	  in configuration file if the wired interface is used by only one
	  device at the time (common switch configuration)
	* driver_madwifi: configure driver to use TKIP countermeasures in order
	  to get correct behavior (IEEE 802.11 association failing; previously,
	  association succeeded, but hostpad forced disassociation immediately)
	* driver_madwifi: added support for madwifi-ng

2005-10-27 - v0.4.6
	* added support for replacing user identity from EAP with RADIUS
	  User-Name attribute from Access-Accept message, if that is included,
	  for the RADIUS accounting messages (e.g., for EAP-PEAP/TTLS to get
	  tunneled identity into accounting messages when the RADIUS server
	  does not support better way of doing this with Class attribute)
	* driver_madwifi: fixed EAPOL packet receive for configuration where
	  ath# is part of a bridge interface
	* added a configuration file and log analyzer script for logwatch
	* fixed EAPOL state machine step function to process all state
	  transitions before processing new events; this resolves a race
	  condition in which EAPOL-Start message could trigger hostapd to send
	  two EAP-Response/Identity frames to the authentication server

2005-09-25 - v0.4.5
	* added client CA list to the TLS certificate request in order to make
	  it easier for the client to select which certificate to use
	* added experimental support for EAP-PSK
	* added support for WE-19 (hostap, madwifi)

2005-08-21 - v0.4.4
	* fixed build without CONFIG_RSN_PREAUTH
	* fixed FreeBSD build

2005-06-26 - v0.4.3
	* fixed PMKSA caching to copy User-Name and Class attributes so that
	  RADIUS accounting gets correct information
	* start RADIUS accounting only after successful completion of WPA
	  4-Way Handshake if WPA-PSK is used
	* fixed PMKSA caching for the case where STA (re)associates without
	  first disassociating

2005-06-12 - v0.4.2
	* EAP-PAX is now registered as EAP type 46
	* fixed EAP-PAX MAC calculation
	* fixed EAP-PAX CK and ICK key derivation
	* renamed eap_authenticator configuration variable to eap_server to
	  better match with RFC 3748 (EAP) terminology
	* driver_test: added support for testing hostapd with wpa_supplicant
	  by using test driver interface without any kernel drivers or network
	  cards

2005-05-22 - v0.4.1
	* fixed RADIUS server initialization when only auth or acct server
	  is configured and the other one is left empty
	* driver_madwifi: added support for RADIUS accounting
	* driver_madwifi: added preliminary support for compiling against 'BSD'
	  branch of madwifi CVS tree
	* driver_madwifi: fixed pairwise key removal to allow WPA reauth
	  without disassociation
	* added support for reading additional certificates from PKCS#12 files
	  and adding them to the certificate chain
	* fixed RADIUS Class attribute processing to only use Access-Accept
	  packets to update Class; previously, other RADIUS authentication
	  packets could have cleared Class attribute
	* added support for more than one Class attribute in RADIUS packets
	* added support for verifying certificate revocation list (CRL) when
	  using integrated EAP authenticator for EAP-TLS; new hostapd.conf
	  options 'check_crl'; CRL must be included in the ca_cert file for now

2005-04-25 - v0.4.0 (beginning of 0.4.x development releases)
	* added support for including network information into
	  EAP-Request/Identity message (ASCII-0 (nul) in eap_message)
	  (e.g., to implement draft-adrange-eap-network-discovery-07.txt)
	* fixed a bug which caused some RSN pre-authentication cases to use
	  freed memory and potentially crash hostapd
	* fixed private key loading for cases where passphrase is not set
	* added support for sending TLS alerts and aborting authentication
	  when receiving a TLS alert
	* fixed WPA2 to add PMKSA cache entry when using integrated EAP
	  authenticator
	* fixed PMKSA caching (EAP authentication was not skipped correctly
	  with the new state machine changes from IEEE 802.1X draft)
	* added support for RADIUS over IPv6; own_ip_addr, auth_server_addr,
	  and acct_server_addr can now be IPv6 addresses (CONFIG_IPV6=y needs
	  to be added to .config to include IPv6 support); for RADIUS server,
	  radius_server_ipv6=1 needs to be set in hostapd.conf and addresses
	  in RADIUS clients file can then use IPv6 format
	* added experimental support for EAP-PAX
	* replaced hostapd control interface library (hostapd_ctrl.[ch]) with
	  the same implementation that wpa_supplicant is using (wpa_ctrl.[ch])

2005-02-12 - v0.3.7 (beginning of 0.3.x stable releases)

2005-01-23 - v0.3.5
	* added support for configuring a forced PEAP version based on the
	  Phase 1 identity
	* fixed PEAPv1 to use tunneled EAP-Success/Failure instead of EAP-TLV
	  to terminate authentication
	* fixed EAP identifier duplicate processing with the new IEEE 802.1X
	  draft
	* clear accounting data in the driver when starting a new accounting
	  session
	* driver_madwifi: filter wireless events based on ifindex to allow more
	  than one network interface to be used
	* fixed WPA message 2/4 processing not to cancel timeout for TimeoutEvt
	  setting if the packet does not pass MIC verification (e.g., due to
	  incorrect PSK); previously, message 1/4 was not tried again if an
	  invalid message 2/4 was received
	* fixed reconfiguration of RADIUS client retransmission timer when
	  adding a new message to the pending list; previously, timer was not
	  updated at this point and if there was a pending message with long
	  time for the next retry, the new message needed to wait that long for
	  its first retry, too

2005-01-09 - v0.3.4
	* added support for configuring multiple allowed EAP types for Phase 2
	  authentication (EAP-PEAP, EAP-TTLS)
	* fixed EAPOL-Start processing to trigger WPA reauthentication
	  (previously, only EAPOL authentication was done)

2005-01-02 - v0.3.3
	* added support for EAP-PEAP in the integrated EAP authenticator
	* added support for EAP-GTC in the integrated EAP authenticator
	* added support for configuring list of EAP methods for Phase 1 so that
	  the integrated EAP authenticator can, e.g., use the wildcard entry
	  for EAP-TLS and EAP-PEAP
	* added support for EAP-TTLS in the integrated EAP authenticator
	* added support for EAP-SIM in the integrated EAP authenticator
	* added support for using hostapd as a RADIUS authentication server
	  with the integrated EAP authenticator taking care of EAP
	  authentication (new hostapd.conf options: radius_server_clients and
	  radius_server_auth_port); this is not included in default build; use
	  CONFIG_RADIUS_SERVER=y in .config to include

2004-12-19 - v0.3.2
	* removed 'daemonize' configuration file option since it has not really
	  been used at all for more than year
	* driver_madwifi: fixed group key setup and added get_ssid method
	* added support for EAP-MSCHAPv2 in the integrated EAP authenticator

2004-12-12 - v0.3.1
	* added support for integrated EAP-TLS authentication (new hostapd.conf
	  variables: ca_cert, server_cert, private_key, private_key_passwd);
	  this enabled dynamic keying (WPA2/WPA/IEEE 802.1X/WEP) without
	  external RADIUS server
	* added support for reading PKCS#12 (PFX) files (as a replacement for
	  PEM/DER) to get certificate and private key (CONFIG_PKCS12)

2004-12-05 - v0.3.0 (beginning of 0.3.x development releases)
	* added support for Acct-{Input,Output}-Gigawords
	* added support for Event-Timestamp (in RADIUS Accounting-Requests)
	* added support for RADIUS Authentication Client MIB (RFC2618)
	* added support for RADIUS Accounting Client MIB (RFC2620)
	* made EAP re-authentication period configurable (eap_reauth_period)
	* fixed EAPOL reauthentication to trigger WPA/WPA2 reauthentication
	* fixed EAPOL state machine to stop if STA is removed during
	  eapol_sm_step(); this fixes at least one segfault triggering bug with
	  IEEE 802.11i pre-authentication
	* added support for multiple WPA pre-shared keys (e.g., one for each
	  client MAC address or keys shared by a group of clients);
	  new hostapd.conf field wpa_psk_file for setting path to a text file
	  containing PSKs, see hostapd.wpa_psk for an example
	* added support for multiple driver interfaces to allow hostapd to be
	  used with other drivers
	* added wired authenticator driver interface (driver=wired in
	  hostapd.conf, see wired.conf for example configuration)
	* added madwifi driver interface (driver=madwifi in hostapd.conf, see
	  madwifi.conf for example configuration; Note: include files from
	  madwifi project is needed for building and a configuration file,
	  .config, needs to be created in hostapd directory with
	  CONFIG_DRIVER_MADWIFI=y to include this driver interface in hostapd
	  build)
	* fixed an alignment issue that could cause SHA-1 to fail on some
	  platforms (e.g., Intel ixp425 with a compiler that does not 32-bit
	  align variables)
	* fixed RADIUS reconnection after an error in sending interim
	  accounting packets
	* added hostapd control interface for external programs and an example
	  CLI, hostapd_cli (like wpa_cli for wpa_supplicant)
	* started adding dot11, dot1x, radius MIBs ('hostapd_cli mib',
	  'hostapd_cli sta <addr>')
	* finished update from IEEE 802.1X-2001 to IEEE 802.1X-REV (now d11)
	* added support for strict GTK rekeying (wpa_strict_rekey in
	  hostapd.conf)
	* updated IAPP to use UDP port 3517 and multicast address 224.0.1.178
	  (instead of broadcast) for IAPP ADD-notify (moved from draft 3 to
	  IEEE 802.11F-2003)
	* added Prism54 driver interface (driver=prism54 in hostapd.conf;
	  note: .config needs to be created in hostapd directory with
	  CONFIG_DRIVER_PRISM54=y to include this driver interface in hostapd
	  build)
	* dual-licensed hostapd (GPLv2 and BSD licenses)
	* fixed RADIUS accounting to generate a new session id for cases where
	  a station reassociates without first being complete deauthenticated
	* fixed STA disassociation handler to mark next timeout state to
	  deauthenticate the station, i.e., skip long wait for inactivity poll
	  and extra disassociation, if the STA disassociates without
	  deauthenticating
	* added integrated EAP authenticator that can be used instead of
	  external RADIUS authentication server; currently, only EAP-MD5 is
	  supported, so this cannot yet be used for key distribution; the EAP
	  method interface is generic, though, so adding new EAP methods should
	  be straightforward; new hostapd.conf variables: 'eap_authenticator'
	  and 'eap_user_file'; this obsoletes "minimal authentication server"
	  ('minimal_eap' in hostapd.conf) which is now removed
	* added support for FreeBSD and driver interface for the BSD net80211
	  layer (driver=bsd in hostapd.conf and CONFIG_DRIVER_BSD=y in
	  .config); please note that some of the required kernel mods have not
	  yet been committed

2004-07-17 - v0.2.4 (beginning of 0.2.x stable releases)
	* fixed some accounting cases where Accounting-Start was sent when
	  IEEE 802.1X port was being deauthorized

2004-06-20 - v0.2.3
	* modified RADIUS client to re-connect the socket in case of certain
	  error codes that are generated when a network interface state is
	  changes (e.g., when IP address changes or the interface is set UP)
	* fixed couple of cases where EAPOL state for a station was freed
	  twice causing a segfault for hostapd
	* fixed couple of bugs in processing WPA deauthentication (freed data
	  was used)

2004-05-31 - v0.2.2
	* fixed WPA/WPA2 group rekeying to use key index correctly (GN/GM)
	* fixed group rekeying to send zero TSC in EAPOL-Key messages to fix
	  cases where STAs dropped multicast frames as replay attacks
	* added support for copying RADIUS Attribute 'Class' from
	  authentication messages into accounting messages
	* send canned EAP failure if RADIUS server sends Access-Reject without
	  EAP message (previously, Supplicant was not notified in this case)
	* fixed mixed WPA-PSK and WPA-EAP mode to work with WPA-PSK (i.e., do
	  not start EAPOL state machines if the STA selected to use WPA-PSK)

2004-05-06 - v0.2.1
	* added WPA and IEEE 802.11i/RSN (WPA2) Authenticator functionality
	  - based on IEEE 802.11i/D10.0 but modified to interoperate with WPA
	    (i.e., IEEE 802.11i/D3.0)
	  - supports WPA-only, RSN-only, and mixed WPA/RSN mode
	  - both WPA-PSK and WPA-RADIUS/EAP are supported
	  - PMKSA caching and pre-authentication
	  - new hostapd.conf variables: wpa, wpa_psk, wpa_passphrase,
	    wpa_key_mgmt, wpa_pairwise, wpa_group_rekey, wpa_gmk_rekey,
	    rsn_preauth, rsn_preauth_interfaces
	* fixed interim accounting to remove any pending accounting messages
	  to the STA before sending a new one

2004-02-15 - v0.2.0
	* added support for Acct-Interim-Interval:
	  - draft-ietf-radius-acct-interim-01.txt
	  - use Acct-Interim-Interval attribute from Access-Accept if local
	    'radius_acct_interim_interval' is not set
	  - allow different update intervals for each STA
	* fixed event loop to call signal handlers only after returning from
	  the real signal handler
	* reset sta->timeout_next after successful association to make sure
	  that the previously registered inactivity timer will not remove the
	  STA immediately (e.g., if STA deauthenticates and re-associates
	  before the timer is triggered).
	* added new hostapd.conf variable, nas_identifier, that can be used to
	  add an optional RADIUS Attribute, NAS-Identifier, into authentication
	  and accounting messages
	* added support for Accounting-On and Accounting-Off messages
	* fixed accounting session handling to send Accounting-Start only once
	  per session and not to send Accounting-Stop if the session was not
	  initialized properly
	* fixed Accounting-Stop statistics in cases where the message was
	  previously sent after the kernel entry for the STA (and/or IEEE
	  802.1X data) was removed


Note:

Older changes up to and including v0.1.0 are included in the ChangeLog
of the Host AP driver.
