98 | | defProperty('source1', "nodea-exttest7", "ID of a resource") |
99 | | defProperty('source2', "switch1-exttest7", "ID of a resource") |
100 | | defProperty('source3', "switch2-exttest7", "ID of a resource") |
101 | | |
102 | | |
103 | | defProperty('sinkaddr12', '192.168.1.7', "Ping destination address") |
104 | | defProperty('sinkaddr13', '192.168.1.8', "Ping destination address") |
105 | | |
106 | | defProperty('sinkaddr21', '192.168.1.13', "Ping destination address") |
107 | | defProperty('sinkaddr23', '192.168.1.14', "Ping destination address") |
108 | | defProperty('sinkaddr24', '192.168.1.15', "Ping destination address") |
| 93 | defProperty('source1', "nodeb-divpart0", "ID of a resource") |
| 94 | defProperty('thelistener', "nodea-divpart0", "ID of a resource") |
| 95 | defProperty('thesender', "nodeb-divpart0", "ID of a resource") |
| 96 | defProperty('thesender2', "nodeb-divpart0", "ID of a resource") |
| 97 | defProperty('interfaceServer', "wlan0", 'server interface to modify') |
| 98 | defProperty('capacity', 10000000, 'in bits per second') |
| 99 | |
| 100 | defProperty('sinkaddr11', '192.168.1.7', "Ping destination address") |
| 101 | defProperty('sinkaddr12', '192.168.1.6', "Ping destination address") |
| 102 | |
| 103 | defApplication('iperf') do |app| |
| 104 | app.description = 'Iperf traffic generator and bandwidth measurement tool' |
| 105 | app.binary_path = "/usr/bin/iperf-oml2" |
| 106 | |
| 107 | app.defProperty('server', 'run in server mode', '-s', |
| 108 | :type => :boolean) |
| 109 | |
| 110 | app.defProperty('client', 'run in client mode, connecting to <host>', '-c', |
| 111 | :type => :string, |
| 112 | :order => 1) |
| 113 | |
| 114 | app.defMeasurement("transfer"){ |m| |
| 115 | m.defMetric('pid', :integer, 'Main process identifier') |
| 116 | m.defMetric('connection_id', :integer, 'Connection identifier (socket)') |
| 117 | m.defMetric('begin_interval', :double, 'Start of the averaging interval (Iperf timestamp)') |
| 118 | m.defMetric('end_interval', :double, 'End of the averaging interval (Iperf timestamp)') |
| 119 | m.defMetric('size', :uint64, 'Amount of transmitted data [Bytes]') |
| 120 | } |
| 121 | app.defMeasurement("connection"){ |m| |
| 122 | m.defMetric('pid', :integer, 'Main process identifier') |
| 123 | m.defMetric('connection_id', :integer, 'Connection identifier (socket)') |
| 124 | m.defMetric('local_address', :string, 'Local network address') |
| 125 | m.defMetric('local_port', :integer, 'Local port') |
| 126 | m.defMetric('remote_address', :string, 'Remote network address') |
| 127 | m.defMetric('remote_port', :integer, 'Remote port') |
| 128 | } |
| 129 | |
| 130 | end |
146 | | node.addApplication("ping") do |app| |
147 | | app.setProperty('target', property.sinkaddr13) |
148 | | app.setProperty('count', 30) |
149 | | #app.setProperty('interval', 1) |
150 | | app.measure('ping', :samples => 1) |
151 | | end |
152 | | node.addApplication("ping") do |app| |
153 | | app.setProperty('target', property.sinkaddr21) |
154 | | app.setProperty('count', 30) |
155 | | #app.setProperty('interval', 1) |
156 | | app.measure('ping', :samples => 1) |
157 | | end |
158 | | node.addApplication("ping") do |app| |
159 | | app.setProperty('target', property.sinkaddr23) |
160 | | app.setProperty('count', 30) |
161 | | #app.setProperty('interval', 1) |
162 | | app.measure('ping', :samples => 1) |
163 | | end |
164 | | node.addApplication("ping") do |app| |
165 | | app.setProperty('target', property.sinkaddr24) |
166 | | app.setProperty('count', 30) |
167 | | #app.setProperty('interval', 1) |
168 | | app.measure('ping', :samples => 1) |
169 | | end |
170 | | end |
| 160 | end |
| 161 | defGroup('theReceiver', property.thelistener) do |node| |
| 162 | node.addApplication("iperf") do |app| |
| 163 | app.setProperty('server', true) |
| 164 | app.measure('transfer', :samples => 1) |
| 165 | app.measure('connection', :samples => 1) |
| 166 | end |
| 167 | end |
| 168 | |
| 169 | defGroup('theSender', property.thesender) do |node| |
| 170 | node.addApplication("iperf") do |app| |
| 171 | app.setProperty('client', property.sinkaddr12) |
| 172 | #app.measure('transfer', :samples => 1) |
| 173 | end |
| 174 | end |
| 175 | defGroup('theSender2', property.thesender2) do |node| |
| 176 | node.addApplication("iperf") do |app| |
| 177 | app.setProperty('client', property.sinkaddr12) |
| 178 | #app.measure('transfer', :samples => 1) |
| 179 | end |
| 180 | end |
| 181 | |
174 | | info "Starting the ping" |
175 | | after 2 do |
176 | | group('Source2').startApplications |
177 | | end |
178 | | after 20 do |
| 185 | info(" ------ Setup Traffic Shaping") |
| 186 | group("theReceiver").exec("/sbin/modprobe sch_netem") |
| 187 | group("theReceiver").exec("/sbin/modprobe ifb numifbs=10") |
| 188 | group("theReceiver").exec("/sbin/sysctl -w net.core.rmem_max=8388608") |
| 189 | group("theReceiver").exec("/sbin/sysctl -w net.core.wmem_max=8388608") |
| 190 | group("theReceiver").exec("/sbin/sysctl -w net.core.netdev_max_backlog=2048") |
| 191 | #group("theReceiver").exec("/sbin/ifconfig #{prop.interfaceServer} txqueuelen") |
| 192 | group("theReceiver").exec("/sbin/tc qdisc del dev #{prop.interfaceServer} root") |
| 193 | group("theReceiver").exec("/sbin/tc qdisc del dev #{prop.interfaceServer} ingress") |
| 194 | group("theReceiver").exec("/sbin/tc qdisc add dev #{prop.interfaceServer} handle 130 root htb default 1") |
| 195 | group("theReceiver").exec("/sbin/tc class add dev #{prop.interfaceServer} classid 130:1 parent 130 htb rate #{prop.capacity.to_s} ceil #{prop.capacity.to_s}") |
| 196 | group("theReceiver").exec("/sbin/tc qdisc add dev #{prop.interfaceServer} handle 120 parent 130:1 netem drop 0 delay 0us") |
| 197 | after 2 do |
| 198 | group('theReceiver').startApplications |
| 199 | end |
| 200 | after 5 do |
| 201 | group('theSender').startApplications |
| 202 | info "Starting the ping" |