merge
This commit is contained in:
@@ -102,6 +102,7 @@ const char* g_ueManagerStateName[UeManager::NUM_STATES] =
|
||||
"CONNECTED_NORMALLY",
|
||||
"CONNECTION_RECONFIGURATION",
|
||||
"CONNECTION_REESTABLISHMENT",
|
||||
"HANDOVER_PREPARATION",
|
||||
"HANDOVER_JOINING",
|
||||
"HANDOVER_PATH_SWITCH",
|
||||
"HANDOVER_LEAVING",
|
||||
@@ -381,6 +382,7 @@ UeManager::ScheduleRrcConnectionReconfiguration ()
|
||||
case CONNECTION_SETUP:
|
||||
case CONNECTION_RECONFIGURATION:
|
||||
case CONNECTION_REESTABLISHMENT:
|
||||
case HANDOVER_PREPARATION:
|
||||
case HANDOVER_JOINING:
|
||||
case HANDOVER_LEAVING:
|
||||
// a previous reconfiguration still ongoing, we need to wait for it to be finished
|
||||
@@ -402,6 +404,50 @@ UeManager::ScheduleRrcConnectionReconfiguration ()
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
UeManager::PrepareHandover (uint16_t cellId)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << cellId);
|
||||
switch (m_state)
|
||||
{
|
||||
case CONNECTED_NORMALLY:
|
||||
{
|
||||
m_targetCellId = cellId;
|
||||
EpcX2SapProvider::HandoverRequestParams params;
|
||||
params.oldEnbUeX2apId = m_rnti;
|
||||
params.cause = EpcX2SapProvider::HandoverDesirableForRadioReason;
|
||||
params.sourceCellId = m_rrc->m_cellId;
|
||||
params.targetCellId = cellId;
|
||||
params.mmeUeS1apId = m_imsi;
|
||||
params.ueAggregateMaxBitRateDownlink = 200 * 1000;
|
||||
params.ueAggregateMaxBitRateUplink = 100 * 1000;
|
||||
params.bearers = GetErabList ();
|
||||
|
||||
LteRrcSap::HandoverPreparationInfo hpi;
|
||||
hpi.asConfig.sourceUeIdentity = m_rnti;
|
||||
hpi.asConfig.sourceDlCarrierFreq = m_rrc->m_dlEarfcn;
|
||||
hpi.asConfig.sourceRadioResourceConfig = GetRadioResourceConfigForHandoverPreparationInfo ();
|
||||
params.rrcContext = m_rrc->m_rrcSapUser->EncodeHandoverPreparationInformation (hpi);
|
||||
|
||||
NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
|
||||
NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
|
||||
NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
|
||||
NS_LOG_LOGIC ("mmmUeS1apId = " << params.oldEnbUeX2apId);
|
||||
NS_LOG_LOGIC ("rrcContext = " << params.rrcContext);
|
||||
|
||||
m_rrc->m_x2SapProvider->SendHandoverRequest (params);
|
||||
SwitchToState (HANDOVER_PREPARATION);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
NS_FATAL_ERROR ("method unexpected in state " << ToString (m_state));
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
UeManager::SendHandoverCommand (LteRrcSap::RrcConnectionReconfiguration rcr)
|
||||
{
|
||||
@@ -482,6 +528,23 @@ UeManager::SendUeContextRelease ()
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
UeManager::RecvHandoverPreparationFailure (uint16_t cellId)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << cellId);
|
||||
switch (m_state)
|
||||
{
|
||||
case HANDOVER_PREPARATION:
|
||||
NS_ASSERT (cellId == m_targetCellId);
|
||||
NS_LOG_INFO ("target eNB sent HO preparation failure, aborting HO");
|
||||
SwitchToState (CONNECTED_NORMALLY);
|
||||
break;
|
||||
|
||||
default:
|
||||
NS_FATAL_ERROR ("method unexpected in state " << ToString (m_state));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// methods forwarded from RRC SAP
|
||||
|
||||
@@ -935,6 +998,11 @@ LteEnbRrc::GetTypeId (void)
|
||||
TimeValue (MilliSeconds (80)),
|
||||
MakeTimeAccessor (&LteEnbRrc::m_systemInformationPeriodicity),
|
||||
MakeTimeChecker ())
|
||||
.AddAttribute ("AdmitHandoverRequest",
|
||||
"Whether to admit an X2 handover request from another eNB",
|
||||
BooleanValue (true),
|
||||
MakeBooleanAccessor (&LteEnbRrc::m_admitHandoverRequest),
|
||||
MakeBooleanChecker ())
|
||||
.AddTraceSource ("ConnectionEstablished",
|
||||
"trace fired upon successful RRC connection establishment",
|
||||
MakeTraceSourceAccessor (&LteEnbRrc::m_connectionEstablishedTrace))
|
||||
@@ -1096,30 +1164,8 @@ LteEnbRrc::SendHandoverRequest (uint16_t rnti, uint16_t cellId)
|
||||
NS_ASSERT (m_configured);
|
||||
|
||||
Ptr<UeManager> ueManager = GetUeManager (rnti);
|
||||
|
||||
EpcX2SapProvider::HandoverRequestParams params;
|
||||
params.oldEnbUeX2apId = rnti;
|
||||
params.cause = EpcX2SapProvider::HandoverDesirableForRadioReason;
|
||||
params.sourceCellId = m_cellId;
|
||||
params.targetCellId = cellId;
|
||||
params.mmeUeS1apId = ueManager->GetImsi ();
|
||||
params.ueAggregateMaxBitRateDownlink = 200 * 1000;
|
||||
params.ueAggregateMaxBitRateUplink = 100 * 1000;
|
||||
params.bearers = ueManager->GetErabList ();
|
||||
|
||||
LteRrcSap::HandoverPreparationInfo hpi;
|
||||
hpi.asConfig.sourceUeIdentity = rnti;
|
||||
hpi.asConfig.sourceDlCarrierFreq = m_dlEarfcn;
|
||||
hpi.asConfig.sourceRadioResourceConfig = ueManager->GetRadioResourceConfigForHandoverPreparationInfo ();
|
||||
params.rrcContext = m_rrcSapUser->EncodeHandoverPreparationInformation (hpi);
|
||||
|
||||
NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
|
||||
NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
|
||||
NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
|
||||
NS_LOG_LOGIC ("mmmUeS1apId = " << params.oldEnbUeX2apId);
|
||||
NS_LOG_LOGIC ("rrcContext = " << params.rrcContext);
|
||||
|
||||
m_x2SapProvider->SendHandoverRequest (params);
|
||||
ueManager->PrepareHandover (cellId);
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1183,18 +1229,31 @@ LteEnbRrc::DoPathSwitchRequestAcknowledge (EpcEnbS1SapUser::PathSwitchRequestAck
|
||||
}
|
||||
|
||||
void
|
||||
LteEnbRrc::DoRecvHandoverRequest (EpcX2SapUser::HandoverRequestParams params)
|
||||
LteEnbRrc::DoRecvHandoverRequest (EpcX2SapUser::HandoverRequestParams req)
|
||||
{
|
||||
NS_LOG_FUNCTION (this);
|
||||
|
||||
NS_LOG_LOGIC ("Recv X2 message: HANDOVER REQUEST");
|
||||
|
||||
NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
|
||||
NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
|
||||
NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
|
||||
NS_LOG_LOGIC ("mmeUeS1apId = " << params.mmeUeS1apId);
|
||||
NS_LOG_LOGIC ("oldEnbUeX2apId = " << req.oldEnbUeX2apId);
|
||||
NS_LOG_LOGIC ("sourceCellId = " << req.sourceCellId);
|
||||
NS_LOG_LOGIC ("targetCellId = " << req.targetCellId);
|
||||
NS_LOG_LOGIC ("mmeUeS1apId = " << req.mmeUeS1apId);
|
||||
|
||||
NS_ASSERT (params.targetCellId == m_cellId);
|
||||
NS_ASSERT (req.targetCellId == m_cellId);
|
||||
|
||||
if (m_admitHandoverRequest == false)
|
||||
{
|
||||
NS_LOG_INFO ("rejecting handover request from cellId " << req.sourceCellId);
|
||||
EpcX2Sap::HandoverPreparationFailureParams res;
|
||||
res.oldEnbUeX2apId = req.oldEnbUeX2apId;
|
||||
res.sourceCellId = req.sourceCellId ;
|
||||
res.targetCellId = req.targetCellId ;
|
||||
res.cause = 0;
|
||||
res.criticalityDiagnostics = 0;
|
||||
m_x2SapProvider->SendHandoverPreparationFailure (res);
|
||||
return;
|
||||
}
|
||||
|
||||
uint16_t rnti = AddUe (UeManager::HANDOVER_JOINING);
|
||||
LteEnbCmacSapProvider::AllocateNcRaPreambleReturnValue anrcrv = m_cmacSapProvider->AllocateNcRaPreamble (rnti);
|
||||
@@ -1207,11 +1266,11 @@ LteEnbRrc::DoRecvHandoverRequest (EpcX2SapUser::HandoverRequestParams params)
|
||||
}
|
||||
|
||||
Ptr<UeManager> ueManager = GetUeManager (rnti);
|
||||
ueManager->SetSource (params.sourceCellId, params.oldEnbUeX2apId);
|
||||
ueManager->SetImsi (params.mmeUeS1apId);
|
||||
ueManager->SetSource (req.sourceCellId, req.oldEnbUeX2apId);
|
||||
ueManager->SetImsi (req.mmeUeS1apId);
|
||||
|
||||
for (std::vector <EpcX2Sap::ErabToBeSetupItem>::iterator it = params.bearers.begin ();
|
||||
it != params.bearers.end ();
|
||||
for (std::vector <EpcX2Sap::ErabToBeSetupItem>::iterator it = req.bearers.begin ();
|
||||
it != req.bearers.end ();
|
||||
++it)
|
||||
{
|
||||
ueManager->SetupDataRadioBearer (it->erabLevelQosParameters, it->gtpTeid, it->transportLayerAddress);
|
||||
@@ -1235,10 +1294,10 @@ LteEnbRrc::DoRecvHandoverRequest (EpcX2SapUser::HandoverRequestParams params)
|
||||
NS_LOG_LOGIC ("Send X2 message: HANDOVER REQUEST ACK");
|
||||
|
||||
EpcX2SapProvider::HandoverRequestAckParams ackParams;
|
||||
ackParams.oldEnbUeX2apId = params.oldEnbUeX2apId;
|
||||
ackParams.oldEnbUeX2apId = req.oldEnbUeX2apId;
|
||||
ackParams.newEnbUeX2apId = rnti;
|
||||
ackParams.sourceCellId = params.sourceCellId;
|
||||
ackParams.targetCellId = params.targetCellId;
|
||||
ackParams.sourceCellId = req.sourceCellId;
|
||||
ackParams.targetCellId = req.targetCellId;
|
||||
ackParams.rrcContext = encodedHandoverCommand;
|
||||
|
||||
NS_LOG_LOGIC ("oldEnbUeX2apId = " << ackParams.oldEnbUeX2apId);
|
||||
@@ -1289,7 +1348,9 @@ LteEnbRrc::DoRecvHandoverPreparationFailure (EpcX2SapUser::HandoverPreparationFa
|
||||
NS_LOG_LOGIC ("cause = " << params.cause);
|
||||
NS_LOG_LOGIC ("criticalityDiagnostics = " << params.criticalityDiagnostics);
|
||||
|
||||
NS_ASSERT ("Processing of HANDOVER PREPARATION FAILURE X2 message IS NOT IMPLEMENTED");
|
||||
uint16_t rnti = params.oldEnbUeX2apId;
|
||||
Ptr<UeManager> ueManager = GetUeManager (rnti);
|
||||
ueManager->RecvHandoverPreparationFailure (params.targetCellId);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -71,6 +71,7 @@ public:
|
||||
CONNECTED_NORMALLY,
|
||||
CONNECTION_RECONFIGURATION,
|
||||
CONNECTION_REESTABLISHMENT,
|
||||
HANDOVER_PREPARATION,
|
||||
HANDOVER_JOINING,
|
||||
HANDOVER_PATH_SWITCH,
|
||||
HANDOVER_LEAVING,
|
||||
@@ -140,6 +141,13 @@ public:
|
||||
*/
|
||||
void ScheduleRrcConnectionReconfiguration ();
|
||||
|
||||
/**
|
||||
* Start the handover preparation and send the handover request
|
||||
*
|
||||
* \param cellId id of the target cell
|
||||
*/
|
||||
void PrepareHandover (uint16_t cellId);
|
||||
|
||||
/**
|
||||
* In the X2-based handover procedure, at the source eNB, trigger
|
||||
* handover by sending to the UE a RRC Connection
|
||||
@@ -183,12 +191,20 @@ public:
|
||||
*/
|
||||
std::vector<EpcX2Sap::ErabToBeSetupItem> GetErabList ();
|
||||
|
||||
|
||||
/**
|
||||
* send the UE CONTEXT RELEASE X2 message to the source eNB, thus
|
||||
* successfully terminating an X2 handover procedure
|
||||
*
|
||||
*/
|
||||
void SendUeContextRelease ();
|
||||
|
||||
/**
|
||||
* Take the necessary actions in response to the reception of an X2 HO preparation failure message
|
||||
*
|
||||
* \param cellId id of the target cell
|
||||
*/
|
||||
void RecvHandoverPreparationFailure (uint16_t cellId);
|
||||
|
||||
|
||||
// methods forwarded from RRC SAP
|
||||
@@ -352,6 +368,7 @@ private:
|
||||
TracedCallback<uint64_t, uint16_t, uint16_t, State, State> m_stateTransitionTrace;
|
||||
uint16_t m_sourceX2apId;
|
||||
uint16_t m_sourceCellId;
|
||||
uint16_t m_targetCellId;
|
||||
};
|
||||
|
||||
|
||||
@@ -687,6 +704,8 @@ private:
|
||||
uint16_t m_lastAllocatedConfigurationIndex;
|
||||
bool m_reconfigureUes;
|
||||
|
||||
bool m_admitHandoverRequest;
|
||||
|
||||
// imsi cellid rnti
|
||||
TracedCallback<uint64_t, uint16_t, uint16_t> m_connectionEstablishedTrace;
|
||||
// imsi cellid rnti
|
||||
|
||||
@@ -276,11 +276,13 @@ LteRrcTestSuite::LteRrcTestSuite ()
|
||||
AddTestCase (new LteRrcConnectionEstablishmentTestCase ( 4, 0, 20, 300, 1, useIdealRrc));
|
||||
AddTestCase (new LteRrcConnectionEstablishmentTestCase ( 20, 0, 10, 1, 1, useIdealRrc));
|
||||
AddTestCase (new LteRrcConnectionEstablishmentTestCase ( 50, 0, 0, 0, 1, useIdealRrc));
|
||||
// // time consuming tests with a lot of UEs
|
||||
// AddTestCase (new LteRrcConnectionEstablishmentTestCase (100, 0, 10, 0, 1));
|
||||
// AddTestCase (new LteRrcConnectionEstablishmentTestCase (100, 0, 10, 1, 1));
|
||||
// AddTestCase (new LteRrcConnectionEstablishmentTestCase (200, 0, 10, 0, 1));
|
||||
// AddTestCase (new LteRrcConnectionEstablishmentTestCase (200, 0, 10, 1, 1));
|
||||
|
||||
// // time consuming tests with a lot of UEs
|
||||
// AddTestCase (new LteRrcConnectionEstablishmentTestCase (100, 0, 10, 0, 1, useIdealRrc));
|
||||
// AddTestCase (new LteRrcConnectionEstablishmentTestCase (100, 0, 10, 1, 1, useIdealRrc));
|
||||
// AddTestCase (new LteRrcConnectionEstablishmentTestCase (200, 0, 10, 0, 1, useIdealRrc));
|
||||
// AddTestCase (new LteRrcConnectionEstablishmentTestCase (200, 0, 10, 1, 1, useIdealRrc));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,10 +55,10 @@ public:
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
LteX2HandoverTestCase (uint32_t nUes, uint32_t nDedicatedBearers, std::list<HandoverEvent> handoverEventList, std::string handoverEventListName, bool useUdp, std::string schedulerType);
|
||||
LteX2HandoverTestCase (uint32_t nUes, uint32_t nDedicatedBearers, std::list<HandoverEvent> handoverEventList, std::string handoverEventListName, bool useUdp, std::string schedulerType, bool admitHo);
|
||||
|
||||
private:
|
||||
static std::string BuildNameString (uint32_t nUes, uint32_t nDedicatedBearers, std::string handoverEventListName, bool useUdp, std::string schedulerType);
|
||||
static std::string BuildNameString (uint32_t nUes, uint32_t nDedicatedBearers, std::string handoverEventListName, bool useUdp, std::string schedulerType, bool admitHo);
|
||||
virtual void DoRun (void);
|
||||
void CheckConnected (Ptr<NetDevice> ueDevice, Ptr<NetDevice> enbDevice);
|
||||
|
||||
@@ -69,6 +69,7 @@ private:
|
||||
bool m_epc;
|
||||
bool m_useUdp;
|
||||
std::string m_schedulerType;
|
||||
bool m_admitHo;
|
||||
Ptr<LteHelper> m_lteHelper;
|
||||
Ptr<EpcHelper> m_epcHelper;
|
||||
|
||||
@@ -97,19 +98,20 @@ private:
|
||||
};
|
||||
|
||||
|
||||
std::string LteX2HandoverTestCase::BuildNameString (uint32_t nUes, uint32_t nDedicatedBearers, std::string handoverEventListName, bool useUdp, std::string schedulerType)
|
||||
std::string LteX2HandoverTestCase::BuildNameString (uint32_t nUes, uint32_t nDedicatedBearers, std::string handoverEventListName, bool useUdp, std::string schedulerType, bool admitHo)
|
||||
{
|
||||
std::ostringstream oss;
|
||||
oss << " nUes=" << nUes
|
||||
<< " nDedicatedBearers=" << nDedicatedBearers
|
||||
<< " udp=" << useUdp
|
||||
<< " " << schedulerType
|
||||
<< " admitHo=" << admitHo
|
||||
<< " hoList: " << handoverEventListName;
|
||||
return oss.str ();
|
||||
}
|
||||
|
||||
LteX2HandoverTestCase::LteX2HandoverTestCase (uint32_t nUes, uint32_t nDedicatedBearers, std::list<HandoverEvent> handoverEventList, std::string handoverEventListName, bool useUdp, std::string schedulerType)
|
||||
: TestCase (BuildNameString (nUes, nDedicatedBearers, handoverEventListName, useUdp, schedulerType)),
|
||||
LteX2HandoverTestCase::LteX2HandoverTestCase (uint32_t nUes, uint32_t nDedicatedBearers, std::list<HandoverEvent> handoverEventList, std::string handoverEventListName, bool useUdp, std::string schedulerType, bool admitHo)
|
||||
: TestCase (BuildNameString (nUes, nDedicatedBearers, handoverEventListName, useUdp, schedulerType, admitHo)),
|
||||
m_nUes (nUes),
|
||||
m_nDedicatedBearers (nDedicatedBearers),
|
||||
m_handoverEventList (handoverEventList),
|
||||
@@ -117,6 +119,7 @@ LteX2HandoverTestCase::LteX2HandoverTestCase (uint32_t nUes, uint32_t nDedicated
|
||||
m_epc (true),
|
||||
m_useUdp (useUdp),
|
||||
m_schedulerType (schedulerType),
|
||||
m_admitHo (admitHo),
|
||||
m_maxHoDuration (Seconds (0.1)),
|
||||
m_statsDuration (Seconds (0.5))
|
||||
{
|
||||
@@ -125,7 +128,7 @@ LteX2HandoverTestCase::LteX2HandoverTestCase (uint32_t nUes, uint32_t nDedicated
|
||||
void
|
||||
LteX2HandoverTestCase::DoRun ()
|
||||
{
|
||||
NS_LOG_FUNCTION (this << BuildNameString (m_nUes, m_nDedicatedBearers, m_handoverEventListName, m_useUdp, m_schedulerType));
|
||||
NS_LOG_FUNCTION (this << BuildNameString (m_nUes, m_nDedicatedBearers, m_handoverEventListName, m_useUdp, m_schedulerType, m_admitHo));
|
||||
|
||||
Config::SetDefault ("ns3::UdpClient::Interval", TimeValue (MilliSeconds(100)));
|
||||
Config::SetDefault ("ns3::UdpClient::MaxPackets", UintegerValue(1000000));
|
||||
@@ -161,6 +164,13 @@ LteX2HandoverTestCase::DoRun ()
|
||||
|
||||
NetDeviceContainer enbDevices;
|
||||
enbDevices = m_lteHelper->InstallEnbDevice (enbNodes);
|
||||
for (NetDeviceContainer::Iterator it = enbDevices.Begin ();
|
||||
it != enbDevices.End ();
|
||||
++it)
|
||||
{
|
||||
Ptr<LteEnbRrc> enbRrc = (*it)->GetObject<LteEnbNetDevice> ()->GetRrc ();
|
||||
enbRrc->SetAttribute ("AdmitHandoverRequest", BooleanValue (m_admitHo));
|
||||
}
|
||||
|
||||
NetDeviceContainer ueDevices;
|
||||
ueDevices = m_lteHelper->InstallUeDevice (ueNodes);
|
||||
@@ -370,7 +380,7 @@ LteX2HandoverTestCase::DoRun ()
|
||||
&LteX2HandoverTestCase::CheckConnected,
|
||||
this,
|
||||
ueDevices.Get (hoEventIt->ueDeviceIndex),
|
||||
enbDevices.Get (hoEventIt->targetEnbDeviceIndex));
|
||||
enbDevices.Get (m_admitHo ? hoEventIt->targetEnbDeviceIndex : hoEventIt->sourceEnbDeviceIndex));
|
||||
Simulator::Schedule (hoEndTime, &LteX2HandoverTestCase::SaveStatsAfterHandover,
|
||||
this, hoEventIt->ueDeviceIndex);
|
||||
Time checkStatsAfterHoTime = hoEndTime + m_statsDuration;
|
||||
@@ -577,75 +587,93 @@ LteX2HandoverTestSuite::LteX2HandoverTestSuite ()
|
||||
hel7.push_back (ue2fwd);
|
||||
hel7.push_back (ue2bwd);
|
||||
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 1, hel1, hel0name, true, "ns3::RrFfMacScheduler"));
|
||||
return;
|
||||
|
||||
// nUes, nDBearers, helist, name, useUdp, scheduler
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 0, hel0, hel0name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 0, hel0, hel0name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 5, hel0, hel0name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 5, hel0, hel0name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 0, hel1, hel1name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 1, hel1, hel1name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 2, hel1, hel1name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 0, hel2, hel2name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 1, hel2, hel2name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 2, hel2, hel2name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 0, hel3, hel3name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 1, hel3, hel3name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 2, hel3, hel3name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 0, hel3, hel3name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 1, hel3, hel3name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 2, hel3, hel3name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 0, hel4, hel4name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 1, hel4, hel4name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 2, hel4, hel4name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 0, hel5, hel5name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 1, hel5, hel5name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 2, hel5, hel5name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 0, hel3, hel3name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 1, hel3, hel3name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 2, hel3, hel3name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 0, hel4, hel4name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 1, hel4, hel4name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 2, hel4, hel4name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 0, hel5, hel5name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 1, hel5, hel5name, true, "ns3::RrFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 2, hel5, hel5name, true, "ns3::RrFfMacScheduler"));
|
||||
// nUes, nDBearers, helist, name, useUdp, scheduler, admitHo
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 0, hel0, hel0name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 0, hel0, hel0name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 5, hel0, hel0name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 5, hel0, hel0name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 0, hel1, hel1name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 1, hel1, hel1name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 2, hel1, hel1name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 0, hel1, hel1name, true, "ns3::RrFfMacScheduler", false));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 1, hel1, hel1name, true, "ns3::RrFfMacScheduler", false));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 2, hel1, hel1name, true, "ns3::RrFfMacScheduler", false));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 0, hel1, hel1name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 1, hel1, hel1name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 2, hel1, hel1name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 0, hel1, hel1name, true, "ns3::RrFfMacScheduler", false));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 1, hel1, hel1name, true, "ns3::RrFfMacScheduler", false));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 2, hel1, hel1name, true, "ns3::RrFfMacScheduler", false));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 0, hel2, hel2name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 1, hel2, hel2name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 2, hel2, hel2name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 0, hel3, hel3name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 1, hel3, hel3name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 2, hel3, hel3name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 0, hel3, hel3name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 1, hel3, hel3name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 2, hel3, hel3name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 0, hel4, hel4name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 1, hel4, hel4name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 2, hel4, hel4name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 0, hel5, hel5name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 1, hel5, hel5name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 2, hel5, hel5name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 0, hel3, hel3name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 1, hel3, hel3name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 2, hel3, hel3name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 0, hel4, hel4name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 1, hel4, hel4name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 2, hel4, hel4name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 0, hel5, hel5name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 1, hel5, hel5name, true, "ns3::RrFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 2, hel5, hel5name, true, "ns3::RrFfMacScheduler", true));
|
||||
|
||||
|
||||
// nUes, nDBearers, helist, name, useUdp, scheduler
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 0, hel0, hel0name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 0, hel0, hel0name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 5, hel0, hel0name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 5, hel0, hel0name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 0, hel1, hel1name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 1, hel1, hel1name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 2, hel1, hel1name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 0, hel2, hel2name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 1, hel2, hel2name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 2, hel2, hel2name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 0, hel3, hel3name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 1, hel3, hel3name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 2, hel3, hel3name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 0, hel3, hel3name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 1, hel3, hel3name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 2, hel3, hel3name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 0, hel4, hel4name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 1, hel4, hel4name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 2, hel4, hel4name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 0, hel5, hel5name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 1, hel5, hel5name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 2, hel5, hel5name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 0, hel3, hel3name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 1, hel3, hel3name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 2, hel3, hel3name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 0, hel4, hel4name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 1, hel4, hel4name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 2, hel4, hel4name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 0, hel5, hel5name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 1, hel5, hel5name, true, "ns3::PfFfMacScheduler"));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 2, hel5, hel5name, true, "ns3::PfFfMacScheduler"));
|
||||
|
||||
// nUes, nDBearers, helist, name, useUdp, scheduler, admitHo
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 0, hel0, hel0name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 0, hel0, hel0name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 5, hel0, hel0name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 5, hel0, hel0name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 0, hel1, hel1name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 1, hel1, hel1name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 2, hel1, hel1name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 0, hel1, hel1name, true, "ns3::PfFfMacScheduler", false));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 1, hel1, hel1name, true, "ns3::PfFfMacScheduler", false));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 2, hel1, hel1name, true, "ns3::PfFfMacScheduler", false));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 0, hel1, hel1name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 1, hel1, hel1name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 2, hel1, hel1name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 0, hel1, hel1name, true, "ns3::PfFfMacScheduler", false));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 1, hel1, hel1name, true, "ns3::PfFfMacScheduler", false));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 2, hel1, hel1name, true, "ns3::PfFfMacScheduler", false));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 0, hel2, hel2name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 1, hel2, hel2name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 2, hel2, hel2name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 0, hel3, hel3name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 1, hel3, hel3name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 1, 2, hel3, hel3name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 0, hel3, hel3name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 1, hel3, hel3name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 2, hel3, hel3name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 0, hel4, hel4name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 1, hel4, hel4name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 2, hel4, hel4name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 0, hel5, hel5name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 1, hel5, hel5name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 2, 2, hel5, hel5name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 0, hel3, hel3name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 1, hel3, hel3name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 2, hel3, hel3name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 0, hel4, hel4name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 1, hel4, hel4name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 2, hel4, hel4name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 0, hel5, hel5name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 1, hel5, hel5name, true, "ns3::PfFfMacScheduler", true));
|
||||
AddTestCase (new LteX2HandoverTestCase ( 3, 2, hel5, hel5name, true, "ns3::PfFfMacScheduler", true));
|
||||
|
||||
}
|
||||
|
||||
static LteX2HandoverTestSuite g_lteX2HandoverTestSuiteInstance;
|
||||
|
||||
Reference in New Issue
Block a user