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

📄 jobs-lossdel.tcl

📁 无线个域网(WPAN)就是在个人周围空间形成的无线网络
💻 TCL
字号:
# jobs-lossdel.tcl## Tests that the delay/loss differentiation is working properly# Outputs a nam animation and tracefiles.## Topology is as follows:## source(1)  --\                                  /- sink(1)# source(2)  ---\  core_node(1) -- core_node(2)  /-- sink(2)# source(3)  ---/                                \-- sink(3)# source(4)  __/                                  \_ sink(4)## Links:# - : 10 Mbps, 1 ms## Classes: # 1: ADC=5 ms, ALC=1 %, no ARC, no RDC, no RLC# 2: no ADC, no ALC, RDC = 4, RLC = 2# 3: no ADC, no ALC, RDC = 4, RLC = 2# 4: no ADC, no ALC, RDC = 4, RLC = 2## Traffic is randomized CBR## Auxiliary functionsSimulator instproc get-link { node1 node2 } {    	$self instvar link_    	set id1 [$node1 id]    	set id2 [$node2 id]    	return $link_($id1:$id2)}Simulator instproc get-queue { node1 node2 } {    	global ns    	set l [$ns get-link $node1 $node2]    	set q [$l queue]    	return $q}# JoBS duplex link: rate in kbps, delay in ms, buff_sz in packetsproc build-jobs-link {src dst rate delay buff_sz} {    	global ns    	$ns duplex-link $src $dst [expr $rate*1000.0] [expr $delay/1000.0] JoBS    	$ns queue-limit $src $dst $buff_sz    	$ns queue-limit $dst $src $buff_sz}# FCFS-marker duplex link: rate in kbps, delay in ms, buff_sz in packetsproc build-marker-link {src dst rate delay buff_sz} {    	global ns    	$ns simplex-link $src $dst [expr $rate*1000.0] [expr $delay/1000.0] Marker    	$ns simplex-link $dst $src [expr $rate*1000.0] [expr $delay/1000.0] Demarker    	$ns queue-limit $src $dst $buff_sz    	$ns queue-limit $dst $src $buff_sz}# FCFS-demarker duplex link: rate in kbps, delay in ms, buff_sz in packetsproc build-demarker-link {src dst rate delay buff_sz} {	global ns	$ns simplex-link $src $dst [expr $rate*1000.0] [expr $delay/1000.0] Demarker	$ns simplex-link $dst $src [expr $rate*1000.0] [expr $delay/1000.0] Marker	$ns queue-limit $src $dst $buff_sz	$ns queue-limit $dst $src $buff_sz}# Basic procedure for connecting agents, etc.proc flow_setup {id src src_agent dst dst_agent app_flow pksize} {	global ns	$ns attach-agent $src $src_agent	$ns attach-agent $dst $dst_agent	$ns connect $src_agent $dst_agent	$src_agent set packetSize_ 	$pksize	$src_agent set fid_ $id	$app_flow set flowid_ $id	$app_flow attach-agent $src_agent	return $src_agent    }# CBR flow: Packet size:bytes, Rate: kbps, Start time:secondsproc build-cbr {id src src_agent dst dst_agent app_flow rate pksize start_tm} {    	global ns    	flow_setup $id $src $src_agent $dst $dst_agent $app_flow $pksize    	$app_flow set rate_        [expr $rate * 1000.0]    	$app_flow set random_ 1    	$ns at $start_tm "$app_flow start"    	puts [format "\tCBR-$id starts at %.4fsec" $start_tm]}# main puts " "set ns [new Simulator]set rnd [new RNG]set seed 16puts "Random seed: $seed"$rnd seed $seed set nf [open jobs-lossdel/out.nam w]$ns namtrace-all $nfQueue/JoBS set drop_front_ falseQueue/JoBS set trace_hop_ trueQueue/JoBS set adc_resolution_type_ 0Queue/JoBS set shared_buffer_ 1Queue/JoBS set mean_pkt_size_ 4000Queue/Demarker set demarker_arrvs1_ 0Queue/Demarker set demarker_arrvs2_ 0Queue/Demarker set demarker_arrvs3_ 0Queue/Demarker set demarker_arrvs4_ 0Queue/Marker set marker_arrvs1_ 0Queue/Marker set marker_arrvs2_ 0Queue/Marker set marker_arrvs3_ 0Queue/Marker set marker_arrvs4_ 0#puts "\nTOPOLOGY SETUP"# Number of hops (=k)set hops 2puts "Number of hops: $hops"# Link  latency (ms)set DELAY  	1.0puts "Links latency: $DELAY (ms)"# links: bandwidth (kbps) set BW		10000.0puts "Links capacity: $BW (kbps)"# Buffer size in gateways (in packets)set GW_BUFF	50puts "Gateway Buffer Size: $GW_BUFF (packs)"# Packet Size (in bytes); assume common for all sourcesset PKTSZ      500set MAXWIN     50puts "Packet Size: $PKTSZ (bytes)"# Number of monitored flows (equal to # of classes)set N_CL	4	puts "Number of classes: $N_CL"set N_USERS	4puts "Number of flows: $N_USERS"set START_TM 	0.0puts "Monitored flows start at: $START_TM"set max_time 	10.0puts "Max time: $max_time (sec)"# Statistics-related parametersset STATS_INTR  2; # interval between reporting statistics set START_STATS 0; # start-time for reporting statistics # Marker Types# Deterministic set DETERM	1	# Demarker Types# Create a trace file for each class (for user traffic)set VERBOSE	1# Do not create trace files set QUIET	2proc print_time {interval} {	global ns     	puts ""    	puts -nonewline stdout [format "%.2f\t" [$ns now]]    	$ns at [expr [$ns now]+$interval] "print_time $interval"}# 1. Core nodes ($hops nodes)for {set i 1} {$i <= $hops} {incr i} {	set core_node($i) [$ns node]	$core_node($i) color "black"	$core_node($i) shape "square"	$core_node($i) label QoSbox}puts "Core nodes: OK"# 2. User traffic nodes and sinks (N_USERS sources and sinks)for {set i 1} {$i <= $N_USERS} {incr i} {	set source($i) [$ns node]	$source($i) color blue	set sink($i) [$ns node]	$sink($i) color blue	set source_agent($i) [new Agent/UDP]	set sink_agent($i) [new Agent/LossMonitor]}puts "Traffic nodes and sinks: OK"# 3. Core link (JoBS)build-jobs-link $core_node(1) $core_node(2) $BW $DELAY $GW_BUFFset q [$ns get-queue $core_node(1) $core_node(2)]set l [$ns get-link $core_node(1) $core_node(2)]$q copyright-info$q init-rdcs -1 4 4 4 $q init-rlcs -1 2 2 2 $q init-alcs 0.01 -1 -1 -1$q init-adcs 0.001 -1 -1 -1$q init-arcs -1 -1 -1 -1$q trace-file jobs-lossdel/hoptrace$q link [$l link]$q sampling-period 1$q id $i$q initialize# It's a duplex link# Even though data won't travel on the reverse path (UDP sources), # it is always a good idea to configure the JoBS queue on the reverse# path as well, in order to avoid unexpected results for TCP traffic. set q [$ns get-queue $core_node(2) $core_node(1)]set l [$ns get-link $core_node(2) $core_node(1)]$q init-rdcs -1 4 4 4 $q init-rlcs -1 2 2 2$q init-alcs 0.01 -1 -1 -1$q init-adcs 0.001 -1 -1 -1$q init-arcs -1 -1 -1 -1$q trace-file null$q link [$l link]$q sampling-period 1$q id $i$q initializeputs "Core link: OK"# 6. Edge links (marker)for {set i 1} {$i <= $N_USERS} {incr i} {	build-marker-link    $source($i) $core_node(1) $BW $DELAY [expr $GW_BUFF*10]    	set q [$ns get-queue $source($i) $core_node(1)]   	$q marker_type $DETERM	$q marker_class $i    	set q [$ns get-queue $core_node(1) $source($i)]	# assign a bogus id    	$q id 99	set l [$ns get-link $source($i) $core_node(1)]    		build-demarker-link  $core_node($hops) $sink($i) $BW $DELAY [expr $GW_BUFF*10]    	set q [$ns get-queue $core_node($hops) $sink($i)]    	$q id 99    	set q [$ns get-queue $sink($i) $core_node($hops)]    	$q marker_type $DETERM	$q marker_class $i}puts "Edge marker/demarker links: OK" ## Create traffic## User traffic (UDP)for {set i 1} {$i <= $N_USERS} {incr i} {	set flow($i) [new Application/Traffic/CBR]	$flow($i) set random_ 1	build-cbr $i $source($i) $source_agent($i) $sink($i) $sink_agent($i) $flow($i) 2600.0 $PKTSZ $START_TM }puts "Flows: OK"## Queue Monitors#$ns at $STATS_INTR "print_time $STATS_INTR"$ns at [expr $max_time+.000000001] "puts \"Finishing Simulation...\""$ns at [expr $max_time+1] "finish"proc finish {} {	global ns nf        puts "\nSimulation End"	$ns flush-trace	close $nf	exec nam jobs-lossdel/out.nam & 	exit 0}# nam stuff$ns duplex-link-op $source(1) $core_node(1) orient 300deg$ns duplex-link-op $source(1) $core_node(1) color "blue"$ns duplex-link-op $source(2) $core_node(1) orient 330deg$ns duplex-link-op $source(2) $core_node(1) color "blue"$ns duplex-link-op $source(3) $core_node(1) orient 30deg$ns duplex-link-op $source(3) $core_node(1) color "blue"$ns duplex-link-op $source(4) $core_node(1) orient 60deg$ns duplex-link-op $source(4) $core_node(1) color "blue"$ns duplex-link-op $core_node(1) $core_node(2) orient right$ns duplex-link-op $core_node(1) $core_node(2) color black$ns duplex-link-op $core_node(1) $core_node(2) queuePos 0.5$ns duplex-link-op $core_node(2) $sink(1) orient 60deg$ns duplex-link-op $core_node(2) $sink(1) color "blue"$ns duplex-link-op $core_node(2) $sink(2) orient 30deg$ns duplex-link-op $core_node(2) $sink(2) color "blue"$ns duplex-link-op $core_node(2) $sink(3) orient 330deg$ns duplex-link-op $core_node(2) $sink(3) color "blue"$ns duplex-link-op $core_node(2) $sink(4) orient 300deg$ns duplex-link-op $core_node(2) $sink(4) color "blue"$ns color 1 red$ns color 2 green$ns color 3 blue$ns color 4 purpleputs "\ngo!\n"$ns run

⌨️ 快捷键说明

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