亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? zdpsmon.c

?? GW-US54GXS_Linux_v2.15.0.0_CE zd1211原碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
#ifndef __ZDPSMON_C__
#define __ZDPSMON_C__

#include "zd80211.h"
#include "zddebug.h"

#define GetEntry(pMac)		(((pMac->mac[3]) ^ (pMac->mac[4]) ^ (pMac->mac[5])) & (MAX_AID-1))

Hash_t *FreeHashList;
Hash_t HashBuf[MAX_RECORD];
Hash_t *HashTbl[MAX_RECORD];
Hash_t *sstByAid[MAX_RECORD];
U32 freeHashCount;

extern void zd1205_config_dyn_key(u8 DynKeyMode, u8 *pkey, int idx);
Hash_t *HashInsert(MacAddr_t *pMac);

void CleanupHash(Hash_t *hash)
{
	memset(hash->mac, 0, 6);
	hash->asoc = STATION_STATE_DIS_ASOC;
	hash->auth = STATION_STATE_NOT_AUTH;
	hash->psm = PSMODE_STA_ACTIVE;
	hash->encryMode = WEP_NOT_USED;
	hash->ZydasMode = 0;
	hash->pkInstalled = 0;
	hash->AlreadyIn = 0;
	hash->ContSuccFrames = 0;
	hash->ttl = 0;
	hash->bValid = FALSE;
	hash->Preamble = 0;
	hash->keyLength = 0;
	hash->KeyId = 0;
	memset(hash->wepIv, 0, 4);
	memset(&hash->TxSeed, 0, sizeof(Seedvar));
	memset(&hash->RxSeed, 0, sizeof(Seedvar));
	memset(&hash->TxMicKey, 0, sizeof(MICvar));
	memset(&hash->RxMicKey, 0, sizeof(MICvar));
	hash->SuccessFrames = 0;
	hash->FailedFrames = 0;
	hash->bJustRiseRate = FALSE;
	hash->RiseConditionCount = 0;
	hash->DownConditionCount = 0;
	hash->vapId = 0;
#if defined(OFDM)
	hash->bErpSta = TRUE;
#else
	hash->bErpSta = FALSE; 
#endif	
}	


void CleanupKeyInfo(Hash_t *hash)
{
	hash->encryMode = WEP_NOT_USED;
	hash->pkInstalled = 0;
	hash->keyLength = 0;
	hash->KeyId = 0;
	memset(hash->wepIv, 0, 4);
	memset(&hash->TxSeed, 0, sizeof(Seedvar));
	memset(&hash->RxSeed, 0, sizeof(Seedvar));
	memset(&hash->TxMicKey, 0, sizeof(MICvar));
	memset(&hash->RxMicKey, 0, sizeof(MICvar));
}	


void initHashBuf(void)
{
	int i;

	freeHashCount = MAX_RECORD;

	for (i=0; i<MAX_AID; i++){ //from 0 to 31
		HashBuf[i].pNext = &HashBuf[i+1];
		sstByAid[i] = &HashBuf[i];
		HashBuf[i].aid = i;
		CleanupHash(&HashBuf[i]);
	}
	
	//aid 32 is here
	HashBuf[MAX_AID].pNext = NULL;
	sstByAid[MAX_AID] = &HashBuf[MAX_AID];
	HashBuf[MAX_AID].aid = MAX_AID;
	CleanupHash(&HashBuf[MAX_AID]);

	FreeHashList = &HashBuf[1]; //by pass aid = 0
	
	//deal with aid = 0
	HashBuf[0].pNext = NULL;
}


Hash_t *allocHashBuf(void)
{
	Hash_t *hash = NULL;
	U32 flags;	
	
	//HSDEBUG("*****allocHashBuf*****");
	flags = pdot11Obj->EnterCS();
	if (FreeHashList != NULL){
		hash = FreeHashList;
		FreeHashList = FreeHashList->pNext;
		hash->pNext = NULL;
		freeHashCount--;
	}
	pdot11Obj->ExitCS(flags);
	return hash;
}



void freeHashBuf(Hash_t *hash)
{
	U32 flags;
	
	//HSDEBUG("*****freeHashBuf*****");
	flags = pdot11Obj->EnterCS();
	if (hash->AlreadyIn){
		if (mCurrConnUser > 0)
			mCurrConnUser--;
		if (hash->bErpSta == FALSE && mNumBOnlySta > 0)
		{
			mNumBOnlySta--;
			if (mNumBOnlySta==0)
			{
				pdot11Obj->ConfigFlag &= ~NON_ERP_PRESENT_SET;
				mErp.buf[2] &= ~NON_ERP_PRESENT;
			}
		}
	}
		
	if (hash->psm == PSMODE_POWER_SAVE){
		if (mPsStaCnt > 0)
			mPsStaCnt--;
	}	

#if defined(AMAC)
	HW_CAM_ClearRollTbl(pdot11Obj, hash->aid);	
#endif	
	
	CleanupHash(hash);
	hash->pNext = FreeHashList;
	FreeHashList = hash;
	freeHashCount++;  
	pdot11Obj->ExitCS(flags);
}


void InitHashTbl(void)
{
	int i;
	
	for (i=0; i<MAX_RECORD; i++){
		HashTbl[i] = NULL;
	}	
}	


Hash_t *HashSearch(MacAddr_t *pMac)
{
	U8 entry;
	Hash_t *hash = NULL;
	U32 flags;
	
	if (mBssType == INFRASTRUCTURE_BSS){
		if (memcmp(&mBssId, pMac, 6) != 0){
			return NULL;
		}	
		else	
			return sstByAid[0];
	}
		
	//HSDEBUG("HashSearch");
	entry = GetEntry(pMac); 
	flags = pdot11Obj->EnterCS();
	if (HashTbl[entry] == NULL) {
		goto exit;
	}	
	else{
		hash = HashTbl[entry];
		do {
			if (memcmp(hash->mac, (U8 *)pMac, 6) == 0){
				//HSDEBUG("Search got one");
				goto exit;
			}	
			else
				hash = hash->pNext;

		}while(hash != NULL);
	}	
	
exit:
	pdot11Obj->ExitCS(flags);		 
	if (hash){
#if 0		
		printf("macaddr = %02x:%02x:%02x:%02x:%02x:%02x\n", 
			hash->mac[0],  hash->mac[1], hash->mac[2], 
			hash->mac[3], hash->mac[4], hash->mac[5]);
		printf("asoc = %x\n", hash->asoc);	
		printf("auth = %x\n", hash->auth);
		printf("psm = %x\n", hash->psm);
		printf("aid = %x\n", hash->aid);
		printf("lsInterval = %x\n", hash->lsInterval);
#endif		
	}	
	else
		;//HSDEBUG("Search no one");
		
	return hash; 
}





	
Hash_t *HashInsert(MacAddr_t *pMac)
{
	U8 entry;
	Hash_t *hash;
	U32 flags;
	
	HSDEBUG("HashInsert");
	
	if (mBssType == INFRASTRUCTURE_BSS){
		hash = sstByAid[0];
		memcpy(hash->mac, (U8 *)pMac, 6);
		hash->ttl = HW_GetNow(pdot11Obj);
		hash->bValid = TRUE;
		return hash;		
	}
	
	hash = allocHashBuf();
	if (!hash){
		HSDEBUG("No free one");
		//Age Hash table
		AgeHashTbl();
		return NULL; // no free one
	}	
	else{
		entry = GetEntry(pMac);
		HSDEBUG_V("entry", entry);

		if (HashTbl[entry] == NULL){ //entry is null
			HashTbl[entry] = hash;
			HSDEBUG("Entry is null");
		}
		else{ //insert list head
			flags = pdot11Obj->EnterCS();
			hash->pNext = HashTbl[entry];
			HashTbl[entry] = hash;
			pdot11Obj->ExitCS(flags);	
			HSDEBUG("Insert to list head");
		}
		
		memcpy(hash->mac, (U8 *)pMac, 6);
		hash->ttl = HW_GetNow(pdot11Obj);
		hash->bValid = TRUE;
		return hash;	
	}	
}	


BOOLEAN AgeHashTbl(void)
{
	U32 now, ttl, idleTime;
	U8 entry, firstLayer;

	int i;
	MacAddr_t *pMac;
	Hash_t *hash, *preHash = NULL;
	BOOLEAN ret = FALSE;
	
	HSDEBUG("*****AgeHashTbl*****");
	now = HW_GetNow(pdot11Obj);
	
	for (i=1; i<(MAX_AID+1); i++){
		ttl = sstByAid[i]->ttl;
		if (now > ttl)
			idleTime = now - ttl;
		else
			idleTime = 	(0xffffffff - ttl) + now;

		
		if (sstByAid[i]->bValid){
			if (idleTime > IDLE_TIMEOUT ){
				HSDEBUG("*****Age one*****");
				HSDEBUG_V("aid", i);
				HSDEBUG_V("now", now);
				HSDEBUG_V("ttl", ttl);
				HSDEBUG_V("idleTime", idleTime);
			
				pMac = (MacAddr_t *)&sstByAid[i]->mac[0];
				entry = GetEntry(pMac);
				HSDEBUG_V("entry", entry);
				hash = HashTbl[entry];
				firstLayer = 1;
				do {
					if (hash == sstByAid[i]){
						if (firstLayer == 1){
							HSDEBUG("*****firstLayer*****");
							if (hash->pNext != NULL)
								HashTbl[entry] = hash->pNext;
							else
								HashTbl[entry] = NULL;
						}			
						else{
							HSDEBUG("*****Not firstLayer*****");
							preHash->pNext = hash->pNext;
						}
						zd_CmdProcess(CMD_DISASOC, &hash->mac[0], ZD_INACTIVITY);
						freeHashBuf(hash);
						break;
					}	
					else{
						preHash = hash;
						hash = hash->pNext;
						firstLayer = 0;
					}	
				}while(hash != NULL);
				ret = TRUE;
			}
			else {
				if (sstByAid[i]->ZydasMode == 1)
					mZyDasModeClient = TRUE;
					
				if (sstByAid[i]->bErpSta == FALSE && mMacMode != PURE_A_MODE){	
                    pdot11Obj->ConfigFlag |= NON_ERP_PRESENT_SET;
					pdot11Obj->ConfigFlag |= ENABLE_PROTECTION_SET;
					if (sstByAid[i]->Preamble == 0){ //long preamble
						pdot11Obj->ConfigFlag |= BARKER_PREAMBLE_SET;
					}
				}	
			}		
		}		
	
	}
	
	//HSDEBUG_V("ret", ret);
	return ret;
}
	

void ResetPSMonitor(void)
{
	ZDEBUG("ResetPSMonitor");
	initHashBuf();
	InitHashTbl();
	mPsStaCnt = 0;
}


Hash_t *RxInfoIndicate(MacAddr_t *sta, PsMode psm, U8 rate)
{
	Hash_t *pHash;
	
	ZDEBUG("RxInfoIndicate");
    
	//if (isGroup(sta))
		//return NULL;

	pHash = HashSearch(sta);
	if (!pHash){
        if (mBssType == PSEUDO_IBSS){
            pHash = HashInsert(sta);
            if (!pHash)
				return NULL;
            else{
                pHash->asoc = STATION_STATE_ASOC;
                zd1205_dump_data(" HashInsert macAddr = ", (U8 *)&pHash->mac[0], 6);
                goto updateInfo;
            }       
        }
        else        
		    return NULL;
    }    	
	else{
		PsMode oldPsm = pHash->psm;
		StationState asoc = pHash->asoc;

updateInfo:		
		if (rate > pHash->MaxRate)
			pHash->MaxRate = rate;
            
		pHash->RxRate = rate;
		pHash->ttl = HW_GetNow(pdot11Obj);
		
		if (mBssType == AP_BSS){
			if (psm == PSMODE_STA_ACTIVE){
				if (oldPsm == PSMODE_POWER_SAVE){
					StaWakeup(sta);
					if (asoc == STATION_STATE_ASOC){
						if (mPsStaCnt >0){ 
							mPsStaCnt--;
						}	
					}
				}		
			}
			else {
				if (oldPsm == PSMODE_STA_ACTIVE){
					if (asoc == STATION_STATE_ASOC){
						if (mPsStaCnt < MAX_AID){ 
							mPsStaCnt++;
						}	
					}	
				}
				else if (oldPsm == PSMODE_POWER_SAVE){
					if (asoc == STATION_STATE_ASOC){
						if (mPsStaCnt == 0) 
							mPsStaCnt++;
					}	
				}		
			}	
		}	
		
		pHash->psm = psm;
	}
	
	return pHash;
}


void RxInfoUpdate(Hash_t *pHash, PsMode psm, U8 rate)
{
	PsMode oldPsm = pHash->psm;
	StationState asoc = pHash->asoc;
		
	if (rate > pHash->MaxRate)
		pHash->MaxRate = rate;
			
	pHash->RxRate = rate;
	pHash->ttl = HW_GetNow(pdot11Obj);
		
	if (psm == PSMODE_STA_ACTIVE){
		if (oldPsm == PSMODE_POWER_SAVE){
			StaWakeup((MacAddr_t *)pHash->mac);
			if (asoc == STATION_STATE_ASOC){
				if (mPsStaCnt >0){ 
					mPsStaCnt--;
				}	
			}
		}		
	}
	else {
		if (oldPsm == PSMODE_STA_ACTIVE){
			if (asoc == STATION_STATE_ASOC){
				if (mPsStaCnt < MAX_AID){ 
					mPsStaCnt++;
				}	
			}	
		}
		else if (oldPsm == PSMODE_POWER_SAVE){
			if (asoc == STATION_STATE_ASOC){
				if (mPsStaCnt == 0) 
					mPsStaCnt++;
			}	

		}		
	}	

	
	pHash->psm = psm;
}


BOOLEAN UpdateStaStatus(MacAddr_t *sta, StationState staSte, U8 vapId)
{
	Hash_t *pHash;
	
	ZDEBUG("UpdateStaStatus");
	
	if (mBssType == AP_BSS){
		pHash = HashSearch(sta);
		if (pHash)
			goto UpdateStatus;
		else{	
			if ((STATION_STATE_AUTH_OPEN == staSte) || (STATION_STATE_AUTH_KEY == staSte)){
				if ((mCurrConnUser + 1) > mLimitedUser){
					//AgeHashTbl();
					return FALSE;
				}	
				else{	
					pHash = HashInsert(sta);
					if (!pHash)
						return FALSE; 
				}		
			}	
			else
				return FALSE; 
		}
	}
	else if (mBssType == INFRASTRUCTURE_BSS){
		if ((STATION_STATE_AUTH_OPEN == staSte) || (STATION_STATE_AUTH_KEY == staSte)){
			CleanupHash(sstByAid[0]);
			pHash = HashInsert(sta);
		} else {	
			pHash = sstByAid[0]; //use aid = 0 to store AP's info
		}	
	}	
	else if (mBssType == INDEPENDENT_BSS){	
		pHash = HashSearch(sta);
		if (pHash)
			goto UpdateStatus;
		else {
			pHash = HashInsert(sta);
            if (!pHash)
				return FALSE;
            else
                zd1205_dump_data(" HashInsert macAddr = ", (U8 *)&pHash->mac[0], 6);
		}	
	}
    else
        return FALSE;	

UpdateStatus:	
	switch(staSte){
		case STATION_STATE_AUTH_OPEN:
		case STATION_STATE_AUTH_KEY:
			pHash->auth = staSte;
			break;

		case STATION_STATE_ASOC:
			if (mBssType == AP_BSS){
				if (((mCurrConnUser + 1) > mLimitedUser) && (!pHash->AlreadyIn)){
					return FALSE; 
				}
				
				if (pHash->psm == PSMODE_POWER_SAVE){
					if (mPsStaCnt > 0){ 
						mPsStaCnt--;
					}	

				}	
						
				pHash->asoc = STATION_STATE_ASOC;
				/*if (!pHash->AlreadyIn){
					pHash->AlreadyIn = 1;
					mCurrConnUser++;
				}*/
			}else{
				pHash->asoc = STATION_STATE_ASOC;
			}		

            if (mBssType != INDEPENDENT_BSS)
			    CleanupKeyInfo(pHash);

            memcpy(&pdot11Obj->CurrSsid[0], (U8 *)&mSsid, mSsid.buf[1]+2);   
			break;

		case STATION_STATE_NOT_AUTH:
		case STATION_STATE_DIS_ASOC:
			if (mBssType == AP_BSS){
				if (pHash->asoc == STATION_STATE_ASOC){
					if (pHash->psm == PSMODE_POWER_SAVE){
						FlushQ(pPsQ[pHash->aid]);
						if (mPsStaCnt > 0){ 
							mPsStaCnt--;
							if (mPsStaCnt == 0){
								FlushQ(pAwakeQ);
								FlushQ(pPsQ[0]);
							}	
						}	
					}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆91在线播放| 欧美日韩精品欧美日韩精品一 | 欧美本精品男人aⅴ天堂| 日韩高清欧美激情| 欧美大片免费久久精品三p| 蜜桃一区二区三区四区| 欧美成人精品福利| 国产.欧美.日韩| 亚洲女人的天堂| 欧美夫妻性生活| 久久国产尿小便嘘嘘尿| 国产精品人成在线观看免费| 91在线观看成人| 青青草97国产精品免费观看| 久久婷婷国产综合国色天香 | 中文字幕一区二区三区在线播放 | 欧美一级免费大片| 国产一区二区0| ㊣最新国产の精品bt伙计久久| 色94色欧美sute亚洲线路一ni | 99视频国产精品| 亚洲一区二区欧美激情| 欧美一区二区在线免费播放| 精品一区二区三区香蕉蜜桃| 亚洲欧美区自拍先锋| 91精品国产一区二区人妖| 成人一级片网址| 日韩av一区二| 亚洲人成小说网站色在线| 日韩欧美国产成人一区二区| 不卡一区二区中文字幕| 热久久一区二区| 亚洲欧美电影一区二区| 日韩精品最新网址| 色综合色综合色综合| 激情都市一区二区| 午夜欧美2019年伦理| 中文字幕不卡三区| 欧美va日韩va| 欧美三级乱人伦电影| 成人禁用看黄a在线| 久久国产精品区| 亚洲精品日日夜夜| 国产欧美一区二区三区鸳鸯浴| 欧美日韩aaa| 日本伦理一区二区| 国产精品亚洲成人| 免费成人深夜小野草| 一区二区三区不卡视频在线观看| 久久美女艺术照精彩视频福利播放| 欧美一级夜夜爽| 欧美人体做爰大胆视频| 色婷婷综合中文久久一本| 国产毛片精品国产一区二区三区| 日韩精品一二区| 亚洲午夜一区二区| 日韩久久一区二区| 国产精品丝袜黑色高跟| 精品久久久久久亚洲综合网 | 精品一区二区三区不卡| 亚洲第一搞黄网站| 一区二区三区毛片| 日韩理论电影院| 18成人在线视频| 国产精品国模大尺度视频| 国产日产欧美一区二区视频| 亚洲精品在线免费播放| 精品免费国产二区三区| 日韩亚洲欧美在线观看| 欧美一区二区二区| 日韩天堂在线观看| 欧美一区二区三区四区高清| 欧美日韩成人在线| 欧美一区二区在线播放| 欧美精品在线一区二区三区| 欧美电影在线免费观看| 欧美日韩夫妻久久| 日韩一区二区免费电影| 精品国产网站在线观看| 精品对白一区国产伦| 欧美精品一区二| 久久久精品2019中文字幕之3| 精品久久人人做人人爱| 久久久久久久久免费| 国产午夜亚洲精品羞羞网站| 中文字幕 久热精品 视频在线| 国产精品视频一二三区| 亚洲三级免费观看| 亚洲二区在线视频| 秋霞国产午夜精品免费视频| 另类欧美日韩国产在线| 国产乱人伦偷精品视频免下载| 国产麻豆精品theporn| 成人性生交大片免费看视频在线| jlzzjlzz亚洲日本少妇| 欧美性受xxxx黑人xyx| 91精品国产乱| 久久亚洲一级片| 国产精品美女视频| 亚洲成av人片在线| 韩国三级在线一区| 91免费视频网| 日韩一区二区在线免费观看| www国产成人| 亚洲色图清纯唯美| 日韩影院在线观看| 国产激情一区二区三区四区 | 五月激情综合婷婷| 久久99国产精品麻豆| 成人黄色av电影| 777色狠狠一区二区三区| 久久久亚洲国产美女国产盗摄| 日本一二三不卡| 五月婷婷色综合| 国产成人免费视频网站高清观看视频| 99国产精品一区| 欧美成人精品福利| 亚洲欧美日本韩国| 国产一区欧美一区| 在线观看www91| 久久精品免视看| 亚洲国产精品久久一线不卡| 激情亚洲综合在线| 在线欧美小视频| 中文字幕精品三区| 热久久一区二区| 91久久精品网| 久久久久久久久一| 日本午夜精品一区二区三区电影 | 亚洲国产成人av好男人在线观看| 蜜桃视频免费观看一区| 色综合久久综合网97色综合| 久久亚洲综合色一区二区三区| 日韩国产在线观看| 色婷婷av一区二区三区大白胸| 欧美精品一区视频| 午夜视频在线观看一区二区三区| 不卡欧美aaaaa| 久久综合久久综合亚洲| 天天综合色天天| 欧美专区日韩专区| 亚洲三级久久久| 成人看片黄a免费看在线| 日韩午夜在线观看| 三级成人在线视频| 色噜噜狠狠一区二区三区果冻| 久久蜜桃av一区精品变态类天堂| 免费在线看成人av| 欧美日韩一区二区欧美激情| 国产精品福利一区二区| 国产精品一区二区三区网站| 精品久久久久久久久久久院品网| 性久久久久久久久| 在线观看区一区二| 一片黄亚洲嫩模| 91蜜桃免费观看视频| 亚洲欧洲日产国产综合网| 国产老女人精品毛片久久| 欧美r级电影在线观看| 美女在线视频一区| 日韩视频免费直播| 美美哒免费高清在线观看视频一区二区| 在线观看91视频| 午夜视频一区二区三区| 欧美精品乱人伦久久久久久| 亚洲国产成人av网| 6080yy午夜一二三区久久| 石原莉奈在线亚洲二区| 日韩一区二区三区视频在线观看| 秋霞成人午夜伦在线观看| 日韩一区二区三区视频| 久久机这里只有精品| 久久丝袜美腿综合| 成a人片亚洲日本久久| 一区精品在线播放| 91久久久免费一区二区| 午夜av电影一区| 欧美成人高清电影在线| 久久99国产精品尤物| 久久九九全国免费| www.性欧美| 一区二区三区在线视频观看58| 欧美日韩一区二区三区不卡 | 久久久久国产精品麻豆ai换脸 | 欧美日韩另类一区| 免费观看在线色综合| 久久人人超碰精品| 99vv1com这只有精品| 午夜电影网一区| 久久免费午夜影院| 91丨九色丨蝌蚪丨老版| 天堂成人免费av电影一区| 精品国产伦一区二区三区观看方式| 国产美女久久久久| 一区二区三区在线免费| 欧美一区午夜视频在线观看| 国产aⅴ综合色| 亚洲午夜私人影院| 久久久久久久久久久电影| 在线观看一区二区精品视频|