18#include "nr-anr-sap.h"
19#include "nr-ccm-rrc-sap.h"
20#include "nr-component-carrier.h"
21#include "nr-epc-gnb-s1-sap.h"
22#include "nr-epc-x2-sap.h"
23#include "nr-gnb-cmac-sap.h"
24#include "nr-gnb-cphy-sap.h"
25#include "nr-handover-management-sap.h"
26#include "nr-mac-sap.h"
27#include "nr-pdcp-sap.h"
28#include "nr-rrc-sap.h"
30#include <ns3/event-id.h>
31#include <ns3/nstime.h>
32#include <ns3/object.h>
33#include <ns3/traced-callback.h>
66 INITIAL_RANDOM_ACCESS = 0,
71 CONNECTION_RECONFIGURATION,
72 CONNECTION_REESTABLISHMENT,
90 NrUeManager(Ptr<NrGnbRrc> rrc, uint16_t rnti,
State s, uint8_t componentCarrierId);
106 void DoDispose()
override;
122 void SetSource(uint16_t sourceCellId, uint16_t sourceX2apId);
176 Ipv4Address transportLayerAddress);
238 uint8_t componentCarrierId);
251 void SendData(uint8_t bid, Ptr<Packet> p);
257 std::vector<NrEpcX2Sap::ErabToBeSetupItem>
GetErabList();
438 const uint16_t cellId,
440 const State oldState,
441 const State newState);
451 uint8_t AddDataRadioBearerInfo(Ptr<NrDataRadioBearerInfo> radioBearerInfo);
458 Ptr<NrDataRadioBearerInfo> GetDataRadioBearerInfo(uint8_t drbid);
465 void RemoveDataRadioBearerInfo(uint8_t drbid);
492 uint8_t GetNewRrcTransactionIdentifier();
499 uint8_t Lcid2Drbid(uint8_t lcid);
506 uint8_t Drbid2Lcid(uint8_t drbid);
513 uint8_t Lcid2Bid(uint8_t lcid);
520 uint8_t Bid2Lcid(uint8_t bid);
527 uint8_t Drbid2Bid(uint8_t drbid);
534 uint8_t Bid2Drbid(uint8_t bid);
552 void SwitchToState(
State s);
554 uint8_t m_lastAllocatedDrbid;
560 std::map<uint8_t, Ptr<NrDataRadioBearerInfo>> m_drbMap;
565 Ptr<NrSignalingRadioBearerInfo> m_srb0;
569 Ptr<NrSignalingRadioBearerInfo> m_srb1;
583 uint8_t m_componentCarrierId;
585 uint8_t m_lastRrcTransactionIdentifier;
595 bool m_pendingRrcConnectionReconfiguration;
602 TracedCallback<uint64_t, uint16_t, uint16_t, State, State> m_stateTransitionTrace;
609 TracedCallback<uint64_t, uint16_t, uint16_t, uint8_t> m_drbCreatedTrace;
611 uint16_t m_sourceX2apId;
612 uint16_t m_targetX2apId;
613 uint16_t m_sourceCellId;
614 uint16_t m_targetCellId;
615 std::list<uint8_t> m_drbsToBeStarted;
616 bool m_needPhyMacConfiguration;
624 EventId m_connectionRequestTimeout;
630 EventId m_connectionSetupTimeout;
636 EventId m_connectionRejectedTimeout;
643 EventId m_handoverJoiningTimeout;
650 EventId m_handoverLeavingTimeout;
653 bool m_caSupportConfigured;
656 bool m_pendingStartDataRadioBearers;
667 std::list<std::pair<uint8_t, Ptr<Packet>>> m_packetBuffer;
709 void DoDispose()
override;
920 void ConfigureCell(
const std::map<uint8_t, Ptr<BandwidthPartGnb>>& ccPhyConf);
941 void SetCellId(uint16_t m_cellId, uint8_t ccIndex);
1083 const uint16_t cellId,
1084 const uint16_t rnti);
1095 const uint16_t cellId,
1096 const uint16_t rnti,
1097 const uint16_t targetCid);
1110 const uint16_t cellId,
1111 const uint16_t rnti,
1123 const uint16_t rnti,
1124 const uint16_t cellId,
1125 const std::string cause);
1135 const uint16_t rnti,
1136 const uint16_t cellId);
1163 void DoRecvRrcConnectionSetupCompleted(uint16_t rnti,
1173 void DoRecvRrcConnectionReconfigurationCompleted(
1184 void DoRecvRrcConnectionReestablishmentRequest(
1195 void DoRecvRrcConnectionReestablishmentComplete(
1218 void DoRecvIdealUeContextRemoveRequest(uint16_t rnti);
1227 void DoInitialContextSetupRequest(
1234 void DoDataRadioBearerSetupRequest(
1241 void DoPathSwitchRequestAcknowledge(
1309 uint16_t DoAllocateTemporaryCellRnti(uint8_t componentCarrierId);
1317 void DoNotifyLcConfigResult(uint16_t rnti, uint8_t lcid,
bool success);
1333 std::vector<uint8_t> DoAddUeMeasReportConfigForHandover(
1346 void DoSetNumberOfComponentCarriers(uint16_t numberOfComponentCarriers);
1354 void DoTriggerHandover(uint16_t rnti, uint16_t targetCellId);
1399 void RemoveUe(uint16_t rnti);
1421 bool IsRandomAccessCompleted(uint16_t rnti);
1462 void SetCsgId(uint32_t csgId,
bool csgIndication);
1473 uint16_t GetNewSrsConfigurationIndex();
1483 void RemoveSrsConfigurationIndex(uint16_t srcCi);
1488 bool IsMaxSrsReached();
1497 uint8_t GetLogicalChannelGroup(
NrEpsBearer bearer);
1507 uint8_t GetLogicalChannelPriority(
NrEpsBearer bearer);
1513 void SendSystemInformation();
1515 Callback<void, Ptr<Packet>> m_forwardUpCallback;
1523 std::vector<NrGnbCmacSapUser*> m_cmacSapUser;
1525 std::vector<NrGnbCmacSapProvider*> m_cmacSapProvider;
1556 std::vector<NrGnbCphySapUser*> m_cphySapUser;
1558 std::vector<NrGnbCphySapProvider*> m_cphySapProvider;
1563 uint32_t m_dlEarfcn;
1565 uint32_t m_ulEarfcn;
1567 uint16_t m_dlBandwidth;
1569 uint16_t m_ulBandwidth;
1571 uint16_t m_lastAllocatedRnti;
1574 std::vector<NrRrcSap::SystemInformationBlockType1> m_sib1;
1579 std::map<uint16_t, Ptr<NrUeManager>> m_ueMap;
1588 std::set<uint8_t> m_handoverMeasIds;
1590 std::set<uint8_t> m_anrMeasIds;
1592 std::set<uint8_t> m_componentCarrierMeasIds;
1602 std::map<uint32_t, X2uTeidInfo> m_x2uTeidInfoMap;
1608 uint8_t m_defaultTransmissionMode;
1618 Time m_systemInformationPeriodicity;
1622 uint16_t m_srsCurrentPeriodicityId;
1623 std::set<uint16_t> m_ueSrsConfigurationIndexSet;
1624 uint16_t m_lastAllocatedConfigurationIndex;
1625 bool m_reconfigureUes;
1637 bool m_admitHandoverRequest;
1642 bool m_admitRrcConnectionRequest;
1648 uint8_t m_rsrpFilterCoefficient;
1654 uint8_t m_rsrqFilterCoefficient;
1661 Time m_connectionRequestTimeoutDuration;
1668 Time m_connectionSetupTimeoutDuration;
1673 Time m_connectionRejectedTimeoutDuration;
1682 Time m_handoverJoiningTimeoutDuration;
1688 Time m_handoverLeavingTimeoutDuration;
1694 TracedCallback<uint16_t, uint16_t> m_newUeContextTrace;
1699 TracedCallback<uint64_t, uint16_t, uint16_t> m_connectionEstablishedTrace;
1704 TracedCallback<uint64_t, uint16_t, uint16_t> m_connectionReconfigurationTrace;
1709 TracedCallback<uint64_t, uint16_t, uint16_t, uint16_t> m_handoverStartTrace;
1714 TracedCallback<uint64_t, uint16_t, uint16_t> m_handoverEndOkTrace;
1719 TracedCallback<uint64_t, uint16_t, uint16_t, NrRrcSap::MeasurementReport>
1720 m_recvMeasurementReportTrace;
1726 TracedCallback<uint64_t, uint16_t, uint16_t> m_connectionReleaseTrace;
1732 TracedCallback<uint64_t, uint16_t, uint16_t, std::string> m_rrcTimeoutTrace;
1739 TracedCallback<uint64_t, uint16_t, uint16_t> m_handoverFailureNoPreambleTrace;
1745 TracedCallback<uint64_t, uint16_t, uint16_t> m_handoverFailureMaxRachTrace;
1751 TracedCallback<uint64_t, uint16_t, uint16_t> m_handoverFailureLeavingTrace;
1757 TracedCallback<uint64_t, uint16_t, uint16_t> m_handoverFailureJoiningTrace;
1759 uint16_t m_numberOfComponentCarriers;
1761 bool m_carriersConfigured;
1763 std::map<uint8_t, Ptr<BandwidthPartGnb>>
1764 m_componentCarrierPhyConf;
GNB bandwidth part representation.
Template for the implementation of the NrAnrSapUser as a member of an owner class of type C to which ...
MemberNrCcmRrcSapUser class.
Template for the implementation of the NrHandoverManagementSapUser as a member of an owner class of t...
Service Access Point (SAP) offered by the ANR instance to the eNodeB RRC instance.
Service Access Point (SAP) offered by the eNodeB RRC instance to the ANR instance.
Service Access Point (SAP) offered by the Component Carrier Manager (CCM) instance to the eNodeB RRC ...
Service Access Point (SAP) offered by the eNodeB RRC instance to the component carrier manager (CCM) ...
This class contains the specification of EPS Bearers.
void SetForwardUpCallback(Callback< void, Ptr< Packet > > cb)
void ConfigureCarriers(std::map< uint8_t, Ptr< BandwidthPartGnb > > ccPhyConf)
Configure carriers.
NrGnbRrcSapProvider * GetNrGnbRrcSapProvider()
void(* HandoverFailureTracedCallback)(const uint64_t imsi, const uint16_t rnti, const uint16_t cellId)
void ConnectionRejectedTimeout(uint16_t rnti)
Ptr< NrUeManager > GetUeManager(uint16_t rnti)
void SetNrAnrSapProvider(NrAnrSapProvider *s)
NrCcmRrcSapUser * GetNrCcmRrcSapUser()
void SendRrcConnectionRelease()
Send RRC connection release function.
uint8_t CellToComponentCarrierId(uint16_t cellId)
std::vector< uint8_t > AddUeMeasReportConfig(NrRrcSap::ReportConfigEutra config)
Add a new UE measurement reporting configuration.
friend class GnbRrcMemberNrGnbCmacSapUser
allow GnbRrcMemberNrGnbCmacSapUser class friend access
NrEpsBearerToRlcMapping_t
void AddX2Neighbour(uint16_t cellId)
NrHandoverManagementSapUser * GetNrHandoverManagementSapUser()
void SetNrCcmRrcSapProvider(NrCcmRrcSapProvider *s)
void HandoverJoiningTimeout(uint16_t rnti)
void ConnectionSetupTimeout(uint16_t rnti)
void SetNrGnbCphySapProvider(NrGnbCphySapProvider *s)
bool HasUeManager(uint16_t rnti) const
bool HasCellId(uint16_t cellId) const
void(* ReceiveReportTracedCallback)(const uint64_t imsi, const uint16_t cellId, const uint16_t rnti, const NrRrcSap::MeasurementReport report)
NrGnbCmacSapUser * GetNrGnbCmacSapUser()
void SetEpcX2SapProvider(NrEpcX2SapProvider *s)
void DoSendReleaseDataRadioBearer(uint64_t imsi, uint16_t rnti, uint8_t bearerId)
This function acts as an interface to trigger Release indication messages towards gNB and EPC.
void SetCellId(uint16_t m_cellId)
bool SendData(Ptr< Packet > p)
static TypeId GetTypeId()
Get the type ID.
void SendHandoverRequest(uint16_t rnti, uint16_t cellId)
uint32_t GetSrsPeriodicity() const
uint16_t ComponentCarrierToCellId(uint8_t componentCarrierId)
NrGnbCphySapUser * GetNrGnbCphySapUser()
NrAnrSapUser * GetNrAnrSapUser()
void SetSrsPeriodicity(uint32_t p)
void(* NewUeContextTracedCallback)(const uint16_t cellId, const uint16_t rnti)
void ConnectionRequestTimeout(uint16_t rnti)
NrEpcGnbS1SapUser * GetS1SapUser()
void(* TimerExpiryTracedCallback)(const uint64_t imsi, const uint16_t rnti, const uint16_t cellId, const std::string cause)
void(* ConnectionHandoverTracedCallback)(const uint64_t imsi, const uint16_t cellId, const uint16_t rnti)
void(* HandoverStartTracedCallback)(const uint64_t imsi, const uint16_t cellId, const uint16_t rnti, const uint16_t targetCid)
void SetNrGnbRrcSapUser(NrGnbRrcSapUser *s)
void ConfigureCell(const std::map< uint8_t, Ptr< BandwidthPartGnb > > &ccPhyConf)
Configure cell-specific parameters.
NrEpcX2SapUser * GetEpcX2SapUser()
void SetCsgId(uint32_t csgId, bool csgIndication)
Associate this RRC entity with a particular CSG information.
void HandoverLeavingTimeout(uint16_t rnti)
void SetNrMacSapProvider(NrMacSapProvider *s)
void SetS1SapProvider(NrEpcGnbS1SapProvider *s)
void SetNrHandoverManagementSapProvider(NrHandoverManagementSapProvider *s)
void SetNrGnbCmacSapProvider(NrGnbCmacSapProvider *s)
Part of the RRC protocol. This Service Access Point (SAP) is used to let the gNB RRC receive a messag...
Part of the RRC protocol. This Service Access Point (SAP) is used by the gNB RRC to send messages to ...
Service Access Point (SAP) offered by the handover algorithm instance to the eNodeB RRC instance.
Service Access Point (SAP) offered by the eNodeB RRC instance to the handover algorithm instance.
NrPdcpSpecificNrPdcpSapUser class.
NrRrcSap::RrcConnectionReconfiguration GetRrcConnectionReconfigurationForHandover(uint8_t componentCarrierId)
std::vector< NrEpcX2Sap::ErabToBeSetupItem > GetErabList()
void RecvRrcConnectionSetupCompleted(NrRrcSap::RrcConnectionSetupCompleted msg)
void SetSource(uint16_t sourceCellId, uint16_t sourceX2apId)
uint16_t GetSrsConfigurationIndex() const
void PrepareHandover(uint16_t cellId)
void RecvRrcConnectionRequest(NrRrcSap::RrcConnectionRequest msg)
void RecvHandoverCancel(NrEpcX2SapUser::HandoverCancelParams params)
void DoReceivePdcpSdu(NrPdcpSapUser::ReceivePdcpSduParameters params)
void(* StateTracedCallback)(const uint64_t imsi, const uint16_t cellId, const uint16_t rnti, const State oldState, const State newState)
NrEpcX2Sap::HandoverPreparationFailureParams BuildHoPrepFailMsg()
build handover preparation failure message
void CancelPendingEvents()
void ScheduleRrcConnectionReconfiguration()
void SendData(uint8_t bid, Ptr< Packet > p)
void ConfigureMacPhy()
Configure MAC and PHY aspects.
void ReleaseDataRadioBearer(uint8_t drbid)
void Configure()
Perform post-creation configuration steps.
uint8_t GetComponentCarrierId() const
void CmacUeConfigUpdateInd(NrGnbCmacSapUser::UeConfig cmacParams)
void ConfigureSrb0()
Initialize the gNB side of SRB0.
void StartDataRadioBearers()
void RecvHandoverPreparationFailure(uint16_t cellId)
void InitialContextSetupRequest()
NrEpcX2Sap::HandoverCancelParams BuildHoCancelMsg()
build handover cancel message
void RecvRrcConnectionReestablishmentComplete(NrRrcSap::RrcConnectionReestablishmentComplete msg)
void SetImsi(uint64_t imsi)
void ConfigureSrb1()
Initialize the gNB side of SRB1.
void RecvRrcConnectionReconfigurationCompleted(NrRrcSap::RrcConnectionReconfigurationCompleted msg)
void SendRrcConnectionRelease()
This function acts as an interface to trigger the connection release towards gNB, EPC and UE.
void RecvHandoverRequestAck(NrEpcX2SapUser::HandoverRequestAckParams params)
void RecvUeContextRelease(NrEpcX2SapUser::UeContextReleaseParams params)
void RecvSnStatusTransfer(NrEpcX2SapUser::SnStatusTransferParams params)
void CompleteSetupUe(NrGnbRrcSapProvider::CompleteSetupUeParameters params)
void ConfigureSap()
Initialize the SAP objects.
void RecvRrcConnectionReestablishmentRequest(NrRrcSap::RrcConnectionReestablishmentRequest msg)
void SetSrsConfigurationIndex(uint16_t srsConfIndex)
void RecordDataRadioBearersToBeStarted()
void RecvMeasurementReport(NrRrcSap::MeasurementReport msg)
void SendUeContextRelease()
static TypeId GetTypeId()
Get the type ID.
void SetPdschConfigDedicated(NrRrcSap::PdschConfigDedicated pdschConfigDedicated)
NrRrcSap::RadioResourceConfigDedicated GetRadioResourceConfigForHandoverPreparationInfo()
void RecvIdealUeContextRemoveRequest(uint16_t rnti)
void SetupDataRadioBearer(NrEpsBearer bearer, uint8_t bearerId, uint32_t gtpTeid, Ipv4Address transportLayerAddress)
static void SendPacket(Ptr< NetDevice > device, Address &addr, uint32_t packetSize)
PathSwitchRequestAcknowledgeParameters structure.
Parameters of the HANDOVER CANCEL message.
Parameters of the HANDOVER PREPARATION FAILURE message.
Parameters of the HANDOVER REQUEST ACKNOWLEDGE message.
Parameters of the HANDOVER REQUEST message.
Parameters of the RESOURCE STATUS UPDATE message.
Parameters of the SN STATUS TRANSFER message.
Parameters of the UE CONTEXT RELEASE message.
Parameters of the UE DATA primitive.
Parameters for [re]configuring the UE.
CompleteSetupUeParameters structure.
MeasurementReport structure.
NonCriticalExtensionConfiguration structure.
PdschConfigDedicated structure.
PhysicalConfigDedicated structure.
RadioResourceConfigDedicated structure.
Specifies criteria for triggering of an E-UTRA measurement reporting event.
RrcConnectionReconfigurationCompleted structure.
RrcConnectionReconfiguration structure.
RrcConnectionReestablishmentComplete structure.
RrcConnectionReestablishmentRequest structure.
RrcConnectionRequest structure.
RrcConnectionSetupCompleted structure.