self.simulation.local_socket,
self.simulation.remote_socket)
- def send_msg(self, msg, *args):
+ def send_msg(self, msg, *args, **kwargs):
args = list(args)
-
+
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.connect(self.simulation.local_socket)
+ timeout = kwargs.get("timeout")
+ if timeout:
+ sock.settimeout(timeout)
+
args.insert(0, msg)
def encode(arg):
arg = cPickle.dumps(arg)
encoded = "|".join(map(encode, args))
sock.send("%s\n" % encoded)
-
+
reply = sock.recv(1024)
return cPickle.loads(base64.b64decode(reply))
- def create(self, clazzname, *args):
+ def create(self, clazzname, *args, **kwargs):
args = list(args)
args.insert(0, clazzname)
- return self.send_msg(NS3WrapperMessage.CREATE, *args)
+ return self.send_msg(NS3WrapperMessage.CREATE, *args, **kwargs)
def factory(self, type_name, **kwargs):
args = [type_name]
args.append(kwargs)
- return self.send_msg(NS3WrapperMessage.FACTORY, *args)
+ return self.send_msg(NS3WrapperMessage.FACTORY, *args, **kwargs)
- def invoke(self, uuid, operation, *args):
+ def invoke(self, uuid, operation, *args, **kwargs):
args = list(args)
args.insert(0, operation)
args.insert(0, uuid)
- return self.send_msg(NS3WrapperMessage.INVOKE, *args)
+ return self.send_msg(NS3WrapperMessage.INVOKE, *args, **kwargs)
- def set(self, uuid, name, value):
+ def set(self, uuid, name, value, **kwargs):
args = [uuid, name, value]
- return self.send_msg(NS3WrapperMessage.SET, *args)
+ return self.send_msg(NS3WrapperMessage.SET, *args, **kwargs)
- def get(self, uuid, name):
+ def get(self, uuid, name, **kwargs):
args = [uuid, name]
- return self.send_msg(NS3WrapperMessage.GET, *args)
+ return self.send_msg(NS3WrapperMessage.GET, *args, **kwargs)
- def enable_trace(self, *args):
- return self.send_msg(NS3WrapperMessage.ENABLE_TRACE, *args)
+ def enable_trace(self, *args, **kwargs):
+ return self.send_msg(NS3WrapperMessage.ENABLE_TRACE, *args, **kwargs)
- def flush(self):
- return self.send_msg(NS3WrapperMessage.FLUSH, [])
+ def flush(self, **kwargs):
+ args = []
+ return self.send_msg(NS3WrapperMessage.FLUSH, *args, **kwargs)
- def start(self):
- return self.send_msg(NS3WrapperMessage.START, [])
+ def start(self, **kwargs):
+ args = []
+ return self.send_msg(NS3WrapperMessage.START, *args, **kwargs)
- def stop(self, time = None):
+ def stop(self, **kwargs):
args = []
- if time:
- args.append(time)
+ time = kwargs.get("time")
+ if time: args.append(time)
- return self.send_msg(NS3WrapperMessage.STOP, *args)
+ return self.send_msg(NS3WrapperMessage.STOP, *args, **kwargs)
- def shutdown(self):
+ def shutdown(self, **kwargs):
+ args = []
ret = None
try:
- ret = self.send_msg(NS3WrapperMessage.SHUTDOWN, [])
+ ret = self.send_msg(NS3WrapperMessage.SHUTDOWN, *args, **kwargs)
except:
pass
from nepi.resources.linux.application import LinuxApplication
from nepi.util.timefuncs import tnow, tdiffsec
from nepi.resources.ns3.ns3simulation import NS3Simulation
-from nepi.resources.ns3.ns3wrapper import GLOBAL_VALUE_UUID
+from nepi.resources.ns3.ns3wrapper import SIMULATOR_UUID, GLOBAL_VALUE_UUID
from nepi.resources.linux.ns3.ns3client import LinuxNS3Client
import os
type = Types.Bool,
flags = Flags.Design)
- stop_time = Attribute("stopTime",
- "Time to stop the simulation",
- flags = Flags.Design)
-
ns_log = Attribute("nsLog",
"NS_LOG environment variable. " \
" Will only generate output if ns-3 is compiled in DEBUG mode. ",
cls._register_attribute(impl_type)
cls._register_attribute(sched_type)
cls._register_attribute(check_sum)
- cls._register_attribute(stop_time)
cls._register_attribute(ns_log)
cls._register_attribute(verbose)
stype = self.create("StringValue", sched_type)
self.invoke(GLOBAL_VALUE_UUID, "Bind", "SchedulerType", btrue)
- if self._attrs.get("stopTime").has_changed():
- stop_time = self.get("stopTime")
- self.stop(time = stop_time)
-
def do_deploy(self):
if not self.node or self.node.state < ResourceState.READY:
self.debug("---- RESCHEDULING DEPLOY ---- node state %s " % self.node.state )
"""
if self.state == ResourceState.STARTED:
self._client.stop()
- self._client.shutdown()
- LinuxApplication.do_stop(self)
+ self.set_stopped()
def do_release(self):
self.info("Releasing resource")
self.node.execute(tear_down)
self.do_stop()
+ self._client.shutdown()
+ LinuxApplication.do_stop(self)
super(LinuxApplication, self).do_release()
- @property
- def state(self):
- """ Returns the state of the application
- """
- state = super(LinuxApplication, self).state
- if state == ResourceState.STARTED:
- # Check simulator
- is_finished = self.invoke(SIMULATOR_UUID, "IsFinished")
- if is_finished:
- self.do_stop()
-
- return self._state
-
@property
def _start_command(self):
command = []
def __init__(self):
super(NS3Client, self).__init__()
- def create(self, clazzname, *args):
+ def create(self, *args, **kwargs):
pass
- def factory(self, type_name, **kwargs):
+ def factory(self, *args, **kwargs):
pass
- def invoke(self, uuid, operation, *args):
+ def invoke(self, *args, **kwargs):
pass
- def set(self, uuid, name, value):
+ def set(self, *args, **kwargs):
pass
- def get(self, uuid, name):
+ def get(self, *args, **kwargs):
pass
- def trace(self, *args):
+ def trace(self, *args, **kwargs):
pass
- def flush(self):
+ def flush(self, *args, **kwargs):
pass
- def start(self):
+ def start(self, *args, **kwargs):
pass
- def stop(self, time = None):
+ def stop(self, *args, **kwargs):
pass
- def shutdown(self):
+ def shutdown(self, *args, **kwargs):
pass
def client(self):
return self._client
- def create(self, clazzname, *args):
- return self.client.create(clazzname, *args)
+ def create(self, *args, **kwargs):
+ return self.client.create(*args, **kwargs)
- def factory(self, type_name, **kwargs):
- return self.client.factory(type_name, **kwargs)
+ def factory(self, *args, **kwargs):
+ return self.client.factory(*args, **kwargs)
- def invoke(self, uuid, operation, *args):
- return self.client.invoke(uuid, operation, *args)
+ def invoke(self, *args, **kwargs):
+ return self.client.invoke(*args, **kwargs)
- def set(self, uuid, name, value):
- return self.client.set(uuid, name, value)
+ def set(self, *args, **kwargs):
+ return self.client.set(*args, **kwargs)
- def get(self, uuid, name):
- return self.client.get(uuid, name)
+ def get(self, *args, **kwargs):
+ return self.client.get(*args, **kwargs)
- def enable_trace(self, *args):
- return self.client.enable_trace(*args)
+ def enable_trace(self, *args, **kwargs):
+ return self.client.enable_trace(*args, **kwargs)
- def flush(self):
- return self.client.flush()
+ def flush(self, *args, **kwargs):
+ return self.client.flush(*args, **kwargs)
- def start(self):
- return self.client.start()
+ def start(self, *args, **kwargs):
+ return self.client.start(*args, **kwargs)
- def stop(self, time = None):
- return self.client.stop(time)
+ def stop(self, *args, **kwargs):
+ return self.client.stop(*args, **kwargs)
- def shutdown(self):
- return self.client.shutdown()
+ def shutdown(self, *args, **kwargs):
+ return self.client.shutdown(*args, **kwargs)
result = method(*realargs)
- if not result:
+ if result is None or \
+ isinstance(result, bool):
return result
-
+
newuuid = self.make_uuid()
self._objects[newuuid] = result
#self.fedora_host = "peeramide.irisa.fr"
self.fedora_user = "inria_test"
- def ztest_simple_ping(self):
+ def test_simple_ping(self):
ec = ExperimentController(exp_id = "test-ns3-ping")
node = ec.register_resource("LinuxNode")
ec.set(node, "hostname", self.fedora_host)
ec.set(node, "username", self.fedora_user)
ec.set(node, "cleanProcesses", True)
- ec.set(node, "cleanHome", True)
+ #ec.set(node, "cleanHome", True)
simu = ec.register_resource("LinuxNS3Simulation")
ec.set(simu, "verbose", True)
ec.shutdown()
- def ztest_real_time(self):
+ def test_real_time(self):
ec = ExperimentController(exp_id = "test-ns3-real-time")
node = ec.register_resource("LinuxNode")
ec.set(node, "hostname", self.fedora_host)
ec.set(node, "username", self.fedora_user)
ec.set(node, "cleanProcesses", True)
- ec.set(node, "cleanHome", True)
+ #ec.set(node, "cleanHome", True)
simu = ec.register_resource("LinuxNS3Simulation")
ec.set(simu, "verbose", True)
ec.shutdown()
- def test_stop_time(self):
- ec = ExperimentController(exp_id = "test-ns3-stop-time")
-
- node = ec.register_resource("LinuxNode")
- ec.set(node, "hostname", self.fedora_host)
- ec.set(node, "username", self.fedora_user)
- ec.set(node, "cleanProcesses", True)
- #ec.set(node, "cleanHome", True)
-
- simu = ec.register_resource("LinuxNS3Simulation")
- ec.set(simu, "verbose", True)
- ec.set(simu, "simulatorImplementationType", "ns3::RealtimeSimulatorImpl")
- ec.set(simu, "checksumEnabled", True)
- ec.set(simu, "stopTime", "20s")
- ec.register_connection(simu, node)
-
- ec.deploy()
-
- ec.wait_finished([simu])
-
- rm = ec.get_resource(simu)
- start_time = rm.start_time
- stop_time = rm.stop_time
- delta = stop_time - start_time
-
- print delta.seconds
- self.assertTrue(delta.seconds >= 20)
- self.assertTrue(delta.seconds < 25)
-
- ec.shutdown()
-
if __name__ == '__main__':
unittest.main()