Search Linux Wireless

Re: Issue connecting to an HT40 AP that sends a Country IE

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Jan 1, 2010 at 4:07 AM, Benoit PAPILLAULT
<benoit.papillault@xxxxxxx> wrote:
> Hello,
>
> I'd like to report an issue I have when trying to connect a laptop
> running ath9k to a 802.11n AP in HT40 mode. What happens is that the
> laptop cannot associate if the AP is running in HT40 mode. Association
> is OK if the AP is running in HT20 mode. Here is an excerpt from syslog :
>
> [  577.166241] wlan0: associate with AP 00:15:6d:e8:88:84 (try 1)
> [  577.167448] wlan0: RX AssocResp from 00:15:6d:e8:88:84 (capab=0x411
> status=10 aid=257)
> [  577.167451] wlan0: AP denied association (code=10)
> [  577.167460] wlan0: deauthenticating from 00:15:6d:e8:88:84 by local
> choice (reason=3)
>
> What's wrong is that the Associate Request (built by
> ieee80211_send_assoc) does not set the bit in HT Capabilities IE saying
> : "The station supports both HT20 & HT40".
>
> Looking into the code, it appears that both (flags &
> IEEE80211_CHAN_NO_HT40PLUS) and (flags & IEEE80211_CHAN_NO_HT40MINUS)
> are true, thus disabling the IEEE80211_HT_CAP_SUP_WIDTH_20_40 which is
> the culprit mentioned above.
>
> Digging further down, both flags are set in reg.c by :
>   if (freq_range->max_bandwidth_khz < MHZ_TO_KHZ(40))
>       bw_flags = IEEE80211_CHAN_NO_HT40;
>
> Indeed, at this stage, max_bandwidth_khz is 20 MHz only... Looking up in
> my syslog, I found this :
>
> [  506.036923] cfg80211: Received country IE:
> [  506.036927] cfg80211: Regulatory domain: FR
> [  506.036928]     (start_freq - end_freq @ bandwidth),
> (max_antenna_gain, max_eirp)
> [  506.036931]     (5170000 KHz - 5190000 KHz @ 40000 KHz), (10000 mBi,
> 10000 mBm)
> [  506.036933]     (5190000 KHz - 5210000 KHz @ 40000 KHz), (10000 mBi,
> 10000 mBm)
> [  506.036936]     (5210000 KHz - 5230000 KHz @ 40000 KHz), (10000 mBi,
> 10000 mBm)
> [  506.036938]     (5230000 KHz - 5250000 KHz @ 40000 KHz), (10000 mBi,
> 10000 mBm)
> [  506.036940]     (5250000 KHz - 5270000 KHz @ 40000 KHz), (10000 mBi,
> 10000 mBm)
> [  506.036943]     (5270000 KHz - 5290000 KHz @ 40000 KHz), (10000 mBi,
> 10000 mBm)
> [  506.036945]     (5290000 KHz - 5310000 KHz @ 40000 KHz), (10000 mBi,
> 10000 mBm)
> [  506.036948]     (5310000 KHz - 5330000 KHz @ 40000 KHz), (10000 mBi,
> 10000 mBm)
> [  506.036950]     (5490000 KHz - 5510000 KHz @ 40000 KHz), (10000 mBi,
> 10000 mBm)
> [  506.036952]     (5510000 KHz - 5530000 KHz @ 40000 KHz), (10000 mBi,
> 10000 mBm)
> [  506.036955]     (5530000 KHz - 5550000 KHz @ 40000 KHz), (10000 mBi,
> 10000 mBm)
> [  506.036957]     (5550000 KHz - 5570000 KHz @ 40000 KHz), (10000 mBi,
> 10000 mBm)
> [  506.036959]     (5570000 KHz - 5590000 KHz @ 40000 KHz), (10000 mBi,
> 10000 mBm)
> [  506.036962]     (5590000 KHz - 5610000 KHz @ 40000 KHz), (10000 mBi,
> 10000 mBm)
> [  506.036964]     (5610000 KHz - 5630000 KHz @ 40000 KHz), (10000 mBi,
> 10000 mBm)
> [  506.036966]     (5630000 KHz - 5650000 KHz @ 40000 KHz), (10000 mBi,
> 10000 mBm)
> [  506.036969]     (5650000 KHz - 5670000 KHz @ 40000 KHz), (10000 mBi,
> 10000 mBm)
> [  506.036971]     (5670000 KHz - 5690000 KHz @ 40000 KHz), (10000 mBi,
> 10000 mBm)
> [  506.036974]     (5690000 KHz - 5710000 KHz @ 40000 KHz), (10000 mBi,
> 10000 mBm)
>
> [  506.036975] cfg80211: CRDA thinks this should applied:
> [  506.036976] cfg80211: Regulatory domain: FR
> [  506.036978]     (start_freq - end_freq @ bandwidth),
> (max_antenna_gain, max_eirp)
> [  506.036980]     (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm)
> [  506.036982]     (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm)
> [  506.036984]     (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm)
> [  506.036987]     (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm)
>
> [  506.036988] cfg80211: We intersect both of these and get:
> [  506.037005] cfg80211: Regulatory domain: 98
> [  506.037006]     (start_freq - end_freq @ bandwidth),
> (max_antenna_gain, max_eirp)
> [  506.037008]     (5170000 KHz - 5190000 KHz @ 20000 KHz), (N/A, 2000 mBm)
> [  506.037011]     (5190000 KHz - 5210000 KHz @ 20000 KHz), (N/A, 2000 mBm)
> [  506.037013]     (5210000 KHz - 5230000 KHz @ 20000 KHz), (N/A, 2000 mBm)
> [  506.037015]     (5230000 KHz - 5250000 KHz @ 20000 KHz), (N/A, 2000 mBm)
> [  506.037017]     (5250000 KHz - 5270000 KHz @ 20000 KHz), (N/A, 2000 mBm)
> [  506.037019]     (5270000 KHz - 5290000 KHz @ 20000 KHz), (N/A, 2000 mBm)
> [  506.037021]     (5290000 KHz - 5310000 KHz @ 20000 KHz), (N/A, 2000 mBm)
> [  506.037024]     (5310000 KHz - 5330000 KHz @ 20000 KHz), (N/A, 2000 mBm)
> [  506.037026]     (5490000 KHz - 5510000 KHz @ 20000 KHz), (N/A, 2700 mBm)
> [  506.037028]     (5510000 KHz - 5530000 KHz @ 20000 KHz), (N/A, 2700 mBm)
> [  506.037030]     (5530000 KHz - 5550000 KHz @ 20000 KHz), (N/A, 2700 mBm)
> [  506.037032]     (5550000 KHz - 5570000 KHz @ 20000 KHz), (N/A, 2700 mBm)
> [  506.037035]     (5570000 KHz - 5590000 KHz @ 20000 KHz), (N/A, 2700 mBm)
> [  506.037037]     (5590000 KHz - 5610000 KHz @ 20000 KHz), (N/A, 2700 mBm)
> [  506.037039]     (5610000 KHz - 5630000 KHz @ 20000 KHz), (N/A, 2700 mBm)
> [  506.037041]     (5630000 KHz - 5650000 KHz @ 20000 KHz), (N/A, 2700 mBm)
> [  506.037043]     (5650000 KHz - 5670000 KHz @ 20000 KHz), (N/A, 2700 mBm)
> [  506.037045]     (5670000 KHz - 5690000 KHz @ 20000 KHz), (N/A, 2700 mBm)
> [  506.037047]     (5690000 KHz - 5710000 KHz @ 20000 KHz), (N/A, 2700 mBm)
>
> So, at this stage, max_bandwidth_khz is indeed 20 MHz!
>
> What's the real meaning of max_bandwidth_khz? If this is just the
> difference between the upper/lower frequency of each channels, then it's
> useless. If it is a capability features saying 40 MHz channel wide are
> allowed, then it should be left to 40 MHz even if upper/lower
> frequencies are only 20 MHz apart (since the ability to use 40 MHz
> depends on the list of all frequencies, not a single frequency).

Your AP is sending a country IE channel triplet for each channel it
allows. Its the first time I see an AP do this and its good that you
report this. What AP do you have?

reg.c treats each triplet as a regulatory rule though and since you
have a rule for each channel it will restrict this to the triplet
range which is just one channel and as such 20 MHz only makes sense. A
fix would be to expand on the ht40 checks to check connecting
frequency rules.

  Luis
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux