wpa.h

来自「Ralink RT61 SoftAP Driver source code. 」· C头文件 代码 · 共 505 行

H
505
字号
/*
 ***************************************************************************
 * Ralink Tech Inc.
 * 4F, No. 2 Technology 5th Rd.
 * Science-based Industrial Park
 * Hsin-chu, Taiwan, R.O.C.
 *
 * (c) Copyright 2005, Ralink Technology, Inc.
 *
 * All rights reserved. Ralink's source code is an unpublished work and the
 * use of a copyright notice does not imply otherwise. This source code
 * contains confidential trade secret material of Ralink Tech. Any attemp
 * or participation in deciphering, decoding, reverse engineering or in any
 * way altering the source code is stricitly prohibited, unless the prior
 * written consent of Ralink Technology, Inc. is obtained.
 ***************************************************************************

	Module Name:
	mlme.h

	Abstract:

	Revision History:
	Who         When            What
	--------    ----------      ----------------------------------------------
	Name        Date            Modification logs
*/

#ifndef __WPA_H__
#define __WPA_H__

#define WPA_RETRY_EXEC_INTV         (1 * HZ)
#define PEER_MSG3_RETRY_EXEC_INTV	(3 * HZ)
#define GUPDATE_EXEC_INTV           (1 * HZ)

// Retry timer counter initial value
#define PEER_MSG1_RETRY_TIMER_CTR	0
#define PEER_MSG3_RETRY_TIMER_CTR	10
#define GRP_HS_RETRY_TIMER_CTR      20

//EAP Packet Type
#define EAPPacket       0
#define EAPOLStart      1
#define EAPOLLogoff     2
#define EAPOLKey        3
#define EAPOLASFAlert   4
#define EAPTtypeMax     5

#define EAPOL_MSG_INVALID   0
#define EAPOL_PAIR_MSG_1    1
#define EAPOL_PAIR_MSG_3    2
#define EAPOL_GROUP_MSG_1   3

// other EAP Code Request and Response are useful only in daemon.
#define EAP_CODE_SUCCESS    3
#define EAP_CODE_FAILURE    4

//EPA VERSION
#define EAPOL_VER           1
#define EAPOL_VER2          2

#define DESC_TYPE_TKIP      1
#define DESC_TYPE_AES       2

#define WPA1_KEY_DESC		0xFE
#define WPA2_KEY_DESC		0x2

#define LEN_MSG1_2WAY		0x7F

#define MAX_LEN_OF_EAP_HS   256

// group rekey interval
#define TIME_REKEY              0
#define PKT_REKEY               1
#define DISABLE_REKEY           2
#define MAX_REKEY               2

#define MAX_REKEY_INTER         0x3FFFFFF

#define PAIRWISEKEY			1
#define GROUPKEY			0

typedef struct PACKED _RSNIE {
    UCHAR   oui[4];
    USHORT  version;
    UCHAR   mcast[4];
    USHORT  ucount;
    struct PACKED {
        UCHAR oui[4];
    }ucast[1];
} RSNIE, *PRSNIE;

typedef struct PACKED _RSNIE2 {
    USHORT  version;
    UCHAR   mcast[4];
    USHORT  ucount;
    struct PACKED {
        UCHAR oui[4];
    }ucast[1];
} RSNIE2, *PRSNIE2;

typedef struct PACKED _RSNIE_AUTH {
    USHORT acount;
    struct PACKED {
        UCHAR oui[4];
    }auth[1];
} RSNIE_AUTH,*PRSNIE_AUTH;

typedef	union PACKED _RSN_CAPABILITIES	{
	struct	PACKED {
#ifdef BIG_ENDIAN
        USHORT		Rsvd:10;
        USHORT		GTKSA_R_Counter:2;
        USHORT		PTKSA_R_Counter:2;
        USHORT		No_Pairwise:1;
		USHORT		PreAuth:1;
#else
        USHORT		PreAuth:1;
		USHORT		No_Pairwise:1;
		USHORT		PTKSA_R_Counter:2;
		USHORT		GTKSA_R_Counter:2;
		USHORT		Rsvd:10;
#endif
	}	field;
	USHORT			word;
}	RSN_CAPABILITIES, *PRSN_CAPABILITIES;

typedef struct PACKED _EAP_HDR {
    UCHAR   ProVer;
    UCHAR   ProType;
    UCHAR   Body_Len[2];
    UCHAR   code;
    UCHAR   identifier;
    UCHAR   length[2]; // including code and identifier, followed by length-2 octets of data
} EAP_HDR, *PEAP_HDR;

typedef	struct PACKED _KEY_INFO
{
#ifdef BIG_ENDIAN
    UCHAR	KeyAck:1;
    UCHAR	Install:1;
    UCHAR	KeyIndex:2;
    UCHAR	KeyType:1;
    UCHAR	KeyDescVer:3;
    UCHAR	Rsvd:3;
    UCHAR	EKD:1;
    UCHAR	Request:1;
    UCHAR	Error:1;
    UCHAR	Secure:1;
    UCHAR	KeyMic:1;
#else
    UCHAR	KeyMic:1;
    UCHAR	Secure:1;
    UCHAR	Error:1;
    UCHAR	Request:1;
    UCHAR	EKD:1;
    UCHAR	Rsvd:3;
    UCHAR	KeyDescVer:3;
    UCHAR	KeyType:1;
    UCHAR	KeyIndex:2;
    UCHAR	Install:1;
    UCHAR	KeyAck:1;
#endif
} KEY_INFO, *PKEY_INFO;

typedef struct PACKED _KEY_DESCRIPTER {
    UCHAR       Type;
    KEY_INFO    Keyinfo;
    UCHAR       KeyLength[2];
    UCHAR       RCounter[LEN_KEY_DESC_REPLAY];
    UCHAR       Nonce[LEN_KEY_DESC_NONCE];
    UCHAR       IV[LEN_KEY_DESC_IV];
    UCHAR       RSC[LEN_KEY_DESC_RSC];
    UCHAR       ID[LEN_KEY_DESC_ID];
    UCHAR       MIC[LEN_KEY_DESC_MIC];
    UCHAR       DataLen[2];
    UCHAR       Data[MAX_LEN_OF_RSNIE];
} KEY_DESCRIPTER, *PKEY_DESCRIPTER;

typedef struct PACKED _EAPOL_PACKET {
    UCHAR           ProVer;
    UCHAR           ProType;
    UCHAR           Body_Len[2];
    KEY_DESCRIPTER  KeyDesc;
} EAPOL_PACKET, *PEAPOL_PACKET;

#define	ADD_ONE_To_64BIT_VAR(_V)		\
{										\
	UCHAR	cnt = LEN_KEY_DESC_REPLAY;	\
	do									\
	{									\
		cnt--;							\
		_V[cnt]++;						\
		if (cnt == 0)					\
			break;						\
	}while (_V[cnt] == 0);				\
}

//802.11i D10 page 83
typedef struct PACKED _GTK_ENCAP
{
#ifndef BIG_ENDIAN
    UCHAR               Kid:2;
    UCHAR               tx:1;
    UCHAR               rsv:5;
    UCHAR               rsv1;
#else
    UCHAR               rsv:5;
    UCHAR               tx:1;
    UCHAR               Kid:2;
    UCHAR               rsv1;    	
#endif
    UCHAR               GTK[32];
}   GTK_ENCAP, *PGTK_ENCAP;

typedef struct PACKED _KDE_ENCAP
{
    UCHAR               Type;
    UCHAR               Len;
    UCHAR               OUI[3];
    UCHAR               DataType;
    GTK_ENCAP      		GTKEncap;
}   KDE_ENCAP, *PKDE_ENCAP;

#ifdef APCLI_SUPPORT

VOID StaWpaStateMachineInit(
	IN PRTMP_ADAPTER pAd,
	IN STA_STATE_MACHINE *Sm,
	OUT STA_STATE_MACHINE_FUNC Trans[]);

VOID StaWpaEAPOLKeyAction(
    IN PRTMP_ADAPTER    pAd, 
    IN MLME_QUEUE_ELEM  *Elem);

BOOLEAN StaWPAMsgTypeSubst(
    IN  UCHAR   EAPType,
    OUT ULONG   *MsgType);

VOID    WpaPairMsg1Action(
    IN  PRTMP_ADAPTER   pAd, 
    IN  MLME_QUEUE_ELEM *Elem,
	IN	INT				IfIndex);

VOID    WpaPairMsg3Action(
    IN  PRTMP_ADAPTER   pAd, 
    IN  MLME_QUEUE_ELEM *Elem,
	IN	INT				IfIndex); 

VOID    Wpa2PairMsg1Action(
    IN  PRTMP_ADAPTER   pAd, 
    IN  MLME_QUEUE_ELEM *Elem,
	IN	INT				IfIndex);

VOID    WpaGroupMsg1Action(
    IN  PRTMP_ADAPTER   pAd, 
    IN  MLME_QUEUE_ELEM *Elem,
	IN	INT				IfIndex); 

BOOLEAN 	ApCliValidateRSNIE(
	IN		PRTMP_ADAPTER	pAdapter, 
	IN 		PEID_STRUCT     eid_ptr);

#ifndef RTL865X_SOC
VOID    ApCliWpaMacHeaderInit(
    IN      PRTMP_ADAPTER   pAd, 
    IN OUT  PHEADER_802_11  pHdr80211, 
    IN      UCHAR           wep, 
    IN      PUCHAR          pAddr1,
    IN      PUCHAR          pAddr2); 
    
VOID    Wpa2PairMsg3Action(
    IN  PRTMP_ADAPTER   pAd, 
    IN  MLME_QUEUE_ELEM *Elem,
	IN	INT				IfIndex);

BOOLEAN ParseKeyData(
    IN  PRTMP_ADAPTER   pAd,
    IN  PUCHAR          pKeyData,
    IN  UCHAR           KeyDataLen,
	IN	INT				IfIndex,
	IN	UCHAR			bPairewise);
#endif  /* endif - ifndef RTL865X_SOC */

#endif	/* endif - ifdef APCLI_SUPPORT */ 

BOOLEAN WPAMsgTypeSubst(
    IN  UCHAR   EAPType,
    OUT ULONG   *MsgType);

VOID WpaStateMachineInit(
    IN	PRTMP_ADAPTER       pAd, 
    IN  STATE_MACHINE       *S, 
    OUT STATE_MACHINE_FUNC  Trans[]);

MAC_TABLE_ENTRY *PACInquiry(
    IN	PRTMP_ADAPTER               pAd, 
    IN PUCHAR                      pAddr, 
    OUT NDIS_802_11_PRIVACY_FILTER  *Privacy,
    OUT WPA_STATE                   *WpaState);

BOOLEAN RTMPCheckWPAframe(
    IN PRTMP_ADAPTER    pAdapter,
    IN PUCHAR           pHeader,
    IN ULONG            DataByteCount,
    IN UCHAR            Offset);

BOOLEAN RTMPCheckMcast(
    IN PRTMP_ADAPTER    pAdapter,
    IN PEID_STRUCT      eid_ptr,
    IN MAC_TABLE_ENTRY	*pEntry);

BOOLEAN RTMPCheckUcast(
    IN PRTMP_ADAPTER    pAdapter,
    IN PEID_STRUCT      eid_ptr,
    IN MAC_TABLE_ENTRY	*pEntry);

BOOLEAN RTMPCheckAUTH(
    IN PRTMP_ADAPTER    pAdapter,
    IN PEID_STRUCT      eid_ptr,
    IN MAC_TABLE_ENTRY	*pEntry);

BOOLEAN RTMPCheckAKM(
    IN PUCHAR sta_akm,
    IN PUCHAR ap_rsn_ie,
    IN INT iswpa2
);

VOID RTMPHandleSTAKey(
    IN PRTMP_ADAPTER    pAdapter, 
    IN MAC_TABLE_ENTRY  *pEntry,
    IN MLME_QUEUE_ELEM  *Elem);

VOID WPAStart4WayHS(
    IN	PRTMP_ADAPTER   pAdapter, 
    IN 	MAC_TABLE_ENTRY *pEntry);

VOID WpaEAPPacketAction(
    IN PRTMP_ADAPTER    pAd, 
    IN MLME_QUEUE_ELEM  *Elem);

VOID WpaEAPOLStartAction(
    IN PRTMP_ADAPTER    pAd, 
    IN MLME_QUEUE_ELEM  *Elem);

VOID WpaEAPOLLogoffAction(
    IN PRTMP_ADAPTER    pAd, 
    IN MLME_QUEUE_ELEM  *Elem);

VOID WpaEAPOLKeyAction(
    IN PRTMP_ADAPTER    pAd, 
    IN MLME_QUEUE_ELEM  *Elem);

VOID HandleCounterMeasure(
    IN PRTMP_ADAPTER    pAd, 
    IN MAC_TABLE_ENTRY  *pEntry);

VOID PeerPairMsg2Action(
    IN PRTMP_ADAPTER    pAdapter, 
    IN MAC_TABLE_ENTRY  *pEntry,
    IN MLME_QUEUE_ELEM  *Elem);

VOID CMTimerExec(
    IN	unsigned long   data);

VOID WPARetryExec(
    IN	unsigned long   data);

VOID Wpa1PeerPairMsg4Action(
    IN PRTMP_ADAPTER    pAdapter, 
    IN MAC_TABLE_ENTRY  *pEntry,
    IN MLME_QUEUE_ELEM  *Elem);

VOID Wpa2PeerPairMsg4Action(
    IN PRTMP_ADAPTER    pAdapter, 
    IN MAC_TABLE_ENTRY  *pEntry,
    IN MLME_QUEUE_ELEM  *Elem);

VOID PeerGroupMsg2Action(
    IN PRTMP_ADAPTER    pAdapter, 
    IN MAC_TABLE_ENTRY  *pEntry,
    IN VOID             *Msg,
    IN UINT             MsgLen);

NDIS_STATUS WPAHardTransmit(
    IN  PRTMP_ADAPTER   pAdapter,
    IN  MAC_TABLE_ENTRY *pEntry);

VOID WpaEAPOLASFAlertAction(
    IN PRTMP_ADAPTER    pAd, 
    IN MLME_QUEUE_ELEM  *Elem);

VOID PairDisAssocAction(
    IN PRTMP_ADAPTER    pAd, 
    IN MAC_TABLE_ENTRY  *pEntry,
    IN USHORT           Reason);

VOID DisAssocAction(
    IN PRTMP_ADAPTER    pAd, 
    IN MAC_TABLE_ENTRY  *pEntry,
    IN USHORT           SubType,
    IN USHORT           Reason);

VOID GREKEYPeriodicExec(
    IN	unsigned long   data);

VOID WPAMake8023Hdr(
    IN PRTMP_ADAPTER    pAd,
    IN MAC_TABLE_ENTRY  *pEntry,
    IN OUT PCHAR        pHdr);

VOID PRF(
	IN UCHAR	*Key,
	IN INT		key_len,
	IN UCHAR	*Prefix,
	IN INT		Prefix_len,
	IN UCHAR	*Data,
	IN INT		Data_len,
	OUT UCHAR	*Output,
	IN INT      Output_len);

VOID CountPTK(
	IN UCHAR    *PMK,
	IN UCHAR    *ANonce,
	IN UCHAR    *AA,
	IN UCHAR    *SNonce,
	IN UCHAR    *SA,
	OUT UCHAR   *output,
	IN UINT     len);

VOID CountGTK(
	IN UCHAR    *PMK,
	IN UCHAR    *GNonce,
	IN UCHAR    *AA,
	OUT UCHAR   *output,
	IN UINT     len);

VOID GetSmall(
	IN PVOID    pSrc1,
	IN PVOID    pSrc2,
	OUT PUCHAR  out,
	IN ULONG    Length);

VOID GetLarge(
	IN PVOID    pSrc1,
	IN PVOID    pSrc2,
	OUT PUCHAR  out,
	IN ULONG    Length);

VOID GenRandom(
    IN PRTMP_ADAPTER    pAd,
    OUT UCHAR           *random,
    IN  UCHAR			apidx);

VOID AES_GTK_KEY_WRAP( 
    IN UCHAR    *key,
    IN UCHAR    *plaintext,
    IN UCHAR	p_len,
    OUT UCHAR   *ciphertext);

VOID AES_GTK_KEY_UNWRAP( 
    IN  UCHAR   *key,
    OUT UCHAR   *plaintext,
    IN UCHAR    c_len,
    IN  UCHAR   *ciphertext);	

VOID RTMPToWirelessSta(
    IN  PRTMP_ADAPTER   pAdapter,
    IN  PUCHAR          pFrame,
    IN  UINT            FrameLen);

VOID    WpaSend(
    IN  PRTMP_ADAPTER   pAdapter,
    IN  PUCHAR          pPacket,
    IN  ULONG           Len);

VOID	RTMPMakeRSNIE(
    IN  PRTMP_ADAPTER   pAdapter,
    IN  UINT            AuthMode,
    IN  UINT            WepStatus,
    IN  UCHAR           apidx);

VOID RTMPAddPMKIDCache(
	IN  PRTMP_ADAPTER   		pAd,
	IN	INT						apidx,
	IN	PUCHAR				pAddr,
	IN	UCHAR					*PMKID,
	IN	UCHAR					*PMK);

INT RTMPSearchPMKIDCache(
	IN  PRTMP_ADAPTER   pAd,
	IN	INT				apidx,
	IN	PUCHAR		pAddr);

VOID RTMPDeletePMKIDCache(
	IN  PRTMP_ADAPTER   pAd,
	IN	INT				apidx,
	IN  INT				idx);

VOID RTMPMaintainPMKIDCache(
	IN  PRTMP_ADAPTER   pAd);

#endif

⌨️ 快捷键说明

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