[wiki:WikiStart Orbit] > [wiki:Tutorial Tutorial] > [wiki:Tutorial/HowtoWriteScripts Writing Experiment Scripts] > ORBIT-Specific Methods ===== ORBIT-specific Methods ===== Four ORBIT-specific methods are available for debugging help: ''error(…)'', ''warn(…)'', ''info(…)'', and ''debug(…)''. How do they work? Like assertions? What arguments do they take? Besides these debugging methods, there are three classes of ORBIT-specific methods discussed below: implicit, Experiment, and !NodeSet. Among the implicit methods two are used to define resources: {{{ defProperty(name, value, description) defNodes(setName, nodeList) {} }}} Some ORBIT-specific methods work with node sets to specify a set of nodes for each member of which the associated block of code is executed: {{{ nodes(setName) {} allNodes {} nodes("_ALL_") {} }}} Other ORBIT-specific methods use events which delay execution of the associated block of code and sequential execution until that event is true: {{{ whenAll(setTest, nodeTest, interval = 5) {} whenAllInstalled() whenAll("_ALL_", "apps/app/status[text()='INSTALLED.OK']") {} wait time_in_sec }}} The Experiment methods and properties are ORBIT-specific methods and properties associated with the Experiment object. They have the form Experiment.method. These methods include: {{{ name = "tutorial-1a" project = "orbit:tutorial" props.propName = "" Done }}} It is anticipated that the 'Experiment' prefix will be removed in future versions. Other ORBIT-specific methods are !NodeSet methods that set properties for the specified set of nodes. They have the form {{{ NodeSet ( nodes(setName).method ) image = pxeImage = prototype(name) {|node| …} onNodesUp {|node| …} startApplication(appName), startApplications stopApplication(appName), stopApplications resource net.if_name }}} The defNodes method declares the nodes used in the experiment: {{{ defNodes(setName:string, nodeList) {} }}} There are various ways to declare node list: {{{ A single node: [x,y] multiple nodes: [[x1,y1], [x2, y2], [x3, y3]] ranges of nodes: [x1..x2, y1..y2] the entire grid: [1..20, 1..20] with other node sets: [‘nodeSet1’, ‘nodeSet2’] }}} These methods are useful for declaring common functionality over multiple sets. The various network parameters that may be configured within a defNodes or allNodes block are shown in Figure 9 below, here the first and second Ethernet interfaces are e0 and e1, and the first and second wireless interfaces are w0 and w1. {{{ • net – e0, e1 • arp = true|false En/disable ARP • forward = true|false Enable forwarding • ip = address/netmask IP address of interface • up = true|false En/disable interface • route – w0, w1 • All the above • channelI = 1..11; 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161 • essid = string • frequencyI = 2.412 – 2.462 (5 Mhz steps); 5.18Ghz (20Mhz steps) • mode = master|managed|ad-hocI|monitorI • rtsA = packetSizeThreshold [bytes] • rateI = 1, 5, 11; 6, 9, 12, 18, 24, 36, 48, 54 • tx_power = -12 .. 15 dBm (intel), 0 .. 20 dBm (atheros) • type = a/b/g }}}