svn commit: r191631 - projects/mesh11s/sys/net80211

Rui Paulo rpaulo at FreeBSD.org
Tue Apr 28 17:41:19 UTC 2009


Author: rpaulo
Date: Tue Apr 28 17:41:18 2009
New Revision: 191631
URL: http://svn.freebsd.org/changeset/base/191631

Log:
  Mesh nodes always set the BSSID to zero when transmitting beacons and
  probe responses.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_output.c

Modified: projects/mesh11s/sys/net80211/ieee80211_output.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_output.c	Tue Apr 28 17:36:30 2009	(r191630)
+++ projects/mesh11s/sys/net80211/ieee80211_output.c	Tue Apr 28 17:41:18 2009	(r191631)
@@ -420,11 +420,11 @@ ieee80211_send_setup(
 	const uint8_t bssid[IEEE80211_ADDR_LEN])
 {
 #define	WH4(wh)	((struct ieee80211_frame_addr4 *)wh)
+	static const uint8_t zerobssid[IEEE80211_ADDR_LEN];
+	struct ieee80211vap *vap = ni->ni_vap;
 
 	wh->i_fc[0] = IEEE80211_FC0_VERSION_0 | type;
 	if ((type & IEEE80211_FC0_TYPE_MASK) == IEEE80211_FC0_TYPE_DATA) {
-		struct ieee80211vap *vap = ni->ni_vap;
-
 		switch (vap->iv_opmode) {
 		case IEEE80211_M_STA:
 			wh->i_fc[1] = IEEE80211_FC1_DIR_TODS;
@@ -462,7 +462,10 @@ ieee80211_send_setup(
 		wh->i_fc[1] = IEEE80211_FC1_DIR_NODS;
 		IEEE80211_ADDR_COPY(wh->i_addr1, da);
 		IEEE80211_ADDR_COPY(wh->i_addr2, sa);
-		IEEE80211_ADDR_COPY(wh->i_addr3, bssid);
+		if (vap->iv_opmode == IEEE80211_M_MBSS)
+			IEEE80211_ADDR_COPY(wh->i_addr3, zerobssid);
+		else
+			IEEE80211_ADDR_COPY(wh->i_addr3, bssid);
 	}
 	*(uint16_t *)&wh->i_dur[0] = 0;
 	*(uint16_t *)&wh->i_seq[0] =
@@ -2470,6 +2473,7 @@ struct mbuf *
 ieee80211_beacon_alloc(struct ieee80211_node *ni,
 	struct ieee80211_beacon_offsets *bo)
 {
+	static const uint8_t zerobssid[IEEE80211_ADDR_LEN];
 	struct ieee80211vap *vap = ni->ni_vap;
 	struct ieee80211com *ic = ni->ni_ic;
 	struct ifnet *ifp = vap->iv_ifp;
@@ -2560,7 +2564,10 @@ ieee80211_beacon_alloc(struct ieee80211_
 	*(uint16_t *)wh->i_dur = 0;
 	IEEE80211_ADDR_COPY(wh->i_addr1, ifp->if_broadcastaddr);
 	IEEE80211_ADDR_COPY(wh->i_addr2, vap->iv_myaddr);
-	IEEE80211_ADDR_COPY(wh->i_addr3, ni->ni_bssid);
+	if (vap->iv_opmode == IEEE80211_M_MBSS)
+		IEEE80211_ADDR_COPY(wh->i_addr3, zerobssid);
+	else
+		IEEE80211_ADDR_COPY(wh->i_addr3, ni->ni_bssid);
 	*(uint16_t *)wh->i_seq = 0;
 
 	return m;


More information about the svn-src-projects mailing list