ndn: Add NLSR experiments

Change-Id: I0b86b121a5c8bf6a6e6e8df5027fe49561a9283b
diff --git a/ndn/experiments/failure_experiment.py b/ndn/experiments/failure_experiment.py
new file mode 100644
index 0000000..d4e9380
--- /dev/null
+++ b/ndn/experiments/failure_experiment.py
@@ -0,0 +1,42 @@
+#!/usr/bin/python
+
+from ndn.experiments.experiment import Experiment
+from ndn.nlsr import Nlsr
+
+import time
+
+class FailureExperiment(Experiment):
+
+    def __init__(self, net, nodes, convergenceTime, strategy):
+
+        Experiment.__init__(self, net, nodes, convergenceTime, 300, strategy)
+        self.PING_COLLECTION_TIME_BEFORE_FAILURE = 60
+        self.PING_COLLECTION_TIME_AFTER_RECOVERY = 90
+
+    def run(self):
+        self.startPings()
+
+        # After the pings are scheduled, collect pings for 1 minute
+        time.sleep(self.PING_COLLECTION_TIME_BEFORE_FAILURE)
+
+        # Bring down CSU
+        for host in self.net.hosts:
+            if host.name == "csu":
+                print("Bringing CSU down")
+                host.nfd.stop()
+                break
+
+        # CSU is down for 2 minutes
+        time.sleep(120)
+
+        # Bring CSU back up
+        for host in self.net.hosts:
+            if host.name == "csu":
+                print("Bringing CSU up")
+                host.nfd.start()
+                host.nlsr.start()
+                host.nfd.setStrategy("/ndn/edu", self.strategy)
+                host.cmd("ndnpingserver /ndn/edu/" + str(host) + " > ping-server &")
+
+        # Collect pings for more seconds after CSU is up
+        time.sleep(self.PING_COLLECTION_TIME_AFTER_RECOVERY)