📄 wlanproto.h
字号:
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 + -