def main_default(type_, local_type=None, trace_=False, **kwargs): """ Default main() method. Parses cmdline args, setups up signal handling, logging, creates the appropriate object and runs it. :param type type_: Primary type to instantiate. :param type local_type: If not `None`, load the topology to check if this is a core or local AS. If it's a core AS, instantiate the primary type, otherwise the local type. :param bool trace_: Should a periodic thread stacktrace report be created? """ handle_signals() parser = argparse.ArgumentParser() parser.add_argument('--log_dir', default="logs/", help='Log dir (Default: logs/)') parser.add_argument( '--spki_cache_dir', default="gen-cache/", help='Cache dir for SCION TRCs and cert chains (Default: gen-cache/)') parser.add_argument('--prom', type=str, help='Address to export prometheus metrics on') parser.add_argument('server_id', help='Server identifier') parser.add_argument('conf_dir', nargs='?', default='.', help='Configuration directory (Default: ./)') args = parser.parse_args() init_logging(os.path.join(args.log_dir, args.server_id)) if local_type is None: inst = type_(args.server_id, args.conf_dir, prom_export=args.prom, spki_cache_dir=args.spki_cache_dir, **kwargs) else: # Load the topology to check if this is a core AD or not topo = Topology.from_file(os.path.join(args.conf_dir, TOPO_FILE)) if topo.is_core_as: inst = type_(args.server_id, args.conf_dir, prom_export=args.prom, spki_cache_dir=args.spki_cache_dir, **kwargs) else: inst = local_type(args.server_id, args.conf_dir, prom_export=args.prom, spki_cache_dir=args.spki_cache_dir, **kwargs) if trace_: trace(inst.id) logging.info("Started %s", args.server_id) inst.run()
def main(): init_logging(CLIENT_LOG_BASE, file_level=logging.DEBUG, console_level=logging.DEBUG) handle_signals() res = test_list() test_lookup(res) test_topology_lookup() test_locations_lookup() test_set_ISD_whitelist() test_clear_ISD_whitelist() test_ISD_endpoints_lookup() test_clear_kbase() test_list()
def setup_main(name, parser=None): handle_signals() parser = parser or argparse.ArgumentParser() parser.add_argument('-l', '--loglevel', default=logging.DEBUG, help='Console logging level (Default: %(default)s)') parser.add_argument('-c', '--client', help='Client address') parser.add_argument('-s', '--server', help='Server address') parser.add_argument('-m', '--mininet', action='store_true', help="Running under mininet") parser.add_argument("--retries", type=int, default=0, help="Number of retries before giving up.") parser.add_argument('--run_server', action='store_true', default=False, help="Run as server") parser.add_argument('--data', default=None, help="Data for client / server split run") parser.add_argument('--port', default=0, help="Port for client / server split run") parser.add_argument('src_ia', nargs='?', help='Src isd-as') parser.add_argument('dst_ia', help='Dst isd-as') args = parser.parse_args() init_logging(None, file_level=logging.NOTSET, console_level=args.loglevel) overlay = get_overlay() if "IPv6" in overlay: if not args.client: args.client = DEFAULT6_CLIENT if not args.server: args.server = DEFAULT6_SERVER else: if not args.client: args.client = "169.254.0.2" if args.mininet else "127.0.0.2" if not args.server: args.server = "169.254.0.3" if args.mininet else "127.0.0.3" if not args.data: args.data = 'data' return args
def setup_main(name, parser=None): handle_signals() parser = parser or argparse.ArgumentParser() parser.add_argument('-l', '--loglevel', default="INFO", help='Console logging level (Default: %(default)s)') parser.add_argument('-c', '--client', help='Client address') parser.add_argument('-s', '--server', help='Server address') parser.add_argument('-m', '--mininet', action='store_true', help="Running under mininet") parser.add_argument("-r", "--runs", type=int, help="Limit the number of pairs tested") parser.add_argument("-w", "--wait", type=float, default=0.0, help="Time in seconds to wait before running") parser.add_argument("--retries", type=int, default=0, help="Number of retries before giving up.") parser.add_argument('src_ia', nargs='?', help='Src isd-as') parser.add_argument('dst_ia', nargs='?', help='Dst isd-as') args = parser.parse_args() init_logging("logs/%s" % name, console_level=args.loglevel) overlay = get_overlay() if "IPv6" in overlay: if not args.client: args.client = DEFAULT6_CLIENT if not args.server: args.server = DEFAULT6_SERVER else: if not args.client: args.client = "169.254.0.2" if args.mininet else "127.0.0.2" if not args.server: args.server = "169.254.0.3" if args.mininet else "127.0.0.3" as_list = _load_as_list() srcs = _parse_locs(args.src_ia, as_list) dsts = _parse_locs(args.dst_ia, as_list) return args, srcs, dsts
def main(): """ Parse the command-line arguments and start the proxy server. """ handle_signals() parser = argparse.ArgumentParser() parser.add_argument("--address", help='IP address of the source SCION Proxy', default='127.0.0.1') parser.add_argument("-p", "--port", help='Port number to run SCION Proxy on', type=int, default=DEFAULT_SERVER_PORT) parser.add_argument("-f", "--forward", help='Forwarding proxy mode', action="store_true") parser.add_argument("-s", "--scion", help='Use SCION multi-path socket', action="store_true") parser.add_argument( "--WARNING-insecure-kbase", dest="kbase", action="store_true", help='Enable SCION knowledge-base. %s' % KBASE_SECURITY_WARN, ) parser.add_argument("-t", "--topo", help='Topology file SCION knowledge-base should use', default='topology/Wide.topo') parser.add_argument("-l", "--loc", help='Locations file SCION knowledge-base should use', default='topology/Wide.locations') parser.add_argument("--source_isd_as", help='ISD-AS of the source SCION Proxy', default='1-4') parser.add_argument("--target_isd_as", help='ISD-AS of the target SCION Proxy', default='3-3') parser.add_argument("--target_address", help='IP address of the target SCION Proxy', default='127.0.0.1') parser.add_argument("--target_port", help='Port of the target SCION Proxy', type=int, default=9090) args = parser.parse_args() if args.forward: init_logging(LOG_BASE + "_forward", file_level=logging.DEBUG, console_level=logging.INFO) logging.info("Operating in forwarding (bridge) mode.") isd_as = ISD_AS(args.source_isd_as) host = HostAddrIPv4(args.address) else: init_logging(LOG_BASE, file_level=logging.DEBUG, console_level=logging.INFO) logging.info("Operating in normal proxy mode.") isd_as = ISD_AS(args.target_isd_as) host = HostAddrIPv4(args.target_address) # start sciond logging.info("Starting sciond for %s", isd_as) api_addr = SCIOND_API_SOCKDIR + "%s-%s.sock" % (isd_as[0], isd_as[1]) sciond = start_sciond(host, api_addr, isd_as) kbase = None if args.scion: logging.info("SCION-socket mode is on.") if args.kbase: if args.forward: logging.warning( "*** SCION-socket knowledge-base is enabled. %s ***", KBASE_SECURITY_WARN) kbase = SocketKnowledgeBase(args.topo, args.loc, ISD_AS(args.source_isd_as), ISD_AS(args.target_isd_as)) else: logging.info("SCION-socket knowledge-base is supported " "only in forwarding mode.") if args.scion and not args.forward: logging.info("Starting the server with SCION multi-path socket.") soc = scion_server_socket((args.target_address, args.port), api_addr, ISD_AS(args.target_isd_as)) else: logging.info("Starting the server with UNIX socket.") soc = unix_server_socket(args.port) worker = threading.Thread(target=serve_forever, args=(soc, args.forward, args.scion, kbase, args.source_isd_as, args.target_isd_as, args.target_address, args.target_port), daemon=True) worker.start() try: worker.join() finally: # Exit gracefully logging.info("Closing the socket.") soc.close() logging.info("Stopping sciond.") sciond.stop()
def main(): """ Parse the command-line arguments and start the proxy server. """ handle_signals() parser = argparse.ArgumentParser() parser.add_argument("-p", "--port", help='Port number to run SCION Proxy on', type=int, default=DEFAULT_SERVER_PORT) parser.add_argument("-f", "--forward", help='Forwarding proxy mode', action="store_true") parser.add_argument("-s", "--scion", help='Use SCION multi-path socket', action="store_true") parser.add_argument("-k", "--kbase", help='Enable SCION knowledge-base', action="store_true") parser.add_argument("-t", "--topo", help='Topology file SCION knowledge-base should use', default='topology/Wide.topo') parser.add_argument("-l", "--loc", help='Locations file SCION knowledge-base should use', default='topology/Wide.locations') parser.add_argument("--source_isd_as", help='ISD-AS of the source SCION Proxy', default='1-4') parser.add_argument("--target_isd_as", help='ISD-AS of the target SCION Proxy', default='3-3') args = parser.parse_args() server_address = DEFAULT_SERVER_IP, args.port if args.forward: init_logging(LOG_BASE + "_forward", file_level=logging.DEBUG, console_level=logging.INFO) logging.info("Operating in forwarding (bridge) mode.") else: init_logging(LOG_BASE, file_level=logging.DEBUG, console_level=logging.INFO) logging.info("Operating in normal proxy mode.") kbase = None if args.scion: logging.info("SCION-socket mode is on.") if args.kbase: if args.forward: logging.info("SCION-socket knowledge-base is enabled.") kbase = SocketKnowledgeBase(args.topo, args.loc, ISD_AS(args.source_isd_as), ISD_AS(args.target_isd_as)) else: logging.info("SCION-socket knowledge-base is supported " "only in forwarding mode.") if args.scion and not args.forward: logging.info("Starting the server with SCION multi-path socket.") soc = scion_server_socket(server_address, args.target_isd_as) else: logging.info("Starting the server with UNIX socket.") soc = unix_server_socket(server_address) try: serve_forever(soc, args.forward, args.scion, kbase, args.source_isd_as, args.target_isd_as) except KeyboardInterrupt: logging.info("Exiting") soc.close()
haddr_parse("IPV4", "127.2.26.254"), dst_isd=2, dst_ad=26, dst_port=rcv_sock.port, payload=payload, path=paths[0]) (next_hop, port) = sender.get_first_hop(spkt) assert next_hop is not None logging.info("Sending %d payload bytes (%d packets x %d bytes )" % (PACKETS_NO * PAYLOAD_SIZE, PACKETS_NO, PAYLOAD_SIZE)) for _ in range(PACKETS_NO): sender.send(spkt, next_hop, port) time.sleep(SLEEP) logging.info("Sending finished") recv_t.join() if self.rate < 10.0: sys.exit(0) else: sys.exit(int(self.rate)) if __name__ == "__main__": init_logging("logs/bw_test", console_level=logging.DEBUG) handle_signals() try: TestBandwidth().test() except SystemExit: logging.info("Exiting") raise except: log_exception("Exception in main process:") logging.critical("Exiting") sys.exit(1)
def test_basic(self, sgnl): handle_signals() sgnl.assert_has_calls([call(sig, _signal_handler) for sig in _SIG_MAP.keys()])