1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
-----------------------------------------------------------------------------
-- Copyright (c) 2015 Intel Research and Development Ireland Ltd.
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
-----------------------------------------------------------------------------
-------------------------------
----- RFC-2544 throughput -----
-------------------------------
package.path = package.path ..";?.lua;test/?.lua;app/?.lua;../?.lua"
require "Pktgen";
----- Packet Gen Configuration
local sendport = "0";
local recvport = "1";
pktgen.set(recvport, "rate", 1);
pktgen.vlan(sendport, "on");
pktgen.ping4("all");
pktgen.icmp_echo("all", "on");
pktgen.process("all", "on");
----- RFC2544 Configuration
local traffic_delay = 60; -- Time in seconds to delay.
local multicast_delay = 15; -- Time in seconds to delay.
local starting_rate = 100; -- Initial Rate in %
local step = 100; -- Initial Step in %
local down_limit = 0;
local up_limit = 100;
-- Creation of a module
--local rfc2544 = {}
function start_traffic(rate)
local endStats, diff, prev, iteration, flag, found;
flag = false;
found = false;
print("PACKET GENERATION - " .. rate .. "%\n");
-- Send packet to join the multicast group
print("Join Multicast Group");
pktgen.start(recvport);
sleep(multicast_delay);
pktgen.stop(recvport);
pktgen.clr();
-- Send traffic at the specified rate
print("Start Generation");
pktgen.set(sendport, "rate", rate);
sleep(1);
pktgen.start(sendport);
sleep(traffic_delay);
pktgen.stop(sendport);
print("Stop Generation");
sleep(5);
-- Collect statistics about the experiment
endStats = pktgen.portStats("all", "port");
diff = endStats[0].opackets - endStats[1].ipackets;
if ( endStats[0].opackets <= 0) then
diff = 0;
else
diff = diff / endStats[0].opackets;
end
pktgen.clr();
print("Missing packets: " .. (diff * 100));
-- Adjust variable for the next race
prev_rate = rate;
step = step/2;
if ( diff > 0.01) then
if(endStats[0].opackets > 0) then
up_limit = rate;
rate = math.floor(rate - (step));
end
else
down_limit = rate;
rate = math.floor(rate + (step));
print("\nRATE: " .. rate .. " RECEIVED PACKETS: " .. endStats[1].ipackets .. " ");
found = true;
end
printf("DOWN LIMIT: %d\n", down_limit);
printf("UP LIMIT: %d\n", up_limit);
if ( rate >= 100 ) then
rate = 100;
end
if ( prev ~= rate and rate < up_limit and rate >= down_limit and step >= 1 ) then
if (step < 1 and not found ) or (step >= 1 ) then
return start_traffic(rate);
end
end
sleep(3);
return down_limit;
end
local out_file = "";
local starting_rate = 100;
pktgen.clr();
print("RFC 2544 THROUGHPUT CALCULATION");
-- Write output on log file
file = io.open(out_file, "w");
-- Start experiment
--rate = rfc2544.start_traffic(starting_rate)
rate = start_traffic(starting_rate);
print("RATE: " .. rate);
file:write(rate);
-- Close the log file
file:close();
-- Quit the environment
os.exit(1);
|