Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 29 May 2020 07:38:57 +0000 (UTC)
From:      Andriy Gapon <avg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org
Subject:   svn commit: r361619 - stable/12/sys/net80211
Message-ID:  <202005290738.04T7cvF3058943@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: avg
Date: Fri May 29 07:38:57 2020
New Revision: 361619
URL: https://svnweb.freebsd.org/changeset/base/361619

Log:
  MFC r361364: 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.

Modified:
  stable/12/sys/net80211/ieee80211_freebsd.c
  stable/12/sys/net80211/ieee80211_proto.c
  stable/12/sys/net80211/ieee80211_proto.h
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/net80211/ieee80211_freebsd.c
==============================================================================
--- stable/12/sys/net80211/ieee80211_freebsd.c	Fri May 29 07:37:27 2020	(r361618)
+++ stable/12/sys/net80211/ieee80211_freebsd.c	Fri May 29 07:38:57 2020	(r361619)
@@ -962,6 +962,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: stable/12/sys/net80211/ieee80211_proto.c
==============================================================================
--- stable/12/sys/net80211/ieee80211_proto.c	Fri May 29 07:37:27 2020	(r361618)
+++ stable/12/sys/net80211/ieee80211_proto.c	Fri May 29 07:38:57 2020	(r361619)
@@ -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: stable/12/sys/net80211/ieee80211_proto.h
==============================================================================
--- stable/12/sys/net80211/ieee80211_proto.h	Fri May 29 07:37:27 2020	(r361618)
+++ stable/12/sys/net80211/ieee80211_proto.h	Fri May 29 07:38:57 2020	(r361619)
@@ -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_ */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202005290738.04T7cvF3058943>