3 # NEPI, a framework to manage network experiments
4 # Copyright (C) 2013 INRIA
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation, either version 3 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
19 # Author: Julien Tribino <julien.tribino@inria.fr>
21 from nepi.execution.resource import ResourceFactory, ResourceAction, ResourceState, populate_factory
22 from nepi.execution.ec import ExperimentController
24 from nepi.resources.omf.node import OMFNode
25 from nepi.resources.omf.application import OMFApplication
26 from nepi.resources.omf.interface import OMFWifiInterface
27 from nepi.resources.omf.channel import OMFChannel
35 ec = ExperimentController()
37 # Register the different RM that will be used
40 # Create and Configure the Nodes
41 node1 = ec.register_resource("OMFNode")
42 ec.set(node1, 'hostname', 'omf.plexus.wlab17')
43 ec.set(node1, 'xmppSlice', "nepi")
44 ec.set(node1, 'xmppHost', "xmpp-plexus.onelab.eu")
45 ec.set(node1, 'xmppPort', "5222")
46 ec.set(node1, 'xmppPassword', "1234")
47 ec.set(node1, 'xmppSlice', "nepi")
48 ec.set(node1, 'xmppHost', "xmpp-plexus.onelab.eu")
49 ec.set(node1, 'xmppPort', "5222")
50 ec.set(node1, 'xmppPassword', "1234")
52 node2 = ec.register_resource("OMFNode")
53 ec.set(node2, 'hostname', "omf.plexus.wlab37")
54 ec.set(node2, 'xmppSlice', "nepi")
55 ec.set(node2, 'xmppHost', "xmpp-plexus.onelab.eu")
56 ec.set(node2, 'xmppPort', "5222")
57 ec.set(node2, 'xmppPassword', "1234")
58 ec.set(node2, 'xmppSlice', "nepi")
59 ec.set(node2, 'xmppHost', "xmpp-plexus.onelab.eu")
60 ec.set(node2, 'xmppPort', "5222")
61 ec.set(node2, 'xmppPassword', "1234")
63 # Create and Configure the Interfaces
64 iface1 = ec.register_resource("OMFWifiInterface")
65 ec.set(iface1, 'alias', "w0")
66 ec.set(iface1, 'mode', "adhoc")
67 ec.set(iface1, 'type', "g")
68 ec.set(iface1, 'essid', "vlcexp")
69 #ec.set(iface1, 'ap', "11:22:33:44:55:66")
70 ec.set(iface1, 'ip', "10.0.0.17")
71 ec.set(iface1, 'xmppSlice', "nepi")
72 ec.set(iface1, 'xmppHost', "xmpp-plexus.onelab.eu")
73 ec.set(iface1, 'xmppPort', "5222")
74 ec.set(iface1, 'xmppPassword', "1234")
76 iface2 = ec.register_resource("OMFWifiInterface")
77 ec.set(iface2, 'alias', "w0")
78 ec.set(iface2, 'mode', "adhoc")
79 ec.set(iface2, 'type', 'g')
80 ec.set(iface2, 'essid', "vlcexp")
81 #ec.set(iface2, 'ap', "11:22:33:44:55:66")
82 ec.set(iface2, 'ip', "10.0.0.37")
83 ec.set(iface2, 'xmppSlice', "nepi")
84 ec.set(iface2, 'xmppHost', "xmpp-plexus.onelab.eu")
85 ec.set(iface2, 'xmppPort', "5222")
86 ec.set(iface2, 'xmppPassword', "1234")
88 # Create and Configure the Channel
89 channel = ec.register_resource("OMFChannel")
90 ec.set(channel, 'channel', "6")
91 ec.set(channel, 'xmppSlice', "nepi")
92 ec.set(channel, 'xmppHost', "xmpp-plexus.onelab.eu")
93 ec.set(channel, 'xmppPort', "5222")
94 ec.set(channel, 'xmppPassword', "1234")
96 # Create and Configure the Application
97 app1 = ec.register_resource("OMFApplication")
98 ec.set(app1, 'appid', 'Vlc#1')
99 ec.set(app1, 'path', "/opt/vlc-1.1.13/cvlc")
100 ec.set(app1, 'args', "/opt/10-by-p0d.avi --sout '#rtp{dst=10.0.0.37,port=1234,mux=ts}'")
101 #ec.set(app1, 'args', "--quiet /opt/big_buck_bunny_240p_mpeg4.ts --sout '#rtp{dst=10.0.0.37,port=1234,mux=ts} '")
102 ec.set(app1, 'env', "DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority")
103 ec.set(app1, 'xmppSlice', "nepi")
104 ec.set(app1, 'xmppHost', "xmpp-plexus.onelab.eu")
105 ec.set(app1, 'xmppPort', "5222")
106 ec.set(app1, 'xmppPassword', "1234")
108 app2 = ec.register_resource("OMFApplication")
109 ec.set(app2, 'appid', 'Vlc#2')
110 ec.set(app2, 'path', "/opt/vlc-1.1.13/cvlc")
111 ec.set(app2, 'args', "--quiet rtp://10.0.0.37:1234")
112 ec.set(app2, 'env', "DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority")
113 ec.set(app2, 'xmppSlice', "nepi")
114 ec.set(app2, 'xmppHost', "xmpp-plexus.onelab.eu")
115 ec.set(app2, 'xmppPort', "5222")
116 ec.set(app2, 'xmppPassword', "1234")
118 app3 = ec.register_resource("OMFApplication")
119 ec.set(app3, 'appid', 'Kill#2')
120 ec.set(app3, 'path', "/usr/bin/killall")
121 ec.set(app3, 'args', "vlc")
122 ec.set(app3, 'env', " ")
123 ec.set(app3, 'xmppSlice', "nepi")
124 ec.set(app3, 'xmppHost', "xmpp-plexus.onelab.eu")
125 ec.set(app3, 'xmppPort', "5222")
126 ec.set(app3, 'xmppPassword', "1234")
129 ec.register_connection(app3, node1)
130 ec.register_connection(app1, node1)
131 ec.register_connection(node1, iface1)
132 ec.register_connection(iface1, channel)
133 ec.register_connection(iface2, channel)
134 ec.register_connection(node2, iface2)
135 ec.register_connection(app2, node2)
138 ec.register_condition(app2, ResourceAction.START, app1, ResourceState.STARTED , "4s")
139 ec.register_condition([app1, app2], ResourceAction.STOP, app2, ResourceState.STARTED , "22s")
140 ec.register_condition(app3, ResourceAction.START, app2, ResourceState.STARTED , "25s")
141 ec.register_condition(app3, ResourceAction.STOP, app3, ResourceState.STARTED , "1s")
146 ec.wait_finished([app1, app2, app3])