mac-test.tcl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:3k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #!/bin/sh
  2. # the next line finds ns 
  3. nshome=`dirname $0`; [ ! -x $nshome/ns ] && [ -x ../../ns ] && nshome=../..
  4. # the next line starts ns 
  5. export nshome; exec $nshome/ns "$0" "$@"
  6. if [info exists env(nshome)] {
  7. set nshome $env(nshome)
  8. } elseif [file executable ../../ns] {
  9. set nshome ../..
  10. } elseif {[file executable ./ns] || [file executable ./ns.exe]} {
  11. set nshome "[pwd]"
  12. } else {
  13. puts "$argv0 cannot find ns directory"
  14. exit 1
  15. }
  16. set env(PATH) "$nshome/bin:$env(PATH)"
  17. set opt(tr) out
  18. set opt(namtr) ""
  19. set opt(seed) 0
  20. set opt(stop) 20
  21. set opt(node) 3
  22. set opt(qsize) 100
  23. set opt(bw) 2Mb
  24. set opt(delay) 1ms
  25. set opt(ll) LL
  26. set opt(ifq) Queue/DropTail
  27. set opt(mac) Mac/Csma/Ca
  28. set opt(chan) Channel
  29. set opt(tcp) TCP/Reno
  30. set opt(sink) TCPSink
  31. set opt(app) FTP
  32. proc Usage {} {
  33. global opt argv0
  34. puts "Usage: $argv0 [-stop sec] [-seed value] [-node numNodes]"
  35. puts "t[-tr tracefile] [-g]"
  36. puts "t[-ll lltype] [-ifq qtype] [-mac mactype]"
  37. puts "t[-bw $opt(bw)] [-delay $opt(delay)]"
  38. exit 1
  39. }
  40. proc Getopt {} {
  41. global opt argc argv
  42. if {$argc == 0} Usage
  43. for {set i 0} {$i < $argc} {incr i} {
  44. set key [lindex $argv $i]
  45. if ![string match {-*} $key] continue
  46. set key [string range $key 1 end]
  47. set val [lindex $argv [incr i]]
  48. set opt($key) $val
  49. if [string match {-[A-z]*} $val] {
  50. incr i -1
  51. continue
  52. }
  53. switch $key {
  54. ll  { set opt($key) LL/$val }
  55. ifq { set opt($key) Queue/$val }
  56. mac { set opt($key) Mac/$val }
  57. }
  58. }
  59. }
  60. proc finish {} {
  61. global env nshome pwd
  62. global ns opt trfd
  63. $ns flush-trace
  64. close $trfd
  65. foreach key {node bw delay ll ifq mac seed} {
  66. lappend comment $opt($key)
  67. }
  68. set force ""
  69. if {[info exists opt(f)] || [info exists opt(g)]} {
  70. set force "-f"
  71. }
  72. exec perl $nshome/bin/trsplit -tt r -pt tcp -c '$comment' 
  73. $force $opt(tr) >& $opt(tr)-bw
  74. exec head -n 1 $opt(tr)-bw >@ stdout
  75. if [info exists opt(g)] {
  76. catch "exec xgraph -nl -M -display $env(DISPLAY) 
  77. [lsort [glob $opt(tr).*]] &"
  78. }
  79. exit 0
  80. }
  81. proc create-trace {} {
  82. global ns opt
  83. if [file exists $opt(tr)] {
  84. catch "exec rm -f $opt(tr) $opt(tr)-bw [glob $opt(tr).*]"
  85. }
  86. set trfd [open $opt(tr) w]
  87. $ns trace-all $trfd
  88. if {$opt(namtr) != ""} {
  89. $ns namtrace-all [open $opt(namtr) w]
  90. }
  91. return $trfd
  92. }
  93. proc create-topology {} {
  94. global ns opt
  95. global lan node source
  96. set num $opt(node)
  97. for {set i 0} {$i <= $num} {incr i} {
  98. set node($i) [$ns node]
  99. lappend nodelist $node($i)
  100. }
  101. set lan [$ns newLan $nodelist $opt(bw) $opt(delay) 
  102. -llType $opt(ll) -ifqType $opt(ifq) 
  103. -macType $opt(mac) -chanType $opt(chan)]
  104. }
  105. proc create-source {} {
  106. global ns opt
  107. global lan node source
  108. set num $opt(node)
  109. for {set i 1} {$i <= $num} {incr i} {
  110. set src 0
  111. set dst $i
  112. set tp($i) [$ns create-connection $opt(tcp) 
  113. $node($src) $opt(sink) $node($dst) 0]
  114. set source($i) [$tp($i) attach-app $opt(app)]
  115. $ns at [expr $i/1000.0] "$source($i) start"
  116. }
  117. }
  118. ## MAIN ##
  119. Getopt
  120. if {$opt(seed) >= 0} { ns-random $opt(seed) }
  121. if [info exists opt(qsize)] { Queue set limit_ $opt(qsize) }
  122. set ns [new Simulator]
  123. set trfd [create-trace]
  124. create-topology
  125. create-source
  126. $lan trace $ns $trfd
  127. $ns at $opt(stop) "finish"
  128. $ns run