22 #include "ns3/socket-factory.h"
23 #include "ns3/udp-socket-factory.h"
24 #include "ns3/simulator.h"
25 #include "ns3/simple-channel.h"
26 #include "ns3/simple-net-device.h"
27 #include "ns3/socket.h"
28 #include "ns3/boolean.h"
33 #include "ns3/inet-socket-address.h"
35 #include "ns3/internet-stack-helper.h"
36 #include "ns3/ipv4-address-helper.h"
37 #include "ns3/ipv4-l3-protocol.h"
38 #include "ns3/icmpv4-l4-protocol.h"
39 #include "ns3/udp-l4-protocol.h"
41 #include "ns3/rip-helper.h"
42 #include "ns3/node-container.h"
43 #include "ns3/ipv4-static-routing.h"
65 void DoSendData (
Ptr<Socket> socket, std::string to);
74 virtual void DoRun (
void);
91 uint32_t availableData;
114 Simulator::Stop (
Seconds (66));
123 Ptr<Node> txNode = CreateObject<Node> ();
124 Ptr<Node> rxNode = CreateObject<Node> ();
125 Ptr<Node> routerA = CreateObject<Node> ();
126 Ptr<Node> routerB = CreateObject<Node> ();
127 Ptr<Node> routerC = CreateObject<Node> ();
136 internetRouters.
Install (routers);
149 txDev = CreateObject<SimpleNetDevice> ();
158 fwDev1routerA = CreateObject<SimpleNetDevice> ();
159 fwDev1routerA->SetAddress (
Mac48Address (
"00:00:00:00:00:02"));
162 net1.
Add (fwDev1routerA);
165 fwDev2routerA = CreateObject<SimpleNetDevice> ();
166 fwDev2routerA->SetAddress (
Mac48Address (
"00:00:00:00:00:03"));
169 net2.
Add (fwDev2routerA);
174 fwDev1routerB = CreateObject<SimpleNetDevice> ();
175 fwDev1routerB->SetAddress (
Mac48Address (
"00:00:00:00:00:04"));
178 net2.
Add (fwDev1routerB);
181 fwDev2routerB = CreateObject<SimpleNetDevice> ();
182 fwDev2routerB->SetAddress (
Mac48Address (
"00:00:00:00:00:05"));
185 net3.
Add (fwDev2routerB);
190 fwDev1routerC = CreateObject<SimpleNetDevice> ();
191 fwDev1routerC->SetAddress (
Mac48Address (
"00:00:00:00:00:06"));
194 net3.
Add (fwDev1routerC);
197 fwDev2routerC = CreateObject<SimpleNetDevice> ();
198 fwDev2routerC->SetAddress (
Mac48Address (
"00:00:00:00:00:07"));
201 net4.
Add (fwDev2routerC);
206 rxDev = CreateObject<SimpleNetDevice> ();
214 txDev->SetChannel (channel1);
215 fwDev1routerA->SetChannel (channel1);
218 fwDev2routerA->SetChannel (channel2);
219 fwDev1routerB->SetChannel (channel2);
222 fwDev2routerB->SetChannel (channel3);
223 fwDev1routerC->SetChannel (channel3);
226 fwDev2routerC->SetChannel (channel4);
227 rxDev->SetChannel (channel4);
246 staticRouting->SetDefaultRoute (
"10.0.1.2", 1 );
248 staticRouting->SetDefaultRoute (
"10.0.2.1", 1 );
252 Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket ();
257 Ptr<Socket> txSocket = txSocketFactory->CreateSocket ();
258 txSocket->SetAllowBroadcast (
true);
268 Simulator::Destroy ();
296 virtual void DoRun (
void);
307 :
TestCase (
"RIP counting to infinity")
313 uint32_t availableData;
319 (void) availableData;
336 Simulator::Stop (
Seconds (66));
345 Ptr<Node> txNode = CreateObject<Node> ();
346 Ptr<Node> rxNode = CreateObject<Node> ();
347 Ptr<Node> routerA = CreateObject<Node> ();
348 Ptr<Node> routerB = CreateObject<Node> ();
349 Ptr<Node> routerC = CreateObject<Node> ();
365 internetv6routers.
Install (routers);
378 txDev = CreateObject<SimpleNetDevice> ();
387 fwDev1routerA = CreateObject<SimpleNetDevice> ();
388 fwDev1routerA->SetAddress (
Mac48Address (
"00:00:00:00:00:02"));
391 net1.
Add (fwDev1routerA);
394 fwDev2routerA = CreateObject<SimpleNetDevice> ();
395 fwDev2routerA->SetAddress (
Mac48Address (
"00:00:00:00:00:03"));
398 net2.
Add (fwDev2routerA);
403 fwDev1routerB = CreateObject<SimpleNetDevice> ();
404 fwDev1routerB->SetAddress (
Mac48Address (
"00:00:00:00:00:04"));
407 net2.
Add (fwDev1routerB);
410 fwDev2routerB = CreateObject<SimpleNetDevice> ();
411 fwDev2routerB->SetAddress (
Mac48Address (
"00:00:00:00:00:05"));
414 net3.
Add (fwDev2routerB);
419 fwDev1routerC = CreateObject<SimpleNetDevice> ();
420 fwDev1routerC->SetAddress (
Mac48Address (
"00:00:00:00:00:06"));
423 net3.
Add (fwDev1routerC);
426 fwDev2routerC = CreateObject<SimpleNetDevice> ();
427 fwDev2routerC->SetAddress (
Mac48Address (
"00:00:00:00:00:07"));
430 net4.
Add (fwDev2routerC);
435 rxDev = CreateObject<SimpleNetDevice> ();
443 txDev->SetChannel (channel1);
444 fwDev1routerA->SetChannel (channel1);
447 fwDev2routerA->SetChannel (channel2);
448 fwDev1routerB->SetChannel (channel2);
451 fwDev2routerB->SetChannel (channel3);
452 fwDev1routerC->SetChannel (channel3);
455 fwDev2routerC->SetChannel (channel4);
456 rxDev->SetChannel (channel4);
475 staticRouting->SetDefaultRoute (
"10.0.1.2", 1 );
477 staticRouting->SetDefaultRoute (
"10.0.2.1", 1 );
482 Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket ();
487 Ptr<Socket> txSocket = txSocketFactory->CreateSocket ();
488 txSocket->SetAllowBroadcast (
true);
495 Simulator::Destroy ();
511 virtual void DoRun (
void);
527 :
TestCase (
"RIP Split Horizon strategy")
534 uint32_t availableData;
539 Ipv4Address senderAddress = InetSocketAddress::ConvertFrom (srcAddr).GetIpv4 ();
541 if (senderAddress ==
"192.168.0.2")
549 for (std::list<RipRte>::iterator iter = rtes.begin ();
550 iter != rtes.end (); iter++)
552 if (iter->GetPrefix () ==
"10.0.1.0")
554 bool correct =
false;
555 if (iter->GetRouteMetric () == 16)
560 else if (iter->GetRouteMetric () == 2)
572 (void) availableData;
580 Ptr<Node> fakeNode = CreateObject<Node> ();
581 Ptr<Node> listener = CreateObject<Node> ();
583 Ptr<Node> routerA = CreateObject<Node> ();
584 Ptr<Node> routerB = CreateObject<Node> ();
595 internetRouters.
Install (routers);
598 internetNodes.
Install (listeners);
606 silentDev = CreateObject<SimpleNetDevice> ();
607 silentDev->SetAddress (
Mac48Address (
"00:00:00:00:00:01"));
610 net0.
Add (silentDev);
615 silentDevRouterA = CreateObject<SimpleNetDevice> ();
616 silentDevRouterA->SetAddress (
Mac48Address (
"00:00:00:00:00:02"));
619 net0.
Add (silentDevRouterA);
622 fwDevRouterA = CreateObject<SimpleNetDevice> ();
623 fwDevRouterA->SetAddress (
Mac48Address (
"00:00:00:00:00:03"));
626 net1.
Add (fwDevRouterA);
631 fwDevRouterB = CreateObject<SimpleNetDevice> ();
632 fwDevRouterB->SetAddress (
Mac48Address (
"00:00:00:00:00:04"));
635 net1.
Add (fwDevRouterB);
640 listenerDev = CreateObject<SimpleNetDevice> ();
641 listenerDev->SetAddress (
Mac48Address (
"00:00:00:00:00:05"));
644 net1.
Add (listenerDev);
648 silentDev->SetChannel (channel0);
649 silentDevRouterA->SetChannel (channel0);
652 fwDevRouterA->SetChannel (channel1);
653 fwDevRouterB->SetChannel (channel1);
654 listenerDev->SetChannel (channel1);
667 Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket ();
668 rxSocket->BindToNetDevice (listenerDev);
677 Simulator::Stop (
Seconds (66));
681 Simulator::Destroy ();
IPv4 RIP count to infinity Test.
void ReceivePkt(Ptr< Socket > socket)
Receive data.
virtual void DoRun(void)
Implementation to actually run this TestCase.
void DoSendData(Ptr< Socket > socket, std::string to)
Send data.
Ipv4RipCountToInfinityTest()
void SendData(Ptr< Socket > socket, std::string to)
Send data.
Ptr< Packet > m_receivedPacket
Received packet.
IPv4 RIP SplitHorizon strategy Test.
virtual void DoRun(void)
Implementation to actually run this TestCase.
void ReceivePktProbe(Ptr< Socket > socket)
Receive data.
Rip::SplitHorizonType_e m_detectedStrategy
Strategy detected.
Ipv4RipSplitHorizonStrategyTest(Rip::SplitHorizonType_e strategy)
Constructor.
Rip::SplitHorizonType_e m_setStrategy
Strategy set.
void SendData(Ptr< Socket > socket, std::string to)
Send data.
void ReceivePkt(Ptr< Socket > socket)
Receive data.
virtual void DoRun(void)
Implementation to actually run this TestCase.
Ptr< Packet > m_receivedPacket
Received packet.
void DoSendData(Ptr< Socket > socket, std::string to)
Send data.
a polymophic address class
Hold variables of type enum.
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...
void SetRoutingHelper(const Ipv4RoutingHelper &routing)
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.
Access to the IPv4 forwarding table, interfaces, and configuration.
virtual Ptr< Ipv4RoutingProtocol > GetRoutingProtocol(void) const =0
Get the routing protocol to be used by this Ipv4 stack.
holds a vector of std::pair of Ptr<Ipv4> and interface index.
a class to represent an Ipv4 address mask
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.
uint32_t GetId(void) const
uint32_t AddDevice(Ptr< NetDevice > device)
Associate a NetDevice to this node.
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
void RemoveAllByteTags(void)
Remove all byte tags stored in this packet.
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer.
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
Helper class that adds RIP routing to nodes.
void Set(std::string name, const AttributeValue &value)
void SetInterfaceMetric(Ptr< Node > node, uint32_t interface, uint8_t metric)
Set a metric for an interface.
SplitHorizonType_e
Split Horizon strategy type.
virtual Ptr< Packet > Recv(uint32_t maxSize, uint32_t flags)=0
Read data from the socket.
virtual Ptr< Node > GetNode(void) const =0
Return the node this socket is associated with.
virtual uint32_t GetRxAvailable(void) const =0
Return number of bytes which can be returned from one or multiple calls to Recv.
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.
@ UNIT
This test suite implements a Unit Test.
API to create UDP socket instances.
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not.
#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 Ipv4RipTestSuite g_ipv4ripTestSuite
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...