⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snoop.h

📁 Ns2 TCP 协议改进 版本 提高goodput
💻 H
字号:
/* -*-	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 MASH 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. * * @(#) $Header: /nfs/jade/vint/CVSROOT/ns-2/tcp/snoop.h,v 1.14 2002/05/06 22:23:16 difa Exp $ (UCB) */#ifndef ns_snoop_h#define ns_snoop_h#include "scheduler.h"#include "packet.h"#include "ip.h"#include "tcp.h"#include "ll.h"#include "mac.h"#include "flags.h"#include "template.h"/* Snoop states */#define SNOOP_ACTIVE    0x01	/* connection active */#define SNOOP_CLOSED    0x02	/* connection closed */#define SNOOP_NOACK     0x04	/* no ack seen yet */#define SNOOP_FULL      0x08	/* snoop cache full */#define SNOOP_RTTFLAG   0x10	/* can compute RTT if this is set */#define SNOOP_ALIVE     0x20	/* connection has been alive past 1 sec */#define SNOOP_WLALIVE   0x40	/* wl connection has been alive past 1 sec */#define SNOOP_WLEMPTY   0x80#define SNOOP_MAXWIND   100	/* XXX */#define SNOOP_WLSEQS    8#define SNOOP_MIN_TIMO  0.100	/* in seconds */#define SNOOP_MAX_RXMIT 10	/* quite arbitrary at this point */#define SNOOP_PROPAGATE 1#define SNOOP_SUPPRESS  2#define SNOOP_MAKEHANDLER 1#define SNOOP_TAIL 1struct hdr_seq {	int seq;	int num;};struct hdr_snoop {	int seqno_;	int numRxmit_;	int senderRxmit_;	double sndTime_;	static int offset_;	inline static int& offset() { return offset_; }	inline static hdr_snoop* access(const Packet* p) {		return (hdr_snoop*) p->access(offset_);	}	inline int& seqno() { return seqno_; }	inline int& numRxmit() { return numRxmit_; }	inline int& senderRxmit() { return senderRxmit_; }	inline double& sndTime() { return sndTime_; }};class LLSnoop : public LL {  public:	LLSnoop() : LL() { bind("integrate_", &integrate_);}	void recv(Packet *, Handler *);	void snoop_rtt(double);	inline double timeout() { 		return max(srtt_+4*rttvar_, snoopTick_);	}	inline int integrate() { return integrate_; }  protected:	int    integrate_;	double srtt_;	double rttvar_;	double g_;	double snoopTick_;	/* minimum rxmission timer granularity */};class SnoopRxmitHandler;class SnoopPersistHandler;class Snoop : public NsObject {	friend class SnoopRxmitHandler;	friend class SnoopPersistHandler;  public:	Snoop();	void recv(Packet *, Handler *);	void handle(Event *);	int snoop_rxmit(Packet *);	inline int next(int i) { return (i+1) % maxbufs_; }	inline int prev(int i) { return ((i == 0) ? maxbufs_-1 : i-1); };	inline int wl_next(int i) { return (i+1) % SNOOP_WLSEQS; }	inline int wl_prev(int i) { return ((i == 0) ? SNOOP_WLSEQS-1 : i-1);};  protected:	int command(int argc, const char*const* argv);	void reset();	void wlreset();	void snoop_data(Packet *);	int  snoop_ack(Packet *);	void snoop_wless_data(Packet *);	void snoop_wired_ack(Packet *);	int  snoop_wlessloss(int);	double snoop_cleanbufs_(int);	void snoop_rtt(double);	int snoop_qlong();	int snoop_insert(Packet *);	inline int empty_()		{return (bufhead_==buftail_ &&!(fstate_&SNOOP_FULL));}	void savepkt_(Packet *, int, int);	void update_state_();	inline double timeout() { 		if (!parent_->integrate())			return max(srtt_+4*rttvar_, snoopTick_);		else			return parent_->timeout();	}	void snoop_cleanup();		LLSnoop *parent_;	/* the parent link layer object */	NsObject* recvtarget_;	/* where packet is passed up the stack */	Handler  *callback_;	SnoopRxmitHandler *rxmitHandler_; /* used in rexmissions */	SnoopPersistHandler *persistHandler_; /* for connection (in)activity */	int      snoopDisable_;	/* disable snoop for this mobile */	u_short  fstate_;	/* state of connection */	int      lastSeen_;	/* first byte of last packet buffered */        int      lastAck_;	/* last byte recd. by mh for sure */	int      expNextAck_;	/* expected next ack after dup sequence */	short    expDupacks_;	/* expected number of dup acks */	double   srtt_;		/* smoothed rtt estimate */	double   rttvar_;	/* linear deviation */	double   tailTime_;	/* time at which earliest unack'd pkt sent */	int      rxmitStatus_;	short    bufhead_;	/* next pkt goes here */	Event    *toutPending_;	/* # pending timeouts */	short    buftail_;	/* first unack'd pkt */	Packet   *pkts_[SNOOP_MAXWIND]; /* ringbuf of cached pkts */		int      wl_state_;	int      wl_lastSeen_;	int      wl_lastAck_;	int      wl_bufhead_;	int      wl_buftail_;	hdr_seq  *wlseqs_[SNOOP_WLSEQS];	/* ringbuf of wless data */	int      maxbufs_;	/* max number of pkt bufs */	double   snoopTick_;	/* minimum rxmission timer granularity */	double   g_;		/* gain in EWMA for srtt_ and rttvar_ */	int      integrate_;	/* integrate loss rec across active conns */	int      lru_;		/* an lru cache? */};class SnoopRxmitHandler : public Handler {  public:	SnoopRxmitHandler(Snoop *s) : snoop_(s) {}	void handle(Event *event);  protected:	Snoop *snoop_;};class SnoopPersistHandler : public Handler {  public:	SnoopPersistHandler(Snoop *s) : snoop_(s) {}	//void handle(Event *);  protected:	Snoop *snoop_;};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -