# # 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