Re: [RFC] [PATCH 2/3] adds ieee80211_regdomains support

2006-10-25 Thread Luis R. Rodriguez

On 10/24/06, Anand Kumria [EMAIL PROTECTED] wrote:

On Mon, 23 Oct 2006 18:47:25 -0400, Luis R. Rodriguez wrote:

 ieee80211_regdomains

 Breaks down regulatory domains into data structures which allow
 drivers to share channel and power contraints based on stack
 regulatory domain. This driver adds in-kernel support for common
 regulatory domains (such as FCC and ETSI), makes updating the

[snip]

+/* Stack regulatory domain values. Atheros seems to have started this
+ * convention and most  hardware vendors followed their example.
+ * Although these are *very* common we allow for a hw-specific
+ * map between stack and device regdomain values. */
+enum stack_regdomain {
+   REGDOMAIN_WORLD = 0x00, /* World compliance, minimum set */
+   REGDOMAIN_FCC   = 0x10, /* USA */
+   REGDOMAIN_IC= 0x20, /* Canada */
+   REGDOMAIN_ETSI  = 0x30, /* Europe */
+   REGDOMAIN_SPAIN = 0x31, /* Spain */
+   REGDOMAIN_FRANCE= 0x32, /* France */
+   REGDOMAIN_MKK   = 0x40, /* Japan */
+};
+

Why not pick either the country name or the organisation within the country
that determines the frequency guidelines?


Ultimately I think this is the way this should work and this is why I
provide a alpha3 country code -- stack regulatory domain map.
Userpace should just let the user pick the country at say,
distribution install time, and the map then used to determine the
regulatory domain. Regulatory domains are what dictate the subband
restrictions and as such these are ultimately what we need in the
stack to decide what goes and what doesn't.

 Luis
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC] [PATCH 2/3] adds ieee80211_regdomains support

2006-10-24 Thread Johannes Berg

 and adds support for PtMP (Point
 to MultiPoint) and PtP (Point to Point) type restrictions.

What are those restrictions?

Similar comments here, why do you build the list at module init time
instead of having it static?

Also, do we really need all this data in the kernel?

johannes
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC] [PATCH 2/3] adds ieee80211_regdomains support

2006-10-24 Thread Luis R. Rodriguez

On 10/24/06, Johannes Berg [EMAIL PROTECTED] wrote:


 and adds support for PtMP (Point
 to MultiPoint) and PtP (Point to Point) type restrictions.

What are those restrictions?


I'm glad you asked. Here's a quote from:

http://university.cyberarmy.net/kb/tiki-index.php?page=The+Power+of+802.11

In the 2.4Ghz ISM band the FCC stipulates that the creation of PtMP
links be subject to the following restrictions:


   * EIRP must not exceed 4W (36dBm)
   * IR must not exceed 1W (30dBm)
   * For every 3dBi of antenna gain after the first 6 free dBi the
IR must be decreased by 3dBi (the 1:1 rule)


For PtP links that rule is thusly augmented:


   * IR is limited to 1W (30dBm)
   * For every 3dBi after the first 6 of antenna gain the IR must be
decreased by 1dBi (the 3:1 rule)

One thing to notice about the rules for the PtP link is that it does
not stipulate a maximum EIRP and significantly reduces the penalty for
adding antenna gain. In this situation it would be acceptable to have
an IR of 25dBm and with a directional antenna adding 21dBm of gain
giving us an EIRP of 46dBm or 40W. This is why it is very important to
stay away from the front of highly directional antennae. If you have
ever wondered what it would be like to squeeze yourself into a
microwave and have it turned on...


The restrictions defined in this regulatory module are designed first
to tackle PtMP links restrictions but keeps in mind PtP link subband
restrictions as well for further advancements. This would ultimately
complete regulatory domain support. To support PtP links well though
we'd need some further stack enhancements and modifications. Currently
I separate PtP and PtMP link restrictions by putting them on separate
subband linked list on the regulatory domain. Antenna gain is device
specific and for manufacturer's sake and user's hacker's sake we
should allow for:

1. Device specific definition of the manufacturer's default antenna gain and...
2. Allow the user to modify this antenna gain in case they modify the
antenna. Our due dillegence comes from at least providing built-in
regulatory framework and allowing the malleability of the malleable
components of such restrictions. If antenna gain is modified we should
accordingly modify the device's IR -- notice this requires changes
even for PtMP link restrictions as well but support without this was
what I was thinking for Phase I of this module.

(1) is covered under d80211.h on the ieee80211_conf struct, u8
antenna_max but this is a subband restriction not an entire device
restriction. If we want to add this support immediately we can add IR
to the subband definition.
(2) needs further enhancements on the stack, namely that making IR
dynamic based on the device's antenna gain.

All this requires a lot of changes. What I'd suggest first is to adopt
PtMP link restrictions without supporting dynamic IRs based on antenna
gains until Phase II. In Phase II I was hoping we'd tackle this and a
userspace daemon through nl80211/cfg80211. d80211 is due to go stable,
I was hoping regulatory domains under phase I would be one last
addition to it before going stable and Phase II can be the focus for a
v2 of a stable d80211.


Similar comments here, why do you build the list at module init time
instead of having it static?


It made the code cleaner, feel free to modify if there are benefits
through a static approach. I originally attempted a static array
approach here but ran into problems quickly due to the dynamic nature
of the data structures required for regulatory domains and was having
a headache dealing with all the nasty macros to build this statically.
I'd suggest we keep things as is unless we have a complete clear
understanding of all requirements of regulatory domains. Regulatory
domains are not really well documented and this perhaps is the best
break down of them that I've seen so far.


Also, do we really need all this data in the kernel?


Another great question. At first I actually wanted all this in
userspace but after some consideration figured it'd be best to
introduce in the kernel instead. Here are some considerations made me
change my mindl:

1. Regulatory restrictions affects the PHY's behaviour directly
2. IEEE-802.11D is a standard which all wireless stacks should
hopefully and eventually support. It is based on regulatory domains
which dictate how the PHY should work.
3. I believe the benefit in speed of having the regulatory
restrictions in the kernel outweight the overhead of having this in
the kernel
4. Introduction of a userspace daemon to update all regulatory domains
seems like a heavy restriction to immediately force every distribution
on. Also there is simply no clear World regulatory domain that
everyone can live peacefully with. An easier way to introduce
regulatory domains would be to have the most popular regulatory
domains built-in and slowly support userspace communication to update
and manage the regulatory db.

So, ultimately userspace should be the 

Re: [RFC] [PATCH 2/3] adds ieee80211_regdomains support

2006-10-24 Thread Anand Kumria
On Mon, 23 Oct 2006 18:47:25 -0400, Luis R. Rodriguez wrote:

 ieee80211_regdomains
 
 Breaks down regulatory domains into data structures which allow
 drivers to share channel and power contraints based on stack
 regulatory domain. This driver adds in-kernel support for common
 regulatory domains (such as FCC and ETSI), makes updating the

[snip]

+/* Stack regulatory domain values. Atheros seems to have started this 
+ * convention and most  hardware vendors followed their example.
+ * Although these are *very* common we allow for a hw-specific
+ * map between stack and device regdomain values. */
+enum stack_regdomain {
+   REGDOMAIN_WORLD = 0x00, /* World compliance, minimum set */
+   REGDOMAIN_FCC   = 0x10, /* USA */
+   REGDOMAIN_IC= 0x20, /* Canada */
+   REGDOMAIN_ETSI  = 0x30, /* Europe */
+   REGDOMAIN_SPAIN = 0x31, /* Spain */
+   REGDOMAIN_FRANCE= 0x32, /* France */
+   REGDOMAIN_MKK   = 0x40, /* Japan */
+};
+

Why not pick either the country name or the organisation within the country 
that determines the frequency guidelines?

Regards,
Anand

-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html