?? firewire-lan.tcl
字號:
set ns [new Simulator]proc finish {} { global ns nf tf bwf nf_name tf_name bwf_name $ns flush-trace close $nf close $tf close $bwf exec more $bwf_name# exec ~/Development/NS/ns-allinone-2.1b8a/nam-1.0a10/nam $nf_name & exec ~/Development/NS/ns-allinone-2.1b8a/xgraph-12.1/xgraph $bwf_name -geometry 800x400 & exit 0}proc create-trace-files {num_nodes pkt_size delay prefix trace} { global ns nf tf bwf nf_name tf_name bwf_name set nf_name "results/$prefix-$num_nodes-$pkt_size-$delay-$trace.nam" set tf_name "results/$prefix-$num_nodes-$pkt_size-$delay-$trace.tr" set bwf_name "results/$prefix-$num_nodes-$pkt_size-$delay.bw" set nf [open $nf_name w] set tf [open $tf_name w] set bwf [open $bwf_name w]# $ns namtrace-all $nf# $ns trace-all $tf}proc create_ieee1394LanNode {bw delay trace} { global ns set lan [eval new LanNode $ns -bw $bw -delay $delay \ -llType LL/ieee1394 -ifqType Queue/DropTail -macType Mac/ieee1394 \ -chanType Channel -phyType Phy/WiredPhy -mactrace $trace] return $lan}proc create_ieee1394Node_fromNode {lan node bw delay trace} { global ns $ns instvar link_ set nif [new LanIface $node $lan \ -ifqType Queue/DropTail \ -llType LL/ieee1394 \ -macType Mac/ieee1394 \ -phyType Phy/WiredPhy \ -mactrace $trace ] set ll [$nif set ll_] $ll set delay_ $delay# $ll varp [$lan set varp_]# [$lan set varp_] mac-addr [[$nif set node_] id] [[$nif set mac_] id] # puts "LL downtarget = [[$ll down-target] info vars]" set phy [$nif set phy_] $phy node $node $phy set bandwidth_ $bw $lan set lanIface_($node) $nif $node add-neighbor $lan set vlinkcost [expr [$lan set cost_] / 2.0] set nid [$node id] set lid [$lan set id_] set link1 [new Vlink $ns $lan $node $lan $bw 0] set link2 [new Vlink $ns $lan $lan $node $bw 0] set link_($nid:$lid) $link1 set link_($lid:$nid) $link2 $node add-oif [$link_($nid:$lid) head] $link_($nid:$lid) $node add-iif [[$nif set iface_] label] $link_($lid:$nid) [$link_($nid:$lid) head] set link_ $link_($nid:$lid) $link_($nid:$lid) queue [$nif set ifq_] $link_($lid:$nid) queue [$nif set ifq_] $link_($nid:$lid) set iif_ [$nif set iface_] $link_($lid:$nid) set iif_ [$nif set iface_] $link_($nid:$lid) cost $vlinkcost $link_($lid:$nid) cost $vlinkcost return $nif}proc connect_ieee1394Nodes {parent child bw delay} { set channel [new Channel] $channel set delay_ $delay #puts "[$channel set delay_]" set mac_p [$parent set mac_] set mac_c [$child set mac_] set phy_p [new Phy/WiredPhy] set phy_c [new Phy/WiredPhy] set recv_p [new Mac/ieee1394/HandlerRecv $mac_p] $mac_p add-phy $phy_p $recv_p 0 $phy_p up-target $recv_p $mac_p netif $phy_p set recv_c [new Mac/ieee1394/HandlerRecv $mac_c] $mac_c add-phy $phy_c $recv_c 1 $phy_c up-target $recv_c $mac_c netif $phy_c# set phy_p [$parent set phy_]# set phy_c [$child set phy_] $phy_p node [$parent set node_] $phy_c node [$child set node_] $phy_p channel $channel $phy_c channel $channel $phy_p set bandwidth_ $bw $phy_c set bandwidth_ $bw $channel addif $phy_p $channel addif $phy_c }proc create-ieee1394-lan {num_nodes start_time end_time interval pkt_size delay trace prefix} { global ns sink set bw 100Mb set lan [eval create_ieee1394LanNode $bw $delay $trace] # create nodes for {set i 0} {$i < $num_nodes} {incr i} { set node($i) [$ns node] } # create iflan nodes for {set i 0} {$i < $num_nodes} {incr i} { set iface($i) [eval create_ieee1394Node_fromNode $lan $node($i) $bw $delay $trace] } # connect iflan nodes -- in a list set num_children 2 for {set i 1} {$i < $num_nodes} {incr i} { connect_ieee1394Nodes $iface([expr int(floor(($i - 1) / $num_children))]) $iface($i) $bw $delay } # add receiver agents for {set i 0} {$i < $num_nodes} {incr i} { set sink($i) [new Agent/LossMonitor] $ns attach-agent $node($i) $sink($i) } # add agents and applications for {set i 0} {$i < $num_nodes} {incr i} { # create agent and attach it to node i if { [string equal $prefix "a"] } { set agt($i) [new Agent/ieee1394/Async] } elseif { [string equal $prefix "i"] } { set agt($i) [new Agent/ieee1394/Isoch] } elseif { [string equal $prefix "b"] } { if { [expr $i % 2] } { set agt($i) [new Agent/ieee1394/Async] } else { set agt($i) [new Agent/ieee1394/Isoch] } } else { puts "ERROR: prefix should be: [a, i, b]" } $ns attach-agent $node($i) $agt($i) # create CBR source and attach it to udp set app($i) [new Application/Traffic/CBR] $app($i) set packetSize_ $pkt_size $app($i) set interval_ $interval $app($i) attach-agent $agt($i) # connect agents set distance 1 set j [expr (($i + $distance) % $num_nodes)] $ns connect $agt($i) $sink($j) $ns at $start_time "$app($i) start" $ns at $end_time "$app($i) stop" }}proc record-bandwidth {num_nodes} { global ns sink bwf set time_interval 0.001 set bw0 0 set np0 0 for {set i 0} {$i < $num_nodes} {incr i} { # bytes received by sink set bw0 [expr $bw0 + [$sink($i) set bytes_]] set np0 [expr $np0 + [$sink($i) set npkts_]] #puts "bytes recv: $i bw:$bw0 np:$np0" # reset bytes_ values of traffic sinks $sink($i) set bytes_ 0 } set now [$ns now] # calculate bandwidth (in MBit/s) and write it out puts $bwf "$now [expr $bw0/$time_interval*8.0/1000000.0]"# puts "$now [expr $bw0/$time_interval*8.0/1000000.0] $bw0 $np0" # re-schedule $ns at [expr $now+$time_interval] "record-bandwidth $num_nodes"}proc create-sim {num_nodes start_time end_time interval pkt_size delay prefix trace} { global ns $ns at 0.0 "record-bandwidth $num_nodes" create-trace-files $num_nodes $pkt_size $delay $prefix $trace create-ieee1394-lan $num_nodes $start_time $end_time $interval $pkt_size $delay $trace $prefix}create-sim 2 0.1 5.0 0.0001 1024 0.1us "i" false$ns at 10.0 "finish"$ns run
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -