| # | 
| # 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, channel type) | 
| 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, channel type) | 
| 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 | 
|   | 
| 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(channel type to non-HT) | 
| mac80211->userspace: disconnected |