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

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

?? mac-802_16.cc

?? 802.16 Qos仿真平臺的c++實現
?? CC
?? 第 1 頁 / 共 5 頁
字號:
				while (bssf) {
					if (bssf->Direction == DL && bssf->Status == Active && bssf->ScheduleType == 2 && BsSearchSsInfo(bssf->MacAddr, -1)->BasicCID == dlmapie->CID) {
						//printf("Downlink Bandwidth %d CID %d BE SFID=%d req size %d[%d]\n",Bandwidth,dlmapie->CID,bssf->SFID,Bandwidth*bssf->TrafficPriority/TrafficPriority,bssf->SduQueue.count(Bandwidth*bssf->TrafficPriority/TrafficPriority));
						BsFragOrPack(bssf, bssf->SduQueue.count(Bandwidth*bssf->TrafficPriority/TrafficPriority));
						//printf("\tbs SduQ=%d\tPduQ=%d\n",bssf->SduQueue.byteLength(),bssf->PduQueue.byteLength());
					}
					bssf = bssf->next;
				}
			}
		}
		dlmapie = dlmapie->next;
	}
	BsBurstTransmit();
	return;
}

void
Mac802_16::SsScheduler()
{
	UlMapIe *ulmapie;
	if (!RangingStatus) {
		//Initial Ranging IE
		ulmapie = UlMapIe_head;
		while (ulmapie) {
			if (ulmapie->UIUC == 0xC && ulmapie->CID == 0xFFFF)
				sendRNGREQ(ulmapie);
			ulmapie = ulmapie->next;
		}
	} else {
		//Data Grant IE
		ulmapie = UlMapIe_head;
		while (ulmapie) {
			if (ulmapie->UIUC != 0xC && ulmapie->CID == BasicCID) {
				int Bandwidth = 0;
				int TrafficPriority = 0;
				switch (ModulCoding) {
					case QPSK_12: Bandwidth = ulmapie->Duration*6*3; break;
					case QPSK_34: Bandwidth = ulmapie->Duration*9*3; break;
					case QAM16_12:Bandwidth = ulmapie->Duration*12*3; break;
					case QAM16_34:Bandwidth = ulmapie->Duration*18*3; break;
					case QAM64_23:Bandwidth = ulmapie->Duration*24*3; break;
					case QAM64_34:Bandwidth = ulmapie->Duration*27*3; break;	
				}
				SsServiceFlow *sssf;
				sssf = SsSF_head;
				while (sssf) {
					if (sssf->Status == Active && sssf->ScheduleType == 6) {
						//printf("Uplink Bandwidth %d UGS SFID=%d req size %d[%d]\n",Bandwidth,sssf->SFID,sssf->SduQueue.byteLength(),sssf->SduQueue.count(sssf->SduQueue.byteLength()));
						SsFragOrPack(sssf, sssf->SduQueue.count(sssf->SduQueue.byteLength()));
						Bandwidth -= sssf->PduQueue.byteLength();
						//printf("\tss SduQ=%d\tPduQ=%d\n",sssf->SduQueue.byteLength(),sssf->PduQueue.byteLength());
					}
					if (sssf->Status == Active && sssf->BwReqSize != 0 && sssf->ScheduleType >= 3 && sssf->ScheduleType <= 5 ) {
						//printf("Uplink Bandwidth %d Polling SFID=%d req size %d[%d]\n",Bandwidth,sssf->SFID,sssf->BwReqSize,sssf->SduQueue.count(sssf->BwReqSize));
						SsFragOrPack(sssf, sssf->SduQueue.count(sssf->BwReqSize));
						sssf->BwReqSize = 0;
						Bandwidth -= sssf->PduQueue.byteLength();
						//printf("\tss SduQ=%d\tPduQ=%d\n",sssf->SduQueue.byteLength(),sssf->PduQueue.byteLength());
					}
					if (sssf->Status == Active && sssf->ScheduleType == 2) {
						TrafficPriority += sssf->TrafficPriority;
					}
					sssf = sssf->next;
				}
				if (Bandwidth > 0 && TrafficPriority > 0) {
					sssf = SsSF_head;
					while (sssf) {
						if (sssf->Status == Active && sssf->ScheduleType == 2) {
							//printf("Uplink Bandwidth %d BE SFID=%d req size %d[%d]\n",Bandwidth,sssf->SFID,Bandwidth*sssf->TrafficPriority/TrafficPriority,sssf->SduQueue.count(Bandwidth*sssf->TrafficPriority/TrafficPriority));
							SsFragOrPack(sssf, sssf->SduQueue.count(Bandwidth*sssf->TrafficPriority/TrafficPriority));
							//printf("\tss SduQ=%d\tPduQ=%d\n",sssf->SduQueue.byteLength(),sssf->PduQueue.byteLength());
						}
						sssf = sssf->next;
					}
				}
			}
			ulmapie = ulmapie->next;
		}
		
		//BW Request IE
		ulmapie = UlMapIe_head;
		while (ulmapie) {
			if (ulmapie->UIUC == 0xC && ulmapie->CID == BasicCID)
				sendBWREQ(ulmapie);
			ulmapie = ulmapie->next;
		}
	}
	SsBurstTransmit();
	return;
}

void 
Mac802_16::BsFragOrPack(BsServiceFlow *BsSF, int Size)
{	
	//printf("[1]BS SDU num=%d PDU num=%d\n",BsSF->SduQueue.length(),BsSF->PduQueue.length());
	static int32_t tmp_size = PDUSIZE;	
	Packet* frag;
	Packet* sdu;
BsStart:	
	while (Size) {				
		sdu = BsSF->SduQueue.deque();		
		struct hdr_cmn* sdu_hdr = HDR_CMN(sdu);
	    struct hdr_mac802_16* sdu_mac16 = HDR_MAC802_16(sdu);	
		
		if (sdu_hdr->size() <= tmp_size) {
			//need to pack
			sdu_mac16->generic_hdr.Type = 0x01;	
			sdu->type_ = 1;	
			struct subhdr_pack* psh = SUBHDR_Pack(sdu);
			//printf("Add packing subheader FSN:%d\n",psh->FSN);
			psh->FSN = (psh->FSN + 1)%8;				
			if (sdu_hdr->size() < tmp_size) {
				//Add PACKing subheader; add SDU or SDU fragment					
				psh->FC = 0x0;
				psh->Length = sdu_hdr->size();
				tmp_size -= sdu_hdr->size();
				//printf("Need to Pack:\n");	
				Packet::free(sdu);
			} else {
				//add PACKing subheader; add fragment					
				psh->FC = 0x2;
				frag = sdu;   
				BsSF->PduQueue.enque(sdu);	
				//printf("[1]Complete a MPDU\nPacking with fragmetation; The remaining fragment is stored in queue\n");					
				tmp_size = PDUSIZE;								
			}
			Size--;
			goto BsStart;				
		} else {
			//Need fragmetation
        	sdu_mac16->generic_hdr.Type = 0x04; 
			sdu->type_ = 2;		
			if (BsSF->FragQueue.length() != 0) { 		
BsFragQueue:	
				//Fragment-queue is not empty;
				Packet::free(sdu);				
				frag = BsSF->FragQueue.deque();
				struct hdr_cmn* frag_hdr = HDR_CMN(frag);
				struct subhdr_frag* fsh = SUBHDR_Frag(frag);				
				//printf("Add fragmentation subheader FSN:%d\n",fsh->FSN);
				fsh->FSN = (fsh->FSN + 1)%8;				
				if (frag_hdr->size() <= tmp_size) {
					//Add SDU to payload
					//printf("Add SDU to payload\nLast Fragment\n");						
					if (frag_hdr->size() < tmp_size) {
						// last fragment  need pack
						fsh->FC = 0x1;
						tmp_size -= frag_hdr->size();
						Packet::free(frag);
					} else {
						// last fragment
						fsh->FC = 0x1;
						// printf("Complete a MPDU\n\n");							 
						tmp_size = PDUSIZE;	
						BsSF->PduQueue.enque(frag);					
					}	
				} else {
					// continue fragment	
					fsh->FC = 0x3;		
					//printf("Continue Fragment\n");
					int i = frag_hdr->size();
					frag_hdr->size() = tmp_size;
					BsSF->PduQueue.enque(frag->copy());
					frag_hdr->size() = i - tmp_size;
					BsSF->FragQueue.enque(frag);
					//printf("[2]Complete a MPDU\n The remaining fragment is stored in queue\n");					
					tmp_size = PDUSIZE;
					goto BsFragQueue;	
				}
			} else {
				//there're no fragments in fragment-queue
				struct hdr_cmn* sdu_hdr = HDR_CMN(sdu);
				struct subhdr_frag* fsh = SUBHDR_Frag(sdu);
				//printf("Add fragmentation subheader FSN:%d\n",fsh->FSN);
				fsh->FSN = (fsh->FSN + 1)%8;
				if (sdu_hdr->size() > tmp_size) {
					//need to fragmentation
					int i = sdu_hdr->size();
					sdu_hdr->size() = PDUSIZE;
					//printf("First Fragmentaton\n");					 					
					fsh->FC = 0x2;  //first fragment
					BsSF->PduQueue.enque(sdu->copy());
					sdu_hdr->size() = i - tmp_size;
					BsSF->FragQueue.enque(sdu);
					//printf("[3]Complete a MPDU\n The remaining fragment is stored in queue\n");					
					tmp_size = PDUSIZE;					
					goto BsFragQueue;
				}
			}
		}
		Size--;
	}
	//printf("[2]BS SDU num=%d PDU num=%d\n",BsSF->SduQueue.length(),BsSF->PduQueue.length());
	return;
}

void 
Mac802_16::SsFragOrPack(SsServiceFlow *SsSF, int Size)
{	
	//printf("[1]SS SDU num=%d PDU num=%d\n",SsSF->SduQueue.length(),SsSF->PduQueue.length());
	static int32_t tmp_size = PDUSIZE;	
	Packet* frag;
	Packet* sdu;
SsStart:	
	while (Size) {				
		sdu = SsSF->SduQueue.deque();		
		struct hdr_cmn* sdu_hdr = HDR_CMN(sdu);
	    struct hdr_mac802_16* sdu_mac16 = HDR_MAC802_16(sdu);		
		if (sdu_hdr->size() <= tmp_size) {
			//need to pack
			sdu_mac16->generic_hdr.Type = 0x01;	
			sdu->type_ = 1;	
			struct subhdr_pack* psh = SUBHDR_Pack(sdu);
			//printf("Add packing subheader FSN:%d\n",psh->FSN);
			psh->FSN = (psh->FSN + 1)%8;				
			if (sdu_hdr->size() < tmp_size) {
				//Add PACKing subheader; add SDU or SDU fragment					
				psh->FC = 0x0;
				psh->Length = sdu_hdr->size();
				tmp_size -= sdu_hdr->size();
				//printf("Need to Pack:\n");	
				Packet::free(sdu);
			} else {
				//add PACKing subheader; add fragment					
				psh->FC = 0x2;
				frag = sdu;
				SsSF->PduQueue.enque(sdu);	
				//printf("[1]Complete a MPDU\nPacking with fragmetation; The remaining fragment is stored in queue\n");					
				tmp_size = PDUSIZE;								
			}
			Size--;
			goto SsStart;				
		} else {
			//Need fragmetation
        	sdu_mac16->generic_hdr.Type = 0x04; 
			sdu->type_ = 2;		
			if (SsSF->FragQueue.length() != 0) { 		
SsFragQueue:	
				//Fragment-queue is not empty;
				Packet::free(sdu);		
				frag = SsSF->FragQueue.deque();
				struct hdr_cmn* frag_hdr = HDR_CMN(frag);
				struct subhdr_frag* fsh = SUBHDR_Frag(frag);				
				//printf("Add fragmentation subheader FSN:%d\n",fsh->FSN);
				fsh->FSN = (fsh->FSN + 1)%8;				
				if (frag_hdr->size() <= tmp_size) {
					//Add SDU to payload
					//printf("Add SDU to payload\nLast Fragment\n");						
					if (frag_hdr->size() < tmp_size) {
						// last fragment  need pack
						fsh->FC = 0x1;
						tmp_size -= frag_hdr->size();
						Packet::free(frag);
					} else {
						// last fragment
						fsh->FC = 0x1;
						// printf("Complete a MPDU\n\n");							 
						tmp_size = PDUSIZE;	
						SsSF->PduQueue.enque(frag);					
					}	
				} else {
					// continue fragment	
					fsh->FC = 0x3;		
					//printf("Continue Fragment\n");
					int i = frag_hdr->size();
					frag_hdr->size() = tmp_size;
					SsSF->PduQueue.enque(frag->copy());
					frag_hdr->size() = i - tmp_size;
					SsSF->FragQueue.enque(frag);
					//printf("[2]Complete a MPDU\n The remaining fragment is stored in queue\n");					
					tmp_size = PDUSIZE;
					goto SsFragQueue;	
				}
			} else {
				//there're no fragments in fragment-queue
				struct hdr_cmn* sdu_hdr = HDR_CMN(sdu);
				struct subhdr_frag* fsh = SUBHDR_Frag(sdu);
				//printf("Add fragmentation subheader FSN:%d\n",fsh->FSN);
				fsh->FSN = (fsh->FSN + 1)%8;
				if (sdu_hdr->size() > tmp_size) {
					//need to fragmentation
					int i = sdu_hdr->size();
					sdu_hdr->size() = PDUSIZE;
					//printf("First Fragmentaton\n");					 					
					fsh->FC = 0x2;  //first fragment
					SsSF->PduQueue.enque(sdu->copy());
					sdu_hdr->size() = i - tmp_size;
					SsSF->FragQueue.enque(sdu);
					//printf("[3]Complete a MPDU\n The remaining fragment is stored in queue\n");					
					tmp_size = PDUSIZE;					
					goto SsFragQueue;
				}
			}
		}
		Size--;
	}
	//printf("[2]SS SDU num=%d PDU num=%d\n",SsSF->SduQueue.length(),SsSF->PduQueue.length());*/
	return;
}

void
Mac802_16::BsBurstTransmit()
{////////////////////////本部分是我增加的,BS發送給SS的控制信息必須在一幀的下行子幀內發送,原補丁沒有考慮這一層,只要BS收到SS的RNGREQ、DSAREQ等消息就馬上作出回復,這是不符合協議的,因為此時SS正處于上行子幀發送狀態,TDD下是不可能全雙工的(長庚大學的wimax采用的是TDD模式)	while(BsMsgQueue.length()!=0) {		Packet* msg=BsMsgQueue.deque();		hdr_cmn *msg_hdr = HDR_CMN(msg->copy());		if(msg_hdr->ptype()==PT_RNGRSP) 			RangingFlag=false;//如果BsMsgQueue中有測距回復消息,將RangingFlag恢復		downtarget_->recv(msg, this);	}///////////////////////////////////////////
	BsServiceFlow *bssf = NULL;
	bssf = BsSF_head;
	while (bssf) {
		while (bssf->Direction == DL && bssf->PduQueue.length() != 0) {
			Packet *p = bssf->PduQueue.deque();
			struct hdr_cmn *hdr = HDR_CMN(p);
			struct hdr_mac *mac = HDR_MAC(p); 
			struct hdr_mac802_16 *mac16 = HDR_MAC802_16(p);

			mac->macDA() = bssf->MacAddr;
			mac->macSA() = BsID;
			mac->set(MF_DATA, NodeID);
			state(MAC_SEND);
	
			//hdr->uid() = 0;//這部分是我注釋掉的,因為它導致了MAC層發送封包的時候將封包uid_全部設置為0了
			hdr->size() += sizeof(GenericHdr);
			hdr->iface() = -2;
			hdr->error() = 0; 
			hdr->txtime() = SymbolLength;
	
			mac16->generic_hdr.HT = 0;
			mac16->generic_hdr.EC = 1;
			mac16->generic_hdr.Type = 1;
			mac16->ge

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本色道久久综合精品竹菊| 国产不卡高清在线观看视频| 亚洲精品国产a| 国产三区在线成人av| 91精品国产麻豆国产自产在线| 色综合中文字幕国产| 成人av在线资源网站| 国产成人av一区二区三区在线 | 欧美日韩一级二级| 午夜精品视频一区| 亚洲一区在线观看视频| 亚洲图片欧美色图| 狠狠色丁香婷婷综合久久片| 最近中文字幕一区二区三区| 久久久久久久综合狠狠综合| av在线播放不卡| 久久国产福利国产秒拍| 婷婷综合另类小说色区| 日av在线不卡| 亚洲午夜在线视频| 91精品国产免费| 国产一区二区在线看| 精品噜噜噜噜久久久久久久久试看| 国产无一区二区| 91在线视频观看| 欧美中文字幕一二三区视频| 欧美丝袜第三区| 日韩一区二区免费在线电影 | 3atv一区二区三区| 欧美成人精品二区三区99精品| 日韩视频中午一区| 久久久国产精品午夜一区ai换脸| 国产精品久久久久一区二区三区 | 91精品国产丝袜白色高跟鞋| 日韩欧美国产小视频| 久久精品视频一区二区| 亚洲欧洲日产国码二区| 一区二区三区欧美亚洲| 麻豆91精品91久久久的内涵| 国产成人av电影| 一本大道久久精品懂色aⅴ| 欧美乱熟臀69xxxxxx| 久久日韩精品一区二区五区| 色婷婷av一区二区三区之一色屋| 在线影院国内精品| 国产欧美久久久精品影院| 久久久国产精华| 亚洲精品少妇30p| 婷婷开心激情综合| 国产91丝袜在线18| 欧美日韩一区二区三区视频| 欧美一区二区三区思思人| 久久夜色精品国产噜噜av| 亚洲欧美一区二区三区久本道91| 欧美日韩中文精品| 欧美综合色免费| 久久中文字幕电影| 亚洲综合丝袜美腿| 久久99热这里只有精品| 色94色欧美sute亚洲13| 日韩三区在线观看| 亚洲精品视频在线观看免费| 美女诱惑一区二区| 在线免费不卡视频| 国产日韩在线不卡| 免费高清视频精品| 欧洲在线/亚洲| 久久精品欧美一区二区三区不卡| 五月婷婷久久丁香| www.欧美.com| 2021国产精品久久精品| 天天影视网天天综合色在线播放| 国产乱码一区二区三区| 欧美日韩1区2区| 亚洲欧美激情插| 高清日韩电视剧大全免费| 91精品国产黑色紧身裤美女| 日韩美女精品在线| 国产毛片精品视频| 日韩欧美亚洲一区二区| 亚洲成年人影院| 色女孩综合影院| 中文字幕av一区二区三区免费看 | 秋霞成人午夜伦在线观看| 91小宝寻花一区二区三区| www国产精品av| 蜜桃一区二区三区在线| 欧美日韩精品电影| 亚洲最大成人网4388xx| 91天堂素人约啪| 精品av久久707| 色综合久久88色综合天天| 亚洲成人午夜影院| 日韩美女主播在线视频一区二区三区| 亚洲午夜久久久| 欧美绝品在线观看成人午夜影视| 亚洲成人自拍网| 91精品国产综合久久婷婷香蕉| 精品一区二区三区免费毛片爱| 制服丝袜日韩国产| 国产精品白丝jk白祙喷水网站| 一区二区三区四区不卡视频| 在线观看欧美日本| 亚洲欧洲成人自拍| 成人影视亚洲图片在线| 欧美国产日韩精品免费观看| 国产一区二区电影| www激情久久| 国产精品18久久久久| 国产偷国产偷亚洲高清人白洁 | 国产一区二区三区国产| 欧美成人免费网站| 国产专区综合网| 久久久www成人免费毛片麻豆| 国产麻豆精品95视频| 国产午夜精品福利| eeuss国产一区二区三区| 亚洲人成在线播放网站岛国| 91免费版pro下载短视频| 曰韩精品一区二区| 欧美日韩精品福利| 久久国产视频网| 精品sm在线观看| 懂色av中文一区二区三区| 国产精品午夜免费| 91精品福利在线| 日韩av一区二| 欧美精品一区二区不卡| 国产精品综合网| 国产精品久久久久久久久免费桃花| 91视频观看免费| 午夜在线成人av| 欧美大黄免费观看| 成人高清视频在线| 夜夜操天天操亚洲| 日韩欧美国产午夜精品| 国产精品18久久久久久久久久久久 | 风流少妇一区二区| 一区二区在线观看视频在线观看| 337p亚洲精品色噜噜狠狠| 国产精品一区在线观看你懂的| 国产精品成人一区二区三区夜夜夜| 91精品福利视频| 国内一区二区在线| 亚洲黄色av一区| 精品国产乱码久久久久久浪潮 | 成人免费高清在线| 蓝色福利精品导航| 国产真实乱偷精品视频免| 日韩精品一级中文字幕精品视频免费观看 | 国产亚洲制服色| 欧美群妇大交群的观看方式 | 一区二区三区欧美日| 亚洲狠狠爱一区二区三区| 欧美一区二视频| 国产成人精品免费一区二区| 亚洲精品高清视频在线观看| 欧美一区二区三区视频免费播放 | 欧美亚洲国产一区二区三区va| 免费欧美在线视频| 精品动漫一区二区三区在线观看| 国内不卡的二区三区中文字幕| 亚洲三级小视频| 精品成人私密视频| 92国产精品观看| 国产一区二区视频在线| 亚洲一区二区偷拍精品| 国产欧美精品一区| 91麻豆精品国产91久久久久久 | 欧美一区二区三区不卡| 国产精品日韩精品欧美在线 | 日韩一区二区三区四区| 色婷婷av一区二区| 亚洲女同女同女同女同女同69| 91精品国产入口| 91久久精品网| 国产大陆亚洲精品国产| 日本美女一区二区三区| 亚洲色图制服诱惑| 国产亚洲欧洲一区高清在线观看| 6080日韩午夜伦伦午夜伦| 一本色道亚洲精品aⅴ| 国产成人av一区| 狠狠色丁香久久婷婷综合_中| 丝袜美腿一区二区三区| 尤物av一区二区| 亚洲福利视频一区二区| www.亚洲免费av| 国产精品对白交换视频| 国产精品一级二级三级| 欧美一区二区视频免费观看| 亚洲素人一区二区| 99久久精品情趣| 国产精品久久午夜| 国v精品久久久网| 日本一区二区三区在线观看| 毛片av一区二区| 欧美欧美欧美欧美首页| 亚洲国产精品麻豆| 久久精品夜夜夜夜久久|