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

通讯编程

开发平台:

Visual C++

  1. #  Copyright (c) 1997 by the University of Southern California
  2. #  All rights reserved.
  3. #  This program is free software; you can redistribute it and/or
  4. #  modify it under the terms of the GNU General Public License,
  5. #  version 2, as published by the Free Software Foundation.
  6. #
  7. #  This program is distributed in the hope that it will be useful,
  8. #  but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10. #  GNU General Public License for more details.
  11. #
  12. #  You should have received a copy of the GNU General Public License along
  13. #  with this program; if not, write to the Free Software Foundation, Inc.,
  14. #  59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
  15. #
  16. #  The copyright of this module includes the following
  17. #  linking-with-specific-other-licenses addition:
  18. #
  19. #  In addition, as a special exception, the copyright holders of
  20. #  this module give you permission to combine (via static or
  21. #  dynamic linking) this module with free software programs or
  22. #  libraries that are released under the GNU LGPL and with code
  23. #  included in the standard release of ns-2 under the Apache 2.0
  24. #  license or under otherwise-compatible licenses with advertising
  25. #  requirements (or modified versions of such code, with unchanged
  26. #  license).  You may copy and distribute such a system following the
  27. #  terms of the GNU GPL for this module and the licenses of the
  28. #  other code concerned, provided that you include the source code of
  29. #  that other code when and as the GNU GPL requires distribution of
  30. #  source code.
  31. #
  32. #  Note that people who make modified versions of this module
  33. #  are not obligated to grant this special exception for their
  34. #  modified versions; it is their choice whether to do so.  The GNU
  35. #  General Public License gives permission to release a modified
  36. #  version without this exception; this exception also makes it
  37. #  possible to release a modified version which carries forward this
  38. #  exception.
  39. # $Header: /cvsroot/nsnam/ns-2/tcl/ex/tcpecn.tcl,v 1.8 2005/09/16 03:05:42 tomh Exp $
  40. #
  41. # A simple example for tcp ecn simulation/animation with namgraph support
  42. # This script is adopted from ns-2/tcl/test/test-suite-ecn.tcl
  43.  
  44. set ns [new Simulator]
  45.  
  46. #
  47. #
  48. # Create a simple six node topology:
  49. #
  50. #        s1                 s3
  51. #                          /
  52. # 10Mb,2ms   1.5Mb,20ms   / 10Mb,4ms
  53. #           r1 --------- r2
  54. # 10Mb,3ms /                10Mb,5ms
  55. #         /                 
  56. #        s2                 s4
  57. #
  58. proc build_topology { ns } {
  59.     global node_
  60.     set node_(s1) [$ns node]
  61.     set node_(s2) [$ns node]
  62.     set node_(r1) [$ns node]
  63.     set node_(r2) [$ns node]
  64.     set node_(s3) [$ns node]
  65.     set node_(s4) [$ns node]
  66.     $ns duplex-link $node_(s1) $node_(r1) 10Mb 2ms DropTail
  67.     $ns duplex-link $node_(s2) $node_(r1) 10Mb 6ms DropTail
  68.     $ns duplex-link $node_(r1) $node_(r2) 1.5Mb 20ms RED
  69.     $ns queue-limit $node_(r1) $node_(r2) 25
  70.     $ns queue-limit $node_(r2) $node_(r1) 25
  71.     $ns duplex-link $node_(s3) $node_(r2) 10Mb 4ms DropTail
  72.     $ns duplex-link $node_(s4) $node_(r2) 10Mb 5ms DropTail
  73.  
  74.     $ns duplex-link-op $node_(s1) $node_(r1) orient right-down
  75.     $ns duplex-link-op $node_(s2) $node_(r1) orient right-up
  76.     $ns duplex-link-op $node_(r1) $node_(r2) orient right
  77.     $ns duplex-link-op $node_(r1) $node_(r2) queuePos 0.5
  78.     $ns duplex-link-op $node_(r2) $node_(r1) queuePos 0.5
  79.     $ns duplex-link-op $node_(s3) $node_(r2) orient left-down
  80.     $ns duplex-link-op $node_(s4) $node_(r2) orient left-up
  81.  
  82. }
  83. set f [open out.tr w]
  84. $ns trace-all $f
  85. set nf [open out.nam w]
  86. $ns namtrace-all $nf
  87. build_topology $ns
  88. set redq [[$ns link $node_(r1) $node_(r2)] queue]
  89. $redq set setbit_ true
  90. # Use nam trace format for TCP variable trace 
  91. Agent/TCP set nam_tracevar_ true
  92. set tcp1 [$ns create-connection TCP/Reno $node_(s1) TCPSink $node_(s3) 0]
  93. $tcp1 set window_ 15
  94. $tcp1 set ecn_ 1
  95.  
  96. set tcp2 [$ns create-connection TCP/Reno $node_(s2) TCPSink $node_(s3) 1]
  97. $tcp2 set window_ 15
  98. $tcp2 set ecn_ 1
  99.  
  100. set ftp1 [$tcp1 attach-app FTP]    
  101. set ftp2 [$tcp2 attach-app FTP]
  102. # Add agent traces and variable trace
  103. $ns add-agent-trace $tcp1 tcp1
  104. $ns add-agent-trace $tcp2 tcp2
  105. $ns monitor-agent-trace $tcp1
  106. $ns monitor-agent-trace $tcp2
  107. $tcp1 tracevar cwnd_
  108. $tcp2 tracevar cwnd_
  109.  
  110. $ns at 0.0 "$ftp1 start"
  111. $ns at 0.0 "$ftp2 start"
  112. $ns at 2.0 "finish"
  113. proc finish {} {
  114.         global ns f nf
  115.         $ns flush-trace
  116.         close $f
  117.         close $nf
  118.  
  119.         #XXX
  120.         puts "Filtering ..."
  121. exec tclsh8.0 ../nam/bin/namfilter.tcl out.nam
  122.         puts "running nam..."
  123.         exec nam out.nam &
  124.         exit 0
  125. }
  126.  
  127. $ns run