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

📄 ioctl.c

📁 VIA VT6656 USB linux source code.
💻 C
📖 第 1 页 / 共 2 页
字号:
        // Todo xxxxxxx                if (pDevice->bRadioOff == TRUE)            CARDbRadioPowerOn(pDevice);        break;            case WLAN_CMD_SET_HOSTAPD:            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "WLAN_CMD_SET_HOSTAPD\n");                if (copy_from_user(&sValue, pReq->data, sizeof(SCmdValue))) {			result = -EFAULT;			break;		};		if (sValue.dwValue == 1) {            if (hostap_set_hostapd(pDevice, 1, 1) == 0){                DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Enable HOSTAP\n");            }            else {			    result = -EFAULT;			    break;			}            }        else {            hostap_set_hostapd(pDevice, 0, 1);            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Disable HOSTAP\n");                    }                    break;             case WLAN_CMD_SET_HOSTAPD_STA:                    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "WLAN_CMD_SET_HOSTAPD_STA\n");                        break;        case WLAN_CMD_SET_802_1X:            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "WLAN_CMD_SET_802_1X\n");        if (copy_from_user(&sValue, pReq->data, sizeof(SCmdValue))) {			result = -EFAULT;			break;		};				if (sValue.dwValue == 1) {            pDevice->bEnable8021x = TRUE;            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Enable 802.1x\n");        }        else {            pDevice->bEnable8021x = FALSE;            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Disable 802.1x\n");                    }    				                break;                                     case WLAN_CMD_SET_HOST_WEP:            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "WLAN_CMD_SET_HOST_WEP\n");        if (copy_from_user(&sValue, pReq->data, sizeof(SCmdValue))) {			result = -EFAULT;			break;		};				if (sValue.dwValue == 1) {            pDevice->bEnableHostWEP = TRUE;            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Enable HostWEP\n");        }        else {            pDevice->bEnableHostWEP = FALSE;            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Disable HostWEP\n");        }    						        break;                     case WLAN_CMD_SET_WPA:         DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "WLAN_CMD_SET_WPA\n");                 if (copy_from_user(&sValue, pReq->data, sizeof(SCmdValue))) {			result = -EFAULT;			break;		};		if (sValue.dwValue == 1) {            if (wpa_set_wpadev(pDevice, 1) == 0){                DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "init wpadev\n");            }            else {			    result = -EFAULT;			    break;			}            }        else {            wpa_set_wpadev(pDevice, 0);            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "release wpadev\n");        }            break;  #ifdef SndEvt_ToAPI     case  WLAN_CMD_SET_EVT:	       DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "WLAN_CMD_SET_EVT\n");                 if (copy_from_user(&sValue, pReq->data, sizeof(SCmdValue))) {			result = -EFAULT;			break;		};	 if (sValue.dwValue == 1)  {	 //set evt	    printk("inital evt device\n");              if(Evt_init_Evtdev(pDevice)==0)  {                  printk("inital evt device ok\n");		 pDevice->bEVTDevEnable = TRUE;	      }	     else		printk("inital evt device fail\n"); 	  }	 else {	 //clear evt	    printk("remove evt device\n");              evt_release_evtdev(pDevice);	       pDevice->bEVTDevEnable = FALSE;	   }	 break;#endif            case WLAN_CMD_AP_START:        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "WLAN_CMD_AP_START\n");        if (pDevice->bRadioOff == TRUE) {            CARDbRadioPowerOn(pDevice);            add_timer(&pMgmt->sTimerSecondCallback);        }        if (copy_from_user(&sStartAPCmd, pReq->data, sizeof(SCmdStartAP))) {			result = -EFAULT;			break;		};			    if (sStartAPCmd.wBSSType == AP) {	        pMgmt->eConfigMode = WMAC_CONFIG_AP;	        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "ioct set to AP mode\n");	    }    	    else {	        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "ioct BSS type not set to AP mode\n");			result = -EFAULT;			break;	        	    }        	    	    if (sStartAPCmd.wBBPType == PHY80211g) {            pMgmt->byAPBBType = PHY_TYPE_11G;        }        else if (sStartAPCmd.wBBPType == PHY80211a) {                 pMgmt->byAPBBType = PHY_TYPE_11A;        }        else {                     pMgmt->byAPBBType = PHY_TYPE_11B;        }                            	                pItemSSID = (PWLAN_IE_SSID)sStartAPCmd.ssid;	            memset(pMgmt->abyDesireSSID, 0, WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1); 		memcpy(pMgmt->abyDesireSSID, pItemSSID, pItemSSID->len + WLAN_IEHDR_LEN);	    	    if ((sStartAPCmd.uChannel > 0)&&(sStartAPCmd.uChannel <= 14))	        pDevice->uChannel = sStartAPCmd.uChannel;	    	    if ((sStartAPCmd.uBeaconInt >= 20) && (sStartAPCmd.uBeaconInt <= 1000))            pMgmt->wIBSSBeaconPeriod = sStartAPCmd.uBeaconInt;        else                 pMgmt->wIBSSBeaconPeriod = 100;        if (sStartAPCmd.bShareKeyAuth == TRUE){            pMgmt->bShareKeyAlgorithm = TRUE;            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Share Key \n");        }        else {            pMgmt->bShareKeyAlgorithm = FALSE;            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Open System \n");        }        memcpy(pMgmt->abyIBSSSuppRates, abySuppRates, 6);        if (sStartAPCmd.byBasicRate & BIT3) {            pMgmt->abyIBSSSuppRates[2] |= BIT7;            pMgmt->abyIBSSSuppRates[3] |= BIT7;            pMgmt->abyIBSSSuppRates[4] |= BIT7;            pMgmt->abyIBSSSuppRates[5] |= BIT7;                    }else if (sStartAPCmd.byBasicRate & BIT2) {             pMgmt->abyIBSSSuppRates[2] |= BIT7;             pMgmt->abyIBSSSuppRates[3] |= BIT7;             pMgmt->abyIBSSSuppRates[4] |= BIT7;                        }else if (sStartAPCmd.byBasicRate & BIT1) {             pMgmt->abyIBSSSuppRates[2] |= BIT7;             pMgmt->abyIBSSSuppRates[3] |= BIT7;        }else if (sStartAPCmd.byBasicRate & BIT1) {             pMgmt->abyIBSSSuppRates[2] |= BIT7;        }else {            //default 1,2M             pMgmt->abyIBSSSuppRates[2] |= BIT7;             pMgmt->abyIBSSSuppRates[3] |= BIT7;                    }                             DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Support Rate= %x %x %x %x\n",                 pMgmt->abyIBSSSuppRates[2],                pMgmt->abyIBSSSuppRates[3],                pMgmt->abyIBSSSuppRates[4],                pMgmt->abyIBSSSuppRates[5]                                                                  );                             netif_stop_queue(pDevice->dev);                spin_lock_irq(&pDevice->lock);          bScheduleCommand((HANDLE)pDevice, WLAN_CMD_RUN_AP, NULL);                spin_unlock_irq(&pDevice->lock);                  break;           case WLAN_CMD_GET_NODE_CNT:		cbListCount = 0;				pNode = &(pMgmt->sNodeDBTable[0]);        for (ii = 0; ii < (MAX_NODE_NUM + 1); ii++) {            pNode = &(pMgmt->sNodeDBTable[ii]);            if (!pNode->bActive)                continue;            cbListCount++;        };                sNodeList.uItem = cbListCount;        if (copy_to_user(pReq->data, &sNodeList, sizeof(SNodeList))) {			result = -EFAULT;			break;		};        pReq->wResult = 0;        break;                case WLAN_CMD_GET_NODE_LIST:            if (copy_from_user(&sNodeList, pReq->data, sizeof(SNodeList))) {			result = -EFAULT;			break;		};            pNodeList = (PSNodeList)kmalloc(sizeof(SNodeList) + (sNodeList.uItem * sizeof(SNodeItem)), (int)GFP_ATOMIC);        if (pNodeList == NULL) {                result = -ENOMEM;            break;        }        		pNodeList->uItem = sNodeList.uItem;		pNode = &(pMgmt->sNodeDBTable[0]);        for (ii = 0, jj = 0; ii < (MAX_NODE_NUM + 1); ii++) {            pNode = &(pMgmt->sNodeDBTable[ii]);            if (pNode->bActive) {    		    pNodeList->sNodeList[jj].wAID = pNode->wAID;    		    memcpy(pNodeList->sNodeList[jj].abyMACAddr, pNode->abyMACAddr, WLAN_ADDR_LEN);    		    pNodeList->sNodeList[jj].wTxDataRate = pNode->wTxDataRate;    		    pNodeList->sNodeList[jj].wInActiveCount = (WORD)pNode->uInActiveCount;    		    pNodeList->sNodeList[jj].wEnQueueCnt = (WORD)pNode->wEnQueueCnt;    		    pNodeList->sNodeList[jj].wFlags = (WORD)pNode->dwFlags;    		    pNodeList->sNodeList[jj].bPWBitOn = pNode->bPSEnable;    		    pNodeList->sNodeList[jj].byKeyIndex = pNode->byKeyIndex;    		    pNodeList->sNodeList[jj].wWepKeyLength = pNode->uWepKeyLength;    		    memcpy(&(pNodeList->sNodeList[jj].abyWepKey[0]), &(pNode->abyWepKey[0]), WEP_KEYMAXLEN);                DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "key= %2.2X:%2.2X:%2.2X:%2.2X:%2.2X\n",                            pNodeList->sNodeList[jj].abyWepKey[0],                            pNodeList->sNodeList[jj].abyWepKey[1],                            pNodeList->sNodeList[jj].abyWepKey[2],                            pNodeList->sNodeList[jj].abyWepKey[3],                            pNodeList->sNodeList[jj].abyWepKey[4]                           );                                                                                         		    pNodeList->sNodeList[jj].bIsInFallback = pNode->bIsInFallback;    		    pNodeList->sNodeList[jj].uTxFailures = pNode->uTxFailures;    		    pNodeList->sNodeList[jj].uTxAttempts = pNode->uTxAttempts;    		    pNodeList->sNodeList[jj].wFailureRatio = (WORD)pNode->uFailureRatio;    		    jj ++;    		    if (jj >= pNodeList->uItem)     		        break;    		}    		};        if (copy_to_user(pReq->data, pNodeList, sizeof(SNodeList) + (sNodeList.uItem * sizeof(SNodeItem)))) {			result = -EFAULT;			break;		};        kfree(pNodeList);        pReq->wResult = 0;        break;        #ifdef WPA_SM_Transtatus    case 0xFF:        memset(wpa_Result.ifname,0,sizeof(wpa_Result.ifname));	    wpa_Result.proto = 0;	    wpa_Result.key_mgmt = 0;	    wpa_Result.eap_type = 0;	    wpa_Result.authenticated = FALSE;        if (copy_from_user(&wpa_Result, pReq->data, sizeof(wpa_Result))) {            result = -EFAULT;			break;		} //DavidWang  for some AP maybe good authenticate   if(wpa_Result.key_mgmt==0x20)      pMgmt->Cisco_cckm =1;     else    pMgmt->Cisco_cckm =0;//DavidWang        //printk("get private wpa_supplicant announce WPA SM\n");	//printk("wpa-->ifname=%s\n",wpa_Result.ifname);	//printk("wpa-->proto=%d\n",wpa_Result.proto);	//printk("wpa-->key-mgmt=%d\n",wpa_Result.key_mgmt);  	//printk("wpa-->eap_type=%d\n",wpa_Result.eap_type);	//printk("wpa-->authenticated is %s\n",(wpa_Result.authenticated==TRUE)?"TRUE":"FALSE");		pReq->wResult = 0;        break;#endif    default:        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Private command not support..\n");    }    return result;}#ifdef SndEvt_ToAPIstatic int Evt_init_Evtdev(PSDevice pDevice){	struct net_device *dev = pDevice->dev;	int ret;	pDevice->evtdev = (struct net_device *)kmalloc(sizeof(struct net_device),GFP_KERNEL);	if (pDevice->evtdev == NULL)		return -ENOMEM;	memset(pDevice->evtdev, 0, sizeof(struct net_device));	pDevice->evtdev->priv = pDevice;	memcpy(pDevice->evtdev->dev_addr, dev->dev_addr, ETH_ALEN);	pDevice->evtdev->type = ARPHRD_IEEE80211;    pDevice->evtdev->base_addr = dev->base_addr;	pDevice->evtdev->irq = dev->irq;	pDevice->evtdev->mem_start = dev->mem_start;	pDevice->evtdev->mem_end = dev->mem_end;	sprintf(pDevice->evtdev->name, "%sevt", dev->name);	ret = register_netdevice(pDevice->evtdev);	if (ret) {		DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: register_netdevice(EVT) failed!\n",		       dev->name);		return -1;	}		if (pDevice->skbevt == NULL) {        pDevice->skbevt = dev_alloc_skb((int)pDevice->rx_buf_sz);	        if (pDevice->skbevt == NULL)		    return -ENOMEM;    }	    pDevice->ulNTYcount = 0;    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: Registered netdevice %s for EVT management\n",		     dev->name, pDevice->evtdev->name);	       	return 0;}static int evt_release_evtdev(PSDevice pDevice){    if (pDevice->skbevt) {        dev_kfree_skb(pDevice->skbevt);        pDevice->skbevt = NULL;    }            if (pDevice->evtdev) {		unregister_netdevice(pDevice->evtdev);        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: Netdevice %s unregistered\n",	       pDevice->dev->name, pDevice->evtdev->name);	    kfree(pDevice->evtdev);	    pDevice->evtdev = NULL;	}    pDevice->ulNTYcount = 0;	return 0;}#endif

⌨️ 快捷键说明

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