Add working directory option

refs: #3266

Change-Id: Ifd953b242c99f75c68eb3c63ef5e51ef46195b8b
diff --git a/bin/minindn b/bin/minindn
index e1d241d..bf5a525 100755
--- a/bin/minindn
+++ b/bin/minindn
@@ -104,6 +104,7 @@
         self.isCliEnabled = True
         self.nPings = 300
         self.testbed = False
+        self.workDir = "/tmp"
 
 def parse_args():
     usage = """Usage: minindn [template_file] [ -t | --testbed ]
@@ -138,6 +139,9 @@
     parser.add_option("-t", "--testbed", action="store_true", dest="testbed", default=False,
     help="instantiates NDN Testbed")
 
+    parser.add_option("--work-dir", action="store", dest="workDir", default="/tmp",
+    help="Specify the working directory; default is /tmp")
+
     parser.add_option('--version', '-V', action='callback', callback=printVersion,
     help='Displays version information')
 
@@ -151,6 +155,7 @@
     options.isCliEnabled = args.isCliEnabled
     options.nPings = args.nPings
     options.testbed = args.testbed
+    options.workDir = args.workDir
 
     if options.experimentName is not None and options.experimentName not in ExperimentManager.getExperimentNames():
         print("No experiment named %s" % options.experimentName)
@@ -164,7 +169,7 @@
     return options
 
 class NdnTopo(Topo):
-    def __init__(self, conf_arq, **opts):
+    def __init__(self, conf_arq, workDir, **opts):
         Topo.__init__(self, **opts)
 
         global hosts_conf
@@ -178,7 +183,7 @@
         for host in hosts_conf:
             if host.cpu != None and self.isLimited != True:
                 self.isLimited = True
-            self.addHost(host.name, app=host.app, params=host.uri_tuples, cpu=host.cpu,cores=host.cores,cache=host.cache)
+            self.addHost(host.name, app=host.app, params=host.uri_tuples, cpu=host.cpu,cores=host.cores,cache=host.cache, workdir=workDir)
 
         for link in links_conf:
             if len(link.linkDict) == 0:
@@ -210,7 +215,7 @@
     os.system("sudo cp /usr/local/etc/ndn/nfd.conf.sample %s" % nfdConfFile)
     os.system("sudo sed -i \'s|default_level [A-Z]*$|default_level $LOG_LEVEL|g\' %s" % nfdConfFile)
 
-    topo = NdnTopo(template_file)
+    topo = NdnTopo(template_file, options.workDir)
 
     t = datetime.datetime.now()
 
diff --git a/ndn/ndn_host.py b/ndn/ndn_host.py
index bc820c2..0bed247 100644
--- a/ndn/ndn_host.py
+++ b/ndn/ndn_host.py
@@ -93,6 +93,11 @@
         if not NdnHost.inited:
             NdnHostCommon.init()
 
+        # Create home directory for a node
+        self.homeFolder = "%s/%s" % (self.params['workdir'], self.name)
+        self.cmd("mkdir -p %s" % self.homeFolder)
+        self.cmd("cd %s" % self.homeFolder)
+
         self.nfd = Nfd(self)
         self.nfd.start()
 
@@ -123,6 +128,11 @@
         if not NdnHost.inited:
             NdnHostCommon.init()
 
+        # Create home directory for a node
+        self.homeFolder = "%s/%s" % (self.params['workdir'], self.name)
+        self.cmd("mkdir -p %s" % self.homeFolder)
+        self.cmd("cd %s" % self.homeFolder)
+
         self.nfd = Nfd(self)
         self.nfd.start()
 
diff --git a/ndn/nfd.py b/ndn/nfd.py
index a56115b..36dcf96 100644
--- a/ndn/nfd.py
+++ b/ndn/nfd.py
@@ -33,15 +33,10 @@
 
         self.logLevel = node.params["params"].get("nfd-log-level", "NONE")
 
-        # Create home directory for a node
-        node.cmd("cd /tmp && mkdir %s" % node.name)
-        node.cmd("cd %s" % node.name)
-
-        self.homeFolder = "/tmp/%s" % node.name
-        self.confFile = "%s/%s.conf" % (self.homeFolder, node.name)
-        self.logFile = "%s/%s.log" % (self.homeFolder, node.name)
+        self.confFile = "%s/%s.conf" % (node.homeFolder, node.name)
+        self.logFile = "%s/%s.log" % (node.homeFolder, node.name)
         self.sockFile = "/var/run/%s.sock" % node.name
-        self.ndnFolder = "%s/.ndn" % self.homeFolder
+        self.ndnFolder = "%s/.ndn" % node.homeFolder
         self.clientConf = "%s/client.conf" % self.ndnFolder
 
         # Copy nfd.conf file from /usr/local/etc/mini-ndn to the node's home
@@ -61,7 +56,7 @@
         node.cmd("sudo sed -i 's|nfd.sock|%s.sock|g' %s" % (node.name, self.clientConf))
 
         # Change home folder
-        node.cmd("export HOME=%s" % self.homeFolder)
+        node.cmd("export HOME=%s" % node.homeFolder)
 
     def start(self):
         NdnApplication.start(self, "sudo nfd --config %s 2>> %s &" % (self.confFile, self.logFile))
diff --git a/ndn/nlsr.py b/ndn/nlsr.py
index 4a90e30..2da0894 100644
--- a/ndn/nlsr.py
+++ b/ndn/nlsr.py
@@ -27,10 +27,10 @@
     def __init__(self, node):
         NdnApplication.__init__(self, node)
         self.routerName = "/%sC1.Router/cs/%s" % ('%', node.name)
-        self.confFile = "/tmp/%s/nlsr.conf" % node.name
+        self.confFile = "%s/nlsr.conf" % node.homeFolder
 
         # Make directory for log file
-        self.logDir = "/tmp/%s/log" % node.name
+        self.logDir = "%s/log" % node.homeFolder
         node.cmd("mkdir %s" % self.logDir)
 
         # Configure basic router information in nlsr.conf based on host name
@@ -61,7 +61,7 @@
 
     def createConfigFile(self):
 
-        filePath = "/tmp/%s/nlsr.conf" % self.node.name
+        filePath = "%s/nlsr.conf" % self.node.homeFolder
 
         configFile = open(filePath, 'r')
         oldContent = configFile.read()
@@ -96,8 +96,8 @@
         general += "  site /edu\n"
         general += "  router /%C1.Router/cs/" + self.node.name + "\n"
         general += "  log-level " + self.logLevel + "\n"
-        general += "  log-dir /tmp/" + self.node.name + "/log\n"
-        general += "  seq-dir /tmp/" + self.node.name + "/log\n"
+        general += "  log-dir " + self.node.homeFolder + "/log\n"
+        general += "  seq-dir " + self.node.homeFolder + "/log\n"
         general += "}\n"
 
         return general