examples/energy/energy-model-example.cc
author Tom Henderson <tomh@tomh.org>
Mon, 21 Feb 2011 09:11:37 -0800
changeset 6823 a27f86fb4e55
parent 6699 d8909a1fd0ff
child 6848 1f453ad50ef3
permissions -rw-r--r--
Merge node and common modules into new network module
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6699
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
     2
/*
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
     3
 * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
     4
 *
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
     8
 *
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    12
 * GNU General Public License for more details.
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    13
 *
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    17
 *
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    18
 * Author: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    19
 */
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    20
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    21
#include "ns3/core-module.h"
6823
a27f86fb4e55 Merge node and common modules into new network module
Tom Henderson <tomh@tomh.org>
parents: 6699
diff changeset
    22
#include "ns3/network-module.h"
6699
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    23
#include "ns3/helper-module.h"
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    24
#include "ns3/mobility-module.h"
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    25
#include "ns3/contrib-module.h"
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    26
#include "ns3/wifi-module.h"
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    27
#include "ns3/energy-module.h"
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    28
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    29
#include <iostream>
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    30
#include <fstream>
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    31
#include <vector>
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    32
#include <string>
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    33
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    34
NS_LOG_COMPONENT_DEFINE ("EnergyExample");
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    35
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    36
using namespace ns3;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    37
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    38
/**
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    39
 * \param socket Pointer to socket.
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    40
 *
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    41
 * Packet receiving sink.
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    42
 */
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    43
void
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    44
ReceivePacket (Ptr<Socket> socket)
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    45
{
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    46
  Ptr<Packet> packet;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    47
  Address from;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    48
  while (packet = socket->RecvFrom (from))
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    49
    {
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    50
      if (packet->GetSize () > 0)
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    51
        {
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    52
          InetSocketAddress iaddr = InetSocketAddress::ConvertFrom (from);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    53
          NS_LOG_UNCOND ("--\nReceived one packet! Socket: "<< iaddr.GetIpv4 ()
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    54
                         << " port: " << iaddr.GetPort () << " at time = " <<
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    55
                         Simulator::Now ().GetSeconds () << "\n--");
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    56
        }
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    57
    }
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    58
}
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    59
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    60
/**
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    61
 * \param socket Pointer to socket.
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    62
 * \param pktSize Packet size.
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    63
 * \param n Pointer to node.
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    64
 * \param pktCount Number of packets to generate.
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    65
 * \param pktInterval Packet sending interval.
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    66
 *
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    67
 * Traffic generator.
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    68
 */
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    69
static void
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    70
GenerateTraffic (Ptr<Socket> socket, uint32_t pktSize, Ptr<Node> n,
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    71
    uint32_t pktCount, Time pktInterval)
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    72
{
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    73
  if (pktCount > 0)
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    74
    {
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    75
      socket->Send (Create<Packet> (pktSize));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    76
      Simulator::Schedule (pktInterval, &GenerateTraffic, socket, pktSize, n,
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    77
          pktCount - 1, pktInterval);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    78
    }
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    79
  else
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    80
    {
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    81
      socket->Close ();
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    82
    }
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    83
}
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    84
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    85
/// Trace function for remaining energy at node.
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    86
void
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    87
RemainingEnergy (double oldValue, double remainingEnergy)
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    88
{
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    89
  NS_LOG_UNCOND (Simulator::Now ().GetSeconds ()
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    90
      << "s Current remaining energy = " << remainingEnergy << "J");
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    91
}
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    92
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    93
/// Trace function for total energy consumption at node.
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    94
void
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    95
TotalEnergy (double oldValue, double totalEnergy)
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    96
{
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    97
  NS_LOG_UNCOND (Simulator::Now ().GetSeconds ()
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    98
      << "s Total energy consumed by radio = " << totalEnergy << "J");
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    99
}
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   100
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   101
int
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   102
main (int argc, char *argv[])
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   103
{
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   104
  /*
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   105
  LogComponentEnable ("EnergySource", LOG_LEVEL_DEBUG);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   106
  LogComponentEnable ("BasicEnergySource", LOG_LEVEL_DEBUG);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   107
  LogComponentEnable ("DeviceEnergyModel", LOG_LEVEL_DEBUG);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   108
  LogComponentEnable ("WifiRadioEnergyModel", LOG_LEVEL_DEBUG);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   109
   */
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   110
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   111
  std::string phyMode ("DsssRate1Mbps");
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   112
  double Prss = -80;            // dBm
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   113
  uint32_t PpacketSize = 200;   // bytes
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   114
  bool verbose = false;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   115
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   116
  // simulation parameters
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   117
  uint32_t numPackets = 10000;  // number of packets to send
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   118
  double interval = 1;          // seconds
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   119
  double startTime = 0.0;       // seconds
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   120
  double distanceToRx = 100.0;  // meters
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   121
  /*
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   122
   * This is a magic number used to set the transmit power, based on other
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   123
   * configuration.
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   124
   */
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   125
  double offset = 81;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   126
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   127
  CommandLine cmd;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   128
  cmd.AddValue ("phyMode", "Wifi Phy mode", phyMode);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   129
  cmd.AddValue ("Prss", "Intended primary RSS (dBm)", Prss);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   130
  cmd.AddValue ("PpacketSize", "size of application packet sent", PpacketSize);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   131
  cmd.AddValue ("numPackets", "Total number of packets to send", numPackets);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   132
  cmd.AddValue ("startTime", "Simulation start time", startTime);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   133
  cmd.AddValue ("distanceToRx", "X-Axis distance between nodes", distanceToRx);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   134
  cmd.AddValue ("verbose", "Turn on all device log components", verbose);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   135
  cmd.Parse (argc, argv);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   136
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   137
  // Convert to time object
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   138
  Time interPacketInterval = Seconds (interval);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   139
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   140
  // disable fragmentation for frames below 2200 bytes
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   141
  Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold",
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   142
                      StringValue ("2200"));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   143
  // turn off RTS/CTS for frames below 2200 bytes
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   144
  Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold",
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   145
                      StringValue ("2200"));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   146
  // Fix non-unicast data rate to be the same as that of unicast
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   147
  Config::SetDefault ("ns3::WifiRemoteStationManager::NonUnicastMode",
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   148
                      StringValue (phyMode));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   149
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   150
  NodeContainer c;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   151
  c.Create (2);     // create 2 nodes
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   152
  NodeContainer networkNodes;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   153
  networkNodes.Add (c.Get (0));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   154
  networkNodes.Add (c.Get (1));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   155
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   156
  // The below set of helpers will help us to put together the wifi NICs we want
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   157
  WifiHelper wifi;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   158
  if (verbose)
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   159
    {
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   160
      wifi.EnableLogComponents ();
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   161
    }
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   162
  wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   163
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   164
  /** Wifi PHY **/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   165
  /***************************************************************************/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   166
  YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   167
  wifiPhy.Set ("RxGain", DoubleValue (-10));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   168
  wifiPhy.Set ("TxGain", DoubleValue (offset + Prss));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   169
  wifiPhy.Set ("CcaMode1Threshold", DoubleValue (0.0));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   170
  /***************************************************************************/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   171
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   172
  /** wifi channel **/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   173
  YansWifiChannelHelper wifiChannel;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   174
  wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   175
  wifiChannel.AddPropagationLoss ("ns3::FriisPropagationLossModel");
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   176
  // create wifi channel
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   177
  Ptr<YansWifiChannel> wifiChannelPtr = wifiChannel.Create ();
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   178
  wifiPhy.SetChannel (wifiChannelPtr);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   179
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   180
  /** MAC layer **/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   181
  // Add a non-QoS upper MAC, and disable rate control
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   182
  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   183
  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode",
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   184
                                StringValue (phyMode), "ControlMode",
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   185
                                StringValue (phyMode));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   186
  // Set it to ad-hoc mode
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   187
  wifiMac.SetType ("ns3::AdhocWifiMac");
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   188
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   189
  /** install PHY + MAC **/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   190
  NetDeviceContainer devices = wifi.Install (wifiPhy, wifiMac, networkNodes);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   191
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   192
  /** mobility **/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   193
  MobilityHelper mobility;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   194
  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   195
  positionAlloc->Add (Vector (0.0, 0.0, 0.0));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   196
  positionAlloc->Add (Vector (2 * distanceToRx, 0.0, 0.0));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   197
  mobility.SetPositionAllocator (positionAlloc);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   198
  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   199
  mobility.Install (c);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   200
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   201
  /** Energy Model **/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   202
  /***************************************************************************/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   203
  /* energy source */
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   204
  BasicEnergySourceHelper basicSourceHelper;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   205
  // configure energy source
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   206
  basicSourceHelper.Set ("BasicEnergySourceInitialEnergyJ", DoubleValue (0.1));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   207
  // install source
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   208
  EnergySourceContainer sources = basicSourceHelper.Install (c);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   209
  /* device energy model */
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   210
  WifiRadioEnergyModelHelper radioEnergyHelper;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   211
  // configure radio energy model
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   212
  radioEnergyHelper.Set ("TxCurrentA", DoubleValue (0.0174));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   213
  // install device model
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   214
  DeviceEnergyModelContainer deviceModels = radioEnergyHelper.Install (devices, sources);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   215
  /***************************************************************************/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   216
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   217
  /** Internet stack **/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   218
  InternetStackHelper internet;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   219
  internet.Install (networkNodes);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   220
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   221
  Ipv4AddressHelper ipv4;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   222
  NS_LOG_INFO ("Assign IP Addresses.");
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   223
  ipv4.SetBase ("10.1.1.0", "255.255.255.0");
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   224
  Ipv4InterfaceContainer i = ipv4.Assign (devices);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   225
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   226
  TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   227
  Ptr<Socket> recvSink = Socket::CreateSocket (networkNodes.Get (1), tid);  // node 1, receiver
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   228
  InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 80);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   229
  recvSink->Bind (local);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   230
  recvSink->SetRecvCallback (MakeCallback (&ReceivePacket));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   231
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   232
  Ptr<Socket> source = Socket::CreateSocket (networkNodes.Get (0), tid);    // node 0, sender
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   233
  InetSocketAddress remote = InetSocketAddress (Ipv4Address::GetBroadcast (), 80);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   234
  source->SetAllowBroadcast (true);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   235
  source->Connect (remote);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   236
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   237
  /** connect trace sources **/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   238
  /***************************************************************************/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   239
  // all sources are connected to node 1
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   240
  // energy source
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   241
  Ptr<BasicEnergySource> basicSourcePtr = DynamicCast<BasicEnergySource> (sources.Get (1));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   242
  basicSourcePtr->TraceConnectWithoutContext ("RemainingEnergy", MakeCallback (&RemainingEnergy));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   243
  // device energy model
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   244
  Ptr<DeviceEnergyModel> basicRadioModelPtr =
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   245
    basicSourcePtr->FindDeviceEnergyModels ("ns3::WifiRadioEnergyModel").Get (0);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   246
  NS_ASSERT (basicRadioModelPtr != NULL);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   247
  basicRadioModelPtr->TraceConnectWithoutContext ("TotalEnergyConsumption", MakeCallback (&TotalEnergy));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   248
  /***************************************************************************/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   249
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   250
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   251
  /** simulation setup **/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   252
  // start traffic
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   253
  Simulator::Schedule (Seconds (startTime), &GenerateTraffic, source, PpacketSize,
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   254
                       networkNodes.Get (0), numPackets, interPacketInterval);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   255
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   256
  Simulator::Stop (Seconds (10.0));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   257
  Simulator::Run ();
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   258
  Simulator::Destroy ();
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   259
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   260
  return 0;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   261
}