Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(2326)

Unified Diff: src/nist/model/nist-onoff-application.h

Issue 326890043: Public Safety Communication modeling tools based on ns-3
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/nist/model/nist-no-op-handover-algorithm.cc ('k') | src/nist/model/nist-onoff-application.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/nist/model/nist-onoff-application.h
===================================================================
new file mode 100644
--- /dev/null
+++ b/src/nist/model/nist-onoff-application.h
@@ -0,0 +1,200 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+//
+// Copyright (c) 2006 Georgia Tech Research Corporation
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License version 2 as
+// published by the Free Software Foundation;
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// Author: George F. Riley<riley@ece.gatech.edu>
+//
+
+// ns3 - On/Off Data Source Application class
+// George F. Riley, Georgia Tech, Spring 2007
+// Adapted from ApplicationOnOff in GTNetS.
+// Modified by: NIST
+
+#ifndef NIST_ONOFF_APPLICATION_H
+#define NIST_ONOFF_APPLICATION_H
+
+#include "ns3/address.h"
+#include "ns3/application.h"
+#include "ns3/event-id.h"
+#include "ns3/ptr.h"
+#include "ns3/data-rate.h"
+#include "ns3/traced-callback.h"
+
+namespace ns3 {
+
+class Address;
+class RandomVariableStream;
+class Socket;
+
+/**
+ * \ingroup applications
+ * \defgroup onoff OnOffApplication
+ *
+ * This traffic generator follows an On/Off pattern: after
+ * Application::StartApplication
+ * is called, "On" and "Off" states alternate. The duration of each of
+ * these states is determined with the onTime and the offTime random
+ * variables. During the "Off" state, no traffic is generated.
+ * During the "On" state, cbr traffic is generated. This cbr traffic is
+ * characterized by the specified "data rate" and "packet size".
+ */
+/**
+* \ingroup onoff
+*
+* \brief Generate traffic to a single destination according to an
+* OnOff pattern.
+*
+* This traffic generator follows an On/Off pattern: after
+* Application::StartApplication
+* is called, "On" and "Off" states alternate. The duration of each of
+* these states is determined with the onTime and the offTime random
+* variables. During the "Off" state, no traffic is generated.
+* During the "On" state, cbr traffic is generated. This cbr traffic is
+* characterized by the specified "data rate" and "packet size".
+*
+* Note: When an application is started, the first packet transmission
+* occurs _after_ a delay equal to (packet size/bit rate). Note also,
+* when an application transitions into an off state in between packet
+* transmissions, the remaining time until when the next transmission
+* would have occurred is cached and is used when the application starts
+* up again. Example: packet size = 1000 bits, bit rate = 500 bits/sec.
+* If the application is started at time 3 seconds, the first packet
+* transmission will be scheduled for time 5 seconds (3 + 1000/500)
+* and subsequent transmissions at 2 second intervals. If the above
+* application were instead stopped at time 4 seconds, and restarted at
+* time 5.5 seconds, then the first packet would be sent at time 6.5 seconds,
+* because when it was stopped at 4 seconds, there was only 1 second remaining
+* until the originally scheduled transmission, and this time remaining
+* information is cached and used to schedule the next transmission
+* upon restarting.
+*
+* If the underlying socket type supports broadcast, this application
+* will automatically enable the SetAllowBroadcast(true) socket option.
+*/
+class NistOnOffApplication : public Application
+{
+public:
+ /**
+ * \brief Get the type ID.
+ * \return the object TypeId
+ */
+ static TypeId GetTypeId (void);
+
+ NistOnOffApplication ();
+
+ virtual ~NistOnOffApplication();
+
+ /**
+ * \brief Set 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.
+ *
+ * \param maxBytes the total number of bytes to send
+ */
+ void SetMaxBytes (uint32_t maxBytes);
+
+ /**
+ * \brief Return a pointer to associated socket.
+ * \return pointer to associated socket
+ */
+ Ptr<Socket> GetSocket (void) const;
+
+ /**
+ * \brief Assign a fixed random variable stream number to the random variables
+ * used by this model.
+ *
+ * \param stream first stream index to use
+ * \return the number of stream indices assigned by this model
+ */
+ int64_t AssignStreams (int64_t stream);
+
+protected:
+ virtual void DoDispose (void);
+private:
+ // inherited from Application base class.
+ virtual void StartApplication (void); // Called at time specified by Start
+ virtual void StopApplication (void); // Called at time specified by Stop
+
+ //helpers
+ /**
+ * \brief Cancel all pending events.
+ */
+ void CancelEvents ();
+
+ // Event handlers
+ /**
+ * \brief Start an On period
+ */
+ void StartSending ();
+ /**
+ * \brief Start an Off period
+ */
+ void StopSending ();
+ /**
+ * \brief Send a packet
+ */
+ void SendPacket ();
+
+ Ptr<Socket> m_socket; //!< Associated socket
+ Address m_peer; //!< Peer address
+ bool m_connected; //!< True if connected
+ Ptr<RandomVariableStream> m_onTime; //!< rng for On Time
+ Ptr<RandomVariableStream> m_offTime; //!< rng for Off Time
+ DataRate m_cbrRate; //!< Rate that data is generated
+ DataRate m_cbrRateFailSafe; //!< Rate that data is generated (check copy)
+ uint32_t m_pktSize; //!< Size of packets
+ uint32_t m_residualBits; //!< Number of generated, but not sent, bits
+ Time m_lastStartTime; //!< Time last packet sent
+ uint32_t m_maxBytes; //!< Limit total number of bytes sent
+ uint32_t m_totBytes; //!< Total bytes sent so far
+ EventId m_startStopEvent; //!< Event id for next start or stop event
+ EventId m_sendEvent; //!< Event id of pending "send packet" event
+ TypeId m_tid; //!< Type of the socket used
+
+ /// Traced Callback: transmitted packets.
+ TracedCallback<Ptr<const Packet> > m_txTrace;
+ /// Callbacks for tracing the packet Tx events, includes source and destination addresses
+ TracedCallback<Ptr<const Packet>, const Address &, const Address &> m_txTraceWithAddresses;
+
+private:
+ /**
+ * \brief Schedule the next packet transmission
+ */
+ void ScheduleNextTx ();
+ /**
+ * \brief Schedule the next On period start
+ */
+ void ScheduleStartEvent ();
+ /**
+ * \brief Schedule the next Off period start
+ */
+ void ScheduleStopEvent ();
+ /**
+ * \brief Handle a Connection Succeed event
+ * \param socket the connected socket
+ */
+ void ConnectionSucceeded (Ptr<Socket> socket);
+ /**
+ * \brief Handle a Connection Failed event
+ * \param socket the not connected socket
+ */
+ void ConnectionFailed (Ptr<Socket> socket);
+};
+
+} // namespace ns3
+
+#endif /* NIST_ONOFF_APPLICATION_H */
« no previous file with comments | « src/nist/model/nist-no-op-handover-algorithm.cc ('k') | src/nist/model/nist-onoff-application.cc » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b