[BACK]Return to ieee80211_var.h CVS log [TXT][DIR] Up to [local] / sys / net80211

Annotation of sys/net80211/ieee80211_var.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: ieee80211_var.h,v 1.32 2007/07/28 11:13:41 damien Exp $       */
                      2: /*     $NetBSD: ieee80211_var.h,v 1.7 2004/05/06 03:07:10 dyoung Exp $ */
                      3:
                      4: /*-
                      5:  * Copyright (c) 2001 Atsushi Onoe
                      6:  * Copyright (c) 2002, 2003 Sam Leffler, Errno Consulting
                      7:  * All rights reserved.
                      8:  *
                      9:  * Redistribution and use in source and binary forms, with or without
                     10:  * modification, are permitted provided that the following conditions
                     11:  * are met:
                     12:  * 1. Redistributions of source code must retain the above copyright
                     13:  *    notice, this list of conditions and the following disclaimer.
                     14:  * 2. Redistributions in binary form must reproduce the above copyright
                     15:  *    notice, this list of conditions and the following disclaimer in the
                     16:  *    documentation and/or other materials provided with the distribution.
                     17:  * 3. The name of the author may not be used to endorse or promote products
                     18:  *    derived from this software without specific prior written permission.
                     19:  *
                     20:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     21:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     22:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     23:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                     24:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     25:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     26:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     27:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     28:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                     29:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     30:  *
                     31:  * $FreeBSD: src/sys/net80211/ieee80211_var.h,v 1.15 2004/04/05 22:10:26 sam Exp $
                     32:  */
                     33: #ifndef _NET80211_IEEE80211_VAR_H_
                     34: #define _NET80211_IEEE80211_VAR_H_
                     35:
                     36: /*
                     37:  * Definitions for IEEE 802.11 drivers.
                     38:  */
                     39:
                     40: #include <net80211/ieee80211.h>
                     41: #include <net80211/ieee80211_crypto.h>
                     42: #include <net80211/ieee80211_ioctl.h>          /* for ieee80211_stats */
                     43: #include <net80211/ieee80211_node.h>
                     44: #include <net80211/ieee80211_proto.h>
                     45:
                     46: #define        IEEE80211_CHAN_MAX      255
                     47: #define        IEEE80211_CHAN_ANY      0xffff          /* token for ``any channel'' */
                     48: #define        IEEE80211_CHAN_ANYC \
                     49:        ((struct ieee80211_channel *) IEEE80211_CHAN_ANY)
                     50:
                     51: #define        IEEE80211_TXPOWER_MAX   100     /* max power */
                     52: #define        IEEE80211_TXPOWER_MIN   -50     /* kill radio (if possible) */
                     53:
                     54: enum ieee80211_phytype {
                     55:        IEEE80211_T_DS,                 /* direct sequence spread spectrum */
                     56:        IEEE80211_T_FH,                 /* frequency hopping */
                     57:        IEEE80211_T_OFDM,               /* frequency division multiplexing */
                     58:        IEEE80211_T_TURBO,              /* high rate OFDM, aka turbo mode */
                     59:        IEEE80211_T_XR                  /* extended range mode */
                     60: };
                     61: #define        IEEE80211_T_CCK IEEE80211_T_DS  /* more common nomenclature */
                     62:
                     63: /* XXX not really a mode; there are really multiple PHY's */
                     64: enum ieee80211_phymode {
                     65:        IEEE80211_MODE_AUTO     = 0,    /* autoselect */
                     66:        IEEE80211_MODE_11A      = 1,    /* 5GHz, OFDM */
                     67:        IEEE80211_MODE_11B      = 2,    /* 2GHz, CCK */
                     68:        IEEE80211_MODE_11G      = 3,    /* 2GHz, OFDM */
                     69:        IEEE80211_MODE_FH       = 4,    /* 2GHz, GFSK */
                     70:        IEEE80211_MODE_TURBO    = 5     /* 5GHz, OFDM, 2x clock */
                     71: };
                     72: #define        IEEE80211_MODE_MAX      (IEEE80211_MODE_TURBO+1)
                     73:
                     74: enum ieee80211_opmode {
                     75:        IEEE80211_M_STA         = 1,    /* infrastructure station */
                     76:        IEEE80211_M_IBSS        = 0,    /* IBSS (adhoc) station */
                     77:        IEEE80211_M_AHDEMO      = 3,    /* Old lucent compatible adhoc demo */
                     78:        IEEE80211_M_HOSTAP      = 6,    /* Software Access Point */
                     79:        IEEE80211_M_MONITOR     = 8     /* Monitor mode */
                     80: };
                     81:
                     82: /*
                     83:  * 802.11g protection mode.
                     84:  */
                     85: enum ieee80211_protmode {
                     86:        IEEE80211_PROT_NONE     = 0,    /* no protection */
                     87:        IEEE80211_PROT_CTSONLY  = 1,    /* CTS to self */
                     88:        IEEE80211_PROT_RTSCTS   = 2     /* RTS-CTS */
                     89: };
                     90:
                     91: /*
                     92:  * Channels are specified by frequency and attributes.
                     93:  */
                     94: struct ieee80211_channel {
                     95:        u_int16_t       ic_freq;        /* setting in MHz */
                     96:        u_int16_t       ic_flags;       /* see below */
                     97: };
                     98:
                     99: #define        IEEE80211_IS_CHAN_FHSS(_c) \
                    100:        (((_c)->ic_flags & IEEE80211_CHAN_FHSS) == IEEE80211_CHAN_FHSS)
                    101: #define        IEEE80211_IS_CHAN_A(_c) \
                    102:        (((_c)->ic_flags & IEEE80211_CHAN_A) == IEEE80211_CHAN_A)
                    103: #define        IEEE80211_IS_CHAN_B(_c) \
                    104:        (((_c)->ic_flags & IEEE80211_CHAN_B) == IEEE80211_CHAN_B)
                    105: #define        IEEE80211_IS_CHAN_PUREG(_c) \
                    106:        (((_c)->ic_flags & IEEE80211_CHAN_PUREG) == IEEE80211_CHAN_PUREG)
                    107: #define        IEEE80211_IS_CHAN_G(_c) \
                    108:        (((_c)->ic_flags & IEEE80211_CHAN_G) == IEEE80211_CHAN_G)
                    109: #define        IEEE80211_IS_CHAN_T(_c) \
                    110:        (((_c)->ic_flags & IEEE80211_CHAN_T) == IEEE80211_CHAN_T)
                    111: #define        IEEE80211_IS_CHAN_TG(_c) \
                    112:        (((_c)->ic_flags & IEEE80211_CHAN_TG) == IEEE80211_CHAN_TG)
                    113:
                    114: #define        IEEE80211_IS_CHAN_2GHZ(_c) \
                    115:        (((_c)->ic_flags & IEEE80211_CHAN_2GHZ) != 0)
                    116: #define        IEEE80211_IS_CHAN_5GHZ(_c) \
                    117:        (((_c)->ic_flags & IEEE80211_CHAN_5GHZ) != 0)
                    118: #define        IEEE80211_IS_CHAN_OFDM(_c) \
                    119:        (((_c)->ic_flags & IEEE80211_CHAN_OFDM) != 0)
                    120: #define        IEEE80211_IS_CHAN_CCK(_c) \
                    121:        (((_c)->ic_flags & IEEE80211_CHAN_CCK) != 0)
                    122: #define        IEEE80211_IS_CHAN_GFSK(_c) \
                    123:        (((_c)->ic_flags & IEEE80211_CHAN_GFSK) != 0)
                    124: #define        IEEE80211_IS_CHAN_XR(_c) \
                    125:        (((_c)->ic_flags & IEEE80211_CHAN_XR) != 0)
                    126:
                    127: /* ni_chan encoding for FH phy */
                    128: #define        IEEE80211_FH_CHANMOD    80
                    129: #define        IEEE80211_FH_CHAN(set,pat)      (((set)-1)*IEEE80211_FH_CHANMOD+(pat))
                    130: #define        IEEE80211_FH_CHANSET(chan)      ((chan)/IEEE80211_FH_CHANMOD+1)
                    131: #define        IEEE80211_FH_CHANPAT(chan)      ((chan)%IEEE80211_FH_CHANMOD)
                    132:
                    133: /*
                    134:  * 802.11e EDCA AC parameters.
                    135:  */
                    136: struct ieee80211_edca_ac_params {
                    137:        u_int8_t        ac_ecwmin;      /* CWmin = 2^ECWmin - 1 */
                    138:        u_int8_t        ac_ecwmax;      /* CWmax = 2^ECWmax - 1 */
                    139:        u_int8_t        ac_aifsn;
                    140:        u_int16_t       ac_txoplimit;   /* 32TU */
                    141: #define IEEE80211_TXOP_TO_US(txop)     ((txop) * 32)
                    142:
                    143:        u_int8_t        ac_acm;
                    144: };
                    145:
                    146: #define        IEEE80211_PS_SLEEP      0x1     /* STA is in power saving mode */
                    147:
                    148: #define        IEEE80211_PS_MAX_QUEUE  50      /* maximum saved packets */
                    149:
                    150: #define        IEEE80211_SCAN_UNLOCKED 0x0
                    151: #define        IEEE80211_SCAN_LOCKED   0x1
                    152: #define        IEEE80211_SCAN_REQUEST  0x2
                    153: #define        IEEE80211_SCAN_RESUME   0x4
                    154:
                    155: struct ieee80211com {
                    156:        struct arpcom           ic_ac;
                    157:        LIST_ENTRY(ieee80211com) ic_list;       /* chain of all ieee80211com */
                    158:        void                    (*ic_recv_mgmt)(struct ieee80211com *,
                    159:                                    struct mbuf *, struct ieee80211_node *,
                    160:                                    int, int, u_int32_t);
                    161:        int                     (*ic_send_mgmt)(struct ieee80211com *,
                    162:                                    struct ieee80211_node *, int, int);
                    163:        void                    (*ic_recv_eapol)(struct ieee80211com *,
                    164:                                    struct mbuf *, struct ieee80211_node *);
                    165:        int                     (*ic_newstate)(struct ieee80211com *,
                    166:                                    enum ieee80211_state, int);
                    167:        void                    (*ic_newassoc)(struct ieee80211com *,
                    168:                                    struct ieee80211_node *, int);
                    169:        void                    (*ic_updateslot)(struct ieee80211com *);
                    170:        void                    (*ic_updateedca)(struct ieee80211com *);
                    171:        void                    (*ic_set_tim)(struct ieee80211com *, int, int);
                    172:        int                     (*ic_set_key)(struct ieee80211com *,
                    173:                                    struct ieee80211_node *,
                    174:                                    const struct ieee80211_key *);
                    175:        void                    (*ic_delete_key)(struct ieee80211com *,
                    176:                                    struct ieee80211_node *, int);
                    177:        u_int8_t                ic_myaddr[IEEE80211_ADDR_LEN];
                    178:        struct ieee80211_rateset ic_sup_rates[IEEE80211_MODE_MAX];
                    179:        struct ieee80211_channel ic_channels[IEEE80211_CHAN_MAX+1];
                    180:        u_char                  ic_chan_avail[howmany(IEEE80211_CHAN_MAX,NBBY)];
                    181:        u_char                  ic_chan_active[howmany(IEEE80211_CHAN_MAX, NBBY)];
                    182:        u_char                  ic_chan_scan[howmany(IEEE80211_CHAN_MAX,NBBY)];
                    183:        struct ifqueue          ic_mgtq;
                    184:        struct ifqueue          ic_pwrsaveq;
                    185:        u_int                   ic_scan_lock;   /* user-initiated scan */
                    186:        u_int8_t                ic_scan_count;  /* count scans */
                    187:        u_int32_t               ic_flags;       /* state flags */
                    188:        u_int32_t               ic_caps;        /* capabilities */
                    189:        u_int16_t               ic_modecaps;    /* set of mode capabilities */
                    190:        u_int16_t               ic_curmode;     /* current mode */
                    191:        enum ieee80211_phytype  ic_phytype;     /* XXX wrong for multi-mode */
                    192:        enum ieee80211_opmode   ic_opmode;      /* operation mode */
                    193:        enum ieee80211_state    ic_state;       /* 802.11 state */
                    194:        u_int32_t               *ic_aid_bitmap;
                    195:        u_int16_t               ic_max_aid;
                    196:        enum ieee80211_protmode ic_protmode;    /* 802.11g protection mode */
                    197:        struct ifmedia          ic_media;       /* interface media config */
                    198:        caddr_t                 ic_rawbpf;      /* packet filter structure */
                    199:        struct ieee80211_node   *ic_bss;        /* information for this node */
                    200:        struct ieee80211_channel *ic_ibss_chan;
                    201:        int                     ic_fixed_rate;  /* index to ic_sup_rates[] */
                    202:        u_int16_t               ic_rtsthreshold;
                    203:        u_int16_t               ic_fragthreshold;
                    204:        u_int                   ic_scangen;     /* gen# for timeout scan */
                    205:        struct ieee80211_node   *(*ic_node_alloc)(struct ieee80211com *);
                    206:        void                    (*ic_node_free)(struct ieee80211com *,
                    207:                                        struct ieee80211_node *);
                    208:        void                    (*ic_node_copy)(struct ieee80211com *,
                    209:                                        struct ieee80211_node *,
                    210:                                        const struct ieee80211_node *);
                    211:        u_int8_t                (*ic_node_getrssi)(struct ieee80211com *,
                    212:                                        const struct ieee80211_node *);
                    213:        u_int8_t                ic_max_rssi;
                    214:        struct ieee80211_tree   ic_tree;
                    215:        int                     ic_nnodes;      /* length of ic_nnodes */
                    216:        int                     ic_max_nnodes;  /* max length of ic_nnodes */
                    217:        u_int16_t               ic_lintval;     /* listen interval */
                    218:        u_int16_t               ic_holdover;    /* PM hold over duration */
                    219:        u_int16_t               ic_txmin;       /* min tx retry count */
                    220:        u_int16_t               ic_txmax;       /* max tx retry count */
                    221:        u_int16_t               ic_txlifetime;  /* tx lifetime */
                    222:        int16_t                 ic_txpower;     /* tx power setting (dBm) */
                    223:        u_int16_t               ic_bmisstimeout;/* beacon miss threshold (ms) */
                    224:        u_int16_t               ic_nonerpsta;   /* # non-ERP stations */
                    225:        u_int16_t               ic_longslotsta; /* # long slot time stations */
                    226:        int                     ic_mgt_timer;   /* mgmt timeout */
                    227:        int                     ic_inact_timer; /* inactivity timer wait */
                    228:        int                     ic_des_esslen;
                    229:        u_int8_t                ic_des_essid[IEEE80211_NWID_LEN];
                    230:        struct ieee80211_channel *ic_des_chan;  /* desired channel */
                    231:        u_int8_t                ic_des_bssid[IEEE80211_ADDR_LEN];
                    232:        struct ieee80211_key    ic_nw_keys[IEEE80211_WEP_NKID];
                    233:        int                     ic_wep_txkey;   /* default tx key index */
                    234:        void                    *ic_wep_ctx;    /* wep crypt context */
                    235:        u_int32_t               ic_iv;          /* initial vector for wep */
                    236:        struct ieee80211_stats  ic_stats;       /* statistics */
                    237:        struct timeval          ic_last_merge_print;    /* for rate-limiting
                    238:                                                         * IBSS merge print-outs
                    239:                                                         */
                    240:        struct ieee80211_edca_ac_params ic_edca_ac[EDCA_NUM_AC];
                    241:        u_int                   ic_edca_updtcount;
                    242:        u_int8_t                ic_globalcnt[EAPOL_KEY_NONCE_LEN];
                    243:        u_int64_t               ic_keyreplaycnt;
                    244:
                    245:        u_int8_t                *ic_tim_bitmap;
                    246:        u_int                   ic_tim_len;
                    247:        u_int                   ic_tim_mcast;
                    248:        u_int                   ic_dtim_period;
                    249:        u_int                   ic_dtim_count;
                    250: };
                    251: #define        ic_if           ic_ac.ac_if
                    252: #define        ic_softc        ic_if.if_softc
                    253:
                    254: LIST_HEAD(ieee80211com_head, ieee80211com);
                    255: extern struct ieee80211com_head ieee80211com_head;
                    256:
                    257: #define        IEEE80211_ADDR_EQ(a1,a2)        (memcmp(a1,a2,IEEE80211_ADDR_LEN) == 0)
                    258: #define        IEEE80211_ADDR_COPY(dst,src)    memcpy(dst,src,IEEE80211_ADDR_LEN)
                    259:
                    260: /* ic_flags */
                    261: #define        IEEE80211_F_ASCAN       0x00000001      /* STATUS: active scan */
                    262: #define        IEEE80211_F_SIBSS       0x00000002      /* STATUS: start IBSS */
                    263: #define        IEEE80211_F_WEPON       0x00000100      /* CONF: WEP enabled */
                    264: #define        IEEE80211_F_IBSSON      0x00000200      /* CONF: IBSS creation enable */
                    265: #define        IEEE80211_F_PMGTON      0x00000400      /* CONF: Power mgmt enable */
                    266: #define        IEEE80211_F_DESBSSID    0x00000800      /* CONF: des_bssid is set */
                    267: #define        IEEE80211_F_SCANAP      0x00001000      /* CONF: Scanning AP */
                    268: #define        IEEE80211_F_ROAMING     0x00002000      /* CONF: roaming enabled */
                    269: #define        IEEE80211_F_SWRETRY     0x00004000      /* CONF: sw tx retry enabled */
                    270: #define        IEEE80211_F_TXPMGT      0x00018000      /* STATUS: tx power */
                    271: #define IEEE80211_F_TXPOW_OFF  0x00000000      /* TX Power: radio disabled */
                    272: #define IEEE80211_F_TXPOW_FIXED        0x00008000      /* TX Power: fixed rate */
                    273: #define IEEE80211_F_TXPOW_AUTO 0x00010000      /* TX Power: undefined */
                    274: #define        IEEE80211_F_SHSLOT      0x00020000      /* STATUS: short slot time */
                    275: #define        IEEE80211_F_SHPREAMBLE  0x00040000      /* STATUS: short preamble */
                    276: #define IEEE80211_F_QOS                0x00080000      /* CONF: QoS enabled */
                    277: #define        IEEE80211_F_USEPROT     0x00100000      /* STATUS: protection enabled */
                    278: #define        IEEE80211_F_RSN         0x00200000      /* CONF: RSN enabled */
                    279: #define        IEEE80211_F_WPA1        0x00400000      /* CONF: WPA1 enabled */
                    280: #define IEEE80211_F_USERMASK   0xf0000000      /* CONF: ioctl flag mask */
                    281:
                    282: /* ic_caps */
                    283: #define        IEEE80211_C_WEP         0x00000001      /* CAPABILITY: WEP available */
                    284: #define        IEEE80211_C_IBSS        0x00000002      /* CAPABILITY: IBSS available */
                    285: #define        IEEE80211_C_PMGT        0x00000004      /* CAPABILITY: Power mgmt */
                    286: #define        IEEE80211_C_HOSTAP      0x00000008      /* CAPABILITY: HOSTAP avail */
                    287: #define        IEEE80211_C_AHDEMO      0x00000010      /* CAPABILITY: Old Adhoc Demo */
                    288: #define        IEEE80211_C_SWRETRY     0x00000020      /* CAPABILITY: sw tx retry */
                    289: #define        IEEE80211_C_TXPMGT      0x00000040      /* CAPABILITY: tx power mgmt */
                    290: #define        IEEE80211_C_SHSLOT      0x00000080      /* CAPABILITY: short slottime */
                    291: #define        IEEE80211_C_SHPREAMBLE  0x00000100      /* CAPABILITY: short preamble */
                    292: #define        IEEE80211_C_MONITOR     0x00000200      /* CAPABILITY: monitor mode */
                    293: #define IEEE80211_C_SCANALL    0x00000400      /* CAPABILITY: scan all chan */
                    294: #define IEEE80211_C_QOS                0x00000800      /* CAPABILITY: QoS avail */
                    295: #define IEEE80211_C_RSN                0x00001000      /* CAPABILITY: RSN avail */
                    296:
                    297: /* flags for ieee80211_fix_rate() */
                    298: #define        IEEE80211_F_DOSORT      0x00000001      /* sort rate list */
                    299: #define        IEEE80211_F_DOFRATE     0x00000002      /* use fixed rate */
                    300: #define        IEEE80211_F_DONEGO      0x00000004      /* calc negotiated rate */
                    301: #define        IEEE80211_F_DODEL       0x00000008      /* delete ignore rate */
                    302:
                    303: void   ieee80211_ifattach(struct ifnet *);
                    304: void   ieee80211_ifdetach(struct ifnet *);
                    305: void   ieee80211_media_init(struct ifnet *, ifm_change_cb_t, ifm_stat_cb_t);
                    306: int    ieee80211_media_change(struct ifnet *);
                    307: void   ieee80211_media_status(struct ifnet *, struct ifmediareq *);
                    308: int    ieee80211_ioctl(struct ifnet *, u_long, caddr_t);
                    309: int    ieee80211_get_rate(struct ieee80211com *);
                    310: void   ieee80211_watchdog(struct ifnet *);
                    311: int    ieee80211_fix_rate(struct ieee80211com *, struct ieee80211_node *, int);
                    312: int    ieee80211_rate2media(struct ieee80211com *, int,
                    313:                enum ieee80211_phymode);
                    314: int    ieee80211_media2rate(int);
                    315: u_int  ieee80211_mhz2ieee(u_int, u_int);
                    316: u_int  ieee80211_chan2ieee(struct ieee80211com *,
                    317:                const struct ieee80211_channel *);
                    318: u_int  ieee80211_ieee2mhz(u_int, u_int);
                    319: int    ieee80211_setmode(struct ieee80211com *, enum ieee80211_phymode);
                    320: enum ieee80211_phymode ieee80211_next_mode(struct ifnet *);
                    321: enum ieee80211_phymode ieee80211_chan2mode(struct ieee80211com *,
                    322:                const struct ieee80211_channel *);
                    323:
                    324: #ifdef IEEE80211_DEBUG
                    325: extern int ieee80211_debug;
                    326: #define        IEEE80211_DPRINTF(X)    do { if (ieee80211_debug) printf X; } while(0)
                    327: #define        IEEE80211_DPRINTF2(X)   do { if (ieee80211_debug>1) printf X; } while(0)
                    328: #else
                    329: #define        IEEE80211_DPRINTF(X)
                    330: #define        IEEE80211_DPRINTF2(X)
                    331: #endif
                    332:
                    333: extern int ieee80211_cache_size;
                    334:
                    335: #endif /* _NET80211_IEEE80211_VAR_H_ */

CVSweb