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

📄 rtmp_info.c

📁 TP Link 321 Linux Driver
💻 C
📖 第 1 页 / 共 5 页
字号:
	range->we_version_compiled = WIRELESS_EXT;	range->we_version_source = 14;		/* Retry limits and lifetime */	range->retry_capa = IW_RETRY_LIMIT; // What retry options are supported	range->retry_flags = IW_RETRY_LIMIT; // How to decode max/min retry limit	//range->r_time_flags = ; 	range->min_retry = 0; // Minimal number of retries	range->max_retry = 255; // 	//range->min_r_time = ;	//range->max_r_time = ;	/* Frequency */	range->num_channels = pAdapter->ChannelListNum;	// 1. For numbers lower than 10^9, we encode the number in 'm' and set 'e' to 0.	// 2. For number greater than 10^9, we divide it by the lowest power of 10 to get 'm' 	//     lower than 10^9, with 'm'= f / (10^'e')...	// 3. The power of 10 is in 'e', the result of the division is in 'm'.	for (val = 0, i = 1; i <= range->num_channels; i++) {		u32 m;		range->freq[val].i = pAdapter->ChannelList[i-1].Channel;		MAP_CHANNEL_ID_TO_KHZ(pAdapter->ChannelList[i-1].Channel, m);		range->freq[val].m = m * 100; /* HZ */				range->freq[val].e = 1;		val++;		if (val == IW_MAX_FREQUENCIES)			break;	}	range->num_frequency = val;#if WIRELESS_EXT > 17	/* IW_ENC_CAPA_* bit field */	range->enc_capa = IW_ENC_CAPA_WPA | IW_ENC_CAPA_WPA2 | 					IW_ENC_CAPA_CIPHER_TKIP | IW_ENC_CAPA_CIPHER_CCMP;#endif#if 0	over2 = 0;	len = prism2_get_datarates(dev, rates);	range->num_bitrates = 0;	for (i = 0; i < len; i++) {		if (range->num_bitrates < IW_MAX_BITRATES) {			range->bitrate[range->num_bitrates] =				rates[i] * 500000;			range->num_bitrates++;		}		if (rates[i] == 0x0b || rates[i] == 0x16)			over2 = 1;	}	/* estimated maximum TCP throughput values (bps) */	range->throughput = over2 ? 5500000 : 1500000;#endif	return 0;}// Set BSSID of APint rt_ioctl_siwap(struct net_device *dev,					struct iw_request_info *info,					union iwreq_data *wrqu, char *extra){	PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) dev->priv;	UCHAR Bssid[MAC_ADDR_LEN];    //check if the interface is down	if ((dev->flags & IFF_UP) == 0)		return -ENETDOWN;    if (pAd->RTUSBCmdThr_pid < 0)        return -ENETDOWN;	if (wrqu->ap_addr.sa_family != ARPHRD_ETHER)		return -EINVAL;#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT#if WIRELESS_EXT > 17	if (pAd->PortCfg.bNativeWpa == TRUE)  // add by johnli	{		if (pAd->PortCfg.wx_need_sync){			wext2Rtmp_Security_Wrapper(pAd);			pAd->PortCfg.wx_need_sync = 0;		}	}#endif#endif	NdisMoveMemory(&Bssid[0], wrqu->ap_addr.sa_data, MAC_ADDR_LEN);	if (pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE)	{		MlmeEnqueue(pAd, 					MLME_CNTL_STATE_MACHINE,					RT_CMD_RESET_MLME,					0,					NULL);		}		#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT	if (pAd->PortCfg.bNativeWpa == TRUE)  // add by johnli	{		if (NdisEqualMemory(wrqu->ap_addr.sa_data, "\x00\x00\x00\x00\x00\x00", MAC_ADDR_LEN))		{			if (INFRA_ON(pAd)) 			{				MLME_DISASSOC_REQ_STRUCT DisassocReq;									pAd->MlmeAux.CurrReqIsFromNdis = TRUE;				DBGPRINT(RT_DEBUG_TRACE, "CNTL - disassociate with current AP...\n");				DisassocParmFill(pAd, &DisassocReq, pAd->PortCfg.Bssid, REASON_DISASSOC_STA_LEAVING);				MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, 							sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq);				pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC;			}			return 0;		}	}#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //	MlmeEnqueue(pAd, 				MLME_CNTL_STATE_MACHINE, 				OID_802_11_BSSID, 				sizeof(NDIS_802_11_MAC_ADDRESS),				(VOID *)&Bssid);	DBGPRINT(RT_DEBUG_TRACE, "%s():IOCTL::SIOCSIWAP %02x:%02x:%02x:%02x:%02x:%02x\n",			__FUNCTION__, Bssid[0], Bssid[1], Bssid[2], Bssid[3], Bssid[4], Bssid[5]);	// Trigge rhr MlmeHandler because upper layer sent a MLME-related operations.	RTUSBMlmeUp(pAd);	return 0;	}// get BSSID of connected APint rt_ioctl_giwap(struct net_device *dev,			  struct iw_request_info *info,			  union iwreq_data *wrqu, char *extra){	PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;    if (pAdapter->RTUSBCmdThr_pid < 0)        return -ENETDOWN;	if (INFRA_ON(pAdapter) || ADHOC_ON(pAdapter))	{		wrqu->ap_addr.sa_family = ARPHRD_ETHER;		memcpy(wrqu->ap_addr.sa_data, &pAdapter->PortCfg.Bssid, ETH_ALEN);	}	else	{		memset(wrqu->ap_addr.sa_data, 0, ETH_ALEN);		DBGPRINT(RT_DEBUG_TRACE, "rt_ioctl_giwap():SIOCGIWAP(=EMPTY)\n");		return -ENOTCONN;	}	return 0;}/* * Units are in db above the noise floor. That means the * rssi values reported in the tx/rx descriptors in the * driver are the SNR expressed in db. * * If you assume that the noise floor is -95, which is an * excellent assumption 99.5 % of the time, then you can * derive the absolute signal level (i.e. -95 + rssi).  * There are some other slight factors to take into account * depending on whether the rssi measurement is from 11b, * 11g, or 11a.   These differences are at most 2db and * can be documented. * * NB: various calculations are based on the orinoco/wavelan *	   drivers for compatibility */static void set_quality(PRTMP_ADAPTER pAdapter,                        struct iw_quality *iq,                         u_int rssi){    u32 ChannelQuality, NorRssi;           // Normalize Rssi    if (rssi > 0x50)        NorRssi = 100;    else if (rssi  < 0x20)        NorRssi = 0;    else        NorRssi = (rssi  - 0x20) * 2;		    // ChannelQuality = W1*RSSI + W2*TxPRR + W3*RxPER	 (RSSI 0..100), (TxPER 100..0), (RxPER 100..0)    ChannelQuality = (RSSI_WEIGHTING * NorRssi + 					    TX_WEIGHTING * (100 - 0) + 				        RX_WEIGHTING* (100 - 0)) / 100;    if (ChannelQuality >= 100)        ChannelQuality = 100;            iq->qual = ChannelQuality;    #ifdef RTMP_EMBEDDED    iq->level = rt_abs(rssi);   // signal level (dBm)#else    iq->level = abs(rssi);      // signal level (dBm)#endif        iq->level += 256 - pAdapter->BbpRssiToDbmDelta;    iq->noise = (pAdapter->BbpWriteLatch[17] > pAdapter->BbpTuning.R17UpperBoundG) ? pAdapter->BbpTuning.R17UpperBoundG : ((ULONG) pAdapter->BbpWriteLatch[17]); 	// noise level (dBm)    iq->noise += 256 - 143;		    iq->updated = pAdapter->iw_stats.qual.updated;		}int rt_ioctl_iwaplist(struct net_device *dev,			struct iw_request_info *info,			struct iw_point *data, char *extra){	PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;	struct sockaddr addr[IW_MAX_AP];	struct iw_quality qual[IW_MAX_AP];	int i;	    if (pAdapter->RTUSBCmdThr_pid < 0)        return -ENETDOWN;	for (i = 0; i <IW_MAX_AP ; i++)	{		if (i >=  pAdapter->ScanTab.BssNr)			break;		addr[i].sa_family = ARPHRD_ETHER;			memcpy(addr[i].sa_data, &pAdapter->ScanTab.BssEntry[i].Bssid, MAC_ADDR_LEN);		set_quality(pAdapter, &qual[i], pAdapter->ScanTab.BssEntry[i].Rssi);	}	data->length = i;	memcpy(extra, &addr, i*sizeof(addr[0]));	data->flags = 1;		/* signal quality present (sort of) */	memcpy(extra + i*sizeof(addr[0]), &qual, i*sizeof(qual[i]));	return 0;}#ifdef SIOCGIWSCANint rt_ioctl_siwscan(struct net_device *dev,			struct iw_request_info *info,			union iwreq_data *wrqu, char *extra){	ULONG								Now;	PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;	int Status = NDIS_STATUS_SUCCESS;	//BOOLEAN		StateMachineTouched = FALSE;    //check if the interface is down    if ((dev->flags & IFF_UP) == 0)		return -ENETDOWN;	    if (pAdapter->RTUSBCmdThr_pid < 0)        return -ENETDOWN;	if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS))		return 0;	do{		Now = jiffies;		if ((OPSTATUS_TEST_FLAG(pAdapter, fOP_STATUS_MEDIA_STATE_CONNECTED)) &&			((pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPA) || 			(pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPAPSK) ||			(pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPA2) ||			(pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) &&			(pAdapter->PortCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED)			)		{			DBGPRINT(RT_DEBUG_TRACE, "!!! Link UP, Port Not Secured! ignore this set::OID_802_11_BSSID_LIST_SCAN\n");			Status = NDIS_STATUS_SUCCESS;			break;		}			if (pAdapter->Mlme.CntlMachine.CurrState != CNTL_IDLE  && (pAdapter->MLMEThr_pid > 0))		{			MlmeEnqueue(pAdapter,                         MLME_CNTL_STATE_MACHINE,                        RT_CMD_RESET_MLME,                        0,                        NULL);		}		// Reset Missed scan number		pAdapter->PortCfg.ScanCnt = 0;		pAdapter->PortCfg.LastScanTime = Now;		MlmeEnqueue(pAdapter, 					MLME_CNTL_STATE_MACHINE, 					OID_802_11_BSSID_LIST_SCAN, 					0, 					NULL);		RTUSBMlmeUp(pAdapter);		 		Status = NDIS_STATUS_SUCCESS;		//StateMachineTouched = TRUE;			}while(0);	return 0;}#define MAX_CUSTOM_LEN 64intrt_ioctl_giwscan(struct net_device *dev,			struct iw_request_info *info,			union iwreq_data *wrqu, char *extra){	PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;	int i=2, j;	char *current_ev = extra, *previous_ev = extra;	struct iw_event iwe;	BSS_ENTRY *pBssEntry;#if WIRELESS_EXT >= 17	char *end_buf = (char *)(extra + wrqu->data.length);#else	char *end_buf = extra + IW_SCAN_MAX_DATA;   // If wireless_ext < 18, the maxima length of scan result restricted on IW_SCAN_MAX_DATA.#endif	#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT // support bit rate, extended rate, quality and last beacon timing	char *p;	unsigned char *pExtRate, *pSupRate;		char rate;    int  k;	char custom[MAX_CUSTOM_LEN];/* remove by johnli#else	char *current_val;*/#endif		char *current_val;  // add by johnli	     if (pAdapter->RTUSBCmdThr_pid < 0)        return -ENETDOWN;	if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)){		/*		 * Still scanning, indicate the caller should try again.		 */		return -EAGAIN;	}		if (pAdapter->ScanTab.BssNr == 0)		 return -EAGAIN;	for (i = 0; i < pAdapter->ScanTab.BssNr; i++) 	{		if (current_ev >= end_buf)			break;		pBssEntry = (BSS_ENTRY *)&pAdapter->ScanTab.BssEntry[i];		//AP MAC address		//================================		memset(&iwe, 0, sizeof(iwe));		iwe.cmd = SIOCGIWAP;		iwe.u.ap_addr.sa_family = ARPHRD_ETHER;        memcpy(iwe.u.ap_addr.sa_data, pBssEntry->Bssid, ETH_ALEN);        previous_ev = current_ev;        current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe, IW_EV_ADDR_LEN);        if (current_ev == previous_ev)            break;		//Network Type(INFRA/ADHOC) 		//================================		memset(&iwe, 0, sizeof(iwe));		iwe.cmd = SIOCGIWMODE;		if (pBssEntry->BssType == Ndis802_11IBSS)			iwe.u.mode = IW_MODE_ADHOC;		else if (pBssEntry->BssType == Ndis802_11Infrastructure)			iwe.u.mode = IW_MODE_INFRA;		else			iwe.u.mode = IW_MODE_AUTO;		iwe.len = IW_EV_UINT_LEN;        previous_ev = current_ev;		current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe,  IW_EV_UINT_LEN);        if (current_ev == previous_ev)            break;				//ESSID			//================================		memset(&iwe, 0, sizeof(iwe));		iwe.cmd = SIOCGIWESSID;		iwe.u.data.length = pBssEntry->SsidLen;		iwe.u.data.flags = 1;         previous_ev = current_ev;		current_ev = iwe_stream_add_point(current_ev,end_buf, &iwe, pBssEntry->Ssid);        if (current_ev == previous_ev)            break;            		//Channel and Frequency		//================================		memset(&iwe, 0, sizeof(iwe));		iwe.cmd = SIOCGIWFREQ;		iwe.u.freq.m = pBssEntry->Channel;		iwe.u.freq.e = 0;		iwe.u.freq.i = 0;				previous_ev = current_ev;		current_ev = iwe_stream_add_event(current_ev,end_buf, &iwe, IW_EV_FREQ_LEN);        if (current_ev == previous_ev)            break;            		//Encyption		//================================		memset(&iwe, 0, sizeof(iwe));		iwe.cmd = SIOCGIWENCODE;		if (CAP_IS_PRIVACY_ON (pBssEntry->CapabilityInfo ))			iwe.u.data.flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY;		else			iwe.u.data.flags = IW_ENCODE_DISABLED;		iwe.u.data.length = 0;		        previous_ev = current_ev;        current_ev = iwe_stream_add_point(current_ev, end_buf, &iwe, 											(char *)pAdapter->SharedKey[pAdapter->PortCfg.DefaultKeyId].Key);        if (current_ev == previous_ev)            break;#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT			if (pAdapter->PortCfg.bNativeWpa == TRUE)  // add by johnli		{			// support bit rate			//================================			memset(&iwe, 0, sizeof(iwe));			iwe.cmd = SIOCGIWRATE;			iwe.u.bitrate.fixed = 0;			iwe.u.bitrate.disabled = 0;								pSupRate = (unsigned char *)&pBssEntry->SupRate[0]; 			pExtRate = (unsigned char *)&pBssEntry->ExtRate[0];

⌨️ 快捷键说明

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