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

📄 pingdemo.tcl

📁 柯老师网站上找到的
💻 TCL
字号:
## pingdemo.tcl## demonstration of the emulation facilities using the icmp# echo responder (also uses the arp responder)## K Fall, 10/11/98# kfall@cs.berkeley.edu## Instructions:#	1> first compile 'nse', the ns simulator with emulation#	2> change the 'myname' var below to the name of some machine#		that isn't being used right now,#		and set ifname to the relevant interface#	3> run this script (nse pingdemo.tcl)#	4> run a 'ping' from some host to the name chosen in step 2#	5> ping output should indicate the various functions exercised by#		the tests below#Class PingDemoPingDemo instproc init {} {	$self next	$self instvar myname myaddr dotrace stoptime owdelay ifname delay_list next_delay_list	$self instvar traceallfile tracenamfile	#	# These parameters are system specific.	#	switch [exec hostname] {	pollytto* {		set myname "dash-w.isi.edu"		set ifname cnw0		set dotrace 0	}	kfalls-host* {		set myname "bit.ee.lbl.gov"		set ifname fxp0		set dotrace 1	}	default {		puts "error: running on an unknown host; edit PingDemo::init"		exit 1	}	}	set myaddr [exec host $myname | sed "s/.*address\ //"]	set stoptime 200.0	set owdelay 1000ms	set delay_list {0.5 0.1 0.01 0.001}	set next_delay_list ""	set traceallfile em-all.tr	set tracenamfile em.nam	puts ""}PingDemo instproc syssetup {} {	puts "turning off IP forwarding and ICMP redirect generation."	exec sysctl -w net.inet.ip.forwarding=0 net.inet.ip.redirect=0}PingDemo instproc emsetup {} {	$self instvar myname myaddr dotrace stoptime owdelay ifname	$self instvar traceallfile tracenamfile ns	puts "I am $myname with IP address $myaddr."	set ns [new Simulator]	if { $dotrace } {		exec rm -f $traceallfile $tracenamfile		set allchan [open $traceallfile w]		$ns trace-all $allchan		set namchan [open $tracenamfile w]		$ns namtrace-all $namchan	}	$ns use-scheduler RealTime	set bpf2 [new Network/Pcap/Live]; #	used to read IP info	$bpf2 set promisc_ true	set dev2 [$bpf2 open readonly $ifname]	set ipnet [new Network/IP];	 #	used to write IP pkts	$ipnet open writeonly	set arpagent [new ArpAgent]	$arpagent config $ifname	set myether [$arpagent set myether_]	puts "Arranging to proxy ARP for $myaddr on my ethernet $myether."	$arpagent insert $myaddr $myether publish	#	# try to filter out unwanted stuff like netbios pkts, dns, etc	#	$bpf2 filter "icmp and dst $myaddr"	set pfa1 [new Agent/Tap]	set pfa2 [new Agent/Tap]	set ipa [new Agent/Tap]	set echoagent [new Agent/PingResponder]	$pfa2 set fid_ 0	$ipa set fid_ 1	$pfa2 network $bpf2	$ipa network $ipnet	#	# topology creation	#	set node0 [$ns node]	set node1 [$ns node]	set node2 [$ns node]	$ns simplex-link $node0 $node1 1Mb $owdelay DropTail	$ns simplex-link $node1 $node0 1Mb $owdelay DropTail	$ns simplex-link $node0 $node2 1Mb $owdelay DropTail	$ns simplex-link $node2 $node0 1Mb $owdelay DropTail	$ns simplex-link $node1 $node2 1Mb $owdelay DropTail	$ns simplex-link $node2 $node1 1Mb $owdelay DropTail	$self instvar explink1 explink2; # link to experiment with	set explink1 [$ns link $node0 $node2]	set explink2 [$ns link $node2 $node1]	#	# attach-agent winds up calling $node attach $agent which does	# these things:	#	append agent to list of agents in the node	#	sets target in the agent to the entry of the node	#	sets the node_ field of the agent to the node	#	if not yet created,	#		create port demuxer in node (Addr classifier),	#		put in dmux_	#		call "$self add-route $id_ $dmux_"	#			installs id<->dmux mapping in classifier_	#	allocate a port	#	set agent's port id and address	#	install port-agent mapping in dmux_	#		#		$ns attach-agent $node0 $pfa2; #	packet filter agent	$ns attach-agent $node1 $ipa; # ip agent (for sending)	$ns attach-agent $node2 $echoagent	$ns simplex-connect $pfa2 $echoagent	$ns simplex-connect $echoagent $ipa}PingDemo instproc newowdelay delay {	$self instvar explink1 explink2 ns owdelay	set owdelay $delay	set lnk [$explink1 link]	puts "[$ns now]: change 1-way delay from [$lnk set delay_] to $delay sec."	$lnk set delay_ $delay	set lnk [$explink2 link]	$lnk set delay_ $delay}# eternally cycle through the delays in delay_listPingDemo instproc newowdelay_cycle {} {	$self instvar delay_list next_delay_list	if { "$next_delay_list" == "" } {		set next_delay_list $delay_list	}	set next_delay [lindex $next_delay_list 0]	set next_delay_list [lrange $next_delay_list 1]	$self newowdelay $next_delay	$ns at [expr [$ns now] + 10] "$self newowdelay_cycle"}PingDemo instproc run {} {	$self instvar ns myaddr owdelay ifname explink	$self syssetup	$self emsetup	puts "listening for pings on addr $myaddr, 1-way link delay: $owdelay\n"	$ns at 10.5 "$self newowdelay_cycle"	$ns run}PingDemo thisdemothisdemo run

⌨️ 快捷键说明

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