Skip to content

Commit

Permalink
Make iwn(4) send block ack request frames with the firmware node
Browse files Browse the repository at this point in the history
which represents the AP, rather than the firmware's broadcast node.

Fixes a problem where firmware would generate bogus block ack requests
with a wrong starting sequence number, shifting the receiver's block ack
window out of sync with that of the firmware. Traffic would stall until
enough frames were sent to wrap sequence numbers of the block ack window.

ok chris@ kmos@
  • Loading branch information
stspdotname committed Mar 17, 2021
1 parent 1bbf741 commit 636ec48
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions sys/dev/pci/if_iwn.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* $OpenBSD: if_iwn.c,v 1.245 2021/03/12 16:27:27 stsp Exp $ */
/* $OpenBSD: if_iwn.c,v 1.246 2021/03/17 15:34:21 stsp Exp $ */

/*-
* Copyright (c) 2007-2010 Damien Bergamini <damien.bergamini@free.fr>
Expand Down Expand Up @@ -3505,7 +3505,10 @@ iwn_tx(struct iwn_softc *sc, struct mbuf *m, struct ieee80211_node *ni)
}
}

if (IEEE80211_IS_MULTICAST(wh->i_addr1) ||
if (type == IEEE80211_FC0_TYPE_CTL &&
subtype == IEEE80211_FC0_SUBTYPE_BAR)
tx->id = wn->id;
else if (IEEE80211_IS_MULTICAST(wh->i_addr1) ||
type != IEEE80211_FC0_TYPE_DATA)
tx->id = sc->broadcast_id;
else
Expand Down

0 comments on commit 636ec48

Please sign in to comment.