diff options
author | adrian <adrian@FreeBSD.org> | 2012-03-04 05:49:39 +0000 |
---|---|---|
committer | adrian <adrian@FreeBSD.org> | 2012-03-04 05:49:39 +0000 |
commit | 8d7335fa92b63c3acd810fb4432ac1d312739f25 (patch) | |
tree | a5fc6ce807c0d87dbd87d4f0b33c75c01fdb8b0d /sys/net80211/ieee80211_input.c | |
parent | 77002eeb6cfd162e6ae4999ec8029a1079f7344f (diff) | |
download | FreeBSD-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.c | 31 |
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; } |