2015-03-20 16:24:14 +00:00
|
|
|
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
|
2015-04-03 19:42:33 +00:00
|
|
|
@@ -2130,12 +2130,14 @@ static struct sk_buff *ieee80211_build_h
|
2015-03-20 16:24:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
- * 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);
|