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 
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  NodeList::Iterator listEnd = NodeList::End();
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 
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  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 
297 void
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 
309 void
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 
349 void
351 {
352  NS_LOG_FUNCTION(this << rnti);
353  m_enbRrcSapProviderMap.erase(rnti);
354 }
355 
356 void
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 
388 void
390 {
393  GetUeRrcSapProvider(rnti),
394  msg);
395 }
396 
397 void
399  uint16_t rnti,
401 {
404  GetUeRrcSapProvider(rnti),
405  msg);
406 }
407 
408 void
410  uint16_t rnti,
412 {
415  GetUeRrcSapProvider(rnti),
416  msg);
417 }
418 
419 void
421  uint16_t rnti,
423 {
426  GetUeRrcSapProvider(rnti),
427  msg);
428 }
429 
430 void
433 {
436  GetUeRrcSapProvider(rnti),
437  msg);
438 }
439 
440 void
442 {
445  GetUeRrcSapProvider(rnti),
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 
461 static std::map<uint32_t, LteRrcSap::HandoverPreparationInfo>
464  0;
465 
472 {
473  public:
479  uint32_t GetMsgId() const;
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;
495  uint32_t Deserialize(Buffer::Iterator start) override;
496 
497  private:
498  uint32_t m_msgId;
499 };
500 
501 uint32_t
503 {
504  return m_msgId;
505 }
506 
507 void
509 {
510  m_msgId = id;
511 }
512 
513 TypeId
515 {
516  static TypeId tid = TypeId("ns3::IdealHandoverPreparationInfoHeader")
517  .SetParent<Header>()
518  .SetGroupName("Lte")
519  .AddConstructor<IdealHandoverPreparationInfoHeader>();
520  return tid;
521 }
522 
523 TypeId
525 {
526  return GetTypeId();
527 }
528 
529 void
531 {
532  os << " msgId=" << m_msgId;
533 }
534 
535 uint32_t
537 {
538  return 4;
539 }
540 
541 void
543 {
544  start.WriteU32(m_msgId);
545 }
546 
547 uint32_t
549 {
550  m_msgId = start.ReadU32();
551  return GetSerializedSize();
552 }
553 
557 {
558  uint32_t msgId = ++g_handoverPreparationInfoMsgIdCounter;
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 
587 static std::map<uint32_t, LteRrcSap::RrcConnectionReconfiguration>
589 static uint32_t g_handoverCommandMsgIdCounter = 0;
590 
597 {
598  public:
604  uint32_t GetMsgId() const;
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;
620  uint32_t Deserialize(Buffer::Iterator start) override;
621 
622  private:
623  uint32_t m_msgId;
624 };
625 
626 uint32_t
628 {
629  return m_msgId;
630 }
631 
632 void
634 {
635  m_msgId = id;
636 }
637 
638 TypeId
640 {
641  static TypeId tid = TypeId("ns3::IdealHandoverCommandHeader")
642  .SetParent<Header>()
643  .SetGroupName("Lte")
644  .AddConstructor<IdealHandoverCommandHeader>();
645  return tid;
646 }
647 
648 TypeId
650 {
651  return GetTypeId();
652 }
653 
654 void
655 IdealHandoverCommandHeader::Print(std::ostream& os) const
656 {
657  os << " msgId=" << m_msgId;
658 }
659 
660 uint32_t
662 {
663  return 4;
664 }
665 
666 void
668 {
669  start.WriteU32(m_msgId);
670 }
671 
672 uint32_t
674 {
675  m_msgId = start.ReadU32();
676  return GetSerializedSize();
677 }
678 
681 {
682  uint32_t msgId = ++g_handoverCommandMsgIdCounter;
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
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
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:46
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:1348
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