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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mac-gprs.cc

?? 用C++編寫的GPRS協(xié)議棧源代碼
?? CC
?? 第 1 頁 / 共 3 頁
字號:
					}					}					if (j != gprs_slots_per_frame_+1 ) {					break;				}			}			if (i==max_num_freq_ && j==gprs_slots_per_frame_+1) {       							fprintf(stderr," No GPRS freq/slot free..... cant allot.  \n");				return;			}			} 		else { // it's a gsm node			for ( i=0; i<max_num_freq_ ; i++) { 			    for ( j=gprs_slots_per_frame_+1 ; j< SLOTS_PER_FRAME; j++) {					if (vlr_.up_table[i][j] == -10) {						break;					}					}					if (j != SLOTS_PER_FRAME ) {					break;				}			}			if ( i==max_num_freq_ && j==SLOTS_PER_FRAME) {       							fprintf(stderr," No GSM freq/slot free..... cant allot.  \n");				return;			}			} 				 	// => i, j are the first free freq-slot pair.		// reserve them for the requesting Mobile 		vlr_.up_table[i][j] = ms_ ;		vlr_.down_table[i][j] = ms_;		freq=i;		slot=j;	//showing the current reservations		for (i=0; i < max_num_freq_; i++) {	        for (j=0; j < SLOTS_PER_FRAME; j++) {          				if (verbose_==1)				printf ("vlr_.up_table [%d][%d] = %d \n", i,j, vlr_.up_table [i][j]  );			}	}				return;}/* To handle incoming packet. */void MacGprs::recv(Packet* p, Handler* h) {	MobileNode * node_ = (MobileNode*)(netif_->node());	if (node_->base_stn() != node_->address()) {//node !=BS ie its an MS 		ms_recv(p,h);    }			else if (node_->base_stn() == node_->address()) {//node is its own BS ie its aBS 		bs_recv(p,h);	}}			void MacGprs::ms_recv(Packet* p, Handler* h){		struct hdr_cmn *ch = HDR_CMN(p);	struct hdr_mac_gprs *dh = HDR_MAC_GPRS(p);	int dst = ETHER_ADDR(dh->dh_da);   	int src = ETHER_ADDR(dh->dh_sa);   		int i,j,len; 			if (ch->direction() == hdr_cmn::UP) {	// ie MS rx pkt from phy on a Downlink slot					if ( src == 0  && (dst == index_ || ((u_int32_t)dst == MAC_BROADCAST) ) ){			if ( rx_chan[down_slot_-1] == ch->chan() )   {				if (verbose_==1)				printf("<%d> %f ms_recv pkt 4 me at phy. mac_src=%d mac-dst=%d, next_hop=%s,\n			  uid= %d. ptype=%s. \n",				index_, NOW, src, dst, Address::instance().print_nodeaddr (ch->next_hop_) ,       				ch->uid(), packet_info.name(ch->ptype()) );					if (mhRel_.busy() !=0 /*&& (ch->ptype()!=PT_ACK) */					/*&&  (dh->dh_fc.fc_type != MAC_Type_Control)*/ ) {									mhRel_.stop();					if (verbose_==1)					   printf("<%d> %f  pkt goin UP. release timer stopped \n", index_, NOW); 										if (q_ !=NULL && gprs_ ==1){						len= q_->length();	//restart timer if length =0						if ( len==0 && (down_slot_ != 1) && (rx_chan[down_slot_-1] !=-10) ) {							slot_release_time_ = (4*SLOTS_PER_FRAME) *slot_time_;							mhRel_.start(slot_release_time_);							if (verbose_==1)							    printf("<%d> %f  release timer started: 1 \n",index_, NOW);   						}					}				}									pktRx[down_slot_-1] = p;				radioSwitch(ON); 				rx_from_phy ( pktRx[down_slot_-1] );  			}			}			return;	}   if (verbose_==1)	 printf("<%d> %f ms_recv pkt at IFQ. mac_src=%d mac-dst=%d, next_hop=%s,			 uid= %d. ptype=%s. rlc_seqno=%d, size=%d\n",			index_, NOW, src, dst, Address::instance().print_nodeaddr (ch->next_hop_) ,       			ch->uid(), packet_info.name(ch->ptype()), HDR_RLC(p)->seqno(), ch->size() );	callback_ = h;	if	( (u_int32_t)dst == MAC_BROADCAST && ch->ptype() != PT_ARP ){ 		j = 0;   		if (verbose_==1)		   printf("<%d> %f Ms: pkt to broadcast dst=%d \n", NOW,dst);	} 	else {		// find upslot/freq to tx on		for ( j=1; j< SLOTS_PER_FRAME ; j++) {			if ( tx_chan[j] != -10 ) { //ie MS has been allotted SOME upchan				break;			 }		 }		if (j==SLOTS_PER_FRAME) { // => I dont have a channel so far - ask for one.			if (mhwait_.busy() !=0 ) {// wait timer busy - waiting for res reply..   				if (verbose_==1)				   printf("<%d> %f I am waiting for res_reply \n", index_, NOW);				return; 			}    			if (verbose_==1)			   printf("<%d> %f I dont have a chan yet - will send a resource request.\n", index_, NOW);			send_res_request();			p_temp=p;// store the pkt to tx later.....			return;		}		}	  	//if we have multiple ARP requests: drop 	if ( ch->ptype()==PT_ARP )  {		 Packet::free(p) ;         if (verbose_==1)		    printf("<%d> %f I got multiple ARP requests. Dropped duplicates.\n",  index_, NOW); 		 return;	}	 			ch->chan() = tx_chan[j]; //stamp pkt hdr with chan num	pktTx[j] = p; // schedule pkt to be txd in upslot j		   if (verbose_==1) 	  printf("<%d> %f MS: pkt 2b txd in [Uslot %d],[chan %d]. ptype=%s uid=%d\n, 			  rlc_seqno=%d size=%d\n",			index_, NOW, j, tx_chan[j], packet_info.name(ch->ptype()), 			ch->uid(), HDR_RLC(p)->seqno(),ch->size() );		rx_from_ll (pktTx[j] ); // add MAC hdr onto pkt			if (mhRel_.busy() !=0 /*&&  (dh->dh_fc.fc_type != MAC_Type_Control)*/ ) {		mhRel_.stop();   		if (verbose_==1)		    printf("<%d> %f  pkt goin DOWN. release timer stopped \n", index_, NOW);   	}	return;}			void MacGprs::bs_recv(Packet* p, Handler* h) {	int i,j; 		struct hdr_cmn *ch = HDR_CMN(p);	struct hdr_mac_gprs *dh = HDR_MAC_GPRS(p);	int dst = ETHER_ADDR(dh->dh_da);   	int src = ETHER_ADDR(dh->dh_sa);        	if (ch->direction() == hdr_cmn::UP) {	// BS rxs pkt from phy at start of upslot.    //error model: only on uplink. if u want both uplink and downlink	//to have errors, just put these 11 lines above the if(..direction..)		if (rlc_error_==1 && index_==0) {// pkts are marked  only at BS. generally		drop_counter_ ++;		if (drop_counter_ == next_drop_) { 		    ch->error() = 1; //mark the pkt as erroneous			drop_gap_ = Random::integer(error_rate_);//find next pkt to drop			next_drop_ = next_drop_ + drop_gap_;		    if (verbose_==1)				printf("<%d> %f rlc pkt error. pkt %d being marked. next_drop=%d\n", 				 index_, NOW, drop_counter_,next_drop_);         }    }		if (((u_int32_t)dst == MAC_BROADCAST) || (dst == index_) ) {			   			if (verbose_==1)			    printf("<%d> %f bs_recv pkt 4 me at phy, mac_src=%d mac-dst=%d, next_hop=%s,\n		  		   uid= %d. ptype=%s. upslot=%d rlc_seqno=%d \n",			index_, NOW, src, dst, Address::instance().print_nodeaddr (ch->next_hop_) ,       			ch->uid(), packet_info.name(ch->ptype()), (up_slot_ -1), HDR_RLC(p)->seqno()  );						i = ch->chan();			rxQ[i][up_slot_-1] = p;			radioSwitch(ON);			rx_from_phy ( rxQ[i][up_slot_-1] );  		}		return;	}			// ie for down slot: pkt rxd from IFQ. prepare to tx	callback_ = h;   if (verbose_==1)	printf("<%d> %f bs_recv pkt at IFQ, mac_src=%d mac-dst=%d, next_hop=%s,\n		  uid= %d. ptype=%s. \n",		index_, NOW, src, dst, Address::instance().print_nodeaddr (ch->next_hop_) ,       		ch->uid(), packet_info.name(ch->ptype()) );		if	( (u_int32_t) dst == MAC_BROADCAST /*|| ch->ptype()==PT_ARP*/ ){   		if (verbose_==1)		   printf("<%d> %f BS. have to broadcast pkt \n", index_, NOW);	 	// downchan[0], downslot[0] reserved for broadcast/signalling 		ch->chan()=0 ; //stamp pkt hdr		txQ[0][0] = p ;		rx_from_ll(txQ[0][0]);		return;	}	else {		//find the first freq/slot combo allotted for this mac-dst 		for (i=0; i< max_num_freq_ ;i++){			// leave out i=0 coz reserved for Broadcast/signalling			for (j=1 ; j< SLOTS_PER_FRAME; j++ ) {				if ( dst == vlr_.down_table[i][j]) {					break;				}			}			if (j!= SLOTS_PER_FRAME) {   				if (verbose_==1)			//	  printf("<%d> %f I can tx in Downslot=%d, on freq=%d\n",index_, NOW, j, i);				break;				}		}			if ( i==max_num_freq_ && j==SLOTS_PER_FRAME) { //eiteher dst is a fixed node			//or it hasnt got a slot yet. 			if (mhwait_.busy() !=0 ) {// res reply ready.. but hasnt been txed yet.....   				if (verbose_==1)				  printf("<%d> %f  res_reply not yet recv by MS\n", index_, NOW);				 //return; 			} 			else {   				if (verbose_==1)				   printf("<%d> %f have to allot slots to dst=%d \n", index_, NOW, dst);					slot_allot( dst, i, j); 				send_res_reply(dst,i,j);			}				dh->dh_wait = 1;   			if (verbose_==1)		        printf("<%d> %f bs_recv dh_wait set for txQ[%d][%d]=%d \n", index_, NOW, i, j,dh->dh_wait );				//return;		}				ch->chan()=i ; //stamp pkt hdr		txQ[i][j] = p ;			   		if (verbose_==1)	     	printf("<%d> %f BS: pkt 2b txd in [Dslot %d],[chan %d]. ptype=%s uid=%d \n",			index_, NOW, j, i, packet_info.name(ch->ptype()), ch->uid() );		rx_from_ll(txQ[i][j]);		return;	}	}void MacGprs::rx_from_phy(Packet* p) {	struct hdr_cmn *ch = HDR_CMN(p);	struct hdr_mac_gprs* dh = HDR_MAC_GPRS(p);      		//check for collision at BS (check only at BS!) if this is a Random Access Channel	if ( ch->chan()==0 && up_slot_ ==1 && index_==0) {	// this is why u have t omake sure BS is index_==0!!!		switch (chan0_0) {			case IDLE:   				 if (verbose_==1)				  printf("<%d> %f uh oh!! chan0_0 idle - though a request/ARP was txd!!\n", 						index_, NOW );				return;				break;			case BUSY:				 // recive normally				 break;			case COLL :				 // if chan0_0 != 0 or 1 => many MS txing = collision				 Packet::free(p) ; //drop the pkt				 coll_count --;   				 if (verbose_==1)				    printf("<%d> %f chan0_0  collision. pkt dropped. coll_count=%d  \n" ,						 index_, NOW, coll_count);				 break;		}		if  (chan0_0 == BUSY) {			double rtime = TX_Time(p);						if (rtime > slot_time_) rtime= slot_time_ ;// hack-just in case.			   		    if (verbose_==1)			   printf("<%d> %f rtime = %f \n", index_, NOW, rtime);			assert(rtime >= 0);  			mhRxPkt_.start(p, rtime); 		//	mhRxPkt_.start(p, slot_time_); 					chan0_0 = IDLE;   		    if (verbose_==1)			   printf("<%d> %f recv timr started for chan0_0, chan made IDLE \n" , index_, NOW);   		}	   			if  (chan0_0 == COLL && coll_count==0) {			chan0_0 = IDLE;   		    if (verbose_==1)			   printf("<%d> %f chan0_0 made IDLE. all coll sensed.\n" , index_, NOW);   		}					return;	}			//jsut in case ..... ;) 	if (ch->error() == 1) {	//	Packet::free(p) ;   	    drop(p);		if (verbose_==1)		   printf("<%d> %f pkt dropped. ch->error()=1 \n", index_, NOW);		return;	}			double rtime = TX_Time(p);		//if pkt's too large - tx/rx only for one slot interval		if (rtime > slot_time_) rtime= slot_time_ ;		    		if (verbose_==1)		   printf("<%d> %f rtime=%f \n", index_, NOW, rtime);		assert(rtime >= 0);  		mhRxPkt_.start(p, rtime); 		//mhRxPkt_.start(p, slot_time_); }// Forward data to RLC/LL after pkt rxd from PHY ie when RxPktTimer times out.// Adjust the MAC packet size: strip off the mac header for data// and fwd to ll.// else check which control type and deal accordingly// NB: MAC control messgs are terminated here only and not passed// to the RLC/LLvoid MacGprs::fwd_DATA_to_LL(Packet *p){	int i,j, freq, slot;	float temp;	double backoff_time;		struct hdr_cmn *ch2;	struct hdr_mac_gprs *dh2;		struct hdr_cmn *ch = HDR_CMN(p);	struct hdr_mac_gprs* dh = HDR_MAC_GPRS(p); 	int src_ = ETHER_ADDR(dh->dh_sa); //the ode tha sent the res_request  		switch ( dh->dh_fc.fc_type) {				case MAC_Type_Data:							ch->size() -= ETHER_HDR_LEN;			ch->num_forwards() += 1;   		    if (verbose_==1)			   printf("<%d> %f  fwding_data_to_LL \n", index_, NOW);			uptarget_->recv(p, (Handler*) 0);			break;				case MAC_Type_Control:			switch (dh->dh_fc.fc_subtype) {								case MAC_Subtype_res_request: //happens at BS					//look for next free slot in vlr and assign it 					 slot_allot (src_, freq, slot);   					 if (verbose_==1)					    printf ("<%d> %f res request recvd. freq%d, slot%d reserved for <%d>.\n",							 index_, NOW, freq, slot, src_);									 send_res_reply (src_,freq, slot);					 //	break;					 return;									case MAC_Subtype_res_reply: //happens at MS									mhwait_.stop(); //stop the RA wait timer.					// set tx/rx_chan;					slot = dh->dh_slot;					freq = dh->dh_freq;					tx_chan[slot]=freq;					rx_chan[slot]=freq; // tx and rx r symmetric   					if (verbose_==1)					   printf ("<%d> %f res reply recvd. freq=%d slot=%d\n", index_, NOW, freq, slot);					// send the old pkt waiting at BS					if ( txQ[freq][slot] ==NULL) {					//	printf (" BS: no pkt waiting ...txq[%d][%d]  NULL \n", freq, slot);					}					else {						dh2 = HDR_MAC_GPRS(txQ[freq][slot]);						dh2->dh_wait=0;   						if (verbose_==1)						    printf("<%d> %f BS: OLD  pkt waiting. dh wait corrected \n", index_, NOW );					}					// if there's a packet buffered at the MS, send it					if ( p_temp!= NULL) {						ch2 = HDR_CMN(p_temp);						ch2->chan() = freq;   //stamp pkt hdr with chan num						pktTx[slot] = p_temp; // schedule pkt to be txd in upslot j						p_temp= NULL;         //clear p_temp.   						if (verbose_==1)						    printf("<%d> %f MS: got chan. OLD pkt 2b txd in [Uslot %d],[chan %d]. p type=%s uid=%d\n",								index_, NOW, slot, freq,packet_info.name(ch2->ptype()), ch2->uid() );							rx_from_ll ( pktTx[slot] ); // add MAC hdr onto pkt					}										//unblock IFQ				    q_->unblock();						if (verbose_==1) printf("<%d> %f IFQ unblocked \n", index_, NOW);										return;				    //	break;									case MAC_Subtype_tx_end: //happens at BS					//find MS entry in vlr and clear					for (i=0; i< max_num_freq_ ;i++){						for (j=1 ; j< gprs_slots_per_frame_; j++ ) {							if ( src_ == vlr_.down_table[i][j]) {   								if (verbose_==1)								    printf("vlr entry for %d, slot%d freq%d, deleted.\n", src_,j, i );								vlr_.down_table[i][j] = -10;								vlr_.up_table[i][j] = -10;								break;							}						}						if ( j!= gprs_slots_per_frame_) {							break;							}					}						return;				//	break;			}			default:			break;			//nothing.. the only MAC types are data and control.	}}// creates a resource_request message and schedules it to be sent// in the next upslot 0void MacGprs::send_res_request(){ // sent by an MS to its  BS		int dst;	Packet *p1 = Packet::alloc();		struct hdr_cmn* ch1= HDR_CMN(p1);	struct hdr_mac_gprs* dh1 = HDR_MAC_GPRS(p1);		MobileNode * node_ = (MobileNode*)(netif_->node());		dst=0; //hack since index_==0 => BS

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美另类z0zxhd电影| 久久久久国产精品厨房| 国产精品一二三在| 亚洲一区欧美一区| 国产精品污污网站在线观看| 欧美久久久久久久久| av在线不卡网| 国产在线看一区| 性做久久久久久免费观看欧美| 日本一区二区三区免费乱视频| 制服丝袜av成人在线看| 一本大道av伊人久久综合| 黑人精品欧美一区二区蜜桃| 视频一区在线播放| 亚洲精品国产品国语在线app| 国产欧美一区二区精品性色超碰| 欧美男男青年gay1069videost | 三级亚洲高清视频| 亚洲视频免费在线| 国产精品系列在线| 久久精品亚洲国产奇米99| 制服丝袜成人动漫| 欧美三级在线播放| 欧日韩精品视频| 91丨九色丨黑人外教| jiyouzz国产精品久久| 国产 日韩 欧美大片| 国产麻豆9l精品三级站| 精久久久久久久久久久| 青青草国产精品亚洲专区无| 午夜精品久久久久久| 亚洲一区二区五区| 亚洲一区二区三区四区在线免费观看 | 欧美日韩高清不卡| 在线精品国精品国产尤物884a | 欧美一级欧美三级在线观看 | 99精品视频在线观看| 高清成人在线观看| 成人性生交大片免费看中文| 国产精品69毛片高清亚洲| 国内成人精品2018免费看| 奇米777欧美一区二区| 日本视频免费一区| 日本欧美肥老太交大片| 蜜臀av一区二区三区| 久久精品国产一区二区三区免费看| 日韩中文字幕不卡| 青草av.久久免费一区| 麻豆视频一区二区| 国产一区在线不卡| 成人深夜在线观看| 91在线视频官网| 欧美日韩一区二区三区免费看| 欧美婷婷六月丁香综合色| 欧美日韩国产一区| 精品久久人人做人人爽| 久久免费看少妇高潮| 国产精品久久久一区麻豆最新章节| 综合激情成人伊人| 午夜av一区二区三区| 欧美a级理论片| 国产精品一区二区三区四区| 不卡一区二区三区四区| 在线一区二区观看| 日韩一区二区在线观看视频| 亚洲精品一区二区三区蜜桃下载 | a在线欧美一区| 欧美视频一区二区三区四区| 欧美一区二区三区小说| 国产亚洲精品免费| 亚洲精品一二三| 美女尤物国产一区| 成人免费视频播放| 欧美日本在线看| 国产日韩欧美综合一区| 一区二区三区**美女毛片| 麻豆一区二区三| 99re66热这里只有精品3直播| 欧美日韩亚洲国产综合| 久久精品人人爽人人爽| 一区二区免费看| 国产自产v一区二区三区c| 色婷婷综合视频在线观看| 日韩手机在线导航| 中文字幕色av一区二区三区| 日韩电影一区二区三区| 国产一区二区免费在线| 在线观看亚洲a| 国产亚洲欧美在线| 天堂成人国产精品一区| 成人精品国产一区二区4080| 欧美一区二区三区影视| 亚洲美女淫视频| 国产在线精品一区二区三区不卡 | 欧美日高清视频| 国产精品久久久久久久久免费丝袜 | 国产精品传媒入口麻豆| 美女国产一区二区| 欧美在线三级电影| 国产精品三级av| 久久成人免费网站| 欧美日韩免费一区二区三区视频 | 久久亚洲一区二区三区四区| 亚洲国产日韩一区二区| 成人午夜在线免费| 欧美成人精品二区三区99精品| 亚洲精品成a人| 国产成人一级电影| 一区精品在线播放| 国内精品国产成人| 欧美一级片在线观看| 亚洲大片一区二区三区| av在线不卡网| 中文字幕乱码久久午夜不卡 | 91精品啪在线观看国产60岁| 亚洲欧美日本在线| 不卡在线观看av| 欧美国产禁国产网站cc| 国内精品国产成人国产三级粉色| 欧美高清dvd| 香蕉成人伊视频在线观看| 色综合视频在线观看| 国产精品人人做人人爽人人添| 国产综合色精品一区二区三区| 欧美一级免费观看| 日韩国产欧美在线播放| 欧美日韩aaaaaa| 图片区小说区国产精品视频| 91成人网在线| 亚洲一区二区四区蜜桃| 在线观看日韩高清av| 亚洲另类春色国产| 在线精品国精品国产尤物884a| 亚洲欧美日韩国产一区二区三区| 99久久精品费精品国产一区二区| 国产精品水嫩水嫩| 成人av在线电影| 中文字幕人成不卡一区| 成人动漫av在线| 亚洲视频小说图片| 在线中文字幕不卡| 亚洲成人免费在线观看| 欧美精品久久久久久久多人混战| 亚洲va国产天堂va久久en| 欧美日韩一级大片网址| 视频一区二区三区在线| 日韩一级二级三级精品视频| 麻豆精品国产91久久久久久| 精品噜噜噜噜久久久久久久久试看| 久久国产三级精品| 国产网红主播福利一区二区| 风流少妇一区二区| 综合久久一区二区三区| 欧美中文字幕一区| 秋霞影院一区二区| 久久久久国产免费免费| a级精品国产片在线观看| 亚洲一区免费观看| 日韩欧美亚洲国产精品字幕久久久| 久久成人久久爱| 亚洲国产电影在线观看| 色94色欧美sute亚洲13| 婷婷国产v国产偷v亚洲高清| 日韩欧美的一区二区| 国产精品123| 亚洲最大成人网4388xx| 欧美一级二级在线观看| 成人网在线免费视频| 成人性视频免费网站| 一级做a爱片久久| 日韩一区二区电影在线| 成熟亚洲日本毛茸茸凸凹| 一区二区三区四区不卡在线 | 精品少妇一区二区三区免费观看| 国产91对白在线观看九色| 亚洲制服丝袜av| 精品久久久久久久一区二区蜜臀| av在线这里只有精品| 日韩精品成人一区二区三区| 亚洲国产精品激情在线观看| 欧美私模裸体表演在线观看| 韩国av一区二区三区四区| 一区二区国产视频| 欧美精品一区二区久久婷婷| 色综合久久中文综合久久97| 另类小说图片综合网| 亚洲精品写真福利| 久久美女高清视频 | 日本一区二区三区久久久久久久久不 | 亚洲乱码国产乱码精品精98午夜| 日韩欧美二区三区| 在线视频国产一区| 国产suv精品一区二区三区| 午夜精品福利一区二区三区av| 国产女人aaa级久久久级| 欧美一区二区免费视频| 91碰在线视频| 国产不卡免费视频| 麻豆国产精品一区二区三区| 亚洲精品视频免费看|