Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/net80211 From FreeBSD. Definite structures and constant...



details:   https://anonhg.NetBSD.org/src/rev/a638841c849f
branches:  trunk
changeset: 566211:a638841c849f
user:      dyoung <dyoung%NetBSD.org@localhost>
date:      Fri Apr 30 23:51:53 2004 +0000

description:
>From FreeBSD.  Definite structures and constants for
QoS/WME/802.11e, for WPA, and for 802.11 MTU.

diffstat:

 sys/net80211/ieee80211.h |  156 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 152 insertions(+), 4 deletions(-)

diffs (253 lines):

diff -r 3acf791a0603 -r a638841c849f sys/net80211/ieee80211.h
--- a/sys/net80211/ieee80211.h  Fri Apr 30 23:51:50 2004 +0000
+++ b/sys/net80211/ieee80211.h  Fri Apr 30 23:51:53 2004 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: ieee80211.h,v 1.5 2003/12/14 09:56:53 dyoung Exp $     */
+/*     $NetBSD: ieee80211.h,v 1.6 2004/04/30 23:51:53 dyoung Exp $     */
 /*-
  * Copyright (c) 2001 Atsushi Onoe
  * Copyright (c) 2002, 2003 Sam Leffler, Errno Consulting
@@ -30,7 +30,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/net80211/ieee80211.h,v 1.3 2003/09/15 19:36:34 sam Exp $
+ * $FreeBSD: src/sys/net80211/ieee80211.h,v 1.5 2004/04/05 17:47:40 sam Exp $
  */
 #ifndef _NET80211_IEEE80211_H_
 #define _NET80211_IEEE80211_H_
@@ -69,6 +69,22 @@
        /* see below */
 } __attribute__((__packed__));
 
+struct ieee80211_qosframe {
+       u_int8_t        i_fc[2];
+       u_int8_t        i_dur[2];
+       u_int8_t        i_addr1[IEEE80211_ADDR_LEN];
+       u_int8_t        i_addr2[IEEE80211_ADDR_LEN];
+       u_int8_t        i_addr3[IEEE80211_ADDR_LEN];
+       u_int8_t        i_seq[2];
+       u_int8_t        i_qos[2];
+       /* possibly followed by addr4[IEEE80211_ADDR_LEN]; */
+       /* see below */
+} __attribute__((__packed__));
+
+struct ieee80211_qoscntl {
+       u_int8_t        i_qos[2];
+};
+
 struct ieee80211_frame_addr4 {
        u_int8_t        i_fc[2];
        u_int8_t        i_dur[2];
@@ -79,6 +95,59 @@
        u_int8_t        i_addr4[IEEE80211_ADDR_LEN];
 } __attribute__((__packed__));
 
+
+struct ieee80211_qosframe_addr4 {
+       u_int8_t        i_fc[2];
+       u_int8_t        i_dur[2];
+       u_int8_t        i_addr1[IEEE80211_ADDR_LEN];
+       u_int8_t        i_addr2[IEEE80211_ADDR_LEN];
+       u_int8_t        i_addr3[IEEE80211_ADDR_LEN];
+       u_int8_t        i_seq[2];
+       u_int8_t        i_addr4[IEEE80211_ADDR_LEN];
+       u_int8_t        i_qos[2];
+} __attribute__((__packed__));
+
+/*
+ * Management Notification Frame
+ */
+struct ieee80211_mnf {
+       u_int8_t        mnf_category;
+       u_int8_t        mnf_action;
+       u_int8_t        mnf_dialog;
+       u_int8_t        mnf_status;
+} __attribute__((__packed__));
+#define        MNF_SETUP_REQ   0
+#define        MNF_SETUP_RESP  1
+#define        MNF_TEARDOWN    2
+
+/*
+ * WME/802.11e Tspec Element
+ */
+struct ieee80211_wme_tspec {
+       u_int8_t        ts_id;
+       u_int8_t        ts_len;
+       u_int8_t        ts_oui[3];
+       u_int8_t        ts_oui_type;
+       u_int8_t        ts_oui_subtype;
+       u_int8_t        ts_version;
+       u_int8_t        ts_tsinfo[3];
+       u_int8_t        ts_nom_msdu[2];
+       u_int8_t        ts_max_msdu[2];
+       u_int8_t        ts_min_svc[4];
+       u_int8_t        ts_max_svc[4];
+       u_int8_t        ts_inactv_intv[4];
+       u_int8_t        ts_susp_intv[4];
+       u_int8_t        ts_start_svc[4];
+       u_int8_t        ts_min_rate[4];
+       u_int8_t        ts_mean_rate[4];
+       u_int8_t        ts_max_burst[4];
+       u_int8_t        ts_min_phy[4];
+       u_int8_t        ts_peak_rate[4];
+       u_int8_t        ts_delay[4];
+       u_int8_t        ts_surplus[2];
+       u_int8_t        ts_medium_time[2];
+} __attribute__((__packed__));
+
 #define        IEEE80211_FC0_VERSION_MASK              0x03
 #define        IEEE80211_FC0_VERSION_SHIFT             0
 #define        IEEE80211_FC0_VERSION_0                 0x00
@@ -118,6 +187,7 @@
 #define        IEEE80211_FC0_SUBTYPE_CFACK             0x50
 #define        IEEE80211_FC0_SUBTYPE_CFPOLL            0x60
 #define        IEEE80211_FC0_SUBTYPE_CF_ACK_CF_ACK     0x70
+#define        IEEE80211_FC0_SUBTYPE_QOS               0x80
 
 #define        IEEE80211_FC1_DIR_MASK                  0x03
 #define        IEEE80211_FC1_DIR_NODS                  0x00    /* STA->STA */
@@ -139,6 +209,12 @@
 
 #define        IEEE80211_NWID_LEN                      32
 
+#define        IEEE80211_QOS_TXOP                      0x00ff
+/* bit 8 is reserved */
+#define        IEEE80211_QOS_ACKPOLICY                 0x0600
+#define        IEEE80211_QOS_ESOP                      0x0800
+#define        IEEE80211_QOS_TID                       0xf000
+
 /*
  * Control frames.
  */
@@ -217,11 +293,26 @@
 #define        IEEE80211_CAPINFO_CHNL_AGILITY          0x0080
 /* bits 8-9 are reserved */
 #define        IEEE80211_CAPINFO_SHORT_SLOTTIME        0x0400
-/* bits 11-12 are reserved */
+#define        IEEE80211_CAPINFO_RSN                   0x0800
+/* bit 12 is reserved */
 #define        IEEE80211_CAPINFO_DSSSOFDM              0x2000
 /* bits 14-15 are reserved */
 
 /*
+ * 802.11i/WPA information element (maximally sized).
+ */
+struct ieee80211_ie_wpa {
+       u_int8_t        wpa_oui[3];     /* 0x00, 0x50, 0xf2 */
+       u_int8_t        wpa_type;       /* OUI type */
+       u_int16_t       wpa_version;    /* spec revision */
+       u_int32_t       wpa_mcipher[1]; /* multicast/group key cipher */
+       u_int16_t       wpa_uciphercnt; /* # pairwise key ciphers */
+       u_int32_t       wpa_uciphers[8];/* ciphers */
+       u_int16_t       wpa_authselcnt; /* authentication selector cnt*/
+       u_int32_t       wpa_authsels[8];/* selectors */
+} __attribute__((__packed__));
+
+/*
  * Management information elements
  */
 struct ieee80211_information {
@@ -260,6 +351,18 @@
        struct erp {
                u_int8_t        flags;
        } erp;
+       struct country {
+               u_int8_t        cc[3];          /* ISO CC+(I)ndoor/(O)utdoor */
+               struct {
+                       u_int8_t schan;         /* starting channel */
+                       u_int8_t nchan;         /* number channels */
+                       u_int8_t maxtxpwr;      
+               } band[4];                      /* up to 4 sub bands */
+       } country;
+       struct ath {
+               u_int8_t        flags;
+       } ath;
+       struct ieee80211_ie_wpa wpa;
 };
 
 enum {
@@ -272,8 +375,12 @@
        IEEE80211_ELEMID_IBSSPARMS              = 6,
        IEEE80211_ELEMID_COUNTRY                = 7,
        IEEE80211_ELEMID_CHALLENGE              = 16,
+       /* 17-31 reserved for challenge text extension */
        IEEE80211_ELEMID_ERP                    = 42,
        IEEE80211_ELEMID_XRATES                 = 50,
+       IEEE80211_ELEMID_TPC                    = 150,
+       IEEE80211_ELEMID_CCKM                   = 156,
+       IEEE80211_ELEMID_VENDOR                 = 221,  /* vendor private */
 };
 
 #define IEEE80211_CHALLENGE_LEN                        128
@@ -286,6 +393,32 @@
 #define        IEEE80211_ERP_USE_PROTECTION            0x02
 #define        IEEE80211_ERP_BARKER_MODE               0x04
 
+/* Atheros private advanced capabilities info */
+#define        ATHEROS_CAP_TURBO_PRIME                 0x01
+#define        ATHEROS_CAP_COMPRESSION                 0x02
+#define        ATHEROS_CAP_FAST_FRAME                  0x04
+/* bits 3-6 reserved */
+#define        ATHEROS_CAP_BOOST                       0x80
+
+#define        ATH_OUI                 0x7f0300                /* Atheros OUI */
+#define        ATH_OUI_TYPE            0x01
+#define        ATH_OUI_VERSION         0x01
+
+#define        WPA_OUI                 0xf25000
+#define        WPA_OUI_TYPE            0x01
+#define        WPA_OUI_VERSION         1               /* current supported version */
+
+#define        WPA_CSE_NULL            0x00
+#define        WPA_CSE_WEP40           0x01
+#define        WPA_CSE_TKIP            0x02
+#define        WPA_CSE_WRAP            0x03            /* WPA2/802.11i */
+#define        WPA_CSE_CCMP            0x04
+#define        WPA_CSE_WEP104          0x05
+
+#define        WPA_ASE_NONE            0x00
+#define        WPA_ASE_8021X_UNSPEC    0x01
+#define        WPA_ASE_8021X_PSK       0x02
+
 /*
  * AUTH management packets
  *
@@ -308,6 +441,7 @@
 
 #define        IEEE80211_AUTH_ALG_OPEN                 0x0000
 #define        IEEE80211_AUTH_ALG_SHARED               0x0001
+#define        IEEE80211_AUTH_ALG_LEAP                 0x0080
 
 enum {
        IEEE80211_AUTH_OPEN_REQUEST             = 1,
@@ -338,6 +472,11 @@
        IEEE80211_REASON_ASSOC_LEAVE            = 8,
        IEEE80211_REASON_ASSOC_NOT_AUTHED       = 9,
 
+       IEEE80211_REASON_RSN_REQUIRED           = 11,
+       IEEE80211_REASON_RSN_INCONSISTENT       = 12,
+       IEEE80211_REASON_IE_INVALID             = 13,
+       IEEE80211_REASON_MIC_FAILURE            = 14,
+
        IEEE80211_STATUS_SUCCESS                = 0,
        IEEE80211_STATUS_UNSPECIFIED            = 1,
        IEEE80211_STATUS_CAPINFO                = 10,
@@ -366,7 +505,16 @@
 
 #define        IEEE80211_CRC_LEN                       4
 
-#define        IEEE80211_MTU                           1500
+/*
+ * Maximum acceptable MTU is:
+ *     IEEE80211_MAX_LEN - WEP overhead - CRC -
+ *             QoS overhead - RSN/WPA overhead
+ * Min is arbitrarily chosen > IEEE80211_MIN_LEN.  The default
+ * mtu is Ethernet-compatible; it's set by ether_ifattach.
+ */
+#define        IEEE80211_MTU_MAX                       2290
+#define        IEEE80211_MTU_MIN                       32
+
 #define        IEEE80211_MAX_LEN                       (2300 + IEEE80211_CRC_LEN + \
     (IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN + IEEE80211_WEP_CRCLEN))
 #define        IEEE80211_MIN_LEN \



Home | Main Index | Thread Index | Old Index