mainline issues
mac80211
- hide (or get rid of) master dev to have stable userland interface
- compat: handle reassociation when the sta is out of range for a moment and then comes back
cfg80211
rename struct wiphy to struct phy80211?
mac80211
Most important issues
- Add callbacks for devices with advanced firmware.
- 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]
- rename ieee80211_local (e.g.: rename ieee80211_hw to ieee80211_dev and ieee80211_local to ieee80211_hw)
Other issues
Add a ieee80211_resume(hw) function that drivers can call when they resume. It should
- call set_key for each key that was uploaded to hardware
- reconfigure hardware (channel etc)
- ...?
crypto
- Embed ieee80211_key_conf into ieee80211_key so just one memcpy can be used in ieee80211_key_data2conf().
split out frame crypto stuff into modules like in-kernel ieee80211 does. I'm not sure any more this is worth it though since the actual algorithms (i.e. most code) can be modular anyway – JohannesBerg DateTime(2007-04-06T09:48:48Z)
- 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.
scanning
- Rework background scanning to work without background scan callback. [suggested by Johannes Berg]
core
- Add dormant state support.
"Strawman proposal for a generic frame format" (http://linux-net.osdl.org/index.php/Wireless:Txformat) [suggested by Solomon Peachy]
RCPI support (http://www.spinics.net/lists/netdev/msg12028.html) [suggested by Simon Barber]
- ieee80211_regdom and ieee80211_japan_5ghz module paramaters should go away in favour of userspace regulatory app.
- Add support for multiple queues
misc
- Export information about softmac/fullmac type of the hardware to userspace. [suggested by Jouni Malinen] (maybe export capabilities instead?)
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?)
- Kicking DMA on the last fragment only (?) [suggested by Ivo van Doorn]
- 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.
- Move ETH_P_PAE from ieee80211_i.h to linux/if_ether.h.
- Make IEEE80211_FRAGMENT_MAX configurable (preferably at run-time).
- Alter LL_MAX_HEADER constant.
- Fix the race in PS status update (see TODO in ieee80211_tx_status()).
- Do not misuse iwpriv for generic ioctls (i.e. do not use iwpriv ioctls in the stack at all).
- Remove ioctl (add_iface, WPA) 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).
- Split ieee80211.c into several files.
- ieee80211_if_conf should be a part of ieee80211_sub_if_data
- In case of STA or IBSS, after a change of SSID or generic_element, ieee80211_if_conf should be called.
Clean up headers mess (http://www.spinics.net/lists/netdev/msg12124.html). [suggested by Johannes Berg]
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]
- #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]
- ieee80211_msg_type, ieee80211_phytype and ieee80211_ssi_type should be in capitals (I think they can be removed once we move to radiotap)
- Allow "even-harder-monitor" mode - i.e. all frames (including those with a bad FCS) are received. That means introducing a new "not_checksummed" flag for non-monitor interfaces to operate simultaneously.
- For research: do the same with incorrect PLCP checksums?
qdisc bugs
- can't put the ieee80211 qdisc back on while the device is running
From Patrick McHardy:
- classify_1d doesn't care about tc_classify return values. tc_classify may decide to steal packets, drop them, etc. In case of stolen packets this causes use-after-free, otherwise just malfunctions.
classify_1d returns res.class if it is != -1, which can never happen (except with an empty classifier list because of the explicit initialization, but you should check the return code) since ->get() and ->bind_tcf() both return 0 for invalid classes and the classid otherwise. There's also an off-by-one, classids start at one, so it should return res.class - 1 (or better res.classid - 1, which is meant to be a numerical identifier).
Considering that it is possibly and may be desirable to attach a different qdisc than the built-in multiband qdisc, it might also make sense to split the 80211 specific classification in a seperate classifier module to allow simple classification of management traffic with other qdiscs.
Library functions we should add
- PLCP Length calculation
- Functions to fill modes/rates for B, BG, and ABG.
- TKIP key mixing functions (work in progress by mbuesch)
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]
- dynamically registered tx/rx handlers (and split them out from ieee80211.c)
Coding style
- remove forward declarations
drivers
make all drivers honour mac address correctly: http://thread.gmane.org/gmane.linux.kernel.wireless.general/3195