217 lines
4.6 KiB
C
217 lines
4.6 KiB
C
/****************************************************************************
|
|
* Ralink Tech Inc.
|
|
* 4F, No. 2 Technology 5th Rd.
|
|
* Science-based Industrial Park
|
|
* Hsin-chu, Taiwan, R.O.C.
|
|
* (c) Copyright 2002, 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:
|
|
ft_tlv.c
|
|
|
|
Abstract:
|
|
|
|
Revision History:
|
|
Who When What
|
|
--------- ---------- ----------------------------------------------
|
|
Fonchi Wu 12-02-2008 created for 11r soft-AP
|
|
*/
|
|
|
|
#ifdef DOT11R_FT_SUPPORT
|
|
|
|
|
|
#include "rt_config.h"
|
|
#include "dot11r_ft.h"
|
|
|
|
|
|
VOID FT_InsertMdIE(
|
|
IN PRTMP_ADAPTER pAd,
|
|
OUT PUCHAR pFrameBuf,
|
|
OUT PULONG pFrameLen,
|
|
IN PUINT8 pMdId,
|
|
IN FT_CAP_AND_POLICY FtCapPlc)
|
|
{
|
|
|
|
ULONG TempLen;
|
|
UINT8 Length;
|
|
UCHAR MDIE = IE_FT_MDIE;
|
|
|
|
Length = 3;
|
|
MakeOutgoingFrame( pFrameBuf, &TempLen,
|
|
1, &MDIE,
|
|
1, &Length,
|
|
2, (PUCHAR)pMdId,
|
|
1, (PUCHAR)&FtCapPlc.word,
|
|
END_OF_ARGS);
|
|
|
|
*pFrameLen = *pFrameLen + TempLen;
|
|
|
|
return;
|
|
}
|
|
|
|
VOID FT_InsertFTIE(
|
|
IN PRTMP_ADAPTER pAd,
|
|
OUT PUCHAR pFrameBuf,
|
|
OUT PULONG pFrameLen,
|
|
IN UINT8 Length,
|
|
IN FT_MIC_CTR_FIELD MICCtr,
|
|
IN PUINT8 pMic,
|
|
IN PUINT8 pANonce,
|
|
IN PUINT8 pSNonce)
|
|
{
|
|
ULONG TempLen;
|
|
UINT16 MICCtrBuf;
|
|
UCHAR FTIE = IE_FT_FTIE;
|
|
|
|
MICCtrBuf = cpu2le16(MICCtr.word);
|
|
MakeOutgoingFrame( pFrameBuf, &TempLen,
|
|
1, &FTIE,
|
|
1, &Length,
|
|
2, (PUCHAR)&MICCtrBuf,
|
|
16, (PUCHAR)pMic,
|
|
32, (PUCHAR)pANonce,
|
|
32, (PUCHAR)pSNonce,
|
|
END_OF_ARGS);
|
|
|
|
*pFrameLen = *pFrameLen + TempLen;
|
|
}
|
|
|
|
VOID FT_FTIE_InsertKhIdSubIE(
|
|
IN PRTMP_ADAPTER pAd,
|
|
OUT PUCHAR pFrameBuf,
|
|
OUT PULONG pFrameLen,
|
|
IN FT_SUB_ELEMENT_ID SubId,
|
|
IN PUINT8 pKhId,
|
|
IN UINT8 KhIdLen)
|
|
{
|
|
ULONG TempLen;
|
|
|
|
if (SubId != FT_R0KH_ID && SubId != FT_R1KH_ID)
|
|
{
|
|
DBGPRINT(RT_DEBUG_ERROR,("(%s): unknow SubId (%d)\n",
|
|
__FUNCTION__, SubId));
|
|
return;
|
|
}
|
|
|
|
/* The lenght of R1KHID must only be 6 octects. */
|
|
if ((SubId == FT_R1KH_ID) && (KhIdLen != 6))
|
|
{
|
|
DBGPRINT(RT_DEBUG_ERROR,("(%s): Invalid R1KHID length (%d)\n",
|
|
__FUNCTION__, KhIdLen));
|
|
return;
|
|
}
|
|
|
|
/* The length of R0KHID must in range of 1 to 48 octects.*/
|
|
if ((SubId == FT_R0KH_ID) && ((KhIdLen > 48) && (KhIdLen < 1)))
|
|
{
|
|
DBGPRINT(RT_DEBUG_ERROR,("(%s): Invalid R0KHID length (%d)\n",
|
|
__FUNCTION__, KhIdLen));
|
|
}
|
|
|
|
MakeOutgoingFrame( pFrameBuf, &TempLen,
|
|
1, &SubId,
|
|
1, &KhIdLen,
|
|
KhIdLen, (PUCHAR)pKhId,
|
|
END_OF_ARGS);
|
|
|
|
*pFrameLen = *pFrameLen + TempLen;
|
|
}
|
|
|
|
VOID FT_FTIE_InsertGTKSubIE(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN PUCHAR pFrameBuf,
|
|
OUT PULONG pFrameLen,
|
|
IN PUINT8 pGtkSubIe,
|
|
IN UINT8 GtkSubIe_len)
|
|
{
|
|
ULONG TempLen;
|
|
UINT8 Length;
|
|
UINT8 SubId;
|
|
|
|
SubId = FT_GTK;
|
|
Length = GtkSubIe_len;
|
|
|
|
MakeOutgoingFrame( pFrameBuf, &TempLen,
|
|
1, &SubId,
|
|
1, &Length,
|
|
Length, pGtkSubIe,
|
|
END_OF_ARGS);
|
|
|
|
*pFrameLen = *pFrameLen + TempLen;
|
|
}
|
|
|
|
|
|
VOID FT_InsertTimeoutIntervalIE(
|
|
IN PRTMP_ADAPTER pAd,
|
|
OUT PUCHAR pFrameBuf,
|
|
OUT PULONG pFrameLen,
|
|
IN FT_TIMEOUT_INTERVAL_TYPE Type,
|
|
IN UINT32 TimeOutValue)
|
|
{
|
|
ULONG TempLen;
|
|
UINT8 Length;
|
|
UINT8 TimeOutIntervalIE;
|
|
UINT8 TimeoutType;
|
|
UINT32 TimeoutValueBuf;
|
|
|
|
Length = 5;
|
|
TimeOutIntervalIE = IE_FT_TIMEOUT_INTERVAL;
|
|
TimeoutType = Type;
|
|
TimeoutValueBuf = cpu2le32(TimeOutValue);
|
|
|
|
MakeOutgoingFrame( pFrameBuf, &TempLen,
|
|
1, &TimeOutIntervalIE,
|
|
1, &Length,
|
|
1, (PUCHAR)&TimeoutType,
|
|
4, (PUCHAR)&TimeoutValueBuf,
|
|
END_OF_ARGS);
|
|
|
|
*pFrameLen = *pFrameLen + TempLen;
|
|
}
|
|
|
|
#if 0 /* ACM'll prepare those functions. */
|
|
VOID FT_InsertRICDataIE(
|
|
IN PRTMP_ADAPTER pAd,
|
|
OUT PUCHAR pFrameBuf,
|
|
OUT PULONG pFrameLen,
|
|
IN UINT8 RDCnt,
|
|
IN UINT16 StatusCode)
|
|
{
|
|
ULONG TempLen;
|
|
UINT8 Length;
|
|
UINT8 RDIe;
|
|
UINT16 StatusCodeBuf;
|
|
|
|
Length = 4;
|
|
RDIe = IE_FT_RIC_DATA;
|
|
StatusCodeBuf = cpu2le16(StatusCode);
|
|
|
|
MakeOutgoingFrame( pFrameBuf, &TempLen,
|
|
1, &RDIe,
|
|
1, &Length,
|
|
1, (PUCHAR)&RDCnt,
|
|
2, (PUCHAR)&StatusCode,
|
|
END_OF_ARGS);
|
|
|
|
*pFrameLen = *pFrameLen + TempLen;
|
|
}
|
|
|
|
VOID FT_InsertRICDesIE(
|
|
IN PRTMP_ADAPTER pAd,
|
|
OUT PUCHAR pFrameBuf,
|
|
OUT PULONG pFrameLen)
|
|
{
|
|
}
|
|
#endif
|
|
|
|
|
|
#endif /* DOT11R_FT_SUPPORT */
|
|
|