Re: [RFC] 802.11d Country IE parsing/support | |
| [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] | |
Am Donnerstag, 4. September 2008 schrieb Luis R. Rodriguez:
> static int reg_rules_intersect(
> struct ieee80211_reg_rule *rule1,
> struct ieee80211_reg_rule *rule2,
> struct ieee80211_reg_rule **intersected_rule)
> {
> struct ieee80211_freq_range *freq_range1, *freq_range2, *freq_range;
> struct ieee80211_power_rule *power_rule1, *power_rule2, *power_rule;
> u32 freq_diff;
>
> freq_range1 = &rule1->freq_range;
> freq_range2 = &rule2->freq_range;
> freq_range = &(*intersected_rule)->freq_range;
>
> power_rule1 = &rule1->power_rule;
> power_rule2 = &rule2->power_rule;
> power_rule = &(*intersected_rule)->power_rule;
>
> freq_range->start_freq = max(freq_range1->start_freq,
> freq_range2->start_freq);
> freq_range->end_freq = min(freq_range1->end_freq,
> freq_range2->end_freq);
> freq_range->max_bandwidth = min(freq_range1->max_bandwidth,
> freq_range2->max_bandwidth);
>
> freq_diff = freq_range->end_freq - freq_range->start_freq;
> if (freq_range->max_bandwidth > freq_diff)
> freq_range->max_bandwidth = freq_diff;
>
> power_rule->max_eirp = min(power_rule1->max_eirp,
> power_rule2->max_eirp);
> power_rule->max_eirp = min(power_rule1->max_eirp,
> power_rule2->max_eirp);
max_eirp should be max_antenna_gain in the second block, right?
> (*intersected_rule)->flags = (rule1->flags | rule2->flags);
Wouldn't (rule1->flags & rule2->flags) be more feasible?
> if (!reg_is_valid_rule(*intersected_rule))
> return -EINVAL;
>
> return 0;
> }
>
> static int regdom_intersect(
> struct ieee80211_regdomain *rd1,
> struct ieee80211_regdomain *rd2,
> struct ieee80211_regdomain **rd)
> {
> int r, size_of_regd;
> unsigned int x, y;
> unsigned int num_rules = 0, rule_idx = 0;
> struct ieee80211_reg_rule *rule1, *rule2, *intersected_rule;
>
> *rd = NULL;
>
> if (!rd1 || !rd2)
> return -EINVAL;
>
> /* First we get a count of the rules we'll need, then we actually
> * build them. This is to so we can kzalloc() and kfree() a
> * regdomain once */
>
> for (x = 0; x < rd1->n_reg_rules; x++) {
> rule1 = &rd1->reg_rules[x];
> for (y = 0; y < rd2->n_reg_rules; y++) {
> rule2 = &rd2->reg_rules[y];
> if (!reg_rules_intersect(rule1, rule2,
> &intersected_rule))
Hmm, &intersected_rule is uninitialized here and reg_rules_intersect does not
allocate anything.
> num_rules++;
> }
> }
>
> if (!num_rules)
> return -ENODATA;
>
> size_of_regd = sizeof(struct ieee80211_regdomain) +
> (num_rules * sizeof(struct ieee80211_reg_rule));
>
> *rd = kzalloc(size_of_regd, GFP_KERNEL);
> if (!*rd)
> return -ENOMEM;
>
> for (x = 0; x < rd1->n_reg_rules; x++) {
> rule1 = &rd1->reg_rules[x];
> for (y = 0; y < rd2->n_reg_rules; y++) {
> rule2 = &rd2->reg_rules[y];
> r = reg_rules_intersect(rule1, rule2,
> &intersected_rule);
Same here.
> if (r)
> continue;
> memcpy(&(*rd)->reg_rules[rule_idx],
> intersected_rule,
> sizeof(intersected_rule));
sizeof(*intersected_rule)?
Helmut
--
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
[Site Home] [Linux Netdev] [Kernel Newbies] [Share Photos] [IDE] [Security] [Git] [Netfilter] [Bugtraq] [Rubini] [Photo] [Yosemite] [Yosemite News] [MIPS Linux] [ARM Linux] [Linux Security] [Linux RAID] [Linux ATA RAID] [Samba] [Video 4 Linux] [Device Mapper] [Linux Resources] [Free Dating]
![]() |
![]() |