A Discrete-Event Network Simulator
API
lte-rrc-protocol-ideal.cc
Go to the documentation of this file.
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Nicola Baldo <nbaldo@cttc.es>
19  */
20 
21 #include <ns3/fatal-error.h>
22 #include <ns3/log.h>
23 #include <ns3/nstime.h>
24 #include <ns3/node-list.h>
25 #include <ns3/node.h>
26 #include <ns3/simulator.h>
27 
28 #include "lte-rrc-protocol-ideal.h"
29 #include "lte-ue-rrc.h"
30 #include "lte-enb-rrc.h"
31 #include "lte-enb-net-device.h"
32 #include "lte-ue-net-device.h"
33 
34 namespace ns3 {
35 
36 NS_LOG_COMPONENT_DEFINE ("LteRrcProtocolIdeal");
37 
43 static const Time RRC_IDEAL_MSG_DELAY = MilliSeconds (0);
45 
46 NS_OBJECT_ENSURE_REGISTERED (LteUeRrcProtocolIdeal);
47 
49  : m_ueRrcSapProvider (0),
50  m_enbRrcSapProvider (0)
51 {
53 }
54 
56 {
57 }
58 
59 void
61 {
62  NS_LOG_FUNCTION (this);
63  delete m_ueRrcSapUser;
64  m_rrc = 0;
65 }
66 
67 TypeId
69 {
70  static TypeId tid = TypeId ("ns3::LteUeRrcProtocolIdeal")
71  .SetParent<Object> ()
72  .SetGroupName("Lte")
73  .AddConstructor<LteUeRrcProtocolIdeal> ()
74  ;
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
130 {
131  // re-initialize the RNTI and get the EnbLteRrcSapProvider for the
132  // eNB we are currently attached to
133  m_rnti = m_rrc->GetRnti ();
135 
139  m_rnti,
140  msg);
141 }
142 
143 void
145 {
149  m_rnti,
150  msg);
151 }
152 
153 void
155 {
159  m_rnti,
160 msg);
161 }
162 
163 void
165 {
169  m_rnti,
170  msg);
171 }
172 
173 void
175 {
176  NS_LOG_FUNCTION (this);
177 
178  uint16_t cellId = m_rrc->GetCellId ();
179  // re-initialize the RNTI and get the EnbLteRrcSapProvider for the
180  // eNB we are currently attached to or attempting random access to
181  // a target eNB
182  m_rnti = m_rrc->GetRnti ();
183 
184  NS_LOG_DEBUG ("RNTI " << rnti
185  << " sending UE context remove request to cell id " << cellId);
186  NS_ABORT_MSG_IF (m_rnti != rnti, "RNTI mismatch");
187 
188  SetEnbRrcSapProvider (); //the provider has to be reset since the cell might have changed due to handover
189  //ideally informing eNB
192 }
193 
194 void
196 {
197  NS_LOG_FUNCTION (this);
198 
199  uint16_t cellId = m_rrc->GetCellId ();
200  NS_LOG_DEBUG ("RNTI " << m_rnti << " connected to cell " << cellId);
201 
202  // walk list of all nodes to get the peer eNB
203  Ptr<LteEnbNetDevice> enbDev;
204  NodeList::Iterator listEnd = NodeList::End ();
205  bool found = false;
206  for (NodeList::Iterator i = NodeList::Begin ();
207  (i != listEnd) && (!found);
208  ++i)
209  {
210  Ptr<Node> node = *i;
211  int nDevs = node->GetNDevices ();
212  for (int j = 0;
213  (j < nDevs) && (!found);
214  j++)
215  {
216  enbDev = node->GetDevice (j)->GetObject <LteEnbNetDevice> ();
217  if (enbDev == 0)
218  {
219  continue;
220  }
221  else
222  {
223  if (enbDev->HasCellId (cellId))
224  {
225  found = true;
226  break;
227  }
228  }
229  }
230  }
231  NS_ASSERT_MSG (found, " Unable to find eNB with CellId =" << cellId);
232  m_enbRrcSapProvider = enbDev->GetRrc ()->GetLteEnbRrcSapProvider ();
233  Ptr<LteEnbRrcProtocolIdeal> enbRrcProtocolIdeal = enbDev->GetRrc ()->GetObject<LteEnbRrcProtocolIdeal> ();
234  enbRrcProtocolIdeal->SetUeRrcSapProvider (m_rnti, m_ueRrcSapProvider);
235 }
236 
237 
239 
241  : m_enbRrcSapProvider (0)
242 {
243  NS_LOG_FUNCTION (this);
245 }
246 
248 {
249  NS_LOG_FUNCTION (this);
250 }
251 
252 void
254 {
255  NS_LOG_FUNCTION (this);
256  delete m_enbRrcSapUser;
257 }
258 
259 TypeId
261 {
262  static TypeId tid = TypeId ("ns3::LteEnbRrcProtocolIdeal")
263  .SetParent<Object> ()
264  .SetGroupName("Lte")
265  .AddConstructor<LteEnbRrcProtocolIdeal> ()
266  ;
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  NS_ASSERT_MSG (it != m_enbRrcSapProviderMap.end (), "Cell id " << m_cellId
303  << " could not find RNTI = " << rnti);
304  it->second = p;
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 
342  // just create empty entry, the UeRrcSapProvider will be set by the
343  // ue upon connection request or connection reconfiguration
344  // completed
345  m_enbRrcSapProviderMap[rnti] = 0;
346 
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 != 0)
370  {
371  Ptr<LteUeRrc> ueRrc = ueDev->GetRrc ();
372  NS_LOG_LOGIC ("considering UE IMSI " << ueDev->GetImsi () << " that has cellId " << ueRrc->GetCellId ());
373  if (ueRrc->GetCellId () == cellId)
374  {
375  NS_LOG_LOGIC ("sending SI to IMSI " << ueDev->GetImsi ());
376  ueRrc->GetLteUeRrcSapProvider ()->RecvSystemInformation (msg);
379  ueRrc->GetLteUeRrcSapProvider (),
380  msg);
381  }
382  }
383  }
384  }
385 }
386 
387 void
389 {
392  GetUeRrcSapProvider (rnti),
393  msg);
394 }
395 
396 void
398 {
401  GetUeRrcSapProvider (rnti),
402  msg);
403 }
404 
405 void
407 {
410  GetUeRrcSapProvider (rnti),
411  msg);
412 }
413 
414 void
416 {
419  GetUeRrcSapProvider (rnti),
420  msg);
421 }
422 
423 void
425 {
428  GetUeRrcSapProvider (rnti),
429  msg);
430 }
431 
432 void
434 {
437  GetUeRrcSapProvider (rnti),
438  msg);
439 }
440 
441 /*
442  * The purpose of LteEnbRrcProtocolIdeal is to avoid encoding
443  * messages. In order to do so, we need to have some form of encoding for
444  * inter-node RRC messages like HandoverPreparationInfo and HandoverCommand. Doing so
445  * directly is not practical (these messages includes a lot of
446  * information elements, so encoding all of them would defeat the
447  * purpose of LteEnbRrcProtocolIdeal. The workaround is to store the
448  * actual message in a global map, so that then we can just encode the
449  * key in a header and send that between eNBs over X2.
450  *
451  */
452 
453 static std::map<uint32_t, LteRrcSap::HandoverPreparationInfo> g_handoverPreparationInfoMsgMap;
455 
462 {
463 public:
469  uint32_t GetMsgId ();
475  void SetMsgId (uint32_t id);
480  static TypeId GetTypeId (void);
481  virtual TypeId GetInstanceTypeId (void) const;
482  virtual void Print (std::ostream &os) const;
483  virtual uint32_t GetSerializedSize (void) const;
484  virtual void Serialize (Buffer::Iterator start) const;
485  virtual uint32_t Deserialize (Buffer::Iterator start);
486 
487 private:
488  uint32_t m_msgId;
489 };
490 
491 uint32_t
493 {
494  return m_msgId;
495 }
496 
497 void
499 {
500  m_msgId = id;
501 }
502 
503 
504 TypeId
506 {
507  static TypeId tid = TypeId ("ns3::IdealHandoverPreparationInfoHeader")
508  .SetParent<Header> ()
509  .SetGroupName("Lte")
510  .AddConstructor<IdealHandoverPreparationInfoHeader> ()
511  ;
512  return tid;
513 }
514 
515 TypeId
517 {
518  return GetTypeId ();
519 }
520 
521 void IdealHandoverPreparationInfoHeader::Print (std::ostream &os) const
522 {
523  os << " msgId=" << m_msgId;
524 }
525 
527 {
528  return 4;
529 }
530 
532 {
533  start.WriteU32 (m_msgId);
534 }
535 
537 {
538  m_msgId = start.ReadU32 ();
539  return GetSerializedSize ();
540 }
541 
542 
543 
546 {
547  uint32_t msgId = ++g_handoverPreparationInfoMsgIdCounter;
548  NS_ASSERT_MSG (g_handoverPreparationInfoMsgMap.find (msgId) == g_handoverPreparationInfoMsgMap.end (), "msgId " << msgId << " already in use");
549  NS_LOG_INFO (" encoding msgId = " << msgId);
550  g_handoverPreparationInfoMsgMap.insert (std::pair<uint32_t, LteRrcSap::HandoverPreparationInfo> (msgId, msg));
552  h.SetMsgId (msgId);
553  Ptr<Packet> p = Create<Packet> ();
554  p->AddHeader (h);
555  return p;
556 }
557 
560 {
562  p->RemoveHeader (h);
563  uint32_t msgId = h.GetMsgId ();
564  NS_LOG_INFO (" decoding msgId = " << msgId);
565  std::map<uint32_t, LteRrcSap::HandoverPreparationInfo>::iterator it = g_handoverPreparationInfoMsgMap.find (msgId);
566  NS_ASSERT_MSG (it != g_handoverPreparationInfoMsgMap.end (), "msgId " << msgId << " not found");
567  LteRrcSap::HandoverPreparationInfo msg = it->second;
569  return msg;
570 }
571 
572 
573 
574 static std::map<uint32_t, LteRrcSap::RrcConnectionReconfiguration> g_handoverCommandMsgMap;
575 static uint32_t g_handoverCommandMsgIdCounter = 0;
576 
583 {
584 public:
590  uint32_t GetMsgId ();
596  void SetMsgId (uint32_t id);
601  static TypeId GetTypeId (void);
602  virtual TypeId GetInstanceTypeId (void) const;
603  virtual void Print (std::ostream &os) const;
604  virtual uint32_t GetSerializedSize (void) const;
605  virtual void Serialize (Buffer::Iterator start) const;
606  virtual uint32_t Deserialize (Buffer::Iterator start);
607 
608 private:
609  uint32_t m_msgId;
610 };
611 
612 uint32_t
614 {
615  return m_msgId;
616 }
617 
618 void
620 {
621  m_msgId = id;
622 }
623 
624 
625 TypeId
627 {
628  static TypeId tid = TypeId ("ns3::IdealHandoverCommandHeader")
629  .SetParent<Header> ()
630  .SetGroupName("Lte")
631  .AddConstructor<IdealHandoverCommandHeader> ()
632  ;
633  return tid;
634 }
635 
636 TypeId
638 {
639  return GetTypeId ();
640 }
641 
642 void IdealHandoverCommandHeader::Print (std::ostream &os) const
643 {
644  os << " msgId=" << m_msgId;
645 }
646 
648 {
649  return 4;
650 }
651 
653 {
654  start.WriteU32 (m_msgId);
655 }
656 
658 {
659  m_msgId = start.ReadU32 ();
660  return GetSerializedSize ();
661 }
662 
663 
664 
667 {
668  uint32_t msgId = ++g_handoverCommandMsgIdCounter;
669  NS_ASSERT_MSG (g_handoverCommandMsgMap.find (msgId) == g_handoverCommandMsgMap.end (), "msgId " << msgId << " already in use");
670  NS_LOG_INFO (" encoding msgId = " << msgId);
671  g_handoverCommandMsgMap.insert (std::pair<uint32_t, LteRrcSap::RrcConnectionReconfiguration> (msgId, msg));
673  h.SetMsgId (msgId);
674  Ptr<Packet> p = Create<Packet> ();
675  p->AddHeader (h);
676  return p;
677 }
678 
681 {
683  p->RemoveHeader (h);
684  uint32_t msgId = h.GetMsgId ();
685  NS_LOG_INFO (" decoding msgId = " << msgId);
686  std::map<uint32_t, LteRrcSap::RrcConnectionReconfiguration>::iterator it = g_handoverCommandMsgMap.find (msgId);
687  NS_ASSERT_MSG (it != g_handoverCommandMsgMap.end (), "msgId " << msgId << " not found");
689  g_handoverCommandMsgMap.erase (it);
690  return msg;
691 }
692 
693 
694 
695 
696 
697 } // namespace ns3
Protocol header serialization and deserialization.
Definition: header.h:42
This header encodes the map key discussed above.
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer.
Definition: packet.cc:280
RrcConnectionRequest structure.
Definition: lte-rrc-sap.h:692
LteUeRrcSapProvider * m_ueRrcSapProvider
the UE RRC SAP provider
void DoSendRrcConnectionReestablishmentReject(uint16_t rnti, LteRrcSap::RrcConnectionReestablishmentReject msg)
Send RRC connection reestablishment reject function.
static EventId Schedule(Time const &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
Definition: simulator.h:557
LteEnbRrcSapProvider * m_enbRrcSapProvider
the ENB RRC SAP provider
virtual void Print(std::ostream &os) const
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
virtual void RecvRrcConnectionSetupCompleted(uint16_t rnti, RrcConnectionSetupCompleted msg)=0
Receive an RRCConnectionSetupComplete message from a UE during an RRC connection establishment proced...
Part of the RRC protocol.
Definition: lte-rrc-sap.h:1000
MeasurementReport structure.
Definition: lte-rrc-sap.h:901
void DoSendRrcConnectionReconfigurationCompleted(LteRrcSap::RrcConnectionReconfigurationCompleted msg)
Send RRC connection reconfiguration completed function.
void DoSendRrcConnectionReestablishmentRequest(LteRrcSap::RrcConnectionReestablishmentRequest msg)
Send RRC connection reestablishment request function.
static std::map< uint32_t, LteRrcSap::HandoverPreparationInfo > g_handoverPreparationInfoMsgMap
handover preparation info message map
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:45
virtual void DoDispose(void)
Destructor implementation.
Ptr< NetDevice > GetDevice(uint32_t index) const
Retrieve the index-th NetDevice associated to this node.
Definition: node.cc:144
void DoSendRrcConnectionReconfiguration(uint16_t rnti, LteRrcSap::RrcConnectionReconfiguration msg)
Send RRC connection reconfiguration function.
Part of the RRC protocol.
Definition: lte-rrc-sap.h:1200
def start()
Definition: core.py:1855
Ptr< LteUeRrc > m_rrc
the RRC
void DoSendRrcConnectionRelease(uint16_t rnti, LteRrcSap::RrcConnectionRelease msg)
Send RRC connection release function.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:205
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:1297
void SetUeRrc(Ptr< LteUeRrc > rrc)
Set LTE UE RRC function.
void SetLteEnbRrcSapProvider(LteEnbRrcSapProvider *p)
Set LTE ENB RRC SAP provider function.
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition: log.h:281
Template for the implementation of the LteEnbRrcSapUser as a member of an owner class of type C to wh...
Definition: lte-rrc-sap.h:1502
void(* Time)(Time oldValue, Time newValue)
TracedValue callback signature for Time.
Definition: nstime.h:813
LteEnbRrcSapUser * m_enbRrcSapUser
the ENB RRC SAP user
void DoSendRrcConnectionSetup(uint16_t rnti, LteRrcSap::RrcConnectionSetup msg)
Send RRC connection setup function.
void SetMsgId(uint32_t id)
Set the message ID function.
static uint32_t g_handoverPreparationInfoMsgIdCounter
handover preparation info message ID counter
SetupParameters structure.
Definition: lte-rrc-sap.h:920
static const Time RRC_IDEAL_MSG_DELAY
void SetLteUeRrcSapProvider(LteUeRrcSapProvider *p)
Set LTE UE RRC SAP provider function.
static TypeId GetTypeId(void)
Get the type ID.
virtual void RecvRrcConnectionRelease(RrcConnectionRelease msg)=0
Receive an RRCConnectionRelease message from the serving eNodeB during an RRC connection release proc...
iterator in a Buffer instance
Definition: buffer.h:98
void DoSendSystemInformation(uint16_t cellId, LteRrcSap::SystemInformation msg)
Send system information function.
void DoSetupUe(uint16_t rnti, LteEnbRrcSapUser::SetupUeParameters params)
Setup UE function.
virtual void RecvRrcConnectionReestablishmentReject(RrcConnectionReestablishmentReject msg)=0
Receive an RRCConnectionReestablishmentReject message from the serving eNodeB during an RRC connectio...
virtual void RecvRrcConnectionReject(RrcConnectionReject msg)=0
Receive an RRCConnectionReject message from the serving eNodeB during an RRC connection establishment...
SystemInformation structure.
Definition: lte-rrc-sap.h:608
Ptr< Packet > DoEncodeHandoverPreparationInformation(LteRrcSap::HandoverPreparationInfo msg)
Encode handover preparation information function.
void DoSendRrcConnectionSetupCompleted(LteRrcSap::RrcConnectionSetupCompleted msg)
Send RRC connection setup completed function.
RrcConnectionReestablishment structure.
Definition: lte-rrc-sap.h:865
static TypeId GetTypeId(void)
Get the type ID.
static Iterator End(void)
Definition: node-list.cc:235
virtual void RecvRrcConnectionReconfiguration(RrcConnectionReconfiguration msg)=0
Receive an RRCConnectionReconfiguration message from the serving eNodeB during an RRC connection reco...
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
virtual void RecvRrcConnectionReestablishment(RrcConnectionReestablishment msg)=0
Receive an RRCConnectionReestablishment message from the serving eNodeB during an RRC connection re-e...
void DoSendIdealUeContextRemoveRequest(uint16_t rnti)
Send Ideal UE context remove request function.
RrcConnectionReconfiguration structure.
Definition: lte-rrc-sap.h:836
SetupUeParameters structure.
Definition: lte-rrc-sap.h:1085
void SetCellId(uint16_t cellId)
Set the cell ID function.
RrcConnectionReconfigurationCompleted structure.
Definition: lte-rrc-sap.h:851
virtual uint32_t GetSerializedSize(void) const
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
virtual uint32_t Deserialize(Buffer::Iterator start)
void DoSendRrcConnectionRequest(LteRrcSap::RrcConnectionRequest msg)
Send RRC connection request function.
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
Definition: log.h:289
std::map< uint16_t, LteUeRrcSapProvider * > m_enbRrcSapProviderMap
the LTE UE RRC SAP provider
RrcConnectionSetupCompleted structure.
Definition: lte-rrc-sap.h:705
HandoverPreparationInfo structure.
Definition: lte-rrc-sap.h:895
This header encodes the map key discussed above.
LteUeRrcSapUser * m_ueRrcSapUser
the RRC SAP user
RrcConnectionSetup structure.
Definition: lte-rrc-sap.h:698
LteRrcSap::HandoverPreparationInfo DoDecodeHandoverPreparationInformation(Ptr< Packet > p)
Encode handover preparation information function.
Models the transmission of RRC messages from the UE to the eNB in an ideal fashion, without errors and without consuming any radio resources.
void SetEnbRrcSapProvider()
Set ENB RRC SAP provider.
RrcConnectionReestablishmentRequest structure.
Definition: lte-rrc-sap.h:858
Part of the RRC protocol.
Definition: lte-rrc-sap.h:1081
void SetMsgId(uint32_t id)
Set the message ID function.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
LteUeRrcSapUser * GetLteUeRrcSapUser()
Get LTE UE RRC SAP user function.
virtual void RecvRrcConnectionSetup(RrcConnectionSetup msg)=0
Receive an RRCConnectionSetup message from the serving eNodeB during an RRC connection establishment ...
std::vector< Ptr< Node > >::const_iterator Iterator
Node container iterator.
Definition: node-list.h:44
RrcConnectionReject structure.
Definition: lte-rrc-sap.h:889
virtual void Serialize(Buffer::Iterator start) const
uint32_t GetMsgId()
Get the message ID function.
virtual void RecvRrcConnectionRequest(uint16_t rnti, RrcConnectionRequest msg)=0
Receive an RRCConnectionRequest message from a UE during an RRC connection establishment procedure (S...
static TypeId GetTypeId(void)
Get the type ID.
virtual void RecvSystemInformation(SystemInformation msg)=0
Receive a SystemInformation message from the serving eNodeB during a system information acquisition p...
RrcConnectionReestablishmentReject structure.
Definition: lte-rrc-sap.h:878
uint32_t GetMsgId()
Get the message ID function.
LteUeRrcSapProvider * GetUeRrcSapProvider(uint16_t rnti)
Get LTE UE RRC SAP provider function.
#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:88
LteRrcSap::RrcConnectionReconfiguration DoDecodeHandoverCommand(Ptr< Packet > p)
Decode handover command function.
void DoSendRrcConnectionReject(uint16_t rnti, LteRrcSap::RrcConnectionReject msg)
Send RRC connection reject function.
static std::map< uint32_t, LteRrcSap::RrcConnectionReconfiguration > g_handoverCommandMsgMap
handover command message map
void DoSetup(LteUeRrcSapUser::SetupParameters params)
Setup function.
virtual void RecvIdealUeContextRemoveRequest(uint16_t rnti)=0
Receive ideal UE context remove request from the UE RRC.
virtual void RecvRrcConnectionReestablishmentRequest(uint16_t rnti, RrcConnectionReestablishmentRequest msg)=0
Receive an RRCConnectionReestablishmentRequest message from a UE during an RRC connection re-establis...
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if a condition is true, with a message.
Definition: abort.h:108
void DoSendRrcConnectionReestablishmentComplete(LteRrcSap::RrcConnectionReestablishmentComplete msg)
Send RRC connection reestablishment complete function.
static Iterator Begin(void)
Definition: node-list.cc:229
void DoSendRrcConnectionReestablishment(uint16_t rnti, LteRrcSap::RrcConnectionReestablishment msg)
Send RRC connection reestablishment function.
virtual void Serialize(Buffer::Iterator start) const
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition: log.h:273
void SetUeRrcSapProvider(uint16_t rnti, LteUeRrcSapProvider *p)
Set UE RRC SAP provider function.
RrcConnectionReestablishmentComplete structure.
Definition: lte-rrc-sap.h:872
virtual void RecvMeasurementReport(uint16_t rnti, MeasurementReport msg)=0
Receive a MeasurementReport message from a UE during a measurement reporting procedure (Section 5...
virtual uint32_t GetSerializedSize(void) const
virtual void DoDispose(void)
Destructor implementation.
virtual uint32_t Deserialize(Buffer::Iterator start)
LteEnbRrcSapProvider * m_enbRrcSapProvider
the ENB RRC SAP provider
static TypeId GetTypeId(void)
Get the type ID.
static uint32_t g_handoverCommandMsgIdCounter
handover command message ID counter
virtual void Print(std::ostream &os) const
virtual void RecvRrcConnectionReestablishmentComplete(uint16_t rnti, RrcConnectionReestablishmentComplete msg)=0
Receive an RRCConnectionReestablishmentComplete message from a UE during an RRC connection re-establi...
Template for the implementation of the LteUeRrcSapUser as a member of an owner class of type C to whi...
Definition: lte-rrc-sap.h:1305
A base class which provides memory management and object aggregation.
Definition: object.h:87
Ptr< Packet > DoEncodeHandoverCommand(LteRrcSap::RrcConnectionReconfiguration msg)
Encode handover command function.
Part of the RRC protocol.
Definition: lte-rrc-sap.h:916
LteEnbRrcSapUser * GetLteEnbRrcSapUser()
Get LTE ENB RRC SAP user function.
RrcConnectionRelease structure.
Definition: lte-rrc-sap.h:883
The eNodeB device implementation.
virtual void RecvRrcConnectionReconfigurationCompleted(uint16_t rnti, RrcConnectionReconfigurationCompleted msg)=0
Receive an RRCConnectionReconfigurationComplete message from a UE during an RRC connection reconfigur...
a unique identifier for an interface.
Definition: type-id.h:58
Ptr< LteEnbRrc > GetRrc() const
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:923
bool HasCellId(uint16_t cellId) const
void DoSendMeasurementReport(LteRrcSap::MeasurementReport msg)
Send measurement report function.
void DoRemoveUe(uint16_t rnti)
Remove UE function.
void AddHeader(const Header &header)
Add header to this packet.
Definition: packet.cc:256
uint32_t GetNDevices(void) const
Definition: node.cc:152
Models the transmission of RRC messages from the UE to the eNB in an ideal fashion, without errors and without consuming any radio resources.
The LteUeNetDevice class implements the UE net device.