⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 firewire-lan.tcl

📁 linux平台下1394总线的同步数据传输和异步数据的传输
💻 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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -