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

📄 simple-plm.tcl

📁 一款用来进行网络模拟的软件
💻 TCL
字号:
# $Header: /cvsroot/nsnam/ns-2/tcl/ex/simple-plm.tcl,v 1.2 2000/07/27 00:53:14 haoboy Exp $#choose your scenarioset scenario 0set packetSize 500set runtime 100set plm_debug_flag 2set rates "20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3 20e3"set level [llength $rates]set rates_cum [calc_cum $rates]puts stderr $rates_cumset run_nam 1set Queue_sched_ FQset PP_burst_length 2set PP_estimation_length 3Queue/DropTail set limit_ 20Class Scenario0 -superclass PLMTopology#this scenario shows the convergence of a single plm session #on a heterogeneous topologyScenario0 instproc init args {	#Create the following topology	#             _____ R1	#            /256kb   ____R4	#      1Mb  /        / 56Kb	#   S------N1-------N2------R2	#            128kb   \ 250kb	#                     \        #                 64kb \	#                       \N3____R3	#                         10Mb	#    eval $self next $args    $self instvar ns node        $self build_link 0 1 10ms  1e6    $self build_link 1 2 50ms  256e3    $self build_link 1 3 100ms  128e3    $self build_link 3 4 50ms 250e3    $self build_link 3 5 30ms 56e3    $self build_link 3 6 30ms 64e3    $self build_link 6 7 5ms 10e6    $ns duplex-link-op $node(0) $node(1) orient right    $ns duplex-link-op $node(1) $node(2) orient right    $ns duplex-link-op $node(1) $node(3) orient right-down    $ns duplex-link-op $node(3) $node(4) orient right    $ns duplex-link-op $node(3) $node(5) orient right-up    $ns duplex-link-op $node(3) $node(6) orient  right-down    $ns duplex-link-op $node(6) $node(7) orient  right        $ns duplex-link-op $node(0) $node(1) queuePos 0.5    $ns duplex-link-op $node(1) $node(2) queuePos 0.5    $ns duplex-link-op $node(1) $node(3) queuePos 0.5    $ns duplex-link-op $node(3) $node(4) queuePos 0.5    $ns duplex-link-op $node(3) $node(5) queuePos 0.5    $ns duplex-link-op $node(3) $node(6) queuePos 0.5    $ns duplex-link-op $node(6) $node(7) queuePos 0.5    set addr [$self place_source 0 3]    puts stderr "sender placed"    set tm 10    set time [expr  double([ns-random] % 10000000) / 1e7 * 5+$tm]    $self place_receiver 2 $addr $time 1    set time [expr  double([ns-random] % 10000000) / 1e7 * 5+$tm]    $self place_receiver 4 $addr $time 1    set time [expr  double([ns-random] % 10000000) / 1e7 * 5+$tm]    $self place_receiver 6 $addr $time 1    set time [expr  double([ns-random] % 10000000) / 1e7 * 5+$tm]    $self place_receiver 7 $addr $time 1        puts stderr "receivers placed"       #mcast set up    DM set PruneTimeout 1000    set mproto DM    set mrthandle [$ns mrtproto $mproto {} ]}Class Scenario1 -superclass PLMTopology#this simple scenario shows the influence of the number of#receivers for a single plm session on a star topology.Scenario1 instproc init args {	    eval $self next $args    $self instvar ns node        set nb_recv 20    $self build_link 0 1 20ms 256e3    for {set i 2} {$i<=[expr $nb_recv + 1]} {incr i} {	set delay [uniform 5 150]ms	set bp [uniform 500e3 1e6]	puts stderr "$delay $bp"	$self build_link 1 $i $delay  $bp    }    set addr [$self place_source 0 3]    puts stderr "sender placed"    set check_estimate 1    for {set i 2} {$i<=[expr $nb_recv + 1]} {incr i} {	set time 5	$self place_receiver $i $addr $time $check_estimate    }        puts stderr "receivers placed"       #mcast set up    DM set PruneTimeout 1000    set mproto DM    set mrthandle [$ns mrtproto $mproto {} ]}Class Scenario2 -superclass PLMTopology#this scenario shows the effect of an increasing number of plm#session, and the effect of variable bottleneck (simulated by a CBR flow)Scenario2 instproc init args {	    eval $self next $args    $self instvar ns node    global f        set nb_plm 3    set nb_cbr 3    set nb_src [expr $nb_plm + $nb_cbr]    #puts $f "param $nb_plm $nb_cbr"       $self build_link 0 1 20ms [expr 200e3 * $nb_plm]    $ns duplex-link-op $node(0) $node(1) queuePos 0.5      for {set i 2} {$i<=[expr $nb_src + 1]} {incr i} {	set delay 5ms 	set bp 10e6	puts stderr "$delay $bp"	$self build_link $i 0 $delay  $bp    }    for {set i [expr $nb_src + 2]} {$i<=[expr 2 * $nb_src + 1]} {incr i} {	set delay 5ms 	set bp 10e6		puts stderr "$delay $bp"	$self build_link 1 $i $delay  $bp    }    for {set i 2} {$i<=[expr $nb_plm + 1]} {incr i} {	set addr($i) [$self place_source $i 3]    }    puts stderr "sender placed"    set check_estimate 1    for {set i 2} {$i<=[expr $nb_plm + 1]} {incr i} {	set time [expr 10 * ($i - 1)]	$self place_receiver [expr $i + $nb_src] $addr($i) $time $check_estimate    }    for {set i 1} {$i<=$nb_cbr} {incr i} {	set null($i) [new Agent/Null]	set udp($i) [new Agent/UDP]	$udp($i) set fid_ [expr $i + $nb_plm]	$ns attach-agent $node([expr $i + $nb_plm + 1]) $udp($i)	$ns attach-agent $node([expr $i + $nb_plm + $nb_src + 1]) $null($i)	$ns connect $udp($i) $null($i)	set cbr($i) [new Application/Traffic/CBR]	$cbr($i) attach-agent $udp($i)	$cbr($i) set random_ 0	$cbr($i) set rate_ 500kb	$ns at [expr 10 * $nb_plm + 10] "$cbr($i) start"	$ns at [expr 10 * $nb_plm + 30] "$cbr($i) stop"    }    puts stderr "receivers placed"              #mcast set up    DM set PruneTimeout 1000    set mproto DM    set mrthandle [$ns mrtproto $mproto {} ]}Class Scenario3 -superclass PLMTopology#evaluate the behavior of a mix of plm and tcp flowsScenario3 instproc init args {    eval $self next $args    $self instvar ns node    global f        Agent/TCP set window_ 4000    set nb_tcp 2    set nb_plm 1    set nb_src [expr $nb_tcp + $nb_plm]    #puts $f "param $nb_plm $nb_tcp"    $self build_link 0 1 20ms [expr $nb_src * 100e3]    $ns duplex-link-op $node(0) $node(1) queuePos 0.5    for {set i 2} {$i<=[expr $nb_src + 1]} {incr i} {	set delay 5ms	set bp 10e6	puts stderr "$delay $bp"	$self build_link $i 0 $delay  $bp    }    for {set i [expr $nb_src + 2]} {$i<=[expr 2 * $nb_src + 1]} {incr i} {	set delay 5ms	set bp 10e6	puts stderr "$delay $bp"	$self build_link 1 $i $delay  $bp    }    for {set i 2} {$i<=[expr $nb_plm + 1]} {incr i} {	set addr($i) [$self place_source $i 3]    }    puts stderr "sender placed"    set check_estimate 1    for {set i 2} {$i<=[expr $nb_plm + 1]} {incr i} {	set time 20	$self place_receiver [expr $i + $nb_src] $addr($i) $time $check_estimate    }    Agent/TCP set packetSize_ 500    for {set i 1} {$i<=$nb_tcp} {incr i} {	set sink($i) [new Agent/TCPSink]	set tcp($i) [new Agent/TCP/Reno]	$tcp($i) set fid_ [expr $i + $nb_plm]	$ns attach-agent $node([expr $i + $nb_plm + 1]) $tcp($i)	$ns attach-agent $node([expr $i + $nb_plm + $nb_src + 1]) $sink($i)	$ns connect $tcp($i) $sink($i)	set ftp($i) [new Application/FTP]	$ftp($i) attach-agent $tcp($i)        switch $i {            1 {$ns at 0 "$ftp($i) start"}            2 {$ns at 60 "$ftp($i) start"}        }    }    puts stderr "receivers placed"  #mcast set up	DM set PruneTimeout 1000	set mproto DM	set mrthandle [$ns mrtproto $mproto {} ]}Simulator instproc finish {} {    global   run_nam        puts finish    if {$run_nam} {	puts "running nam..."	exec nam -g 600x700 -f dynamic-nam.conf out.nam &    }        exit 0}Simulator instproc tick {} {	puts stderr [$self now]	$self at [expr [$self now] + 10.] "$self tick"}set ns [new Simulator -multicast on]$ns multicast$ns color 1 blue$ns color 2 green$ns color 3 red$ns color 4 white# prunes, grafts$ns color 30 orange$ns color 31 yellow#set f [open out.tr w]#$ns trace-all $f$ns namtrace-all [open out.nam w]$ns tickset scn [new Scenario$scenario $ns]$ns at [expr $runtime +1] "$ns finish"$ns run

⌨️ 快捷键说明

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