Ok, so I'm frustrated. I spent a few hours today chasing docs, trying to understand sequence numbering from the specs, how we implement it in mac80211 for TX and RX, how hardware/firmware implements it. Finally, I figure out that mac80211 is buggy, and come up with a buggy (now I know) patch. Then, now, I find out that iwlwifi contains a workaround for the mac80211 sequence numbering, so you've known all along! Why don't you tell anyone about the problems you find? It can't be that hard. Are there any other lurking issues like that? Here's the code from iwlwifi: if (ieee80211_is_data_qos(fc)) { qc = ieee80211_get_qos_ctl(hdr); tid = qc[0] & 0xf; seq_number = priv->stations[sta_id].tid[tid].seq_number & IEEE80211_SCTL_SEQ; hdr->seq_ctrl = cpu_to_le16(seq_number) | (hdr->seq_ctrl & __constant_cpu_to_le16(IEEE80211_SCTL_FRAG)); seq_number += 0x10; /* aggregation is on for this <sta,tid> */ if (info->flags & IEEE80211_TX_CTL_AMPDU) txq_id = priv->stations[sta_id].tid[tid].agg.txq_id; priv->stations[sta_id].tid[tid].tfds_in_queue++; } We can implement that trivially in mac80211 and make it do the right thing for all drivers instead of having iwlwifi work around the bug in mac80211. Additionally, we can then remove the ssn argument to the ampdu_action callback. johannes
Attachment:
signature.asc
Description: This is a digitally signed message part