Bug #365

Fwd: [PATCH] ath9k: Fix TX fragmentation

Added by David Taht about 1 year ago. Updated about 1 year ago.

Status:New Start date:
Priority:Normal Due date:
Assignee:- % Done:

0%

Category:- Spent time: -
Target version:1st Public Cerowrt release

Description

---------- Forwarded message ----------
From: Sujith Manoharan <>
Date: Tue, Apr 17, 2012 at 4:04 AM
Subject: [PATCH] ath9k: Fix TX fragmentation
To:
Cc:

Assigning sequence number for frames without taking care
of the fragment field breaks transmission of fragmented frames.
Fix this by assigning the fragment number properly.

Signed-off-by: Sujith Manoharan <>
---
 drivers/net/wireless/ath/ath9k/xmit.c |   10 +++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/ath/ath9k/xmit.c
b/drivers/net/wireless/ath/ath9k/xmit.c
index 834e6bc..23eaa1b 100644
--- a/drivers/net/wireless/ath/ath9k/xmit.c
++ b/drivers/net/wireless/ath/ath9k/xmit.c
@ -1820,6 +1820,7 @ static struct ath_buf
*ath_tx_setup_buffer(struct ath_softc *sc,
       struct ath_frame_info *fi = get_frame_info(skb);
       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
       struct ath_buf *bf;
      int fragno;
       u16 seqno;

       bf = ath_tx_get_buffer(sc);
@ -1831,9 +1832,16 @ static struct ath_buf
*ath_tx_setup_buffer(struct ath_softc *sc,
       ATH_TXBUF_RESET(bf);

       if (tid) {
+               fragno = le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_FRAG;
               seqno = tid->seq_next;
               hdr->seq_ctrl = cpu_to_le16(tid->seq_next <<
IEEE80211_SEQ_SEQ_SHIFT);
-               INCR;

              if (fragno)
+                       hdr->seq_ctrl |= cpu_to_le16(fragno);

              if (!ieee80211_has_morefrags(hdr->frame_control))
+                       INCR;
+
               bf->bf_state.seqno = seqno;
       }

History

Updated by Dave Täht about 1 year ago

  • Target version set to 1st Public Cerowrt release

Also available in: Atom PDF