add edge-power settings
authorJohannes Berg <johannes@sipsolutions.net>
Tue, 27 May 2008 13:48:27 +0000 (15:48 +0200)
committerJohannes Berg <johannes@sipsolutions.net>
Tue, 27 May 2008 13:48:27 +0000 (15:48 +0200)
dbparse.py
dump.c
regdb.h

index c571ee3..d88ca97 100644 (file)
@@ -14,6 +14,9 @@ flag_definitions = {
     '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):
@@ -63,6 +66,9 @@ class FlagError(Exception):
     def __init__(self, flag):
         self.flag = flag
 
+class DuplicateEdgePowerError(Exception):
+    pass
+
 class Permission(object):
     def __init__(self, freqband, power, flags):
         assert isinstance(freqband, FreqBand)
@@ -70,6 +76,9 @@ class Permission(object):
         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)
@@ -276,6 +285,8 @@ class DBParser(object):
             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))
diff --git a/dump.c b/dump.c
index 8b1535e..4222afa 100644 (file)
--- a/dump.c
+++ b/dump.c
@@ -42,6 +42,7 @@ static void print_reg_rule(__u8 *db, int dblen, __be32 ruleptr)
        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);
@@ -88,6 +89,10 @@ static void print_reg_rule(__u8 *db, int dblen, __be32 ruleptr)
        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");
 }
 
diff --git a/regdb.h b/regdb.h
index 7d1bfb6..a7279ad 100644 (file)
--- a/regdb.h
+++ b/regdb.h
@@ -55,20 +55,29 @@ struct regdb_file_power_rule {
        __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,