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

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

?? mac-802_11.cc

?? 在網絡仿真模擬工具下實現MAC層802.11DCF協議
?? CC
?? 第 1 頁 / 共 4 頁
字號:
inline int Mac802_11::hdr_src(char* hdr, int src ){	struct hdr_mac802_11 *dh = (struct hdr_mac802_11*) hdr;	// change wrt Mike's code	/*if(src > -2)		STORE4BYTE(&src, (dh->dh_sa));	return ETHER_ADDR(dh->dh_sa);*/        if(src > -2)               STORE4BYTE(&src, (dh->dh_ta));        return ETHER_ADDR(dh->dh_ta);	// change ends}inline int Mac802_11::hdr_type(char* hdr, u_int16_t type){	struct hdr_mac802_11 *dh = (struct hdr_mac802_11*) hdr;	if(type)		STORE2BYTE(&type,(dh->dh_body));	return GET2BYTE(dh->dh_body);}/* ======================================================================   Misc Routines   ====================================================================== */// change wrt Mike's code#undef INTERLEAVING// change endsinline intMac802_11::is_idle(){	// change wrt Mike's code #ifdef INTERLEAVING #define INTERLEAVING_TIME 0.030       Scheduler &s = Scheduler::instance();       double st = s.clock();       double nextCycle = floor(st / (INTERLEAVING_TIME*2) + 1)                               * INTERLEAVING_TIME*2;       double nextSwitch = nextCycle - INTERLEAVING_TIME               - phymib_.getDIFS()               - phymib_.getSIFS()                              + txtime(phymib_.getCTSlen(), basicRate_)               - txtime(phymib_.getCTSlen(), basicRate_) * 2               - (Random::random() % cw_) * phymib_.getSlotTime();       if ((st >= nextSwitch) && (st < nextCycle)) {               if (nextCycle > nav_) {                       nav_ = nextCycle;                       if (mhNav_.busy()) {                               mhNav_.stop();                       }                       mhNav_.start(nextCycle - st);               }               return(0);       } #endif	// change ends	if(rx_state_ != MAC_IDLE)		return 0;	if(tx_state_ != MAC_IDLE)		return 0;	if(nav_ > Scheduler::instance().clock())		return 0;		return 1;}voidMac802_11::discard(Packet *p, const char* why){	hdr_mac802_11* mh = HDR_MAC802_11(p);	hdr_cmn *ch = HDR_CMN(p);#if 0	/* old logic 8/8/98 -dam */	/*	 * If received below the RXThreshold, then just free.	 */	if(p->txinfo_.Pr < p->txinfo_.ant.RXThresh) {		Packet::free(p);		//p = 0;		return;	}#endif // 0	/* if the rcvd pkt contains errors, a real MAC layer couldn't	   necessarily read any data from it, so we just toss it now */	if(ch->error() != 0) {		Packet::free(p);		//p = 0;		return;	}	switch(mh->dh_fc.fc_type) {	case MAC_Type_Management:		drop(p, why);		return;	case MAC_Type_Control:		switch(mh->dh_fc.fc_subtype) {		case MAC_Subtype_RTS:			// change wrt Mike's code			//if((u_int32_t)ETHER_ADDR(mh->dh_sa) == 			 if((u_int32_t)ETHER_ADDR(mh->dh_ta) ==  (u_int32_t)index_) {				drop(p, why);				return;			}			//change ends			/* fall through - if necessary */		case MAC_Subtype_CTS:		case MAC_Subtype_ACK:			// change wrt Mike's code			//if((u_int32_t)ETHER_ADDR(mh->dh_da) == 			if((u_int32_t)ETHER_ADDR(mh->dh_ra) == \			 (u_int32_t)index_) {				drop(p, why);				return;			}			break;		default:			fprintf(stderr, "invalid MAC Control subtype\n");			exit(1);		}		break;	case MAC_Type_Data:		switch(mh->dh_fc.fc_subtype) {		case MAC_Subtype_Data:			// change wrt Mike's code			/*if((u_int32_t)ETHER_ADDR(mh->dh_da) == \			   (u_int32_t)index_ ||			   (u_int32_t)ETHER_ADDR(mh->dh_sa) == \			   (u_int32_t)index_ ||			   (u_int32_t)ETHER_ADDR(mh->dh_da) == MAC_BROADCAST) {				drop(p,why);				return;			*/			if((u_int32_t)ETHER_ADDR(mh->dh_ra) == \                           (u_int32_t)index_ ||                          (u_int32_t)ETHER_ADDR(mh->dh_ta) == \                           (u_int32_t)index_ ||                          (u_int32_t)ETHER_ADDR(mh->dh_ra) == MAC_BROADCAST) {                                drop(p,why);                                return;			}			break;		default:			fprintf(stderr, "invalid MAC Data subtype\n");			exit(1);		}		break;	default:		fprintf(stderr, "invalid MAC type (%x)\n", mh->dh_fc.fc_type);		trace_pkt(p);		exit(1);	}	Packet::free(p);}voidMac802_11::capture(Packet *p){	/*	 * Update the NAV so that this does not screw	 * up carrier sense.	 */	// change wrt Mike's code	//set_nav(usec(eifs_ + txtime(p)));		set_nav(usec(phymib_.getEIFS() + txtime(p)));	Packet::free(p);}voidMac802_11::collision(Packet *p){	switch(rx_state_) {	case MAC_RECV:		// change wrt Mike's code		//SET_RX_STATE(MAC_COLL);		setRxState(MAC_COLL);		/* fall through */	case MAC_COLL:		assert(pktRx_);		assert(mhRecv_.busy());		/*		 *  Since a collision has occurred, figure out		 *  which packet that caused the collision will		 *  "last" the longest.  Make this packet,		 *  pktRx_ and reset the Recv Timer if necessary.		 */		if(txtime(p) > mhRecv_.expire()) {			mhRecv_.stop();			discard(pktRx_, DROP_MAC_COLLISION);			pktRx_ = p;			mhRecv_.start(txtime(pktRx_));		}		else {			discard(p, DROP_MAC_COLLISION);		}		break;	default:		assert(0);	}}voidMac802_11::tx_resume(){	double rTime;	assert(mhSend_.busy() == 0);	assert(mhDefer_.busy() == 0);	if(pktCTRL_) {		/*		 *  Need to send a CTS or ACK.		 */		// change wrt Mike's code		//mhDefer_.start(sifs_);		mhDefer_.start(phymib_.getSIFS());	} else if(pktRTS_) {		if(mhBackoff_.busy() == 0) {			// change wrt Mike's code			/*			rTime = (Random::random() % cw_) * phymib_->SlotTime;			mhDefer_.start(difs_ + rTime);			*/			 rTime = (Random::random() % cw_)                               * phymib_.getSlotTime();                       mhDefer_.start( phymib_.getDIFS() + rTime);		}	} else if(pktTx_) {		if(mhBackoff_.busy() == 0) {			hdr_cmn *ch = HDR_CMN(pktTx_);			struct hdr_mac802_11 *mh = HDR_MAC802_11(pktTx_);						// change wrt Mike's code			/*			if ((u_int32_t) ch->size() < macmib_->RTSThreshold ||			    (u_int32_t) ETHER_ADDR(mh->dh_da) == MAC_BROADCAST) {				rTime = (Random::random() % cw_) * phymib_->SlotTime;				mhDefer_.start(difs_ + rTime);			} else {				mhDefer_.start(sifs_);			}			*/			if ((u_int32_t) ch->size() < macmib_.getRTSThreshold()                                || (u_int32_t) ETHER_ADDR(mh->dh_ra)                                               == MAC_BROADCAST)                       {                               rTime = (Random::random() % cw_)                                       * phymib_.getSlotTime();                               mhDefer_.start(phymib_.getDIFS() + rTime);                        } else {                               mhDefer_.start(phymib_.getSIFS());                        }		}	} else if(callback_) {		Handler *h = callback_;		callback_ = 0;		h->handle((Event*) 0);	}	// change wrt Mike's code	//SET_TX_STATE(MAC_IDLE);	setTxState(MAC_IDLE);}voidMac802_11::rx_resume(){	assert(pktRx_ == 0);	assert(mhRecv_.busy() == 0);	// change wrt Mike's code	//SET_RX_STATE(MAC_IDLE);	setRxState(MAC_IDLE);}/* ======================================================================   Timer Handler Routines   ====================================================================== */voidMac802_11::backoffHandler(){///-ak-------//	printf("backoff andler \n");	if(pktCTRL_) {		assert(mhSend_.busy() || mhDefer_.busy());		return;	}	if(check_pktRTS() == 0)		return;	if(check_pktTx() == 0)		return;}// change wrt Mike's code void Mac802_11::beaconHandler() {       /* schedule timer for the next beacon! */ //    mhBeacon_.start(cfp_period_); }voidMac802_11::deferHandler(){	assert(pktCTRL_ || pktRTS_ || pktTx_);	if(check_pktCTRL() == 0)		return;	assert(mhBackoff_.busy() == 0);	//if (mhBackoff_.busy() != 0)	//{	//	printf("deferHandler:mhBackoff_ busy!\n");	//	return;	//}	if(check_pktRTS() == 0)		return;	if(check_pktTx() == 0)		return;}voidMac802_11::navHandler(){	if(is_idle() && mhBackoff_.paused())		// change wrt Mike's code		//mhBackoff_.resume(difs_);		mhBackoff_.resume(phymib_.getDIFS());}voidMac802_11::recvHandler(){	recv_timer();}voidMac802_11::sendHandler(){	send_timer();}voidMac802_11::txHandler(){	// change wrtt Mike's code       if (EOTtarget_) {               assert(eotPacket_);               EOTtarget_->recv(eotPacket_, (Handler *) 0);               eotPacket_ = NULL;       }	tx_active_ = 0;}/* ======================================================================   The "real" Timer Handler Routines   ====================================================================== */voidMac802_11::send_timer(){	switch(tx_state_) {	/*	 * Sent a RTS, but did not receive a CTS.	 */	case MAC_RTS:		RetransmitRTS();		break;	/*	 * Sent a CTS, but did not receive a DATA packet.	 */	case MAC_CTS:		assert(pktCTRL_);		Packet::free(pktCTRL_); pktCTRL_ = 0;		break;	/*	 * Sent DATA, but did not receive an ACK packet.	 */	case MAC_SEND:		RetransmitDATA();		break;	/*	 * Sent an ACK, and now ready to resume transmission.	 */	case MAC_ACK:		assert(pktCTRL_);		Packet::free(pktCTRL_); pktCTRL_ = 0;		break;	case MAC_IDLE:		break;	default:		assert(0);	}	tx_resume();}/* ======================================================================   Outgoing Packet Routines   ====================================================================== */intMac802_11::check_pktCTRL(){	struct hdr_mac802_11 *mh;	double timeout;	if(pktCTRL_ == 0)		return -1;	if(tx_state_ == MAC_CTS || tx_state_ == MAC_ACK)		return -1;	mh = HDR_MAC802_11(pktCTRL_);							  	switch(mh->dh_fc.fc_subtype) {	/*	 *  If the medium is not IDLE, don't send the CTS.	 */	case MAC_Subtype_CTS:		if(!is_idle()) {			discard(pktCTRL_, DROP_MAC_BUSY); pktCTRL_ = 0;			return 0;		}		// change wrt Mike's code		//SET_TX_STATE(MAC_CTS);		setTxState(MAC_CTS);				/*		 * timeout:  cts + data tx time calculated by		 *           adding cts tx time to the cts duration		 *           minus ack tx time -- this timeout is		 *           a guess since it is unspecified		 *           (note: mh->dh_duration == cf->cf_duration)		 */		// change wrt Mike's code		/*timeout = txtime(ETHER_CTS_LEN, basicRate_)			+ DSSS_MaxPropagationDelay			// XXX			+ sec(mh->dh_duration)			+ DSSS_MaxPropagationDelay			// XXX			- sifs_			- txtime(ETHER_ACK_LEN, basicRate_);*/				 timeout = txtime(phymib_.getCTSlen(), basicRate_)                        + DSSS_MaxPropagationDelay                      // XXX                        + sec(mh->dh_duration)                        + DSSS_MaxPropagationDelay                      // XXX                       - phymib_.getSIFS()                       - txtime(phymib_.getACKlen(), basicRate_);		break;		/*		 * IEEE 802.11 specs, section 9.2.8		 * Acknowledments are sent after an SIFS, without regard to		 * the busy/idle state of the medium.		 */	case MAC_Subtype_ACK:				// change wrt Mike's code		/*SET_TX_STATE(MAC_ACK);		timeout = txtime(ETHER_ACK_LEN, basicRate_);*/		setTxState(MAC_ACK);                timeout = txtime(phymib_.getACKlen(), basicRate_);				break;	default:		fprintf(stderr, "check_pktCTRL:Invalid MAC Control subtype\n");		exit(1);	}	// change wrt Mike's code //       TRANSMIT(pktCTRL_, timeout);	transmit(pktCTRL_, timeout);	return 0;}intMac802_11::check_pktRTS(){	struct hdr_mac802_11 *mh;	double timeout;	assert(mhBackoff_.busy() == 0);	if(pktRTS_ == 0) 		return -1;	//struct hdr_cmn *ch = HDR_CMN(pktRTS_);	mh = HDR_MAC802_11(pktRTS_); 	switch(mh->dh_fc.fc_subtype) {	case MAC_Subtype_RTS:		if(! is_idle()) {			inc_cw();			mhBackoff_.start(cw_, is_idle());			return 0;		}		// change wrt Mike's code		/*SET_TX_STATE(MAC_RTS);		timeout = txtime(ETHER_RTS_LEN, basicRate_)			+ DSSS_MaxPropagationDelay			// XXX			+ sifs_			+ txtime(ETHER_CTS_LEN, basicRate_)			+ DSSS_MaxPropagationDelay;			// XXX		*/		setTxState(MAC_RTS);               timeout = txtime(phymib_.getRTSlen(), basicRate_)                       + DSSS_MaxPropagationDelay                      // XXX                       + phymib_.getSIFS()                       + txtime(phymib_.getCTSlen(), basicRate_)                       + DSSS_MaxPropagationDelay;		break;	default:		fprintf(stderr, "check_pktRTS:Invalid MAC Control subtype\n");		exit(1);	}	// change wrt Mike's code	// TRANSMIT(pktRTS_, timeout);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美不卡视频一区| 成人永久免费视频| 日韩丝袜情趣美女图片| 青青草国产精品亚洲专区无| 日韩欧美亚洲国产另类 | 一区二区三区在线播放| 欧美视频在线播放| 日韩电影在线一区| 欧美精品一区二区蜜臀亚洲| 国产精品资源在线看| 欧美激情一区二区三区蜜桃视频| 成人福利在线看| 亚洲综合无码一区二区| 91精品国产综合久久精品性色| 老司机精品视频在线| 国产日韩综合av| 在线精品视频免费观看| 久久精品国产99久久6| 国产精品麻豆视频| 欧美日韩你懂的| 国产成人精品三级麻豆| 亚洲国产综合人成综合网站| 欧美一区二区久久久| 成人黄色免费短视频| 午夜电影久久久| 亚洲国产精品二十页| 欧美日韩在线三区| 国产在线播放一区二区三区| 一区二区三区久久久| 久久免费电影网| 欧美日韩一区中文字幕| 风流少妇一区二区| 日本最新不卡在线| 最近日韩中文字幕| 日韩欧美123| 在线看一区二区| 国产精品一二三在| 日韩中文欧美在线| 亚洲天堂免费在线观看视频| 日韩美女一区二区三区| 欧洲另类一二三四区| 国产麻豆91精品| 日韩av二区在线播放| 亚洲蜜臀av乱码久久精品蜜桃| ww亚洲ww在线观看国产| 欧美怡红院视频| 成人视屏免费看| 久久99九九99精品| 日韩高清一区在线| 亚洲自拍偷拍av| 自拍偷拍欧美激情| 国产日本欧洲亚洲| 久久青草欧美一区二区三区| 欧美片在线播放| 在线精品视频免费观看| 99国产精品久久久久久久久久| 国模少妇一区二区三区| 日韩精品欧美精品| 亚瑟在线精品视频| 亚洲综合免费观看高清完整版在线| 久久久国际精品| 精品国产网站在线观看| 91精品国产aⅴ一区二区| 欧美午夜电影网| 一本久道中文字幕精品亚洲嫩| 国产99精品国产| 国产一区二区三区蝌蚪| 久久精品国产亚洲高清剧情介绍| 日韩激情中文字幕| 日本美女一区二区三区| 日韩精品一级中文字幕精品视频免费观看| 亚洲精品中文字幕在线观看| 中文字幕欧美一| 中文字幕一区二区三区精华液 | 久久不见久久见中文字幕免费| 亚洲成a人v欧美综合天堂| 亚洲永久精品大片| 亚洲亚洲精品在线观看| 一区二区三区美女| 亚洲福利视频三区| 日韩精品五月天| 久久电影网电视剧免费观看| 精东粉嫩av免费一区二区三区| 麻豆视频一区二区| 国内精品视频666| 国产精品538一区二区在线| 国产一区二区三区免费看| 国产suv精品一区二区三区| 成人爽a毛片一区二区免费| 99国产精品久| 欧美午夜精品一区| 日韩亚洲欧美中文三级| 欧美成人bangbros| 日本一区二区三区视频视频| 最新不卡av在线| 一区二区三国产精华液| 日韩电影在线观看电影| 国产精一区二区三区| 99国产精品一区| 91超碰这里只有精品国产| 日韩欧美一二三四区| 国产亚洲婷婷免费| 亚洲欧美日韩国产综合| 亚洲一级二级在线| 激情久久五月天| 99久久免费国产| 欧美精品电影在线播放| 精品国精品自拍自在线| 国产精品久久久久久久久久免费看| 亚洲色图欧洲色图| 日韩成人精品在线| 成人少妇影院yyyy| 欧美疯狂做受xxxx富婆| 国产日韩成人精品| 五月综合激情婷婷六月色窝| 国产 欧美在线| 欧美色精品在线视频| 日本一区二区在线不卡| 亚洲一区日韩精品中文字幕| 老司机午夜精品| 91天堂素人约啪| 欧美大片在线观看一区| 中文字幕视频一区| 国产剧情在线观看一区二区| 欧美无砖砖区免费| 中文字幕精品—区二区四季| 日韩中文字幕一区二区三区| 丁香婷婷深情五月亚洲| 欧美精品视频www在线观看| 中文在线一区二区| 美腿丝袜亚洲一区| 欧美亚洲国产bt| 亚洲欧美一区二区视频| 国内精品自线一区二区三区视频| 欧美主播一区二区三区| 国产精品区一区二区三| 免费在线观看成人| 在线精品视频一区二区三四| 久久久国际精品| 美腿丝袜亚洲一区| 欧美精品丝袜久久久中文字幕| 国产精品第13页| 国产一区二区电影| 日韩一区二区三区视频在线观看| 亚洲免费在线电影| 成人av免费观看| 国产亚洲午夜高清国产拍精品| 男男视频亚洲欧美| 欧美精品在线一区二区三区| 有坂深雪av一区二区精品| 成人综合在线视频| 久久久亚洲高清| 久久se精品一区精品二区| 欧美日高清视频| 一个色综合av| 在线亚洲人成电影网站色www| 欧美国产精品v| 国产剧情一区在线| 国产视频一区在线播放| 国产综合成人久久大片91| 日韩精品一区二区三区在线| 午夜免费久久看| 欧美日韩国产首页| 午夜日韩在线电影| 欧美放荡的少妇| 日韩激情中文字幕| 欧美一区二区日韩| 精品一区精品二区高清| 精品国内二区三区| 国产一区二区伦理| 国产精品美日韩| 91天堂素人约啪| 一区二区三区在线视频观看58| 91精品1区2区| 五月激情综合色| 精品久久久网站| 国产福利不卡视频| 亚洲色图第一区| 欧美色图激情小说| 日韩在线a电影| 欧美第一区第二区| 国产成人久久精品77777最新版本| 中文字幕av资源一区| 91丨porny丨在线| 亚洲午夜视频在线| 制服.丝袜.亚洲.另类.中文| 激情国产一区二区| 国产精品国产馆在线真实露脸| av综合在线播放| 五月婷婷激情综合网| 欧美zozo另类异族| 国产91精品免费| 亚洲一区av在线| 2欧美一区二区三区在线观看视频| 国产精品系列在线播放| 亚洲四区在线观看| 欧美喷潮久久久xxxxx| 国产在线播放一区二区三区| 亚洲天天做日日做天天谢日日欢| 欧美日韩高清一区|