[wiki:WikiStart Orbit] > [wiki:Documentation/OtherApps Other Applications] > ITG Scripts
= Application Definition Schema =
The application definition schema for the ITG application is as follows
{{{
ITG
ITG
WINLAB, Rutgers University
http://www.winlab.rutgers.edu/
Receive network traffic
Receive network traffic on the specified interface
http://apps.orbit-lab.org/itg
network_interface
i
xsd:string
no
Device name for sending network traffic
pipe name
p
xsd:string
no
iinterface for changing generator properties
id of the stream
source port
Destination port
Flow Throughput
Flow jitter
flow delay
Pkt loss for flow
http://apps.orbit-lab.org/issues/winlab/renny
scm:cvs:pserver:anoncvs@cvs.orbit-lab.org:/trafficgenerator/renny
apt:repository.orbit-lab.org/orbit/binary:???
John Doe
jdoe
jdoe@winlab.rutgers.edu
WINLAB, Rutgers University
libmac
>= 0.4
apt:repository.orbit-lab.org/debian/binary:libmac
}}}
= Application definition script for Iperf sender and Receiver =
== ITG Sender ==
{{{
#
# Create an application representation from scratch
#
require 'appDefinition'
a = AppDefinition.create('test:app:itgs')
a.name = "itgs"
a.version(0, 0, 1)
a.shortDescription = "D-ITG Sender"
a.description = < 1},
[
['flow_no'],
['src_port'],
['dst_port'],
['throughput'],
['jitter'],
['delay'],
['pkt_loss']
]
)
if $0 == __FILE__
p.to_xml.write($stdout, 2)
puts
end
}}}
= Experiment script for Iperf =
== UDP CBR Experiment ==
{{{
############# Tutorial1 ##################################
# This script defines the experiment
# that has two senders and one receiver using Iperf
# 802.11b
# UDP flow of 500 packet/sec of 1024 byte payload
# Decoder reports throughput, delay, packet loss and jitter ############################################################
Experiment.name = "tutorial-itg"
Experiment.project = "orbit:tutorial"
###########################################
# Receiver definition and configuration
##########################################
defNodes('receiver',[3,1]) {|node|
node.image = nil # assume the right image to be on disk
node.prototype("test:proto:itgreceiver", {
'logfile' => "/tmp/results.txt"
}
)
node.net.w0.ip = "%192.168.%x.%y"
node.net.w0.mode = "master"
node.net.w0.type = 'b'
node.net.w0.essid = "helloworld"
}
###########################################
# Decoder definition and configuration
##########################################
defNodes('decoder',[3,1]) {|node|
node.image = nil # assume the right image to be on disk
node.prototype("test:proto:itgdecoder", {
'logfile' => "/tmp/results.txt",
'tput_report_interval' => 1000,
'delay_report_interval' => 1000,
'loss_report_interval' => 1000,
'jitter_report_interval' => 1000
}
)
}
###########################################
# Sender definition and configuration
###########################################
defNodes('sender',[1,2]) {|node|
node.image = nil # assume the right image to be on disk
node.prototype("test:proto:itgcbrsender", {
'destinationHost' => '192.168.3.1',
'meter' => 'owdm', #One way delay
'protocol' => 'udp', #UDP client
'constsize' => 1024, #Const payload size (bytes)
'constrate' => 500, #packets per second
'duration' => 60000, #Expt duration (msec)
'recv_port' => 8000 #Receiver port
})
node.net.w0.ip = "%192.168.%x.%y"
node.net.w0.mode = "managed"
node.net.w0.type = 'b'
node.net.w0.essid = "helloworld"
}
###########################################
# Sender definition and configuration
###########################################
defNodes('sender',[2,2]) {|node|
node.image = nil # assume the right image to be on disk
# use prototype "sender"
# and set it's property "destinationHost" to
# the receiver node
# and bind the remaining properties to the
# experiment property space
node.prototype("test:proto:itgcbrsender", {
'destinationHost' => '192.168.3.1',
'meter' => 'owdm', #One way delay
'protocol' => 'udp', #UDP client
'constsize' => 1024, #Const payload size (bytes)
'constrate' => 500, #packets per second
'duration' => 60000, #Expt duration (msec)
'recv_port' => 8001 #Receiver port
})
node.net.w0.ip = "%192.168.%x.%y"
node.net.w0.mode = "managed"
node.net.w0.type = 'b'
node.net.w0.essid = "helloworld"
}
###########################################
# When nodeAgents have reported "OK" to
# the nodeHandler start the application
###########################################
whenAllInstalled {|node|
NodeSet['receiver'].startApplications
###Need to separate receiver and sender start
wait 15
###
NodeSet['sender'].startApplications
NodeSet['sender1'].startApplications
wait 60
###############################################
Launch the decoder application to report results
################################################
NodeSet['decoder'].startApplications
###########################################
# Shutdown nodes
###########################################
Experiment.done
}
}}}
== VoIP Experiment ==
{{{
############# Tutorial2 ##################################
# This script defines the experiment
# that has one sender and one receiver and VoIP session
# Sender, Receiver - 802.11a channel 36
# Receiver reports throughput, packet loss, avg. delay and jitter
############################################################
Experiment.name = "tutorial-itg"
Experiment.project = "orbit:tutorial"
#
# Define nodes used in experiment
###########################################
# Receiver definition and configuration
##########################################
defNodes('receiver',[3,1]) {|node|
node.image = nil # assume the right image to be on disk
node.prototype("test:proto:itgreceiver", {
'logfile' => "/tmp/results.txt"
}
)
node.net.w0.ip = "%192.168.%x.%y"
node.net.w0.mode = "master"
node.net.w0.type = 'a'
node.net.w0.essid = "helloworld"
}
###########################################
# Decoder definition and configuration
##########################################
defNodes('decoder',[3,1]) {|node|
node.image = nil # assume the right image to be on disk
node.prototype("test:proto:itgdecoder", {
'logfile' => "/tmp/results.txt",
'tput_report_interval' => 1000,
'delay_report_interval' => 1000,
'loss_report_interval' => 1000,
'jitter_report_interval' => 1000
}
)}
###########################################
# Sender definition and configuration
###########################################
defNodes('sender',[2,2]) {|node|
node.image = nil # assume the right image to be on disk
node.prototype("test:proto:itgvoipsender", {
'destinationHost' => '192.168.3.1',
'meter' => 'owdm', #One way delay
'duration' => 20000, #Run for 20 seconds
'recv_port' => 8000, #Recv port
'App' => 'VoIP', #Use VoIP
'codec' => 'G.711.1', #Codec type
'voip_control' => 'RTP' #VoIP control
})
node.net.w0.ip = "%192.168.%x.%y"
node.net.w0.mode = "managed"
node.net.w0.type = 'a'
node.net.w0.essid = "helloworld"
}
###########################################
# When nodeAgents have reported "OK" to
# the nodeHandler start the application
###########################################
whenAllInstalled {|node|
NodeSet['receiver'].startApplications
###Need to separate receiver and sender start
wait 15
###
NodeSet['sender'].startApplications
wait 60
###############################################
Launch the decoder application to report results
################################################
NodeSet['decoder'].startApplications
###########################################
# Shutdown nodes
###########################################
Experiment.done
}
}}}