20#include "ns3/config-store.h"
21#include "ns3/core-module.h"
22#include "ns3/epc-helper.h"
23#include "ns3/internet-module.h"
24#include "ns3/ipv4-global-routing-helper.h"
25#include "ns3/ipv6-static-routing.h"
26#include "ns3/lte-helper.h"
27#include "ns3/lte-module.h"
28#include "ns3/mobility-module.h"
29#include "ns3/network-module.h"
30#include "ns3/point-to-point-helper.h"
31#include "ns3/udp-echo-helper.h"
97 void DoRun()
override;
109 :
TestCase(
"Test IPv6 Routing at LTE")
121 p->PeekHeader(ipv6Header);
132 p->PeekHeader(ipv6Header);
143 p->PeekHeader(ipv6Header);
154 p->PeekHeader(ipv6Header);
172 p1->RemoveHeader(ipv6header1);
173 uint64_t uid = p1->GetUid();
174 p1->RemoveHeader(udpHeader1);
180 p2->RemoveHeader(ipv6header2);
184 p2->RemoveHeader(udpHeader2);
186 uint16_t destinationPort;
190 if ((p2->GetUid() == p1->GetUid()) && sourceAddress == ipv6header1.
GetDestination() &&
191 destinationAddress == ipv6header1.
GetSource() &&
218 "No. of Request and Reply messages mismatch");
226 double distance = 60.0;
230 lteHelper->SetEpcHelper(epcHelper);
239 remoteHostContainer.
Create(1);
242 internet.Install(remoteHostContainer);
260 positionAlloc1->Add(Vector(distance * 0, 0, 0));
261 positionAlloc1->Add(Vector(distance * 0 + 5, 0, 0));
262 positionAlloc1->Add(Vector(distance * 1, 0, 0));
264 positionAlloc2->Add(Vector(distance * 0, 0, 0));
265 positionAlloc2->Add(Vector(distance * 1, 0, 0));
268 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
269 mobility.SetPositionAllocator(positionAlloc1);
270 mobility.Install(ueNodes);
272 mobility.SetPositionAllocator(positionAlloc2);
273 mobility.Install(enbNodes);
276 internet.Install(ueNodes);
293 ueStaticRouting->SetDefaultRoute(epcHelper->GetUeDefaultGatewayAddress6(), 1);
297 lteHelper->Attach(ueLteDevs.
Get(0), enbLteDevs.
Get(0));
298 lteHelper->Attach(ueLteDevs.
Get(1), enbLteDevs.
Get(0));
299 lteHelper->Attach(ueLteDevs.
Get(2), enbLteDevs.
Get(1));
310 remoteHostStaticRouting
322 serverApps.Add(echoServer2.
Install(ueNodes.
Get(1)));
323 serverApps.Add(echoServer3.
Install(ueNodes.
Get(2)));
325 serverApps.Start(
Seconds(4.0));
326 serverApps.Stop(
Seconds(12.0));
359 ipL3->TraceConnectWithoutContext(
"Tx",
361 ipL3->TraceConnectWithoutContext(
"Rx",
367 appPgw->TraceConnectWithoutContext(
"RxFromS1u",
369 appPgw->TraceConnectWithoutContext(
"RxFromTun",
390 :
TestSuite(
"lte-ipv6-routing-test", UNIT)
Lte Ipv6 routing test case.
Ipv6InterfaceContainer m_ueIpIface
IPv6 interface container for ue.
void TunToPgw(Ptr< Packet > p)
Received Packet at pgw from enb.
Ipv6Address m_remoteHostAddr
remote host address
void ReceivedAtClient(Ptr< const Packet > p, Ptr< Ipv6 > ipv6, uint32_t interface)
Received Packets at client's IPv6 interface.
std::list< Ptr< Packet > > m_clientTxPkts
list of sent packets from client
std::list< uint64_t > m_pgwUidRxFrmTun
list of uids of packets received at pgw from tunnel net device
void EnbToPgw(Ptr< Packet > p)
Received Packet at pgw from enb.
void Checker()
Initialize testing parameters.
~LteIpv6RoutingTestCase() override
std::list< Ptr< Packet > > m_clientRxPkts
list of received packets at client
void SentAtClient(Ptr< const Packet > p, Ptr< Ipv6 > ipv6, uint32_t interface)
sent Packets from client's IPv6 interface.
std::list< uint64_t > m_pgwUidRxFrmEnb
list of uids of packets received at pgw from enb
void DoRun() override
Implementation to actually run this TestCase.
LteIpv6RoutingTestSuite()
holds a vector of ns3::Application pointers.
void Start(Time start) const
Start all of the Applications in this container at the start time given as a parameter.
void Stop(Time stop) const
Arrange for all of the Applications in this container to Stop() at the Time given as a parameter.
Introspection did not find any typical Config paths.
void ConfigureDefaults()
Configure the default values.
Class for representing data rates.
AttributeValue implementation for DataRate.
aggregate IP/TCP/UDP functionality to existing Nodes.
Helper class to auto-assign global IPv6 unicast addresses.
void SetBase(Ipv6Address network, Ipv6Prefix prefix, Ipv6Address base=Ipv6Address("::1"))
Set the base network number, network prefix, and base interface ID.
Ipv6InterfaceContainer Assign(const NetDeviceContainer &c)
Allocate an Ipv6InterfaceContainer with auto-assigned addresses.
Describes an IPv6 address.
Access to the IPv6 forwarding table, interfaces, and configuration.
Keep track of a set of IPv6 interfaces.
void SetForwarding(uint32_t i, bool state)
Set the state of the stack (act as a router or as an host) for the specified index.
void SetDefaultRouteInAllNodes(uint32_t router)
Set the default route for all the devices (except the router itself).
Ipv6Address GetAddress(uint32_t i, uint32_t j) const
Get the address for the specified index.
Describes an IPv6 prefix.
Helper class that adds ns3::Ipv6StaticRouting objects.
Ptr< Ipv6StaticRouting > GetStaticRouting(Ptr< Ipv6 > ipv6) const
Get Ipv6StaticRouting pointer from IPv6 stack.
Helper class used to assign positions and mobility models to nodes.
holds a vector of ns3::NetDevice pointers
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index.
keep track of a set of node pointers.
uint32_t GetN() const
Get the number of Ptr<Node> stored in this container.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
Build a set of PointToPointNetDevice objects.
void SetDeviceAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each NetDevice created by the helper.
void SetChannelAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each Channel created by the helper.
NetDeviceContainer Install(NodeContainer c)
Smart pointer class similar to boost::intrusive_ptr.
static EventId Schedule(const Time &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
static void Run()
Run the simulation.
static void Stop()
Tell the Simulator the calling event should be the last one executed.
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
Simulation virtual time values and global simulation resolution.
AttributeValue implementation for Time.
Create an application which sends a UDP packet and waits for an echo of this packet.
void SetAttribute(std::string name, const AttributeValue &value)
Record an attribute to be set in each Application after it is is created.
ApplicationContainer Install(Ptr< Node > node) const
Create a udp echo client application on the specified node.
Create a server application which waits for input UDP packets and sends them back to the original sen...
ApplicationContainer Install(Ptr< Node > node) const
Create a UdpEchoServerApplication on the specified Node.
static const uint8_t PROT_NUMBER
protocol number (0x11)
Hold an unsigned integer type.
static LteIpv6RoutingTestSuite g_lteipv6testsuite
Static variable for test initialization.
#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.
Time Seconds(double value)
Construct a Time in the indicated unit.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Callback< R, Args... > MakeCallback(R(T::*memPtr)(Args...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...