x86: disable intel_iommu support by default
[safe/jmp/linux-2.6] / Documentation / networking / radiotap-headers.txt
index e29e027..953331c 100644 (file)
@@ -84,4 +84,69 @@ Example valid radiotap header
        0x01 //<-- antenna
 
 
+Using the Radiotap Parser
+-------------------------
+
+If you are having to parse a radiotap struct, you can radically simplify the
+job by using the radiotap parser that lives in net/wireless/radiotap.c and has
+its prototypes available in include/net/cfg80211.h.  You use it like this:
+
+#include <net/cfg80211.h>
+
+/* buf points to the start of the radiotap header part */
+
+int MyFunction(u8 * buf, int buflen)
+{
+       int pkt_rate_100kHz = 0, antenna = 0, pwr = 0;
+       struct ieee80211_radiotap_iterator iterator;
+       int ret = ieee80211_radiotap_iterator_init(&iterator, buf, buflen);
+
+       while (!ret) {
+
+               ret = ieee80211_radiotap_iterator_next(&iterator);
+
+               if (ret)
+                       continue;
+
+               /* see if this argument is something we can use */
+
+               switch (iterator.this_arg_index) {
+               /*
+                * You must take care when dereferencing iterator.this_arg
+                * for multibyte types... the pointer is not aligned.  Use
+                * get_unaligned((type *)iterator.this_arg) to dereference
+                * iterator.this_arg for type "type" safely on all arches.
+                */
+               case IEEE80211_RADIOTAP_RATE:
+                       /* radiotap "rate" u8 is in
+                        * 500kbps units, eg, 0x02=1Mbps
+                        */
+                       pkt_rate_100kHz = (*iterator.this_arg) * 5;
+                       break;
+
+               case IEEE80211_RADIOTAP_ANTENNA:
+                       /* radiotap uses 0 for 1st ant */
+                       antenna = *iterator.this_arg);
+                       break;
+
+               case IEEE80211_RADIOTAP_DBM_TX_POWER:
+                       pwr = *iterator.this_arg;
+                       break;
+
+               default:
+                       break;
+               }
+       }  /* while more rt headers */
+
+       if (ret != -ENOENT)
+               return TXRX_DROP;
+
+       /* discard the radiotap header part */
+       buf += iterator.max_length;
+       buflen -= iterator.max_length;
+
+       ...
+
+}
+
 Andy Green <andy@warmcat.com>