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");
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 ");
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");
451 if (icmpv6.
GetType () == Icmpv6Header::ICMPV6_ECHO_REPLY)
476 rxDev->SetChannel (channel1);
477 txDev->SetChannel (channel1);
488 socket = Socket::CreateSocket (n.
Get (0), TypeId::LookupByName (
"ns3::Ipv6RawSocketFactory"));
504 Simulator::Destroy ();
533 virtual void DoRun (
void);
540 :
TestCase (
"ICMPV6:TimeExceed test case")
562 header.
SetType (Icmpv6Header::ICMPV6_ECHO_REQUEST);
569 socket->
SendTo (p, 0, realTo);
581 if (Inet6SocketAddress::IsMatchingType (from))
588 Ipv6Header::IPV6_ICMPV6,
589 "The received Packet is not an ICMPV6 packet");
595 if (icmpv6.
GetType () == Icmpv6Header::ICMPV6_ERROR_TIME_EXCEEDED)
646 socket = Socket::CreateSocket (n.
Get (0), TypeId::LookupByName (
"ns3::Ipv6RawSocketFactory"));
663 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 Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
void Add(NodeContainer other)
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 GetId(void) const
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.
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...