1. 20 Nov, 2013 1 commit
  2. 30 Oct, 2013 8 commits
    • Luis R. Rodriguez's avatar
      crda: make reglib a shared library · 0f73f08f
      Luis R. Rodriguez authored
      Now that we have quite a few helpers this puts the more
      valuable helpers into a library.
      Signed-off-by: 's avatarLuis R. Rodriguez <mcgrof@do-not-panic.com>
      0f73f08f
    • Luis R. Rodriguez's avatar
      crda: make ssl keys include stdint.h · 6d22bdcb
      Luis R. Rodriguez authored
      This is required to fix compilation if we
      move reglig to its own library.
      Signed-off-by: 's avatarLuis R. Rodriguez <mcgrof@do-not-panic.com>
      6d22bdcb
    • Luis R. Rodriguez's avatar
      crda: add regulatory domain optimizer · 0b8105a9
      Luis R. Rodriguez authored
      This adds a regulatory domain optimizer which can be
      used with information of a regulatory domain in db.txt
      format in stdin. It makes use of the new shiny regulatory
      domain stream parser.
      
      The way this works is it iterates over the regulatory domain
      computing unions between each frequency, starting from each
      frequency as a pivot. If a union leads to a valid regulatory
      rule we verify that the pivot and othre frequency rules that
      provided that valid union can fit into that union regulatory
      rule by computing an intersection. If an intersection is
      possible it means two rules can be optimized out. We do
      this repetitively.
      
      Note: cfg80211's nl80211.h API has:
      
            #define NL80211_MAX_SUPP_REG_RULES              32
      
      Our tools, both the stream parser and the optimizer are not
      limited to these artificial limits ! We can work on extending
      the kernel's limit but so far we have had no needs. A few
      notes below though on the existing reasoning for the limit
      and possible future enhancements.
      
      This is used nl80211_set_reg() upon intercept of a regulatory
      domain being sent from userspace to it. We picked a limitation
      to at least have a stopping gap to avoid userpace flooding the
      kernel with a denial of service requests on memory from userspace.
      This means that userspace can only request at most a kmalloc
      of up to 32 regulatory rules for processing for the regulatory
      data that we are copying from userspace. There's a Linux kernel
      enhancement that will be made soon so that we invalidate bogus
      requests, by checking to see if the incomming regulatory domain
      alpha2 was not expected upon a regulatory hint initiator (even
      if userspace first tells the kernel it is waiting for a response
      from kernel space), and if its invalid then we drop the userspace
      supplied request, therefore avoiding some form of flooding on
      memory to the kernel.
      
      Note that we can still get flooding if the userspace API is used
      to *request* to the kernel for a regulatory domain to be sent
      from userspace, in that case the kernel will properly expect the
      regulatory data for the alpha2. To prevent flooding there perhaps
      its a good idea for us to check whether a userspace pending request
      is pendingg and if so deny new updates until the last one triggers
      a timeout.
      
      Screenshot for a US file with 40 rules:
      
      mcgrof@frijol ~/devel/xlreg (git::master)$ cat us | grep --"(" | wc -l
      40
      
      mcgrof@frijol ~/devel/crda (git::master)$ cat us
      country US: DFS-FCC
              (2402.000 - 2422.000 @ 20.000), (30.00)
              (2407.000 - 2427.000 @ 20.000), (30.00)
              (2412.000 - 2432.000 @ 20.000), (30.00)
              (2417.000 - 2437.000 @ 20.000), (30.00)
              (2422.000 - 2442.000 @ 20.000), (30.00)
              (2427.000 - 2447.000 @ 20.000), (30.00)
              (2432.000 - 2452.000 @ 20.000), (30.00)
              (2437.000 - 2457.000 @ 20.000), (30.00)
              (2442.000 - 2462.000 @ 20.000), (30.00)
              (2447.000 - 2467.000 @ 20.000), (30.00)
              (2452.000 - 2472.000 @ 20.000), (30.00)
              (2402.000 - 2442.000 @ 40.000), (30.00)
              (2407.000 - 2447.000 @ 40.000), (30.00)
              (2412.000 - 2452.000 @ 40.000), (30.00)
              (2417.000 - 2457.000 @ 40.000), (30.00)
              (2422.000 - 2462.000 @ 40.000), (30.00)
              (2427.000 - 2467.000 @ 40.000), (30.00)
              (2432.000 - 2472.000 @ 40.000), (30.00)
              (5170.000 - 5190.000 @ 20.000), (17.00)
              (5190.000 - 5210.000 @ 20.000), (17.00)
              (5210.000 - 5230.000 @ 20.000), (17.00)
              (5230.000 - 5250.000 @ 20.000), (17.00)
              (5250.000 - 5270.000 @ 20.000), (23.00), DFS
              (5270.000 - 5290.000 @ 20.000), (23.00), DFS
              (5290.000 - 5310.000 @ 20.000), (23.00), DFS
              (5310.000 - 5330.000 @ 20.000), (23.00), DFS
              (5735.000 - 5755.000 @ 20.000), (30.00)
              (5755.000 - 5775.000 @ 20.000), (30.00)
              (5775.000 - 5795.000 @ 20.000), (30.00)
              (5795.000 - 5815.000 @ 20.000), (30.00)
              (5815.000 - 5835.000 @ 20.000), (30.00)
              (5170.000 - 5210.000 @ 40.000), (17.00)
              (5210.000 - 5250.000 @ 40.000), (17.00)
              (5250.000 - 5290.000 @ 40.000), (23.00), DFS
              (5290.000 - 5330.000 @ 40.000), (23.00), DFS
              (5735.000 - 5775.000 @ 40.000), (30.00)
              (5775.000 - 5815.000 @ 40.000), (30.00)
              (5170.000 - 5250.000 @ 80.000), (17.00)
              (5250.000 - 5330.000 @ 80.000), (23.00), DFS
              (5735.000 - 5815.000 @ 80.000), (30.00)
      
      mcgrof@frijol ~/devel/crda (git::master)$ cat us | ./optimize
      country US: DFS-FCC
              (2402.000 - 2472.000 @ 40.000), (30.00)
              (5170.000 - 5250.000 @ 80.000), (17.00)
              (5250.000 - 5330.000 @ 80.000), (23.00), DFS
              (5735.000 - 5835.000 @ 80.000), (30.00)
      
      I've also tested this with the current db.txt from wireless-regdb
      and get real optimiziations which I will post later.
      Signed-off-by: 's avatarLuis R. Rodriguez <mcgrof@do-not-panic.com>
      0b8105a9
    • Luis R. Rodriguez's avatar
      crda: add regulatory domain stream parser · 779cb492
      Luis R. Rodriguez authored
      This adds a stream parser for regulatory domains. This
      allows developers to build regulatory domains now using
      the db.txt from a stream, either stdin, or a from an
      opened file.
      
      This also adds a simple db2rd which for now only uses the
      library but with a bit of effort can also be used as a
      suitable replacement for the kernel's genregdb.awk.
      Signed-off-by: 's avatarLuis R. Rodriguez <mcgrof@do-not-panic.com>
      779cb492
    • Luis R. Rodriguez's avatar
      crda: fix -pedantic gcc compilation · 231a1097
      Luis R. Rodriguez authored
      gcc likes to complain about this, fix that as we're
      going to get a bit more anal with code here soon as
      we're moving towards making a library out of reglib.
      Signed-off-by: 's avatarLuis R. Rodriguez <mcgrof@do-not-panic.com>
      231a1097
    • Luis R. Rodriguez's avatar
      crda: relicense under copyleft-next-0.3.0 · 39bef495
      Luis R. Rodriguez authored
      I'm relicensing CRDA to copyleft-next-0.3.0. The original
      motivation was to help with the BSD family but they are not
      using any of this software and as this software grows I'd
      like to ensure we use the best free software license
      possible.
      
      Fontana's work on copyleft-next is great and has good
      community traction. At this point development for
      copyleft-next has slowed down as copyleft-next-0.3.0
      is already a good, usable alternative to GPLv2 and GPLv3.
      
      A few notes:
      
        * With copyleft we don't have to specify 'at your option
          any later version' since the license allows that by
          default.
      
        * Some folks might wonder if copyleft-next-0.3.0 is
          OSI OSD-conformant or FSF-free since neither of
          those bodies have examined the license officially,
          but note, although IANAL, that copyleft-next is
          outbound-compatible with GPLv2 and GPLv3
      Signed-off-by: 's avatarLuis R. Rodriguez <mcgrof@do-not-panic.com>
      39bef495
    • Luis R. Rodriguez's avatar
      crda: remove antenna gain · 19942574
      Luis R. Rodriguez authored
      Signed-off-by: 's avatarLuis R. Rodriguez <mcgrof@do-not-panic.com>
      19942574
    • Luis R. Rodriguez's avatar
      crda: consolidate passive-scan and no-ibss flags · 3fb58aa0
      Luis R. Rodriguez authored
      We consolidate these two flags into one flag to indicate
      initiating radiation is not allowed.
      
      For parsing we'll treat the no-ibss flag moving forward
      as also passive-scan as well, newer kernels will always
      treat these equally, older kernels will use the still
      use them separately even though in practice they are
      used together interchangably.
      Signed-off-by: 's avatarLuis R. Rodriguez <mcgrof@do-not-panic.com>
      3fb58aa0
  3. 17 Jul, 2013 2 commits
    • Luis R. Rodriguez's avatar
      reglib: add reglib_is_valid_rd() and verify data upon build · 6145db24
      Luis R. Rodriguez authored
      This will verify the sanity of a regulatory domain upon build
      time. This is useful if you are making modifications to
      wireless-regdb and need to verify the regulatory domains
      won't be rejected by a similar checker. In the case of the
      Linux kernel regulatory domain data structures that get
      a complaint would have been rejected completely.
      Signed-off-by: 's avatarLuis R. Rodriguez <mcgrof@do-not-panic.com>
      6145db24
    • Ben Hutchings's avatar
      reglib: Validate all structure and array lengths · f4c3e3fc
      Ben Hutchings authored
      Add checks that:
      - Signature length does not exceed the file length (this was already
        checked, but did not account for signature lengths greater than 2 GB)
      - Database length is long enough for all structures we expect in it
      - Array length calculations will not overflow
      
      To keep these checks simple, change the types of array length and index
      variables to unsigned int (must be at least 32-bit, matching the file
      format) and the types of byte-length variables to size_t.
      
      Alexandre Rebert <alexandre@cmu.edu> reported and provided a test case
      for the signature length issue; the others I found by inspection.
      Signed-off-by: Ben Hutchings's avatarBen Hutchings <ben@decadent.org.uk>
      Signed-off-by: 's avatarLuis R. Rodriguez <mcgrof@do-not-panic.com>
      f4c3e3fc
  4. 31 May, 2013 22 commits
  5. 30 May, 2013 4 commits
  6. 29 May, 2013 3 commits