📄 jobs-cn2002.tcl
字号:
puts "Gateway Buffer Size: $GW_BUFF (packs)"# Utilization factor for all core linksset utilz 0.0005puts "Per source utilization (cross-traffic): $utilz"# 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_TCP 3 set N_USERS 4puts "Number of flows: $N_USERS"# Number of cross-traffic sources set N_C_TCP 6set N_CT 10 puts "Number of cross-traffic sources (per hop) $N_CT"# Peak Rate of a cross-traffic source (set to link bandwidth, # because a cross-traffic source models an incoming link's aggregate traffic)set PEAK_RT_C $EDGE_BW puts "Peak rate of cross-traffic sources: $PEAK_RT_C (kbps)"# Average Rate of a cross-traffic source (kbps); there is some algebra here set AVG_RT_C [expr $utilz * $EDGE_BW / ($N_CT*1.)] puts "Average cross-traffic rate (per source): $AVG_RT_C (kbps)"# Average idle duration for cross-traffic sources (msec)set IDLE_TM_C [expr ($PEAK_RT_C-$AVG_RT_C)/($PEAK_RT_C*$AVG_RT_C) * $PKTSZ*8] puts "Average cross-traffic idle time: $IDLE_TM_C (ms)"# Alpha parameter of the Pareto distribution for cross-traffic sourcesset PARETO_ALPHA_C 1.9puts "Alpha pareto parameter of cross-traffic sources: $PARETO_ALPHA_C"set START_TM 10.0puts "Monitored flows start at: $START_TM"set max_time 70.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 (for user traffic)set DETERM 1 # Statistical (for cross-traffic)set STATIS 2 # Demarker Types# Create a trace file for each class (for user traffic)set VERBOSE 1# Do not create trace files set QUIET 2# 1. Core nodes ($hops nodes)for {set i 1} {$i <= $hops} {incr i} { set core_node($i) [$ns node]}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 user_source($i) [$ns node] set user_sink($i) [$ns node] if {$i <= $N_USERS_TCP} { set user_source_agent($i) [new Agent/TCP/Newreno] set user_sink_agent($i) [new Agent/TCPSink/DelAck] } else { set user_source_agent($i) [new Agent/UDP] set user_sink_agent($i) [new Agent/LossMonitor] } }puts "User traffic nodes and sinks: OK"# 3. Cross traffic nodes and sinks ($hops-1 sources, $hops-1 sinks)for {set i 1} {$i < $hops} {incr i} { for {set j 1} {$j <= $N_CT} {incr j} { set cross_source([expr ($i-1)*$N_CT+$j]) [$ns node] set cross_sink([expr ($i-1)*$N_CT+$j]) [$ns node] if {$j > $N_C_TCP} { set cross_source_agent([expr ($i-1)*$N_CT+$j]) [new Agent/UDP] set cross_sink_agent([expr ($i-1)*$N_CT+$j]) [new Agent/LossMonitor] } else { set cross_source_agent([expr ($i-1)*$N_CT+$j]) [new Agent/TCP/Newreno] set cross_sink_agent([expr ($i-1)*$N_CT+$j]) [new Agent/TCPSink/DelAck] } puts "Creating cross_source/sink_agent [expr ($i-1)*$N_CT+$j] ($i,$j)" }}puts "Cross traffic nodes and sink: OK"# 4. Core links (JoBS)for {set i 1} {$i < $hops} {incr i} { build-jobs-link $core_node($i) $core_node([expr $i+1]) $CORE_BW $CORE_DEL $GW_BUFF set q [$ns get-queue $core_node($i) $core_node([expr $i+1])] set l [$ns get-link $core_node($i) $core_node([expr $i+1])] if {$i == 1} { $q copyright-info } $q init-rdcs -1 4 4 4 $q init-rlcs 2 2 2 2 $q init-alcs 0.005 -1 -1 -1 $q init-adcs 0.002 -1 -1 -1 $q trace-file jobs-cn2002/hoptrace.$i $q link [$l link] $q sampling-period 1 $q id $i $q initialize # It's a duplex link set q [$ns get-queue $core_node([expr $i+1]) $core_node($i)] set l [$ns get-link $core_node([expr $i+1]) $core_node($i)] $q init-rdcs -1 4 4 4 $q init-rlcs 2 2 2 2 $q init-alcs 0.005 -1 -1 -1 $q init-adcs 0.002 -1 -1 -1 $q trace-file null $q link [$l link] $q sampling-period 1 $q id [expr $i+$hops] $q initialize}puts "Core links: OK"# 5. Cross-traffic links (marker)for {set i 1} {$i < $hops} {incr i} { for {set j 1} {$j <= $N_CT} {incr j} { build-marker-link $cross_source([expr ($i-1)*$N_CT+$j]) $core_node($i) [expr $EDGE_BW/(1.*$N_CT)] $EDGE_DEL [expr $GW_BUFF*100] set q [$ns get-queue $cross_source([expr ($i-1)*$N_CT+$j]) $core_node($i)] if {$j == 1} { $q marker_type $DETERM $q marker_class 1 } elseif {($j >=2) && ($j <= 3)} { $q marker_type $DETERM $q marker_class 2 } elseif {($j >= 4) && ($j <= 6)} { $q marker_type $DETERM $q marker_class 3 } else { $q marker_type $DETERM $q marker_class 4 } set q [$ns get-queue $core_node($i) $cross_source([expr ($i-1)*$N_CT+$j])] $q id 99 $q trace-file null build-marker-link $cross_sink([expr ($i-1)*$N_CT+$j]) $core_node([expr $i+1]) [expr $EDGE_BW/(1.*$N_CT)] $EDGE_DEL [expr $GW_BUFF*100] set q [$ns get-queue $cross_sink([expr ($i-1)*$N_CT+$j]) $core_node([expr $i+1])] if {$j == 1} { $q marker_type $DETERM $q marker_class 1 } elseif {($j >=2) && ($j <= 3)} { $q marker_type $DETERM $q marker_class 2 } elseif {($j >= 4) && ($j <= 6)} { $q marker_type $DETERM $q marker_class 3 } else { $q marker_type $DETERM $q marker_class 4 } set q [$ns get-queue $core_node([expr $i+1]) $cross_sink([expr ($i-1)*$N_CT+$j])] $q id 99 $q trace-file null }} puts "Cross traffic links: OK"# 6. Edge links (marker)for {set i 1} {$i <= $N_USERS} {incr i} { build-marker-link $user_source($i) $core_node(1) $EDGE_BW $EDGE_DEL $GW_BUFF set q [$ns get-queue $user_source($i) $core_node(1)] $q marker_type $DETERM $q marker_class $i set q [$ns get-queue $core_node(1) $user_source($i)] # assign a bogus id $q id 99 build-demarker-link $core_node($hops) $user_sink($i) $EDGE_BW $EDGE_DEL $GW_BUFF set q [$ns get-queue $core_node($hops) $user_sink($i)] $q id $i $q trace-file jobs-cn2002/e2edelay set q [$ns get-queue $user_sink($i) $core_node($hops)] $q marker_type $DETERM $q marker_class $i}puts "Edge marker/demarker links: OK" ## Create traffic## Cross-traffic (UDP, on/off Pareto)for {set i 1} {$i < $hops} {incr i} { for {set j 1} {$j <= $N_CT} {incr j} { if {$j > $N_C_TCP} { set cross_flow([expr ($i-1)*$N_CT+$j]) [new Application/Traffic/Pareto] build-pareto-on-off [expr ($i-1)*$N_CT+$j+$N_USERS] $cross_source([expr ($i-1)*$N_CT+$j]) $cross_source_agent([expr ($i-1)*$N_CT+$j]) $cross_sink([expr ($i-1)*$N_CT+$j]) $cross_sink_agent([expr ($i-1)*$N_CT+$j]) $cross_flow([expr ($i-1)*$N_CT+$j]) 2200.0 $PKTSZ $PARETO_ALPHA_C 0.0 100.0 120.0 } else { set cross_flow([expr ($i-1)*$N_CT+$j]) [new Application/FTP] init_mouse [expr ($i-1)*$N_CT+$j+$N_USERS] $cross_source([expr ($i-1)*$N_CT+$j]) $cross_source_agent([expr ($i-1)*$N_CT+$j]) $cross_sink([expr ($i-1)*$N_CT+$j]) $cross_sink_agent([expr ($i-1)*$N_CT+$j]) $cross_flow([expr ($i-1)*$N_CT+$j]) $MAXWIN $PKTSZ 0.0 0.2 300 1000 } puts "Connecting cross_source/sink_agent [expr ($i-1)*$N_CT+$j] ($i,$j) - via flow [expr ($i-1)*$N_CT+$j+$N_USERS]" }} puts "Cross-traffic sources: OK"# User traffic (TCP/FTP and UDP)for {set i 1} {$i <= $N_USERS} {incr i} { if {$i <= $N_USERS_TCP} { set user_flow($i) [new Application/FTP] inf_ftp $i $user_source($i) $user_source_agent($i) $user_sink($i) $user_sink_agent($i) $user_flow($i) $MAXWIN $PKTSZ $START_TM } else { set user_flow($i) [new Application/Traffic/Pareto] build-pareto-on-off $i $user_source($i) $user_source_agent($i) $user_sink($i) $user_sink_agent($i) $user_flow($i) 5000.0 $PKTSZ $PARETO_ALPHA_C $START_TM 10.0 10.0 }}puts "TCP flows: OK"for {set i 1} {$i <= $N_USERS} {incr i} { if {$i <= $N_USERS_TCP} { set cwnd_file($i) [open jobs-cn2002/cwnd$i.tr w] } set thru_file($i) [open jobs-cn2002/thru$i.tr w]}set thru_file([expr $N_USERS + 1]) [open jobs-cn2002/thru_sum.tr w]## Queue Monitors#for {set i 1} {$i < $hops} {incr i} { set qmon_xy($i) [$ns monitor-queue $core_node($i) $core_node([expr $i+1]) ""] $ns at $START_STATS "$qmon_xy($i) reset" set bing_xy($i) [$qmon_xy($i) get-bytes-integrator] set ping_xy($i) [$qmon_xy($i) get-pkts-integrator] $ns at $START_STATS "$bing_xy($i) reset" $ns at $START_STATS "$ping_xy($i) reset" $ns at [expr $START_STATS+$STATS_INTR] "linkDump [$ns link $core_node($i) $core_node([expr $i+1])] $bing_xy($i) $ping_xy($i) $qmon_xy($i) $STATS_INTR N($i)-N([expr $i+1])" }# Stats dumpfor {set i 1} {$i < $hops} {incr i} { set flow_file($i) [open jobs-cn2002/flows-hop$i.tr w] set fm [$ns makeflowmon Fid] $ns attach-fmon [$ns get-link $core_node($i) $core_node([expr $i+1])] $fm $ns at $START_TM "flowDump [$ns get-link $core_node($i) $core_node([expr $i+1])] $fm $flow_file($i) 0.5"}for {set i 1} {$i <= $N_USERS} {incr i} { set tot_drop($i) 0 set old_arv($i) 0 set total_drops_file($i) [open jobs-cn2002/totaldrops-flow$i.tr w] $ns at $START_TM "totalDrops $i 0.5"}$ns at $START_TM "record_thru"$ns at $START_TM "record_cwnd"$ns at $max_time "finish"proc finish {} { puts "\nSimulation End" global N_CT N_USERS user_source core_node cross_source cross_sink user_sink ns hops puts "\nMonitored Flows (send):" for {set i 1} {$i <= $N_USERS} {incr i} { set q [$ns get-queue $user_source($i) $core_node(1)] puts "$i: arrivals class-1 = [$q set marker_arrvs1_]" puts "$i: arrivals class-2 = [$q set marker_arrvs2_]" puts "$i: arrivals class-3 = [$q set marker_arrvs3_]" puts "$i: arrivals class-4 = [$q set marker_arrvs4_]" } puts "\nMonitored Flows (receive):" for {set i 1} {$i <= $N_USERS} {incr i} { set q [$ns get-queue $core_node($hops) $user_sink($i)] puts "$i: arrivals class-1 = [$q set demarker_arrvs1_]" puts "$i: arrivals class-2 = [$q set demarker_arrvs2_]" puts "$i: arrivals class-3 = [$q set demarker_arrvs3_]" puts "$i: arrivals class-4 = [$q set demarker_arrvs4_]" } for {set i 1} {$i < $hops} {incr i} { for {set j 1} {$j <= $N_CT} {incr j} { set q [$ns get-queue $cross_source([expr ($i-1)*$N_CT+$j]) $core_node($i)] puts "\nCore Input Link ($i,$j):" puts " cross-arrivals class-1 = [$q set marker_arrvs1_]" puts " cross-arrivals class-2 = [$q set marker_arrvs2_]" puts " cross-arrivals class-3 = [$q set marker_arrvs3_]" puts " cross-arrivals class-4 = [$q set marker_arrvs4_]" set q [$ns get-queue $core_node([expr $i+1]) $cross_sink([expr ($i-1)*$N_CT+$j])] puts "\nCore Output Link ($i,$j):" puts " cross-arrivals class-1 = [$q set demarker_arrvs1_]" puts " cross-arrivals class-2 = [$q set demarker_arrvs2_]" puts " cross-arrivals class-3 = [$q set demarker_arrvs3_]" puts " cross-arrivals class-4 = [$q set demarker_arrvs4_]" } } exit 0}puts "\ngo!\n"$ns run
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -