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

通讯编程

开发平台:

Visual C++

  1. # em2.tcl - test emulation
  2. # be careful here, as the tap agents will
  3. # send out whatever they are given
  4. #
  5. set dotrace 1
  6. set stoptime 200.0
  7. set me "10.0.1.1"
  8. set ns [new Simulator]
  9. if { $dotrace } {
  10. set allchan [open em-all.tr w]
  11. $ns trace-all $allchan
  12. set namchan [open em.nam w]
  13. $ns namtrace-all $namchan
  14. }
  15. $ns use-scheduler RealTime
  16. #
  17. # we want the test machine to have ip forwarding disabled, so
  18. # check this
  19. #
  20. set ipforw [exec sysctl -n net.inet.ip.forwarding]
  21. if { $ipforw } {
  22. puts "can not run with ip forwarding enabled"
  23. exit 1
  24. }
  25. #
  26. # allocate a BPF type network object and a raw-IP object
  27. #
  28. set bpf0 [new Network/Pcap/Live]
  29. set bpf1 [new Network/Pcap/Live]
  30. $bpf0 set promisc_ true
  31. $bpf1 set promisc_ true
  32. set ipnet [new Network/IP]
  33. set nd0 [$bpf0 open readonly fxp0]
  34. set nd1 [$bpf1 open readonly fxp1]
  35. $ipnet open writeonly
  36. puts "bpf0($bpf0) on dev $nd0, bpf1($bpf1) on dev $nd1, ipnet is $ipnet"
  37. #
  38. # try to filter out wierd stuff like netbios pkts, arp requests, dns, etc
  39. #
  40. set notme "(not ip host $me)"
  41. set notbcast "(not ether broadcast)"
  42. set ftp "and port ftp-data"
  43. set f0len [$bpf0 filter "(ip dst host bit) and $notme and $notbcast"]
  44. set f1len [$bpf1 filter "(ip src host bit) and $notme and $notbcast"]
  45. puts "filter lengths: $f0len (bpf0), $f1len (bpf1)"
  46. puts "dev $nd0 has address [$bpf0 linkaddr]"
  47. puts "dev $nd1 has address [$bpf1 linkaddr]"
  48. set a0 [new Agent/Tap]
  49. set a1 [new Agent/Tap]
  50. set a2 [new Agent/Tap]
  51. puts "install nets into taps..."
  52. $a0 network $bpf0
  53. $a1 network $bpf1
  54. $a2 network $ipnet
  55. set node0 [$ns node]
  56. set node1 [$ns node]
  57. set node2 [$ns node]
  58. puts "node0: $node0 (id:[$node0 id]), node1: $node1 (id:[$node1 id]), node2: $node2 (id: [$node2 id])"
  59. $ns simplex-link $node0 $node2 8Mb 100ms DropTail
  60. $ns simplex-link $node1 $node2 8Mb 100ms DropTail
  61. #
  62. # attach-agent winds up calling $node attach $agent which does
  63. # these things:
  64. # append agent to list of agents in the node
  65. # sets target in the agent to the entry of the node
  66. # sets the node_ field of the agent to the node
  67. # if not yet created,
  68. # create port demuxer in node (Addr classifier),
  69. # put in dmux_
  70. # call "$self add-route $id_ $dmux_"
  71. # installs id<->dmux mapping in classifier_
  72. # allocate a port
  73. # set agent's port id and address
  74. # install port-agent mapping in dmux_
  75. #
  76. #
  77. $ns attach-agent $node0 $a0
  78. $ns attach-agent $node1 $a1
  79. $ns attach-agent $node2 $a2
  80. $ns connect $a0 $a2
  81. $ns connect $a1 $a2
  82. #puts "scheduling termination at t=$stoptime"
  83. #$ns at $stoptime "exit 0"
  84. puts "let's rock"
  85. $ns run