34 lines
1.2 KiB
Diff
34 lines
1.2 KiB
Diff
|
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);
|