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

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

?? tcp-sink.cc

?? ns2.31下的UWB(Ultra WideBand)實現
?? CC
?? 第 1 頁 / 共 2 頁
字號:
	// Dapeng	nbytes_ += numBytes;	// update the recv window; figure out how many in-order-bytes	// (if any) can be removed from the window and handed to the	// application	if (numToDeliver) {		bytes_ += numToDeliver;		recvBytes(numToDeliver);	}	// send any packets to the application      	ack(pkt);	// ACK the packet	Packet::free(pkt);	// remove it from the system}static class DelSinkClass : public TclClass {public:	DelSinkClass() : TclClass("Agent/TCPSink/DelAck") {}	TclObject* create(int, const char*const*) {		return (new DelAckSink(new Acker));	}} class_delsink;DelAckSink::DelAckSink(Acker* acker) : TcpSink(acker), delay_timer_(this){	bind_time("interval_", &interval_);	// Deleted the line below, since this is bound in TcpSink.	// bind("bytes_", &bytes_); // useby JOBS}void DelAckSink::reset() {    if (delay_timer_.status() == TIMER_PENDING)        delay_timer_.cancel();    TcpSink::reset();}void DelAckSink::recv(Packet* pkt, Handler*){	int numToDeliver;	int numBytes = hdr_cmn::access(pkt)->size();	hdr_tcp *th = hdr_tcp::access(pkt);	/* W.N. Check if packet is from previous incarnation */	if (th->ts() < lastreset_) {		// Remove packet and do nothing		Packet::free(pkt);		return;	}	acker_->update_ts(th->seqno(),th->ts(),ts_echo_rfc1323_);	numToDeliver = acker_->update(th->seqno(), numBytes);	if (numToDeliver) {                bytes_ += numToDeliver; // for JOBS                recvBytes(numToDeliver);        }	        // If there's no timer and the packet is in sequence, set a timer.        // Otherwise, send the ack and update the timer.        if (delay_timer_.status() != TIMER_PENDING &&                                th->seqno() == acker_->Seqno()) {                // There's no timer, so we can set one and choose		// to delay this ack.		// If we're following RFC2581 (section 4.2) exactly,		// we should only delay the ACK if we're know we're		// not doing recovery, i.e. not gap-filling.		// Since this is a change to previous ns behaviour,		// it's controlled by an optional bound flag.		// discussed April 2000 in the ns-users list archives.		if (RFC2581_immediate_ack_ && 			(th->seqno() < acker_->Maxseen())) {			// don't delay the ACK since			// we're filling in a gap		} else {			// delay the ACK and start the timer.	                save_ = pkt;        	        delay_timer_.resched(interval_);                	return;		}        }        // If there was a timer, turn it off.	if (delay_timer_.status() == TIMER_PENDING) 		delay_timer_.cancel();	ack(pkt);        if (save_ != NULL) {                Packet::free(save_);                save_ = NULL;        }	Packet::free(pkt);}void DelAckSink::timeout(int){	// The timer expired so we ACK the last packet seen.	if ( save_ != NULL ) {		Packet* pkt = save_;		ack(pkt);		save_ = NULL;		Packet::free(pkt);	}}void DelayTimer::expire(Event* /*e*/) {	a_->timeout(0);}/* "sack1-tcp-sink" is for Matt and Jamshid's implementation of sack. */class SackStack {protected:	int size_;	int cnt_;	struct Sf_Entry {		int left_;		int right_;	} *SFE_;public:	SackStack(int); 	// create a SackStack of size (int)	~SackStack();	int& head_right(int n = 0) { return SFE_[n].right_; }	int& head_left(int n = 0) { return SFE_[n].left_; }	int cnt() { return cnt_; }  	// how big is the stack	void reset() {		register int i;		for (i = 0; i < cnt_; i++)			SFE_[i].left_ = SFE_[i].right_ = -1;		cnt_ = 0;	}	inline void push(int n = 0) { 		if (cnt_ >= size_) cnt_ = size_ - 1;  // overflow check		register int i;		for (i = cnt_-1; i >= n; i--)			SFE_[i+1] = SFE_[i];	// not efficient for big size		cnt_++;	}	inline void pop(int n = 0) {		register int i;		for (i = n; i < cnt_-1; i++)			SFE_[i] = SFE_[i+1];	// not efficient for big size		SFE_[i].left_ = SFE_[i].right_ = -1;		cnt_--;	}};SackStack::SackStack(int sz){	register int i;	size_ = sz;	SFE_ = new Sf_Entry[sz];	for (i = 0; i < sz; i++)		SFE_[i].left_ = SFE_[i].right_ = -1;	cnt_ = 0;}SackStack::~SackStack(){	delete SFE_;}static class Sack1TcpSinkClass : public TclClass {public:        Sack1TcpSinkClass() : TclClass("Agent/TCPSink/Sack1") {}	TclObject* create(int, const char*const*) {		Sacker* sacker = new Sacker;		TcpSink* sink = new TcpSink(sacker);		sacker->configure(sink);		return (sink);        }} class_sack1tcpsink;static class Sack1DelAckTcpSinkClass : public TclClass {public:	Sack1DelAckTcpSinkClass() : TclClass("Agent/TCPSink/Sack1/DelAck") {}	TclObject* create(int, const char*const*) {		Sacker* sacker = new Sacker;		TcpSink* sink = new DelAckSink(sacker);		sacker->configure(sink);		return (sink);	}} class_sack1delacktcpsink;void Sacker::configure(TcpSink *sink){	if (sink == NULL) {		fprintf(stderr, "warning: Sacker::configure(): no TCP sink!\n");		return;	}	TracedInt& nblocks = sink->max_sack_blocks_;	if (int(nblocks) > NSA) {		fprintf(stderr, "warning(Sacker::configure): TCP header limits number of SACK blocks to %d, not %d\n", NSA, int(nblocks));		nblocks = NSA;	}	sf_ = new SackStack(int(nblocks));	nblocks.tracer(this);	base_nblocks_ = int(nblocks);	dsacks_ = &(sink->generate_dsacks_);}voidSacker::trace(TracedVar *v){	// we come here if "nblocks" changed	TracedInt* ti = (TracedInt*) v;	if (int(*ti) > NSA) {		fprintf(stderr, "warning(Sacker::trace): TCP header limits number of SACK blocks to %d, not %d\n", NSA, int(*ti));		*ti = NSA;	}	int newval = int(*ti);	delete sf_;	sf_ = new SackStack(newval);	base_nblocks_ = newval;}void Sacker::reset() {	sf_->reset();	Acker::reset();}Sacker::~Sacker(){	delete sf_;}void Sacker::append_ack(hdr_cmn* ch, hdr_tcp* h, int old_seqno) const{	// ch and h are the common and tcp headers of the Ack being constructed	// old_seqno is the sequence # of the packet we just got	        int sack_index, i, sack_right, sack_left;	int recent_sack_left, recent_sack_right;          	int seqno = Seqno();	// the last in-order packet seen (i.e. the cumulative ACK # - 1)        sack_index = 0;	sack_left = sack_right = -1;	// initialization; sack_index=0 and sack_{left,right}= -1        if (old_seqno < 0) {                printf("Error: invalid packet number %d\n", old_seqno);        } else if (seqno >= maxseen_ && (sf_->cnt() != 0))		sf_->reset();	// if the Cumulative ACK seqno is at or beyond the right edge	// of the window, and if the SackStack is not empty, reset it	// (empty it)	else if (( (seqno < maxseen_) || is_dup_ ) && (base_nblocks_ > 0)) {		// Otherwise, if the received packet is to the left of		// the right edge of the receive window (but not at		// the right edge), OR if it is a duplicate, AND we		// can have 1 or more Sack blocks, then execute the		// following, which computes the most recent Sack		// block		if ((*dsacks_) && is_dup_) {			// Record the DSACK Block			h->sa_left(sack_index) = old_seqno;			h->sa_right(sack_index) = old_seqno+1;			// record the block			sack_index++;#ifdef DEBUGDSACK			printf("%f\t Generating D-SACK for packet %d\n", Scheduler::instance().clock(),old_seqno);#endif					}		//  Build FIRST (traditional) SACK block		// If we already had a DSACK block due to a duplicate		// packet, and if that duplicate packet is in the		// receiver's window (i.e. the packet's sequence		// number is > than the cumulative ACK) then the		// following should find the SACK block it's a subset		// of.  If it's <= cum ACK field then the following		// shouldn't record a superset SACK block for it.                if (sack_index >= base_nblocks_) {			printf("Error: can't use DSACK with less than 2 SACK blocks\n");		} else {                sack_right=-1;		// look rightward for first hole 		// start at the current packet                 for (i=old_seqno; i<=maxseen_; i++) {			if (!seen_[i & wndmask_]) {				sack_right=i;				break;			}		}		// if there's no hole set the right edge of the sack		// to be the next expected packet                if (sack_right == -1) {			sack_right = maxseen_+1;                }		// if the current packet's seqno is smaller than the		// left edge of the window, set the sack_left to 0		if (old_seqno <= seqno) {			sack_left = 0;			// don't record/send the block		} else {			// look leftward from right edge for first hole 	                for (i = sack_right-1; i > seqno; i--) {				if (!seen_[i & wndmask_]) {					sack_left = i+1;					break;				}	                }			h->sa_left(sack_index) = sack_left;			h->sa_right(sack_index) = sack_right;						// printf("pkt_seqno: %i cuml_seqno: %i sa_idx: %i sa_left: %i sa_right: %i\n" ,old_seqno, seqno, sack_index, sack_left, sack_right);			// record the block			sack_index++;		}		recent_sack_left = sack_left;		recent_sack_right = sack_right;		// first sack block is built, check the others 		// make sure that if max_sack_blocks has been made		// large from tcl we don't over-run the stuff we		// allocated in Sacker::Sacker()		int k = 0;                while (sack_index < base_nblocks_) {			sack_left = sf_->head_left(k);			sack_right = sf_->head_right(k);			// no more history 			if (sack_left < 0 || sack_right < 0 ||				sack_right > maxseen_ + 1)				break;			// newest ack "covers up" this one 			if (recent_sack_left <= sack_left &&			    recent_sack_right >= sack_right) {				sf_->pop(k);				continue;			}			h->sa_left(sack_index) = sack_left;			h->sa_right(sack_index) = sack_right;						// printf("pkt_seqno: %i cuml_seqno: %i sa_idx: %i sa_left: %i sa_right: %i\n" ,old_seqno, seqno, sack_index, sack_left, sack_right);						// store the old sack (i.e. move it down one)			sack_index++;			k++;                }		if (old_seqno > seqno) {		 	/* put most recent block onto stack */			sf_->push();			// this just moves things down 1 from the			// beginning, but it doesn't push any values			// on the stack			sf_->head_left() = recent_sack_left;			sf_->head_right() = recent_sack_right;			// this part stores the left/right values at			// the top of the stack (slot 0)		}		} // this '}' is for the DSACK base_nblocks_ >= test;		  // (didn't feel like re-indenting all the code and 		  // causing a large diff)		        }	h->sa_length() = sack_index;	// set the Length of the sack stack in the header	ch->size() += sack_index * 8;	// change the size of the common header to account for the	// Sack strings (2 4-byte words for each element)}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国精品免费视频| 久久精品久久综合| 亚洲国产中文字幕在线视频综合 | 在线视频欧美区| 日韩三级视频在线看| 亚洲精品国产精华液| 久久99热狠狠色一区二区| 色88888久久久久久影院野外| 日韩欧美激情四射| 亚洲国产一区视频| 91麻豆精东视频| 2021中文字幕一区亚洲| 日韩精品亚洲专区| 色久优优欧美色久优优| 国产精品护士白丝一区av| 国内精品在线播放| 日韩欧美三级在线| 爽好多水快深点欧美视频| 一本久久精品一区二区| 欧美国产综合色视频| 狠狠色狠狠色综合日日91app| 欧美日韩亚洲综合| 亚洲精品乱码久久久久久久久 | 中文文精品字幕一区二区| 久久国产精品99久久久久久老狼| 欧美性猛片aaaaaaa做受| 亚洲激情在线播放| 色偷偷88欧美精品久久久| 国产精品五月天| 国产不卡视频在线播放| 久久精品日韩一区二区三区| 另类小说图片综合网| 欧美电视剧在线观看完整版| 久久精品久久99精品久久| 精品欧美一区二区久久| 久久99最新地址| 久久午夜电影网| 国产福利一区二区三区在线视频| 久久久久久久综合色一本| 国产美女av一区二区三区| 久久嫩草精品久久久精品| 国产寡妇亲子伦一区二区| 国产欧美一二三区| 成人综合婷婷国产精品久久蜜臀 | 欧美精品一二三区| 欧美aⅴ一区二区三区视频| 欧美一级久久久久久久大片| 毛片av一区二区| 久久亚洲精品国产精品紫薇| 国产高清无密码一区二区三区| 中文字幕不卡的av| 91亚洲大成网污www| 香蕉久久夜色精品国产使用方法| 3d动漫精品啪啪一区二区竹菊| 奇米影视一区二区三区小说| www久久精品| 成人精品视频一区二区三区| 亚洲精品视频在线| 欧美一区二区三区小说| 国产精品正在播放| 亚洲激情自拍视频| 精品国精品国产| 91尤物视频在线观看| 午夜精品福利视频网站| 久久久久一区二区三区四区| 91免费精品国自产拍在线不卡| 午夜久久久久久电影| 久久久久久97三级| 欧美日韩国产精品成人| 国产盗摄女厕一区二区三区 | 国产日本亚洲高清| 欧美日韩在线精品一区二区三区激情 | 99re热这里只有精品视频| 日韩电影在线一区| 国产精品水嫩水嫩| 制服丝袜亚洲色图| 97se亚洲国产综合自在线不卡 | 日韩区在线观看| 色婷婷综合激情| 国产综合色在线| 午夜精品一区二区三区免费视频 | www.欧美亚洲| 精品一区二区日韩| 亚洲成人在线免费| 国产精品国产精品国产专区不片| 欧美精品123区| 日本韩国一区二区| 国产激情一区二区三区四区| 男人的天堂久久精品| 亚洲图片欧美一区| 中文字幕一区av| 国产欧美日韩综合| 精品成人佐山爱一区二区| 欧美日韩高清在线| 91偷拍与自偷拍精品| 国产91精品一区二区麻豆亚洲| 日本欧美韩国一区三区| 亚洲精品国产一区二区三区四区在线| 久久免费视频色| 精品日韩一区二区三区| 欧美妇女性影城| 欧美日韩国产一级二级| 日本高清免费不卡视频| 97se狠狠狠综合亚洲狠狠| 丰满放荡岳乱妇91ww| 国产老妇另类xxxxx| 精品中文字幕一区二区| 日韩av在线发布| 三级影片在线观看欧美日韩一区二区| 亚洲男女毛片无遮挡| 1000精品久久久久久久久| 欧美激情一区二区| 欧美激情综合五月色丁香| 久久九九久久九九| 久久精品人人做| 日本一区二区三区四区| 国产欧美日韩麻豆91| 国产欧美一区视频| 综合网在线视频| 亚洲免费色视频| 亚洲大片一区二区三区| 日韩福利视频网| 久久99九九99精品| 国产福利一区在线| 色综合天天视频在线观看| 91在线视频官网| 色成年激情久久综合| 欧美日韩美少妇| 日韩无一区二区| 国产视频一区二区在线观看| 国产精品久久毛片| 亚洲综合免费观看高清完整版在线| 亚洲一卡二卡三卡四卡五卡| 丝瓜av网站精品一区二区| 久久国产精品72免费观看| 国产成人精品午夜视频免费 | 亚洲精品一二三| 男女男精品视频网| 粉嫩一区二区三区性色av| 色呦呦国产精品| 日韩免费视频一区| 国产精品热久久久久夜色精品三区| 亚洲免费在线观看| 玖玖九九国产精品| 色综合久久久久| 精品国产一区二区三区不卡 | 亚洲在线观看免费视频| 亚洲一区二区三区小说| 午夜精品久久久久久久| 亚洲成va人在线观看| 九九**精品视频免费播放| 丁香啪啪综合成人亚洲小说| 成人免费高清在线| 91免费版在线| 欧美成人精品3d动漫h| 国产精品视频免费看| 亚洲黄色录像片| 亚洲一区二区在线观看视频 | 色狠狠色狠狠综合| 欧美日韩成人激情| 欧美tk丨vk视频| 国产精品国产精品国产专区不片| 日本欧美肥老太交大片| 国产精品99久久久久久久vr| 成人av免费在线播放| 欧美日韩在线一区二区| 国产精品国产自产拍高清av| 亚洲午夜一区二区| 日韩国产欧美在线播放| 大白屁股一区二区视频| 精品视频在线免费看| 欧美xxxxx牲另类人与| 国产喂奶挤奶一区二区三区| 亚洲精品老司机| 国产一区亚洲一区| 在线欧美小视频| 中文字幕日韩一区| 麻豆成人91精品二区三区| 99久久er热在这里只有精品66| 欧美一级片在线| 亚洲柠檬福利资源导航| 精品一区二区影视| 日本韩国欧美一区| 亚洲视频在线一区观看| 久久精品国产在热久久| 日本久久电影网| 日韩精品一区二区三区视频在线观看 | 亚洲视频小说图片| 国产一二三精品| 91麻豆精品国产无毒不卡在线观看| 国产日产亚洲精品系列| 日韩av中文在线观看| 欧美精品在欧美一区二区少妇| 中文字幕一区二区三区四区不卡| 青青草97国产精品免费观看无弹窗版| 国产一区三区三区| 久久久久久久精| 久久精品国产一区二区| 欧美日韩精品二区第二页| 亚洲福中文字幕伊人影院|