📄 cmm_info.c
字号:
return; } // 1. In ADHOC mode, the AID is wcid number. And NO mesh link exists. // 2. In Infra mode, the AID:1 MUST be wcid of infra STA. // the AID:2~ assign to mesh link entry. if (pEntry) Wcid = pEntry->Aid; else Wcid = MCAST_WCID; }#endif // CONFIG_STA_SUPPORT // } // Update WCID attribute table offset = MAC_WCID_ATTRIBUTE_BASE + (Wcid * HW_WCID_ATTRI_SIZE);#ifdef CONFIG_STA_SUPPORT IF_DEV_CONFIG_OPMODE_ON_STA(pAd) { if (pEntry && pEntry->ValidAsMesh) WCIDAttri = (CipherAlg<<1) | PAIRWISEKEYTABLE;#ifdef QOS_DLS_SUPPORT else if ((pEntry) && (pEntry->ValidAsDls) && ((CipherAlg == CIPHER_TKIP) || (CipherAlg == CIPHER_TKIP_NO_MIC) || (CipherAlg == CIPHER_AES) || (CipherAlg == CIPHER_NONE))) WCIDAttri = (CipherAlg<<1) | PAIRWISEKEYTABLE;#endif // QOS_DLS_SUPPORT // else WCIDAttri = (CipherAlg<<1) | SHAREDKEYTABLE; }#endif // CONFIG_STA_SUPPORT // RTMP_IO_WRITE32(pAd, offset, WCIDAttri); // Update IV/EIV table offset = MAC_IVEIV_TABLE_BASE + (Wcid * HW_IVEIV_ENTRY_SIZE); // WPA mode if ((CipherAlg == CIPHER_TKIP) || (CipherAlg == CIPHER_TKIP_NO_MIC) || (CipherAlg == CIPHER_AES)) { // Eiv bit on. keyid always is 0 for pairwise key IVEIV = (KeyIdx <<6) | 0x20; } else { // WEP KeyIdx is default tx key. IVEIV = (KeyIdx << 6); } // For key index and ext IV bit, so only need to update the position(offset+3).#ifdef RTMP_MAC_USB RTUSBMultiWrite_OneByte(pAd, offset+3, &IVEIV);#endif // RTMP_MAC_USB // DBGPRINT(RT_DEBUG_TRACE,("RTMPAddWcidAttributeEntry: WCID #%d, KeyIndex #%d, Alg=%s\n",Wcid, KeyIdx, CipherName[CipherAlg])); DBGPRINT(RT_DEBUG_TRACE,(" WCIDAttri = 0x%x \n", WCIDAttri)); }/* ========================================================================== Description: Parse encryption typeArguments: pAdapter Pointer to our adapter wrq Pointer to the ioctl argument Return Value: None Note: ==========================================================================*/PSTRING GetEncryptType(CHAR enc){ if(enc == Ndis802_11WEPDisabled) return "NONE"; if(enc == Ndis802_11WEPEnabled) return "WEP"; if(enc == Ndis802_11Encryption2Enabled) return "TKIP"; if(enc == Ndis802_11Encryption3Enabled) return "AES"; if(enc == Ndis802_11Encryption4Enabled) return "TKIPAES"; else return "UNKNOW";}PSTRING GetAuthMode(CHAR auth){ if(auth == Ndis802_11AuthModeOpen) return "OPEN"; if(auth == Ndis802_11AuthModeShared) return "SHARED"; if(auth == Ndis802_11AuthModeAutoSwitch) return "AUTOWEP"; if(auth == Ndis802_11AuthModeWPA) return "WPA"; if(auth == Ndis802_11AuthModeWPAPSK) return "WPAPSK"; if(auth == Ndis802_11AuthModeWPANone) return "WPANONE"; if(auth == Ndis802_11AuthModeWPA2) return "WPA2"; if(auth == Ndis802_11AuthModeWPA2PSK) return "WPA2PSK"; if(auth == Ndis802_11AuthModeWPA1WPA2) return "WPA1WPA2"; if(auth == Ndis802_11AuthModeWPA1PSKWPA2PSK) return "WPA1PSKWPA2PSK"; return "UNKNOW";} /* ========================================================================== Description: Get site survey results Arguments: pAdapter Pointer to our adapter wrq Pointer to the ioctl argument Return Value: None Note: Usage: 1.) UI needs to wait 4 seconds after issue a site survey command 2.) iwpriv ra0 get_site_survey 3.) UI needs to prepare at least 4096bytes to get the results ==========================================================================*/#define LINE_LEN (4+33+20+23+9+7+3) // Channel+SSID+Bssid+Security+Signal+WiressMode+NetworkType#ifdef CONFIG_STA_SUPPORT#endif // CONFIG_STA_SUPPORT //VOID RTMPCommSiteSurveyData( IN PSTRING msg, IN PBSS_ENTRY pBss){ INT Rssi = 0; UINT Rssi_Quality = 0; NDIS_802_11_NETWORK_TYPE wireless_mode; CHAR Ssid[MAX_LEN_OF_SSID +1]; STRING SecurityStr[32] = {0}; NDIS_802_11_ENCRYPTION_STATUS ap_cipher = Ndis802_11EncryptionDisabled; NDIS_802_11_AUTHENTICATION_MODE ap_auth_mode = Ndis802_11AuthModeOpen; memset(Ssid, 0 ,(MAX_LEN_OF_SSID +1)); //Channel sprintf(msg+strlen(msg),"%-4d", pBss->Channel); //SSID memcpy(Ssid, pBss->Ssid, pBss->SsidLen); Ssid[pBss->SsidLen] = '\0'; sprintf(msg+strlen(msg),"%-33s", Ssid); //BSSID sprintf(msg+strlen(msg),"%02x:%02x:%02x:%02x:%02x:%02x ", pBss->Bssid[0], pBss->Bssid[1], pBss->Bssid[2], pBss->Bssid[3], pBss->Bssid[4], pBss->Bssid[5]); //Security if ((Ndis802_11AuthModeWPA <= pBss->AuthMode) && (pBss->AuthMode <= Ndis802_11AuthModeWPA1PSKWPA2PSK)) { if (pBss->AuthModeAux == Ndis802_11AuthModeWPANone) { ap_auth_mode = pBss->AuthMode; if (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled) ap_cipher = pBss->WPA.PairCipher; else ap_cipher = Ndis802_11Encryption4Enabled; } else if (pBss->AuthModeAux == Ndis802_11AuthModeOpen) { ap_auth_mode = pBss->AuthMode; if ((ap_auth_mode == Ndis802_11AuthModeWPA) || (ap_auth_mode == Ndis802_11AuthModeWPAPSK)) { if (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled) ap_cipher = pBss->WPA.PairCipher; else ap_cipher = Ndis802_11Encryption4Enabled; } else if ((ap_auth_mode == Ndis802_11AuthModeWPA2) || (ap_auth_mode == Ndis802_11AuthModeWPA2PSK)) { if (pBss->WPA2.PairCipherAux == Ndis802_11WEPDisabled) ap_cipher = pBss->WPA2.PairCipher; else ap_cipher = Ndis802_11Encryption4Enabled; } } else if ((pBss->AuthMode == Ndis802_11AuthModeWPAPSK) || (pBss->AuthMode == Ndis802_11AuthModeWPA2PSK)) { if ((pBss->AuthModeAux == Ndis802_11AuthModeWPAPSK) || (pBss->AuthModeAux == Ndis802_11AuthModeWPA2PSK)) ap_auth_mode = Ndis802_11AuthModeWPA1PSKWPA2PSK; else ap_auth_mode = pBss->AuthMode; if (pBss->WPA.PairCipher != pBss->WPA2.PairCipher) ap_cipher = Ndis802_11Encryption4Enabled; else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && (pBss->WPA.PairCipherAux != pBss->WPA2.PairCipherAux)) ap_cipher = Ndis802_11Encryption4Enabled; else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && (pBss->WPA.PairCipherAux == pBss->WPA2.PairCipherAux) && (pBss->WPA.PairCipherAux != Ndis802_11WEPDisabled)) ap_cipher = Ndis802_11Encryption4Enabled; else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && (pBss->WPA.PairCipherAux == pBss->WPA2.PairCipherAux) && (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled)) ap_cipher = pBss->WPA.PairCipher; } else if ((pBss->AuthMode == Ndis802_11AuthModeWPA) || (pBss->AuthMode == Ndis802_11AuthModeWPA2)) { if ((pBss->AuthModeAux == Ndis802_11AuthModeWPA) || (pBss->AuthMode == Ndis802_11AuthModeWPA2)) ap_auth_mode = Ndis802_11AuthModeWPA1WPA2; else ap_auth_mode = pBss->AuthMode; if (pBss->WPA.PairCipher != pBss->WPA2.PairCipher) ap_cipher = Ndis802_11Encryption4Enabled; else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && (pBss->WPA.PairCipherAux != pBss->WPA2.PairCipherAux)) ap_cipher = Ndis802_11Encryption4Enabled; else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && (pBss->WPA.PairCipherAux == pBss->WPA2.PairCipherAux) && (pBss->WPA.PairCipherAux != Ndis802_11WEPDisabled)) ap_cipher = Ndis802_11Encryption4Enabled; else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && (pBss->WPA.PairCipherAux == pBss->WPA2.PairCipherAux) && (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled)) ap_cipher = pBss->WPA.PairCipher; } sprintf(SecurityStr, "%s/%s", GetAuthMode((CHAR)ap_auth_mode), GetEncryptType((CHAR)ap_cipher)); } else { ap_auth_mode = pBss->AuthMode; ap_cipher = pBss->WepStatus; if (ap_cipher == Ndis802_11WEPDisabled) sprintf(SecurityStr, "NONE"); else if (ap_cipher == Ndis802_11WEPEnabled) sprintf(SecurityStr, "WEP"); else sprintf(SecurityStr, "%s/%s", GetAuthMode((CHAR)ap_auth_mode), GetEncryptType((CHAR)ap_cipher)); } sprintf(msg+strlen(msg), "%-23s", SecurityStr); // Rssi Rssi = (INT)pBss->Rssi; if (Rssi >= -50) Rssi_Quality = 100; else if (Rssi >= -80) // between -50 ~ -80dbm Rssi_Quality = (UINT)(24 + ((Rssi + 80) * 26)/10); else if (Rssi >= -90) // between -80 ~ -90dbm Rssi_Quality = (UINT)(((Rssi + 90) * 26)/10); else // < -84 dbm Rssi_Quality = 0; sprintf(msg+strlen(msg),"%-9d", Rssi_Quality); // Wireless Mode wireless_mode = NetworkTypeInUseSanity(pBss); if (wireless_mode == Ndis802_11FH || wireless_mode == Ndis802_11DS) sprintf(msg+strlen(msg),"%-7s", "11b"); else if (wireless_mode == Ndis802_11OFDM5) sprintf(msg+strlen(msg),"%-7s", "11a"); else if (wireless_mode == Ndis802_11OFDM5_N) sprintf(msg+strlen(msg),"%-7s", "11a/n"); else if (wireless_mode == Ndis802_11OFDM24) sprintf(msg+strlen(msg),"%-7s", "11b/g"); else if (wireless_mode == Ndis802_11OFDM24_N) sprintf(msg+strlen(msg),"%-7s", "11b/g/n"); else sprintf(msg+strlen(msg),"%-7s", "unknow"); //Network Type if (pBss->BssType == BSS_ADHOC) sprintf(msg+strlen(msg),"%-3s", " Ad"); else sprintf(msg+strlen(msg),"%-3s", " In"); sprintf(msg+strlen(msg),"\n"); return;}VOID RTMPIoctlGetSiteSurvey( IN PRTMP_ADAPTER pAdapter, IN struct iwreq *wrq){ PSTRING msg; INT i=0; INT WaitCnt; INT Status=0; INT max_len = LINE_LEN; PBSS_ENTRY pBss;#ifdef CONFIG_STA_SUPPORT#endif // CONFIG_STA_SUPPORT // os_alloc_mem(NULL, (PUCHAR *)&msg, sizeof(CHAR)*((MAX_LEN_OF_BSS_TABLE)*max_len)); if (msg == NULL) { DBGPRINT(RT_DEBUG_TRACE, ("RTMPIoctlGetSiteSurvey - msg memory alloc fail.\n")); return; } memset(msg, 0 ,(MAX_LEN_OF_BSS_TABLE)*max_len ); sprintf(msg,"%s","\n"); sprintf(msg+strlen(msg),"%-4s%-33s%-20s%-23s%-9s%-7s%-3s\n", "Ch", "SSID", "BSSID", "Security", "Siganl(%)", "W-Mode", " NT"); #ifdef CONFIG_STA_SUPPORT#endif // CONFIG_STA_SUPPORT // WaitCnt = 0;#ifdef CONFIG_STA_SUPPORT pAdapter->StaCfg.bScanReqIsFromWebUI = TRUE; while ((ScanRunning(pAdapter) == TRUE) && (WaitCnt++ < 200)) OS_WAIT(500); #endif // CONFIG_STA_SUPPORT // for(i=0; i<pAdapter->ScanTab.BssNr ;i++) { pBss = &pAdapter->ScanTab.BssEntry[i]; if( pBss->Channel==0) break; if((strlen(msg)+max_len ) >= IW_SCAN_MAX_DATA) break; RTMPCommSiteSurveyData(msg, pBss); #ifdef CONFIG_STA_SUPPORT#endif // CONFIG_STA_SUPPORT // }#ifdef CONFIG_STA_SUPPORT pAdapter->StaCfg.bScanReqIsFromWebUI = FALSE;#endif // CONFIG_STA_SUPPORT // wrq->u.data.length = strlen(msg); Status = copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length); DBGPRINT(RT_DEBUG_TRACE, ("RTMPIoctlGetSiteSurvey - wrq->u.data.length = %d\n", wrq->u.data.length)); os_free_mem(NULL, (PUCHAR)msg); }#define MAC_LINE_LEN (14+4+4+10+10+10+6+6) // Addr+aid+psm+datatime+rxbyte+txbyte+current tx rate+last tx rateVOID RTMPIoctlGetMacTable( IN PRTMP_ADAPTER pAd, IN struct iwreq *wrq){ INT i; RT_802_11_MAC_TABLE MacTab; char *msg; MacTab.Num = 0; for (i=0; i<MAX_LEN_OF_MAC_TABLE; i++) { if (pAd->MacTab.Content[i].ValidAsCLI && (pAd->MacTab.Content[i].Sst == SST_ASSOC)) { COPY_MAC_ADDR(MacTab.Entry[MacTab.Num].Addr, &pAd->MacTab.Content[i].Addr); MacTab.Entry[MacTab.Num].Aid = (UCHAR)pAd->MacTab.Content[i].Aid; MacTab.Entry[MacTab.Num].Psm = pAd->MacTab.Content[i].PsMode;#ifdef DOT11_N_SUPPORT MacTab.Entry[MacTab.Num].MimoPs = pAd->MacTab.Content[i].MmpsMode;#endif // DOT11_N_SUPPORT // // Fill in RSSI per entry MacTab.Entry[MacTab.Num].AvgRssi0 = pAd->MacTab.Content[i].RssiSample.AvgRssi0; MacTab.Entry[MacTab.Num].AvgRssi1 = pAd->MacTab.Content[i].RssiSample.AvgRssi1; MacTab.Entry[MacTab.Num].AvgRssi2 = pAd->MacTab.Content[i].RssiSample.AvgRssi2; // the connected time per entry MacTab.Entry[MacTab.Num].ConnectedTime = pAd->MacTab.Content[i].StaConnectTime; MacTab.Entry[MacTab.Num].TxRate.field.MCS = pAd->MacTab.Content[i].HTPhyMode.field.MCS; MacTab.Entry[MacTab.Num].TxRate.field.BW = pAd->MacTab.Content[i].HTPhyMode.field.BW; MacTab.Entry[MacTab.Num].TxRate.field.ShortGI = pAd->MacTab.Content[i].HTPhyMode.field.ShortGI; MacTab.Entry[MacTab.Num].TxRate.field.STBC = pAd->MacTab.Content[i].HTPhyMode.field.STBC; MacTab.Entry[MacTab.Num].TxRate.field.rsv = pAd->MacTab.Content[i].HTPhyMode.field.rsv; MacTab.Entry[MacTab.Num].TxRate.field.MODE = pAd->MacTab.Content[i].HTPhyMode.field.MODE; MacTab.Entry[MacTab.Num].TxRate.word = pAd->MacTab.Content[i].HTPhyMode.word; MacTab.Num += 1; } } wrq->u.data.length = sizeof(RT_802_11_MAC_TABLE); if (copy_to_user(wrq->u.data.pointer, &MacTab, wrq->u.data.length)) { DBGPRINT(RT_DEBUG_TRACE, ("%s: copy_to_user() fail\n", __FUNCTION__)); } msg = kmalloc(sizeof(CHAR)*(MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN), MEM_ALLOC_FLAG); if (msg == NULL) { DBGPRINT(RT_DEBUG_ERROR, ("%s():Alloc memory failed\n", __FUNCTION__)); return; } memset(msg, 0 ,MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN ); sprintf(msg,"%s","\n"); sprintf(msg+strlen(msg),"%-14s%-4s%-4s%-10s%-10s%-10s%-6s%-6s\n", "MAC", "AID", "PSM", "LDT", "RxB", "TxB","CTxR", "LTxR"); for (i=0; i<MAX_LEN_OF_MAC_TABLE; i++) { PMAC_TABLE_ENTRY pEntry = &pAd->MacTab.Content[i]; if (
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -