⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wlanproto.h

📁 Atheros AP Test with Agilent N4010A source code
💻 H
📖 第 1 页 / 共 5 页
字号:
    A_UINT8 cwmin;
    A_UINT8 cwmax;
    A_UINT8 reserved1[2];
    A_UINT8 flags;
#define AIE_CKIP_MIC        0x08
#define AIE_CKIP_KP         0x10
    A_UINT8 distance;
    A_UCHAR name[16];       /* may not be null terminated */
    A_UINT8 reserved2[4];
} __ATTRIB_PACK AIRONET_IE;

/* Transmit Power Control Info Element for CCX */
typedef struct TpcIe {
    A_UINT8 elementID;
    A_UINT8 length;
    A_UINT8 oui[4];
    A_UINT8 pwrLimit;       // in dBm
    A_UINT8 reserved;
} __ATTRIB_PACK TPC_IE;

typedef struct AironetCCXOptionsIe {
    A_UINT8         elementID;
    A_UINT8         length;
    A_UINT8         oui[3];
    A_UINT8         ccxProtoType; // Protocol demux for Cisco VPIE
    A_UINT8         value[1];
} __ATTRIB_PACK AIRONET_CCX_OPTIONS_IE;

#define VALID_TPC_ELEMENT(_x)                \
        ( (_x)->elementID == ELE_TPC      && \
          (_x)->length    == ELE_TPC_SIZE && \
          (_x)->oui[0]    == 0x00         && \
          (_x)->oui[1]    == 0x40         && \
          (_x)->oui[2]    == 0x96         && \
          (_x)->oui[3]    == 0x00 )

#define CCX_VERSION_2                  0x02

typedef struct wlanInfoElementSet {
    INFO_ELEMENT           *pInfoElement[MAP_ELE_ESCAPE + 1];
    /* These are simple ptrs arising from VendorPrivate IEs */
    INFO_ELEMENT           *pWpaIe;
    ATH_ADVCAP_IE          *pAthCap;
    ATH_WME_PARAM_IE       *pAthWmeIe;
    AIRONET_CCX_OPTIONS_IE *pCcxOptions;
    CCX_RM_IE              *pCcxRmIe;
    void                   *pCcxQosIe;
    ATH_XR_PARAM_IE        *pAthXrIe;
    WMEv1_PARAM_IE         *pWmeV1Ie;
    WMEv1_TSPEC_ELEMENT     *pWmeV1Tspec;
} __ATTRIB_PACK INFO_ELEMENT_SET;

/* Additional macros */

#define IS_ELEMENT_USED(_x) ((_x)->length != 0)

/**********************************************************/

/*
 * This section defines all types of 802.11 frames
 */

/*
 * PLCP Header
 * Frames delivered by MAC to the host will have the PLCP
 * header before the actual MAC header begins.
 */

#ifdef BIG_ENDIAN

typedef struct wlanPLCPHeader {
    A_UINT32    tail:6,                 /* 6 tail bits */
                parity:1,               /* parity bit */
                length:12,              /* 12 bits length field */
                reserved:1,             /* Reserved bit */
                rate:4,                 /* 4 bits rate */
                rssi:8;                 /* receiver signal strength */
    A_UINT16    service;                /* 16 service bits, ignored */
} __ATTRIB_PACK WLAN_PLCP_HEADER;

#else /* Little_Endian */

typedef struct wlanPLCPHeader {
    A_UINT32    rssi:8,                 /* receiver signal strength */
                rate:4,                 /* 4 bits rate */
                reserved:1,             /* Reserved bit */
                length:12,              /* 12 bits length field */
                parity:1,               /* parity bit */
                tail:6;                 /* 6 tail bits */
    A_UINT16    service;                /* 16 service bits, ignored */
} __ATTRIB_PACK WLAN_PLCP_HEADER;

#endif /* Endianness */

/*
 * Control frames, section 7.2.1 of the spec.
 * The MAC Header part of control frames varies, hence we
 * haven't declared a separate structure for it.
 */

typedef struct wlanFrameRTS {
    FRAME_CONTROL frameCtrl;      /* Frame control */
    DURATION      durationNav;    /* Duration 0-32767 */
    WLAN_MACADDR  recAddr;        /* Receiver address */
    WLAN_MACADDR  transAddr;      /* Transmitter addr */
} __ATTRIB_PACK WLAN_FRAME_RTS;

typedef struct wlanFrameCTS {
    FRAME_CONTROL frameCtrl;      /* Frame control */
    DURATION      durationNav;    /* Duration 0-32767 */
    WLAN_MACADDR  recAddr;        /* Receiver address */
} __ATTRIB_PACK WLAN_FRAME_CTS;

typedef struct wlanFrameACK {
    FRAME_CONTROL frameCtrl;      /* Frame control */
    DURATION      durationNav;    /* Duration 0-32767 */
    WLAN_MACADDR  recAddr;        /* Receiver address */
} __ATTRIB_PACK WLAN_FRAME_ACK;

typedef struct wlanFramePspoll {
    FRAME_CONTROL frameCtrl;      /* Frame control */
    DURATION      durationId;     /* bits 0:10 AID */
    BSSID         bssId;          /* BSS ID */
    WLAN_MACADDR  transAddr;      /* Transmitter addr */
} __ATTRIB_PACK WLAN_FRAME_PSPOLL;

typedef struct wlanFrameCFEnd {
    FRAME_CONTROL frameControl;   /* Frame control */
    DURATION      durationNav;    /* set to 0 */
    WLAN_MACADDR  recAddr;        /* Receiver address */
    BSSID         bssId;          /* BSS ID */
} __ATTRIB_PACK WLAN_FRAME_CFEND;

typedef struct wlanFrameCFEndAck {
    FRAME_CONTROL frameControl;   /* Frame control */
    DURATION      durationNav;    /* set to 0 */
    WLAN_MACADDR  recAddr;        /* Receiver address */
    BSSID         bssId;          /* BSS ID */
} __ATTRIB_PACK WLAN_FRAME_CFENDACK;

/*
 * Data frames, section 7.2.2
 */

/* Maximum size of payload, i.e. frame body in data packet */
#define MAX_80211_FRAME_BODY_SIZE       MAX_WLAN_BODY_SIZE

/*
 * Size of empty packet, i.e. data packet with null body.
 * When you want to allocate a complete data packet, add the
 * payload size to EMPTY_80211_DATA_FRAME_SIZE and then
 * typecast it back to WLAN_FRAME_DATA. However, the FCS
 * field's offset depends on the data body size.
 */

#define EMPTY_80211_DATA_FRAME_SIZE     34

/* MAC header for the data packets is defined separately. */

/* 3 Address frame */
typedef struct wlanDataMacHeader3 {
    FRAME_CONTROL frameControl;
    DURATION      durationNav;
    WLAN_MACADDR  address1;
    WLAN_MACADDR  address2;
    WLAN_MACADDR  address3;
    SEQ_CONTROL   seqControl;
} __ATTRIB_PACK WLAN_DATA_MAC_HEADER3;

/* 3 Address frame with encryption fields */
typedef struct wlanFrame3DataEncrypt {
    WLAN_DATA_MAC_HEADER3 macHeader;
    A_UINT32              iv;             /* IV for encryption */
    A_UINT8               FrameBody[MAX_80211_FRAME_BODY_SIZE];
    A_UINT32              icv;            /* ICV for encryption */
} __ATTRIB_PACK WLAN_FRAME_3_DATA_ENCRYPT;

/* 3 Address frame with encryption fields, extended IV field */
typedef struct wlanFrame3DataEncryptExtIV {
    WLAN_DATA_MAC_HEADER3 macHeader;
    A_UINT32            iv;             /* IV for encryption */
    A_UINT32            extIv;          /* extended IV for encryption */
    A_UINT8             FrameBody[MAX_80211_FRAME_BODY_SIZE];
    A_UINT32            icv;            /* ICV for encryption */
} __ATTRIB_PACK WLAN_FRAME_3_DATA_ENCRYPT_EXTIV;

/* 3 Address QoS header */
typedef struct wlanQoSDataMacHeader3 {
    FRAME_CONTROL frameControl;
    DURATION      durationNav;
    WLAN_MACADDR  address1;
    WLAN_MACADDR  address2;
    WLAN_MACADDR  address3;
    SEQ_CONTROL   seqControl;
    QOS_CNTL      qosControl;
} __ATTRIB_PACK WLAN_QOS_DATA_MAC_HEADER3;

/* 4 Address QoS header */
typedef struct wlanQoSDataMacHeader4 {
    FRAME_CONTROL frameControl;
    DURATION      durationNav;
    WLAN_MACADDR  address1;
    WLAN_MACADDR  address2;
    WLAN_MACADDR  address3;
    SEQ_CONTROL   seqControl;
    WLAN_MACADDR  address4;
    QOS_CNTL      qosControl;
} __ATTRIB_PACK WLAN_QOS_DATA_MAC_HEADER4;

/*
 * 4 Address frame from DS to DS
 * This data structure is also not only the largest size frame
 * header but a superset of all possible frame headers.
 * !! not true:  wlanQoSDataMacHeader4 is the largest frame !!
 * Hence it can be safely used as a generic frame header called
 * WLAN_FRAME_HEADER.
 */
typedef struct wlanDataMacHeader {
    FRAME_CONTROL frameControl;
    DURATION      durationNav;
    WLAN_MACADDR  address1;
    WLAN_MACADDR  address2;
    WLAN_MACADDR  address3;
    SEQ_CONTROL   seqControl;
    WLAN_MACADDR  address4;
} __ATTRIB_PACK WLAN_DATA_MAC_HEADER, WLAN_FRAME_HEADER;

/* Maximum size data frame */
typedef struct wlanFrameData {
    WLAN_DATA_MAC_HEADER        macHeader;
    A_UINT8                     FrameBody[MAX_80211_FRAME_BODY_SIZE];
} __ATTRIB_PACK WLAN_FRAME_DATA;

/* Maximum size data frame witn encryption fields */
typedef struct wlanFrameDataEncrypt {
    WLAN_DATA_MAC_HEADER        macHeader;
    A_UINT32                    iv;     /* IV for encryption */
    A_UINT8                     FrameBody[MAX_80211_FRAME_BODY_SIZE];
    A_UINT32                    icv;    /* ICV for encryption */
} __ATTRIB_PACK WLAN_FRAME_DATA_ENCRYPT;

/* Maximum size data frame witn encryption fields and padding */

typedef struct wlanFrameDataEncryptPad {
    WLAN_DATA_MAC_HEADER        macHeader;
    A_UINT8                     pad[2];
    A_UINT32                    iv;     /* IV for encryption */
    A_UINT8                     FrameBody[MAX_80211_FRAME_BODY_SIZE];
    A_UINT32                    icv;    /* ICV for encryption */
} __ATTRIB_PACK WLAN_FRAME_DATA_ENCRYPT_PAD;


/* Maximum size data frame witn encryption fields & extended iv field */
typedef struct wlanFrameDataEncryptExtIV {
    WLAN_DATA_MAC_HEADER        macHeader;
    A_UINT32                    iv;     /* IV for encryption */
    A_UINT32                    extIv;  /* extended IV for encryption */
    A_UINT8                     FrameBody[MAX_80211_FRAME_BODY_SIZE];
    A_UINT32                    icv;    /* ICV for encryption */
} __ATTRIB_PACK WLAN_FRAME_DATA_ENCRYPT_EXTIV;

/* Maximum size data frame witn encryption fields & extended iv field and pad */
typedef struct wlanFrameDataEncryptExtIVPad {
    WLAN_DATA_MAC_HEADER        macHeader;
    A_UINT8                     pad[2];
    A_UINT32                    iv;     /* IV for encryption */
    A_UINT32                    extIv;  /* extended IV for encryption */
    A_UINT8                     FrameBody[MAX_80211_FRAME_BODY_SIZE];
    A_UINT32                    icv;    /* ICV for encryption */
} __ATTRIB_PACK WLAN_FRAME_DATA_ENCRYPT_EXTIV_PAD;

/* The standard Ethernet frame is also defined for convenience */

typedef struct lanFrameHeader {
    WLAN_MACADDR        destAddr;
    WLAN_MACADDR        srcAddr;
    A_UINT16            lanTypeOrLen;
} __ATTRIB_PACK LAN_FRAME_HEADER;

/* Maximum size LAN data frame */
typedef struct lanFrameData {
    LAN_FRAME_HEADER    lanHeader;
    A_UINT8             frameData[MAX_ETHER_BODY_SIZE];
} __ATTRIB_PACK LAN_FRAME_DATA;

typedef struct {
    LAN_FRAME_HEADER    lanHeader;
    A_UINT8             dsap;
    A_UINT8             ssap;
    A_UINT8             control;
    A_UINT8             xid[3];
/* No ethertype - see bug#8167 */
} __ATTRIB_PACK L2_UPDATE_FRAME;

#define L2UF_LEN (sizeof(L2_UPDATE_FRAME) - sizeof(LAN_FRAME_HEADER))

#define IS4ADDRFRM(hdr) \
    ((hdr)->frameControl.FromDS && (hdr)->frameControl.ToDS)

#define GETFIVPTR(h) \
    ((IS4ADDRFRM((h))) ? (A_UINT32)&(((WLAN_FRAME_DATA_ENCRYPT_EXTIV *)(h))->iv)  \
    : (A_UINT32)&(((WLAN_FRAME_3_DATA_ENCRYPT_EXTIV *)(h))->iv))

#define GETIVPTR(h) \
    ((((h)->frameControl.fType == FRAME_DATA) && \
    ((((h)->frameControl.fSubtype) & SUBT_QOS) == SUBT_QOS)) ? \
                A_ROUNDUP(((GETFIVPTR(h)) + sizeof(QOS_CNTL)), 4) : \
                A_ROUNDUP((GETFIVPTR(h)), 4))

#define GETEXTFIVPTR(h) \
    (((IS4ADDRFRM((h))) ? (A_UINT32)&(((WLAN_FRAME_DATA_ENCRYPT_EXTIV *)(h))->extIv) \
       : (A_UINT32)&(((WLAN_FRAME_3_DATA_ENCRYPT_EXTIV *)(h))->extIv)))

#define GETEXTIVPTR(h) \
    ((((h)->frameControl.fType == FRAME_DATA) && \
    ((((h)->frameControl.fSubtype) & SUBT_QOS) == SUBT_QOS)) ? \
                     A_ROUNDUP(((GETEXTFIVPTR(h))+sizeof(QOS_CNTL)),4) : \
                     A_ROUNDUP((GETEXTFIVPTR(h)),4))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -