ndn: Add NLSR experiments

Change-Id: I0b86b121a5c8bf6a6e6e8df5027fe49561a9283b
diff --git a/ndn/experiments/experiment.py b/ndn/experiments/experiment.py
new file mode 100644
index 0000000..9487e22
--- /dev/null
+++ b/ndn/experiments/experiment.py
@@ -0,0 +1,70 @@
+#!/usr/bin/python
+
+import time
+import sys
+
+class Experiment:
+
+    def __init__(self, net, nodes, convergenceTime, nPings, strategy):
+        self.net = net
+        self.nodes = nodes
+        self.convergenceTime = convergenceTime
+        self.nPings = nPings
+        self.strategy = strategy
+
+    def start(self):
+        self.setup()
+        self.run()
+
+    def setup(self):
+        for host in self.net.hosts:
+            # Set strategy
+            host.nfd.setStrategy("/ndn/edu", self.strategy)
+
+            # Start ping server
+            host.cmd("ndnpingserver /ndn/edu/" + str(host) + " > ping-server &")
+
+            # Create folder to store ping data
+            host.cmd("mkdir ping-data")
+
+        # Wait for convergence time period
+        print "Waiting " + str(self.convergenceTime) + " seconds for convergence..."
+        time.sleep(self.convergenceTime)
+        print "...done"
+
+        # To check whether all the nodes of NLSR have converged
+        didNlsrConverge = True
+
+        # Checking for convergence
+        for host in self.net.hosts:
+            statusRouter = host.cmd("nfd-status -b | grep /ndn/edu/%C1.Router/cs/")
+            statusPrefix = host.cmd("nfd-status -b | grep /ndn/edu/")
+            didNodeConverge = True
+            for node in self.nodes.split(","):
+                    if ("/ndn/edu/%C1.Router/cs/" + node) not in statusRouter:
+                        didNodeConverge = False
+                        didNlsrConverge = False
+                    if str(host) != node and ("/ndn/edu/" + node) not in statusPrefix:
+                        didNodeConverge = False
+                        didNlsrConverge = False
+
+            host.cmd("echo " + str(didNodeConverge) + " > convergence-result &")
+
+        if didNlsrConverge:
+            print("NLSR has successfully converged.")
+        else:
+            print("NLSR has not converged. Exiting...")
+            for host in self.net.hosts:
+                host.nfd.stop()
+            sys.exit(1)
+
+    def startPings(self):
+        for host in self.net.hosts:
+            for other in self.net.hosts:
+                # Do not ping self
+                if host.name != other.name:
+                    # Use "&" to run in background and perform parallel pings
+                    print "Scheduling ping(s) from %s to %s" % (host.name, other.name)
+                    host.cmd("ndnping -t -c "+ str(self.nPings) + " /ndn/edu/" + other.name + " > ping-data/" + other.name + ".txt &")
+                    time.sleep(0.2)
+