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

📄 sta_ioctl.c

📁 ralink 2870 usb无线网卡 最新驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
    	if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE))    	{      		DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n"));        	return -ENETDOWN;       	}			frag->value = pAdapter->CommonCfg.FragmentThreshold;	frag->disabled = (frag->value == MAX_FRAG_THRESHOLD);	frag->fixed = 1;	return 0;}#define MAX_WEP_KEY_SIZE 13#define MIN_WEP_KEY_SIZE 5int rt_ioctl_siwencode(struct net_device *dev,			  struct iw_request_info *info,			  struct iw_point *erq, char *extra){	PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;	//check if the interface is down	if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE))	{  		DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n"));    	return -ENETDOWN;   	}	if ((erq->length == 0) &&        (erq->flags & IW_ENCODE_DISABLED))	{		pAdapter->StaCfg.PairCipher = Ndis802_11WEPDisabled;		pAdapter->StaCfg.GroupCipher = Ndis802_11WEPDisabled;		pAdapter->StaCfg.WepStatus = Ndis802_11WEPDisabled;        pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus;        pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeOpen;        goto done;	}	else if (erq->flags & IW_ENCODE_RESTRICTED || erq->flags & IW_ENCODE_OPEN)	{	    //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED;		STA_PORT_SECURED(pAdapter);		pAdapter->StaCfg.PairCipher = Ndis802_11WEPEnabled;		pAdapter->StaCfg.GroupCipher = Ndis802_11WEPEnabled;		pAdapter->StaCfg.WepStatus = Ndis802_11WEPEnabled;        pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus;		if (erq->flags & IW_ENCODE_RESTRICTED)			pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeShared;    	else			pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeOpen;	}        if (erq->length > 0) 	{		int keyIdx = (erq->flags & IW_ENCODE_INDEX) - 1;		/* Check the size of the key */		if (erq->length > MAX_WEP_KEY_SIZE) 		{			return -EINVAL;		}		/* Check key index */		if ((keyIdx < 0) || (keyIdx >= NR_WEP_KEYS))        {            DBGPRINT(RT_DEBUG_TRACE ,("==>rt_ioctl_siwencode::Wrong keyIdx=%d! Using default key instead (%d)\n",                                         keyIdx, pAdapter->StaCfg.DefaultKeyId));                        //Using default key			keyIdx = pAdapter->StaCfg.DefaultKeyId;           }		else			pAdapter->StaCfg.DefaultKeyId = keyIdx;        NdisZeroMemory(pAdapter->SharedKey[BSS0][keyIdx].Key,  16);				if (erq->length == MAX_WEP_KEY_SIZE)        {      			pAdapter->SharedKey[BSS0][keyIdx].KeyLen = MAX_WEP_KEY_SIZE;            pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = CIPHER_WEP128;		}		else if (erq->length == MIN_WEP_KEY_SIZE)        {                  pAdapter->SharedKey[BSS0][keyIdx].KeyLen = MIN_WEP_KEY_SIZE;            pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = CIPHER_WEP64;		}		else			/* Disable the key */			pAdapter->SharedKey[BSS0][keyIdx].KeyLen = 0;		/* Check if the key is not marked as invalid */		if(!(erq->flags & IW_ENCODE_NOKEY)) 		{			/* Copy the key in the driver */			NdisMoveMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, extra, erq->length);        }	}     else 			{		/* Do we want to just set the transmit key index ? */		int index = (erq->flags & IW_ENCODE_INDEX) - 1;		if ((index >= 0) && (index < 4))         {      			pAdapter->StaCfg.DefaultKeyId = index;            }        else			/* Don't complain if only change the mode */		if(!erq->flags & IW_ENCODE_MODE) 		{				return -EINVAL;		}	}		done:    DBGPRINT(RT_DEBUG_TRACE ,("==>rt_ioctl_siwencode::erq->flags=%x\n",erq->flags));	DBGPRINT(RT_DEBUG_TRACE ,("==>rt_ioctl_siwencode::AuthMode=%x\n",pAdapter->StaCfg.AuthMode));	DBGPRINT(RT_DEBUG_TRACE ,("==>rt_ioctl_siwencode::DefaultKeyId=%x, KeyLen = %d\n",pAdapter->StaCfg.DefaultKeyId , pAdapter->SharedKey[BSS0][pAdapter->StaCfg.DefaultKeyId].KeyLen));	DBGPRINT(RT_DEBUG_TRACE ,("==>rt_ioctl_siwencode::WepStatus=%x\n",pAdapter->StaCfg.WepStatus));	return 0;}intrt_ioctl_giwencode(struct net_device *dev,			  struct iw_request_info *info,			  struct iw_point *erq, char *key){	int kid;	PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;	if (pAdapter == NULL)	{		/* if 1st open fail, pAd will be free;		   So the net_dev->priv will be NULL in 2rd open */		return -ENETDOWN;	}	//check if the interface is down	if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE))	{  		DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n"));    	return -ENETDOWN;   	}			kid = erq->flags & IW_ENCODE_INDEX;	DBGPRINT(RT_DEBUG_TRACE, ("===>rt_ioctl_giwencode %d\n", erq->flags & IW_ENCODE_INDEX));	if (pAdapter->StaCfg.WepStatus == Ndis802_11WEPDisabled)	{		erq->length = 0;		erq->flags = IW_ENCODE_DISABLED;	} 	else if ((kid > 0) && (kid <=4))	{		// copy wep key		erq->flags = kid ;			/* NB: base 1 */		if (erq->length > pAdapter->SharedKey[BSS0][kid-1].KeyLen)			erq->length = pAdapter->SharedKey[BSS0][kid-1].KeyLen;		memcpy(key, pAdapter->SharedKey[BSS0][kid-1].Key, erq->length);		//if ((kid == pAdapter->PortCfg.DefaultKeyId))		//erq->flags |= IW_ENCODE_ENABLED;	/* XXX */		if (pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeShared)			erq->flags |= IW_ENCODE_RESTRICTED;		/* XXX */		else			erq->flags |= IW_ENCODE_OPEN;		/* XXX */			}	else if (kid == 0)	{		if (pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeShared)			erq->flags |= IW_ENCODE_RESTRICTED;		/* XXX */		else			erq->flags |= IW_ENCODE_OPEN;		/* XXX */		erq->length = pAdapter->SharedKey[BSS0][pAdapter->StaCfg.DefaultKeyId].KeyLen;		memcpy(key, pAdapter->SharedKey[BSS0][pAdapter->StaCfg.DefaultKeyId].Key, erq->length);		// copy default key ID		if (pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeShared)			erq->flags |= IW_ENCODE_RESTRICTED;		/* XXX */		else			erq->flags |= IW_ENCODE_OPEN;		/* XXX */		erq->flags = pAdapter->StaCfg.DefaultKeyId + 1;			/* NB: base 1 */		erq->flags |= IW_ENCODE_ENABLED;	/* XXX */	}			return 0;}static intrt_ioctl_setparam(struct net_device *dev, struct iw_request_info *info,			 void *w, char *extra){	PRTMP_ADAPTER pAdapter;	POS_COOKIE pObj;	PSTRING this_char = extra;	PSTRING value;	int  Status=0;	pAdapter = dev->priv;	if (pAdapter == NULL)	{		/* if 1st open fail, pAd will be free;		   So the net_dev->priv will be NULL in 2rd open */		return -ENETDOWN;	}	pObj = (POS_COOKIE) pAdapter->OS_Cookie;	{		pObj->ioctl_if_type = INT_MAIN;        pObj->ioctl_if = MAIN_MBSSID;	}		//check if the interface is down    	if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE))    	{      		DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n"));			return -ENETDOWN;    	}	if (!*this_char)		return -EINVAL;	                                                                                                                            	if ((value = rtstrchr(this_char, '=')) != NULL)                                                                             	    *value++ = 0;                                                                                                           	                                                                                                                            	if (!value && (strcmp(this_char, "SiteSurvey") != 0))                                                                                                      	    return -EINVAL;                                                                                                                  	else		goto SET_PROC;	// reject setting nothing besides ANY ssid(ssidLen=0)    if (!*value && (strcmp(this_char, "SSID") != 0))        return -EINVAL;         SET_PROC:	for (PRTMP_PRIVATE_SET_PROC = RTMP_PRIVATE_SUPPORT_PROC; PRTMP_PRIVATE_SET_PROC->name; PRTMP_PRIVATE_SET_PROC++)            	{                                                                                                                           	    if (strcmp(this_char, PRTMP_PRIVATE_SET_PROC->name) == 0)                                                               	    {						                                                                                                	        if(!PRTMP_PRIVATE_SET_PROC->set_proc(pAdapter, value))                                                              	        {	//FALSE:Set private failed then return Invalid argument                                                         			    Status = -EINVAL;                                                                                               	        }                                                                                                                   		    break;	//Exit for loop.                                                                                        	    }                                                                                                                       	}                                                                                                                           	                                                                                                                            	if(PRTMP_PRIVATE_SET_PROC->name == NULL)                                                                                    	{  //Not found argument                                                                                                     	    Status = -EINVAL;                                                                                                       	    DBGPRINT(RT_DEBUG_TRACE, ("===>rt_ioctl_setparam:: (iwpriv) Not Support Set Command [%s=%s]\n", this_char, value));	}                                                                                                                                 return Status;}static intrt_private_get_statistics(struct net_device *dev, struct iw_request_info *info,		struct iw_point *wrq, char *extra){	INT				Status = 0;    PRTMP_ADAPTER   pAd = (PRTMP_ADAPTER) dev->priv;    if (extra == NULL)    {        wrq->length = 0;        return -EIO;    }        memset(extra, 0x00, IW_PRIV_SIZE_MASK);    sprintf(extra, "\n\n");#ifdef RALINK_ATE	if (ATE_ON(pAd))	{	    sprintf(extra+strlen(extra), "Tx success                      = %ld\n", (ULONG)pAd->ate.TxDoneCount);	    //sprintf(extra+strlen(extra), "Tx success without retry        = %ld\n", (ULONG)pAd->ate.TxDoneCount);	}	else#endif // RALINK_ATE //	{    sprintf(extra+strlen(extra), "Tx success                      = %ld\n", (ULONG)pAd->WlanCounters.TransmittedFragmentCount.QuadPart);    sprintf(extra+strlen(extra), "Tx success without retry        = %ld\n", (ULONG)pAd->WlanCounters.TransmittedFragmentCount.QuadPart - (ULONG)pAd->WlanCounters.RetryCount.QuadPart);	}    sprintf(extra+strlen(extra), "Tx success after retry          = %ld\n", (ULONG)pAd->WlanCounters.RetryCount.QuadPart);    sprintf(extra+strlen(extra), "Tx fail to Rcv ACK after retry  = %ld\n", (ULONG)pAd->WlanCounters.FailedCount.QuadPart);    sprintf(extra+strlen(extra), "RTS Success Rcv CTS             = %ld\n", (ULONG)pAd->WlanCounters.RTSSuccessCount.QuadPart);    sprintf(extra+strlen(extra), "RTS Fail Rcv CTS                = %ld\n", (ULONG)pAd->WlanCounters.RTSFailureCount.QuadPart);    sprintf(extra+strlen(extra), "Rx success                      = %ld\n", (ULONG)pAd->WlanCounters.ReceivedFragmentCount.QuadPart);    sprintf(extra+strlen(extra), "Rx with CRC                     = %ld\n", (ULONG)pAd->WlanCounters.FCSErrorCount.QuadPart);    sprintf(extra+strlen(extra), "Rx drop due to out of resource  = %ld\n", (ULONG)pAd->Counters8023.RxNoBuffer);    sprintf(extra+strlen(extra), "Rx duplicate frame              = %ld\n", (ULONG)pAd->WlanCounters.FrameDuplicateCount.QuadPart);    sprintf(extra+strlen(extra), "False CCA (one second)          = %ld\n", (ULONG)pAd->RalinkCounters.OneSecFalseCCACnt);#ifdef RALINK_ATE	if (ATE_ON(pAd))	{		if (pAd->ate.RxAntennaSel == 0)		{    		sprintf(extra+strlen(extra), "RSSI-A                          = %ld\n", (LONG)(pAd->ate.LastRssi0 - pAd->BbpRssiToDbmDelta));			sprintf(extra+strlen(extra), "RSSI-B (if available)           = %ld\n", (LONG)(pAd->ate.LastRssi1 - pAd->BbpRssiToDbmDelta));			sprintf(extra+strlen(extra), "RSSI-C (if available)           = %ld\n\n", (LONG)(pAd->ate.LastRssi2 - pAd->BbpRssiToDbmDelta));		}		else		{    		sprintf(extra+strlen(extra), "RSSI                            = %ld\n", (LONG)(pAd->ate.LastRssi0 - pAd->BbpRssiToDbmDelta));		}	}	else#endif // RALINK_ATE //	{    	sprintf(extra+strlen(extra), "RSSI-A                          = %ld\n", (LONG)(pAd->StaCfg.RssiSample.LastRssi0 - pAd->BbpRssiToDbmDelta));        sprintf(extra+strlen(extra), "RSSI-B (if available)           = %ld\n", (LONG)(pAd->StaCfg.RssiSample.LastRssi1 - pAd->BbpRssiToDbmDelta));        sprintf(extra+strlen(extra), "RSSI-C (if available)           = %ld\n\n", (LONG)(pAd->StaCfg.RssiSample.LastRssi2 - pAd->BbpRssiToDbmDelta));	}   #ifdef WPA_SUPPLICANT_SUPPORT    sprintf(extra+strlen(extra), "WpaSupplicantUP                 = %d\n\n", pAd->StaCfg.WpaSupplicantUP);#endif // WPA_SUPPLICANT_SUPPORT //            wrq->length = strlen(extra) + 1; // 1: size of '\0'    DBGPRINT(RT_DEBUG_TRACE, ("<== rt_private_get_statistics, wrq->length = %d\n", wrq->length));    return Status;}#ifdef DOT11_N_SUPPORTvoid	getBaInfo(	IN	PRTMP_ADAPTER	pAd, 	IN	PSTRING			pOutBuf){	INT i, j;	BA_ORI_ENTRY *pOriBAEntry;	BA_REC_ENTRY *pRecBAEntry;	for (i=0; i<MAX_LEN_OF_MAC_TABLE; i++)	{		PMAC_TABLE_ENTRY pEntry = &pAd->MacTab.Content[i];		if (((pEntry->ValidAsCLI || pEntry->ValidAsApCli) && (pEntry->Sst == SST_ASSOC))			|| (pEntry->ValidAsWDS) || (pEntry->ValidAsMesh))		{					sprintf(pOutBuf, "%s\n%02X:%02X:%02X:%02X:%02X:%02X (Aid = %d) (AP) -\n",                pOutBuf,				pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2],				pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5], pEntry->Aid);						sprintf(pOutBuf, "%s[Recipient]\n", pOutBuf);			for (j=0; j < NUM_OF_TID; j++)			{				if (pEntry->BARecWcidArray[j] != 0)				{					pRecBAEntry =&pAd->BATable.BARecEntry[pEntry->BARecWcidArray[j]];					sprintf(pOutBuf, "%sTID=%d, BAWinSize=%d, LastIndSeq=%d, ReorderingPkts=%d\n", pOutBuf, j, pRecBAEntry->BAWinSize, pRecBAEntry->LastIndSeq, pRecBAEntry->list.qlen);				}			}			sprintf(pOutBuf, "%s\n", pOutBuf);			sprintf(pOutBuf, "%s[Originator]\n", pOutBuf);			for (j=0; j < NUM_OF_TID; j++)			{				if (pEntry->BAOriWcidArray[j] != 0)				{					pOriBAEntry =&pAd->BATable.BAOriEntry[pEntry->BAOriWcidArray[j]];					sprintf(pOutBuf, "%sTID=%d, BAWinSize=%d, StartSeq=%d, CurTxSeq=%d\n", pOutBuf, j, pOriBAEntry->BAWinSize, pOriBAEntry->Sequence, pEntry->TxSeq[j]);				}			}			sprintf(pOutBuf, "%s\n\n", pOutBuf);		}        if (strlen(pOutBuf) > (IW_PRIV_SIZE_MASK - 30))                break;	}	return;}#endif // DOT11_N_SUPPORT //static intrt_private_show(struct net_device *dev, struct iw_request_info *info,		struct iw_point *wrq, PSTRING extra){	INT				Status = 0;	PRTMP_ADAPTER   pAd;	POS_COOKIE		pObj;	u32             subcmd = wrq->flags;	pAd = dev->priv;	if (pAd == NULL)	{		/* if 1st open fail, pAd will be free;		   So the net_dev->priv will be NULL in 2rd open */		return -ENETDOWN;	}	pObj = (POS_COOKIE) pAd->OS_Cookie;	if (extra == NULL)	{		wrq->length = 0;		return -EIO;	}	memset(extra, 0x00, IW_PRIV_SIZE_MASK);    	{		pObj->ioctl_if_type = INT_MAIN;		pObj->ioctl_if = MAIN_MBSSID;	}        switch(subcmd)    {        case SHOW_CONN_STATUS:            if (MONITOR_ON(pAd))            {#ifdef DOT11_N_SUPPORT                if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED &&                    pAd->CommonCfg.RegTransmitSetting.field.BW)                    sprintf(extra, "Monitor Mode(CentralChannel %d)\n", pAd->CommonCfg.CentralChannel);                else#endif // DOT11_N_SUPPORT //                    sprintf(extra, "Monitor Mode(Channel %d)\n", pAd->CommonCfg.Ch

⌨️ 快捷键说明

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