Most important issues
- Make the stack SMP safe.
- Add callbacks for devices with advanced firmware.
- Changing WDS peer address doesn't add STA entry for new remote peer. [reported by Jouni Malinen]
- Need to stop TX/RX when a radar is detected for the duration of scan for a new channel. (Partially solved by PRISM2_PARAM_RADIO_ENABLED.) [reported by Jouni Malinen]
- Rate control algorithms should be applicable to individual devices separately (i. e. every device can have different algorithm). [suggested by Feyd] This will also solve Oops when removing of rate_control module and bringing an interface up afterwards. [reported by Larry Finger]
Other issues (in no particular order)
Easier handling of configuration requests (ieee80211_hw->config()). In the current implementation, driver has no way to find out which parameter is being set; setting all parameters on every call to config() is obviously not a good idea.
- struct ieee80211_tx_queue_stats is strange (why not to use ieee80211_tx_queue_stats_data directly?)
Separate TX and RX antenna selection (ieee80211_conf->antenna_sel). [suggested by Ivo van Doorn]
- Kicking DMA on the last fragment only (?) [suggested by Ivo van Doorn]
Call ieee80211_hw->config() after the card is initialized, so the driver is not forced to call it itself.
- Put to the documentation a note that by setting the set_frag_threshold() handler the stack won't do fragmentation.
- Why there is a beacon_update() handler? Maybe it would be easier for the driver to be allowed to call ieee80211_beacon_get() even in IBSS mode.
- Add functions that will tell the driver which rates and modulations are allowed. Some cards need to tell their firmware about it.
- Using of radiotap instead of Prism monitoring header.
- Add dormant state support.
- Add WLAN_CAPABILITY_QOS constant.
- Move ETH_P_PAE from ieee80211_i.h to linux/if_ether.h.
- Make IEEE80211_FRAGMENT_MAX configurable (preferably at run-time).
- Embed ieee80211_key_conf into ieee80211_key so just one memcpy can be used in ieee80211_key_data2conf().
- Alter LL_MAX_HEADER constant.
- Fix the race in PS status update (see TODO in ieee80211_tx_status()).
- get rid of all the embedded algorithms (AES, Michael, RC4, CRC) and use the crypto layer from the kernel [reported by Johannes Berg]
- In ieee80211_ioctl_siwmode(), ieee80211_hw_config() is called twice.
- split out frame crypto stuff into modules like in-kernel ieee80211 does [suggested by Johannes Berg]
- Do not misuse iwpriv for generic ioctls (i.e. do not use iwpriv ioctls in the stack at all).
- Remove ioctl (add_iface, WPA) and /proc compatibility stuff.
- Move ieee80211_get_hdrlen* from ieee80211.c to ieee80211_proto.c.
- Sort out function definitions in ieee80211_i.h (they are at two different places in the file now).
- Review locking around passive scanning (ieee80211_rx_h_passive_scan).
- Merge both types of scanning: software one (ieee80211_sta_scan_timer) and hardware/hostapd one (ieee80211_scan_handler).
- Rework background scanning to work without background scan callback. [suggested by Johannes Berg]
- Split ieee80211.c into several files.
ieee80211_rx_h_ieee80211_rx_h_ps_poll: do not pass rx->dev into hw->set_time. Pass mdev instead.
Make sure that a driver receive the same net_device every time (it's not now, e.g. for hw->config). Currently, random net_device is passed to a driver and ieee80211_dev_hw_data is expected to deal with this.
Add spin_lock_bh(&local->sub_if_lock) around accesses to local->sub_if_list.
- ieee80211_if_conf should be a part of ieee80211_sub_if_data (similar to ieee80211_conf is a part of ieee80211_local).
- In case of STA or IBSS, after a change of SSID or generic_element, ieee80211_if_conf should be called.
- Calls to ieee80211_key_threshold_notify are needless in some places. When the interface is in STA mode, a lot of operations is performed and the result is thrown away.
"Strawman proposal for a generic frame format" (http://linux-net.osdl.org/index.php/Wireless:Txformat) [suggested by Solomon Peachy]
- ieee80211_rx_michael_mic_report: comparing to IEEE80211_IF_TYPE_AP yields to false everytime. (FIXME: haven't it be fixed already?)
- When WPA is on, iwconfig incorrectly reports "Encryption key:off". [reported by Alex Davis] (FIXME: haven't it be fixed already?)
- Export information about softmac/fullmac type of the hardware to userspace. [suggested by Jouni Malinen]
- Sometimes scanning is invoked even when the interface is down (e.g. IBSS and setting of SSID). [reported by Ivo van Doorn]
- Investigate packet injection support for tools like aircrack. [suggested by Mark Wallis]
- ieee80211_ioctl_remove_sta: sta_info_free should be called with locked = 0
- Indentation in ieee80211_init().
- Add get_wireless_stats to ieee80211_iw_handler_def. [suggested by Dan Williams]
- Add software sequence numbering support.
- Add RTS frame generation function.
Clean up headers mess (http://www.spinics.net/lists/netdev/msg12124.html). [suggested by Johannes Berg]
RCPI support (http://www.spinics.net/lists/netdev/msg12028.html) [suggested by Simon Barber]
- generic_lock is unused. [reported by Jeff Garzik]
Get rid of bitfields (partially done, still left: ieee80211_txrx_data, ieee80211_tx_packet_data, ieee80211_tx_stored_packet, ieee80211_passive_scan, ieee80211_if_sta and ieee80211_sub_if_data). [suggested by Jeff Garzik]
- ieee80211_regdom and ieee80211_japan_5ghz module paramaters should go away in favour of userspace regulatory app.
When STA in PS mode with queued frames is removed, hw TIM is not updated (i.e. hw->set_tim is not called). [reported by Johannes Berg]
- #ifdef out wpa_test variable (but do not add #ifdefs into ifs).
- Allow set_key to return -ENOBUFS to indicate there is no more room for keys and do sw encryption for this STA then. [suggested by Michael Buesch]
get rid of dropped data frame to not associated station 00:00:00:00:00:00 warnings wherever they come from (IPv6?)
Library functions we should add
- PLCP Length calculation
Optimizations
- ieee80211_get_hdrlen and ieee80211_is_eapol are called very often.
- Inline ieee80211_get_bssid()?
- All frames go through all of decryption functions. It should be possible to know what to expect and only pass it through those functions that are needed. [suggested by Johannes Berg]
- Recognition of device incoming frame belongs to can be made much smarter and faster.
- When one packet is dumped through several interfaces, some operations can be performed just once (e.g. searching for the key, sometimes decrypting, defragmentation etc.).
- Add #ifdef's for not compiling AP stuff. [suggested by Jouni Malinen]
- Move fragmentation etc. into 802.11 qdisc. [suggested by Simon Barber]
- Try to switch from sw crypto to hw when there was no more room for STA keys in the hardware and one STA disassociates (so there is possibly a room now). [suggested by Johannes and Michael]
- only allocate memory for sw keys, let driver/hw manage hw keys?
- A lot of other stuff...
Coding style
- Replace spaces by tabs (but not by one big patch, this should be done gradually while the code is modified).