📄 rt_profile.c
字号:
return NDIS_STATUS_FAILURE; tmpbuf = kmalloc(MAX_PARAM_BUFFER_SIZE, MEM_ALLOC_FLAG); if(tmpbuf == NULL) { kfree(buffer); return NDIS_STATUS_FAILURE; } src = PROFILE_PATH; // Save uid and gid used for filesystem access. // Set user and group to 0 (root) orgfsuid = current->fsuid; orgfsgid = current->fsgid; current->fsuid=current->fsgid = 0; orgfs = get_fs(); set_fs(KERNEL_DS); if (src && *src) { srcf = filp_open(src, O_RDONLY, 0); if (IS_ERR(srcf)) { DBGPRINT(RT_DEBUG_TRACE, ("--> Error %ld opening %s\n", -PTR_ERR(srcf),src)); } else { // The object must have a read method if (srcf->f_op && srcf->f_op->read) { memset(buffer, 0x00, MAX_INI_BUFFER_SIZE); retval=srcf->f_op->read(srcf, buffer, MAX_INI_BUFFER_SIZE, &srcf->f_pos); if (retval < 0) { DBGPRINT(RT_DEBUG_TRACE, ("--> Read %s error %d\n", src, -retval)); } else { // set file parameter to portcfg //CountryRegion if(RTMPGetKeyParameter("CountryRegion", tmpbuf, 25, buffer)) { pAd->CommonCfg.CountryRegion = (UCHAR) simple_strtol(tmpbuf, 0, 10); DBGPRINT(RT_DEBUG_TRACE, ("CountryRegion=%d\n", pAd->CommonCfg.CountryRegion)); } //CountryRegionABand if(RTMPGetKeyParameter("CountryRegionABand", tmpbuf, 25, buffer)) { pAd->CommonCfg.CountryRegionForABand= (UCHAR) simple_strtol(tmpbuf, 0, 10); DBGPRINT(RT_DEBUG_TRACE, ("CountryRegionABand=%d\n", pAd->CommonCfg.CountryRegionForABand)); } //CountryCode if(RTMPGetKeyParameter("CountryCode", tmpbuf, 25, buffer)) { NdisMoveMemory(pAd->CommonCfg.CountryCode, tmpbuf , 2); if (strlen(pAd->CommonCfg.CountryCode) != 0) { pAd->CommonCfg.CountryCode[2] = ' '; pAd->CommonCfg.bCountryFlag = TRUE; } DBGPRINT(RT_DEBUG_TRACE, ("CountryCode=%s\n", pAd->CommonCfg.CountryCode)); } //SSID if(RTMPGetKeyParameter("SSID", tmpbuf, 256, buffer)) {#ifdef CONFIG_STA_SUPPORT if (strlen(tmpbuf) <= 32) { pAd->CommonCfg.SsidLen = (UCHAR) strlen(tmpbuf); NdisZeroMemory(pAd->CommonCfg.Ssid, NDIS_802_11_LENGTH_SSID); NdisMoveMemory(pAd->CommonCfg.Ssid, tmpbuf, pAd->CommonCfg.SsidLen); pAd->MlmeAux.AutoReconnectSsidLen = pAd->CommonCfg.SsidLen; NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, NDIS_802_11_LENGTH_SSID); NdisMoveMemory(pAd->MlmeAux.AutoReconnectSsid, tmpbuf, pAd->MlmeAux.AutoReconnectSsidLen); pAd->MlmeAux.SsidLen = pAd->CommonCfg.SsidLen; NdisZeroMemory(pAd->MlmeAux.Ssid, NDIS_802_11_LENGTH_SSID); NdisMoveMemory(pAd->MlmeAux.Ssid, tmpbuf, pAd->MlmeAux.SsidLen); DBGPRINT(RT_DEBUG_TRACE, ("%s::(SSID=%s)\n", __FUNCTION__, tmpbuf)); }#endif // CONFIG_STA_SUPPORT // }#ifdef CONFIG_STA_SUPPORT //NetworkType if (RTMPGetKeyParameter("NetworkType", tmpbuf, 25, buffer)) { pAd->bConfigChanged = TRUE; if (strcmp(tmpbuf, "Adhoc") == 0) pAd->StaCfg.BssType = BSS_ADHOC; else //Default Infrastructure mode pAd->StaCfg.BssType = BSS_INFRA; // Reset Ralink supplicant to not use, it will be set to start when UI set PMK key pAd->StaCfg.WpaState = SS_NOTUSE; DBGPRINT(RT_DEBUG_TRACE, ("%s::(NetworkType=%d)\n", __FUNCTION__, pAd->StaCfg.BssType)); }#endif // CONFIG_STA_SUPPORT // //Channel if(RTMPGetKeyParameter("Channel", tmpbuf, 10, buffer)) { pAd->CommonCfg.Channel = (UCHAR) simple_strtol(tmpbuf, 0, 10); DBGPRINT(RT_DEBUG_TRACE, ("Channel=%d\n", pAd->CommonCfg.Channel)); } //WirelessMode if(RTMPGetKeyParameter("WirelessMode", tmpbuf, 10, buffer)) { int value = 0; value = simple_strtol(tmpbuf, 0, 10); if (value < 10) { pAd->CommonCfg.PhyMode = value; } DBGPRINT(RT_DEBUG_TRACE, ("PhyMode=%d\n", pAd->CommonCfg.PhyMode)); } //BasicRate if(RTMPGetKeyParameter("BasicRate", tmpbuf, 10, buffer)) { pAd->CommonCfg.BasicRateBitmap = (ULONG) simple_strtol(tmpbuf, 0, 10); DBGPRINT(RT_DEBUG_TRACE, ("BasicRate=%ld\n", pAd->CommonCfg.BasicRateBitmap)); } //BeaconPeriod if(RTMPGetKeyParameter("BeaconPeriod", tmpbuf, 10, buffer)) { pAd->CommonCfg.BeaconPeriod = (USHORT) simple_strtol(tmpbuf, 0, 10); DBGPRINT(RT_DEBUG_TRACE, ("BeaconPeriod=%d\n", pAd->CommonCfg.BeaconPeriod)); } //TxPower if(RTMPGetKeyParameter("TxPower", tmpbuf, 10, buffer)) { pAd->CommonCfg.TxPowerPercentage = (ULONG) simple_strtol(tmpbuf, 0, 10);#ifdef CONFIG_STA_SUPPORT pAd->CommonCfg.TxPowerDefault = pAd->CommonCfg.TxPowerPercentage;#endif // CONFIG_STA_SUPPORT // DBGPRINT(RT_DEBUG_TRACE, ("TxPower=%ld\n", pAd->CommonCfg.TxPowerPercentage)); } //BGProtection if(RTMPGetKeyParameter("BGProtection", tmpbuf, 10, buffer)) { switch (simple_strtol(tmpbuf, 0, 10)) { case 1: //Always On pAd->CommonCfg.UseBGProtection = 1; break; case 2: //Always OFF pAd->CommonCfg.UseBGProtection = 2; break; case 0: //AUTO default: pAd->CommonCfg.UseBGProtection = 0; break; } DBGPRINT(RT_DEBUG_TRACE, ("BGProtection=%ld\n", pAd->CommonCfg.UseBGProtection)); } //OLBCDetection if(RTMPGetKeyParameter("DisableOLBC", tmpbuf, 10, buffer)) { switch (simple_strtol(tmpbuf, 0, 10)) { case 1: //disable OLBC Detection pAd->CommonCfg.DisableOLBCDetect = 1; break; case 0: //enable OLBC Detection pAd->CommonCfg.DisableOLBCDetect = 0; break; default: pAd->CommonCfg.DisableOLBCDetect= 0; break; } DBGPRINT(RT_DEBUG_TRACE, ("OLBCDetection=%ld\n", pAd->CommonCfg.DisableOLBCDetect)); } //TxPreamble if(RTMPGetKeyParameter("TxPreamble", tmpbuf, 10, buffer)) { switch (simple_strtol(tmpbuf, 0, 10)) { case Rt802_11PreambleShort: pAd->CommonCfg.TxPreamble = Rt802_11PreambleShort; break; case Rt802_11PreambleLong: default: pAd->CommonCfg.TxPreamble = Rt802_11PreambleLong; break; } DBGPRINT(RT_DEBUG_TRACE, ("TxPreamble=%ld\n", pAd->CommonCfg.TxPreamble)); } //RTSThreshold if(RTMPGetKeyParameter("RTSThreshold", tmpbuf, 10, buffer)) { RtsThresh = simple_strtol(tmpbuf, 0, 10); if( (RtsThresh >= 1) && (RtsThresh <= MAX_RTS_THRESHOLD) ) pAd->CommonCfg.RtsThreshold = (USHORT)RtsThresh; else pAd->CommonCfg.RtsThreshold = MAX_RTS_THRESHOLD; DBGPRINT(RT_DEBUG_TRACE, ("RTSThreshold=%d\n", pAd->CommonCfg.RtsThreshold)); } //FragThreshold if(RTMPGetKeyParameter("FragThreshold", tmpbuf, 10, buffer)) { FragThresh = simple_strtol(tmpbuf, 0, 10); pAd->CommonCfg.bUseZeroToDisableFragment = FALSE; if (FragThresh > MAX_FRAG_THRESHOLD || FragThresh < MIN_FRAG_THRESHOLD) { //illegal FragThresh so we set it to default pAd->CommonCfg.FragmentThreshold = MAX_FRAG_THRESHOLD; pAd->CommonCfg.bUseZeroToDisableFragment = TRUE; } else pAd->CommonCfg.FragmentThreshold = (USHORT)FragThresh; //pAd->CommonCfg.AllowFragSize = (pAd->CommonCfg.FragmentThreshold) - LENGTH_802_11 - LENGTH_CRC; DBGPRINT(RT_DEBUG_TRACE, ("FragThreshold=%d\n", pAd->CommonCfg.FragmentThreshold)); } //TxBurst if(RTMPGetKeyParameter("TxBurst", tmpbuf, 10, buffer)) {//#ifdef WIFI_TEST// pAd->CommonCfg.bEnableTxBurst = FALSE;//#else if(simple_strtol(tmpbuf, 0, 10) != 0) //Enable pAd->CommonCfg.bEnableTxBurst = TRUE; else //Disable pAd->CommonCfg.bEnableTxBurst = FALSE;//#endif DBGPRINT(RT_DEBUG_TRACE, ("TxBurst=%d\n", pAd->CommonCfg.bEnableTxBurst)); }#ifdef AGGREGATION_SUPPORT //PktAggregate if(RTMPGetKeyParameter("PktAggregate", tmpbuf, 10, buffer)) { if(simple_strtol(tmpbuf, 0, 10) != 0) //Enable pAd->CommonCfg.bAggregationCapable = TRUE; else //Disable pAd->CommonCfg.bAggregationCapable = FALSE;#ifdef PIGGYBACK_SUPPORT pAd->CommonCfg.bPiggyBackCapable = pAd->CommonCfg.bAggregationCapable;#endif // PIGGYBACK_SUPPORT // DBGPRINT(RT_DEBUG_TRACE, ("PktAggregate=%d\n", pAd->CommonCfg.bAggregationCapable)); }#else pAd->CommonCfg.bAggregationCapable = FALSE; pAd->CommonCfg.bPiggyBackCapable = FALSE;#endif // AGGREGATION_SUPPORT // // WmmCapable rtmp_read_wmm_parms_from_file(pAd, tmpbuf, buffer); //ShortSlot if(RTMPGetKeyParameter("ShortSlot", tmpbuf, 10, buffer)) { if(simple_strtol(tmpbuf, 0, 10) != 0) //Enable pAd->CommonCfg.bUseShortSlotTime = TRUE; else //Disable pAd->CommonCfg.bUseShortSlotTime = FALSE; DBGPRINT(RT_DEBUG_TRACE, ("ShortSlot=%d\n", pAd->CommonCfg.bUseShortSlotTime)); } //IEEE80211H if(RTMPGetKeyParameter("IEEE80211H", tmpbuf, 10, buffer)) { for (i = 0, macptr = rstrtok(tmpbuf,";"); macptr; macptr = rstrtok(NULL,";"), i++) { if(simple_strtol(macptr, 0, 10) != 0) //Enable pAd->CommonCfg.bIEEE80211H = TRUE; else //Disable pAd->CommonCfg.bIEEE80211H = FALSE; DBGPRINT(RT_DEBUG_TRACE, ("IEEE80211H=%d\n", pAd->CommonCfg.bIEEE80211H)); } } //CSPeriod if(RTMPGetKeyParameter("CSPeriod", tmpbuf, 10, buffer)) { if(simple_strtol(tmpbuf, 0, 10) != 0) pAd->CommonCfg.RadarDetect.CSPeriod = simple_strtol(tmpbuf, 0, 10); else pAd->CommonCfg.RadarDetect.CSPeriod = 0; DBGPRINT(RT_DEBUG_TRACE, ("CSPeriod=%d\n", pAd->CommonCfg.RadarDetect.CSPeriod)); } //RDRegion if(RTMPGetKeyParameter("RDRegion", tmpbuf, 128, buffer)) { if ((strncmp(tmpbuf, "JAP_W53", 7) == 0) || (strncmp(tmpbuf, "jap_w53", 7) == 0)) { pAd->CommonCfg.RadarDetect.RDDurRegion = JAP_W53; pAd->CommonCfg.RadarDetect.DfsSessionTime = 15; } else if ((strncmp(tmpbuf, "JAP_W56", 7) == 0) || (strncmp(tmpbuf, "jap_w56", 7) == 0)) { pAd->CommonCfg.RadarDetect.RDDurRegion = JAP_W56; pAd->CommonCfg.RadarDetect.DfsSessionTime = 5; } else if ((strncmp(tmpbuf, "JAP", 3) == 0) || (strncmp(tmpbuf, "jap", 3) == 0)) { pAd->CommonCfg.RadarDetect.RDDurRegion = JAP; pAd->CommonCfg.RadarDetect.DfsSessionTime = 5; } else if ((strncmp(tmpbuf, "FCC", 3) == 0) || (strncmp(tmpbuf, "fcc", 3) == 0)) { pAd->CommonCfg.RadarDetect.RDDurRegion = FCC; pAd->CommonCfg.RadarDetect.DfsSessionTime = 5; } else if ((strncmp(tmpbuf, "CE", 2) == 0) || (strncmp(tmpbuf, "ce", 2) == 0)) { pAd->CommonCfg.RadarDetect.RDDurRegion = CE; pAd->CommonCfg.RadarDetect.DfsSessionTime = 13; } else { pAd->CommonCfg.RadarDetect.RDDurRegion = CE; pAd->CommonCfg.RadarDetect.DfsSessionTime = 13; } DBGPRINT(RT_DEBUG_TRACE, ("RDRegion=%d\n", pAd->CommonCfg.RadarDetect.RDDurRegion)); } else { pAd->CommonCfg.RadarDetect.RDDurRegion = CE; pAd->CommonCfg.RadarDetect.DfsSessionTime = 13; } //WirelessEvent if(RTMPGetKeyParameter("WirelessEvent", tmpbuf, 10, buffer)) { #if WIRELESS_EXT >= 15 if(simple_strtol(tmpbuf, 0, 10) != 0) pAd->CommonCfg.bWirelessEvent = simple_strtol(tmpbuf, 0, 10); else pAd->CommonCfg.bWirelessEvent = 0; // disable#else pAd->CommonCfg.bWirelessEvent = 0; // disable#endif DBGPRINT(RT_DEBUG_TRACE, ("WirelessEvent=%d\n", pAd->CommonCfg.bWirelessEvent)); } if(RTMPGetKeyParameter("WiFiTest", tmpbuf, 10, buffer)) { if(simple_strtol(tmpbuf, 0, 10) != 0) pAd->CommonCfg.bWiFiTest= simple_strtol(tmpbuf, 0, 10); else pAd->CommonCfg.bWiFiTest = 0; // disable DBGPRINT(RT_DEBUG_TRACE, ("WiFiTest=%d\n", pAd->CommonCfg.bWiFiTest)); } //AuthMode if(RTMPGetKeyParameter("AuthMode", tmpbuf, 128, buffer)) {#ifdef CONFIG_STA_SUPPORT if ((strcmp(tmpbuf, "WEPAUTO") == 0) || (strcmp(tmpbuf, "wepauto") == 0)) pAd->StaCfg.AuthMode = Ndis802_11AuthModeAutoSwitch; else if ((strcmp(tmpbuf, "SHARED") == 0) || (strcmp(tmpbuf, "shared") == 0)) pAd->StaCfg.AuthMode = Ndis802_11AuthModeShared; else if ((strcmp(tmpbuf, "WPAPSK") == 0) || (strcmp(tmpbuf, "wpapsk") == 0)) pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPAPSK; else if ((strcmp(tmpbuf, "WPANONE") == 0) || (strcmp(tmpbuf, "wpanone") == 0)) pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPANone; else if ((strcmp(tmpbuf, "WPA2PSK") == 0) || (strcmp(tmpbuf, "wpa2psk") == 0)) pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPA2PSK; else pAd->StaCfg.AuthMode = Ndis802_11AuthModeOpen; pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; //RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, 0); DBGPRINT(RT_DEBUG_TRACE, ("%s::(EncrypType=%d)\n", __FUNCTION__, pAd->StaCfg.WepStatus));#endif // CONFIG_STA_SUPPORT // } //EncrypType if(RTMPGetKeyParameter("EncrypType", tmpbuf, 128, buffer)) {#ifdef CONFIG_STA_SUPPORT if ((strcmp(tmpbuf, "WEP") == 0) || (strcmp(tmpbuf, "wep") == 0)) pAd->StaCfg.WepStatus = Ndis802_11WEPEnabled; else if ((strcmp(tmpbuf, "TKIP") == 0) || (strcmp(tmpbuf, "tkip") == 0)) pAd->StaCfg.WepStatus = Ndis802_11Encryption2Enabled; else if ((strcmp(tmpbuf, "AES") == 0) || (strcmp(tmpbuf, "aes") == 0)) pAd->StaCfg.WepStatus = Ndis802_11Encryption3Enabled; else pAd->StaCfg.WepStatus = Ndis802_11WEPDisabled; // Update all wepstatus related pAd->StaCfg.PairCipher = pAd->StaCfg.WepStatus; pAd->StaCfg.GroupCipher = pAd->StaCfg.WepStatus; pAd->StaCfg.OrigWepStatus = pAd->StaCfg.WepStatus; pAd->StaCfg.bMixCipher = FALSE; //RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, 0); DBGPRINT(RT_DEBUG_TRACE, ("%s::(EncrypType=%d)\n", __FUNCTION__, pAd->StaCfg.WepStatus));#endif // CONFIG_STA_SUPPORT // } //WPAPSK_KEY if(RTMPGetKeyParameter("WPAPSK", tmpbuf, 512, buffer)) {#ifdef CONFIG_STA_SUPPORT int err=0; tmpbuf[strlen(tmpbuf)] = '\0'; // make STA can process .$^& for WPAPSK input if ((pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPAPSK) && (pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPA2PSK) && (pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPANone) ) { err = 1; } else if ((strlen(tmpbuf) >= 8) && (strlen(tmpbuf) < 64)) { PasswordHash((char *)tmpbuf, pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen, keyMaterial); NdisMoveMemory(pAd->StaCfg.PMK, keyMaterial, 32); } else if (strlen(tmpbuf) == 64) { AtoH(tmpbuf, keyMaterial, 32); NdisMoveMemory(pAd->StaCfg.PMK, keyMaterial, 32); } else { err = 1; DBGPRINT(RT_DEBUG_ERROR, ("%s::(WPAPSK key-string required 8 ~ 64 characters!)\n", __FUNCTION__)); } if (err == 0) { if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) { // Start STA supplicant state machine pAd->StaCfg.WpaState = SS_START; } else if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) {/* NdisZeroMemory(&pAd->SharedKey[BSS0][0], sizeof(CIPHER_KEY)); pAd->SharedKey[BSS0][0].KeyLen = LEN_TKIP_EK; NdisMoveMemory(pAd->SharedKey[BSS0][0].Key, pAd->StaCfg.PMK, LEN_TKIP_EK); NdisMoveMemory(pAd->SharedKey[BSS0][0].RxMic, &pAd->StaCfg.PMK[16], LEN_TKIP_RXMICK); NdisMoveMemory(pAd->SharedKey[BSS0][0].TxMic, &pAd->StaCfg.PMK[16], LEN_TKIP_TXMICK); // Decide its ChiperAlg if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_TKIP; else if (pAd->StaCfg.PairCipher == Ndis802_11Encryption3Enabled) pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_AES; else pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_NONE;*/ pAd->StaCfg.WpaState = SS_NOTUSE; } DBGPRINT(RT_DEBUG_TRACE, ("%s::(WPAPSK=%s)\n", __FUNCTION__, tmpbuf)); } #endif // CONFIG_STA_SUPPORT // } //DefaultKeyID, KeyType, KeyStr rtmp_read_key_parms_from_file(pAd, tmpbuf, buffer); //HSCounter /*if(RTMPGetKeyParameter("HSCounter", tmpbuf, 10, buffer)) { switch (simple_strtol(tmpbuf, 0, 10)) { case 1: //Enable pAd->CommonCfg.bEnableHSCounter = TRUE; break; case 0: //Disable default: pAd->CommonCfg.bEnableHSCounter = FALSE; break; } DBGPRINT(RT_DEBUG_TRACE, "HSCounter=%d\n", pAd->CommonCfg.bEnableHSCounter); }*/ HTParametersHook(pAd, tmpbuf, buffer);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -