Index: net80211/ieee80211_proto.c =================================================================== RCS file: /home/ncvs/src/sys/net80211/ieee80211_proto.c,v retrieving revision 1.74 diff -u -r1.74 ieee80211_proto.c --- net80211/ieee80211_proto.c 25 Mar 2012 03:11:57 -0000 1.74 +++ net80211/ieee80211_proto.c 1 Apr 2012 01:24:43 -0000 @@ -1400,6 +1400,25 @@ IEEE80211_UNLOCK(ic); } +/* + * Reinit all vap's. + */ +void +ieee80211_reinit_all(struct ieee80211com *ic) +{ + struct ieee80211vap *vap; + + IEEE80211_LOCK(ic); + TAILQ_FOREACH(vap, &ic->ic_vaps, iv_next) { + struct ifnet *ifp = vap->iv_ifp; + if (IFNET_IS_UP_RUNNING(ifp)) { /* NB: avoid recursion */ + ieee80211_new_state_locked(vap, IEEE80211_S_INIT, -1); + ieee80211_start_locked(vap); + } + } + IEEE80211_UNLOCK(ic); +} + void ieee80211_beacon_miss(struct ieee80211com *ic) { Index: net80211/ieee80211_proto.h =================================================================== RCS file: /home/ncvs/src/sys/net80211/ieee80211_proto.h,v retrieving revision 1.53 diff -u -r1.53 ieee80211_proto.h --- net80211/ieee80211_proto.h 17 Dec 2011 10:32:31 -0000 1.53 +++ net80211/ieee80211_proto.h 1 Apr 2012 01:24:51 -0000 @@ -310,6 +310,7 @@ void ieee80211_stop_all(struct ieee80211com *); void ieee80211_suspend_all(struct ieee80211com *); void ieee80211_resume_all(struct ieee80211com *); +void ieee80211_reinit_all(struct ieee80211com *); void ieee80211_dturbo_switch(struct ieee80211vap *, int newflags); void ieee80211_swbmiss(void *arg); void ieee80211_beacon_miss(struct ieee80211com *); Index: dev/iwi/if_iwi.c =================================================================== RCS file: /home/ncvs/src/sys/dev/iwi/if_iwi.c,v retrieving revision 1.82 diff -u -r1.82 if_iwi.c --- dev/iwi/if_iwi.c 23 Mar 2012 19:32:30 -0000 1.82 +++ dev/iwi/if_iwi.c 1 Apr 2012 01:44:28 -0000 @@ -3177,7 +3177,7 @@ IWI_UNLOCK(sc); if (ifp->if_drv_flags & IFF_DRV_RUNNING) - ieee80211_start_all(ic); + ieee80211_reinit_all(ic); } static void