|   | 57 |  | 
          
          
            |   | 58 | == Sample Experiment Script == | 
          
          
            |   | 59 |  | 
          
          
            |   | 60 | The following is an example of a script that can be used to run a repeatable experiment: | 
          
          
            |   | 61 |  | 
          
          
            |   | 62 | {{{ | 
          
          
            |   | 63 | # script to run the experiment | 
          
          
            |   | 64 |  | 
          
          
            |   | 65 | # image the nodes | 
          
          
            |   | 66 | ./orbitImage nodeList baseline.ndz | 
          
          
            |   | 67 |  | 
          
          
            |   | 68 | # wait until all the experiment nodes have booted | 
          
          
            |   | 69 | ./orbitPower nodeList on | 
          
          
            |   | 70 |  | 
          
          
            |   | 71 | # Configure my wireless interface by running commands | 
          
          
            |   | 72 | # on all experiment nodes and waiting until they complete. | 
          
          
            |   | 73 | ./orbitRunWait nodeList "iwconfig ath0 essid 'oontest'" | 
          
          
            |   | 74 | ./orbitRunWait nodeList "iwconfig ath0 channel 1" | 
          
          
            |   | 75 | ./orbitRunWait nodeList "iwconfig ath0 mode 'ad-hoc'" | 
          
          
            |   | 76 | ./orbitRunWait nodeList "iwconfig ath0 rate '11M'" | 
          
          
            |   | 77 | ./orbitRunWait nodeList "ifconfig ath0 192.168.%x.%y" | 
          
          
            |   | 78 |  | 
          
          
            |   | 79 | # Copy the latest version of my application to each node | 
          
          
            |   | 80 | ./orbitPutFile nodeList myApp /root | 
          
          
            |   | 81 |  | 
          
          
            |   | 82 | # Run my app on each experiment node, but don’t block | 
          
          
            |   | 83 | ./orbitRun nodeList "./myApp -i ath0" | 
          
          
            |   | 84 |  | 
          
          
            |   | 85 | # delay while it does its thing | 
          
          
            |   | 86 | sleep 60s | 
          
          
            |   | 87 |  | 
          
          
            |   | 88 | # Some random command to ping every node from the console | 
          
          
            |   | 89 | ./orbitCmd nodeList "ping node%x-%y" | 
          
          
            |   | 90 |  | 
          
          
            |   | 91 | # Kill off all the instances of my app running on the nodes | 
          
          
            |   | 92 | ./orbitKillAll nodeList "./myApp -i ath0" | 
          
          
            |   | 93 |  | 
          
          
            |   | 94 | # copy and merge the logs from each node into one file on the console | 
          
          
            |   | 95 | # this merged file can then be processed by your data analysis tools | 
          
          
            |   | 96 | ./orbitGetFileMerged nodelist ./route_logs.csv | 
          
          
            |   | 97 | ./orbitGetFileMerged nodelist ./error_rates.csv | 
          
          
            |   | 98 |  | 
          
          
            |   | 99 | # shutdown the nodes in the experiment | 
          
          
            |   | 100 | ./orbitPower nodeList off | 
          
          
            |   | 101 | }}} | 
          
          
            |   | 102 |  | 
          
          
            |   | 103 | For more experiments I'd highly recommend removing the './orbitImage' and './orbitPower' commands to speed up the test/debug process considerably. |