svn commit: r195316 - projects/mesh11s/sys/net80211
Rui Paulo
rpaulo at FreeBSD.org
Fri Jul 3 16:01:41 UTC 2009
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;
}
More information about the svn-src-projects
mailing list