亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? trace.cc

?? NS2網絡仿真軟件是目前最為流行的網絡仿真模擬軟件
?? CC
?? 第 1 頁 / 共 2 頁
字號:
/* -*-	Mode:C++; c-basic-offset:8; tab-width:8 -*- *//* * Copyright (c) 1990-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 Computer Systems *	Engineering Group at Lawrence Berkeley Laboratory. * 4. Neither the name of the University nor of the Laboratory 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: /cvsroot/nsnam/ns-2/trace/trace.cc,v 1.81 2005/07/13 03:51:33 tomh Exp $ (LBL) */#include <stdio.h>#include <stdlib.h> #include "packet.h"#include "ip.h"#include "tcp.h"#include "sctp.h"#include "rtp.h"#include "srm.h"#include "tfrc.h"#include "flags.h"#include "address.h"#include "trace.h"#include "rap/rap.h"//const double Trace::PRECISION = 1.0e+6; class TraceClass : public TclClass {public:	TraceClass() : TclClass("Trace") { }	TclObject* create(int argc, const char*const* argv) {		if (argc >= 5)			return (new Trace(*argv[4]));		return 0;	}} trace_class;Trace::Trace(int type)	: Connector(), callback_(0), pt_(0), type_(type), btTrace_(0){	bind("src_", (int*)&src_);	bind("dst_", (int*)&dst_);	bind("callback_", &callback_);	bind("show_tcphdr_", &show_tcphdr_);	bind("show_sctphdr_", &show_sctphdr_); 	// added for Bluetooth trace
 	bind("namBTTrace_", &btTrace_);
	pt_ = new BaseTrace;}Trace::~Trace(){}/* * $trace detach * $trace flush * $trace attach $fileID */int Trace::command(int argc, const char*const* argv){	Tcl& tcl = Tcl::instance();	if (argc == 2) {		if (strcmp(argv[1], "detach") == 0) {			pt_->channel(0) ;			pt_->namchannel(0) ;			return (TCL_OK);		}		if (strcmp(argv[1], "flush") == 0) {			Tcl_Channel ch = pt_->channel();			Tcl_Channel namch = pt_->namchannel();			if (ch != 0) 				pt_->flush(ch);				//Tcl_Flush(pt_.channel());			if (namch != 0)				//Tcl_Flush(pt_->namchannel());				pt_->flush(namch);			return (TCL_OK);		}                if (strcmp(argv[1], "tagged") == 0) {			tcl.resultf("%d", pt_->tagged());                        return (TCL_OK);                }	} else if (argc == 3) {		if (strcmp(argv[1], "annotate") == 0) {			if (pt_->channel() != 0)				annotate(argv[2]);			return (TCL_OK);		}		if (strcmp(argv[1], "attach") == 0) {			int mode;			const char* id = argv[2];			Tcl_Channel ch = Tcl_GetChannel(tcl.interp(), (char*)id,						  &mode);			pt_->channel(ch); 			if (pt_->channel() == 0) {				tcl.resultf("trace: can't attach %s for writing", id);				return (TCL_ERROR);			}			return (TCL_OK);		}		if (strcmp(argv[1], "namattach") == 0) {			int mode;			const char* id = argv[2];			Tcl_Channel namch = Tcl_GetChannel(tcl.interp(), 							   (char*)id, &mode);			pt_->namchannel(namch); 			if (pt_->namchannel() == 0) {				tcl.resultf("trace: can't attach %s for writing", id);				return (TCL_ERROR);			}			return (TCL_OK);		}		if (strcmp(argv[1], "ntrace") == 0) {			if (pt_->namchannel() != 0) 				write_nam_trace(argv[2]);			return (TCL_OK);		}		if (strcmp(argv[1], "tagged") == 0) {                        int tag;			if (Tcl_GetBoolean(tcl.interp(),					   (char*)argv[2], &tag) == TCL_OK) {				pt_->tagged(tag);				return (TCL_OK);			} else return (TCL_ERROR);                }	}	return (Connector::command(argc, argv));}void Trace::write_nam_trace(const char *s){	sprintf(pt_->nbuffer(), "%s", s);	pt_->namdump();}void Trace::annotate(const char* s){	if (pt_->tagged()) {		sprintf(pt_->buffer(),			"v "TIME_FORMAT" -e {sim_annotation %g %s}",			Scheduler::instance().clock(), 			Scheduler::instance().clock(), s);	} else {		sprintf(pt_->buffer(),			"v "TIME_FORMAT" eval {set sim_annotation {%s}}", 			pt_->round(Scheduler::instance().clock()), s);	}	pt_->dump();	callback();	sprintf(pt_->nbuffer(), "v -t "TIME_FORMAT" -e sim_annotation %g %s", 		Scheduler::instance().clock(), 		Scheduler::instance().clock(), s);	pt_->namdump();}char* srm_names[] = {        SRM_NAMES};intTrace::get_seqno(Packet* p){	hdr_cmn *th = hdr_cmn::access(p);	hdr_tcp *tcph = hdr_tcp::access(p);	hdr_rtp *rh = hdr_rtp::access(p);        hdr_rap *raph = hdr_rap::access(p);	hdr_tfrc *tfrch = hdr_tfrc::access(p);	hdr_tfrc_ack *tfrch_ack = hdr_tfrc_ack::access(p);	packet_t t = th->ptype();	int seqno;	/* UDP's now have seqno's too */	if (t == PT_RTP || t == PT_CBR || t == PT_UDP || t == PT_EXP ||	    t == PT_PARETO)		seqno = rh->seqno();        else if (t == PT_RAP_DATA || t == PT_RAP_ACK)                seqno = raph->seqno();	else if (t == PT_TCP || t == PT_ACK || t == PT_HTTP || t == PT_FTP ||	    t == PT_TELNET || t == PT_XCP)		seqno = tcph->seqno();	else if (t == PT_TFRC)		seqno = tfrch->seqno;	else if (t == PT_TFRC_ACK)                seqno = tfrch_ack->seqno;	else		seqno = -1; 	return seqno;}// this function should retain some backward-compatibility, so that// scripts don't break.void Trace::format(int tt, int s, int d, Packet* p){	hdr_cmn *th = hdr_cmn::access(p);	hdr_ip *iph = hdr_ip::access(p);	hdr_tcp *tcph = hdr_tcp::access(p);	hdr_sctp *sctph = hdr_sctp::access(p);	hdr_srm *sh = hdr_srm::access(p); 	const char* sname = "null";	packet_t t = th->ptype();	const char* name = packet_info.name(t);        /* SRM-specific */	if (strcmp(name,"SRM") == 0 || strcmp(name,"cbr") == 0 || strcmp(name,"udp") == 0) {            if ( sh->type() < 5 && sh->type() > 0 ) {	        sname = srm_names[sh->type()];	    }	}	if (name == 0)		abort();	int seqno = get_seqno(p);        /*          * When new flags are added, make sure to change NUMFLAGS         * in trace.h         */        char flags[NUMFLAGS+1];        for (int i = 0; i < NUMFLAGS; i++)		flags[i] = '-';        flags[NUMFLAGS] = 0;	hdr_flags* hf = hdr_flags::access(p);	flags[0] = hf->ecn_ ? 'C' : '-';          // Ecn Echo	flags[1] = hf->pri_ ? 'P' : '-'; 	flags[2] = '-';	flags[3] = hf->cong_action_ ? 'A' : '-';   // Congestion Action	flags[4] = hf->ecn_to_echo_ ? 'E' : '-';   // Congestion Experienced	flags[5] = hf->fs_ ? 'F' : '-';		   // Fast start: see tcp-fs and tcp-int	flags[6] = hf->ecn_capable_ ? 'N' : '-';	flags[7] = 0; // only for SCTP	#ifdef notdef	flags[1] = (iph->flags() & PF_PRI) ? 'P' : '-';	flags[2] = (iph->flags() & PF_USR1) ? '1' : '-';	flags[3] = (iph->flags() & PF_USR2) ? '2' : '-';	flags[5] = 0;#endif	char *src_nodeaddr = Address::instance().print_nodeaddr(iph->saddr());	char *src_portaddr = Address::instance().print_portaddr(iph->sport());	char *dst_nodeaddr = Address::instance().print_nodeaddr(iph->daddr());	char *dst_portaddr = Address::instance().print_portaddr(iph->dport());	if (pt_->tagged()) {		sprintf(pt_->buffer(), 			"%c "TIME_FORMAT" -s %d -d %d -p %s -e %d -c %d -i %d -a %d -x {%s.%s %s.%s %d %s %s}",			tt,			Scheduler::instance().clock(),			s, 			d,			name,			th->size(),			iph->flowid(),			th->uid(),			iph->flowid(),			src_nodeaddr,			src_portaddr,			dst_nodeaddr,			dst_portaddr,			seqno,flags,sname);	} else if (show_sctphdr_ && t == PT_SCTP) {		double timestamp;		timestamp = Scheduler::instance().clock();				for(unsigned int i = 0; i < sctph->NumChunks(); i++) {			switch(sctph->SctpTrace()[i].eType) {			case SCTP_CHUNK_INIT:			case SCTP_CHUNK_INIT_ACK:			case SCTP_CHUNK_COOKIE_ECHO:			case SCTP_CHUNK_COOKIE_ACK:				flags[7] = 'I';     // connection initialization				break;							case SCTP_CHUNK_DATA:				flags[7] = 'D';				break;			case SCTP_CHUNK_SACK:				flags[7] = 'S';				break;							case SCTP_CHUNK_FORWARD_TSN:				flags[7] = 'R';				break;							case SCTP_CHUNK_HB:				flags[7] = 'H';				break;			case SCTP_CHUNK_HB_ACK:				flags[7] = 'B';				break;			default:				assert (false);			}			sprintf(pt_->buffer(),				"%c "TIME_FORMAT" %d %d %s %d %s %d %s.%s %s.%s %d %d %d %d %d",				tt,				pt_->round(timestamp),				s,				d,				name,				th->size(),				flags,				iph->flowid(), /* was p->class_ */				src_nodeaddr,				src_portaddr,				dst_nodeaddr,				dst_portaddr,				sctph->NumChunks(),				sctph->SctpTrace()[i].uiTsn,				th->uid(), /* was p->uid_ */				sctph->SctpTrace()[i].usStreamId,				sctph->SctpTrace()[i].usStreamSeqNum);	     			/* The caller already calls pt_->dump() for us,			 * but since SCTP needs to dump once per chunk, we

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线亚洲一区观看| 久久影视一区二区| 26uuu亚洲| 亚洲成在线观看| 成人午夜视频在线| 精品第一国产综合精品aⅴ| 亚洲精品中文在线影院| 精品一区二区三区在线观看 | 3d成人h动漫网站入口| 国产精品理论在线观看| 精品亚洲成a人在线观看| 制服丝袜亚洲播放| 亚洲成a人v欧美综合天堂| 色婷婷综合久久久久中文 | 亚洲激情图片小说视频| 丰满白嫩尤物一区二区| 欧美一级日韩一级| 日本中文一区二区三区| 欧美日韩免费一区二区三区| 亚洲视频一二三| av午夜精品一区二区三区| 日本一区二区三区免费乱视频| 精品一区二区三区视频| 精品日韩欧美在线| 喷水一区二区三区| 欧美一级二级三级蜜桃| 奇米在线7777在线精品| 欧美一级搡bbbb搡bbbb| 美女视频黄免费的久久| 日韩欧美国产系列| 精品制服美女丁香| 精品粉嫩aⅴ一区二区三区四区| 日韩黄色在线观看| 日韩欧美综合在线| 经典三级视频一区| 国产日韩v精品一区二区| 国产成人a级片| 亚洲欧洲中文日韩久久av乱码| 91色|porny| 午夜精品久久久久久久| 91精品在线免费观看| 青青草97国产精品免费观看| 日韩精品一区二区三区视频播放 | 国产精品久久毛片a| 99国内精品久久| 亚洲男人的天堂在线观看| 欧美在线不卡视频| 免费观看一级特黄欧美大片| 久久久久久久综合日本| 91亚洲国产成人精品一区二三| 一区二区在线观看视频在线观看| 欧美性猛片xxxx免费看久爱| 免费av网站大全久久| 亚洲高清不卡在线| 日韩三区在线观看| 波多野结衣的一区二区三区| 亚洲一区免费在线观看| 日韩精品一区二区三区视频播放 | 久草这里只有精品视频| 久久天天做天天爱综合色| 97久久超碰国产精品电影| 婷婷开心激情综合| 国产午夜精品福利| 欧美日韩高清不卡| 国产aⅴ综合色| 日韩精品一二三区| 国产精品女主播av| 91麻豆精品国产91久久久| 成人伦理片在线| 日韩精品国产欧美| 亚洲人123区| www国产亚洲精品久久麻豆| 日本精品一区二区三区四区的功能| 免费高清不卡av| 亚洲精品视频在线| 久久色在线观看| 欧美亚洲一区二区在线| 国产电影一区二区三区| 偷窥少妇高潮呻吟av久久免费| 国产欧美综合在线| 日韩一区二区电影| 色美美综合视频| 成人精品视频一区| 国模大尺度一区二区三区| 亚洲综合久久av| 欧美国产日韩亚洲一区| 精品国产免费视频| 3atv一区二区三区| 欧美三级日本三级少妇99| www.欧美色图| 成人性生交大片免费看中文| 精品伊人久久久久7777人| 午夜精品久久久久久久久久| 一区二区三区中文字幕在线观看| 国产日韩欧美在线一区| 精品国产免费一区二区三区香蕉| 欧美日韩1234| 精品视频1区2区| 在线观看国产日韩| 在线视频国产一区| 色婷婷国产精品| 色狠狠一区二区三区香蕉| www.欧美日韩国产在线| 成人黄色在线网站| 成人听书哪个软件好| 国产精品一二三四区| 国内精品久久久久影院色| 蜜桃久久久久久久| 另类调教123区| 久久99精品国产麻豆不卡| 日本欧美韩国一区三区| 日本免费新一区视频| 日本网站在线观看一区二区三区 | 水野朝阳av一区二区三区| 一区二区三区四区视频精品免费| 日韩一区日韩二区| 亚洲女人的天堂| 亚洲精品国产一区二区精华液| 亚洲图片另类小说| 亚洲最色的网站| 亚洲bt欧美bt精品| 日韩不卡一区二区| 久久精品99国产精品| 激情欧美日韩一区二区| 国产高清不卡二三区| 成人综合在线网站| 色婷婷精品久久二区二区蜜臀av | 亚洲电影中文字幕在线观看| 亚洲国产美女搞黄色| 调教+趴+乳夹+国产+精品| 奇米影视7777精品一区二区| 国精品**一区二区三区在线蜜桃| 国产在线视频不卡二| 成人国产精品免费网站| 色8久久人人97超碰香蕉987| 欧美日韩你懂得| 久久久久久电影| 一个色综合网站| 美女网站在线免费欧美精品| 粉嫩在线一区二区三区视频| 日本道精品一区二区三区| 欧美一区二区三区免费| 欧美国产精品v| 亚洲电影中文字幕在线观看| 精品夜夜嗨av一区二区三区| 91美女片黄在线| 欧美变态tickle挠乳网站| 亚洲欧美国产毛片在线| 捆绑紧缚一区二区三区视频| 国产成人激情av| 欧美猛男男办公室激情| 国产午夜精品久久| 日日摸夜夜添夜夜添精品视频| 国产乱人伦偷精品视频免下载| aa级大片欧美| 精品黑人一区二区三区久久| 亚洲精品欧美在线| 国产aⅴ综合色| 日韩欧美在线不卡| 亚洲精品亚洲人成人网| 国产一区二区91| 欧美高清激情brazzers| 国产精品免费av| 国产在线精品一区二区夜色| 欧美性大战久久久| 中文字幕一区二区三区蜜月| 毛片av中文字幕一区二区| 在线视频一区二区三| 日本一区二区三区四区| 久久精品国产免费| 欧美日韩高清一区二区不卡| 综合久久给合久久狠狠狠97色| 韩国精品在线观看| 91精品国产麻豆国产自产在线| 亚洲欧美视频一区| 成人av网址在线观看| 精品88久久久久88久久久| 亚洲va国产天堂va久久en| 色悠久久久久综合欧美99| 国产精品免费看片| 国产成人免费在线观看| 久久嫩草精品久久久精品一| 蜜臀91精品一区二区三区 | 免费人成在线不卡| 欧美在线视频日韩| 成人欧美一区二区三区黑人麻豆 | 成人欧美一区二区三区白人 | 日韩一区二区在线观看视频| 亚洲一区二区三区四区在线| 91麻豆国产在线观看| 亚洲人成人一区二区在线观看| 成人久久18免费网站麻豆| 久久久高清一区二区三区| 国产美女av一区二区三区| 欧美大片免费久久精品三p| 久久精品国产精品青草| 欧美一级专区免费大片| 久久精品国产99| 欧美精品一区二区不卡| 国产精品亚洲一区二区三区妖精 |