23 #include "ns3/fatal-error.h"
25 #include "ns3/abort.h"
26 #include "ns3/pointer.h"
27 #include "ns3/object-map.h"
28 #include "ns3/object-factory.h"
29 #include "ns3/simulator.h"
46 #include <ns3/simulator.h>
100 "INITIAL_RANDOM_ACCESS",
102 "CONNECTION_REJECTED",
103 "CONNECTED_NORMALLY",
104 "CONNECTION_RECONFIGURATION",
105 "CONNECTION_REESTABLISHMENT",
106 "HANDOVER_PREPARATION",
108 "HANDOVER_PATH_SWITCH",
134 : m_lastAllocatedDrbid (0),
137 m_lastRrcTransactionIdentifier (0),
140 m_pendingRrcConnectionReconfiguration (false),
143 m_needTransmissionModeConfiguration (false)
168 Ptr<LteRlc> rlc = CreateObject<LteRlcTm> ()->GetObject<LteRlc> ();
169 rlc->SetLteMacSapProvider (
m_rrc->m_macSapProvider);
173 m_srb0 = CreateObject<LteSignalingRadioBearerInfo> ();
175 m_srb0->m_srbIdentity = 0;
182 m_rrc->m_cmacSapProvider->AddLc (lcinfo, rlc->GetLteMacSapUser ());
190 Ptr<LteRlc> rlc = CreateObject<LteRlcAm> ()->GetObject<LteRlc> ();
191 rlc->SetLteMacSapProvider (
m_rrc->m_macSapProvider);
197 pdcp->SetLcId (lcid);
199 pdcp->SetLteRlcSapProvider (rlc->GetLteRlcSapProvider ());
200 rlc->SetLteRlcSapUser (pdcp->GetLteRlcSapUser ());
202 m_srb1 = CreateObject<LteSignalingRadioBearerInfo> ();
205 m_srb1->m_srbIdentity = 1;
206 m_srb1->m_logicalChannelConfig.priority = 0;
207 m_srb1->m_logicalChannelConfig.prioritizedBitRateKbps = 100;
208 m_srb1->m_logicalChannelConfig.bucketSizeDurationMs = 100;
209 m_srb1->m_logicalChannelConfig.logicalChannelGroup = 0;
221 m_rrc->m_cmacSapProvider->AddLc (lcinfo, rlc->GetLteMacSapUser ());
233 m_rrc->m_cmacSapProvider->UeUpdateConfigurationReq (req);
240 Time maxConnectionDelay;
281 m_rrc->m_x2uTeidInfoMap.erase (it->second->m_gtpTeid);
291 .AddConstructor<UeManager> ()
292 .AddAttribute (
"DataRadioBearerMap",
"List of UE DataRadioBearerInfo by DRBID.",
295 MakeObjectMapChecker<LteDataRadioBearerInfo> ())
296 .AddAttribute (
"Srb0",
"SignalingRadioBearerInfo for SRB0",
299 MakePointerChecker<LteSignalingRadioBearerInfo> ())
300 .AddAttribute (
"Srb1",
"SignalingRadioBearerInfo for SRB1",
303 MakePointerChecker<LteSignalingRadioBearerInfo> ())
304 .AddAttribute (
"C-RNTI",
305 "Cell Radio Network Temporary Identifier",
309 MakeUintegerChecker<uint16_t> ())
310 .AddTraceSource (
"StateTransition",
311 "fired upon every UE state transition seen by the UeManager at the eNB RRC",
339 NS_ASSERT_MSG ( bearerId == 0 || bid == bearerId,
"bearer ID mismatch (" << (uint32_t) bid <<
" != " << (uint32_t) bearerId <<
", the assumption that ID are allocated in the same way by MME and RRC is not valid any more");
340 drbInfo->m_epsBearerIdentity = bid;
341 drbInfo->m_drbIdentity = drbid;
342 drbInfo->m_logicalChannelIdentity = lcid;
343 drbInfo->m_gtpTeid = gtpTeid;
344 drbInfo->m_transportLayerAddress = transportLayerAddress;
351 x2uTeidInfo.
drbid = drbid;
352 std::pair<std::map<uint32_t, LteEnbRrc::X2uTeidInfo>::iterator,
bool>
353 ret =
m_rrc->m_x2uTeidInfoMap.insert (std::pair<uint32_t, LteEnbRrc::X2uTeidInfo> (gtpTeid, x2uTeidInfo));
354 NS_ASSERT_MSG (ret.second ==
true,
"overwriting a pre-existing entry in m_x2uTeidInfoMap");
362 rlc->SetLteMacSapProvider (
m_rrc->m_macSapProvider);
363 rlc->SetRnti (m_rnti);
365 drbInfo->m_rlc = rlc;
374 pdcp->SetRnti (m_rnti);
375 pdcp->SetLcId (lcid);
377 pdcp->SetLteRlcSapProvider (rlc->GetLteRlcSapProvider ());
378 rlc->SetLteRlcSapUser (pdcp->GetLteRlcSapUser ());
379 drbInfo->m_pdcp = pdcp;
385 lcinfo.
lcGroup =
m_rrc->GetLogicalChannelGroup (bearer);
392 m_rrc->m_cmacSapProvider->AddLc (lcinfo, rlc->GetLteMacSapUser ());
403 drbInfo->m_logicalChannelIdentity = lcid;
404 drbInfo->m_logicalChannelConfig.priority =
m_rrc->GetLogicalChannelPriority (bearer);
405 drbInfo->m_logicalChannelConfig.logicalChannelGroup =
m_rrc->GetLogicalChannelGroup (bearer);
408 drbInfo->m_logicalChannelConfig.prioritizedBitRateKbps = bearer.
gbrQosInfo.
gbrUl;
412 drbInfo->m_logicalChannelConfig.prioritizedBitRateKbps = 0;
414 drbInfo->m_logicalChannelConfig.bucketSizeDurationMs = 1000;
439 std::map <uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator drbIt =
m_drbMap.find (*drbIdIt);
441 drbIt->second->m_rlc->Initialize ();
442 if (drbIt->second->m_pdcp)
444 drbIt->second->m_pdcp->Initialize ();
456 std::map <uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator it =
m_drbMap.find (drbid);
457 NS_ASSERT_MSG (it !=
m_drbMap.end (),
"request to remove radio bearer with unknown drbid " << drbid);
460 m_rrc->m_x2uTeidInfoMap.erase (it->second->m_gtpTeid);
463 m_rrc->m_cmacSapProvider->ReleaseLc (
m_rnti, lcid);
473 m_rrc->m_rrcSapUser->SendRrcConnectionReconfiguration (
m_rnti, msg);
498 m_rrc->m_rrcSapUser->SendRrcConnectionReconfiguration (
m_rnti, msg);
546 params.
rrcContext =
m_rrc->m_rrcSapUser->EncodeHandoverPreparationInformation (hpi);
554 m_rrc->m_x2SapProvider->SendHandoverRequest (params);
582 m_rrc->m_rrcSapUser->SendRrcConnectionReconfiguration (
m_rnti, handoverCommand);
600 if (0 != drbIt->second->m_rlc->GetObject<
LteRlcAm> ())
609 m_rrc->m_x2SapProvider->SendSnStatusTransfer (sst);
646 NS_LOG_LOGIC (
"queueing data on PDCP for transmission over the air");
659 NS_LOG_LOGIC (
"forwarding data to target eNB over X2-U");
666 m_rrc->m_x2SapProvider->SendUeData (params);
676 std::vector<EpcX2Sap::ErabToBeSetupItem>
680 std::vector<EpcX2Sap::ErabToBeSetupItem> ret;
686 etbsi.
erabId = it->second->m_epsBearerIdentity;
690 etbsi.
gtpTeid = it->second->m_gtpTeid;
691 ret.push_back (etbsi);
703 NS_LOG_INFO (
"Send UE CONTEXT RELEASE from target eNB to source eNB");
708 m_rrc->m_x2SapProvider->SendUeContextRelease (ueCtxReleaseParams);
727 NS_LOG_INFO (
"target eNB sent HO preparation failure, aborting HO");
741 for (std::vector<EpcX2Sap::ErabsSubjectToStatusTransferItem>::iterator erabIt
783 if (
m_rrc->m_admitRrcConnectionRequest ==
true)
787 if (
m_rrc->m_s1SapProvider != 0)
794 m_rrc->m_rrcSapUser->SendRrcConnectionSetup (
m_rnti, msg2);
804 m_rrc->m_rrcSapUser->SendRrcConnectionReject (
m_rnti, rejectMsg);
851 m_rrc->m_cmacSapProvider->UeUpdateConfigurationReq (req);
869 NS_LOG_INFO (
"Send PATH SWITCH REQUEST to the MME");
881 b.
teid = it->second->m_gtpTeid;
884 m_rrc->m_s1SapProvider->PathSwitchRequest (params);
915 m_rrc->m_rrcSapUser->SendRrcConnectionReestablishment (
m_rnti, msg2);
942 <<
" RSRP " << (it->haveRsrpResult ? (uint16_t) it->rsrpResult : 255)
943 <<
" RSRQ " << (it->haveRsrqResult ? (uint16_t) it->rsrqResult : 255));
950 "Measure identity is unknown");
965 uint8_t bestNeighbourRsrq = 0;
971 if (it->second->m_rsrq > bestNeighbourRsrq)
974 if ((neighbourRelation->m_noHo ==
false) &&
975 (neighbourRelation->m_noX2 ==
false))
977 bestNeighbour = it->second;
978 bestNeighbourRsrq = it->second->m_rsrq;
986 uint16_t targetCellId = bestNeighbour->m_cellId;
987 NS_LOG_LOGIC (
"Best neighbour cellId " << targetCellId);
991 NS_LOG_LOGIC (
"Trigger Handover to cellId " << targetCellId);
992 NS_LOG_LOGIC (
"target cell RSRQ " << (uint16_t) bestNeighbour->m_rsrq);
1010 NS_ASSERT_MSG (it->haveRsrqResult ==
true,
"RSRQ measure missing for cellId " << it->physCellId);
1013 if (
m_rrc->m_neighbourRelationTable.find (it->physCellId) !=
m_rrc->m_neighbourRelationTable.end ())
1017 NS_ASSERT_MSG (neighbourRelation->m_physCellId == it->physCellId,
1018 "Wrong cellId " << neighbourRelation->m_physCellId);
1020 if (neighbourRelation->m_noX2 ==
false)
1022 neighbourRelation->m_noHo =
false;
1024 neighbourRelation->m_detectedAsNeighbour =
true;
1029 neighbourRelation->m_physCellId = it->physCellId;
1030 neighbourRelation->m_noRemove =
false;
1031 neighbourRelation->m_noHo =
true;
1032 neighbourRelation->m_noX2 =
true;
1033 neighbourRelation->m_detectedAsNeighbour =
true;
1034 m_rrc->m_neighbourRelationTable[it->physCellId] = neighbourRelation;
1042 neighbourCellMeasures->m_cellId = it->physCellId;
1043 neighbourCellMeasures->m_rsrq = it->rsrqResult;
1044 neighbourCellMeasures->m_rsrp = 0;
1048 neighbourCellMeasures = CreateObject <UeMeasure> ();
1049 neighbourCellMeasures->m_cellId = it->physCellId;
1050 neighbourCellMeasures->m_rsrq = it->rsrqResult;
1051 neighbourCellMeasures->m_rsrp = 0;
1089 if (params.
lcid > 2)
1124 m_rrc->m_cphySapProvider->SetSrsConfigurationIndex (
m_rnti, srsConfIndex);
1148 const uint8_t MAX_DRB_ID = 32;
1151 drbid = (drbid + 1) % MAX_DRB_ID)
1158 drbInfo->m_drbIdentity = drbid;
1173 std::map<uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator it =
m_drbMap.find (drbid);
1183 std::map <uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator it =
m_drbMap.find (drbid);
1184 NS_ASSERT_MSG (it !=
m_drbMap.end (),
"request to remove radio bearer with unknown drbid " << drbid);
1290 dtam.
rlcConfig = it->second->m_rlcConfig;
1396 : m_x2SapProvider (0),
1397 m_cmacSapProvider (0),
1399 m_macSapProvider (0),
1400 m_s1SapProvider (0),
1401 m_cphySapProvider (0),
1402 m_configured (false),
1403 m_lastAllocatedRnti (0),
1404 m_srsCurrentPeriodicityId (0),
1405 m_lastAllocatedConfigurationIndex (0),
1406 m_reconfigureUes (false)
1443 .AddConstructor<LteEnbRrc> ()
1444 .AddAttribute (
"UeMap",
"List of UeManager by C-RNTI.",
1447 MakeObjectMapChecker<UeManager> ())
1448 .AddAttribute (
"DefaultTransmissionMode",
1449 "The default UEs' transmission mode (0: SISO)",
1452 MakeUintegerChecker<uint8_t> ())
1453 .AddAttribute (
"EpsBearerToRlcMapping",
1454 "Specify which type of RLC will be used for each type of EPS bearer. ",
1461 .AddAttribute (
"SystemInformationPeriodicity",
1462 "The interval for sending system information (Time value)",
1466 .AddAttribute (
"SrsPeriodicity",
1467 "The SRS periodicity in milliseconds",
1471 MakeUintegerChecker<uint32_t> ())
1472 .AddAttribute (
"ConnectionTimeoutDuration",
1473 "After a RA attempt, if no RRC Connection Request is received before this time, the UE context is destroyed. Must account for reception of RAR and transmission of RRC CONNECTION REQUEST over UL GRANT.",
1477 .AddAttribute (
"ConnectionRejectedTimeoutDuration",
1478 "Time to wait between sending a RRC CONNECTION REJECT and destroying the UE context",
1482 .AddAttribute (
"HandoverJoiningTimeoutDuration",
1483 "After accepting a handover request, if no RRC Connection Reconfiguration Completed is received before this time, the UE context is destroyed. Must account for reception of X2 HO REQ ACK by source eNB, transmission of the Handover Command, non-contention-based random access and reception of the RRC Connection Reconfiguration Completed message.",
1487 .AddAttribute (
"HandoverLeavingTimeoutDuration",
1488 "After issuing a Handover Command, if neither RRC Connection Reestablishment nor X2 UE Context Release has been previously received, the UE context is destroyed.",
1492 .AddAttribute (
"AdmitHandoverRequest",
1493 "Whether to admit an X2 handover request from another eNB",
1496 MakeBooleanChecker ())
1497 .AddAttribute (
"AdmitRrcConnectionRequest",
1498 "Whether to admit a connection request from a Ue",
1501 MakeBooleanChecker ())
1502 .AddAttribute (
"EventA2Threshold",
1503 "Threshold of the event A2 (Serving becomes worse than threshold)",
1506 MakeUintegerChecker<uint8_t> ())
1507 .AddAttribute (
"EventA4Threshold",
1508 "Threshold of the event A4 (Neighbour becomes better than threshold)",
1511 MakeUintegerChecker<uint8_t> ())
1512 .AddAttribute (
"ServingCellHandoverThreshold",
1513 "If serving cell is worse than this threshold, neighbour cells are consider for Handover",
1516 MakeUintegerChecker<uint8_t> ())
1517 .AddAttribute (
"NeighbourCellHandoverOffset",
1518 "Minimum offset between serving and best neighbour cell to trigger the Handover",
1521 MakeUintegerChecker<uint8_t> ())
1522 .AddTraceSource (
"NewUeContext",
1523 "trace fired upon creation of a new UE context",
1525 .AddTraceSource (
"ConnectionEstablished",
1526 "trace fired upon successful RRC connection establishment",
1528 .AddTraceSource (
"ConnectionReconfiguration",
1529 "trace fired upon RRC connection reconfiguration",
1531 .AddTraceSource (
"HandoverStart",
1532 "trace fired upon start of a handover procedure",
1534 .AddTraceSource (
"HandoverEndOk",
1535 "trace fired upon successful termination of a handover procedure",
1537 .AddTraceSource (
"RecvMeasurementReport",
1538 "trace fired when measurement report is received",
1625 std::map<uint16_t, Ptr<UeManager> >::iterator it =
m_ueMap.find (rnti);
1667 NS_ASSERT_MSG (found,
"no EpsBearerTag found in packet to be sent");
1669 ueManager->SendData (tag.
GetBid (), packet);
1724 ueManager->PrepareHandover (cellId);
1747 GetUeManager (rnti)->RecvRrcConnectionSetupCompleted (msg);
1754 GetUeManager (rnti)->RecvRrcConnectionReconfigurationCompleted (msg);
1761 GetUeManager (rnti)->RecvRrcConnectionReestablishmentRequest (msg);
1768 GetUeManager (rnti)->RecvRrcConnectionReestablishmentComplete (msg);
1789 ueManager->SendUeContextRelease ();
1821 if (anrcrv.
valid ==
false)
1823 NS_LOG_INFO (
this <<
"failed to allocate a preamble for non-contention based RA => cannot accept HO");
1825 NS_FATAL_ERROR (
"should trigger HO Preparation Failure, but it is not implemented");
1839 for (std::vector <EpcX2Sap::ErabToBeSetupItem>::iterator it = req.
bearers.begin ();
1843 ueManager->SetupDataRadioBearer (it->erabLevelQosParameters, it->erabId, it->gtpTeid, it->transportLayerAddress);
1870 ackParams.
rrcContext = encodedHandoverCommand;
1872 NS_LOG_LOGIC (
"Send X2 message: HANDOVER REQUEST ACK");
1887 NS_LOG_LOGIC (
"Recv X2 message: HANDOVER REQUEST ACK");
1896 ueManager->RecvHandoverRequestAck (params);
1904 NS_LOG_LOGIC (
"Recv X2 message: HANDOVER PREPARATION FAILURE");
1914 ueManager->RecvHandoverPreparationFailure (params.
targetCellId);
1930 ueManager->RecvSnStatusTransfer (params);
1957 NS_ASSERT (
"Processing of LOAD INFORMATION X2 message IS NOT IMPLEMENTED");
1965 NS_LOG_LOGIC (
"Recv X2 message: RESOURCE STATUS UPDATE");
1969 NS_ASSERT (
"Processing of RESOURCE STATUS UPDATE X2 message IS NOT IMPLEMENTED");
1977 NS_LOG_LOGIC (
"Recv UE DATA FORWARDING through X2 interface");
1984 std::map<uint32_t, X2uTeidInfo>::iterator
1988 GetUeManager (teidInfoIt->second.rnti)->SendData (teidInfoIt->second.drbid, params.
ueData);
2008 ueManager->CmacUeConfigUpdateInd (cmacParams);
2037 NS_ASSERT_MSG (found,
"no more RNTIs available (do you have more than 65535 UEs in a cell?)");
2039 Ptr<UeManager> ueManager = CreateObject<UeManager> (
this, rnti, state);
2041 ueManager->Initialize ();
2042 NS_LOG_DEBUG (
this <<
" New UE RNTI " << rnti <<
" cellId " <<
m_cellId <<
" srs CI " << ueManager->GetSrsConfigurationIndex ());
2051 std::map <uint16_t, Ptr<UeManager> >::iterator it =
m_ueMap.find (rnti);
2053 uint16_t srsCi = (*it).second->GetSrsConfigurationIndex ();
2105 "There is already an entry in the Neighbour Relation Table for cellId " << cellId);
2108 neighbourRelation->m_physCellId = cellId;
2109 neighbourRelation->m_noRemove =
true;
2110 neighbourRelation->m_noHo =
true;
2111 neighbourRelation->m_noX2 =
false;
2112 neighbourRelation->m_detectedAsNeighbour =
false;
2136 std::ostringstream allowedValues;
2141 NS_FATAL_ERROR (
"illecit SRS periodicity value " << p <<
". Allowed values: " << allowedValues.str ());
2165 <<
") for current SRS periodicity "
2167 <<
", consider increasing the value of ns3::LteEnbRrc::SrsPeriodicity");
2182 if ((*rit) <
g_srsCiHigh[m_srsCurrentPeriodicityId])
2220 if (bearer.
IsGbr ())
enum ns3::LteRrcSap::ReportConfigEutra::@73 reportQuantity
Callback< void, Ptr< Packet > > m_forwardUpCallback
Ipv4Address transportLayerAddress
const uint8_t SRS_ENTRIES
virtual void SetMasterInformationBlock(LteRrcSap::MasterInformationBlock mib)=0
TracedCallback< uint64_t, uint16_t, uint16_t, State, State > m_stateTransitionTrace
TracedCallback< uint64_t, uint16_t, uint16_t > m_handoverEndOkTrace
SystemInformationBlockType2 sourceSystemInformationBlockType2
void SetEpcX2SapProvider(EpcX2SapProvider *s)
keep track of time values and allow control of global simulation resolution
Ptr< LteSignalingRadioBearerInfo > m_srb1
void SendHandoverRequest(uint16_t rnti, uint16_t cellId)
uint16_t g_srsPeriodicity[SRS_ENTRIES]
void SendSystemInformation()
LteRrcSap::RadioResourceConfigDedicated GetRadioResourceConfigForHandoverPreparationInfo()
CarrierFreqEutra carrierFreq
smart pointer class similar to boost::intrusive_ptr
#define NS_LOG_FUNCTION(parameters)
static const uint8_t MaxReportCells
uint16_t AddUe(UeManager::State state)
Ptr< const AttributeChecker > MakeEnumChecker(int v1, std::string n1, int v2, std::string n2, int v3, std::string n3, int v4, std::string n4, int v5, std::string n5, int v6, std::string n6, int v7, std::string n7, int v8, std::string n8, int v9, std::string n9, int v10, std::string n10, int v11, std::string n11, int v12, std::string n12, int v13, std::string n13, int v14, std::string n14, int v15, std::string n15, int v16, std::string n16, int v17, std::string n17, int v18, std::string n18, int v19, std::string n19, int v20, std::string n20, int v21, std::string n21, int v22, std::string n22)
void RecordDataRadioBearersToBeStarted()
MeasConfig sourceMeasConfig
void RecvUeContextRelease(EpcX2SapUser::UeContextReleaseParams params)
void SetSource(uint16_t sourceCellId, uint16_t sourceX2apId)
std::list< MeasObjectToAddMod > measObjectToAddModList
void RecvHandoverPreparationFailure(uint16_t cellId)
void DoNotifyLcConfigResult(uint16_t rnti, uint8_t lcid, bool success)
uint8_t numberOfRaPreambles
SoundingRsUlConfigDedicated soundingRsUlConfigDedicated
bool presenceAntennaPort1
virtual void SetEarfcn(uint16_t ulEarfcn, uint16_t dlEarfcn)=0
static TypeId GetTypeId(void)
void SetCellId(uint16_t m_cellId)
uint8_t GetLogicalChannelGroup(EpsBearer bearer)
uint8_t m_transmissionMode
void AddX2Neighbour(uint16_t cellId)
QuantityConfig quantityConfig
uint8_t Drbid2Bid(uint8_t drbid)
enum ns3::LteRrcSap::ReportConfigEutra::@70 eventId
uint16_t txSn
TX sequence number.
bool m_admitHandoverRequest
std::vector< CellMeasurementResultItem > cellMeasurementResultList
friend class EnbRrcMemberLteEnbCmacSapUser
std::list< MeasResultEutra > measResultListEutra
Parameters of the HANDOVER REQUEST message.
enum ns3::LteRrcSap::ReportConfigEutra::@69 triggerType
ThresholdEutra threshold1
void DoRecvRrcConnectionReconfigurationCompleted(uint16_t rnti, LteRrcSap::RrcConnectionReconfigurationCompleted msg)
void AddPacketTag(const Tag &tag) const
uint8_t raResponseWindowSize
static TypeId GetTypeId(void)
LteRlcSapUser * srb0SapUser
#define NS_ASSERT(condition)
std::list< SrbToAddMod > srbToAddModList
uint8_t Lcid2Bid(uint8_t lcid)
virtual void SendHandoverPreparationFailure(HandoverPreparationFailureParams params)=0
EpcX2SapUser * GetEpcX2SapUser()
RadioResourceConfigDedicated radioResourceConfigDedicated
uint8_t m_eventA4Threshold
#define NS_LOG_COMPONENT_DEFINE(name)
void SetLteEnbCphySapProvider(LteEnbCphySapProvider *s)
bool m_needTransmissionModeConfiguration
uint16_t m_lastAllocatedRnti
uint16_t GetNewSrsConfigurationIndex(void)
void SetTypeId(TypeId tid)
std::list< BearerToBeSwitched > bearersToBeSwitched
uint32_t GetSize(void) const
LteEnbCmacSapUser * GetLteEnbCmacSapUser()
uint8_t m_transmissionMode
uint8_t m_lastRrcTransactionIdentifier
uint16_t m_srsCurrentPeriodicityId
void SetLteEnbRrcSapUser(LteEnbRrcSapUser *s)
MeasObjectEutra measObjectEutra
uint16_t sourceUeIdentity
void SetLteEnbCmacSapProvider(LteEnbCmacSapProvider *s)
uint16_t DoAllocateTemporaryCellRnti()
Ptr< const AttributeAccessor > MakeObjectMapAccessor(U T::*memberContainer)
virtual uint16_t AllocateTemporaryCellRnti()
uint8_t m_eventA2Threshold
Time m_handoverLeavingTimeoutDuration
LteRlcSapProvider * srb0SapProvider
Ipv4Address transportLayerAddress
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
uint8_t GetBid(void) const
Time m_connectionRejectedTimeoutDuration
LteMacSapProvider * m_macSapProvider
LteEnbRrcSapProvider * m_rrcSapProvider
RachConfigDedicated rachConfigDedicated
uint16_t GetRnti(void) const
void RemoveSrsConfigurationIndex(uint16_t srcCi)
virtual void RrcConfigurationUpdateInd(UeConfig params)
void SetImsi(uint64_t imsi)
uint64_t ueAggregateMaxBitRateUplink
void SetLteMacSapProvider(LteMacSapProvider *s)
void SendUeContextRelease()
LteRrcSap::RrcConnectionReconfiguration GetRrcConnectionReconfigurationForHandover()
void SwitchToState(State s)
void RecvRrcConnectionReconfigurationCompleted(LteRrcSap::RrcConnectionReconfigurationCompleted msg)
void ReleaseDataRadioBearer(uint8_t drbid)
double GetPacketErrorLossRate() const
uint8_t AddDataRadioBearerInfo(Ptr< LteDataRadioBearerInfo > radioBearerInfo)
#define NS_FATAL_ERROR(msg)
fatal error handling
EpcX2SapUser * m_x2SapUser
LteEnbRrcSapUser * m_rrcSapUser
bool haveRadioResourceConfigDedicated
EpcEnbS1SapProvider * m_s1SapProvider
void SetForwardUpCallback(Callback< void, Ptr< Packet > > cb)
void DoRecvRrcConnectionSetupCompleted(uint16_t rnti, LteRrcSap::RrcConnectionSetupCompleted msg)
void DoRecvRrcConnectionReestablishmentComplete(uint16_t rnti, LteRrcSap::RrcConnectionReestablishmentComplete msg)
void DoCompleteSetupUe(uint16_t rnti, LteEnbRrcSapProvider::CompleteSetupUeParameters params)
SystemInformationBlockType1 sourceSystemInformationBlockType1
TracedCallback< uint16_t, uint16_t > m_newUeContextTrace
uint8_t rrcTransactionIdentifier
PreambleInfo preambleInfo
EventId m_connectionTimeout
LteEnbCmacSapUser * m_cmacSapUser
Ptr< UeManager > GetUeManager(uint16_t rnti)
bool m_admitRrcConnectionRequest
LtePdcpSapUser * m_drbPdcpSapUser
uint16_t GetSrsConfigurationIndex(void)
EventId m_connectionRejectedTimeout
virtual void UeContextRelease(uint16_t rnti)=0
hold variables of type 'enum'
LteRrcSap::RrcConnectionReconfiguration BuildRrcConnectionReconfiguration()
Ptr< LteSignalingRadioBearerInfo > m_srb0
void DoRecvRrcConnectionRequest(uint16_t rnti, LteRrcSap::RrcConnectionRequest msg)
uint64_t ueAggregateMaxBitRateDownlink
uint8_t epsBearerIdentity
hold objects of type ns3::Time
static TypeId GetTypeId(void)
void SetSrsConfigurationIndex(uint16_t srsConfIndex)
LogicalChannelConfig logicalChannelConfig
Ptr< Object > Create(void) const
RachConfigCommon rachConfigCommon
ReportConfigEutra reportConfigEutra
TracedCallback< uint64_t, uint16_t, uint16_t > m_connectionEstablishedTrace
Parameters of the HANDOVER PREPARATION FAILURE message.
Hold an unsigned integer type.
virtual void SetCellId(uint16_t cellId)=0
GbrQosInformation gbrQosInfo
NS_OBJECT_ENSURE_REGISTERED(AntennaModel)
void DoPathSwitchRequestAcknowledge(EpcEnbS1SapUser::PathSwitchRequestAcknowledgeParameters params)
virtual void SetBandwidth(uint8_t ulBandwidth, uint8_t dlBandwidth)=0
virtual void NotifyLcConfigResult(uint16_t rnti, uint8_t lcid, bool success)
std::vector< ErabAdmittedItem > admittedBearers
std::list< MeasIdToAddMod > measIdToAddModList
bool haveRachConfigDedicated
Parameters of the SN STATUS TRANSFER message.
PhysicalConfigDedicated physicalConfigDedicated
LteEnbCphySapProvider * m_cphySapProvider
uint8_t filterCoefficientRSRP
uint8_t Drbid2Lcid(uint8_t drbid)
LtePdcpSapProvider * srb1SapProvider
uint16_t rxSn
RX sequence number.
void SendData(uint8_t bid, Ptr< Packet > p)
uint8_t rrcTransactionIdentifier
#define NS_LOG_LOGIC(msg)
virtual RachConfig GetRachConfig()=0
RadioResourceConfigDedicated radioResourceConfigDedicated
void DoRecvUeContextRelease(EpcX2SapUser::UeContextReleaseParams params)
#define NS_ABORT_IF(cond)
Abnormal program termination if cond is true.
uint8_t m_lastAllocatedDrbid
uint8_t Bid2Lcid(uint8_t bid)
Parameters for [re]configuring the UE.
std::map< uint32_t, X2uTeidInfo > m_x2uTeidInfoMap
TracedCallback< uint64_t, uint16_t, uint16_t, LteRrcSap::MeasurementReport > m_recvMeasurementReportTrace
uint8_t numberOfRaPreambles
const char * g_ueManagerStateName[UeManager::NUM_STATES]
uint8_t m_servingCellHandoverThreshold
RadioResourceConfigDedicated sourceRadioResourceConfig
void SetupDataRadioBearer(EpsBearer bearer, uint8_t bearerId, uint32_t gtpTeid, Ipv4Address transportLayerAddress)
void RemoveDataRadioBearerInfo(uint8_t drbid)
static TypeId GetTypeId(void)
void RecvSnStatusTransfer(EpcX2SapUser::SnStatusTransferParams params)
EpcX2SapProvider * m_x2SapProvider
Parameters of the RESOURCE STATUS UPDATE message.
hold objects of type Ptr<T>
void ConnectionTimeout(uint16_t rnti)
virtual void SendHandoverRequestAck(HandoverRequestAckParams params)=0
LteRrcSap::RadioResourceConfigDedicated BuildRadioResourceConfigDedicated()
uint16_t targetPhysCellId
enum ns3::EpsBearer::Qci qci
EventId m_handoverLeavingTimeout
std::map< uint16_t, Ptr< NeighbourRelation > > m_neighbourRelationTable
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
uint8_t rrcTransactionIdentifier
Ptr< UeMeasure > m_servingCellMeasures
bool haveMobilityControlInfo
Parameters of the UE CONTEXT RELEASE message.
EpsBearer erabLevelQosParameters
Parameters of the HANDOVER REQUEST ACKNOWLEDGE message.
void RecvRrcConnectionSetupCompleted(LteRrcSap::RrcConnectionSetupCompleted msg)
RadioResourceConfigDedicated radioResourceConfigDedicated
std::list< uint8_t > m_drbsToBeStarted
void DoReceivePdcpSdu(LtePdcpSapUser::ReceivePdcpSduParameters params)
bool haveMeasResultNeighCells
uint8_t filterCoefficientRSRQ
uint8_t logicalChannelIdentity
TracedCallback< uint64_t, uint16_t, uint16_t, uint16_t > m_handoverStartTrace
LtePdcpSapUser * srb1SapUser
uint16_t g_srsCiLow[SRS_ENTRIES]
bool havePhysicalConfigDedicated
std::vector< EpcX2Sap::ErabToBeSetupItem > GetErabList()
void ScheduleRrcConnectionReconfiguration()
Parameters for [re]configuring the UE.
bool haveSoundingRsUlConfigDedicated
Time m_systemInformationPeriodicity
LteEnbRrcSapProvider * GetLteEnbRrcSapProvider()
std::vector< ErabToBeSetupItem > bearers
uint8_t m_defaultTransmissionMode
void DoRecvResourceStatusUpdate(EpcX2SapUser::ResourceStatusUpdateParams params)
void DoRecvUeData(EpcX2SapUser::UeDataParams params)
virtual void TransmitPdcpSdu(TransmitPdcpSduParameters params)=0
Ptr< const AttributeAccessor > MakeEnumAccessor(T1 a1)
RadioResourceConfigCommon radioResourceConfigCommon
EnbRrcMemberLteEnbCmacSapUser(LteEnbRrc *rrc)
enum ns3::LteRrcSap::ReportConfigEutra::@72 triggerQuantity
void PrepareHandover(uint16_t cellId)
CarrierBandwidthEutra carrierBandwidth
void RecvRrcConnectionReestablishmentComplete(LteRrcSap::RrcConnectionReestablishmentComplete msg)
#define NS_ASSERT_MSG(condition, message)
EpcEnbS1SapUser * m_s1SapUser
std::set< uint16_t > m_ueSrsConfigurationIndexSet
void SetSrsPeriodicity(uint32_t p)
virtual void DoDispose(void)
TypeId GetRlcType(EpsBearer bearer)
LogicalChannelConfig logicalChannelConfig
void HandoverJoiningTimeout(uint16_t rnti)
RachConfigCommon rachConfigCommon
uint16_t g_srsCiHigh[SRS_ENTRIES]
instantiate subclasses of ns3::Object.
Ipv4 addresses are stored in host order in this class.
uint8_t raResponseWindowSize
std::string ToString(EpcUeNas::State s)
bool haveCarrierBandwidth
bool haveAntennaInfoDedicated
bool m_pendingRrcConnectionReconfiguration
std::vector< ErabNotAdmittedItem > notAdmittedBearers
void DoRrcConfigurationUpdateInd(LteEnbCmacSapUser::UeConfig params)
virtual void ConfigureMac(uint8_t ulBandwidth, uint8_t dlBandwidth)=0
void DoRecvHandoverPreparationFailure(EpcX2SapUser::HandoverPreparationFailureParams params)
void StartDataRadioBearers()
enum ns3::LteRrcSap::ThresholdEutra::@68 choice
virtual AllocateNcRaPreambleReturnValue AllocateNcRaPreamble(uint16_t rnti)=0
EpcEnbS1SapUser * GetS1SapUser()
uint8_t allowedMeasBandwidth
std::list< DrbToAddMod > drbToAddModList
void RecvRrcConnectionReestablishmentRequest(LteRrcSap::RrcConnectionReestablishmentRequest msg)
bool RemovePacketTag(Tag &tag)
LteEnbCmacSapProvider * m_cmacSapProvider
LteRrcSap::PhysicalConfigDedicated m_physicalConfigDedicated
std::map< uint16_t, Ptr< UeManager > > m_ueMap
uint16_t sourceDlCarrierFreq
#define NS_LOG_DEBUG(msg)
uint16_t criticalityDiagnostics
virtual Ptr< Packet > EncodeHandoverCommand(RrcConnectionReconfiguration msg)=0
void RecvRrcConnectionRequest(LteRrcSap::RrcConnectionRequest msg)
void SetRnti(uint16_t tid)
enum ns3::LteRrcSap::ReportConfigEutra::@74 reportInterval
LteRrcSap::MeasConfig BuildMeasConfig()
std::map< uint8_t, Ptr< LteDataRadioBearerInfo > > m_drbMap
TracedCallback< uint64_t, uint16_t, uint16_t > m_connectionReconfigurationTrace
uint8_t GetLogicalChannelPriority(EpsBearer bearer)
bool valid
true if a valid RA config was allocated, false otherwise
uint8_t GetNewRrcTransactionIdentifier()
MobilityControlInfo mobilityControlInfo
Ptr< const AttributeChecker > MakeTimeChecker(const Time min, const Time max)
Helper to make a Time checker with bounded range. Both limits are inclusive.
void DoRecvSnStatusTransfer(EpcX2SapUser::SnStatusTransferParams params)
LteEnbCphySapUser * GetLteEnbCphySapUser()
void ConnectionRejectedTimeout(uint16_t rnti)
uint32_t GetSrsPeriodicity() const
Ptr< LteDataRadioBearerInfo > GetDataRadioBearerInfo(uint8_t drbid)
uint8_t m_neighbourCellHandoverOffset
AntennaInfoDedicated antennaInfo
Time m_handoverJoiningTimeoutDuration
uint16_t m_lastAllocatedConfigurationIndex
virtual void SendSystemInformation(SystemInformation msg)=0
virtual void RemoveUe(uint16_t rnti)=0
void HandoverLeavingTimeout(uint16_t rnti)
a base class which provides memory management and object aggregation
contain a set of ns3::Object pointers.
void ConfigureCell(uint8_t ulBandwidth, uint8_t dlBandwidth, uint16_t ulEarfcn, uint16_t dlEarfcn, uint16_t cellId)
void DoRecvRrcConnectionReestablishmentRequest(uint16_t rnti, LteRrcSap::RrcConnectionReestablishmentRequest msg)
enum ns3::LteRrcSap::SoundingRsUlConfigDedicated::@67 type
void RemoveUe(uint16_t rnti)
void DoRecvMeasurementReport(uint16_t rnti, LteRrcSap::MeasurementReport msg)
uint8_t raPreambleId
random access preamble id
void CmacUeConfigUpdateInd(LteEnbCmacSapUser::UeConfig cmacParams)
Parameters of the UE DATA primitive.
enum LteEpsBearerToRlcMapping_t m_epsBearerToRlcMapping
Ptr< T > GetObject(void) const
std::vector< ErabsSubjectToStatusTransferItem > erabsSubjectToStatusTransferList
void RecvMeasurementReport(LteRrcSap::MeasurementReport msg)
a unique identifier for an interface.
std::list< ReportConfigToAddMod > reportConfigToAddModList
TypeId SetParent(TypeId tid)
std::list< uint8_t > drbToReleaseList
uint8_t Bid2Drbid(uint8_t bid)
static TypeId GetTypeId(void)
void SetS1SapProvider(EpcEnbS1SapProvider *s)
uint8_t Lcid2Drbid(uint8_t lcid)
virtual void RemoveUe(uint16_t rnti)=0
LteEnbCphySapUser * m_cphySapUser
void DoDataRadioBearerSetupRequest(EpcEnbS1SapUser::DataRadioBearerSetupRequestParameters params)
void DoRecvLoadInformation(EpcX2SapUser::LoadInformationParams params)
RaSupervisionInfo raSupervisionInfo
void RecvHandoverRequestAck(EpcX2SapUser::HandoverRequestAckParams params)
bool SendData(Ptr< Packet > p)
EventId m_handoverJoiningTimeout
Time m_connectionTimeoutDuration
void CompleteSetupUe(LteEnbRrcSapProvider::CompleteSetupUeParameters params)
virtual void DoInitialize()
MasterInformationBlock sourceMasterInformationBlock
std::map< uint16_t, Ptr< UeMeasure > > m_neighbourCellMeasures
void DoRecvHandoverRequestAck(EpcX2SapUser::HandoverRequestAckParams params)
bool haveCellForWhichToReportCGI
void DoRecvHandoverRequest(EpcX2SapUser::HandoverRequestParams params)