Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 1 Feb 2004 14:17:15 -0800 (PST)
From:      Sam Leffler <sam@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 46327 for review
Message-ID:  <200402012217.i11MHFcQ015826@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=46327

Change 46327 by sam@sam_ebb on 2004/02/01 14:16:29

	o correct short slot time handling: enable it only for 11g
	  when not operating in ibss mode and when the driver says
	  it can do it
	o move short slot time handling into ieee80211_reset_erp where
	  it can be shared
	o move ieee80211_reset_erp call in the state machine from
	  the transition assoc->init to run->init; it's not clear
	  what the original patch was intended to do and/or if this
	  reset logic is even needed

Affected files ...

.. //depot/projects/netperf+sockets/sys/net80211/ieee80211.c#11 edit
.. //depot/projects/netperf+sockets/sys/net80211/ieee80211_proto.c#7 edit

Differences ...

==== //depot/projects/netperf+sockets/sys/net80211/ieee80211.c#11 (text+ko) ====

@@ -769,19 +769,20 @@
 		ic->ic_des_chan = IEEE80211_CHAN_ANYC;
 
 	/*
-	 * Do 11b/11g mixed-mode state setup.
+	 * Do mode-specific rate setup.
 	 */
 	if (mode == IEEE80211_MODE_11G) {
-		/* use mixed 11b/11g rate set */
+		/*
+		 * Use a mixed 11b/11g rate set.
+		 */
 		ieee80211_set11gbasicrates(&ic->ic_sup_rates[mode],
 			IEEE80211_MODE_11G);
 	} else if (mode == IEEE80211_MODE_11B) {
-		/* force pure 11b rate set */
+		/*
+		 * Force pure 11b rate set.
+		 */
 		ieee80211_set11gbasicrates(&ic->ic_sup_rates[mode],
 			IEEE80211_MODE_11B);
-		ic->ic_flags &= ~IEEE80211_F_SHSLOT;
-	} else {
-		ic->ic_flags &= ~IEEE80211_F_SHSLOT;
 	}
 	ieee80211_reset_erp(ic, mode);		/* reset ERP state */
 
@@ -808,7 +809,17 @@
 	ic->ic_flags &= ~IEEE80211_F_USEPROT;
 	ic->ic_nonerpsta = 0;
 	ic->ic_longslotsta = 0;
-	if (mode == IEEE80211_MODE_11G && (ic->ic_caps & IEEE80211_C_SHSLOT))
+	/*
+	 * Short slot time is enabled only when operating in 11g
+	 * and not in an IBSS.  We must also honor whether or not
+	 * the driver is capable of doing it.
+	 */
+	/* XXX what about auto? */
+	if (mode == IEEE80211_MODE_11G &&
+	    ic->ic_opmode != IEEE80211_M_IBSS &&
+	    (ic->ic_caps & IEEE80211_C_SHSLOT))
+		ic->ic_flags |= IEEE80211_F_SHSLOT;
+	else
 		ic->ic_flags &= ~IEEE80211_F_SHSLOT;
 	/*
 	 * Set short preamble and ERP barker-preamble flags.

==== //depot/projects/netperf+sockets/sys/net80211/ieee80211_proto.c#7 (text+ko) ====

@@ -347,8 +347,13 @@
 		ic->ic_longslotsta--;
 		if (ic->ic_longslotsta == 0 &&
 		    ic->ic_curmode == IEEE80211_MODE_11G) {
-			/* XXX check capability */
-			ic->ic_flags |= IEEE80211_F_SHSLOT;
+			/*
+			 * Re-enable use of short slot time if supported
+			 * and not operating in IBSS mode (per spec).
+			 */
+			if ((ic->ic_caps & IEEE80211_C_SHSLOT) &&
+			    ic->ic_opmode != IEEE80211_M_IBSS)
+				ic->ic_flags |= IEEE80211_F_SHSLOT;
 		}
 	}
 	/*
@@ -403,6 +408,7 @@
 					    IEEE80211_REASON_ASSOC_LEAVE);
 				}
 				IEEE80211_NODE_UNLOCK(ic);
+				ieee80211_reset_erp(ic, ic->ic_curmode);
 				break;
 			default:
 				break;
@@ -423,8 +429,6 @@
 					    IEEE80211_REASON_AUTH_LEAVE);
 				}
 				IEEE80211_NODE_UNLOCK(ic);
-				/* XXX??? */
-				ieee80211_reset_erp(ic, ic->ic_curmode);
 				break;
 			default:
 				break;



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