pre-merge issues
mac80211
- Make the stack SMP safe.
- hide (or get rid of) master dev to have stable userland interface
- Review locking around passive scanning (ieee80211_rx_h_passive_scan)
- if there is absolutely no possibility to retain the current wlan%d interface names, change default interface name to eth%d
- fix per-netdev debugfs stuff (needs debugfs_rename)
- remove ieee80211_netif_oper
cfg80211
- propagate phy renaming to debugfs (needs debugfs_rename)
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]
- get rid of master dev
- rename ieee80211_local (e.g.: rename ieee80211_hw to ieee80211_dev and ieee80211_local to ieee80211_hw)
- don't allow removal of qdisc
- compat: handle reassociation when the sta is out of range for a moment and then comes back
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().
- ieee80211_rx_michael_mic_report: comparing to IEEE80211_IF_TYPE_AP yields to false everytime. (FIXME: haven't it be fixed already?)
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
- 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]
core
- Using of radiotap instead of Prism monitoring header.
- 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 queue netdevices (if Peter Waskiewicz's patch is accepted).
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.
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
- In case of STA or IBSS, after a change of SSID or generic_element, ieee80211_if_conf should be called.
- ieee80211_ioctl_remove_sta: sta_info_free should be called with locked = 0
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
From Patrick McHardy:
wme_qdiscop_enqueue doesn't increment q.qlen for packets queued to q->requeued[], which might cause upper layer code to stop dequeueing if q.qlen reaches zero.
- 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).
- wme_discop_destroy leaks classifier module references and memory when destroying classifiers, it should use tcf_destroy()
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