aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/314-mac80211-mesh-avoid-pointless-station-lookup.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/314-mac80211-mesh-avoid-pointless-station-lookup.patch')
-rw-r--r--package/kernel/mac80211/patches/314-mac80211-mesh-avoid-pointless-station-lookup.patch33
1 files changed, 33 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/314-mac80211-mesh-avoid-pointless-station-lookup.patch b/package/kernel/mac80211/patches/314-mac80211-mesh-avoid-pointless-station-lookup.patch
new file mode 100644
index 0000000000..c476dd463c
--- /dev/null
+++ b/package/kernel/mac80211/patches/314-mac80211-mesh-avoid-pointless-station-lookup.patch
@@ -0,0 +1,33 @@
+From: Johannes Berg <johannes.berg@intel.com>
+Date: Fri, 20 Mar 2015 16:24:23 +0100
+Subject: [PATCH] mac80211: mesh: avoid pointless station lookup
+
+In ieee80211_build_hdr(), the station is looked up to build the
+header correctly (QoS field) and to check for authorization. For
+mesh, authorization isn't checked here, and QoS capability is
+mandatory, so the station lookup can be avoided.
+
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+---
+
+--- a/net/mac80211/tx.c
++++ b/net/mac80211/tx.c
+@@ -2131,12 +2131,14 @@ static struct sk_buff *ieee80211_build_h
+ }
+
+ /*
+- * There's no need to try to look up the destination
+- * if it is a multicast address (which can only happen
+- * in AP mode)
++ * There's no need to try to look up the destination station
++ * if it is a multicast address. In mesh, there's no need to
++ * look up the station at all as it always must be QoS capable
++ * and mesh mode checks authorization later.
+ */
+ multicast = is_multicast_ether_addr(hdr.addr1);
+- if (!multicast && !have_station) {
++ if (!multicast && !have_station &&
++ !ieee80211_vif_is_mesh(&sdata->vif)) {
+ sta = sta_info_get(sdata, hdr.addr1);
+ if (sta) {
+ authorized = test_sta_flag(sta, WLAN_STA_AUTHORIZED);