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

通讯编程

开发平台:

Visual C++

  1. #
  2. # tcl/ctr-mcast/CtrRPComp.tcl
  3. #
  4. # Copyright (C) 1997 by USC/ISI
  5. # All rights reserved.                                            
  6. #                                                                
  7. # Redistribution and use in source and binary forms are permitted
  8. # provided that the above copyright notice and this paragraph are
  9. # duplicated in all such forms and that any documentation, advertising
  10. # materials, and other materials related to such distribution and use
  11. # acknowledge that the software was developed by the University of
  12. # Southern California, Information Sciences Institute.  The name of the
  13. # University may not be used to endorse or promote products derived from
  14. # this software without specific prior written permission.
  15. # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  16. # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  17. # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  18. # Contributed by Polly Huang (USC/ISI), http://www-scf.usc.edu/~bhuang
  19. Class CtrRPComp
  20. CtrRPComp instproc init sim {
  21. $self set ns_ $sim
  22. $self next
  23. }
  24.     
  25. CtrRPComp instproc compute-rpset {} {
  26. $self instvar ns_
  27. ### initialization
  28. foreach node [$ns_ all-nodes-list] {
  29. set connected($node) 0
  30. }
  31. set urtl [$ns_ get-routelogic]
  32. ### connected region algorithm
  33. foreach node [$ns_ all-nodes-list] {
  34. foreach {vertix lvertix} [array get ldomain] {
  35. if {[$urtl lookup [$node id] [$vertix id]] >= 0} {
  36. lappend ldomain($vertix) $node
  37. set connected($node) 1
  38. break
  39. }
  40. }
  41. if {!$connected($node)} {
  42. set ldomain($node) $node
  43. set connected($node) 1
  44. }
  45. }
  46. ### for each region, set rpset
  47. foreach {vnode lvertix} [array get ldomain] {
  48. set hasbsr 0
  49. set rpset ""
  50. ### find rpset for the region
  51. foreach vertix $lvertix {
  52. set class_info [$vertix info class]
  53. if {$class_info != "LanNode"} {
  54. set ctrdm [[$vertix getArbiter] getType "CtrMcast"]
  55. if [$ctrdm set c_bsr_] {set hasbsr 1}
  56. if [$ctrdm set c_rp_] {
  57. lappend rpset $vertix
  58. }
  59. }
  60. }
  61. foreach vertix $lvertix {
  62. set class_info [$vertix info class]
  63. if {$class_info != "LanNode"} {
  64. set ctrdm [[$vertix getArbiter] getType "CtrMcast"]
  65. if $hasbsr {
  66. $ctrdm set-rpset $rpset
  67. } else {
  68. $ctrdm set-rpset ""
  69. puts "no c_bsr"
  70. }
  71. }
  72. }
  73. }
  74. }