18 #include "ns3/boolean.h"    19 #include "ns3/config.h"    20 #include "ns3/inet-socket-address.h"    21 #include "ns3/internet-stack-helper.h"    22 #include "ns3/ipv4-address-helper.h"    23 #include "ns3/ipv4-global-routing-helper.h"    24 #include "ns3/ipv4-static-routing-helper.h"    27 #include "ns3/node-container.h"    28 #include "ns3/packet.h"    29 #include "ns3/simple-net-device-helper.h"    30 #include "ns3/pointer.h"    31 #include "ns3/simulator.h"    32 #include "ns3/string.h"    34 #include "ns3/uinteger.h"    35 #include "ns3/ipv4-packet-info-tag.h"    36 #include "ns3/simple-net-device.h"    37 #include "ns3/simple-channel.h"    38 #include "ns3/socket-factory.h"    39 #include "ns3/udp-socket-factory.h"    40 #include "ns3/ipv4-l3-protocol.h"    41 #include "ns3/ipv4-routing-protocol.h"    42 #include "ns3/ipv4-routing-table-entry.h"    43 #include "ns3/ipv4-global-routing.h"    44 #include "ns3/bridge-helper.h"   129   virtual void DoSetup (
void);
   130   virtual void DoRun (
void);
   137   : 
TestCase (
"Global routing on point-to-point link")
   159   ipv4.
SetBase (
"10.1.1.0", 
"255.255.255.252");
   166   Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
   180   uint32_t nRoutes0 = globalRouting0->
GetNRoutes ();
   189   uint32_t nRoutes1 = globalRouting1->
GetNRoutes ();
   192   route = globalRouting1->
GetRoute (0);
   201   Simulator::Destroy ();
   214   virtual void DoRun (
void);
   221   : 
TestCase (
"Global routing on broadcast link")
   242   ipv4.
SetBase (
"10.1.1.0", 
"255.255.255.0");
   249   Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
   263   uint32_t nRoutes0 = globalRouting0->
GetNRoutes ();
   266   for (uint32_t i = 0; i < globalRouting0->
GetNRoutes (); i++)
   273   uint32_t nRoutes1 = globalRouting1->
GetNRoutes ();
   276   for (uint32_t i = 0; i < globalRouting0->
GetNRoutes (); i++)
   282   Simulator::Destroy ();
   295   virtual void DoRun (
void);
   302   : 
TestCase (
"Global routing across two hops (point-to-point links)")
   321   net2.
Add (simpleHelper2.Install (
m_nodes.
Get (2), channel2));
   331   ipv4.
SetBase (
"10.1.1.0", 
"255.255.255.252");
   333   ipv4.
SetBase (
"10.1.2.0", 
"255.255.255.252");
   340   Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
   360   uint32_t nRoutes0 = globalRouting0->
GetNRoutes ();
   371   uint32_t nRoutes1 = globalRouting1->
GetNRoutes ();
   373   route = globalRouting1->
GetRoute (0);
   377   route = globalRouting1->
GetRoute (1);
   378   NS_LOG_DEBUG (
"TwoLinkTest entry dest " << route->GetDest () << 
" gw " << route->GetGateway ());
   381   route = globalRouting1->
GetRoute (2);
   382   NS_LOG_DEBUG (
"TwoLinkTest entry dest " << route->GetDest () << 
" gw " << route->GetGateway ());
   385   route = globalRouting1->
GetRoute (3);
   386   NS_LOG_DEBUG (
"TwoLinkTest entry dest " << route->GetDest () << 
" gw " << route->GetGateway ());
   392   uint32_t nRoutes2 = globalRouting2->
GetNRoutes ();
   396   route = globalRouting2->
GetRoute (0);
   397   NS_LOG_DEBUG (
"entry dest " << route->GetDest () << 
" gw " << route->GetGateway ());
   401   Simulator::Destroy ();
   414   virtual void DoRun (
void);
   421   : 
TestCase (
"Global routing across two hops (broadcast links)")
   438   net2.
Add (simpleHelper2.Install (
m_nodes.
Get (2), channel2));
   448   ipv4.
SetBase (
"10.1.1.0", 
"255.255.255.0");
   450   ipv4.
SetBase (
"10.1.2.0", 
"255.255.255.0");
   457   Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
   476   uint32_t nRoutes0 = globalRouting0->
GetNRoutes ();
   483   route = globalRouting0->
GetRoute (1);
   484   NS_LOG_DEBUG (
"entry dest " << route->GetDest () << 
" gw " << route->GetGateway ());
   489   uint32_t nRoutes1 = globalRouting1->
GetNRoutes ();
   492   route = globalRouting1->
GetRoute (0);
   493   NS_LOG_DEBUG (
"TwoLanTest entry dest " << route->GetDest () << 
" gw " << route->GetGateway ());
   496   route = globalRouting1->
GetRoute (1);
   497   NS_LOG_DEBUG (
"TwoLanTest entry dest " << route->GetDest () << 
" gw " << route->GetGateway ());
   501   Simulator::Destroy ();
   514   virtual void DoRun (
void);
   521   : 
TestCase (
"Global routing across bridging topology (bug 2102)")
   543   net2.
Add (simpleHelper2.Install (
m_nodes.
Get (2), channel2));
   544   bridgeFacingDevices.
Add (net2.
Get (0));
   545   switchDevices.
Add (net2.
Get (1));
   551   net3.
Add (simpleHelper3.Install (
m_nodes.
Get (3), channel3));
   552   bridgeFacingDevices.
Add (net3.
Get (1));
   553   switchDevices.
Add (net3.
Get (0));
   559   net4.
Add (simpleHelper4.Install (
m_nodes.
Get (4), channel4));
   563   bridge.
Install (switchNode, switchDevices);
   578   address.SetBase (
"10.1.1.0", 
"255.255.255.0");
   581   address.SetBase (
"10.1.2.0", 
"255.255.255.0");
   582   address.Assign (bridgeFacingDevices);
   584   address.SetBase (
"10.1.3.0", 
"255.255.255.0");
   592   Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
   619   uint32_t nRoutes0 = globalRouting0->
GetNRoutes ();
   622   for (uint32_t i = 0; i < globalRouting0->
GetNRoutes (); i++)
   624       route = globalRouting0->
GetRoute (i);
   637   uint32_t nRoutes1 = globalRouting1->
GetNRoutes ();
   640   for (uint32_t i = 0; i < globalRouting1->
GetNRoutes (); i++)
   642       route = globalRouting1->
GetRoute (i);
   653   NS_LOG_DEBUG (
"BridgeTest skip print out of n2 and n3, go next to node n4");
   658   uint32_t nRoutes4 = globalRouting4->
GetNRoutes ();
   661   for (uint32_t i = 0; i < globalRouting4->
GetNRoutes (); i++)
   663       route = globalRouting4->
GetRoute (i);
   673   Simulator::Destroy ();
   686   virtual void DoRun (
void);
   693   : 
TestCase (
"Global routing across two bridges")
   716   net2.
Add (simpleHelper2.Install (
m_nodes.
Get (2), channel2));
   717   bridgeFacingDevices.
Add (net2.
Get (0));
   718   switchn2Devices.
Add (net2.
Get (1));
   724   net3.
Add (simpleHelper3.Install (
m_nodes.
Get (3), channel3));
   725   switchn2Devices.
Add (net3.
Get (0));
   726   switchn3Devices.
Add (net3.
Get (1));
   732   net4.
Add (simpleHelper4.Install (
m_nodes.
Get (4), channel4));
   733   switchn3Devices.
Add (net4.
Get (0));
   734   bridgeFacingDevices.
Add (net4.
Get (1));
   738   bridgen2Helper.
Install (switchn2Node, switchn2Devices);
   742   bridgen3Helper.
Install (switchn3Node, switchn3Devices);
   757   address.SetBase (
"10.1.1.0", 
"255.255.255.0");
   760   address.SetBase (
"10.1.2.0", 
"255.255.255.0");
   761   address.Assign (bridgeFacingDevices);
   768   Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
   788   uint32_t nRoutes0 = globalRouting0->
GetNRoutes ();
   791   for (uint32_t i = 0; i < globalRouting0->
GetNRoutes (); i++)
   793       route = globalRouting0->
GetRoute (i);
   803   NS_LOG_DEBUG (
"BridgeTest skip print out of n1-n3, go next to node n4");
   808   uint32_t nRoutes4 = globalRouting4->
GetNRoutes ();
   811   for (uint32_t i = 0; i < globalRouting4->
GetNRoutes (); i++)
   813       route = globalRouting4->
GetRoute (i);
   823   Simulator::Destroy ();
   856   virtual void DoRun (
void);
   868   : 
TestCase (
"Dynamic global routing example"), m_count (0)
   878   std::vector<std::pair<Ptr<Socket>, 
bool> >::iterator iter;
   884           iter->second = 
false;
   885           iter->first->Close ();
   896   while ((packet = socket->
RecvFrom (from)))
   994   ipv4.
SetBase (
"10.1.1.0", 
"255.255.255.0");
   997   ipv4.
SetBase (
"10.1.2.0", 
"255.255.255.0");
  1000   ipv4.
SetBase (
"10.1.3.0", 
"255.255.255.0");
  1003   ipv4.
SetBase (
"10.250.1.0", 
"255.255.255.0");
  1006   ipv4.
SetBase (
"172.16.1.0", 
"255.255.255.0");
  1011   Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
  1015   TypeId tid = TypeId::LookupByName (
"ns3::UdpSocketFactory");
  1018   std::pair<Ptr<Socket>, 
bool>  sendSockA;
  1019   sendSockA.first = Socket::CreateSocket (c.
Get (1), tid);
  1020   sendSockA.first->Bind ();
  1022   sendSockA.second = 
true;
  1027   std::pair<Ptr<Socket>, 
bool>  sendSockB;
  1028   sendSockB.first = Socket::CreateSocket (c.
Get (1), tid);
  1029   sendSockB.first->Bind ();
  1031   sendSockB.second = 
true;
  1050   uint32_t ipv4ifIndex1 = 2;
  1052   Simulator::Schedule (
Seconds (2), &Ipv4::SetDown,ipv41, ipv4ifIndex1);
  1059   uint32_t ipv4ifIndex6 = 2;
  1060   Simulator::Schedule (
Seconds (6), &Ipv4::SetDown,ipv46, ipv4ifIndex6);
  1063   Simulator::Schedule (
Seconds (12), &Ipv4::SetDown,ipv41, ipv4ifIndex1);
  1087   Simulator::Destroy ();
  1123   virtual void DoRun (
void);
  1128   : 
TestCase (
"Slash 32 global routing example")
  1139   uint32_t availableData;
  1145   (void) availableData;
  1162   Simulator::Stop (
Seconds (66));
  1189   deviceA->
SetAddress (Mac48Address::Allocate ());
  1196   deviceC->
SetAddress (Mac48Address::Allocate ());
  1197   nC->AddDevice (deviceC);
  1201   ipv4.
SetBase (
"10.1.1.0", 
"255.255.255.252");
  1204   ipv4.
SetBase (
"10.1.1.4", 
"255.255.255.252");
  1212   int32_t ifIndexC = ipv4C->AddInterface (deviceC);
  1217   ipv4A->
SetUp (ifIndexA);
  1220   ipv4C->AddAddress (ifIndexC, ifInAddrC);
  1221   ipv4C->SetMetric (ifIndexC, 1);
  1222   ipv4C->SetUp (ifIndexC);
  1226   Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
  1241   SendData (txSocket, 
"192.168.1.1");
  1244   Simulator::Destroy ();
  1260   : 
TestSuite (
"ipv4-global-routing", UNIT)
 virtual void DoSetup(void)
Implementation to do any local setup required for this TestCase. 
uint16_t m_packetSize
Packet size. 
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index. 
virtual uint32_t AddInterface(Ptr< NetDevice > device)=0
Simulation virtual time values and global simulation resolution. 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
Smart pointer class similar to boost::intrusive_ptr. 
IPv4 GlobalRouting Two LAN test. 
Ptr< Packet > m_receivedPacket
number of received packets 
  AttributeValue implementation for Boolean. 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
uint32_t GetId(void) const
IPv4 Dynamic GlobalRouting test. 
holds a vector of std::pair of Ptr<Ipv4> and interface index. 
IPv4 GlobalRouting Bridge test. 
IPv4 GlobalRouting LAN test. 
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload). 
virtual bool SetAllowBroadcast(bool allowBroadcast)=0
Configure whether broadcast datagram transmissions are allowed. 
a class to represent an Ipv4 address mask 
NodeContainer m_nodes
Nodes used in the test. 
virtual int ShutdownSend(void)=0
uint32_t GetRecvIf(void) const
Get the tag's receiving interface. 
NodeContainer m_nodes
Nodes used in the test. 
double GetSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit. 
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
virtual void DoRun(void)
Implementation to actually run this TestCase. 
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name. 
uint16_t m_count
Number of packets received. 
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. 
Ipv4Address GetDest(void) const
virtual Ptr< Socket > CreateSocket(void)=0
IPv4 GlobalRouting TestSuite. 
Ipv4DynamicGlobalRoutingTestCase()
Ipv4Address GetGateway(void) const
uint64_t GetBitRate() const
Get the underlying bitrate. 
a polymophic address class 
Ipv4GlobalRoutingSlash32TestCase()
NodeContainer m_nodes
Nodes used in the test. 
void SetUp(char *deviceName)
std::vector< uint8_t > m_secondInterface
Packets received on the 2nd interface at a given time. 
virtual int Listen(void)=0
Listen for incoming connections. 
std::vector< std::pair< Ptr< Socket >, bool > > m_sendSocks
Sending sockets. 
Class for representing data rates. 
void SetRecvPktInfo(bool flag)
Enable/Disable receive packet information to socket. 
IPv4 Dynamic GlobalRouting /32 test. 
IPv4 GlobalRouting Two Link test. 
A record of an IPv4 routing table entry for Ipv4GlobalRouting and Ipv4StaticRouting. 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
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
virtual void SetUp(uint32_t interface)=0
void Add(NetDeviceContainer other)
Append the contents of another NetDeviceContainer to the end of this container. 
virtual void DoSetup(void)
Implementation to do any local setup required for this TestCase. 
IPv4 GlobalRouting Two bridges test. 
Global routing protocol for IPv4 stacks. 
#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. 
void DoSendData(Ptr< Socket > socket, std::string to)
Send a packet. 
virtual void DoSetup(void)
Implementation to do any local setup required for this TestCase. 
NodeContainer m_nodes
Nodes used in the test. 
holds a vector of ns3::NetDevice pointers 
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
DataRate m_dataRate
Data rate. 
NodeContainer m_nodes
Nodes used in the test. 
void SetRecvCallback(Callback< void, Ptr< Socket > >)
Notify application when new data is available to be read. 
Add capability to bridge multiple LAN segments (IEEE 802.1D bridging) 
void SendData(uint8_t index)
Send some data. 
void ReceivePkt(Ptr< Socket > socket)
Receive a packet. 
uint32_t GetNRoutes(void) const
Get the number of individual unicast routes that have been added to the routing table. 
NodeContainer m_nodes
Nodes used in the test. 
Ptr< Ipv4RoutingProtocol > GetRoutingProtocol(void) const
Get the routing protocol to be used by this Ipv4 stack. 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
virtual void DoSetup(void)
Implementation to do any local setup required for this TestCase. 
Access to the IPv4 forwarding table, interfaces, and configuration. 
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object. 
Implement the IPv4 layer. 
virtual void DoSetup(void)
Implementation to do any local setup required for this TestCase. 
virtual int Bind(const Address &address)=0
Allocate a local endpoint for this socket. 
virtual void DoSetup(void)
Implementation to do any local setup required for this TestCase. 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
keep track of a set of node pointers. 
virtual Ptr< Packet > Recv(uint32_t maxSize, uint32_t flags)=0
Read data from the socket. 
void SetNetDevicePointToPointMode(bool pointToPointMode)
SimpleNetDevice is Broadcast capable and ARP needing. 
Ipv4RoutingTableEntry * GetRoute(uint32_t i) const
Get a route from the global unicast routing table. 
void SendData(Ptr< Socket > socket, std::string to)
Send a packet. 
void HandleRead(Ptr< Socket > socket)
Handle an incoming packet. 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
virtual ~Ipv4DynamicGlobalRoutingTestCase()
virtual ~Ipv4GlobalRoutingSlash32TestCase()
virtual void DoRun(void)
Implementation to actually run this TestCase. 
This class implements Linux struct pktinfo in order to deliver ancillary information to the socket in...
NetDeviceContainer Install(Ptr< Node > node, NetDeviceContainer c)
This method creates an ns3::BridgeNetDevice with the attributes configured by BridgeHelper::SetDevice...
void Install(std::string nodeName) const
Aggregate implementations of the ns3::Ipv4, ns3::Ipv6, ns3::Udp, and ns3::Tcp classes onto the provid...
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...
virtual void DoRun(void)
Implementation to actually run this TestCase. 
uint32_t AddDevice(Ptr< NetDevice > device)
Associate a NetDevice to this node. 
#define NS_TEST_ASSERT_MSG_NE(actual, limit, msg)
Test that an actual and expected (limit) value are not equal and report and abort if not...
a class to store IPv4 address information on an interface 
virtual Ptr< Node > GetNode(void) const =0
Return the node this socket is associated with. 
virtual void SetAddress(Address address)
Set the address of this interface. 
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG. 
Time Seconds(double value)
Construct a Time in the indicated unit. 
void SetDefault(std::string name, const AttributeValue &value)
virtual void SetMetric(uint32_t interface, uint16_t metric)=0
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index. 
Helper class that adds ns3::Ipv4GlobalRouting objects. 
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. 
A helper class to make life easier while doing simple IPv4 address assignment in scripts. 
Time MicroSeconds(uint64_t value)
Construct a Time in the indicated unit. 
Time Now(void)
create an ns3::Time instance which contains the current simulation time. 
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer. 
API to create UDP socket instances. 
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. 
void ShutDownSock(uint8_t index)
Shutdown a socket. 
build a set of SimpleNetDevice objects 
bool PeekPacketTag(Tag &tag) const
Search a matching tag and call Tag::Deserialize if it is found. 
NetDeviceContainer Install(Ptr< Node > node) const
This method creates an ns3::SimpleChannel with the attributes configured by SimpleNetDeviceHelper::Se...
a unique identifier for an interface. 
IPv4 GlobalRouting Link test. 
static Ipv4GlobalRoutingTestSuite g_globalRoutingTestSuite
Static variable for test initialization. 
void SetRoutingHelper(const Ipv4RoutingHelper &routing)
std::vector< uint8_t > m_firstInterface
Packets received on the 1st interface at a given time. 
Ipv4GlobalRoutingTestSuite()
void SetBase(Ipv4Address network, Ipv4Mask mask, Ipv4Address base="0.0.0.1")
Set the base network number, network mask and base address. 
virtual uint32_t GetRxAvailable(void) const =0
Return number of bytes which can be returned from one or multiple calls to Recv.