diff options
author | Felix Fietkau <nbd@openwrt.org> | 2010-01-31 20:58:02 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2010-01-31 20:58:02 +0000 |
commit | 5c81e8d45c0774bb4f4a50ef156d2ce490807c8e (patch) | |
tree | 950bf31f6ce7f2fa64673350461210a60872ce06 /package | |
parent | 7d4b4311026e7b0270c10d42dbffe91146fb5657 (diff) | |
download | upstream-5c81e8d45c0774bb4f4a50ef156d2ce490807c8e.tar.gz upstream-5c81e8d45c0774bb4f4a50ef156d2ce490807c8e.tar.bz2 upstream-5c81e8d45c0774bb4f4a50ef156d2ce490807c8e.zip |
mac80211: fix rekeying in ap mode with connected powersave stations
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@19470 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package')
-rw-r--r-- | package/mac80211/patches/550-radiotap_ps_buffer.patch | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/package/mac80211/patches/550-radiotap_ps_buffer.patch b/package/mac80211/patches/550-radiotap_ps_buffer.patch new file mode 100644 index 0000000000..67d8f49a3d --- /dev/null +++ b/package/mac80211/patches/550-radiotap_ps_buffer.patch @@ -0,0 +1,48 @@ +--- a/include/net/mac80211.h ++++ b/include/net/mac80211.h +@@ -274,6 +274,8 @@ struct ieee80211_bss_conf { + * @IEEE80211_TX_INTFL_RETRANSMISSION: This frame is being retransmitted + * after TX status because the destination was asleep, it must not + * be modified again (no seqno assignment, crypto, etc.) ++ * @IEEE80211_TX_INTFL_HAS_RADIOTAP: This frame was injected and still ++ * has a radiotap header at skb->data. + */ + enum mac80211_tx_control_flags { + IEEE80211_TX_CTL_REQ_TX_STATUS = BIT(0), +@@ -295,6 +297,7 @@ enum mac80211_tx_control_flags { + IEEE80211_TX_CTL_PSPOLL_RESPONSE = BIT(17), + IEEE80211_TX_CTL_MORE_FRAMES = BIT(18), + IEEE80211_TX_INTFL_RETRANSMISSION = BIT(19), ++ IEEE80211_TX_INTFL_HAS_RADIOTAP = BIT(20), + }; + + /** +--- a/net/mac80211/tx.c ++++ b/net/mac80211/tx.c +@@ -1110,7 +1110,7 @@ ieee80211_tx_prepare(struct ieee80211_su + tx->flags |= IEEE80211_TX_FRAGMENTED; + + /* process and remove the injection radiotap header */ +- if (unlikely(info->flags & IEEE80211_TX_CTL_INJECTED)) { ++ if (unlikely(info->flags & IEEE80211_TX_INTFL_HAS_RADIOTAP)) { + if (!__ieee80211_parse_tx_radiotap(tx, skb)) + return TX_DROP; + +@@ -1119,6 +1119,7 @@ ieee80211_tx_prepare(struct ieee80211_su + * the radiotap header that was present and pre-filled + * 'tx' with tx control information. + */ ++ info->flags &= ~IEEE80211_TX_INTFL_HAS_RADIOTAP; + } + + /* +@@ -1501,7 +1502,8 @@ static void ieee80211_xmit(struct ieee80 + int hdrlen; + u16 len_rthdr; + +- info->flags |= IEEE80211_TX_CTL_INJECTED; ++ info->flags |= IEEE80211_TX_CTL_INJECTED | ++ IEEE80211_TX_INTFL_HAS_RADIOTAP; + + len_rthdr = ieee80211_get_radiotap_len(skb->data); + hdr = (struct ieee80211_hdr *)(skb->data + len_rthdr); |