1 # Copyright 2016 Cisco Systems, Inc. All rights reserved.
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
7 # http://www.apache.org/licenses/LICENSE-2.0
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
17 from nfvbench.log import LOG
21 class TrafficGeneratorException(Exception):
25 class AbstractTrafficGenerator(object):
26 def __init__(self, config):
28 self.imix_l2_sizes = [64, 594, 1518]
29 self.imix_ratios = [7, 4, 1]
30 self.imix_avg_l2_size = 0
31 self.adjust_imix_min_size(64)
34 def get_version(self):
35 # Must be implemented by sub classes
40 # Must be implemented by sub classes
45 # Must be implemented by sub classes
49 def config_interface(self):
50 # Must be implemented by sub classes
54 def create_traffic(self, l2frame_size, rates, bidirectional, latency=True):
55 # Must be implemented by sub classes
58 def modify_rate(self, rate, reverse):
59 port_index = int(reverse)
60 port = self.port_handle[port_index]
61 self.rates[port_index] = traffic_utils.to_rate_str(rate)
62 LOG.info('Modified traffic stream for %s, new rate=%s.', port,
63 traffic_utils.to_rate_str(rate))
65 def modify_traffic(self):
66 # Must be implemented by sub classes
71 # Must be implemented by sub classes
74 def clear_traffic(self):
75 # Must be implemented by sub classes
79 def start_traffic(self):
80 # Must be implemented by sub classes
84 def stop_traffic(self):
85 # Must be implemented by sub classes
90 # Must be implemented by sub classes
93 def adjust_imix_min_size(self, min_size):
94 # assume the min size is always the first entry
95 self.imix_l2_sizes[0] = min_size
96 self.imix_avg_l2_size = sum(
97 [1.0 * imix[0] * imix[1] for imix in zip(self.imix_l2_sizes, self.imix_ratios)]) / sum(
99 traffic_utils.imix_avg_l2_size = self.imix_avg_l2_size