def run_flent(gui=False): if sys.version_info[:2] < (3, 6): sys.stderr.write("Sorry, Flent requires v3.6 or later of Python.\n") sys.exit(1) try: try: locale.setlocale(locale.LC_ALL, '') except locale.Error: pass from flent import batch from flent.settings import load from flent.loggers import setup_console, get_logger setup_console() logger = get_logger(__name__) logger.debug("Flent executed as %s in PID %d", sys.argv, os.getpid()) try: signal.signal(signal.SIGTERM, handle_sigterm) settings = load(sys.argv[1:]) if gui or settings.GUI: from flent.gui import run_gui return run_gui(settings) else: b = batch.new(settings) b.run() except RuntimeError as e: logger.exception(str(e)) except KeyboardInterrupt: try: b.kill() except NameError: pass # Proper behaviour on SIGINT is re-killing self with SIGINT to properly # signal to surrounding shell what happened. # Ref: http://mywiki.wooledge.org/SignalTrap try: signal.signal(signal.SIGINT, signal.SIG_DFL) os.kill(os.getpid(), signal.SIGINT) except: return 1 # Just in case... finally: try: signal.signal(signal.SIGTERM, signal.SIG_DFL) except: pass return 0
def run_flent(gui=False): if sys.version_info[:3] < (2, 7, 3): sys.stderr.write("Sorry, Flent requires v2.7.3 or later of Python.\n") sys.exit(1) try: try: locale.setlocale(locale.LC_ALL, '') except locale.Error: pass from flent import batch from flent.settings import load from flent.loggers import setup_console, get_logger setup_console() logger = get_logger(__name__) try: signal.signal(signal.SIGTERM, handle_sigterm) settings = load(sys.argv[1:]) if gui or settings.GUI: from flent.gui import run_gui return run_gui(settings) else: b = batch.new(settings) b.run() except RuntimeError as e: logger.exception(str(e)) except KeyboardInterrupt: try: b.kill() except NameError: pass # Proper behaviour on SIGINT is re-killing self with SIGINT to properly # signal to surrounding shell what happened. # Ref: http://mywiki.wooledge.org/SignalTrap try: signal.signal(signal.SIGINT, signal.SIG_DFL) os.kill(os.getpid(), signal.SIGINT) except: return 1 # Just in case... finally: try: signal.signal(signal.SIGTERM, signal.SIG_DFL) except: pass return 0
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import os import re import subprocess from flent import util from flent.loggers import get_logger logger = get_logger(__name__) INTERESTING_OFFLOADS = ['tcp-segmentation-offload', 'udp-fragmentation-offload', 'large-receive-offload', 'generic-segmentation-offload', 'generic-receive-offload'] INTERESTING_SYSCTLS = ['net.core.rmem_max', 'net.core.wmem_max', 'net.ipv4.tcp_autocorking', 'net.ipv4.tcp_early_retrans', 'net.ipv4.tcp_ecn', 'net.ipv4.tcp_dsack', 'net.ipv4.tcp_fack', 'net.ipv4.tcp_sack',
from configparser import RawConfigParser except ImportError: from ConfigParser import RawConfigParser from flent import aggregators, formatters, resultset, loggers from flent.metadata import record_metadata, record_postrun_metadata from flent.util import clean_path, format_date, token_split from flent.settings import parser as SETTINGS_PARSER # Python2/3 compatibility try: basestring except NameError: basestring = str logger = loggers.get_logger(__name__) def new(settings): return BatchRunner(settings) class BatchRunner(object): _INTERP_REGEX = re.compile(r"(^|[^$])(\$\{([^}]+)\})") _MAX_INTERP = 1000 def __init__(self, settings): self.args = OrderedDict() self.batches = OrderedDict() self.commands = OrderedDict()
from datetime import datetime from calendar import timegm from itertools import repeat from copy import deepcopy from collections import OrderedDict from flent import transformers from flent.loggers import get_logger from flent.util import parse_date, format_date try: import ujson as json except ImportError: import json logger = get_logger(__name__) # Controls pretty-printing of json dumps JSON_INDENT = 2 __all__ = ['new', 'load'] RECORDED_SETTINGS = ( "NAME", "HOST", "HOSTS", "TIME", "LOCAL_HOST", "TITLE", "NOTE", "LENGTH",
except ImportError: from ConfigParser import RawConfigParser from flent import aggregators, formatters, resultset, loggers from flent.metadata import record_metadata, record_postrun_metadata from flent.util import clean_path, format_date, token_split from flent.settings import parser as SETTINGS_PARSER from flent.settings import _LOG_DEFER # Python2/3 compatibility try: basestring except NameError: basestring = str logger = loggers.get_logger(__name__) def new(settings): return BatchRunner(settings) class BatchRunner(object): _INTERP_REGEX = re.compile(r"(^|[^$])(\$\{([^}]+)\})") _MAX_INTERP = 1000 def __init__(self, settings): self.args = OrderedDict() self.batches = OrderedDict() self.commands = OrderedDict()
def run_flent(gui=False): if sys.version_info[:2] < (3, 5): sys.stderr.write("Sorry, Flent requires v3.5 or later of Python.\n") sys.exit(1) try: try: locale.setlocale(locale.LC_ALL, '') except locale.Error: pass from flent import batch from flent.settings import load from flent.loggers import setup_console, get_logger setup_console() logger = get_logger(__name__) try: signal.signal(signal.SIGTERM, handle_sigterm) settings = load(sys.argv[1:]) if (settings.TOPO): sys.path.append(os.path.dirname(os.path.abspath( settings.TOPO))) print(os.path.dirname(os.path.abspath(settings.TOPO))) filename = os.path.basename(settings.TOPO) print(filename) topology = import_module(filename[:-3]) (client_ns, client_ip, server_ns, server_ip) = topology.run() new_args = arg_parse() # exec_subprocess("ip netns exec n1 ping 10.2.2.2 -c 5") # TODO: Set server_ns and client_ns here t1 = threading.Thread(target=server, args=(server_ns, )) t2 = threading.Thread(target=client, args=( client_ns, new_args, server_ip, )) t1.start() time.sleep(2.0) t2.start() t1.join() t2.join() # run user script pass elif gui or settings.GUI: from flent.gui import run_gui return run_gui(settings) else: b = batch.new(settings) b.run() except RuntimeError as e: logger.exception(str(e)) except KeyboardInterrupt: try: b.kill() except NameError: pass # Proper behaviour on SIGINT is re-killing self with SIGINT to properly # signal to surrounding shell what happened. # Ref: http://mywiki.wooledge.org/SignalTrap try: signal.signal(signal.SIGINT, signal.SIG_DFL) os.kill(os.getpid(), signal.SIGINT) except: return 1 # Just in case... finally: try: signal.signal(signal.SIGTERM, signal.SIG_DFL) except: pass return 0