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

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

?? snoop.cc

?? Ns2 TCP 協議改進 版本 提高goodput
?? CC
?? 第 1 頁 / 共 2 頁
字號:
/* -*-	Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- *//* * Copyright (c) 1997 Regents of the University of California. * All rights reserved. *  * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: * 	This product includes software developed by the Daedalus Research * 	Group at the University of California Berkeley. * 4. Neither the name of the University nor of the Research Group may be *    used to endorse or promote products derived from this software without *    specific prior written permission. *  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */#ifndef lintstatic const char rcsid[] =    "@(#) $Header: /nfs/jade/vint/CVSROOT/ns-2/tcp/snoop.cc,v 1.25 2003/01/28 23:31:03 sfloyd Exp $ (UCB)";#endif#include "snoop.h"int hdr_snoop::offset_;class SnoopHeaderClass : public PacketHeaderClass {public:        SnoopHeaderClass() : PacketHeaderClass("PacketHeader/Snoop",						sizeof(hdr_snoop)) {		bind_offset(&hdr_snoop::offset_);	}} class_snoophdr;static class LLSnoopClass : public TclClass {public:	LLSnoopClass() : TclClass("LL/LLSnoop") {}	TclObject* create(int, const char*const*) {		return (new LLSnoop());	}} llsnoop_class;static class SnoopClass : public TclClass {public:	SnoopClass() : TclClass("Snoop") {}	TclObject* create(int, const char*const*) {		return (new Snoop());	}} snoop_class;Snoop::Snoop() : NsObject(),	fstate_(0), lastSeen_(-1), lastAck_(-1), 	expNextAck_(0), expDupacks_(0), bufhead_(0), 	toutPending_(0), buftail_(0),	wl_state_(SNOOP_WLEMPTY), wl_lastSeen_(-1), wl_lastAck_(-1), 	wl_bufhead_(0), wl_buftail_(0){	bind("snoopDisable_", &snoopDisable_);	bind_time("srtt_", &srtt_);	bind_time("rttvar_", &rttvar_);	bind("maxbufs_", &maxbufs_);	bind("snoopTick_", &snoopTick_);	bind("g_", &g_);	bind("tailTime_", &tailTime_);	bind("rxmitStatus_", &rxmitStatus_);	bind("lru_", &lru_);	rxmitHandler_ = new SnoopRxmitHandler(this);	int i;	for (i = 0; i < SNOOP_MAXWIND; i++) /* data from wired->wireless */		pkts_[i] = 0;	for (i = 0; i < SNOOP_WLSEQS; i++) {/* data from wireless->wired */		wlseqs_[i] = (hdr_seq *) malloc(sizeof(hdr_seq));		wlseqs_[i]->seq = wlseqs_[i]->num = 0;	}	if (maxbufs_ == 0)		maxbufs_ = SNOOP_MAXWIND;}voidSnoop::reset(){//	printf("%x resetting\n", this);	fstate_ = 0;	lastSeen_ = -1;	lastAck_ = -1;	expNextAck_ = 0;	expDupacks_ = 0;	bufhead_ = buftail_ = 0;	if (toutPending_) {		Scheduler::instance().cancel(toutPending_);		// xxx: I think that toutPending_ doesn't need to be freed because snoop didn't allocate it (but I'm not sure).		toutPending_ = 0;	};	for (int i = 0; i < SNOOP_MAXWIND; i++) {		if (pkts_[i]) {			Packet::free(pkts_[i]);			pkts_[i] = 0;		}	}}void Snoop::wlreset(){	wl_state_ = SNOOP_WLEMPTY;	wl_bufhead_ = wl_buftail_ = 0;	for (int i = 0; i < SNOOP_WLSEQS; i++) {		wlseqs_[i]->seq = wlseqs_[i]->num = 0;	}}int Snoop::command(int argc, const char*const* argv){	//Tcl& tcl = Tcl::instance();	if (argc == 3) {		if (strcmp(argv[1], "llsnoop") == 0) {			parent_ = (LLSnoop *) TclObject::lookup(argv[2]);			if (parent_)				recvtarget_ = parent_->uptarget();			return (TCL_OK);		}				if (strcmp(argv[1], "check-rxmit") == 0) {			if (empty_()) {				rxmitStatus_ = SNOOP_PROPAGATE;				return (TCL_OK);			}			Packet *p = pkts_[buftail_];			hdr_snoop *sh = hdr_snoop::access(p);			if (sh->sndTime()!=-1 && sh->sndTime()<atoi(argv[2]) &&			    sh->numRxmit() == 0)				/* candidate for retransmission */				rxmitStatus_ = snoop_rxmit(p);			else				rxmitStatus_ = SNOOP_PROPAGATE;			return (TCL_OK);		}	}	return NsObject::command(argc, argv);}void LLSnoop::recv(Packet *p, Handler *h){	Tcl &tcl = Tcl::instance();	hdr_ip *iph = hdr_ip::access(p);	/* get-snoop creates a snoop object if none currently exists */	hdr_cmn *ch = HDR_CMN(p);	if(ch->direction() == hdr_cmn::UP) 		/* get-snoop creates a snoop object if none currently exists */		/* In ns, addresses have ports embedded in them. */		tcl.evalf("%s get-snoop %d %d", name(), iph->daddr(),			  iph->saddr());        	else  		tcl.evalf("%s get-snoop %d %d", name(), iph->saddr(),			  iph->daddr());		Snoop *snoop = (Snoop *) TclObject::lookup(tcl.result());		snoop->recv(p, h);		if (integrate_)		tcl.evalf("%s integrate %d %d", name(), iph->saddr(),			  iph->daddr());	if (h)			/* resume higher layer (queue) */		Scheduler::instance().schedule(h, &intr_, 0.000001);	return;}/* * Receive a packet from higher layer or from the network. * Call snoop_data() if TCP packet and forward it on if it's an ack. */voidSnoop::recv(Packet* p, Handler* h ){			hdr_cmn *ch = HDR_CMN(p);		if(ch->direction() == hdr_cmn::UP) {		handle((Event *) p);		return;	}		packet_t type = hdr_cmn::access(p)->ptype();	/* Put packet (if not ack) in cache after checking, and send it on */		if (type == PT_TCP) 		snoop_data(p);		else if (type == PT_ACK)		snoop_wired_ack(p);		ch->direction() = hdr_cmn::DOWN;  // Ben added	parent_->sendDown(p);	/* vector to LLSnoop's sendto() */}/* * Handle a packet received from peer across wireless link.  Check first * for packet errors, then call snoop_ack() or pass it up as necessary. */voidSnoop::handle(Event *e){	Packet *p = (Packet *) e;	packet_t type = hdr_cmn::access(p)->ptype();	//int seq = hdr_tcp::access(p)->seqno();	int prop = SNOOP_PROPAGATE; // by default;  propagate ack or packet	Scheduler& s = Scheduler::instance();	//hdr_ll *llh = hdr_ll::access(p);	if (hdr_cmn::access(p)->error()) {		parent_->drop(p);	// drop packet if it's been corrupted		return;	}	if (type == PT_ACK) 		prop = snoop_ack(p); 	else if (type == PT_TCP) /* XXX what about TELNET? */		snoop_wless_data(p);	if (prop == SNOOP_PROPAGATE)		s.schedule(recvtarget_, e, parent_->delay());	else {			// suppress ack		/*		printf("---- %f suppressing ack %d\n", s.clock(), seq);*/		Packet::free(p);	}}/* * Data packet processing.  p is guaranteed to be of type PT_TCP when  * this function is called. */voidSnoop::snoop_data(Packet *p){	Scheduler &s = Scheduler::instance();	int seq = hdr_tcp::access(p)->seqno();	int resetPending = 0;		//	printf("%x snoop_data: %f sending packet %d\n", this, s.clock(), seq);	if (fstate_ & SNOOP_ALIVE && seq == 0)		reset();	fstate_ |= SNOOP_ALIVE;	if ((fstate_ & SNOOP_FULL) && !lru_) {//		printf("snoop full, fwd'ing\n t %d h %d", buftail_, bufhead_);		if (seq > lastSeen_)			lastSeen_ = seq;		return;	}	/* 	 * Only if the ifq is NOT full do we insert, since otherwise we want	 * congestion control to kick in.	 */	if (parent_->ifq()->length() < parent_->ifq()->limit()-1)		resetPending = snoop_insert(p);	if (toutPending_ && resetPending == SNOOP_TAIL) {		s.cancel(toutPending_);		// xxx: I think that toutPending_ doesn't need to be freed because snoop didn't allocate it (but I'm not sure).		toutPending_ = 0;	}	if (!toutPending_ && !empty_()) {		toutPending_ = (Event *) (pkts_[buftail_]);		s.schedule(rxmitHandler_, toutPending_, timeout());	}	return;}/*  * snoop_insert() does all the hard work for snoop_data(). It traverses the  * snoop cache and looks for the right place to insert this packet (or * determines if its already been cached). It then decides whether * this is a packet in the normal increasing sequence, whether it * is a sender-rexmitted-but-lost-due-to-congestion (or network  * out-of-order) packet, or if it is a sender-rexmitted packet that * was buffered by us before. */intSnoop::snoop_insert(Packet *p){	int i, seq = hdr_tcp::access(p)->seqno(), retval=0;	if (seq <= lastAck_) 		return retval;		if (fstate_ & SNOOP_FULL) {		/* free tail and go on */		printf("snoop full, making room\n");		Packet::free(pkts_[buftail_]);		pkts_[buftail_] = 0;		buftail_ = next(buftail_);		fstate_ |= ~SNOOP_FULL;	}	if (seq > lastSeen_ || pkts_[buftail_] == 0) { // in-seq or empty cache		i = bufhead_;		bufhead_ = next(bufhead_);	} else if (seq < hdr_snoop::access(pkts_[buftail_])->seqno()) {		buftail_ = prev(buftail_);		i = buftail_;	} else {		for (i = buftail_; i != bufhead_; i = next(i)) {			hdr_snoop *sh = hdr_snoop::access(pkts_[i]);			if (sh->seqno() == seq) {  // cached before				sh->numRxmit() = 0;				sh->senderRxmit() = 1; //must be a sender retr				sh->sndTime() = Scheduler::instance().clock();				return SNOOP_TAIL;			} else if (sh->seqno() > seq) { 				//not cached before, should insert in the middle				// find the position it should be: prev(i) 				Packet *temp = pkts_[prev(buftail_)];				for (int j = buftail_; j != i; j = next(j)) 					pkts_[prev(j)] = pkts_[j];				i = prev(i);				pkts_[i] = temp;   // seems not necessary. Ben comments				buftail_ = prev(buftail_);				break;			}		}		// This should not happen, since seq must be > lastSeen, which is 		// handled before in the first if.   Ben comments		if (i == bufhead_)			bufhead_ = next(bufhead_);	}		// save in the buffer	savepkt_(p, seq, i);		if (bufhead_ == buftail_)		fstate_ |= SNOOP_FULL;	/* 	 * If we have one of the following packets:	 * 1. a network-out-of-order packet, or	 * 2. a fast rxmit packet, or 3. a sender retransmission 	 * AND it hasn't already been buffered, 	 * then seq will be < lastSeen_. 	 * We mark this packet as having been due to a sender rexmit 	 * and use this information in snoop_ack(). We let the dupacks	 * for this packet go through according to expDupacks_.	 */	if (seq < lastSeen_) { /* not in-order -- XXX should it be <= ? */		if (buftail_ == i) {			hdr_snoop *sh = hdr_snoop::access(pkts_[i]);			sh->senderRxmit() = 1;			sh->numRxmit() = 0;		}		expNextAck_ = buftail_;		retval = SNOOP_TAIL;	} else		lastSeen_ = seq;		return retval;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一片黄亚洲嫩模| 欧美xxx久久| 精品国产成人系列| 亚洲视频你懂的| 精品影视av免费| 在线国产亚洲欧美| 国产精品久久久久婷婷二区次| 亚洲自拍偷拍网站| 99热精品国产| 国产精品福利一区二区三区| 国产一区二区三区久久久| 欧美精选一区二区| 五月激情六月综合| 欧洲视频一区二区| 亚洲激情图片qvod| 欧美性感一区二区三区| 亚洲一区二区偷拍精品| 91久久奴性调教| 亚洲色图制服诱惑| 91啪九色porn原创视频在线观看| 中文字幕一区二区三区四区不卡 | 懂色av一区二区在线播放| 色欧美日韩亚洲| 91.成人天堂一区| 亚洲福利一区二区| 欧美日韩一区二区三区四区五区| 欧美激情一区二区三区四区| 极品尤物av久久免费看| 这里只有精品视频在线观看| 一区二区三区视频在线观看| 在线一区二区三区四区五区| 亚洲精品日韩一| 欧美日韩国产大片| 天天综合日日夜夜精品| 日韩一区二区三区在线视频| 国产在线精品免费av| 奇米精品一区二区三区在线观看| 国产成人精品综合在线观看| 韩国毛片一区二区三区| 久久精品国产99国产精品| 亚洲综合一二三区| 欧美日韩国产小视频在线观看| 99久久99久久久精品齐齐| 777xxx欧美| 综合欧美一区二区三区| 国产不卡在线播放| 久久精品视频在线看| 丝袜国产日韩另类美女| 91社区在线播放| 亚洲国产精品传媒在线观看| 调教+趴+乳夹+国产+精品| 欧美日韩一区二区电影| 国产精品污www在线观看| 国产精品一区二区免费不卡| 欧美xfplay| 午夜天堂影视香蕉久久| 99热这里都是精品| 图片区小说区国产精品视频| 欧美精品一二三| 综合自拍亚洲综合图不卡区| 免费看日韩a级影片| 欧美变态口味重另类| 成人高清av在线| 亚洲色图欧洲色图婷婷| 99精品桃花视频在线观看| 国产精品国产三级国产aⅴ无密码| 99国产精品久久久久| 亚洲免费视频成人| 国产精品久久久久婷婷| 欧美伊人精品成人久久综合97 | 国产午夜亚洲精品羞羞网站| 国产精品一二三区在线| 亚洲精品视频观看| 久久久精品蜜桃| 日韩午夜中文字幕| 欧美性猛交xxxxxx富婆| 美女视频黄免费的久久| 亚洲一区精品在线| 亚洲欧美色一区| 亚洲国产成人在线| 91精品国产色综合久久不卡电影 | 91美女精品福利| 久久精品国产精品青草| 国产成人精品亚洲日本在线桃色| 国产91综合一区在线观看| 色88888久久久久久影院野外| 欧美mv和日韩mv的网站| 亚洲丶国产丶欧美一区二区三区| 国产一区二区在线影院| 欧美在线视频日韩| 亚洲欧洲av一区二区三区久久| 久久精品国产一区二区三 | 日产国产高清一区二区三区| 国产福利91精品| 欧美成人综合网站| 日韩av一级电影| 欧美日韩夫妻久久| 亚洲第一电影网| 色av成人天堂桃色av| 亚洲欧洲日韩在线| 激情小说亚洲一区| 久久午夜老司机| 精品亚洲国内自在自线福利| 国内精品嫩模私拍在线| 国产麻豆精品theporn| 99精品偷自拍| 欧美一卡二卡在线观看| 欧美激情一二三区| 亚洲美女屁股眼交3| 免费成人在线影院| 99九九99九九九视频精品| 欧美亚洲国产bt| 久久毛片高清国产| 亚洲一区二区三区四区在线观看 | 国产精品动漫网站| 日韩高清不卡一区| 成av人片一区二区| 日韩免费电影一区| 日本美女一区二区| 欧美三级电影网站| 一区二区三区国产| 国产91色综合久久免费分享| 欧美一区二区视频网站| 亚洲一级二级在线| 欧美怡红院视频| 亚洲国产精品久久艾草纯爱| 91免费视频网址| 亚洲少妇屁股交4| www.欧美日韩国产在线| 国产精品超碰97尤物18| 成人h动漫精品| 中文字幕一区二区三中文字幕| 国产+成+人+亚洲欧洲自线| 亚洲精品一区二区三区香蕉 | 日韩一区二区高清| 日本不卡中文字幕| 久久婷婷国产综合国色天香 | 亚洲色图欧美偷拍| 色婷婷激情一区二区三区| 亚洲一区二区三区四区中文字幕| 欧美日韩美女一区二区| 蜜臀av一区二区三区| 久久九九久久九九| 91亚洲国产成人精品一区二区三| 亚洲成人av资源| 久久影院视频免费| av午夜精品一区二区三区| 午夜在线成人av| 久久人人97超碰com| 国产一区二区91| 亚洲国产视频在线| 久久蜜桃av一区精品变态类天堂 | 日韩丝袜情趣美女图片| 成人性生交大片免费看中文| 亚洲欧美区自拍先锋| 日韩精品一区二区三区视频播放 | 91国产福利在线| 激情久久五月天| 亚洲一区二区三区在线| 国产婷婷色一区二区三区| 欧美亚洲综合色| 国产精品正在播放| 婷婷丁香久久五月婷婷| 亚洲激情图片qvod| 最好看的中文字幕久久| 成人午夜电影小说| 久久精品一区二区三区四区| 欧美一级国产精品| 91精品国产丝袜白色高跟鞋| 欧洲精品视频在线观看| 96av麻豆蜜桃一区二区| 粉嫩蜜臀av国产精品网站| 国产91精品一区二区| 国产精品综合av一区二区国产馆| 日本伊人精品一区二区三区观看方式 | 久久久久久久综合日本| 中文字幕av一区二区三区| 久久久久久久久久久99999| 国产精品黄色在线观看| 亚洲精品成人悠悠色影视| 亚洲高清久久久| 国产综合一区二区| 97久久人人超碰| 宅男在线国产精品| 国产精品久久久久久久久果冻传媒 | 奇米四色…亚洲| 91猫先生在线| 久久女同互慰一区二区三区| 一区二区三区精品| 国产一区二区成人久久免费影院 | 欧美日韩激情一区二区三区| 欧美福利视频一区| 亚洲色图20p| 国产精品一区二区在线播放| 欧洲精品一区二区三区在线观看| 国产日韩欧美电影| 久久精品国产在热久久| 欧美日韩另类国产亚洲欧美一级| 亚洲啪啪综合av一区二区三区| 精彩视频一区二区三区|