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

📄 mac-802_16.cc

📁 WiMAX source code for NS-2, v1.03
💻 CC
📖 第 1 页 / 共 3 页
字号:
					case PT_UGS:							ss_buf->lookup(creatid)->UGS.enque(p->copy());		
							break;					case PT_rtPS:							ss_buf->lookup(creatid)->rtPS.enque(p->copy());		
							break;					case PT_nrtPS:														ss_buf->lookup(creatid)->nrtPS.enque(p->copy());	
							break;					case PT_ertPS:														ss_buf->lookup(creatid)->ertPS.enque(p->copy());	
							break;					case PT_BE:														ss_buf->lookup(creatid)->BE.enque(p->copy());		
							break;				}
								if(check_list->RSPenable(creatid))
				{ 					if(ss_buf->lookup(creatid)->set_UGS==0) 
					{								if(ss_buf->lookup(creatid)->UGS.byteLength()!=0)
						{							sendBWREQ(ss_buf->lookup(creatid)->UGS.byteLength(),Search_BCID_macSA(creatid)->BCID,PT_UGS, mac_->macDA_,mac_->macSA_); 							ss_buf->lookup(creatid)->set_UGS=1;						}					}					if(ss_buf->lookup(creatid)->set_rtPS==0)
					{ 						if(ss_buf->lookup(creatid)->rtPS.byteLength()!=0)
						{							sendBWREQ(ss_buf->lookup(creatid)->rtPS.byteLength(),Search_BCID_macSA(creatid)->BCID,PT_rtPS, mac_->macDA_,creatid);							ss_buf->lookup(creatid)->set_rtPS=1;						}						}								if(ss_buf->lookup(creatid)->set_ertPS==0)
					{ 						if(ss_buf->lookup(creatid)->ertPS.byteLength()!=0)
						{							sendBWREQ(ss_buf->lookup(creatid)->ertPS.byteLength(),Search_BCID_macSA(creatid)->BCID,PT_ertPS, mac_->macDA_,creatid);							ss_buf->lookup(creatid)->set_ertPS=1;						}					}									if(ss_buf->lookup(creatid)->set_nrtPS==0)
					{						if(ss_buf->lookup(creatid)->nrtPS.byteLength()!=0)
						{							sendBWREQ(ss_buf->lookup(creatid)->nrtPS.byteLength(),Search_BCID_macSA(creatid)->BCID,PT_nrtPS, mac_->macDA_,creatid);							ss_buf->lookup(creatid)->set_nrtPS=1;						}					}									if(ss_buf->lookup(creatid)->set_BE==0) 
					{						if(ss_buf->lookup(creatid)->BE.byteLength()!=0)
						{							sendBWREQ(ss_buf->lookup(creatid)->BE.byteLength(),Search_BCID_macSA(creatid)->BCID,PT_BE, mac_->macDA_,creatid); 							ss_buf->lookup(creatid)->set_BE=1;						}					}							}				Scheduler& s = Scheduler::instance();								if(!abstract_)	s.schedule(&hRes_, &intr_, 0);				}
			else	sendDown(p);		}		return;	}}
bool Mac802_16::Call_Admission_Control(int BCID,packet_t ptype,int BR_BW)
{	if(CAC_UL - BR_BW >= 0)
	{		CAC_UL -= BR_BW;		printf("BS Remainder Uplink Bandwidth %f\n",CAC_UL);		return true;	}	else		return false;}
void Mac802_16::Bandwidth_Management()
{	double DL_BW,UL_BW;	BCID_List *BCID_tmp;	/*-------------------Downlink-------------------*/	Tmp_DL_BW = BS_DL_BW;	BCID_tmp=BCID_head;	DL_burst_profile=0;	while(BCID_tmp!=NULL)
	{		SFID_List *SFID_tmp=BCID_tmp->SF;		BCID_tmp->SS_DL_BW = 0;		while(SFID_tmp!= NULL)
		{			if(SFID_tmp->SFID%10==5)				BCID_tmp->SS_DL_BW += SFID_tmp->BW;			else if(SFID_tmp->SFID%10==6)				BCID_tmp->SS_DL_BW += SFID_tmp->BW;			else if(SFID_tmp->SFID%10==7)				BCID_tmp->SS_DL_BW += SFID_tmp->BW;			else if(SFID_tmp->SFID%10==8)				BCID_tmp->SS_DL_BW += SFID_tmp->BW;			else if(SFID_tmp->SFID%10==9)				BCID_tmp->SS_DL_BW += SFID_tmp->BW;			SFID_tmp=SFID_tmp->next;		}		if(BCID_tmp->SS_DL_BW>0 && Tmp_UL_BW - BCID_tmp->SS_DL_BW>=0)
		{						Tmp_DL_BW -= BCID_tmp->SS_DL_BW;			DLMAP_SS[DL_burst_profile]=BCID_tmp->BCID;						DL_burst_profile++;		}		BCID_tmp=BCID_tmp->next;			}		sendDLMAP(DL_burst_profile);		/*---------------------Uplink---------------------*/	Tmp_UL_BW = BS_UL_BW;	BCID_tmp=BCID_head;	UL_burst_profile=0;	while(BCID_tmp!=NULL)
	{		SFID_List *SFID_tmp=BCID_tmp->SF;		BCID_tmp->SS_UL_BW = 0;		while(SFID_tmp!=NULL)
		{			if(SFID_tmp->SFID%10==0)				BCID_tmp->SS_UL_BW += SFID_tmp->BW;			else if(SFID_tmp->SFID%10==1)				BCID_tmp->SS_UL_BW += SFID_tmp->BW;			else if(SFID_tmp->SFID%10==2)				BCID_tmp->SS_UL_BW += SFID_tmp->BW;			else if(SFID_tmp->SFID%10==3)				BCID_tmp->SS_UL_BW += SFID_tmp->BW;			else if(SFID_tmp->SFID%10==4)				BCID_tmp->SS_UL_BW += SFID_tmp->BW;			SFID_tmp=SFID_tmp->next;		}		if(BCID_tmp->SS_UL_BW>0 && Tmp_UL_BW - BCID_tmp->SS_UL_BW>=0)
		{			Tmp_UL_BW -= BCID_tmp->SS_UL_BW;			CAC_UL=Tmp_UL_BW;			ULMAP_SS[UL_burst_profile]=BCID_tmp->BCID;			UL_burst_profile++;		}		UL_BW += BCID_tmp->SS_UL_BW;		BCID_tmp=BCID_tmp->next;	}		sendULMAP(UL_burst_profile);}
void Mac802_16::BS_Scheduler(int BCID, int Symbol_number)
{			BCID_List* BCID_tmp = Search_BCID(BCID);	int All_UGS_BW=-1,All_ertPS_BW=-1,All_rtPS_BW=-1,All_nrtPS_BW=-1,All_BE_BW=-1;	if(BCID_tmp!= NULL)
	{		SFID_List* SFID_tmp=BCID_tmp->SF;		while(SFID_tmp!=NULL)
		{				if(SFID_tmp->SFID%10==5)				All_UGS_BW += SFID_tmp->BW;			else if(SFID_tmp->SFID%10==6)				All_ertPS_BW += SFID_tmp->BW;			else if(SFID_tmp->SFID%10==7)				All_rtPS_BW += SFID_tmp->BW;			else if(SFID_tmp->SFID%10==8)				All_nrtPS_BW += SFID_tmp->BW;			else if(SFID_tmp->SFID%10==9)				All_BE_BW += SFID_tmp->BW;			SFID_tmp=SFID_tmp->next;			}	}		if(All_UGS_BW!=-1)	PDU_Generator(PT_UGS, All_UGS_BW+1, BCID);	if(All_ertPS_BW!=-1)PDU_Generator(PT_ertPS, All_ertPS_BW+1, BCID);	if(All_rtPS_BW!=-1)	PDU_Generator(PT_rtPS, All_rtPS_BW+1, BCID);		if(All_nrtPS_BW!=-1)PDU_Generator(PT_nrtPS, All_nrtPS_BW+1, BCID);	if(All_BE_BW!=-1)	PDU_Generator(PT_BE, All_BE_BW+1, BCID);	}
void Mac802_16::SS_Scheduler(int BCID, int Symbol_number)
{	BCID_List* BCID_tmp = Search_BCID(BCID);	int All_UGS_BW=-1,All_ertPS_BW=-1,All_rtPS_BW=-1,All_nrtPS_BW=-1,All_BE_BW=-1;	if(BCID_tmp!= NULL)
	{		SFID_List* SFID_tmp=BCID_tmp->SF;		while(SFID_tmp!=NULL)
		{				if(SFID_tmp->SFID%10==0)				All_UGS_BW += SFID_tmp->BW;			else if(SFID_tmp->SFID%10==1)				All_ertPS_BW += SFID_tmp->BW;			else if(SFID_tmp->SFID%10==2)				All_rtPS_BW += SFID_tmp->BW;			else if(SFID_tmp->SFID%10==3)				All_nrtPS_BW += SFID_tmp->BW;			else if(SFID_tmp->SFID%10==4)				All_BE_BW += SFID_tmp->BW;			SFID_tmp=SFID_tmp->next;			}	}		if(All_UGS_BW!=-1)	SS_PDU_Generator(PT_UGS, All_UGS_BW+1, BCID);	if(All_ertPS_BW!=-1)SS_PDU_Generator(PT_ertPS, All_ertPS_BW+1, BCID);	if(All_rtPS_BW!=-1)	SS_PDU_Generator(PT_rtPS, All_rtPS_BW+1, BCID);		if(All_nrtPS_BW!=-1)SS_PDU_Generator(PT_nrtPS, All_nrtPS_BW+1, BCID);	if(All_BE_BW!=-1)	SS_PDU_Generator(PT_BE, All_BE_BW+1, BCID);}
void Mac802_16::sendRNGREQ(int SA)
{ 	printf("SS %d is sending RNGREQ to BS\n",creatid);	Packet* p= Packet::alloc();		struct hdr_cmn *hdr = HDR_CMN(p);	struct hdr_mac* mac_ = HDR_MAC(p); 	struct hdr_mac802_16* mac_16 =HDR_MAC802_16(p);	struct rng_req_t* rngreq = HDR_MAC802_16_RNGREQ(p);	 		mac_->macDA_ = 0;	mac_->macSA_ = creatid;	hdr->txtime() = 0.0001;	hdr->uid() = 0;    hdr->ptype() = PT_RNGREQ;    hdr->size() = 10;    hdr->iface() = -2;    hdr->error() = 0; 	//generic mac header	mac_16->HT =0;	mac_16->EC =1;	mac_16->type=1;	mac_16->CI=1; 	mac_16->EKS=1;	mac_16->LEN=3;	mac_16->CID=0; // CID here is 0	mac_16->HCS=0;	mac_16->mmt=4; 	rngreq->downlinkchannelid = 1;	rngreq->ReqDownlinkBurPro = 1;	rngreq->ssMACAddr = creatid;	rngreq->MACver =16;
		pktRNGREQ_=p;
	BFt.start(cw_,State_,symbolDuration_);	}
void Mac802_16::sendRNGRSP(int ssmac,int BSCID)
{	printf("BS is sending RNGRSP to SS %d\n",BSCID);	Packet* a= Packet::alloc();		struct hdr_cmn *hdr = HDR_CMN(a);	struct hdr_mac* mac_ = HDR_MAC(a); 	struct hdr_mac802_16* mac_16 =HDR_MAC802_16(a);	struct rng_rsp_t* rngrsp = HDR_MAC802_16_RNGRSP(a);	mac_->macDA_=ssmac;	mac_->macSA_=creatid;	hdr->txtime() = 0.0001;	hdr->uid() = 0;    hdr->ptype() = PT_RNGRSP;    hdr->size() = 24;    hdr->iface() = -2;    hdr->error() = 0; 	mac_16->HT =0;	mac_16->EC =1;	mac_16->type=1;	mac_16->CI=1; 	mac_16->EKS=1;	mac_16->LEN=3;	mac_16->CID=BSCID; 	mac_16->HCS=0;	mac_16->mmt=5; 		rngrsp->BasicCID = BSCID;	rngrsp->SSMAC = ssmac;	rngrsp->RNGstatus = 0;	rngrsp->uplinkchannelid=0;	rngrsp->RNGstatus=0;	rngrsp->PriManCID=0;		rngrsp->FrameNum=0;	rngrsp->IniRNGOpp=0;		pktRNGRSP_=a;    transmit(pktRNGRSP_,0);}
void Mac802_16::sendBWREQ(int BR, int CID, packet_t pype, int DA,int SA)
{	Packet* p= Packet::alloc();	p->destIP=DA;	struct hdr_cmn *hdr = HDR_CMN(p);	struct hdr_mac802_16* mac_16 =HDR_MAC802_16(p);		struct bw_req_t* br =HDR_MAC802_16_BWREQ(p) ;	struct hdr_mac* mac_ = HDR_MAC(p); 	mac_->macDA_ = 0;	mac_->macSA_ = SA;	hdr->txtime() = 0.000002;	hdr->uid() = 0;    hdr->ptype() = PT_BWREQ;    hdr->size() = 24;    hdr->iface() = -2;    hdr->error() = 0;	mac_16->HT =1;		mac_16->type=1;	mac_16->CI=1; 	mac_16->EKS=1;		br->HT =1;	br->EC =0;	br->BR =BR*10;		br->CID=creatid; 	br->HCS=1;	switch(pype){			case PT_UGS:	
			br->Type=0x0;   
			printf("SS %d is send UGS Bandwidth Request to BS\n",this->creatid); 	
			break;		case PT_ertPS: 	
			br->Type=0x1;	
			printf("SS %d is send ertPS Bandwidth Request BS\n",this->creatid);    	
			break;		case PT_rtPS: 	
			br->Type=0x2; 	
			printf("SS %d is send rtPS Bandwidth Request BS\n",this->creatid);		
			break;		case PT_nrtPS: 	
			br->Type=0x3; 	
			printf("SS %d is send nrtPS Bandwidth Request BS\n",this->creatid);		
			break;		case PT_BE: 	
			br->Type=0x4;   
			printf("SS %d is send BE Bandwidth Request BS\n",this->creatid);		
			break;		default: break;	}	pktBr_=p;
	SendBW.start(cw_bw,State_,symbolDuration_);}
Packet* Mac802_16::sendULMAP(int UL_burst_profile)
{	printf("There are %d Uplink SSs %d \n",UL_burst_profile);	Packet *p=Packet::alloc();	struct hdr_cmn *hdr = HDR_CMN(p);	struct hdr_mac *mac_ = HDR_MAC(p);	struct hdr_mac802_16 *mac_16 = HDR_MAC802_16(p);	struct UL_MAP* ulmap=HDR_MAC802_16_UL_MAP(p);	int Symbol_offset=0;	mac_->macDA_ = MAC_BROADCAST;	mac_->macSA_ = creatid;	hdr->txtime() = 0.000001;	hdr->uid() = 0;	hdr->ptype() = PT_ULMAP;	hdr->size() = 10;	hdr->iface() = -2;	hdr->error() = 0; 		mac_16->HT =0;	mac_16->EC =1;	mac_16->type=1;	mac_16->CI=1; 	mac_16->EKS=1;	mac_16->LEN=3;	mac_16->CID=0; 	mac_16->HCS=0;	mac_16->mmt=3; 			ulmap->management_message_type=3;	ulmap->uplink_channel_id=1;		allocation_start_time=Scheduler::instance().clock()+dlmapDuration_;		for(int i=0;i<UL_burst_profile;i++)
	{		ULMAP_IE[i].cid=ULMAP_SS[i];			ULMAP_IE[i].uiuc=i+1;		ULMAP_IE[i].OFDMA_Symbol_offset=Symbol_offset;		ULMAP_IE[i].Subchannel_offset=0x0;		if(Search_BCID(ULMAP_SS[i])->SS_UL_BW/(channelNO_*dataSize_)-(int)(Search_BCID(ULMAP_SS[i])->SS_UL_BW/(channelNO_*dataSize_))>0.0)
		{			ULMAP_IE[i].OFDMA_Symbol_number = (int)(Search_BCID(ULMAP_SS[i])->SS_UL_BW/(channelNO_*dataSize_))+1;		}
		else
		{			ULMAP_IE[i].OFDMA_Symbol_number = (int)(Search_BCID(ULMAP_SS[i])->SS_UL_BW/(channelNO_*dataSize_));		}		ULMAP_IE[i].Subchannel_number=channelNO_;		ULMAP_IE[i].Ranging_Method=0x0;		Symbol_offset+=ULMAP_IE[i].OFDMA_Symbol_number;	}		ULMAP_IE[UL_burst_profile].uiuc=0xc;	pktULMAP_=p;	SendUL.start(2*symbolDuration_);}
Packet* Mac802_16::sendDLMAP(int DL_burst_profile)
{	printf("There are %d  Downlink SSs \n",DL_burst_profile);	Packet *p=Packet::alloc();	struct hdr_cmn *hdr = HDR_CMN(p);	struct hdr_mac *mac_ = HDR_MAC(p);	struct hdr_mac802_16 *mac_16 = HDR_MAC802_16(p);	struct DL_MAP* dlmap=HDR_MAC802_16_DL_MAP(p);	int Symbol_offset=0;	mac_->macDA_ = MAC_BROADCAST;	mac_->macSA_ = creatid;	hdr->txtime() = 0.000001;	hdr->uid() = 0;	hdr->ptype() = PT_DLMAP;	hdr->size() = 10;	hdr->iface() = -2;	hdr->error() = 0; 

⌨️ 快捷键说明

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