Since 6.2, ieee80211_newstate() shows state transitions in
dmesg if the IFF_DEBUG flag is set on the interface.
However, some drivers do not call ieee80211_newstate() but fiddle with
ic->ic_state directly and return, so they end up up hiding some state
transitions from debug output.
This diff fixes some of those drivers. ok?
Index: dev/ic/bwfm.c
===================================================================
RCS file: /cvs/src/sys/dev/ic/bwfm.c,v
retrieving revision 1.30
diff -u -p -r1.30 bwfm.c
--- dev/ic/bwfm.c 11 Jan 2018 19:33:34 -0000 1.30
+++ dev/ic/bwfm.c 29 Jan 2018 18:48:50 -0000
@@ -2152,26 +2152,30 @@ bwfm_newstate_cb(struct bwfm_softc *sc,
{
struct bwfm_cmd_newstate *cmd = arg;
struct ieee80211com *ic = &sc->sc_ic;
- enum ieee80211_state ostate, nstate;
+ struct ifnet *ifp = &ic->ic_if;
+ enum ieee80211_state nstate = cmd->state;
int s;
s = splnet();
- ostate = ic->ic_state;
- nstate = cmd->state;
- DPRINTF(("newstate %s -> %s\n",
- ieee80211_state_name[ostate],
- ieee80211_state_name[nstate]));
switch (nstate) {
case IEEE80211_S_SCAN:
bwfm_scan(sc);
+ if (ifp->if_flags & IFF_DEBUG)
+ printf("%s: %s -> %s\n", DEVNAME(sc),
+ ieee80211_state_name[ic->ic_state],
+ ieee80211_state_name[nstate]);
ic->ic_state = nstate;
splx(s);
return;
case IEEE80211_S_AUTH:
ic->ic_bss->ni_rsn_supp_state = RSNA_SUPP_INITIALIZE;
bwfm_connect(sc);
- ic->ic_state = cmd->state;
+ if (ifp->if_flags & IFF_DEBUG)
+ printf("%s: %s -> %s\n", DEVNAME(sc),
+ ieee80211_state_name[ic->ic_state],
+ ieee80211_state_name[nstate]);
+ ic->ic_state = nstate;
if (ic->ic_flags & IEEE80211_F_RSNON)
ic->ic_bss->ni_rsn_supp_state = RSNA_SUPP_PTKSTART;
splx(s);
Index: dev/pci/if_iwm.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_iwm.c,v
retrieving revision 1.223
diff -u -p -r1.223 if_iwm.c
--- dev/pci/if_iwm.c 14 Jan 2018 11:51:34 -0000 1.223
+++ dev/pci/if_iwm.c 29 Jan 2018 18:32:59 -0000
@@ -5475,6 +5475,7 @@ int
iwm_scan(struct iwm_softc *sc)
{
struct ieee80211com *ic = &sc->sc_ic;
+ struct ifnet *ifp = IC2IFP(ic);
int err;
if (sc->sc_flags & IWM_FLAG_BGSCAN) {
@@ -5496,6 +5497,10 @@ iwm_scan(struct iwm_softc *sc)
}
sc->sc_flags |= IWM_FLAG_SCANNING;
+ if (ifp->if_flags & IFF_DEBUG)
+ printf("%s: %s -> %s\n", ifp->if_xname,
+ ieee80211_state_name[ic->ic_state],
+ ieee80211_state_name[IEEE80211_S_SCAN]);
ic->ic_state = IEEE80211_S_SCAN;
iwm_led_blink_start(sc);
wakeup(&ic->ic_state); /* wake iwm_init() */
@@ -6076,10 +6081,6 @@ iwm_newstate_task(void *psc)
enum ieee80211_state ostate = ic->ic_state;
int arg = sc->ns_arg;
int err = 0, s = splnet();
-
- DPRINTF(("switching state %s->%s\n",
- ieee80211_state_name[ostate],
- ieee80211_state_name[nstate]));
if (sc->sc_flags & IWM_FLAG_SHUTDOWN) {
/* iwm_stop() is waiting for us. */
Index: dev/pci/if_iwn.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_iwn.c,v
retrieving revision 1.198
diff -u -p -r1.198 if_iwn.c
--- dev/pci/if_iwn.c 9 Jan 2018 10:00:12 -0000 1.198
+++ dev/pci/if_iwn.c 29 Jan 2018 18:27:42 -0000
@@ -1782,6 +1782,10 @@ iwn_newstate(struct ieee80211com *ic, en
sc->sc_dev.dv_xname);
return error;
}
+ if (ifp->if_flags & IFF_DEBUG)
+ printf("%s: %s -> %s\n", ifp->if_xname,
+ ieee80211_state_name[ic->ic_state],
+ ieee80211_state_name[nstate]);
ic->ic_state = nstate;
return 0;
Index: dev/pci/if_wpi.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_wpi.c,v
retrieving revision 1.141
diff -u -p -r1.141 if_wpi.c
--- dev/pci/if_wpi.c 26 Oct 2017 15:00:28 -0000 1.141
+++ dev/pci/if_wpi.c 29 Jan 2018 18:27:56 -0000
@@ -1053,6 +1053,10 @@ wpi_newstate(struct ieee80211com *ic, en
sc->sc_dev.dv_xname);
return error;
}
+ if (ifp->if_flags & IFF_DEBUG)
+ printf("%s: %s -> %s\n", ifp->if_xname,
+ ieee80211_state_name[ic->ic_state],
+ ieee80211_state_name[nstate]);
ic->ic_state = nstate;
return 0;
Index: dev/usb/if_atu.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_atu.c,v
retrieving revision 1.123
diff -u -p -r1.123 if_atu.c
--- dev/usb/if_atu.c 21 Jul 2017 15:55:04 -0000 1.123
+++ dev/usb/if_atu.c 29 Jan 2018 18:28:52 -0000
@@ -1206,9 +1206,6 @@ atu_newstate(struct ieee80211com *ic, en
struct atu_softc *sc = ifp->if_softc;
enum ieee80211_state ostate = ic->ic_state;
- DPRINTFN(10, ("%s: atu_newstate: %s -> %s\n", sc->atu_dev.dv_xname,
- ieee80211_state_name[ostate], ieee80211_state_name[nstate]));
-
switch (nstate) {
case IEEE80211_S_SCAN:
memcpy(ic->ic_chan_scan, ic->ic_chan_active,
@@ -1220,6 +1217,10 @@ atu_newstate(struct ieee80211com *ic, en
usb_add_task(sc->atu_udev, &sc->sc_task);
/* handle this ourselves */
+ if (ifp->if_flags & IFF_DEBUG)
+ printf("%s: %s -> %s\n", ifp->if_xname,
+ ieee80211_state_name[ic->ic_state],
+ ieee80211_state_name[nstate]);
ic->ic_state = nstate;
return (0);
Index: dev/usb/if_rsu.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_rsu.c,v
retrieving revision 1.41
diff -u -p -r1.41 if_rsu.c
--- dev/usb/if_rsu.c 26 Oct 2017 15:00:28 -0000 1.41
+++ dev/usb/if_rsu.c 29 Jan 2018 18:50:04 -0000
@@ -814,14 +814,12 @@ rsu_newstate_cb(struct rsu_softc *sc, vo
{
struct rsu_cmd_newstate *cmd = arg;
struct ieee80211com *ic = &sc->sc_ic;
+ struct ifnet *ifp = &ic->ic_if;
enum ieee80211_state ostate;
int error, s;
s = splnet();
ostate = ic->ic_state;
- DPRINTF(("newstate %s -> %s\n",
- ieee80211_state_name[ostate],
- ieee80211_state_name[cmd->state]));
if (ostate == IEEE80211_S_RUN) {
/* Stop calibration. */
@@ -838,6 +836,10 @@ rsu_newstate_cb(struct rsu_softc *sc, vo
printf("%s: could not send site survey command\n",
sc->sc_dev.dv_xname);
}
+ if (ifp->if_flags & IFF_DEBUG)
+ printf("%s: %s -> %s\n", ifp->if_xname,
+ ieee80211_state_name[ic->ic_state],
+ ieee80211_state_name[cmd->state]);
ic->ic_state = cmd->state;
splx(s);
return;
@@ -851,6 +853,10 @@ rsu_newstate_cb(struct rsu_softc *sc, vo
splx(s);
return;
}
+ if (ifp->if_flags & IFF_DEBUG)
+ printf("%s: %s -> %s\n", ifp->if_xname,
+ ieee80211_state_name[ic->ic_state],
+ ieee80211_state_name[cmd->state]);
ic->ic_state = cmd->state;
if (ic->ic_flags & IEEE80211_F_RSNON)
ic->ic_bss->ni_rsn_supp_state = RSNA_SUPP_PTKSTART;
@@ -858,6 +864,10 @@ rsu_newstate_cb(struct rsu_softc *sc, vo
return;
case IEEE80211_S_ASSOC:
/* No-op for this driver. See rsu_event_join_bss(). */
+ if (ifp->if_flags & IFF_DEBUG)
+ printf("%s: %s -> %s\n", ifp->if_xname,
+ ieee80211_state_name[ic->ic_state],
+ ieee80211_state_name[cmd->state]);
ic->ic_state = cmd->state;
splx(s);
return;