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 
111  Simulator::Schedule (RRC_IDEAL_MSG_DELAY,
114  m_rnti,
115  msg);
116 }
117 
118 void
120 {
121  Simulator::Schedule (RRC_IDEAL_MSG_DELAY,
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 
136  Simulator::Schedule (RRC_IDEAL_MSG_DELAY,
139  m_rnti,
140  msg);
141 }
142 
143 void
145 {
146  Simulator::Schedule (RRC_IDEAL_MSG_DELAY,
149  m_rnti,
150  msg);
151 }
152 
153 void
155 {
156  Simulator::Schedule (RRC_IDEAL_MSG_DELAY,
159  m_rnti,
160 msg);
161 }
162 
163 void
165 {
166  Simulator::Schedule (RRC_IDEAL_MSG_DELAY,
169  m_rnti,
170  msg);
171 }
172 
173 void
175 {
176  uint16_t cellId = m_rrc->GetCellId ();
177 
178  // walk list of all nodes to get the peer eNB
179  Ptr<LteEnbNetDevice> enbDev;
180  NodeList::Iterator listEnd = NodeList::End ();
181  bool found = false;
182  for (NodeList::Iterator i = NodeList::Begin ();
183  (i != listEnd) && (!found);
184  ++i)
185  {
186  Ptr<Node> node = *i;
187  int nDevs = node->GetNDevices ();
188  for (int j = 0;
189  (j < nDevs) && (!found);
190  j++)
191  {
192  enbDev = node->GetDevice (j)->GetObject <LteEnbNetDevice> ();
193  if (enbDev == 0)
194  {
195  continue;
196  }
197  else
198  {
199  if (enbDev->HasCellId (cellId))
200  {
201  found = true;
202  break;
203  }
204  }
205  }
206  }
207  NS_ASSERT_MSG (found, " Unable to find eNB with CellId =" << cellId);
208  m_enbRrcSapProvider = enbDev->GetRrc ()->GetLteEnbRrcSapProvider ();
209  Ptr<LteEnbRrcProtocolIdeal> enbRrcProtocolIdeal = enbDev->GetRrc ()->GetObject<LteEnbRrcProtocolIdeal> ();
210  enbRrcProtocolIdeal->SetUeRrcSapProvider (m_rnti, m_ueRrcSapProvider);
211 }
212 
213 
215 
217  : m_enbRrcSapProvider (0)
218 {
219  NS_LOG_FUNCTION (this);
221 }
222 
224 {
225  NS_LOG_FUNCTION (this);
226 }
227 
228 void
230 {
231  NS_LOG_FUNCTION (this);
232  delete m_enbRrcSapUser;
233 }
234 
235 TypeId
237 {
238  static TypeId tid = TypeId ("ns3::LteEnbRrcProtocolIdeal")
239  .SetParent<Object> ()
240  .SetGroupName("Lte")
241  .AddConstructor<LteEnbRrcProtocolIdeal> ()
242  ;
243  return tid;
244 }
245 
246 void
248 {
250 }
251 
254 {
255  return m_enbRrcSapUser;
256 }
257 
258 void
260 {
261  m_cellId = cellId;
262 }
263 
266 {
267  std::map<uint16_t, LteUeRrcSapProvider*>::const_iterator it;
268  it = m_enbRrcSapProviderMap.find (rnti);
269  NS_ASSERT_MSG (it != m_enbRrcSapProviderMap.end (), "could not find RNTI = " << rnti);
270  return it->second;
271 }
272 
273 void
275 {
276  std::map<uint16_t, LteUeRrcSapProvider*>::iterator it;
277  it = m_enbRrcSapProviderMap.find (rnti);
278  NS_ASSERT_MSG (it != m_enbRrcSapProviderMap.end (), "could not find RNTI = " << rnti);
279  it->second = p;
280 }
281 
282 void
284 {
285  NS_LOG_FUNCTION (this << rnti);
286 
287  // // walk list of all nodes to get the peer UE RRC SAP Provider
288  // Ptr<LteUeRrc> ueRrc;
289  // NodeList::Iterator listEnd = NodeList::End ();
290  // bool found = false;
291  // for (NodeList::Iterator i = NodeList::Begin (); (i != listEnd) && (found == false); i++)
292  // {
293  // Ptr<Node> node = *i;
294  // int nDevs = node->GetNDevices ();
295  // for (int j = 0; j < nDevs; j++)
296  // {
297  // Ptr<LteUeNetDevice> ueDev = node->GetDevice (j)->GetObject <LteUeNetDevice> ();
298  // if (!ueDev)
299  // {
300  // continue;
301  // }
302  // else
303  // {
304  // ueRrc = ueDev->GetRrc ();
305  // if ((ueRrc->GetRnti () == rnti) && (ueRrc->GetCellId () == m_cellId))
306  // {
307  // found = true;
308  // break;
309  // }
310  // }
311  // }
312  // }
313  // NS_ASSERT_MSG (found , " Unable to find UE with RNTI=" << rnti << " cellId=" << m_cellId);
314  // m_enbRrcSapProviderMap[rnti] = ueRrc->GetLteUeRrcSapProvider ();
315 
316 
317  // just create empty entry, the UeRrcSapProvider will be set by the
318  // ue upon connection request or connection reconfiguration
319  // completed
320  m_enbRrcSapProviderMap[rnti] = 0;
321 
322 }
323 
324 void
326 {
327  NS_LOG_FUNCTION (this << rnti);
328  m_enbRrcSapProviderMap.erase (rnti);
329 }
330 
331 void
333 {
334  NS_LOG_FUNCTION (this << cellId);
335  // walk list of all nodes to get UEs with this cellId
336  Ptr<LteUeRrc> ueRrc;
337  for (NodeList::Iterator i = NodeList::Begin (); i != NodeList::End (); ++i)
338  {
339  Ptr<Node> node = *i;
340  int nDevs = node->GetNDevices ();
341  for (int j = 0; j < nDevs; ++j)
342  {
343  Ptr<LteUeNetDevice> ueDev = node->GetDevice (j)->GetObject <LteUeNetDevice> ();
344  if (ueDev != 0)
345  {
346  Ptr<LteUeRrc> ueRrc = ueDev->GetRrc ();
347  NS_LOG_LOGIC ("considering UE IMSI " << ueDev->GetImsi () << " that has cellId " << ueRrc->GetCellId ());
348  if (ueRrc->GetCellId () == cellId)
349  {
350  NS_LOG_LOGIC ("sending SI to IMSI " << ueDev->GetImsi ());
351  ueRrc->GetLteUeRrcSapProvider ()->RecvSystemInformation (msg);
352  Simulator::Schedule (RRC_IDEAL_MSG_DELAY,
354  ueRrc->GetLteUeRrcSapProvider (),
355  msg);
356  }
357  }
358  }
359  }
360 }
361 
362 void
364 {
365  Simulator::Schedule (RRC_IDEAL_MSG_DELAY,
367  GetUeRrcSapProvider (rnti),
368  msg);
369 }
370 
371 void
373 {
374  Simulator::Schedule (RRC_IDEAL_MSG_DELAY,
376  GetUeRrcSapProvider (rnti),
377  msg);
378 }
379 
380 void
382 {
383  Simulator::Schedule (RRC_IDEAL_MSG_DELAY,
385  GetUeRrcSapProvider (rnti),
386  msg);
387 }
388 
389 void
391 {
392  Simulator::Schedule (RRC_IDEAL_MSG_DELAY,
394  GetUeRrcSapProvider (rnti),
395  msg);
396 }
397 
398 void
400 {
401  Simulator::Schedule (RRC_IDEAL_MSG_DELAY,
403  GetUeRrcSapProvider (rnti),
404  msg);
405 }
406 
407 void
409 {
410  Simulator::Schedule (RRC_IDEAL_MSG_DELAY,
412  GetUeRrcSapProvider (rnti),
413  msg);
414 }
415 
416 /*
417  * The purpose of LteEnbRrcProtocolIdeal is to avoid encoding
418  * messages. In order to do so, we need to have some form of encoding for
419  * inter-node RRC messages like HandoverPreparationInfo and HandoverCommand. Doing so
420  * directly is not practical (these messages includes a lot of
421  * information elements, so encoding all of them would defeat the
422  * purpose of LteEnbRrcProtocolIdeal. The workaround is to store the
423  * actual message in a global map, so that then we can just encode the
424  * key in a header and send that between eNBs over X2.
425  *
426  */
427 
428 static std::map<uint32_t, LteRrcSap::HandoverPreparationInfo> g_handoverPreparationInfoMsgMap;
430 
437 {
438 public:
444  uint32_t GetMsgId ();
450  void SetMsgId (uint32_t id);
455  static TypeId GetTypeId (void);
456  virtual TypeId GetInstanceTypeId (void) const;
457  virtual void Print (std::ostream &os) const;
458  virtual uint32_t GetSerializedSize (void) const;
459  virtual void Serialize (Buffer::Iterator start) const;
460  virtual uint32_t Deserialize (Buffer::Iterator start);
461 
462 private:
463  uint32_t m_msgId;
464 };
465 
466 uint32_t
468 {
469  return m_msgId;
470 }
471 
472 void
474 {
475  m_msgId = id;
476 }
477 
478 
479 TypeId
481 {
482  static TypeId tid = TypeId ("ns3::IdealHandoverPreparationInfoHeader")
483  .SetParent<Header> ()
484  .SetGroupName("Lte")
485  .AddConstructor<IdealHandoverPreparationInfoHeader> ()
486  ;
487  return tid;
488 }
489 
490 TypeId
492 {
493  return GetTypeId ();
494 }
495 
496 void IdealHandoverPreparationInfoHeader::Print (std::ostream &os) const
497 {
498  os << " msgId=" << m_msgId;
499 }
500 
502 {
503  return 4;
504 }
505 
507 {
508  start.WriteU32 (m_msgId);
509 }
510 
512 {
513  m_msgId = start.ReadU32 ();
514  return GetSerializedSize ();
515 }
516 
517 
518 
521 {
522  uint32_t msgId = ++g_handoverPreparationInfoMsgIdCounter;
523  NS_ASSERT_MSG (g_handoverPreparationInfoMsgMap.find (msgId) == g_handoverPreparationInfoMsgMap.end (), "msgId " << msgId << " already in use");
524  NS_LOG_INFO (" encoding msgId = " << msgId);
525  g_handoverPreparationInfoMsgMap.insert (std::pair<uint32_t, LteRrcSap::HandoverPreparationInfo> (msgId, msg));
527  h.SetMsgId (msgId);
528  Ptr<Packet> p = Create<Packet> ();
529  p->AddHeader (h);
530  return p;
531 }
532 
535 {
537  p->RemoveHeader (h);
538  uint32_t msgId = h.GetMsgId ();
539  NS_LOG_INFO (" decoding msgId = " << msgId);
540  std::map<uint32_t, LteRrcSap::HandoverPreparationInfo>::iterator it = g_handoverPreparationInfoMsgMap.find (msgId);
541  NS_ASSERT_MSG (it != g_handoverPreparationInfoMsgMap.end (), "msgId " << msgId << " not found");
542  LteRrcSap::HandoverPreparationInfo msg = it->second;
543  g_handoverPreparationInfoMsgMap.erase (it);
544  return msg;
545 }
546 
547 
548 
549 static std::map<uint32_t, LteRrcSap::RrcConnectionReconfiguration> g_handoverCommandMsgMap;
550 static uint32_t g_handoverCommandMsgIdCounter = 0;
551 
558 {
559 public:
565  uint32_t GetMsgId ();
571  void SetMsgId (uint32_t id);
576  static TypeId GetTypeId (void);
577  virtual TypeId GetInstanceTypeId (void) const;
578  virtual void Print (std::ostream &os) const;
579  virtual uint32_t GetSerializedSize (void) const;
580  virtual void Serialize (Buffer::Iterator start) const;
581  virtual uint32_t Deserialize (Buffer::Iterator start);
582 
583 private:
584  uint32_t m_msgId;
585 };
586 
587 uint32_t
589 {
590  return m_msgId;
591 }
592 
593 void
595 {
596  m_msgId = id;
597 }
598 
599 
600 TypeId
602 {
603  static TypeId tid = TypeId ("ns3::IdealHandoverCommandHeader")
604  .SetParent<Header> ()
605  .SetGroupName("Lte")
606  .AddConstructor<IdealHandoverCommandHeader> ()
607  ;
608  return tid;
609 }
610 
611 TypeId
613 {
614  return GetTypeId ();
615 }
616 
617 void IdealHandoverCommandHeader::Print (std::ostream &os) const
618 {
619  os << " msgId=" << m_msgId;
620 }
621 
623 {
624  return 4;
625 }
626 
628 {
629  start.WriteU32 (m_msgId);
630 }
631 
633 {
634  m_msgId = start.ReadU32 ();
635  return GetSerializedSize ();
636 }
637 
638 
639 
642 {
643  uint32_t msgId = ++g_handoverCommandMsgIdCounter;
644  NS_ASSERT_MSG (g_handoverCommandMsgMap.find (msgId) == g_handoverCommandMsgMap.end (), "msgId " << msgId << " already in use");
645  NS_LOG_INFO (" encoding msgId = " << msgId);
646  g_handoverCommandMsgMap.insert (std::pair<uint32_t, LteRrcSap::RrcConnectionReconfiguration> (msgId, msg));
648  h.SetMsgId (msgId);
649  Ptr<Packet> p = Create<Packet> ();
650  p->AddHeader (h);
651  return p;
652 }
653 
656 {
658  p->RemoveHeader (h);
659  uint32_t msgId = h.GetMsgId ();
660  NS_LOG_INFO (" decoding msgId = " << msgId);
661  std::map<uint32_t, LteRrcSap::RrcConnectionReconfiguration>::iterator it = g_handoverCommandMsgMap.find (msgId);
662  NS_ASSERT_MSG (it != g_handoverCommandMsgMap.end (), "msgId " << msgId << " not found");
664  g_handoverCommandMsgMap.erase (it);
665  return msg;
666 }
667 
668 
669 
670 
671 
672 } // 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:267
RrcConnectionRequest structure.
Definition: lte-rrc-sap.h:685
LteUeRrcSapProvider * m_ueRrcSapProvider
the UE RRC SAP provider
void DoSendRrcConnectionReestablishmentReject(uint16_t rnti, LteRrcSap::RrcConnectionReestablishmentReject msg)
Send RRC connection reestablishment reject function.
LteEnbRrcSapProvider * m_enbRrcSapProvider
the ENB RRC SAP provider
uint32_t ReadU32(void)
Definition: buffer.cc:975
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:982
MeasurementReport structure.
Definition: lte-rrc-sap.h:894
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.
void DoSendRrcConnectionReconfiguration(uint16_t rnti, LteRrcSap::RrcConnectionReconfiguration msg)
Send RRC connection reconfiguration function.
Part of the RRC protocol.
Definition: lte-rrc-sap.h:1182
def start()
Definition: core.py:1790
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:201
virtual uint32_t GetSerializedSize(void) const
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:1001
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:277
Template for the implementation of the LteEnbRrcSapUser as a member of an owner class of type C to wh...
Definition: lte-rrc-sap.h:1465
void(* Time)(Time oldValue, Time newValue)
TracedValue callback signature for Time.
Definition: nstime.h:719
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:913
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:601
virtual void Serialize(Buffer::Iterator start) const
static EventId Schedule(Time const &delay, MEM mem_ptr, OBJ obj)
Schedule an event to expire after delay.
Definition: simulator.h:1375
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:858
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 void RecvRrcConnectionReestablishment(RrcConnectionReestablishment msg)=0
Receive an RRCConnectionReestablishment message from the serving eNodeB during an RRC connection re-e...
virtual void Print(std::ostream &os) const
RrcConnectionReconfiguration structure.
Definition: lte-rrc-sap.h:829
SetupUeParameters structure.
Definition: lte-rrc-sap.h:1067
Ptr< NetDevice > GetDevice(uint32_t index) const
Retrieve the index-th NetDevice associated to this node.
Definition: node.cc:142
void SetCellId(uint16_t cellId)
Set the cell ID function.
RrcConnectionReconfigurationCompleted structure.
Definition: lte-rrc-sap.h:844
virtual uint32_t Deserialize(Buffer::Iterator start)
void DoSendRrcConnectionRequest(LteRrcSap::RrcConnectionRequest msg)
Send RRC connection request function.
virtual void Print(std::ostream &os) const
std::map< uint16_t, LteUeRrcSapProvider * > m_enbRrcSapProviderMap
the LTE UE RRC SAP provider
RrcConnectionSetupCompleted structure.
Definition: lte-rrc-sap.h:698
HandoverPreparationInfo structure.
Definition: lte-rrc-sap.h:888
This header encodes the map key discussed above.
LteUeRrcSapUser * m_ueRrcSapUser
the RRC SAP user
RrcConnectionSetup structure.
Definition: lte-rrc-sap.h:691
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.
virtual void Serialize(Buffer::Iterator start) const
void SetEnbRrcSapProvider()
Set ENB RRC SAP provider.
RrcConnectionReestablishmentRequest structure.
Definition: lte-rrc-sap.h:851
uint32_t GetNDevices(void) const
Definition: node.cc:150
Part of the RRC protocol.
Definition: lte-rrc-sap.h:1063
void SetMsgId(uint32_t id)
Set the message ID function.
Ptr< LteEnbRrc > GetRrc() const
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:882
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:871
NS_LOG_LOGIC("Net device "<< nd<< " is not bridged")
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:90
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 RecvRrcConnectionReestablishmentRequest(uint16_t rnti, RrcConnectionReestablishmentRequest msg)=0
Receive an RRCConnectionReestablishmentRequest message from a UE during an RRC connection re-establis...
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.
bool HasCellId(uint16_t cellId) const
void SetUeRrcSapProvider(uint16_t rnti, LteUeRrcSapProvider *p)
Set UE RRC SAP provider function.
RrcConnectionReestablishmentComplete structure.
Definition: lte-rrc-sap.h:865
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 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.
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
static uint32_t g_handoverCommandMsgIdCounter
handover command message ID counter
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:1276
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:909
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
LteEnbRrcSapUser * GetLteEnbRrcSapUser()
Get LTE ENB RRC SAP user function.
RrcConnectionRelease structure.
Definition: lte-rrc-sap.h:876
void WriteU32(uint32_t data)
Definition: buffer.cc:881
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
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:914
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
virtual uint32_t GetSerializedSize(void) const
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.