'NO-IBSS': 1<<8,
'NO-HT20': 1<<9,
'NO-HT40': 1<<10,
+ 'EDGE-POWER-1': 1<<11,
+ 'EDGE-POWER-2': 2<<11,
+ 'EDGE-POWER-3': 3<<11,
}
class FreqBand(object):
def __init__(self, flag):
self.flag = flag
+class DuplicateEdgePowerError(Exception):
+ pass
+
class Permission(object):
def __init__(self, freqband, power, flags):
assert isinstance(freqband, FreqBand)
self.freqband = freqband
self.power = power
self.flags = 0
+ f = [e for e in flags if e.startswith('EDGE-POWER-')]
+ if len(f) > 1:
+ raise DuplicateEdgePowerError()
for flag in flags:
if not flag in flag_definitions:
raise FlagError(flag)
perm = Permission(b, p, flags)
except FlagError, e:
self._syntax_error("Invalid flag '%s'" % e.flag)
+ except DuplicateEdgePowerError:
+ self._syntax_error("More than one edge power value given!")
if perm in self._current_country:
self._warn('Rule "%s, %s" added to "%s" twice' % (
bname, pname, self._current_country_name))
struct regdb_file_freq_range *freq;
struct regdb_file_power_rule *power;
__u32 flags;
+ int ep;
rule = get_file_ptr(db, dblen, sizeof(*rule), ruleptr);
freq = get_file_ptr(db, dblen, sizeof(*freq), rule->freq_range_ptr);
if (flags & RRF_NO_HT40)
printf(", NO-HT40");
+ ep = (flags & RRF_EDGE_POWER_MASK) >> EDGE_POWER_SHIFT;
+ if (ep)
+ printf(", EDGE-POWER-%d", ep);
+
printf("\n");
}
__be32 max_eirp;
};
+#define EDGE_POWER_SHIFT 11
+
enum reg_rule_flags {
- RRF_NO_OFDM = 1<<0,
- RRF_NO_CCK = 1<<1,
- RRF_NO_INDOOR = 1<<2,
- RRF_NO_OUTDOOR = 1<<3,
- RRF_DFS = 1<<4,
- RRF_PTP_ONLY = 1<<5,
- RRF_PTMP_ONLY = 1<<6,
- RRF_PASSIVE_SCAN= 1<<7,
- RRF_NO_IBSS = 1<<8,
- RRF_NO_HT20 = 1<<9,
- RRF_NO_HT40 = 1<<10,
+ RRF_NO_OFDM = 1<<0,
+ RRF_NO_CCK = 1<<1,
+ RRF_NO_INDOOR = 1<<2,
+ RRF_NO_OUTDOOR = 1<<3,
+ RRF_DFS = 1<<4,
+ RRF_PTP_ONLY = 1<<5,
+ RRF_PTMP_ONLY = 1<<6,
+ RRF_PASSIVE_SCAN = 1<<7,
+ RRF_NO_IBSS = 1<<8,
+ RRF_NO_HT20 = 1<<9,
+ RRF_NO_HT40 = 1<<10,
+ RRF_EDGE_POWER_MASK = 3<<EDGE_POWER_SHIFT,
};
+/* TODO: flesh out what these mean! */
+#define EDGE_POWER_NO 0
+#define EDGE_POWER_1 1
+#define EDGE_POWER_2 2
+#define EDGE_POWER_3 3
+
struct regdb_file_reg_rule {
/* pointers (offsets) into the file */
__be32 freq_range_ptr,