Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 28 Nov 2016 17:06:35 +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: r309253 - head/sys/dev/ath
Message-ID:  <201611281706.uASH6ZtI073581@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: adrian
Date: Mon Nov 28 17:06:35 2016
New Revision: 309253
URL: https://svnweb.freebsd.org/changeset/base/309253

Log:
  [ath] revert the previous commit, after reading the 802.11-2012 spec a bit more.
  
  The 802.11-2012 spec talks about this - section 10.1.3.2 - Beacon Generation
  in Infrastructure Networks.  So yes, we should be expecting beacons to be
  going out in multiples of intval.
  
  Silly adrian.
  
  So:
  
  * fix the FreeBSD APs that are sending beacons at incorrect TBTTs (target
    beacon transmit time); and
  * yes indeed we will have to wake up out of network sleep until we sync
    a beacon.

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

Modified: head/sys/dev/ath/if_ath_beacon.c
==============================================================================
--- head/sys/dev/ath/if_ath_beacon.c	Mon Nov 28 16:25:05 2016	(r309252)
+++ head/sys/dev/ath/if_ath_beacon.c	Mon Nov 28 17:06:35 2016	(r309253)
@@ -965,9 +965,9 @@ ath_beacon_config(struct ath_softc *sc, 
 		intval = ni->ni_intval & HAL_BEACON_PERIOD;
 	}
 
-
 	/*
-	 * Note: rounding up to the next intval can cause problems.
+	 * Note: rounding up to the next intval can cause problems with
+	 * bad APs when we're in powersave mode.
 	 *
 	 * In STA mode with powersave enabled, beacons are only received
 	 * whenever the beacon timer fires to wake up the hardware.
@@ -975,17 +975,14 @@ ath_beacon_config(struct ath_softc *sc, 
 	 * that the AP has started transmitting beacons at TSF values that
 	 * are multiples of intval, versus say being 25 TU off.
 	 *
-	 * I'm not sure why nexttbtt is rounded up to the intval.
-	 * If we sync against a beacon that is way out, we should
-	 * take a beacon miss and re-sync against the next beacon.
-	 *
-	 * So for now - don't round up if we're in STA mode.
-	 * Maybe later (when someone eventually does powersave+IBSS,
-	 * powersave+MBSS) this can be flipped on for those too.
+	 * The specification (802.11-2012 10.1.3.2 - Beacon Generation in
+	 * Infrastructure Networks) requires APs be beaconing at a
+	 * mutiple of intval.  So, if bintval=100, then we shouldn't
+	 * get beacons at intervals other than around multiples of 100.
 	 */
 	if (nexttbtt == 0)		/* e.g. for ap mode */
 		nexttbtt = intval;
-	else if ((ic->ic_opmode != IEEE80211_M_STA) && intval)		/* NB: can be 0 for monitor mode */
+	else
 		nexttbtt = roundup(nexttbtt, intval);
 
 	DPRINTF(sc, ATH_DEBUG_BEACON, "%s: nexttbtt %u intval %u (%u)\n",



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