svn commit: r190850 - in head/sys: dev/if_ndis net80211

Sam Leffler sam at FreeBSD.org
Wed Apr 8 09:19:51 PDT 2009


Author: sam
Date: Wed Apr  8 16:19:50 2009
New Revision: 190850
URL: http://svn.freebsd.org/changeset/base/190850

Log:
  o add a capability for drivers that require 802.3 encapsulation of
    frames passed down through the transmit path
  o mark ndis requiring 802.3 encap'd frames
  
  Reviewed by:	"Paul B. Mahol" <onemda at gmail.com>, thompsa

Modified:
  head/sys/dev/if_ndis/if_ndis.c
  head/sys/net80211/ieee80211_output.c
  head/sys/net80211/ieee80211_var.h

Modified: head/sys/dev/if_ndis/if_ndis.c
==============================================================================
--- head/sys/dev/if_ndis/if_ndis.c	Wed Apr  8 16:18:16 2009	(r190849)
+++ head/sys/dev/if_ndis/if_ndis.c	Wed Apr  8 16:19:50 2009	(r190850)
@@ -753,7 +753,8 @@ ndis_attach(dev)
 		ic->ic_ifp = ifp;
 		ic->ic_opmode = IEEE80211_M_STA;
 	        ic->ic_phytype = IEEE80211_T_DS;
-		ic->ic_caps = IEEE80211_C_STA | IEEE80211_C_IBSS;
+		ic->ic_caps = IEEE80211_C_8023ENCAP |
+			IEEE80211_C_STA | IEEE80211_C_IBSS;
 		setbit(ic->ic_modecaps, IEEE80211_MODE_AUTO);
 		len = 0;
 		r = ndis_get_info(sc, OID_802_11_NETWORK_TYPES_SUPPORTED,

Modified: head/sys/net80211/ieee80211_output.c
==============================================================================
--- head/sys/net80211/ieee80211_output.c	Wed Apr  8 16:18:16 2009	(r190849)
+++ head/sys/net80211/ieee80211_output.c	Wed Apr  8 16:19:50 2009	(r190850)
@@ -253,14 +253,16 @@ ieee80211_start(struct ifnet *ifp)
 			}
 		}
 #endif /* IEEE80211_SUPPORT_SUPERG */
-		/*
-		 * Encapsulate the packet in prep for transmission.
-		 */
-		m = ieee80211_encap(vap, ni, m);
-		if (m == NULL) {
-			/* NB: stat+msg handled in ieee80211_encap */
-			ieee80211_free_node(ni);
-			continue;
+		if (__predict_true((vap->iv_caps & IEEE80211_C_8023ENCAP) == 0)) {
+			/*
+			 * Encapsulate the packet in prep for transmission.
+			 */
+			m = ieee80211_encap(vap, ni, m);
+			if (m == NULL) {
+				/* NB: stat+msg handled in ieee80211_encap */
+				ieee80211_free_node(ni);
+				continue;
+			}
 		}
 
 		/*

Modified: head/sys/net80211/ieee80211_var.h
==============================================================================
--- head/sys/net80211/ieee80211_var.h	Wed Apr  8 16:18:16 2009	(r190849)
+++ head/sys/net80211/ieee80211_var.h	Wed Apr  8 16:19:50 2009	(r190850)
@@ -532,8 +532,9 @@ MALLOC_DECLARE(M_80211_VAP);
 #define	IEEE80211_FVEN_BITS	"\20"
 
 /* ic_caps/iv_caps: device driver capabilities */
-/* 0x2f available */
+/* 0x2e available */
 #define	IEEE80211_C_STA		0x00000001	/* CAPABILITY: STA available */
+#define	IEEE80211_C_8023ENCAP	0x00000002	/* CAPABILITY: 802.3 encap */
 #define	IEEE80211_C_FF		0x00000040	/* CAPABILITY: ATH FF avail */
 #define	IEEE80211_C_TURBOP	0x00000080	/* CAPABILITY: ATH Turbo avail*/
 #define	IEEE80211_C_IBSS	0x00000100	/* CAPABILITY: IBSS available */
@@ -565,7 +566,7 @@ MALLOC_DECLARE(M_80211_VAP);
 	 IEEE80211_C_TDMA)
 
 #define	IEEE80211_C_BITS \
-	"\20\1STA\7FF\10TURBOP\11IBSS\12PMGT" \
+	"\20\1STA\002803ENCAP\7FF\10TURBOP\11IBSS\12PMGT" \
 	"\13HOSTAP\14AHDEMO\15SWRETRY\16TXPMGT\17SHSLOT\20SHPREAMBLE" \
 	"\21MONITOR\22DFS\30WPA1\31WPA2\32BURST\33WME\34WDS\36BGSCAN" \
 	"\37TXFRAG\40TDMA"


More information about the svn-src-head mailing list