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

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

?? mac-802_11.c

?? 在ns發(fā)布的版本中
?? C
?? 第 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;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成人免费网站| 亚洲欧洲日本在线| 91丨国产丨九色丨pron| 午夜成人免费视频| 国产精品乱人伦中文| 宅男在线国产精品| 91碰在线视频| 国产麻豆成人精品| 日韩av不卡一区二区| 国产精品成人免费| 久久久激情视频| 欧美一区二区播放| 欧美网站一区二区| 99久久国产综合精品女不卡 | 久久激五月天综合精品| 一区二区三区日韩在线观看| 国产人妖乱国产精品人妖| 制服视频三区第一页精品| 欧美综合一区二区三区| 北条麻妃国产九九精品视频| 国产福利精品导航| 欧美aaaaaa午夜精品| 性做久久久久久| 亚洲综合在线视频| 国产精品私人自拍| 国产亚洲精久久久久久| 久久夜色精品一区| 日韩欧美国产精品| 日韩三级.com| 91精品欧美福利在线观看| 欧美男男青年gay1069videost| 日本韩国欧美在线| 在线观看亚洲a| 91成人在线精品| 在线观看国产日韩| 欧美日韩色综合| 欧美日韩激情在线| 欧美美女喷水视频| 777a∨成人精品桃花网| 欧美另类一区二区三区| 欧美日韩一区不卡| 91精品国产色综合久久久蜜香臀| 91精品国产综合久久久蜜臀粉嫩 | 香蕉加勒比综合久久| 亚洲国产综合色| 婷婷综合另类小说色区| 日本成人在线视频网站| 精品影视av免费| 国产电影精品久久禁18| 国产激情91久久精品导航| 成人免费的视频| 91视频精品在这里| 欧美在线观看视频一区二区| 欧美日免费三级在线| 日韩一区二区三区免费看| 日韩三级视频在线看| 久久午夜国产精品| 国产精品乱人伦| 亚洲精品视频在线观看免费| 午夜影院久久久| 极品少妇xxxx偷拍精品少妇| 国产激情91久久精品导航 | 国产一区二区0| 成人黄色免费短视频| 欧美亚洲尤物久久| 日韩美一区二区三区| 国产喷白浆一区二区三区| 一区二区三区在线观看动漫 | aaa亚洲精品| 在线观看一区二区精品视频| 91精品国产91久久久久久一区二区 | 3atv一区二区三区| 国产亚洲综合在线| 亚洲激情综合网| 日本不卡一二三| 成人a级免费电影| 91精品国产全国免费观看 | 三级精品在线观看| 国产一区二区中文字幕| 欧洲精品视频在线观看| 26uuu成人网一区二区三区| 亚洲欧洲日韩av| 免费人成网站在线观看欧美高清| 成人avav影音| 日韩免费一区二区| 亚洲欧美日韩在线| 久久精品国产99国产精品| 色婷婷国产精品| www国产精品av| 亚洲国产欧美日韩另类综合| 激情六月婷婷综合| 欧美日韩午夜在线| 亚洲国产精华液网站w| 天堂久久久久va久久久久| 成人app在线| www一区二区| 午夜精彩视频在线观看不卡| 99精品国产视频| 久久综合色天天久久综合图片| 亚洲成精国产精品女| 成人黄色片在线观看| 欧美大度的电影原声| 性感美女极品91精品| 97se亚洲国产综合自在线观| 久久久美女艺术照精彩视频福利播放| 亚洲激情校园春色| 成人理论电影网| ww亚洲ww在线观看国产| 日韩国产高清影视| 欧美色视频在线| 一区2区3区在线看| gogogo免费视频观看亚洲一| 久久综合久久综合久久| 美女网站色91| 91精品午夜视频| 五月激情综合网| 欧美吻胸吃奶大尺度电影| 亚洲免费在线视频| 97久久精品人人澡人人爽| 国产精品久久久久久久久果冻传媒| 蜜桃视频在线观看一区二区| 欧美剧在线免费观看网站| 一区二区国产盗摄色噜噜| 成人97人人超碰人人99| 国产精品美女久久久久aⅴ| 高清shemale亚洲人妖| 国产农村妇女毛片精品久久麻豆| 国产一区二区三区美女| 精品国产乱码久久久久久图片| 美女免费视频一区二区| 日韩欧美国产综合| 九一九一国产精品| 久久只精品国产| 国产精品123区| 国产日韩欧美精品一区| 国产精品一区二区三区乱码| 久久久久久久久久久99999| 国产一区999| 欧美国产综合色视频| eeuss国产一区二区三区| 中文字幕一区二区三区四区不卡| av一区二区三区黑人| 成人免费小视频| 91久久国产综合久久| 亚洲一区二区精品视频| 666欧美在线视频| 美腿丝袜亚洲综合| 久久久久国产一区二区三区四区| 国产成人自拍在线| 亚洲欧美综合在线精品| 欧美中文字幕亚洲一区二区va在线| 亚洲电影在线免费观看| 欧美一区国产二区| 国产乱子伦一区二区三区国色天香| 中文字幕成人在线观看| 91美女片黄在线| 性欧美疯狂xxxxbbbb| 精品日韩一区二区三区免费视频| 国产精品羞羞答答xxdd| 亚洲欧美偷拍卡通变态| 91.麻豆视频| 国产河南妇女毛片精品久久久| 亚洲欧美日韩成人高清在线一区| 欧美日本在线视频| 国产一区二区久久| 亚洲欧美影音先锋| 欧美日韩不卡一区| 国产精品自在欧美一区| 日韩理论电影院| 日韩午夜av电影| 91在线视频官网| 日韩电影在线一区二区| 日本一区二区在线不卡| 欧美性极品少妇| 国产成都精品91一区二区三| 亚洲欧美日韩中文字幕一区二区三区 | 精品国产一区a| 91麻豆免费在线观看| 免播放器亚洲一区| 国产精品久久午夜夜伦鲁鲁| 欧美精品色一区二区三区| 成人午夜精品在线| 日本sm残虐另类| 亚洲欧洲成人自拍| 日韩一二三四区| 色综合天天综合在线视频| 看电视剧不卡顿的网站| 一区二区三区视频在线观看 | 图片区日韩欧美亚洲| 中文欧美字幕免费| 91精品久久久久久蜜臀| 99在线精品观看| 国内外成人在线| 天天综合色天天综合| 亚洲天堂福利av| 久久精品欧美一区二区三区不卡 | 亚洲人精品午夜| 久久亚洲综合色一区二区三区| 欧美人狂配大交3d怪物一区| 91啪亚洲精品|