summaryrefslogtreecommitdiffstats
path: root/sys/net80211/ieee80211_action.c
diff options
context:
space:
mode:
authormonthadar <monthadar@FreeBSD.org>2013-02-07 21:21:40 +0000
committermonthadar <monthadar@FreeBSD.org>2013-02-07 21:21:40 +0000
commitaeaacfbfb306ce87345043b9801b6c37972af99c (patch)
treed253664a26038736e4f28be168a8b0ba47d674c6 /sys/net80211/ieee80211_action.c
parent3f965e686d057f5a9c3230680185415dc3356a1a (diff)
downloadFreeBSD-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.c10
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;
OpenPOWER on IntegriCloud