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

Rui Paulo rpaulo at FreeBSD.org
Fri Jun 26 17:30:34 UTC 2009


Author: rpaulo
Date: Fri Jun 26 17:30:33 2009
New Revision: 195063
URL: http://svn.freebsd.org/changeset/base/195063

Log:
  Move the mesh state in ieee80211vap struct to a new struct
  ieee80211_mesh_state.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_hwmp.c
  projects/mesh11s/sys/net80211/ieee80211_mesh.c
  projects/mesh11s/sys/net80211/ieee80211_mesh.h
  projects/mesh11s/sys/net80211/ieee80211_output.c
  projects/mesh11s/sys/net80211/ieee80211_var.h

Modified: projects/mesh11s/sys/net80211/ieee80211_hwmp.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_hwmp.c	Fri Jun 26 16:57:12 2009	(r195062)
+++ projects/mesh11s/sys/net80211/ieee80211_hwmp.c	Fri Jun 26 17:30:33 2009	(r195063)
@@ -538,6 +538,7 @@ static void
 hwmp_recv_preq(struct ieee80211vap *vap, struct ieee80211_node *ni,
     const struct ieee80211_frame *wh, const struct ieee80211_meshpreq_ie *preq)
 {
+	struct ieee80211_mesh_state *ms = vap->iv_mesh;
 	struct ieee80211_hwmp_state *hs = vap->iv_hwmp;
 	struct ieee80211_hwmp_fi *fi = NULL;
 
@@ -556,7 +557,7 @@ hwmp_recv_preq(struct ieee80211vap *vap,
 	 * forwarding is disabled, discard this PREQ.
 	 */
 	if (!IEEE80211_ADDR_EQ(vap->iv_myaddr, PREQ_TADDR(0)) &&
-	    !(vap->iv_meshflags & IEEE80211_MFLAGS_FWRD)) {
+	    !(ms->ms_flags & IEEE80211_MESHFLAGS_FWD)) {
 		IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_HWMP,
 		    preq->preq_origaddr, NULL, "%s", "not accepting PREQ");
 		return;
@@ -590,7 +591,7 @@ hwmp_recv_preq(struct ieee80211vap *vap,
 		 */
 		prep.prep_flags = 0;
 		prep.prep_hopcount = 0;
-		prep.prep_ttl = vap->iv_meshttl;
+		prep.prep_ttl = ms->ms_ttl;
 		IEEE80211_ADDR_COPY(prep.prep_targetaddr, preq->preq_origaddr);
 		prep.prep_targetseq = preq->preq_origseq;
 		prep.prep_lifetime = preq->preq_lifetime;
@@ -656,7 +657,7 @@ hwmp_recv_preq(struct ieee80211vap *vap,
 				    ether_sprintf(preq->preq_origaddr));
 				prep.prep_flags = 0;
 				prep.prep_hopcount = 0;
-				prep.prep_ttl = vap->iv_meshttl;
+				prep.prep_ttl = ms->ms_ttl;
 				IEEE80211_ADDR_COPY(&prep.prep_targetaddr,
 				    preq->preq_origaddr);
 				prep.prep_targetseq = fi->fi_seq;
@@ -742,6 +743,7 @@ static void
 hwmp_recv_prep(struct ieee80211vap *vap, struct ieee80211_node *ni,
     const struct ieee80211_frame *wh, const struct ieee80211_meshprep_ie *prep)
 {
+	struct ieee80211_mesh_state *ms = vap->iv_mesh;
 	struct ieee80211_hwmp_fi *fi = NULL;
 
 	/*
@@ -749,7 +751,7 @@ hwmp_recv_prep(struct ieee80211vap *vap,
 	 * forwarding is disabled, discard this PREP.
 	 */
 	if (!IEEE80211_ADDR_EQ(vap->iv_myaddr, prep->prep_origaddr) &&
-	    !(vap->iv_meshflags & IEEE80211_MFLAGS_FWRD))
+	    !(ms->ms_flags & IEEE80211_MESHFLAGS_FWD))
 		return;
 
 	IEEE80211_NOTE(vap, IEEE80211_MSG_HWMP, ni,
@@ -840,6 +842,7 @@ static void
 hwmp_recv_perr(struct ieee80211vap *vap, struct ieee80211_node *ni,
     const struct ieee80211_frame *wh, const struct ieee80211_meshperr_ie *perr)
 {
+	struct ieee80211_mesh_state *ms = vap->iv_mesh;
 	struct ieee80211_hwmp_fi *fi = NULL;
 /* 	struct ieee80211_meshperr_ie pperr;*/
 
@@ -849,7 +852,7 @@ hwmp_recv_perr(struct ieee80211vap *vap,
 	 */
 	if (ni == vap->iv_bss ||
 	    ni->ni_mlstate != IEEE80211_NODE_MESH_ESTABLISHED ||
-	    !(vap->iv_meshflags & IEEE80211_MFLAGS_FWRD))
+	    !(ms->ms_flags & IEEE80211_MESHFLAGS_FWD))
 		return;
 
 	fi = hwmp_rt_find(vap, PERR_DADDR(0));
@@ -895,6 +898,7 @@ static void
 hwmp_recv_rann(struct ieee80211vap *vap, struct ieee80211_node *ni,
     const struct ieee80211_frame *wh, const struct ieee80211_meshrann_ie *rann)
 {
+	struct ieee80211_mesh_state *ms = vap->iv_mesh;
 	struct ieee80211_hwmp_state *hs = vap->iv_hwmp;
 	struct ieee80211_hwmp_fi *fi = NULL;
 
@@ -914,7 +918,7 @@ hwmp_recv_rann(struct ieee80211vap *vap,
 		 */
 		preq.preq_flags = 0;
 		preq.preq_hopcount = 0;
-		preq.preq_ttl = vap->iv_meshttl;
+		preq.preq_ttl = ms->ms_ttl;
 		IEEE80211_ADDR_COPY(&preq.preq_origaddr,
 		    vap->iv_myaddr);
 		preq.preq_origseq = hs->hs_seq++;
@@ -931,7 +935,7 @@ hwmp_recv_rann(struct ieee80211vap *vap,
 	 * propagate the RANN if forwarding is enabled.
 	 */
 	} else if (rann->rann_ttl > 1 &&
-	    (vap->iv_meshflags & IEEE80211_MFLAGS_FWRD)) {
+	    (ms->ms_flags & IEEE80211_MESHFLAGS_FWD)) {
 		struct ieee80211_meshrann_ie prann;
 
 		memcpy(&prann, rann, sizeof(prann));
@@ -968,6 +972,7 @@ struct ieee80211_node *
 ieee80211_hwmp_discover(struct ieee80211vap *vap,
     uint8_t dest[IEEE80211_ADDR_LEN])
 {
+	struct ieee80211_mesh_state *ms = vap->iv_mesh;
 	struct ieee80211_hwmp_state *hs = vap->iv_hwmp;
 	struct ieee80211_hwmp_fi *fi = NULL;
 	struct ieee80211_meshpreq_ie preq;
@@ -1003,7 +1008,7 @@ ieee80211_hwmp_discover(struct ieee80211
 		 */
 		preq.preq_flags = 0;
 		preq.preq_hopcount = 0;
-		preq.preq_ttl = vap->iv_meshttl;
+		preq.preq_ttl = ms->ms_ttl;
 		preq.preq_id = fi->fi_preqid;
 		IEEE80211_ADDR_COPY(preq.preq_origaddr, vap->iv_myaddr);
 		preq.preq_origseq = fi->fi_seq;

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.c	Fri Jun 26 16:57:12 2009	(r195062)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.c	Fri Jun 26 17:30:33 2009	(r195063)
@@ -131,18 +131,28 @@ mesh_vdetach(struct ieee80211vap *vap)
 	ieee80211_iterate_nodes(&vap->iv_ic->ic_sta, mesh_vdetach_peers,
 	    NULL);
 	ieee80211_hwmp_vdetach(vap);
+	free(vap->iv_mesh, M_80211_VAP);
 }
 
 static void
 mesh_vattach(struct ieee80211vap *vap)
 {
+	struct ieee80211_mesh_state *ms;
+
 	vap->iv_newstate = mesh_newstate;
 	vap->iv_input = mesh_input;
 	vap->iv_opdetach = mesh_vdetach;
 	vap->iv_recv_mgmt = mesh_recv_mgmt;
-	vap->iv_meshseq = 0;
-	vap->iv_meshflags = (IEEE80211_MFLAGS_AP | IEEE80211_MFLAGS_FWRD);
-	vap->iv_meshttl = 31;	/* default TTL */
+	ms = malloc(sizeof(struct ieee80211_mesh_state), M_80211_VAP,
+            M_NOWAIT | M_ZERO);
+        if (ms == NULL) {
+                printf("%s: couldn't alloc MBSS state\n", __func__);
+                return;
+        }
+	vap->iv_mesh = ms;
+	ms->ms_seq = 0;
+	ms->ms_flags = (IEEE80211_MESHFLAGS_AP | IEEE80211_MESHFLAGS_FWD);
+	ms->ms_ttl = 31;	/* default TTL */
 	ieee80211_hwmp_vattach(vap);
 }
 
@@ -152,6 +162,7 @@ mesh_vattach(struct ieee80211vap *vap)
 static int
 mesh_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
 {
+	struct ieee80211_mesh_state *ms = vap->iv_mesh;
 	struct ieee80211com *ic = vap->iv_ic;
 	struct ieee80211_node *ni;
 	enum ieee80211_state ostate;
@@ -189,7 +200,7 @@ mesh_newstate(struct ieee80211vap *vap, 
 		case IEEE80211_S_INIT:
 			if (vap->iv_des_chan != IEEE80211_CHAN_ANYC &&
 			    !IEEE80211_IS_CHAN_RADAR(vap->iv_des_chan) &&
-			    vap->iv_meshidlen != 0) {
+			    ms->ms_idlen != 0) {
 				/*
 				 * Already have a channel and a mesh ID; bypass
 				 * the scan and startup immediately.
@@ -392,6 +403,7 @@ static int
 mesh_input(struct ieee80211_node *ni, struct mbuf *m, int rssi, int noise)
 {
 	struct ieee80211vap *vap = ni->ni_vap;
+	struct ieee80211_mesh_state *ms = vap->iv_mesh;
 	struct ieee80211com *ic = ni->ni_ic;
 	struct ifnet *ifp = vap->iv_ifp;
 	struct ieee80211_frame *wh;
@@ -504,7 +516,7 @@ mesh_input(struct ieee80211_node *ni, st
 		    !IEEE80211_ADDR_EQ(vap->iv_myaddr, wh->i_addr3) &&
 		    !IEEE80211_ADDR_EQ(wh->i_addr1, wh->i_addr3) &&
 		    mc->mc_ttl > 0 &&
-		    (vap->iv_meshflags & IEEE80211_MFLAGS_FWRD))
+		    (ms->ms_flags & IEEE80211_MESHFLAGS_FWD))
 			mesh_forward(vap, m);
 		/*
 		 * Next up, any fragmentation.
@@ -628,6 +640,7 @@ mesh_recv_mgmt(struct ieee80211_node *ni
     int rssi, int noise)
 {
 	struct ieee80211vap *vap = ni->ni_vap;
+	struct ieee80211_mesh_state *ms = vap->iv_mesh;
 	struct ieee80211com *ic = ni->ni_ic;
 	struct ieee80211_frame *wh;
 	uint8_t *frm, *efrm;
@@ -682,7 +695,7 @@ mesh_recv_mgmt(struct ieee80211_node *ni
 		 * Ignore non-mesh STAs and STAs for other mesh networks.
 		 */
 		if (scan.meshid &&
-		    memcmp(scan.meshid+2, vap->iv_meshid, vap->iv_meshidlen) != 0) {
+		    memcmp(scan.meshid+2, ms->ms_id, ms->ms_idlen) != 0) {
 			IEEE80211_NOTE(vap, IEEE80211_MSG_MESH, ni,
 			    "beacon not for our mesh (%s)", scan.meshid+2);
 			return;
@@ -707,7 +720,7 @@ mesh_recv_mgmt(struct ieee80211_node *ni
 		 * Try to peer with this node if possible.
 		 */
 		if (ni != vap->iv_bss &&
-		    vap->iv_meshflags & IEEE80211_MFLAGS_AP &&
+		    ms->ms_flags & IEEE80211_MESHFLAGS_AP &&
 		    ni->ni_mlstate == IEEE80211_NODE_MESH_IDLE) {
 			union ieee80211_send_action_args vargs;
 
@@ -1315,10 +1328,11 @@ static inline int
 mesh_verify_meshid(struct ieee80211vap *vap,
     struct ieee80211_meshid_ie *meshid)
 {
+	struct ieee80211_mesh_state *ms = vap->iv_mesh;
+
 	if (meshid == NULL)
 		return 1;
-
-	return memcmp(vap->iv_meshid, (uint8_t *)&meshid[1], vap->iv_meshidlen);
+	return memcmp(ms->ms_id, (uint8_t *)&meshid[1], ms->ms_idlen);
 }
 
 /*
@@ -1402,14 +1416,14 @@ mesh_verify_meshconf(struct ieee80211vap
 uint8_t *
 ieee80211_add_meshid(uint8_t *frm, struct ieee80211vap *vap)
 {
+	struct ieee80211_mesh_state *ms = vap->iv_mesh;
 
 	KASSERT(vap->iv_opmode == IEEE80211_M_MBSS, ("not a mbss vap"));
 
 	*frm++ = IEEE80211_ELEMID_MESHID;
-	*frm++ = vap->iv_meshidlen;
-	memcpy(frm, vap->iv_meshid, vap->iv_meshidlen);
-
-	return frm + vap->iv_meshidlen;
+	*frm++ = ms->ms_idlen;
+	memcpy(frm, ms->ms_id, ms->ms_idlen);
+	return frm + ms->ms_idlen;
 }
 
 /*
@@ -1434,6 +1448,7 @@ uint8_t *
 ieee80211_add_meshconf(uint8_t *frm, struct ieee80211vap *vap)
 {
 	uint8_t neighs = 0;
+	struct ieee80211_mesh_state *ms = vap->iv_mesh;
 	struct ieee80211_meshconf_ie ie = {
 		.conf_ie	= IEEE80211_ELEMID_MESHCONF,
 		.conf_len	= sizeof(struct ieee80211_meshconf_ie) - 2,
@@ -1454,11 +1469,11 @@ ieee80211_add_meshconf(uint8_t *frm, str
 	ieee80211_iterate_nodes(&vap->iv_ic->ic_sta, meshconf_neighbors,
 	    &neighs);
 	ie.conf_form = neighs << 1;
-	if (vap->iv_meshflags & IEEE80211_MFLAGS_MP)
+	if (ms->ms_flags & IEEE80211_MESHFLAGS_PORTAL)
 		ie.conf_form |= IEEE80211_MESHCONF_FORM_MP;
-	if (vap->iv_meshflags & IEEE80211_MFLAGS_AP)
+	if (ms->ms_flags & IEEE80211_MESHFLAGS_AP)
 		ie.conf_cap |= IEEE80211_MESHCONF_CAP_AP;
-	if (vap->iv_meshflags & IEEE80211_MFLAGS_FWRD)
+	if (ms->ms_flags & IEEE80211_MESHFLAGS_FWD)
 		ie.conf_cap |= IEEE80211_MESHCONF_CAP_FWRD;
 	memcpy(frm, &ie, sizeof(ie));
 	return frm + sizeof(ie);
@@ -1554,11 +1569,9 @@ ieee80211_airtime_calc(struct ieee80211_
 uint8_t *
 ieee80211_add_meshlmetric(uint8_t *frm, uint32_t metric)
 {
-
 	*frm++ = IEEE80211_ELEMID_MESHLINK;
 	*frm++ = 4;
 	ADDWORD(frm, metric);
-
 	return frm;
 }
 #undef ADDSHORT
@@ -1568,6 +1581,7 @@ void
 ieee80211_create_mbss(struct ieee80211vap *vap, struct ieee80211_channel *chan)
 {
 	struct ieee80211com *ic = vap->iv_ic;
+	struct ieee80211_mesh_state *ms = vap->iv_mesh;
 	struct ieee80211_node *ni;
 
 	IEEE80211_DPRINTF(vap, IEEE80211_MSG_MESH,
@@ -1580,8 +1594,8 @@ ieee80211_create_mbss(struct ieee80211va
 		return;
 	}
 	IEEE80211_ADDR_COPY(ni->ni_bssid, vap->iv_myaddr);
-	ni->ni_meshidlen = vap->iv_meshidlen;
-	memcpy(ni->ni_meshid, vap->iv_meshid, ni->ni_meshidlen);
+	ni->ni_meshidlen = ms->ms_idlen;
+	memcpy(ni->ni_meshid, ms->ms_id, ni->ni_meshidlen);
 	ni->ni_intval = ic->ic_bintval;
 	/* NB: mesh nodes must be QoS capable */
 	ni->ni_flags |= IEEE80211_NODE_QOS;
@@ -1638,6 +1652,7 @@ ieee80211_create_mbss(struct ieee80211va
 static int
 mesh_ioctl_get80211(struct ieee80211vap *vap, struct ieee80211req *ireq)
 {
+	struct ieee80211_mesh_state *ms = vap->iv_mesh;
 	int error;
 	uint8_t tmpmeshid[IEEE80211_NWID_LEN];
 
@@ -1647,18 +1662,18 @@ mesh_ioctl_get80211(struct ieee80211vap 
 	error = 0;
 	switch (ireq->i_type) {
 	case IEEE80211_IOC_MESH_ID:
-		ireq->i_len = vap->iv_meshidlen;
-		memcpy(tmpmeshid, vap->iv_meshid, ireq->i_len);
+		ireq->i_len = ms->ms_idlen;
+		memcpy(tmpmeshid, ms->ms_id, ireq->i_len);
 		error = copyout(tmpmeshid, ireq->i_data, ireq->i_len);
 		break;
 	case IEEE80211_IOC_MESH_AP:
-		ireq->i_val = (vap->iv_meshflags & IEEE80211_MFLAGS_AP) != 0;
+		ireq->i_val = (ms->ms_flags & IEEE80211_MESHFLAGS_AP) != 0;
 		break;
 	case IEEE80211_IOC_MESH_FWRD:
-		ireq->i_val = (vap->iv_meshflags & IEEE80211_MFLAGS_FWRD) != 0;
+		ireq->i_val = (ms->ms_flags & IEEE80211_MESHFLAGS_FWD) != 0;
 		break;
 	case IEEE80211_IOC_MESH_TTL:
-		ireq->i_val = vap->iv_meshttl;
+		ireq->i_val = ms->ms_ttl;
 		break;
 	default:
 		return ENOSYS;
@@ -1671,6 +1686,7 @@ IEEE80211_IOCTL_GET(mesh, mesh_ioctl_get
 static int
 mesh_ioctl_set80211(struct ieee80211vap *vap, struct ieee80211req *ireq)
 {
+	struct ieee80211_mesh_state *ms = vap->iv_mesh;
 	int error;
 	uint8_t tmpmeshid[IEEE80211_NWID_LEN];
 
@@ -1685,24 +1701,24 @@ mesh_ioctl_set80211(struct ieee80211vap 
 		error = copyin(ireq->i_data, tmpmeshid, ireq->i_len);
 		if (error)
 			break;
-		memset(vap->iv_meshid, 0, IEEE80211_NWID_LEN);
-		vap->iv_meshidlen = ireq->i_len;
-		memcpy(vap->iv_meshid, tmpmeshid, ireq->i_len);
+		memset(ms->ms_id, 0, IEEE80211_NWID_LEN);
+		ms->ms_idlen = ireq->i_len;
+		memcpy(ms->ms_id, tmpmeshid, ireq->i_len);
 		break;
 	case IEEE80211_IOC_MESH_AP:
 		if (ireq->i_val)
-			vap->iv_meshflags |= IEEE80211_MFLAGS_AP;
+			ms->ms_flags |= IEEE80211_MESHFLAGS_AP;
 		else
-			vap->iv_meshflags &= ~IEEE80211_MFLAGS_AP;
+			ms->ms_flags &= ~IEEE80211_MESHFLAGS_AP;
 		break;
 	case IEEE80211_IOC_MESH_FWRD:
 		if (ireq->i_val)
-			vap->iv_meshflags |= IEEE80211_MFLAGS_FWRD;
+			ms->ms_flags |= IEEE80211_MESHFLAGS_FWD;
 		else
-			vap->iv_meshflags &= ~IEEE80211_MFLAGS_FWRD;
+			ms->ms_flags &= ~IEEE80211_MESHFLAGS_FWD;
 		break;
 	case IEEE80211_IOC_MESH_TTL:
-		vap->iv_meshttl = (uint8_t) ireq->i_val;
+		ms->ms_ttl = (uint8_t) ireq->i_val;
 		break;
 	default:
 		return ENOSYS;

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.h	Fri Jun 26 16:57:12 2009	(r195062)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.h	Fri Jun 26 17:30:33 2009	(r195063)
@@ -371,6 +371,17 @@ struct ieee80211_meshcntl_ae11 {
 };
 
 #ifdef _KERNEL
+struct ieee80211_mesh_state {
+	int			ms_idlen;
+	uint8_t			ms_id[IEEE80211_MESHID_LEN];
+	uint32_t		ms_seq;	/* seq no for meshcntl */
+	uint8_t			ms_ttl;	/* mesh ttl set in packets */
+#define IEEE80211_MESHFLAGS_AP		0x01	/* accept peers */
+#define IEEE80211_MESHFLAGS_PORTAL	0x02	/* mesh portal role */
+#define IEEE80211_MESHFLAGS_FWD		0x04	/* forward packets */
+	uint8_t			ms_flags;
+
+};
 void		ieee80211_mesh_attach(struct ieee80211com *);
 void		ieee80211_mesh_detach(struct ieee80211com *);
 void		ieee80211_parse_meshid(struct ieee80211_node *, const uint8_t *);

Modified: projects/mesh11s/sys/net80211/ieee80211_output.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_output.c	Fri Jun 26 16:57:12 2009	(r195062)
+++ projects/mesh11s/sys/net80211/ieee80211_output.c	Fri Jun 26 17:30:33 2009	(r195063)
@@ -567,6 +567,7 @@ ieee80211_send_action(struct ieee80211_n
 #define	SM(_v, _f)	(((_v) << _f##_S) & _f)
 	struct ieee80211vap *vap = ni->ni_vap;
 	struct ieee80211com *ic = ni->ni_ic;
+	struct ieee80211_mesh_state *ms = vap->iv_mesh;
 	struct ieee80211_bpf_params params;
 	const struct ieee80211_rateset *rs;
 	struct mbuf *m;
@@ -598,7 +599,7 @@ ieee80211_send_action(struct ieee80211_n
 			+ 2 + IEEE80211_RATE_SIZE
 			+ 2 + (IEEE80211_RATE_MAXSIZE - IEEE80211_RATE_SIZE)
 			+ sizeof(struct ieee80211_meshpeerver_ie)
-			+ 2 + vap->iv_meshidlen		/* Mesh ID */
+			+ 2 + ms->ms_idlen		/* Mesh ID */
 			+ sizeof(struct ieee80211_meshconf_ie)
 			+ sizeof(struct ieee80211_meshpeer_ie);
 		break;
@@ -1242,6 +1243,7 @@ ieee80211_encap(struct ieee80211vap *vap
 {
 #define	WH4(wh)	((struct ieee80211_frame_addr4 *)(wh))
 	struct ieee80211com *ic = ni->ni_ic;
+	struct ieee80211_mesh_state *ms = vap->iv_mesh;
 	struct ether_header eh;
 	struct ieee80211_frame *wh;
 	struct ieee80211_key *key;
@@ -1475,8 +1477,8 @@ ieee80211_encap(struct ieee80211vap *vap
 			KASSERT(0, ("meshae %d", meshae));
 			break;
 		}
-		mc->mc_ttl = vap->iv_meshttl;
-		seq = vap->iv_meshseq++;
+		mc->mc_ttl = ms->ms_ttl;
+		seq = ms->ms_seq++;
 		mc->mc_seq[0] = seq & 0xff;
 		mc->mc_seq[1] = (seq >> 8) & 0xff;
 		mc->mc_seq[2] = (seq >> 16) & 0xff;

Modified: projects/mesh11s/sys/net80211/ieee80211_var.h
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_var.h	Fri Jun 26 16:57:12 2009	(r195062)
+++ projects/mesh11s/sys/net80211/ieee80211_var.h	Fri Jun 26 17:30:33 2009	(r195063)
@@ -314,6 +314,7 @@ struct ieee80211com {
 
 struct ieee80211_aclator;
 struct ieee80211_tdma_state;
+struct ieee80211_mesh_state;
 struct ieee80211_hwmp_state;
 
 struct ieee80211vap {
@@ -394,15 +395,6 @@ struct ieee80211vap {
 						/* set/unset aid pwrsav state */
 	int			iv_csa_count;	/* count for doing CSA */
 
-	int			iv_meshidlen;
-	uint8_t			iv_meshid[IEEE80211_MESHID_LEN];
-	uint32_t		iv_meshseq;	/* seq no for meshcntl */
-	uint8_t			iv_meshttl;	/* mesh ttl set in packets */
-#define	IEEE80211_MFLAGS_AP	0x01	/* accept peers */
-#define	IEEE80211_MFLAGS_MP	0x02	/* mesh portal role */
-#define	IEEE80211_MFLAGS_FWRD	0x04	/* forward packets */
-	uint8_t			iv_meshflags;
-
 	struct ieee80211_node	*iv_bss;	/* information for this node */
 	struct ieee80211_txparam iv_txparms[IEEE80211_MODE_MAX];
 	uint16_t		iv_rtsthreshold;
@@ -438,6 +430,7 @@ struct ieee80211vap {
 	void			*iv_as;		/* private aclator state */
 
 	struct ieee80211_tdma_state *iv_tdma;	/* tdma state */
+	struct ieee80211_mesh_state *iv_mesh;	/* MBSS state */
 	struct ieee80211_hwmp_state *iv_hwmp;	/* HWMP state */
 
 	/* operate-mode detach hook */


More information about the svn-src-projects mailing list