亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
这里是久久伊人| 日韩视频免费直播| 欧美精品电影在线播放| 欧美mv日韩mv国产网站app| 亚洲人成网站影音先锋播放| 日本亚洲电影天堂| 99久久久久免费精品国产| 8x福利精品第一导航| 中文字幕一区二区三区不卡在线 | 国产成人精品www牛牛影视| 色网综合在线观看| 精品国产亚洲在线| 日韩电影在线观看网站| 91麻豆视频网站| 久久久亚洲精品石原莉奈| 五月天视频一区| 91成人免费网站| 久久网这里都是精品| 亚洲成av人影院在线观看网| 99精品久久免费看蜜臀剧情介绍| 久久综合久久久久88| 青青国产91久久久久久| 欧美在线free| 亚洲欧美在线另类| 岛国一区二区三区| 日韩欧美一区电影| 五月激情综合婷婷| 欧洲色大大久久| 一区二区三区四区在线免费观看 | 欧美日韩亚洲综合| 国产精品国产精品国产专区不片| 国产在线视频一区二区三区| 91精品国产综合久久久久久漫画| 午夜欧美2019年伦理| 91色在线porny| 亚洲三级在线观看| a4yy欧美一区二区三区| 亚洲色图19p| 色琪琪一区二区三区亚洲区| 亚洲人一二三区| 91欧美一区二区| 亚洲男人的天堂在线观看| av不卡在线播放| 亚洲欧美激情一区二区| 在线观看欧美精品| 三级在线观看一区二区| 欧美日韩一区视频| 日本大胆欧美人术艺术动态| 日韩亚洲欧美一区| 国产麻豆精品视频| 中文字幕一区二区三区精华液| 色美美综合视频| 亚洲国产日韩综合久久精品| 欧美午夜一区二区三区免费大片| 亚洲成av人片一区二区梦乃| 91精品国产欧美一区二区成人| 精品一区二区三区在线播放| 久久婷婷成人综合色| 不卡一区中文字幕| 亚洲成人免费视频| 亚洲精品一线二线三线| 99久久99久久精品国产片果冻 | 亚洲国产成人在线| 97精品视频在线观看自产线路二 | 欧美日韩国产美女| 麻豆精品一区二区综合av| 亚洲精品一区二区在线观看| 粉嫩av一区二区三区在线播放| 亚洲人吸女人奶水| 精品久久久久久久久久久久久久久| 国产精品一区专区| 亚洲一区视频在线| 久久精品一区二区三区不卡牛牛 | 国产色一区二区| 色婷婷久久久久swag精品| 五月婷婷综合在线| 国产精品免费人成网站| 欧美日韩国产精品自在自线| 国产精品一区二区三区乱码| 亚洲另类在线视频| 久久久一区二区三区捆绑**| 在线视频一区二区三| 国产精品一区二区三区乱码| 亚洲黄色性网站| 欧美国产激情一区二区三区蜜月| 欧美优质美女网站| 99久久国产综合色|国产精品| 免费看欧美美女黄的网站| 亚洲欧美日韩久久| 国产欧美精品一区二区三区四区| 884aa四虎影成人精品一区| av电影在线不卡| 精一区二区三区| 午夜精品一区二区三区三上悠亚| 中文字幕精品综合| 精品国产一区久久| 欧美乱妇一区二区三区不卡视频| 成人av一区二区三区| 国产主播一区二区三区| 毛片av一区二区| 青青草97国产精品免费观看无弹窗版| 成人欧美一区二区三区1314| 久久婷婷综合激情| 欧美日本不卡视频| 欧美少妇xxx| 色综合夜色一区| 成人理论电影网| 国产乱码精品一区二区三区av | 一区二区久久久久| 国产精品成人免费 | 欧美日韩国产综合一区二区| www.欧美色图| 成人小视频在线| 国产aⅴ综合色| 国产乱码精品一区二区三| 激情文学综合丁香| 久久99精品国产.久久久久久| 日韩精品三区四区| 日本欧美大码aⅴ在线播放| 亚洲sss视频在线视频| 亚洲亚洲精品在线观看| 亚洲成人在线观看视频| 亚洲第一二三四区| 日本亚洲视频在线| 国产制服丝袜一区| 成人午夜碰碰视频| 成人禁用看黄a在线| 99国产精品久久久| 日本二三区不卡| 欧美日韩国产综合一区二区 | 欧美成人精品3d动漫h| 日韩你懂的电影在线观看| 精品国产成人在线影院| 日韩精品一区二区三区老鸭窝| 欧美一卡2卡三卡4卡5免费| www久久精品| 国产精品高潮呻吟| 一区二区免费在线| 青青草原综合久久大伊人精品| 奇米影视一区二区三区小说| 国产一区视频在线看| 成人高清视频在线| 欧洲一区在线观看| 日韩一区二区三区精品视频| 久久久久9999亚洲精品| 亚洲欧美激情插| 日日夜夜精品免费视频| 国产精品一二三在| 色噜噜久久综合| 欧美一级xxx| 亚洲天堂a在线| 青青国产91久久久久久| 成人av网站大全| 5566中文字幕一区二区电影| 久久久久久一级片| 亚洲综合激情小说| 国产一区啦啦啦在线观看| 色视频成人在线观看免| 26uuu另类欧美亚洲曰本| 亚洲日本成人在线观看| 日本伊人色综合网| jiyouzz国产精品久久| 91精品国产综合久久香蕉麻豆| 国产精品三级电影| 日本三级韩国三级欧美三级| aaa国产一区| 久久亚洲精华国产精华液| 伊人开心综合网| 国产在线不卡视频| 制服丝袜中文字幕一区| 综合激情成人伊人| 国产一区二区三区av电影| 欧美亚洲图片小说| 欧美激情在线看| 日韩影视精彩在线| 在线视频国内一区二区| 国产日产精品一区| 免费国产亚洲视频| 欧美日韩视频在线观看一区二区三区| 国产无一区二区| 蜜臀av在线播放一区二区三区| 91蜜桃视频在线| 国产精品沙发午睡系列990531| 经典一区二区三区| 欧美一激情一区二区三区| 亚瑟在线精品视频| 日本二三区不卡| 日韩中文字幕91| voyeur盗摄精品| 国产三级精品三级在线专区| 美女在线视频一区| 欧美精品1区2区3区| 亚洲图片欧美色图| 在线观看视频一区| 亚洲免费av在线| 91色乱码一区二区三区| 中文在线免费一区三区高中清不卡| 精品一区二区影视| 欧美精品一区二区三区在线播放 | 久久先锋影音av鲁色资源网|