| # | 
 | # This outlines the Linux authentication/association and | 
 | # deauthentication/disassociation flows. | 
 | # | 
 | # This can be converted into a diagram using the service | 
 | # at http://www.websequencediagrams.com/ | 
 | # | 
 |  | 
 | participant userspace | 
 | participant mac80211 | 
 | participant driver | 
 |  | 
 | alt authentication needed (not FT) | 
 | userspace->mac80211: authenticate | 
 |  | 
 | alt authenticated/authenticating already | 
 | mac80211->driver: sta_state(AP, not-exists) | 
 | mac80211->driver: bss_info_changed(clear BSSID) | 
 | else associated | 
 | note over mac80211,driver | 
 | like deauth/disassoc, without sending the | 
 | BA session stop & deauth/disassoc frames | 
 | end note | 
 | end | 
 |  | 
 | mac80211->driver: config(channel, non-HT) | 
 | mac80211->driver: bss_info_changed(set BSSID, basic rate bitmap) | 
 | mac80211->driver: sta_state(AP, exists) | 
 |  | 
 | alt no probe request data known | 
 | mac80211->driver: TX directed probe request | 
 | driver->mac80211: RX probe response | 
 | end | 
 |  | 
 | mac80211->driver: TX auth frame | 
 | driver->mac80211: RX auth frame | 
 |  | 
 | alt WEP shared key auth | 
 | mac80211->driver: TX auth frame | 
 | driver->mac80211: RX auth frame | 
 | end | 
 |  | 
 | mac80211->driver: sta_state(AP, authenticated) | 
 | mac80211->userspace: RX auth frame | 
 |  | 
 | end | 
 |  | 
 | userspace->mac80211: associate | 
 | alt authenticated or associated | 
 | note over mac80211,driver: cleanup like for authenticate | 
 | end | 
 |  | 
 | alt not previously authenticated (FT) | 
 | mac80211->driver: config(channel, non-HT) | 
 | mac80211->driver: bss_info_changed(set BSSID, basic rate bitmap) | 
 | mac80211->driver: sta_state(AP, exists) | 
 | mac80211->driver: sta_state(AP, authenticated) | 
 | end | 
 | mac80211->driver: TX assoc | 
 | driver->mac80211: RX assoc response | 
 | note over mac80211: init rate control | 
 | mac80211->driver: sta_state(AP, associated) | 
 |  | 
 | alt not using WPA | 
 | mac80211->driver: sta_state(AP, authorized) | 
 | end | 
 |  | 
 | mac80211->driver: set up QoS parameters | 
 |  | 
 | alt is HT channel | 
 | mac80211->driver: config(channel, HT params) | 
 | end | 
 |  | 
 | mac80211->driver: bss_info_changed(QoS, HT, associated with AID) | 
 | mac80211->userspace: associated | 
 |  | 
 | note left of userspace: associated now | 
 |  | 
 | alt using WPA | 
 | note over userspace | 
 | do 4-way-handshake | 
 | (data frames) | 
 | end note | 
 | userspace->mac80211: authorized | 
 | mac80211->driver: sta_state(AP, authorized) | 
 | end | 
 |  | 
 | userspace->mac80211: deauthenticate/disassociate | 
 | mac80211->driver: stop BA sessions | 
 | mac80211->driver: TX deauth/disassoc | 
 | mac80211->driver: flush frames | 
 | mac80211->driver: sta_state(AP,associated) | 
 | mac80211->driver: sta_state(AP,authenticated) | 
 | mac80211->driver: sta_state(AP,exists) | 
 | mac80211->driver: sta_state(AP,not-exists) | 
 | mac80211->driver: turn off powersave | 
 | mac80211->driver: bss_info_changed(clear BSSID, not associated, no QoS, ...) | 
 | mac80211->driver: config(non-HT channel type) | 
 | mac80211->userspace: disconnected |