summaryrefslogtreecommitdiffstats
path: root/sys/net80211/ieee80211_input.c
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2012-03-04 05:49:39 +0000
committeradrian <adrian@FreeBSD.org>2012-03-04 05:49:39 +0000
commit8d7335fa92b63c3acd810fb4432ac1d312739f25 (patch)
treea5fc6ce807c0d87dbd87d4f0b33c75c01fdb8b0d /sys/net80211/ieee80211_input.c
parent77002eeb6cfd162e6ae4999ec8029a1079f7344f (diff)
downloadFreeBSD-src-8d7335fa92b63c3acd810fb4432ac1d312739f25.zip
FreeBSD-src-8d7335fa92b63c3acd810fb4432ac1d312739f25.tar.gz
* Added IEEE80211_ACTION_CAT_MESH in ieee80211.h as specified amendment spec;
* Moved old categories as specified by D4.0 to be action fields of MESH category as specified in amendment spec; * Modified functions to use MESH category and its action fields: + ieee80211_send_action_register + ieee80211_send_action + ieee80211_recv_action_register +ieee80211_recv_action; * Modified ieee80211_hwmp_init and hwmp_send_action so they uses correct action fields as specified in amendment spec; * Modified ieee80211_parse_action so that it verifies MESH frames. * Change Mesh Link Metric to use one information element as amendment spec. Draft 4.0 defined two different information elements for request and response. Submitted by: monthadar@gmail.com
Diffstat (limited to 'sys/net80211/ieee80211_input.c')
-rw-r--r--sys/net80211/ieee80211_input.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/sys/net80211/ieee80211_input.c b/sys/net80211/ieee80211_input.c
index d54051e..e40a713 100644
--- a/sys/net80211/ieee80211_input.c
+++ b/sys/net80211/ieee80211_input.c
@@ -760,6 +760,37 @@ ieee80211_parse_action(struct ieee80211_node *ni, struct mbuf *m)
break;
}
break;
+ case IEEE80211_ACTION_CAT_MESH:
+ switch (ia->ia_action) {
+ case IEEE80211_ACTION_MESH_LMETRIC:
+ /*
+ * XXX: verification is true only if we are using
+ * Airtime link metric (default)
+ */
+ IEEE80211_VERIFY_LENGTH(efrm - frm,
+ sizeof(struct ieee80211_meshlmetric_ie),
+ return EINVAL);
+ break;
+ case IEEE80211_ACTION_MESH_HWMP:
+ /* verify something */
+ break;
+ case IEEE80211_ACTION_MESH_GANN:
+ case IEEE80211_ACTION_MESH_CC:
+ case IEEE80211_ACTION_MESH_MCCA_SREQ:
+ case IEEE80211_ACTION_MESH_MCCA_SREP:
+ case IEEE80211_ACTION_MESH_MCCA_AREQ:
+ case IEEE80211_ACTION_MESH_MCCA_ADVER:
+ case IEEE80211_ACTION_MESH_MCCA_TRDOWN:
+ case IEEE80211_ACTION_MESH_TBTT_REQ:
+ case IEEE80211_ACTION_MESH_TBTT_RES:
+ /* reject these early on, not implemented */
+ IEEE80211_DISCARD(vap,
+ IEEE80211_MSG_ELEMID | IEEE80211_MSG_INPUT,
+ wh, NULL, "not implemented yet, act=0x%02X",
+ ia->ia_action);
+ return EINVAL;
+ }
+ break;
}
return 0;
}
OpenPOWER on IntegriCloud