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

📄 cbr-traffic-pp.cc

📁 柯老师网站上找到的
💻 CC
字号:
/* -*-	Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- *//* *This code is a contribution of Arnaud Legout, Institut Eurecom, France. *This code is highly inspired from the code of the CBR sources. *The following copyright is the original copyright included in the cbr_traffic.cc file. * * Copyright (c) Xerox Corporation 1997. All rights reserved. *   * License is granted to copy, to use, and to make and to use derivative * works for research and evaluation purposes, provided that Xerox is * acknowledged in all documentation pertaining to any such copy or derivative * work. Xerox grants no other licenses expressed or implied. The Xerox trade * name should not be used in any advertising without its written permission. *   * XEROX CORPORATION MAKES NO REPRESENTATIONS CONCERNING EITHER THE * MERCHANTABILITY OF THIS SOFTWARE OR THE SUITABILITY OF THIS SOFTWARE * FOR ANY PARTICULAR PURPOSE.  The software is provided "as is" without * express or implied warranty of any kind. *   * These notices must be retained in any copies of any part of this software. */#include <stdlib.h> #include "random.h"#include "trafgen.h"#include "ranvar.h"/*  * Constant bit rate traffic source.   Parameterized by interval, (optional) * random noise in the interval, and packet size.   */class CBR_PP_Traffic : public TrafficGenerator { public:	CBR_PP_Traffic();	virtual double next_interval(int&);	//HACK so that udp agent knows interpacket arrival time within a burst	inline double interval() { return (interval_); } protected:	virtual void start();	void init();	void timeout();	double rate_;     /* send rate during on time (bps) */	double interval_; /* packet inter-arrival time during burst (sec) */	double random_;	int seqno_;	int maxpkts_;	int PP_;	int PBM_;         /*size of the packets bunch*/};static class CBR_PP_TrafficClass : public TclClass { public:	CBR_PP_TrafficClass() : TclClass("Application/Traffic/CBR_PP") {}	TclObject* create(int, const char*const*) {		return (new CBR_PP_Traffic());	}} class_cbr_PP_traffic;CBR_PP_Traffic::CBR_PP_Traffic() : seqno_(0){	bind_bw("rate_", &rate_);	bind("random_", &random_);	bind("packetSize_", &size_);	bind("maxpkts_", &maxpkts_);	bind("PBM_", &PBM_);}void CBR_PP_Traffic::init(){        // compute inter-packet interval 	 interval_ = PBM_*(double)(size_ << 3)/(double)rate_;	//interval_ = 1e-100;	PP_ = 0;	if (agent_)		agent_->set_pkttype(PT_CBR);}void CBR_PP_Traffic::start(){        init();        running_ = 1;        timeout();}double CBR_PP_Traffic::next_interval(int& size){	// Recompute interval in case rate_ or size_ has changes	if (PP_ >= (PBM_ - 1)){				interval_ = PBM_*(double)(size_ << 3)/(double)rate_;		PP_ = 0;	}	else {		interval_ = 1e-100;		PP_ += 1 ;	}	double t = interval_;	if (random_==1)		t += interval_ * Random::uniform(-0.5, 0.5);		if (random_==2)		t += interval_ * Random::uniform(-0.000001, 0.000001);		size = size_;	if (++seqno_ < maxpkts_)		return(t);	else		return(-1); }void CBR_PP_Traffic::timeout(){        if (! running_)                return;        /* send a packet */        // The test tcl/ex/test-rcvr.tcl relies on the "NEW_BURST" flag being         // set at the start of any exponential burst ("talkspurt").          if (PP_ == 0)                 agent_->sendmsg(size_, "NEW_BURST");        else                 agent_->sendmsg(size_);        /* figure out when to send the next one */        nextPkttime_ = next_interval(size_);        /* schedule it */        if (nextPkttime_ > 0)                timer_.resched(nextPkttime_);}

⌨️ 快捷键说明

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