21 #include <ns3/fatal-error.h>
23 #include <ns3/object-map.h>
24 #include <ns3/object-factory.h>
25 #include <ns3/node-list.h>
27 #include <ns3/simulator.h>
98 "IDLE_CELL_SELECTION",
99 "IDLE_WAIT_SYSTEM_INFO",
100 "IDLE_CAMPED_NORMALLY",
101 "IDLE_RANDOM_ACCESS",
103 "CONNECTED_NORMALLY",
104 "CONNECTED_REESTABLISHING",
122 : m_cphySapProvider (0),
123 m_cmacSapProvider (0),
125 m_macSapProvider (0),
127 m_state (IDLE_CELL_SELECTION),
132 m_connectionPending (0),
168 .AddConstructor<LteUeRrc> ()
169 .AddAttribute (
"DataRadioBearerMap",
"List of UE RadioBearerInfo for Data Radio Bearers by LCID.",
172 MakeObjectMapChecker<LteDataRadioBearerInfo> ())
173 .AddAttribute (
"Srb0",
"SignalingRadioBearerInfo for SRB0",
176 MakePointerChecker<LteSignalingRadioBearerInfo> ())
177 .AddAttribute (
"Srb1",
"SignalingRadioBearerInfo for SRB1",
180 MakePointerChecker<LteSignalingRadioBearerInfo> ())
181 .AddAttribute (
"CellId",
182 "Serving cell identifier",
185 MakeUintegerChecker<uint16_t> ())
186 .AddAttribute (
"C-RNTI",
187 "Cell Radio Network Temporary Identifier",
190 MakeUintegerChecker<uint16_t> ())
191 .AddTraceSource (
"StateTransition",
192 "trace fired upon every UE RRC state transition",
194 .AddTraceSource (
"RandomAccessSuccessful",
195 "trace fired upon successful completion of the random access procedure",
197 .AddTraceSource (
"ConnectionEstablished",
198 "trace fired upon successful RRC connection establishment",
200 .AddTraceSource (
"ConnectionReconfiguration",
201 "trace fired upon RRC connection reconfiguration",
203 .AddTraceSource (
"HandoverStart",
204 "trace fired upon start of a handover procedure",
206 .AddTraceSource (
"HandoverEndOk",
207 "trace fired upon successful termination of a handover procedure",
354 Ptr<LteRlc> rlc = CreateObject<LteRlcTm> ()->GetObject<LteRlc> ();
359 m_srb0 = CreateObject<LteSignalingRadioBearerInfo> ();
361 m_srb0->m_srbIdentity = 0;
387 std::map<uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator it =
m_drbMap.find (drbid);
393 params.lcid = it->second->m_logicalChannelIdentity;
395 NS_LOG_LOGIC (
this <<
" RNTI=" <<
m_rnti <<
" sending " << packet <<
"on DRBID " << (uint32_t) drbid <<
" (LCID" << params.lcid <<
")" <<
" (" << packet->
GetSize () <<
" bytes)");
396 it->second->m_pdcp->GetLtePdcpSapProvider ()->TransmitPdcpSdu (params);
412 NS_LOG_INFO (
"aborting connection setup procedure");
555 NS_LOG_LOGIC (
this <<
" CellId " << newMeasIt->m_cellId <<
" RSRP " << newMeasIt->m_rsrp <<
" RSRQ " << newMeasIt->m_rsrq);
558 std::map<uint16_t, MeasValues>::iterator storedMeasIt =
m_storedMeasValues.find (newMeasIt->m_cellId);
563 v.
rsrp = newMeasIt->m_rsrp;
564 v.
rsrq = newMeasIt->m_rsrq;
565 std::pair<uint16_t, MeasValues> val (newMeasIt->m_cellId, v);
566 std::pair<std::map<uint16_t, MeasValues>::iterator,
bool>
568 NS_ASSERT_MSG (ret.second ==
true,
"element already existed");
569 storedMeasIt = ret.first;
584 for (std::map<uint8_t, LteRrcSap::MeasIdToAddMod>::iterator measIdIt
589 NS_ASSERT (measIdIt->first == measIdIt->second.measId);
590 uint8_t measId = measIdIt->first;
591 NS_LOG_LOGIC (
this <<
" considering measId " << (uint32_t) measId);
593 std::map<uint8_t, LteRrcSap::ReportConfigToAddMod>::iterator
598 std::map<uint8_t, LteRrcSap::MeasObjectToAddMod>::iterator
603 std::map<uint8_t, VarMeasReport>::iterator
610 "only triggerType == event is supported");
613 bool eventEntryCondApplicable =
false;
614 bool eventLeavingCondApplicable =
false;
616 std::list<uint16_t> concernedCellsEntry;
617 std::list<uint16_t> concernedCellsLeaving;
619 switch (reportConfigEutra.eventId)
625 double hys = (double) reportConfigEutra.hysteresis * 0.5;
626 switch (reportConfigEutra.triggerQuantity)
631 NS_ASSERT (reportConfigEutra.threshold1.choice
638 NS_ASSERT (reportConfigEutra.threshold1.choice
647 bool entryCond = ms + hys < thresh;
648 if (entryCond ==
true
651 && (measReportIt->second.cellsTriggeredList.find (
m_cellId)
652 == measReportIt->second.cellsTriggeredList.end ()))))
654 concernedCellsEntry.push_back (
m_cellId);
655 eventEntryCondApplicable =
true;
658 bool leavingCond = ms - hys > thresh;
661 && (measReportIt->second.cellsTriggeredList.find (
m_cellId)
662 != measReportIt->second.cellsTriggeredList.end ()))
664 concernedCellsLeaving.push_back (
m_cellId);
665 eventLeavingCondApplicable =
true;
667 NS_LOG_LOGIC (
"event A2: serving cell " <<
m_cellId <<
" ms=" << ms <<
" thresh=" << thresh <<
" entryCond=" << entryCond <<
" leavingCond=" << leavingCond);
673 for (std::map<uint16_t, MeasValues>::iterator storedMeasIt =
m_storedMeasValues.begin ();
677 uint16_t cellId = storedMeasIt->first;
682 double hys = (double) reportConfigEutra.hysteresis * 0.5;
683 switch (reportConfigEutra.triggerQuantity)
686 mn = storedMeasIt->second.rsrp;
688 NS_ASSERT (reportConfigEutra.threshold1.choice
693 mn = storedMeasIt->second.rsrq;
695 NS_ASSERT (reportConfigEutra.threshold1.choice
704 bool entryCond = mn + measObjectEutra.offsetFreq + 0.0 - hys > thresh;
705 if (entryCond ==
true
708 && (measReportIt->second.cellsTriggeredList.find (cellId)
709 == measReportIt->second.cellsTriggeredList.end ()))))
711 concernedCellsEntry.push_back (cellId);
712 eventEntryCondApplicable =
true;
715 bool leavingCond = mn + measObjectEutra.offsetFreq + 0.0 + hys < thresh;
718 && (measReportIt->second.cellsTriggeredList.find (cellId)
719 != measReportIt->second.cellsTriggeredList.end ()))
721 concernedCellsLeaving.push_back (cellId);
722 eventLeavingCondApplicable =
true;
725 NS_LOG_LOGIC (
"event A4: neighbor cell " << cellId <<
" mn=" << mn <<
" thresh=" << thresh <<
" entryCond=" << entryCond <<
" leavingCond=" << leavingCond);
732 NS_FATAL_ERROR (
"unsupported eventId " << reportConfigEutra.eventId);
737 NS_LOG_LOGIC (
"eventEntryCondApplicable=" << eventEntryCondApplicable
738 <<
" eventLeavingCondApplicable=" << eventLeavingCondApplicable);
740 bool initiateUeMeasurementReportingProcedure =
false;
742 if (eventEntryCondApplicable)
748 std::pair<uint8_t, VarMeasReport> val (measId, r);
749 std::pair<std::map<uint8_t, VarMeasReport>::iterator,
bool>
751 NS_ASSERT_MSG (ret.second ==
true,
"element already existed");
752 measReportIt = ret.first;
754 for (std::list<uint16_t>::iterator it = concernedCellsEntry.begin ();
755 it != concernedCellsEntry.end ();
758 measReportIt->second.cellsTriggeredList.insert (*it);
760 measReportIt->second.numberOfReportsSent = 0;
761 initiateUeMeasurementReportingProcedure =
true;
764 if (eventLeavingCondApplicable)
767 for (std::list<uint16_t>::iterator it = concernedCellsLeaving.begin ();
768 it != concernedCellsLeaving.end ();
771 measReportIt->second.cellsTriggeredList.erase (*it);
777 if (reportConfigEutra.reportOnLeave)
779 initiateUeMeasurementReportingProcedure =
true;
784 if (initiateUeMeasurementReportingProcedure)
790 && (measReportIt->second.cellsTriggeredList.empty ()))
792 measReportIt->second.periodicReportTimer.Cancel ();
1006 std::list<LteRrcSap::SrbToAddMod>::const_iterator stamIt = rrcd.
srbToAddModList.begin ();
1014 NS_ASSERT_MSG (stamIt->srbIdentity == 1,
"only SRB1 supported");
1016 const uint8_t lcid = 1;
1021 rlc->SetLcId (lcid);
1025 pdcp->SetLcId (lcid);
1027 pdcp->SetLteRlcSapProvider (rlc->GetLteRlcSapProvider ());
1028 rlc->SetLteRlcSapUser (pdcp->GetLteRlcSapUser ());
1030 m_srb1 = CreateObject<LteSignalingRadioBearerInfo> ();
1033 m_srb1->m_srbIdentity = 1;
1035 m_srb1->m_logicalChannelConfig.priority = stamIt->logicalChannelConfig.priority;
1036 m_srb1->m_logicalChannelConfig.prioritizedBitRateKbps = stamIt->logicalChannelConfig.prioritizedBitRateKbps;
1037 m_srb1->m_logicalChannelConfig.bucketSizeDurationMs = stamIt->logicalChannelConfig.bucketSizeDurationMs;
1038 m_srb1->m_logicalChannelConfig.logicalChannelGroup = stamIt->logicalChannelConfig.logicalChannelGroup;
1041 lcConfig.
priority = stamIt->logicalChannelConfig.priority;
1053 ueParams.srb1SapProvider =
m_srb1->m_pdcp->GetLtePdcpSapProvider ();
1058 NS_LOG_INFO (
"request to modify SRB1 (skipping as currently not implemented)");
1064 std::list<LteRrcSap::DrbToAddMod>::const_iterator dtamIt;
1069 NS_LOG_INFO (
this <<
" IMSI " <<
m_imsi <<
" adding/modifying DRBID " << (uint32_t) dtamIt->drbIdentity <<
" LC " << (uint32_t) dtamIt->logicalChannelIdentity);
1070 NS_ASSERT_MSG (dtamIt->logicalChannelIdentity > 2,
"LCID value " << dtamIt->logicalChannelIdentity <<
" is reserved for SRBs");
1072 std::map<uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator drbMapIt =
m_drbMap.find (dtamIt->drbIdentity);
1084 switch (dtamIt->rlcConfig.choice)
1105 rlc->SetLcId (dtamIt->logicalChannelIdentity);
1108 drbInfo->m_rlc = rlc;
1109 drbInfo->m_epsBearerIdentity = dtamIt->epsBearerIdentity;
1110 drbInfo->m_logicalChannelIdentity = dtamIt->logicalChannelIdentity;
1111 drbInfo->m_drbIdentity = dtamIt->drbIdentity;
1119 pdcp->SetLcId (dtamIt->logicalChannelIdentity);
1121 pdcp->SetLteRlcSapProvider (rlc->GetLteRlcSapProvider ());
1122 rlc->SetLteRlcSapUser (pdcp->GetLteRlcSapUser ());
1123 drbInfo->m_pdcp = pdcp;
1132 lcConfig.
priority = dtamIt->logicalChannelConfig.priority;
1139 rlc->GetLteMacSapUser ());
1150 std::list<uint8_t>::iterator dtdmIt;
1155 uint8_t drbid = *dtdmIt;
1156 NS_LOG_INFO (
this <<
" IMSI " <<
m_imsi <<
" releasing DRB " << (uint32_t) drbid << drbid);
1157 std::map<uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator it =
m_drbMap.find (drbid);
1177 uint8_t measObjectId = *it;
1178 NS_LOG_LOGIC (
this <<
" deleting measObjectId " << (uint32_t) measObjectId);
1183 if (measIdIt->second.measObjectId == measObjectId)
1185 uint8_t measId = measIdIt->second.measId;
1187 NS_LOG_LOGIC (
this <<
" deleting measId " << (uint32_t) measId <<
" because referring to measObjectId " << (uint32_t) measObjectId);
1190 std::map<uint8_t, VarMeasReport>::iterator measReportIt =
m_varMeasReportList.find (measId);
1193 NS_LOG_LOGIC (
this <<
" deleting existing report for measId " << (uint32_t) measId <<
" because referring to measObjectId " << (uint32_t) measObjectId);
1194 measReportIt->second.periodicReportTimer.Cancel ();
1212 NS_ASSERT_MSG (it->measObjectEutra.cellsToRemoveList.empty (),
"cellsToRemoveList not supported");
1213 NS_ASSERT_MSG (it->measObjectEutra.cellsToAddModList.empty (),
"cellsToAddModList not supported");
1214 NS_ASSERT_MSG (it->measObjectEutra.cellsToRemoveList.empty (),
"blackCellsToRemoveList not supported");
1215 NS_ASSERT_MSG (it->measObjectEutra.blackCellsToAddModList.empty (),
"blackCellsToAddModList not supported");
1216 NS_ASSERT_MSG (it->measObjectEutra.haveCellForWhichToReportCGI ==
false ,
"cellForWhichToReportCGI is not supported");
1219 uint8_t measObjectId = it->measObjectId;
1223 NS_LOG_LOGIC (
"measObjectId " << (uint32_t) measObjectId <<
" exists, updating entry");
1224 measObjectIt->second = *it;
1225 for (std::map<uint8_t, LteRrcSap::MeasIdToAddMod>::iterator measIdIt
1230 if (measIdIt->second.measObjectId == measObjectId)
1232 uint8_t measId = measIdIt->second.measId;
1233 NS_LOG_LOGIC (
this <<
" found measId " << (uint32_t) measId <<
" referring to measObjectId " << (uint32_t) measObjectId);
1234 std::map<uint8_t, VarMeasReport>::iterator measReportIt =
m_varMeasReportList.find (measId);
1237 NS_LOG_LOGIC (
this <<
" deleting existing report for measId " << (uint32_t) measId <<
" because referring to measObjectId " << (uint32_t) measObjectId);
1238 measReportIt->second.periodicReportTimer.Cancel ();
1246 NS_LOG_LOGIC (
"measObjectId " << (uint32_t) measObjectId <<
" is new, adding entry");
1256 uint8_t reportConfigId = *it;
1257 NS_LOG_LOGIC (
this <<
" deleting reportConfigId " << (uint32_t) reportConfigId);
1262 if (measIdIt->second.reportConfigId == reportConfigId)
1264 uint8_t measId = measIdIt->second.measId;
1266 NS_LOG_LOGIC (
this <<
" deleting measId " << (uint32_t) measId <<
" because referring to reportConfigId " << (uint32_t) reportConfigId);
1269 std::map<uint8_t, VarMeasReport>::iterator measReportIt =
m_varMeasReportList.find (measId);
1272 NS_LOG_LOGIC (
this <<
" deleting existing report for measId" << (uint32_t) measId <<
" because referring to reportConfigId " << (uint32_t) reportConfigId);
1273 measReportIt->second.periodicReportTimer.Cancel ();
1292 "only trigger type EVENT is supported");
1295 "only events A2 and A4 are supported");
1296 NS_ASSERT_MSG (it->reportConfigEutra.timeToTrigger == 0,
"timeToTrigger > 0 is not supported");
1298 uint8_t reportConfigId = it->reportConfigId;
1302 NS_LOG_LOGIC (
"reportConfigId " << (uint32_t) reportConfigId <<
" exists, updating entry");
1304 for (std::map<uint8_t, LteRrcSap::MeasIdToAddMod>::iterator measIdIt
1309 if (measIdIt->second.reportConfigId == reportConfigId)
1311 uint8_t measId = measIdIt->second.measId;
1312 NS_LOG_LOGIC (
this <<
" found measId " << (uint32_t) measId <<
" referring to reportConfigId " << (uint32_t) reportConfigId);
1313 std::map<uint8_t, VarMeasReport>::iterator measReportIt =
m_varMeasReportList.find (measId);
1316 NS_LOG_LOGIC (
this <<
" deleting existing report for measId " << (uint32_t) measId <<
" because referring to reportConfigId " << (uint32_t) reportConfigId);
1317 measReportIt->second.periodicReportTimer.Cancel ();
1325 NS_LOG_LOGIC (
"reportConfigId " << (uint32_t) reportConfigId <<
" is new, adding entry");
1339 uint8_t measId = measIdIt->second.measId;
1341 NS_LOG_LOGIC (
this <<
" deleting measId " << (uint32_t) measId);
1344 std::map<uint8_t, VarMeasReport>::iterator measReportIt =
m_varMeasReportList.find (measId);
1347 NS_LOG_LOGIC (
this <<
" deleting existing report for measId" << (uint32_t) measId);
1348 measReportIt->second.periodicReportTimer.Cancel ();
1366 uint8_t measId = *it;
1367 NS_LOG_LOGIC (
this <<
" deleting measId " << (uint32_t) measId);
1369 std::map<uint8_t, VarMeasReport>::iterator measReportIt =
m_varMeasReportList.find (measId);
1372 NS_LOG_LOGIC (
this <<
" deleting existing report for measId" << (uint32_t) measId);
1373 measReportIt->second.periodicReportTimer.Cancel ();
1379 for (std::list<LteRrcSap::MeasIdToAddMod>::iterator it = mc.
measIdToAddModList.begin ();
1383 NS_LOG_LOGIC (
this <<
" measId " << (uint32_t) it->measId <<
" (measObjectId="
1384 << (uint32_t) it->measObjectId <<
", reportConfigId=" << (uint32_t) it->reportConfigId <<
")");
1390 std::map<uint8_t, VarMeasReport>::iterator measReportIt =
m_varMeasReportList.find (it->measId);
1393 measReportIt->second.periodicReportTimer.Cancel ();
1423 std::map<uint8_t, LteRrcSap::MeasIdToAddMod>::iterator
1427 std::map<uint8_t, LteRrcSap::ReportConfigToAddMod>::iterator
1434 measResults.
measId = measId;
1441 "RSRP " << (uint32_t) measResults.
rsrpResult <<
" (" << servingMeasIt->second.rsrp <<
" dBm) "
1442 "RSRQ " << (uint32_t) measResults.
rsrqResult <<
" (" << servingMeasIt->second.rsrq <<
" dB)");
1444 std::map<uint8_t, VarMeasReport>::iterator measReportIt =
m_varMeasReportList.find (measId);
1447 NS_LOG_ERROR (
"no entry found in m_varMeasReportList for measId " << (uint32_t) measId);
1451 if (!(measReportIt->second.cellsTriggeredList.empty ()))
1455 std::multimap<double, uint16_t> sortedNeighCells;
1456 for (std::set<uint16_t>::iterator cellsTriggeredIt = measReportIt->second.cellsTriggeredList.begin ();
1457 cellsTriggeredIt != measReportIt->second.cellsTriggeredList.end ();
1460 uint16_t cellId = *cellsTriggeredIt;
1463 std::map<uint16_t, MeasValues>::iterator neighborMeasIt =
m_storedMeasValues.find (cellId);
1464 double triggerValue;
1465 switch (reportConfigEutra.triggerQuantity)
1468 triggerValue = neighborMeasIt->second.rsrp;
1471 triggerValue = neighborMeasIt->second.rsrq;
1477 sortedNeighCells.insert (std::pair<double, uint16_t> (triggerValue, cellId));
1481 std::multimap<double, uint16_t>::reverse_iterator sortedNeighCellsIt;
1483 for (sortedNeighCellsIt = sortedNeighCells.rbegin (), count = 0;
1484 sortedNeighCellsIt != sortedNeighCells.rend () && count < reportConfigEutra.maxReportCells;
1485 ++sortedNeighCellsIt, ++count)
1487 uint16_t cellId = sortedNeighCellsIt->second;
1488 std::map<uint16_t, MeasValues>::iterator neighborMeasIt =
m_storedMeasValues.find (cellId);
1492 measResultEutra.haveCgiInfo =
false;
1493 measResultEutra.haveRsrpResult =
true;
1495 measResultEutra.haveRsrqResult =
true;
1497 NS_LOG_INFO (
this <<
" reporting neighbor cell " << (uint32_t) measResultEutra.physCellId
1498 <<
" RSRP " << (uint32_t) measResultEutra.rsrpResult
1499 <<
" (" << neighborMeasIt->second.rsrp <<
" dBm) "
1500 <<
" RSRQ " << (uint32_t) measResultEutra.rsrqResult
1501 <<
" (" << neighborMeasIt->second.rsrq <<
" dB)");
1507 NS_LOG_WARN (
this <<
" cellsTriggeredList is empty");
1509 measReportIt->second.numberOfReportsSent++;
1510 measReportIt->second.periodicReportTimer.Cancel ();
1515 uint32_t intervalMs;
1516 switch (reportConfigEutra.reportInterval)
1526 measReportIt->second.periodicReportTimer
1551 std::map<uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator it;
1572 std::map<uint8_t, uint8_t>::iterator it =
m_bid2DrbidMap.find (bid);
uint8_t numberOfRaPreambles
LtePdcpSapProvider * srb1SapProvider
uint8_t raResponseWindowSize
CarrierFreqEutra carrierFreq
smart pointer class similar to boost::intrusive_ptr
#define NS_LOG_FUNCTION(parameters)
void DoRecvRrcConnectionSetup(LteRrcSap::RrcConnectionSetup msg)
std::map< uint8_t, LteRrcSap::MeasObjectToAddMod > measObjectList
std::vector< struct UeMeasurementsElement > m_ueMeasurementsList
static TypeId GetTypeId(void)
std::list< MeasObjectToAddMod > measObjectToAddModList
LtePdcpSapUser * m_drbPdcpSapUser
void DoRecvSystemInformation(LteRrcSap::SystemInformation msg)
uint16_t bucketSizeDurationMs
uint8_t numberOfRaPreambles
void DoRecvSystemInformationBlockType1(LteRrcSap::SystemInformationBlockType1 msg)
SoundingRsUlConfigDedicated soundingRsUlConfigDedicated
static TypeId GetTypeId(void)
void SetAsSapUser(LteAsSapUser *s)
QuantityConfig quantityConfig
void DoRecvRrcConnectionReject(LteRrcSap::RrcConnectionReject msg)
std::list< uint8_t > reportConfigToRemoveList
std::list< MeasResultEutra > measResultListEutra
std::map< uint8_t, Ptr< LteDataRadioBearerInfo > > m_drbMap
void ApplyMeasConfig(LteRrcSap::MeasConfig mc)
virtual void DoDispose(void)
void SetUseRlcSm(bool val)
virtual void SendRrcConnectionReconfigurationCompleted(RrcConnectionReconfigurationCompleted msg)=0
#define NS_ASSERT(condition)
std::list< SrbToAddMod > srbToAddModList
void DoSetTemporaryCellRnti(uint16_t rnti)
RadioResourceConfigDedicated radioResourceConfigDedicated
std::list< uint8_t > measObjectToRemoveList
void SetTypeId(TypeId tid)
virtual void StartContentionBasedRandomAccessProcedure()=0
uint32_t GetSize(void) const
virtual void NotifyRandomAccessSuccessful()
Ptr< const AttributeAccessor > MakeObjectMapAccessor(U T::*memberContainer)
virtual void SetRnti(uint16_t rnti)=0
virtual void NotifyConnectionSuccessful()=0
uint16_t GetUlEarfcn() const
virtual void RemoveLc(uint8_t lcId)=0
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
NS_LOG_COMPONENT_DEFINE("LteUeRrc")
RachConfigDedicated rachConfigDedicated
void DoRecvRrcConnectionReestablishmentReject(LteRrcSap::RrcConnectionReestablishmentReject msg)
LtePdcpSapUser * srb1SapUser
#define NS_FATAL_ERROR(msg)
fatal error handling
LteMacSapProvider * m_macSapProvider
bool haveRadioResourceConfigDedicated
static double RsrqRange2Db(uint8_t range)
virtual void SendRrcConnectionSetupCompleted(RrcConnectionSetupCompleted msg)=0
uint8_t rrcTransactionIdentifier
uint8_t Bid2Drbid(uint8_t bid)
PreambleInfo preambleInfo
LteUeCmacSapUser * GetLteUeCmacSapUser()
friend class UeMemberLteUeCmacSapUser
LteRrcSap::QuantityConfig quantityConfig
void SetLteUeRrcSapUser(LteUeRrcSapUser *s)
LteUeRrcSapUser * m_rrcSapUser
TracedCallback< uint64_t, uint16_t, uint16_t > m_handoverEndOkTrace
Ptr< LteSignalingRadioBearerInfo > m_srb0
static TypeId GetTypeId(void)
Ptr< Object > Create(void) const
TracedCallback< uint64_t, uint16_t, uint16_t, uint16_t > m_handoverStartTrace
void DoRecvRrcConnectionReconfiguration(LteRrcSap::RrcConnectionReconfiguration msg)
void DoRecvRrcConnectionReestablishment(LteRrcSap::RrcConnectionReestablishment msg)
Hold an unsigned integer type.
uint8_t rrcTransactionIdentifier
NS_OBJECT_ENSURE_REGISTERED(AntennaModel)
std::list< MeasIdToAddMod > measIdToAddModList
bool haveRachConfigDedicated
virtual void DoInitialize(void)
std::map< uint16_t, MeasValues > m_storedMeasValues
PhysicalConfigDedicated physicalConfigDedicated
Ptr< LteSignalingRadioBearerInfo > m_srb1
LteUeCphySapProvider * m_cphySapProvider
uint8_t filterCoefficientRSRP
uint8_t GetUlBandwidth() const
void SetLteUeCmacSapProvider(LteUeCmacSapProvider *s)
uint8_t rrcTransactionIdentifier
std::map< uint8_t, LteRrcSap::MeasIdToAddMod > measIdList
#define NS_LOG_LOGIC(msg)
std::map< uint8_t, uint8_t > m_bid2DrbidMap
void SetLteMacSapProvider(LteMacSapProvider *s)
RadioResourceConfigDedicated radioResourceConfigDedicated
virtual void SyncronizeWithEnb(uint16_t cellId, uint16_t dlEarfcn)=0
uint8_t rrcTransactionIdentifier
void SetLteUeCphySapProvider(LteUeCphySapProvider *s)
void SwitchToState(State s)
VarMeasConfig m_varMeasConfig
std::map< uint8_t, LteRrcSap::ReportConfigToAddMod > reportConfigList
LteUeCphySapUser * m_cphySapUser
virtual void Setup(SetupParameters params)=0
virtual void SetSrsConfigurationIndex(uint16_t srcCi)=0
uint16_t targetPhysCellId
LteAsSapUser * m_asSapUser
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
bool haveMobilityControlInfo
void DoNotifyRandomAccessSuccessful()
uint8_t GetDlBandwidth() const
uint16_t GetDlEarfcn() const
bool haveMeasResultNeighCells
uint8_t filterCoefficientRSRQ
const char * g_ueRrcStateName[LteUeRrc::NUM_STATES]
void DoSendData(Ptr< Packet > packet, uint8_t bid)
static EventId ScheduleNow(MEM mem_ptr, OBJ obj)
bool haveSoundingRsUlConfigDedicated
LteRlcSapUser * srb0SapUser
void DoRecvRrcConnectionRelease(LteRrcSap::RrcConnectionRelease msg)
virtual void AddLc(uint8_t lcId, LogicalChannelConfig lcConfig, LteMacSapUser *msu)=0
CarrierBandwidthEutra carrierBandwidth
#define NS_ASSERT_MSG(condition, message)
LteUeCphySapUser * GetLteUeCphySapUser()
TracedCallback< uint64_t, uint16_t, uint16_t > m_connectionReconfigurationTrace
Ptr< LteSignalingRadioBearerInfo > m_srb1Old
virtual void SendMeasurementReport(MeasurementReport msg)=0
virtual void StartNonContentionBasedRandomAccessProcedure(uint16_t rnti, uint8_t rapId, uint8_t prachMask)=0
virtual void SetDlBandwidth(uint8_t dlBandwidth)=0
RachConfigCommon rachConfigCommon
instantiate subclasses of ns3::Object.
static uint8_t Dbm2RsrpRange(double dbm)
uint8_t raResponseWindowSize
std::string ToString(EpcUeNas::State s)
uint16_t prioritizedBitRateKbps
bool haveCarrierBandwidth
virtual void SetTransmissionMode(uint8_t txMode)=0
bool haveAntennaInfoDedicated
void DoRecvMasterInformationBlock(LteRrcSap::MasterInformationBlock msg)
void DoNotifyRandomAccessFailed()
void DoCompleteSetup(LteUeRrcSapProvider::CompleteSetupParameters params)
LteUeRrcSapProvider * m_rrcSapProvider
void ApplyRadioResourceConfigDedicated(LteRrcSap::RadioResourceConfigDedicated rrcd)
TracedCallback< uint64_t, uint16_t, uint16_t > m_connectionEstablishedTrace
uint16_t GetCellId() const
std::list< DrbToAddMod > drbToAddModList
virtual void NotifyConnectionReleased()=0
std::map< uint8_t, VarMeasReport > m_varMeasReportList
LteAsSapProvider * m_asSapProvider
LteRlcSapProvider * srb0SapProvider
LteUeCmacSapProvider * m_cmacSapProvider
LteAsSapProvider * GetAsSapProvider()
void DoReportUeMeasurements(LteUeCphySapUser::UeMeasurementsParameters params)
MobilityControlInfo mobilityControlInfo
#define NS_LOG_ERROR(msg)
AntennaInfoDedicated antennaInfo
TracedCallback< uint64_t, uint16_t, uint16_t, State, State > m_stateTransitionTrace
void SendMeasurementReport(uint8_t measId)
a base class which provides memory management and object aggregation
contain a set of ns3::Object pointers.
void DoReceivePdcpSdu(LtePdcpSapUser::ReceivePdcpSduParameters params)
virtual void SendRrcConnectionRequest(RrcConnectionRequest msg)=0
static uint8_t Db2RsrqRange(double db)
virtual void RecvData(Ptr< Packet > packet)=0
UeMemberLteUeCmacSapUser(LteUeRrc *rrc)
LteUeRrcSapProvider * GetLteUeRrcSapProvider()
void DoForceCampedOnEnb(uint16_t cellId, uint16_t earfcn)
Ptr< T > GetObject(void) const
virtual void SetTemporaryCellRnti(uint16_t rnti)
TracedCallback< uint64_t, uint16_t, uint16_t > m_randomAccessSuccessfulTrace
std::list< uint8_t > measIdToRemoveList
a unique identifier for an interface.
virtual void ConfigureUplink(uint16_t ulEarfcn, uint8_t ulBandwidth)=0
std::list< ReportConfigToAddMod > reportConfigToAddModList
virtual void ConfigureRach(RachConfig rc)=0
TypeId SetParent(TypeId tid)
std::list< uint8_t > drbToReleaseList
static TypeId GetTypeId(void)
void SetImsi(uint64_t imsi)
uint8_t m_lastRrcTransactionIdentifier
void LeaveConnectedMode()
RaSupervisionInfo raSupervisionInfo
virtual void NotifyRandomAccessFailed()
LteUeCmacSapUser * m_cmacSapUser
static double RsrpRange2Dbm(uint8_t range)
uint8_t logicalChannelGroup