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.


  • 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]
  • Don't reset rate control when scanning (ie. don't reinitialize it but store the state and restore it later).


  • Using of radiotap instead of Prism monitoring header.
  • Add dormant state support.
  • "Strawman proposal for a generic frame format" ( [suggested by Solomon Peachy]

  • Add software sequence numbering support.
  • Add RTS frame generation function.
  • RCPI support ( [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).


  • 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?)
  • 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.
  • 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.
  • ieee80211_ioctl_remove_sta: sta_info_free should be called with locked = 0
  • Indentation in ieee80211_init().
  • Clean up headers mess ( [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]
  • 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?
  • dynamically registered tx/rx handlers
  • 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