src/dsr/examples/dsr.cc
author Yufei Cheng <yfcheng@ittc.ku.edu>
Fri, 27 Jan 2012 15:15:48 -0800
changeset 8751 efad81f3cb47
child 8752 2da1fab73114
permissions -rw-r--r--
Add IPv4 DSR routing
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
     2
/*
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
     3
 * Copyright (c) 2011 Yufei Cheng
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
     4
 *
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
     8
 *
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    12
 * GNU General Public License for more details.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    13
 *
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    17
 *
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    18
 * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    19
 *
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    20
 * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    21
 * ResiliNets Research Group  http://wiki.ittc.ku.edu/resilinets
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    22
 * Information and Telecommunication Technology Center (ITTC)
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    23
 * and Department of Electrical Engineering and Computer Science
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    24
 * The University of Kansas Lawrence, KS USA.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    25
 *
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    26
 * Work supported in part by NSF FIND (Future Internet Design) Program
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    27
 * under grant CNS-0626918 (Postmodern Internet Architecture),
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    28
 * NSF grant CNS-1050226 (Multilayer Network Resilience Analysis and Experimentation on GENI),
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    29
 * US Department of Defense (DoD), and ITTC at The University of Kansas.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    30
 */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    31
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    32
#include <iostream>
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    33
#include <fstream>
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    34
#include <vector>
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    35
#include <string>
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    36
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    37
#include "ns3/core-module.h"
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    38
#include "ns3/network-module.h"
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    39
#include "ns3/applications-module.h"
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    40
#include "ns3/mobility-module.h"
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    41
#include "ns3/config-store-module.h"
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    42
#include "ns3/wifi-module.h"
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    43
#include "ns3/internet-module.h"
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    44
#include "ns3/ipv4-list-routing-helper.h"
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    45
#include "ns3/dsr-module.h"
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    46
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    47
NS_LOG_COMPONENT_DEFINE ("DsrExample");
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    48
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    49
using namespace ns3;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    50
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    51
int main (int argc, char *argv[])
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    52
{
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    53
  //
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    54
  // Users may find it convenient to turn on explicit debugging
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    55
  // for selected modules; the below lines suggest how to do this
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    56
  //
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    57
#if 0
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    58
  LogComponentEnable ("Ipv4L3Protocol", LOG_LEVEL_ALL);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    59
  LogComponentEnable ("Ipv4L4Protocol", LOG_LEVEL_ALL);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    60
  LogComponentEnable ("UdpL4Protocol", LOG_LEVEL_ALL);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    61
  LogComponentEnable ("NetDevice", LOG_LEVEL_ALL);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    62
  LogComponentEnable ("Ipv4EndPointDemux", LOG_LEVEL_ALL);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    63
#endif
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    64
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    65
#if 0
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    66
  LogComponentEnable ("DsrOptions", LOG_LEVEL_ALL);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    67
  LogComponentEnable ("DsrRouting", LOG_LEVEL_ALL);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    68
  LogComponentEnable ("DsrOptionHeader", LOG_LEVEL_ALL);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    69
  LogComponentEnable ("DsrFsHeader", LOG_LEVEL_ALL);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    70
  LogComponentEnable ("DsrGraReplyTable", LOG_LEVEL_ALL);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    71
  LogComponentEnable ("DsrSendBuffer", LOG_LEVEL_ALL);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    72
  LogComponentEnable ("RouteCache", LOG_LEVEL_ALL);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    73
  LogComponentEnable ("DsrMaintainBuffer", LOG_LEVEL_ALL);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    74
  LogComponentEnable ("RreqTable", LOG_LEVEL_ALL);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    75
#endif
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    76
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    77
  SeedManager::SetSeed (99);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    78
  SeedManager::SetRun (1);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    79
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    80
  double totalTime = 1000.0;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    81
  double dataStart = 50.0;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    82
  uint32_t nWifis = 50;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    83
  uint32_t nSinks = 10;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    84
  double txp = 8.9048;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    85
  double pauseTime = 0.0;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    86
  double nodeSpeed = 20.0;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    87
  uint32_t packetSize = 64;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    88
  std::string phyModeControl ("DsssRate11Mbps");
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    89
  std::string phyModeData ("DsssRate11Mbps");
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    90
  std::string rate = "0.512kbps";
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    91
  double ppers = 1.0;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    92
  /*
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    93
   * Define the DSR parameters
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    94
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    95
  uint32_t m_maxCacheLen = 64;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    96
  Time m_maxCacheTime = Seconds (30);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    97
  Time m_nodeTraversalTime = MicroSeconds (2);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    98
  Time m_passiveAckTimeout = MicroSeconds (4);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    99
  uint32_t m_maxSendBuffLen = 64;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   100
  Time m_sendBufferTimeout = Seconds (30);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   101
  uint32_t m_maxMaintainLen = 50;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   102
  Time m_maxMaintainTime = Seconds (30);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   103
  uint32_t m_maintenanceRetries = 2;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   104
  std::string cacheType ("PathCache");            // PathCache
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   105
  bool enableSubRoute = false;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   106
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   107
  //Allow users to override the default parameters and set it to new ones from CommandLine.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   108
  CommandLine cmd;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   109
  cmd.AddValue ("MaxCacheLen", "Max route cache length.", m_maxCacheLen);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   110
  cmd.AddValue ("RouteCacheTimeout", "Max route cache timeout.", m_maxCacheTime);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   111
  cmd.AddValue ("NodeTraversalTime", "The time it takes to travel to neighboring nodes.", m_nodeTraversalTime);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   112
  cmd.AddValue ("PassiveAckTimeout", "The time for ack to traversal the two neighboring nodes.", m_passiveAckTimeout);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   113
  cmd.AddValue ("MaxSendBuffLen", "Maximum number of packets that can be stored.", m_maxSendBuffLen);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   114
  cmd.AddValue ("MaxSendBuffTime", "Maximum time packets can be queued.", m_sendBufferTimeout);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   115
  cmd.AddValue ("MaxMaintLen", "Maximum number of packets that can be stored.", m_maxMaintainLen);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   116
  cmd.AddValue ("MaxMaintTime", "Maximum time packets can be queued.", m_maxMaintainTime);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   117
  cmd.AddValue ("MaintenanceRetries", "Maximum retransmission retries for maintenance data packet.", m_maintenanceRetries);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   118
  cmd.AddValue ("CacheType", "route cache type, Default:PathCache", cacheType);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   119
  cmd.AddValue ("EnableSubRoute", "whether to enable the sub route mechanism, Default:false", enableSubRoute);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   120
  cmd.Parse (argc, argv);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   121
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   122
  NS_LOG_INFO ("Create nodes.");
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   123
  NodeContainer nodes;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   124
  nodes.Create (nWifis);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   125
  NetDeviceContainer devices;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   126
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   127
  // Fix non-unicast data rate to be the same as that of unicast
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   128
  Config::SetDefault ("ns3::WifiRemoteStationManager::NonUnicastMode", StringValue (phyModeData));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   129
  Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("2200"));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   130
  // disable fragmentation
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   131
  Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("2200"));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   132
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   133
  NS_LOG_INFO ("Create channels.");
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   134
  WifiHelper wifi;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   135
  wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   136
  YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   137
  YansWifiChannelHelper wifiChannel;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   138
  wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   139
  wifiChannel.AddPropagationLoss ("ns3::FriisPropagationLossModel");
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   140
  wifiPhy.SetChannel (wifiChannel.Create ());
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   141
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   142
  // Add a non-QoS upper mac, and disable rate control
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   143
  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   144
  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue (phyModeData),
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   145
                                "ControlMode", StringValue (phyModeControl));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   146
  wifiPhy.Set ("TxPowerStart", DoubleValue (txp));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   147
  wifiPhy.Set ("TxPowerEnd", DoubleValue (txp));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   148
  // Set it to adhoc mode
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   149
  wifiMac.SetType ("ns3::AdhocWifiMac");
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   150
  devices = wifi.Install (wifiPhy, wifiMac, nodes);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   151
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   152
  InternetStackHelper internet;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   153
  DsrMainHelper dsrMain;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   154
  DsrHelper dsr;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   155
  dsr.Set ("MaxCacheLen", UintegerValue (m_maxCacheLen));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   156
  dsr.Set ("RouteCacheTimeout", TimeValue (m_maxCacheTime));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   157
  dsr.Set ("NodeTraversalTime", TimeValue (m_nodeTraversalTime));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   158
  dsr.Set ("PassiveAckTimeout", TimeValue (m_passiveAckTimeout));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   159
  dsr.Set ("MaxSendBuffLen", UintegerValue (m_maxSendBuffLen));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   160
  dsr.Set ("MaxSendBuffTime", TimeValue (m_sendBufferTimeout));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   161
  dsr.Set ("MaxMaintLen", UintegerValue (m_maxMaintainLen));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   162
  dsr.Set ("MaxMaintTime", TimeValue (m_maxMaintainTime));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   163
  dsr.Set ("MaintenanceRetries", UintegerValue (m_maintenanceRetries));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   164
  dsr.Set ("EnableSubRoute", BooleanValue (false));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   165
  dsr.Set ("CacheType", StringValue (cacheType));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   166
  dsr.Set ("SendBuffInterval", TimeValue (Seconds (50)));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   167
  internet.Install (nodes);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   168
  dsrMain.Install (dsr, nodes);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   169
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   170
  NS_LOG_INFO ("assigning ip address");
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   171
  Ipv4AddressHelper addressAdhoc;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   172
  addressAdhoc.SetBase ("10.1.1.0", "255.255.255.0");
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   173
  Ipv4InterfaceContainer adhocInterfaces;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   174
  adhocInterfaces = addressAdhoc.Assign (devices);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   175
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   176
  MobilityHelper mobility;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   177
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   178
  ObjectFactory pos;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   179
  pos.SetTypeId ("ns3::RandomRectanglePositionAllocator");
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   180
  pos.Set ("X", RandomVariableValue (UniformVariable (0.0, 300.0)));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   181
  pos.Set ("Y", RandomVariableValue (UniformVariable (0.0, 1500.0)));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   182
  Ptr<PositionAllocator> positionAlloc = pos.Create ()->GetObject<PositionAllocator> ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   183
  mobility.SetPositionAllocator (positionAlloc);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   184
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   185
  mobility.SetMobilityModel ("ns3::RandomWaypointMobilityModel",
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   186
                             "Speed", RandomVariableValue (ConstantVariable (nodeSpeed)),
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   187
                             "Pause", RandomVariableValue (ConstantVariable (pauseTime)),
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   188
                             "PositionAllocator", PointerValue (positionAlloc));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   189
  mobility.Install (nodes);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   190
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   191
  // many to many application
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   192
  uint16_t port = 9;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   193
  double randomStartTime = (1 / ppers) / nSinks;     //distributed btw 1s evenly as we are sending 1pkt/s
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   194
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   195
  for (uint32_t i = 0; i < nSinks; i++)
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   196
    {
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   197
      PacketSinkHelper sink ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), port));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   198
      ApplicationContainer apps_sink = sink.Install (nodes.Get (i));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   199
      apps_sink.Start (Seconds (0.0));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   200
      apps_sink.Stop (Seconds (totalTime));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   201
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   202
      OnOffHelper onoff1 ("ns3::UdpSocketFactory", Address (InetSocketAddress (adhocInterfaces.GetAddress (i), port)));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   203
      onoff1.SetAttribute ("OnTime", RandomVariableValue (ConstantVariable (1)));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   204
      onoff1.SetAttribute ("OffTime", RandomVariableValue (ConstantVariable (0)));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   205
      onoff1.SetAttribute ("PacketSize", UintegerValue (packetSize));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   206
      onoff1.SetAttribute ("DataRate", DataRateValue (DataRate (rate)));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   207
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   208
      ApplicationContainer apps1 = onoff1.Install (nodes.Get (i + nSinks));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   209
      apps1.Start (Seconds (dataStart + i * randomStartTime));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   210
      apps1.Stop (Seconds (totalTime));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   211
    }
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   212
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   213
  AsciiTraceHelper ascii;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   214
  Ptr<OutputStreamWrapper> stream = ascii.CreateFileStream ("dsrtest.tr");
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   215
  wifiPhy.EnableAsciiAll (stream);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   216
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   217
  NS_LOG_INFO ("Run Simulation.");
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   218
  Simulator::Stop (Seconds (totalTime));
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   219
  Simulator::Run ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   220
  Simulator::Destroy ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   221
}