Added copyright message to the big buck bunny stream for ccnx planetlab experiments
[nepi.git] / examples / ccnx / planetlab_ccnx_unicast.py
index 3b5a673..0a13144 100644 (file)
@@ -46,8 +46,12 @@ def create_slice_desc(slicename, plc_host, pl_user, pl_pwd, pl_ssh_key,
     slice_desc.set_attribute_value("authPass", pl_pwd)
     slice_desc.set_attribute_value("plcHost", plc_host)
     slice_desc.set_attribute_value("tapPortBase", port_base)
+    slice_desc.set_attribute_value("p2pDeployment", True)
     # Kills all running processes before starting the experiment
-    slice_desc.set_attribute_value("dedicatedSlice", True)
+    slice_desc.set_attribute_value("cleanProc", True)
+    # NOTICE: Setting 'cleanHome' to 'True' will erase all previous
+    # folders in the sliver Home directory, including result files!
+    #slice_desc.set_attribute_value("cleanHome", True)
     slice_desc.set_attribute_value("plLogLevel", "DEBUG")
     return slice_desc
  
@@ -63,8 +67,22 @@ def create_node(hostname, pl_inet, slice_desc):
 
 def create_ccnd(pl_node, routes, slice_desc):
     pl_app = slice_desc.create("CCNxDaemon")
+    
+    # We can specify a default ccnx version to be either ccnx-0.5.1 or ccnx-0.6.0
+    #pl_app.set_attribute_value("ccnxversion", "ccnx-0.5.1")
+    
+    # We can also specify a custom local source and build and install directives
+    path_to_source = os.path.join(os.path.dirname(os.path.abspath(__file__)),
+        "ccnx-0.6.0rc3.tar.gz")
+    pl_app.set_attribute_value("sources", path_to_source)
+    pl_app.set_attribute_value("build", 
+            "tar xzf ${SOURCES}/ccnx-0.6.0rc3.tar.gz && "
+            "cd ./ccnx-0.6.0rc3 && "
+            "./configure && make ")
+    pl_app.set_attribute_value("install", "cp -r ./ccnx-0.6.0rc3/bin ${SOURCES}")
     # We use a wildcard to replace the public IP address of the node during runtime
     routes = "|".join(map(lambda route: "udp {#[iface_%s].addr[0].[Address]#}" % route, routes))
+    
     # Add multicast ccn routes 
     pl_app.set_attribute_value("ccnroutes", routes)
     pl_app.enable_trace("stdout")
@@ -87,11 +105,17 @@ def exec_ccncatchunks(slicename, hostname):
     login = "%s@%s" % (slicename, hostname)
     command = 'PATH=$PATH:$(ls | egrep nepi-ccnd- | head -1)/bin; ccncatchunks2 ccnx:/VIDEO'
     proc1 = subprocess.Popen(['ssh', login, command], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell = False)
-    proc2 = subprocess.Popen(['vlc', '-'], stdin=proc1.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+    proc2 = subprocess.Popen(['vlc', 
+        '--sub-filter', 'marq', 
+        '--marq-marquee', 
+        '(c) copyright 2008, Blender Foundation / www.bigbuckbunny.org', 
+        '--marq-position=8', 
+        '--no-video-title-show',  '-'], 
+        stdin=proc1.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
     return proc2
 
 def create_ed(hostnames, vsys_vnet, slicename, plc_host, pl_user, pl_pwd, pl_ssh_key, 
-        port_base, root_dir):
+        port_base, root_dir, delay):
 
     # Create the experiment description object
     exp_desc = ExperimentDescription()
@@ -130,11 +154,11 @@ def create_ed(hostnames, vsys_vnet, slicename, plc_host, pl_user, pl_pwd, pl_ssh
     return exp_desc, pl_nodes, hostname, pl_app
 
 def run(hostnames, vsys_vnet, slicename, plc_host, pl_user, pl_pwd, pl_ssh_key, 
-        port_base, root_dir):
+        port_base, root_dir, delay):
 
     exp_desc, pl_nodes, hostname, pl_app = create_ed(hostnames, vsys_vnet, 
             slicename, plc_host, pl_user, pl_pwd, pl_ssh_key, port_base, 
-            root_dir)
+            root_dir, delay)
 
     xml = exp_desc.to_xml()
     controller = ExperimentController(xml, root_dir)
@@ -143,21 +167,37 @@ def run(hostnames, vsys_vnet, slicename, plc_host, pl_user, pl_pwd, pl_ssh_key,
     while not TERMINATE and controller.status(pl_app.guid) == AS.STATUS_NOT_STARTED:
         time.sleep(0.5)
 
-    proc = None
+    proc1 = None
     if not TERMINATE:
         hostname = hostnames[-1]
-        proc = exec_ccncatchunks(slicename, hostname)
+        proc1 = exec_ccncatchunks(slicename, hostname)
+
+    if not TERMINATE and proc1:
+        time.sleep(delay)
+
+    proc2 = None
+    if not TERMINATE:
+        hostname = hostnames[-2]
+        proc2 = exec_ccncatchunks(slicename, hostname)
 
-    while not TERMINATE and proc and proc.poll() is None:
+    while not TERMINATE and proc1 and proc2 and proc2.poll() is None:
         time.sleep(0.5)
-    
-    if proc:
-        if proc.poll() < 1:
-           err = proc.stderr.read()
-           print "ERROR ", err
+   
+    if proc1:
+        if proc1.poll() < 1:
+           err = proc1.stderr.read()
+           print "Stream 1 ERROR ", err
+        else:   
+           out = proc1.stdout.read()
+           print "Stream 1 OUTPUT ", out
+
+    if proc2:
+        if proc2.poll() < 1:
+           err = proc2.stderr.read()
+           print "Stream 2 ERROR ", err
         else:   
-           out = proc.stdout.read()
-           print "OUTPUT ", out
+           out = proc2.stdout.read()
+           print "Stream 2 OUTPUT ", out
 
     controller.stop()
     controller.shutdown()
@@ -180,7 +220,7 @@ if __name__ == '__main__':
                  'merkur.planetlab.haw-hamburg.de',
                  'planetlab1.cs.uit.no',
                  'planetlab3.cs.st-andrews.ac.uk',
-                 'planetlab2.cs.uoi.gr',
+                 #'planetlab2.cs.uoi.gr',
                  'planetlab3.xeno.cl.cam.ac.uk',
                  'planet2.inf.tu-dresden.de',
                  'planetlab2.csg.uzh.ch',
@@ -190,7 +230,7 @@ if __name__ == '__main__':
                  'planet2.elte.hu',
                  'planetlab2.esprit-tn.com' ]
 
-    usage = "usage: %prog -s <pl_slice> -H <pl_host> -k <ssh_key> -u <pl_user> -p <pl_password> -v <vsys_vnet> -N <host_names> -c <node_count>"
+    usage = "usage: %prog -s <pl_slice> -H <pl_host> -k <ssh_key> -u <pl_user> -p <pl_password> -v <vsys_vnet> -N <host_names> -c <node_count> -d <delay>"
 
     parser = OptionParser(usage=usage)
     parser.add_option("-s", "--slicename", dest="slicename", 
@@ -214,7 +254,10 @@ if __name__ == '__main__':
             default=pl_hostnames, type="str")
     parser.add_option("-c", "--node-count", dest="node_count", 
             help="Number of nodes to use", 
-            default=5, type="str")
+            default=9, type="str")
+    parser.add_option("-d", "--delay", dest="delay", 
+            help="Time to wait before retrieveing the second video stream in seconds", 
+            default=40, type="int")
     (options, args) = parser.parse_args()
 
     hostnames = map(string.strip, options.hostnames.split(",")) if options.hostnames else default_hostnames
@@ -226,17 +269,8 @@ if __name__ == '__main__':
     pl_user= options.pl_user
     pl_pwd = options.pl_pwd
     pl_ssh_key = options.pl_ssh_key
-
-    """
-    hostnames = ['nepi1.pl.sophia.inria.fr',
-        'nepi2.pl.sophia.inria.fr',
-        'nepi3.pl.sophia.inria.fr',
-        'nepi5.pl.sophia.inria.fr']
-
-    pl_host = "nepiplc.pl.sophia.inria.fr"
-    vsys_vnet = "192.168.2.0/24"
-    """
+    delay = options.delay
 
     run(hostnames, vsys_vnet, slicename, pl_host, pl_user, pl_pwd, pl_ssh_key, 
-            port_base, root_dir)
+            port_base, root_dir, delay)