diff options
author | monthadar <monthadar@FreeBSD.org> | 2013-02-07 21:21:40 +0000 |
---|---|---|
committer | monthadar <monthadar@FreeBSD.org> | 2013-02-07 21:21:40 +0000 |
commit | aeaacfbfb306ce87345043b9801b6c37972af99c (patch) | |
tree | d253664a26038736e4f28be168a8b0ba47d674c6 /sys/net80211/ieee80211_action.c | |
parent | 3f965e686d057f5a9c3230680185415dc3356a1a (diff) | |
download | FreeBSD-src-aeaacfbfb306ce87345043b9801b6c37972af99c.zip FreeBSD-src-aeaacfbfb306ce87345043b9801b6c37972af99c.tar.gz |
Mesh: management mesh action frames are to be discarded
when not peered.
* Modified ieee80211_recv_action to check if neighbour is peered for
IEEE80211_ACTION_CAT_MESH frames, if not frame is discarded. This is
according to IEEE802.11 2012 standard;
* Removed duplicate checks in each hwmp_recv_* handlers because HWMP
is a subtype of mesh action;
Approved by: adrian (mentor)
Diffstat (limited to 'sys/net80211/ieee80211_action.c')
-rw-r--r-- | sys/net80211/ieee80211_action.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/sys/net80211/ieee80211_action.c b/sys/net80211/ieee80211_action.c index d28e291..e3576d6 100644 --- a/sys/net80211/ieee80211_action.c +++ b/sys/net80211/ieee80211_action.c @@ -228,6 +228,7 @@ ieee80211_recv_action(struct ieee80211_node *ni, { #define N(a) (sizeof(a) / sizeof(a[0])) ieee80211_recv_action_func *f = recv_inval; + struct ieee80211vap *vap = ni->ni_vap; const struct ieee80211_action *ia = (const struct ieee80211_action *) frm; @@ -245,6 +246,15 @@ ieee80211_recv_action(struct ieee80211_node *ni, f = meshpl_recv_action[ia->ia_action]; break; case IEEE80211_ACTION_CAT_MESH: + if (ni == vap->iv_bss || + ni->ni_mlstate != IEEE80211_NODE_MESH_ESTABLISHED) { + IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_MESH, + ni->ni_macaddr, NULL, + "peer link not yet established (%d), cat %s act %u", + ni->ni_mlstate, "mesh action", ia->ia_action); + vap->iv_stats.is_mesh_nolink++; + break; + } if (ia->ia_action < N(meshaction_recv_action)) f = meshaction_recv_action[ia->ia_action]; break; |