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

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

?? mac-802_11.cc

?? ns2 中802.11 mac層的實現代碼!
?? CC
?? 第 1 頁 / 共 4 頁
字號:
voidMac802_11::rx_resume(){	assert(pktRx_ == 0);	assert(mhRecv_.busy() == 0);	SET_RX_STATE(MAC_IDLE);}/* ======================================================================   Timer Handler Routines   ====================================================================== */voidMac802_11::backoffHandler(){	if(pktCTRL_) {		assert(mhSend_.busy() || mhDefer_.busy());		return;	}	// wqos - Fri 13 Oct 00, 09:03 - dugdale	if(check_pktPCF() == 0)		return;	// wqos - changes by dugdale ends		if(check_pktRTS() == 0)		return;	if(check_pktTx() == 0)		return;}voidMac802_11::deferHandler(){// wqos - Sat 18 Aug 01, 13:14 - dugdale	assert(pktCTRL_ || pktRTS_ || pktTx_ || pktPCF_);// wqos - changes by dugdale ends	if(check_pktCTRL() == 0)		return;	// wqos - Sat 18 Aug 01, 13:15 - dugdale 	if(check_pktPCF() == 0)		return;	// wqos - changes by dugdale ends		// wqos - Sat 06 Jan 01, 15:22 - dugdale	// REMOVE THIS LATER!!!!!	//if(mhBackoff_.busy())	//	mhBackoff_.stop();	// Let's see if it works with the above commented out.	// wqos - changes by dugdale ends	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(){	// wqos - Fri 06 Oct 00, 11:38 - dugdale	// If this is the PC, and we have had a CFP, end it now	if(!pc_&&cfp_) 		cfp_=0;	// wqos - changes by dugdale ends	if(is_idle() && mhBackoff_.paused())		mhBackoff_.resume(difs_);}voidMac802_11::recvHandler(){	recv_timer();}voidMac802_11::sendHandler(){	send_timer();}voidMac802_11::txHandler(){	tx_active_ = 0;}// wqos - Tue 26 Sep 00, 16:49 - dugdalevoidMac802_11::beaconHandler(){	// Schedule the next beacon	mhBeacon_.start(macmib_->dot11BeaconPeriod*0.001024);	// Send the beacon	send_beacon();}voidMac802_11::pcfHandler(){	if(pc_) {		// Send CFEnd frame		cfp_=0;	} else {		set_nav(macmib_->dot11CFPMaxDuration);	}}// wqos - changes by dugdale ends/* ======================================================================   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;		// wqos - Wed 08 Nov 00, 14:43 - dugdale		// If we are a base station and this is during a CFP we want to send a		// CFPoll or CFEnd frame		if(cfp_&&pc_) {			// Check if there is time left on the CFP and if there are polls left to send			if((Scheduler::instance().clock()<lastPoll_)&&pollsToSend_) {				pollsToSend_--;				sendPoll();			} else {				sendCFEnd();			}		}		// wqos - changes by dugdale ends		break;		// wqos - Thu 26 Oct 00, 16:14 - dugdale	case MAC_BEACONING:		if(pktPCF_) {			Packet::free(pktPCF_); pktPCF_ = 0;		}			if(cfp_) { // Now we have sent the beacon and should start the CFP			do_cfp();		}		break;		// wqos - changes by dugdale ends				// wqos - Tue 10 Oct 00, 14:52 - dugdale 	case MAC_POLLING:		fprintf(stderr, "Poll timed out!!!\n");		Packet::free(pktPCF_); pktPCF_ = 0;		// Check if there is time left on the CFP and if there are polls left to send		if((Scheduler::instance().clock()<lastPoll_)&&pollsToSend_) {			pollsToSend_--;			sendPoll();		} else {			sendCFEnd();		}		break;		// wqos - changes by dugdale ends	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;		}		SET_TX_STATE(MAC_CTS);		timeout = (mh->dh_duration * 1e-6) + CTS_Time; // XXX		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:		SET_TX_STATE(MAC_ACK);		timeout = ACK_Time;		break;	default:		fprintf(stderr, "check_pktCTRL:Invalid MAC Control subtype\n");		exit(1);	}        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;		}		SET_TX_STATE(MAC_RTS);		timeout = CTSTimeout;		break;	default:		fprintf(stderr, "check_pktRTS:Invalid MAC Control subtype\n");		exit(1);	}        TRANSMIT(pktRTS_, timeout);	return 0;}intMac802_11::check_pktTx(){	struct hdr_mac802_11 *mh;	double timeout;		assert(mhBackoff_.busy() == 0);	if(pktTx_ == 0)		return -1;	mh = HDR_MAC802_11(pktTx_);       	int len = HDR_CMN(pktTx_)->size();	switch(mh->dh_fc.fc_subtype) {	case MAC_Subtype_Data:		// wqos - Thu 30 Nov 00, 15:06 - dugdale 		if(! is_idle()&&!cfp_) {			// wqos - changes by dugdale ends			sendRTS(ETHER_ADDR(mh->dh_da));			inc_cw();			mhBackoff_.start(cw_, is_idle());			return 0;		}		SET_TX_STATE(MAC_SEND);		if((u_int32_t)ETHER_ADDR(mh->dh_da) != MAC_BROADCAST)			//timeout = ACKTimeout(netif_->txtime(pktTx_))+5;			// why 10 ? buggy			//timeout = ACKTimeout(len) + 10;			timeout = ACKTimeout(len);		else			timeout = TX_Time(pktTx_);		break;	default:		fprintf(stderr, "check_pktTx:Invalid MAC Control subtype\n");		//printf("pktRTS:%x, pktCTS/ACK:%x, pktTx:%x\n",pktRTS_, pktCTRL_,pktTx_);		exit(1);	}        TRANSMIT(pktTx_, timeout);	return 0;}// wqos - Tue 10 Oct 00, 14:11 - dugdale intMac802_11::check_pktPCF(){	struct hdr_mac802_11 *mh;	double timeout;		//  assert(mhBackoff_.busy() == 0);		if(pktPCF_ == 0)		return -1;		mh = HDR_MAC802_11(pktPCF_);	int len = HDR_CMN(pktPCF_)->size();		switch(mh->dh_fc.fc_type) {	case MAC_Type_Data:		switch(mh->dh_fc.fc_subtype) {		case MAC_Subtype_CFPoll:			fprintf(stderr,"Sent poll to %d at time %f\n",ETHER_ADDR(mh->dh_da), (Scheduler::instance()).clock());			// The polled station should respond within a PIFS			timeout = TX_Time(pktPCF_)+pifs_;			SET_TX_STATE(MAC_POLLING);			break;		}		break;	case MAC_Type_Control:		switch(mh->dh_fc.fc_subtype) {		case MAC_Subtype_CFEnd:			if(! is_idle()) {				return -1;				inc_cw();				mhBackoff_.start(cw_, is_idle());				return 0;			}						timeout = TX_Time(pktPCF_);			SET_TX_STATE(MAC_BEACONING); // HMMM... CHANGE!!!			break;		}		break;	case MAC_Type_Management:		switch(mh->dh_fc.fc_subtype) {		case MAC_Subtype_Beacon:			//      if(tx_state_ != MAC_IDLE)			if(!is_idle())				return -1;			struct beacon_frame *beacon = (struct beacon_frame *)pktPCF_->access(hdr_mac::offset_);			timeout = TX_Time(pktPCF_);			// Check if this beacon starts a CFP			if(beacon->bf_cfparamset.CFPCount == 0)				cfp_ = 1; // CFP...			fprintf(stderr, "Really sent beacon at %f\n", Scheduler::instance().clock());			SET_TX_STATE(MAC_BEACONING);		}		break;	default:		fprintf(stderr, "check_pktPCF:Invalid MAC (sub)type\n");				exit(1);	}		TRANSMIT(pktPCF_, timeout);		return 0;}// wqos - changes by dugdale ends/* * Low-level transmit functions that actually place the packet onto * the channel. */voidMac802_11::sendRTS(int dst){	Packet *p = Packet::alloc();	hdr_cmn* ch = HDR_CMN(p);	struct rts_frame *rf = (struct rts_frame*)p->access(hdr_mac::offset_);		assert(pktTx_);	assert(pktRTS_ == 0);	/*	 *  If the size of the packet is larger than the	 *  RTSThreshold, then perform the RTS/CTS exchange.	 *	 *  XXX: also skip if destination is a broadcast	 */	if( (u_int32_t) HDR_CMN(pktTx_)->size() < macmib_->RTSThreshold ||	    (u_int32_t) dst == MAC_BROADCAST) {		Packet::free(p);		//p = 0;		return;	}	ch->uid() = 0;	ch->ptype() = PT_MAC;	ch->size() = ETHER_RTS_LEN;	ch->iface() = -2;	ch->error() = 0;	bzero(rf, MAC_HDR_LEN);	rf->rf_fc.fc_protocol_version = MAC_ProtocolVersion; 	rf->rf_fc.fc_type	= MAC_Type_Control; 	rf->rf_fc.fc_subtype	= MAC_Subtype_RTS; 	rf->rf_fc.fc_to_ds	= 0; 	rf->rf_fc.fc_from_ds	= 0; 	rf->rf_fc.fc_more_frag	= 0; 	rf->rf_fc.fc_retry	= 0; 	rf->rf_fc.fc_pwr_mgt	= 0; 	rf->rf_fc.fc_more_data	= 0; 	rf->rf_fc.fc_wep	= 0; 	rf->rf_fc.fc_order	= 0;	rf->rf_duration = RTS_DURATION(pktTx_);	//ETHER_ADDR(rf->rf_ra) = dst;	STORE4BYTE(&dst, (rf->rf_ra));	//ETHER_ADDR(rf->rf_ta) = index_;	STORE4BYTE(&index_, (rf->rf_ta));	pktRTS_ = p;}voidMac802_11::sendCTS(int dst, double rts_duration){	Packet *p = Packet::alloc();	hdr_cmn* ch = HDR_CMN(p);	struct cts_frame *cf = (struct cts_frame*)p->access(hdr_mac::offset_);	assert(pktCTRL_ == 0);	ch->uid() = 0;	ch->ptype() = PT_MAC;	ch->size() = ETHER_CTS_LEN;	ch->iface() = -2;	ch->error() = 0;	//ch->direction() = hdr_cmn::DOWN;	bzero(cf, MAC_HDR_LEN);	cf->cf_fc.fc_protocol_version = MAC_ProtocolVersion;	cf->cf_fc.fc_type	= MAC_Type_Control;	cf->cf_fc.fc_subtype	= MAC_Subtype_CTS; 	cf->cf_fc.fc_to_ds	= 0; 	cf->cf_fc.fc_from_ds	= 0; 	cf->cf_fc.fc_more_frag	= 0; 	cf->cf_fc.fc_retry	= 0; 	cf->cf_fc.fc_pwr_mgt	= 0; 	cf->cf_fc.fc_more_data	= 0; 	cf->cf_fc.fc_wep	= 0; 	cf->cf_fc.fc_order	= 0;		cf->cf_duration = CTS_DURATION(rts_duration);	//ETHER_ADDR(cf->cf_ra) = dst;	STORE4BYTE(&dst, (cf->cf_ra));	//STORE4BYTE(&dst, (mh->dh_da));	pktCTRL_ = p;	}voidMac802_11::sendACK(int dst){	Packet *p = Packet::alloc();	hdr_cmn* ch = HDR_CMN(p);	struct ack_frame *af = (struct ack_frame*)p->access(hdr_mac::offset_);	assert(pktCTRL_ == 0);	ch->uid() = 0;	ch->ptype() = PT_MAC;	ch->size() = ETHER_ACK_LEN;	ch->iface() = -2;	ch->error() = 0;		bzero(af, MAC_HDR_LEN);	af->af_fc.fc_protocol_version = MAC_ProtocolVersion; 	af->af_fc.fc_type	= MAC_Type_Control; 	af->af_fc.fc_subtype	= MAC_Subtype_ACK; 	af->af_fc.fc_to_ds	= 0; 	af->af_fc.fc_from_ds	= 0; 	af->af_fc.fc_more_frag	= 0; 	af->af_fc.fc_retry	= 0; 	af->af_fc.fc_pwr_mgt	= 0; 	af->af_fc.fc_more_data	= 0; 	af->af_fc.fc_wep	= 0; 	af->af_fc.fc_order	= 0;	af->af_duration = ACK_DURATION();	//ETHER_ADDR(af->af_ra) = dst;	STORE4BYTE(&dst, (af->af_ra));	pktCTRL_ = p;}voidMac802_11::sendDATA(Packet *p){	hdr_cmn* ch = HDR_CMN(p);	struct hdr_mac802_11* dh = HDR_MAC802_11(p);	assert(pktTx_ == 0);	/*	 * Update the MAC header	 */	ch->size() += ETHER_HDR_LEN;	dh->dh_fc.fc_protocol_version = MAC_ProtocolVersion;	dh->dh_fc.fc_type       = MAC_Type_Data;	dh->dh_fc.fc_subtype    = MAC_Subtype_Data;	//printf(".....p = %x, mac-subtype-%d\n",p,dh->dh_fc.fc_subtype);		dh->dh_fc.fc_to_ds      = 0;	dh->dh_fc.fc_from_ds    = 0;	dh->dh_fc.fc_more_frag  = 0;	dh->dh_fc.fc_retry      = 0;	dh->dh_fc.fc_pwr_mgt    = 0;	dh->dh_fc.fc_more_data  = 0;	dh->dh_fc.fc_wep        = 0;	dh->dh_fc.fc_order      = 0;	if((u_int32_t)ETHER_ADDR(dh->dh_da) != MAC_BROADCAST)		dh->dh_duration = DATA_DURATION();         else		dh->dh_duration = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人激情综合网站| 国产成人精品亚洲日本在线桃色 | 成人毛片在线观看| 美女爽到高潮91| 午夜欧美在线一二页| 亚洲精品视频一区二区| 成人欧美一区二区三区黑人麻豆 | 粉嫩av一区二区三区| 国产专区欧美精品| 国产精品99久久久久| 极品少妇一区二区三区精品视频| 久88久久88久久久| 国产麻豆精品久久一二三| 国产精选一区二区三区| 岛国精品一区二区| 在线免费观看成人短视频| 91精品福利视频| 欧美日韩在线一区二区| 日韩色在线观看| 久久久噜噜噜久久中文字幕色伊伊| 久久这里只有精品首页| 欧美激情一区在线| 一区二区三区欧美久久| 美国十次了思思久久精品导航| 国产剧情一区在线| 91麻豆swag| 欧美一级一区二区| 国产网站一区二区三区| 亚洲人123区| 日本不卡的三区四区五区| 国产精品小仙女| 99国产精品99久久久久久| 欧美私人免费视频| 久久伊人中文字幕| 一卡二卡欧美日韩| 麻豆精品在线观看| 91亚洲精品久久久蜜桃网站| 在线播放/欧美激情| 久久久精品国产99久久精品芒果 | 久久精品男人天堂av| 亚洲视频一二三| 欧美aⅴ一区二区三区视频| 国产91在线|亚洲| 欧美三级一区二区| 成人激情小说网站| 精品久久久久香蕉网| 99精品久久久久久| 欧美一区二区在线免费播放 | 老司机免费视频一区二区 | 亚洲视频在线观看一区| 麻豆国产欧美日韩综合精品二区 | 91麻豆精品国产91久久久久| 国产精品网曝门| 日本免费新一区视频| 日本电影欧美片| 欧美激情一区二区三区在线| 美腿丝袜亚洲一区| 欧美性猛片xxxx免费看久爱 | 91麻豆福利精品推荐| 久久久美女艺术照精彩视频福利播放| 亚洲国产三级在线| 99久久国产综合精品色伊| 欧美sm极限捆绑bd| 蜜桃传媒麻豆第一区在线观看| 在线免费一区三区| 亚洲女性喷水在线观看一区| 成人动漫一区二区| 国产精品人妖ts系列视频| 国产在线视频精品一区| 欧美一级视频精品观看| 日本三级韩国三级欧美三级| 欧美日韩高清一区二区不卡| 亚洲成人综合视频| 在线看日本不卡| 亚洲乱码日产精品bd| 91小视频在线| 一区二区三区在线视频观看58| 91麻豆国产精品久久| 亚洲免费观看高清完整版在线观看 | 国产三级欧美三级日产三级99| 蜜桃精品视频在线观看| 精品国内二区三区| 久久精品理论片| 久久久久久久电影| 成人综合日日夜夜| 亚洲视频免费观看| 色婷婷久久久久swag精品| 亚洲精品综合在线| 欧美精品乱码久久久久久按摩| 日韩电影免费在线看| 26uuu另类欧美| 成人看片黄a免费看在线| 国产精品美女一区二区| 色网站国产精品| 日韩经典一区二区| 久久久无码精品亚洲日韩按摩| 粗大黑人巨茎大战欧美成人| 久久国产欧美日韩精品| 久久一区二区视频| 91色婷婷久久久久合中文| 亚洲成人综合视频| 国产亚洲一区二区三区| 色综合久久久久综合99| 三级久久三级久久| 久久久一区二区| 日本精品视频一区二区三区| 日本成人在线一区| 中文字幕亚洲一区二区av在线| 欧美午夜在线一二页| 国产资源精品在线观看| 亚洲一卡二卡三卡四卡| 欧美xfplay| 欧美在线综合视频| 国产乱子伦一区二区三区国色天香| 国产精品国产自产拍高清av| 91精品国产91久久久久久最新毛片| 高清国产一区二区| 日韩精彩视频在线观看| 日韩久久一区二区| 日韩欧美国产系列| 色天天综合色天天久久| 精品一区二区在线播放| 一区二区三区在线观看动漫| 日韩欧美电影一二三| 欧美在线观看视频一区二区| 国产成人99久久亚洲综合精品| 午夜精品久久久久久久| 国产精品久久久久久久久快鸭 | 国产欧美日韩卡一| 69堂国产成人免费视频| 99久久伊人网影院| 久久99热这里只有精品| 亚洲一区二区综合| 国产精品国产三级国产专播品爱网 | 国产精选一区二区三区| 三级在线观看一区二区| 亚洲黄色av一区| 国产精品卡一卡二卡三| 精品久久久久久无| 日韩一区二区电影| 欧美剧在线免费观看网站| 91婷婷韩国欧美一区二区| 国产精品一区二区免费不卡| 看电影不卡的网站| 免费成人在线网站| 午夜欧美在线一二页| 亚洲 欧美综合在线网络| 亚洲综合久久av| 伊人一区二区三区| 亚洲人亚洲人成电影网站色| 中文字幕日韩欧美一区二区三区| 久久免费电影网| 久久精品夜夜夜夜久久| 26uuu精品一区二区三区四区在线| 日韩美女在线视频| 久久夜色精品国产欧美乱极品| 精品国产一区二区国模嫣然| 精品国产91洋老外米糕| 精品国产91洋老外米糕| 国产午夜精品久久久久久久| 亚洲国产高清在线| 亚洲精品视频免费观看| 一区二区三区在线视频免费 | 亚洲美女视频在线| 亚洲欧美综合另类在线卡通| 国产精品激情偷乱一区二区∴| 中文字幕中文字幕一区二区| 亚洲乱码国产乱码精品精的特点| 亚洲精品老司机| 日日骚欧美日韩| 久久精品99久久久| 粉嫩在线一区二区三区视频| 懂色av噜噜一区二区三区av| 91丨porny丨蝌蚪视频| 精品视频免费在线| 欧美成人性福生活免费看| 国产午夜精品久久| 一区二区成人在线| 老司机精品视频线观看86 | 亚洲国产日韩一级| 日本va欧美va欧美va精品| 国产乱对白刺激视频不卡| 色呦呦网站一区| 日韩午夜在线播放| 国产精品色一区二区三区| 一区二区三区免费网站| 久久超碰97中文字幕| 不卡电影一区二区三区| 欧美日韩黄色一区二区| 精品电影一区二区三区| 亚洲精品自拍动漫在线| 久久不见久久见免费视频7| www.亚洲免费av| 欧美一区二区成人| 国产精品久久久久久久久搜平片| 日韩av在线发布| 99久久夜色精品国产网站| 欧美mv和日韩mv的网站| 亚洲一区二区三区三| 国产精品亚洲人在线观看|