NFVBENCH-45 Fix typo on imix_avg_l2_size
[nfvbench.git] / nfvbench / traffic_gen / traffic_base.py
1 # Copyright 2016 Cisco Systems, Inc.  All rights reserved.
2 #
3 #    Licensed under the Apache License, Version 2.0 (the "License"); you may
4 #    not use this file except in compliance with the License. You may obtain
5 #    a copy of the License at
6 #
7 #         http://www.apache.org/licenses/LICENSE-2.0
8 #
9 #    Unless required by applicable law or agreed to in writing, software
10 #    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11 #    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12 #    License for the specific language governing permissions and limitations
13 #    under the License.
14
15 import abc
16
17 from nfvbench.log import LOG
18 import traffic_utils
19
20
21 class TrafficGeneratorException(Exception):
22     pass
23
24
25 class AbstractTrafficGenerator(object):
26     # src_mac (6) + dst_mac (6) + mac_type (2) + frame_check (4) = 18
27     l2_header_size = 18
28
29     imix_l2_sizes = [64, 594, 1518]
30     imix_l3_sizes = [size - l2_header_size for size in imix_l2_sizes]
31     imix_ratios = [7, 4, 1]
32     imix_avg_l2_size = sum(
33         [1.0 * imix[0] * imix[1] for imix in zip(imix_l2_sizes, imix_ratios)]) / sum(imix_ratios)
34
35     traffic_utils.imix_avg_l2_size = imix_avg_l2_size
36
37     def __init__(self, config):
38         self.config = config
39
40     @abc.abstractmethod
41     def get_version(self):
42         # Must be implemented by sub classes
43         return None
44
45     @abc.abstractmethod
46     def init(self):
47         # Must be implemented by sub classes
48         return None
49
50     @abc.abstractmethod
51     def connect(self):
52         # Must be implemented by sub classes
53         return None
54
55     @abc.abstractmethod
56     def config_interface(self):
57         # Must be implemented by sub classes
58         return None
59
60     @abc.abstractmethod
61     def create_traffic(self):
62         # Must be implemented by sub classes
63         return None
64
65     def modify_rate(self, rate, reverse):
66         port_index = int(reverse)
67         port = self.port_handle[port_index]
68         self.rates[port_index] = traffic_utils.to_rate_str(rate)
69         LOG.info('Modified traffic stream for %s, new rate=%s.', port,
70                  traffic_utils.to_rate_str(rate))
71
72     def modify_traffic(self):
73         # Must be implemented by sub classes
74         return None
75
76     @abc.abstractmethod
77     def get_stats(self):
78         # Must be implemented by sub classes
79         return None
80
81     def clear_traffic(self):
82         # Must be implemented by sub classes
83         return None
84
85     @abc.abstractmethod
86     def start_traffic(self):
87         # Must be implemented by sub classes
88         return None
89
90     @abc.abstractmethod
91     def stop_traffic(self):
92         # Must be implemented by sub classes
93         return None
94
95     @abc.abstractmethod
96     def cleanup(self):
97         # Must be implemented by sub classes
98         return None