21#include <ns3/boolean.h> 
   22#include <ns3/callback.h> 
   23#include <ns3/config.h> 
   24#include <ns3/data-rate.h> 
   25#include <ns3/internet-stack-helper.h> 
   26#include <ns3/ipv4-address-helper.h> 
   27#include <ns3/ipv4-interface-container.h> 
   28#include <ns3/ipv4-static-routing-helper.h> 
   29#include <ns3/ipv4-static-routing.h> 
   31#include <ns3/lte-helper.h> 
   32#include <ns3/mobility-helper.h> 
   33#include <ns3/net-device-container.h> 
   34#include <ns3/node-container.h> 
   35#include <ns3/nstime.h> 
   36#include <ns3/point-to-point-epc-helper.h> 
   37#include <ns3/point-to-point-helper.h> 
   38#include <ns3/position-allocator.h> 
   39#include <ns3/simulator.h> 
   69                             Time simulationDuration)
 
   70        : 
TestCase(
"Verifying that the time needed for handover is under a specified threshold"),
 
   82    void DoRun() 
override;
 
   96                                 uint16_t targetCellId);
 
  120                                  uint16_t targetCellId);
 
  152    auto epcHelper = CreateObject<PointToPointEpcHelper>();
 
  154    auto lteHelper = CreateObject<LteHelper>();
 
  155    lteHelper->SetEpcHelper(epcHelper);
 
  157    lteHelper->SetAttribute(
"NumberOfComponentCarriers",
 
  160    auto ccHelper = CreateObject<CcHelper>();
 
  161    ccHelper->SetUlEarfcn(100 + 18000);
 
  162    ccHelper->SetDlEarfcn(100);
 
  163    ccHelper->SetUlBandwidth(25);
 
  164    ccHelper->SetDlBandwidth(25);
 
  178    auto ueNode = CreateObject<Node>();
 
  181    auto posAlloc = CreateObject<ListPositionAllocator>();
 
  182    posAlloc->Add(Vector(0, 0, 0));
 
  183    posAlloc->Add(Vector(1000, 0, 0));
 
  184    posAlloc->Add(Vector(500, 0, 0));
 
  189    mobilityHelper.
Install(enbNodes);
 
  190    mobilityHelper.
Install(ueNode);
 
  195    auto enbDevs = lteHelper->InstallEnbDevice(enbNodes);
 
  196    auto ueDev = lteHelper->InstallUeDevice(ueNode).Get(0);
 
  202    inetStackHelper.
Install(ueNode);
 
  204    ueIfs = epcHelper->AssignUeIpv4Address(ueDev);
 
  218    lteHelper->AddX2Interface(enbNodes);
 
  219    lteHelper->Attach(ueDev, enbDevs.Get(0));
 
  220    lteHelper->HandoverRequest(
m_handoverTime, ueDev, enbDevs.Get(0), enbDevs.Get(1));
 
  225    Simulator::Destroy();
 
  234                                                  uint16_t targetCellId)
 
  253                          "UE handover delay is higher than the allowed threshold " 
  263                                                   uint16_t targetCellId)
 
  282                          "eNodeB handover delay is higher than the allowed threshold " 
  307             handoverTime += 
Seconds(0.001))
 
  324             handoverTime += 
Seconds(0.001))
 
Verifying that the time needed for handover is under a specified threshold.
void EnbHandoverStartCallback(std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti, uint16_t targetCellId)
ENB handover start callback function.
Time m_simulationDuration
the simulation duration
void DoRun() override
Implementation to actually run this TestCase.
bool m_useIdealRrc
use ideal RRC?
uint8_t m_numberOfComponentCarriers
Number of component carriers.
void UeHandoverEndOkCallback(std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti)
UE handover end OK callback function.
Time m_handoverTime
handover time
void UeHandoverStartCallback(std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti, uint16_t targetCellId)
UE handover start callback function.
Time m_delayThreshold
the delay threshold
void EnbHandoverEndOkCallback(std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti)
ENB handover end OK callback function.
Time m_ueHandoverStart
UE handover start time.
LteHandoverDelayTestCase(uint8_t numberOfComponentCarriers, bool useIdealRrc, Time handoverTime, Time delayThreshold, Time simulationDuration)
Constructor.
Time m_enbHandoverStart
ENB handover start time.
Lte Handover Delay Test Suite.
LteHandoverDelayTestSuite()
AttributeValue implementation for Boolean.
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...
holds a vector of std::pair of Ptr<Ipv4> and interface index.
Helper class used to assign positions and mobility models to nodes.
void Install(Ptr< Node > node) const
"Layout" a single node according to the current position allocator type.
void SetMobilityModel(std::string type, Ts &&... args)
void SetPositionAllocator(Ptr< PositionAllocator > allocator)
Set the position allocator which will be used to allocate the initial position of every node initiali...
keep track of a set of node pointers.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
@ SYSTEM
This test suite implements a System Test.
Simulation virtual time values and global simulation resolution.
TimeWithUnit As(const enum Unit unit=Time::AUTO) const
Attach a unit to a Time, to facilitate output in a specific unit.
Hold an unsigned integer type.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
void Connect(std::string path, const CallbackBase &cb)
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Time Now()
create an ns3::Time instance which contains the current simulation time.
#define NS_TEST_ASSERT_MSG_LT(actual, limit, msg)
Test that an actual value is less than a limit and report and abort if not.
LteHandoverDelayTestSuite g_lteHandoverDelayTestSuite
the test suite
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...