23 #include "ns3/socket-factory.h"
24 #include "ns3/ipv4-raw-socket-factory.h"
25 #include "ns3/simulator.h"
26 #include "ns3/simple-channel.h"
27 #include "ns3/simple-net-device.h"
28 #include "ns3/drop-tail-queue.h"
29 #include "ns3/socket.h"
33 #include "ns3/inet-socket-address.h"
34 #include "ns3/boolean.h"
36 #include "ns3/arp-l3-protocol.h"
37 #include "ns3/ipv4-l3-protocol.h"
38 #include "ns3/icmpv4-l4-protocol.h"
39 #include "ns3/ipv4-list-routing.h"
40 #include "ns3/ipv4-static-routing.h"
45 #include <netinet/in.h>
46 #include <sys/socket.h>
47 #include <sys/types.h>
63 ipv4Routing->AddRoutingProtocol (ipv4staticRouting, 0);
82 virtual void DoRun (
void);
90 Ipv4HeaderTest::Ipv4HeaderTest ()
97 m_receivedPacket = packet;
101 void Ipv4HeaderTest::ReceivePkt (
Ptr<Socket> socket)
103 uint32_t availableData;
105 m_receivedPacket = socket->
Recv (2, MSG_PEEK);
107 m_receivedPacket = socket->
Recv (std::numeric_limits<uint32_t>::max (), 0);
108 NS_ASSERT (availableData == m_receivedPacket->GetSize ());
109 m_receivedPacket->PeekHeader (m_receivedHeader);
122 ipHeader.SetDestination (
Ipv4Address (to.c_str ()));
123 ipHeader.SetProtocol (0);
124 ipHeader.SetPayloadSize (p->
GetSize ());
125 ipHeader.SetTtl (255);
126 ipHeader.SetDscp (dscp);
127 ipHeader.SetEcn (ecn);
130 NS_TEST_EXPECT_MSG_EQ (socket->
SendTo (p, 0, realTo),
138 m_receivedPacket = Create<Packet> ();
140 &Ipv4HeaderTest::DoSendData_IpHdr_Dscp,
this, socket, to, dscp, ecn);
150 Ptr<Node> rxNode = CreateObject<Node> ();
151 AddInternetStack (rxNode);
154 rxDev1 = CreateObject<SimpleNetDevice> ();
155 rxDev1->
SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
161 ipv4->
SetUp (netdev_idx);
166 Ptr<Node> txNode = CreateObject<Node> ();
167 AddInternetStack (txNode);
170 txDev1 = CreateObject<SimpleNetDevice> ();
171 txDev1->
SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
177 ipv4->
SetUp (netdev_idx);
182 rxDev1->SetChannel (channel1);
183 txDev1->SetChannel (channel1);
190 rxSocket->SetRecvCallback (
MakeCallback (&Ipv4HeaderTest::ReceivePkt,
this));
199 std::cout <<
"Dscp Test\n";
201 std::vector <Ipv4Header::DscpType> vDscpTypes;
202 vDscpTypes.push_back (Ipv4Header::DscpDefault);
203 vDscpTypes.push_back (Ipv4Header::CS1);
204 vDscpTypes.push_back (Ipv4Header::AF11);
205 vDscpTypes.push_back (Ipv4Header::AF12);
206 vDscpTypes.push_back (Ipv4Header::AF13);
207 vDscpTypes.push_back (Ipv4Header::CS2);
208 vDscpTypes.push_back (Ipv4Header::AF21);
209 vDscpTypes.push_back (Ipv4Header::AF22);
210 vDscpTypes.push_back (Ipv4Header::AF23);
211 vDscpTypes.push_back (Ipv4Header::CS3);
212 vDscpTypes.push_back (Ipv4Header::AF31);
213 vDscpTypes.push_back (Ipv4Header::AF32);
214 vDscpTypes.push_back (Ipv4Header::AF33);
215 vDscpTypes.push_back (Ipv4Header::CS4);
216 vDscpTypes.push_back (Ipv4Header::AF41);
217 vDscpTypes.push_back (Ipv4Header::AF42);
218 vDscpTypes.push_back (Ipv4Header::AF43);
219 vDscpTypes.push_back (Ipv4Header::CS5);
220 vDscpTypes.push_back (Ipv4Header::EF);
221 vDscpTypes.push_back (Ipv4Header::CS6);
222 vDscpTypes.push_back (Ipv4Header::CS7);
224 for (uint32_t i = 0; i < vDscpTypes.size (); i++)
226 SendData_IpHdr_Dscp (txSocket,
"10.0.0.1", vDscpTypes [i], Ipv4Header::ECT1);
227 NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 143,
"recv(hdrincl): 10.0.0.1");
228 NS_TEST_EXPECT_MSG_EQ (m_receivedHeader.
GetDscp (), vDscpTypes [i],
"recv(hdrincl): 10.0.0.1");
229 m_receivedHeader.
Print (std::cout);
230 std::cout << std::endl;
231 m_receivedPacket->RemoveAllByteTags ();
232 m_receivedPacket = 0;
236 std::cout <<
"Ecn Test\n";
237 std::vector <Ipv4Header::EcnType> vEcnTypes;
238 vEcnTypes.push_back (Ipv4Header::NotECT);
239 vEcnTypes.push_back (Ipv4Header::ECT1);
240 vEcnTypes.push_back (Ipv4Header::ECT0);
241 vEcnTypes.push_back (Ipv4Header::CE);
243 for (uint32_t i = 0; i < vEcnTypes.size (); i++)
245 SendData_IpHdr_Dscp (txSocket,
"10.0.0.1", Ipv4Header::DscpDefault, vEcnTypes [i]);
246 NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 143,
"recv(hdrincl): 10.0.0.1");
247 NS_TEST_EXPECT_MSG_EQ (m_receivedHeader.
GetEcn (), vEcnTypes [i],
"recv(hdrincl): 10.0.0.1");
248 m_receivedHeader.
Print (std::cout);
249 std::cout << std::endl;
250 m_receivedPacket->RemoveAllByteTags ();
251 m_receivedPacket = 0;
256 Simulator::Destroy ();
266 } g_ipv4HeaderTestSuite;
virtual uint32_t AddInterface(Ptr< NetDevice > device)=0
a class to represent an Ipv4 address mask
#define NS_ASSERT(condition)
uint32_t GetSize(void) const
virtual Ptr< Socket > CreateSocket(void)=0
API to create RAW socket instances.
TestSuite(std::string name, Type type=UNIT)
Constuct a new test suite.
a polymophic address class
virtual void SetUp(uint32_t interface)=0
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
void AggregateObject(Ptr< Object > other)
Access to the Ipv4 forwarding table, interfaces, and configuration.
virtual Ptr< Packet > Recv(uint32_t maxSize, uint32_t flags)=0
Read data from the socket.
void AddTestCase(TestCase *testCase) NS_DEPRECATED
Add an individual test case to this test suite.
Ipv4 addresses are stored in host order in this class.
Time Seconds(double seconds)
create ns3::Time instances in units of seconds.
uint32_t AddDevice(Ptr< NetDevice > device)
uint32_t GetId(void) const
a class to store IPv4 address information on an interface
virtual Ptr< Node > GetNode(void) const =0
virtual void SetAddress(Address address)
virtual bool AddAddress(uint32_t interface, Ipv4InterfaceAddress address)=0
virtual int SendTo(Ptr< Packet > p, uint32_t flags, const Address &toAddress)=0
Send data to a specified peer.
void SetAttribute(std::string name, const AttributeValue &value)
Ptr< T > GetObject(void) const
void AddHeader(const Header &header)
virtual uint32_t GetRxAvailable(void) const =0
void SetRoutingProtocol(Ptr< Ipv4RoutingProtocol > routingProtocol)
Register a new routing protocol to be used by this Ipv4 stack.