svn commit: r191555 - head/sys/net80211

Sam Leffler sam at FreeBSD.org
Sun Apr 26 23:11:23 UTC 2009


Author: sam
Date: Sun Apr 26 23:11:22 2009
New Revision: 191555
URL: http://svn.freebsd.org/changeset/base/191555

Log:
  add IEEE80211_FEXT_4ADDR to indicate ieee80211_encap should do 4-address
  encapsulation when relaying frames; this reduces the cost of the test and
  enables use for situations other than "sta vap + dwds"

Modified:
  head/sys/net80211/ieee80211_ioctl.c
  head/sys/net80211/ieee80211_output.c
  head/sys/net80211/ieee80211_var.h

Modified: head/sys/net80211/ieee80211_ioctl.c
==============================================================================
--- head/sys/net80211/ieee80211_ioctl.c	Sun Apr 26 23:04:35 2009	(r191554)
+++ head/sys/net80211/ieee80211_ioctl.c	Sun Apr 26 23:11:22 2009	(r191555)
@@ -3048,8 +3048,13 @@ ieee80211_ioctl_set80211(struct ieee8021
 			    vap->iv_opmode != IEEE80211_M_STA)
 				return EINVAL;
 			vap->iv_flags |= IEEE80211_F_DWDS;
-		} else
+			if (vap->iv_opmode == IEEE80211_M_STA)
+				vap->iv_flags_ext |= IEEE80211_FEXT_4ADDR;
+		} else {
 			vap->iv_flags &= ~IEEE80211_F_DWDS;
+			if (vap->iv_opmode == IEEE80211_M_STA)
+				vap->iv_flags_ext &= ~IEEE80211_FEXT_4ADDR;
+		}
 		break;
 	case IEEE80211_IOC_INACTIVITY:
 		if (ireq->i_val)

Modified: head/sys/net80211/ieee80211_output.c
==============================================================================
--- head/sys/net80211/ieee80211_output.c	Sun Apr 26 23:04:35 2009	(r191554)
+++ head/sys/net80211/ieee80211_output.c	Sun Apr 26 23:11:22 2009	(r191555)
@@ -974,12 +974,11 @@ ieee80211_encap(struct ieee80211vap *vap
 	/*
 	 * 4-address frames need to be generated for:
 	 * o packets sent through a WDS vap (IEEE80211_M_WDS)
-	 * o packets relayed by a station operating with dynamic WDS
-	 *   (IEEE80211_M_STA+IEEE80211_F_DWDS and src address)
+	 * o packets sent through a vap marked for relaying
+	 *   (e.g. a station operating with dynamic WDS)
 	 */
 	is4addr = vap->iv_opmode == IEEE80211_M_WDS ||
-	    (vap->iv_opmode == IEEE80211_M_STA &&
-	     (vap->iv_flags & IEEE80211_F_DWDS) &&
+	    ((vap->iv_flags_ext & IEEE80211_FEXT_4ADDR) &&
 	     !IEEE80211_ADDR_EQ(eh.ether_shost, vap->iv_myaddr));
 	if (is4addr)
 		hdrsize += IEEE80211_ADDR_LEN;

Modified: head/sys/net80211/ieee80211_var.h
==============================================================================
--- head/sys/net80211/ieee80211_var.h	Sun Apr 26 23:04:35 2009	(r191554)
+++ head/sys/net80211/ieee80211_var.h	Sun Apr 26 23:11:22 2009	(r191555)
@@ -514,6 +514,7 @@ MALLOC_DECLARE(M_80211_VAP);
 #define	IEEE80211_FEXT_TSN 	 0x00000020	/* CONF: TSN enabled */
 #define	IEEE80211_FEXT_SCANREQ	 0x00000040	/* STATUS: scan req params */
 #define	IEEE80211_FEXT_RESUME	 0x00000080	/* STATUS: start on resume */
+#define	IEEE80211_FEXT_4ADDR	 0x00000100	/* CONF: apply 4-addr encap */
 #define	IEEE80211_FEXT_NONERP_PR 0x00000200	/* STATUS: non-ERP sta present*/
 #define	IEEE80211_FEXT_SWBMISS	 0x00000400	/* CONF: do bmiss in s/w */
 #define	IEEE80211_FEXT_DFS	 0x00000800	/* CONF: DFS enabled */
@@ -535,8 +536,8 @@ MALLOC_DECLARE(M_80211_VAP);
 
 #define	IEEE80211_FEXT_BITS \
 	"\20\1NONHT_PR\2INACT\3SCANWAIT\4BGSCAN\5WPS\6TSN\7SCANREQ\10RESUME" \
-	"\12NONEPR_PR\13SWBMISS\14DFS\15DOTD\22WDSLEGACY\23PROBECHAN\24HT" \
-	"\25AMDPU_TX\26AMPDU_TX\27AMSDU_TX\30AMSDU_RX\31USEHT40\32PUREN" \
+	"\0114ADDR\12NONEPR_PR\13SWBMISS\14DFS\15DOTD\22WDSLEGACY\23PROBECHAN" \
+	"\24HT\25AMDPU_TX\26AMPDU_TX\27AMSDU_TX\30AMSDU_RX\31USEHT40\32PUREN" \
 	"\33SHORTGI20\34SHORTGI40\35HTCOMPAT\36RIFS"
 
 #define	IEEE80211_FVEN_BITS	"\20"


More information about the svn-src-all mailing list