22 #include <ns3/fatal-error.h>
24 #include <ns3/nstime.h>
25 #include <ns3/node-list.h>
27 #include <ns3/simulator.h>
46 : m_ueRrcSapProvider (0),
47 m_enbRrcSapProvider (0)
73 .AddConstructor<LteUeRrcProtocolReal> ()
119 packet->
AddHeader (rrcConnectionRequestHeader);
122 transmitPdcpPduParameters.
pdcpPdu = packet;
124 transmitPdcpPduParameters.
lcid = 0;
135 rrcConnectionSetupCompleteHeader.
SetMessage (msg);
137 packet->
AddHeader (rrcConnectionSetupCompleteHeader);
140 transmitPdcpSduParameters.
pdcpSdu = packet;
142 transmitPdcpSduParameters.
lcid = 1;
161 rrcConnectionReconfigurationCompleteHeader.
SetMessage (msg);
163 packet->
AddHeader (rrcConnectionReconfigurationCompleteHeader);
166 transmitPdcpSduParameters.
pdcpSdu = packet;
168 transmitPdcpSduParameters.
lcid = 1;
186 packet->
AddHeader (measurementReportHeader);
189 transmitPdcpSduParameters.
pdcpSdu = packet;
191 transmitPdcpSduParameters.
lcid = 1;
202 rrcConnectionReestablishmentRequestHeader.
SetMessage (msg);
204 packet->
AddHeader (rrcConnectionReestablishmentRequestHeader);
207 transmitPdcpPduParameters.
pdcpPdu = packet;
209 transmitPdcpPduParameters.
lcid = 0;
220 rrcConnectionReestablishmentCompleteHeader.
SetMessage (msg);
222 packet->
AddHeader (rrcConnectionReestablishmentCompleteHeader);
225 transmitPdcpSduParameters.
pdcpSdu = packet;
227 transmitPdcpSduParameters.
lcid = 1;
236 uint16_t cellId =
m_rrc->GetCellId ();
243 (i != listEnd) && (!found);
249 (j < nDevs) && (!found);
259 if (enbDev->GetCellId () == cellId)
267 NS_ASSERT_MSG (found,
" Unable to find eNB with CellId =" << cellId);
298 rrcConnectionReestablishmentMsg = rrcConnectionReestablishmentHeader.
GetMessage ();
303 p->
RemoveHeader (rrcConnectionReestablishmentRejectHeader);
304 rrcConnectionReestablishmentRejectMsg = rrcConnectionReestablishmentRejectHeader.
GetMessage ();
310 rrcConnectionRejectMsg = rrcConnectionRejectHeader.
GetMessage ();
316 rrcConnectionSetupMsg = rrcConnectionSetupHeader.
GetMessage ();
342 rrcConnectionReconfigurationMsg = rrcConnectionReconfigurationHeader.
GetMessage ();
347 rrcConnectionReleaseMsg = rrcConnectionReleaseHeader.
GetMessage ();
356 : m_enbRrcSapProvider (0)
372 for (std::map<uint16_t, LteEnbRrcSapProvider::CompleteSetupUeParameters>::iterator
377 delete it->second.srb0SapUser;
378 delete it->second.srb1SapUser;
386 static TypeId tid =
TypeId (
"ns3::LteEnbRrcProtocolReal")
388 .AddConstructor<LteEnbRrcProtocolReal> ()
414 std::map<uint16_t, LteUeRrcSapProvider*>::const_iterator it;
423 std::map<uint16_t, LteUeRrcSapProvider*>::iterator it;
472 std::map<uint16_t, LteEnbRrcSapProvider::CompleteSetupUeParameters>::iterator
479 completeSetupUeParameters.
srb0SapUser = srb0SapUser;
480 completeSetupUeParameters.
srb1SapUser = srb1SapUser;
486 completeSetupUeParameters = csupIt->second;
495 std::map<uint16_t, LteEnbRrcSapProvider::CompleteSetupUeParameters>::iterator
498 delete it->second.srb0SapUser;
499 delete it->second.srb1SapUser;
530 for (
int j = 0; j < nDevs; ++j)
537 if (ueRrc->GetCellId () ==
m_cellId)
541 ueRrc->GetLteUeRrcSapProvider (),
559 for (
int j = 0; j < nDevs; ++j)
565 NS_LOG_LOGIC (
"considering UE IMSI " << ueDev->GetImsi () <<
" that has cellId " << ueRrc->GetCellId ());
566 if (ueRrc->GetCellId () ==
m_cellId)
568 NS_LOG_LOGIC (
"sending SI to IMSI " << ueDev->GetImsi ());
569 ueRrc->GetLteUeRrcSapProvider ()->RecvSystemInformation (msg);
572 ueRrc->GetLteUeRrcSapProvider (),
588 packet->
AddHeader (rrcConnectionSetupHeader);
591 transmitPdcpPduParameters.
pdcpPdu = packet;
592 transmitPdcpPduParameters.
rnti = rnti;
593 transmitPdcpPduParameters.
lcid = 0;
597 std::cout <<
"RNTI not found in Enb setup parameters Map!" << std::endl;
613 packet->
AddHeader (rrcConnectionRejectHeader);
616 transmitPdcpPduParameters.
pdcpPdu = packet;
617 transmitPdcpPduParameters.
rnti = rnti;
618 transmitPdcpPduParameters.
lcid = 0;
629 rrcConnectionReconfigurationHeader.
SetMessage (msg);
631 packet->
AddHeader (rrcConnectionReconfigurationHeader);
634 transmitPdcpSduParameters.
pdcpSdu = packet;
635 transmitPdcpSduParameters.
rnti = rnti;
636 transmitPdcpSduParameters.
lcid = 1;
647 rrcConnectionReestablishmentHeader.
SetMessage (msg);
649 packet->
AddHeader (rrcConnectionReestablishmentHeader);
652 transmitPdcpPduParameters.
pdcpPdu = packet;
653 transmitPdcpPduParameters.
rnti = rnti;
654 transmitPdcpPduParameters.
lcid = 0;
665 rrcConnectionReestablishmentRejectHeader.
SetMessage (msg);
667 packet->
AddHeader (rrcConnectionReestablishmentRejectHeader);
670 transmitPdcpPduParameters.
pdcpPdu = packet;
671 transmitPdcpPduParameters.
rnti = rnti;
672 transmitPdcpPduParameters.
lcid = 0;
685 packet->
AddHeader (rrcConnectionReleaseHeader);
688 transmitPdcpSduParameters.
pdcpSdu = packet;
689 transmitPdcpSduParameters.
rnti = rnti;
690 transmitPdcpSduParameters.
lcid = 1;
710 p->
RemoveHeader (rrcConnectionReestablishmentRequestHeader);
712 rrcConnectionReestablishmentRequestMsg = rrcConnectionReestablishmentRequestHeader.
GetMessage ();
718 rrcConnectionRequestMsg = rrcConnectionRequestHeader.
GetMessage ();
748 measurementReportMsg = measurementReportHeader.
GetMessage ();
753 rrcConnectionReconfigurationCompleteMsg = rrcConnectionReconfigurationCompleteHeader.
GetMessage ();
758 rrcConnectionReestablishmentCompleteMsg = rrcConnectionReestablishmentCompleteHeader.
GetMessage ();
763 rrcConnectionSetupCompletedMsg = rrcConnectionSetupCompleteHeader.
GetMessage ();
virtual void DoDispose(void)
uint32_t RemoveHeader(Header &header)
virtual void ReceivePdcpPdu(Ptr< Packet > p)
void DoSetup(LteUeRrcSapUser::SetupParameters params)
LtePdcpSapProvider * srb1SapProvider
keep track of time values and allow control of global simulation resolution
void DoSendMeasurementReport(LteRrcSap::MeasurementReport msg)
smart pointer class similar to boost::intrusive_ptr
#define NS_LOG_FUNCTION(parameters)
virtual void RecvMasterInformationBlock(MasterInformationBlock msg)=0
virtual void RecvRrcConnectionSetupCompleted(uint16_t rnti, RrcConnectionSetupCompleted msg)=0
LteUeRrcSapProvider * m_ueRrcSapProvider
void DoSendRrcConnectionReject(uint16_t rnti, LteRrcSap::RrcConnectionReject msg)
virtual void DoDispose(void)
void DoSendRrcConnectionRelease(uint16_t rnti, LteRrcSap::RrcConnectionRelease msg)
friend class RealProtocolRlcSapUser
virtual ~LteEnbRrcProtocolReal()
LteRlcSapUser * srb0SapUser
#define NS_ASSERT(condition)
#define NS_LOG_COMPONENT_DEFINE(name)
static TypeId GetTypeId(void)
Ptr< Packet > DoEncodeHandoverCommand(LteRrcSap::RrcConnectionReconfiguration msg)
LteUeRrcSapProvider::CompleteSetupParameters m_completeSetupParameters
LteRrcSap::RrcConnectionReconfiguration DoDecodeHandoverCommand(Ptr< Packet > p)
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
Ptr< Packet > DoEncodeHandoverPreparationInformation(LteRrcSap::HandoverPreparationInfo msg)
virtual void TransmitPdcpPdu(TransmitPdcpPduParameters params)=0
LtePdcpSapUser * srb1SapUser
LteUeRrcSapProvider * GetUeRrcSapProvider(uint16_t rnti)
std::map< uint16_t, LteEnbRrcSapUser::SetupUeParameters > m_setupUeParametersMap
LteRrcSap::HandoverPreparationInfo GetMessage() const
std::map< uint16_t, LteUeRrcSapProvider * > m_enbRrcSapProviderMap
LteUeRrcSapUser * m_ueRrcSapUser
virtual void RecvRrcConnectionReject(RrcConnectionReject msg)=0
void SetLteEnbRrcSapProvider(LteEnbRrcSapProvider *p)
void DoSendRrcConnectionSetup(uint16_t rnti, LteRrcSap::RrcConnectionSetup msg)
virtual ~LteUeRrcProtocolReal()
void DoSendSystemInformationBlockType1(LteRrcSap::SystemInformationBlockType1 msg)
void SetUeRrcSapProvider(uint16_t rnti, LteUeRrcSapProvider *p)
virtual void RecvSystemInformationBlockType1(SystemInformationBlockType1 msg)=0
void DoSendRrcConnectionReestablishmentRequest(LteRrcSap::RrcConnectionReestablishmentRequest msg)
static Iterator End(void)
const Time RRC_REAL_MSG_DELAY
virtual void RecvRrcConnectionReconfiguration(RrcConnectionReconfiguration msg)=0
NS_OBJECT_ENSURE_REGISTERED(AntennaModel)
std::map< uint16_t, LteEnbRrcSapProvider::CompleteSetupUeParameters > m_completeSetupUeParametersMap
virtual void RecvRrcConnectionReestablishment(RrcConnectionReestablishment msg)=0
void DoReceivePdcpPdu(Ptr< Packet > p)
Ptr< NetDevice > GetDevice(uint32_t index) const
void SetEnbRrcSapProvider()
LteEnbRrcSapUser * GetLteEnbRrcSapUser()
#define NS_LOG_LOGIC(msg)
uint32_t GetNDevices(void) const
uint32_t PeekHeader(Header &header) const
void DoSendRrcConnectionReestablishmentReject(uint16_t rnti, LteRrcSap::RrcConnectionReestablishmentReject msg)
virtual void RecvRrcConnectionSetup(RrcConnectionSetup msg)=0
std::vector< Ptr< Node > >::const_iterator Iterator
virtual void CompleteSetup(CompleteSetupParameters params)=0
void DoSendRrcConnectionReconfiguration(uint16_t rnti, LteRrcSap::RrcConnectionReconfiguration msg)
virtual void RecvRrcConnectionRequest(uint16_t rnti, RrcConnectionRequest msg)=0
void DoSendRrcConnectionReestablishment(uint16_t rnti, LteRrcSap::RrcConnectionReestablishment msg)
LtePdcpSapUser * srb1SapUser
LteEnbRrcSapProvider * m_enbRrcSapProvider
virtual void RecvSystemInformation(SystemInformation msg)=0
LteRlcSapUser * srb0SapUser
void DoReceivePdcpSdu(LtePdcpSapUser::ReceivePdcpSduParameters params)
void SetMessage(LteRrcSap::HandoverPreparationInfo msg)
void DoSendRrcConnectionReestablishmentComplete(LteRrcSap::RrcConnectionReestablishmentComplete msg)
virtual void TransmitPdcpSdu(TransmitPdcpSduParameters params)=0
void DoSendRrcConnectionSetupCompleted(LteRrcSap::RrcConnectionSetupCompleted msg)
#define NS_ASSERT_MSG(condition, message)
void DoSendRrcConnectionReconfigurationCompleted(LteRrcSap::RrcConnectionReconfigurationCompleted msg)
static TypeId GetTypeId(void)
LteUeRrcSapUser::SetupParameters m_setupParameters
void DoSendRrcConnectionRequest(LteRrcSap::RrcConnectionRequest msg)
virtual void RecvRrcConnectionReestablishmentRequest(uint16_t rnti, RrcConnectionReestablishmentRequest msg)=0
static Iterator Begin(void)
void DoReceivePdcpPdu(uint16_t rnti, Ptr< Packet > p)
LteRlcSapProvider * srb0SapProvider
LteEnbRrcSapUser * m_enbRrcSapUser
virtual void RecvMeasurementReport(uint16_t rnti, MeasurementReport msg)=0
LteRrcSap::HandoverPreparationInfo DoDecodeHandoverPreparationInformation(Ptr< Packet > p)
LteEnbRrcSapProvider * m_enbRrcSapProvider
void DoReceivePdcpSdu(LtePdcpSapUser::ReceivePdcpSduParameters params)
void SetCellId(uint16_t cellId)
virtual void RecvRrcConnectionReestablishmentComplete(uint16_t rnti, RrcConnectionReestablishmentComplete msg)=0
virtual void CompleteSetupUe(uint16_t rnti, CompleteSetupUeParameters params)=0
a base class which provides memory management and object aggregation
LteUeRrcSapUser * GetLteUeRrcSapUser()
LteEnbRrcProtocolReal * m_pdcp
void SetLteUeRrcSapProvider(LteUeRrcSapProvider *p)
virtual void RecvRrcConnectionReconfigurationCompleted(uint16_t rnti, RrcConnectionReconfigurationCompleted msg)=0
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
void DoSetupUe(uint16_t rnti, LteEnbRrcSapUser::SetupUeParameters params)
void DoRemoveUe(uint16_t rnti)
void DoSendMasterInformationBlock(LteRrcSap::MasterInformationBlock msg)
void SetUeRrc(Ptr< LteUeRrc > rrc)
void AddHeader(const Header &header)
void DoSendSystemInformation(LteRrcSap::SystemInformation msg)