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

📄 webtraf.cc

📁 diff serve for ns-2, work for version 2.29
💻 CC
📖 第 1 页 / 共 2 页
字号:
	return a;}Node* WebTrafPool::picksrc() {	int n = int(floor(Random::uniform(0, nClient_)));	assert((n >= 0) && (n < nClient_));	return client_[n];}Node* WebTrafPool::pickdst() {	int n = int(floor(Random::uniform(0, nServer_)));	assert((n >= 0) && (n < nServer_));	return(server_[n].get_node());}// pick end points for a new TCP connectionvoid WebTrafPool::pick_ep(TcpAgent** tcp, Agent** snk) {	// Choose source	*tcp = picktcp();	// Choose destination	if (fulltcp_) {		*snk = picktcp();	} else {		*snk = picksink();	}}// Launch a request for a particular objectvoid WebTrafPool::launchReq(Node *src_, void* ClntData, int obj, int size) {	TcpAgent *ctcp;	Agent *csnk;	// Allocation new TCP connections for both directions	pick_ep(&ctcp, &csnk);	WebPage* pg = (WebPage*)ClntData;	// Setup TCP connection and done	Tcl::instance().evalf("%s launch-req %d %d %s %s %s %s %d %d", 			      name(), obj, pg->id(),			      src_->name(), pg->dst()->name(),			      ctcp->name(), csnk->name(), size, ClntData);	// Debug only	// $numPacket_ $objectId_ $pageId_ $sessionId_ [$ns_ now] src dst#if 0	printf("%d \t %d \t %d \t %d \t %g %d %d\n", size, obj, pg->id(), id_,	       Scheduler::instance().clock(), 	       src_->address(), pg->dst()->address());	printf("** Tcp agents %d, Tcp sinks %d\n", nTcp(),nSink());#endif}// Launch a request for a particular objectvoid WebTrafPool::launchResp(int obj_id, Node *svr_, Node *clnt_, Agent *tcp, Agent* snk, int size, void *ClntData) {	int pid;	pid = obj_id;	// Get webpage (client data) if any	if (ClntData) {		WebPage* pg = (WebPage*)ClntData;		pid = pg->id();	}	// Setup TCP connection and done	Tcl::instance().evalf("%s launch-resp %d %d %s %s %s %s %d %d", 			      name(), obj_id, pid, svr_->name(), clnt_->name(),			      tcp->name(), snk->name(), size, ClntData);	// Debug only	// $numPacket_ $objectId_ $pageId_ $sessionId_ [$ns_ now] src dst#if 0	printf("%d \t %d \t %d \t %d \t %g %d %d\n", size, obj, pg->id(), id_,	       Scheduler::instance().clock(), 	       src_->address(), pg->dst()->address());	printf("** Tcp agents %d, Tcp sinks %d\n", nTcp(),nSink());#endif}// Given sever's node id, find serverint WebTrafPool::find_server(int sid) {	int n = 0;	while (server_[n].get_nid() != sid && n < nServer_) {		n++;	}		return(n);}	int WebTrafPool::command(int argc, const char*const* argv) {	// Debojyoti Dutta ... for asim	if (argc == 2){		if (strcmp(argv[1], "use-asim") == 0) {			asimflag_ = 1;			//Tcl::instance().evalf("puts \"Here\"");			return (TCL_OK);		} 	}	else if (argc == 3) {		if (strcmp(argv[1], "set-num-session") == 0) {			if (session_ != NULL) {				for (int i = 0; i < nSession_; i++) 					delete session_[i];				delete []session_;			}			nSession_ = atoi(argv[2]);			session_ = new WebTrafSession*[nSession_];			memset(session_, 0, sizeof(WebTrafSession*)*nSession_);			return (TCL_OK);		} else if (strcmp(argv[1], "set-num-server") == 0) {			nServer_ = atoi(argv[2]);			if (server_ != NULL) 				delete []server_;			server_ = new WebServer[nServer_];			for (int i = 0; i < nServer_; i++) {				server_[i] = WebServer(this);			};			return (TCL_OK);		} else if (strcmp(argv[1], "set-num-client") == 0) {			nClient_ = atoi(argv[2]);			if (client_ != NULL) 				delete []client_;			client_ = new Node*[nClient_];			return (TCL_OK);		} else if (strcmp(argv[1], "set-interPageOption") == 0) {			int option = atoi(argv[2]);			if (session_ != NULL) {				for (int i = 0; i < nSession_; i++) {					WebTrafSession* p = session_[i];					p->set_interPageOption(option);				}			}			return (TCL_OK);		} else if (strcmp(argv[1], "doneObj") == 0) {			WebPage* p = (WebPage*)atol(argv[2]);			// printf("doneObj for Page id: %d\n", p->id());			p->doneObject();			return (TCL_OK);		} else if (strcmp(argv[1], "set-server-mode") == 0) {			// <obj> set-server-mode <mode>			int mode = atoi(argv[2]);			for (int n = 0; n < nServer_; n++) {				server_[n].set_mode(mode);			}						return (TCL_OK);		} else if (strcmp(argv[1], "set-server-rate") == 0) {			// <obj> set-server-rate <rate> 			int rate = atoi(argv[2]);			for (int n = 0; n < nServer_; n++) {				server_[n].set_rate(rate);			}						return (TCL_OK);		} else if (strcmp(argv[1], "set-server-qlimit") == 0) {			// <obj> set-server-qlimit <qlimit> 			int qlimit = atoi(argv[2]);			for (int n = 0; n < nServer_; n++) {				server_[n].set_queue_limit(qlimit);			}						return (TCL_OK);		}	} else if (argc == 4) {		if (strcmp(argv[1], "set-server") == 0) {			Node* s = (Node*)lookup_obj(argv[3]);			if (s == NULL)				return (TCL_ERROR);			int n = atoi(argv[2]);			if (n >= nServer_) {				fprintf(stderr, "Wrong server index %d\n", n);				return TCL_ERROR;			}			server_[n].set_node(s);			return (TCL_OK);		} else if (strcmp(argv[1], "set-client") == 0) {			Node* c = (Node*)lookup_obj(argv[3]);			if (c == NULL)				return (TCL_ERROR);			int n = atoi(argv[2]);			if (n >= nClient_) {				fprintf(stderr, "Wrong client index %d\n", n);				return TCL_ERROR;			}			client_[n] = c;			return (TCL_OK);		} else if (strcmp(argv[1], "recycle") == 0) {			// <obj> recycle <tcp> <sink>			//			// Recycle a TCP source/sink pair			Agent* tcp = (Agent*)lookup_obj(argv[2]);			Agent* snk = (Agent*)lookup_obj(argv[3]);						if ((tcp == NULL) || (snk == NULL))				return (TCL_ERROR);						if (fulltcp_) {				delete tcp;				delete snk;			} else if (!dont_recycle_) {				// PS: hmm.. who deletes the agents?				// PS: plain delete doesn't seem to work				// Recyle both tcp and sink objects				nTcp_++;				// XXX TBA: recycle tcp agents				insertAgent(&tcpPool_, tcp);				nSink_++;				insertAgent(&sinkPool_, snk);				//printf("R# %d\n", dbTcp_r++);			}			return (TCL_OK);		} else if (strcmp(argv[1], "set-server-rate") == 0) {			// <obj> set_rate <server> <size> 			int sid = atoi(argv[2]);			int rate = atoi(argv[3]);			int n = find_server(sid);			if (n >= nServer_) 				return (TCL_ERROR);			server_[n].set_rate(rate);			return (TCL_OK);		} else if (strcmp(argv[1], "set-server-mode") == 0) {			// <obj> set-mode <server> <mode>			int sid = atoi(argv[2]);			int mode = atoi(argv[3]);			int n = find_server(sid);			if (n >= nServer_) 				return (TCL_ERROR);			server_[n].set_mode(mode);			return (TCL_OK);		} else if (strcmp(argv[1], "set-server-qlimit") == 0) {			// <obj> set-server-qlimit <server> <qlimit>			int sid = atoi(argv[2]);			int qlimit = atoi(argv[3]);			int n = find_server(sid);			if (n >= nServer_) 				return (TCL_ERROR);			server_[n].set_queue_limit(qlimit);			return (TCL_OK);		} 	} else if (argc == 9) {		if (strcmp(argv[1], "create-session") == 0) {			// <obj> create-session <session_index>			//   <pages_per_sess> <launch_time>			//   <inter_page_rv> <page_size_rv>			//   <inter_obj_rv> <obj_size_rv>			int n = atoi(argv[2]);			if ((n < 0)||(n >= nSession_)||(session_[n] != NULL)) {				fprintf(stderr,"Invalid session index %d\n",n);				return (TCL_ERROR);			}			int npg = (int)strtod(argv[3], NULL);			double lt = strtod(argv[4], NULL);			WebTrafSession* p = 				new WebTrafSession(this, picksrc(), npg, n, fulltcp_, recycle_page_);			int res = lookup_rv(p->interPage(), argv[5]);			res = (res == TCL_OK) ? 				lookup_rv(p->pageSize(), argv[6]) : TCL_ERROR;			res = (res == TCL_OK) ? 				lookup_rv(p->interObj(), argv[7]) : TCL_ERROR;			res = (res == TCL_OK) ? 				lookup_rv(p->objSize(), argv[8]) : TCL_ERROR;			if (res == TCL_ERROR) {				delete p;				fprintf(stderr, "Invalid random variable\n");				return (TCL_ERROR);			}			p->sched(lt);			session_[n] = p;						// Debojyoti added this for asim			if(asimflag_){										// Asim stuff. Added by Debojyoti Dutta				// Assumptions exist 				//Tcl::instance().evalf("puts \"Here\"");				double lambda = (1/(p->interPage())->avg())/(nServer_*nClient_);				double mu = ((p->objSize())->value());				//Tcl::instance().evalf("puts \"Here\"");				for (int i=0; i<nServer_; i++){					for(int j=0; j<nClient_; j++){						// Set up short flows info for asim						Tcl::instance().evalf("%s add2asim %d %d %lf %lf", this->name(),server_[i].get_nid(),client_[j]->nodeid(),lambda, mu);					}				}				//Tcl::instance().evalf("puts \"Here\""); 			}						return (TCL_OK);		} else if (strcmp(argv[1], "job_arrival") == 0) {			//$self job_arrival $id $clnt $svr $tcp $snk $size $pobj			int obj_id = atoi(argv[2]);			Node* clnt_ = (Node*)lookup_obj(argv[3]);			Node* svr_ = (Node*)lookup_obj(argv[4]);			// TCP source and sink pair			Agent* tcp = (Agent*)lookup_obj(argv[5]);			Agent* snk = (Agent*)lookup_obj(argv[6]);			int size = atoi(argv[7]);			void* data = (void *)atol(argv[8]);			int sid = svr_->nodeid();			int n = find_server(sid);			if (n >= nServer_) 				return (TCL_ERROR);						double delay = server_[n].job_arrival(obj_id, clnt_, tcp, snk, size, data);							Tcl::instance().resultf("%f", delay);			return (TCL_OK);		}	}	return PagePool::command(argc, argv);}

⌨️ 快捷键说明

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