Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 29 Dec 2004 23:10:05 GMT
From:      Sam Leffler <sam@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 67866 for review
Message-ID:  <200412292310.iBTNA5Pm056587@repoman.freebsd.org>

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

Change 67866 by sam@sam_ebb on 2004/12/29 23:09:31

	add hack to not use QoS encapsulation for EAPOL frames as
	certain vendor ap's don't handle it

Affected files ...

.. //depot/projects/wifi/sys/net80211/ieee80211_output.c#29 edit

Differences ...

==== //depot/projects/wifi/sys/net80211/ieee80211_output.c#29 (text+ko) ====

@@ -434,7 +434,7 @@
 	struct ieee80211_frame *wh;
 	struct ieee80211_key *key;
 	struct llc *llc;
-	int hdrsize, datalen;
+	int hdrsize, datalen, addqos;
 
 	KASSERT(m->m_len >= sizeof(eh), ("no ethernet header!"));
 	memcpy(&eh, mtod(m, caddr_t), sizeof(struct ether_header));
@@ -467,7 +467,15 @@
 	} else
 		key = NULL;
 	/* XXX 4-address format */
-	if (ni->ni_flags & IEEE80211_NODE_QOS)
+	/*
+	 * XXX Atheros ap's don't handle QoS-encapsulated EAPOL
+	 * frames so suppress use.  This may be an issue with
+	 * other ap's that support WME+WPA in which case we'll
+	 * need to make this configurable.
+	 */
+	addqos = (ni->ni_flags & IEEE80211_NODE_QOS) &&
+		 eh.ether_type != htons(ETHERTYPE_PAE);
+	if (addqos)
 		hdrsize = sizeof(struct ieee80211_qosframe);
 	else
 		hdrsize = sizeof(struct ieee80211_frame);
@@ -521,7 +529,7 @@
 	case IEEE80211_M_MONITOR:
 		goto bad;
 	}
-	if (ni->ni_flags & IEEE80211_NODE_QOS) {
+	if (addqos) {
 		struct ieee80211_qosframe *qwh =
 			(struct ieee80211_qosframe *) wh;
 		int ac, tid;



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