summaryrefslogtreecommitdiffstats
path: root/sys/net80211
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2016-04-28 20:29:49 +0000
committeradrian <adrian@FreeBSD.org>2016-04-28 20:29:49 +0000
commiteb4ff9318a20dba1dcb83a149ebf9416037b620d (patch)
treee39ccba2cf271a635d0da7775818da04593951ee /sys/net80211
parent586d106e191628e927b30d43c75a8684094fe6e6 (diff)
downloadFreeBSD-src-eb4ff9318a20dba1dcb83a149ebf9416037b620d.zip
FreeBSD-src-eb4ff9318a20dba1dcb83a149ebf9416037b620d.tar.gz
[net80211] handle action frames in adhoc mode from the node that created the BSS.
We don't have a separate bss node; instead we dup the first node we saw and turn that into the BSS node. This means that action frames from that node would be rejected. So, check that the node is the bss node /and/ the MAC doesn't match ni_macaddr. That's the "right" way for now to verify it's an unknown node. This fixes handling action frames in adhoc mode, which includes negotiating 11n aggregation via ADDBA/DELBA. This by itself isn't enough to correctly create 11n adhoc networks; but it is required for aggregation to be negotiated. Tested: * AR9380, 11n adhoc mode * broadcom 11ac adhoc (vendor platform) Sponsored by: Eva Automation, Inc.
Diffstat (limited to 'sys/net80211')
-rw-r--r--sys/net80211/ieee80211_adhoc.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/net80211/ieee80211_adhoc.c b/sys/net80211/ieee80211_adhoc.c
index d3b1937..d7f4400 100644
--- a/sys/net80211/ieee80211_adhoc.c
+++ b/sys/net80211/ieee80211_adhoc.c
@@ -854,7 +854,8 @@ adhoc_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m0,
case IEEE80211_FC0_SUBTYPE_ACTION:
case IEEE80211_FC0_SUBTYPE_ACTION_NOACK:
- if (ni == vap->iv_bss) {
+ if ((ni == vap->iv_bss) &&
+ !IEEE80211_ADDR_EQ(wh->i_addr2, ni->ni_macaddr)) {
IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
wh, NULL, "%s", "unknown node");
vap->iv_stats.is_rx_mgtdiscard++;
OpenPOWER on IntegriCloud