aboutsummaryrefslogtreecommitdiffstats
path: root/core/component_factory.py
blob: a91872e25a8bba31087bc30a46afed75ea423dce (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
# 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.

"""Functions for creating controller objects based on deployment or traffic
"""

from core.traffic_controller_rfc2544 import TrafficControllerRFC2544
from core.vswitch_controller_clean import VswitchControllerClean
from core.vswitch_controller_p2p import VswitchControllerP2P
from core.vswitch_controller_pvp import VswitchControllerPVP
from core.vswitch_controller_pvvp import VswitchControllerPVVP
from core.vswitch_controller_op2p import VswitchControllerOP2P
from core.vnf_controller import VnfController
from core.pktfwd_controller import PktFwdController
from tools.load_gen.stress.stress import Stress
from tools.load_gen.stress_ng.stress_ng import StressNg
from tools.load_gen.dummy.dummy import DummyLoadGen


def __init__():
    """Finds and loads all the modules required.

    Very similar code to load_trafficgens().
    """
    pass

def create_traffic(traffic_type, trafficgen_class):
    """Return a new IVSwitchController for the traffic type.

    The returned traffic controller has the given traffic type and traffic
    generator class.

    traffic_types: 'rfc2544_throughput'

    :param traffic_type: Name of traffic type
    :param trafficgen_class: Reference to traffic generator class to be used.
    :return: A new ITrafficController
    """
    return TrafficControllerRFC2544(trafficgen_class)


def create_vswitch(deployment_scenario, vswitch_class, traffic,
                   tunnel_operation=None):
    """Return a new IVSwitchController for the deployment_scenario.

    The returned controller is configured with the given vSwitch class.

    Deployment scenarios: 'p2p', 'pvp'

    :param deployment_scenario: The deployment scenario name
    :param vswitch_class: Reference to vSwitch class to be used.
    :param traffic: Dictionary with traffic specific details
    :param tunnel_operation encapsulation/decapsulation or None
    :return: IVSwitchController for the deployment_scenario
    """
    deployment_scenario = deployment_scenario.lower()
    if deployment_scenario.find("p2p") == 0:
        return VswitchControllerP2P(vswitch_class, traffic)
    elif deployment_scenario.find("pvp") >= 0:
        return VswitchControllerPVP(vswitch_class, traffic)
    elif deployment_scenario.find("pvvp") >= 0:
        return VswitchControllerPVVP(vswitch_class, traffic)
    elif deployment_scenario.find("op2p") >= 0:
        return VswitchControllerOP2P(vswitch_class, traffic, tunnel_operation)
    elif deployment_scenario.find("clean") >= 0:
        return VswitchControllerClean(vswitch_class, traffic)


def create_vnf(deployment_scenario, vnf_class):
    """Return a new VnfController for the deployment_scenario.

    The returned controller is configured with the given VNF class.

    Deployment scenarios: 'p2p', 'pvp'

    :param deployment_scenario: The deployment scenario name
    :param vswitch_class: Reference to vSwitch class to be used.
    :return: VnfController for the deployment_scenario
    """
    return VnfController(deployment_scenario, vnf_class)

def create_collector(collector_class, result_dir, test_name):
    """Return a new Collector of the given class

    :param collector_class: The collector class to be used.
    :param result_dir: Directory with test results
    :param test_name: Test to be run
    :return: A new CollectorController.
    """
    return collector_class(result_dir, test_name)

def create_loadgen(loadgen_type, loadgen_cfg):
    """Return a new ILoadGenerator for the loadgen type.

    The returned load generator has the given loadgen type and loadgen
    generator class.

    :param loadgen_type: Name of loadgen type
    :param loadgen_class: Reference to load generator class to be used.
    :return: A new ILoadGenerator class
    """
    loadgen_type = loadgen_type.lower()
    if loadgen_type.find("dummy") >= 0:
        return DummyLoadGen(loadgen_cfg)
    elif loadgen_type.find("stress-ng") >= 0:
        return StressNg(loadgen_cfg)
    elif loadgen_type.find("stress") >= 0:
        return Stress(loadgen_cfg)

def create_pktfwd(deployment, pktfwd_class):
    """Return a new packet forwarder controller

    The returned controller is configured with the given
    packet forwarder class.

    :param pktfwd_class: Reference to packet forwarder class to be used.
    :param deployment: The deployment scenario name
    :return: packet forwarder controller
    """
    return PktFwdController(deployment, pktfwd_class)