cfg80211: Fix sanity check on 5 GHz when processing country IE
This fixes two issues with the sanity check loop when processing the country IE: 1. Do not use frequency for the current subband channel check, this was a big fat typo. 2. Apply the 5 GHz 4-channel steps when considering max channel on each subband as was done with a recent patch. Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
1f304e4e3b
commit
615aab4b75
@@ -498,6 +498,7 @@ static struct ieee80211_regdomain *country_ie_2_rd(
|
|||||||
* calculate the number of reg rules we will need. We will need one
|
* calculate the number of reg rules we will need. We will need one
|
||||||
* for each channel subband */
|
* for each channel subband */
|
||||||
while (country_ie_len >= 3) {
|
while (country_ie_len >= 3) {
|
||||||
|
int end_channel = 0;
|
||||||
struct ieee80211_country_ie_triplet *triplet =
|
struct ieee80211_country_ie_triplet *triplet =
|
||||||
(struct ieee80211_country_ie_triplet *) country_ie;
|
(struct ieee80211_country_ie_triplet *) country_ie;
|
||||||
int cur_sub_max_channel = 0, cur_channel = 0;
|
int cur_sub_max_channel = 0, cur_channel = 0;
|
||||||
@@ -509,9 +510,25 @@ static struct ieee80211_regdomain *country_ie_2_rd(
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 2 GHz */
|
||||||
|
if (triplet->chans.first_channel <= 14)
|
||||||
|
end_channel = triplet->chans.first_channel +
|
||||||
|
triplet->chans.num_channels;
|
||||||
|
else
|
||||||
|
/*
|
||||||
|
* 5 GHz -- For example in country IEs if the first
|
||||||
|
* channel given is 36 and the number of channels is 4
|
||||||
|
* then the individual channel numbers defined for the
|
||||||
|
* 5 GHz PHY by these parameters are: 36, 40, 44, and 48
|
||||||
|
* and not 36, 37, 38, 39.
|
||||||
|
*
|
||||||
|
* See: http://tinyurl.com/11d-clarification
|
||||||
|
*/
|
||||||
|
end_channel = triplet->chans.first_channel +
|
||||||
|
(4 * (triplet->chans.num_channels - 1));
|
||||||
|
|
||||||
cur_channel = triplet->chans.first_channel;
|
cur_channel = triplet->chans.first_channel;
|
||||||
cur_sub_max_channel = ieee80211_channel_to_frequency(
|
cur_sub_max_channel = end_channel;
|
||||||
cur_channel + triplet->chans.num_channels);
|
|
||||||
|
|
||||||
/* Basic sanity check */
|
/* Basic sanity check */
|
||||||
if (cur_sub_max_channel < cur_channel)
|
if (cur_sub_max_channel < cur_channel)
|
||||||
@@ -590,15 +607,6 @@ static struct ieee80211_regdomain *country_ie_2_rd(
|
|||||||
end_channel = triplet->chans.first_channel +
|
end_channel = triplet->chans.first_channel +
|
||||||
triplet->chans.num_channels;
|
triplet->chans.num_channels;
|
||||||
else
|
else
|
||||||
/*
|
|
||||||
* 5 GHz -- For example in country IEs if the first
|
|
||||||
* channel given is 36 and the number of channels is 4
|
|
||||||
* then the individual channel numbers defined for the
|
|
||||||
* 5 GHz PHY by these parameters are: 36, 40, 44, and 48
|
|
||||||
* and not 36, 37, 38, 39.
|
|
||||||
*
|
|
||||||
* See: http://tinyurl.com/11d-clarification
|
|
||||||
*/
|
|
||||||
end_channel = triplet->chans.first_channel +
|
end_channel = triplet->chans.first_channel +
|
||||||
(4 * (triplet->chans.num_channels - 1));
|
(4 * (triplet->chans.num_channels - 1));
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user