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 * 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
39/**
40 * \ingroup lte
41 *
42 */
43
44/// RRC ideal message delay
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
209 auto listEnd = NodeList::End();
210 bool found = false;
211 for (auto 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 auto it = m_enbRrcSapProviderMap.find(rnti);
292 NS_ASSERT_MSG(it != m_enbRrcSapProviderMap.end(), "could not find RNTI = " << rnti);
293 return it->second;
294}
295
296void
298{
299 auto it = m_enbRrcSapProviderMap.find(rnti);
300 // assign UE RRC only if the RNTI is found at eNB
301 if (it != m_enbRrcSapProviderMap.end())
302 {
303 it->second = p;
304 }
305}
306
307void
309{
310 NS_LOG_FUNCTION(this << rnti);
311
312 // // walk list of all nodes to get the peer UE RRC SAP Provider
313 // Ptr<LteUeRrc> ueRrc;
314 // NodeList::Iterator listEnd = NodeList::End ();
315 // bool found = false;
316 // for (NodeList::Iterator i = NodeList::Begin (); (i != listEnd) && (found == false); i++)
317 // {
318 // Ptr<Node> node = *i;
319 // int nDevs = node->GetNDevices ();
320 // for (int j = 0; j < nDevs; j++)
321 // {
322 // Ptr<LteUeNetDevice> ueDev = node->GetDevice (j)->GetObject <LteUeNetDevice> ();
323 // if (!ueDev)
324 // {
325 // continue;
326 // }
327 // else
328 // {
329 // ueRrc = ueDev->GetRrc ();
330 // if ((ueRrc->GetRnti () == rnti) && (ueRrc->GetCellId () == m_cellId))
331 // {
332 // found = true;
333 // break;
334 // }
335 // }
336 // }
337 // }
338 // NS_ASSERT_MSG (found , " Unable to find UE with RNTI=" << rnti << " cellId=" << m_cellId);
339 // m_enbRrcSapProviderMap[rnti] = ueRrc->GetLteUeRrcSapProvider ();
340
341 // just create empty entry, the UeRrcSapProvider will be set by the
342 // ue upon connection request or connection reconfiguration
343 // completed
344 m_enbRrcSapProviderMap[rnti] = nullptr;
345}
346
347void
349{
350 NS_LOG_FUNCTION(this << rnti);
351 m_enbRrcSapProviderMap.erase(rnti);
352}
353
354void
356{
357 NS_LOG_FUNCTION(this << cellId);
358 // walk list of all nodes to get UEs with this cellId
359 Ptr<LteUeRrc> ueRrc;
360 for (auto i = NodeList::Begin(); i != NodeList::End(); ++i)
361 {
362 Ptr<Node> node = *i;
363 int nDevs = node->GetNDevices();
364 for (int j = 0; j < nDevs; ++j)
365 {
366 Ptr<LteUeNetDevice> ueDev = node->GetDevice(j)->GetObject<LteUeNetDevice>();
367 if (ueDev)
368 {
369 Ptr<LteUeRrc> ueRrc = ueDev->GetRrc();
370 NS_LOG_LOGIC("considering UE IMSI " << ueDev->GetImsi() << " that has cellId "
371 << ueRrc->GetCellId());
372 if (ueRrc->GetCellId() == cellId)
373 {
374 NS_LOG_LOGIC("sending SI to IMSI " << ueDev->GetImsi());
375
378 ueRrc->GetLteUeRrcSapProvider(),
379 msg);
380 }
381 }
382 }
383 }
384}
385
386void
388{
392 msg);
393}
394
395void
397 uint16_t rnti,
399{
403 msg);
404}
405
406void
408 uint16_t rnti,
410{
414 msg);
415}
416
417void
419 uint16_t rnti,
421{
425 msg);
426}
427
428void
431{
435 msg);
436}
437
438void
440{
444 msg);
445}
446
447/*
448 * The purpose of LteEnbRrcProtocolIdeal is to avoid encoding
449 * messages. In order to do so, we need to have some form of encoding for
450 * inter-node RRC messages like HandoverPreparationInfo and HandoverCommand. Doing so
451 * directly is not practical (these messages includes a lot of
452 * information elements, so encoding all of them would defeat the
453 * purpose of LteEnbRrcProtocolIdeal. The workaround is to store the
454 * actual message in a global map, so that then we can just encode the
455 * key in a header and send that between eNBs over X2.
456 *
457 */
458
459static std::map<uint32_t, LteRrcSap::HandoverPreparationInfo>
460 g_handoverPreparationInfoMsgMap; ///< handover preparation info message map
462 0; ///< handover preparation info message ID counter
463
464/**
465 * This header encodes the map key discussed above. We keep this
466 * private since it should not be used outside this file.
467 *
468 */
470{
471 public:
472 /**
473 * Get the message ID function
474 *
475 * \returns the message ID
476 */
477 uint32_t GetMsgId() const;
478 /**
479 * Set the message ID function
480 *
481 * \param id the message ID
482 */
483 void SetMsgId(uint32_t id);
484 /**
485 * \brief Get the type ID.
486 * \return the object TypeId
487 */
488 static TypeId GetTypeId();
489 TypeId GetInstanceTypeId() const override;
490 void Print(std::ostream& os) const override;
491 uint32_t GetSerializedSize() const override;
492 void Serialize(Buffer::Iterator start) const override;
493 uint32_t Deserialize(Buffer::Iterator start) override;
494
495 private:
496 uint32_t m_msgId; ///< message ID
497};
498
501{
502 return m_msgId;
503}
504
505void
507{
508 m_msgId = id;
509}
510
511TypeId
513{
514 static TypeId tid = TypeId("ns3::IdealHandoverPreparationInfoHeader")
515 .SetParent<Header>()
516 .SetGroupName("Lte")
517 .AddConstructor<IdealHandoverPreparationInfoHeader>();
518 return tid;
519}
520
521TypeId
523{
524 return GetTypeId();
525}
526
527void
529{
530 os << " msgId=" << m_msgId;
531}
532
535{
536 return 4;
537}
538
539void
541{
542 start.WriteU32(m_msgId);
543}
544
547{
548 m_msgId = start.ReadU32();
549 return GetSerializedSize();
550}
551
555{
559 "msgId " << msgId << " already in use");
560 NS_LOG_INFO(" encoding msgId = " << msgId);
562 std::pair<uint32_t, LteRrcSap::HandoverPreparationInfo>(msgId, msg));
564 h.SetMsgId(msgId);
565 Ptr<Packet> p = Create<Packet>();
566 p->AddHeader(h);
567 return p;
568}
569
572{
574 p->RemoveHeader(h);
575 uint32_t msgId = h.GetMsgId();
576 NS_LOG_INFO(" decoding msgId = " << msgId);
577 auto it = g_handoverPreparationInfoMsgMap.find(msgId);
578 NS_ASSERT_MSG(it != g_handoverPreparationInfoMsgMap.end(), "msgId " << msgId << " not found");
579 LteRrcSap::HandoverPreparationInfo msg = it->second;
581 return msg;
582}
583
584static std::map<uint32_t, LteRrcSap::RrcConnectionReconfiguration>
585 g_handoverCommandMsgMap; ///< handover command message map
586static uint32_t g_handoverCommandMsgIdCounter = 0; ///< handover command message ID counter
587
588/**
589 * This header encodes the map key discussed above. We keep this
590 * private since it should not be used outside this file.
591 *
592 */
594{
595 public:
596 /**
597 * Get the message ID function
598 *
599 * \returns the message ID
600 */
601 uint32_t GetMsgId() const;
602 /**
603 * Set the message ID function
604 *
605 * \param id the message ID
606 */
607 void SetMsgId(uint32_t id);
608 /**
609 * \brief Get the type ID.
610 * \return the object TypeId
611 */
612 static TypeId GetTypeId();
613 TypeId GetInstanceTypeId() const override;
614 void Print(std::ostream& os) const override;
615 uint32_t GetSerializedSize() const override;
616 void Serialize(Buffer::Iterator start) const override;
617 uint32_t Deserialize(Buffer::Iterator start) override;
618
619 private:
620 uint32_t m_msgId; ///< message ID
621};
622
625{
626 return m_msgId;
627}
628
629void
631{
632 m_msgId = id;
633}
634
635TypeId
637{
638 static TypeId tid = TypeId("ns3::IdealHandoverCommandHeader")
639 .SetParent<Header>()
640 .SetGroupName("Lte")
641 .AddConstructor<IdealHandoverCommandHeader>();
642 return tid;
643}
644
645TypeId
647{
648 return GetTypeId();
649}
650
651void
653{
654 os << " msgId=" << m_msgId;
655}
656
659{
660 return 4;
661}
662
663void
665{
666 start.WriteU32(m_msgId);
667}
668
671{
672 m_msgId = start.ReadU32();
673 return GetSerializedSize();
674}
675
678{
681 "msgId " << msgId << " already in use");
682 NS_LOG_INFO(" encoding msgId = " << msgId);
684 std::pair<uint32_t, LteRrcSap::RrcConnectionReconfiguration>(msgId, msg));
686 h.SetMsgId(msgId);
687 Ptr<Packet> p = Create<Packet>();
688 p->AddHeader(h);
689 return p;
690}
691
694{
696 p->RemoveHeader(h);
697 uint32_t msgId = h.GetMsgId();
698 NS_LOG_INFO(" decoding msgId = " << msgId);
699 auto it = g_handoverCommandMsgMap.find(msgId);
700 NS_ASSERT_MSG(it != g_handoverCommandMsgMap.end(), "msgId " << msgId << " not found");
702 g_handoverCommandMsgMap.erase(it);
703 return msg;
704}
705
706} // 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.
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
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.
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:1244
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:1124
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:1045
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:960
static Iterator Begin()
Definition: node-list.cc:237
static Iterator End()
Definition: node-list.cc:244
A base class which provides memory management and object aggregation.
Definition: object.h:89
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:77
static EventId Schedule(const Time &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
Definition: simulator.h:571
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:105
a unique identifier for an interface.
Definition: type-id.h:59
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:932
#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:46
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:1338
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.
Definition: lte-rrc-sap.h:1128
HandoverPreparationInfo structure.
Definition: lte-rrc-sap.h:942
MeasurementReport structure.
Definition: lte-rrc-sap.h:948
RrcConnectionReconfigurationCompleted structure.
Definition: lte-rrc-sap.h:898
RrcConnectionReconfiguration structure.
Definition: lte-rrc-sap.h:881
RrcConnectionReestablishmentComplete structure.
Definition: lte-rrc-sap.h:919
RrcConnectionReestablishment structure.
Definition: lte-rrc-sap.h:911
RrcConnectionReestablishmentReject structure.
Definition: lte-rrc-sap.h:925
RrcConnectionReestablishmentRequest structure.
Definition: lte-rrc-sap.h:904
RrcConnectionReject structure.
Definition: lte-rrc-sap.h:936
RrcConnectionRelease structure.
Definition: lte-rrc-sap.h:930
RrcConnectionRequest structure.
Definition: lte-rrc-sap.h:730
RrcConnectionSetupCompleted structure.
Definition: lte-rrc-sap.h:744
RrcConnectionSetup structure.
Definition: lte-rrc-sap.h:736
SystemInformation structure.
Definition: lte-rrc-sap.h:643
SetupParameters structure.
Definition: lte-rrc-sap.h:964