Skip to content. | Skip to navigation

Personal tools

Navigation

You are here: Home / Wiki / Attachment / Gec8Tutorial / Cooked-Fed.Ns

Cooked-Fed.Ns

Plain Text icon — Plain Text, 4 KB (4604 bytes)

File contents

#
# gec8cooked.ns - Example NS file to illustrate the use of the Emulab
# frontend to ProtoGENI ('cooked mode')
#


#
# Standard Emulab boilerplate
#
source tb_compat.tcl
set ns [new Simulator]

#
# Parameters
#

# How many clients and servers?
set num_clients 2
set num_servers 1

# Which CMs should the be on?
set client_cm "emulab.net"
set server_cm "uky.emulab.net"

# What type should they have (pcfed gives you a virutal node, pcfedphys a
# physical one)
set client_type "pcfedphys"
set server_type "pcfedphys"

# Should they be shared nodes?
# (Note: type of the nodes must be 'pcfed' for this to work')
set client_shared 0
set server_shared 0

# OS images to run on each CM (default OS if left blank)
set client_os "FEDORA8-OVZ-STD"
set server_os ""


# Tarball to install on all nodes
set tarball "/proj/gec8tutorial/speedtest/speed-test.tar.gz"

# Command to run to start up the software in the tarball
set startup "/speed-test/run.sh"

# Put some auomatically generated traffic on the link from clients to servers?
set generate_traffic 1

#
# Set up routers on both sides
#
set serverrouter [$ns node]
tb-set-hardware $serverrouter "pcfedphys"
tb-set-node-tarfiles $serverrouter "/ $tarball"
tb-fix-node $serverrouter "urn:publicid:IDN+$server_cm+node+*"
tb-set-node-failure-action $serverrouter "nonfatal"
if {$server_os ne ""} {
    tb-set-node-os $serverrouter $server_os
}
set srouterprog [$serverrouter program-agent -command {/speed-test/run.sh}]

set clientrouter [$ns node]
tb-set-hardware $clientrouter "pcfedphys"
tb-set-node-tarfiles $clientrouter "/ $tarball"
tb-fix-node $clientrouter "urn:publicid:IDN+$client_cm+node+*"
tb-set-node-failure-action $clientrouter "nonfatal"
if {$client_os ne ""} {
    tb-set-node-os $clientrouter $client_os
}
set crouterprog [$clientrouter program-agent -command {/speed-test/run.sh}]

#
# Link between the two routers
#
set routerlink [$ns duplex-link $clientrouter $serverrouter 100Mb 0ms DropTail]
if {$server_cm != $client_cm} {
    # If on different CMs, the link between them has to be a GRE tunnel, as we
    # do not support VLANs between CMs yet
    tb-set-link-encap $routerlink gre
}

#
# Create a set of client machines
#
for {set i 1} {$i <= $num_clients} {incr i} {
    set client($i) [$ns node]
    tb-set-hardware $client($i) $client_type
    tb-set-node-tarfiles $client($i) "/ $tarball"
    tb-fix-node $client($i) "urn:publicid:IDN+$client_cm+node+*"
    tb-set-node-failure-action $client($i) "nonfatal"
    if {$client_shared == 1} {
        tb-set-node-usesharednode $client($i) 1.0
    }
    if {$client_os ne ""} {
        tb-set-node-os $client($i) $client_os
    }
    set clientlink($i) [$ns duplex-link $client($i) $clientrouter 100Mb 0ms DropTail]
    set cprog($i) [$client($i) program-agent -command {/speed-test/run.sh}]
}

#
# Create a set of server machines
#
for {set i 1} {$i <= $num_servers} {incr i} {
    set server($i) [$ns node]
    tb-set-hardware $server($i) $server_type
    tb-set-node-tarfiles $server($i) "/ $tarball"
    tb-fix-node $server($i) "urn:publicid:IDN+$server_cm+node+*"
    tb-set-node-failure-action $server($i) "nonfatal"
    if {$server_shared == 1} {
        tb-set-node-usesharednode $server($i) 1.0
    }
    if {$server_os ne ""} {
        tb-set-node-os $server($i) $server_os
    }
    set serverlink($i) [$ns duplex-link $server($i) $serverrouter 100Mb 0ms DropTail]
    set sprog($i) [$server($i) program-agent -command {/speed-test/run.sh}]
}

#
# Start up the webservers on all machines 
# We'll start the two routers immediately, then the others 30 seconds
# apart
#
$ns at 0.0 "$srouterprog start"
$ns at 0.0 "$crouterprog start"
set next_time 30
for {set i 1} {$i <= $num_clients} {incr i} {
    $ns at $next_time "$cprog($i) start"
    set next_time [expr $next_time + 30]
}
for {set i 1} {$i <= $num_servers} {incr i} {
    $ns at $next_time "$sprog($i) start"
    set next_time [expr $next_time + 30]
}

#
# Create automatic traffic generation betwen the server and client
# routers
#
if {$generate_traffic} {

    # Create traffic source on the client router
    set udp0 [new Agent/UDP]
    $ns attach-agent $clientrouter $udp0

    # Send 128-byte packets once a second
    set cbr0 [new Application/Traffic/CBR]
    $cbr0 set packetSize_ 128
    $cbr0 set interval_ 1
    $cbr0 attach-agent $udp0

    # Create traffic sink on the server router
    set null0 [new Agent/Null]
    $ns attach-agent $serverrouter $null0

    # Connect source with sink
    $ns connect $udp0 $null0
}

#
# Ask for static routing
#
$ns rtproto Static

#
# More boilerplate
#
$ns run