21 #include "ns3/address.h"
22 #include "ns3/application-container.h"
23 #include "ns3/bridge-helper.h"
24 #include "ns3/callback.h"
25 #include "ns3/config.h"
26 #include "ns3/csma-helper.h"
27 #include "ns3/csma-star-helper.h"
28 #include "ns3/data-rate.h"
29 #include "ns3/inet-socket-address.h"
30 #include "ns3/internet-stack-helper.h"
31 #include "ns3/ipv4-address-helper.h"
32 #include "ns3/ipv4-global-routing-helper.h"
33 #include "ns3/ipv4-static-routing-helper.h"
34 #include "ns3/node-container.h"
36 #include "ns3/on-off-helper.h"
37 #include "ns3/packet-sink-helper.h"
38 #include "ns3/packet-socket-address.h"
39 #include "ns3/packet-socket-helper.h"
40 #include "ns3/packet.h"
41 #include "ns3/ping-helper.h"
42 #include "ns3/pointer.h"
43 #include "ns3/simple-channel.h"
44 #include "ns3/simulator.h"
45 #include "ns3/string.h"
47 #include "ns3/uinteger.h"
65 void DoRun()
override;
78 :
TestCase(
"Bridge example for Carrier Sense Multiple Access (CSMA) networks"),
115 csma.SetChannelAttribute(
"DataRate", DataRateValue(5000000));
121 for (
int i = 0; i < 4; i++)
137 ipv4.SetBase(
"10.1.1.0",
"255.255.255.0");
164 Simulator::Destroy();
182 void DoRun()
override;
207 :
TestCase(
"Broadcast example for Carrier Sense Multiple Access (CSMA) networks"),
258 csma.SetChannelAttribute(
"DataRate", DataRateValue(
DataRate(5000000)));
268 ipv4.SetBase(
"10.1.0.0",
"255.255.255.0");
270 ipv4.SetBase(
"192.168.1.0",
"255.255.255.0");
306 Simulator::Destroy();
325 void DoRun()
override;
346 :
TestCase(
"Multicast example for Carrier Sense Multiple Access (CSMA) networks"),
399 csma.SetChannelAttribute(
"DataRate", DataRateValue(
DataRate(5000000)));
410 ipv4Addr.
SetBase(
"10.1.1.0",
"255.255.255.0");
412 ipv4Addr.
SetBase(
"10.1.2.0",
"255.255.255.0");
437 outputDevices.
Add(nd1.
Get(0));
455 uint16_t multicastPort = 9;
490 Simulator::Destroy();
508 void DoRun()
override;
532 :
TestCase(
"One subnet example for Carrier Sense Multiple Access (CSMA) networks"),
578 csma.SetChannelAttribute(
"DataRate", DataRateValue(5000000));
592 ipv4.SetBase(
"10.1.1.0",
"255.255.255.0");
639 Simulator::Destroy();
658 void DoRun()
override;
679 :
TestCase(
"Packet socket example for Carrier Sense Multiple Access (CSMA) networks"),
724 CreateObjectWithAttributes<CsmaChannel>(
"DataRate",
751 onoff.SetAttribute(
"Remote", AddressValue(socket));
766 Simulator::Destroy();
784 void DoRun()
override;
807 :
TestCase(
"Ping example for Carrier Sense Multiple Access (CSMA) networks"),
854 csma.SetChannelAttribute(
"DataRate", DataRateValue(
DataRate(5000000)));
865 ip.
SetBase(
"192.168.1.0",
"255.255.255.0");
904 Simulator::Destroy();
925 void DoRun()
override;
947 "Raw internet protocol socket example for Carrier Sense Multiple Access (CSMA) networks"),
988 csma.SetChannelAttribute(
"DataRate", DataRateValue(
DataRate(5000000)));
999 ip.
SetBase(
"192.168.1.0",
"255.255.255.0");
1016 apps =
sink.Install(c.
Get(3));
1025 Simulator::Destroy();
1043 void DoRun()
override;
1064 :
TestCase(
"Star example for Carrier Sense Multiple Access (CSMA) networks"),
1109 uint32_t nSpokes = 7;
1125 uint32_t nFill = 14;
1132 fillNodes.
Add(newNodes);
1133 fillDevices.
Add(
csma.Install(newNodes, csmaChannel));
1153 for (uint32_t i = 0; i < star.
SpokeCount(); ++i)
1155 std::ostringstream subnet;
1156 subnet <<
"10.1." << i <<
".0";
1157 address.SetBase(subnet.str().c_str(),
"255.255.255.0",
"0.0.0.3");
1159 for (uint32_t j = 0; j < nFill; ++j)
1161 address.Assign(fillDevices.
Get(i * nFill + j));
1168 uint16_t
port = 50000;
1185 for (uint32_t i = 0; i < star.
SpokeCount(); ++i)
1205 for (uint32_t i = 0; i < fillNodes.
GetN(); ++i)
1218 Ipv4GlobalRoutingHelper::PopulateRoutingTables();
1225 Simulator::Destroy();
1230 10 * (nSpokes * (nFill + 1)),
1231 "Hub node did not receive the proper number of packets");
~CsmaBridgeTestCase() override
uint32_t m_count
Counter of received packets.
void DoRun() override
Implementation to actually run this TestCase.
void SinkRx(Ptr< const Packet > p, const Address &ad)
Sink called when a packet is received.
CSMA Broadcast mode test.
void DoRun() override
Implementation to actually run this TestCase.
uint32_t m_countNode2
Counter of received packets on node 2.
void DropEvent(Ptr< const Packet > p)
Sink called when a packet is dropped.
void SinkRxNode1(Ptr< const Packet > p, const Address &ad)
Sink called when a packet is received by a node.
void SinkRxNode2(Ptr< const Packet > p, const Address &ad)
Sink called when a packet is received by a node.
uint32_t m_countNode1
Counter of received packets on node 1.
uint32_t m_drops
Counter of dropped packets.
~CsmaBroadcastTestCase() override
CSMA Multicast mode test.
~CsmaMulticastTestCase() override
void SinkRx(Ptr< const Packet > p, const Address &ad)
Sink called when a packet is received by a node.
void DropEvent(Ptr< const Packet > p)
Sink called when a packet is dropped.
void DoRun() override
Implementation to actually run this TestCase.
uint32_t m_count
Counter of received packets.
uint32_t m_drops
Counter of dropped packets.
CSMA One Subnet mode test.
uint32_t m_countNode1
Counter of received packets on node 1.
~CsmaOneSubnetTestCase() override
void SinkRxNode0(Ptr< const Packet > p, const Address &ad)
Sink called when a packet is received by a node.
uint32_t m_countNode0
Counter of received packets on node 0.
void SinkRxNode1(Ptr< const Packet > p, const Address &ad)
Sink called when a packet is received by a node.
void DropEvent(Ptr< const Packet > p)
Sink called when a packet is dropped.
void DoRun() override
Implementation to actually run this TestCase.
uint32_t m_drops
Counter of dropped packets.
uint32_t m_count
Counter of received packets.
CsmaPacketSocketTestCase()
void SinkRx(std::string path, Ptr< const Packet > p, const Address &ad)
Sink called when a packet is received by a node.
uint32_t m_drops
Counter of dropped packets.
void DropEvent(Ptr< const Packet > p)
Sink called when a packet is dropped.
~CsmaPacketSocketTestCase() override
void DoRun() override
Implementation to actually run this TestCase.
void DropEvent(Ptr< const Packet >)
Sink called when a packet is dropped.
void DoRun() override
Implementation to actually run this TestCase.
void PingRtt(std::string, uint16_t, Time)
Sink called when a PING is received.
void SinkRx(Ptr< const Packet >, const Address &)
Sink called when a packet is received by a node.
~CsmaPingTestCase() override
uint32_t m_drops
Counter of dropped packets.
uint32_t m_countSinkRx
Counter of received packets.
uint32_t m_countPingRtt
Counter of PING received.
void DropEvent(Ptr< const Packet > p)
Sink called when a packet is dropped.
~CsmaRawIpSocketTestCase() override
void SinkRx(Ptr< const Packet > p, const Address &ad)
Sink called when a packet is received by a node.
CsmaRawIpSocketTestCase()
void DoRun() override
Implementation to actually run this TestCase.
uint32_t m_drops
Counter of dropped packets.
uint32_t m_count
Counter of received packets.
void DropEvent(Ptr< const Packet > p)
Sink called when a packet is dropped.
uint32_t m_count
Counter of received packets.
uint32_t m_drops
Counter of dropped packets.
void DoRun() override
Implementation to actually run this TestCase.
void SinkRx(Ptr< const Packet > p, const Address &ad)
Sink called when a packet is received by a node.
~CsmaStarTestCase() override
a polymophic address class
holds a vector of ns3::Application pointers.
void Start(Time start) const
Start all of the Applications in this container at the start time given as a parameter.
void Stop(Time stop) const
Arrange for all of the Applications in this container to Stop() at the Time given as a parameter.
void Add(ApplicationContainer other)
Append the contents of another ApplicationContainer to the end of this container.
Add capability to bridge multiple LAN segments (IEEE 802.1D bridging)
NetDeviceContainer Install(Ptr< Node > node, NetDeviceContainer c)
This method creates an ns3::BridgeNetDevice with the attributes configured by BridgeHelper::SetDevice...
build a set of CsmaNetDevice objects
A helper to make it easier to create a star topology with Csma links.
void InstallStack(InternetStackHelper stack)
Ipv4Address GetHubIpv4Address(uint32_t i) const
void AssignIpv4Addresses(Ipv4AddressHelper address)
Ptr< Node > GetSpokeNode(uint32_t i) const
Ptr< Node > GetHub() const
NetDeviceContainer GetSpokeDevices() const
uint32_t SpokeCount() const
aggregate IP/TCP/UDP functionality to existing Nodes.
void Install(std::string nodeName) const
Aggregate implementations of the ns3::Ipv4, ns3::Ipv6, ns3::Udp, and ns3::Tcp classes onto the provid...
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
void SetBase(Ipv4Address network, Ipv4Mask mask, Ipv4Address base="0.0.0.1")
Set the base network number, network mask and base address.
Ipv4InterfaceContainer Assign(const NetDeviceContainer &c)
Assign IP addresses to the net devices specified in the container based on the current network prefix...
Ipv4 addresses are stored in host order in this class.
holds a vector of std::pair of Ptr<Ipv4> and interface index.
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const
Helper class that adds ns3::Ipv4StaticRouting objects.
void AddMulticastRoute(Ptr< Node > n, Ipv4Address source, Ipv4Address group, Ptr< NetDevice > input, NetDeviceContainer output)
Add a multicast route to a node and net device using explicit Ptr<Node> and Ptr<NetDevice>
void SetDefaultMulticastRoute(Ptr< Node > n, Ptr< NetDevice > nd)
Add a default route to the static routing protocol to forward packets out a particular interface.
holds a vector of ns3::NetDevice pointers
void Add(NetDeviceContainer other)
Append the contents of another NetDeviceContainer to the end of this container.
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index.
keep track of a set of node pointers.
uint32_t GetN() const
Get the number of Ptr<Node> stored in this container.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
void Add(const NodeContainer &nc)
Append the contents of another NodeContainer to the end of this container.
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
A helper to make it easier to instantiate an ns3::OnOffApplication on a set of nodes.
A helper to make it easier to instantiate an ns3::PacketSinkApplication on a set of nodes.
an address for a packet socket
void SetProtocol(uint16_t protocol)
Set the protocol.
void SetPhysicalAddress(const Address address)
Set the destination address.
void SetSingleDevice(uint32_t device)
Set the address to match only a specified NetDevice.
Give ns3::PacketSocket powers to ns3::Node.
void Install(Ptr< Node > node) const
Aggregate an instance of a ns3::PacketSocketFactory onto the provided node.
Create a ping application and associate it to a node.
ApplicationContainer Install(NodeContainer nodes) const
Install a Ping application on each Node in the provided NodeContainer.
Hold variables of type string.
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
Simulation virtual time values and global simulation resolution.
static void SinkRx(std::string path, Ptr< const Packet > p, const Address &address)
Rx sink.
static CsmaSystemTestSuite csmaSystemTestSuite
Do not forget to allocate an instance of this TestSuite.
void SetDefault(std::string name, const AttributeValue &value)
void Connect(std::string path, const CallbackBase &cb)
void ConnectWithoutContext(std::string path, const CallbackBase &cb)
void(* DataRate)(DataRate oldValue, DataRate newValue)
TracedValue callback signature for DataRate.
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not.
Time Seconds(double value)
Construct a Time in the indicated unit.
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Callback< R, Args... > MakeCallback(R(T::*memPtr)(Args...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
Ptr< PacketSink > sink
Pointer to the packet sink application.