diff options
author | Luis R. Rodriguez <mcgrof@frijolero.org> | 2011-12-20 18:04:18 -0800 |
---|---|---|
committer | Luis R. Rodriguez <mcgrof@frijolero.org> | 2012-01-18 15:39:15 -0800 |
commit | 0d421c2851d55ed644b96060cdc2be10217e74bd (patch) | |
tree | 1c57b293001d60ee09c213f4d4e5137e3d199a66 | |
parent | f2a073df6d785a229f8b05ba8e488b03cb46d509 (diff) | |
download | crda-0d421c2851d55ed644b96060cdc2be10217e74bd.tar.gz crda-0d421c2851d55ed644b96060cdc2be10217e74bd.tar.bz2 crda-0d421c2851d55ed644b96060cdc2be10217e74bd.zip |
crda: move country2rd() and its helper to reglib.c
Start cleaning the way we deal with reglib.c as the goal
is to make that stuff a library to be shared first in
userspace with the regulatory simulator [0]. We start
off by moving country2rd() and its helper over to
reglib.c.
[0] git://github.com/mcgrof/regsim.git
Signed-off-by: Luis R. Rodriguez <mcgrof@frijolero.org>
-rw-r--r-- | print-regdom.c | 61 | ||||
-rw-r--r-- | reglib.c | 61 |
2 files changed, 61 insertions, 61 deletions
diff --git a/print-regdom.c b/print-regdom.c index f34a8db..a3bedeb 100644 --- a/print-regdom.c +++ b/print-regdom.c @@ -4,67 +4,6 @@ #include <arpa/inet.h> #include "reglib.h" -static void reg_rule2rd(uint8_t *db, int dblen, - uint32_t ruleptr, struct ieee80211_reg_rule *rd_reg_rule) -{ - struct regdb_file_reg_rule *rule; - struct regdb_file_freq_range *freq; - struct regdb_file_power_rule *power; - - struct ieee80211_freq_range *rd_freq_range = &rd_reg_rule->freq_range; - struct ieee80211_power_rule *rd_power_rule = &rd_reg_rule->power_rule; - - rule = crda_get_file_ptr(db, dblen, sizeof(*rule), ruleptr); - freq = crda_get_file_ptr(db, dblen, sizeof(*freq), rule->freq_range_ptr); - power = crda_get_file_ptr(db, dblen, sizeof(*power), rule->power_rule_ptr); - - rd_freq_range->start_freq_khz = ntohl(freq->start_freq); - rd_freq_range->end_freq_khz = ntohl(freq->end_freq); - rd_freq_range->max_bandwidth_khz = ntohl(freq->max_bandwidth); - - rd_power_rule->max_antenna_gain = ntohl(power->max_antenna_gain); - rd_power_rule->max_eirp = ntohl(power->max_eirp); - - rd_reg_rule->flags = ntohl(rule->flags); -} - -/* Converts a file regdomain to ieee80211_regdomain, easier to manage */ -struct ieee80211_regdomain *country2rd(uint8_t *db, int dblen, - struct regdb_file_reg_country *country) -{ - struct regdb_file_reg_rules_collection *rcoll; - struct ieee80211_regdomain *rd; - int i, num_rules, size_of_rd; - - rcoll = crda_get_file_ptr(db, dblen, sizeof(*rcoll), - country->reg_collection_ptr); - num_rules = ntohl(rcoll->reg_rule_num); - /* re-get pointer with sanity checking for num_rules */ - rcoll = crda_get_file_ptr(db, dblen, - sizeof(*rcoll) + num_rules * sizeof(uint32_t), - country->reg_collection_ptr); - - size_of_rd = sizeof(struct ieee80211_regdomain) + - num_rules * sizeof(struct ieee80211_reg_rule); - - rd = malloc(size_of_rd); - if (!rd) - return NULL; - - memset(rd, 0, size_of_rd); - - rd->alpha2[0] = country->alpha2[0]; - rd->alpha2[1] = country->alpha2[1]; - rd->n_reg_rules = num_rules; - - for (i = 0; i < num_rules; i++) { - reg_rule2rd(db, dblen, rcoll->reg_rule_ptrs[i], - &rd->reg_rules[i]); - } - - return rd; -} - static void print_reg_rule(struct ieee80211_reg_rule *rule) { struct ieee80211_freq_range *freq; @@ -151,3 +151,64 @@ out: return 1; #endif } + +static void reg_rule2rd(uint8_t *db, int dblen, + uint32_t ruleptr, struct ieee80211_reg_rule *rd_reg_rule) +{ + struct regdb_file_reg_rule *rule; + struct regdb_file_freq_range *freq; + struct regdb_file_power_rule *power; + + struct ieee80211_freq_range *rd_freq_range = &rd_reg_rule->freq_range; + struct ieee80211_power_rule *rd_power_rule = &rd_reg_rule->power_rule; + + rule = crda_get_file_ptr(db, dblen, sizeof(*rule), ruleptr); + freq = crda_get_file_ptr(db, dblen, sizeof(*freq), rule->freq_range_ptr); + power = crda_get_file_ptr(db, dblen, sizeof(*power), rule->power_rule_ptr); + + rd_freq_range->start_freq_khz = ntohl(freq->start_freq); + rd_freq_range->end_freq_khz = ntohl(freq->end_freq); + rd_freq_range->max_bandwidth_khz = ntohl(freq->max_bandwidth); + + rd_power_rule->max_antenna_gain = ntohl(power->max_antenna_gain); + rd_power_rule->max_eirp = ntohl(power->max_eirp); + + rd_reg_rule->flags = ntohl(rule->flags); +} + +/* Converts a file regdomain to ieee80211_regdomain, easier to manage */ +struct ieee80211_regdomain *country2rd(uint8_t *db, int dblen, + struct regdb_file_reg_country *country) +{ + struct regdb_file_reg_rules_collection *rcoll; + struct ieee80211_regdomain *rd; + int i, num_rules, size_of_rd; + + rcoll = crda_get_file_ptr(db, dblen, sizeof(*rcoll), + country->reg_collection_ptr); + num_rules = ntohl(rcoll->reg_rule_num); + /* re-get pointer with sanity checking for num_rules */ + rcoll = crda_get_file_ptr(db, dblen, + sizeof(*rcoll) + num_rules * sizeof(uint32_t), + country->reg_collection_ptr); + + size_of_rd = sizeof(struct ieee80211_regdomain) + + num_rules * sizeof(struct ieee80211_reg_rule); + + rd = malloc(size_of_rd); + if (!rd) + return NULL; + + memset(rd, 0, size_of_rd); + + rd->alpha2[0] = country->alpha2[0]; + rd->alpha2[1] = country->alpha2[1]; + rd->n_reg_rules = num_rules; + + for (i = 0; i < num_rules; i++) { + reg_rule2rd(db, dblen, rcoll->reg_rule_ptrs[i], + &rd->reg_rules[i]); + } + + return rd; +} |