Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 4 May 2015 00:32:11 +0000 (UTC)
From:      Adrian Chadd <adrian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r282405 - head/sys/net80211
Message-ID:  <201505040032.t440WBwD026040@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: adrian
Date: Mon May  4 00:32:10 2015
New Revision: 282405
URL: https://svnweb.freebsd.org/changeset/base/282405

Log:
  Use bssid validation for data frames only + add RUN -> RUN state transition
  
  However, IBSS merge will be performed only if a driver calls
  ieee80211_ibss_merge(); so, this applicable to the ath(4) only.
  Also, this should fix bug 167870.
  
  PR:		kern/199632
  Submitted by:	Andriy Voskoboinyk <s3erios@gmail.com>

Modified:
  head/sys/net80211/ieee80211_adhoc.c

Modified: head/sys/net80211/ieee80211_adhoc.c
==============================================================================
--- head/sys/net80211/ieee80211_adhoc.c	Mon May  4 00:29:19 2015	(r282404)
+++ head/sys/net80211/ieee80211_adhoc.c	Mon May  4 00:32:10 2015	(r282405)
@@ -229,6 +229,8 @@ adhoc_newstate(struct ieee80211vap *vap,
 			}
 #endif
 			break;
+		case IEEE80211_S_RUN:	/* IBSS merge */
+			break;
 		default:
 			goto invalid;
 		}
@@ -369,7 +371,10 @@ adhoc_input(struct ieee80211_node *ni, s
 		/*
 		 * Validate the bssid.
 		 */
-		if (!IEEE80211_ADDR_EQ(bssid, vap->iv_bss->ni_bssid) &&
+		if (!(type == IEEE80211_FC0_TYPE_MGT &&
+		     (subtype == IEEE80211_FC0_SUBTYPE_BEACON ||
+		      subtype == IEEE80211_FC0_SUBTYPE_PROBE_REQ)) &&
+		    !IEEE80211_ADDR_EQ(bssid, vap->iv_bss->ni_bssid) &&
 		    !IEEE80211_ADDR_EQ(bssid, ifp->if_broadcastaddr)) {
 			/* not interested in */
 			IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
@@ -409,7 +414,7 @@ adhoc_input(struct ieee80211_node *ni, s
 		}
 		IEEE80211_RSSI_LPF(ni->ni_avgrssi, rssi);
 		ni->ni_noise = nf;
-		if (HAS_SEQ(type)) {
+		if (HAS_SEQ(type) && IEEE80211_ADDR_EQ(wh->i_addr2, ni->ni_macaddr)) {
 			uint8_t tid = ieee80211_gettid(wh);
 			if (IEEE80211_QOS_HAS_SEQ(wh) &&
 			    TID_TO_WME_AC(tid) >= WME_AC_VI)



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