📄 sta_ioctl.c
字号:
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 + -