1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2009 University of Washington
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 version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17  *
18  * Author: Leonard Tracy <lentracy@gmail.com>
19  */
20 
21 #ifndef UAN_RC_EXAMPLE_H
22 #define UAN_RC_EXAMPLE_H
23 
24 #include "ns3/network-module.h"
25 #include "ns3/stats-module.h"
26 #include "ns3/uan-module.h"
27 
28 using namespace ns3;
29 
30 /**
31  * \ingroup uan
32  *
33  * Container for the parameters describing a single experiment.
34  *
35  * An experiment samples a range of parameter values.  The parameter
36  * controls the number of nodes (if m_doNode is true), or the
37  * UanMacRcGw MaxReservations attribute.
38  *
39  * \see uan-rc-example.cc
40  *
41  */
42 class Experiment
43 {
44 public:
45   uint32_t m_simMin;     //!< Minimum parameter to test.
46   uint32_t m_simMax;     //!< Maximum parameter to test.
47   uint32_t m_simStep;    //!< Amount to increment param per trial
48   uint32_t m_numRates;   //!< Number of divided rates ( (NumberRates+1)%TotalRate should be 0).
49   uint32_t m_totalRate;  //!< Total channel capacity.
50   uint32_t m_maxRange;   //!< Maximum range between gateway and acoustic node.
51   uint32_t m_numNodes;   //!< Number of nodes (invalid for m_doNode true).
52   uint32_t m_pktSize;    //!< Packet size in bytes.
53   bool m_doNode;         //!< 1 for do max nodes simulation (invalidates AMin and AMax values).
54   Time m_sifs;           //!< SIFS time duration.
55   Time m_simTime;        //!< Simulation time per trial
56 
57   std::string m_gnuplotfile;    //!< Filename for GnuPlot.
58 
59   uint32_t m_bytesTotal; //!< Total number of bytes received in a simulation run.
60 
61   UanModesList m_dataModes;     //!< List of UanTxModes used for data channels.
62   UanModesList m_controlModes;  //!< List of UanTxModes used for control channels.
63 
64   /**
65    * Callback to receive a packet.
66    *
67    * \param socket The socket receiving packets.
68    */
69   void ReceivePacket (Ptr<Socket> socket);
70   /**
71    * Create a UanTxMode.
72    *
73    * The mode physical rate is set equal to m_totalRate.
74    * The data rate and bandwidth are set to
75    *
76    * \f[{\rm{rate, bandwidth}} = {\rm{kass}}\frac{{{\rm{m\_totalRate}}}}{{{\rm{m\_numRates}} + 1}}\f]
77    *
78    * The center frequency is set to
79    *
80    * \f[{f_{center}} = {\rm{fc}} + \frac{{ \pm {\rm{m\_totalRate}} \mp {\rm{rate}}}}{2}\f]
81    *
82    * where the upper sign is taken if upperblock is true.
83    *
84    * \param kass Fraction of total bandwidth assigned to mode.
85    * \param fc Mode center frequency offset.
86    * \param upperblock Sign choice in setting the center frequency.
87    * \param name Mode name.
88    * \return The new mode.
89    */
90   UanTxMode CreateMode (uint32_t kass,
91                         uint32_t fc,
92                         bool upperblock,
93                         std::string name);
94   /**
95    * Create m_numRates matching control and data modes.
96    *
97    * \param fc Mode center frequency offset.
98    */
99   void CreateDualModes (uint32_t fc);
100   /**
101    * Run a parametrized experiment.
102    *
103    * The parameter sets either the number of nodes (if m_doNode is true)
104    * or the \"a\" parameter, which controls the UanMacRcGw MaxReservations
105    * attribute.
106    *
107    * \param param The parameter value.
108    * \return The total number of bytes delivered.
109    */
110   uint32_t Run (uint32_t param);
111 
112   /** Default constructor. */
113   Experiment();
114 
115 };
116 
117 #endif /* UAN_RC_EXAMPLE_H */
118