• Paul Stewart's avatar
    mac80211: Don't let regulatory make us deaf · 3117bbdb
    Paul Stewart authored
    When regulatory information changes our HT behavior (e.g,
    when we get a country code from the AP we have just associated
    with), we should use this information to change the power with
    which we transmit, and what channels we transmit.  Sometimes
    the channel parameters we derive from regulatory information
    contradicts the parameters we used in association.  For example,
    we could have associated specifying HT40, but the regulatory
    rules we apply may forbid HT40 operation.
    In the situation above, we should reconfigure ourselves to
    transmit in HT20 only, however it makes no sense for us to
    disable receive in HT40, since if we associated with these
    parameters, the AP has every reason to expect we can and
    will receive packets this way.  The code in mac80211 does
    not have the capability of sending the appropriate action
    frames to signal a change in HT behaviour so the AP has
    no clue we can no longer receive frames encoded this way.
    In some broken AP implementations, this can leave us
    effectively deaf if the AP never retries in lower HT rates.
    This change breaks up the channel_type parameter in the
    ieee80211_enable_ht function into a separate receive and
    transmit part.  It honors the channel flags set by regulatory
    in order to configure the rate control algorithm, but uses
    the capability flags to configure the channel on the radio,
    since these were used in association to set the AP's transmit
    Signed-off-by: default avatarPaul Stewart <pstew@chromium.org>
    Cc: Sam Leffler <sleffler@chromium.org>
    Cc: Johannes Berg <johannes@sipsolutions.net>
    Reviewed-by: default avatarLuis R Rodriguez <mcgrof@frijolero.org>
    Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>