23 #define NS3_LOG_ENABLE 1
26 #include "ns3/config.h"
27 #include "ns3/uinteger.h"
28 #include "ns3/socket-factory.h"
29 #include "ns3/ipv4-raw-socket-factory.h"
30 #include "ns3/ipv6-raw-socket-factory.h"
31 #include "ns3/udp-socket-factory.h"
32 #include "ns3/simulator.h"
35 #include "ns3/drop-tail-queue.h"
36 #include "ns3/socket.h"
37 #include "ns3/udp-socket.h"
41 #include "ns3/inet-socket-address.h"
42 #include "ns3/boolean.h"
44 #include "ns3/ipv6-static-routing.h"
45 #include "ns3/ipv6-list-routing.h"
46 #include "ns3/inet6-socket-address.h"
48 #include "ns3/arp-l3-protocol.h"
49 #include "ns3/ipv4-l3-protocol.h"
50 #include "ns3/icmpv4-l4-protocol.h"
51 #include "ns3/ipv4-list-routing.h"
52 #include "ns3/ipv4-static-routing.h"
53 #include "ns3/udp-l4-protocol.h"
55 #include "ns3/ipv6-l3-protocol.h"
56 #include "ns3/icmpv6-l4-protocol.h"
60 #include <netinet/in.h>
76 ipv6Routing->AddRoutingProtocol (ipv6staticRouting, 0);
109 virtual void DoRun (
void);
121 uint8_t icmpCode,uint32_t icmpInfo);
123 void SetFill (uint8_t *fill, uint32_t fillSize, uint32_t dataSize);
130 :
TestCase (
"Verify the IPv6 layer 3 protocol fragmentation and reassembly")
169 while ((packet = socket->
RecvFrom (from)))
203 while ((packet = socket->
RecvFrom (from)))
214 uint8_t icmpTtl, uint8_t icmpType,
215 uint8_t icmpCode, uint32_t icmpInfo)
227 m_data =
new uint8_t [dataSize];
231 if (fillSize >= dataSize)
233 memcpy (
m_data, fill, dataSize);
238 while (filled + fillSize < dataSize)
240 memcpy (&
m_data[filled], fill, fillSize);
244 memcpy (&
m_data[filled], fill, dataSize - filled);
258 p = Create<Packet> (
m_size);
276 Ptr<Node> serverNode = CreateObject<Node> ();
281 serverDev = CreateObject<ErrorNetDevice> ();
285 serverDevErrorModel->Disable ();
291 ipv6->
SetUp (netdev_idx);
296 Ptr<Node> clientNode = CreateObject<Node> ();
301 clientDev = CreateObject<ErrorNetDevice> ();
305 clientDevErrorModel->Disable ();
311 ipv6->
SetUp (netdev_idx);
323 uint32_t packetSizes[5] = {1000, 2000, 5000, 10000, 65000};
326 uint8_t fillData[78];
327 for ( uint32_t k = 48; k <= 125; k++ )
329 fillData[k - 48] = k;
333 for (
int i = 0; i < 5; i++)
335 uint32_t packetSize = packetSizes[i];
337 SetFill (fillData, 78, packetSize);
344 uint8_t recvBuffer[65000];
349 "Packet size not correct: recvSize: " << recvSize <<
" packetSizes[" << i <<
"]: " << packetSizes[i] );
353 0,
"Packet content differs");
360 for (
int i = 0; i < 5; i++)
362 uint32_t packetSize = packetSizes[i];
364 SetFill (fillData, 78, packetSize);
371 uint8_t recvBuffer[65000];
376 "Packet size not correct: recvSize: " << recvSize <<
" packetSizes[" << i <<
"]: " << packetSizes[i] );
380 0,
"Packet content differs");
391 clientDevErrorModel->Disable ();
392 serverDevErrorModel->Enable ();
393 for (
int i = 1; i < 5; i++)
395 uint32_t packetSize = packetSizes[i];
397 SetFill (fillData, 78, packetSize);
400 serverDevErrorModel->Reset ();
414 true,
"Client did not receive ICMPv6::TIME_EXCEEDED " <<
int(m_icmpType) <<
int(
m_icmpCode) );