本文整理汇总了C++中os_alloc_mem函数的典型用法代码示例。如果您正苦于以下问题:C++ os_alloc_mem函数的具体用法?C++ os_alloc_mem怎么用?C++ os_alloc_mem使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了os_alloc_mem函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: APMakeBssBeacon
/*
==========================================================================
Description:
Pre-build a BEACON frame in the shared memory
==========================================================================
*/
VOID APMakeBssBeacon(RTMP_ADAPTER *pAd, INT apidx)
{
UCHAR DsLen = 1, SsidLen;
HEADER_802_11 BcnHdr;
LARGE_INTEGER FakeTimestamp;
ULONG FrameLen = 0;
PUCHAR pBeaconFrame = (PUCHAR)pAd->ApCfg.MBSSID[apidx].BeaconBuf;
#if defined(DOT11_N_SUPPORT) && defined(DOT11K_RRM_SUPPORT)
UINT i;
#endif /* defined(DOT11_N_SUPPORT) && defined(DOT11K_RRM_SUPPORT) */
HTTRANSMIT_SETTING BeaconTransmit = {.word = 0}; /* MGMT frame PHY rate setting when operatin at Ht rate. */
UCHAR PhyMode, SupRateLen;
MULTISSID_STRUCT *pMbss = &pAd->ApCfg.MBSSID[apidx];
#ifdef SPECIFIC_TX_POWER_SUPPORT
UCHAR TxPwrAdj = 0;
#endif /* SPECIFIC_TX_POWER_SUPPORT */
if(!BeaconTransmitRequired(pAd, apidx, pMbss))
return;
PhyMode = pMbss->wdev.PhyMode;
if (pMbss->bHideSsid)
SsidLen = 0;
else
SsidLen = pMbss->SsidLen;
MgtMacHeaderInit(pAd, &BcnHdr, SUBTYPE_BEACON, 0, BROADCAST_ADDR,
pMbss->wdev.if_addr,
pMbss->wdev.bssid);
/* for update framelen to TxWI later. */
SupRateLen = pAd->CommonCfg.SupRateLen;
if (PhyMode == WMODE_B)
SupRateLen = 4;
MakeOutgoingFrame(pBeaconFrame, &FrameLen,
sizeof(HEADER_802_11), &BcnHdr,
TIMESTAMP_LEN, &FakeTimestamp,
2, &pAd->CommonCfg.BeaconPeriod,
2, &pMbss->CapabilityInfo,
1, &SsidIe,
1, &SsidLen,
SsidLen, pMbss->Ssid,
1, &SupRateIe,
1, &SupRateLen,
SupRateLen, pAd->CommonCfg.SupRate,
1, &DsIe,
1, &DsLen,
1, &pAd->CommonCfg.Channel,
END_OF_ARGS);
if ((pAd->CommonCfg.ExtRateLen) && (PhyMode != WMODE_B))
{
ULONG TmpLen;
MakeOutgoingFrame(pBeaconFrame+FrameLen, &TmpLen,
1, &ExtRateIe,
1, &pAd->CommonCfg.ExtRateLen,
pAd->CommonCfg.ExtRateLen, pAd->CommonCfg.ExtRate,
END_OF_ARGS);
FrameLen += TmpLen;
}
/* add country IE, power constraint IE */
if (pAd->CommonCfg.bCountryFlag)
{
ULONG TmpLen, TmpLen2=0;
UCHAR *TmpFrame = NULL;
UCHAR CountryIe = IE_COUNTRY;
os_alloc_mem(NULL, (UCHAR **)&TmpFrame, 256);
if (TmpFrame != NULL)
{
NdisZeroMemory(TmpFrame, 256);
/* prepare channel information */
#ifdef EXT_BUILD_CHANNEL_LIST
BuildBeaconChList(pAd, TmpFrame, &TmpLen2);
#else
{
UCHAR MaxTxPower = GetCuntryMaxTxPwr(pAd, pAd->CommonCfg.Channel);
MakeOutgoingFrame(TmpFrame+TmpLen2, &TmpLen,
1, &pAd->ChannelList[0].Channel,
1, &pAd->ChannelListNum,
1, &MaxTxPower,
END_OF_ARGS);
TmpLen2 += TmpLen;
}
#endif /* EXT_BUILD_CHANNEL_LIST */
#ifdef DOT11K_RRM_SUPPORT
if (IS_RRM_ENABLE(pAd, apidx)
&& (pAd->CommonCfg.RegulatoryClass[0] != 0))
//.........这里部分代码省略.........
示例2: 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);
}
示例3: RTMP_COM_IoctlHandle
//.........这里部分代码省略.........
for(i=0; i<6; i++)
{
pAd->BulkOutEpAddr[i] = pConfig->BulkOutEpAddr[i];
pAd->BulkOutMaxPacketSize = pConfig->BulkOutMaxPacketSize;
}
pAd->config = pConfig->pConfig;
}
break;
case CMD_RTPRIV_IOCTL_USB_SUSPEND:
pAd->PM_FlgSuspend = 1;
if (Data)
{
RTUSBCancelPendingBulkInIRP(pAd);
RTUSBCancelPendingBulkOutIRP(pAd);
}
break;
case CMD_RTPRIV_IOCTL_USB_RESUME:
pAd->PM_FlgSuspend = 0;
break;
#endif /* RTMP_USB_SUPPORT */
#ifdef RT_CFG80211_SUPPORT
case CMD_RTPRIV_IOCTL_CFG80211_CFG_START:
RT_CFG80211_REINIT(pAd);
RT_CFG80211_CRDA_REG_RULE_APPLY(pAd);
break;
#endif /* RT_CFG80211_SUPPORT */
#ifdef INF_PPA_SUPPORT
case CMD_RTPRIV_IOCTL_INF_PPA_INIT:
os_alloc_mem(NULL, (UCHAR **)&(pAd->pDirectpathCb), sizeof(PPA_DIRECTPATH_CB));
break;
case CMD_RTPRIV_IOCTL_INF_PPA_EXIT:
if (ppa_hook_directpath_register_dev_fn && pAd->PPAEnable==TRUE)
{
UINT status;
status=ppa_hook_directpath_register_dev_fn(&pAd->g_if_id, pAd->net_dev, NULL, 0);
DBGPRINT(RT_DEBUG_TRACE, ("unregister PPA:g_if_id=%d status=%d\n",pAd->g_if_id,status));
}
os_free_mem(NULL, pAd->pDirectpathCb);
break;
#endif /* INF_PPA_SUPPORT*/
case CMD_RTPRIV_IOCTL_VIRTUAL_INF_UP:
/* interface up */
{
RT_CMD_INF_UP_DOWN *pInfConf = (RT_CMD_INF_UP_DOWN *)pData;
if (VIRTUAL_IF_NUM(pAd) == 0)
{
if (pInfConf->rt28xx_open(pAd->net_dev) != 0)
{
DBGPRINT(RT_DEBUG_TRACE, ("rt28xx_open return fail!\n"));
return NDIS_STATUS_FAILURE;
}
}
else
{
#ifdef CONFIG_AP_SUPPORT
extern VOID APMakeAllBssBeacon(IN PRTMP_ADAPTER pAd);
extern VOID APUpdateAllBeaconFrame(IN PRTMP_ADAPTER pAd);
APMakeAllBssBeacon(pAd);
示例4: rt2870_probe
static int rt2870_probe(
IN struct usb_interface *intf,
IN struct usb_device *usb_dev,
IN const USB_DEVICE_ID *dev_id,
IN VOID **ppAd)
{
struct net_device *net_dev = NULL;
VOID *pAd = (VOID *) NULL;
INT status, rv;
PVOID handle;
RTMP_OS_NETDEV_OP_HOOK netDevHook;
ULONG OpMode;
#ifdef CONFIG_PM
#ifdef USB_SUPPORT_SELECTIVE_SUSPEND
/* INT pm_usage_cnt; */
INT res =1 ;
#endif /* USB_SUPPORT_SELECTIVE_SUSPEND */
#endif /* CONFIG_PM */
DBGPRINT(RT_DEBUG_TRACE, ("===>rt2870_probe()!\n"));
#ifdef CONFIG_PM
#ifdef USB_SUPPORT_SELECTIVE_SUSPEND
res = usb_autopm_get_interface(intf);
if (res)
{
DBGPRINT(RT_DEBUG_ERROR, ("rt2870_probe autopm_resume fail ------\n"));
return -EIO;
}
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)
atomic_set(&intf->pm_usage_cnt, 1);
printk(" rt2870_probe ====> pm_usage_cnt %d \n", atomic_read(&intf->pm_usage_cnt));
#else
intf->pm_usage_cnt = 1;
printk(" rt2870_probe ====> pm_usage_cnt %d \n", intf->pm_usage_cnt);
#endif
#endif /* USB_SUPPORT_SELECTIVE_SUSPEND */
#endif /* CONFIG_PM */
/*RtmpDevInit============================================= */
/* Allocate RTMP_ADAPTER adapter structure */
/* handle = kmalloc(sizeof(struct os_cookie), GFP_KERNEL); */
os_alloc_mem(NULL, (UCHAR **)&handle, sizeof(struct os_cookie));
if (handle == NULL)
{
printk("rt2870_probe(): Allocate memory for os handle failed!\n");
return -ENOMEM;
}
memset(handle, 0, sizeof(struct os_cookie));
((POS_COOKIE)handle)->pUsb_Dev = usb_dev;
#ifdef CONFIG_STA_SUPPORT
((POS_COOKIE)handle)->intf = intf;
#endif /* CONFIG_STA_SUPPORT */
/* set/get operators to/from DRIVER module */
#ifdef OS_ABL_FUNC_SUPPORT
/* get DRIVER operations */
RtmpNetOpsInit(pRtmpDrvNetOps);
RTMP_DRV_OPS_FUNCTION(pRtmpDrvOps, pRtmpDrvNetOps, NULL, NULL);
RtmpNetOpsSet(pRtmpDrvNetOps);
#endif /* OS_ABL_FUNC_SUPPORT */
rv = RTMPAllocAdapterBlock(handle, &pAd);
if (rv != NDIS_STATUS_SUCCESS)
{
/* kfree(handle); */
os_free_mem(NULL, handle);
goto err_out;
}
/*USBDevInit============================================== */
if (USBDevConfigInit(usb_dev, intf, pAd) == FALSE)
goto err_out_free_radev;
RtmpRaDevCtrlInit(pAd, RTMP_DEV_INF_USB);
/*NetDevInit============================================== */
net_dev = RtmpPhyNetDevInit(pAd, &netDevHook);
if (net_dev == NULL)
goto err_out_free_radev;
/* Here are the net_device structure with usb specific parameters. */
#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
/* for supporting Network Manager.
* Set the sysfs physical device reference for the network logical device if set prior to registration will
* cause a symlink during initialization.
*/
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
SET_NETDEV_DEV(net_dev, &(usb_dev->dev));
#endif
#endif /* NATIVE_WPA_SUPPLICANT_SUPPORT */
#ifdef CONFIG_STA_SUPPORT
/* pAd->StaCfg.OriDevType = net_dev->type; */
RTMP_DRIVER_STA_DEV_TYPE_SET(pAd, net_dev->type);
#endif /* CONFIG_STA_SUPPORT */
//.........这里部分代码省略.........
示例5: interval
//.........这里部分代码省略.........
{
if (pApCliEntry->UapsdInfo.bAPSDCapable &&
pApCliEntry->ApCliMlmeAux.APEdcaParm.bAPSDCapable)
{
QBSS_STA_INFO_PARM QosInfo;
NdisZeroMemory(&QosInfo, sizeof(QBSS_STA_INFO_PARM));
QosInfo.UAPSD_AC_BE = pAd->CommonCfg.bAPSDAC_BE;
QosInfo.UAPSD_AC_BK = pAd->CommonCfg.bAPSDAC_BK;
QosInfo.UAPSD_AC_VI = pAd->CommonCfg.bAPSDAC_VI;
QosInfo.UAPSD_AC_VO = pAd->CommonCfg.bAPSDAC_VO;
QosInfo.MaxSPLength = pAd->CommonCfg.MaxSPLength;
WmeIe[8] |= *(PUCHAR)&QosInfo;
}
else
{
/* The Parameter Set Count is set to бз0би in the association request frames */
/* WmeIe[8] |= (pAd->MlmeAux.APEdcaParm.EdcaUpdateCount & 0x0f); */
}
MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp,
9, &WmeIe[0],
END_OF_ARGS);
FrameLen += tmp;
}
/* Append RSN_IE when WPAPSK OR WPA2PSK, */
if (((pApCliEntry->AuthMode == Ndis802_11AuthModeWPAPSK) ||
(pApCliEntry->AuthMode == Ndis802_11AuthModeWPA2PSK))
#ifdef WSC_AP_SUPPORT
&& (pApCliEntry->WscControl.WscConfMode == WSC_DISABLE)
#endif /* WSC_AP_SUPPORT */
)
{
UCHAR RSNIe = IE_WPA;
if (pApCliEntry->AuthMode == Ndis802_11AuthModeWPA2PSK)
RSNIe = IE_WPA2;
MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp,
1, &RSNIe,
1, &pApCliEntry->RSNIE_Len,
pApCliEntry->RSNIE_Len, pApCliEntry->RSN_IE,
END_OF_ARGS);
FrameLen += tmp;
}
#ifdef WSC_AP_SUPPORT
if (pAd->ApCfg.ApCliTab[ifIndex].WscControl.WscConfMode != WSC_DISABLE)
{
UCHAR *pWscBuf = NULL, WscIeLen = 0;
ULONG WscTmpLen = 0;
os_alloc_mem(pAd, (UCHAR **) &pWscBuf, 512);
if (pWscBuf != NULL) {
NdisZeroMemory(pWscBuf, 512);
WscBuildAssocReqIE(&pAd->ApCfg.ApCliTab[ifIndex].WscControl, pWscBuf, &WscIeLen);
MakeOutgoingFrame(pOutBuffer + FrameLen, &WscTmpLen,
WscIeLen, pWscBuf,
END_OF_ARGS);
FrameLen += WscTmpLen;
os_free_mem(NULL, pWscBuf);
} else
DBGPRINT(RT_DEBUG_WARN,("%s:: WscBuf Allocate failed!\n", __FUNCTION__));
}
#endif /* WSC_AP_SUPPORT */
#ifdef P2P_SUPPORT
if (P2P_CLI_ON(pAd))
{
ULONG TmpLen;
PUCHAR pData;
pData = pOutBuffer + FrameLen;
P2pMakeP2pIE(pAd, SUBTYPE_ASSOC_REQ, pData, &TmpLen);
FrameLen += TmpLen;
DBGPRINT(RT_DEBUG_TRACE, ("ASSOC RSP - Insert P2P IE \n"));
}
#endif /* P2P_SUPPORT */
MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen);
MlmeFreeMemory(pAd, pOutBuffer);
RTMPSetTimer(&pApCliEntry->ApCliMlmeAux.ApCliAssocTimer, Timeout);
*pCurrState = APCLI_ASSOC_WAIT_RSP;
}
else
{
DBGPRINT(RT_DEBUG_TRACE, ("APCLI_ASSOC - ApCliMlmeAssocReqAction() sanity check failed. BUG!!!!!! \n"));
*pCurrState = APCLI_ASSOC_IDLE;
ApCliCtrlMsg.Status = MLME_INVALID_FORMAT;
MlmeEnqueue(pAd, APCLI_CTRL_STATE_MACHINE, APCLI_CTRL_ASSOC_RSP,
sizeof(APCLI_CTRL_MSG_STRUCT), &ApCliCtrlMsg, ifIndex);
}
return;
}
示例6: the
/*
==========================================================================
Description:
When waiting joining the (I)BSS, beacon received from external
==========================================================================
*/
static VOID ApCliPeerProbeRspAtJoinAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem)
{
USHORT LenVIE;
UCHAR *VarIE = NULL;
NDIS_802_11_VARIABLE_IEs *pVIE = NULL;
APCLI_CTRL_MSG_STRUCT ApCliCtrlMsg;
PAPCLI_STRUCT pApCliEntry = NULL;
#ifdef DOT11_N_SUPPORT
UCHAR CentralChannel = 0;
#endif /* DOT11_N_SUPPORT */
USHORT ifIndex = (USHORT)(Elem->Priv);
PULONG pCurrState = &pAd->ApCfg.ApCliTab[ifIndex].SyncCurrState;
BCN_IE_LIST *ie_list = NULL;
/* Init Variable IE structure */
os_alloc_mem(NULL, (UCHAR **)&VarIE, MAX_VIE_LEN);
if (VarIE == NULL)
{
DBGPRINT(RT_DEBUG_ERROR, ("%s: Allocate memory fail!!!\n", __FUNCTION__));
goto LabelErr;
}
pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE;
pVIE->Length = 0;
os_alloc_mem(NULL, (UCHAR **)&ie_list, sizeof(BCN_IE_LIST));
if (ie_list == NULL)
{
DBGPRINT(RT_DEBUG_ERROR, ("%s: Allocate ie_list fail!!!\n", __FUNCTION__));
goto LabelErr;
}
NdisZeroMemory(ie_list, sizeof(BCN_IE_LIST));
if (PeerBeaconAndProbeRspSanity(pAd,
Elem->Msg,
Elem->MsgLen,
Elem->Channel,
ie_list,
&LenVIE,
pVIE))
{
/*
BEACON from desired BSS/IBSS found. We should be able to decide most
BSS parameters here.
Q. But what happen if this JOIN doesn't conclude a successful ASSOCIATEION?
Do we need to receover back all parameters belonging to previous BSS?
A. Should be not. There's no back-door recover to previous AP. It still need
a new JOIN-AUTH-ASSOC sequence.
*/
INT ssidEqualFlag = FALSE;
INT ssidEmptyFlag = FALSE;
INT bssidEqualFlag = FALSE;
INT bssidEmptyFlag = FALSE;
INT matchFlag = FALSE;
ULONG Bssidx;
#ifdef P2P_SUPPORT
MlmeEnqueue(pAd, P2P_DISC_STATE_MACHINE, P2P_DISC_PEER_PROB_RSP, Elem->MsgLen, Elem->Msg, ie_list->Channel);
#endif /* P2P_SUPPORT */
/*
Update ScanTab
*/
Bssidx = BssTableSearch(&pAd->ScanTab, ie_list->Bssid, ie_list->Channel);
if (Bssidx == BSS_NOT_FOUND)
{
/* discover new AP of this network, create BSS entry */
Bssidx = BssTableSetEntry(pAd, &pAd->ScanTab, ie_list, -127, LenVIE, pVIE);
if (Bssidx == BSS_NOT_FOUND) /* return if BSS table full */
goto LabelErr;
NdisMoveMemory(pAd->ScanTab.BssEntry[Bssidx].PTSF, &Elem->Msg[24], 4);
NdisMoveMemory(&pAd->ScanTab.BssEntry[Bssidx].TTSF[0], &Elem->TimeStamp.u.LowPart, 4);
NdisMoveMemory(&pAd->ScanTab.BssEntry[Bssidx].TTSF[4], &Elem->TimeStamp.u.LowPart, 4);
pAd->ScanTab.BssEntry[Bssidx].MinSNR = Elem->Signal % 10;
if (pAd->ScanTab.BssEntry[Bssidx].MinSNR == 0)
pAd->ScanTab.BssEntry[Bssidx].MinSNR = -5;
NdisMoveMemory(pAd->ScanTab.BssEntry[Bssidx].MacAddr, ie_list->Addr2, MAC_ADDR_LEN);
}
pApCliEntry = &pAd->ApCfg.ApCliTab[ifIndex];
/* Check the Probe-Rsp's Bssid. */
if(!MAC_ADDR_EQUAL(pApCliEntry->CfgApCliBssid, ZERO_MAC_ADDR))
bssidEqualFlag = MAC_ADDR_EQUAL(pApCliEntry->CfgApCliBssid, ie_list->Bssid);
//.........这里部分代码省略.........
示例7: rt2860_probe
static INT __devinit rt2860_probe(
#endif
IN struct pci_dev *pci_dev,
IN const struct pci_device_id *pci_id)
{
VOID *pAd = NULL;
struct net_device *net_dev;
PVOID handle;
PSTRING print_name;
ULONG csr_addr;
INT rv = 0;
RTMP_OS_NETDEV_OP_HOOK netDevHook;
ULONG OpMode;
DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_probe\n"));
/*PCIDevInit============================================== */
/* wake up and enable device */
if ((rv = pci_enable_device(pci_dev))!= 0)
{
DBGPRINT(RT_DEBUG_ERROR, ("Enable PCI device failed, errno=%d!\n", rv));
return rv;
}
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
print_name = pci_name(pci_dev);
#else
print_name = pci_dev->slot_name;
#endif /* LINUX_VERSION_CODE */
if ((rv = pci_request_regions(pci_dev, print_name)) != 0)
{
DBGPRINT(RT_DEBUG_ERROR, ("Request PCI resource failed, errno=%d!\n", rv));
goto err_out;
}
/* map physical address to virtual address for accessing register */
csr_addr = (unsigned long) ioremap(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0));
if (!csr_addr)
{
DBGPRINT(RT_DEBUG_ERROR, ("ioremap failed for device %s, region 0x%lX @ 0x%lX\n",
print_name, (ULONG)pci_resource_len(pci_dev, 0), (ULONG)pci_resource_start(pci_dev, 0)));
goto err_out_free_res;
}
else
{
DBGPRINT(RT_DEBUG_TRACE, ("%s: at 0x%lx, VA 0x%lx, IRQ %d. \n", print_name,
(ULONG)pci_resource_start(pci_dev, 0), (ULONG)csr_addr, pci_dev->irq));
}
/* Set DMA master */
pci_set_master(pci_dev);
/*RtmpDevInit============================================== */
/* Allocate RTMP_ADAPTER adapter structure */
/* handle = kmalloc(sizeof(struct os_cookie), GFP_KERNEL); */
os_alloc_mem(NULL, (UCHAR **)&handle, sizeof(struct os_cookie));
if (handle == NULL)
{
DBGPRINT(RT_DEBUG_ERROR, ("%s(): Allocate memory for os handle failed!\n", __FUNCTION__));
goto err_out_iounmap;
}
memset(handle, 0, sizeof(struct os_cookie));
((POS_COOKIE)handle)->pci_dev = pci_dev;
#ifdef OS_ABL_FUNC_SUPPORT
{
RTMP_PCI_CONFIG PciConfig;
PciConfig.ConfigVendorID = PCI_VENDOR_ID;
/* get DRIVER operations */
RTMP_DRV_OPS_FUNCTION(pRtmpDrvOps, NULL, &PciConfig, NULL);
}
#endif /* OS_ABL_FUNC_SUPPORT */
rv = RTMPAllocAdapterBlock(handle, &pAd); /* we may need the pci_dev for allocate structure of "RTMP_ADAPTER" */
if (rv != NDIS_STATUS_SUCCESS)
goto err_out_iounmap;
/* Here are the RTMP_ADAPTER structure with pci-bus specific parameters. */
/* pAd->CSRBaseAddress = (PUCHAR)csr_addr; */
RTMP_DRIVER_PCI_CSR_SET(pAd, csr_addr);
/* RTMPInitPCIeDevice(pci_dev, pAd); */
RTMP_DRIVER_PCIE_INIT(pAd, pci_dev);
/*NetDevInit============================================== */
net_dev = RtmpPhyNetDevInit(pAd, &netDevHook);
if (net_dev == NULL)
goto err_out_free_radev;
/* Here are the net_device structure with pci-bus specific parameters. */
net_dev->irq = pci_dev->irq; /* Interrupt IRQ number */
net_dev->base_addr = csr_addr; /* Save CSR virtual address and irq to device structure */
pci_set_drvdata(pci_dev, net_dev); /* Set driver data */
#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
/* for supporting Network Manager */
/* Set the sysfs physical device reference for the network logical device
* if set prior to registration will cause a symlink during initialization.
//.........这里部分代码省略.........
示例8: WscReadProfileFromUfdFile
BOOLEAN WscReadProfileFromUfdFile(
IN PRTMP_ADAPTER pAd,
IN UCHAR ApIdx,
IN PSTRING pUfdFileName)
{
PWSC_CREDENTIAL pCredential = &pAd->ApCfg.MBSSID[ApIdx].WscControl.WscProfile.Profile[0];
RTMP_OS_FS_INFO osFSInfo;
RTMP_OS_FD file_r;
ssize_t rv, fileLen = 0;
PSTRING pXmlData = NULL;
if (pUfdFileName == NULL)
{
DBGPRINT(RT_DEBUG_TRACE, ("--> %s: pUfdFileName is NULL\n", __FUNCTION__));
return FALSE;
}
RtmpOSFSInfoChange(&osFSInfo, TRUE);
file_r = RtmpOSFileOpen(pUfdFileName, O_RDONLY, 0);
if (IS_FILE_OPEN_ERR(file_r))
{
DBGPRINT(RT_DEBUG_TRACE, ("--> %s: Error opening file %s\n", __FUNCTION__, pUfdFileName));
return FALSE;
}
else
{
char tempStr[64] = {0};
while((rv = RtmpOSFileRead(file_r, tempStr, 64)) > 0)
{
fileLen += rv;
}
os_alloc_mem(pAd, (UCHAR **)&pXmlData, fileLen+1);
if (pXmlData == NULL)
{
RtmpOSFileClose(file_r);
RtmpOSFSInfoChange(&osFSInfo, FALSE);
DBGPRINT(RT_DEBUG_TRACE, ("pXmlData kmalloc fail. (fileLen = %d)\n", fileLen));
return FALSE;
}
RTMPZeroMemory(pXmlData, fileLen+1);
RtmpOSFileSeek(file_r, 0);
rv = RtmpOSFileRead(file_r, (PSTRING)pXmlData, fileLen);
RtmpOSFileClose(file_r);
if (rv != fileLen)
{
DBGPRINT(RT_DEBUG_TRACE, ("pXmlData kmalloc fail, fileLen = %d\n", fileLen));
RtmpOSFSInfoChange(&osFSInfo, FALSE);
goto ReadErr;
}
}
RtmpOSFSInfoChange(&osFSInfo, FALSE);
DBGPRINT(RT_DEBUG_TRACE, ("WscReadProfileFromUfdFile\n"));
if (WscPassXmlDeclare(&pXmlData))
{
if (WscGetXmlSSID(pXmlData, &pCredential->SSID))
{
DBGPRINT(RT_DEBUG_TRACE, ("SSID = %s(%d)\n", pCredential->SSID.Ssid, pCredential->SSID.SsidLength));
}
else
return FALSE;
if (WscGetXmlAuth(pXmlData, &pCredential->AuthType))
{
DBGPRINT(RT_DEBUG_TRACE, ("Credential.AuthType = 0x%04x\n", pCredential->AuthType));
}
else
return FALSE;
if (WscGetXmlEncr(pXmlData, &pCredential->EncrType))
{
DBGPRINT(RT_DEBUG_TRACE, ("Credential.EncrType = 0x%04x\n", pCredential->EncrType));
}
else
return FALSE;
pCredential->KeyLength = 0;
RTMPZeroMemory(pCredential->Key, 64);
if (WscGetXmlKey(pXmlData, pCredential->Key, &pCredential->KeyLength))
{
DBGPRINT(RT_DEBUG_TRACE, ("Credential.Key = %s (%d)\n", pCredential->Key, pCredential->KeyLength));
}
else
return FALSE;
/*
If we cannot find keyIndex in .wfc file, use default value 1.
*/
if (WscGetXmlKeyIndex(pXmlData, &pCredential->KeyIndex))
{
DBGPRINT(RT_DEBUG_TRACE, ("pCredential->KeyIndex = %d\n", pCredential->KeyIndex));
}
DBGPRINT(RT_DEBUG_TRACE, ("WscReadProfileFromUfdFile OK\n"));
WscWriteConfToPortCfg(pAd,
&pAd->ApCfg.MBSSID[ApIdx].WscControl,
&pAd->ApCfg.MBSSID[ApIdx].WscControl.WscProfile.Profile[0], TRUE);
//.........这里部分代码省略.........
示例9: the
/*
==========================================================================
Description:
When waiting joining the (I)BSS, beacon received from external
==========================================================================
*/
static VOID ApCliPeerProbeRspAtJoinAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem)
{
UCHAR Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN];
UCHAR /* Ssid[MAX_LEN_OF_SSID], */ SsidLen=0, BssType, Channel=0, MessageToMe,
DtimCount, DtimPeriod, BcastFlag;
UCHAR *Ssid = NULL;
LARGE_INTEGER TimeStamp;
USHORT BeaconPeriod, AtimWin, CapabilityInfo;
/* UINT FrameLen = 0; */
CF_PARM Cf;
UCHAR Erp;
UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
UCHAR SupRateLen, ExtRateLen;
UCHAR CkipFlag;
USHORT LenVIE;
UCHAR AironetCellPowerLimit;
EDCA_PARM EdcaParm;
QBSS_LOAD_PARM QbssLoad;
QOS_CAPABILITY_PARM QosCapability;
/* UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5 */
UCHAR *VarIE = NULL;
NDIS_802_11_VARIABLE_IEs *pVIE = NULL;
ULONG RalinkIe;
APCLI_CTRL_MSG_STRUCT ApCliCtrlMsg;
/* HT_CAPABILITY_IE HtCapability; */
/* ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE */
HT_CAPABILITY_IE *pHtCapability = NULL;
ADD_HT_INFO_IE *pAddHtInfo = NULL; /* AP might use this additional ht info IE */
UCHAR HtCapabilityLen;
UCHAR AddHtInfoLen;
UCHAR NewChannel;
UCHAR NewExtChannelOffset = 0xff;
PAPCLI_STRUCT pApCliEntry = NULL;
#ifdef DOT11_N_SUPPORT
UCHAR CentralChannel;
#endif /* DOT11_N_SUPPORT */
#ifdef CONFIG_STA_SUPPORT
UCHAR pPreNHtCapabilityLen = 0;
#endif /* CONFIG_STA_SUPPORT */
EXT_CAP_INFO_ELEMENT ExtCapInfo;
USHORT ifIndex = (USHORT)(Elem->Priv);
PULONG pCurrState = &pAd->ApCfg.ApCliTab[ifIndex].SyncCurrState;
if (ifIndex >= MAX_APCLI_NUM)
return;
/* allocate memory */
os_alloc_mem(NULL, (UCHAR **)&VarIE, MAX_VIE_LEN);
if (VarIE == NULL)
{
DBGPRINT(RT_DEBUG_ERROR, ("%s: Allocate memory fail!!!\n", __FUNCTION__));
goto LabelErr;
}
os_alloc_mem(NULL, (UCHAR **)&pHtCapability, sizeof(HT_CAPABILITY_IE));
if (pHtCapability == NULL)
{
DBGPRINT(RT_DEBUG_ERROR, ("%s: Allocate memory fail!!!\n", __FUNCTION__));
goto LabelErr;
}
os_alloc_mem(NULL, (UCHAR **)&pAddHtInfo, sizeof(ADD_HT_INFO_IE));
if (pAddHtInfo == NULL)
{
DBGPRINT(RT_DEBUG_ERROR, ("%s: Allocate memory fail!!!\n", __FUNCTION__));
goto LabelErr;
}
os_alloc_mem(NULL, (UCHAR **)&Ssid, MAX_LEN_OF_SSID);
if (Ssid == NULL)
{
DBGPRINT(RT_DEBUG_ERROR, ("%s: Allocate memory fail!!!\n", __FUNCTION__));
goto LabelErr;
}
/* Init Variable IE structure */
pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE;
pVIE->Length = 0;
RTMPZeroMemory(pHtCapability, sizeof(HT_CAPABILITY_IE));
RTMPZeroMemory(pAddHtInfo, sizeof(ADD_HT_INFO_IE));
RTMPZeroMemory(&QosCapability, sizeof(QosCapability));
RTMPZeroMemory(&EdcaParm, sizeof(EdcaParm));
if (PeerBeaconAndProbeRspSanity(pAd,
Elem->Msg,
Elem->MsgLen,
Elem->Channel,
Addr2,
Bssid,
(PCHAR) Ssid,
&SsidLen,
&BssType,
&BeaconPeriod,
&Channel,
//.........这里部分代码省略.........
示例10: PMF_MlmeSAQueryReq
VOID PMF_MlmeSAQueryReq(
IN PRTMP_ADAPTER pAd,
IN MAC_TABLE_ENTRY *pEntry)
{
PUCHAR pOutBuffer = NULL;
HEADER_802_11 SAQReqHdr;
UINT32 FrameLen = 0;
UCHAR SACategoryType, SAActionType;
UINT ccmp_len = LEN_CCMP_HDR + LEN_CCMP_MIC;
UCHAR ccmp_buf[ccmp_len];
PPMF_CFG pPmfCfg = NULL;
if (!pEntry)
{
DBGPRINT(RT_DEBUG_ERROR, ("[PMF]%s : Entry is NULL\n", __FUNCTION__));
return;
}
if (!(CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_PMF_CAPABLE)))
{
DBGPRINT(RT_DEBUG_ERROR, ("[PMF]%s : Entry is not PMF capable, STA(%02x:%02x:%02x:%02x:%02x:%02x)\n", __FUNCTION__, PRINT_MAC(pEntry->Addr)));
return;
}
if (pEntry->SAQueryStatus == SAQ_SENDING)
return;
#ifdef CONFIG_AP_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_AP(pAd)
{
pPmfCfg = &pAd->ApCfg.MBSSID[pEntry->apidx].PmfCfg;
}
#endif /* CONFIG_AP_SUPPORT */
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
pPmfCfg = &pAd->StaCfg.PmfCfg;
}
#endif /* CONFIG_STA_SUPPORT */
if (pPmfCfg)
{
/* Send the SA Query Request */
os_alloc_mem(NULL, (UCHAR **)&pOutBuffer, MAX_LEN_OF_MLME_BUFFER);
if(pOutBuffer == NULL)
return;
#ifdef CONFIG_AP_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_AP(pAd)
{
MgtMacHeaderInit(pAd, &SAQReqHdr, SUBTYPE_ACTION, 0, pEntry->Addr,pAd->ApCfg.MBSSID[pEntry->apidx].wdev.if_addr,
pAd->ApCfg.MBSSID[pEntry->apidx].wdev.bssid);
}
#endif /* CONFIG_AP_SUPPORT */
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
MgtMacHeaderInit(pAd, &SAQReqHdr, SUBTYPE_ACTION, 0, pEntry->Addr,
pAd->CurrentAddress,
pAd->CurrentAddress);
}
#endif /* CONFIG_STA_SUPPORT */
pEntry->TransactionID++;
SACategoryType = CATEGORY_SA;
SAActionType = ACTION_SAQ_REQUEST;
MakeOutgoingFrame(pOutBuffer, (ULONG *) &FrameLen,
sizeof(HEADER_802_11), &SAQReqHdr,
1, &SACategoryType,
1, &SAActionType,
2, &pEntry->TransactionID,
END_OF_ARGS);
if (pEntry->SAQueryStatus == SAQ_IDLE) {
RTMPSetTimer(&pEntry->SAQueryTimer, 1000); /* 1000ms */
DBGPRINT(RT_DEBUG_ERROR, ("[PMF]%s -- SAQueryTimer\n", __FUNCTION__));
}
pEntry->SAQueryStatus = SAQ_SENDING;
RTMPSetTimer(&pEntry->SAQueryConfirmTimer, 200); /* 200ms */
/* transmit the frame */
MiniportMMRequest(pAd, QID_MGMT, pOutBuffer, FrameLen);
os_free_mem(NULL, pOutBuffer);
DBGPRINT(RT_DEBUG_ERROR, ("[PMF]%s - Send SA Query Request to STA(%02x:%02x:%02x:%02x:%02x:%02x)\n",
__FUNCTION__, PRINT_MAC(pEntry->Addr)));
}
}
示例11: WpaMicFailureReportFrame
VOID WpaMicFailureReportFrame(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem)
{
PUCHAR pOutBuffer = NULL;
UCHAR Header802_3[14];
ULONG FrameLen = 0;
UCHAR *mpool;
PEAPOL_PACKET pPacket;
UCHAR Mic[16];
BOOLEAN bUnicast;
DBGPRINT(RT_DEBUG_TRACE, ("WpaMicFailureReportFrame ----->\n"));
bUnicast = (Elem->Msg[0] == 1 ? TRUE:FALSE);
pAd->Sequence = ((pAd->Sequence) + 1) & (MAX_SEQ_NUMBER);
/* init 802.3 header and Fill Packet */
MAKE_802_3_HEADER(Header802_3, pAd->CommonCfg.Bssid, pAd->CurrentAddress, EAPOL);
/* Allocate memory for output */
os_alloc_mem(NULL, (PUCHAR *)&mpool, TX_EAPOL_BUFFER);
if (mpool == NULL)
{
DBGPRINT(RT_DEBUG_ERROR, ("!!!%s : no memory!!!\n", __FUNCTION__));
return;
}
pPacket = (PEAPOL_PACKET)mpool;
NdisZeroMemory(pPacket, TX_EAPOL_BUFFER);
pPacket->ProVer = EAPOL_VER;
pPacket->ProType = EAPOLKey;
pPacket->KeyDesc.Type = WPA1_KEY_DESC;
/* Request field presented */
pPacket->KeyDesc.KeyInfo.Request = 1;
if(pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
{
pPacket->KeyDesc.KeyInfo.KeyDescVer = 2;
}
else /* TKIP */
{
pPacket->KeyDesc.KeyInfo.KeyDescVer = 1;
}
pPacket->KeyDesc.KeyInfo.KeyType = (bUnicast ? PAIRWISEKEY : GROUPKEY);
/* KeyMic field presented */
pPacket->KeyDesc.KeyInfo.KeyMic = 1;
/* Error field presented */
pPacket->KeyDesc.KeyInfo.Error = 1;
/* Update packet length after decide Key data payload */
SET_UINT16_TO_ARRARY(pPacket->Body_Len, MIN_LEN_OF_EAPOL_KEY_MSG)
/* Key Replay Count */
NdisMoveMemory(pPacket->KeyDesc.ReplayCounter, pAd->StaCfg.ReplayCounter, LEN_KEY_DESC_REPLAY);
inc_byte_array(pAd->StaCfg.ReplayCounter, 8);
/* Convert to little-endian format. */
*((USHORT *)&pPacket->KeyDesc.KeyInfo) = cpu2le16(*((USHORT *)&pPacket->KeyDesc.KeyInfo));
MlmeAllocateMemory(pAd, (PUCHAR *)&pOutBuffer); /* allocate memory */
if(pOutBuffer == NULL)
{
os_free_mem(NULL, mpool);
return;
}
/*
Prepare EAPOL frame for MIC calculation
Be careful, only EAPOL frame is counted for MIC calculation
*/
MakeOutgoingFrame(pOutBuffer, &FrameLen,
CONV_ARRARY_TO_UINT16(pPacket->Body_Len) + 4, pPacket,
END_OF_ARGS);
/* Prepare and Fill MIC value */
NdisZeroMemory(Mic, sizeof(Mic));
if(pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
{ /* AES */
UCHAR digest[20] = {0};
RT_HMAC_SHA1(pAd->StaCfg.PTK, LEN_PTK_KCK, pOutBuffer, FrameLen, digest, SHA1_DIGEST_SIZE);
NdisMoveMemory(Mic, digest, LEN_KEY_DESC_MIC);
}
else
{ /* TKIP */
RT_HMAC_MD5(pAd->StaCfg.PTK, LEN_PTK_KCK, pOutBuffer, FrameLen, Mic, MD5_DIGEST_SIZE);
}
NdisMoveMemory(pPacket->KeyDesc.KeyMic, Mic, LEN_KEY_DESC_MIC);
/* copy frame to Tx ring and send MIC failure report frame to authenticator */
RTMPToWirelessSta(pAd, &pAd->MacTab.Content[BSSID_WCID],
Header802_3, LENGTH_802_3,
(PUCHAR)pPacket,
//.........这里部分代码省略.........
示例12: PMF_PeerSAQueryReqAction
VOID PMF_PeerSAQueryReqAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem)
{
UCHAR Action = Elem->Msg[LENGTH_802_11+1];
if (Action == ACTION_SAQ_REQUEST)
{
PMAC_TABLE_ENTRY pEntry;
PFRAME_802_11 pHeader;
USHORT TransactionID;
PUCHAR pOutBuffer = NULL;
HEADER_802_11 SAQRspHdr;
UINT32 FrameLen = 0;
UCHAR SACategoryType, SAActionType;
UINT ccmp_len = LEN_CCMP_HDR + LEN_CCMP_MIC;
UCHAR ccmp_buf[ccmp_len];
DBGPRINT(RT_DEBUG_ERROR, ("[PMF]%s : Receive SA Query Request\n", __FUNCTION__));
pHeader = (PFRAME_802_11) Elem->Msg;
pEntry = MacTableLookup(pAd, pHeader->Hdr.Addr2);
if (!pEntry)
{
DBGPRINT(RT_DEBUG_ERROR, ("[PMF]%s : Entry is not found, STA(%02x:%02x:%02x:%02x:%02x:%02x)\n", __FUNCTION__, PRINT_MAC(pHeader->Hdr.Addr2)));
return;
}
if (!(CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_PMF_CAPABLE)))
{
DBGPRINT(RT_DEBUG_ERROR, ("[PMF]%s : Entry is not PMF capable, STA(%02x:%02x:%02x:%02x:%02x:%02x)\n", __FUNCTION__, PRINT_MAC(pHeader->Hdr.Addr2)));
return;
}
NdisMoveMemory(&TransactionID, &Elem->Msg[LENGTH_802_11+2], sizeof(USHORT));
/* Response the SA Query */
os_alloc_mem(NULL, (UCHAR **)&pOutBuffer, MAX_LEN_OF_MLME_BUFFER);
if(pOutBuffer == NULL)
return;
#ifdef CONFIG_AP_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_AP(pAd)
{
MgtMacHeaderInit(pAd, &SAQRspHdr, SUBTYPE_ACTION, 0, pHeader->Hdr.Addr2,pAd->ApCfg.MBSSID[pEntry->apidx].wdev.if_addr,
pAd->ApCfg.MBSSID[pEntry->apidx].wdev.bssid);
}
#endif /* CONFIG_AP_SUPPORT */
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
MgtMacHeaderInit(pAd, &SAQRspHdr, SUBTYPE_ACTION, 0, pHeader->Hdr.Addr2,
pAd->CurrentAddress,
pAd->CurrentAddress);
}
#endif /* CONFIG_STA_SUPPORT */
SACategoryType = CATEGORY_SA;
SAActionType = ACTION_SAQ_RESPONSE;
MakeOutgoingFrame(pOutBuffer, (ULONG *) &FrameLen,
sizeof(HEADER_802_11), &SAQRspHdr,
1, &SACategoryType,
1, &SAActionType,
2, &TransactionID,
END_OF_ARGS);
/* transmit the frame */
MiniportMMRequest(pAd, QID_MGMT, pOutBuffer, FrameLen);
os_free_mem(NULL, pOutBuffer);
DBGPRINT(RT_DEBUG_ERROR, ("[PMF]%s - Send SA Query Response to STA(%02x:%02x:%02x:%02x:%02x:%02x)\n", __FUNCTION__, PRINT_MAC(SAQRspHdr.Addr1)));
}
示例13: ApCliPeerAuthRspAtSeq2Action
/*
==========================================================================
Description:
==========================================================================
*/
static VOID ApCliPeerAuthRspAtSeq2Action(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem)
{
BOOLEAN Cancelled;
UCHAR Addr2[MAC_ADDR_LEN];
USHORT Seq, Status, Alg;
USHORT RemoteStatus;
UCHAR iv_hdr[LEN_WEP_IV_HDR];
/* UCHAR ChlgText[CIPHER_TEXT_LEN]; */
UCHAR *ChlgText = NULL;
UCHAR CyperChlgText[CIPHER_TEXT_LEN + 8 + 8];
ULONG c_len = 0;
HEADER_802_11 AuthHdr;
NDIS_STATUS NState;
PUCHAR pOutBuffer = NULL;
ULONG FrameLen = 0;
APCLI_CTRL_MSG_STRUCT ApCliCtrlMsg;
UCHAR ChallengeIe = IE_CHALLENGE_TEXT;
UCHAR len_challengeText = CIPHER_TEXT_LEN;
USHORT ifIndex = (USHORT)(Elem->Priv);
PULONG pCurrState = NULL;
#ifdef MAC_REPEATER_SUPPORT
UCHAR CliIdx = 0xFF;
#endif /* MAC_REPEATER_SUPPORT */
if ((ifIndex >= MAX_APCLI_NUM)
#ifdef MAC_REPEATER_SUPPORT
&& (ifIndex < 64)
#endif /* MAC_REPEATER_SUPPORT */
)
return;
#ifdef MAC_REPEATER_SUPPORT
if (ifIndex >= 64)
{
CliIdx = ((ifIndex - 64) % 16);
ifIndex = ((ifIndex - 64) / 16);
pCurrState = &pAd->ApCfg.ApCliTab[ifIndex].RepeaterCli[CliIdx].AuthCurrState;
}
else
#endif /* MAC_REPEATER_SUPPORT */
pCurrState = &pAd->ApCfg.ApCliTab[ifIndex].AuthCurrState;
/* allocate memory */
os_alloc_mem(NULL, (UCHAR **)&ChlgText, CIPHER_TEXT_LEN);
if (ChlgText == NULL)
{
DBGPRINT(RT_DEBUG_ERROR, ("%s: Allocate memory fail!!!\n", __FUNCTION__));
return;
}
if(PeerAuthSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &Alg, &Seq, &Status, (CHAR *) ChlgText))
{
if(MAC_ADDR_EQUAL(pAd->ApCfg.ApCliTab[ifIndex].ApCliMlmeAux.Bssid, Addr2) && Seq == 2)
{
#ifdef MAC_REPEATER_SUPPORT
if (CliIdx != 0xFF)
{
DBGPRINT(RT_DEBUG_TRACE, ("AUTH - Repeater Cli Receive AUTH_RSP seq#2 to me (Alg=%d, Status=%d)\n", Alg, Status));
RTMPCancelTimer(&pAd->ApCfg.ApCliTab[ifIndex].RepeaterCli[CliIdx].ApCliAuthTimer, &Cancelled);
}
else
#endif /* MAC_REPEATER_SUPPORT */
{
DBGPRINT(RT_DEBUG_TRACE, ("APCLI AUTH - Receive AUTH_RSP seq#2 to me (Alg=%d, Status=%d)\n", Alg, Status));
RTMPCancelTimer(&pAd->ApCfg.ApCliTab[ifIndex].ApCliMlmeAux.ApCliAuthTimer, &Cancelled);
}
if(Status == MLME_SUCCESS)
{
if(pAd->ApCfg.ApCliTab[ifIndex].ApCliMlmeAux.Alg == Ndis802_11AuthModeOpen)
{
*pCurrState = APCLI_AUTH_REQ_IDLE;
ApCliCtrlMsg.Status= MLME_SUCCESS;
#ifdef MAC_REPEATER_SUPPORT
ApCliCtrlMsg.CliIdx = CliIdx;
ApCliCtrlMsg.BssIdx = ifIndex;
ifIndex = (USHORT)(Elem->Priv);
#endif /* MAC_REPEATER_SUPPORT */
MlmeEnqueue(pAd, APCLI_CTRL_STATE_MACHINE, APCLI_CTRL_AUTH_RSP,
sizeof(APCLI_CTRL_MSG_STRUCT), &ApCliCtrlMsg, ifIndex);
}
else
{
PCIPHER_KEY pKey;
UINT default_key = pAd->ApCfg.ApCliTab[ifIndex].DefaultKeyId;
pKey = &pAd->ApCfg.ApCliTab[ifIndex].SharedKey[default_key];
/* 2. shared key, need to be challenged */
Seq++;
RemoteStatus = MLME_SUCCESS;
/* allocate and send out AuthRsp frame */
//.........这里部分代码省略.........
示例14: the
/*
==========================================================================
Description:
When waiting joining the (I)BSS, beacon received from external
==========================================================================
*/
static VOID ApCliPeerProbeRspAtJoinAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem)
{
USHORT LenVIE;
UCHAR *VarIE = NULL;
NDIS_802_11_VARIABLE_IEs *pVIE = NULL;
APCLI_CTRL_MSG_STRUCT ApCliCtrlMsg;
PAPCLI_STRUCT pApCliEntry = NULL;
#ifdef DOT11_N_SUPPORT
UCHAR CentralChannel;
#endif /* DOT11_N_SUPPORT */
USHORT ifIndex = (USHORT)(Elem->Priv);
ULONG *pCurrState;
BCN_IE_LIST *ie_list = NULL;
if (ifIndex >= MAX_APCLI_NUM)
return;
/* Init Variable IE structure */
os_alloc_mem(NULL, (UCHAR **)&VarIE, MAX_VIE_LEN);
if (VarIE == NULL)
{
MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_ERROR, ("%s: Allocate memory fail!!!\n", __FUNCTION__));
goto LabelErr;
}
pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE;
pVIE->Length = 0;
os_alloc_mem(NULL, (UCHAR **)&ie_list, sizeof(BCN_IE_LIST));
if (ie_list == NULL)
{
MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_ERROR, ("%s: Allocate ie_list fail!!!\n", __FUNCTION__));
goto LabelErr;
}
NdisZeroMemory(ie_list, sizeof(BCN_IE_LIST));
pCurrState = &pAd->ApCfg.ApCliTab[ifIndex].SyncCurrState;
if (PeerBeaconAndProbeRspSanity(pAd,
Elem->Msg,
Elem->MsgLen,
Elem->Channel,
ie_list,
&LenVIE,
pVIE,
TRUE))
{
/*
BEACON from desired BSS/IBSS found. We should be able to decide most
BSS parameters here.
Q. But what happen if this JOIN doesn't conclude a successful ASSOCIATEION?
Do we need to receover back all parameters belonging to previous BSS?
A. Should be not. There's no back-door recover to previous AP. It still need
a new JOIN-AUTH-ASSOC sequence.
*/
INT ssidEqualFlag = FALSE;
#ifdef WSC_AP_SUPPORT
INT ssidEmptyFlag = FALSE;
#endif /* WSC_AP_SUPPORT */
INT bssidEqualFlag = FALSE;
INT bssidEmptyFlag = FALSE;
INT matchFlag = FALSE;
ULONG Bssidx;
/* Update ScanTab */
Bssidx = BssTableSearch(&pAd->ScanTab, ie_list->Bssid, ie_list->Channel);
if (Bssidx == BSS_NOT_FOUND)
{
/* discover new AP of this network, create BSS entry */
Bssidx = BssTableSetEntry(pAd, &pAd->ScanTab, ie_list, -127, LenVIE, pVIE);
if (Bssidx == BSS_NOT_FOUND) /* return if BSS table full */
{
DBGPRINT(RT_DEBUG_ERROR, ("ERROR: Driver ScanTable Full In Apcli ProbeRsp Join\n"));
goto LabelErr;
}
NdisMoveMemory(pAd->ScanTab.BssEntry[Bssidx].PTSF, &Elem->Msg[24], 4);
NdisMoveMemory(&pAd->ScanTab.BssEntry[Bssidx].TTSF[0], &Elem->TimeStamp.u.LowPart, 4);
NdisMoveMemory(&pAd->ScanTab.BssEntry[Bssidx].TTSF[4], &Elem->TimeStamp.u.LowPart, 4);
pAd->ScanTab.BssEntry[Bssidx].MinSNR = Elem->Signal % 10;
if (pAd->ScanTab.BssEntry[Bssidx].MinSNR == 0)
pAd->ScanTab.BssEntry[Bssidx].MinSNR = -5;
NdisMoveMemory(pAd->ScanTab.BssEntry[Bssidx].MacAddr, ie_list->Addr2, MAC_ADDR_LEN);
}
#if defined(RT_CFG80211_P2P_CONCURRENT_DEVICE) || defined(CFG80211_MULTI_STA)
CHAR Rssi0 = ConvertToRssi(pAd, &Elem->rssi_info, RSSI_IDX_0);
CHAR Rssi1 = ConvertToRssi(pAd, &Elem->rssi_info, RSSI_IDX_1);
CHAR Rssi2 = ConvertToRssi(pAd, &Elem->rssi_info, RSSI_IDX_2);
LONG RealRssi = (LONG)(RTMPMaxRssi(pAd, Rssi0, Rssi1, Rssi2));
DBGPRINT(RT_DEBUG_TRACE, ("Info: Update the SSID %s in Kernel Table\n", ie_list->Ssid));
//.........这里部分代码省略.........
示例15: CFG80211_SendMgmtFrame
INT CFG80211_SendMgmtFrame(RTMP_ADAPTER *pAd, VOID *pData, ULONG Data)
{
struct ieee80211_mgmt *mgmt = NULL;
#ifdef CONFIG_MULTI_CHANNEL
if (pAd->MCC_InfraConnect_Protect == TRUE)
{
return;
}
if (pAd->Mlme.bStartMcc == TRUE)
{
// return;
}
#endif /* CONFIG_MULTI_CHANNEL */
if (pData != NULL)
{
PCFG80211_CTRL pCfg80211_ctrl = &pAd->cfg80211_ctrl;
pCfg80211_ctrl->TxStatusInUsed = TRUE;
pCfg80211_ctrl->TxStatusSeq = pAd->Sequence;
RTMP_OS_INIT_COMPLETION(&pCfg80211_ctrl->fw_event_done);
if (pCfg80211_ctrl->pTxStatusBuf != NULL)
{
os_free_mem(NULL, pCfg80211_ctrl->pTxStatusBuf);
pCfg80211_ctrl->pTxStatusBuf = NULL;
}
os_alloc_mem(NULL, (UCHAR **)&pCfg80211_ctrl->pTxStatusBuf, Data);
if (pCfg80211_ctrl->pTxStatusBuf != NULL)
{
NdisCopyMemory(pCfg80211_ctrl->pTxStatusBuf, pData, Data);
pCfg80211_ctrl->TxStatusBufLen = Data;
}
else
{
pCfg80211_ctrl->TxStatusBufLen = 0;
DBGPRINT(RT_DEBUG_ERROR, ("CFG_TX_STATUS: MEM ALLOC ERROR\n"));
return NDIS_STATUS_FAILURE;
}
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 3, 0)
CFG80211_IsNeedTxStatus(pAd, pData, Data);
#else
pAd->cfg80211_ctrl.IsNeedTxStatus = CFG80211_IsNeedTxStatus(pAd, pData, Data);
#endif
if(TRUE == pAd->cfg80211_ctrl.IsNeedTxStatus)
{
int ret = 0;
// send fw cmd to FW
ret = CFG80211_TxStatusCmd(pAd, TXS_TIMEOUT, (UCHAR)pCfg80211_ctrl->TxStatusSeq, TXS_P2P_WCID, TXS_P2P_MgmtID, Data);
DBGPRINT(RT_DEBUG_INFO, ("%s, send tx status cmd status(%d)\n", __FUNCTION__, ret));
}
//Parser probe rsp to remove WPS IE
#ifdef CONFIG_P2P_AUTO_GO_AS_SOFTAP
if (pAd->p2pForceGOAsSoftAP)
{
PP2P_PUBLIC_FRAME pFrame = (PP2P_PUBLIC_FRAME)pData;
mgmt = (struct ieee80211_mgmt *)pData;
UINT Elemlen, Offset;
PMULTISSID_STRUCT pMbss = &pAd->ApCfg.MBSSID[MAIN_MBSSID];
struct wifi_dev *pWdev = &pMbss->wdev;
DBGPRINT(RT_DEBUG_TRACE, ("SubType: pFrame->p80211Header.FC.SubType: %d\n", pFrame->p80211Header.FC.SubType));
if (pFrame->p80211Header.FC.SubType == SUBTYPE_PROBE_RSP)
{
Offset = offsetof(struct ieee80211_mgmt, u.probe_resp.variable);
Elemlen = Data - Offset;
if (mgmt && Elemlen > 0)
{
//DBGPRINT(RT_DEBUG_ERROR, ("IELen %d, lk added\n", Elemlen));
//hex_dump("probe_resp: variable:", (UCHAR *)mgmt->u.probe_resp.variable, Elemlen);
#if 1
if (mgmt->u.probe_resp.variable)
{
//DBGPRINT(RT_DEBUG_TRACE,("Remove P2P IE done, lk added\n"));
PUCHAR pVendorIE = NULL, pPreVendorIE = NULL, pIEData = NULL;
UINT VendorIELen;
pIEData = (PUCHAR)mgmt->u.probe_resp.variable;
pVendorIE = pIEData;
if ((pWdev->AuthMode == Ndis802_11AuthModeWPA2PSK) || (pWdev->AuthMode == Ndis802_11AuthModeOpen))
{
while (pVendorIE < pIEData + Elemlen)
{
//Remove WPS IE
extern UCHAR WPS_OUI[];
if (RTMPEqualMemory(pVendorIE + 2/*EID + Length*/, WPS_OUI, 4))
{
VendorIELen = *(pVendorIE + 1);
//hex_dump("pDest WPS IE 2:", pVendorIE, VendorIELen);
RTMPZeroMemory(pVendorIE + 2, VendorIELen);
pPreVendorIE = pVendorIE;
pVendorIE += VendorIELen + 2; //Next Vendor IE address pointer
if (pVendorIE < pIEData + Elemlen)
//.........这里部分代码省略.........