📄 rtusb_info.c
字号:
if (val != pAdapter->PortCfg.RtsThreshold) pAdapter->PortCfg.RtsThreshold = val; return 0;}int rtusb_ioctl_giwrts(struct net_device *dev, struct iw_request_info *info, struct iw_param *rts, char *extra){ PRT2570ADAPTER pAdapter = (PRT2570ADAPTER) dev->priv; rts->value = pAdapter->PortCfg.RtsThreshold; rts->disabled = (rts->value == MAX_RTS_THRESHOLD); rts->fixed = 1; return 0;}int rtusb_ioctl_siwfrag(struct net_device *dev, struct iw_request_info *info, struct iw_param *rts, char *extra){ PRT2570ADAPTER pAdapter = (PRT2570ADAPTER) dev->priv; u16 val; if (rts->disabled) val = MAX_FRAG_THRESHOLD; else if (rts->value < 256 || rts->value > MAX_FRAG_THRESHOLD) return -EINVAL; else val = __cpu_to_le16(rts->value & ~0x1); /* even numbers only */ pAdapter->PortCfg.FragmentThreshold = val; return 0;}int rtusb_ioctl_giwfrag(struct net_device *dev, struct iw_request_info *info, struct iw_param *rts, char *extra){ PRT2570ADAPTER pAdapter = (PRT2570ADAPTER) dev->priv; rts->value = pAdapter->PortCfg.FragmentThreshold; rts->disabled = (rts->value == 2346); rts->fixed = 1; return 0;}int rtusb_ioctl_siwencode(struct net_device *dev, struct iw_request_info *info, struct iw_point *erq, char *extra){ PRT2570ADAPTER pAdapter = (PRT2570ADAPTER) dev->priv; NDIS_802_11_WEP WepKey; int index, len; CHAR kid = 0; memset(&WepKey, 0, sizeof(NDIS_802_11_WEP)); if (erq->flags & IW_ENCODE_DISABLED) { pAdapter->PortCfg.PairCipher = Ndis802_11WEPDisabled; pAdapter->PortCfg.GroupCipher = Ndis802_11WEPDisabled; pAdapter->PortCfg.WepStatus = Ndis802_11WEPDisabled; } else { pAdapter->PortCfg.PairCipher = Ndis802_11WEPEnabled; pAdapter->PortCfg.GroupCipher = Ndis802_11WEPEnabled; pAdapter->PortCfg.WepStatus = Ndis802_11WEPEnabled; } if (erq->flags & IW_ENCODE_RESTRICTED) pAdapter->PortCfg.AuthMode = Ndis802_11AuthModeShared; else if(erq->flags & IW_ENCODE_OPEN) pAdapter->PortCfg.AuthMode = Ndis802_11AuthModeOpen; if(pAdapter->PortCfg.WepStatus == Ndis802_11WEPDisabled) pAdapter->PortCfg.AuthMode = Ndis802_11AuthModeOpen; if ((erq->flags & IW_ENCODE_DISABLED) == 0 && erq->pointer) { /* Enable crypto. */ if (erq->length > IFNAMSIZ) return -EINVAL; /* Old solution to take default key */ index = (erq->flags & IW_ENCODE_INDEX) ; if((index < 0) || (index > NR_WEP_KEYS)) return -EINVAL; DBGPRINT(RT_DEBUG_TRACE," erq->flags = %x\n",erq->flags); if (index != 0) { pAdapter->PortCfg.DefaultKeyId = index -1; } if ((erq->length == 1) && (index == 0)) { /* New solution to take default key when old way not work, not change KeyMaterial*/ memcpy(&kid, erq->pointer, 1 ); if((index < 0) || (index >= NR_WEP_KEYS)) return -EINVAL; //WepKey.KeyIndex = 0x80000000 + index; DBGPRINT(RT_DEBUG_TRACE,"kid = %d , erq->length = %d\n",kid, erq->length); if (kid > 0) pAdapter->PortCfg.DefaultKeyId = kid-1; else pAdapter->PortCfg.DefaultKeyId = 0; } else { DBGPRINT(RT_DEBUG_TRACE,"DefaultKeyId = %d , erq->length = %d, flags 0x%x\n",pAdapter->PortCfg.DefaultKeyId, erq->length,erq->flags); len = erq->length; if(len > WEP_LARGE_KEY_LEN) len = WEP_LARGE_KEY_LEN; // If this instruction default key memset(pAdapter->PortCfg.SharedKey[pAdapter->PortCfg.DefaultKeyId].Key, 0, MAX_LEN_OF_KEY); memcpy(pAdapter->PortCfg.SharedKey[pAdapter->PortCfg.DefaultKeyId].Key, erq->pointer, len); memcpy(WepKey.KeyMaterial, erq->pointer, len); WepKey.KeyIndex = 0x80000000 + pAdapter->PortCfg.DefaultKeyId; WepKey.KeyLength = len; pAdapter->PortCfg.SharedKey[pAdapter->PortCfg.DefaultKeyId].KeyLen =(UCHAR) (len <= WEP_SMALL_KEY_LEN ? WEP_SMALL_KEY_LEN : WEP_LARGE_KEY_LEN); // need to enqueue cmd to thread RTUSBEnqueueCmdFromNdis(pAdapter, OID_802_11_ADD_WEP, TRUE, &WepKey, sizeof(WepKey)); } } DBGPRINT(RT_DEBUG_TRACE, "==>AuthMode=%x\n",pAdapter->PortCfg.AuthMode); DBGPRINT(RT_DEBUG_TRACE, "==>DefaultKeyId=%x, KeyLen = %d\n",pAdapter->PortCfg.DefaultKeyId , pAdapter->PortCfg.SharedKey[pAdapter->PortCfg.DefaultKeyId].KeyLen); DBGPRINT(RT_DEBUG_TRACE, "==>WepStatus=%x\n",pAdapter->PortCfg.WepStatus); return 0;}intrtusb_ioctl_giwencode(struct net_device *dev, struct iw_request_info *info, struct iw_point *erq, char *key){ PRT2570ADAPTER pAdapter = (PRT2570ADAPTER) dev->priv; int kid; kid = erq->flags & IW_ENCODE_INDEX; DBGPRINT(RT_DEBUG_TRACE, "===>rtusb_ioctl_giwencode %d\n", erq->flags & IW_ENCODE_INDEX); if (pAdapter->PortCfg.WepStatus == Ndis802_11WEPDisabled) { erq->length = 0; erq->flags = IW_ENCODE_DISABLED; return 0; } erq->flags = IW_ENCODE_ENABLED; if (pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeShared) erq->flags |= IW_ENCODE_RESTRICTED; else erq->flags |= IW_ENCODE_OPEN; if ((kid > 0) && (kid <=4)) { // copy wep key erq->flags |= kid & IW_ENCODE_INDEX; /* NB: base 1 */ if (erq->length > pAdapter->PortCfg.SharedKey[kid-1].KeyLen) erq->length = pAdapter->PortCfg.SharedKey[kid-1].KeyLen; memcpy(key, pAdapter->PortCfg.SharedKey[kid-1].Key, erq->length); } else if (kid == 0) { // copy default key ID erq->flags |= (pAdapter->PortCfg.DefaultKeyId + 1) & IW_ENCODE_INDEX; /* NB: base 1 */ erq->length = pAdapter->PortCfg.SharedKey[pAdapter->PortCfg.DefaultKeyId].KeyLen; memcpy(key, pAdapter->PortCfg.SharedKey[pAdapter->PortCfg.DefaultKeyId].Key, erq->length); } return 0;}static intrtusb_ioctl_setauth(struct net_device *dev, struct iw_request_info *info, void *w, char *extra){ PRT2570ADAPTER pAdapter = (PRT2570ADAPTER) dev->priv; int param = *(int *) extra; switch(param) { case 1: pAdapter->PortCfg.AuthMode = Ndis802_11AuthModeOpen; DBGPRINT(RT_DEBUG_TRACE, "===>rtusb_ioctl_setauth RTPRIV802_11AuthModeOpen\n"); break; case 2: pAdapter->PortCfg.AuthMode = Ndis802_11AuthModeShared; DBGPRINT(RT_DEBUG_TRACE, "===>rtusb_ioctl_setauth RTPRIV802_11AuthModeShared\n"); break; case 3: pAdapter->PortCfg.AuthMode = Ndis802_11AuthModeWPAPSK; pAdapter->PortCfg.WpaState = SS_START; DBGPRINT(RT_DEBUG_TRACE, "===>rtusb_ioctl_setauth RTPRIV802_11AuthModeWPAPSK\n"); break; case 4: pAdapter->PortCfg.AuthMode = Ndis802_11AuthModeWPANone; DBGPRINT(RT_DEBUG_TRACE, "===>rtusb_ioctl_setauth Ndis802_11AuthModeWPANone\n"); break; default: return -EOPNOTSUPP; } pAdapter->PortCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; return 0;}#if 0static int rtusb_ioctl_setkeyid(struct net_device *dev, struct iw_request_info *info, void *w, char *extra){ PRT2570ADAPTER pAdapter = (PRT2570ADAPTER) dev->priv; int param = *(int *)extra; USHORT Value; switch(param) { case 1: pAdapter->PortCfg.DefaultKeyId = 0; break; case 2: pAdapter->PortCfg.DefaultKeyId = 1; break; case 3: pAdapter->PortCfg.DefaultKeyId = 2; break; case 4: pAdapter->PortCfg.DefaultKeyId = 3; break; default: return -EOPNOTSUPP; } if (pAdapter->PortCfg.SharedKey[pAdapter->PortCfg.DefaultKeyId].KeyLen == 5) pAdapter->PortCfg.CipherAlg = CIPHER_WEP64; else pAdapter->PortCfg.CipherAlg = CIPHER_WEP128; RTUSBReadMACRegister(pAdapter, TXRX_CSR0, &Value); Value &= 0xfe00; Value |= ((LENGTH_802_11 << 3) | (pAdapter->PortCfg.CipherAlg)); RTUSBWriteMACRegister(pAdapter, TXRX_CSR0, Value); DBGPRINT(RT_DEBUG_TRACE, "===>DefaultKeyId = [%d]\n",pAdapter->PortCfg.DefaultKeyId); return 0;}#endifstatic intrtusb_ioctl_setencryp(struct net_device *dev, struct iw_request_info *info, void *w, char *extra){ PRT2570ADAPTER pAdapter = (PRT2570ADAPTER) dev->priv; int param = *(int *)extra; NDIS_802_11_WEP_STATUS WepStatus;//set by OID_802_11_WEP_STATUS DBGPRINT(RT_DEBUG_TRACE, "===>setencryp\n"); DBGPRINT(RT_DEBUG_TRACE, "===>info->cmd 0x%x \n",(info->cmd)); DBGPRINT(RT_DEBUG_TRACE, "===>info->flags 0x%x , param %x , extra %x\n",(info->flags), param,*extra); switch(param) { case 1: pAdapter->PortCfg.WepStatus= Ndis802_11WEPDisabled; pAdapter->PortCfg.PairCipher= Ndis802_11WEPDisabled; pAdapter->PortCfg.GroupCipher= Ndis802_11WEPDisabled; pAdapter->PortCfg.CipherAlg = CIPHER_NONE; WepStatus = Ndis802_11WEPDisabled; break; case 2: pAdapter->PortCfg.WepStatus= Ndis802_11Encryption1Enabled; pAdapter->PortCfg.PairCipher= Ndis802_11Encryption1Enabled; pAdapter->PortCfg.GroupCipher= Ndis802_11Encryption1Enabled; WepStatus = Ndis802_11Encryption1Enabled; break; case 3: pAdapter->PortCfg.WepStatus= Ndis802_11Encryption2Enabled; pAdapter->PortCfg.PairCipher= Ndis802_11Encryption2Enabled; pAdapter->PortCfg.GroupCipher= Ndis802_11Encryption2Enabled; pAdapter->PortCfg.CipherAlg = CIPHER_TKIP; WepStatus = Ndis802_11Encryption2Enabled; break; default: return -EOPNOTSUPP; } RTUSBEnqueueCmdFromNdis(pAdapter, OID_802_11_WEP_STATUS, TRUE, &WepStatus, sizeof(WepStatus)); return 0;}static intrtusb_ioctl_setwpapsk(struct net_device *dev, struct iw_request_info *info, void *w, char *extra){ PRT2570ADAPTER pAdapter = (PRT2570ADAPTER) dev->priv; NDIS_802_11_KEY Key; // rtusb_ioctl_setwpapsk accept > 16 chars, so data is passed through w instead of extra. struct iw_point *iwp = (struct iw_point *)w; UCHAR keyMaterial[80]; UCHAR keyMaterial2[80]; INT Status = NDIS_STATUS_SUCCESS; int i; DBGPRINT(RT_DEBUG_TRACE, "===>\n"); DBGPRINT(RT_DEBUG_TRACE, "===>info->cmd 0x%x \n",(info->cmd)); DBGPRINT(RT_DEBUG_TRACE, "===>info->flags 0x%x \n",(info->flags)); memset(Key.KeyMaterial, 0, 64); memset(keyMaterial2, 0, 80); memcpy(Key.BSSID, pAdapter->PortCfg.Bssid.Octet, 6); //memcpy(&Key.KeyRSC, pMsg3->KeyDesc.KeyRsc, LEN_KEY_DESC_RSC); if (iwp->length < 64) { if(copy_from_user(&keyMaterial2, iwp->pointer, iwp->length)) Status = -EINVAL; PasswordHash(keyMaterial2, pAdapter->Mlme.CntlAux.Ssid, pAdapter->Mlme.CntlAux.SsidLen, keyMaterial); Key.Length = sizeof(Key); Key.KeyIndex = 0x80000000; Key.KeyLength = 32; DBGPRINT_RAW(RT_DEBUG_TEMP,"pAdapter->Mlme.CntlAux.Ssid: "); for(i = 0; i < pAdapter->Mlme.CntlAux.SsidLen; i++) DBGPRINT_RAW(RT_DEBUG_TEMP,"%c ", pAdapter->Mlme.CntlAux.Ssid[i]); DBGPRINT_RAW(RT_DEBUG_TEMP,"\n"); memcpy(pAdapter->PortCfg.PskKey.Key, keyMaterial, 32); memcpy(Key.KeyMaterial, keyMaterial, 32); DBGPRINT_RAW(RT_DEBUG_TEMP,"WPAPSK Key : "); for(i = 0; i < 32; i++) DBGPRINT_RAW(RT_DEBUG_TEMP,"%x ", Key.KeyMaterial[i]); DBGPRINT_RAW(RT_DEBUG_TEMP,"\n"); } else if (iwp->length == 64) { if(copy_from_user(&keyMaterial2, iwp->pointer, iwp->length)) Status = -EINVAL; AtoH(Key.KeyMaterial, keyMaterial, 32); DBGPRINT_RAW(RT_DEBUG_TEMP,"WPAPSK Key : "); for(i = 0; i < 32; i++) DBGPRINT_RAW(RT_DEBUG_TEMP,"%x ", keyMaterial[i]); DBGPRINT_RAW(RT_DEBUG_TEMP,"\n"); memcpy(pAdapter->PortCfg.PskKey.Key, keyMaterial, 32); memcpy(Key.KeyMaterial, keyMaterial, 32); } else return -EOPNOTSUPP; RTUSBEnqueueCmdFromNdis(pAdapter, OID_802_11_ADD_KEY, TRUE, &Key, sizeof(Key)); pAdapter->PortCfg.WepStatus= Ndis802_11Encryption2Enabled; pAdapter->PortCfg.PairCipher= Ndis802_11Encryption2Enabled; pAdapter->PortCfg.GroupCipher= Ndis802_11Encryption2Enabled; pAdapter->PortCfg.CipherAlg= CIPHER_TKIP; // Start STA supplicant state machine return 0;}static int rtusb_ioctl_setrfmontx(struct net_device *dev, struct iw_request_info *info,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -