zd1211rw: fix ack_pending in filter_ack causing tx-packet ordering problem on monitor
For reasons not very clear yet to me, filter_ack leaves matching tx-packet pending with 'ack_pending'. This causes tx-packet to be passed back to upper layer after next packet has been transfered and tx-packets might end up coming come out of monitor interface in wrong order vs. rx. Because of this when enable AP-mode, hostapd monitor interface would get packets in wrong order causing problems in WPA association. So don't use mac->ack_pending when in AP-mode. Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Родитель
c2fadcb3b1
Коммит
f773e409b9
|
@ -799,6 +799,13 @@ static int filter_ack(struct ieee80211_hw *hw, struct ieee80211_hdr *rx_hdr,
|
|||
|
||||
mac->ack_pending = 1;
|
||||
mac->ack_signal = stats->signal;
|
||||
|
||||
/* Prevent pending tx-packet on AP-mode */
|
||||
if (mac->type == NL80211_IFTYPE_AP) {
|
||||
skb = __skb_dequeue(q);
|
||||
zd_mac_tx_status(hw, skb, mac->ack_signal, NULL);
|
||||
mac->ack_pending = 0;
|
||||
}
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&q->lock, flags);
|
||||
|
|
Загрузка…
Ссылка в новой задаче