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 |
---|