1 | #
|
---|
2 | # Tutorial Experiment - WiFi AP & iperf
|
---|
3 | #
|
---|
4 | defProperty('accesspoint', 'node1-1', "node ID for access point")
|
---|
5 | defProperty('client', 'node1-2', "node ID for client nodes")
|
---|
6 | defProperty('duration', 60, "Seconds to run the application.")
|
---|
7 |
|
---|
8 | defApplication('iperf', 'iperf-oml2') do |app|
|
---|
9 |
|
---|
10 | app.version(2, 10, 0)
|
---|
11 | app.shortDescription = 'Iperf traffic generator and bandwidth measurement tool'
|
---|
12 | app.description = %{Iperf is a traffic generator and bandwidth measurement
|
---|
13 | tool. It provides generators producing various forms of packet streams and port
|
---|
14 | for sending these packets via various transports, such as TCP and UDP.
|
---|
15 | }
|
---|
16 | app.path = "/usr/bin/iperf-oml2"
|
---|
17 |
|
---|
18 | app.defProperty('interval', 'pause n seconds between periodic bandwidth reports', '-i',
|
---|
19 | :type => :double, :unit => "seconds", :default => '1.')
|
---|
20 | app.defProperty('len', 'set length read/write buffer to n (default 8 KB)', '-l',
|
---|
21 | :type => :integer, :unit => "KiBytes")
|
---|
22 | app.defProperty('print_mss', 'print TCP maximum segment size (MTU - TCP/IP header)', '-m',
|
---|
23 | :type => :boolean)
|
---|
24 | app.defProperty('output', 'output the report or error message to this specified file', '-o',
|
---|
25 | :type => :string)
|
---|
26 | app.defProperty('port', 'set server port to listen on/connect to to n (default 5001)', '-p',
|
---|
27 | :type => :integer)
|
---|
28 | app.defProperty('udp', 'use UDP rather than TCP', '-u',
|
---|
29 | :type => :boolean,
|
---|
30 | :order => 2)
|
---|
31 | app.defProperty('window', 'TCP window size (socket buffer size)', '-w',
|
---|
32 | :type => :integer, :unit => "Bytes")
|
---|
33 | app.defProperty('bind', 'bind to <host>, an interface or multicast address', '-B',
|
---|
34 | :type => :string)
|
---|
35 | app.defProperty('compatibility', 'for use with older versions does not sent extra msgs', '-C',
|
---|
36 | :type => :boolean)
|
---|
37 | app.defProperty('mss', 'set TCP maximum segment size (MTU - 40 bytes)', '-M',
|
---|
38 | :type => :integer, :unit => "Bytes")
|
---|
39 | app.defProperty('nodelay', 'set TCP no delay, disabling Nagle\'s Algorithm', '-N',
|
---|
40 | :type => :boolean)
|
---|
41 | app.defProperty('IPv6Version', 'set the domain to IPv6', '-V',
|
---|
42 | :type => :boolean)
|
---|
43 | app.defProperty('reportexclude', 'exclude C(connection) D(data) M(multicast) S(settings) V(server) reports', '-x',
|
---|
44 | :type => :string, :unit => "[CDMSV]")
|
---|
45 | app.defProperty('reportstyle', 'C or c for CSV report, O or o for OML', '-y',
|
---|
46 | :type => :string, :unit => "[CcOo]", :default => "o") # Use OML reporting by default
|
---|
47 |
|
---|
48 | app.defProperty('oml-server', 'OML server for collecting data','--oml-server')
|
---|
49 | app.defProperty('oml-id', 'ID for this oml client','--oml-id')
|
---|
50 | app.defProperty('oml-exp-id', 'ID for this experiment','--oml-exp-id')
|
---|
51 |
|
---|
52 | app.defProperty('server', 'run in server mode', '-s',
|
---|
53 | :type => :boolean)
|
---|
54 |
|
---|
55 | app.defProperty('bandwidth', 'set target bandwidth to n bits/sec (default 1 Mbit/sec)', '-b',
|
---|
56 | :type => :string, :unit => "Mbps")
|
---|
57 | app.defProperty('client', 'run in client mode, connecting to <host>', '-c',
|
---|
58 | :type => :string,
|
---|
59 | :order => 1)
|
---|
60 | app.defProperty('dualtest', 'do a bidirectional test simultaneously', '-d',
|
---|
61 | :type => :boolean)
|
---|
62 | app.defProperty('num', 'number of bytes to transmit (instead of -t)', '-n',
|
---|
63 | :type => :integer, :unit => "Bytes")
|
---|
64 | app.defProperty('tradeoff', 'do a bidirectional test individually', '-r',
|
---|
65 | :type => :boolean)
|
---|
66 | app.defProperty('time', 'time in seconds to transmit for (default 10 secs)', '-t',
|
---|
67 | :type => :integer, :unit => "seconds")
|
---|
68 | app.defProperty('fileinput', 'input the data to be transmitted from a file', '-F',
|
---|
69 | :type => :string)
|
---|
70 | app.defProperty('stdin', 'input the data to be transmitted from stdin', '-I',
|
---|
71 | :type => :boolean)
|
---|
72 | app.defProperty('listenport', 'port to recieve bidirectional tests back on', '-L',
|
---|
73 | :type => :integer)
|
---|
74 | app.defProperty('parallel', 'number of parallel client threads to run', '-P',
|
---|
75 | :type => :integer)
|
---|
76 | app.defProperty('ttl', 'time-to-live, for multicast (default 1)', '-T',
|
---|
77 | :type => :integer,
|
---|
78 | :default => 1)
|
---|
79 | app.defProperty('linux-congestion', 'set TCP congestion control algorithm (Linux only)', '-Z',
|
---|
80 | :type => :boolean)
|
---|
81 | end
|
---|
82 |
|
---|
83 | defGroup('AP', property.accesspoint) do |node|
|
---|
84 | node.addApplication("iperf") do |app|
|
---|
85 | app.setProperty('server', true)
|
---|
86 | end
|
---|
87 | node.net.w0.mode = "master"
|
---|
88 | node.net.w0.type = 'g'
|
---|
89 | node.net.w0.channel = "6"
|
---|
90 | node.net.w0.essid = "TEST1234"
|
---|
91 | node.net.w0.ip = "192.168.0.254"
|
---|
92 | end
|
---|
93 |
|
---|
94 | defGroup('client', property.client) do |node|
|
---|
95 | node.addApplication("iperf") do |app|
|
---|
96 | app.setProperty('client', "192.168.0.254")
|
---|
97 | app.setProperty('time', 20)
|
---|
98 | app.setProperty('interval', 5)
|
---|
99 | end
|
---|
100 | node.net.w0.mode = "managed"
|
---|
101 | node.net.w0.type = 'g'
|
---|
102 | node.net.w0.channel = "6"
|
---|
103 | node.net.w0.essid = "TEST1234"
|
---|
104 | node.net.w0.ip = "192.168.0.%index%"
|
---|
105 | end
|
---|
106 |
|
---|
107 | onEvent(:ALL_UP_AND_INSTALLED) do |event|
|
---|
108 | info "Wifi Multi Client Iperf Experiment"
|
---|
109 | wait 10
|
---|
110 | allGroups.startApplications
|
---|
111 | info "All my Applications are started now..."
|
---|
112 | wait property.duration
|
---|
113 | allGroups.stopApplications
|
---|
114 | info "All my Applications are stopped now."
|
---|
115 | Experiment.done
|
---|
116 | end
|
---|