• Johannes Berg's avatar
    mac80211: fix on-channel remain-on-channel · b4b177a5
    Johannes Berg authored
    Jouni reported that if a remain-on-channel was active on the
    same channel as the current operating channel, then the ROC
    would start, but any frames transmitted using mgmt-tx on the
    same channel would get delayed until after the ROC.
    
    The reason for this is that the ROC starts, but doesn't have
    any handling for "remain on the same channel", so it stops
    the interface queues. The later mgmt-tx then puts the frame
    on the interface queues (since it's on the current operating
    channel) and thus they get delayed until after the ROC.
    
    To fix this, add some logic to handle remaining on the same
    channel specially and not stop the queues etc. in this case.
    This not only fixes the bug but also improves behaviour in
    this case as data frames etc. can continue to flow.
    
    Cc: stable@vger.kernel.org
    Reported-by: default avatarJouni Malinen <j@w1.fi>
    Tested-by: default avatarJouni Malinen <j@w1.fi>
    Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    b4b177a5
ieee80211_i.h 56.3 KB