60 #include "ns3/assert.h"
61 #include "ns3/icmpv4.h"
62 #include "ns3/icmpv6-header.h"
63 #include "ns3/internet-stack-helper.h"
64 #include "ns3/ipv4-address-helper.h"
65 #include "ns3/ipv4-global-routing-helper.h"
66 #include "ns3/ipv6-address-helper.h"
67 #include "ns3/ipv6-routing-helper.h"
68 #include "ns3/ipv6-static-routing-helper.h"
71 #include "ns3/simple-net-device-helper.h"
72 #include "ns3/simple-net-device.h"
73 #include "ns3/simulator.h"
74 #include "ns3/socket-factory.h"
75 #include "ns3/socket.h"
77 #include "ns3/uinteger.h"
111 void DoRun()
override;
116 :
TestCase(
"ICMP:EchoReply test case")
134 header.
SetType(Icmpv4Header::ICMPV4_ECHO);
142 " Unable to send ICMP Echo Packet");
160 Icmpv4Header::ICMPV4_ECHO_REPLY,
161 " The received Packet is not a ICMPV4_ECHO_REPLY");
179 rxDev->SetChannel(channel1);
180 txDev->SetChannel(channel1);
187 ipv4.SetBase(
"10.0.0.0",
"255.255.255.252");
191 socket = Socket::CreateSocket(n.
Get(0), TypeId::LookupByName(
"ns3::Ipv4RawSocketFactory"));
200 Simulator::ScheduleWithContext(socket->
GetNode()->
GetId(),
210 " Unexpected ICMPV4_ECHO_REPLY packet size");
212 Simulator::Destroy();
240 void DoRun()
override;
245 :
TestCase(
"ICMP:TimeExceedReply test case")
263 header.
SetType(Icmpv4Header::ICMPV4_ECHO);
271 " Unable to send ICMP Echo Packet");
287 "ICMP Time Exceed Response should come from 10.0.0.2");
293 Icmpv4Header::ICMPV4_TIME_EXCEEDED,
294 "The received packet is not a ICMPV4_TIME_EXCEEDED packet ");
327 address.SetBase(
"10.0.0.0",
"255.255.255.255");
330 address.SetBase(
"10.0.1.0",
"255.255.255.255");
333 Ipv4GlobalRoutingHelper::PopulateRoutingTables();
336 socket = Socket::CreateSocket(n.
Get(0), TypeId::LookupByName(
"ns3::Ipv4RawSocketFactory"));
345 Simulator::ScheduleWithContext(socket->
GetNode()->
GetId(),
355 " Unexpected ICMP Time Exceed Response packet size");
357 Simulator::Destroy();
385 void DoRun()
override;
390 :
TestCase(
"ICMPV6:EchoReply test case")
408 header.
SetType(Icmpv6Header::ICMPV6_ECHO_REQUEST);
416 " Unable to send ICMP Echo Packet");
426 if (Inet6SocketAddress::IsMatchingType(from))
432 Ipv6Header::IPV6_ICMPV6,
433 "The received Packet is not an ICMPV6 packet");
437 if (icmpv6.
GetType() == Icmpv6Header::ICMPV6_ECHO_REPLY)
461 rxDev->SetChannel(channel1);
462 txDev->SetChannel(channel1);
473 socket = Socket::CreateSocket(n.
Get(0), TypeId::LookupByName(
"ns3::Ipv6RawSocketFactory"));
483 Simulator::ScheduleWithContext(socket->
GetNode()->
GetId(),
493 " Unexpected ICMPV6_ECHO_REPLY packet size");
495 Simulator::Destroy();
523 void DoRun()
override;
528 :
TestCase(
"ICMPV6:TimeExceed test case")
546 header.
SetType(Icmpv6Header::ICMPV6_ECHO_REQUEST);
552 socket->
SendTo(p, 0, realTo);
562 if (Inet6SocketAddress::IsMatchingType(from))
568 Ipv6Header::IPV6_ICMPV6,
569 "The received Packet is not an ICMPV6 packet");
575 if (icmpv6.
GetType() == Icmpv6Header::ICMPV6_ERROR_TIME_EXCEEDED)
627 socket = Socket::CreateSocket(n.
Get(0), TypeId::LookupByName(
"ns3::Ipv6RawSocketFactory"));
638 Simulator::ScheduleWithContext(socket->
GetNode()->
GetId(),
648 " Unexpected ICMPV6_ECHO_REPLY packet size");
650 Simulator::Destroy();
NodeContainer n1n2
Nodecontainer n1 + n2.
void DoRun() override
Implementation to actually run this TestCase.
void ReceivePkt(Ptr< Socket > socket)
Receive data.
void SendData(Ptr< Socket > socket, Ipv4Address dst)
Send data.
Ptr< Packet > m_receivedPacket
received packet
~IcmpEchoReplyTestCase() override
ICMP Time Exceed Reply Test.
~IcmpTimeExceedTestCase() override
void DoRun() override
Implementation to actually run this TestCase.
void ReceivePkt(Ptr< Socket > socket)
Receive data.
Ptr< Packet > m_receivedPacket
received packet
void SendData(Ptr< Socket > socket, Ipv4Address dst)
Send data.
~IcmpV6EchoReplyTestCase() override
void DoRun() override
Implementation to actually run this TestCase.
Ptr< Packet > m_receivedPacket
received packet
void SendData(Ptr< Socket > socket, Ipv6Address dst)
Send data.
void ReceivePkt(Ptr< Socket > socket)
Receive data.
IcmpV6EchoReplyTestCase()
ICMPV6 Time Exceed response test.
void DoRun() override
Implementation to actually run this TestCase.
~IcmpV6TimeExceedTestCase() override
void ReceivePkt(Ptr< Socket > socket)
Receive data.
IcmpV6TimeExceedTestCase()
Ptr< Packet > m_receivedPacket
received packet
void SendData(Ptr< Socket > socket, Ipv6Address dst)
Send data.
a polymophic address class
void SetIdentifier(uint16_t id)
Set the Echo identifier.
void SetSequenceNumber(uint16_t seq)
Set the Echo sequence number.
void SetId(uint16_t id)
Set the ID of the packet.
void SetSeq(uint16_t seq)
Set the sequence number.
aggregate IP/TCP/UDP functionality to existing Nodes.
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
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 to auto-assign global IPv6 unicast addresses.
void SetBase(Ipv6Address network, Ipv6Prefix prefix, Ipv6Address base=Ipv6Address("::1"))
Set the base network number, network prefix, and base interface ID.
Ipv6InterfaceContainer Assign(const NetDeviceContainer &c)
Allocate an Ipv6InterfaceContainer with auto-assigned addresses.
Describes an IPv6 address.
Keep track of a set of IPv6 interfaces.
void SetForwarding(uint32_t i, bool state)
Set the state of the stack (act as a router or as an host) for the specified index.
void SetDefaultRouteInAllNodes(uint32_t router)
Set the default route for all the devices (except the router itself).
Ipv6Address GetAddress(uint32_t i, uint32_t j) const
Get the address for the specified index.
Describes an IPv6 prefix.
holds a vector of ns3::NetDevice pointers
void Add(NetDeviceContainer other)
Append the contents of another NetDeviceContainer to the end of this container.
keep track of a set of node pointers.
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.
uint32_t AddDevice(Ptr< NetDevice > device)
Associate a NetDevice to this node.
void SetAttribute(std::string name, const AttributeValue &value)
Set a single attribute, raising fatal errors if unsuccessful.
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer.
void AddHeader(const Header &header)
Add header to this packet.
uint32_t GetSize() const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
Ptr< Packet > Copy() const
performs a COW copy of the packet.
build a set of SimpleNetDevice objects
void SetNetDevicePointToPointMode(bool pointToPointMode)
SimpleNetDevice is Broadcast capable and ARP needing.
NetDeviceContainer Install(Ptr< Node > node) const
This method creates an ns3::SimpleChannel with the attributes configured by SimpleNetDeviceHelper::Se...
virtual void SetIpTtl(uint8_t ipTtl)
Manually set IP Time to Live field.
void SetRecvCallback(Callback< void, Ptr< Socket >> receivedData)
Notify application when new data is available to be read.
virtual void SetIpv6HopLimit(uint8_t ipHopLimit)
Manually set IPv6 Hop Limit.
virtual Ptr< Node > GetNode() const =0
Return the node this socket is associated with.
virtual int Bind(const Address &address)=0
Allocate a local endpoint for this socket.
virtual Ptr< Packet > RecvFrom(uint32_t maxSize, uint32_t flags, Address &fromAddress)=0
Read a single packet from the socket and retrieve the sender address.
virtual int SendTo(Ptr< Packet > p, uint32_t flags, const Address &toAddress)=0
Send data to a specified peer.
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
Hold an unsigned integer type.
#define NS_TEST_EXPECT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report if not.
Time Seconds(double value)
Construct a Time in the indicated unit.
static IcmpTestSuite icmpTestSuite
Static variable for test initialization.
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...