A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
lte-rrc-protocol-ideal.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 * Author: Nicola Baldo <nbaldo@cttc.es>
7 */
8
10
11#include "lte-enb-net-device.h"
12#include "lte-enb-rrc.h"
13#include "lte-ue-net-device.h"
14#include "lte-ue-rrc.h"
15
16#include <ns3/fatal-error.h>
17#include <ns3/log.h>
18#include <ns3/node-list.h>
19#include <ns3/node.h>
20#include <ns3/nstime.h>
21#include <ns3/simulator.h>
22
23namespace ns3
24{
25
26NS_LOG_COMPONENT_DEFINE("LteRrcProtocolIdeal");
27
28/**
29 * \ingroup lte
30 *
31 */
32
33/// RRC ideal message delay
35
37
39 : m_ueRrcSapProvider(nullptr),
40 m_enbRrcSapProvider(nullptr)
41{
43}
44
48
49void
51{
52 NS_LOG_FUNCTION(this);
53 delete m_ueRrcSapUser;
54 m_rrc = nullptr;
55}
56
59{
60 static TypeId tid = TypeId("ns3::LteUeRrcProtocolIdeal")
62 .SetGroupName("Lte")
63 .AddConstructor<LteUeRrcProtocolIdeal>();
64 return tid;
65}
66
67void
72
78
79void
84
85void
87{
88 NS_LOG_FUNCTION(this);
89 // We don't care about SRB0/SRB1 since we use ideal RRC messages.
90}
91
92void
94{
95 // initialize the RNTI and get the EnbLteRrcSapProvider for the
96 // eNB we are currently attached to
97 m_rnti = m_rrc->GetRnti();
99
103 m_rnti,
104 msg);
105}
106
107void
116
117void
120{
121 // re-initialize the RNTI and get the EnbLteRrcSapProvider for the
122 // eNB we are currently attached to
123 m_rnti = m_rrc->GetRnti();
125
129 m_rnti,
130 msg);
131}
132
133void
143
144void
154
155void
164
165void
167{
168 NS_LOG_FUNCTION(this);
169
170 uint16_t cellId = m_rrc->GetCellId();
171 // re-initialize the RNTI and get the EnbLteRrcSapProvider for the
172 // eNB we are currently attached to or attempting random access to
173 // a target eNB
174 m_rnti = m_rrc->GetRnti();
175
176 NS_LOG_DEBUG("RNTI " << rnti << " sending UE context remove request to cell id " << cellId);
177 NS_ABORT_MSG_IF(m_rnti != rnti, "RNTI mismatch");
178
179 SetEnbRrcSapProvider(); // the provider has to be reset since the cell might have changed due to
180 // handover
181 // ideally informing eNB
185 m_rnti);
186}
187
188void
190{
191 NS_LOG_FUNCTION(this);
192
193 uint16_t cellId = m_rrc->GetCellId();
194 NS_LOG_DEBUG("RNTI " << m_rnti << " connected to cell " << cellId);
195
196 // walk list of all nodes to get the peer eNB
198 auto listEnd = NodeList::End();
199 bool found = false;
200 for (auto i = NodeList::Begin(); (i != listEnd) && (!found); ++i)
201 {
202 Ptr<Node> node = *i;
203 int nDevs = node->GetNDevices();
204 for (int j = 0; (j < nDevs) && (!found); j++)
205 {
206 enbDev = node->GetDevice(j)->GetObject<LteEnbNetDevice>();
207 if (!enbDev)
208 {
209 continue;
210 }
211 else
212 {
213 if (enbDev->HasCellId(cellId))
214 {
215 found = true;
216 break;
217 }
218 }
219 }
220 }
221 NS_ASSERT_MSG(found, " Unable to find eNB with CellId =" << cellId);
222 m_enbRrcSapProvider = enbDev->GetRrc()->GetLteEnbRrcSapProvider();
223 Ptr<LteEnbRrcProtocolIdeal> enbRrcProtocolIdeal =
224 enbDev->GetRrc()->GetObject<LteEnbRrcProtocolIdeal>();
225 enbRrcProtocolIdeal->SetUeRrcSapProvider(m_rnti, m_ueRrcSapProvider);
226}
227
229
236
241
242void
248
249TypeId
251{
252 static TypeId tid = TypeId("ns3::LteEnbRrcProtocolIdeal")
253 .SetParent<Object>()
254 .SetGroupName("Lte")
255 .AddConstructor<LteEnbRrcProtocolIdeal>();
256 return tid;
257}
258
259void
264
270
271void
273{
274 m_cellId = cellId;
275}
276
279{
280 auto it = m_enbRrcSapProviderMap.find(rnti);
281 NS_ASSERT_MSG(it != m_enbRrcSapProviderMap.end(), "could not find RNTI = " << rnti);
282 return it->second;
283}
284
285void
287{
288 auto it = m_enbRrcSapProviderMap.find(rnti);
289 // assign UE RRC only if the RNTI is found at eNB
290 if (it != m_enbRrcSapProviderMap.end())
291 {
292 it->second = p;
293 }
294}
295
296void
298{
299 NS_LOG_FUNCTION(this << rnti);
300
301 // // walk list of all nodes to get the peer UE RRC SAP Provider
302 // Ptr<LteUeRrc> ueRrc;
303 // NodeList::Iterator listEnd = NodeList::End ();
304 // bool found = false;
305 // for (NodeList::Iterator i = NodeList::Begin (); (i != listEnd) && (found == false); i++)
306 // {
307 // Ptr<Node> node = *i;
308 // int nDevs = node->GetNDevices ();
309 // for (int j = 0; j < nDevs; j++)
310 // {
311 // Ptr<LteUeNetDevice> ueDev = node->GetDevice (j)->GetObject <LteUeNetDevice> ();
312 // if (!ueDev)
313 // {
314 // continue;
315 // }
316 // else
317 // {
318 // ueRrc = ueDev->GetRrc ();
319 // if ((ueRrc->GetRnti () == rnti) && (ueRrc->GetCellId () == m_cellId))
320 // {
321 // found = true;
322 // break;
323 // }
324 // }
325 // }
326 // }
327 // NS_ASSERT_MSG (found , " Unable to find UE with RNTI=" << rnti << " cellId=" << m_cellId);
328 // m_enbRrcSapProviderMap[rnti] = ueRrc->GetLteUeRrcSapProvider ();
329
330 // just create empty entry, the UeRrcSapProvider will be set by the
331 // ue upon connection request or connection reconfiguration
332 // completed
333 m_enbRrcSapProviderMap[rnti] = nullptr;
334}
335
336void
338{
339 NS_LOG_FUNCTION(this << rnti);
340 m_enbRrcSapProviderMap.erase(rnti);
341}
342
343void
345{
346 NS_LOG_FUNCTION(this << cellId);
347 // walk list of all nodes to get UEs with this cellId
348 Ptr<LteUeRrc> ueRrc;
349 for (auto i = NodeList::Begin(); i != NodeList::End(); ++i)
350 {
351 Ptr<Node> node = *i;
352 int nDevs = node->GetNDevices();
353 for (int j = 0; j < nDevs; ++j)
354 {
355 Ptr<LteUeNetDevice> ueDev = node->GetDevice(j)->GetObject<LteUeNetDevice>();
356 if (ueDev)
357 {
358 Ptr<LteUeRrc> ueRrc = ueDev->GetRrc();
359 NS_LOG_LOGIC("considering UE IMSI " << ueDev->GetImsi() << " that has cellId "
360 << ueRrc->GetCellId());
361 if (ueRrc->GetCellId() == cellId)
362 {
363 NS_LOG_LOGIC("sending SI to IMSI " << ueDev->GetImsi());
364
367 ueRrc->GetLteUeRrcSapProvider(),
368 msg);
369 }
370 }
371 }
372 }
373}
374
375void
383
384void
394
395void
405
406void
416
417void
426
427void
435
436/*
437 * The purpose of LteEnbRrcProtocolIdeal is to avoid encoding
438 * messages. In order to do so, we need to have some form of encoding for
439 * inter-node RRC messages like HandoverPreparationInfo and HandoverCommand. Doing so
440 * directly is not practical (these messages includes a lot of
441 * information elements, so encoding all of them would defeat the
442 * purpose of LteEnbRrcProtocolIdeal. The workaround is to store the
443 * actual message in a global map, so that then we can just encode the
444 * key in a header and send that between eNBs over X2.
445 *
446 */
447
448static std::map<uint32_t, LteRrcSap::HandoverPreparationInfo>
449 g_handoverPreparationInfoMsgMap; ///< handover preparation info message map
451 0; ///< handover preparation info message ID counter
452
453/**
454 * This header encodes the map key discussed above. We keep this
455 * private since it should not be used outside this file.
456 *
457 */
459{
460 public:
461 /**
462 * Get the message ID function
463 *
464 * \returns the message ID
465 */
466 uint32_t GetMsgId() const;
467 /**
468 * Set the message ID function
469 *
470 * \param id the message ID
471 */
472 void SetMsgId(uint32_t id);
473 /**
474 * \brief Get the type ID.
475 * \return the object TypeId
476 */
477 static TypeId GetTypeId();
478 TypeId GetInstanceTypeId() const override;
479 void Print(std::ostream& os) const override;
480 uint32_t GetSerializedSize() const override;
481 void Serialize(Buffer::Iterator start) const override;
482 uint32_t Deserialize(Buffer::Iterator start) override;
483
484 private:
485 uint32_t m_msgId; ///< message ID
486};
487
493
494void
499
500TypeId
502{
503 static TypeId tid = TypeId("ns3::IdealHandoverPreparationInfoHeader")
504 .SetParent<Header>()
505 .SetGroupName("Lte")
506 .AddConstructor<IdealHandoverPreparationInfoHeader>();
507 return tid;
508}
509
510TypeId
515
516void
518{
519 os << " msgId=" << m_msgId;
520}
521
527
528void
533
540
544{
548 "msgId " << msgId << " already in use");
549 NS_LOG_INFO(" encoding msgId = " << msgId);
551 std::pair<uint32_t, LteRrcSap::HandoverPreparationInfo>(msgId, msg));
553 h.SetMsgId(msgId);
555 p->AddHeader(h);
556 return p;
557}
558
561{
563 p->RemoveHeader(h);
564 uint32_t msgId = h.GetMsgId();
565 NS_LOG_INFO(" decoding msgId = " << msgId);
566 auto it = g_handoverPreparationInfoMsgMap.find(msgId);
567 NS_ASSERT_MSG(it != g_handoverPreparationInfoMsgMap.end(), "msgId " << msgId << " not found");
568 LteRrcSap::HandoverPreparationInfo msg = it->second;
570 return msg;
571}
572
573static std::map<uint32_t, LteRrcSap::RrcConnectionReconfiguration>
574 g_handoverCommandMsgMap; ///< handover command message map
575static uint32_t g_handoverCommandMsgIdCounter = 0; ///< handover command message ID counter
576
577/**
578 * This header encodes the map key discussed above. We keep this
579 * private since it should not be used outside this file.
580 *
581 */
583{
584 public:
585 /**
586 * Get the message ID function
587 *
588 * \returns the message ID
589 */
590 uint32_t GetMsgId() const;
591 /**
592 * Set the message ID function
593 *
594 * \param id the message ID
595 */
596 void SetMsgId(uint32_t id);
597 /**
598 * \brief Get the type ID.
599 * \return the object TypeId
600 */
601 static TypeId GetTypeId();
602 TypeId GetInstanceTypeId() const override;
603 void Print(std::ostream& os) const override;
604 uint32_t GetSerializedSize() const override;
605 void Serialize(Buffer::Iterator start) const override;
606 uint32_t Deserialize(Buffer::Iterator start) override;
607
608 private:
609 uint32_t m_msgId; ///< message ID
610};
611
614{
615 return m_msgId;
616}
617
618void
623
624TypeId
626{
627 static TypeId tid = TypeId("ns3::IdealHandoverCommandHeader")
628 .SetParent<Header>()
629 .SetGroupName("Lte")
630 .AddConstructor<IdealHandoverCommandHeader>();
631 return tid;
632}
633
634TypeId
639
640void
642{
643 os << " msgId=" << m_msgId;
644}
645
648{
649 return 4;
650}
651
652void
654{
655 start.WriteU32(m_msgId);
656}
657
660{
661 m_msgId = start.ReadU32();
662 return GetSerializedSize();
663}
664
667{
670 "msgId " << msgId << " already in use");
671 NS_LOG_INFO(" encoding msgId = " << msgId);
673 std::pair<uint32_t, LteRrcSap::RrcConnectionReconfiguration>(msgId, msg));
675 h.SetMsgId(msgId);
677 p->AddHeader(h);
678 return p;
679}
680
683{
685 p->RemoveHeader(h);
686 uint32_t msgId = h.GetMsgId();
687 NS_LOG_INFO(" decoding msgId = " << msgId);
688 auto it = g_handoverCommandMsgMap.find(msgId);
689 NS_ASSERT_MSG(it != g_handoverCommandMsgMap.end(), "msgId " << msgId << " not found");
691 g_handoverCommandMsgMap.erase(it);
692 return msg;
693}
694
695} // namespace ns3
iterator in a Buffer instance
Definition buffer.h:89
Protocol header serialization and deserialization.
Definition header.h:33
This header encodes the map key discussed above.
uint32_t GetMsgId() const
Get the message ID function.
void Serialize(Buffer::Iterator start) const override
static TypeId GetTypeId()
Get the type ID.
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
void SetMsgId(uint32_t id)
Set the message ID function.
uint32_t GetSerializedSize() const override
uint32_t Deserialize(Buffer::Iterator start) override
void Print(std::ostream &os) const override
This header encodes the map key discussed above.
uint32_t GetMsgId() const
Get the message ID function.
void Serialize(Buffer::Iterator start) const override
void Print(std::ostream &os) const override
void SetMsgId(uint32_t id)
Set the message ID function.
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
uint32_t Deserialize(Buffer::Iterator start) override
The eNodeB device implementation.
Models the transmission of RRC messages from the UE to the eNB in an ideal fashion,...
void DoRemoveUe(uint16_t rnti)
Remove UE function.
void DoSendRrcConnectionReconfiguration(uint16_t rnti, LteRrcSap::RrcConnectionReconfiguration msg)
Send RRC connection reconfiguration function.
LteRrcSap::HandoverPreparationInfo DoDecodeHandoverPreparationInformation(Ptr< Packet > p)
Encode handover preparation information function.
void SetUeRrcSapProvider(uint16_t rnti, LteUeRrcSapProvider *p)
Set UE RRC SAP provider function.
void DoSendRrcConnectionSetup(uint16_t rnti, LteRrcSap::RrcConnectionSetup msg)
Send RRC connection setup function.
LteEnbRrcSapProvider * m_enbRrcSapProvider
the ENB RRC SAP provider
void SetCellId(uint16_t cellId)
Set the cell ID function.
static TypeId GetTypeId()
Get the type ID.
void DoSendSystemInformation(uint16_t cellId, LteRrcSap::SystemInformation msg)
Send system information function.
void DoSendRrcConnectionReject(uint16_t rnti, LteRrcSap::RrcConnectionReject msg)
Send RRC connection reject function.
LteEnbRrcSapUser * m_enbRrcSapUser
the ENB RRC SAP user
void DoSendRrcConnectionReestablishment(uint16_t rnti, LteRrcSap::RrcConnectionReestablishment msg)
Send RRC connection reestablishment function.
LteRrcSap::RrcConnectionReconfiguration DoDecodeHandoverCommand(Ptr< Packet > p)
Decode handover command function.
void DoSendRrcConnectionRelease(uint16_t rnti, LteRrcSap::RrcConnectionRelease msg)
Send RRC connection release function.
void SetLteEnbRrcSapProvider(LteEnbRrcSapProvider *p)
Set LTE ENB RRC SAP provider function.
std::map< uint16_t, LteUeRrcSapProvider * > m_enbRrcSapProviderMap
the LTE UE RRC SAP provider
void DoSendRrcConnectionReestablishmentReject(uint16_t rnti, LteRrcSap::RrcConnectionReestablishmentReject msg)
Send RRC connection reestablishment reject function.
friend class MemberLteEnbRrcSapUser< LteEnbRrcProtocolIdeal >
allow MemberLteEnbRrcSapUser<LteEnbRrcProtocolIdeal> class friend access
Ptr< Packet > DoEncodeHandoverPreparationInformation(LteRrcSap::HandoverPreparationInfo msg)
Encode handover preparation information function.
LteEnbRrcSapUser * GetLteEnbRrcSapUser()
Get LTE ENB RRC SAP user function.
Ptr< Packet > DoEncodeHandoverCommand(LteRrcSap::RrcConnectionReconfiguration msg)
Encode handover command function.
void DoSetupUe(uint16_t rnti, LteEnbRrcSapUser::SetupUeParameters params)
Setup UE function.
LteUeRrcSapProvider * GetUeRrcSapProvider(uint16_t rnti)
Get LTE UE RRC SAP provider function.
void DoDispose() override
Destructor implementation.
Part of the RRC protocol.
virtual void RecvRrcConnectionReestablishmentRequest(uint16_t rnti, RrcConnectionReestablishmentRequest msg)=0
Receive an RRCConnectionReestablishmentRequest message from a UE during an RRC connection re-establis...
virtual void RecvRrcConnectionReestablishmentComplete(uint16_t rnti, RrcConnectionReestablishmentComplete msg)=0
Receive an RRCConnectionReestablishmentComplete message from a UE during an RRC connection re-establi...
virtual void RecvRrcConnectionReconfigurationCompleted(uint16_t rnti, RrcConnectionReconfigurationCompleted msg)=0
Receive an RRCConnectionReconfigurationComplete message from a UE during an RRC connection reconfigur...
virtual void RecvRrcConnectionRequest(uint16_t rnti, RrcConnectionRequest msg)=0
Receive an RRCConnectionRequest message from a UE during an RRC connection establishment procedure (S...
virtual void RecvRrcConnectionSetupCompleted(uint16_t rnti, RrcConnectionSetupCompleted msg)=0
Receive an RRCConnectionSetupComplete message from a UE during an RRC connection establishment proced...
virtual void RecvMeasurementReport(uint16_t rnti, MeasurementReport msg)=0
Receive a MeasurementReport message from a UE during a measurement reporting procedure (Section 5....
virtual void RecvIdealUeContextRemoveRequest(uint16_t rnti)=0
Receive ideal UE context remove request from the UE RRC.
Part of the RRC protocol.
The LteUeNetDevice class implements the UE net device.
Models the transmission of RRC messages from the UE to the eNB in an ideal fashion,...
void DoSendRrcConnectionSetupCompleted(LteRrcSap::RrcConnectionSetupCompleted msg)
Send RRC connection setup completed function.
void DoSendMeasurementReport(LteRrcSap::MeasurementReport msg)
Send measurement report function.
friend class MemberLteUeRrcSapUser< LteUeRrcProtocolIdeal >
allow MemberLteUeRrcSapUser<LteUeRrcProtocolIdeal> class friend access
void DoSendIdealUeContextRemoveRequest(uint16_t rnti)
Send Ideal UE context remove request function.
LteUeRrcSapUser * m_ueRrcSapUser
the RRC SAP user
void DoDispose() override
Destructor implementation.
void SetUeRrc(Ptr< LteUeRrc > rrc)
Set LTE UE RRC function.
void DoSendRrcConnectionReestablishmentRequest(LteRrcSap::RrcConnectionReestablishmentRequest msg)
Send RRC connection reestablishment request function.
void DoSendRrcConnectionReconfigurationCompleted(LteRrcSap::RrcConnectionReconfigurationCompleted msg)
Send RRC connection reconfiguration completed function.
void SetLteUeRrcSapProvider(LteUeRrcSapProvider *p)
Set LTE UE RRC SAP provider function.
void SetEnbRrcSapProvider()
Set ENB RRC SAP provider.
void DoSendRrcConnectionReestablishmentComplete(LteRrcSap::RrcConnectionReestablishmentComplete msg)
Send RRC connection reestablishment complete function.
void DoSetup(LteUeRrcSapUser::SetupParameters params)
Setup function.
LteUeRrcSapUser * GetLteUeRrcSapUser()
Get LTE UE RRC SAP user function.
LteEnbRrcSapProvider * m_enbRrcSapProvider
the ENB RRC SAP provider
void DoSendRrcConnectionRequest(LteRrcSap::RrcConnectionRequest msg)
Send RRC connection request function.
LteUeRrcSapProvider * m_ueRrcSapProvider
the UE RRC SAP provider
static TypeId GetTypeId()
Get the type ID.
Part of the RRC protocol.
virtual void RecvRrcConnectionReconfiguration(RrcConnectionReconfiguration msg)=0
Receive an RRCConnectionReconfiguration message from the serving eNodeB during an RRC connection reco...
virtual void RecvRrcConnectionReject(RrcConnectionReject msg)=0
Receive an RRCConnectionReject message from the serving eNodeB during an RRC connection establishment...
virtual void RecvSystemInformation(SystemInformation msg)=0
Receive a SystemInformation message from the serving eNodeB during a system information acquisition p...
virtual void RecvRrcConnectionRelease(RrcConnectionRelease msg)=0
Receive an RRCConnectionRelease message from the serving eNodeB during an RRC connection release proc...
virtual void RecvRrcConnectionReestablishmentReject(RrcConnectionReestablishmentReject msg)=0
Receive an RRCConnectionReestablishmentReject message from the serving eNodeB during an RRC connectio...
virtual void RecvRrcConnectionSetup(RrcConnectionSetup msg)=0
Receive an RRCConnectionSetup message from the serving eNodeB during an RRC connection establishment ...
virtual void RecvRrcConnectionReestablishment(RrcConnectionReestablishment msg)=0
Receive an RRCConnectionReestablishment message from the serving eNodeB during an RRC connection re-e...
Part of the RRC protocol.
static Iterator Begin()
Definition node-list.cc:226
static Iterator End()
Definition node-list.cc:233
A base class which provides memory management and object aggregation.
Definition object.h:78
Smart pointer class similar to boost::intrusive_ptr.
static EventId Schedule(const Time &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
Definition simulator.h:560
Simulation virtual time values and global simulation resolution.
Definition nstime.h:94
a unique identifier for an interface.
Definition type-id.h:48
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition type-id.cc:1001
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Definition assert.h:75
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if a condition is true, with a message.
Definition abort.h:97
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition log.h:191
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition log.h:257
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
Definition log.h:271
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition log.h:264
static const Time RRC_IDEAL_MSG_DELAY
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition object-base.h:35
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
Definition ptr.h:436
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition nstime.h:1320
Every class exported by the ns3 library is enclosed in the ns3 namespace.
static uint32_t g_handoverPreparationInfoMsgIdCounter
handover preparation info message ID counter
static std::map< uint32_t, LteRrcSap::RrcConnectionReconfiguration > g_handoverCommandMsgMap
handover command message map
static uint32_t g_handoverCommandMsgIdCounter
handover command message ID counter
static std::map< uint32_t, LteRrcSap::HandoverPreparationInfo > g_handoverPreparationInfoMsgMap
handover preparation info message map
SetupUeParameters structure.
HandoverPreparationInfo structure.
MeasurementReport structure.
RrcConnectionReconfigurationCompleted structure.
RrcConnectionReconfiguration structure.
RrcConnectionReestablishmentComplete structure.
RrcConnectionReestablishment structure.
RrcConnectionReestablishmentReject structure.
RrcConnectionReestablishmentRequest structure.
RrcConnectionReject structure.
RrcConnectionRelease structure.
RrcConnectionRequest structure.
RrcConnectionSetupCompleted structure.
RrcConnectionSetup structure.
SystemInformation structure.
SetupParameters structure.