Tutorial: tut_topo_1_more.rb¶
Given below is the code for the tut_topo_1_more.rb script.
1 #
2 # This is a script example, which illustrates the use of topologies in
3 # an experiment scripts
4 #
5 # The scenario of this experiment involves two group of nodes: 'sender' and
6 # 'receiver'. The 'sender' group will generate some broadcast traffic, which will
7 # be received by the 'receiver' group.
8 #
9 # Each group contains nodes that are not explicitly defined within this script, but
10 # rather randomly drawn from the set of active nodes on the tested where this script is
11 # running. In other words, this script example does not specifically name which node belongs to
12 # which group.
13 #
14 # More information on the available commands to define a topology are available on the
15 # following page:
16 # http://www.orbit-lab.org/wiki/Documentation/NodeHandler/Commands/defTopology
17 #
18 # In this example we:
19 # 1) Define some experiment parameters
20 # 2) Define a simple 1st Topology, which is NOT used later in the experiment
21 # 3) Define a 2nd Topology, which will be used to build the 'sender' group of nodes
22 # 4) Define a 3rd Topology, which will be used to build the 'receiver' group of nodes
23 # 5) Define the 'sender' group of nodes
24 # 6) Define the 'receiver' group of nodes
25 # 7) Finally run the experiment
26 #
27
28 # 1)
29 # Define some parameters to be use in this experiment
30 #
31 defProperty('minNodeNumber', 12, 'Minimum number of nodes required for this experiment')
32 defProperty('receiverNumber', 8, 'Number of nodes in a receiver role')
33
34 # 2)
35 # Define a mock topology that we will use to verify the amount
36 # of available active nodes on the testbed where this script is running
37 # The list of active nodes is automatically created at the end of an 'imageNodes4' process.
38 #
39 # This step is optional and could also be integrated within the
40 # definition of a topology that will be really used.
41 # It is just here as an example.
42 #
43 defTopology('stubTopo') { |t|
44 # Load the topology which contains all the active nodes
45 baseTopo = Topology['system:topo:active']
46 # Check if there are enough nodes available in the 'baseTopo'
47 # if not then exit this experiment
48 if baseTopo.size < prop.minNodeNumber.value
49 puts "Not enough node available! (size: #{baseTopo.size})"
50 Experiment.done
51 end
52 puts "Number of active nodes on this testbed: #{baseTopo.size}"
53 # do nothing else with this stub topology...
54 }
55
56 # 3)
57 # Define a topology that will hold the sender node(s) of this
58 # experiment
59 #
60 defTopology('senderTopo') { |t|
61 baseTopo = Topology['system:topo:active']
62 # Draw a random node from the pool of active ones
63 aNode = baseTopo.getUniqueRandomNode
64 # Add this random node to this 'senderTopo' topology
65 t.addNode(aNode.x, aNode.y)
66 # Print the node that belongs to this topology
67 puts "Size of the my sender Topology: #{t.size}"
68 t.eachNode { |n|
69 puts " - Node: #{n}"
70 }
71 }
72
73 # 4)
74 # Define a topology that will hold the receiver node(s) of this
75 # experiment
76 #
77 defTopology('receiverTopo') { |t|
78 baseTopo = Topology['system:topo:active']
79 # Repeat the following 'receiverNumber' of time
80 for count in 1..prop.receiverNumber.value
81 # Draw a random node from the pool of active ones
82 aNode = baseTopo.getUniqueRandomNode
83 # Add this random node to this 'receiverTopo' topology
84 t.addNode(aNode.x, aNode.y)
85 end
86 # Print the nodes that belongs to this topology
87 puts "Size of the my receiver Topology: #{t.size}"
88 t.eachNode { |n|
89 puts " - Node: #{n}"
90 }
91 }
92
93 # 5)
94 # Define the 'sender' group for this experiment
95 # This group will include the node(s) from the 'senderTopo' topology
96 # See "HelloWorld" tutorial pages for more info on the following commands
97 #
98 defGroup('sender', 'senderTopo') {|node|
99 node.prototype("test:proto:sender", {
100 'broadcast' => 'on',
101 'destinationHost' => '192.168.255.255',
102 'packetSize' => 1024,
103 'rate' => 200,
104 'protocol' => 'udp'
105 })
106 node.net.w0.mode = "Master"
107 node.net.w0.type = "g"
108 node.net.w0.essid = "npc123"
109 node.net.w0.ip = "192.168.0.1"
110 wait 30
111 }
112
113 # 6)
114 # Define the 'receiver' group for this experiment
115 # This group will include the node(s) from the 'receiverTopo' topology
116 # See "HelloWorld" tutorial pages for more info on the following commands
117 #
118 defGroup('receivers', 'receiverTopo') {|node|
119 node.prototype("test:proto:receiver" , {
120 'protocol' => 'udp'
121 })
122 node.net.w0.mode = "Managed"
123 node.net.w0.type = "g"
124 node.net.w0.essid = "npc123"
125 node.net.w0.ip = "%192.168.%x.%y"
126 wait 30
127 }
128
129 # 7)
130 # When all the applications are installed on the nodes in all the groups,
131 # we can start running the applications used in this experiment
132 # See "HelloWorld" tutorial pages for more info on the following commands
133 #
134 whenAllInstalled() {|node|
135 wait 15
136 allGroups.startApplications
137 wait 15
138 Experiment.done
139 }