X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Fresources%2Fns3%2Fns3server.py;h=c4bcc5ac5bc571470f6fe8b8c75aeba21e5a4b93;hb=aa88e26ae289dd86610141b6d9f9103b53494f4d;hp=f761b86e662880a0c11a039167128cb766bd5184;hpb=1e2eb157cb569e9c28a5b7888ed97076d27414cb;p=nepi.git diff --git a/src/nepi/resources/ns3/ns3server.py b/src/nepi/resources/ns3/ns3server.py index f761b86e..c4bcc5ac 100644 --- a/src/nepi/resources/ns3/ns3server.py +++ b/src/nepi/resources/ns3/ns3server.py @@ -43,70 +43,50 @@ class NS3WrapperMessage: def handle_message(ns3_wrapper, msg_type, args, kwargs): if msg_type == NS3WrapperMessage.SHUTDOWN: ns3_wrapper.shutdown() - - ns3_wrapper.logger.debug("SHUTDOWN") - + return "BYEBYE" if msg_type == NS3WrapperMessage.STOP: time = kwargs.get("time") - ns3_wrapper.logger.debug("STOP time=%s" % str(time)) - ns3_wrapper.stop(time=time) + return "STOPPED" if msg_type == NS3WrapperMessage.START: - ns3_wrapper.logger.debug("START") - ns3_wrapper.start() + return "STARTED" if msg_type == NS3WrapperMessage.CREATE: clazzname = args.pop(0) - ns3_wrapper.logger.debug("CREATE %s %s" % (clazzname, str(args))) - - uuid = ns3_wrapper.create(clazzname, *args) - return uuid - + return ns3_wrapper.create(clazzname, *args) + if msg_type == NS3WrapperMessage.FACTORY: type_name = args.pop(0) - ns3_wrapper.logger.debug("FACTORY %s %s" % (type_name, str(kwargs))) - - uuid = ns3_wrapper.factory(type_name, **kwargs) - return uuid - + return ns3_wrapper.factory(type_name, **kwargs) + if msg_type == NS3WrapperMessage.INVOKE: uuid = args.pop(0) operation = args.pop(0) - - ns3_wrapper.logger.debug("INVOKE %s %s %s %s " % (uuid, operation, - str(args), str(kwargs))) - - uuid = ns3_wrapper.invoke(uuid, operation, *args, **kwargs) - return uuid + + return ns3_wrapper.invoke(uuid, operation, *args, **kwargs) if msg_type == NS3WrapperMessage.GET: uuid = args.pop(0) name = args.pop(0) - ns3_wrapper.logger.debug("GET %s %s" % (uuid, name)) - - value = ns3_wrapper.get(uuid, name) - return value - + return ns3_wrapper.get(uuid, name) + if msg_type == NS3WrapperMessage.SET: uuid = args.pop(0) name = args.pop(0) value = args.pop(0) - ns3_wrapper.logger.debug("SET %s %s %s" % (uuid, name, str(value))) + return ns3_wrapper.set(uuid, name, value) - value = ns3_wrapper.set(uuid, name, value) - return value - if msg_type == NS3WrapperMessage.FLUSH: # Forces flushing output and error streams. # NS-3 output will stay unflushed until the program exits or @@ -167,7 +147,7 @@ def send_reply(conn, reply): conn.send("%s\n" % encoded) def get_options(): - usage = ("usage: %prog -S -L -v ") + usage = ("usage: %prog -S -L -D -v ") parser = OptionParser(usage = usage) @@ -179,6 +159,12 @@ def get_options(): help = "NS_LOG environmental variable to be set", default = "", type="str") + parser.add_option("-D", "--enable-dump", dest="enable_dump", + help = "Enable dumping the remote executed ns-3 commands to a script " + "in order to later reproduce and debug the experiment", + action = "store_true", + default = False) + parser.add_option("-v", "--verbose", help="Print debug output", action="store_true", @@ -186,9 +172,11 @@ def get_options(): (options, args) = parser.parse_args() - return (options.socket_name, options.verbose, options.ns_log) + return (options.socket_name, options.verbose, options.ns_log, + options.enable_dump) -def run_server(socket_name, level = logging.INFO, ns_log = None): +def run_server(socket_name, level = logging.INFO, ns_log = None, + enable_dump = False): # Sets NS_LOG environmental variable for NS debugging if ns_log: @@ -196,7 +184,7 @@ def run_server(socket_name, level = logging.INFO, ns_log = None): ###### ns-3 wrapper instantiation - ns3_wrapper = NS3Wrapper(loglevel=level) + ns3_wrapper = NS3Wrapper(loglevel=level, enable_dump = enable_dump) ns3_wrapper.logger.info("STARTING...") @@ -219,7 +207,7 @@ def run_server(socket_name, level = logging.INFO, ns_log = None): if not msg_type: # Ignore - connection lost - break + continue if msg_type == NS3WrapperMessage.SHUTDOWN: stop = True @@ -235,13 +223,16 @@ def run_server(socket_name, level = logging.INFO, ns_log = None): try: send_reply(conn, reply) except socket.error: - break + import traceback + err = traceback.format_exc() + ns3_wrapper.logger.error(err) + raise ns3_wrapper.logger.info("EXITING...") if __name__ == '__main__': - (socket_name, verbose, ns_log) = get_options() + (socket_name, verbose, ns_log, enable_dump) = get_options() ## configure logging FORMAT = "%(asctime)s %(name)s %(levelname)-4s %(message)s" @@ -250,5 +241,5 @@ if __name__ == '__main__': logging.basicConfig(format = FORMAT, level = level) ## Run the server - run_server(socket_name, level, ns_log) + run_server(socket_name, level, ns_log, enable_dump)