⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wcmd.c

📁 VIA VT6656 USB linux source code.
💻 C
📖 第 1 页 / 共 4 页
字号:
PSTxMgmtPackets_MgrMakeProbeRequest(    IN PSDevice pDevice,    IN PSMgmtObject pMgmt,     IN PBYTE pScanBSSID,    IN PWLAN_IE_SSID pSSID,    IN PWLAN_IE_SUPP_RATES pCurrRates,    IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates                ){    PSTxMgmtPacket      pTxPacket = NULL;    WLAN_FR_PROBEREQ    sFrame;    pTxPacket = (PSTxMgmtPacket)pMgmt->pbyMgmtPacketPool;    memset(pTxPacket, 0, sizeof(STxMgmtPacket) + WLAN_PROBEREQ_FR_MAXLEN);    pTxPacket->p80211Header = (PUWLAN_80211HDR)((PBYTE)pTxPacket + sizeof(STxMgmtPacket));    sFrame.pBuf = (PBYTE)pTxPacket->p80211Header;    sFrame.len = WLAN_PROBEREQ_FR_MAXLEN;    vMgrEncodeProbeRequest(&sFrame);    sFrame.pHdr->sA3.wFrameCtl = cpu_to_le16(        (        WLAN_SET_FC_FTYPE(WLAN_TYPE_MGR) |         WLAN_SET_FC_FSTYPE(WLAN_FSTYPE_PROBEREQ)        ));    memcpy( sFrame.pHdr->sA3.abyAddr1, pScanBSSID, WLAN_ADDR_LEN);    memcpy( sFrame.pHdr->sA3.abyAddr2, pMgmt->abyMACAddr, WLAN_ADDR_LEN);    memcpy( sFrame.pHdr->sA3.abyAddr3, pScanBSSID, WLAN_BSSID_LEN);    // Copy the SSID, pSSID->len=0 indicate broadcast SSID     sFrame.pSSID = (PWLAN_IE_SSID)(sFrame.pBuf + sFrame.len);    sFrame.len += pSSID->len + WLAN_IEHDR_LEN;    memcpy(sFrame.pSSID, pSSID, pSSID->len + WLAN_IEHDR_LEN);    sFrame.pSuppRates = (PWLAN_IE_SUPP_RATES)(sFrame.pBuf + sFrame.len);    sFrame.len += pCurrRates->len + WLAN_IEHDR_LEN;    memcpy(sFrame.pSuppRates, pCurrRates, pCurrRates->len + WLAN_IEHDR_LEN);    // Copy the extension rate set     if (pDevice->byBBType == BB_TYPE_11G) {                      sFrame.pExtSuppRates = (PWLAN_IE_SUPP_RATES)(sFrame.pBuf + sFrame.len);        sFrame.len += pCurrExtSuppRates->len + WLAN_IEHDR_LEN;        memcpy(sFrame.pExtSuppRates, pCurrExtSuppRates, pCurrExtSuppRates->len + WLAN_IEHDR_LEN);    }    pTxPacket->cbMPDULen = sFrame.len;    pTxPacket->cbPayloadLen = sFrame.len - WLAN_HDR_ADDR3_LEN;            return pTxPacket;}VOIDvCommandTimerWait(    IN HANDLE    hDeviceContext,    IN UINT MSecond    ){    PSDevice        pDevice = (PSDevice)hDeviceContext;            init_timer(&pDevice->sTimerCommand);    pDevice->sTimerCommand.data = (ULONG)pDevice;    pDevice->sTimerCommand.function = (TimerFunction)vRunCommand;    // RUN_AT :1 msec ~= (HZ/1024)    pDevice->sTimerCommand.expires = (UINT)RUN_AT((MSecond * HZ) >> 10);    add_timer(&pDevice->sTimerCommand);    return;    }VOIDvRunCommand(    IN  HANDLE      hDeviceContext    ){    PSDevice        pDevice = (PSDevice)hDeviceContext;    PSMgmtObject    pMgmt = &(pDevice->sMgmtObj);        PWLAN_IE_SSID   pItemSSID;    PWLAN_IE_SSID   pItemSSIDCurr;    CMD_STATUS      Status;    UINT            ii;    BYTE            byMask[8] = {1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80};    struct sk_buff  *skb;        BYTE            byData;    viawget_wpa_header *wpahdr;  //DavidWang        if (pDevice->dwDiagRefCount != 0)        return;    if (pDevice->bCmdRunning != TRUE)        return;    spin_lock_irq(&pDevice->lock);        switch ( pDevice->eCommandState ) {                case WLAN_CMD_SCAN_START:                    if (pDevice->bRadioOff == TRUE) {                s_bCommandComplete(pDevice);                spin_unlock_irq(&pDevice->lock);                return;            }                              if (pMgmt->eCurrMode == WMAC_MODE_ESS_AP) {                s_bCommandComplete(pDevice);                spin_unlock_irq(&pDevice->lock);                return;            }                                pItemSSID = (PWLAN_IE_SSID)pMgmt->abyScanSSID;            if (pMgmt->uScanChannel == 0 ) {                pMgmt->uScanChannel = pDevice->byMinChannel;            }                        if (pMgmt->uScanChannel > pDevice->byMaxChannel) {                pMgmt->eScanState = WMAC_NO_SCANNING;                                if (pDevice->byBBType != pDevice->byScanBBType) {                    pDevice->byBBType = pDevice->byScanBBType;                    CARDvSetBSSMode(pDevice);                }                                if (pDevice->bUpdateBBVGA) {                    BBvSetShortSlotTime(pDevice);                                        BBvSetVGAGainOffset(pDevice, pDevice->byBBVGACurrent);                    BBvUpdatePreEDThreshold(pDevice, FALSE);                }                                            // Set channel back                vAdHocBeaconRestart(pDevice);                // Set channel back                CARDbSetMediaChannel(pDevice, pMgmt->uCurrChannel);                // Set Filter                if (pMgmt->bCurrBSSIDFilterOn) {                    MACvRegBitsOn(pDevice, MAC_REG_RCR, RCR_BSSID);                    pDevice->byRxMode |= RCR_BSSID;                }                DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Scanning, set back to channel: [%d]\n", pMgmt->uCurrChannel);                                pDevice->bStopDataPkt = FALSE;                s_bCommandComplete(pDevice);                spin_unlock_irq(&pDevice->lock);                return;                                                                } else {                if (!ChannelValid(pDevice->byZoneType, pMgmt->uScanChannel)) {                    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Invalid channel pMgmt->uScanChannel = %d \n",pMgmt->uScanChannel);                    s_bCommandComplete(pDevice);                    spin_unlock_irq(&pDevice->lock);                    return;                                    }                                if (pMgmt->uScanChannel == pDevice->byMinChannel) {                    pMgmt->eScanType = WMAC_SCAN_ACTIVE;                    pMgmt->abyScanBSSID[0] = 0xFF;                    pMgmt->abyScanBSSID[1] = 0xFF;                    pMgmt->abyScanBSSID[2] = 0xFF;                    pMgmt->abyScanBSSID[3] = 0xFF;                    pMgmt->abyScanBSSID[4] = 0xFF;                    pMgmt->abyScanBSSID[5] = 0xFF;                    pItemSSID->byElementID = WLAN_EID_SSID;                                        // clear bssid list                    // BSSvClearBSSList((HANDLE)pDevice, pDevice->bLinkPass);                    pMgmt->eScanState = WMAC_IS_SCANNING;                    pDevice->byScanBBType = pDevice->byBBType;  //lucas                    pDevice->bStopDataPkt = TRUE;                                        // Turn off RCR_BSSID filter everytime                    MACvRegBitsOff(pDevice, MAC_REG_RCR, RCR_BSSID);                    pDevice->byRxMode &= ~RCR_BSSID;                                                }                //lucas          #ifdef CCX_Fast_Roaming              if (pDevice->bRoaming == TRUE){                     if (pMgmt->uScanChannel == 0 ) {                              pDevice->bSameBSSCurNum = 0;                            }                if (pDevice->bSameBSSCurNum < pDevice->bSameBSSMaxNum) {                      pMgmt->uScanChannel = pMgmt->pSameBSS[pDevice->bSameBSSCurNum].uChannel;                      DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pMgmt->uScanChannel %d  %d.\n",pMgmt->uScanChannel,pDevice->bSameBSSCurNum);                      pDevice->bSameBSSCurNum++;                      } else {                    pDevice->eCommandState = WLAN_CMD_SCAN_END;                      }                   }                #endif                vAdHocBeaconStop(pDevice);                if ((pDevice->byBBType != BB_TYPE_11A) && (pMgmt->uScanChannel > CB_MAX_CHANNEL_24G)) {                    pDevice->byBBType = BB_TYPE_11A;                    CARDvSetBSSMode(pDevice);                }                else if ((pDevice->byBBType == BB_TYPE_11A) && (pMgmt->uScanChannel <= CB_MAX_CHANNEL_24G)) {                    pDevice->byBBType = BB_TYPE_11G;                    CARDvSetBSSMode(pDevice);                }                DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Scanning....  channel: [%d]\n", pMgmt->uScanChannel);                                // Set channel                 CARDbSetMediaChannel(pDevice, pMgmt->uScanChannel);                // Set Baseband to be more sensitive.                                if (pDevice->bUpdateBBVGA) {                    BBvSetShortSlotTime(pDevice);                                        BBvSetVGAGainOffset(pDevice, pDevice->abyBBVGA[0]);                    BBvUpdatePreEDThreshold(pDevice, TRUE);                }                #ifdef CCX_Fast_Roaming                        if (pDevice->bRoaming == FALSE){                #endif                pMgmt->uScanChannel++;                                while (!ChannelValid(pDevice->byZoneType, pMgmt->uScanChannel) &&                        pMgmt->uScanChannel <= pDevice->byMaxChannel ){                    pMgmt->uScanChannel++;                }                                    if (pMgmt->uScanChannel > pDevice->byMaxChannel) {                    // Set Baseband to be not sensitive and rescan                    pDevice->eCommandState = WLAN_CMD_SCAN_END;                }               #ifdef CCX_Fast_Roaming                  }               #endif                if ((pMgmt->b11hEnable == FALSE) ||                    (pMgmt->uScanChannel < CB_MAX_CHANNEL_24G)) {                    s_vProbeChannel(pDevice);                    spin_unlock_irq(&pDevice->lock);		//2008-0526-02<Add>by MikeLiu                  #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)                     vCommandTimerWait((HANDLE)pDevice, 100);                  #else                    vCommandTimerWait((HANDLE)pDevice, WCMD_ACTIVE_SCAN_TIME);		#endif                    return;                } else {                    spin_unlock_irq(&pDevice->lock);                    vCommandTimerWait((HANDLE)pDevice, WCMD_PASSIVE_SCAN_TIME);                    return;                }                           }                        break;                    case WLAN_CMD_SCAN_END:            // Set Baseband's sensitivity back.            if (pDevice->byBBType != pDevice->byScanBBType) {                pDevice->byBBType = pDevice->byScanBBType;                CARDvSetBSSMode(pDevice);            }                        if (pDevice->bUpdateBBVGA) {                BBvSetShortSlotTime(pDevice);                                BBvSetVGAGainOffset(pDevice, pDevice->byBBVGACurrent);                BBvUpdatePreEDThreshold(pDevice, FALSE);            }                                    // Set channel back            vAdHocBeaconRestart(pDevice);                // Set channel back            CARDbSetMediaChannel(pDevice, pMgmt->uCurrChannel);            // Set Filter            if (pMgmt->bCurrBSSIDFilterOn) {                MACvRegBitsOn(pDevice, MAC_REG_RCR, RCR_BSSID);                pDevice->byRxMode |= RCR_BSSID;            }                DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Scanning, set back to channel: [%d]\n", pMgmt->uCurrChannel);                        pMgmt->eScanState = WMAC_NO_SCANNING;            pDevice->bStopDataPkt = FALSE;//2008-0409-07, <Add> by Einsn Liu#ifdef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT				//if(pDevice->bWPASuppWextEnabled == TRUE)		{			//send scan event to wpa_Supplicant 				union iwreq_data wrqu;				printk("wireless_send_event--->SIOCGIWSCAN(scan done)\n");				memset(&wrqu, 0, sizeof(wrqu));				wireless_send_event(pDevice->dev, SIOCGIWSCAN, &wrqu, NULL);			}#endif 								            s_bCommandComplete(pDevice);            break;	        	                case WLAN_CMD_DISASSOCIATE_START :            if ((pMgmt->eCurrMode == WMAC_MODE_ESS_STA) &&                (pMgmt->eCurrState != WMAC_STATE_ASSOC)) {                s_bCommandComplete(pDevice);                spin_unlock_irq(&pDevice->lock);                return;            } else {                      #ifdef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT		      pDevice->bwextstep0 = FALSE;                        pDevice->bwextstep1 = FALSE;                        pDevice->bwextstep2 = FALSE;                        pDevice->bwextstep3 = FALSE;			   pDevice->bWPASuppWextEnabled = FALSE;	 #endif	                DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Send Disassociation Packet..\n");                // reason = 8 : disassoc because sta has left                vMgrDisassocBeginSta((HANDLE)pDevice, pMgmt, pMgmt->abyCurrBSSID, (8), &Status);                pDevice->bLinkPass = FALSE;                ControlvMaskByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_PAPEDELAY,LEDSTS_STS,LEDSTS_SLOW);                    // unlock command busy                pItemSSID = (PWLAN_IE_SSID)pMgmt->abyCurrSSID;                pItemSSID->len = 0;                memset(pItemSSID->abySSID, 0, WLAN_SSID_MAXLEN);                pMgmt->eCurrState = WMAC_STATE_IDLE;                pMgmt->sNodeDBTable[0].bActive = FALSE;//                pDevice->bBeaconBufReady = FALSE;            }            netif_stop_queue(pDevice->dev);                        if (pDevice->bNeedRadioOFF == TRUE)                CARDbRadioPowerOff(pDevice);                        s_bCommandComplete(pDevice);

⌨️ 快捷键说明

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