• Helmut Schaa's avatar
    mac80211: Tear down BA session on BAR tx failure · e69deded
    Helmut Schaa authored
    As described at [1] some STAs (i.e. Intel 5100 Windows) can end up
    correctly BlockAcking incoming frames without delivering them to user
    space if a AMPDU subframe got lost and we don't flush the receipients
    reorder buffer with a BlockAckReq. This in turn results in stuck
    connections.
    
    According to 802.11n-2009 it is not necessary to send a BAR to flush
    the recepients RX reorder buffer but we still do that to be polite.
    
    However, assume the following frame exchange:
    
    AP -> STA, AMPDU (failed)
    AP -> STA, BAR (failed)
    
    The client in question then ends up in the same situation and won't
    deliver frames to userspace anymore since we weren't able to flush
    its reorder buffer.
    
    This is not a hypothetical situation but I was able to observe this
    exact behavior during a stress test between a rt2800pci AP and a Intel
    5100 Windows client.
    
    In order to work around this issue just tear down the BA session as
    soon as a BAR failed to be TX'ed.
    
    [1] http://comments.gmane.org/gmane.linux.kernel.wireless.general/66867Signed-off-by: default avatarHelmut Schaa <helmut.schaa@googlemail.com>
    Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
    e69deded
status.c 14.5 KB