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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (c) 2001 University of Southern California.
  3. # All rights reserved.                                            
  4. #                                                                
  5. # Redistribution and use in source and binary forms are permitted
  6. # provided that the above copyright notice and this paragraph are
  7. # duplicated in all such forms and that any documentation, advertising
  8. # materials, and other materials related to such distribution and use
  9. # acknowledge that the software was developed by the University of
  10. # Southern California, Information Sciences Institute.  The name of the
  11. # University may not be used to endorse or promote products derived from
  12. # this software without specific prior written permission.
  13. # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  14. # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  15. # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  16. #
  17. ##
  18. # Quick Start for TCP and IP.
  19. # A scheme for transport protocols to dynamically determine initial 
  20. # congestion window size.
  21. #
  22. # http://www.ietf.org/internet-drafts/draft-amit-quick-start-02.ps
  23. #
  24. # ns-qsnode.tcl
  25. #
  26. # OTcl support procedures required for Quick Start agent
  27. #
  28. # Srikanth Sundarrajan, 2002
  29. # sundarra@usc.edu
  30. #
  31. RtModule/QS instproc register { node } {
  32. $self next $node
  33. $self instvar classifier_ 
  34. # Copy the old classifier and save it.  
  35. $self set classifier_ [$node entry]
  36. # Create a new classifer for qs processing and attach qs agent
  37. $node set qs_classifier_ [new Classifier/QS]
  38. $node set qs_agent_ [new Agent/QSAgent]
  39. $node set switch_ [$node set qs_classifier_]
  40. # Install existing classifier at slot 1, new classifier at slot 0
  41. $node insert-entry $self [$node set switch_] 1
  42. [$node set switch_] install 0 [$node set qs_agent_]
  43. $node attach [$node set qs_agent_]
  44. [$node set qs_agent_] set old_classifier_ $classifier_
  45. }
  46. Simulator instproc QS { val } {
  47. if { $val == "ON" } {
  48. add-packet-header "TCP_QS"
  49. Node enable-module "QS"
  50. } else {
  51. Node disable-module "QS"
  52. remove-packet-header "TCP_QS"
  53. }
  54. }
  55. Node instproc qs-agent {} {
  56. $self instvar qs_agent_
  57. return $qs_agent_
  58. }
  59. Simulator instproc get-queue { addr daddr } {
  60. $self instvar routingTable_
  61.     
  62. set srcid [$self get-node-id-by-addr $addr]
  63. set dstid [$self get-node-id-by-addr $daddr]
  64.     
  65. set nexthop [$routingTable_ lookup $srcid $dstid]
  66. set node1 [$self  get-node-by-addr $addr]
  67. set node2 [$self  get-node-by-addr $nexthop]
  68.     
  69. set queue_ [[$self link $node1 $node2] queue]
  70.         
  71. return $queue_
  72. }       
  73.  
  74. Simulator instproc get-link { addr daddr } {
  75. $self instvar routingTable_
  76. set srcid [$self get-node-id-by-addr $addr]
  77. set dstid [$self get-node-id-by-addr $daddr]
  78. set nexthop [$routingTable_ lookup $srcid $dstid]
  79. set node1 [$self  get-node-by-addr $addr]
  80. set node2 [$self  get-node-by-addr $nexthop]
  81. set link_ [[$self  link $node1 $node2] link]
  82. return $link_
  83. }