src/fd-net-device/examples/fd-emu-onoff.cc
author Alina Quereilhac <alina.quereilhac@inria.fr>
Fri, 26 Apr 2013 02:00:09 +0200
changeset 9718 fe314aeb8ddb
parent 9271 85e753b6676c
permissions -rw-r--r--
Fixed compilation problem on the PlanetLabFdNetDeviceHelper and improved documentation for the fd-net-device module.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
     2
/*
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
     3
 * Copyright (c) 2012 University of Washington, 2012 INRIA
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
     4
 *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
     7
 * published by the Free Software Foundation;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
     8
 *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    12
 * GNU General Public License for more details.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    13
 *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    17
 *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    18
 * Author: Alina Quereilhac <alina.quereilhac@inria.fr>
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    19
 *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    20
 */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    21
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    22
// +----------------------+     +-----------------------+
9718
fe314aeb8ddb Fixed compilation problem on the PlanetLabFdNetDeviceHelper and improved documentation for the fd-net-device module.
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 9271
diff changeset
    23
// |      client host     |     |      server host      |
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    24
// +----------------------+     +-----------------------+
9718
fe314aeb8ddb Fixed compilation problem on the PlanetLabFdNetDeviceHelper and improved documentation for the fd-net-device module.
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 9271
diff changeset
    25
// |     ns-3 Node 0      |     |      ns-3 Node 1      |
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    26
// |  +----------------+  |     |   +----------------+  |
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    27
// |  |    ns-3 TCP    |  |     |   |    ns-3 TCP    |  |
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    28
// |  +----------------+  |     |   +----------------+  |
9718
fe314aeb8ddb Fixed compilation problem on the PlanetLabFdNetDeviceHelper and improved documentation for the fd-net-device module.
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 9271
diff changeset
    29
// |  |    ns-3 IPv4   |  |     |   |    ns-3 IPv4   |  |
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    30
// |  +----------------+  |     |   +----------------+  |
9718
fe314aeb8ddb Fixed compilation problem on the PlanetLabFdNetDeviceHelper and improved documentation for the fd-net-device module.
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 9271
diff changeset
    31
// |  |   FdNetDevice  |  |     |   |   FdNetDevice  |  |
fe314aeb8ddb Fixed compilation problem on the PlanetLabFdNetDeviceHelper and improved documentation for the fd-net-device module.
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 9271
diff changeset
    32
// |  |    10.1.1.1    |  |     |   |    10.1.1.2    |  |
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    33
// |  +----------------+  |     |   +----------------+  |
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    34
// |  |   raw socket   |  |     |   |   raw socket   |  |
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    35
// |  +----------------+  |     |   +----------------+  |
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    36
// |       | eth0 |       |     |        | eth0 |       |
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    37
// +-------+------+-------+     +--------+------+-------+
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    38
//
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    39
//         10.1.1.11                     10.1.1.12
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    40
//
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    41
//             |                            |
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    42
//             +----------------------------+
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    43
//
9718
fe314aeb8ddb Fixed compilation problem on the PlanetLabFdNetDeviceHelper and improved documentation for the fd-net-device module.
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 9271
diff changeset
    44
// This example is aimed at measuring the throughput of the FdNetDevice
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    45
// when using the EmuFdNetDeviceHelper. This is achieved by saturating
9718
fe314aeb8ddb Fixed compilation problem on the PlanetLabFdNetDeviceHelper and improved documentation for the fd-net-device module.
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 9271
diff changeset
    46
// the channel with TCP traffic. Then the throughput can be obtained from 
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    47
// the generated .pcap files.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    48
//
9718
fe314aeb8ddb Fixed compilation problem on the PlanetLabFdNetDeviceHelper and improved documentation for the fd-net-device module.
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 9271
diff changeset
    49
// To run this example you will need two hosts (client & server).
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    50
// Steps to run the experiment:
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    51
//
9718
fe314aeb8ddb Fixed compilation problem on the PlanetLabFdNetDeviceHelper and improved documentation for the fd-net-device module.
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 9271
diff changeset
    52
// 1 - Connect the 2 computers with an Ethernet cable.
fe314aeb8ddb Fixed compilation problem on the PlanetLabFdNetDeviceHelper and improved documentation for the fd-net-device module.
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 9271
diff changeset
    53
// 2 - Set the IP addresses on both Ethernet devices.
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    54
//
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    55
// client machine: $ sudo ip addr add dev eth0 10.1.1.11/24
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    56
// server machine: $ sudo ip addr add dev eth0 10.1.1.12/24
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    57
//
9718
fe314aeb8ddb Fixed compilation problem on the PlanetLabFdNetDeviceHelper and improved documentation for the fd-net-device module.
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 9271
diff changeset
    58
// 3 - Set both Ethernet devices to promiscuous mode.
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    59
//
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    60
// both machines: $ sudo ip link set eth0 promisc on
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    61
//
9718
fe314aeb8ddb Fixed compilation problem on the PlanetLabFdNetDeviceHelper and improved documentation for the fd-net-device module.
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 9271
diff changeset
    62
// 4 - Give root suid to the raw socket creator binary.
fe314aeb8ddb Fixed compilation problem on the PlanetLabFdNetDeviceHelper and improved documentation for the fd-net-device module.
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 9271
diff changeset
    63
//     If the --enable-sudo option was used to configure ns-3 with waf, then the following
fe314aeb8ddb Fixed compilation problem on the PlanetLabFdNetDeviceHelper and improved documentation for the fd-net-device module.
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 9271
diff changeset
    64
//     step will not be necessary.
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    65
//
9718
fe314aeb8ddb Fixed compilation problem on the PlanetLabFdNetDeviceHelper and improved documentation for the fd-net-device module.
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 9271
diff changeset
    66
// both hosts: $ sudo chown root.root build/src/fd-net-device/ns3-dev-raw-sock-creator
fe314aeb8ddb Fixed compilation problem on the PlanetLabFdNetDeviceHelper and improved documentation for the fd-net-device module.
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 9271
diff changeset
    67
// both hosts: $ sudo chmod 4755 build/src/fd-net-device/ns3-dev-raw-sock-creator
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    68
//
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    69
// 5 - Run the server side:
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    70
//
9718
fe314aeb8ddb Fixed compilation problem on the PlanetLabFdNetDeviceHelper and improved documentation for the fd-net-device module.
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 9271
diff changeset
    71
// server host: $ ./waf --run="fd-emu-onoff --serverMode=1"
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    72
//
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    73
// 6 - Run the client side:
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    74
//       
9718
fe314aeb8ddb Fixed compilation problem on the PlanetLabFdNetDeviceHelper and improved documentation for the fd-net-device module.
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 9271
diff changeset
    75
// client host: $ ./waf --run="fd-emu-onoff"
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    76
//
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    77
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    78
#include <iostream>
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    79
#include <fstream>
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    80
#include <vector>
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    81
#include <string>
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    82
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    83
#include "ns3/core-module.h"
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    84
#include "ns3/network-module.h"
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    85
#include "ns3/internet-module.h"
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    86
#include "ns3/applications-module.h"
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    87
#include "ns3/config-store-module.h"
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    88
#include "ns3/fd-net-device-module.h"
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    89
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    90
using namespace ns3;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    91
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    92
NS_LOG_COMPONENT_DEFINE ("EmuFdNetDeviceSaturationExample");
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    93
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    94
int 
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    95
main (int argc, char *argv[])
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    96
{
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    97
  uint16_t sinkPort = 8000;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    98
  uint32_t packetSize = 10000; // bytes
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    99
  std::string dataRate("1000Mb/s");
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   100
  bool serverMode = false;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   101
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   102
  std::string deviceName ("eth0");
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   103
  std::string client ("10.1.1.1");
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   104
  std::string server ("10.1.1.2");
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   105
  std::string netmask ("255.255.255.0");
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   106
  std::string macClient ("00:00:00:00:00:01");
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   107
  std::string macServer ("00:00:00:00:00:02");
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   108
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   109
  CommandLine cmd;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   110
  cmd.AddValue ("deviceName", "Device name", deviceName);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   111
  cmd.AddValue ("client", "Local IP address (dotted decimal only please)", client);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   112
  cmd.AddValue ("server", "Remote IP address (dotted decimal only please)", server);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   113
  cmd.AddValue ("localmask", "Local mask address (dotted decimal only please)", netmask);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   114
  cmd.AddValue ("serverMode", "1:true, 0:false, default client", serverMode);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   115
  cmd.AddValue ("mac-client", "Mac Address for Server Client : 00:00:00:00:00:01", macClient);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   116
  cmd.AddValue ("mac-server", "Mac Address for Server Default : 00:00:00:00:00:02", macServer);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   117
  cmd.AddValue ("data-rate", "Data rate defaults to 1000Mb/s", dataRate);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   118
  cmd.Parse (argc, argv);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   119
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   120
  Ipv4Address remoteIp;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   121
  Ipv4Address localIp;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   122
  Mac48AddressValue localMac;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   123
  
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   124
  if (serverMode)
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   125
  {
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   126
     remoteIp = Ipv4Address (client.c_str ());
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   127
     localIp = Ipv4Address (server.c_str ());
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   128
     localMac = Mac48AddressValue (macServer.c_str ());
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   129
  }
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   130
  else
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   131
  {
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   132
     remoteIp = Ipv4Address (server.c_str ());
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   133
     localIp = Ipv4Address (client.c_str ());
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   134
     localMac =  Mac48AddressValue (macClient.c_str ());
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   135
  }
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   136
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   137
  Ipv4Mask localMask (netmask.c_str ());
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   138
  
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   139
  GlobalValue::Bind ("SimulatorImplementationType", StringValue ("ns3::RealtimeSimulatorImpl"));
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   140
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   141
  GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   142
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   143
  NS_LOG_INFO ("Create Node");
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   144
  Ptr<Node> node = CreateObject<Node> ();
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   145
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   146
  NS_LOG_INFO ("Create Device");
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   147
  EmuFdNetDeviceHelper emu;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   148
  emu.SetDeviceName (deviceName);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   149
  NetDeviceContainer devices = emu.Install (node);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   150
  Ptr<NetDevice> device = devices.Get (0);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   151
  device->SetAttribute ("Address", localMac);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   152
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   153
  NS_LOG_INFO ("Add Internet Stack");
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   154
  InternetStackHelper internetStackHelper;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   155
  internetStackHelper.SetIpv4StackInstall(true);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   156
  internetStackHelper.Install (node);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   157
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   158
  NS_LOG_INFO ("Create IPv4 Interface");
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   159
  Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   160
  uint32_t interface = ipv4->AddInterface (device);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   161
  Ipv4InterfaceAddress address = Ipv4InterfaceAddress (localIp, localMask);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   162
  ipv4->AddAddress (interface, address);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   163
  ipv4->SetMetric (interface, 1);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   164
  ipv4->SetUp (interface);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   165
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   166
  if(serverMode)
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   167
  {
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   168
    Address sinkLocalAddress (InetSocketAddress (localIp, sinkPort));
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   169
    PacketSinkHelper sinkHelper ("ns3::TcpSocketFactory", sinkLocalAddress);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   170
    ApplicationContainer sinkApp = sinkHelper.Install (node);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   171
    sinkApp.Start (Seconds (1.0));
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   172
    sinkApp.Stop (Seconds (60.0));
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   173
    
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   174
    emu.EnablePcap ("fd-server", device);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   175
  }
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   176
  else
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   177
  {
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   178
    AddressValue remoteAddress (InetSocketAddress (remoteIp, sinkPort));
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   179
    OnOffHelper onoff ("ns3::TcpSocketFactory", Address ());
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   180
    onoff.SetAttribute ("Remote", remoteAddress);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   181
    onoff.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   182
    onoff.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   183
    onoff.SetAttribute ("DataRate", DataRateValue (dataRate));
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   184
    onoff.SetAttribute ("PacketSize", UintegerValue (packetSize));
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   185
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   186
    ApplicationContainer clientApps = onoff.Install (node);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   187
    clientApps.Start (Seconds (4.0));
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   188
    clientApps.Stop (Seconds (58.0));
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   189
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   190
    emu.EnablePcap ("fd-client", device);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   191
  }
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   192
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   193
  Simulator::Stop (Seconds (61.0));
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   194
  Simulator::Run ();
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   195
  Simulator::Destroy ();
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   196
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   197
  return 0;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   198
}
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   199