Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 25 Nov 2015 18:24:49 +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: r291304 - head/sys/dev/ath
Message-ID:  <201511251824.tAPIOnn2079842@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: adrian
Date: Wed Nov 25 18:24:49 2015
New Revision: 291304
URL: https://svnweb.freebsd.org/changeset/base/291304

Log:
  [ath] listen to all beacons in IBSS and software beacon miss.
  
  I added MYBEACON support a while ago to listen to beacons that are only
  for your configured BSSID.  For AR9380 and later NICs this results in
  a lot less chip wakeups in station mode as it then only shows you beacons
  that are destined to you.
  
  However in IBSS mode you really do want to hear all beacons so you can do
  IBSS merges.  Oops.
  
  So only use MYBEACON for STA + not-scanning, and just use BEACON for
  the other modes it used to use BEACON for.
  
  This doesn't completely fix IBSS merges though - there are still some
  conditions to chase down and fix.

Modified:
  head/sys/dev/ath/if_ath_rx.c

Modified: head/sys/dev/ath/if_ath_rx.c
==============================================================================
--- head/sys/dev/ath/if_ath_rx.c	Wed Nov 25 18:16:42 2015	(r291303)
+++ head/sys/dev/ath/if_ath_rx.c	Wed Nov 25 18:24:49 2015	(r291304)
@@ -172,9 +172,14 @@ ath_calcrxfilter(struct ath_softc *sc)
 	 *
 	 * Otherwise we only really need to hear beacons from
 	 * our own BSSID.
+	 *
+	 * IBSS? software beacon miss? Just receive all beacons.
+	 * We need to hear beacons/probe requests from everyone so
+	 * we can merge ibss.
 	 */
-	if (ic->ic_opmode == IEEE80211_M_STA ||
-	    ic->ic_opmode == IEEE80211_M_IBSS || sc->sc_swbmiss) {
+	if (ic->ic_opmode == IEEE80211_M_IBSS || sc->sc_swbmiss) {
+		rfilt |= HAL_RX_FILTER_BEACON;
+	} else if (ic->ic_opmode == IEEE80211_M_STA) {
 		if (sc->sc_do_mybeacon && ! sc->sc_scanning) {
 			rfilt |= HAL_RX_FILTER_MYBEACON;
 		} else { /* scanning, non-mybeacon chips */
@@ -431,7 +436,6 @@ ath_recv_mgmt(struct ieee80211_node *ni,
 			sc->sc_syncbeacon = 0;
 		}
 
-
 		/* fall thru... */
 	case IEEE80211_FC0_SUBTYPE_PROBE_RESP:
 		if (vap->iv_opmode == IEEE80211_M_IBSS &&



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