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

📄 dsred.h

📁 diff serve for ns-2, work for version 2.29
💻 H
字号:
/* Copyright (C) 2001-2006  Sergio Andreozzi * * This file is part of DiffServ4NS, a set of improvements to * the Network Simulator 2 for DiffServ simulations. * * Project Homepage: http://diffserv4ns.sourceforge.net/ * * DiffServ4NS is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * DiffServ4NS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with DiffServ4NS; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA * GNU License: http://www.gnu.org/licenses/gpl.txt *  * The above copyright applies to the following changes and additions to the official * NS2 (http://nsnam.cvs.sourceforge.net/nsnam/ns-2/): * *  - marking: possibility to define mark rules based on source node,  *             destination node, transport protocol type and application type *  - new schedulers: WFQ, WF2Q+, SCFQ, SFQ, LLQ *  - new policy: possibility to define a DSCP based rate limiter *  - new monitoring possibilities: *     - For UDP-based traffic *        + Average, instantaneous, minimum and frequency distributed OWD *        + Average, instantaneous, minimum and frequency distributed IPDV *     - For TCP-based traffic *        + TCP Goodput on a DSCP basis *        + TCP Round-Trip Time on a DSCP basis, both instantaneous value  *          and frequency distribution *        + TCP Window Size on a DSCP basis, both instantaneous value  *          and frequency distribution *     - per-hop parameters: *        + Instantaneous and average queue length on a queue basis  *          or on a queue and drop precedence level basis *        + Maximum burstiness for queue 0 *        + Departure rate on a queue basis or on a queue and drop level  *          precedence basis *        + Received packets, transmitted packets, dropped packets due to droppers  *          and dropped packets due to buffer overflow,  *          all on a DSCP basis and for both absolute and percentage values * ***************************************************************************************  *//* * Copyright (c) 2000 Nortel Networks * 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 Nortel Networks. * 4. The name of the Nortel Networks may not be used *    to endorse or promote products derived from this software without *    specific prior written permission. *  * THIS SOFTWARE IS PROVIDED BY NORTEL 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 NORTEL 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. * * Developed by: Farhan Shallwani, Jeremy Ethridge *               Peter Pieda, and Mandeep Baines * Maintainer: Peter Pieda <ppieda@nortelnetworks.com> *//* * dsred.h * * The Positions of dsREDQueue, edgeQueue, and coreQueue in the Object Hierarchy. * * This class, i.e. "dsREDQueue", is positioned in the class hierarchy as follows: * *             Queue *               | *           dsREDQueue * * *   This class stands for "Differentiated Services RED Queue".  Since the * original RED does not support multiple parameters, and other functionality * needed by a RED gateway in a Diffserv architecture, this class was created to * support the desired functionality.  This class is then inherited by two more * classes, moulding the old hierarchy as follows: * * *             Queue *               | *           dsREDQueue *           |        | *     edgeQueue    coreQueue * * * These child classes correspond to the "edge" and "core" routers in a Diffserv * architecture. * */#ifndef dsred_h#define dsred_h#include <vector>#include "red.h"	// need RED class specs (edp definition, for example)#include "queue.h"	// need Queue class specs#include "dsredq.h"#include "dsconsts.h"#include "dsscheduler.h"class dsFD {public:         dsFD(double RL, char* FN);        void occurency(double Value); 	void flush(double norm, double threshold);private:  	vector<int> FDtable;			double RangeLenght;		char FileName[20];	int counter;};/*------------------------------------------------------------------------------struct phbParam    This struct is used to maintain entries for the PHB parameter table, used to map a code point to a physical queue-virtual queue pair.------------------------------------------------------------------------------*/struct phbParam {   int codePt_;   int queue_;	// physical queue   int prec_;	// virtual queue (drop precedence)};struct statType {	int drops;             // per queue stats	int edrops;	int pkts;	int valid_CP[MAX_CP];  // per CP stats	int drops_CP[MAX_CP];	int edrops_CP[MAX_CP];	int pkts_CP[MAX_CP];	int     TCPnReTX_CP[MAX_CP];	double  TCPbReTX_CP[MAX_CP];	double  TCPbGoTX_CP[MAX_CP];	int     TCPcwnd_CP[MAX_CP];	double  TCPrtt_CP[MAX_CP];	dsFD*   TCPrttFD_CP[MAX_CP];	dsFD*   TCPcwndFD_CP[MAX_CP];};class QueueScheduler;/*------------------------------------------------------------------------------class dsREDQueue     This class specifies the characteristics for a Diffserv RED router.------------------------------------------------------------------------------*/class dsREDQueue : public Queue {public:		dsREDQueue();	int command(int argc, const char*const* argv);	// interface to ns scriptsprotected:	dsScheduler* QScheduler;	redQueue redq_[MAX_QUEUES];	// the physical queues at the router	NsObject* de_drop_;		// drop_early target	statType stats; // used for statistics gatherings	int qToDq;			// current queue to be dequeued in a round robin manner	int numQueues_;			// the number of physical queues at the router	phbParam phb_[MAX_CP];		// PHB table	int phbEntries;     		// the current number of entries in the PHB table	int ecn_;			// used for ECN (Explicit Congestion Notification)	LinkDelay* link_;		// outgoing link	int phisQueueLimit[MAX_QUEUES];	int PacketSize_;	int DSCP_;	void reset();	void edrop(Packet* p); // used so flowmonitor can monitor early drops	void enque(Packet *pkt); // enques a packet	Packet *deque(void);	// deques a packet	int getCodePt(Packet *p); // given a packet, extract the code point marking from its header field	void lookupPHBTable(int codePt, int* queue, int* prec); // looks up queue and prec numbers corresponding to a code point	void addPHBEntry(int codePt, int queue, int prec); // edits phb entry in the table	void setNumPrec(int queue, int numPrec);	void setMREDMode(const char* mode, const char* queue);	void printStats(); // print various stats	double getStat(int argc, const char*const* argv);	void printPHBTable();  // print the PHB table   	void setSchedularMode(int argc, const char*const* argv);   	void addQueueWeight(int queueNum, double weight);    	void addQueueRate(int queueNum, int rate); 	void setQSize(int queueNum, int qMaxSize) ;	void FDinit(const char *const  DSCP);};#endif

⌨️ 快捷键说明

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