aboutsummaryrefslogtreecommitdiffstats
path: root/yardstick/vTC/apexlake/experimental_framework/packet_generators/dpdk_pktgen/rfc2544.lua
blob: d20a29b03aa5a8e11734c01207304164edb3627b (plain)
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);