A Discrete-Event Network Simulator
QKDNetSim v2.0 (NS-3 v3.41) @ (+)
API
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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 
20 #include "lte-rrc-protocol-ideal.h"
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 
34 namespace ns3
35 {
36 
37 NS_LOG_COMPONENT_DEFINE("LteRrcProtocolIdeal");
38 
46 
48 
50  : m_ueRrcSapProvider(nullptr),
51  m_enbRrcSapProvider(nullptr)
52 {
54 }
55 
57 {
58 }
59 
60 void
62 {
63  NS_LOG_FUNCTION(this);
64  delete m_ueRrcSapUser;
65  m_rrc = nullptr;
66 }
67 
68 TypeId
70 {
71  static TypeId tid = TypeId("ns3::LteUeRrcProtocolIdeal")
72  .SetParent<Object>()
73  .SetGroupName("Lte")
74  .AddConstructor<LteUeRrcProtocolIdeal>();
75  return tid;
76 }
77 
78 void
80 {
82 }
83 
86 {
87  return m_ueRrcSapUser;
88 }
89 
90 void
92 {
93  m_rrc = rrc;
94 }
95 
96 void
98 {
99  NS_LOG_FUNCTION(this);
100  // We don't care about SRB0/SRB1 since we use ideal RRC messages.
101 }
102 
103 void
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 
118 void
120 {
124  m_rnti,
125  msg);
126 }
127 
128 void
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 
144 void
147 {
151  m_rnti,
152  msg);
153 }
154 
155 void
158 {
162  m_rnti,
163  msg);
164 }
165 
166 void
168 {
172  m_rnti,
173  msg);
174 }
175 
176 void
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 
199 void
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
208  Ptr<LteEnbNetDevice> enbDev;
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 
253 void
255 {
256  NS_LOG_FUNCTION(this);
257  delete m_enbRrcSapUser;
258 }
259 
260 TypeId
262 {
263  static TypeId tid = TypeId("ns3::LteEnbRrcProtocolIdeal")
264  .SetParent<Object>()
265  .SetGroupName("Lte")
266  .AddConstructor<LteEnbRrcProtocolIdeal>();
267  return tid;
268 }
269 
270 void
272 {
274 }
275 
278 {
279  return m_enbRrcSapUser;
280 }
281 
282 void
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 
296 void
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 
307 void
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 
347 void
349 {
350  NS_LOG_FUNCTION(this << rnti);
351  m_enbRrcSapProviderMap.erase(rnti);
352 }
353 
354 void
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 
386 void
388 {
391  GetUeRrcSapProvider(rnti),
392  msg);
393 }
394 
395 void
397  uint16_t rnti,
399 {
402  GetUeRrcSapProvider(rnti),
403  msg);
404 }
405 
406 void
408  uint16_t rnti,
410 {
413  GetUeRrcSapProvider(rnti),
414  msg);
415 }
416 
417 void
419  uint16_t rnti,
421 {
424  GetUeRrcSapProvider(rnti),
425  msg);
426 }
427 
428 void
431 {
434  GetUeRrcSapProvider(rnti),
435  msg);
436 }
437 
438 void
440 {
443  GetUeRrcSapProvider(rnti),
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 
459 static std::map<uint32_t, LteRrcSap::HandoverPreparationInfo>
462  0;
463 
470 {
471  public:
477  uint32_t GetMsgId() const;
483  void SetMsgId(uint32_t id);
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;
497 };
498 
499 uint32_t
501 {
502  return m_msgId;
503 }
504 
505 void
507 {
508  m_msgId = id;
509 }
510 
511 TypeId
513 {
514  static TypeId tid = TypeId("ns3::IdealHandoverPreparationInfoHeader")
515  .SetParent<Header>()
516  .SetGroupName("Lte")
517  .AddConstructor<IdealHandoverPreparationInfoHeader>();
518  return tid;
519 }
520 
521 TypeId
523 {
524  return GetTypeId();
525 }
526 
527 void
529 {
530  os << " msgId=" << m_msgId;
531 }
532 
533 uint32_t
535 {
536  return 4;
537 }
538 
539 void
541 {
542  start.WriteU32(m_msgId);
543 }
544 
545 uint32_t
547 {
548  m_msgId = start.ReadU32();
549  return GetSerializedSize();
550 }
551 
555 {
556  uint32_t msgId = ++g_handoverPreparationInfoMsgIdCounter;
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 
584 static std::map<uint32_t, LteRrcSap::RrcConnectionReconfiguration>
586 static uint32_t g_handoverCommandMsgIdCounter = 0;
587 
594 {
595  public:
601  uint32_t GetMsgId() const;
607  void SetMsgId(uint32_t id);
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;
621 };
622 
623 uint32_t
625 {
626  return m_msgId;
627 }
628 
629 void
631 {
632  m_msgId = id;
633 }
634 
635 TypeId
637 {
638  static TypeId tid = TypeId("ns3::IdealHandoverCommandHeader")
639  .SetParent<Header>()
640  .SetGroupName("Lte")
641  .AddConstructor<IdealHandoverCommandHeader>();
642  return tid;
643 }
644 
645 TypeId
647 {
648  return GetTypeId();
649 }
650 
651 void
652 IdealHandoverCommandHeader::Print(std::ostream& os) const
653 {
654  os << " msgId=" << m_msgId;
655 }
656 
657 uint32_t
659 {
660  return 4;
661 }
662 
663 void
665 {
666  start.WriteU32(m_msgId);
667 }
668 
669 uint32_t
671 {
672  m_msgId = start.ReadU32();
673  return GetSerializedSize();
674 }
675 
678 {
679  uint32_t msgId = ++g_handoverCommandMsgIdCounter;
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
virtual uint32_t Deserialize(Buffer::Iterator start)=0
Deserialize the object from a buffer iterator.
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
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.
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: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
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
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: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:931
#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
params
Fit Fluctuating Two Ray model to the 3GPP TR 38.901 using the Anderson-Darling goodness-of-fit ##.
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