本文整理汇总了C++中NdisMoveMemory函数的典型用法代码示例。如果您正苦于以下问题:C++ NdisMoveMemory函数的具体用法?C++ NdisMoveMemory怎么用?C++ NdisMoveMemory使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NdisMoveMemory函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: APPeerDlsRspAction
/*
========================================================================
Routine Description:
Handle peer DLS Response action frame.
Arguments:
pAd points to our adapter
*pElem action frame
Return Value:
None
Note:
========================================================================
*/
VOID APPeerDlsRspAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *pElem)
{
PMAC_TABLE_ENTRY pDAEntry, pSAEntry;
UCHAR DA[MAC_ADDR_LEN], SA[MAC_ADDR_LEN];
UINT16 CapabilityInfo;
UINT16 StatusCode;
PUCHAR pOutBuffer = NULL;
PFRAME_802_11 Fr;
UINT32 FrameLen = 0;
UCHAR SupportedRatesLen = 0;
UCHAR SupportedRates[MAX_LEN_OF_SUPPORTED_RATES];
UCHAR HtCapabilityLen;
HT_CAPABILITY_IE HtCapability;
assert(pElem->Msg);
/* frame sanity check */
if (! PeerDlsRspSanity(pAd, pElem->Msg, pElem->MsgLen, DA, SA,
&CapabilityInfo, &StatusCode,
&SupportedRatesLen, &SupportedRates[0],
&HtCapabilityLen, &HtCapability))
{
return;
}
DBGPRINT(RT_DEBUG_TRACE,
("DLS - PeerDlsRspAction() from %02x:%02x:%02x:%02x:%02x:%02x "
"with StatusCode=%d\n",
SA[0], SA[1], SA[2], SA[3], SA[4], SA[5], StatusCode));
/* check whether the source station is legal */
pSAEntry = MacTableLookup(pAd, SA);
if (!pSAEntry)
return;
pDAEntry = MacTableLookup(pAd, DA);
if (!pDAEntry)
{
DBGPRINT(RT_DEBUG_TRACE, ("Destination station does not exist!\n"));
return;
}
pSAEntry->bDlsInit = FALSE;
/* forward DLS-Request to real destination */
Fr = (PFRAME_802_11)pElem->Msg;
/* pOutBuffer = kmalloc(MAX_LEN_OF_MLME_BUFFER, MEM_ALLOC_FLAG); */
os_alloc_mem(pAd, (UCHAR **)&pOutBuffer, MAX_LEN_OF_MLME_BUFFER);
if (pOutBuffer == NULL)
return; /* fatal error, no available memory */
NdisMoveMemory(Fr->Hdr.Addr1, DA, MAC_ADDR_LEN);
NdisMoveMemory(Fr->Hdr.Addr2, pAd->ApCfg.MBSSID[pSAEntry->apidx].Bssid, MAC_ADDR_LEN);
NdisMoveMemory(Fr->Hdr.Addr3, SA, MAC_ADDR_LEN);
NdisMoveMemory(pOutBuffer, pElem->Msg, pElem->MsgLen);
FrameLen = pElem->MsgLen;
/* transmit the response frame */
MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen);
/* kfree(pOutBuffer); */
os_free_mem(NULL, pOutBuffer);
}
开发者ID:glocklueng,项目名称:MCU_WIFI,代码行数:80,代码来源:ap_dls.c
示例2: PTK
/*
========================================================================
Routine Description:
It utilizes PRF-384 or PRF-512 to derive session-specific keys from a PMK.
It shall be called by 4-way handshake processing.
Arguments:
pAd - pointer to our pAdapter context
PMK - pointer to PMK
ANonce - pointer to ANonce
AA - pointer to Authenticator Address
SNonce - pointer to SNonce
SA - pointer to Supplicant Address
len - indicate the length of PTK (octet)
Return Value:
Output pointer to the PTK
Note:
Refer to IEEE 802.11i-2004 8.5.1.2
========================================================================
*/
VOID WpaCountPTK(
IN PRTMP_ADAPTER pAd,
IN UCHAR *PMK,
IN UCHAR *ANonce,
IN UCHAR *AA,
IN UCHAR *SNonce,
IN UCHAR *SA,
OUT UCHAR *output,
IN UINT len)
{
UCHAR concatenation[76];
UINT CurrPos = 0;
UCHAR temp[32];
UCHAR Prefix[] = {'P', 'a', 'i', 'r', 'w', 'i', 's', 'e', ' ', 'k', 'e', 'y', ' ',
'e', 'x', 'p', 'a', 'n', 's', 'i', 'o', 'n'};
// initiate the concatenation input
NdisZeroMemory(temp, sizeof(temp));
NdisZeroMemory(concatenation, 76);
// Get smaller address
if (RTMPCompareMemory(SA, AA, 6) == 1)
NdisMoveMemory(concatenation, AA, 6);
else
NdisMoveMemory(concatenation, SA, 6);
CurrPos += 6;
// Get larger address
if (RTMPCompareMemory(SA, AA, 6) == 1)
NdisMoveMemory(&concatenation[CurrPos], SA, 6);
else
NdisMoveMemory(&concatenation[CurrPos], AA, 6);
// store the larger mac address for backward compatible of
// ralink proprietary STA-key issue
NdisMoveMemory(temp, &concatenation[CurrPos], MAC_ADDR_LEN);
CurrPos += 6;
// Get smaller Nonce
if (RTMPCompareMemory(ANonce, SNonce, 32) == 0)
NdisMoveMemory(&concatenation[CurrPos], temp, 32); // patch for ralink proprietary STA-key issue
else if (RTMPCompareMemory(ANonce, SNonce, 32) == 1)
NdisMoveMemory(&concatenation[CurrPos], SNonce, 32);
else
NdisMoveMemory(&concatenation[CurrPos], ANonce, 32);
CurrPos += 32;
// Get larger Nonce
if (RTMPCompareMemory(ANonce, SNonce, 32) == 0)
NdisMoveMemory(&concatenation[CurrPos], temp, 32); // patch for ralink proprietary STA-key issue
else if (RTMPCompareMemory(ANonce, SNonce, 32) == 1)
NdisMoveMemory(&concatenation[CurrPos], ANonce, 32);
else
NdisMoveMemory(&concatenation[CurrPos], SNonce, 32);
CurrPos += 32;
hex_dump("concatenation=", concatenation, 76);
// Use PRF to generate PTK
PRF(PMK, LEN_MASTER_KEY, Prefix, 22, concatenation, 76, output, len);
}
开发者ID:acassis,项目名称:emlinux-ssd1935,代码行数:86,代码来源:cmm_wpa.c
示例3: RT28xx_MBSS_Init
/*
========================================================================
Routine Description:
Initialize Multi-BSS function.
Arguments:
pAd points to our adapter
pDevMain points to the main BSS network interface
Return Value:
None
Note:
1. Only create and initialize virtual network interfaces.
2. No main network interface here.
3. If you down ra0 and modify the BssNum of RT2860AP.dat/RT2870AP.dat,
it will not work! You must rmmod rt2860ap.ko and lsmod rt2860ap.ko again.
========================================================================
*/
VOID RT28xx_MBSS_Init(
IN PRTMP_ADAPTER pAd,
IN PNET_DEV pDevMain)
{
PNET_DEV pDevNew;
INT32 IdBss, MaxNumBss;
INT status;
RTMP_OS_NETDEV_OP_HOOK netDevHook;
/* init */
MaxNumBss = pAd->ApCfg.BssidNum;
if (MaxNumBss > MAX_MBSSID_NUM)
MaxNumBss = MAX_MBSSID_NUM;
if (!pAd->FlgMbssInit)
{
/* first IdBss must not be 0 (BSS0), must be 1 (BSS1) */
for(IdBss=FIRST_MBSSID; IdBss<MAX_MBSSID_NUM; IdBss++)
pAd->ApCfg.MBSSID[IdBss].MSSIDDev = NULL;
}
/* create virtual network interface */
for(IdBss=FIRST_MBSSID; IdBss<MaxNumBss; IdBss++)
{
if (pAd->ApCfg.MBSSID[IdBss].MSSIDDev)
{
continue;
}
pDevNew = RtmpOSNetDevCreate(pAd, INT_MBSSID, IdBss, sizeof(PRTMP_ADAPTER), INF_MBSSID_DEV_NAME);
if (pDevNew == NULL)
{
/* allocation fail, exit */
pAd->ApCfg.BssidNum = IdBss; /* re-assign new MBSS number */
DBGPRINT(RT_DEBUG_ERROR, ("Allocate network device fail (MBSS)...\n"));
break;
}
else
{
DBGPRINT(RT_DEBUG_TRACE, ("Register MBSSID IF (%s)\n", RTMP_OS_NETDEV_GET_DEVNAME(pDevNew)));
}
RTMP_OS_NETDEV_SET_PRIV(pDevNew, pAd);
/* init operation functions and flags */
NdisZeroMemory(&netDevHook, sizeof(netDevHook));
netDevHook.open = MBSS_VirtualIF_Open; // device opem hook point
netDevHook.stop = MBSS_VirtualIF_Close; // device close hook point
netDevHook.xmit = MBSS_VirtualIF_PacketSend; // hard transmit hook point
netDevHook.ioctl = MBSS_VirtualIF_Ioctl; // ioctl hook point
netDevHook.priv_flags = INT_MBSSID; // We are virtual interface
netDevHook.needProtcted = TRUE;
/* Init MAC address of virtual network interface */
NdisMoveMemory(&netDevHook.devAddr[0], &pAd->ApCfg.MBSSID[IdBss].Bssid[0], MAC_ADDR_LEN);
/* backup our virtual network interface */
pAd->ApCfg.MBSSID[IdBss].MSSIDDev = pDevNew;
/* register this device to OS */
status = RtmpOSNetDevAttach(pDevNew, &netDevHook);
}
pAd->FlgMbssInit = TRUE;
}
开发者ID:schidler,项目名称:flyzjhz-rt-n56u,代码行数:84,代码来源:ap_mbss.c
示例4: APBuildAssociation
/*
==========================================================================
Description:
assign a new AID to the newly associated/re-associated STA and
decide its MaxSupportedRate and CurrTxRate. Both rates should not
exceed AP's capapbility
Return:
MLME_SUCCESS - association successfully built
others - association failed due to resource issue
==========================================================================
*/
static USHORT APBuildAssociation(
IN RTMP_ADAPTER *pAd,
IN MAC_TABLE_ENTRY *pEntry,
IN IE_LISTS *ie_list,
IN UCHAR MaxSupportedRateIn500Kbps,
OUT USHORT *pAid)
{
USHORT StatusCode = MLME_SUCCESS;
UCHAR MaxSupportedRate = RATE_11;
MULTISSID_STRUCT *wdev;
MaxSupportedRate = dot11_2_ra_rate(MaxSupportedRateIn500Kbps);
if ((WMODE_EQUAL(pAd->CommonCfg.PhyMode, WMODE_G)
#ifdef DOT11_N_SUPPORT
|| WMODE_EQUAL(pAd->CommonCfg.PhyMode, (WMODE_G | WMODE_GN))
#endif /* DOT11_N_SUPPORT */
)
&& (MaxSupportedRate < RATE_FIRST_OFDM_RATE)
)
return MLME_ASSOC_REJ_DATA_RATE;
#ifdef DOT11_N_SUPPORT
/* 11n only */
if (WMODE_HT_ONLY(pAd->CommonCfg.PhyMode)&& (ie_list->ht_cap_len == 0))
return MLME_ASSOC_REJ_DATA_RATE;
#endif /* DOT11_N_SUPPORT */
if (!pEntry)
return MLME_UNSPECIFY_FAIL;
if (pEntry && ((pEntry->Sst == SST_AUTH) || (pEntry->Sst == SST_ASSOC)))
{
/* TODO: */
/* should qualify other parameters, for example - capablity, supported rates, listen interval, ... etc */
/* to decide the Status Code */
/**pAid = APAssignAid(pAd, pEntry); */
/*pEntry->Aid = *pAid; */
*pAid = pEntry->Aid;
pEntry->NoDataIdleCount = 0;
pEntry->StaConnectTime = 0;
{
/* check the validity of the received RSNIE */
if ((StatusCode = APValidateRSNIE(pAd, pEntry, &ie_list->RSN_IE[0], ie_list->RSNIE_Len)) != MLME_SUCCESS)
return StatusCode;
}
NdisMoveMemory(pEntry->RSN_IE, &ie_list->RSN_IE[0], ie_list->RSNIE_Len);
pEntry->RSNIE_Len = ie_list->RSNIE_Len;
wdev = &pAd->ApCfg.MBSSID[pEntry->apidx];
if (*pAid == 0)
StatusCode = MLME_ASSOC_REJ_UNABLE_HANDLE_STA;
else if ((pEntry->RSNIE_Len == 0) &&
(wdev->AuthMode >= Ndis802_11AuthModeWPA)
#ifdef HOSTAPD_SUPPORT
&& (wdev->Hostapd == TRUE)
#endif
)
{
StatusCode = MLME_ASSOC_DENY_OUT_SCOPE;
#ifdef HOSTAPD_SUPPORT
if(wdev->Hostapd == TRUE
&& (wdev->AuthMode >= Ndis802_11AuthModeWPA
|| wdev->IEEE8021X))
{
RtmpOSWrielessEventSendExt(pAd->net_dev, RT_WLAN_EVENT_EXPIRED,
-1, pEntry->Addr, NULL, 0,
((pEntry->CapabilityInfo & 0x0010) == 0 ? 0xFFFD : 0xFFFC));
}
#endif /*HOSTAPD_SUPPORT*/
}
else
{
StatusCode = update_associated_mac_entry(pAd, pEntry, ie_list, MaxSupportedRate);
}
}
else /* CLASS 3 error should have been handled beforehand; here should be MAC table full */
StatusCode = MLME_ASSOC_REJ_UNABLE_HANDLE_STA;
if (StatusCode == MLME_SUCCESS)
{
if (ie_list->bWmmCapable)
//.........这里部分代码省略.........
开发者ID:derekcentrico,项目名称:m6.kernel.3.x,代码行数:101,代码来源:ap_assoc.c
示例5: ConstructEapolMsg
//.........这里部分代码省略.........
if (MsgType == EAPOL_PAIR_MSG_3)
pMsg->KeyDesc.KeyInfo.Install = 1;
if ((MsgType == EAPOL_PAIR_MSG_1) || (MsgType == EAPOL_PAIR_MSG_3) || (MsgType == EAPOL_GROUP_MSG_1))
pMsg->KeyDesc.KeyInfo.KeyAck = 1;
if (MsgType != EAPOL_PAIR_MSG_1)
pMsg->KeyDesc.KeyInfo.KeyMic = 1;
if ((bWPA2 && (MsgType >= EAPOL_PAIR_MSG_3)) || (!bWPA2 && (MsgType >= EAPOL_GROUP_MSG_1)))
{
pMsg->KeyDesc.KeyInfo.Secure = 1;
}
if (bWPA2 && ((MsgType == EAPOL_PAIR_MSG_3) || (MsgType == EAPOL_GROUP_MSG_1)))
{
pMsg->KeyDesc.KeyInfo.EKD_DL = 1;
}
// key Information element has done.
*(USHORT *)(&pMsg->KeyDesc.KeyInfo) = cpu2le16(*(USHORT *)(&pMsg->KeyDesc.KeyInfo));
// Fill in Key Length
#if 0
if (bWPA2)
{
// In WPA2 mode, the field indicates the length of pairwise key cipher,
// so only pairwise_msg_1 and pairwise_msg_3 need to fill.
if ((MsgType == EAPOL_PAIR_MSG_1) || (MsgType == EAPOL_PAIR_MSG_3))
pMsg->KeyDesc.KeyLength[1] = ((WepStatus == Ndis802_11Encryption2Enabled) ? LEN_TKIP_KEY : LEN_AES_KEY);
}
else if (!bWPA2)
#endif
{
if (MsgType >= EAPOL_GROUP_MSG_1)
{
// the length of group key cipher
pMsg->KeyDesc.KeyLength[1] = ((GroupKeyWepStatus == Ndis802_11Encryption2Enabled) ? TKIP_GTK_LENGTH : LEN_AES_KEY);
}
else
{
// the length of pairwise key cipher
pMsg->KeyDesc.KeyLength[1] = ((WepStatus == Ndis802_11Encryption2Enabled) ? LEN_TKIP_KEY : LEN_AES_KEY);
}
}
// Fill in replay counter
NdisMoveMemory(pMsg->KeyDesc.ReplayCounter, ReplayCounter, LEN_KEY_DESC_REPLAY);
// Fill Key Nonce field
// ANonce : pairwise_msg1 & pairwise_msg3
// SNonce : pairwise_msg2
// GNonce : group_msg1_wpa1
if ((MsgType <= EAPOL_PAIR_MSG_3) || ((!bWPA2 && (MsgType == EAPOL_GROUP_MSG_1))))
NdisMoveMemory(pMsg->KeyDesc.KeyNonce, KeyNonce, LEN_KEY_DESC_NONCE);
// Fill key IV - WPA2 as 0, WPA1 as random
if (!bWPA2 && (MsgType == EAPOL_GROUP_MSG_1))
{
// Suggest IV be random number plus some number,
NdisMoveMemory(pMsg->KeyDesc.KeyIv, &KeyNonce[16], LEN_KEY_DESC_IV);
pMsg->KeyDesc.KeyIv[15] += 2;
}
// Fill Key RSC field
// It contains the RSC for the GTK being installed.
if ((MsgType == EAPOL_PAIR_MSG_3 && bWPA2) || (MsgType == EAPOL_GROUP_MSG_1))
{
NdisMoveMemory(pMsg->KeyDesc.KeyRsc, TxRSC, 6);
}
// Clear Key MIC field for MIC calculation later
NdisZeroMemory(pMsg->KeyDesc.KeyMic, LEN_KEY_DESC_MIC);
ConstructEapolKeyData(pAd,
AuthMode,
WepStatus,
GroupKeyWepStatus,
MsgType,
DefaultKeyIdx,
bWPA2,
PTK,
GTK,
RSNIE,
RSNIE_Len,
pMsg);
// Calculate MIC and fill in KeyMic Field except Pairwise Msg 1.
if (MsgType != EAPOL_PAIR_MSG_1)
{
CalculateMIC(pAd, WepStatus, PTK, pMsg);
}
DBGPRINT(RT_DEBUG_TRACE, ("===> ConstructEapolMsg for %s %s\n", ((bWPA2) ? "WPA2" : "WPA"), GetEapolMsgType(MsgType)));
DBGPRINT(RT_DEBUG_TRACE, (" Body length = %d \n", pMsg->Body_Len[1]));
DBGPRINT(RT_DEBUG_TRACE, (" Key length = %d \n", pMsg->KeyDesc.KeyLength[1]));
}
开发者ID:acassis,项目名称:emlinux-ssd1935,代码行数:101,代码来源:cmm_wpa.c
示例6: domain
//.........这里部分代码省略.........
pAlpha2[0], pAlpha2[1], DfsType));
break;
} /* End of if */
} /* End of for */
} /* End of if */
} /* End of if */
#endif /* EXT_BUILD_CHANNEL_LIST */
#endif /* AUTO_CH_SELECT_ENHANCE */
for(IdBand=0; IdBand<2; IdBand++)
{
if (((IdBand == 0) && (pBand24G == NULL)) ||
((IdBand == 1) && (pBand5G == NULL)))
{
continue;
} /* End of if */
if (IdBand == 0)
{
CFG80211DBG(RT_DEBUG_ERROR, ("crda> reset chan/power for 2.4GHz\n"));
}
else
{
CFG80211DBG(RT_DEBUG_ERROR, ("crda> reset chan/power for 5GHz\n"));
} /* End of if */
ChanNum = CFG80211OS_ChanNumGet(CFG80211CB, pWiphy, IdBand);
for(IdChan=0; IdChan<ChanNum; IdChan++)
{
if (CFG80211OS_ChanInfoGet(CFG80211CB, pWiphy, IdBand, IdChan,
&ChanId, &Power, &FlgIsRadar) == FALSE)
{
/* the channel is not allowed in the regulatory domain */
/* get next channel information */
continue;
}
if (!WMODE_CAP_2G(pAd->CommonCfg.PhyMode))
{
/* 5G-only mode */
if (ChanId <= CFG80211_NUM_OF_CHAN_2GHZ)
continue;
}
if (!WMODE_CAP_5G(pAd->CommonCfg.PhyMode))
{
/* 2.4G-only mode */
if (ChanId > CFG80211_NUM_OF_CHAN_2GHZ)
continue;
}
for(IdPwr=0; IdPwr<MAX_NUM_OF_CHANNELS; IdPwr++)
{
if (ChanId == pAd->TxPower[IdPwr].Channel)
{
/* init the channel info. */
NdisMoveMemory(&pAd->ChannelList[RecId],
&pAd->TxPower[IdPwr],
sizeof(CHANNEL_TX_POWER));
/* keep channel number */
pAd->ChannelList[RecId].Channel = ChanId;
/* keep maximum tranmission power */
pAd->ChannelList[RecId].MaxTxPwr = Power;
/* keep DFS flag */
if (FlgIsRadar == TRUE)
pAd->ChannelList[RecId].DfsReq = TRUE;
else
pAd->ChannelList[RecId].DfsReq = FALSE;
/* End of if */
/* keep DFS type */
pAd->ChannelList[RecId].RegulatoryDomain = DfsType;
/* re-set DFS info. */
pAd->CommonCfg.RDDurRegion = DfsType;
CFG80211DBG(RT_DEBUG_ERROR,
("Chan %03d:\tpower %d dBm, "
"DFS %d, DFS Type %d\n",
ChanId, Power,
((FlgIsRadar == TRUE)?1:0),
DfsType));
/* change to record next channel info. */
RecId ++;
break;
} /* End of if */
} /* End of for */
} /* End of for */
} /* End of for */
pAd->ChannelListNum = RecId;
RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags);
CFG80211DBG(RT_DEBUG_ERROR, ("crda> Number of channels = %d\n", RecId));
} /* End of CFG80211_RegRuleApply */
开发者ID:andyvand,项目名称:mt7601u-ap,代码行数:101,代码来源:cfg80211drv.c
示例7: tapReadConfiguration
NDIS_STATUS
tapReadConfiguration(__in PTAP_ADAPTER_CONTEXT Adapter) {
NDIS_STATUS status = NDIS_STATUS_SUCCESS;
NDIS_CONFIGURATION_OBJECT configObject;
NDIS_HANDLE configHandle;
DEBUGP(("[TAP] --> tapReadConfiguration\n"));
//
// Setup defaults in case configuration cannot be opened.
//
Adapter->MtuSize = ETHERNET_MTU;
Adapter->MediaStateAlwaysConnected = FALSE;
Adapter->LogicalMediaState = FALSE;
Adapter->AllowNonAdmin = FALSE;
//
// Open the registry for this adapter to read advanced
// configuration parameters stored by the INF file.
//
NdisZeroMemory(&configObject, sizeof(configObject));
{ C_ASSERT(sizeof(configObject) >= NDIS_SIZEOF_CONFIGURATION_OBJECT_REVISION_1); }
configObject.Header.Type = NDIS_OBJECT_TYPE_CONFIGURATION_OBJECT;
configObject.Header.Size = NDIS_SIZEOF_CONFIGURATION_OBJECT_REVISION_1;
configObject.Header.Revision = NDIS_CONFIGURATION_OBJECT_REVISION_1;
configObject.NdisHandle = Adapter->MiniportAdapterHandle;
configObject.Flags = 0;
status = NdisOpenConfigurationEx(&configObject, &configHandle);
// Read on the opened configuration handle.
if (status == NDIS_STATUS_SUCCESS) {
NDIS_CONFIGURATION_PARAMETER *configParameter;
NDIS_STRING mkey = NDIS_STRING_CONST("NetCfgInstanceId");
//
// Read NetCfgInstanceId from the registry.
// ------------------------------------
// NetCfgInstanceId is required to create device and associated
// symbolic link for the adapter device.
//
// NetCfgInstanceId is a GUID string provided by NDIS that identifies
// the adapter instance. An example is:
//
// NetCfgInstanceId={410EB49D-2381-4FE7-9B36-498E22619DF0}
//
// Other names are derived from NetCfgInstanceId. For example, MiniportName:
//
// MiniportName=\DEVICE\{410EB49D-2381-4FE7-9B36-498E22619DF0}
//
NdisReadConfiguration(&status, &configParameter, configHandle, &mkey, NdisParameterString);
if (status == NDIS_STATUS_SUCCESS) {
if (configParameter->ParameterType == NdisParameterString &&
configParameter->ParameterData.StringData.Length <=
sizeof(Adapter->NetCfgInstanceIdBuffer) - sizeof(WCHAR)) {
DEBUGP(("[TAP] NdisReadConfiguration (NetCfgInstanceId=%wZ)\n",
&configParameter->ParameterData.StringData));
// Save NetCfgInstanceId as UNICODE_STRING.
Adapter->NetCfgInstanceId.Length = Adapter->NetCfgInstanceId.MaximumLength =
configParameter->ParameterData.StringData.Length;
Adapter->NetCfgInstanceId.Buffer = Adapter->NetCfgInstanceIdBuffer;
NdisMoveMemory(Adapter->NetCfgInstanceId.Buffer,
configParameter->ParameterData.StringData.Buffer,
Adapter->NetCfgInstanceId.Length);
// Save NetCfgInstanceId as ANSI_STRING as well.
if (RtlUnicodeStringToAnsiString(&Adapter->NetCfgInstanceIdAnsi,
&configParameter->ParameterData.StringData,
TRUE) != STATUS_SUCCESS) {
DEBUGP(("[TAP] NetCfgInstanceId ANSI name conversion failed\n"));
status = NDIS_STATUS_RESOURCES;
}
} else {
DEBUGP(("[TAP] NetCfgInstanceId has invalid type\n"));
status = NDIS_STATUS_INVALID_DATA;
}
} else {
DEBUGP(("[TAP] NetCfgInstanceId failed\n"));
status = NDIS_STATUS_INVALID_DATA;
}
if (status == NDIS_STATUS_SUCCESS) {
NDIS_STATUS localStatus; // Use default if these fail.
NDIS_CONFIGURATION_PARAMETER *configParameter;
NDIS_STRING mtuKey = NDIS_STRING_CONST("MTU");
NDIS_STRING mediaStatusKey = NDIS_STRING_CONST("MediaStatus");
#if ENABLE_NONADMIN
NDIS_STRING allowNonAdminKey = NDIS_STRING_CONST("AllowNonAdmin");
#endif
// Read MTU from the registry.
NdisReadConfiguration(&localStatus, &configParameter, configHandle, &mtuKey,
NdisParameterInteger);
if (localStatus == NDIS_STATUS_SUCCESS) {
//.........这里部分代码省略.........
开发者ID:hlyu368,项目名称:outline-client,代码行数:101,代码来源:adapter.c
示例8: APMsgTypeSubst
//.........这里部分代码省略.........
EAPType = *((UCHAR*)pFrame + LENGTH_802_11 + LENGTH_802_1_H + 1);
Return = WpaMsgTypeSubst(EAPType, (INT *) MsgType);
}
return Return;
}
if (pFrame->Hdr.FC.Type != FC_TYPE_MGMT)
return FALSE;
switch (pFrame->Hdr.FC.SubType)
{
case SUBTYPE_ASSOC_REQ:
*Machine = AP_ASSOC_STATE_MACHINE;
*MsgType = APMT2_PEER_ASSOC_REQ;
break;
/*
case SUBTYPE_ASSOC_RSP:
*Machine = AP_ASSOC_STATE_MACHINE;
*MsgType = APMT2_PEER_ASSOC_RSP;
break;
*/
case SUBTYPE_REASSOC_REQ:
*Machine = AP_ASSOC_STATE_MACHINE;
*MsgType = APMT2_PEER_REASSOC_REQ;
break;
/*
case SUBTYPE_REASSOC_RSP:
*Machine = AP_ASSOC_STATE_MACHINE;
*MsgType = APMT2_PEER_REASSOC_RSP;
break;
*/
case SUBTYPE_PROBE_REQ:
*Machine = AP_SYNC_STATE_MACHINE;
*MsgType = APMT2_PEER_PROBE_REQ;
break;
/* For Active Scan */
case SUBTYPE_PROBE_RSP:
*Machine = AP_SYNC_STATE_MACHINE;
*MsgType = APMT2_PEER_PROBE_RSP;
break;
case SUBTYPE_BEACON:
*Machine = AP_SYNC_STATE_MACHINE;
*MsgType = APMT2_PEER_BEACON;
break;
/*
case SUBTYPE_ATIM:
*Machine = AP_SYNC_STATE_MACHINE;
*MsgType = APMT2_PEER_ATIM;
break;
*/
case SUBTYPE_DISASSOC:
*Machine = AP_ASSOC_STATE_MACHINE;
*MsgType = APMT2_PEER_DISASSOC_REQ;
break;
case SUBTYPE_AUTH:
/* get the sequence number from payload 24 Mac Header + 2 bytes algorithm */
NdisMoveMemory(&Seq, &pFrame->Octet[2], sizeof(USHORT));
*Machine = AP_AUTH_STATE_MACHINE;
if (Seq == 1)
*MsgType = APMT2_PEER_AUTH_REQ;
else if (Seq == 3)
*MsgType = APMT2_PEER_AUTH_CONFIRM;
else
{
DBGPRINT(RT_DEBUG_TRACE,("wrong AUTH seq=%d Octet=%02x %02x %02x %02x %02x %02x %02x %02x\n", Seq,
pFrame->Octet[0], pFrame->Octet[1], pFrame->Octet[2], pFrame->Octet[3],
pFrame->Octet[4], pFrame->Octet[5], pFrame->Octet[6], pFrame->Octet[7]));
return FALSE;
}
break;
case SUBTYPE_DEAUTH:
*Machine = AP_AUTH_STATE_MACHINE; /*AP_AUTH_RSP_STATE_MACHINE;*/
*MsgType = APMT2_PEER_DEAUTH;
break;
case SUBTYPE_ACTION:
case SUBTYPE_ACTION_NO_ACK:
*Machine = ACTION_STATE_MACHINE;
/* Sometimes Sta will return with category bytes with MSB = 1, if they receive catogory out of their support */
if ((pFrame->Octet[0]&0x7F) > MAX_PEER_CATE_MSG)
{
*MsgType = MT2_ACT_INVALID;
}
else
{
*MsgType = (pFrame->Octet[0]&0x7F);
}
break;
default:
return FALSE;
break;
}
return TRUE;
}
开发者ID:jing-git,项目名称:rt-n56u-1,代码行数:101,代码来源:ap_mlme.c
示例9: RtmpUSB_WriteSingleTxResource
USHORT RtmpUSB_WriteSingleTxResource(
IN PRTMP_ADAPTER pAd,
IN TX_BLK *pTxBlk,
IN BOOLEAN bIsLast,
OUT USHORT *FreeNumber)
{
HT_TX_CONTEXT *pHTTXContext;
USHORT hwHdrLen;
UINT32 fillOffset;
TXINFO_STRUC *pTxInfo;
TXWI_STRUC *pTxWI;
PUCHAR pWirelessPacket;
UCHAR QueIdx;
unsigned long IrqFlags;
NDIS_STATUS Status;
UINT32 USBDMApktLen = 0, DMAHdrLen, padding;
BOOLEAN bTxQLastRound = FALSE;
// For USB, didn't need PCI_MAP_SINGLE()
//SrcBufPA = PCI_MAP_SINGLE(pAd, (char *) pTxBlk->pSrcBufData, pTxBlk->SrcBufLen, PCI_DMA_TODEVICE);
//
// get Tx Ring Resource & Dma Buffer address
//
QueIdx = pTxBlk->QueIdx;
RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags);
pHTTXContext = &pAd->TxContext[QueIdx];
fillOffset = pHTTXContext->CurWritePosition;
// Check ring full.
Status = RtmpUSBCanDoWrite(pAd, QueIdx, pHTTXContext);
if(Status == NDIS_STATUS_SUCCESS)
{
pHTTXContext->bCurWriting = TRUE;
pTxInfo = (PTXINFO_STRUC)(&pTxBlk->HeaderBuf[0]);
pTxWI= (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]);
// Reserve space for 8 bytes padding.
if ((pHTTXContext->ENextBulkOutPosition == pHTTXContext->CurWritePosition))
{
pHTTXContext->ENextBulkOutPosition += 8;
pHTTXContext->CurWritePosition += 8;
fillOffset += 8;
}
pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition;
pWirelessPacket = &pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset];
// copy TXWI + WLAN Header + LLC into DMA Header Buffer
//hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4);
hwHdrLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen;
// Build our URB for USBD
DMAHdrLen = TXWI_SIZE + hwHdrLen;
USBDMApktLen = DMAHdrLen + pTxBlk->SrcBufLen;
padding = (4 - (USBDMApktLen % 4)) & 0x03; // round up to 4 byte alignment
USBDMApktLen += padding;
pTxBlk->Priv = (TXINFO_SIZE + USBDMApktLen);
// For TxInfo, the length of USBDMApktLen = TXWI_SIZE + 802.11 header + payload
RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(USBDMApktLen), FALSE, FIFO_EDCA, FALSE /*NextValid*/, FALSE);
if ((pHTTXContext->CurWritePosition + 3906 + pTxBlk->Priv) > MAX_TXBULK_LIMIT)
{
pTxInfo->SwUseLastRound = 1;
bTxQLastRound = TRUE;
}
NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, TXINFO_SIZE + TXWI_SIZE + hwHdrLen);
#ifdef RT_BIG_ENDIAN
RTMPFrameEndianChange(pAd, (PUCHAR)(pWirelessPacket + TXINFO_SIZE + TXWI_SIZE), DIR_WRITE, FALSE);
#endif // RT_BIG_ENDIAN //
pWirelessPacket += (TXINFO_SIZE + TXWI_SIZE + hwHdrLen);
// We unlock it here to prevent the first 8 bytes maybe over-writed issue.
// 1. First we got CurWritePosition but the first 8 bytes still not write to the pTxcontext.
// 2. An interrupt break our routine and handle bulk-out complete.
// 3. In the bulk-out compllete, it need to do another bulk-out,
// if the ENextBulkOutPosition is just the same as CurWritePosition, it will save the first 8 bytes from CurWritePosition,
// but the payload still not copyed. the pTxContext->SavedPad[] will save as allzero. and set the bCopyPad = TRUE.
// 4. Interrupt complete.
// 5. Our interrupted routine go back and fill the first 8 bytes to pTxContext.
// 6. Next time when do bulk-out, it found the bCopyPad==TRUE and will copy the SavedPad[] to pTxContext->NextBulkOutPosition.
// and the packet will wrong.
pHTTXContext->CurWriteRealPos += (TXINFO_SIZE + TXWI_SIZE + hwHdrLen);
RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags);
NdisMoveMemory(pWirelessPacket, pTxBlk->pSrcBufData, pTxBlk->SrcBufLen);
pWirelessPacket += pTxBlk->SrcBufLen;
NdisZeroMemory(pWirelessPacket, padding + 8);
RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags);
pHTTXContext->CurWritePosition += pTxBlk->Priv;
if (bTxQLastRound)
//.........这里部分代码省略.........
开发者ID:32743069,项目名称:amlogic_common_3050,代码行数:101,代码来源:cmm_data_usb.c
示例10: TDLS_BuildSetupRequest
/*
==========================================================================
Description:
IRQL = PASSIVE_LEVEL
==========================================================================
*/
VOID
TDLS_BuildSetupRequest(
IN PRTMP_ADAPTER pAd,
OUT PUCHAR pFrameBuf,
OUT PULONG pFrameLen,
IN PRT_802_11_TDLS pTDLS)
{
ULONG Timeout = TDLS_TIMEOUT;
BOOLEAN TimerCancelled;
/* fill action code */
TDLS_InsertActField(pAd, (pFrameBuf + *pFrameLen), pFrameLen, CATEGORY_TDLS, TDLS_ACTION_CODE_SETUP_REQUEST);
/* fill Dialog Token */
pAd->StaCfg.TdlsDialogToken++;
if (pAd->StaCfg.TdlsDialogToken == 0)
pAd->StaCfg.TdlsDialogToken++;
pTDLS->Token = pAd->StaCfg.TdlsDialogToken;
TDLS_InsertDialogToken(pAd, (pFrameBuf + *pFrameLen), pFrameLen, pTDLS->Token);
/* fill link identifier */
TDLS_InsertLinkIdentifierIE(pAd, (pFrameBuf + *pFrameLen), pFrameLen, pAd->CurrentAddress, pTDLS->MacAddr);
// fill capability
TDLS_InsertCapIE(pAd, (pFrameBuf + *pFrameLen), pFrameLen);
// fill ssid
TDLS_InsertSSIDIE(pAd, (pFrameBuf + *pFrameLen), pFrameLen);
// fill support rate
TDLS_InsertSupportRateIE(pAd, (pFrameBuf + *pFrameLen), pFrameLen);
// fill ext rate
TDLS_InsertExtRateIE(pAd, (pFrameBuf + *pFrameLen), pFrameLen);
// fill Qos Capability
TDLS_InsertQosCapIE(pAd, (pFrameBuf + *pFrameLen), pFrameLen);
#ifdef DOT11_N_SUPPORT
// fill HT Capability
TDLS_InsertHtCapIE(pAd, (pFrameBuf + *pFrameLen), pFrameLen);
// fill 20/40 BSS Coexistence (7.3.2.61)
#ifdef DOT11N_DRAFT3
TDLS_InsertBSSCoexistenceIE(pAd, (pFrameBuf + *pFrameLen), pFrameLen);
#endif // DOT11N_DRAFT3 //
#endif // DOT11_N_SUPPORT //
// fill Extended Capabilities (7.3.2.27)
TDLS_InsertExtCapIE(pAd, (pFrameBuf + *pFrameLen), pFrameLen);
// TPK Handshake if RSNA Enabled
// Pack TPK Message 1 here!
if (((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) &&
((pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) || (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)))
{
UCHAR CipherTmp[64] = {0};
UCHAR CipherTmpLen = 0;
FT_FTIE FtIe;
ULONG KeyLifetime = TDLS_KEY_TIMEOUT; // sec
ULONG tmp;
UCHAR Length;
// RSNIE (7.3.2.25)
CipherTmpLen = CipherSuiteTDLSLen;
if (pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
NdisMoveMemory(CipherTmp, CipherSuiteTDLSWpa2PskTkip, CipherTmpLen);
else
NdisMoveMemory(CipherTmp, CipherSuiteTDLSWpa2PskAes, CipherTmpLen);
// update AKM
if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2)
CipherTmp[19] = TDLS_AKM_SUITE_1X;
// Insert RSN_IE to outgoing frame
MakeOutgoingFrame((pFrameBuf + *pFrameLen), &tmp,
CipherTmpLen, &CipherTmp,
END_OF_ARGS);
*pFrameLen = *pFrameLen + tmp;
// FTIE (7.3.2.48)
NdisZeroMemory(&FtIe, sizeof(FtIe));
Length = sizeof(FtIe);
// generate SNonce
GenRandom(pAd, pAd->CurrentAddress, FtIe.SNonce);
hex_dump("TDLS - Generate SNonce ", FtIe.SNonce, 32);
NdisMoveMemory(pTDLS->SNonce, FtIe.SNonce, 32);
TDLS_InsertFTIE(
pAd,
//.........这里部分代码省略.........
开发者ID:philenotfound,项目名称:belkin-wemo-linux-2.6.21.x,代码行数:101,代码来源:tdls_link_mng.c
示例11: TDLS_TPKMsg3Process
/*
==========================================================================
Description:
IRQL = PASSIVE_LEVEL
==========================================================================
*/
USHORT TDLS_TPKMsg3Process(
IN PRTMP_ADAPTER pAd,
IN PRT_802_11_TDLS pTDLS,
IN PUCHAR pRsnIe,
IN UCHAR RsnLen,
IN PUCHAR pFTIe,
IN UCHAR FTLen,
IN PUCHAR pTIIe,
IN UCHAR TILen)
{
USHORT StatusCode = MLME_SUCCESS;
UCHAR CipherTmp[64] = {0};
UCHAR CipherTmpLen = 0;
FT_FTIE *ft = NULL;
UCHAR oldMic[16];
UCHAR LinkIdentifier[20];
// Validate RsnIE
//
if (RsnLen == 0) // RSN not exist
return MLME_INVALID_INFORMATION_ELEMENT;
if (pRsnIe[2] < 1) // Smaller version
return MLME_NOT_SUPPORT_RSN_VERSION;
CipherTmpLen = CipherSuiteTDLSLen;
if (pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
NdisMoveMemory(CipherTmp, CipherSuiteTDLSWpa2PskTkip, CipherTmpLen);
else
NdisMoveMemory(CipherTmp, CipherSuiteTDLSWpa2PskAes, CipherTmpLen);
if(pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2)
CipherTmp[19] = TDLS_AKM_SUITE_1X;
if ( RTMPEqualMemory(&pRsnIe[16], &CipherTmp[16], 4) == 0) // Invalid TDLS AKM
return MLME_INVALID_AKMP;
if ( RTMPEqualMemory(&pRsnIe[20], &CipherTmp[20], 2) == 0) // Invalid RSN capability
return MLME_INVALID_RSN_CAPABILITIES;
if ((RsnLen != 22) || (RTMPEqualMemory(pRsnIe, CipherTmp, RsnLen) == 0)) // Invalid Pairwise Cipher
return REASON_UCIPHER_NOT_VALID;
// Validate FTIE
//
ft = (PFT_FTIE)(pFTIe + 2); // point to the element of IE
if ((FTLen != (sizeof(FT_FTIE) + 2)) || RTMPEqualMemory(&ft->MICCtr, TdlsZeroSsid, 2) == 0 ||
(RTMPEqualMemory(ft->SNonce, pTDLS->SNonce, 32) == 0) || (RTMPEqualMemory(ft->ANonce, pTDLS->ANonce, 32) == 0))
return REASON_FT_INVALID_FTIE;
// Validate TIIE
//
if ((TILen != 7) || (pTIIe[2] != 2) || ( le2cpu32(*((PULONG) (pTIIe + 3))) < pTDLS->KeyLifetime))
return TDLS_STATUS_CODE_UNACCEPTABLE_LIFETIME;
// Validate the MIC field of FTIE
//
// point to the element of IE
ft = (PFT_FTIE)(pFTIe + 2);
// backup MIC fromm the peer TDLS
NdisMoveMemory(oldMic, ft->MIC, 16);
// set MIC field to zero before MIC calculation
NdisZeroMemory(ft->MIC, 16);
// Construct LinkIdentifier (IE + Length + BSSID + Initiator MAC + Responder MAC)
NdisZeroMemory(LinkIdentifier, 20);
LinkIdentifier[0] = IE_TDLS_LINK_IDENTIFIER;
LinkIdentifier[1] = 18;
NdisMoveMemory(&LinkIdentifier[2], pAd->CommonCfg.Bssid, 6);
NdisMoveMemory(&LinkIdentifier[8], pTDLS->MacAddr, 6);
NdisMoveMemory(&LinkIdentifier[14], pAd->CurrentAddress, 6);
////////////////////////////////////////////////////////////////////////
// The MIC field of FTIE shall be calculated on the concatenation, in the following order, of
// 1. MAC_I (6 bytes)
// 2. MAC_R (6 bytes)
// 3. Transaction Sequence = 3 (1 byte)
// 4. Link Identifier (20 bytes)
// 5. RSN IE without the IE header (20 bytes)
// 6. Timeout Interval IE (7 bytes)
// 7. FTIE without the IE header, with the MIC field of FTIE set to zero (82 bytes)
{
UCHAR content[512];
ULONG c_len = 0;
ULONG tmp_len = 0;
UCHAR Seq = 3;
UCHAR mic[16];
UINT tmp_aes_len = 0;
//.........这里部分代码省略.........
开发者ID:philenotfound,项目名称:belkin-wemo-linux-2.6.21.x,代码行数:101,代码来源:tdls_link_mng.c
示例12: TDLS_BuildTeardown
/*
==========================================================================
Description:
IRQL = PASSIVE_LEVEL
==========================================================================
*/
VOID
TDLS_BuildTeardown(
IN PRTMP_ADAPTER pAd,
OUT PUCHAR pFrameBuf,
OUT PULONG pFrameLen,
IN PRT_802_11_TDLS pTDLS,
IN UINT16 ReasonCode)
{
/* fill action code */
TDLS_InsertActField(pAd, (pFrameBuf + *pFrameLen), pFrameLen, CATEGORY_TDLS, TDLS_ACTION_CODE_TEARDOWN);
/* fill reason code */
TDLS_InsertReasonCode(pAd, (pFrameBuf + *pFrameLen), pFrameLen, ReasonCode);
/* fill link identifier */
if (pTDLS->bInitiator)
TDLS_InsertLinkIdentifierIE(pAd, (pFrameBuf + *pFrameLen), pFrameLen, pTDLS->MacAddr, pAd->CurrentAddress);
else
TDLS_InsertLinkIdentifierIE(pAd, (pFrameBuf + *pFrameLen), pFrameLen, pAd->CurrentAddress, pTDLS->MacAddr);
// FTIE includes if RSNA Enabled
if (((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) &&
((pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) || (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)))
{
UCHAR FTIe[128];
FT_FTIE *ft = NULL;
UCHAR content[256];
ULONG c_len = 0;
ULONG tmp_len = 0;
UCHAR seq = 4;
UCHAR mic[16];
UCHAR LinkIdentifier[20];
UINT tmp_aes_len = 0;
NdisZeroMemory(LinkIdentifier, 20);
LinkIdentifier[0] = IE_TDLS_LINK_IDENTIFIER;
LinkIdentifier[1] = 18;
NdisMoveMemory(&LinkIdentifier[2], pAd->CommonCfg.Bssid, 6);
if (pTDLS->bInitiator)
{
NdisMoveMemory(&LinkIdentifier[8], pTDLS->MacAddr, 6);
NdisMoveMemory(&LinkIdentifier[14], pAd->CurrentAddress, 6);
}
else
{
NdisMoveMemory(&LinkIdentifier[8], pAd->CurrentAddress, 6);
NdisMoveMemory(&LinkIdentifier[14], pTDLS->MacAddr, 6);
}
//NdisMoveMemory(&LinkIdentifier[8], pTDLS->MacAddr, 6);
//NdisMoveMemory(&LinkIdentifier[14], pAd->CurrentAddress, 6);
// FTIE (7.3.2.48)
// The contents of FTIE in the TDLS Teardown frame shall be the same as that included
// in the TPK Handshake Message3 with the exception of the MIC field.
// Construct FTIE (IE + Length + MIC Control + MIC + ANonce + SNonce)
// point to the element of IE
NdisZeroMemory(FTIe, sizeof(FTIe));
FTIe[0] = IE_FT_FTIE;
FTIe[1] = sizeof(FT_FTIE);
ft = (PFT_FTIE)&FTIe[2];
NdisMoveMemory(ft->ANonce, pTDLS->ANonce, 32);
NdisMoveMemory(ft->SNonce, pTDLS->SNonce, 32);
////////////////////////////////////////////////////////////////////////
// The MIC field of FTIE shall be calculated on the concatenation, in the following order, of
// 1. Link Identifier (20 bytes)
// 2. Reason Code (2 bytes)
// 3. Dialog token (1 byte)
// 4. Transaction Sequence = 4 (1 byte)
// 5. FTIE with the MIC field of FTIE set to zero (84 bytes)
/* concatenate Link Identifier, Reason Code, Dialog token, Transaction Sequence */
MakeOutgoingFrame(content, &tmp_len,
sizeof(LinkIdentifier), LinkIdentifier,
2, &ReasonCode,
1, &pTDLS->Token,
1, &seq,
END_OF_ARGS);
c_len += tmp_len;
/* concatenate FTIE */
MakeOutgoingFrame(content + c_len, &tmp_len,
FTIe[1] + 2, FTIe,
END_OF_ARGS);
c_len += tmp_len;
/* Calculate MIC */
NdisZeroMemory(mic, sizeof(mic));
//.........这里部分代码省略.........
开发者ID:philenotfound,项目名称:belkin-wemo-linux-2.6.21.x,代码行数:101,代码来源:tdls_link_mng.c
示例13: TDLS_BuildSetupConfirm
/*
==========================================================================
Description:
IRQL = PASSIVE_LEVEL
==========================================================================
*/
VOID
TDLS_BuildSetupConfirm(
IN PRTMP_ADAPTER pAd,
OUT PUCHAR pFrameBuf,
OUT PULONG pFrameLen,
IN PRT_802_11_TDLS pTDLS,
IN UCHAR RsnLen,
IN PUCHAR pRsnIe,
IN UCHAR FTLen,
IN PUCHAR pFTIe,
IN UCHAR TILen,
IN PUCHAR pTIIe,
IN UINT16 StatusCode)
{
/* fill action code */
TDLS_InsertActField(pAd, (pFrameBuf + *pFrameLen), pFrameLen, CATEGORY_TDLS, TDLS_ACTION_CODE_SETUP_CONFIRM);
/* fill status code */
TDLS_InsertStatusCode(pAd, (pFrameBuf + *pFrameLen), pFrameLen, StatusCode);
/* fill Dialog Token */
TDLS_InsertDialogToken(pAd, (pFrameBuf + *pFrameLen), pFrameLen, pTDLS->Token);
/* fill link identifier */
TDLS_InsertLinkIdentifierIE(pAd, (pFrameBuf + *pFrameLen), pFrameLen, pAd->CurrentAddress, pTDLS->MacAddr);
// fill Qos Capability
TDLS_InsertEDCAParameterSetIE(pAd, (pFrameBuf + *pFrameLen), pFrameLen, pTDLS);
#ifdef DOT11_N_SUPPORT
// fill HT Capability
TDLS_InsertHtCapIE(pAd, (pFrameBuf + *pFrameLen), pFrameLen);
#endif // DOT11_N_SUPPORT //
// TPK Handshake if RSNA Enabled
// Pack TPK Message 3 here!
if (((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) &&
((pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) || (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)))
{
FT_FTIE *ft;
ULONG tmp;
// RSNIE (7.3.2.25)
// Insert RSN_IE of the Peer TDLS to outgoing frame
MakeOutgoingFrame((pFrameBuf + *pFrameLen), &tmp,
RsnLen, pRsnIe,
END_OF_ARGS);
*pFrameLen = *pFrameLen + tmp;
// FTIE (7.3.2.48)
// Construct FTIE (IE + Length + MIC Control + MIC + ANonce + SNonce)
// point to the element of IE
ft = (FT_FTIE *)(pFTIe + 2);
// set MIC field to zero before MIC calculation
NdisZeroMemory(ft->MIC, 16);
////////////////////////////////////////////////////////////////////////
// The MIC field of FTIE shall be calculated on the concatenation, in the following order, of
// 1. MAC_I (6 bytes)
// 2. MAC_R (6 bytes)
// 3. Transaction Sequence = 2 (1 byte)
// 4. Link Identifier (20 bytes)
// 5. RSN IE without the IE header (20 bytes)
// 6. Timeout Interval IE (7 bytes)
// 7. FTIE without the IE header, with the MIC field of FTIE set to zero (82 bytes)
{
UCHAR content[512];
ULONG c_len = 0;
ULONG tmp_len = 0;
UCHAR Seq = 3;
UCHAR mic[16];
UCHAR LinkIdentifier[20];
UINT tmp_aes_len = 0;
NdisZeroMemory(LinkIdentifier, 20);
LinkIdentifier[0] = IE_TDLS_LINK_IDENTIFIER;
LinkIdentifier[1] = 18;
NdisMoveMemory(&LinkIdentifier[2], pAd->CommonCfg.Bssid, 6);
NdisMoveMemory(&LinkIdentifier[8], pAd->CurrentAddress, 6);
NdisMoveMemory(&LinkIdentifier[14], pTDLS->MacAddr, 6);
NdisZeroMemory(mic, sizeof(mic));
/* make a header frame for calculating MIC. */
MakeOutgoingFrame(content, &tmp_len,
MAC_ADDR_LEN, pAd->CurrentAddress,
MAC_ADDR_LEN, pTDLS->MacAddr,
1, &Seq,
END_OF_ARGS);
c_len += tmp_len;
//.........这里部分代码省略.........
开发者ID:philenotfound,项目名称:belkin-wemo-linux-2.6.21.x,代码行数:101,代码来源:tdls_link_mng.c
示例14: APPeerDlsReqAction
/*
========================================================================
Routine Description:
Handle peer DLS Request action frame.
Arguments:
pAd points to our adapter
*pElem action frame
Return Value:
None
Note:
========================================================================
*/
VOID APPeerDlsReqAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *pElem)
{
PMAC_TABLE_ENTRY pDAEntry, pSAEntry;
UCHAR DA[MAC_ADDR_LEN], SA[MAC_ADDR_LEN];
UINT16 CapabilityInfo;
UINT16 DLSTimeout;
PUCHAR pOutBuffer = NULL;
PFRAME_802_11 Fr;
UINT16 Status;
UINT32 FrameLen = 0;
HEADER_802_11 DlsRspHdr;
UCHAR Category = CATEGORY_DLS;
UCHAR Action = ACTION_DLS_RESPONSE;
UCHAR SupportedRatesLen = 0;
UCHAR SupportedRates[MAX_LEN_OF_SUPPORTED_RATES];
HT_CAPABILITY_IE HtCapability;
UCHAR HtCapabilityLen;
assert(pElem->Msg);
/* frame sanity check */
if (!PeerDlsReqSanity(pAd, pElem->Msg, pElem->MsgLen, DA, SA,
&CapabilityInfo, &DLSTimeout,
&SupportedRatesLen, &SupportedRates[0],
&HtCapabilityLen, &HtCapability))
{
return;
}
/* check whether the source station is legal */
pSAEntry = MacTableLookup(pAd, SA);
if (!pSAEntry)
return;
pSAEntry->bDlsInit = FALSE;
/* check whether the destination station exists in our associated table */
pDAEntry = MacTableLookup(pAd, DA);
if (!pDAEntry)
Status = MLME_DEST_STA_NOT_IN_QBSS;
else if (pDAEntry && (pDAEntry->apidx != pSAEntry->apidx))
Status = MLME_DEST_STA_NOT_IN_QBSS;
else if (pDAEntry && !CLIENT_STATUS_TEST_FLAG(pDAEntry, fCLIENT_STATUS_WMM_CAPABLE))
Status = MLME_DEST_STA_IS_NOT_A_QSTA;
else if (pDAEntry->WepStatus != pSAEntry->WepStatus)
Status = MLME_QOS_UNSPECIFY; /* different security algorithm */
else if (!pAd->ApCfg.MBSSID[pSAEntry->apidx].bDLSCapable)
Status = MLME_DLS_NOT_ALLOW_IN_QBSS;
else
Status = MLME_SUCCESS;
if (pDAEntry)
pDAEntry->bDlsInit = FALSE;
/* forward DLS-Request to real destination */
Fr = (PFRAME_802_11)pElem->Msg;
/* pOutBuffer = kmalloc(MAX_LEN_OF_MLME_BUFFER, MEM_ALLOC_FLAG); */
os_alloc_mem(pAd, (UCHAR **)&pOutBuffer, MAX_LEN_OF_MLME_BUFFER);
if(pOutBuffer == NULL)
return;
/*
If status is successful, forward DLS-Request frame to destination
otherwise send DLS-Response with reason code to originator.
*/
if (Status == MLME_SUCCESS)
{
NdisMoveMemory(Fr->Hdr.Addr1, DA, MAC_ADDR_LEN);
NdisMoveMemory(Fr->Hdr.Addr2, pAd->ApCfg.MBSSID[pSAEntry->apidx].Bssid, MAC_ADDR_LEN);
NdisMoveMemory(Fr->Hdr.Addr3, SA, MAC_ADDR_LEN);
NdisMoveMemory(pOutBuffer, pElem->Msg, pElem->MsgLen);
FrameLen = pElem->MsgLen;
}
else
{
/* response error to source station */
MgtMacHeaderInit(pAd, &DlsRspHdr, SUBTYPE_ACTION, 0, SA,
pAd->ApCfg.MBSSID[pSAEntry->apidx].Bssid);
/*
Capability information and supported rate field are present
only when status code is zero.
*/
//.........这里部分代码省略.........
开发者ID:glocklueng,项目名称:MCU_WIFI,
|
请发表评论