From 04a7de082bd221eae3c7004f4e0b99dfa4f8be91 Mon Sep 17 00:00:00 2001 From: ahothan Date: Fri, 28 Jul 2017 17:08:46 -0700 Subject: Initial code drop from Cisco Change-Id: Ie2993886dc8e95c5f73ccdb871add8b96ffcc849 Signed-off-by: ahothan --- nfvbench/traffic_server.py | 64 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 nfvbench/traffic_server.py (limited to 'nfvbench/traffic_server.py') diff --git a/nfvbench/traffic_server.py b/nfvbench/traffic_server.py new file mode 100644 index 0000000..05f20e5 --- /dev/null +++ b/nfvbench/traffic_server.py @@ -0,0 +1,64 @@ +# Copyright 2016 Cisco Systems, Inc. All rights reserved. +# +# 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. + +from log import LOG +import os +import subprocess +import yaml + +class TrafficServerException(Exception): + pass + +class TrafficServer(object): + """Base class for traffic servers.""" + +class TRexTrafficServer(TrafficServer): + """Creates configuration file for TRex and runs server.""" + + def __init__(self, trex_base_dir='/opt/trex'): + contents = os.listdir(trex_base_dir) + # only one version of TRex should be supported in container + assert(len(contents) == 1) + self.trex_dir = os.path.join(trex_base_dir, contents[0]) + + def run_server(self, traffic_profile, filename='/etc/trex_cfg.yaml'): + """ + Runs TRex server for specified traffic profile. + + :param traffic_profile: traffic profile object based on config file + :param filename: path where to save TRex config file + """ + cfg = self.__save_config(traffic_profile, filename) + cores = traffic_profile.cores + subprocess.Popen(['nohup', '/bin/bash', '-c', + './t-rex-64 -i -c {} --iom 0 --no-scapy-server --close-at-end --vlan' + ' --cfg {} &> /tmp/trex.log & disown'.format(cores, cfg)], + cwd=self.trex_dir) + LOG.info('TRex server is running...') + + def __save_config(self, traffic_profile, filename): + ifs = ",".join([repr(pci) for pci in traffic_profile.pcis]) + + result = """# Config generated by NFVBench tool + - port_limit : 2 + version : 2 + interfaces : [{ifs}]""".format(ifs=ifs) + + yaml.safe_load(result) + if os.path.exists(filename): + os.remove(filename) + with open(filename, 'w') as f: + f.write(result) + + return filename -- cgit 1.2.3-korg