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

通讯编程

开发平台:

Visual C++

  1. puts "sourcing ../../lan/vlan.tcl..."
  2. source ../..//lan/vlan.tcl
  3. source ../../lan/ns-mac.tcl
  4. set opt(tr)   out.tr
  5. set opt(namtr)        "MySnoop.nam"
  6. set opt(seed) 0
  7. set opt(stop) 10
  8. set opt(node) 2
  9. set opt(qsize)        100
  10. set opt(bw)   10Mb
  11. set opt(delay)        1ms
  12. set opt(ll)   LL
  13. set opt(ifq)  Queue/DropTail
  14. set opt(mac)  Mac/802_3
  15. set opt(chan) Channel
  16. set opt(tcp)  TCP/Reno
  17. set opt(sink) TCPSink
  18. set opt(app)  FTP
  19. set loss_prob 10
  20. proc finish {} {
  21.       global ns opt
  22.       $ns flush-trace
  23.       exec nam $opt(namtr) &
  24.       exit 0
  25. }
  26. proc create-trace {} {
  27.       global ns opt
  28.       if [file exists $opt(tr)] {
  29.               catch "exec rm -f $opt(tr) $opt(tr)-bw [glob $opt(tr).*]"
  30.       }
  31.       set trfd [open $opt(tr) w]
  32.       $ns trace-all $trfd
  33.       if {$opt(namtr) != ""} {
  34.               $ns namtrace-all [open $opt(namtr) w]
  35.       }
  36.       return $trfd
  37. }
  38. proc add-error {LossyLink} {
  39.     global loss_prob
  40.     
  41.     # creating the uniform distribution random variable
  42.     set loss_random_variable [new RandomVariable/Uniform] 
  43.     $loss_random_variable set min_ 0    # set the range of the random variable;
  44.     $loss_random_variable set max_ 100
  45.     
  46.     # create the error model;
  47.     set loss_module [new ErrorModel]  
  48.     $loss_module drop-target [new Agent/Null] 
  49.     $loss_module set rate_ $loss_prob  # set error rate to (0.1 = 10 / (100 - 0));
  50.     # error unit: packets (the default);
  51.     $loss_module unit pkt      
  52.     
  53.     # attach random var. to loss module;
  54.     $loss_module ranvar $loss_random_variable 
  55.     # keep a handle to the loss module;
  56.     #set sessionhelper [$ns create-session $n0 $tcp0] 
  57.     $LossyLink errormodule $loss_module
  58. }
  59. proc create-topology {} {
  60.       global ns opt 
  61.       global lan node s d
  62.       set num $opt(node)
  63.       for {set i 1} {$i < $num} {incr i} {
  64.               set node($i) [$ns node]
  65.               lappend nodelist $node($i)
  66.       }
  67.       set lan [$ns make-lan $nodelist $opt(bw) 
  68.                       $opt(delay) $opt(ll) $opt(ifq) $opt(mac) $opt(chan)]
  69.       
  70.       set opt(ll) LL/LLSnoop
  71.       set opt(ifq) Queue/DropTail
  72.       $opt(ifq) set limit_ 100
  73.       # set up snoop agent
  74.       set node(0) [$ns node]
  75.       $lan addNode [list $node(0)]  $opt(bw) $opt(delay) $opt(ll) $opt(ifq) $opt(mac)
  76.       
  77.       # set source and connect to node(0)
  78.       set s [$ns node]
  79.       $ns duplex-link $s $node(0) 5Mb 20ms DropTail
  80.       $ns queue-limit $s $node(0) 100000
  81.       $ns duplex-link-op $s $node(0) orient right
  82.       # set dest and connect to node(1)
  83.       set d [$ns node]
  84.       $ns duplex-link $node(1) $d 5Mb 10ms DropTail
  85.       $ns queue-limit $node(1) $d 100000
  86.       $ns duplex-link-op $d $node(1) orient left
  87.       set LossyLink [$ns link $node(1) $d]  
  88.       add-error $LossyLink
  89. }
  90. ## MAIN ##
  91. set ns [new Simulator]
  92. set trfd [create-trace]
  93. create-topology
  94. #set tcp0 [$ns create-connection TCP/Reno $s TCPSink $node(1) 0]
  95. #$tcp0 set window_ 30
  96. #Create a infinite source agent (FTP) tcp and attach it to node n0
  97. set tcp0 [new Agent/TCP/Reno]
  98. $tcp0 set backoff_ 2 
  99. $tcp0 set window_ 30
  100. $ns attach-agent $s $tcp0
  101. set tcp_snk0 [new Agent/TCPSink]
  102. $ns attach-agent $d $tcp_snk0
  103. $ns connect $tcp0 $tcp_snk0
  104. set ftp0 [$tcp0 attach-app FTP]
  105. $ns at 0.0 "$ftp0 start"
  106. $ns at $opt(stop) "finish"
  107. $ns run