svn commit: r326737 - head/sys/net80211

Adrian Chadd adrian at FreeBSD.org
Sat Dec 9 23:16:04 UTC 2017


Author: adrian
Date: Sat Dec  9 23:16:02 2017
New Revision: 326737
URL: https://svnweb.freebsd.org/changeset/base/326737

Log:
  [net80211] add a method for checking if a VAP WME AC has a NOACK policy or not.
  
  A subsequent set of commits will introduce this instead of a whole lot of
  gymnastics to check the WME category.

Modified:
  head/sys/net80211/ieee80211_proto.c
  head/sys/net80211/ieee80211_proto.h

Modified: head/sys/net80211/ieee80211_proto.c
==============================================================================
--- head/sys/net80211/ieee80211_proto.c	Sat Dec  9 21:55:19 2017	(r326736)
+++ head/sys/net80211/ieee80211_proto.c	Sat Dec  9 23:16:02 2017	(r326737)
@@ -1308,6 +1308,12 @@ ieee80211_wme_updateparams(struct ieee80211vap *vap)
 	}
 }
 
+/*
+ * Fetch the WME parameters for the given VAP.
+ *
+ * When net80211 grows p2p, etc support, this may return different
+ * parameters for each VAP.
+ */
 void
 ieee80211_wme_vap_getparams(struct ieee80211vap *vap, struct chanAccParams *wp)
 {
@@ -1315,11 +1321,37 @@ ieee80211_wme_vap_getparams(struct ieee80211vap *vap, 
 	memcpy(wp, &vap->iv_ic->ic_wme.wme_chanParams, sizeof(*wp));
 }
 
+/*
+ * For NICs which only support one set of WME paramaters (ie, softmac NICs)
+ * there may be different VAP WME parameters but only one is "active".
+ * This returns the "NIC" WME parameters for the currently active
+ * context.
+ */
 void
 ieee80211_wme_ic_getparams(struct ieee80211com *ic, struct chanAccParams *wp)
 {
 
 	memcpy(wp, &ic->ic_wme.wme_chanParams, sizeof(*wp));
+}
+
+/*
+ * Return whether to use QoS on a given WME queue.
+ *
+ * This is intended to be called from the transmit path of softmac drivers
+ * which are setting NoAck bits in transmit descriptors.
+ *
+ * Ideally this would be set in some transmit field before the packet is
+ * queued to the driver but net80211 isn't quite there yet.
+ */
+int
+ieee80211_wme_vap_ac_is_noack(struct ieee80211vap *vap, int ac)
+{
+	/* Bounds/sanity check */
+	if (ac < 0 || ac >= WME_NUM_AC)
+		return (0);
+
+	/* Again, there's only one global context for now */
+	return (!! vap->iv_ic->ic_wme.wme_chanParams.cap_wmeParams[ac].wmep_noackPolicy);
 }
 
 static void

Modified: head/sys/net80211/ieee80211_proto.h
==============================================================================
--- head/sys/net80211/ieee80211_proto.h	Sat Dec  9 21:55:19 2017	(r326736)
+++ head/sys/net80211/ieee80211_proto.h	Sat Dec  9 23:16:02 2017	(r326737)
@@ -298,6 +298,7 @@ void	ieee80211_wme_vap_getparams(struct ieee80211vap *
 	    struct chanAccParams *);
 void	ieee80211_wme_ic_getparams(struct ieee80211com *ic,
 	    struct chanAccParams *);
+int	ieee80211_wme_vap_ac_is_noack(struct ieee80211vap *vap, int ac);
 
 /*
  * Return the WME TID from a QoS frame.  If no TID


More information about the svn-src-all mailing list