update CAPWAP tunnel patches to new static_key API

This commit is contained in:
Andreas Schultz 2016-11-08 14:35:35 +01:00
parent b6417ff793
commit cd7024568f
No known key found for this signature in database
GPG Key ID: 65213758C7507422
2 changed files with 56 additions and 51 deletions

View File

@ -1,4 +1,4 @@
From abc84789bd6d42fdbfe598d72177ed41d54c7bcf Mon Sep 17 00:00:00 2001 From 681af1c29f8276c2105ff4ce8d31ec56bd9e5b7a Mon Sep 17 00:00:00 2001
From: Andreas Schultz <aschultz@tpip.net> From: Andreas Schultz <aschultz@tpip.net>
Date: Thu, 4 Feb 2016 15:57:11 +0100 Date: Thu, 4 Feb 2016 15:57:11 +0100
Subject: [PATCH] support patch for FreeWTP Subject: [PATCH] support patch for FreeWTP
@ -14,7 +14,7 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
6 files changed, 479 insertions(+), 12 deletions(-) 6 files changed, 479 insertions(+), 12 deletions(-)
diff --git a/include/net/mac80211.h b/include/net/mac80211.h diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 760bc4d..bf60d9d 100644 index 760bc4d..e80b1af 100644
--- a/include/net/mac80211.h --- a/include/net/mac80211.h
+++ b/include/net/mac80211.h +++ b/include/net/mac80211.h
@@ -2199,6 +2199,37 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw, @@ -2199,6 +2199,37 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw,
@ -23,7 +23,7 @@ index 760bc4d..bf60d9d 100644
+#ifdef CONFIG_MAC80211_CAPWAP_WTP +#ifdef CONFIG_MAC80211_CAPWAP_WTP
+ +
+extern struct static_key mac80211_capwap_wtp; +extern struct static_key_false mac80211_capwap_wtp;
+ +
+/** +/**
+ * + *
@ -108,7 +108,7 @@ index 6837a46..e96cbff 100644
struct sk_buff_head *skbs); struct sk_buff_head *skbs);
struct sk_buff * struct sk_buff *
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index bcb0a1b..8e2069f 100644 index bcb0a1b..cb08ec2 100644
--- a/net/mac80211/iface.c --- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c +++ b/net/mac80211/iface.c
@@ -1955,3 +1955,66 @@ void ieee80211_iface_exit(void) @@ -1955,3 +1955,66 @@ void ieee80211_iface_exit(void)
@ -118,7 +118,7 @@ index bcb0a1b..8e2069f 100644
+ +
+#ifdef CONFIG_MAC80211_CAPWAP_WTP +#ifdef CONFIG_MAC80211_CAPWAP_WTP
+ +
+struct static_key mac80211_capwap_wtp __read_mostly; +DEFINE_STATIC_KEY_FALSE(mac80211_capwap_wtp);
+ +
+static const struct net_device_ops ieee80211_capwapif_ops = { +static const struct net_device_ops ieee80211_capwapif_ops = {
+ .ndo_open = ieee80211_open, + .ndo_open = ieee80211_open,
@ -145,7 +145,7 @@ index bcb0a1b..8e2069f 100644
+ ret = -EBUSY; + ret = -EBUSY;
+ } else { + } else {
+ rcu_assign_pointer(sdata->pcktunnel_handlers, handler); + rcu_assign_pointer(sdata->pcktunnel_handlers, handler);
+ static_key_slow_inc(&mac80211_capwap_wtp); + static_branch_enable(&mac80211_capwap_wtp);
+ } + }
+ +
+ mutex_unlock(&sdata->local->iflist_mtx); + mutex_unlock(&sdata->local->iflist_mtx);
@ -166,7 +166,7 @@ index bcb0a1b..8e2069f 100644
+ h = rcu_dereference_protected(sdata->pcktunnel_handlers, lockdep_is_held(&sdata->local->iflist_mtx)); + h = rcu_dereference_protected(sdata->pcktunnel_handlers, lockdep_is_held(&sdata->local->iflist_mtx));
+ if (h == handler) { + if (h == handler) {
+ ret = 0; + ret = 0;
+ static_key_slow_dec(&mac80211_capwap_wtp); + static_branch_disable(&mac80211_capwap_wtp);
+ rcu_assign_pointer(sdata->pcktunnel_handlers, NULL); + rcu_assign_pointer(sdata->pcktunnel_handlers, NULL);
+ } + }
+ +
@ -179,7 +179,7 @@ index bcb0a1b..8e2069f 100644
+ +
+#endif +#endif
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index a3bb8f7..cbe0642 100644 index a3bb8f7..07b2ff6 100644
--- a/net/mac80211/rx.c --- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c +++ b/net/mac80211/rx.c
@@ -3058,6 +3058,56 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_data *rx) @@ -3058,6 +3058,56 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_data *rx)
@ -265,7 +265,7 @@ index a3bb8f7..cbe0642 100644
CALL_RXH(ieee80211_rx_h_mesh_fwding); CALL_RXH(ieee80211_rx_h_mesh_fwding);
#endif #endif
+#ifdef CONFIG_MAC80211_CAPWAP_WTP +#ifdef CONFIG_MAC80211_CAPWAP_WTP
+ if (static_key_false(&mac80211_capwap_wtp)) { + if (static_branch_unlikely(&mac80211_capwap_wtp)) {
+ /* special treatment */ + /* special treatment */
+ res = ieee80211_rx_h_pcktunnel(rx, rate); + res = ieee80211_rx_h_pcktunnel(rx, rate);
+ if (res != RX_CONTINUE) + if (res != RX_CONTINUE)
@ -380,7 +380,7 @@ index a3bb8f7..cbe0642 100644
rcu_read_unlock(); rcu_read_unlock();
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index bdc224d..5f1f424 100644 index bdc224d..ee4e7c7 100644
--- a/net/mac80211/tx.c --- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c +++ b/net/mac80211/tx.c
@@ -2939,6 +2939,115 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb, @@ -2939,6 +2939,115 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,

View File

@ -1,4 +1,4 @@
From 0829e230256d8f18c2d482923d16d3582311221f Mon Sep 17 00:00:00 2001 From c77fede6bca4d81c4db720a0ebcfa3ea6b933161 Mon Sep 17 00:00:00 2001
From: Andreas Schultz <aschultz@tpip.net> From: Andreas Schultz <aschultz@tpip.net>
Date: Thu, 4 Feb 2016 15:57:11 +0100 Date: Thu, 4 Feb 2016 15:57:11 +0100
Subject: [PATCH] support patch for FreeWTP Subject: [PATCH] support patch for FreeWTP
@ -13,15 +13,17 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
net/mac80211/tx.c | 286 +++++++++++++++++++++++++++++++++++++++++++++ net/mac80211/tx.c | 286 +++++++++++++++++++++++++++++++++++++++++++++
6 files changed, 481 insertions(+), 14 deletions(-) 6 files changed, 481 insertions(+), 14 deletions(-)
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index be30b05..cc1f0e8 100644
--- a/include/net/mac80211.h --- a/include/net/mac80211.h
+++ b/include/net/mac80211.h +++ b/include/net/mac80211.h
@@ -2323,6 +2323,37 @@ ieee80211_get_alt_retry_rate(const struc @@ -2309,6 +2309,37 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw,
*/ */
void ieee80211_free_txskb(struct ieee80211_hw *hw, struct sk_buff *skb); void ieee80211_free_txskb(struct ieee80211_hw *hw, struct sk_buff *skb);
+#ifdef CPTCFG_MAC80211_CAPWAP_WTP +#ifdef CPTCFG_MAC80211_CAPWAP_WTP
+ +
+extern struct static_key mac80211_capwap_wtp; +extern struct static_key_false mac80211_capwap_wtp;
+ +
+/** +/**
+ * + *
@ -53,9 +55,11 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
/** /**
* DOC: Hardware crypto acceleration * DOC: Hardware crypto acceleration
* *
diff --git a/net/mac80211/Kconfig b/net/mac80211/Kconfig
index 3891cbd..4ff4461 100644
--- a/net/mac80211/Kconfig --- a/net/mac80211/Kconfig
+++ b/net/mac80211/Kconfig +++ b/net/mac80211/Kconfig
@@ -317,3 +317,10 @@ config MAC80211_STA_HASH_MAX_SIZE @@ -318,3 +318,10 @@ config MAC80211_STA_HASH_MAX_SIZE
connect more stations than the number selected here.) connect more stations than the number selected here.)
If unsure, leave the default of 0. If unsure, leave the default of 0.
@ -66,9 +70,11 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
+ ---help--- + ---help---
+ Select this to build support hooks for out-of-tree CAPWAP FreeWTP + Select this to build support hooks for out-of-tree CAPWAP FreeWTP
+ module. + module.
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index 9438c94..3ec4613 100644
--- a/net/mac80211/ieee80211_i.h --- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h
@@ -182,6 +182,9 @@ typedef unsigned __bitwise__ ieee80211_r @@ -180,6 +180,9 @@ typedef unsigned __bitwise__ ieee80211_rx_result;
#define RX_DROP_UNUSABLE ((__force ieee80211_rx_result) 1u) #define RX_DROP_UNUSABLE ((__force ieee80211_rx_result) 1u)
#define RX_DROP_MONITOR ((__force ieee80211_rx_result) 2u) #define RX_DROP_MONITOR ((__force ieee80211_rx_result) 2u)
#define RX_QUEUED ((__force ieee80211_rx_result) 3u) #define RX_QUEUED ((__force ieee80211_rx_result) 3u)
@ -78,7 +84,7 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
/** /**
* enum ieee80211_packet_rx_flags - packet RX flags * enum ieee80211_packet_rx_flags - packet RX flags
@@ -847,6 +850,11 @@ struct ieee80211_sub_if_data { @@ -836,6 +839,11 @@ struct ieee80211_sub_if_data {
char name[IFNAMSIZ]; char name[IFNAMSIZ];
@ -90,7 +96,7 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
/* Fragment table for host-based reassembly */ /* Fragment table for host-based reassembly */
struct ieee80211_fragment_entry fragments[IEEE80211_FRAGMENT_MAX]; struct ieee80211_fragment_entry fragments[IEEE80211_FRAGMENT_MAX];
unsigned int fragment_next; unsigned int fragment_next;
@@ -1696,6 +1704,10 @@ netdev_tx_t ieee80211_subif_start_xmit(s @@ -1655,6 +1663,10 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
void __ieee80211_subif_start_xmit(struct sk_buff *skb, void __ieee80211_subif_start_xmit(struct sk_buff *skb,
struct net_device *dev, struct net_device *dev,
u32 info_flags); u32 info_flags);
@ -101,16 +107,18 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
void ieee80211_purge_tx_queue(struct ieee80211_hw *hw, void ieee80211_purge_tx_queue(struct ieee80211_hw *hw,
struct sk_buff_head *skbs); struct sk_buff_head *skbs);
struct sk_buff * struct sk_buff *
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index c59af3e..c05f4c6 100644
--- a/net/mac80211/iface.c --- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c +++ b/net/mac80211/iface.c
@@ -2001,3 +2001,66 @@ void ieee80211_iface_exit(void) @@ -1966,3 +1966,66 @@ void ieee80211_iface_exit(void)
{ {
unregister_netdevice_notifier(&mac80211_netdev_notifier); unregister_netdevice_notifier(&mac80211_netdev_notifier);
} }
+ +
+#ifdef CPTCFG_MAC80211_CAPWAP_WTP +#ifdef CPTCFG_MAC80211_CAPWAP_WTP
+ +
+struct static_key mac80211_capwap_wtp __read_mostly; +DEFINE_STATIC_KEY_FALSE(mac80211_capwap_wtp);
+ +
+static const struct net_device_ops ieee80211_capwapif_ops = { +static const struct net_device_ops ieee80211_capwapif_ops = {
+ .ndo_open = ieee80211_open, + .ndo_open = ieee80211_open,
@ -137,7 +145,7 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
+ ret = -EBUSY; + ret = -EBUSY;
+ } else { + } else {
+ rcu_assign_pointer(sdata->pcktunnel_handlers, handler); + rcu_assign_pointer(sdata->pcktunnel_handlers, handler);
+ static_key_slow_inc(&mac80211_capwap_wtp); + static_branch_enable(&mac80211_capwap_wtp);
+ } + }
+ +
+ mutex_unlock(&sdata->local->iflist_mtx); + mutex_unlock(&sdata->local->iflist_mtx);
@ -158,7 +166,7 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
+ h = rcu_dereference_protected(sdata->pcktunnel_handlers, lockdep_is_held(&sdata->local->iflist_mtx)); + h = rcu_dereference_protected(sdata->pcktunnel_handlers, lockdep_is_held(&sdata->local->iflist_mtx));
+ if (h == handler) { + if (h == handler) {
+ ret = 0; + ret = 0;
+ static_key_slow_dec(&mac80211_capwap_wtp); + static_branch_disable(&mac80211_capwap_wtp);
+ rcu_assign_pointer(sdata->pcktunnel_handlers, NULL); + rcu_assign_pointer(sdata->pcktunnel_handlers, NULL);
+ } + }
+ +
@ -170,9 +178,11 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
+EXPORT_SYMBOL(ieee80211_pcktunnel_deregister); +EXPORT_SYMBOL(ieee80211_pcktunnel_deregister);
+ +
+#endif +#endif
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 5e65e83..4a6d2cd 100644
--- a/net/mac80211/rx.c --- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c +++ b/net/mac80211/rx.c
@@ -3097,6 +3097,56 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_ @@ -3097,6 +3097,56 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_data *rx)
return RX_QUEUED; return RX_QUEUED;
} }
@ -229,7 +239,7 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx, static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx,
struct ieee80211_rate *rate) struct ieee80211_rate *rate)
{ {
@@ -3176,6 +3226,9 @@ static void ieee80211_rx_handlers_result @@ -3176,6 +3226,9 @@ static void ieee80211_rx_handlers_result(struct ieee80211_rx_data *rx,
if (rx->sta) if (rx->sta)
rx->sta->rx_stats.dropped++; rx->sta->rx_stats.dropped++;
/* fall through */ /* fall through */
@ -239,7 +249,7 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
case RX_CONTINUE: { case RX_CONTINUE: {
struct ieee80211_rate *rate = NULL; struct ieee80211_rate *rate = NULL;
struct ieee80211_supported_band *sband; struct ieee80211_supported_band *sband;
@@ -3204,7 +3257,9 @@ static void ieee80211_rx_handlers_result @@ -3204,7 +3257,9 @@ static void ieee80211_rx_handlers_result(struct ieee80211_rx_data *rx,
} }
static void ieee80211_rx_handlers(struct ieee80211_rx_data *rx, static void ieee80211_rx_handlers(struct ieee80211_rx_data *rx,
@ -250,12 +260,12 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
{ {
ieee80211_rx_result res = RX_DROP_MONITOR; ieee80211_rx_result res = RX_DROP_MONITOR;
struct sk_buff *skb; struct sk_buff *skb;
@@ -3243,6 +3298,15 @@ static void ieee80211_rx_handlers(struct @@ -3243,6 +3298,15 @@ static void ieee80211_rx_handlers(struct ieee80211_rx_data *rx,
if (ieee80211_vif_is_mesh(&rx->sdata->vif)) if (ieee80211_vif_is_mesh(&rx->sdata->vif))
CALL_RXH(ieee80211_rx_h_mesh_fwding); CALL_RXH(ieee80211_rx_h_mesh_fwding);
#endif #endif
+#ifdef CPTCFG_MAC80211_CAPWAP_WTP +#ifdef CPTCFG_MAC80211_CAPWAP_WTP
+ if (static_key_false(&mac80211_capwap_wtp)) { + if (static_branch_unlikely(&mac80211_capwap_wtp)) {
+ /* special treatment */ + /* special treatment */
+ res = ieee80211_rx_h_pcktunnel(rx, rate); + res = ieee80211_rx_h_pcktunnel(rx, rate);
+ if (res != RX_CONTINUE) + if (res != RX_CONTINUE)
@ -266,7 +276,7 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
CALL_RXH(ieee80211_rx_h_amsdu); CALL_RXH(ieee80211_rx_h_amsdu);
CALL_RXH(ieee80211_rx_h_data); CALL_RXH(ieee80211_rx_h_data);
@@ -3266,7 +3330,8 @@ static void ieee80211_rx_handlers(struct @@ -3266,7 +3330,8 @@ static void ieee80211_rx_handlers(struct ieee80211_rx_data *rx,
spin_unlock_bh(&rx->local->rx_path_lock); spin_unlock_bh(&rx->local->rx_path_lock);
} }
@ -276,7 +286,7 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
{ {
struct sk_buff_head reorder_release; struct sk_buff_head reorder_release;
ieee80211_rx_result res = RX_DROP_MONITOR; ieee80211_rx_result res = RX_DROP_MONITOR;
@@ -3285,7 +3350,7 @@ static void ieee80211_invoke_rx_handlers @@ -3285,7 +3350,7 @@ static void ieee80211_invoke_rx_handlers(struct ieee80211_rx_data *rx)
ieee80211_rx_reorder_ampdu(rx, &reorder_release); ieee80211_rx_reorder_ampdu(rx, &reorder_release);
@ -285,7 +295,7 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
return; return;
rxh_next: rxh_next:
@@ -3331,7 +3396,7 @@ void ieee80211_release_reorder_timeout(s @@ -3331,7 +3396,7 @@ void ieee80211_release_reorder_timeout(struct sta_info *sta, int tid)
drv_event_callback(rx.local, rx.sdata, &event); drv_event_callback(rx.local, rx.sdata, &event);
} }
@ -294,7 +304,7 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
} }
void ieee80211_mark_rx_ba_filtered_frames(struct ieee80211_sta *pubsta, u8 tid, void ieee80211_mark_rx_ba_filtered_frames(struct ieee80211_sta *pubsta, u8 tid,
@@ -3406,7 +3471,7 @@ void ieee80211_mark_rx_ba_filtered_frame @@ -3406,7 +3471,7 @@ void ieee80211_mark_rx_ba_filtered_frames(struct ieee80211_sta *pubsta, u8 tid,
release: release:
spin_unlock_bh(&tid_agg_rx->reorder_lock); spin_unlock_bh(&tid_agg_rx->reorder_lock);
@ -303,7 +313,7 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
out: out:
rcu_read_unlock(); rcu_read_unlock();
@@ -3878,7 +3943,9 @@ static bool ieee80211_invoke_fast_rx(str @@ -3878,7 +3943,9 @@ static bool ieee80211_invoke_fast_rx(struct ieee80211_rx_data *rx,
* or not the skb was consumed. * or not the skb was consumed.
*/ */
static bool ieee80211_prepare_and_rx_handle(struct ieee80211_rx_data *rx, static bool ieee80211_prepare_and_rx_handle(struct ieee80211_rx_data *rx,
@ -314,7 +324,7 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
{ {
struct ieee80211_local *local = rx->local; struct ieee80211_local *local = rx->local;
struct ieee80211_sub_if_data *sdata = rx->sdata; struct ieee80211_sub_if_data *sdata = rx->sdata;
@@ -3916,7 +3983,7 @@ static bool ieee80211_prepare_and_rx_han @@ -3916,7 +3983,7 @@ static bool ieee80211_prepare_and_rx_handle(struct ieee80211_rx_data *rx,
rx->skb = skb; rx->skb = skb;
} }
@ -323,7 +333,7 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
return true; return true;
} }
@@ -3927,7 +3994,8 @@ static bool ieee80211_prepare_and_rx_han @@ -3927,7 +3994,8 @@ static bool ieee80211_prepare_and_rx_handle(struct ieee80211_rx_data *rx,
static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw, static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
struct ieee80211_sta *pubsta, struct ieee80211_sta *pubsta,
struct sk_buff *skb, struct sk_buff *skb,
@ -333,7 +343,7 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
{ {
struct ieee80211_local *local = hw_to_local(hw); struct ieee80211_local *local = hw_to_local(hw);
struct ieee80211_sub_if_data *sdata; struct ieee80211_sub_if_data *sdata;
@@ -3973,7 +4041,7 @@ static void __ieee80211_rx_handle_packet @@ -3973,7 +4041,7 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
if (pubsta) { if (pubsta) {
rx.sta = container_of(pubsta, struct sta_info, sta); rx.sta = container_of(pubsta, struct sta_info, sta);
rx.sdata = rx.sta->sdata; rx.sdata = rx.sta->sdata;
@ -342,7 +352,7 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
return; return;
goto out; goto out;
} else if (ieee80211_is_data(fc)) { } else if (ieee80211_is_data(fc)) {
@@ -3992,7 +4060,7 @@ static void __ieee80211_rx_handle_packet @@ -3992,7 +4060,7 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
rx.sta = prev_sta; rx.sta = prev_sta;
rx.sdata = prev_sta->sdata; rx.sdata = prev_sta->sdata;
@ -351,7 +361,7 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
prev_sta = sta; prev_sta = sta;
} }
@@ -4001,7 +4069,7 @@ static void __ieee80211_rx_handle_packet @@ -4001,7 +4069,7 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
rx.sta = prev_sta; rx.sta = prev_sta;
rx.sdata = prev_sta->sdata; rx.sdata = prev_sta->sdata;
@ -360,7 +370,7 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
return; return;
goto out; goto out;
} }
@@ -4030,7 +4098,7 @@ static void __ieee80211_rx_handle_packet @@ -4030,7 +4098,7 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
rx.sta = sta_info_get_bss(prev, hdr->addr2); rx.sta = sta_info_get_bss(prev, hdr->addr2);
rx.sdata = prev; rx.sdata = prev;
@ -369,7 +379,7 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
prev = sdata; prev = sdata;
} }
@@ -4039,7 +4107,7 @@ static void __ieee80211_rx_handle_packet @@ -4039,7 +4107,7 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
rx.sta = sta_info_get_bss(prev, hdr->addr2); rx.sta = sta_info_get_bss(prev, hdr->addr2);
rx.sdata = prev; rx.sdata = prev;
@ -378,7 +388,7 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
return; return;
} }
@@ -4152,7 +4220,7 @@ void ieee80211_rx_napi(struct ieee80211_ @@ -4152,7 +4220,7 @@ void ieee80211_rx_napi(struct ieee80211_hw *hw, struct ieee80211_sta *pubsta,
((struct ieee80211_hdr *)skb->data)->frame_control, ((struct ieee80211_hdr *)skb->data)->frame_control,
skb->len); skb->len);
@ -387,9 +397,11 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
rcu_read_unlock(); rcu_read_unlock();
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 2030443..bca96a4 100644
--- a/net/mac80211/tx.c --- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c +++ b/net/mac80211/tx.c
@@ -3434,6 +3434,115 @@ netdev_tx_t ieee80211_subif_start_xmit(s @@ -3213,6 +3213,115 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
return NETDEV_TX_OK; return NETDEV_TX_OK;
} }
@ -505,7 +517,7 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
struct sk_buff * struct sk_buff *
ieee80211_build_data_template(struct ieee80211_sub_if_data *sdata, ieee80211_build_data_template(struct ieee80211_sub_if_data *sdata,
struct sk_buff *skb, u32 info_flags) struct sk_buff *skb, u32 info_flags)
@@ -4409,3 +4518,180 @@ void __ieee80211_tx_skb_tid_band(struct @@ -4188,3 +4297,180 @@ void __ieee80211_tx_skb_tid_band(struct ieee80211_sub_if_data *sdata,
ieee80211_xmit(sdata, NULL, skb); ieee80211_xmit(sdata, NULL, skb);
local_bh_enable(); local_bh_enable();
} }
@ -686,13 +698,6 @@ Allows for kernel side interception and injection of IEEE 802.11 frames.
+EXPORT_SYMBOL(ieee80211_inject_xmit); +EXPORT_SYMBOL(ieee80211_inject_xmit);
+ +
+#endif +#endif
--- a/.local-symbols --
+++ b/.local-symbols 2.9.3
@@ -42,6 +42,7 @@ LIB80211_CRYPT_CCMP=
LIB80211_CRYPT_TKIP=
LIB80211_DEBUG=
MAC80211=
+MAC80211_CAPWAP_WTP=
MAC80211_HAS_RC=
MAC80211_RC_MINSTREL=
MAC80211_RC_MINSTREL_HT=