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"
31 #include "lte-enb-rrc.h"
33 #include "lte-enb-net-device.h"
34 #include "lte-radio-bearer-info.h"
35 #include "eps-bearer-tag.h"
36 #include "ff-mac-csched-sap.h"
37 #include "epc-enb-s1-sap.h"
40 #include "lte-rlc-tm.h"
41 #include "lte-rlc-um.h"
42 #include "lte-rlc-am.h"
44 #include "lte-pdcp-sap.h"
46 #include <ns3/simulator.h>
74 EnbRrcMemberLteEnbCmacSapUser::EnbRrcMemberLteEnbCmacSapUser (
LteEnbRrc* rrc)
82 return m_rrc->DoAllocateTemporaryCellRnti ();
88 m_rrc->DoNotifyLcConfigResult (rnti, lcid, success);
94 m_rrc->DoRrcConfigurationUpdateInd (params);
98 const char* g_ueManagerStateName[UeManager::NUM_STATES] =
100 "INITIAL_RANDOM_ACCESS",
102 "CONNECTION_REJECTED",
103 "CONNECTED_NORMALLY",
104 "CONNECTION_RECONFIGURATION",
105 "CONNECTION_REESTABLISHMENT",
106 "HANDOVER_PREPARATION",
108 "HANDOVER_PATH_SWITCH",
114 return std::string (g_ueManagerStateName[s]);
124 NS_OBJECT_ENSURE_REGISTERED (UeManager);
127 UeManager::UeManager ()
134 : m_lastAllocatedDrbid (0),
137 m_lastRrcTransactionIdentifier (0),
140 m_pendingRrcConnectionReconfiguration (false),
143 m_needTransmissionModeConfiguration (false)
154 m_physicalConfigDedicated.haveAntennaInfoDedicated =
true;
155 m_physicalConfigDedicated.antennaInfo.transmissionMode = m_rrc->m_defaultTransmissionMode;
156 m_physicalConfigDedicated.haveSoundingRsUlConfigDedicated =
true;
157 m_physicalConfigDedicated.soundingRsUlConfigDedicated.srsConfigIndex = m_rrc->GetNewSrsConfigurationIndex ();
158 m_physicalConfigDedicated.soundingRsUlConfigDedicated.type = LteRrcSap::SoundingRsUlConfigDedicated::SETUP;
159 m_physicalConfigDedicated.soundingRsUlConfigDedicated.srsBandwidth = 0;
161 m_rrc->m_cmacSapProvider->AddUe (m_rnti);
162 m_rrc->m_cphySapProvider->AddUe (m_rnti);
168 Ptr<LteRlc> rlc = CreateObject<LteRlcTm> ()->GetObject<LteRlc> ();
169 rlc->SetLteMacSapProvider (m_rrc->m_macSapProvider);
170 rlc->SetRnti (m_rnti);
173 m_srb0 = CreateObject<LteSignalingRadioBearerInfo> ();
175 m_srb0->m_srbIdentity = 0;
179 lcinfo.
rnti = m_rnti;
182 m_rrc->m_cmacSapProvider->AddLc (lcinfo, rlc->GetLteMacSapUser ());
190 Ptr<LteRlc> rlc = CreateObject<LteRlcAm> ()->GetObject<LteRlc> ();
191 rlc->SetLteMacSapProvider (m_rrc->m_macSapProvider);
192 rlc->SetRnti (m_rnti);
196 pdcp->SetRnti (m_rnti);
197 pdcp->SetLcId (lcid);
198 pdcp->SetLtePdcpSapUser (m_drbPdcpSapUser);
199 pdcp->SetLteRlcSapProvider (rlc->GetLteRlcSapProvider ());
200 rlc->SetLteRlcSapUser (pdcp->GetLteRlcSapUser ());
202 m_srb1 = CreateObject<LteSignalingRadioBearerInfo> ();
204 m_srb1->m_pdcp = pdcp;
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;
212 lcinfo.
rnti = m_rnti;
215 lcinfo.
qci = EpsBearer::GBR_CONV_VOICE;
221 m_rrc->m_cmacSapProvider->AddLc (lcinfo, rlc->GetLteMacSapUser ());
225 ueParams.srb0SapProvider = m_srb0->m_rlc->GetLteRlcSapProvider ();
226 ueParams.srb1SapProvider = m_srb1->m_pdcp->GetLtePdcpSapProvider ();
227 m_rrc->m_rrcSapUser->SetupUe (m_rnti, ueParams);
233 m_rrc->m_cmacSapProvider->UeUpdateConfigurationReq (req);
236 m_rrc->m_cphySapProvider->SetTransmissionMode (m_rnti, m_physicalConfigDedicated.antennaInfo.transmissionMode);
237 m_rrc->m_cphySapProvider->SetSrsConfigurationIndex (m_rnti, m_physicalConfigDedicated.soundingRsUlConfigDedicated.srsConfigIndex);
240 Time maxConnectionDelay;
243 case INITIAL_RANDOM_ACCESS:
247 case HANDOVER_JOINING:
254 NS_FATAL_ERROR (
"unspecified maxConnectionDelay for state " << ToString (m_state));
261 UeManager::~UeManager (
void)
268 delete m_drbPdcpSapUser;
271 it != m_drbMap.end ();
274 m_rrc->m_x2uTeidInfoMap.erase (it->second->m_gtpTeid);
278 TypeId UeManager::GetTypeId (
void)
282 .AddConstructor<UeManager> ()
283 .AddAttribute (
"DataRadioBearerMap",
"List of UE DataRadioBearerInfo by DRBID.",
285 MakeObjectMapAccessor (&UeManager::m_drbMap),
286 MakeObjectMapChecker<LteDataRadioBearerInfo> ())
287 .AddAttribute (
"Srb0",
"SignalingRadioBearerInfo for SRB0",
289 MakePointerAccessor (&UeManager::m_srb0),
290 MakePointerChecker<LteSignalingRadioBearerInfo> ())
291 .AddAttribute (
"Srb1",
"SignalingRadioBearerInfo for SRB1",
293 MakePointerAccessor (&UeManager::m_srb1),
294 MakePointerChecker<LteSignalingRadioBearerInfo> ())
295 .AddAttribute (
"C-RNTI",
296 "Cell Radio Network Temporary Identifier",
299 MakeUintegerAccessor (&UeManager::m_rnti),
300 MakeUintegerChecker<uint16_t> ())
301 .AddTraceSource (
"StateTransition",
302 "fired upon every UE state transition seen by the UeManager at the eNB RRC",
311 m_sourceX2apId = sourceX2apId;
312 m_sourceCellId = sourceCellId;
330 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");
331 drbInfo->m_epsBearerIdentity = bid;
332 drbInfo->m_drbIdentity = drbid;
333 drbInfo->m_logicalChannelIdentity = lcid;
334 drbInfo->m_gtpTeid = gtpTeid;
335 drbInfo->m_transportLayerAddress = transportLayerAddress;
337 if (m_state == HANDOVER_JOINING)
341 x2uTeidInfo.rnti = m_rnti;
342 x2uTeidInfo.drbid = drbid;
343 std::pair<std::map<uint32_t, LteEnbRrc::X2uTeidInfo>::iterator,
bool>
344 ret = m_rrc->m_x2uTeidInfoMap.insert (std::pair<uint32_t, LteEnbRrc::X2uTeidInfo> (gtpTeid, x2uTeidInfo));
345 NS_ASSERT_MSG (ret.second ==
true,
"overwriting a pre-existing entry in m_x2uTeidInfoMap");
348 TypeId rlcTypeId = m_rrc->GetRlcType (bearer);
353 rlc->SetLteMacSapProvider (m_rrc->m_macSapProvider);
354 rlc->SetRnti (m_rnti);
356 drbInfo->m_rlc = rlc;
362 if (rlcTypeId != LteRlcSm::GetTypeId ())
365 pdcp->SetRnti (m_rnti);
366 pdcp->SetLcId (lcid);
367 pdcp->SetLtePdcpSapUser (m_drbPdcpSapUser);
368 pdcp->SetLteRlcSapProvider (rlc->GetLteRlcSapProvider ());
369 rlc->SetLteRlcSapUser (pdcp->GetLteRlcSapUser ());
370 drbInfo->m_pdcp = pdcp;
374 lcinfo.
rnti = m_rnti;
376 lcinfo.
lcGroup = m_rrc->GetLogicalChannelGroup (bearer);
377 lcinfo.
qci = bearer.qci;
383 m_rrc->m_cmacSapProvider->AddLc (lcinfo, rlc->GetLteMacSapUser ());
385 if (rlcTypeId == LteRlcAm::GetTypeId ())
387 drbInfo->m_rlcConfig.choice = LteRrcSap::RlcConfig::AM;
391 drbInfo->m_rlcConfig.choice = LteRrcSap::RlcConfig::UM_BI_DIRECTIONAL;
394 drbInfo->m_logicalChannelIdentity = lcid;
395 drbInfo->m_logicalChannelConfig.priority = m_rrc->GetLogicalChannelPriority (bearer);
396 drbInfo->m_logicalChannelConfig.logicalChannelGroup = m_rrc->GetLogicalChannelGroup (bearer);
399 drbInfo->m_logicalChannelConfig.prioritizedBitRateKbps = bearer.gbrQosInfo.
gbrUl;
403 drbInfo->m_logicalChannelConfig.prioritizedBitRateKbps = 0;
405 drbInfo->m_logicalChannelConfig.bucketSizeDurationMs = 1000;
415 it != m_drbMap.end ();
418 m_drbsToBeStarted.push_back (it->first);
426 for (std::list <uint8_t>::iterator drbIdIt = m_drbsToBeStarted.begin ();
427 drbIdIt != m_drbsToBeStarted.end ();
430 std::map <uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator drbIt = m_drbMap.find (*drbIdIt);
432 drbIt->second->m_rlc->Initialize ();
433 if (drbIt->second->m_pdcp)
435 drbIt->second->m_pdcp->Initialize ();
438 m_drbsToBeStarted.clear ();
447 std::map <uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator it = m_drbMap.find (drbid);
448 NS_ASSERT_MSG (it != m_drbMap.end (),
"request to remove radio bearer with unknown drbid " << drbid);
451 m_rrc->m_x2uTeidInfoMap.erase (it->second->m_gtpTeid);
454 m_rrc->m_cmacSapProvider->ReleaseLc (m_rnti, lcid);
457 rrcd.havePhysicalConfigDedicated =
false;
458 rrcd.drbToReleaseList.push_back (drbid);
461 msg.haveMeasConfig =
false;
462 msg.haveMobilityControlInfo =
false;
464 m_rrc->m_rrcSapUser->SendRrcConnectionReconfiguration (m_rnti, msg);
474 case INITIAL_RANDOM_ACCESS:
475 case CONNECTION_SETUP:
476 case CONNECTION_RECONFIGURATION:
477 case CONNECTION_REESTABLISHMENT:
478 case HANDOVER_PREPARATION:
479 case HANDOVER_JOINING:
480 case HANDOVER_LEAVING:
482 m_pendingRrcConnectionReconfiguration =
true;
485 case CONNECTED_NORMALLY:
487 m_pendingRrcConnectionReconfiguration =
false;
489 m_rrc->m_rrcSapUser->SendRrcConnectionReconfiguration (m_rnti, msg);
496 NS_FATAL_ERROR (
"method unexpected in state " << ToString (m_state));
507 case CONNECTED_NORMALLY:
509 m_targetCellId = cellId;
511 params.oldEnbUeX2apId = m_rnti;
512 params.cause = EpcX2SapProvider::HandoverDesirableForRadioReason;
513 params.sourceCellId = m_rrc->m_cellId;
514 params.targetCellId = cellId;
515 params.mmeUeS1apId = m_imsi;
516 params.ueAggregateMaxBitRateDownlink = 200 * 1000;
517 params.ueAggregateMaxBitRateUplink = 100 * 1000;
521 hpi.asConfig.sourceMeasConfig.haveQuantityConfig =
false;
522 hpi.asConfig.sourceMeasConfig.haveMeasGapConfig =
false;
523 hpi.asConfig.sourceMeasConfig.haveSmeasure =
false;
524 hpi.asConfig.sourceMeasConfig.haveSpeedStatePars =
false;
525 hpi.asConfig.sourceUeIdentity = m_rnti;
526 hpi.asConfig.sourceDlCarrierFreq = m_rrc->m_dlEarfcn;
528 hpi.asConfig.sourceMasterInformationBlock.dlBandwidth = m_rrc->m_dlBandwidth;
529 hpi.asConfig.sourceMasterInformationBlock.systemFrameNumber = 0;
530 hpi.asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.plmnIdentityInfo.plmnIdentity = 0;
531 hpi.asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.cellIdentity = m_rrc->m_cellId;
532 hpi.asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.csgIndication = 0;
533 hpi.asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.csgIdentity = 0;
535 hpi.asConfig.sourceSystemInformationBlockType2.radioResourceConfigCommon.rachConfigCommon.preambleInfo.numberOfRaPreambles = rc.numberOfRaPreambles;
536 hpi.asConfig.sourceSystemInformationBlockType2.radioResourceConfigCommon.rachConfigCommon.raSupervisionInfo.preambleTransMax = rc.preambleTransMax;
537 hpi.asConfig.sourceSystemInformationBlockType2.radioResourceConfigCommon.rachConfigCommon.raSupervisionInfo.raResponseWindowSize = rc.raResponseWindowSize;
538 hpi.asConfig.sourceSystemInformationBlockType2.freqInfo.ulCarrierFreq = m_rrc->m_ulEarfcn;
539 hpi.asConfig.sourceSystemInformationBlockType2.freqInfo.ulBandwidth = m_rrc->m_ulBandwidth;
540 params.rrcContext = m_rrc->m_rrcSapUser->EncodeHandoverPreparationInformation (hpi);
542 NS_LOG_LOGIC (
"oldEnbUeX2apId = " << params.oldEnbUeX2apId);
543 NS_LOG_LOGIC (
"sourceCellId = " << params.sourceCellId);
544 NS_LOG_LOGIC (
"targetCellId = " << params.targetCellId);
545 NS_LOG_LOGIC (
"mmmUeS1apId = " << params.oldEnbUeX2apId);
548 m_rrc->m_x2SapProvider->SendHandoverRequest (params);
554 NS_FATAL_ERROR (
"method unexpected in state " << ToString (m_state));
565 NS_ASSERT_MSG (params.notAdmittedBearers.empty (),
"not admission of some bearers upon handover is not supported");
566 NS_ASSERT_MSG (params.admittedBearers.size () == m_drbMap.size (),
"not enough bearers in admittedBearers");
574 Ptr<Packet> encodedHandoverCommand = params.rrcContext;
576 m_rrc->m_rrcSapUser->SendRrcConnectionReconfiguration (m_rnti, handoverCommand);
578 NS_ASSERT (handoverCommand.haveMobilityControlInfo);
579 m_rrc->m_handoverStartTrace (m_imsi, m_rrc->m_cellId, m_rnti, handoverCommand.mobilityControlInfo.targetPhysCellId);
582 sst.oldEnbUeX2apId = params.oldEnbUeX2apId;
583 sst.newEnbUeX2apId = params.newEnbUeX2apId;
584 sst.sourceCellId = params.sourceCellId;
585 sst.targetCellId = params.targetCellId;
587 drbIt != m_drbMap.end ();
591 if (0 != drbIt->second->m_rlc->GetObject<
LteRlcAm> ())
595 i.dlPdcpSn = status.
txSn;
596 i.ulPdcpSn = status.
rxSn;
597 sst.erabsSubjectToStatusTransferList.push_back (i);
600 m_rrc->m_x2SapProvider->SendSnStatusTransfer (sst);
624 case INITIAL_RANDOM_ACCESS:
625 case CONNECTION_SETUP:
630 case CONNECTED_NORMALLY:
631 case CONNECTION_RECONFIGURATION:
632 case CONNECTION_REESTABLISHMENT:
633 case HANDOVER_PREPARATION:
634 case HANDOVER_JOINING:
635 case HANDOVER_PATH_SWITCH:
637 NS_LOG_LOGIC (
"queueing data on PDCP for transmission over the air");
640 params.
rnti = m_rnti;
648 case HANDOVER_LEAVING:
650 NS_LOG_LOGIC (
"forwarding data to target eNB over X2-U");
653 params.sourceCellId = m_rrc->m_cellId;
654 params.targetCellId = m_targetCellId;
657 m_rrc->m_x2SapProvider->SendUeData (params);
662 NS_FATAL_ERROR (
"method unexpected in state " << ToString (m_state));
667 std::vector<EpcX2Sap::ErabToBeSetupItem>
671 std::vector<EpcX2Sap::ErabToBeSetupItem> ret;
673 it != m_drbMap.end ();
677 etbsi.erabId = it->second->m_epsBearerIdentity;
678 etbsi.erabLevelQosParameters = it->second->m_epsBearer;
679 etbsi.dlForwarding =
false;
680 etbsi.transportLayerAddress = it->second->m_transportLayerAddress;
681 etbsi.gtpTeid = it->second->m_gtpTeid;
682 ret.push_back (etbsi);
693 case HANDOVER_PATH_SWITCH:
694 NS_LOG_INFO (
"Send UE CONTEXT RELEASE from target eNB to source eNB");
696 ueCtxReleaseParams.oldEnbUeX2apId = m_sourceX2apId;
697 ueCtxReleaseParams.newEnbUeX2apId = m_rnti;
698 ueCtxReleaseParams.sourceCellId = m_sourceCellId;
699 m_rrc->m_x2SapProvider->SendUeContextRelease (ueCtxReleaseParams);
701 m_rrc->m_handoverEndOkTrace (m_imsi, m_rrc->m_cellId, m_rnti);
705 NS_FATAL_ERROR (
"method unexpected in state " << ToString (m_state));
716 case HANDOVER_PREPARATION:
718 NS_LOG_INFO (
"target eNB sent HO preparation failure, aborting HO");
723 NS_FATAL_ERROR (
"method unexpected in state " << ToString (m_state));
732 for (std::vector<EpcX2Sap::ErabsSubjectToStatusTransferItem>::iterator erabIt
733 = params.erabsSubjectToStatusTransferList.begin ();
734 erabIt != params.erabsSubjectToStatusTransferList.end ();
753 m_srb0->m_rlc->SetLteRlcSapUser (params.srb0SapUser);
754 m_srb1->m_pdcp->SetLtePdcpSapUser (params.srb1SapUser);
758 UeManager::RecvRrcConnectionRequest (LteRrcSap::RrcConnectionRequest msg)
763 case INITIAL_RANDOM_ACCESS:
765 if (m_rrc->m_admitRrcConnectionRequest ==
true)
767 m_connectionTimeout.
Cancel ();
768 m_imsi = msg.ueIdentity;
769 if (m_rrc->m_s1SapProvider != 0)
771 m_rrc->m_s1SapProvider->InitialUeMessage (m_imsi, m_rnti);
773 LteRrcSap::RrcConnectionSetup msg2;
776 m_rrc->m_rrcSapUser->SendRrcConnectionSetup (m_rnti, msg2);
782 m_connectionTimeout.
Cancel ();
783 NS_LOG_INFO (
"rejecting connection request for RNTI " << m_rnti);
784 LteRrcSap::RrcConnectionReject rejectMsg;
785 rejectMsg.waitTime = 3;
786 m_rrc->m_rrcSapUser->SendRrcConnectionReject (m_rnti, rejectMsg);
795 NS_FATAL_ERROR (
"method unexpected in state " << ToString (m_state));
801 UeManager::RecvRrcConnectionSetupCompleted (LteRrcSap::RrcConnectionSetupCompleted msg)
806 case CONNECTION_SETUP:
809 m_rrc->m_connectionEstablishedTrace (m_imsi, m_rrc->m_cellId, m_rnti);
813 NS_FATAL_ERROR (
"method unexpected in state " << ToString (m_state));
819 UeManager::RecvRrcConnectionReconfigurationCompleted (LteRrcSap::RrcConnectionReconfigurationCompleted msg)
824 case CONNECTION_RECONFIGURATION:
826 if (m_needTransmissionModeConfiguration)
829 LteEnbCmacSapProvider::UeConfig req;
831 req.m_transmissionMode = m_physicalConfigDedicated.antennaInfo.transmissionMode;
832 m_rrc->m_cmacSapProvider->UeUpdateConfigurationReq (req);
835 m_rrc->m_cphySapProvider->SetTransmissionMode (req.m_rnti, req.m_transmissionMode);
837 m_needTransmissionModeConfiguration =
false;
840 m_rrc->m_connectionReconfigurationTrace (m_imsi, m_rrc->m_cellId, m_rnti);
843 case HANDOVER_LEAVING:
844 NS_LOG_INFO (
"ignoring RecvRrcConnectionReconfigurationCompleted in state " << ToString (m_state));
847 case HANDOVER_JOINING:
849 m_connectionTimeout.
Cancel ();
850 NS_LOG_INFO (
"Send PATH SWITCH REQUEST to the MME");
851 EpcEnbS1SapProvider::PathSwitchRequestParameters params;
852 params.rnti = m_rnti;
853 params.cellId = m_rrc->m_cellId;
854 params.mmeUeS1Id = m_imsi;
856 for (std::map <uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator it = m_drbMap.begin ();
857 it != m_drbMap.end ();
860 EpcEnbS1SapProvider::BearerToBeSwitched b;
861 b.epsBearerId = it->second->m_epsBearerIdentity;
862 b.teid = it->second->m_gtpTeid;
863 params.bearersToBeSwitched.push_back (b);
865 m_rrc->m_s1SapProvider->PathSwitchRequest (params);
870 NS_FATAL_ERROR (
"method unexpected in state " << ToString (m_state));
876 UeManager::RecvRrcConnectionReestablishmentRequest (LteRrcSap::RrcConnectionReestablishmentRequest msg)
879 LteRrcSap::RrcConnectionReestablishment msg2;
882 m_rrc->m_rrcSapUser->SendRrcConnectionReestablishment (m_rnti, msg2);
887 UeManager::RecvRrcConnectionReestablishmentComplete (LteRrcSap::RrcConnectionReestablishmentComplete msg)
894 UeManager::RecvMeasurementReport (LteRrcSap::MeasurementReport msg)
903 UeManager::CmacUeConfigUpdateInd (LteEnbCmacSapUser::UeConfig cmacParams)
908 m_physicalConfigDedicated.antennaInfo.transmissionMode = cmacParams.m_transmissionMode;
910 m_needTransmissionModeConfiguration =
true;
920 UeManager::DoReceivePdcpSdu (LtePdcpSapUser::ReceivePdcpSduParameters params)
927 tag.SetRnti (params.rnti);
928 tag.SetBid (
Lcid2Bid (params.lcid));
929 params.pdcpSdu->AddPacketTag (tag);
930 m_rrc->m_forwardUpCallback (params.pdcpSdu);
950 return m_physicalConfigDedicated.soundingRsUlConfigDedicated.srsConfigIndex;
957 m_physicalConfigDedicated.soundingRsUlConfigDedicated.srsConfigIndex = srsConfIndex;
958 m_rrc->m_cphySapProvider->SetSrsConfigurationIndex (m_rnti, srsConfIndex);
961 case INITIAL_RANDOM_ACCESS:
982 const uint8_t MAX_DRB_ID = 32;
983 for (uint8_t drbid = (m_lastAllocatedDrbid + 1) % MAX_DRB_ID;
984 drbid != m_lastAllocatedDrbid;
985 drbid = (drbid + 1) % MAX_DRB_ID)
989 if (m_drbMap.find (drbid) == m_drbMap.end ())
992 drbInfo->m_drbIdentity = drbid;
993 m_lastAllocatedDrbid = drbid;
1007 std::map<uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator it = m_drbMap.find (drbid);
1017 std::map <uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator it = m_drbMap.find (drbid);
1018 NS_ASSERT_MSG (it != m_drbMap.end (),
"request to remove radio bearer with unknown drbid " << drbid);
1019 m_drbMap.erase (it);
1028 msg.haveRadioResourceConfigDedicated =
true;
1030 msg.haveMobilityControlInfo =
false;
1031 msg.haveMeasConfig =
false;
1043 stam.srbIdentity = m_srb1->m_srbIdentity;
1044 stam.logicalChannelConfig = m_srb1->m_logicalChannelConfig;
1045 rrcd.srbToAddModList.push_back (stam);
1049 it != m_drbMap.end ();
1053 dtam.epsBearerIdentity = it->second->m_epsBearerIdentity;
1054 dtam.drbIdentity = it->second->m_drbIdentity;
1055 dtam.rlcConfig = it->second->m_rlcConfig;
1056 dtam.logicalChannelIdentity = it->second->m_logicalChannelIdentity;
1057 dtam.logicalChannelConfig = it->second->m_logicalChannelConfig;
1058 rrcd.drbToAddModList.push_back (dtam);
1061 rrcd.havePhysicalConfigDedicated =
true;
1062 rrcd.physicalConfigDedicated = m_physicalConfigDedicated;
1069 return ++m_lastRrcTransactionIdentifier;
1114 State oldState = m_state;
1116 NS_LOG_INFO (
"IMSI " << m_imsi <<
" RNTI " << m_rnti <<
" UeManager " << ToString (oldState) <<
" --> " << ToString (newState));
1117 m_stateTransitionTrace (m_imsi, m_rrc->m_cellId, m_rnti, oldState, newState);
1121 case INITIAL_RANDOM_ACCESS:
1122 case HANDOVER_JOINING:
1126 case CONNECTION_SETUP:
1129 case CONNECTED_NORMALLY:
1131 if (m_pendingRrcConnectionReconfiguration ==
true)
1138 case CONNECTION_RECONFIGURATION:
1141 case CONNECTION_REESTABLISHMENT:
1144 case HANDOVER_LEAVING:
1158 NS_OBJECT_ENSURE_REGISTERED (
LteEnbRrc);
1161 : m_x2SapProvider (0),
1162 m_cmacSapProvider (0),
1164 m_macSapProvider (0),
1165 m_s1SapProvider (0),
1166 m_cphySapProvider (0),
1167 m_configured (false),
1168 m_lastAllocatedRnti (0),
1169 m_srsCurrentPeriodicityId (0),
1170 m_lastAllocatedConfigurationIndex (0),
1171 m_reconfigureUes (false)
1195 delete m_cmacSapUser;
1196 delete m_rrcSapProvider;
1199 delete m_cphySapUser;
1203 LteEnbRrc::GetTypeId (
void)
1208 .AddConstructor<LteEnbRrc> ()
1209 .AddAttribute (
"UeMap",
"List of UeManager by C-RNTI.",
1211 MakeObjectMapAccessor (&LteEnbRrc::m_ueMap),
1212 MakeObjectMapChecker<UeManager> ())
1213 .AddAttribute (
"DefaultTransmissionMode",
1214 "The default UEs' transmission mode (0: SISO)",
1216 MakeUintegerAccessor (&LteEnbRrc::m_defaultTransmissionMode),
1217 MakeUintegerChecker<uint8_t> ())
1218 .AddAttribute (
"EpsBearerToRlcMapping",
1219 "Specify which type of RLC will be used for each type of EPS bearer. ",
1221 MakeEnumAccessor (&LteEnbRrc::m_epsBearerToRlcMapping),
1222 MakeEnumChecker (RLC_SM_ALWAYS,
"RlcSmAlways",
1223 RLC_UM_ALWAYS,
"RlcUmAlways",
1224 RLC_AM_ALWAYS,
"RlcAmAlways",
1225 PER_BASED,
"PacketErrorRateBased"))
1226 .AddAttribute (
"SystemInformationPeriodicity",
1227 "The interval for sending system information (Time value)",
1229 MakeTimeAccessor (&LteEnbRrc::m_systemInformationPeriodicity),
1231 .AddAttribute (
"SrsPeriodicity",
1232 "The SRS periodicity in milliseconds",
1236 MakeUintegerChecker<uint32_t> ())
1237 .AddAttribute (
"AdmitHandoverRequest",
1238 "Whether to admit an X2 handover request from another eNB",
1240 MakeBooleanAccessor (&LteEnbRrc::m_admitHandoverRequest),
1241 MakeBooleanChecker ())
1242 .AddAttribute (
"AdmitRrcConnectionRequest",
1243 "Whether to admit a connection request from a Ue",
1245 MakeBooleanAccessor (&LteEnbRrc::m_admitRrcConnectionRequest),
1246 MakeBooleanChecker ())
1247 .AddTraceSource (
"NewUeContext",
1248 "trace fired upon creation of a new UE context",
1250 .AddTraceSource (
"ConnectionEstablished",
1251 "trace fired upon successful RRC connection establishment",
1253 .AddTraceSource (
"ConnectionReconfiguration",
1254 "trace fired upon RRC connection reconfiguration",
1256 .AddTraceSource (
"HandoverStart",
1257 "trace fired upon start of a handover procedure",
1259 .AddTraceSource (
"HandoverEndOk",
1260 "trace fired upon successful termination of a handover procedure",
1270 m_x2SapProvider = s;
1284 m_cmacSapProvider = s;
1291 return m_cmacSapUser;
1305 return m_rrcSapProvider;
1312 m_macSapProvider = s;
1318 m_s1SapProvider = s;
1332 m_cphySapProvider = s;
1339 return m_cphySapUser;
1347 std::map<uint16_t, Ptr<UeManager> >::iterator it = m_ueMap.find (rnti);
1348 NS_ASSERT_MSG (it != m_ueMap.end (),
"RNTI " << rnti <<
" not found in eNB with cellId " << m_cellId);
1357 m_cmacSapProvider->
ConfigureMac (ulBandwidth, dlBandwidth);
1358 m_cphySapProvider->
SetBandwidth (ulBandwidth, dlBandwidth);
1359 m_cphySapProvider->
SetEarfcn (ulEarfcn, dlEarfcn);
1360 m_dlEarfcn = dlEarfcn;
1361 m_ulEarfcn = ulEarfcn;
1362 m_dlBandwidth = dlBandwidth;
1363 m_ulBandwidth = ulBandwidth;
1367 mib.dlBandwidth = m_dlBandwidth;
1369 m_configured =
true;
1389 NS_ASSERT_MSG (found,
"no EpsBearerTag found in packet to be sent");
1391 ueManager->SendData (tag.GetBid (), packet);
1399 m_forwardUpCallback = cb;
1418 ueManager->PrepareHandover (cellId);
1430 LteEnbRrc::DoRecvRrcConnectionRequest (uint16_t rnti, LteRrcSap::RrcConnectionRequest msg)
1438 LteEnbRrc::DoRecvRrcConnectionSetupCompleted (uint16_t rnti, LteRrcSap::RrcConnectionSetupCompleted msg)
1441 GetUeManager (rnti)->RecvRrcConnectionSetupCompleted (msg);
1445 LteEnbRrc::DoRecvRrcConnectionReconfigurationCompleted (uint16_t rnti, LteRrcSap::RrcConnectionReconfigurationCompleted msg)
1448 GetUeManager (rnti)->RecvRrcConnectionReconfigurationCompleted (msg);
1452 LteEnbRrc::DoRecvRrcConnectionReestablishmentRequest (uint16_t rnti, LteRrcSap::RrcConnectionReestablishmentRequest msg)
1455 GetUeManager (rnti)->RecvRrcConnectionReestablishmentRequest (msg);
1459 LteEnbRrc::DoRecvRrcConnectionReestablishmentComplete (uint16_t rnti, LteRrcSap::RrcConnectionReestablishmentComplete msg)
1462 GetUeManager (rnti)->RecvRrcConnectionReestablishmentComplete (msg);
1466 LteEnbRrc::DoRecvMeasurementReport (uint16_t rnti, LteRrcSap::MeasurementReport msg)
1473 LteEnbRrc::DoDataRadioBearerSetupRequest (EpcEnbS1SapUser::DataRadioBearerSetupRequestParameters request)
1475 Ptr<UeManager> ueManager =
GetUeManager (request.rnti);
1476 ueManager->SetupDataRadioBearer (request.bearer, request.bearerId, request.gtpTeid, request.transportLayerAddress);
1480 LteEnbRrc::DoPathSwitchRequestAcknowledge (EpcEnbS1SapUser::PathSwitchRequestAcknowledgeParameters params)
1483 ueManager->SendUeContextRelease ();
1487 LteEnbRrc::DoRecvHandoverRequest (EpcX2SapUser::HandoverRequestParams req)
1493 NS_LOG_LOGIC (
"oldEnbUeX2apId = " << req.oldEnbUeX2apId);
1498 NS_ASSERT (req.targetCellId == m_cellId);
1500 if (m_admitHandoverRequest ==
false)
1502 NS_LOG_INFO (
"rejecting handover request from cellId " << req.sourceCellId);
1503 EpcX2Sap::HandoverPreparationFailureParams res;
1504 res.oldEnbUeX2apId = req.oldEnbUeX2apId;
1505 res.sourceCellId = req.sourceCellId ;
1506 res.targetCellId = req.targetCellId ;
1508 res.criticalityDiagnostics = 0;
1509 m_x2SapProvider->SendHandoverPreparationFailure (res);
1513 uint16_t rnti =
AddUe (UeManager::HANDOVER_JOINING);
1514 LteEnbCmacSapProvider::AllocateNcRaPreambleReturnValue anrcrv = m_cmacSapProvider->
AllocateNcRaPreamble (rnti);
1515 if (anrcrv.valid ==
false)
1517 NS_LOG_INFO (
this <<
"failed to allocate a preamble for non-contention based RA => cannot accept HO");
1519 NS_FATAL_ERROR (
"should trigger HO Preparation Failure, but it is not implemented");
1524 ueManager->SetSource (req.sourceCellId, req.oldEnbUeX2apId);
1525 ueManager->SetImsi (req.mmeUeS1apId);
1527 EpcX2SapProvider::HandoverRequestAckParams ackParams;
1528 ackParams.oldEnbUeX2apId = req.oldEnbUeX2apId;
1529 ackParams.newEnbUeX2apId = rnti;
1530 ackParams.sourceCellId = req.sourceCellId;
1531 ackParams.targetCellId = req.targetCellId;
1533 for (std::vector <EpcX2Sap::ErabToBeSetupItem>::iterator it = req.bearers.begin ();
1534 it != req.bearers.end ();
1537 ueManager->SetupDataRadioBearer (it->erabLevelQosParameters, it->erabId, it->gtpTeid, it->transportLayerAddress);
1538 EpcX2Sap::ErabAdmittedItem i;
1539 i.erabId = it->erabId;
1540 ackParams.admittedBearers.push_back (i);
1543 LteRrcSap::RrcConnectionReconfiguration handoverCommand = ueManager->GetRrcConnectionReconfigurationForHandover ();
1544 handoverCommand.haveMobilityControlInfo =
true;
1545 handoverCommand.mobilityControlInfo.targetPhysCellId = m_cellId;
1546 handoverCommand.mobilityControlInfo.haveCarrierFreq =
true;
1547 handoverCommand.mobilityControlInfo.carrierFreq.dlCarrierFreq = m_dlEarfcn;
1548 handoverCommand.mobilityControlInfo.carrierFreq.ulCarrierFreq = m_ulEarfcn;
1549 handoverCommand.mobilityControlInfo.haveCarrierBandwidth =
true;
1550 handoverCommand.mobilityControlInfo.carrierBandwidth.dlBandwidth = m_dlBandwidth;
1551 handoverCommand.mobilityControlInfo.carrierBandwidth.ulBandwidth = m_ulBandwidth;
1552 handoverCommand.mobilityControlInfo.newUeIdentity = rnti;
1553 handoverCommand.mobilityControlInfo.haveRachConfigDedicated =
true;
1554 handoverCommand.mobilityControlInfo.rachConfigDedicated.raPreambleIndex = anrcrv.raPreambleId;
1555 handoverCommand.mobilityControlInfo.rachConfigDedicated.raPrachMaskIndex = anrcrv.raPrachMaskIndex;
1557 LteEnbCmacSapProvider::RachConfig rc = m_cmacSapProvider->
GetRachConfig ();
1558 handoverCommand.mobilityControlInfo.radioResourceConfigCommon.rachConfigCommon.preambleInfo.numberOfRaPreambles = rc.numberOfRaPreambles;
1559 handoverCommand.mobilityControlInfo.radioResourceConfigCommon.rachConfigCommon.raSupervisionInfo.preambleTransMax = rc.preambleTransMax;
1560 handoverCommand.mobilityControlInfo.radioResourceConfigCommon.rachConfigCommon.raSupervisionInfo.raResponseWindowSize = rc.raResponseWindowSize;
1562 Ptr<Packet> encodedHandoverCommand = m_rrcSapUser->EncodeHandoverCommand (handoverCommand);
1564 ackParams.rrcContext = encodedHandoverCommand;
1566 NS_LOG_LOGIC (
"Send X2 message: HANDOVER REQUEST ACK");
1568 NS_LOG_LOGIC (
"oldEnbUeX2apId = " << ackParams.oldEnbUeX2apId);
1569 NS_LOG_LOGIC (
"newEnbUeX2apId = " << ackParams.newEnbUeX2apId);
1570 NS_LOG_LOGIC (
"sourceCellId = " << ackParams.sourceCellId);
1571 NS_LOG_LOGIC (
"targetCellId = " << ackParams.targetCellId);
1573 m_x2SapProvider->SendHandoverRequestAck (ackParams);
1577 LteEnbRrc::DoRecvHandoverRequestAck (EpcX2SapUser::HandoverRequestAckParams params)
1581 NS_LOG_LOGIC (
"Recv X2 message: HANDOVER REQUEST ACK");
1583 NS_LOG_LOGIC (
"oldEnbUeX2apId = " << params.oldEnbUeX2apId);
1584 NS_LOG_LOGIC (
"newEnbUeX2apId = " << params.newEnbUeX2apId);
1585 NS_LOG_LOGIC (
"sourceCellId = " << params.sourceCellId);
1586 NS_LOG_LOGIC (
"targetCellId = " << params.targetCellId);
1588 uint16_t rnti = params.oldEnbUeX2apId;
1590 ueManager->RecvHandoverRequestAck (params);
1594 LteEnbRrc::DoRecvHandoverPreparationFailure (EpcX2SapUser::HandoverPreparationFailureParams params)
1598 NS_LOG_LOGIC (
"Recv X2 message: HANDOVER PREPARATION FAILURE");
1600 NS_LOG_LOGIC (
"oldEnbUeX2apId = " << params.oldEnbUeX2apId);
1601 NS_LOG_LOGIC (
"sourceCellId = " << params.sourceCellId);
1602 NS_LOG_LOGIC (
"targetCellId = " << params.targetCellId);
1604 NS_LOG_LOGIC (
"criticalityDiagnostics = " << params.criticalityDiagnostics);
1606 uint16_t rnti = params.oldEnbUeX2apId;
1608 ueManager->RecvHandoverPreparationFailure (params.targetCellId);
1612 LteEnbRrc::DoRecvSnStatusTransfer (EpcX2SapUser::SnStatusTransferParams params)
1618 NS_LOG_LOGIC (
"oldEnbUeX2apId = " << params.oldEnbUeX2apId);
1619 NS_LOG_LOGIC (
"newEnbUeX2apId = " << params.newEnbUeX2apId);
1620 NS_LOG_LOGIC (
"erabsSubjectToStatusTransferList size = " << params.erabsSubjectToStatusTransferList.size ());
1622 uint16_t rnti = params.newEnbUeX2apId;
1624 ueManager->RecvSnStatusTransfer (params);
1628 LteEnbRrc::DoRecvUeContextRelease (EpcX2SapUser::UeContextReleaseParams params)
1634 NS_LOG_LOGIC (
"oldEnbUeX2apId = " << params.oldEnbUeX2apId);
1635 NS_LOG_LOGIC (
"newEnbUeX2apId = " << params.newEnbUeX2apId);
1637 uint16_t rnti = params.oldEnbUeX2apId;
1642 LteEnbRrc::DoRecvLoadInformation (EpcX2SapUser::LoadInformationParams params)
1648 NS_LOG_LOGIC (
"Number of cellInformationItems = " << params.cellInformationList.size ());
1650 NS_ASSERT (
"Processing of LOAD INFORMATION X2 message IS NOT IMPLEMENTED");
1654 LteEnbRrc::DoRecvResourceStatusUpdate (EpcX2SapUser::ResourceStatusUpdateParams params)
1658 NS_LOG_LOGIC (
"Recv X2 message: RESOURCE STATUS UPDATE");
1660 NS_LOG_LOGIC (
"Number of cellMeasurementResultItems = " << params.cellMeasurementResultList.size ());
1662 NS_ASSERT (
"Processing of RESOURCE STATUS UPDATE X2 message IS NOT IMPLEMENTED");
1666 LteEnbRrc::DoRecvUeData (EpcX2SapUser::UeDataParams params)
1670 NS_LOG_LOGIC (
"Recv UE DATA FORWARDING through X2 interface");
1671 NS_LOG_LOGIC (
"sourceCellId = " << params.sourceCellId);
1672 NS_LOG_LOGIC (
"targetCellId = " << params.targetCellId);
1675 NS_LOG_LOGIC (
"ueData size = " << params.ueData->GetSize ());
1677 std::map<uint32_t, X2uTeidInfo>::iterator
1678 teidInfoIt = m_x2uTeidInfoMap.find (params.gtpTeid);
1679 if (teidInfoIt != m_x2uTeidInfoMap.end ())
1681 GetUeManager (teidInfoIt->second.rnti)->SendData (teidInfoIt->second.drbid, params.ueData);
1691 LteEnbRrc::DoAllocateTemporaryCellRnti ()
1694 return AddUe (UeManager::INITIAL_RANDOM_ACCESS);
1698 LteEnbRrc::DoRrcConfigurationUpdateInd (LteEnbCmacSapUser::UeConfig cmacParams)
1700 Ptr<UeManager> ueManager =
GetUeManager (cmacParams.m_rnti);
1701 ueManager->CmacUeConfigUpdateInd (cmacParams);
1705 LteEnbRrc::DoNotifyLcConfigResult (uint16_t rnti, uint8_t lcid,
bool success)
1719 for (rnti = m_lastAllocatedRnti;
1720 (rnti != m_lastAllocatedRnti - 1) && (!found);
1723 if ((rnti != 0) && (m_ueMap.find (rnti) == m_ueMap.end ()))
1730 NS_ASSERT_MSG (found,
"no more RNTIs available (do you have more than 65535 UEs in a cell?)");
1731 m_lastAllocatedRnti = rnti;
1732 Ptr<UeManager> ueManager = CreateObject<UeManager> (
this, rnti, state);
1733 m_ueMap.insert (std::pair<uint16_t,
Ptr<UeManager> > (rnti, ueManager));
1734 ueManager->Initialize ();
1735 NS_LOG_DEBUG (
this <<
" New UE RNTI " << rnti <<
" cellId " << m_cellId <<
" srs CI " << ueManager->GetSrsConfigurationIndex ());
1736 m_newUeContextTrace (m_cellId, rnti);
1744 std::map <uint16_t, Ptr<UeManager> >::iterator it = m_ueMap.find (rnti);
1745 NS_ASSERT_MSG (it != m_ueMap.end (),
"request to remove UE info with unknown rnti " << rnti);
1746 uint16_t srsCi = (*it).second->GetSrsConfigurationIndex ();
1748 m_cmacSapProvider->
RemoveUe (rnti);
1749 m_cphySapProvider->
RemoveUe (rnti);
1750 if (m_s1SapProvider != 0)
1761 switch (m_epsBearerToRlcMapping)
1764 return LteRlcSm::GetTypeId ();
1768 return LteRlcUm::GetTypeId ();
1772 return LteRlcAm::GetTypeId ();
1778 return LteRlcUm::GetTypeId ();
1782 return LteRlcAm::GetTypeId ();
1787 return LteRlcSm::GetTypeId ();
1796 const uint8_t SRS_ENTRIES = 9;
1797 uint16_t g_srsPeriodicity[SRS_ENTRIES] = {0, 2, 5, 10, 20, 40, 80, 160, 320};
1798 uint16_t g_srsCiLow[SRS_ENTRIES] = {0, 0, 2, 7, 17, 37, 77, 157, 317};
1799 uint16_t g_srsCiHigh[SRS_ENTRIES] = {0, 1, 6, 16, 36, 76, 156, 316, 636};
1805 for (uint32_t
id = 1;
id < SRS_ENTRIES; ++id)
1807 if (g_srsPeriodicity[
id] == p)
1809 m_srsCurrentPeriodicityId = id;
1814 std::ostringstream allowedValues;
1815 for (uint32_t
id = 1;
id < SRS_ENTRIES; ++id)
1817 allowedValues << g_srsPeriodicity[id] <<
" ";
1819 NS_FATAL_ERROR (
"illecit SRS periodicity value " << p <<
". Allowed values: " << allowedValues.str ());
1826 NS_ASSERT (m_srsCurrentPeriodicityId > 0);
1827 NS_ASSERT (m_srsCurrentPeriodicityId < SRS_ENTRIES);
1828 return g_srsPeriodicity[m_srsCurrentPeriodicityId];
1837 NS_ASSERT (m_srsCurrentPeriodicityId > 0);
1838 NS_ASSERT (m_srsCurrentPeriodicityId < SRS_ENTRIES);
1839 NS_LOG_DEBUG (
this <<
" SRS p " << g_srsPeriodicity[m_srsCurrentPeriodicityId] <<
" set " << m_ueSrsConfigurationIndexSet.size ());
1840 if (m_ueSrsConfigurationIndexSet.size () >= g_srsPeriodicity[m_srsCurrentPeriodicityId])
1842 NS_FATAL_ERROR (
"too many UEs (" << m_ueSrsConfigurationIndexSet.size () + 1
1843 <<
") for current SRS periodicity "
1844 << g_srsPeriodicity[m_srsCurrentPeriodicityId]
1845 <<
", consider increasing the value of ns3::LteEnbRrc::SrsPeriodicity");
1848 if (m_ueSrsConfigurationIndexSet.empty ())
1851 m_lastAllocatedConfigurationIndex = g_srsCiLow[m_srsCurrentPeriodicityId];
1852 m_ueSrsConfigurationIndexSet.insert (m_lastAllocatedConfigurationIndex);
1857 std::set<uint16_t>::reverse_iterator rit = m_ueSrsConfigurationIndexSet.rbegin ();
1858 NS_ASSERT (rit != m_ueSrsConfigurationIndexSet.rend ());
1859 NS_LOG_DEBUG (
this <<
" lower bound " << (*rit) <<
" of " << g_srsCiHigh[m_srsCurrentPeriodicityId]);
1860 if ((*rit) < g_srsCiHigh[m_srsCurrentPeriodicityId])
1863 m_lastAllocatedConfigurationIndex = (*rit) + 1;
1864 m_ueSrsConfigurationIndexSet.insert (m_lastAllocatedConfigurationIndex);
1869 for (uint16_t srcCi = g_srsCiLow[m_srsCurrentPeriodicityId]; srcCi < g_srsCiHigh[m_srsCurrentPeriodicityId]; srcCi++)
1871 std::set<uint16_t>::iterator it = m_ueSrsConfigurationIndexSet.find (srcCi);
1872 if (it==m_ueSrsConfigurationIndexSet.end ())
1874 m_lastAllocatedConfigurationIndex = srcCi;
1875 m_ueSrsConfigurationIndexSet.insert (srcCi);
1881 return m_lastAllocatedConfigurationIndex;
1890 std::set<uint16_t>::iterator it = m_ueSrsConfigurationIndexSet.find (srcCi);
1891 NS_ASSERT_MSG (it != m_ueSrsConfigurationIndexSet.end (),
"request to remove unkwown SRS CI " << srcCi);
1892 m_ueSrsConfigurationIndexSet.erase (it);
1898 if (bearer.
IsGbr ())
1922 si.sib2.freqInfo.ulCarrierFreq = m_ulEarfcn;
1923 si.sib2.freqInfo.ulBandwidth = m_ulBandwidth;
1927 rachConfigCommon.preambleInfo.numberOfRaPreambles = rc.numberOfRaPreambles;
1928 rachConfigCommon.raSupervisionInfo.preambleTransMax = rc.preambleTransMax;
1929 rachConfigCommon.raSupervisionInfo.raResponseWindowSize = rc.raResponseWindowSize;
1930 si.sib2.radioResourceConfigCommon.rachConfigCommon = rachConfigCommon;
1932 m_rrcSapUser->SendSystemInformation (si);
virtual void SetMasterInformationBlock(LteRrcSap::MasterInformationBlock mib)=0
void SetEpcX2SapProvider(EpcX2SapProvider *s)
void SendHandoverRequest(uint16_t rnti, uint16_t cellId)
void SendSystemInformation()
LteRrcSap::RadioResourceConfigDedicated GetRadioResourceConfigForHandoverPreparationInfo()
smart pointer class similar to boost::intrusive_ptr
#define NS_LOG_FUNCTION(parameters)
uint16_t AddUe(UeManager::State state)
void RecordDataRadioBearersToBeStarted()
void SetSource(uint16_t sourceCellId, uint16_t sourceX2apId)
void RecvHandoverPreparationFailure(uint16_t cellId)
virtual void SetEarfcn(uint16_t ulEarfcn, uint16_t dlEarfcn)=0
void SetCellId(uint16_t m_cellId)
uint8_t GetLogicalChannelGroup(EpsBearer bearer)
uint8_t m_transmissionMode
uint8_t Drbid2Bid(uint8_t drbid)
uint16_t txSn
TX sequence number.
Parameters of the HANDOVER REQUEST message.
#define NS_ASSERT(condition)
uint8_t Lcid2Bid(uint8_t lcid)
EpcX2SapUser * GetEpcX2SapUser()
#define NS_LOG_COMPONENT_DEFINE(name)
void SetLteEnbCphySapProvider(LteEnbCphySapProvider *s)
uint16_t GetNewSrsConfigurationIndex(void)
void SetTypeId(TypeId tid)
LteEnbCmacSapUser * GetLteEnbCmacSapUser()
void SetLteEnbRrcSapUser(LteEnbRrcSapUser *s)
void SetLteEnbCmacSapProvider(LteEnbCmacSapProvider *s)
virtual uint16_t AllocateTemporaryCellRnti()
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
void RemoveSrsConfigurationIndex(uint16_t srcCi)
virtual void RrcConfigurationUpdateInd(UeConfig params)
void SetImsi(uint64_t imsi)
void SetLteMacSapProvider(LteMacSapProvider *s)
void SendUeContextRelease()
LteRrcSap::RrcConnectionReconfiguration GetRrcConnectionReconfigurationForHandover()
void SwitchToState(State s)
void ReleaseDataRadioBearer(uint8_t drbid)
double GetPacketErrorLossRate() const
uint8_t AddDataRadioBearerInfo(Ptr< LteDataRadioBearerInfo > radioBearerInfo)
#define NS_FATAL_ERROR(msg)
fatal error handling
void SetForwardUpCallback(Callback< void, Ptr< Packet > > cb)
Ptr< UeManager > GetUeManager(uint16_t rnti)
uint16_t GetSrsConfigurationIndex(void)
virtual void UeContextRelease(uint16_t rnti)=0
hold variables of type 'enum'
LteRrcSap::RrcConnectionReconfiguration BuildRrcConnectionReconfiguration()
hold objects of type ns3::Time
void SetSrsConfigurationIndex(uint16_t srsConfIndex)
Ptr< Object > Create(void) const
Hold an unsigned integer type.
virtual void SetCellId(uint16_t cellId)=0
virtual void SetBandwidth(uint8_t ulBandwidth, uint8_t dlBandwidth)=0
virtual void NotifyLcConfigResult(uint16_t rnti, uint8_t lcid, bool success)
Parameters of the SN STATUS TRANSFER message.
uint8_t Drbid2Lcid(uint8_t drbid)
uint16_t rxSn
RX sequence number.
void SendData(uint8_t bid, Ptr< Packet > p)
#define NS_LOG_LOGIC(msg)
virtual RachConfig GetRachConfig()=0
#define NS_ABORT_IF(cond)
Abnormal program termination if cond is true.
uint8_t Bid2Lcid(uint8_t bid)
Parameters for [re]configuring the UE.
void SetupDataRadioBearer(EpsBearer bearer, uint8_t bearerId, uint32_t gtpTeid, Ipv4Address transportLayerAddress)
void RemoveDataRadioBearerInfo(uint8_t drbid)
void RecvSnStatusTransfer(EpcX2SapUser::SnStatusTransferParams params)
hold objects of type Ptr<T>
void ConnectionTimeout(uint16_t rnti)
LteRrcSap::RadioResourceConfigDedicated BuildRadioResourceConfigDedicated()
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Parameters of the UE CONTEXT RELEASE message.
Parameters of the HANDOVER REQUEST ACKNOWLEDGE message.
std::vector< EpcX2Sap::ErabToBeSetupItem > GetErabList()
void ScheduleRrcConnectionReconfiguration()
Parameters for [re]configuring the UE.
LteEnbRrcSapProvider * GetLteEnbRrcSapProvider()
virtual void TransmitPdcpSdu(TransmitPdcpSduParameters params)=0
void PrepareHandover(uint16_t cellId)
#define NS_ASSERT_MSG(condition, message)
void SetSrsPeriodicity(uint32_t p)
virtual void DoDispose(void)
TypeId GetRlcType(EpsBearer bearer)
instantiate subclasses of ns3::Object.
Ipv4 addresses are stored in host order in this class.
virtual void ConfigureMac(uint8_t ulBandwidth, uint8_t dlBandwidth)=0
void StartDataRadioBearers()
virtual AllocateNcRaPreambleReturnValue AllocateNcRaPreamble(uint16_t rnti)=0
EpcEnbS1SapUser * GetS1SapUser()
bool RemovePacketTag(Tag &tag)
#define NS_LOG_DEBUG(msg)
uint8_t GetLogicalChannelPriority(EpsBearer bearer)
uint8_t GetNewRrcTransactionIdentifier()
LteEnbCphySapUser * GetLteEnbCphySapUser()
Time MilliSeconds(uint64_t ms)
create ns3::Time instances in units of milliseconds.
uint32_t GetSrsPeriodicity() const
Ptr< LteDataRadioBearerInfo > GetDataRadioBearerInfo(uint8_t drbid)
virtual void RemoveUe(uint16_t rnti)=0
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 RemoveUe(uint16_t rnti)
Parameters of the UE DATA primitive.
Ptr< T > GetObject(void) const
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
uint8_t Bid2Drbid(uint8_t bid)
void SetS1SapProvider(EpcEnbS1SapProvider *s)
uint8_t Lcid2Drbid(uint8_t lcid)
virtual void RemoveUe(uint16_t rnti)=0
void RecvHandoverRequestAck(EpcX2SapUser::HandoverRequestAckParams params)
bool SendData(Ptr< Packet > p)
virtual void DoInitialize()