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

通讯编程

开发平台:

Visual C++

  1. # em3.tcl - test emulation
  2. # like em2, but now separate the ftp ctrl and data connections
  3. # and mark them with different flow id's so that we can use flow-based
  4. # dropping capabilities
  5. #
  6. set dotrace 1
  7. set stoptime 200.0
  8. set me "10.0.1.1"
  9. set ns [new Simulator]
  10. if { $dotrace } {
  11. set allchan [open em-all.tr w]
  12. $ns trace-all $allchan
  13. set namchan [open em.nam w]
  14. $ns namtrace-all $namchan
  15. }
  16. $ns use-scheduler RealTime
  17. #
  18. # we want the test machine to have ip forwarding disabled, so
  19. # check this
  20. #
  21. set ipforw [exec sysctl -n net.inet.ip.forwarding]
  22. if { $ipforw } {
  23. puts "can not run with ip forwarding enabled"
  24. exit 1
  25. }
  26. #
  27. # allocate a BPF type network object and a raw-IP object
  28. #
  29. set bpf0c [new Network/Pcap/Live]
  30. set bpf0d [new Network/Pcap/Live]
  31. set bpf1c [new Network/Pcap/Live]
  32. set bpf1d [new Network/Pcap/Live]
  33. $bpf0c set promisc_ true
  34. $bpf0d set promisc_ true
  35. $bpf1c set promisc_ true
  36. $bpf1d set promisc_ true
  37. set ipnet [new Network/IP]
  38. set nd0c [$bpf0c open readonly fxp0]
  39. set nd0d [$bpf0d open readonly fxp0]
  40. set nd1c [$bpf1c open readonly fxp1]
  41. set nd1d [$bpf1d open readonly fxp1]
  42. $ipnet open writeonly
  43. puts "bpf0c($bpf0c) on dev $nd0c, bpf1c($bpf1c) on dev $nd1c, ipnet is $ipnet"
  44. #
  45. # try to filter out wierd stuff like netbios pkts, arp requests, dns, etc
  46. #
  47. set notme "(not ip host $me)"
  48. set notbcast "(not ether broadcast)"
  49. set notftpdata "(not port ftp-data)"
  50. set ftpctrl "(port ftp)"
  51. set ftpdata "(port ftp-data)"
  52. set 0cfilter "(ip dst host bit) and $notme and $notbcast and $ftpctrl"
  53. set 0dfilter "(ip dst host bit) and $notme and $notbcast and $ftpdata"
  54. set 1cfilter "(ip src host bit) and $notme and $notbcast and $ftpctrl"
  55. set 1dfilter "(ip src host bit) and $notme and $notbcast and $ftpdata"
  56. $bpf0c filter $0cfilter
  57. $bpf0d filter $0dfilter
  58. $bpf1c filter $1cfilter
  59. $bpf1d filter $1dfilter
  60. set a0c [new Agent/Tap]
  61. set a0d [new Agent/Tap]
  62. set a1c [new Agent/Tap]
  63. set a1d [new Agent/Tap]
  64. set a2 [new Agent/Tap]
  65. puts "install nets into taps..."
  66. $a0c set fid_ 0
  67. $a0d set fid_ 1
  68. $a1c set fid_ 2
  69. $a1d set fid_ 3
  70. $a2 set fid_ 4
  71. $a0c network $bpf0c
  72. $a0d network $bpf0d
  73. $a1c network $bpf1c
  74. $a1d network $bpf1d
  75. $a2 network $ipnet
  76. set node0 [$ns node]
  77. set node1 [$ns node]
  78. set node2 [$ns node]
  79. puts "node0: $node0 (id:[$node0 id]), node1: $node1 (id:[$node1 id]), node2: $node2 (id: [$node2 id])"
  80. $ns simplex-link $node0 $node2 8Mb 10ms DropTail
  81. $ns simplex-link $node1 $node2 8Mb 10ms DropTail
  82. set lossylink [$ns link $node0 $node2] ; # main subnet interface
  83. set em [new ErrorModule Fid]
  84. set errmodel [new ErrorModel/Periodic]
  85. $errmodel unit pkt
  86. $errmodel set offset_ 1.0
  87. $errmodel set period_ 10.0
  88. $lossylink errormodule $em
  89. $em insert $errmodel
  90. $em bind $errmodel 1 ; # drop pkts with fid 1 (ftp data)
  91. set conn [new Connector]
  92. $conn target [$errmodel target]
  93. $conn drop-target [$errmodel target]
  94. $em bind $conn 0 ; # pass through fid 0 (ftp ctrl)
  95. #
  96. # attach-agent winds up calling $node attach $agent which does
  97. # these things:
  98. # append agent to list of agents in the node
  99. # sets target in the agent to the entry of the node
  100. # sets the node_ field of the agent to the node
  101. # if not yet created,
  102. # create port demuxer in node (Addr classifier),
  103. # put in dmux_
  104. # call "$self add-route $id_ $dmux_"
  105. # installs id<->dmux mapping in classifier_
  106. # allocate a port
  107. # set agent's port id and address
  108. # install port-agent mapping in dmux_
  109. #
  110. #
  111. $ns attach-agent $node0 $a0c
  112. $ns attach-agent $node0 $a0d
  113. $ns attach-agent $node1 $a1c
  114. $ns attach-agent $node1 $a1d
  115. $ns attach-agent $node2 $a2
  116. $ns connect $a0c $a2
  117. $ns connect $a0d $a2
  118. $ns connect $a1c $a2
  119. $ns connect $a1d $a2
  120. puts "here we go.."
  121. $ns run