62 #include "ns3/ipv4-address-helper.h"
63 #include "ns3/ipv6-address-helper.h"
64 #include "ns3/simple-net-device.h"
65 #include "ns3/simple-net-device-helper.h"
66 #include "ns3/simulator.h"
67 #include "ns3/icmpv6-header.h"
68 #include "ns3/icmpv4.h"
69 #include "ns3/socket.h"
70 #include "ns3/socket-factory.h"
71 #include "ns3/uinteger.h"
72 #include "ns3/assert.h"
74 #include "ns3/ipv4-global-routing-helper.h"
75 #include "ns3/ipv6-static-routing-helper.h"
76 #include "ns3/ipv6-routing-helper.h"
79 #include "ns3/internet-stack-helper.h"
116 virtual void DoRun (
void);
123 :
TestCase (
"ICMP:EchoReply test case")
145 header.
SetType (Icmpv4Header::ICMPV4_ECHO);
152 (
int) p->
GetSize (),
" Unable to send ICMP Echo Packet");
172 " The received Packet is not a ICMPV4_ECHO_REPLY");
188 n.Get (0)->AddDevice (txDev);
189 n.Get (1)->AddDevice (rxDev);
191 rxDev->SetChannel (channel1);
192 txDev->SetChannel (channel1);
199 ipv4.
SetBase (
"10.0.0.0",
"255.255.255.252");
203 socket = Socket::CreateSocket (
n.Get (0), TypeId::LookupByName (
"ns3::Ipv4RawSocketFactory"));
219 Simulator::Destroy ();
248 virtual void DoRun (
void);
255 :
TestCase (
"ICMP:TimeExceedReply test case")
277 header.
SetType (Icmpv4Header::ICMPV4_ECHO);
284 (
int) p->
GetSize (),
" Unable to send ICMP Echo Packet");
300 "ICMP Time Exceed Response should come from 10.0.0.2");
306 "The received packet is not a ICMPV4_TIME_EXCEEDED packet ");
315 n0n1.
Add (
n.Get (0));
316 n0n1.
Add (
n.Get (1));
338 address.SetBase (
"10.0.0.0",
"255.255.255.255");
341 address.SetBase (
"10.0.1.0",
"255.255.255.255");
344 Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
347 socket = Socket::CreateSocket (
n.Get (0), TypeId::LookupByName (
"ns3::Ipv4RawSocketFactory"));
363 Simulator::Destroy ();
392 virtual void DoRun (
void);
399 :
TestCase (
"ICMPV6:EchoReply test case")
421 header.
SetType (Icmpv6Header::ICMPV6_ECHO_REQUEST);
428 (
int) p->
GetSize (),
" Unable to send ICMP Echo Packet");
440 if (Inet6SocketAddress::IsMatchingType (from))
446 Ipv6Header::IPV6_ICMPV6,
447 "The received Packet is not an ICMPV6 packet");
452 if (!(((
int)icmpv6.
GetType () >= 133) && ((
int)icmpv6.
GetType () <= 137)))
455 Icmpv6Header::ICMPV6_ECHO_REPLY,
456 "The received Packet is not a ICMPV6_ECHO_REPLY");
476 n.Get (0)->AddDevice (txDev);
477 n.Get (1)->AddDevice (rxDev);
479 rxDev->SetChannel (channel1);
480 txDev->SetChannel (channel1);
491 socket = Socket::CreateSocket (
n.Get (0), TypeId::LookupByName (
"ns3::Ipv6RawSocketFactory"));
507 Simulator::Destroy ();
536 virtual void DoRun (
void);
543 :
TestCase (
"ICMPV6:TimeExceed test case")
565 header.
SetType (Icmpv6Header::ICMPV6_ECHO_REQUEST);
572 socket->
SendTo (p, 0, realTo);
584 if (Inet6SocketAddress::IsMatchingType (from))
591 Ipv6Header::IPV6_ICMPV6,
592 "The received Packet is not an ICMPV6 packet");
598 if (!(((
int)icmpv6.
GetType () >= 133) && ((
int)icmpv6.
GetType () <= 137)))
601 Icmpv6Header::ICMPV6_ERROR_TIME_EXCEEDED,
602 "The received Packet is not a ICMPV6_ERROR_TIME_EXCEEDED");
613 n0n1.
Add (
n.Get (0));
614 n0n1.
Add (
n.Get (1));
651 socket = Socket::CreateSocket (
n.Get (0), TypeId::LookupByName (
"ns3::Ipv6RawSocketFactory"));
668 Simulator::Destroy ();
void ReceivePkt(Ptr< Socket > socket)
Receive data.
void SendData(Ptr< Socket > socket, Ipv4Address dst)
Send data.
virtual void DoRun(void)
Implementation to actually run this TestCase.
Ptr< Packet > m_receivedPacket
received packet
virtual ~IcmpEchoReplyTestCase()
ICMP Time Exceed Reply Test.
virtual void DoRun(void)
Implementation to actually run this TestCase.
void ReceivePkt(Ptr< Socket > socket)
Receive data.
Ptr< Packet > m_receivedPacket
received packet
virtual ~IcmpTimeExceedTestCase()
void SendData(Ptr< Socket > socket, Ipv4Address dst)
Send data.
Ptr< Packet > m_receivedPacket
received packet
void SendData(Ptr< Socket > socket, Ipv6Address dst)
Send data.
void ReceivePkt(Ptr< Socket > socket)
Receive data.
virtual ~IcmpV6EchoReplyTestCase()
virtual void DoRun(void)
Implementation to actually run this TestCase.
IcmpV6EchoReplyTestCase()
ICMPV6 Time Exceed response test.
virtual ~IcmpV6TimeExceedTestCase()
void ReceivePkt(Ptr< Socket > socket)
Receive data.
virtual void DoRun(void)
Implementation to actually run this TestCase.
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.
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 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 Add(NodeContainer other)
Append the contents of another NodeContainer to the end of this container.
uint32_t GetId(void) const
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.
Ptr< Packet > Copy(void) const
performs a COW copy of the packet.
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
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.
virtual void SetIpv6HopLimit(uint8_t ipHopLimit)
Manually set IPv6 Hop Limit.
virtual Ptr< Node > GetNode(void) const =0
Return the node this socket is associated with.
void SetRecvCallback(Callback< void, Ptr< Socket > > receivedData)
Notify application when new data is available to be read.
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, Ts... > MakeCallback(R(T::*memPtr)(Ts...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...