svn commit: r184276 - head/sys/net80211

Sam Leffler sam at FreeBSD.org
Sat Oct 25 16:40:29 PDT 2008


Author: sam
Date: Sat Oct 25 23:40:29 2008
New Revision: 184276
URL: http://svn.freebsd.org/changeset/base/184276

Log:
  use a private mgt frame recv handler for ahdemo mode instead of an inline
  test in the adhoc mode rx path so classes derived from ahdemo mode can
  override the default behaviour

Modified:
  head/sys/net80211/ieee80211_adhoc.c

Modified: head/sys/net80211/ieee80211_adhoc.c
==============================================================================
--- head/sys/net80211/ieee80211_adhoc.c	Sat Oct 25 23:39:18 2008	(r184275)
+++ head/sys/net80211/ieee80211_adhoc.c	Sat Oct 25 23:40:29 2008	(r184276)
@@ -66,6 +66,8 @@ static int adhoc_input(struct ieee80211_
 	int rssi, int noise, uint32_t rstamp);
 static void adhoc_recv_mgmt(struct ieee80211_node *, struct mbuf *,
 	int subtype, int rssi, int noise, uint32_t rstamp);
+static void ahdemo_recv_mgmt(struct ieee80211_node *, struct mbuf *,
+	int subtype, int rssi, int noise, uint32_t rstamp);
 
 void
 ieee80211_adhoc_attach(struct ieee80211com *ic)
@@ -89,7 +91,10 @@ adhoc_vattach(struct ieee80211vap *vap)
 {
 	vap->iv_newstate = adhoc_newstate;
 	vap->iv_input = adhoc_input;
-	vap->iv_recv_mgmt = adhoc_recv_mgmt;
+	if (vap->iv_opmode == IEEE80211_M_IBSS)
+		vap->iv_recv_mgmt = adhoc_recv_mgmt;
+	else
+		vap->iv_recv_mgmt = ahdemo_recv_mgmt;
 	vap->iv_opdetach = adhoc_vdetach;
 }
 
@@ -609,9 +614,7 @@ adhoc_input(struct ieee80211_node *ni, s
 		}
 		if (bpf_peers_present(vap->iv_rawbpf))
 			bpf_mtap(vap->iv_rawbpf, m);
-		/* NB: only IBSS mode gets mgt frames */
-		if (vap->iv_opmode == IEEE80211_M_IBSS)
-			vap->iv_recv_mgmt(ni, m, subtype, rssi, noise, rstamp);
+		vap->iv_recv_mgmt(ni, m, subtype, rssi, noise, rstamp);
 		m_freem(m);
 		return IEEE80211_FC0_TYPE_MGT;
 
@@ -879,3 +882,20 @@ adhoc_recv_mgmt(struct ieee80211_node *n
 }
 #undef IEEE80211_VERIFY_LENGTH
 #undef IEEE80211_VERIFY_ELEMENT
+
+static void
+ahdemo_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m0,
+	int subtype, int rssi, int noise, uint32_t rstamp)
+{
+	struct ieee80211vap *vap = ni->ni_vap;
+	struct ieee80211com *ic = ni->ni_ic;
+
+	/*
+	 * Process management frames when scanning; useful for doing
+	 * a site-survey.
+	 */
+	if (ic->ic_flags & IEEE80211_F_SCAN)
+		adhoc_recv_mgmt(ni, m0, subtype, rssi, noise, rstamp);
+	else
+		vap->iv_stats.is_rx_mgtdiscard++;
+}


More information about the svn-src-head mailing list