Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 3 Jul 2009 16:01:40 +0000 (UTC)
From:      Rui Paulo <rpaulo@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r195316 - projects/mesh11s/sys/net80211
Message-ID:  <200907031601.n63G1eTs082288@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rpaulo
Date: Fri Jul  3 16:01:40 2009
New Revision: 195316
URL: http://svn.freebsd.org/changeset/base/195316

Log:
  Go back at the state where '+2' isn't added. It allows one handler to
  cope with multiple actions or codes.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_action.c
  projects/mesh11s/sys/net80211/ieee80211_hwmp.c
  projects/mesh11s/sys/net80211/ieee80211_mesh.c

Modified: projects/mesh11s/sys/net80211/ieee80211_action.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_action.c	Fri Jul  3 15:46:19 2009	(r195315)
+++ projects/mesh11s/sys/net80211/ieee80211_action.c	Fri Jul  3 16:01:40 2009	(r195316)
@@ -272,6 +272,6 @@ ieee80211_recv_action(struct ieee80211_n
 			f = vendor_recv_action[ia->ia_action];
 		break;
 	}
-	return f(ni, frm + sizeof(struct ieee80211_action), efrm);
+	return f(ni, frm, efrm);
 #undef N
 }

Modified: projects/mesh11s/sys/net80211/ieee80211_hwmp.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_hwmp.c	Fri Jul  3 15:46:19 2009	(r195315)
+++ projects/mesh11s/sys/net80211/ieee80211_hwmp.c	Fri Jul  3 16:01:40 2009	(r195316)
@@ -327,14 +327,14 @@ hwmp_recv_action_meshpath_preq(struct ie
 	struct ieee80211_meshpreq_ie preq;
 	/* XXX true for multi-hop action frames? */
 	const struct ieee80211_frame *wh = (const struct ieee80211_frame *)
-	    (frm - sizeof(struct ieee80211_frame) -
-		sizeof(struct ieee80211_action));
+	    (frm - sizeof(struct ieee80211_frame));
+	const uint8_t *iefrm = frm + 2; /* action + code */
 
-	while (efrm - frm > 1) {
-		IEEE80211_VERIFY_LENGTH(efrm - frm, frm[1] + 2, return 0);
-		if (*frm == IEEE80211_ELEMID_MESHPREQ) {
+	while (efrm - iefrm > 1) {
+		IEEE80211_VERIFY_LENGTH(efrm - iefrm, iefrm[1] + 2, return 0);
+		if (*iefrm == IEEE80211_ELEMID_MESHPREQ) {
 			const struct ieee80211_meshpreq_ie *mpreq =
-			    (const struct ieee80211_meshpreq_ie *) frm;
+			    (const struct ieee80211_meshpreq_ie *) iefrm;
 			memcpy(&preq, mpreq, sizeof(preq));
 			preq.preq_id = LE_READ_4(&mpreq->preq_id);
 			preq.preq_origseq = LE_READ_4(&mpreq->preq_origseq);
@@ -346,7 +346,7 @@ hwmp_recv_action_meshpath_preq(struct ie
 			hwmp_recv_preq(vap, ni, wh, &preq);
 			return 0;
 		}
-		frm += frm[1] + 2;
+		iefrm += iefrm[1] + 2;
 	}
 	IEEE80211_DISCARD(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_HWMP,
 	    wh, NULL, "%s", "PREQ without IE");
@@ -362,14 +362,14 @@ hwmp_recv_action_meshpath_prep(struct ie
 	struct ieee80211_meshprep_ie prep;
 	/* XXX true for multi-hop action frames? */
 	const struct ieee80211_frame *wh = (const struct ieee80211_frame *)
-	    (frm - sizeof(struct ieee80211_frame) -
-		sizeof(struct ieee80211_action));
+	    (frm - sizeof(struct ieee80211_frame));
+	const uint8_t *iefrm = frm + 2; /* action + code */
 
-	while (efrm - frm > 1) {
-		IEEE80211_VERIFY_LENGTH(efrm - frm, frm[1] + 2, return 0);
-		if (*frm == IEEE80211_ELEMID_MESHPREP) {
+	while (efrm - iefrm > 1) {
+		IEEE80211_VERIFY_LENGTH(efrm - iefrm, iefrm[1] + 2, return 0);
+		if (*iefrm == IEEE80211_ELEMID_MESHPREP) {
 			const struct ieee80211_meshprep_ie *mprep =
-			    (const struct ieee80211_meshprep_ie *) frm;
+			    (const struct ieee80211_meshprep_ie *) iefrm;
 			memcpy(&prep, mprep, sizeof(prep));
 			prep.prep_targetseq = LE_READ_4(&mprep->prep_targetseq);
 			prep.prep_lifetime = LE_READ_4(&mprep->prep_lifetime);
@@ -378,7 +378,7 @@ hwmp_recv_action_meshpath_prep(struct ie
 			hwmp_recv_prep(vap, ni, wh, &prep);
 			return 0;
 		}
-		frm += frm[1] + 2;
+		iefrm += iefrm[1] + 2;
 	}
 	IEEE80211_DISCARD(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_HWMP,
 	    wh, NULL, "%s", "PREP without IE");
@@ -394,14 +394,14 @@ hwmp_recv_action_meshpath_perr(struct ie
 	struct ieee80211vap *vap = ni->ni_vap;
 	/* XXX true for multi-hop action frames? */
 	const struct ieee80211_frame *wh = (const struct ieee80211_frame *)
-	    (frm - sizeof(struct ieee80211_frame) -
-		sizeof(struct ieee80211_action));
+	    (frm - sizeof(struct ieee80211_frame));
+	const uint8_t *iefrm = frm + 2; /* action + code */
 
-	while (efrm - frm > 1) {
-		IEEE80211_VERIFY_LENGTH(efrm - frm, frm[1] + 2, return 0);
-		if (*frm == IEEE80211_ELEMID_MESHPERR) {
+	while (efrm - iefrm > 1) {
+		IEEE80211_VERIFY_LENGTH(efrm - iefrm, iefrm[1] + 2, return 0);
+		if (*iefrm == IEEE80211_ELEMID_MESHPERR) {
 			const struct ieee80211_meshperr_ie *mperr =
-			    (const struct ieee80211_meshperr_ie *) frm;
+			    (const struct ieee80211_meshperr_ie *) iefrm;
 			memcpy(&perr, mperr, sizeof(perr));
 			/* XXX > 1 target */
 			perr.perr_dests[0].dest_seq =
@@ -409,7 +409,7 @@ hwmp_recv_action_meshpath_perr(struct ie
 			hwmp_recv_perr(vap, ni, wh, &perr);
 			return 0;
 		}
-		frm += frm[1] + 2;
+		iefrm += iefrm[1] + 2;
 	}
 	IEEE80211_DISCARD(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_HWMP,
 	    wh, NULL, "%s", "PERR without IE");
@@ -425,20 +425,20 @@ hwmp_recv_action_meshpath_rann(struct ie
 	struct ieee80211_meshrann_ie rann;
 	/* XXX true for multi-hop action frames? */
 	const struct ieee80211_frame *wh = (const struct ieee80211_frame *)
-	    (frm - sizeof(struct ieee80211_frame) -
-		sizeof(struct ieee80211_action));
+	    (frm - sizeof(struct ieee80211_frame));
+	const uint8_t *iefrm = frm + 2; /* action + code */
 
-	while (efrm - frm > 1) {
-		IEEE80211_VERIFY_LENGTH(efrm - frm, frm[1] + 2, return 0);
-		if (*frm == IEEE80211_ELEMID_MESHRANN) {
+	while (efrm - iefrm > 1) {
+		IEEE80211_VERIFY_LENGTH(efrm - iefrm, iefrm[1] + 2, return 0);
+		if (*iefrm == IEEE80211_ELEMID_MESHRANN) {
 			const struct ieee80211_meshrann_ie *mrann =
-			    (const struct ieee80211_meshrann_ie *) frm;
+			    (const struct ieee80211_meshrann_ie *) iefrm;
 			rann.rann_seq = LE_READ_4(&mrann->rann_seq);
 			rann.rann_metric = LE_READ_4(&mrann->rann_metric);
 			hwmp_recv_rann(vap, ni, wh, &rann);
 			return 0;
 		}
-		frm += frm[1] + 2;
+		iefrm += iefrm[1] + 2;
 	}
 	IEEE80211_DISCARD(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_HWMP,
 	    wh, NULL, "%s", "RANN without IE");

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.c	Fri Jul  3 15:46:19 2009	(r195315)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.c	Fri Jul  3 16:01:40 2009	(r195316)
@@ -1104,8 +1104,8 @@ mesh_recv_action_meshpeering_open(struct
 	const struct ieee80211_meshpeer_ie *meshpeer;
 	uint16_t args[3];
 
-	/* +2 for capabilites */
-	meshpeer = mesh_parse_meshpeering_action(ni, wh, frm+2, efrm, &ie);
+	/* +2+2 for action + code + capabilites */
+	meshpeer = mesh_parse_meshpeering_action(ni, wh, frm+2+2, efrm, &ie);
 	if (meshpeer == NULL) {
 		return 0;
 	}
@@ -1238,8 +1238,8 @@ mesh_recv_action_meshpeering_confirm(str
 	const struct ieee80211_meshpeer_ie *meshpeer;
 	uint16_t args[3];
 
-	/* +2+2+2 for capabilites + status code + AID */
-	meshpeer = mesh_parse_meshpeering_action(ni, wh, frm+2+2+2, efrm, &ie);
+	/* +2+2+2+2 for action + code + capabilites + status code + AID */
+	meshpeer = mesh_parse_meshpeering_action(ni, wh, frm+2+2+2+2, efrm, &ie);
 	if (meshpeer == NULL) {
 		return 0;
 	}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907031601.n63G1eTs082288>