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>
29 #include "lte-ue-rrc.h"
30 #include "lte-enb-rrc.h"
32 #include "lte-rlc-tm.h"
33 #include "lte-rlc-um.h"
34 #include "lte-rlc-am.h"
36 #include "lte-pdcp-sap.h"
37 #include "lte-radio-bearer-info.h"
38 #include "lte-as-sap.h"
39 #include "lte-enb-net-device.h"
64 UeMemberLteUeCmacSapUser::UeMemberLteUeCmacSapUser (
LteUeRrc* rrc)
72 m_rrc->DoSetTemporaryCellRnti (rnti);
79 m_rrc->DoNotifyRandomAccessSuccessful ();
85 m_rrc->DoNotifyRandomAccessFailed ();
94 const char* g_ueRrcStateName[LteUeRrc::NUM_STATES] =
96 "IDLE_CELL_SELECTION",
97 "IDLE_WAIT_SYSTEM_INFO",
98 "IDLE_CAMPED_NORMALLY",
101 "CONNECTED_NORMALLY",
102 "CONNECTED_REESTABLISHING",
108 return std::string (g_ueRrcStateName[s]);
116 NS_OBJECT_ENSURE_REGISTERED (LteUeRrc);
120 : m_cphySapProvider (0),
121 m_cmacSapProvider (0),
123 m_macSapProvider (0),
125 m_state (IDLE_CELL_SELECTION),
130 m_connectionPending (0),
153 delete m_cphySapUser;
154 delete m_cmacSapUser;
155 delete m_rrcSapProvider;
156 delete m_drbPdcpSapUser;
157 delete m_asSapProvider;
162 LteUeRrc::GetTypeId (
void)
166 .AddConstructor<LteUeRrc> ()
167 .AddAttribute (
"DataRadioBearerMap",
"List of UE RadioBearerInfo for Data Radio Bearers by LCID.",
169 MakeObjectMapAccessor (&LteUeRrc::m_drbMap),
170 MakeObjectMapChecker<LteDataRadioBearerInfo> ())
171 .AddAttribute (
"Srb0",
"SignalingRadioBearerInfo for SRB0",
173 MakePointerAccessor (&LteUeRrc::m_srb0),
174 MakePointerChecker<LteSignalingRadioBearerInfo> ())
175 .AddAttribute (
"Srb1",
"SignalingRadioBearerInfo for SRB1",
177 MakePointerAccessor (&LteUeRrc::m_srb1),
178 MakePointerChecker<LteSignalingRadioBearerInfo> ())
179 .AddAttribute (
"CellId",
180 "Serving cell identifier",
183 MakeUintegerChecker<uint16_t> ())
184 .AddAttribute (
"C-RNTI",
185 "Cell Radio Network Temporary Identifier",
188 MakeUintegerChecker<uint16_t> ())
189 .AddTraceSource (
"StateTransition",
190 "trace fired upon every UE RRC state transition",
192 .AddTraceSource (
"RandomAccessSuccessful",
193 "trace fired upon successful completion of the random access procedure",
195 .AddTraceSource (
"ConnectionEstablished",
196 "trace fired upon successful RRC connection establishment",
198 .AddTraceSource (
"ConnectionReconfiguration",
199 "trace fired upon RRC connection reconfiguration",
201 .AddTraceSource (
"HandoverStart",
202 "trace fired upon start of a handover procedure",
204 .AddTraceSource (
"HandoverEndOk",
205 "trace fired upon successful termination of a handover procedure",
216 m_cphySapProvider = s;
223 return m_cphySapUser;
230 m_cmacSapProvider = s;
237 return m_cmacSapUser;
251 return m_rrcSapProvider;
258 m_macSapProvider = s;
270 return m_asSapProvider;
352 Ptr<LteRlc> rlc = CreateObject<LteRlcTm> ()->GetObject<LteRlc> ();
353 rlc->SetLteMacSapProvider (m_macSapProvider);
354 rlc->SetRnti (m_rnti);
357 m_srb0 = CreateObject<LteSignalingRadioBearerInfo> ();
359 m_srb0->m_srbIdentity = 0;
361 ueParams.srb0SapProvider = m_srb0->m_rlc->GetLteRlcSapProvider ();
362 ueParams.srb1SapProvider = 0;
363 m_rrcSapUser->Setup (ueParams);
367 lcConfig.priority = 0;
368 lcConfig.prioritizedBitRateKbps = 65535;
369 lcConfig.bucketSizeDurationMs = 65535;
370 lcConfig.logicalChannelGroup = 0;
372 m_cmacSapProvider->
AddLc (lcid, lcConfig, rlc->GetLteMacSapUser ());
378 LteUeRrc::DoSendData (
Ptr<Packet> packet, uint8_t bid)
383 uint8_t drbid = Bid2Drbid (bid);
385 std::map<uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator it = m_drbMap.find (drbid);
386 NS_ASSERT_MSG (it != m_drbMap.end (),
"could not find bearer with drbid == " << drbid);
390 params.rnti = m_rnti;
391 params.lcid = it->second->m_logicalChannelIdentity;
393 NS_LOG_LOGIC (
this <<
" RNTI=" << m_rnti <<
" sending " << packet <<
"on DRBID " << (uint32_t) drbid <<
" (LCID" << params.lcid <<
")" <<
" (" << packet->
GetSize () <<
" bytes)");
394 it->second->m_pdcp->GetLtePdcpSapProvider ()->TransmitPdcpSdu (params);
398 LteUeRrc::DoDisconnect ()
404 case IDLE_CELL_SELECTION:
405 case IDLE_CAMPED_NORMALLY:
409 case IDLE_CONNECTING:
410 NS_LOG_INFO (
"aborting connection setup procedure");
411 SwitchToState (IDLE_CAMPED_NORMALLY);
414 case CONNECTED_NORMALLY:
415 case CONNECTED_REESTABLISHING:
416 case CONNECTED_HANDOVER:
417 LeaveConnectedMode ();
421 NS_FATAL_ERROR (
"method unexpected in state " << ToString (m_state));
427 LteUeRrc::DoReceivePdcpSdu (LtePdcpSapUser::ReceivePdcpSduParameters params)
430 m_asSapUser->
RecvData (params.pdcpSdu);
435 LteUeRrc::DoSetTemporaryCellRnti (uint16_t rnti)
439 m_srb0->m_rlc->SetRnti (m_rnti);
440 m_cphySapProvider->
SetRnti (m_rnti);
444 LteUeRrc::DoNotifyRandomAccessSuccessful ()
447 m_randomAccessSuccessfulTrace (m_imsi, m_cellId, m_rnti);
450 case IDLE_RANDOM_ACCESS:
454 SwitchToState (IDLE_CONNECTING);
455 LteRrcSap::RrcConnectionRequest msg;
456 msg.ueIdentity = m_imsi;
457 m_rrcSapUser->SendRrcConnectionRequest (msg);
461 case CONNECTED_HANDOVER:
463 LteRrcSap::RrcConnectionReconfigurationCompleted msg;
464 msg.rrcTransactionIdentifier = m_lastRrcTransactionIdentifier;
465 m_rrcSapUser->SendRrcConnectionReconfigurationCompleted (msg);
466 SwitchToState (CONNECTED_NORMALLY);
467 m_handoverEndOkTrace (m_imsi, m_cellId, m_rnti);
472 NS_FATAL_ERROR (
"unexpected event in state " << ToString (m_state));
478 LteUeRrc::DoNotifyRandomAccessFailed ()
485 LteUeRrc::DoForceCampedOnEnb (uint16_t cellId, uint16_t earfcn)
492 SwitchToState (IDLE_WAIT_SYSTEM_INFO);
496 LteUeRrc::DoConnect ()
501 case IDLE_CELL_SELECTION:
502 case IDLE_WAIT_SYSTEM_INFO:
506 case IDLE_CAMPED_NORMALLY:
510 case IDLE_RANDOM_ACCESS:
511 case IDLE_CONNECTING:
512 NS_LOG_WARN (
"already connecting (state " << ToString (m_state) <<
")");
515 case CONNECTED_NORMALLY:
516 case CONNECTED_REESTABLISHING:
517 case CONNECTED_HANDOVER:
518 NS_LOG_WARN (
"already connected (state " << ToString (m_state) <<
")");
522 NS_FATAL_ERROR (
"cannot connect while in state " << ToString (m_state));
534 LteUeRrc::DoRecvMasterInformationBlock (LteRrcSap::MasterInformationBlock msg)
542 SwitchToState (IDLE_CAMPED_NORMALLY);
551 LteUeRrc::DoCompleteSetup (LteUeRrcSapProvider::CompleteSetupParameters params)
554 m_srb0->m_rlc->SetLteRlcSapUser (params.srb0SapUser);
557 m_srb1->m_pdcp->SetLtePdcpSapUser (params.srb1SapUser);
563 LteUeRrc::DoRecvSystemInformationBlockType1 (LteRrcSap::SystemInformationBlockType1 msg)
571 LteUeRrc::DoRecvSystemInformation (LteRrcSap::SystemInformation msg)
579 LteUeCmacSapProvider::RachConfig rc;
580 rc.numberOfRaPreambles = msg.sib2.radioResourceConfigCommon.rachConfigCommon.preambleInfo.numberOfRaPreambles;
581 rc.preambleTransMax = msg.sib2.radioResourceConfigCommon.rachConfigCommon.raSupervisionInfo.preambleTransMax;
582 rc.raResponseWindowSize = msg.sib2.radioResourceConfigCommon.rachConfigCommon.raSupervisionInfo.raResponseWindowSize;
583 m_cmacSapProvider->ConfigureRach (rc);
588 SwitchToState (IDLE_CAMPED_NORMALLY);
594 LteUeRrc::DoRecvRrcConnectionSetup (LteRrcSap::RrcConnectionSetup msg)
599 case IDLE_CONNECTING:
601 ApplyRadioResourceConfigDedicated (msg.radioResourceConfigDedicated);
602 SwitchToState (CONNECTED_NORMALLY);
603 LteRrcSap::RrcConnectionSetupCompleted msg2;
604 msg2.rrcTransactionIdentifier = msg.rrcTransactionIdentifier;
605 m_rrcSapUser->SendRrcConnectionSetupCompleted (msg2);
607 m_connectionEstablishedTrace (m_imsi, m_cellId, m_rnti);
612 NS_FATAL_ERROR (
"method unexpected in state " << ToString (m_state));
618 LteUeRrc::DoRecvRrcConnectionReconfiguration (LteRrcSap::RrcConnectionReconfiguration msg)
623 case CONNECTED_NORMALLY:
624 if (msg.haveMobilityControlInfo)
627 SwitchToState (CONNECTED_HANDOVER);
628 const LteRrcSap::MobilityControlInfo& mci = msg.mobilityControlInfo;
629 m_handoverStartTrace (m_imsi, m_cellId, m_rnti, mci.targetPhysCellId);
630 m_cmacSapProvider->
Reset ();
631 m_cphySapProvider->
Reset ();
632 m_cellId = mci.targetPhysCellId;
636 m_cphySapProvider->
SetDlBandwidth ( mci.carrierBandwidth.dlBandwidth);
637 m_cphySapProvider->
ConfigureUplink (mci.carrierFreq.ulCarrierFreq, mci.carrierBandwidth.ulBandwidth);
638 m_rnti = msg.mobilityControlInfo.newUeIdentity;
639 m_srb0->m_rlc->SetRnti (m_rnti);
640 NS_ASSERT_MSG (mci.haveRachConfigDedicated,
"handover is only supported with non-contention-based random access procedure");
642 m_cphySapProvider->
SetRnti (m_rnti);
643 m_lastRrcTransactionIdentifier = msg.rrcTransactionIdentifier;
644 NS_ASSERT (msg.haveRadioResourceConfigDedicated);
655 ApplyRadioResourceConfigDedicated (msg.radioResourceConfigDedicated);
662 if (msg.haveRadioResourceConfigDedicated)
664 ApplyRadioResourceConfigDedicated (msg.radioResourceConfigDedicated);
666 LteRrcSap::RrcConnectionReconfigurationCompleted msg2;
667 msg2.rrcTransactionIdentifier = msg.rrcTransactionIdentifier;
668 m_rrcSapUser->SendRrcConnectionReconfigurationCompleted (msg2);
669 m_connectionReconfigurationTrace (m_imsi, m_cellId, m_rnti);
674 NS_FATAL_ERROR (
"method unexpected in state " << ToString (m_state));
680 LteUeRrc::DoRecvRrcConnectionReestablishment (LteRrcSap::RrcConnectionReestablishment msg)
684 case CONNECTED_REESTABLISHING:
690 NS_FATAL_ERROR (
"method unexpected in state " << ToString (m_state));
696 LteUeRrc::DoRecvRrcConnectionReestablishmentReject (LteRrcSap::RrcConnectionReestablishmentReject msg)
701 case CONNECTED_REESTABLISHING:
703 LeaveConnectedMode ();
708 NS_FATAL_ERROR (
"method unexpected in state " << ToString (m_state));
714 LteUeRrc::DoRecvRrcConnectionRelease (LteRrcSap::RrcConnectionRelease msg)
720 LteUeRrc::DoRecvRrcConnectionReject (LteRrcSap::RrcConnectionReject msg)
723 m_cmacSapProvider->
Reset ();
724 SwitchToState (IDLE_CAMPED_NORMALLY);
730 LteUeRrc::ApplyRadioResourceConfigDedicated (LteRrcSap::RadioResourceConfigDedicated rrcd)
733 const struct LteRrcSap::PhysicalConfigDedicated& pcd = rrcd.physicalConfigDedicated;
735 if (pcd.haveAntennaInfoDedicated)
739 if (pcd.haveSoundingRsUlConfigDedicated)
744 std::list<LteRrcSap::SrbToAddMod>::const_iterator stamIt = rrcd.srbToAddModList.begin ();
745 if (stamIt != rrcd.srbToAddModList.end ())
750 NS_ASSERT_MSG ((m_state == IDLE_CONNECTING) || (m_state == CONNECTED_HANDOVER),
751 "unexpected state " << ToString (m_state));
752 NS_ASSERT_MSG (stamIt->srbIdentity == 1,
"only SRB1 supported");
754 const uint8_t lcid = 1;
756 Ptr<LteRlc> rlc = CreateObject<LteRlcAm> ();
757 rlc->SetLteMacSapProvider (m_macSapProvider);
758 rlc->SetRnti (m_rnti);
761 Ptr<LtePdcp> pdcp = CreateObject<LtePdcp> ();
762 pdcp->SetRnti (m_rnti);
763 pdcp->SetLcId (lcid);
764 pdcp->SetLtePdcpSapUser (m_drbPdcpSapUser);
765 pdcp->SetLteRlcSapProvider (rlc->GetLteRlcSapProvider ());
766 rlc->SetLteRlcSapUser (pdcp->GetLteRlcSapUser ());
768 m_srb1 = CreateObject<LteSignalingRadioBearerInfo> ();
770 m_srb1->m_pdcp = pdcp;
771 m_srb1->m_srbIdentity = 1;
773 m_srb1->m_logicalChannelConfig.priority = stamIt->logicalChannelConfig.priority;
774 m_srb1->m_logicalChannelConfig.prioritizedBitRateKbps = stamIt->logicalChannelConfig.prioritizedBitRateKbps;
775 m_srb1->m_logicalChannelConfig.bucketSizeDurationMs = stamIt->logicalChannelConfig.bucketSizeDurationMs;
776 m_srb1->m_logicalChannelConfig.logicalChannelGroup = stamIt->logicalChannelConfig.logicalChannelGroup;
778 struct LteUeCmacSapProvider::LogicalChannelConfig lcConfig;
779 lcConfig.priority = stamIt->logicalChannelConfig.priority;
780 lcConfig.prioritizedBitRateKbps = stamIt->logicalChannelConfig.prioritizedBitRateKbps;
781 lcConfig.bucketSizeDurationMs = stamIt->logicalChannelConfig.bucketSizeDurationMs;
782 lcConfig.logicalChannelGroup = stamIt->logicalChannelConfig.logicalChannelGroup;
784 m_cmacSapProvider->
AddLc (lcid, lcConfig, rlc->GetLteMacSapUser ());
787 NS_ASSERT_MSG (stamIt == rrcd.srbToAddModList.end (),
"at most one SrbToAdd supported");
789 LteUeRrcSapUser::SetupParameters ueParams;
790 ueParams.srb0SapProvider = m_srb0->m_rlc->GetLteRlcSapProvider ();
791 ueParams.srb1SapProvider = m_srb1->m_pdcp->GetLtePdcpSapProvider ();
792 m_rrcSapUser->Setup (ueParams);
796 NS_LOG_INFO (
"request to modify SRB1 (skipping as currently not implemented)");
802 std::list<LteRrcSap::DrbToAddMod>::const_iterator dtamIt;
803 for (dtamIt = rrcd.drbToAddModList.begin ();
804 dtamIt != rrcd.drbToAddModList.end ();
807 NS_LOG_INFO (
this <<
" IMSI " << m_imsi <<
" adding/modifying DRBID " << (uint32_t) dtamIt->drbIdentity <<
" LC " << (uint32_t) dtamIt->logicalChannelIdentity);
808 NS_ASSERT_MSG (dtamIt->logicalChannelIdentity > 2,
"LCID value " << dtamIt->logicalChannelIdentity <<
" is reserved for SRBs");
810 std::map<uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator drbMapIt = m_drbMap.find (dtamIt->drbIdentity);
811 if (drbMapIt == m_drbMap.end ())
818 rlcTypeId = LteRlcSm::GetTypeId ();
822 switch (dtamIt->rlcConfig.choice)
824 case LteRrcSap::RlcConfig::AM:
825 rlcTypeId = LteRlcAm::GetTypeId ();
828 case LteRrcSap::RlcConfig::UM_BI_DIRECTIONAL:
829 rlcTypeId = LteRlcUm::GetTypeId ();
838 ObjectFactory rlcObjectFactory;
839 rlcObjectFactory.SetTypeId (rlcTypeId);
840 Ptr<LteRlc> rlc = rlcObjectFactory.Create ()->GetObject<LteRlc> ();
841 rlc->SetLteMacSapProvider (m_macSapProvider);
842 rlc->SetRnti (m_rnti);
843 rlc->SetLcId (dtamIt->logicalChannelIdentity);
845 Ptr<LteDataRadioBearerInfo> drbInfo = CreateObject<LteDataRadioBearerInfo> ();
846 drbInfo->m_rlc = rlc;
847 drbInfo->m_epsBearerIdentity = dtamIt->epsBearerIdentity;
848 drbInfo->m_logicalChannelIdentity = dtamIt->logicalChannelIdentity;
849 drbInfo->m_drbIdentity = dtamIt->drbIdentity;
853 if (rlcTypeId != LteRlcSm::GetTypeId ())
855 Ptr<LtePdcp> pdcp = CreateObject<LtePdcp> ();
856 pdcp->SetRnti (m_rnti);
857 pdcp->SetLcId (dtamIt->logicalChannelIdentity);
858 pdcp->SetLtePdcpSapUser (m_drbPdcpSapUser);
859 pdcp->SetLteRlcSapProvider (rlc->GetLteRlcSapProvider ());
860 rlc->SetLteRlcSapUser (pdcp->GetLteRlcSapUser ());
861 drbInfo->m_pdcp = pdcp;
864 m_bid2DrbidMap[dtamIt->epsBearerIdentity] = dtamIt->drbIdentity;
866 m_drbMap.insert (std::pair<uint8_t, Ptr<LteDataRadioBearerInfo> > (dtamIt->drbIdentity, drbInfo));
869 struct LteUeCmacSapProvider::LogicalChannelConfig lcConfig;
870 lcConfig.priority = dtamIt->logicalChannelConfig.priority;
871 lcConfig.prioritizedBitRateKbps = dtamIt->logicalChannelConfig.prioritizedBitRateKbps;
872 lcConfig.bucketSizeDurationMs = dtamIt->logicalChannelConfig.bucketSizeDurationMs;
873 lcConfig.logicalChannelGroup = dtamIt->logicalChannelConfig.logicalChannelGroup;
875 m_cmacSapProvider->
AddLc (dtamIt->logicalChannelIdentity,
877 rlc->GetLteMacSapUser ());
883 Ptr<LteDataRadioBearerInfo> drbInfo = drbMapIt->second;
888 std::list<uint8_t>::iterator dtdmIt;
889 for (dtdmIt = rrcd.drbToReleaseList.begin ();
890 dtdmIt != rrcd.drbToReleaseList.end ();
893 uint8_t drbid = *dtdmIt;
894 NS_LOG_INFO (
this <<
" IMSI " << m_imsi <<
" releasing DRB " << (uint32_t) drbid << drbid);
895 std::map<uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator it = m_drbMap.find (drbid);
896 NS_ASSERT_MSG (it != m_drbMap.end (),
"could not find bearer with given lcid");
898 m_bid2DrbidMap.erase (drbid);
904 LteUeRrc::StartConnection ()
908 SwitchToState (IDLE_RANDOM_ACCESS);
913 LteUeRrc::LeaveConnectedMode ()
918 std::map<uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator it;
919 for (it = m_drbMap.begin (); it != m_drbMap.end (); ++it)
921 m_cmacSapProvider->
RemoveLc (it->second->m_logicalChannelIdentity);
924 m_bid2DrbidMap.clear ();
926 SwitchToState (IDLE_CAMPED_NORMALLY);
930 LteUeRrc::DisposeOldSrb1 ()
937 LteUeRrc::Bid2Drbid (uint8_t bid)
939 std::map<uint8_t, uint8_t>::iterator it = m_bid2DrbidMap.find (bid);
940 NS_ASSERT_MSG (it != m_bid2DrbidMap.end (),
"could not find BID " << bid);
946 LteUeRrc::SwitchToState (State newState)
949 State oldState = m_state;
951 NS_LOG_INFO (
"IMSI " << m_imsi <<
" RNTI " << m_rnti <<
" UeRrc " << ToString (oldState) <<
" --> " << ToString (newState));
952 m_stateTransitionTrace (m_imsi, m_cellId, m_rnti, oldState, newState);
956 case IDLE_CELL_SELECTION:
959 case IDLE_WAIT_SYSTEM_INFO:
962 case IDLE_CAMPED_NORMALLY:
969 case IDLE_RANDOM_ACCESS:
972 case IDLE_CONNECTING:
975 case CONNECTED_NORMALLY:
978 case CONNECTED_REESTABLISHING:
981 case CONNECTED_HANDOVER:
smart pointer class similar to boost::intrusive_ptr
#define NS_LOG_FUNCTION(parameters)
void SetAsSapUser(LteAsSapUser *s)
virtual void DoDispose(void)
void SetUseRlcSm(bool val)
#define NS_ASSERT(condition)
#define NS_LOG_COMPONENT_DEFINE(name)
virtual void StartContentionBasedRandomAccessProcedure()=0
uint32_t GetSize(void) const
virtual void NotifyRandomAccessSuccessful()
virtual void SetRnti(uint16_t rnti)=0
virtual void NotifyConnectionSuccessful()=0
uint16_t GetUlEarfcn() const
virtual void RemoveLc(uint8_t lcId)=0
#define NS_FATAL_ERROR(msg)
fatal error handling
LteUeCmacSapUser * GetLteUeCmacSapUser()
void SetLteUeRrcSapUser(LteUeRrcSapUser *s)
Hold an unsigned integer type.
virtual void DoInitialize(void)
uint8_t GetUlBandwidth() const
void SetLteUeCmacSapProvider(LteUeCmacSapProvider *s)
#define NS_LOG_LOGIC(msg)
void SetLteMacSapProvider(LteMacSapProvider *s)
virtual void SyncronizeWithEnb(uint16_t cellId, uint16_t dlEarfcn)=0
void SetLteUeCphySapProvider(LteUeCphySapProvider *s)
virtual void SetSrsConfigurationIndex(uint16_t srcCi)=0
hold objects of type Ptr<T>
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
uint8_t GetDlBandwidth() const
uint16_t GetDlEarfcn() const
static EventId ScheduleNow(MEM mem_ptr, OBJ obj)
virtual void AddLc(uint8_t lcId, LogicalChannelConfig lcConfig, LteMacSapUser *msu)=0
#define NS_ASSERT_MSG(condition, message)
LteUeCphySapUser * GetLteUeCphySapUser()
virtual void StartNonContentionBasedRandomAccessProcedure(uint16_t rnti, uint8_t rapId, uint8_t prachMask)=0
virtual void SetDlBandwidth(uint8_t dlBandwidth)=0
virtual void SetTransmissionMode(uint8_t txMode)=0
uint16_t GetCellId() const
virtual void NotifyConnectionReleased()=0
LteAsSapProvider * GetAsSapProvider()
a base class which provides memory management and object aggregation
contain a set of ns3::Object pointers.
virtual void RecvData(Ptr< Packet > packet)=0
LteUeRrcSapProvider * GetLteUeRrcSapProvider()
virtual void SetTemporaryCellRnti(uint16_t rnti)
a unique identifier for an interface.
virtual void ConfigureUplink(uint16_t ulEarfcn, uint8_t ulBandwidth)=0
TypeId SetParent(TypeId tid)
void SetImsi(uint64_t imsi)
virtual void NotifyRandomAccessFailed()