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
csma-one-subnet.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 n2 n3
8
// | | | |
9
// =================
10
// LAN
11
//
12
// - CBR/UDP flows from n0 to n1 and from n3 to n0
13
// - DropTail queues
14
// - Tracing of queues and packet receptions to file "csma-one-subnet.tr"
15
16
#include "ns3/applications-module.h"
17
#include "ns3/core-module.h"
18
#include "ns3/csma-module.h"
19
#include "ns3/internet-module.h"
20
#include "ns3/network-module.h"
21
22
#include <fstream>
23
#include <iostream>
24
25
using namespace
ns3
;
26
27
NS_LOG_COMPONENT_DEFINE
(
"CsmaOneSubnetExample"
);
28
29
int
30
main(
int
argc,
char
* argv[])
31
{
32
//
33
// Users may find it convenient to turn on explicit debugging
34
// for selected modules; the below lines suggest how to do this
35
//
36
#if 0
37
LogComponentEnable
(
"CsmaOneSubnetExample"
,
LOG_LEVEL_INFO
);
38
#endif
39
//
40
// Allow the user to override any of the defaults and the above Bind() at
41
// run-time, via command-line arguments
42
//
43
CommandLine
cmd
(__FILE__);
44
cmd
.Parse(argc, argv);
45
//
46
// Explicitly create the nodes required by the topology (shown above).
47
//
48
NS_LOG_INFO
(
"Create nodes."
);
49
NodeContainer
nodes
;
50
nodes
.
Create
(4);
51
52
NS_LOG_INFO
(
"Build Topology"
);
53
CsmaHelper
csma
;
54
csma
.SetChannelAttribute(
"DataRate"
,
DataRateValue
(5000000));
55
csma
.SetChannelAttribute(
"Delay"
,
TimeValue
(
MilliSeconds
(2)));
56
//
57
// Now fill out the topology by creating the net devices required to connect
58
// the nodes to the channels and hooking them up.
59
//
60
NetDeviceContainer
devices
=
csma
.Install(
nodes
);
61
62
InternetStackHelper
internet
;
63
internet
.Install(
nodes
);
64
65
// We've got the "hardware" in place. Now we need to add IP addresses.
66
//
67
NS_LOG_INFO
(
"Assign IP Addresses."
);
68
Ipv4AddressHelper
ipv4
;
69
ipv4
.SetBase(
"10.1.1.0"
,
"255.255.255.0"
);
70
Ipv4InterfaceContainer
interfaces
=
ipv4
.Assign(devices);
71
72
//
73
// Create an OnOff application to send UDP datagrams from node zero to node 1.
74
//
75
NS_LOG_INFO
(
"Create Applications."
);
76
uint16_t
port
= 9;
// Discard port (RFC 863)
77
78
OnOffHelper
onoff
(
"ns3::UdpSocketFactory"
,
79
Address
(
InetSocketAddress
(
interfaces
.GetAddress(1),
port
)));
80
onoff
.SetConstantRate(
DataRate
(
"500kb/s"
));
81
82
ApplicationContainer
app
=
onoff
.Install(
nodes
.
Get
(0));
83
// Start the application
84
app
.Start(
Seconds
(1.0));
85
app
.Stop(
Seconds
(10.0));
86
87
// Create an optional packet sink to receive these packets
88
PacketSinkHelper
sink
(
"ns3::UdpSocketFactory"
,
89
Address
(
InetSocketAddress
(
Ipv4Address::GetAny
(),
port
)));
90
app
=
sink
.Install(
nodes
.
Get
(1));
91
app
.Start(
Seconds
(0.0));
92
93
//
94
// Create a similar flow from n3 to n0, starting at time 1.1 seconds
95
//
96
onoff
.SetAttribute(
"Remote"
,
AddressValue
(
InetSocketAddress
(
interfaces
.GetAddress(0),
port
)));
97
app
=
onoff
.Install(
nodes
.
Get
(3));
98
app
.Start(
Seconds
(1.1));
99
app
.Stop(
Seconds
(10.0));
100
101
app
=
sink
.Install(
nodes
.
Get
(0));
102
app
.Start(
Seconds
(0.0));
103
104
NS_LOG_INFO
(
"Configure Tracing."
);
105
//
106
// Configure ascii tracing of all enqueue, dequeue, and NetDevice receive
107
// events on all devices. Trace output will be sent to the file
108
// "csma-one-subnet.tr"
109
//
110
AsciiTraceHelper
ascii;
111
csma
.EnableAsciiAll(ascii.
CreateFileStream
(
"csma-one-subnet.tr"
));
112
113
//
114
// Also configure some tcpdump traces; each interface will be traced.
115
// The output files will be named:
116
//
117
// csma-one-subnet-<node ID>-<device's interface index>.pcap
118
//
119
// and can be read by the "tcpdump -r" command (use "-tt" option to
120
// display timestamps correctly)
121
//
122
csma
.EnablePcapAll(
"csma-one-subnet"
,
false
);
123
//
124
// Now, do the actual simulation.
125
//
126
NS_LOG_INFO
(
"Run Simulation."
);
127
Simulator::Run
();
128
Simulator::Destroy
();
129
NS_LOG_INFO
(
"Done."
);
130
131
return
0;
132
}
ns3::Address
a polymophic address class
Definition
address.h:90
ns3::AddressValue
Definition
address.h:275
ns3::ApplicationContainer
holds a vector of ns3::Application pointers.
Definition
application-container.h:33
ns3::AsciiTraceHelper
Manage ASCII trace files for device models.
Definition
trace-helper.h:163
ns3::AsciiTraceHelper::CreateFileStream
Ptr< OutputStreamWrapper > CreateFileStream(std::string filename, std::ios::openmode filemode=std::ios::out)
Create and initialize an output stream object we'll use to write the traced bits.
Definition
trace-helper.cc:182
ns3::CommandLine
Parse command-line arguments.
Definition
command-line.h:221
ns3::CsmaHelper
build a set of CsmaNetDevice objects
Definition
csma-helper.h:37
ns3::DataRate
Class for representing data rates.
Definition
data-rate.h:78
ns3::DataRateValue
Definition
data-rate.h:285
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::OnOffHelper
A helper to make it easier to instantiate an ns3::OnOffApplication on a set of nodes.
Definition
on-off-helper.h:26
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::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::TimeValue
Definition
nstime.h:1395
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::Seconds
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition
nstime.h:1308
ns3::MilliSeconds
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition
nstime.h:1320
nodes
NodeContainer nodes
Definition
lr-wpan-bootstrap.cc:43
first.devices
devices
Definition
first.py:31
first.interfaces
interfaces
Definition
first.py:39
ns3
Every class exported by the ns3 library is enclosed in the ns3 namespace.
ns3::LogComponentEnable
void LogComponentEnable(const std::string &name, LogLevel level)
Enable the logging output associated with that log component.
Definition
log.cc:291
ns3::LOG_LEVEL_INFO
@ LOG_LEVEL_INFO
LOG_INFO and above.
Definition
log.h:93
nsclick-simple-lan.ipv4
ipv4
Definition
nsclick-simple-lan.py:46
nsclick-simple-lan.internet
internet
Definition
nsclick-simple-lan.py:34
openflow-switch.app
app
Definition
openflow-switch.py:64
openflow-switch.onoff
onoff
Definition
openflow-switch.py:59
second.csma
csma
Definition
second.py:52
second.cmd
cmd
Definition
second.py:29
sink
Ptr< PacketSink > sink
Pointer to the packet sink application.
Definition
wifi-tcp.cc:44
src
csma
examples
csma-one-subnet.cc
Generated on Fri Nov 8 2024 13:59:00 for ns-3 by
1.11.0