ffae8e9fd47c7a74ebb9ce060dbf9953d44ba339
[nepi.git] / src / nepi / resources / ns3 / classes / on_off_application.py
1 #
2 #    NEPI, a framework to manage network experiments
3 #    Copyright (C) 2014 INRIA
4 #
5 #    This program is free software: you can redistribute it and/or modify
6 #    it under the terms of the GNU General Public License as published by
7 #    the Free Software Foundation, either version 3 of the License, or
8 #    (at your option) any later version.
9 #
10 #    This program is distributed in the hope that it will be useful,
11 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
12 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 #    GNU General Public License for more details.
14 #
15 #    You should have received a copy of the GNU General Public License
16 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 #
18
19 from nepi.execution.attribute import Attribute, Flags, Types
20 from nepi.execution.trace import Trace, TraceAttr
21 from nepi.execution.resource import ResourceManager, clsinit_copy, \
22         ResourceState, reschedule_delay
23 from nepi.resources.ns3.ns3application import NS3BaseApplication 
24
25 @clsinit_copy
26 class NS3OnOffApplication(NS3BaseApplication):
27     _rtype = "ns3::OnOffApplication"
28
29     @classmethod
30     def _register_attributes(cls):
31         
32         attr_datarate = Attribute("DataRate",
33             "The data rate in on state.",
34             type = Types.String,
35             default = "500000bps",  
36             allowed = None,
37             range = None,    
38             flags = Flags.Reserved | Flags.Construct)
39
40         cls._register_attribute(attr_datarate)
41
42         attr_packetsize = Attribute("PacketSize",
43             "The size of packets sent in on state",
44             type = Types.Integer,
45             default = "512",  
46             allowed = None,
47             range = None,    
48             flags = Flags.Reserved | Flags.Construct)
49
50         cls._register_attribute(attr_packetsize)
51
52         attr_remote = Attribute("Remote",
53             "The address of the destination",
54             type = Types.String,
55             default = "00-00-00",  
56             allowed = None,
57             range = None,    
58             flags = Flags.Reserved | Flags.Construct)
59
60         cls._register_attribute(attr_remote)
61
62         attr_ontime = Attribute("OnTime",
63             "A RandomVariableStream used to pick the duration of the \'On\' state.",
64             type = Types.String,
65             default = "ns3::ConstantRandomVariable[Constant=1.0]",  
66             allowed = None,
67             range = None,    
68             flags = Flags.Reserved | Flags.Construct)
69
70         cls._register_attribute(attr_ontime)
71
72         attr_offtime = Attribute("OffTime",
73             "A RandomVariableStream used to pick the duration of the \'Off\' state.",
74             type = Types.String,
75             default = "ns3::ConstantRandomVariable[Constant=1.0]",  
76             allowed = None,
77             range = None,    
78             flags = Flags.Reserved | Flags.Construct)
79
80         cls._register_attribute(attr_offtime)
81
82         attr_maxbytes = Attribute("MaxBytes",
83             "The total number of bytes to send. Once these bytes are sent, no packet is sent again, even in on state. The value zero means that there is no limit.",
84             type = Types.Integer,
85             default = "0",  
86             allowed = None,
87             range = None,    
88             flags = Flags.Reserved | Flags.Construct)
89
90         cls._register_attribute(attr_maxbytes)
91
92         attr_protocol = Attribute("Protocol",
93             "The type of protocol to use.",
94             type = Types.String,
95             default = "ns3::UdpSocketFactory",  
96             allowed = None,
97             range = None,    
98             flags = Flags.Reserved | Flags.Construct)
99
100         cls._register_attribute(attr_protocol)
101
102         attr_starttime = Attribute("StartTime",
103             "Time at which the application will start",
104             type = Types.String,
105             default = "+0.0ns",  
106             allowed = None,
107             range = None,    
108             flags = Flags.Reserved | Flags.Construct)
109
110         cls._register_attribute(attr_starttime)
111
112         attr_stoptime = Attribute("StopTime",
113             "Time at which the application will stop",
114             type = Types.String,
115             default = "+0.0ns",  
116             allowed = None,
117             range = None,    
118             flags = Flags.Reserved | Flags.Construct)
119
120         cls._register_attribute(attr_stoptime)
121
122
123
124     @classmethod
125     def _register_traces(cls):
126         
127         tx = Trace("Tx", "A new packet is created and is sent")
128
129         cls._register_trace(tx)
130
131
132
133     def __init__(self, ec, guid):
134         super(NS3OnOffApplication, self).__init__(ec, guid)
135         self._home = "ns3-on-off-application-%s" % self.guid