25 #include "ns3/config.h"
26 #include "ns3/uinteger.h"
27 #include "ns3/socket-factory.h"
28 #include "ns3/ipv4-raw-socket-factory.h"
29 #include "ns3/udp-socket-factory.h"
30 #include "ns3/simulator.h"
33 #include "ns3/drop-tail-queue.h"
34 #include "ns3/socket.h"
35 #include "ns3/udp-socket.h"
39 #include "ns3/inet-socket-address.h"
40 #include "ns3/boolean.h"
42 #include "ns3/arp-l3-protocol.h"
43 #include "ns3/ipv4-l3-protocol.h"
44 #include "ns3/icmpv4-l4-protocol.h"
45 #include "ns3/ipv4-list-routing.h"
46 #include "ns3/ipv4-static-routing.h"
47 #include "ns3/udp-l4-protocol.h"
51 #include <netinet/in.h>
69 ipv4Routing->AddRoutingProtocol (ipv4staticRouting, 0);
95 virtual void DoRun (
void);
107 uint8_t icmpCode,uint32_t icmpInfo);
109 void SetFill (uint8_t *fill, uint32_t fillSize, uint32_t dataSize);
116 :
TestCase (
"Verify the IPv4 layer 3 protocol fragmentation and reassembly")
148 udpSocket->MulticastJoinGroup (0,
Ipv4Address (
"10.0.0.1"));
160 while ((packet = socket->
RecvFrom (from)))
194 while ((packet = socket->
RecvFrom (from)))
205 uint8_t icmpTtl, uint8_t icmpType,
206 uint8_t icmpCode, uint32_t icmpInfo)
217 m_data =
new uint8_t [dataSize];
221 if (fillSize >= dataSize)
223 memcpy (
m_data, fill, dataSize);
228 while (filled + fillSize < dataSize)
230 memcpy (&
m_data[filled], fill, fillSize);
234 memcpy(&
m_data[filled], fill, dataSize - filled);
248 p = Create<Packet> (
m_size);
265 Ptr<Node> serverNode = CreateObject<Node> ();
270 serverDev = CreateObject<ErrorNetDevice> ();
274 serverDevErrorModel->Disable();
280 ipv4->
SetUp (netdev_idx);
285 Ptr<Node> clientNode = CreateObject<Node> ();
290 clientDev = CreateObject<ErrorNetDevice> ();
294 clientDevErrorModel->Disable();
300 ipv4->
SetUp (netdev_idx);
312 uint32_t packetSizes[5] = {1000, 2000, 5000, 10000, 65000};
315 uint8_t fillData[78];
316 for ( uint32_t k=48; k<=125; k++ )
322 for(
int i= 0; i<5; i++)
324 uint32_t packetSize = packetSizes[i];
326 SetFill (fillData, 78, packetSize);
333 uint8_t recvBuffer[65000];
341 0,
"Packet content differs");
348 for(
int i= 0; i<5; i++)
350 uint32_t packetSize = packetSizes[i];
352 SetFill (fillData, 78, packetSize);
359 uint8_t recvBuffer[65000];
367 0,
"Packet content differs");
378 clientDevErrorModel->Disable();
379 serverDevErrorModel->Enable();
380 for(
int i= 1; i<5; i++)
382 uint32_t packetSize = packetSizes[i];
384 SetFill (fillData, 78, packetSize);
387 serverDevErrorModel->Reset();