Author: avg
Date: Fri May 22 11:25:45 2020
New Revision: 361364
URL: https://svnweb.freebsd.org/changeset/base/361364

Log:
  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

Modified:
  head/sys/net80211/ieee80211_freebsd.c
  head/sys/net80211/ieee80211_proto.c
  head/sys/net80211/ieee80211_proto.h

Modified: head/sys/net80211/ieee80211_freebsd.c
==============================================================================
--- head/sys/net80211/ieee80211_freebsd.c       Fri May 22 11:20:23 2020        
(r361363)
+++ head/sys/net80211/ieee80211_freebsd.c       Fri May 22 11:25:45 2020        
(r361364)
@@ -963,6 +963,19 @@ ieee80211_notify_radio(struct ieee80211com *ic, int st
 }
 
 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)
 {
 

Modified: head/sys/net80211/ieee80211_proto.c
==============================================================================
--- head/sys/net80211/ieee80211_proto.c Fri May 22 11:20:23 2020        
(r361363)
+++ head/sys/net80211/ieee80211_proto.c Fri May 22 11:25:45 2020        
(r361364)
@@ -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,

Modified: head/sys/net80211/ieee80211_proto.h
==============================================================================
--- head/sys/net80211/ieee80211_proto.h Fri May 22 11:20:23 2020        
(r361363)
+++ head/sys/net80211/ieee80211_proto.h Fri May 22 11:25:45 2020        
(r361364)
@@ -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_ */
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to