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