On Thu, 2009-01-15 at 16:12 -0800, Luis R. Rodriguez wrote: > 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. I'll just believe you here :) > Signed-off-by: Luis R. Rodriguez <lrodriguez@xxxxxxxxxxx> > --- > net/wireless/reg.c | 30 +++++++++++++++++++----------- > 1 files changed, 19 insertions(+), 11 deletions(-) > > diff --git a/net/wireless/reg.c b/net/wireless/reg.c > index 77e45c7..0cc19e7 100644 > --- a/net/wireless/reg.c > +++ b/net/wireless/reg.c > @@ -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 > * for each channel subband */ > while (country_ie_len >= 3) { > + int end_channel = 0; > struct ieee80211_country_ie_triplet *triplet = > (struct ieee80211_country_ie_triplet *) country_ie; > int cur_sub_max_channel = 0, cur_channel = 0; > @@ -509,9 +510,25 @@ static struct ieee80211_regdomain *country_ie_2_rd( > 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_sub_max_channel = ieee80211_channel_to_frequency( > - cur_channel + triplet->chans.num_channels); > + cur_sub_max_channel = end_channel; > > /* Basic sanity check */ > 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 + > 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)); >
Attachment:
signature.asc
Description: This is a digitally signed message part