📄 mac-802_16.cc
字号:
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 + -