A Discrete-Event Network Simulator
API
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 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation;
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 *
17 * Author: Nicola Baldo <nbaldo@cttc.es>
18 */
19
21
22#include "lte-enb-net-device.h"
23#include "lte-enb-rrc.h"
24#include "lte-ue-net-device.h"
25#include "lte-ue-rrc.h"
26
27#include <ns3/fatal-error.h>
28#include <ns3/log.h>
29#include <ns3/node-list.h>
30#include <ns3/node.h>
31#include <ns3/nstime.h>
32#include <ns3/simulator.h>
33
34namespace ns3
35{
36
37NS_LOG_COMPONENT_DEFINE("LteRrcProtocolIdeal");
38
46
48
50 : m_ueRrcSapProvider(nullptr),
51 m_enbRrcSapProvider(nullptr)
52{
54}
55
57{
58}
59
60void
62{
63 NS_LOG_FUNCTION(this);
64 delete m_ueRrcSapUser;
65 m_rrc = nullptr;
66}
67
70{
71 static TypeId tid = TypeId("ns3::LteUeRrcProtocolIdeal")
73 .SetGroupName("Lte")
74 .AddConstructor<LteUeRrcProtocolIdeal>();
75 return tid;
76}
77
78void
80{
82}
83
86{
87 return m_ueRrcSapUser;
88}
89
90void
92{
93 m_rrc = rrc;
94}
95
96void
98{
99 NS_LOG_FUNCTION(this);
100 // We don't care about SRB0/SRB1 since we use ideal RRC messages.
101}
102
103void
105{
106 // initialize the RNTI and get the EnbLteRrcSapProvider for the
107 // eNB we are currently attached to
108 m_rnti = m_rrc->GetRnti();
110
114 m_rnti,
115 msg);
116}
117
118void
120{
124 m_rnti,
125 msg);
126}
127
128void
131{
132 // re-initialize the RNTI and get the EnbLteRrcSapProvider for the
133 // eNB we are currently attached to
134 m_rnti = m_rrc->GetRnti();
136
140 m_rnti,
141 msg);
142}
143
144void
147{
151 m_rnti,
152 msg);
153}
154
155void
158{
162 m_rnti,
163 msg);
164}
165
166void
168{
172 m_rnti,
173 msg);
174}
175
176void
178{
179 NS_LOG_FUNCTION(this);
180
181 uint16_t cellId = m_rrc->GetCellId();
182 // re-initialize the RNTI and get the EnbLteRrcSapProvider for the
183 // eNB we are currently attached to or attempting random access to
184 // a target eNB
185 m_rnti = m_rrc->GetRnti();
186
187 NS_LOG_DEBUG("RNTI " << rnti << " sending UE context remove request to cell id " << cellId);
188 NS_ABORT_MSG_IF(m_rnti != rnti, "RNTI mismatch");
189
190 SetEnbRrcSapProvider(); // the provider has to be reset since the cell might have changed due to
191 // handover
192 // ideally informing eNB
196 m_rnti);
197}
198
199void
201{
202 NS_LOG_FUNCTION(this);
203
204 uint16_t cellId = m_rrc->GetCellId();
205 NS_LOG_DEBUG("RNTI " << m_rnti << " connected to cell " << cellId);
206
207 // walk list of all nodes to get the peer eNB
210 bool found = false;
211 for (NodeList::Iterator i = NodeList::Begin(); (i != listEnd) && (!found); ++i)
212 {
213 Ptr<Node> node = *i;
214 int nDevs = node->GetNDevices();
215 for (int j = 0; (j < nDevs) && (!found); j++)
216 {
217 enbDev = node->GetDevice(j)->GetObject<LteEnbNetDevice>();
218 if (!enbDev)
219 {
220 continue;
221 }
222 else
223 {
224 if (enbDev->HasCellId(cellId))
225 {
226 found = true;
227 break;
228 }
229 }
230 }
231 }
232 NS_ASSERT_MSG(found, " Unable to find eNB with CellId =" << cellId);
233 m_enbRrcSapProvider = enbDev->GetRrc()->GetLteEnbRrcSapProvider();
234 Ptr<LteEnbRrcProtocolIdeal> enbRrcProtocolIdeal =
235 enbDev->GetRrc()->GetObject<LteEnbRrcProtocolIdeal>();
236 enbRrcProtocolIdeal->SetUeRrcSapProvider(m_rnti, m_ueRrcSapProvider);
237}
238
240
242 : m_enbRrcSapProvider(nullptr)
243{
244 NS_LOG_FUNCTION(this);
246}
247
249{
250 NS_LOG_FUNCTION(this);
251}
252
253void
255{
256 NS_LOG_FUNCTION(this);
257 delete m_enbRrcSapUser;
258}
259
260TypeId
262{
263 static TypeId tid = TypeId("ns3::LteEnbRrcProtocolIdeal")
264 .SetParent<Object>()
265 .SetGroupName("Lte")
266 .AddConstructor<LteEnbRrcProtocolIdeal>();
267 return tid;
268}
269
270void
272{
274}
275
278{
279 return m_enbRrcSapUser;
280}
281
282void
284{
285 m_cellId = cellId;
286}
287
290{
291 std::map<uint16_t, LteUeRrcSapProvider*>::const_iterator it;
292 it = m_enbRrcSapProviderMap.find(rnti);
293 NS_ASSERT_MSG(it != m_enbRrcSapProviderMap.end(), "could not find RNTI = " << rnti);
294 return it->second;
295}
296
297void
299{
300 std::map<uint16_t, LteUeRrcSapProvider*>::iterator it;
301 it = m_enbRrcSapProviderMap.find(rnti);
302 // assign UE RRC only if the RNTI is found at eNB
303 if (it != m_enbRrcSapProviderMap.end())
304 {
305 it->second = p;
306 }
307}
308
309void
311{
312 NS_LOG_FUNCTION(this << rnti);
313
314 // // walk list of all nodes to get the peer UE RRC SAP Provider
315 // Ptr<LteUeRrc> ueRrc;
316 // NodeList::Iterator listEnd = NodeList::End ();
317 // bool found = false;
318 // for (NodeList::Iterator i = NodeList::Begin (); (i != listEnd) && (found == false); i++)
319 // {
320 // Ptr<Node> node = *i;
321 // int nDevs = node->GetNDevices ();
322 // for (int j = 0; j < nDevs; j++)
323 // {
324 // Ptr<LteUeNetDevice> ueDev = node->GetDevice (j)->GetObject <LteUeNetDevice> ();
325 // if (!ueDev)
326 // {
327 // continue;
328 // }
329 // else
330 // {
331 // ueRrc = ueDev->GetRrc ();
332 // if ((ueRrc->GetRnti () == rnti) && (ueRrc->GetCellId () == m_cellId))
333 // {
334 // found = true;
335 // break;
336 // }
337 // }
338 // }
339 // }
340 // NS_ASSERT_MSG (found , " Unable to find UE with RNTI=" << rnti << " cellId=" << m_cellId);
341 // m_enbRrcSapProviderMap[rnti] = ueRrc->GetLteUeRrcSapProvider ();
342
343 // just create empty entry, the UeRrcSapProvider will be set by the
344 // ue upon connection request or connection reconfiguration
345 // completed
346 m_enbRrcSapProviderMap[rnti] = nullptr;
347}
348
349void
351{
352 NS_LOG_FUNCTION(this << rnti);
353 m_enbRrcSapProviderMap.erase(rnti);
354}
355
356void
358{
359 NS_LOG_FUNCTION(this << cellId);
360 // walk list of all nodes to get UEs with this cellId
361 Ptr<LteUeRrc> ueRrc;
362 for (NodeList::Iterator i = NodeList::Begin(); i != NodeList::End(); ++i)
363 {
364 Ptr<Node> node = *i;
365 int nDevs = node->GetNDevices();
366 for (int j = 0; j < nDevs; ++j)
367 {
368 Ptr<LteUeNetDevice> ueDev = node->GetDevice(j)->GetObject<LteUeNetDevice>();
369 if (ueDev)
370 {
371 Ptr<LteUeRrc> ueRrc = ueDev->GetRrc();
372 NS_LOG_LOGIC("considering UE IMSI " << ueDev->GetImsi() << " that has cellId "
373 << ueRrc->GetCellId());
374 if (ueRrc->GetCellId() == cellId)
375 {
376 NS_LOG_LOGIC("sending SI to IMSI " << ueDev->GetImsi());
377
380 ueRrc->GetLteUeRrcSapProvider(),
381 msg);
382 }
383 }
384 }
385 }
386}
387
388void
390{
394 msg);
395}
396
397void
399 uint16_t rnti,
401{
405 msg);
406}
407
408void
410 uint16_t rnti,
412{
416 msg);
417}
418
419void
421 uint16_t rnti,
423{
427 msg);
428}
429
430void
433{
437 msg);
438}
439
440void
442{
446 msg);
447}
448
449/*
450 * The purpose of LteEnbRrcProtocolIdeal is to avoid encoding
451 * messages. In order to do so, we need to have some form of encoding for
452 * inter-node RRC messages like HandoverPreparationInfo and HandoverCommand. Doing so
453 * directly is not practical (these messages includes a lot of
454 * information elements, so encoding all of them would defeat the
455 * purpose of LteEnbRrcProtocolIdeal. The workaround is to store the
456 * actual message in a global map, so that then we can just encode the
457 * key in a header and send that between eNBs over X2.
458 *
459 */
460
461static std::map<uint32_t, LteRrcSap::HandoverPreparationInfo>
464 0;
465
472{
473 public:
485 void SetMsgId(uint32_t id);
490 static TypeId GetTypeId();
491 TypeId GetInstanceTypeId() const override;
492 void Print(std::ostream& os) const override;
493 uint32_t GetSerializedSize() const override;
494 void Serialize(Buffer::Iterator start) const override;
496
497 private:
499};
500
503{
504 return m_msgId;
505}
506
507void
509{
510 m_msgId = id;
511}
512
513TypeId
515{
516 static TypeId tid = TypeId("ns3::IdealHandoverPreparationInfoHeader")
517 .SetParent<Header>()
518 .SetGroupName("Lte")
519 .AddConstructor<IdealHandoverPreparationInfoHeader>();
520 return tid;
521}
522
523TypeId
525{
526 return GetTypeId();
527}
528
529void
531{
532 os << " msgId=" << m_msgId;
533}
534
537{
538 return 4;
539}
540
541void
543{
544 start.WriteU32(m_msgId);
545}
546
549{
550 m_msgId = start.ReadU32();
551 return GetSerializedSize();
552}
553
557{
561 "msgId " << msgId << " already in use");
562 NS_LOG_INFO(" encoding msgId = " << msgId);
564 std::pair<uint32_t, LteRrcSap::HandoverPreparationInfo>(msgId, msg));
566 h.SetMsgId(msgId);
567 Ptr<Packet> p = Create<Packet>();
568 p->AddHeader(h);
569 return p;
570}
571
574{
576 p->RemoveHeader(h);
577 uint32_t msgId = h.GetMsgId();
578 NS_LOG_INFO(" decoding msgId = " << msgId);
579 std::map<uint32_t, LteRrcSap::HandoverPreparationInfo>::iterator it =
581 NS_ASSERT_MSG(it != g_handoverPreparationInfoMsgMap.end(), "msgId " << msgId << " not found");
582 LteRrcSap::HandoverPreparationInfo msg = it->second;
584 return msg;
585}
586
587static std::map<uint32_t, LteRrcSap::RrcConnectionReconfiguration>
590
597{
598 public:
610 void SetMsgId(uint32_t id);
615 static TypeId GetTypeId();
616 TypeId GetInstanceTypeId() const override;
617 void Print(std::ostream& os) const override;
618 uint32_t GetSerializedSize() const override;
619 void Serialize(Buffer::Iterator start) const override;
621
622 private:
624};
625
628{
629 return m_msgId;
630}
631
632void
634{
635 m_msgId = id;
636}
637
638TypeId
640{
641 static TypeId tid = TypeId("ns3::IdealHandoverCommandHeader")
642 .SetParent<Header>()
643 .SetGroupName("Lte")
644 .AddConstructor<IdealHandoverCommandHeader>();
645 return tid;
646}
647
648TypeId
650{
651 return GetTypeId();
652}
653
654void
656{
657 os << " msgId=" << m_msgId;
658}
659
662{
663 return 4;
664}
665
666void
668{
669 start.WriteU32(m_msgId);
670}
671
674{
675 m_msgId = start.ReadU32();
676 return GetSerializedSize();
677}
678
681{
684 "msgId " << msgId << " already in use");
685 NS_LOG_INFO(" encoding msgId = " << msgId);
687 std::pair<uint32_t, LteRrcSap::RrcConnectionReconfiguration>(msgId, msg));
689 h.SetMsgId(msgId);
690 Ptr<Packet> p = Create<Packet>();
691 p->AddHeader(h);
692 return p;
693}
694
697{
699 p->RemoveHeader(h);
700 uint32_t msgId = h.GetMsgId();
701 NS_LOG_INFO(" decoding msgId = " << msgId);
702 std::map<uint32_t, LteRrcSap::RrcConnectionReconfiguration>::iterator it =
703 g_handoverCommandMsgMap.find(msgId);
704 NS_ASSERT_MSG(it != g_handoverCommandMsgMap.end(), "msgId " << msgId << " not found");
706 g_handoverCommandMsgMap.erase(it);
707 return msg;
708}
709
710} // namespace ns3
iterator in a Buffer instance
Definition: buffer.h:100
Protocol header serialization and deserialization.
Definition: header.h:44
This header encodes the map key discussed above.
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 GetMsgId()
Get 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.
void Serialize(Buffer::Iterator start) const override
uint32_t GetMsgId()
Get the message ID function.
void Print(std::ostream &os) const override
static TypeId GetTypeId()
Get the type ID.
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.
bool HasCellId(uint16_t cellId) const
Ptr< LteEnbRrc > GetRrc() const
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.
Definition: lte-rrc-sap.h:1230
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.
Definition: lte-rrc-sap.h:1110
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.
Definition: lte-rrc-sap.h:1031
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.
Definition: lte-rrc-sap.h:946
uint32_t GetNDevices() const
Definition: node.cc:162
Ptr< NetDevice > GetDevice(uint32_t index) const
Retrieve the index-th NetDevice associated to this node.
Definition: node.cc:152
static Iterator Begin()
Definition: node-list.cc:237
std::vector< Ptr< Node > >::const_iterator Iterator
Node container iterator.
Definition: node-list.h:44
static Iterator End()
Definition: node-list.cc:244
A base class which provides memory management and object aggregation.
Definition: object.h:89
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer.
Definition: packet.cc:294
void AddHeader(const Header &header)
Add header to this packet.
Definition: packet.cc:268
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:78
static EventId Schedule(const Time &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
Definition: simulator.h:568
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:105
a unique identifier for an interface.
Definition: type-id.h:60
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:935
#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:86
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if a condition is true, with a message.
Definition: abort.h:108
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:202
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition: log.h:268
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
Definition: log.h:282
#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:275
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:45
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:1350
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
def start()
Definition: core.py:1861
SetupUeParameters structure.
Definition: lte-rrc-sap.h:1114
HandoverPreparationInfo structure.
Definition: lte-rrc-sap.h:928
MeasurementReport structure.
Definition: lte-rrc-sap.h:934
RrcConnectionReconfigurationCompleted structure.
Definition: lte-rrc-sap.h:884
RrcConnectionReconfiguration structure.
Definition: lte-rrc-sap.h:867
RrcConnectionReestablishmentComplete structure.
Definition: lte-rrc-sap.h:905
RrcConnectionReestablishment structure.
Definition: lte-rrc-sap.h:897
RrcConnectionReestablishmentReject structure.
Definition: lte-rrc-sap.h:911
RrcConnectionReestablishmentRequest structure.
Definition: lte-rrc-sap.h:890
RrcConnectionReject structure.
Definition: lte-rrc-sap.h:922
RrcConnectionRelease structure.
Definition: lte-rrc-sap.h:916
RrcConnectionRequest structure.
Definition: lte-rrc-sap.h:716
RrcConnectionSetupCompleted structure.
Definition: lte-rrc-sap.h:730
RrcConnectionSetup structure.
Definition: lte-rrc-sap.h:722
SystemInformation structure.
Definition: lte-rrc-sap.h:629
SetupParameters structure.
Definition: lte-rrc-sap.h:950