• Jouni Malinen's avatar
    cfg80211: Address some corner cases in scan result channel updating · 119f94a6
    Jouni Malinen authored
    cfg80211_get_bss_channel() is used to update the RX channel based on the
    available frame payload information (channel number from DSSS Parameter
    Set element or HT Operation element). This is needed on 2.4 GHz channels
    where frames may be received on neighboring channels due to overlapping
    frequency range.
    
    This might of some use on the 5 GHz band in some corner cases, but
    things are more complex there since there is no n:1 or 1:n mapping
    between channel numbers and frequencies due to multiple different
    starting frequencies in different operating classes. This could result
    in ieee80211_channel_to_frequency() returning incorrect frequency and
    ieee80211_get_channel() returning incorrect channel information (or
    indication of no match). In the previous implementation, this could
    result in some scan results being dropped completely, e.g., for the 4.9
    GHz channels. That prevented connection to such BSSs.
    
    Fix this by using the driver-provided channel pointer if
    ieee80211_get_channel() does not find matching channel data for the
    channel number in the frame payload and if the scan is done with 5 MHz
    or 10 MHz channel bandwidth. While doing this, also add comments
    describing what the function is trying to achieve to make it easier to
    understand what happens here and why.
    Signed-off-by: default avatarJouni Malinen <jouni@codeaurora.org>
    Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    119f94a6
scan.c 48.6 KB