2 # NEPI, a framework to manage network experiments
3 # Copyright (C) 2014 INRIA
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.
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.
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/>.
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, \
23 from nepi.resources.ns3.ns3application import NS3BaseApplication
26 class NS3OnOffApplication(NS3BaseApplication):
27 _rtype = "ns3::OnOffApplication"
30 def _register_attributes(cls):
32 attr_datarate = Attribute("DataRate",
33 "The data rate in on state.",
35 default = "500000bps",
38 flags = Flags.Reserved | Flags.Construct)
40 cls._register_attribute(attr_datarate)
42 attr_packetsize = Attribute("PacketSize",
43 "The size of packets sent in on state",
48 flags = Flags.Reserved | Flags.Construct)
50 cls._register_attribute(attr_packetsize)
52 attr_remote = Attribute("Remote",
53 "The address of the destination",
58 flags = Flags.Reserved | Flags.Construct)
60 cls._register_attribute(attr_remote)
62 attr_ontime = Attribute("OnTime",
63 "A RandomVariableStream used to pick the duration of the \'On\' state.",
65 default = "ns3::ConstantRandomVariable[Constant=1.0]",
68 flags = Flags.Reserved | Flags.Construct)
70 cls._register_attribute(attr_ontime)
72 attr_offtime = Attribute("OffTime",
73 "A RandomVariableStream used to pick the duration of the \'Off\' state.",
75 default = "ns3::ConstantRandomVariable[Constant=1.0]",
78 flags = Flags.Reserved | Flags.Construct)
80 cls._register_attribute(attr_offtime)
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.",
88 flags = Flags.Reserved | Flags.Construct)
90 cls._register_attribute(attr_maxbytes)
92 attr_protocol = Attribute("Protocol",
93 "The type of protocol to use.",
95 default = "ns3::UdpSocketFactory",
98 flags = Flags.Reserved | Flags.Construct)
100 cls._register_attribute(attr_protocol)
102 attr_starttime = Attribute("StartTime",
103 "Time at which the application will start",
108 flags = Flags.Reserved | Flags.Construct)
110 cls._register_attribute(attr_starttime)
112 attr_stoptime = Attribute("StopTime",
113 "Time at which the application will stop",
118 flags = Flags.Reserved | Flags.Construct)
120 cls._register_attribute(attr_stoptime)
125 def _register_traces(cls):
127 tx = Trace("Tx", "A new packet is created and is sent")
129 cls._register_trace(tx)
133 def __init__(self, ec, guid):
134 super(NS3OnOffApplication, self).__init__(ec, guid)
135 self._home = "ns3-on-off-application-%s" % self.guid