5G-LENA nr-v4.0-29-g6d8085cd
The 5G/NR module for the ns-3 simulator
Loading...
Searching...
No Matches
nr-ue-rrc.h
1// Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
2// Copyright (c) 2018 Fraunhofer ESK : RLF extensions
3//
4// SPDX-License-Identifier: GPL-2.0-only
5//
6// Author: Nicola Baldo <nbaldo@cttc.es>
7// Budiarto Herman <budiarto.herman@magister.fi>
8// Modified by:
9// Danilo Abrignani <danilo.abrignani@unibo.it> (Carrier Aggregation - GSoC 2015)
10// Biljana Bojovic <biljana.bojovic@cttc.es> (Carrier Aggregation)
11// Vignesh Babu <ns3-dev@esk.fraunhofer.de> (RLF extensions)
12
13#ifndef NR_UE_RRC_H
14#define NR_UE_RRC_H
15
16#include "nr-as-sap.h"
17#include "nr-pdcp-sap.h"
18#include "nr-rrc-sap.h"
19#include "nr-ue-ccm-rrc-sap.h"
20#include "nr-ue-cmac-sap.h"
21#include "nr-ue-cphy-sap.h"
22
23#include "ns3/object.h"
24#include "ns3/packet.h"
25#include "ns3/traced-callback.h"
26
27#include <map>
28#include <set>
29#include <vector>
30
31namespace ns3
32{
33
50extern const Time NR_UE_MEASUREMENT_REPORT_DELAY;
51
52class NrRlc;
53class NrMacSapProvider;
54class NrUeCmacSapUser;
55class NrUeCmacSapProvider;
56class NrDataRadioBearerInfo;
57class NrSignalingRadioBearerInfo;
58
63class NrUeRrc : public Object
64{
72 friend class MemberNrAsSapProvider<NrUeRrc>;
74 friend class MemberNrUeCphySapUser<NrUeRrc>;
78 friend class MemberNrUeCcmRrcSapUser<NrUeRrc>;
79
80 public:
85 enum State
86 {
87 IDLE_START = 0,
88 IDLE_CELL_SEARCH,
89 IDLE_WAIT_MIB_SIB1,
90 IDLE_WAIT_MIB,
91 IDLE_WAIT_SIB1,
92 IDLE_CAMPED_NORMALLY,
93 IDLE_WAIT_SIB2,
94 IDLE_RANDOM_ACCESS,
95 IDLE_CONNECTING,
96 CONNECTED_NORMALLY,
97 CONNECTED_HANDOVER,
98 CONNECTED_PHY_PROBLEM,
99 CONNECTED_REESTABLISHING,
100 NUM_STATES
101 };
102
107 NrUeRrc();
108
112 ~NrUeRrc() override;
113
114 // inherited from Object
115 private:
116 void DoDispose() override;
117
118 public:
123 static TypeId GetTypeId();
124
126 void InitializeSap();
127
131 void InitializeSrb0();
132
145 void SetNrUeCphySapProvider(NrUeCphySapProvider* s, uint8_t index);
146
158 NrUeCphySapUser* GetNrUeCphySapUser(uint8_t index);
159
172 void SetNrUeCmacSapProvider(NrUeCmacSapProvider* s, uint8_t index);
173
184 NrUeCmacSapUser* GetNrUeCmacSapUser(uint8_t index);
185
192
199
208
214 void SetAsSapUser(NrAsSapUser* s);
215
222
229
236
241 void SetImsi(uint64_t imsi);
242
248 void StorePreviousCellId(uint16_t cellId);
249
254 uint64_t GetImsi() const;
255
260 uint16_t GetRnti() const;
261
266 uint16_t GetCellId() const;
267
272 bool IsServingCell(uint16_t cellId) const;
273
277 uint8_t GetUlBandwidth() const;
278
282 uint8_t GetDlBandwidth() const;
283
287 uint32_t GetDlEarfcn() const;
288
292 uint32_t GetUlEarfcn() const;
293
298 State GetState() const;
299
305 uint16_t GetPreviousCellId() const;
306
312 void SetUseRlcSm(bool val);
313
318 void SetPrimaryUlIndex(uint16_t primaryIndex);
319
323 uint16_t GetPrimaryUlIndex() const;
324
329 void SetPrimaryDlIndex(uint16_t primaryIndex);
330
334 uint16_t GetPrimaryDlIndex() const;
335
340 static const std::string ToString(NrUeRrc::State s);
341
348 typedef void (*CellSelectionTracedCallback)(uint64_t imsi, uint16_t cellId);
349
357 typedef void (*ImsiCidRntiTracedCallback)(uint64_t imsi, uint16_t cellId, uint16_t rnti);
358
368 typedef void (*MibSibHandoverTracedCallback)(uint64_t imsi,
369 uint16_t cellId,
370 uint16_t rnti,
371 uint16_t otherCid);
372
382 typedef void (*StateTracedCallback)(uint64_t imsi,
383 uint16_t cellId,
384 uint16_t rnti,
385 State oldState,
386 State newState);
387
394 typedef void (*SCarrierConfiguredTracedCallback)(Ptr<NrUeRrc>,
395 std::list<NrRrcSap::SCellToAddMod>);
396
407 typedef void (*PhySyncDetectionTracedCallback)(uint64_t imsi,
408 uint16_t rnti,
409 uint16_t cellId,
410 std::string type,
411 uint16_t count);
412
422 typedef void (*ImsiCidRntiCountTracedCallback)(uint64_t imsi,
423 uint16_t cellId,
424 uint16_t rnti,
425 uint8_t count);
426
427 private:
428 // PDCP SAP methods
434 void DoReceivePdcpSdu(NrPdcpSapUser::ReceivePdcpSduParameters params);
435
436 // CMAC SAP methods
442 void DoSetTemporaryCellRnti(uint16_t rnti);
444 void DoNotifyRandomAccessSuccessful();
446 void DoNotifyRandomAccessFailed();
447
448 // NR AS SAP methods
454 void DoSetCsgWhiteList(uint32_t csgId);
461 void DoForceCampedOnGnb(uint16_t cellId, uint32_t dlEarfcn);
467 void DoStartCellSelection(uint32_t dlEarfcn);
469 void DoConnect();
476 void DoSendData(Ptr<Packet> packet, uint8_t bid);
478 void DoDisconnect();
479
480 // CPHY SAP methods
487 void DoRecvMasterInformationBlock(uint16_t cellId, NrRrcSap::MasterInformationBlock msg);
494 void DoRecvSystemInformationBlockType1(uint16_t cellId,
501 void DoReportUeMeasurements(NrUeCphySapUser::UeMeasurementsParameters params);
502
503 // RRC SAP methods
504
509 void DoCompleteSetup(NrUeRrcSapProvider::CompleteSetupParameters params);
514 void DoRecvSystemInformation(NrRrcSap::SystemInformation msg);
520 void DoRecvRrcConnectionSetup(NrRrcSap::RrcConnectionSetup msg);
526 void DoRecvRrcConnectionReconfiguration(NrRrcSap::RrcConnectionReconfiguration msg);
532 void DoRecvRrcConnectionReestablishment(NrRrcSap::RrcConnectionReestablishment msg);
538 void DoRecvRrcConnectionReestablishmentReject(NrRrcSap::RrcConnectionReestablishmentReject msg);
544 void DoRecvRrcConnectionRelease(NrRrcSap::RrcConnectionRelease msg);
550 void DoRecvRrcConnectionReject(NrRrcSap::RrcConnectionReject msg);
551
556 void DoSetNumberOfComponentCarriers(uint16_t noOfComponentCarriers);
557
558 // INTERNAL METHODS
559
567 void SynchronizeToStrongestCell();
568
586 void EvaluateCellForSelection();
587
641 void ApplyMeasConfig(NrRrcSap::MeasConfig mc);
642
666 void SaveUeMeasurements(uint16_t cellId,
667 double rsrp,
668 double rsrq,
669 bool useLayer3Filtering,
670 uint8_t componentCarrierId);
671
696 void MeasurementReportTriggering(uint8_t measId);
697
729 void SendMeasurementReport(uint8_t measId);
730
735 void ApplyRadioResourceConfigDedicated(NrRrcSap::RadioResourceConfigDedicated rrcd);
740 void ApplyRadioResourceConfigDedicatedSecondaryCarrier(
743 void StartConnection();
754 void LeaveConnectedMode();
756 void DisposeOldSrb1();
762 uint8_t Bid2Drbid(uint8_t bid);
767 void SwitchToState(State s);
768
769 std::map<uint8_t, uint8_t> m_bid2DrbidMap;
770
771 std::vector<NrUeCphySapUser*> m_cphySapUser;
772 std::vector<NrUeCphySapProvider*> m_cphySapProvider;
773
774 std::vector<NrUeCmacSapUser*> m_cmacSapUser;
775 std::vector<NrUeCmacSapProvider*> m_cmacSapProvider;
776
777 NrUeRrcSapUser* m_rrcSapUser;
778 NrUeRrcSapProvider* m_rrcSapProvider;
779
780 NrMacSapProvider* m_macSapProvider;
781 NrPdcpSapUser* m_drbPdcpSapUser;
782
783 NrAsSapProvider* m_asSapProvider;
784 NrAsSapUser* m_asSapUser;
785
786 // Receive API calls from the NrUeComponentCarrierManager instance.
787 // NrCcmRrcSapUser* m_ccmRrcSapUser;
789 NrUeCcmRrcSapProvider* m_ccmRrcSapProvider;
790 NrUeCcmRrcSapUser* m_ccmRrcSapUser;
791
793 State m_state;
794
796 uint64_t m_imsi;
800 uint16_t m_rnti;
804 uint16_t m_cellId;
805
809 uint16_t m_primaryUlIndex{0};
810
814 uint16_t m_primaryDlIndex{0};
815
819 Ptr<NrSignalingRadioBearerInfo> m_srb0;
823 Ptr<NrSignalingRadioBearerInfo> m_srb1;
828 Ptr<NrSignalingRadioBearerInfo> m_srb1Old;
833 std::map<uint8_t, Ptr<NrDataRadioBearerInfo>> m_drbMap;
834
839 bool m_useRlcSm;
840
841 uint8_t m_lastRrcTransactionIdentifier;
842
843 NrRrcSap::PdschConfigDedicated m_pdschConfigDedicated;
844
845 uint16_t m_dlBandwidth;
846 uint16_t m_ulBandwidth;
848 uint32_t m_dlEarfcn;
849 uint32_t m_ulEarfcn;
850 std::list<NrRrcSap::SCellToAddMod> m_sCellToAddModList;
856 TracedCallback<uint64_t, uint16_t, uint16_t, uint16_t> m_mibReceivedTrace;
862 TracedCallback<uint64_t, uint16_t, uint16_t, uint16_t> m_sib1ReceivedTrace;
867 TracedCallback<uint64_t, uint16_t, uint16_t> m_sib2ReceivedTrace;
873 TracedCallback<uint64_t, uint16_t, uint16_t, State, State> m_stateTransitionTrace;
878 TracedCallback<uint64_t, uint16_t> m_initialCellSelectionEndOkTrace;
883 TracedCallback<uint64_t, uint16_t> m_initialCellSelectionEndErrorTrace;
889 TracedCallback<uint64_t, uint16_t, uint16_t> m_randomAccessSuccessfulTrace;
894 TracedCallback<uint64_t, uint16_t, uint16_t> m_randomAccessErrorTrace;
899 TracedCallback<uint64_t, uint16_t, uint16_t> m_connectionEstablishedTrace;
904 TracedCallback<uint64_t, uint16_t, uint16_t, uint8_t> m_connectionTimeoutTrace;
909 TracedCallback<uint64_t, uint16_t, uint16_t> m_connectionReconfigurationTrace;
914 TracedCallback<uint64_t, uint16_t, uint16_t, uint16_t> m_handoverStartTrace;
919 TracedCallback<uint64_t, uint16_t, uint16_t> m_handoverEndOkTrace;
924 TracedCallback<uint64_t, uint16_t, uint16_t> m_handoverEndErrorTrace;
930 TracedCallback<Ptr<NrUeRrc>, std::list<NrRrcSap::SCellToAddMod>> m_sCarrierConfiguredTrace;
936 TracedCallback<uint64_t, uint16_t, uint16_t> m_srb1CreatedTrace;
942 TracedCallback<uint64_t, uint16_t, uint16_t, uint8_t> m_drbCreatedTrace;
948 TracedCallback<uint64_t, uint16_t, uint16_t, std::string, uint8_t> m_phySyncDetectionTrace;
953 TracedCallback<uint64_t, uint16_t, uint16_t> m_radioLinkFailureTrace;
954
956 bool m_connectionPending;
958 bool m_hasReceivedMib;
960 bool m_hasReceivedSib1;
962 bool m_hasReceivedSib2;
963
965 NrRrcSap::SystemInformationBlockType1 m_lastSib1;
966
968 std::set<uint16_t> m_acceptableCell;
969
971 uint32_t m_csgWhiteList;
972
973 // INTERNAL DATA STRUCTURE RELATED TO UE MEASUREMENTS
974
982 struct VarMeasConfig
983 {
984 std::map<uint8_t, NrRrcSap::MeasIdToAddMod> measIdList;
985 std::map<uint8_t, NrRrcSap::MeasObjectToAddMod> measObjectList;
986 std::map<uint8_t, NrRrcSap::ReportConfigToAddMod> reportConfigList;
987 NrRrcSap::QuantityConfig quantityConfig;
988 double aRsrp;
989 double aRsrq;
990 };
991
998 VarMeasConfig m_varMeasConfig;
999
1007 struct VarMeasReport
1008 {
1009 uint8_t measId;
1010 std::set<uint16_t> cellsTriggeredList;
1011 uint32_t numberOfReportsSent;
1012 EventId periodicReportTimer;
1013 };
1014
1020 std::map<uint8_t, VarMeasReport> m_varMeasReportList;
1021
1025 typedef std::list<uint16_t> ConcernedCells_t;
1026
1045 void VarMeasReportListAdd(uint8_t measId, ConcernedCells_t enteringCells);
1046
1065 void VarMeasReportListErase(uint8_t measId, ConcernedCells_t leavingCells, bool reportOnLeave);
1066
1077 void VarMeasReportListClear(uint8_t measId);
1078
1082 struct MeasValues
1083 {
1084 double rsrp;
1085 double rsrq;
1086 uint32_t carrierFreq;
1087 };
1088
1102 std::map<uint16_t, MeasValues> m_storedMeasValues;
1103
1107 std::map<uint16_t, std::map<uint8_t, MeasValues>> m_storedMeasValuesPerCarrier;
1108
1125 std::map<uint16_t, MeasValues> m_storedScellMeasValues;
1126
1132 struct PendingTrigger_t
1133 {
1134 uint8_t measId;
1135 ConcernedCells_t concernedCells;
1136 EventId
1137 timer;
1138 };
1139
1149 std::map<uint8_t, std::list<PendingTrigger_t>> m_enteringTriggerQueue;
1150
1161 std::map<uint8_t, std::list<PendingTrigger_t>> m_leavingTriggerQueue;
1162
1180 void CancelEnteringTrigger(uint8_t measId);
1181
1201 void CancelEnteringTrigger(uint8_t measId, uint16_t cellId);
1202
1220 void CancelLeavingTrigger(uint8_t measId);
1221
1241 void CancelLeavingTrigger(uint8_t measId, uint16_t cellId);
1242
1248 Time m_t300;
1249
1254 EventId m_connectionTimeout;
1255
1260 void ConnectionTimeout();
1261
1270 Time m_t310;
1271
1276 uint8_t m_n310;
1277
1282 uint8_t m_n311;
1283
1293 EventId m_radioLinkFailureDetected;
1294
1295 uint8_t m_noOfSyncIndications;
1297
1298 bool m_leaveConnectedMode;
1300
1301 uint16_t m_previousCellId;
1302
1303 uint8_t m_connEstFailCountLimit;
1305
1306 uint8_t m_connEstFailCount;
1317 void RadioLinkFailureDetected();
1318
1325 void DoNotifyInSync();
1326
1333 void DoNotifyOutOfSync();
1334
1343 void DoResetSyncIndicationCounter();
1344
1359 void ResetRlfParams();
1360
1361 public:
1366
1367}; // end of class NrUeRrc
1368
1369} // namespace ns3
1370
1371#endif // NR_UE_RRC_H
MemberNrUeCcmRrcSapUser class.
NrPdcpSpecificNrPdcpSapUser class.
Service Access Point (SAP) offered by the UE component carrier manager to the UE RRC.
Service Access Point (SAP) offered by the UE RRC to the UE CCM.
void SetNrUeCphySapProvider(NrUeCphySapProvider *s)
Definition nr-ue-rrc.cc:313
void(* MibSibHandoverTracedCallback)(uint64_t imsi, uint16_t cellId, uint16_t rnti, uint16_t otherCid)
Definition nr-ue-rrc.h:368
NrAsSapProvider * GetAsSapProvider()
Definition nr-ue-rrc.cc:410
void SetPrimaryUlIndex(uint16_t primaryIndex)
Sets the index of the UE PHY/MAC that will be used as the primary UL PHY/MAC.
Definition nr-ue-rrc.cc:519
uint16_t GetPrimaryDlIndex() const
Returns the primary index.
Definition nr-ue-rrc.cc:537
friend class UeRrcMemberNrGnbCmacSapUser
allow UeRrcMemberNrGnbCmacSapUser class friend access
Definition nr-ue-rrc.h:68
void(* ImsiCidRntiCountTracedCallback)(uint64_t imsi, uint16_t cellId, uint16_t rnti, uint8_t count)
Definition nr-ue-rrc.h:422
void(* SCarrierConfiguredTracedCallback)(Ptr< NrUeRrc >, std::list< NrRrcSap::SCellToAddMod >)
Definition nr-ue-rrc.h:394
uint8_t GetDlBandwidth() const
Definition nr-ue-rrc.cc:478
void SetNrCcmRrcSapProvider(NrUeCcmRrcSapProvider *s)
Definition nr-ue-rrc.cc:390
void(* ImsiCidRntiTracedCallback)(uint64_t imsi, uint16_t cellId, uint16_t rnti)
Definition nr-ue-rrc.h:357
uint32_t GetDlEarfcn() const
Definition nr-ue-rrc.cc:485
uint16_t GetPrimaryUlIndex() const
Returns the primary index.
Definition nr-ue-rrc.cc:525
uint16_t GetRnti() const
Definition nr-ue-rrc.cc:443
uint16_t GetPreviousCellId() const
Get the previous cell id.
Definition nr-ue-rrc.cc:505
void SetAsSapUser(NrAsSapUser *s)
Definition nr-ue-rrc.cc:404
void SetPrimaryDlIndex(uint16_t primaryIndex)
Sets the index of the UE PHY/MAC that will be used as the primary UL PHY/MAC.
Definition nr-ue-rrc.cc:531
~NrUeRrc() override
Definition nr-ue-rrc.cc:140
NrUeCcmRrcSapUser * GetNrCcmRrcSapUser()
Definition nr-ue-rrc.cc:397
void(* CellSelectionTracedCallback)(uint64_t imsi, uint16_t cellId)
Definition nr-ue-rrc.h:348
void SetUseRlcSm(bool val)
Definition nr-ue-rrc.cc:512
friend class UeMemberNrUeCmacSapUser
allow UeMemberNrUeCmacSapUser class friend access
Definition nr-ue-rrc.h:66
State GetState() const
Definition nr-ue-rrc.cc:498
static TypeId GetTypeId()
Get the type ID.
Definition nr-ue-rrc.cc:168
void(* PhySyncDetectionTracedCallback)(uint64_t imsi, uint16_t rnti, uint16_t cellId, std::string type, uint16_t count)
Definition nr-ue-rrc.h:407
void SetNrMacSapProvider(NrMacSapProvider *s)
Definition nr-ue-rrc.cc:383
static const std::string ToString(NrUeRrc::State s)
uint32_t GetUlEarfcn() const
Definition nr-ue-rrc.cc:491
void SetNrUeCmacSapProvider(NrUeCmacSapProvider *s)
This function is overloaded to maintain backward compatibility.
Definition nr-ue-rrc.cc:341
void SetImsi(uint64_t imsi)
Definition nr-ue-rrc.cc:416
bool IsServingCell(uint16_t cellId) const
Definition nr-ue-rrc.cc:457
NrUeCphySapUser * GetNrUeCphySapUser()
Definition nr-ue-rrc.cc:327
NrUeRrcSapProvider * GetNrUeRrcSapProvider()
Definition nr-ue-rrc.cc:376
void InitializeSap()
Initialize SAP.
Definition nr-ue-rrc.cc:575
uint8_t GetUlBandwidth() const
Definition nr-ue-rrc.cc:471
uint16_t m_numberOfComponentCarriers
Definition nr-ue-rrc.h:1365
void SetNrUeRrcSapUser(NrUeRrcSapUser *s)
Definition nr-ue-rrc.cc:369
uint64_t GetImsi() const
Definition nr-ue-rrc.cc:437
NrUeCmacSapUser * GetNrUeCmacSapUser()
This function is overloaded to maintain backward compatibility.
Definition nr-ue-rrc.cc:355
uint16_t GetCellId() const
Definition nr-ue-rrc.cc:450
void(* StateTracedCallback)(uint64_t imsi, uint16_t cellId, uint16_t rnti, State oldState, State newState)
Definition nr-ue-rrc.h:382
void InitializeSrb0()
Initialize the UE side of SRB0.
Definition nr-ue-rrc.cc:543
void StorePreviousCellId(uint16_t cellId)
Store the previous cell id.
Definition nr-ue-rrc.cc:430
Part of the RRC protocol. This Service Access Point (SAP) is used to let the UE RRC receive a message...
Part of the RRC protocol. This Service Access Point (SAP) is used by the UE RRC to send messages to t...
Definition nr-rrc-sap.h:966
MasterInformationBlock structure.
Definition nr-rrc-sap.h:627
MeasConfig structure.
Definition nr-rrc-sap.h:558
NonCriticalExtensionConfiguration structure.
Definition nr-rrc-sap.h:880
RadioResourceConfigDedicated structure.
Definition nr-rrc-sap.h:283
RrcConnectionReconfiguration structure.
Definition nr-rrc-sap.h:887
RrcConnectionReestablishment structure.
Definition nr-rrc-sap.h:917
RrcConnectionReestablishmentReject structure.
Definition nr-rrc-sap.h:931
RrcConnectionReject structure.
Definition nr-rrc-sap.h:942
RrcConnectionRelease structure.
Definition nr-rrc-sap.h:936
RrcConnectionSetup structure.
Definition nr-rrc-sap.h:742
SystemInformationBlockType1 structure.
Definition nr-rrc-sap.h:635
SystemInformation structure.
Definition nr-rrc-sap.h:649
UeMeasurementsParameters structure.
CompleteSetupParameters structure.