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

📄 rap.h

📁 柯老师网站上找到的
💻 H
字号:
/* -*-	Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- *///// Copyright (c) 1997 by the University of Southern California// All rights reserved.//// Permission to use, copy, modify, and distribute this software and its// documentation in source and binary forms for non-commercial purposes// and without fee is hereby granted, provided that the above copyright// notice appear in all copies and that both the copyright notice and// this permission notice appear in supporting documentation. and that// any documentation, advertising materials, and other materials related// to such distribution and use acknowledge that the software was// developed by the University of Southern California, Information// Sciences Institute.  The name of the University may not be used to// endorse or promote products derived from this software without// specific prior written permission.//// THE UNIVERSITY OF SOUTHERN CALIFORNIA makes no representations about// the suitability of this software for any purpose.  THIS SOFTWARE IS// PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES,// INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.//// Other copyrights might apply to parts of this software and are so// noted when applicable.//// rap.h //      Header File for the 'RAP Source' Agent Class//// Author: //   Mohit Talwar (mohit@catarina.usc.edu)//// $Header: /nfs/jade/vint/CVSROOT/ns-2/rap/rap.h,v 1.4 2000/01/07 06:25:32 sfloyd Exp $#ifndef RAP_H#define RAP_H#include "ns-process.h"#include "app.h"#include "utilities.h"// RapTimeoutType//      Possible timeout eventsenum RapTimeoutType {	RAP_IPG_TIMEOUT,		// IPG timer fires	RAP_RTT_TIMEOUT		// RTT timer fires};// RapLossType//      Possible loss typesenum RapLossType {	RAP_TIMER_BASED,		// TIMER based loss detection	RAP_ACK_BASED			// ACK based loss detection};// RapPacketStatus //      Possible packet types in the transmission historyenum RapPacketStatusType{	RAP_SENT,			// Packet has been sent	RAP_PURGED,			// Packet detected lost or received	RAP_INACTIVE			// Cluster loss ignored};class TransHistoryEntry{public:	TransHistoryEntry(int seq, RapPacketStatusType stat = RAP_SENT)	{		seqno = seq;		status = stat;		departureTime = Scheduler::instance().clock();	};	int seqno;	RapPacketStatusType status;	double departureTime;};// RAP packet header flagsconst int RH_DATA = 0x01;const int RH_ACK  = 0x02;struct hdr_rap {	int seqno_;		// Seq num of packet being sent/acked	int size_;		// Size of user data inside this packet	int rap_flags_;		// Flags to separate data/ack packets		int lastRecv;		// Last hole at the RAP sink...	int lastMiss;	int prevRecv;	static int offset_;	// offset for this header	inline static int& offset() { return offset_; }	inline static hdr_rap* access(Packet* p) {		return (hdr_rap*) p->access(offset_);	}	int& seqno() { return seqno_; }	int& size() { return size_; }	int& flags() { return rap_flags_; }};class RapAgent;class IpgTimer : public TimerHandler{public:	IpgTimer(RapAgent *a) : TimerHandler() { a_ = a; }protected:	virtual void expire(Event *e);	RapAgent *a_;};class RttTimer : public TimerHandler{public:	RttTimer(RapAgent *a) : TimerHandler() { a_ = a; }protected:	virtual void expire(Event *e);	RapAgent *a_;};// Rap flagsconst int RF_ANYACK = 0x01;	// Received first ackconst int RF_STOP   = 0x02;	// This agent has stoppedconst int RF_COUNTPKT = 0x04;    // This agent will send up to certain # of pktsclass RapAgent : public Agent	// RAP source{public:	RapAgent();	~RapAgent();	void recv(Packet*, Handler*);	void timeout(int type);	int GetSeqno() { return seqno_; }	double GetTimeout() { return timeout_; }	int GetDebugFlag() { return debugEnable_; }	FILE *GetLogfile() { return logfile_; }	void IncrementLossCount() { sessionLossCount_++; }	void start();	void stop();	void listen();	void advanceby(int delta);	void finish();	// Data member access methods	double srtt() { return srtt_; }	double ipg() { return ipg_; }	int anyack() { return flags_ & RF_ANYACK; }	int is_stopped() { return flags_ & RF_STOP; }	int counting_pkt() { return flags_ & RF_COUNTPKT; }	void FixIpg(double fipg) { fixIpg_ = fipg; }protected:	virtual int command(int argc, const char*const* argv);	void IpgTimeout();		// ipgTimer_ handler	void RttTimeout();		// rttTimer_ handler	void IncreaseIpg() { 		fixIpg_ = 0; 		ipg_ /= beta_; 	}	void DecreaseIpg() { 		if (fixIpg_ != 0) 			ipg_ = fixIpg_;		else 			ipg_ *= srtt_ / (alpha_ * ipg_ + srtt_);	}  	// Adjust RTT estimate based on sample	void UpdateTimeValues(double sampleRtt); 	// Detect TIMER_BASED or ACK_BASED losses	int LossDetection(RapLossType type, hdr_rap *ackHeader = NULL);	// Increase ipg_ and mark history INACTIVE	void LossHandler();			// Send a DATA packet	void SendPacket(int nbytes, AppData *data = 0); 	// Process an ACK	void RecvAck(hdr_rap *ackHeader); 	IpgTimer ipgTimer_;		// Send event	RttTimer rttTimer_;		// IPG decrease event	List transmissionHistory_;	// Of packets sent out  	TracedInt seqno_;		// Current sequence number	TracedInt sessionLossCount_;	// ~ Packets lost in RAP session	TracedInt curseq_;              // max # of pkts sent	TracedDouble ipg_;		// Inter packet gap	double beta_;			// Decrease factor	double alpha_;			// Increase factor 	TracedDouble srtt_;		// Smoothened round trip time	double variance_;		// Variance in rtt samples	double delta_;			// Jacobson/Karl 's constants...	double mu_;	double phi_;	double overhead_;		// Max random delay added to IPG	int useFineGrain_;		// Use fine grain rate adaptation?	double frtt_;			// Fine grain feedback signals	double xrtt_;	double kxrtt_;	double kfrtt_;	TracedDouble timeout_;	// Timeout estimate	double startTime_, stopTime_;	// Of this agent's life	int debugEnable_;	FILE *logfile_;	// Data and methods as required by RAP receiver	int lastRecv_;		// Last hole at the RAP sink...	int lastMiss_;	int prevRecv_;	void UpdateLastHole(int seqNum);	void SendAck(int seqNum);	int off_rap_;	int rap_base_hdr_size_;	// Data packet counter: the number of data packets that we've sent 	// in a RTT. If we have not sent much we should not increase 	// rate because we don't have enough packets to probe for losses	int dctr_;	// The percentage threshold for increasing rate.	int dpthresh_; 	// Misc flags	int flags_;	double fixIpg_;};#endif // RAP_H

⌨️ 快捷键说明

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