[[PageOutline]] == The Idea == This experiment demonstrates the use of multiple GENI WiMAX sites in one experiment. In this experiment, we will collected measurements from temperature, light, and humidity sensors attached to nodes at NYU-Poly and send them over the WiMAX network, through the Internet2 link, to a WiMAX-connected client at UCLA. == Experiment Design == '''Step 1''': Choose the application that you want to run on the WiMAX nodes (or create a new one) A number of already-OMLized applications are [http://mytestbed.net/projects/omlapp/wiki already available]. In this case, we will run two applications that we've written ourselves: a [http://witestlab.poly.edu/downloads/gec15/sensor sensor] application that collects measurements from temperature, humidity, and light sensors attached to the node, and a [http://witestlab.poly.edu/downloads/gec15/wmxstat.intel wmxstat] application that collects measurements about the state of the WiMAX link. Both of these applications are Ruby scripts. '''Step 2''': If you've written your own application, instrument it with OML so that you can collect measurements from it during experiment runtime These applications were instrumented with the [https://rubygems.org/gems/oml4r oml4r] Ruby client library. OML client libraries are also available for [http://pypi.python.org/pypi/oml4py/ Python] and [http://mytestbed.net/projects/oml/wiki/Client_Programming C or C++]. '''Step 3''': Create a disk image with your applications installed Log onto a testbed and load a baseline disk image onto a node: {{{ omf load -i baseline-witest.ndz -t omf.witest.node1 }}} Turn the node on: {{{ omf tell -a on -t omf.witest.node1 }}} Log onto the node (''ssh root@node1'') and install your applications and any required files. Then save your disk image: {{{ omf save -n omf.witest.node1 }}} This can take a while, so we've already created a disk image for use in this tutorial. It's called '''gec15sensor.ndz''' You can load this disk image onto any number of nodes, instead of manually installing your application and configuring each node individually! '''Step 4''': If you've written and instrumented your own applications, you will have to write an application definition for each experiment. Before running the experiment, download the application definitions to the console where you'll run the experiment. * [http://witestlab.poly.edu/downloads/gec15/sensor.rb Sensor] definition * [http://witestlab.poly.edu/downloads/gec15/wmxstat.rb Wmxstat] definition '''Step 5''': Write an OMF script Decide exactly how you want to configure the network interfaces on your nodes and what options you want to run the applications with. Then write an OMF script to orchestrate all of this on your nodes. Since we are working at two sites, we have two OMF scripts: * [http://witestlab.poly.edu/downloads/gec15/gec15sensor-poly.rb NYU-Poly script] * [http://witestlab.poly.edu/downloads/gec15/gec15sensor-ucla.rb UCLA scripts] Review these scripts with your instructor. Before running the experiment, download the OMF scripts to the console where you'll run the experiment. == Experiment Deployment == '''Step 6''': Set up your environment Load your disk image onto the set of nodes you want to use: {{{ omf load -i gec15sensor.ndz -t omf.witest.node1,omf.witest.node2,omf.witest.node3,omf.witest.node4,omf.witest.node5,omf.witest.node6,omf.witest.node7 }}} Turn these nodes back on with the command: {{{ omf tell -a on -t omf.witest.node1,omf.witest.node2,omf.witest.node3,omf.witest.node4,omf.witest.node5,omf.witest.node6,omf.witest.node7 }}} Reset the base station to its default settings, and then restart it so that the changes will take effect: {{{ wget -qO- "http://wimaxrf:5052/wimaxrf/bs/default" wget -qO- "http://wimaxrf:5052/wimaxrf/bs/restart" }}} Don't be alarmed if the second command returns a failure message; this is normal. '''Step 7''': Load your WiMAX datapath The datapath you select will determine how your WiMAX clients will be connected; for example, will they appear on the public Internet or on the Internet2 network? In this case, we are using the I2 network, so we will load the '''geni''' datapath configuration: {{{ wget -qO- "http://wimaxrf:5052/wimaxrf/datapath/config/load?name=geni" }}} == Experiment Execution == At NYU-Poly: {{{ omf exec -e gec15sensor gec15sensor-poly.rb }}} At UCLA: {{{ omf exec -C omf-expctl.yaml -e gec15sensor gec15sensor-ucla.rb }}} (Custom EC config used so that all of the measurements from both sites will be stored together at NYU-Poly). Visit the web interface to see the experiment visualization in real time: * [http://witestlab.poly.edu:4000/ NYU-Poly] * [http://witestlab.poly.edu:5757/ UCLA] (The UCLA visualization is forwarded from UCLA server using SSH tunneling; run {{{ ssh root@omf-server.cs.ucla.edu -L 5757:omf-server.cs.ucla.edu:4000 }}} on the witestlab.poly.edu console to create the tunnel, and leave it running.) Look at the sent measurements (NYU-Poly) and received measurements (UCLA) and confirm that the data matches. == Experiment Analysis ==