* [PATCH] ath9k: Do not remove header padding on RX from short frames
@ 2008-12-11 16:22 ` Jouni Malinen
0 siblings, 0 replies; 9+ messages in thread
From: Jouni Malinen @ 2008-12-11 16:22 UTC (permalink / raw)
To: John W. Linville; +Cc: linux-wireless, ath9k-devel
The 802.11 header is only padded to 32-bit boundary when the frame has
a non-zero length payload. In other words, control frames (e.g., ACK)
do not have a padding and we should not try to remove it. This fixes
monitor mode for short control frames. In addition, the hdrlen&3 use
is described in more detail to make it easier to understand how the
padding length is calculated.
Signed-off-by: Jouni Malinen <jouni.malinen@atheros.com>
---
drivers/net/wireless/ath9k/recv.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
--- wireless-testing.orig/drivers/net/wireless/ath9k/recv.c 2008-12-11 11:35:56.000000000 +0200
+++ wireless-testing/drivers/net/wireless/ath9k/recv.c 2008-12-11 12:18:02.000000000 +0200
@@ -571,8 +571,16 @@ int ath_rx_tasklet(struct ath_softc *sc,
hdr = (struct ieee80211_hdr *)skb->data;
hdrlen = ieee80211_get_hdrlen_from_skb(skb);
- if (hdrlen & 3) {
- padsize = hdrlen % 4;
+ /* The MAC header is padded to have 32-bit boundary if the
+ * packet payload is non-zero. The general calculation for
+ * padsize would take into account odd header lengths:
+ * padsize = (4 - hdrlen % 4) % 4; However, since only
+ * even-length headers are used, padding can only be 0 or 2
+ * bytes and we can optimize this a bit. In addition, we must
+ * not try to remove padding from short control frames that do
+ * not have payload. */
+ padsize = hdrlen & 3;
+ if (padsize && hdrlen >= 24) {
memmove(skb->data + padsize, skb->data, hdrlen);
skb_pull(skb, padsize);
}
--
Jouni Malinen PGP id EFC895FA
^ permalink raw reply [flat|nested] 9+ messages in thread
* [ath9k-devel] [PATCH] ath9k: Do not remove header padding on RX from short frames
@ 2008-12-11 16:22 ` Jouni Malinen
0 siblings, 0 replies; 9+ messages in thread
From: Jouni Malinen @ 2008-12-11 16:22 UTC (permalink / raw)
To: ath9k-devel
The 802.11 header is only padded to 32-bit boundary when the frame has
a non-zero length payload. In other words, control frames (e.g., ACK)
do not have a padding and we should not try to remove it. This fixes
monitor mode for short control frames. In addition, the hdrlen&3 use
is described in more detail to make it easier to understand how the
padding length is calculated.
Signed-off-by: Jouni Malinen <jouni.malinen@atheros.com>
---
drivers/net/wireless/ath9k/recv.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
--- wireless-testing.orig/drivers/net/wireless/ath9k/recv.c 2008-12-11 11:35:56.000000000 +0200
+++ wireless-testing/drivers/net/wireless/ath9k/recv.c 2008-12-11 12:18:02.000000000 +0200
@@ -571,8 +571,16 @@ int ath_rx_tasklet(struct ath_softc *sc,
hdr = (struct ieee80211_hdr *)skb->data;
hdrlen = ieee80211_get_hdrlen_from_skb(skb);
- if (hdrlen & 3) {
- padsize = hdrlen % 4;
+ /* The MAC header is padded to have 32-bit boundary if the
+ * packet payload is non-zero. The general calculation for
+ * padsize would take into account odd header lengths:
+ * padsize = (4 - hdrlen % 4) % 4; However, since only
+ * even-length headers are used, padding can only be 0 or 2
+ * bytes and we can optimize this a bit. In addition, we must
+ * not try to remove padding from short control frames that do
+ * not have payload. */
+ padsize = hdrlen & 3;
+ if (padsize && hdrlen >= 24) {
memmove(skb->data + padsize, skb->data, hdrlen);
skb_pull(skb, padsize);
}
--
Jouni Malinen PGP id EFC895FA
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] ath9k: Do not remove header padding on RX from short frames
2008-12-11 16:22 ` [ath9k-devel] " Jouni Malinen
@ 2008-12-11 19:49 ` Bob Copeland
-1 siblings, 0 replies; 9+ messages in thread
From: Bob Copeland @ 2008-12-11 19:49 UTC (permalink / raw)
To: Jouni Malinen
Cc: John W. Linville, linux-wireless, ath9k-devel, Patrick McHardy
On Thu, Dec 11, 2008 at 11:22 AM, Jouni Malinen
<jouni.malinen@atheros.com> wrote:
> The 802.11 header is only padded to 32-bit boundary when the frame has
> a non-zero length payload. In other words, control frames (e.g., ACK)
> do not have a padding and we should not try to remove it. This fixes
> monitor mode for short control frames.
Thanks Jouni, that clears up the question of the same code in ath5k
(http://marc.info/?l=linux-wireless&m=122888546315200&w=2).
--
Bob Copeland %% www.bobcopeland.com
^ permalink raw reply [flat|nested] 9+ messages in thread
* [ath9k-devel] [PATCH] ath9k: Do not remove header padding on RX from short frames
@ 2008-12-11 19:49 ` Bob Copeland
0 siblings, 0 replies; 9+ messages in thread
From: Bob Copeland @ 2008-12-11 19:49 UTC (permalink / raw)
To: ath9k-devel
On Thu, Dec 11, 2008 at 11:22 AM, Jouni Malinen
<jouni.malinen@atheros.com> wrote:
> The 802.11 header is only padded to 32-bit boundary when the frame has
> a non-zero length payload. In other words, control frames (e.g., ACK)
> do not have a padding and we should not try to remove it. This fixes
> monitor mode for short control frames.
Thanks Jouni, that clears up the question of the same code in ath5k
(http://marc.info/?l=linux-wireless&m=122888546315200&w=2).
--
Bob Copeland %% www.bobcopeland.com
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] ath9k: Do not remove header padding on RX from short frames
2008-12-11 19:49 ` [ath9k-devel] " Bob Copeland
@ 2008-12-11 20:10 ` Jouni Malinen
-1 siblings, 0 replies; 9+ messages in thread
From: Jouni Malinen @ 2008-12-11 20:10 UTC (permalink / raw)
To: Bob Copeland
Cc: John W. Linville, linux-wireless, ath9k-devel, Patrick McHardy
On Thu, 2008-12-11 at 11:49 -0800, Bob Copeland wrote:
> On Thu, Dec 11, 2008 at 11:22 AM, Jouni Malinen
> <jouni.malinen@atheros.com> wrote:
> > The 802.11 header is only padded to 32-bit boundary when the frame has
> > a non-zero length payload.
> Thanks Jouni, that clears up the question of the same code in ath5k
> (http://marc.info/?l=linux-wireless&m=122888546315200&w=2).
Yes, the same rules on 802.11 header padding applies to ath5k.
- Jouni
^ permalink raw reply [flat|nested] 9+ messages in thread
* [ath9k-devel] [PATCH] ath9k: Do not remove header padding on RX from short frames
@ 2008-12-11 20:10 ` Jouni Malinen
0 siblings, 0 replies; 9+ messages in thread
From: Jouni Malinen @ 2008-12-11 20:10 UTC (permalink / raw)
To: ath9k-devel
On Thu, 2008-12-11 at 11:49 -0800, Bob Copeland wrote:
> On Thu, Dec 11, 2008 at 11:22 AM, Jouni Malinen
> <jouni.malinen@atheros.com> wrote:
> > The 802.11 header is only padded to 32-bit boundary when the frame has
> > a non-zero length payload.
> Thanks Jouni, that clears up the question of the same code in ath5k
> (http://marc.info/?l=linux-wireless&m=122888546315200&w=2).
Yes, the same rules on 802.11 header padding applies to ath5k.
- Jouni
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] ath9k: Do not remove header padding on RX from short frames
2008-12-11 16:22 ` [ath9k-devel] " Jouni Malinen
@ 2008-12-12 10:24 ` Senthil Balasubramanian
-1 siblings, 0 replies; 9+ messages in thread
From: Senthil Balasubramanian @ 2008-12-12 10:24 UTC (permalink / raw)
To: Jouni Malinen; +Cc: John W. Linville, linux-wireless, ath9k-devel
On Thu, Dec 11, 2008 at 09:52:13PM +0530, Jouni Malinen wrote:
> The 802.11 header is only padded to 32-bit boundary when the frame has
> a non-zero length payload. In other words, control frames (e.g., ACK)
> do not have a padding and we should not try to remove it. This fixes
> monitor mode for short control frames. In addition, the hdrlen&3 use
> is described in more detail to make it easier to understand how the
> padding length is calculated.
>
> Signed-off-by: Jouni Malinen <jouni.malinen@atheros.com>
>
> ---
> drivers/net/wireless/ath9k/recv.c | 12 ++++++++++--
> 1 file changed, 10 insertions(+), 2 deletions(-)
>
> --- wireless-testing.orig/drivers/net/wireless/ath9k/recv.c 2008-12-11 11:35:56.000000000 +0200
> +++ wireless-testing/drivers/net/wireless/ath9k/recv.c 2008-12-11 12:18:02.000000000 +0200
> @@ -571,8 +571,16 @@ int ath_rx_tasklet(struct ath_softc *sc,
> hdr = (struct ieee80211_hdr *)skb->data;
> hdrlen = ieee80211_get_hdrlen_from_skb(skb);
>
> - if (hdrlen & 3) {
> - padsize = hdrlen % 4;
> + /* The MAC header is padded to have 32-bit boundary if the
> + * packet payload is non-zero. The general calculation for
> + * padsize would take into account odd header lengths:
> + * padsize = (4 - hdrlen % 4) % 4; However, since only
> + * even-length headers are used, padding can only be 0 or 2
> + * bytes and we can optimize this a bit. In addition, we must
> + * not try to remove padding from short control frames that do
> + * not have payload. */
> + padsize = hdrlen & 3;
> + if (padsize && hdrlen >= 24) {
I think "if(padsize && hdrlen > 24)" should be sufficient here as padsize is
anyway zero for hdlen==24.
> memmove(skb->data + padsize, skb->data, hdrlen);
> skb_pull(skb, padsize);
> }
>
> --
> Jouni Malinen PGP id EFC895FA
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 9+ messages in thread
* [ath9k-devel] [PATCH] ath9k: Do not remove header padding on RX from short frames
@ 2008-12-12 10:24 ` Senthil Balasubramanian
0 siblings, 0 replies; 9+ messages in thread
From: Senthil Balasubramanian @ 2008-12-12 10:24 UTC (permalink / raw)
To: ath9k-devel
On Thu, Dec 11, 2008 at 09:52:13PM +0530, Jouni Malinen wrote:
> The 802.11 header is only padded to 32-bit boundary when the frame has
> a non-zero length payload. In other words, control frames (e.g., ACK)
> do not have a padding and we should not try to remove it. This fixes
> monitor mode for short control frames. In addition, the hdrlen&3 use
> is described in more detail to make it easier to understand how the
> padding length is calculated.
>
> Signed-off-by: Jouni Malinen <jouni.malinen@atheros.com>
>
> ---
> drivers/net/wireless/ath9k/recv.c | 12 ++++++++++--
> 1 file changed, 10 insertions(+), 2 deletions(-)
>
> --- wireless-testing.orig/drivers/net/wireless/ath9k/recv.c 2008-12-11 11:35:56.000000000 +0200
> +++ wireless-testing/drivers/net/wireless/ath9k/recv.c 2008-12-11 12:18:02.000000000 +0200
> @@ -571,8 +571,16 @@ int ath_rx_tasklet(struct ath_softc *sc,
> hdr = (struct ieee80211_hdr *)skb->data;
> hdrlen = ieee80211_get_hdrlen_from_skb(skb);
>
> - if (hdrlen & 3) {
> - padsize = hdrlen % 4;
> + /* The MAC header is padded to have 32-bit boundary if the
> + * packet payload is non-zero. The general calculation for
> + * padsize would take into account odd header lengths:
> + * padsize = (4 - hdrlen % 4) % 4; However, since only
> + * even-length headers are used, padding can only be 0 or 2
> + * bytes and we can optimize this a bit. In addition, we must
> + * not try to remove padding from short control frames that do
> + * not have payload. */
> + padsize = hdrlen & 3;
> + if (padsize && hdrlen >= 24) {
I think "if(padsize && hdrlen > 24)" should be sufficient here as padsize is
anyway zero for hdlen==24.
> memmove(skb->data + padsize, skb->data, hdrlen);
> skb_pull(skb, padsize);
> }
>
> --
> Jouni Malinen PGP id EFC895FA
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 9+ messages in thread
* [ath9k-devel] 2.6.28-rc8-wl Connection status bug?
2008-12-11 20:10 ` [ath9k-devel] " Jouni Malinen
(?)
@ 2008-12-13 15:28 ` Brian
-1 siblings, 0 replies; 9+ messages in thread
From: Brian @ 2008-12-13 15:28 UTC (permalink / raw)
To: ath9k-devel
Hi,
I have been having this 'problem' since rc7
Just installed the above kernel as the change log indicate some changes
in this area for ath9k.
The problem is that my router displays
IP Address Mode Rate (Mbps) Signal (%)
0.0.0.0 802.11g 130 76
Now it should not be possible to get 130 out of 11g.
My router is set up to do both 11g/n, see below.
Prior to rc7 it used to show 11n and 300Mbps.
Not sure if it is relevant but I think the only thing I have changed in
the router is turning on the Wi-Fi Protected Setup.
How can I provide more detail/tests
By the way, looking through the change log I cannot believe how much
effort is going into this. Thanks one and all.
Brian
Wireless LAN
Wireless Radio : Enabled
802.11 Mode : Mixed 802.11n and 802.11g
Channel Width : 40MHz
Channel : 4
Secondary Channel : 8
WISH : Active
Wi-Fi Protected Setup : Enabled/Configured
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2008-12-13 15:28 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-12-11 16:22 [PATCH] ath9k: Do not remove header padding on RX from short frames Jouni Malinen
2008-12-11 16:22 ` [ath9k-devel] " Jouni Malinen
2008-12-11 19:49 ` Bob Copeland
2008-12-11 19:49 ` [ath9k-devel] " Bob Copeland
2008-12-11 20:10 ` Jouni Malinen
2008-12-11 20:10 ` [ath9k-devel] " Jouni Malinen
2008-12-13 15:28 ` [ath9k-devel] 2.6.28-rc8-wl Connection status bug? Brian
2008-12-12 10:24 ` [PATCH] ath9k: Do not remove header padding on RX from short frames Senthil Balasubramanian
2008-12-12 10:24 ` [ath9k-devel] " Senthil Balasubramanian
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.