AUTH -> AUTH state transitions happen if the access point uses band-steering.
This was originally implemented to fix interop with some Aruba APs.

A recent commit I made to iwm/iwx drivers probably broke this.
Here is a fix.

ok?

diff b1c80baf1b7d4bf6f528498fe67f3d1db4353371 /usr/src
blob - 8bf1224f792b4b4f1e1214660de9a211e3788d74
file + sys/dev/pci/if_iwm.c
--- sys/dev/pci/if_iwm.c
+++ sys/dev/pci/if_iwm.c
@@ -8945,9 +8945,11 @@ iwm_newstate(struct ieee80211com *ic, enum ieee80211_s
        /*
         * Prevent attemps to transition towards the same state, unless
         * we are scanning in which case a SCAN -> SCAN transition
-        * triggers another scan iteration.
+        * triggers another scan iteration. And AUTH -> AUTH is needed
+        * to support band-steering.
         */
-       if (sc->ns_nstate == nstate && nstate != IEEE80211_S_SCAN)
+       if (sc->ns_nstate == nstate && nstate != IEEE80211_S_SCAN &&
+           nstate != IEEE80211_S_AUTH)
                return 0;
 
        if (ic->ic_state == IEEE80211_S_RUN) {
blob - 692f12524d78cde1117f4a660cc30cadf297e4af
file + sys/dev/pci/if_iwx.c
--- sys/dev/pci/if_iwx.c
+++ sys/dev/pci/if_iwx.c
@@ -7874,9 +7874,11 @@ iwx_newstate(struct ieee80211com *ic, enum ieee80211_s
        /*
         * Prevent attemps to transition towards the same state, unless
         * we are scanning in which case a SCAN -> SCAN transition
-        * triggers another scan iteration.
+        * triggers another scan iteration. And AUTH -> AUTH is needed
+        * to support band-steering.
         */
-       if (sc->ns_nstate == nstate && nstate != IEEE80211_S_SCAN)
+       if (sc->ns_nstate == nstate && nstate != IEEE80211_S_SCAN &&
+           nstate != IEEE80211_S_AUTH)
                return 0;
 
        if (ic->ic_state == IEEE80211_S_RUN) {

Reply via email to