ns-lms.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. # Light-Weight Multicast Services (LMS), Reliable Multicast
  19. #
  20. # ns-lms.tcl
  21. #
  22. # Auxillary OTcl procedures required by the LMS implementation, these are
  23. # used to set up Agent/LMS on new nodes when LMS is activated.
  24. #
  25. # Christos Papadopoulos.
  26. # christos@isi.edu
  27. #
  28. ################################################################
  29. # LMS
  30. ################################################################
  31. #
  32. # Register this Lms agent with a node.
  33. # Create and attach an lms classifier to node.
  34. # Redirect node input to lms classifier and
  35. # classifier output to either lms agent or node
  36. #
  37. RtModule/LMS instproc register { node } {
  38. $self instvar node_ lms_classifier_
  39. #puts "****In Lms register for node [$node id]"
  40. set node_ $node
  41. set lms_classifier_ [new Classifier/Lms]
  42. set lms_agent [new Agent/LMS]
  43. $node attach $lms_agent
  44. $node insert-entry $self $lms_classifier_ 0
  45. $lms_classifier_ install 1 $lms_agent
  46. }
  47. RtModule/LMS instproc get-outlink { iface } {
  48. $self instvar node_
  49. set oif [$node_ iif2oif $iface]
  50. #set outlink [$node_ oif2link $oif]
  51. return $oif    
  52. }
  53. Node instproc ifaceGetOutLink { iface } {
  54. $self instvar ns_
  55. set link [$self iif2link $iface]
  56. set outlink [$ns_ link $self [$link src]]
  57. set head [$outlink set head_]
  58. return $head
  59. }
  60. #Node instproc ifaceGetOutLink { iface } {
  61. #        $self instvar ns_ id_ neighbor_
  62. #        foreach node $neighbor_ {
  63. #                set link [$ns_ set link_([$node id]:$id_)]
  64. #            if {[[$link set ifaceout_] id] == $iface} {
  65. #                set olink [$ns_ set link_($id_:[$node id])]
  66. #                set head [$olink set head_]
  67. #                return $head
  68. #            }
  69. #        }
  70. #        return -1
  71. #}
  72. Node instproc set-switch agent {
  73. $self instvar switch_
  74. set switch_ $agent
  75. }
  76. Node instproc agent port {
  77.         $self instvar agents_
  78.         foreach a $agents_ {
  79. #puts "the agent at node [$self id] is $a"
  80.                 if { [$a set agent_port_] == $port } {
  81. #puts "node: [$self id], port:$port, agent:$a"
  82.                         return $a
  83.                 }
  84.         }
  85.         return ""
  86. }
  87. Agent/LMS/Receiver instproc log-loss {} {
  88. }
  89. #
  90. # detach a lossobj from link(from:to)
  91. #
  92. Simulator instproc detach-lossmodel {lossobj from to} {
  93. set link [$self link $from $to]
  94. set head [$link head]
  95. $head target [$lossobj target]