'''[wiki:GEC16Agenda/WiMAX-Tutorial/Video/01 Previous]''' == Creating and Loading a Disk Image == To prepare his experiment, he loaded a baseline image onto a node at UCLA. > Try it yourself another time: To load a baseline image onto a node, e.g. node2 at UCLA, run [[br]] > {{{omf load -i baseline.ndz -t omf.necwimax.node2}}} [[br]] Then he installed all the applications he needs on the node, and saved the disk image. > Try it yourself another time: To save a disk image from a node, e.g. node2 at UCLA, run [[br]] > {{{omf save -n omf.necwimax.node2}}} [[br]] When the image saving process concluded, it reported that his disk image had been saved and gave the name of the image. Now, when he wants to run his experiment, he will load his disk image onto the nodes he has reserved: > Try it yourself another time: To load a disk image onto a node, e.g. node2 at UCLA, run [[br]] > {{{omf load -i gec16-video.ndz -t omf.necwimax.node2}}} == Clearing Experiment Settings == In addition to loading a fresh disk image, additional steps must be taken to restore the wireless environment to its default state. These commands are run from the console on Sandbox 4 to reset all of the base station and attenuation settings: {{{ wget -qO- "http://wimaxrf:5052/wimaxrf/bs/default" wget -qO- "http://wimaxrf:5052/wimaxrf/bs/restart" }}} == Application Wrappers == When an OML-enabled application is run using OMF, the application itself is installed on the resource and a simple [https://mytestbed.net/projects/omf/wiki/BasicTutorialStage3-5-2 OMF application wrapper] is installed on the console where the OMF Experiment Controller runs. This wrapper just gives some basic information about the application, the parameters that can be passed at the command line, and the OML measurement points that have been defined in the application. For example, here's the wrapper for the OML-ized VLC: {{{ #!ruby defApplication('vlc', 'vlc') do |app| app.path = "/usr/local/bin/vlc" app.version(2, 0, 5) app.shortDescription = "VLC" app.description = "VLC multimedia player and streamer" app.defProperty("input", "Stream input (e.g. file or network address)", nil, {:type => :string, :dynamic => false, :use_name => false}) app.defProperty("sout", "Stream output", nil, {:type => :string, :dynamic => false,}) app.defProperty("intf", "Main interface module", "I", {:type => :string, :dynamic => false}) app.defProperty("extraintf", "Extra interface module(s). Use --extraintf omlstats to enable OML", nil, {:type => :string, :dynamic => false}) app.defProperty("mtu", "Specifies the MTU of the network interface", nil, {:type => :string, :dynamic => false}) app.defProperty("quiet", " Deactivates all console messages", nil, {:type => :boolean, :dynamic => false}) app.defProperty("play-and-exit", "Exit VLC after playing all the items in the input stream list", nil, {:type => :boolean, :dynamic => false}) app.defMeasurement('audio') do |mp| mp.defMetric('i_decoded_audio_blocks',:int) mp.defMetric('i_played_audio_buffers',:int) mp.defMetric('i_lost_audio_buffers',:int) end app.defMeasurement('video') do |mp| mp.defMetric('i_decoded_video_blocks',:int) mp.defMetric('i_played_video_frames',:int) mp.defMetric('i_lost_video_frames',:int) end app.defMeasurement('input') do |mp| mp.defMetric('i_read_packets',:int) mp.defMetric('i_read_bytes',:int) mp.defMetric('f_input_bitrate',:float) mp.defMetric('i_demux_read_bytes',:int) mp.defMetric('f_demux_bitrate',:float) mp.defMetric('i_demux_corrupted',:int) mp.defMetric('i_demux_discontinuity',:int) end app.defMeasurement('output') do |mp| mp.defMetric('i_sent_packets',:int) mp.defMetric('i_sent_bytes',:int) mp.defMetric('f_send_bitrate',:float) end end }}} '''[wiki:GEC16Agenda/WiMAX-Tutorial/Video/03 Next]'''