command = self.get("command")
env = self.get("env")
- if command:
- # We want to make sure the ccnd is running
- # before the experiment starts.
- # Run the command as a bash script in background,
- # in the host ( but wait until the command has
- # finished to continue )
- env = self.replace_paths(env)
- command = self.replace_paths(command)
+ # We want to make sure the ccnd is running
+ # before the experiment starts.
+ # Run the command as a bash script in background,
+ # in the host ( but wait until the command has
+ # finished to continue )
+ env = self.replace_paths(env)
+ command = self.replace_paths(command)
+
+ shfile = os.path.join(self.app_home, "start.sh")
+ self.node.run_and_wait(command, self.run_home,
+ shfile = shfile,
+ overwrite = False,
+ env = env,
+ raise_on_error = True)
- shfile = os.path.join(self.app_home, "start.sh")
- self.node.run_and_wait(command, self.run_home,
- shfile = shfile,
- overwrite = False,
- env = env,
- raise_on_error = True)
-
def start(self):
if self._state == ResourceState.READY:
command = self.get("command")
from nepi.util.timefuncs import tnow
import os
+import socket
+import time
# TODO: Add rest of options for ccndc!!!
flags = Flags.ExecReadOnly)
host = Attribute("host",
- "Peer host used in network connection for this FIB entry. ",
+ "Peer hostname used in network connection for this FIB entry. ",
flags = Flags.ExecReadOnly)
port = Attribute("port",
"for this FIB entry.",
flags = Flags.ExecReadOnly)
+ ip = Attribute("ip",
+ "Peer host public IP used in network connection for this FIB entry. ",
+ flags = Flags.ReadOnly)
+
cls._register_attribute(uri)
cls._register_attribute(protocol)
cls._register_attribute(host)
cls._register_attribute(port)
+ cls._register_attribute(ip)
@classmethod
def _register_traces(cls):
self.ec.schedule(reschedule_delay, self.deploy)
else:
try:
+ if not self.get("ip"):
+ host = self.get("host")
+ ip = socket.gethostbyname(host)
+ self.set("ip", ip)
+
if not self.get("command"):
self.set("command", self._start_command)
env = env and self.replace_paths(env)
command = self.replace_paths(command)
- (out, err), proc = self.execute_command(command, env)
+ # ccndc seems to return exitcode OK even if a (dns) error
+ # occurred, so we need to account for this case here.
+ (out, err), proc = self.execute_command(command,
+ env, blocking = True)
if proc.poll():
self._state = ResourceState.FAILED
msg = "Failed to execute command"
self.error(msg, out, err)
raise RuntimeError, msg
-
+
def configure(self):
if self.trace_enabled("ping"):
self.info("Configuring PING trace")
def _start_command(self):
uri = self.get("uri") or ""
protocol = self.get("protocol") or ""
- host = self.get("host") or ""
+ ip = self.get("ip") or ""
port = self.get("port") or ""
# add ccnx:/example.com/ udp 224.0.0.204 52428
return "ccndc add %(uri)s %(protocol)s %(host)s %(port)s" % ({
"uri" : uri,
"protocol": protocol,
- "host": host,
+ "host": ip,
"port": port
})
def _stop_command(self):
uri = self.get("uri") or ""
protocol = self.get("protocol") or ""
- host = self.get("host") or ""
+ ip = self.get("ip") or ""
port = self.get("port") or ""
# add ccnx:/example.com/ udp 224.0.0.204 52428
return "ccndc del %(uri)s %(protocol)s %(host)s %(port)s" % ({
"uri" : uri,
"protocol": protocol,
- "host": host,
+ "host": ip,
"port": port
})