Prism2/2.5/3 Host AP - new release 2002-09-12
From: Jouni Malinen (jkmaline_at_cc.hut.fi)
Date: 2002-09-12 14:03:29 UTC
A new version of Prism2 Host AP driver was just released and it is now
available from http://hostap.epitest.fi/
2002-09-12
- hostapd improvements: implemented ioctl() for controlling kernel
driver from hostapd; this version is able to add stations (and
flush list on exit/startup) and remove expired stations so operations
with user space handling of management frames is starting to be
usable
- cleaned up RX and TX paths by moving AP related operations from
prism2.c into prism2_ap.c
- added new monitor mode 3 (like mode 2, but also include linux-wlan-ng
style Prism2 header and use ARPHRD_IEEE80211_PRISM) and removed
monitor mode 1 (netlink)
- new libpcap and Ethereal knows how to use device with type
ARPHRD_IEEE80211_PRISM so netlink version is not needed anymore
for getting signal levels and rate
- removed prism2ethereal since Ethereal can directly capture packets
with Prism2 header
- netlink mode did not fully support more than one interface
- fixed couple of bugs causing timeouts while setting RID (TIM) in
power saving mode with PRISM2_USE_CMD_COMPL_INTERRUPT
- record SSID and channel of the monitored APs and show it in procfs
file
- fixed AP data expiration (timer was not initialized)
- cleanup of TX buffering for power saving stations:
- got rid of 'struct sta_buffer_frame' and use kernel routines for
queueing skb instead
- use prism2_tx() to send buffered frames instead of using copied
code in prism2_ap.c (skb->cb is used to indicate that the packet
was buffered)
- fixed WEP with PS stations (buffered frames were not encrypted
before)
- added optional defines for removing unneeded parts of the driver
(e.g., to limit the size of the kernel module); see the end of
prism2_config.h for more information; defining all PRISM2_NO_*
defines seem to reduce module size about 30% on Intel x86 platforms
- added generic callback function to make it easier to add platform
specific operations, like activity led blinking, without needing to
change Host AP driver source code. If PRISM2_CALLBACK is defined,
external file, hostap_callback.c, is included and it must define
prism2_callback() that will be called on events like card
enable/disable and RX/TX.
- converted wireless extension ioctls to new API (based on patch from
Jean Tourrilhes)
- added support for wireless events (wireless ext >= 14)
- IWEVTXDROP, SIOCGIWAP, SIOCGIWSCAN (Jean Tourrilhes)
- IWEVREGISTERED, IWEVEXPIRED (wireless ext >= 15)
- improved AP scanning support:
- moved ScanResult debug messages into
/proc/net/hostap/wlan#/scan_results
- send wireless SIOCGIWSCAN event when receiving ScanResult info
frame
- added SIOCSIWSCAN and SIOCGIWSCAN for wireless extensions ver >= 13
(i.e., 'iwlist scan' can be used to perform AP scanning; currently
only in station modes) (based on patch from Jean Tourrilhes)
- added support for host-based roaming decision for Managed mode
(default is to use firmware-based roaming; use new prism2_param
'host_roaming' to enable driver-based selection)
- added support for SIOCSIWAP (iwconfig wlan0 ap <preferred AP BSSID>)
when using host_roaming (this can be used to implement user space
roaming daemon (scan request with SIOCSIWSCAN, get results using
SIOCGIWSCAN, and select AP with SIOCSIWAP)
- fixed a bug in AP management queue handling (noticed by
Tiebing Zhang)
- if AP management frame queue had more than one item, only the last
one was processed; other items were dropped with memory leak
- fixed priv ioctls wds_add, wds_del, addmac, delmac, and kickmac to
use copy_from_user() when referencing wrq->u.data.pointer
- added support for wireless extensions sub-ioctls
- an optional replacement for prism2_param wrapper
- these are included for WIRELESS_EXT >= 15 or if
PRISM2_USE_WE_SUB_IOCTLS is defined (WIRELESS_EXT >= 12 is
required in any case)
- new iwpriv version is required (ver 25 or higher; older versions
segfault due to long private ioctl list)
- added support for IW_PRIV_TYPE_ADDR (replace old 18*char with user
space parsing of MAC address). This requires iwpriv ver >= 25. This
will be automatically included for WIRELESS_EXT >= 15; defining
PRISM2_USE_WE_TYPE_ADDR will force this to be used even with older
WIRELESS_EXT versions.
- added detection for interrupt delivery problems (enabled only for
hostap_cs.o)
- added PCI suspend/resume support to hostap_pci.o (patch from
Gerald Britton)
- added support for changing MAC address (also BSSID in Host AP mode)
with 'ifconfig wlan0 hw ether <new addr>'
- added WDS support for non-Host AP modes and IEEE 802.11 compliant
4 address frame
- removed PRISM2_STA_HAS_NO_HOSTAP_WDS_BUG define and include code
for both IEEE 802.11 standard compliant WDS frame with 4 addresses
and "bogus" format with 3 addresses in the header and 4th after
payload
- RX of both WDS formats seems to work in all modes
- Host AP mode cannot send standard compliant WDS frames so it uses
own format; other modes try to send standard compiliant WDS frames
- some station firmware versions seems to be able to send valid WDS
frames in pseudo ad-hoc mode, but some versions zero addr3 (= DA)
- setting porttype to WDS seems to allow sending correct addr3
- started to use 'Repeater' mode as WDS (i.e., 'iwconfig wlan0 mode
Repeater'); this seems to be the best choice for WDS links needing
standard compliant frame format
- modularized encryption/decryption support
- redesigned WEP code to allow easy addition of other algorithms as
loadable kernel modules; new module, hostap_crypt.o is used to
register these modules and it will be used by
hostap_{cs,plx,pci}.o; modprobe should be able to load this
automatically after depmod has been run; use 'make crypt' to build
encryption related modules (they will be installed with
'make install_{pccard,plx,pci}')
- moved WEP implementation from hostap_{cs,plx,pci}.o into
hostap_crypt_wep.o; this is _not_ loaded automatically and it will
need to be loaded before WEP can be used (e.g., from the script
that sets the keys)
- added support for key mappings, i.e., individual keys for each
station
- added new prism2_param 'bcrx_sta_key' for selecting whether
individual is used also for broadcast frames (IEEE 802.11 specifies
that it is not used and this is the default)
- added a tool, utils/hostap_crypt_conf, for setting encryption
algorithms and individual keys (iwconfig can still be used to setup
default WEP keys)
- fixed host_decrypt to not accept unencrypted frames unless open_wep
is set
- module structure reorganization
- moved prism2_ap.c, prism2_ioctl.c, prism2_proc.c, and some
functions from prism2.c into new hostap.o module that exports
symbols shared by hostap_{cs,plx,pci}.o; more will probably follow
later so that hostap_{cs,plx,pci}.o will end up having only code
that is hardware model dependent
- renamed all exported functions to use hostap_ prefix in their names
- renamed /proc/net/prism2 directory to /proc/net/hostap and fixed
concurrent use of different hostap_{cs,plx,pci}.o modules to use the
same directory instead of making two directories with the same name
- renamed driver/prism2.mk to driver/hostap.mk, driver/modules/prism2_*
to driver/modules/hostap_*, and driver/modules/prism2.c to
driver/modules/hostap_hw.c, i.e., use 'hostap' prefix with all file
names
- redesigned command completion waiting
- do not use busy waiting
- use a driver queue for pending commands to guarantee string order
and serialization of the commands; if command queue is empty, new
commands will be issued immediately, otherwise the pending
commands will be issued from command completion event of the
previous command
- use command completion event (interrupt) for all commands
(previously this was only used for transmit command)
- remove PRISM2_USE_CMD_COMPL_INTERRUPT definition (there is no
alternative version for busy waiting to keep the code cleaner)
- hfa384x_cmd() can from now on only be called from user context;
it will sleep (instead of busy waiting) for the command completion
event (wake up from interrupt handler); same limit applies to
get_rid/set_rid
- hfa384x_callback() is a new method for performing commands, both
from user and interrupt context; it registers a callback function
that will be called when the command has finished; this cleans up
transmit and bus mastering code a lot
- HW reset (prism2_hw_reset) cannot be called from interrupt context
anymore (these calls are replaced with scheduled task that calls
prism2_hw_reset() from user context
- AP's TIM setting has been replaced with scheduled task and a queue
of entries to be set to avoid using set_rid from interrupt context
- modified (kernel driver) AP code to send management frames using
netif queue to make sure that TX operations are not used
concurrently; this should fix some problems with high load cases;
this also means, that management frames are _not_ anymore sent unless
device is UP (i.e., no auth/assoc happens before device is set up;
however, beacons and probe responses are sent if the device is
enabled)
- added support for TMD7160-based National Datacomm NCP130
(PCI ID 15e8:0131) to hostap_plx.o
- fixed iwpriv readmif and writemif on big endian platforms
- added IEEE 802.1X support:
- Port access entity (in the kernel driver) control authorized/
unauthorized port access
- Authenticator in hostapd user space daemon (kernel driver needs
to be compiled with EXTRA_CFLAGS=-DPRISM2_HOSTAPD)
- minimal authentication server included in hostapd for test use
(does not check any keys etc.)
- support for external authentication server using RADIUS (e.g.,
FreeRadius and EAP/TLS)
- automatic WEP key setting for default/broadcast and individual
unicast keys
- changed TXEXC RetryErr debug logging to be configurable (default:
do not print); this can be set with bit2 (= 4) of prism2_param
'dump'
- improved ordering of debug printing in auth/assoc frame handlers to
avoid spending too much time before replying the message and causing
failed auth/assoc (TXEXC RetryErr)
--
Jouni Malinen PGP id EFC895FA
This archive was generated by
hypermail 2.1.4.