A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Documentation ▼
Installation
Manual
Models
Contributing
Wiki
Development ▼
API Docs
Issue Tracker
Merge Requests
API
Loading...
Searching...
No Matches
tcp-bulk-send.cc
Go to the documentation of this file.
1
/*
2
* SPDX-License-Identifier: GPL-2.0-only
3
*/
4
5
// Network topology
6
//
7
// n0 ----------- n1
8
// 500 Kbps
9
// 5 ms
10
//
11
// - Flow from n0 to n1 using BulkSendApplication.
12
// - Tracing of queues and packet receptions to file "tcp-bulk-send.tr"
13
// and pcap tracing available when tracing is turned on.
14
15
#include "ns3/applications-module.h"
16
#include "ns3/core-module.h"
17
#include "ns3/internet-module.h"
18
#include "ns3/network-module.h"
19
#include "ns3/packet-sink.h"
20
#include "ns3/point-to-point-module.h"
21
22
#include <fstream>
23
#include <string>
24
25
using namespace
ns3
;
26
27
NS_LOG_COMPONENT_DEFINE
(
"TcpBulkSendExample"
);
28
29
int
30
main(
int
argc
,
char
*
argv
[])
31
{
32
bool
tracing
=
false
;
33
uint32_t
maxBytes
= 0;
34
35
//
36
// Allow the user to override any of the defaults at
37
// run-time, via command-line arguments
38
//
39
CommandLine
cmd
(
__FILE__
);
40
cmd
.AddValue(
"tracing"
,
"Flag to enable/disable tracing"
,
tracing
);
41
cmd
.AddValue(
"maxBytes"
,
"Total number of bytes for application to send"
,
maxBytes
);
42
cmd
.Parse(
argc
,
argv
);
43
44
//
45
// Explicitly create the nodes required by the topology (shown above).
46
//
47
NS_LOG_INFO
(
"Create nodes."
);
48
NodeContainer
nodes
;
49
nodes
.
Create
(2);
50
51
NS_LOG_INFO
(
"Create channels."
);
52
53
//
54
// Explicitly create the point-to-point link required by the topology (shown above).
55
//
56
PointToPointHelper
pointToPoint
;
57
pointToPoint
.SetDeviceAttribute(
"DataRate"
,
StringValue
(
"500Kbps"
));
58
pointToPoint
.SetChannelAttribute(
"Delay"
,
StringValue
(
"5ms"
));
59
60
NetDeviceContainer
devices
;
61
devices
=
pointToPoint
.Install(
nodes
);
62
63
//
64
// Install the internet stack on the nodes
65
//
66
InternetStackHelper
internet
;
67
internet
.Install(
nodes
);
68
69
//
70
// We've got the "hardware" in place. Now we need to add IP addresses.
71
//
72
NS_LOG_INFO
(
"Assign IP Addresses."
);
73
Ipv4AddressHelper
ipv4
;
74
ipv4
.SetBase(
"10.1.1.0"
,
"255.255.255.0"
);
75
Ipv4InterfaceContainer
i
=
ipv4
.Assign(devices);
76
77
NS_LOG_INFO
(
"Create Applications."
);
78
79
//
80
// Create a BulkSendApplication and install it on node 0
81
//
82
uint16_t
port
= 9;
// well-known echo port number
83
84
BulkSendHelper
source
(
"ns3::TcpSocketFactory"
,
InetSocketAddress
(
i
.GetAddress(1),
port
));
85
// Set the amount of data to send in bytes. Zero is unlimited.
86
source
.SetAttribute(
"MaxBytes"
,
UintegerValue
(
maxBytes
));
87
ApplicationContainer
sourceApps
=
source
.Install(
nodes
.
Get
(0));
88
sourceApps
.
Start
(
Seconds
(0));
89
sourceApps
.Stop(
Seconds
(10));
90
91
//
92
// Create a PacketSinkApplication and install it on node 1
93
//
94
PacketSinkHelper
sink
(
"ns3::TcpSocketFactory"
,
InetSocketAddress
(
Ipv4Address::GetAny
(),
port
));
95
ApplicationContainer
sinkApps
=
sink
.Install(
nodes
.
Get
(1));
96
sinkApps
.
Start
(
Seconds
(0));
97
sinkApps
.Stop(
Seconds
(10));
98
99
//
100
// Set up tracing if enabled
101
//
102
if
(
tracing
)
103
{
104
AsciiTraceHelper
ascii
;
105
pointToPoint
.EnableAsciiAll(
ascii
.CreateFileStream(
"tcp-bulk-send.tr"
));
106
pointToPoint
.EnablePcapAll(
"tcp-bulk-send"
,
false
);
107
}
108
109
//
110
// Now, do the actual simulation.
111
//
112
NS_LOG_INFO
(
"Run Simulation."
);
113
Simulator::Stop
(
Seconds
(10));
114
Simulator::Run
();
115
Simulator::Destroy
();
116
NS_LOG_INFO
(
"Done."
);
117
118
Ptr<PacketSink>
sink1
=
DynamicCast<PacketSink>
(
sinkApps
.Get(0));
119
std::cout <<
"Total Bytes Received: "
<<
sink1
->GetTotalRx() << std::endl;
120
121
return
0;
122
}
ns3::ApplicationContainer
holds a vector of ns3::Application pointers.
Definition
application-container.h:33
ns3::ApplicationContainer::Start
void Start(Time start) const
Start all of the Applications in this container at the start time given as a parameter.
Definition
application-container.cc:81
ns3::AsciiTraceHelper
Manage ASCII trace files for device models.
Definition
trace-helper.h:163
ns3::BulkSendHelper
A helper to make it easier to instantiate an ns3::BulkSendApplication on a set of nodes.
Definition
bulk-send-helper.h:25
ns3::CommandLine
Parse command-line arguments.
Definition
command-line.h:221
ns3::InetSocketAddress
an Inet address class
Definition
inet-socket-address.h:31
ns3::InternetStackHelper
aggregate IP/TCP/UDP functionality to existing Nodes.
Definition
internet-stack-helper.h:81
ns3::Ipv4AddressHelper
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
Definition
ipv4-address-helper.h:38
ns3::Ipv4Address::GetAny
static Ipv4Address GetAny()
Definition
ipv4-address.cc:368
ns3::Ipv4InterfaceContainer
holds a vector of std::pair of Ptr<Ipv4> and interface index.
Definition
ipv4-interface-container.h:45
ns3::NetDeviceContainer
holds a vector of ns3::NetDevice pointers
Definition
net-device-container.h:32
ns3::NodeContainer
keep track of a set of node pointers.
Definition
node-container.h:29
ns3::NodeContainer::Create
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
Definition
node-container.cc:73
ns3::NodeContainer::Get
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
Definition
node-container.cc:67
ns3::PacketSinkHelper
A helper to make it easier to instantiate an ns3::PacketSinkApplication on a set of nodes.
Definition
packet-sink-helper.h:23
ns3::PointToPointHelper
Build a set of PointToPointNetDevice objects.
Definition
point-to-point-helper.h:33
ns3::Ptr
Smart pointer class similar to boost::intrusive_ptr.
Definition
ptr.h:66
ns3::Simulator::Destroy
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
Definition
simulator.cc:131
ns3::Simulator::Run
static void Run()
Run the simulation.
Definition
simulator.cc:167
ns3::Simulator::Stop
static void Stop()
Tell the Simulator the calling event should be the last one executed.
Definition
simulator.cc:175
ns3::StringValue
Hold variables of type string.
Definition
string.h:45
ns3::UintegerValue
Hold an unsigned integer type.
Definition
uinteger.h:34
uint32_t
port
uint16_t port
Definition
dsdv-manet.cc:33
NS_LOG_COMPONENT_DEFINE
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition
log.h:191
NS_LOG_INFO
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition
log.h:264
ns3::Create
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
Definition
ptr.h:436
ns3::Seconds
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition
nstime.h:1344
nodes
NodeContainer nodes
Definition
lr-wpan-bootstrap.cc:43
first.pointToPoint
pointToPoint
Definition
first.py:27
first.devices
devices
Definition
first.py:31
ns3
Every class exported by the ns3 library is enclosed in the ns3 namespace.
nsclick-simple-lan.ipv4
ipv4
Definition
nsclick-simple-lan.py:46
nsclick-simple-lan.internet
internet
Definition
nsclick-simple-lan.py:34
second.cmd
cmd
Definition
second.py:29
tracing
bool tracing
Flag to enable/disable generation of tracing files.
Definition
wifi-bianchi.cc:107
sink
Ptr< PacketSink > sink
Pointer to the packet sink application.
Definition
wifi-tcp.cc:44
examples
tcp
tcp-bulk-send.cc
Generated on Mon Dec 15 2025 15:21:47 for ns-3 by
1.9.8