NOTE: this page is for archival only, see the note at the end of the page.


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]
  • 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

Other issues


  • 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 [suggested by Johannes Berg]
  • When WPA is on, iwconfig incorrectly reports "Encryption key:off". [reported by Alex Davis] (FIXME: haven't it be fixed already?)
  • 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.
  • move TKIP key generation support into library functions to support bcm43xx and not clutter the TX path with all the flag testing, this might require some restructuring of sw vs. hw crypto support


  • 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]
  • Sometimes scanning is invoked even when the interface is down (e.g. IBSS and setting of SSID). [reported by Ivo van Doorn]


  • Export information about softmac/fullmac type of the hardware to userspace. [suggested by Jouni Malinen]
  • 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.

  • 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.
  • 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()).
  • In ieee80211_ioctl_siwmode(), ieee80211_hw_config() is called twice.
  • 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).
  • 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.
  • "Strawman proposal for a generic frame format" ( [suggested by Solomon Peachy]

  • ieee80211_ioctl_remove_sta: sta_info_free should be called with locked = 0
  • Indentation in ieee80211_init().
  • Add software sequence numbering support.
  • Add RTS frame generation function.
  • Clean up headers mess ( [suggested by Johannes Berg]

  • RCPI support ( [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.
  • #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?)

  • ieee80211_msg_type, ieee80211_phytype and ieee80211_ssi_type should be in capitals [suggested by Nick Kossifidis]

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)


  • 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?
  • Make sure all frames passed to low level driver have extra_tx_headroom. Currently, only data frames are guaranteed to have extra_tx_headroom the driver requests.
  • 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).

This is a static dump of the wiki, taken after locking it in January 2015. The new wiki is at
versions of this page: last, v359, v358, v357, v356, v355, v354, v353, v352, v351, v350, v349, v348, v347, v346, v345, v344, v343, v342, v341, v340, v339, v338, v337, v336, v335, v334, v333, v332, v331, v330, v329, v328, v327, v326, v325, v324, v323, v322, v321, v320, v319, v318, v317, v316, v315, v314, v313, v312, v311, v310, v309, v308, v307, v306, v305, v304, v303, v302, v301, v300, v299, v298, v297, v296, v295, v294, v293, v292, v291, v290, v289, v288, v287, v286, v285, v284, v283, v282, v281, v280, v279, v278, v277, v276, v275, v274, v273, v272, v271, v270, v269, v268, v267, v266, v265, v264, v263, v262, v261, v260, v259, v258, v257, v256, v255, v254, v253, v252, v251, v250, v249, v248, v247, v246, v245, v244, v243, v242, v241, v240, v239, v238, v237, v236, v235, v234, v233, v232, v231, v230, v229, v228, v227, v226, v225, v224, v223, v222, v221, v220, v219, v218, v217, v216, v215, v214, v213, v212, v211, v210, v209, v208, v207, v206, v205, v204, v203, v202, v201, v200, v199, v198, v197, v196, v195, v194, v193, v192, v191, v190, v189, v188, v187, v186, v185, v184, v183, v182, v181, v180, v179, v178, v177, v176, v175, v174, v173, v172, v171, v170, v169, v168, v167, v166, v165, v164, v163, v162, v161, v160, v159, v158, v157, v156, v155, v154, v153, v152, v151, v150, v149, v148, v147, v146, v145, v144, v143, v142, v141, v140, v139, v138, v137, v136, v135, v134, v133, v132, v131, v130, v129, v128, v127, v126, v125, v124, v123, v122, v121, v120, v119, v118, v117, v116, v115, v114, v113, v112, v111, v110, v109, v108, v107, v106, v105, v104, v103, v102, v101, v100, v99, v98, v97, v96, v95, v94, v93, v92, v91, v90, v89, v88, v87, v86, v85, v84, v83, v82, v81, v80, v79, v78, v77, v76, v75, v74, v73, v72, v71, v70, v69, v68, v67, v66, v65, v64, v63, v62, v61, v60, v59, v58, v57, v56, v55, v54, v53, v52, v51, v50, v49, v48, v47, v46, v45, v44, v43, v42, v41, v40, v39, v38, v37, v36, v35, v34, v33, v32, v31, v30, v29, v28, v27, v26, v25, v24, v23, v22, v21, v20, v19, v18, v17, v16, v15, v14, v13, v12, v11, v10, v9, v8, v7, v6, v5, v4, v3, v2, v1