summaryrefslogtreecommitdiffstats
path: root/core/traffic_controller_rfc2544.py
blob: e230c832e12d649cc96123c4fa95b97f1ef84f6d (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

@media only all and (prefers-color-scheme: dark) {
.highlight .hll { background-color: #49483e }
.highlight .c { color: #75715e } /* Comment */
.highlight .err { color: #960050; background-color: #1e0010 } /* Error */
.highlight .k { color: #66d9ef } /* Keyword */
.highlight .l { color: #ae81ff } /* Literal */
.highlight .n { color: #f8f8f2 } /* Name */
.highlight .o { color: #f92672 } /* Operator */
.highlight .p { color: #f8f8f2 } /* Punctuation */
.highlight .ch { color: #75715e } /* Comment.Hashbang */
.highlight .cm { color: #75715e } /* Comment.Multiline */
.highlight .cp { color: #75715e } /* Comment.Preproc */
.highlight .cpf { color: #75715e } /* Comment.PreprocFile */
.highlight .c1 { color: #75715e } /* Comment.Single */
.highlight .cs { color: #75715e } /* Comment.Special */
.highlight .gd { color: #f92672 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gi { color: #a6e22e } /* Generic.Inserted */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #75715e } /* Generic.Subheading */
# Copyright 2015-2016 Intel Corporation.
#
# 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.
"""RFC2544 Traffic Controller implementation.
"""
from core.traffic_controller import TrafficController
from core.results.results import IResults
from conf import settings


class TrafficControllerRFC2544(TrafficController, IResults):
    """Traffic controller for RFC2544 traffic

    Used to setup and control a traffic generator for an RFC2544 deployment
    traffic scenario.
    """

    def __init__(self, traffic_gen_class):
        """Initialise the trafficgen and store.

        :param traffic_gen_class: The traffic generator class to be used.
        """
        super(TrafficControllerRFC2544, self).__init__(traffic_gen_class)
        self._type = 'rfc2544'
        self._tests = int(settings.getValue('TRAFFICGEN_RFC2544_TESTS'))

    def send_traffic(self, traffic):
        """See TrafficController for description
        """
        if not self.traffic_required():
            return
        self._logger.debug('send_traffic with ' +
                           str(self._traffic_gen_class))

        for packet_size in self._packet_sizes:
            # Merge framesize with the default traffic definition
            if 'l2' in traffic:
                traffic['l2'] = dict(traffic['l2'],
                                     **{'framesize': packet_size})
            else:
                traffic['l2'] = {'framesize': packet_size}

            if traffic['traffic_type'] == 'rfc2544_back2back':
                result = self._traffic_gen_class.send_rfc2544_back2back(
                    traffic, tests=self._tests, duration=self._duration, lossrate=self._lossrate)
            elif traffic['traffic_type'] == 'rfc2544_continuous':
                result = self._traffic_gen_class.send_cont_traffic(
                    traffic, duration=self._duration)
            elif traffic['traffic_type'] == 'rfc2544_throughput':
                result = self._traffic_gen_class.send_rfc2544_throughput(
                    traffic, tests=self._tests, duration=self._duration, lossrate=self._lossrate)
            else:
                raise RuntimeError("Unsupported traffic type {} was \
                                   detected".format(traffic['traffic_type']))

            result = self._append_results(result, packet_size)
            self._results.append(result)

    def send_traffic_async(self, traffic, function):
        """See TrafficController for description
        """
        if not self.traffic_required():
            return
        self._logger.debug('send_traffic_async with ' +
                           str(self._traffic_gen_class))

        for packet_size in self._packet_sizes:
            traffic['l2'] = {'framesize': packet_size}
            self._traffic_gen_class.start_rfc2544_throughput(
                traffic,
                tests=self._tests,
                duration=self._duration)
            self._traffic_started = True
            if len(function['args']) > 0:
                function['function'](function['args'])
            else:
                function['function']()
            result = self._traffic_gen_class.wait_rfc2544_throughput()
            result = self._append_results(result, packet_size)
            self._results.append(result)