examples/energy/energy-model-example.cc
author Peter D. Barnes, Jr. <barnes26@llnl.gov>
Fri, 26 Sep 2014 15:51:00 -0700
changeset 10968 2d29fee2b7b8
parent 9227 cca3ebe36928
permissions -rw-r--r--
[Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
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/mobility-module.h"
6941
9d2c79c992d7 Split contrib module into config-store and tools
Mitch Watrous <watrous@u.washington.edu>
parents: 6865
diff changeset
    24
#include "ns3/config-store-module.h"
6699
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    25
#include "ns3/wifi-module.h"
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    26
#include "ns3/energy-module.h"
6848
1f453ad50ef3 Converts csma, emu, tap-bridge, point-to-point, wifi and wimax modules into modular format
Lalith Suresh <suresh.lalith@gmail.com>
parents: 6823
diff changeset
    27
#include "ns3/internet-module.h"
6699
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
10968
2d29fee2b7b8 [Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9227
diff changeset
    34
using namespace ns3;
6699
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    35
10968
2d29fee2b7b8 [Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9227
diff changeset
    36
NS_LOG_COMPONENT_DEFINE ("EnergyExample");
6699
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    37
9227
cca3ebe36928 make non-static global debugging-only functions static inline (bug 1170).
Andrey Mazo <mazo@telum.ru>
parents: 7733
diff changeset
    38
static inline std::string
7704
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7252
diff changeset
    39
PrintReceivedPacket (Address& from)
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7252
diff changeset
    40
{
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7252
diff changeset
    41
  InetSocketAddress iaddr = InetSocketAddress::ConvertFrom (from);
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7252
diff changeset
    42
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7252
diff changeset
    43
  std::ostringstream oss;
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7252
diff changeset
    44
  oss << "--\nReceived one packet! Socket: " << iaddr.GetIpv4 ()
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7252
diff changeset
    45
      << " port: " << iaddr.GetPort ()
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7252
diff changeset
    46
      << " at time = " << Simulator::Now ().GetSeconds ()
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7252
diff changeset
    47
      << "\n--";
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7252
diff changeset
    48
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7252
diff changeset
    49
  return oss.str ();
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7252
diff changeset
    50
}
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7252
diff changeset
    51
6699
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    52
/**
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    53
 * \param socket Pointer to socket.
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    54
 *
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    55
 * Packet receiving sink.
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
void
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    58
ReceivePacket (Ptr<Socket> socket)
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
  Ptr<Packet> packet;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    61
  Address from;
7733
abd63101a73a Add parenthesis in while (packet = socket->Recv ()) to make clang++ (LLVM) happy
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7704
diff changeset
    62
  while ((packet = socket->RecvFrom (from)))
6699
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    63
    {
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    64
      if (packet->GetSize () > 0)
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    65
        {
7704
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7252
diff changeset
    66
          NS_LOG_UNCOND (PrintReceivedPacket (from));
6699
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    67
        }
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
}
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    70
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    71
/**
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    72
 * \param socket Pointer to socket.
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    73
 * \param pktSize Packet size.
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    74
 * \param n Pointer to node.
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    75
 * \param pktCount Number of packets to generate.
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    76
 * \param pktInterval Packet sending interval.
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    77
 *
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    78
 * Traffic generator.
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    79
 */
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    80
static void
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    81
GenerateTraffic (Ptr<Socket> socket, uint32_t pktSize, Ptr<Node> n,
7196
0f12b1572bca general examples coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6941
diff changeset
    82
                 uint32_t pktCount, Time pktInterval)
6699
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
  if (pktCount > 0)
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    85
    {
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    86
      socket->Send (Create<Packet> (pktSize));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    87
      Simulator::Schedule (pktInterval, &GenerateTraffic, socket, pktSize, n,
7196
0f12b1572bca general examples coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6941
diff changeset
    88
                           pktCount - 1, pktInterval);
6699
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    89
    }
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    90
  else
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
      socket->Close ();
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    93
    }
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    94
}
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    95
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    96
/// Trace function for remaining energy at node.
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    97
void
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
    98
RemainingEnergy (double oldValue, double remainingEnergy)
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
  NS_LOG_UNCOND (Simulator::Now ().GetSeconds ()
7252
c8200621e252 rerun check-style.py with uncrustify-0.58
Tom Henderson <tomh@tomh.org>
parents: 7231
diff changeset
   101
                 << "s Current remaining energy = " << remainingEnergy << "J");
6699
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   102
}
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
/// 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
   105
void
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   106
TotalEnergy (double oldValue, double totalEnergy)
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   107
{
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   108
  NS_LOG_UNCOND (Simulator::Now ().GetSeconds ()
7252
c8200621e252 rerun check-style.py with uncrustify-0.58
Tom Henderson <tomh@tomh.org>
parents: 7231
diff changeset
   109
                 << "s Total energy consumed by radio = " << totalEnergy << "J");
6699
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
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   112
int
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   113
main (int argc, char *argv[])
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   114
{
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
  LogComponentEnable ("EnergySource", LOG_LEVEL_DEBUG);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   117
  LogComponentEnable ("BasicEnergySource", LOG_LEVEL_DEBUG);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   118
  LogComponentEnable ("DeviceEnergyModel", LOG_LEVEL_DEBUG);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   119
  LogComponentEnable ("WifiRadioEnergyModel", LOG_LEVEL_DEBUG);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   120
   */
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
  std::string phyMode ("DsssRate1Mbps");
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   123
  double Prss = -80;            // dBm
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   124
  uint32_t PpacketSize = 200;   // bytes
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   125
  bool verbose = false;
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
  // simulation parameters
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   128
  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
   129
  double interval = 1;          // seconds
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   130
  double startTime = 0.0;       // seconds
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   131
  double distanceToRx = 100.0;  // meters
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   132
  /*
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   133
   * 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
   134
   * configuration.
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   135
   */
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   136
  double offset = 81;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   137
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   138
  CommandLine cmd;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   139
  cmd.AddValue ("phyMode", "Wifi Phy mode", phyMode);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   140
  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
   141
  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
   142
  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
   143
  cmd.AddValue ("startTime", "Simulation start time", startTime);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   144
  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
   145
  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
   146
  cmd.Parse (argc, argv);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   147
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   148
  // Convert to time object
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   149
  Time interPacketInterval = Seconds (interval);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   150
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   151
  // disable fragmentation for frames below 2200 bytes
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   152
  Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold",
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   153
                      StringValue ("2200"));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   154
  // 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
   155
  Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold",
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   156
                      StringValue ("2200"));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   157
  // 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
   158
  Config::SetDefault ("ns3::WifiRemoteStationManager::NonUnicastMode",
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   159
                      StringValue (phyMode));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   160
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   161
  NodeContainer c;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   162
  c.Create (2);     // create 2 nodes
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   163
  NodeContainer networkNodes;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   164
  networkNodes.Add (c.Get (0));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   165
  networkNodes.Add (c.Get (1));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   166
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   167
  // 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
   168
  WifiHelper wifi;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   169
  if (verbose)
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
      wifi.EnableLogComponents ();
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   172
    }
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   173
  wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   174
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   175
  /** Wifi PHY **/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   176
  /***************************************************************************/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   177
  YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   178
  wifiPhy.Set ("RxGain", DoubleValue (-10));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   179
  wifiPhy.Set ("TxGain", DoubleValue (offset + Prss));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   180
  wifiPhy.Set ("CcaMode1Threshold", DoubleValue (0.0));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   181
  /***************************************************************************/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   182
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   183
  /** wifi channel **/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   184
  YansWifiChannelHelper wifiChannel;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   185
  wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   186
  wifiChannel.AddPropagationLoss ("ns3::FriisPropagationLossModel");
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   187
  // create wifi channel
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   188
  Ptr<YansWifiChannel> wifiChannelPtr = wifiChannel.Create ();
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   189
  wifiPhy.SetChannel (wifiChannelPtr);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   190
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   191
  /** MAC layer **/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   192
  // 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
   193
  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   194
  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode",
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   195
                                StringValue (phyMode), "ControlMode",
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   196
                                StringValue (phyMode));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   197
  // Set it to ad-hoc mode
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   198
  wifiMac.SetType ("ns3::AdhocWifiMac");
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   199
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   200
  /** install PHY + MAC **/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   201
  NetDeviceContainer devices = wifi.Install (wifiPhy, wifiMac, networkNodes);
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
  /** mobility **/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   204
  MobilityHelper mobility;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   205
  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   206
  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
   207
  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
   208
  mobility.SetPositionAllocator (positionAlloc);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   209
  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   210
  mobility.Install (c);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   211
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   212
  /** Energy Model **/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   213
  /***************************************************************************/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   214
  /* energy source */
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   215
  BasicEnergySourceHelper basicSourceHelper;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   216
  // configure energy source
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   217
  basicSourceHelper.Set ("BasicEnergySourceInitialEnergyJ", DoubleValue (0.1));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   218
  // install source
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   219
  EnergySourceContainer sources = basicSourceHelper.Install (c);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   220
  /* device energy model */
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   221
  WifiRadioEnergyModelHelper radioEnergyHelper;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   222
  // configure radio energy model
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   223
  radioEnergyHelper.Set ("TxCurrentA", DoubleValue (0.0174));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   224
  // install device model
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   225
  DeviceEnergyModelContainer deviceModels = radioEnergyHelper.Install (devices, sources);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   226
  /***************************************************************************/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   227
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   228
  /** Internet stack **/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   229
  InternetStackHelper internet;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   230
  internet.Install (networkNodes);
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
  Ipv4AddressHelper ipv4;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   233
  NS_LOG_INFO ("Assign IP Addresses.");
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   234
  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
   235
  Ipv4InterfaceContainer i = ipv4.Assign (devices);
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
  TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   238
  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
   239
  InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 80);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   240
  recvSink->Bind (local);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   241
  recvSink->SetRecvCallback (MakeCallback (&ReceivePacket));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   242
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   243
  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
   244
  InetSocketAddress remote = InetSocketAddress (Ipv4Address::GetBroadcast (), 80);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   245
  source->SetAllowBroadcast (true);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   246
  source->Connect (remote);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   247
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   248
  /** connect trace sources **/
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
  // all sources are connected to node 1
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   251
  // energy source
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   252
  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
   253
  basicSourcePtr->TraceConnectWithoutContext ("RemainingEnergy", MakeCallback (&RemainingEnergy));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   254
  // device energy model
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   255
  Ptr<DeviceEnergyModel> basicRadioModelPtr =
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   256
    basicSourcePtr->FindDeviceEnergyModels ("ns3::WifiRadioEnergyModel").Get (0);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   257
  NS_ASSERT (basicRadioModelPtr != NULL);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   258
  basicRadioModelPtr->TraceConnectWithoutContext ("TotalEnergyConsumption", MakeCallback (&TotalEnergy));
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
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   261
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   262
  /** simulation setup **/
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   263
  // start traffic
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   264
  Simulator::Schedule (Seconds (startTime), &GenerateTraffic, source, PpacketSize,
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   265
                       networkNodes.Get (0), numPackets, interPacketInterval);
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   266
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   267
  Simulator::Stop (Seconds (10.0));
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   268
  Simulator::Run ();
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   269
  Simulator::Destroy ();
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   270
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   271
  return 0;
d8909a1fd0ff RV battery model and WiFi energy example
He Wu <mdzz@u.washington.edu>
parents:
diff changeset
   272
}