Exemplo n.º 1
0
def get_server_ip_list():
    ip_list = []
    with open(get_topo_file('servers'), 'r') as serversfile:
        for line in strip_comments(serversfile):
            ip_list.append(line.strip())
    serversfile.closed
    return ip_list
Exemplo n.º 2
0
def install_filters(links_file):
    with open(links_file, 'r') as linksf:
        for line in strip_comments(linksf):
            elems = line.split(' ')
            check_output('%s update %s %s -c %i'\
                % (TC_SETUP, elems[0], elems[2], int(elems[1].split('link')[1])))
    linksf.closed
Exemplo n.º 3
0
def run_events():
    # Remove existing log file
    if args.log and os.path.isfile(args.log):
        os.remove(args.log)

    # Read event list
    events = []
    with open(get_topo_file('events'), 'r') as eventsf:
        for line in strip_comments(eventsf):
            events.append(line.split(' '))
    eventsf.closed

    # Run events
    logging.getLogger(__name__).info('Running link events...')
    for event in events:
        # decide when to execute this event
        if event[0] is '*':
            raw_input('Press enter to run event:  %s' % ' '.join(event))
        else:
            try:
                time.sleep(float(event[0]))
            except:
                logging.getLogger(__name__).warning('Skipping invalid event: %s' % ' '.join(event))
                continue
        execute_event(event)
    logging.getLogger(__name__).info('Done running events.')
Exemplo n.º 4
0
def get_server_ip_list():
    ip_list = []
    with open(get_topo_file('servers'), 'r') as serversfile:
        for line in strip_comments(serversfile):
            ip_list.append(line.strip())
    serversfile.closed
    return ip_list
Exemplo n.º 5
0
def install_filters(links_file):
    with open(links_file, 'r') as linksf:
        for line in strip_comments(linksf):
            elems = line.split(' ')
            check_output('%s update %s %s -c %i'\
                % (TC_SETUP, elems[0], elems[2], int(elems[1].split('link')[1])))
    linksf.closed
Exemplo n.º 6
0
def run_events():
    # Remove existing log file
    if args.log and os.path.isfile(args.log):
        os.remove(args.log)

    # Read event list
    events = []
    with open(get_topo_file('events'), 'r') as eventsf:
        for line in strip_comments(eventsf):
            events.append(line.split(' '))
    eventsf.closed

    # Run events
    logging.getLogger(__name__).info('Running link events...')
    for event in events:
        # decide when to execute this event
        if event[0] == '*':
            input('Press enter to run event:  %s' % ' '.join(event))
        else:
            try:
                time.sleep(float(event[0]))
            except:
                logging.getLogger(__name__).warning(
                    'Skipping invalid event: %s' % ' '.join(event))
                continue
        execute_event(event)
    logging.getLogger(__name__).info('Done running events.')
Exemplo n.º 7
0
def run_events():
    # Remove existing log file
    if args.log and os.path.isfile(args.log):
        os.remove(args.log)

    # Read event list
    events = []
    with open(args.events) as events_file:
        for line in strip_comments(events_file):
            events.append(line.split(' '))
    events_file.closed

    # Open control socket
    logging.getLogger(__name__).info("Establish control connection")
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(("127.0.0.1", 7777))
    logging.getLogger(__name__).info(s.recv(BUF_SIZE))

    # Run events
    logging.getLogger(__name__).info('Running link events...')
    for event in events:
        # decide when to execute this event
        if event[0] is '*':
            raw_input('Press enter to run event:  %s' % ' '.join(event))
        else:
            try:
                time.sleep(float(event[0]))
            except:
                logging.getLogger(__name__).warning(
                    'Skipping invalid event: %s' % ' '.join(event))
                continue
        execute_event(s, event)
    s.close()

    logging.getLogger(__name__).info('Done running events.')
Exemplo n.º 8
0
    def parse_cli(self, args=None):
        # explicitly set cmd-line options, parsed according to default parser
        super(FrameworkCLIHandler, self).parse_cli(args)
        cli_opts = self.config
        # default values only, from running default parser on empty input
        defaults = vars(self.parser.parse_args([]))
        chained_dict_list = [cli_opts, defaults]

        # deal with options set in user-specified file, if present
        config_path = cli_opts.get('config_file', None)
        file_str = ''
        if config_path:
            try:
                with open(config_path, 'r') as f:
                    file_str = f.read()
            except Exception:
                print(
                    "ERROR: Can't read config file at {}.".format(config_path))
        if file_str:
            try:
                file_opts = util.parse_json(file_str)
                # overwrite default case_list and pod_list, if given
                if 'case_list' in file_opts:
                    self.case_list = file_opts.pop('case_list')
                if 'pod_list' in file_opts:
                    self.pod_list = file_opts.pop('pod_list')
                if 'argument_groups' in file_opts or 'arguments' in file_opts:
                    # assume config_file is a modified copy of the defaults,
                    # with options to define parser. Set up the parser and run
                    # CLI arguments through it (instead of default).
                    # Don't error on unrecognized args here, since those will be
                    # caught by the default parser.
                    custom_parser = self.make_parser(file_opts)
                    chained_dict_list = [
                        # CLI parsed with config_file's parser
                        vars(custom_parser.parse_known_args()[0]),
                        # defaults set in config_file's parser
                        vars(custom_parser.parse_known_args([])[0])
                    ] + chained_dict_list
                else:
                    # assume config_file a JSON dict of option:value pairs.
                    file_opts = {
                        self.canonical_arg_name(k): v
                        for k, v in file_opts.iteritems()
                    }
                    chained_dict_list = [cli_opts, file_opts, defaults]
            except Exception:
                if 'json' in os.path.splitext('config_path')[1].lower():
                    print("ERROR: Couldn't parse JSON in {}.".format(
                        config_path))
                    raise
                # assume config_file is a plain text file containing flags, etc.
                # as they would be passed on the command line.
                file_str = util.strip_comments(file_str, '#')
                file_opts = vars(self.parser.parse_args(shlex.split(file_str)))
                chained_dict_list = [cli_opts, file_opts, defaults]

        # CLI opts override options set from file, which override defaults
        self.config = dict(ChainMap(*chained_dict_list))
Exemplo n.º 9
0
def autogen_click_conf(servers_file, clients_file, dns_file):
    logging.getLogger(__name__).debug("Autogenerating %s from %s and %s" % (CLICK_CONF, servers_file, clients_file))
    with open(CLICK_CONF, "w") as clickfile:
        clickfile.write("// This file is autogenerated. Do not hand edit.\n\n")
        with open(servers_file, "r") as serversfile:
            for line in strip_comments(serversfile):
                clickfile.write("KernelTun(%s/8) -> Discard;\n" % (line.strip()))
        serversfile.closed
        with open(clients_file, "r") as clientsfile:
            for line in strip_comments(clientsfile):
                clickfile.write("KernelTun(%s/8) -> Discard;\n" % (line.strip()))
        clientsfile.closed
        with open(dns_file, "r") as dnsfile:
            for line in strip_comments(dnsfile):
                clickfile.write("KernelTun(%s/8) -> Discard;\n" % (line.strip()))
        dnsfile.closed
    clickfile.closed
Exemplo n.º 10
0
def main():
    terminate_counters()

    with open(args.servers) as servers_file:
        for line in strip_comments(servers_file):
            server_ports.append(int(line))
        servers_file.closed

    start_counters()
    signal.signal(signal.SIGINT, sig_terminal_handler)
Exemplo n.º 11
0
def autogen_click_conf(servers_file, clients_file, dns_file):
    logging.getLogger(__name__).debug('Autogenerating %s from %s and %s'\
        % (CLICK_CONF, servers_file, clients_file))
    with open(CLICK_CONF, 'w') as clickfile:
        clickfile.write('// This file is autogenerated. Do not hand edit.\n\n')
        with open(servers_file, 'r') as serversfile:
            for line in strip_comments(serversfile):
                clickfile.write('KernelTun(%s/8) -> Discard;\n' %
                                (line.strip()))
        serversfile.closed
        with open(clients_file, 'r') as clientsfile:
            for line in strip_comments(clientsfile):
                clickfile.write('KernelTun(%s/8) -> Discard;\n' %
                                (line.strip()))
        clientsfile.closed
        with open(dns_file, 'r') as dnsfile:
            for line in strip_comments(dnsfile):
                clickfile.write('KernelTun(%s/8) -> Discard;\n' %
                                (line.strip()))
        dnsfile.closed
    clickfile.closed
Exemplo n.º 12
0
    def parse_cli(self, args=None):
        # explicitly set cmd-line options, parsed according to default parser;
        # result stored in self.config
        self.preparse_cli(args)

        # handle positionals here because we need to find input_file
        self.parse_positionals('input_file')
        self.parse_positionals('root_dir')

        # deal with options set in user-specified defaults file, if present
        config_path = self.config.get('INPUT_FILE', None)
        config_str = ''
        if config_path:
            try:
                with open(config_path, 'r') as f:
                    config_str = f.read()
            except Exception:
                print(
                    "ERROR: Can't read input file at {}.".format(config_path))
        if config_str:
            try:
                file_input = util.parse_json(config_str)
                # overwrite default case_list and pod_list, if given
                if 'case_list' in file_input:
                    self.case_list = file_input.pop('case_list')
                if 'pod_list' in file_input:
                    self.pod_list = file_input.pop('pod_list')
                # assume config_file a JSON dict of option:value pairs.
                self.partial_defaults = [{
                    self.canonical_arg_name(k): v
                    for k, v in file_input.iteritems()
                }]
            except Exception:
                if 'json' in os.path.splitext('config_path')[1].lower():
                    print("ERROR: Couldn't parse JSON in {}.".format(
                        config_path))
                    raise
                # assume config_file is a plain text file containing flags, etc.
                # as they would be passed on the command line.
                config_str = util.strip_comments(config_str, '#')
                self.partial_defaults = [
                    vars(self.parser.parse_args(shlex.split(config_str)))
                ]
        # CLI opts override options set from file, which override defaults
        super(FrameworkCLIHandler, self).parse_cli(args)
Exemplo n.º 13
0
def start_servers():
    if servers_running():
        logging.getLogger(__name__).info('Some components already running...')
        stop_servers()

    logging.getLogger(__name__).info('Starting servers...')

    # Launch apache instances
    logging.getLogger(__name__).info('Configuring apache...')
    if args.topology == 'servers':
        with open(args.servers) as servers_file:
            for line in strip_comments(servers_file):
                servers.append('127.0.0.1:%d' % int(line))
                servers_port.append(int(line))
        servers_file.closed
        try:
            configure_apache(servers)
            restart_apache()
        except Exception as e:
            logging.getLogger(__name__).error(e)
    else:
        if args.topology == 'onelink':
            try:
                configure_apache(['127.0.0.1:8080'])
                restart_apache()
            except Exception as e:
                logging.getLogger(__name__).error(e)
        else:
            try:
                configure_apache(['127.0.0.1:8080', '127.0.0.1:8081'])
                restart_apache()
            except Exception as e:
                logging.getLogger(__name__).error(e)

        # Create click bandwidth shaper
        logging.getLogger(__name__).info('Creating bandwidth shaper...')
        autogen_click()
        run_bg('click %s.click' % args.topology)

    logging.getLogger(__name__).info('Network started.')
Exemplo n.º 14
0
def stop_servers():
    logging.getLogger(__name__).info('Stopping simulated network...')

    # stop apache instances
    logging.getLogger(__name__).info('Stopping apache...')
    if args.topology == 'servers':
        servers = []
        with open(args.servers) as servers_file:
            for line in strip_comments(servers_file):
                servers.append(int(line))
        servers_file.closed
        try:
            reset_apache(servers)
            restart_apache()
        except Exception as e:
            logging.getLogger(__name__).error(e)
    else:
        if args.topology == 'onelink':
            try:
                reset_apache(['127.0.0.1:8080'])
                restart_apache()
            except Exception as e:
                logging.getLogger(__name__).error(e)
        else:
            try:
                reset_apache(['127.0.0.1:8080', '127.0.0.1:8081'])
                restart_apache()
            except Exception as e:
                logging.getLogger(__name__).error(e)

        # Destroy fake NICs
        logging.getLogger(__name__).info('Destroying bandwidth shaper...')
        try:
            check_both('killall -9 click', shouldPrint=False)
            time.sleep(0.1)
        except:
            pass
    logging.getLogger(__name__).info('Network stopped.')
Exemplo n.º 15
0
	
	# set up logging
	if args.verbose:
		level = logging.DEBUG
	else:
		level = logging.INFO

	logging.basicConfig(
		format = "%(levelname) -10s %(asctime)s %(module)s:%(lineno) -7s %(message)s",
		level = level
	)

	# Read event list
	events = []
	with open(args.events) as events_file:
		for i, line in enumerate(strip_comments(events_file)):
			arguments = line.split(' ')
			events.append(Thread(target=execute_event, args=(i, float(arguments[0]), int(arguments[1]), 
				int(arguments[2]), float(arguments[3]), int(arguments[4]), int(arguments[5]))))
	events_file.closed

	for event in events:
		event.start()

	for event in events:
		event.join()

	logging.getLogger(__name__).info('Events finished')


Exemplo n.º 16
0
def install_filters(links_file):
    with open(links_file, "r") as linksf:
        for line in strip_comments(linksf):
            elems = line.split(" ")
            check_output("%s update %s %s -c %i" % (TC_SETUP, elems[0], elems[2], int(elems[1].split("link")[1])))
    linksf.closed