svn commit: r195420 - projects/mesh11s/sys/dev/mwl

Sam Leffler sam at FreeBSD.org
Mon Jul 6 21:42:57 UTC 2009


Author: sam
Date: Mon Jul  6 21:42:56 2009
New Revision: 195420
URL: http://svn.freebsd.org/changeset/base/195420

Log:
  add mesh support

Modified:
  projects/mesh11s/sys/dev/mwl/if_mwl.c

Modified: projects/mesh11s/sys/dev/mwl/if_mwl.c
==============================================================================
--- projects/mesh11s/sys/dev/mwl/if_mwl.c	Mon Jul  6 21:23:43 2009	(r195419)
+++ projects/mesh11s/sys/dev/mwl/if_mwl.c	Mon Jul  6 21:42:56 2009	(r195420)
@@ -420,6 +420,7 @@ mwl_attach(uint16_t devid, struct mwl_so
 		| IEEE80211_C_IBSS		/* ibss, nee adhoc, mode */
 		| IEEE80211_C_AHDEMO		/* adhoc demo mode */
 #endif
+		| IEEE80211_C_MBSS		/* mesh point link mode */
 		| IEEE80211_C_WDS		/* WDS supported */
 		| IEEE80211_C_SHPREAMBLE	/* short preamble supported */
 		| IEEE80211_C_SHSLOT		/* short slot time supported */
@@ -615,6 +616,7 @@ mwl_vap_create(struct ieee80211com *ic,
 	IEEE80211_ADDR_COPY(mac, mac0);
 	switch (opmode) {
 	case IEEE80211_M_HOSTAP:
+	case IEEE80211_M_MBSS:
 		if ((flags & IEEE80211_CLONE_MACADDR) == 0)
 			assign_address(sc, mac, flags & IEEE80211_CLONE_BSSID);
 		hvap = mwl_hal_newvap(mh, MWL_HAL_AP, mac);
@@ -686,7 +688,7 @@ mwl_vap_create(struct ieee80211com *ic,
 	vap->iv_key_delete = mwl_key_delete;
 	vap->iv_key_set = mwl_key_set;
 #ifdef MWL_HOST_PS_SUPPORT
-	if (opmode == IEEE80211_M_HOSTAP) {
+	if (opmode == IEEE80211_M_HOSTAP || opmode == IEEE80211_M_MBSS) {
 		vap->iv_update_ps = mwl_update_ps;
 		mvp->mv_set_tim = vap->iv_set_tim;
 		vap->iv_set_tim = mwl_set_tim;
@@ -706,12 +708,14 @@ mwl_vap_create(struct ieee80211com *ic,
 
 	switch (vap->iv_opmode) {
 	case IEEE80211_M_HOSTAP:
+	case IEEE80211_M_MBSS:
 	case IEEE80211_M_STA:
 		/*
 		 * Setup sta db entry for local address.
 		 */
 		mwl_localstadb(vap);
-		if (vap->iv_opmode == IEEE80211_M_HOSTAP)
+		if (vap->iv_opmode == IEEE80211_M_HOSTAP ||
+		    vap->iv_opmode == IEEE80211_M_MBSS)
 			sc->sc_napvaps++;
 		else
 			sc->sc_nstavaps++;
@@ -753,11 +757,12 @@ mwl_vap_delete(struct ieee80211vap *vap)
 	ieee80211_vap_detach(vap);
 	switch (opmode) {
 	case IEEE80211_M_HOSTAP:
+	case IEEE80211_M_MBSS:
 	case IEEE80211_M_STA:
 		KASSERT(hvap != NULL, ("no hal vap handle"));
 		(void) mwl_hal_delstation(hvap, vap->iv_myaddr);
 		mwl_hal_delvap(hvap);
-		if (opmode == IEEE80211_M_HOSTAP)
+		if (opmode == IEEE80211_M_HOSTAP || opmode == IEEE80211_M_MBSS)
 			sc->sc_napvaps--;
 		else
 			sc->sc_nstavaps--;
@@ -1281,6 +1286,7 @@ mwl_reset_vap(struct ieee80211vap *vap, 
 	/* re-setup beacons */
 	if (state == IEEE80211_S_RUN &&
 	    (vap->iv_opmode == IEEE80211_M_HOSTAP ||
+	     vap->iv_opmode == IEEE80211_M_MBSS ||
 	     vap->iv_opmode == IEEE80211_M_IBSS)) {
 		mwl_setapmode(vap, vap->iv_bss->ni_chan);
 		mwl_hal_setnprotmode(hvap,
@@ -4184,6 +4190,7 @@ mwl_localstadb(struct ieee80211vap *vap)
 			mwl_setglobalkeys(vap);
 		break;
 	case IEEE80211_M_HOSTAP:
+	case IEEE80211_M_MBSS:
 		error = mwl_hal_newstation(hvap, vap->iv_myaddr,
 		    0, 0, NULL, vap->iv_flags & IEEE80211_F_WME, 0);
 		if (error == 0)
@@ -4248,7 +4255,8 @@ mwl_newstate(struct ieee80211vap *vap, e
 		(void) mwl_peerstadb(ni, 0, 0, NULL);
 	} else if (nstate == IEEE80211_S_CSA) {
 		/* XXX move to below? */
-		if (vap->iv_opmode == IEEE80211_M_HOSTAP)
+		if (vap->iv_opmode == IEEE80211_M_HOSTAP ||
+		    vap->iv_opmode == IEEE80211_M_MBSS)
 			mwl_startcsa(vap);
 	} else if (nstate == IEEE80211_S_CAC) {
 		/* XXX move to below? */
@@ -4282,6 +4290,7 @@ mwl_newstate(struct ieee80211vap *vap, e
 		mwl_localstadb(vap);
 		switch (vap->iv_opmode) {
 		case IEEE80211_M_HOSTAP:
+		case IEEE80211_M_MBSS:
 			if (ostate == IEEE80211_S_CAC) {
 				/* enable in-service radar detection */
 				mwl_hal_setradardetection(mh,


More information about the svn-src-projects mailing list