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" 108 virtual void DoRun (
void);
115 :
TestCase (
"ICMP:EchoReply test case")
133 echo.SetIdentifier (0);
137 header.
SetType (Icmpv4Header::ICMPV4_ECHO);
144 (int) p->
GetSize (),
" Unable to send ICMP Echo Packet");
173 " The received Packet is not a ICMPV4_ECHO_REPLY");
189 n.Get (0)->AddDevice (txDev);
190 n.Get (1)->AddDevice (rxDev);
192 rxDev->SetChannel (channel1);
200 ipv4.
SetBase (
"10.0.0.0",
"255.255.255.252");
204 socket = Socket::CreateSocket (
n.Get (0), TypeId::LookupByName (
"ns3::Ipv4RawSocketFactory"));
218 Simulator::Destroy ();
239 virtual void DoRun (
void);
246 :
TestCase (
"ICMP:TimeExceedReply test case")
264 echo.SetIdentifier (0);
268 header.
SetType (Icmpv4Header::ICMPV4_ECHO);
275 (int) p->
GetSize (),
" Unable to send ICMP Echo Packet");
301 "ICMP Time Exceed Response should come from 10.0.0.2");
307 "The received packet is not a ICMPV4_TIME_EXCEEDED packet ");
316 n0n1.
Add (
n.Get (0));
317 n0n1.
Add (
n.Get (1));
339 address.SetBase (
"10.0.0.0",
"255.255.255.255");
342 address.SetBase (
"10.0.1.0",
"255.255.255.255");
345 Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
348 socket = Socket::CreateSocket (
n.Get (0), TypeId::LookupByName (
"ns3::Ipv4RawSocketFactory"));
362 Simulator::Destroy ();
383 virtual void DoRun (
void);
390 :
TestCase (
"ICMPV6:EchoReply test case")
412 header.
SetType (Icmpv6Header::ICMPV6_ECHO_REQUEST);
419 (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);
491 socket = Socket::CreateSocket (
n.Get (0), TypeId::LookupByName (
"ns3::Ipv6RawSocketFactory"));
505 Simulator::Destroy ();
526 virtual void DoRun (
void);
533 :
TestCase (
"ICMPV6:TimeExceed test case")
555 header.
SetType (Icmpv6Header::ICMPV6_ECHO_REQUEST);
562 socket->
SendTo (p, 0, realTo);
583 if (Inet6SocketAddress::IsMatchingType (from))
590 Ipv6Header::IPV6_ICMPV6,
591 "The received Packet is not an ICMPV6 packet");
597 if (!(((
int)icmpv6.GetType () >= 133) && ((
int)icmpv6.GetType () <= 137)))
600 Icmpv6Header::ICMPV6_ERROR_TIME_EXCEEDED,
601 "The received Packet is not a ICMPV6_ERROR_TIME_EXCEEDED");
612 n0n1.
Add (
n.Get (0));
613 n0n1.
Add (
n.Get (1));
650 socket = Socket::CreateSocket (
n.Get (0), TypeId::LookupByName (
"ns3::Ipv6RawSocketFactory"));
665 Simulator::Destroy ();
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer.
void SendData(Ptr< Socket > socket, Ipv6Address dst)
uint32_t GetId(void) const
Keep track of a set of IPv6 interfaces.
holds a vector of std::pair of Ptr<Ipv4> and interface index.
virtual void DoRun(void)
Implementation to actually run this TestCase.
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
void SetDefaultRouteInAllNodes(uint32_t router)
Set the default route for all the devices (except the router itself).
void ReceivePkt(Ptr< Socket > socket)
void SendData(Ptr< Socket > socket, Ipv4Address dst)
virtual void DoRun(void)
Implementation to actually run this TestCase.
aggregate IP/TCP/UDP functionality to existing Nodes.
#define NS_TEST_EXPECT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report if not.
void SetBase(Ipv6Address network, Ipv6Prefix prefix, Ipv6Address base=Ipv6Address("::1"))
Set the base network number, network prefix, and base interface ID.
static IcmpTestSuite icmpTestSuite
Static variable for test initialization.
ICMPV6 Time Exceed response test.
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.
a polymophic address class
Ipv6InterfaceContainer Assign(const NetDeviceContainer &c)
Allocate an Ipv6InterfaceContainer with auto-assigned addresses.
Ptr< Packet > m_receivedPacket
virtual ~IcmpTimeExceedTestCase()
virtual ~IcmpV6EchoReplyTestCase()
IcmpV6EchoReplyTestCase()
void SendData(Ptr< Socket > socket, Ipv4Address dst)
virtual ~IcmpV6TimeExceedTestCase()
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const
void Add(NetDeviceContainer other)
Append the contents of another NetDeviceContainer to the end of this container.
Hold an unsigned integer type.
holds a vector of ns3::NetDevice pointers
Ptr< Packet > m_receivedPacket
void DoSendData(Ptr< Socket > socket, Ipv6Address dst)
Ptr< Packet > m_receivedPacket
void SetRecvCallback(Callback< void, Ptr< Socket > >)
Notify application when new data is available to be read.
ICMP Time Exceed Reply Test.
void DoSendData(Ptr< Socket > socket, Ipv6Address dst)
void ReceivePkt(Ptr< Socket > socket)
void DoSendData(Ptr< Socket > socket, Ipv4Address dst)
virtual int Bind(const Address &address)=0
Allocate a local endpoint for this socket.
Ptr< Packet > m_receivedPacket
Every class exported by the ns3 library is enclosed in the ns3 namespace.
keep track of a set of node pointers.
virtual void DoRun(void)
Implementation to actually run this TestCase.
void DoSendData(Ptr< Socket > socket, Ipv4Address dst)
void SetNetDevicePointToPointMode(bool pointToPointMode)
SimpleNetDevice is Broadcast capable and ARP needing.
Ptr< Packet > Copy(void) const
performs a COW copy of the packet.
virtual ~IcmpEchoReplyTestCase()
Ipv6Address GetAddress(uint32_t i, uint32_t j) const
Get the address for the specified index.
Helper class to auto-assign global IPv6 unicast addresses.
void Install(std::string nodeName) const
Aggregate implementations of the ns3::Ipv4, ns3::Ipv6, ns3::Udp, and ns3::Tcp classes onto the provid...
void SendData(Ptr< Socket > socket, Ipv6Address dst)
Describes an IPv6 address.
Ipv4 addresses are stored in host order in this class.
Ipv4InterfaceContainer Assign(const NetDeviceContainer &c)
Assign IP addresses to the net devices specified in the container based on the current network prefix...
void Add(NodeContainer other)
Append the contents of another NodeContainer to the end of this container.
void ReceivePkt(Ptr< Socket > socket)
virtual Ptr< Node > GetNode(void) const =0
Return the node this socket is associated with.
void SetSequenceNumber(uint16_t seq)
Set the Echo sequence number.
virtual void SetAddress(Address address)
Set the address of this interface.
Time Seconds(double value)
Construct a Time in the indicated unit.
void ReceivePkt(Ptr< Socket > socket)
Describes an IPv6 prefix.
virtual int SendTo(Ptr< Packet > p, uint32_t flags, const Address &toAddress)=0
Send data to a specified peer.
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
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.
build a set of SimpleNetDevice objects
virtual void SetIpv6HopLimit(uint8_t ipHopLimit)
Manually set IPv6 Hop Limit.
NetDeviceContainer Install(Ptr< Node > node) const
This method creates an ns3::SimpleChannel with the attributes configured by SimpleNetDeviceHelper::Se...
void SetChannel(Ptr< SimpleChannel > channel)
Attach a channel to this net device.
void SetAttribute(std::string name, const AttributeValue &value)
Set a single attribute, raising fatal errors if unsuccessful.
IcmpV6TimeExceedTestCase()
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...
virtual void DoRun(void)
Implementation to actually run this TestCase.
void AddHeader(const Header &header)
Add header to this packet.
virtual void SetIpTtl(uint8_t ipTtl)
Manually set IP Time to Live field.
void SetBase(Ipv4Address network, Ipv4Mask mask, Ipv4Address base="0.0.0.1")
Set the base network number, network mask and base address.