net80211: post RTM_IFINFO notification after toggling IFF_DRV_RUNNING
This is useful when a wireless driver is stopped or started in response to events like an RF Kill button press. Applications like wpa_supplicant depend on such events to have a correct view of interface state. Reviewed by: adrian, cy, melifaro MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D24925
This commit is contained in:
parent
8a719b0cee
commit
2c13efdf1c
@ -962,6 +962,19 @@ ieee80211_notify_radio(struct ieee80211com *ic, int state)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ieee80211_notify_ifnet_change(struct ieee80211vap *vap)
|
||||
{
|
||||
struct ifnet *ifp = vap->iv_ifp;
|
||||
|
||||
IEEE80211_DPRINTF(vap, IEEE80211_MSG_DEBUG, "%s\n",
|
||||
"interface state change");
|
||||
|
||||
CURVNET_SET(ifp->if_vnet);
|
||||
rt_ifmsg(ifp);
|
||||
CURVNET_RESTORE();
|
||||
}
|
||||
|
||||
void
|
||||
ieee80211_load_module(const char *modname)
|
||||
{
|
||||
|
@ -1511,6 +1511,8 @@ ieee80211_start_locked(struct ieee80211vap *vap)
|
||||
* back in here and complete the work.
|
||||
*/
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ieee80211_notify_ifnet_change(vap);
|
||||
|
||||
/*
|
||||
* We are not running; if this we are the first vap
|
||||
* to be brought up auto-up the parent if necessary.
|
||||
@ -1624,6 +1626,7 @@ ieee80211_stop_locked(struct ieee80211vap *vap)
|
||||
ieee80211_new_state_locked(vap, IEEE80211_S_INIT, -1);
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING; /* mark us stopped */
|
||||
ieee80211_notify_ifnet_change(vap);
|
||||
if (--ic->ic_nrunning == 0) {
|
||||
IEEE80211_DPRINTF(vap,
|
||||
IEEE80211_MSG_STATE | IEEE80211_MSG_DEBUG,
|
||||
|
@ -455,4 +455,5 @@ void ieee80211_notify_node_auth(struct ieee80211_node *);
|
||||
void ieee80211_notify_country(struct ieee80211vap *, const uint8_t [],
|
||||
const uint8_t cc[2]);
|
||||
void ieee80211_notify_radio(struct ieee80211com *, int);
|
||||
void ieee80211_notify_ifnet_change(struct ieee80211vap *);
|
||||
#endif /* _NET80211_IEEE80211_PROTO_H_ */
|
||||
|
Loading…
Reference in New Issue
Block a user