red.tcl

来自「DRR simulacija . . . . . . . . . . . .」· TCL 代码 · 共 121 行

TCL
121
字号
#Kreiranje objekta simulator
set ns [new Simulator]

#Otvaranje NAM trace file-a
set nf [open /home/lab/out.nam w]
$ns namtrace-all $nf

#Otvaranje Trace file-a
set tf [open /home/lab/out.tr w]
$ns trace-all $tf
#**********************************************
#Otvaranje file-a za pracenje reda cekanja
set qq [open /home/lab/out.queue w]

#*********************************************
#Definisanje'finish' procedure
proc finish {} {
        global ns nf tf
        $ns flush-trace
        #Close the NAM trace file
        close $nf
        #Close the Trace file
        close $tf
        #Execute NAM on the trace file
        exec nam /home/lab/out.nam &
        exit 0
}
#************************************************

set tcpnum 2 

#Kreiranje dva cvora na prenosnom linku
  set n(1) [$ns node]
  set n(2) [$ns node]

  #Kreiranje rubnih cvorova
  for {set i 1} {$i <= $tcpnum} {incr i} {
      set s($i) [$ns node]
      set r($i) [$ns node]
  }

  
  #Kreiranje rubnih linkova
  for {set i 1} {$i <= $tcpnum} {incr i} {
      $ns duplex-link $s($i) $n(1) 1Mb 1ms DropTail
      $ns duplex-link $n(2) $r($i) 1Mb 1ms DropTail
  }


#**********************************************

#Kreiranje linka uskog grla - moze ili ovo ili gornji droptail
$ns duplex-link $n(1) $n(2) 1Mb 1ms RED
$ns queue-limit $n(1) $n(2) 50

set redq [[$ns link $n(1) $n(2)] queue]
    $redq set bytes_ false
    $redq set queue_in_bytes_ false
    $redq set thresh_ 5
    $redq set maxthresh_ 50 
    $redq set q_weight_ 0.002
    



#************************************************

#Monitoring reda cekanja za link(n3-n4). (za NAM)
$ns duplex-link-op $n(1) $n(2) queuePos 0.5

#*****************************************

  #Postavljanje TCP konekcija
  for {set i 1} {$i <= $tcpnum} {incr i} {
      set tcp($i) [new Agent/TCP/Reno]
      set sink($i) [new Agent/TCPSink]
      $ns attach-agent $s($i) $tcp($i)
      $ns attach-agent $r($i) $sink($i)
      $ns connect $tcp($i) $sink($i)

      $tcp($i) set fid_ $i
      $tcp($i) set window_ 20
      $tcp($i) set packetSize_ 1000
  }

  #Postavljanje FTP konekcija
  for {set i 1} {$i <= $tcpnum} {incr i} {
      set ftp($i) [new Application/FTP]
      $ftp($i) attach-agent $tcp($i)
      $ftp($i) set type_ FTP
  }

#*********************************************************
# Monitoring reda cekanja
set monitor [$ns monitor-queue $n(1) $n(2) /home/lab/queue.out]
proc queueLength {sum number} {
global ns monitor qq
set time 0.1
set len [$monitor set pkts_]
set now [$ns now]
set sum [expr $sum+$len]
set number [expr $number+1]

puts "[expr 1.0*$sum/$number]"
puts $qq "[expr 1.0*$sum/$number]" 
$ns at [expr $now+$time] "queueLength $sum $number"}
$ns at 0 "queueLength 0 0"

# Iniciranje pocetka  i zavrsetka konekcija
  for {set i 1} {$i <= $tcpnum} {incr i} {
      $ns at 0.1 "$ftp($i) start"
      $ns at 10.0 "$ftp($i) stop"
  }
#Pozivanje finish procedure poslije 10 sekundi simulacije
$ns at 10.0 "finish"

  $ns run



⌨️ 快捷键说明

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