A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Portuguese
Docs ▼
Wiki
Manual
Models
Develop ▼
API
Bugs
API
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
realtime-fd2fd-onoff.cc
Go to the documentation of this file.
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* Copyright (c) 2012 University of Washington, 2012 INRIA
4
*
5
* This program is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License version 2 as
7
* published by the Free Software Foundation;
8
*
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
*
18
* Author: Alina Quereilhac <alina.quereilhac@inria.fr>
19
*
20
*/
21
22
//
23
// node 0 node 1
24
// +----------------+ +----------------+
25
// | ns-3 TCP | | ns-3 TCP |
26
// +----------------+ +----------------+
27
// | 10.1.1.1 | | 10.1.1.2 |
28
// +----------------+ socketpair +----------------+
29
// | fd-net-device |--------------| fd-net-device |
30
// +----------------+ +----------------+
31
//
32
// This example is aimed at meassuring the thoughput of the FdNetDevice
33
// in a pure simulation. For this purpose two FdNetDevices, attached to
34
// different nodes but in a same simulation, are connected using a socket pair.
35
// TCP traffic is sent at a saturating data rate. Then the thoughput can
36
// be obtained from the generated .pcap files.
37
//
38
// Steps to run the experiment:
39
//
40
// $ ./waf --run="fd2fd-onoff"
41
//
42
43
#include <sys/socket.h>
44
#include <errno.h>
45
46
#include "ns3/core-module.h"
47
#include "ns3/network-module.h"
48
#include "ns3/internet-module.h"
49
#include "ns3/fd-net-device-module.h"
50
#include "ns3/applications-module.h"
51
52
using namespace
ns3;
53
54
NS_LOG_COMPONENT_DEFINE
(
"RealtimeFdNetDeviceSaturationExample"
);
55
56
int
57
main
(
int
argc,
char
*argv[])
58
{
59
60
uint16_t sinkPort = 8000;
61
uint32_t packetSize = 10000;
// bytes
62
std::string dataRate(
"1000Mb/s"
);
63
64
GlobalValue::Bind
(
"SimulatorImplementationType"
,
StringValue
(
"ns3::RealtimeSimulatorImpl"
));
65
GlobalValue::Bind
(
"ChecksumEnabled"
,
BooleanValue
(
true
));
66
67
NS_LOG_INFO
(
"Create Node"
);
68
NodeContainer
nodes;
69
nodes.
Create
(2);
70
71
NS_LOG_INFO
(
"Create Device"
);
72
FdNetDeviceHelper
fd;
73
NetDeviceContainer
devices = fd.
Install
(nodes);
74
75
int
sv[2];
76
if
(socketpair (AF_UNIX, SOCK_DGRAM, 0, sv) < 0)
77
{
78
NS_FATAL_ERROR
(
"Error creating pipe="
<< strerror (errno));
79
}
80
81
Ptr<NetDevice>
d1 = devices.
Get
(0);
82
Ptr<FdNetDevice>
clientDevice = d1->
GetObject
<
FdNetDevice
> ();
83
clientDevice->
SetFileDescriptor
(sv[0]);
84
85
Ptr<NetDevice>
d2 = devices.
Get
(1);
86
Ptr<FdNetDevice>
serverDevice = d2->
GetObject
<
FdNetDevice
> ();
87
serverDevice->
SetFileDescriptor
(sv[1]);
88
89
NS_LOG_INFO
(
"Add Internet Stack"
);
90
InternetStackHelper
internetStackHelper;
91
internetStackHelper.
SetIpv4StackInstall
(
true
);
92
internetStackHelper.
Install
(nodes);
93
94
NS_LOG_INFO
(
"Create IPv4 Interface"
);
95
Ipv4AddressHelper
addresses;
96
addresses.
SetBase
(
"10.0.0.0"
,
"255.255.255.0"
);
97
Ipv4InterfaceContainer
interfaces = addresses.
Assign
(devices);
98
99
Ptr<Node>
clientNode = nodes.
Get
(0);
100
Ipv4Address
serverIp = interfaces.
GetAddress
(1);
101
Ptr<Node>
serverNode = nodes.
Get
(1);
102
103
// server
104
Address
sinkLocalAddress (
InetSocketAddress
(serverIp, sinkPort));
105
PacketSinkHelper
sinkHelper (
"ns3::TcpSocketFactory"
, sinkLocalAddress);
106
ApplicationContainer
sinkApp = sinkHelper.
Install
(serverNode);
107
sinkApp.
Start
(
Seconds
(0.0));
108
sinkApp.
Stop
(
Seconds
(40.0));
109
fd.
EnablePcap
(
"rt-fd2fd-onoff-server"
, serverDevice);
110
111
// client
112
AddressValue
serverAddress (
InetSocketAddress
(serverIp, sinkPort));
113
OnOffHelper
onoff (
"ns3::TcpSocketFactory"
,
Address
());
114
onoff.
SetAttribute
(
"Remote"
, serverAddress);
115
onoff.
SetAttribute
(
"OnTime"
,
StringValue
(
"ns3::ConstantRandomVariable[Constant=1]"
));
116
onoff.
SetAttribute
(
"OffTime"
,
StringValue
(
"ns3::ConstantRandomVariable[Constant=0]"
));
117
onoff.
SetAttribute
(
"DataRate"
,
DataRateValue
(dataRate));
118
onoff.
SetAttribute
(
"PacketSize"
,
UintegerValue
(packetSize));
119
ApplicationContainer
clientApps = onoff.
Install
(clientNode);
120
clientApps.
Start
(
Seconds
(1.0));
121
clientApps.
Stop
(
Seconds
(39.0));
122
fd.
EnablePcap
(
"rt-fd2fd-onoff-client"
, clientDevice);
123
124
Simulator::Stop
(
Seconds
(40.0));
125
Simulator::Run
();
126
Simulator::Destroy
();
127
}
src
fd-net-device
examples
realtime-fd2fd-onoff.cc
Generated on Tue May 14 2013 11:08:20 for ns-3 by
1.8.1.2