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

📄 sta_ioctl.c

📁 Linux下的RT系列无线网卡驱动,可以直接在x86平台上编译
💻 C
📖 第 1 页 / 共 5 页
字号:
	data->flags = 1;		/* active */	if (OPSTATUS_TEST_FLAG(pAdapter, fOP_STATUS_MEDIA_STATE_CONNECTED) && !MONITOR_ON(pAdapter))	{		DBGPRINT(RT_DEBUG_TRACE ,("MediaState is connected\n"));		data->length = pAdapter->CommonCfg.SsidLen;		memcpy(essid, pAdapter->CommonCfg.Ssid, pAdapter->CommonCfg.SsidLen);		pAdapter->CommonCfg.Ssid[pAdapter->CommonCfg.SsidLen] = '\0';		DBGPRINT(RT_DEBUG_TRACE ,("pAdapter->PortCfg.Ssid=%s , Ssidlen = %d\n",pAdapter->CommonCfg.Ssid, pAdapter->CommonCfg.SsidLen));	}	else	{//the ANY ssid was specified		data->length  = 0;		DBGPRINT(RT_DEBUG_TRACE ,("MediaState is not connected, ess\n"));	}	DBGPRINT(RT_DEBUG_TRACE ,("===>rt_ioctl_giwessid:: (Len=%d, ssid=%s...)\n", pAdapter->CommonCfg.SsidLen, pAdapter->CommonCfg.Ssid));	return 0;}int rt_ioctl_siwnickn(struct net_device *dev,			 struct iw_request_info *info,			 struct iw_point *data, char *nickname){	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 (data->length > IW_ESSID_MAX_SIZE)		return -EINVAL;	memset(pAdapter->nickname, 0, IW_ESSID_MAX_SIZE + 1);	memcpy(pAdapter->nickname, nickname, data->length);	return 0;}int rt_ioctl_giwnickn(struct net_device *dev,			 struct iw_request_info *info,			 struct iw_point *data, char *nickname){	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 (data->length > strlen(pAdapter->nickname) + 1)		data->length = strlen(pAdapter->nickname) + 1;	if (data->length > 0) {		memcpy(nickname, pAdapter->nickname, data->length-1);		nickname[data->length-1] = '\0';	}	return 0;}int rt_ioctl_siwrts(struct net_device *dev,		       struct iw_request_info *info,		       struct iw_param *rts, char *extra){	PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;	u16 val;    //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 (rts->disabled)		val = MAX_RTS_THRESHOLD;	else if (rts->value < 0 || rts->value > MAX_RTS_THRESHOLD)		return -EINVAL;	else if (rts->value == 0)	    val = MAX_RTS_THRESHOLD;	else		val = rts->value;		if (val != pAdapter->CommonCfg.RtsThreshold)		pAdapter->CommonCfg.RtsThreshold = val;	return 0;}int rt_ioctl_giwrts(struct net_device *dev,		       struct iw_request_info *info,		       struct iw_param *rts, 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;       	}	rts->value = pAdapter->CommonCfg.RtsThreshold;	rts->disabled = (rts->value == MAX_RTS_THRESHOLD);	rts->fixed = 1;	return 0;}int rt_ioctl_siwfrag(struct net_device *dev,			struct iw_request_info *info,			struct iw_param *frag, char *extra){	PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;	u16 val;	//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 (frag->disabled)		val = MAX_FRAG_THRESHOLD;	else if (frag->value >= MIN_FRAG_THRESHOLD || frag->value <= MAX_FRAG_THRESHOLD)        val = __cpu_to_le16(frag->value & ~0x1); /* even numbers only */	else if (frag->value == 0)	    val = MAX_FRAG_THRESHOLD;	else		return -EINVAL;	pAdapter->CommonCfg.FragmentThreshold = val;	return 0;}int rt_ioctl_giwfrag(struct net_device *dev,			struct iw_request_info *info,			struct iw_param *frag, 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;       	}			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->length == 0) &&             (erq->flags & IW_ENCODE_RESTRICTED || erq->flags & IW_ENCODE_OPEN))	{	    pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED;		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;        goto done;	}        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;           }                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){	PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;	int kid;		//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 = (PRTMP_ADAPTER) dev->priv;	char *this_char = extra;	char *value;	int  Status=0;		//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 Status;                                                                                                                  	                                                                                                                            	if ((value = rtstrchr(this_char, '=')) != NULL)                                                                             	    *value++ = 0;                                                                                                           	                                                                                                                            	if (!value)                                                                                                      	    return Status;                                                                                                                  	// reject setting nothing besides ANY ssid(ssidLen=0)    if (!*value && (strcmp(this_char, "SSID") != 0))        return Status;         	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");    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      

⌨️ 快捷键说明

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