A Discrete-Event Network Simulator
API
lte-rrc-protocol-real.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  * Authors: Nicola Baldo <nbaldo@cttc.es>
19  * Lluis Parcerisa <lparcerisa@cttc.cat>
20  */
21 
22 #include <ns3/fatal-error.h>
23 #include <ns3/log.h>
24 #include <ns3/nstime.h>
25 #include <ns3/node-list.h>
26 #include <ns3/node.h>
27 #include <ns3/simulator.h>
28 
29 #include "lte-rrc-protocol-real.h"
30 #include "lte-ue-rrc.h"
31 #include "lte-enb-rrc.h"
32 #include "lte-enb-net-device.h"
33 #include "lte-ue-net-device.h"
34 
35 namespace ns3 {
36 
37 NS_LOG_COMPONENT_DEFINE ("LteRrcProtocolReal");
38 
41 
43 
45  : m_ueRrcSapProvider (0),
46  m_enbRrcSapProvider (0)
47 {
51 }
52 
54 {
55 }
56 
57 void
59 {
60  NS_LOG_FUNCTION (this);
61  delete m_ueRrcSapUser;
64  m_rrc = 0;
65 }
66 
67 TypeId
69 {
70  static TypeId tid = TypeId ("ns3::LteUeRrcProtocolReal")
71  .SetParent<Object> ()
72  .SetGroupName("Lte")
73  .AddConstructor<LteUeRrcProtocolReal> ()
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 
104 }
105 
106 void
108 {
109  // initialize the RNTI and get the EnbLteRrcSapProvider for the
110  // eNB we are currently attached to
111  m_rnti = m_rrc->GetRnti ();
113 
114  Ptr<Packet> packet = Create<Packet> ();
115 
116  RrcConnectionRequestHeader rrcConnectionRequestHeader;
117  rrcConnectionRequestHeader.SetMessage (msg);
118 
119  packet->AddHeader (rrcConnectionRequestHeader);
120 
121  LteRlcSapProvider::TransmitPdcpPduParameters transmitPdcpPduParameters;
122  transmitPdcpPduParameters.pdcpPdu = packet;
123  transmitPdcpPduParameters.rnti = m_rnti;
124  transmitPdcpPduParameters.lcid = 0;
125 
126  m_setupParameters.srb0SapProvider->TransmitPdcpPdu (transmitPdcpPduParameters);
127 }
128 
129 void
131 {
132  Ptr<Packet> packet = Create<Packet> ();
133 
134  RrcConnectionSetupCompleteHeader rrcConnectionSetupCompleteHeader;
135  rrcConnectionSetupCompleteHeader.SetMessage (msg);
136 
137  packet->AddHeader (rrcConnectionSetupCompleteHeader);
138 
139  LtePdcpSapProvider::TransmitPdcpSduParameters transmitPdcpSduParameters;
140  transmitPdcpSduParameters.pdcpSdu = packet;
141  transmitPdcpSduParameters.rnti = m_rnti;
142  transmitPdcpSduParameters.lcid = 1;
143 
145  {
146  m_setupParameters.srb1SapProvider->TransmitPdcpSdu (transmitPdcpSduParameters);
147  }
148 }
149 
150 void
152 {
153  // re-initialize the RNTI and get the EnbLteRrcSapProvider for the
154  // eNB we are currently attached to
155  m_rnti = m_rrc->GetRnti ();
157 
158  Ptr<Packet> packet = Create<Packet> ();
159 
160  RrcConnectionReconfigurationCompleteHeader rrcConnectionReconfigurationCompleteHeader;
161  rrcConnectionReconfigurationCompleteHeader.SetMessage (msg);
162 
163  packet->AddHeader (rrcConnectionReconfigurationCompleteHeader);
164 
165  LtePdcpSapProvider::TransmitPdcpSduParameters transmitPdcpSduParameters;
166  transmitPdcpSduParameters.pdcpSdu = packet;
167  transmitPdcpSduParameters.rnti = m_rnti;
168  transmitPdcpSduParameters.lcid = 1;
169 
170  m_setupParameters.srb1SapProvider->TransmitPdcpSdu (transmitPdcpSduParameters);
171 }
172 
173 void
175 {
176  // re-initialize the RNTI and get the EnbLteRrcSapProvider for the
177  // eNB we are currently attached to
178  m_rnti = m_rrc->GetRnti ();
180 
181  Ptr<Packet> packet = Create<Packet> ();
182 
183  MeasurementReportHeader measurementReportHeader;
184  measurementReportHeader.SetMessage (msg);
185 
186  packet->AddHeader (measurementReportHeader);
187 
188  LtePdcpSapProvider::TransmitPdcpSduParameters transmitPdcpSduParameters;
189  transmitPdcpSduParameters.pdcpSdu = packet;
190  transmitPdcpSduParameters.rnti = m_rnti;
191  transmitPdcpSduParameters.lcid = 1;
192 
193  m_setupParameters.srb1SapProvider->TransmitPdcpSdu (transmitPdcpSduParameters);
194 }
195 
196 void
198 {
199  NS_LOG_FUNCTION(this<<rnti);
200  uint16_t cellId = m_rrc->GetCellId ();
201  // re-initialize the RNTI and get the EnbLteRrcSapProvider for the
202  // eNB we are currently attached to or attempting random access to
203  // a target eNB
204  m_rnti = m_rrc->GetRnti ();
205 
206  NS_LOG_DEBUG ("RNTI " << rnti
207  << " sending UE context remove request to cell id " << cellId);
208  NS_ABORT_MSG_IF (m_rnti != rnti, "RNTI mismatch");
209 
210  SetEnbRrcSapProvider (); //the provider has to be reset since the cell might
211  // have changed due to handover
212  //ideally informing eNB
214  m_enbRrcSapProvider, rnti);
215 }
216 
217 void
219 {
220  Ptr<Packet> packet = Create<Packet> ();
221 
222  RrcConnectionReestablishmentRequestHeader rrcConnectionReestablishmentRequestHeader;
223  rrcConnectionReestablishmentRequestHeader.SetMessage (msg);
224 
225  packet->AddHeader (rrcConnectionReestablishmentRequestHeader);
226 
227  LteRlcSapProvider::TransmitPdcpPduParameters transmitPdcpPduParameters;
228  transmitPdcpPduParameters.pdcpPdu = packet;
229  transmitPdcpPduParameters.rnti = m_rnti;
230  transmitPdcpPduParameters.lcid = 0;
231 
232  m_setupParameters.srb0SapProvider->TransmitPdcpPdu (transmitPdcpPduParameters);
233 }
234 
235 void
237 {
238  Ptr<Packet> packet = Create<Packet> ();
239 
240  RrcConnectionReestablishmentCompleteHeader rrcConnectionReestablishmentCompleteHeader;
241  rrcConnectionReestablishmentCompleteHeader.SetMessage (msg);
242 
243  packet->AddHeader (rrcConnectionReestablishmentCompleteHeader);
244 
245  LtePdcpSapProvider::TransmitPdcpSduParameters transmitPdcpSduParameters;
246  transmitPdcpSduParameters.pdcpSdu = packet;
247  transmitPdcpSduParameters.rnti = m_rnti;
248  transmitPdcpSduParameters.lcid = 1;
249 
250  m_setupParameters.srb1SapProvider->TransmitPdcpSdu (transmitPdcpSduParameters);
251 }
252 
253 
254 void
256 {
257  NS_LOG_FUNCTION (this);
258 
259  uint16_t cellId = m_rrc->GetCellId ();
260 
261  NS_LOG_DEBUG ("RNTI " << m_rnti << " connected to cell " << cellId);
262 
263  // walk list of all nodes to get the peer eNB
264  Ptr<LteEnbNetDevice> enbDev;
265  NodeList::Iterator listEnd = NodeList::End ();
266  bool found = false;
267  for (NodeList::Iterator i = NodeList::Begin ();
268  (i != listEnd) && (!found);
269  ++i)
270  {
271  Ptr<Node> node = *i;
272  int nDevs = node->GetNDevices ();
273  for (int j = 0;
274  (j < nDevs) && (!found);
275  j++)
276  {
277  enbDev = node->GetDevice (j)->GetObject <LteEnbNetDevice> ();
278  if (enbDev == 0)
279  {
280  continue;
281  }
282  else
283  {
284  if (enbDev->HasCellId (cellId))
285  {
286  found = true;
287  break;
288  }
289  }
290  }
291  }
292  NS_ASSERT_MSG (found, " Unable to find eNB with CellId =" << cellId);
293  m_enbRrcSapProvider = enbDev->GetRrc ()->GetLteEnbRrcSapProvider ();
294  Ptr<LteEnbRrcProtocolReal> enbRrcProtocolReal = enbDev->GetRrc ()->GetObject<LteEnbRrcProtocolReal> ();
295  enbRrcProtocolReal->SetUeRrcSapProvider (m_rnti, m_ueRrcSapProvider);
296 }
297 
298 void
300 {
301  // Get type of message received
302  RrcDlCcchMessage rrcDlCcchMessage;
303  p->PeekHeader (rrcDlCcchMessage);
304 
305  // Declare possible headers to receive
306  RrcConnectionReestablishmentHeader rrcConnectionReestablishmentHeader;
307  RrcConnectionReestablishmentRejectHeader rrcConnectionReestablishmentRejectHeader;
308  RrcConnectionSetupHeader rrcConnectionSetupHeader;
309  RrcConnectionRejectHeader rrcConnectionRejectHeader;
310 
311  // Declare possible messages
312  LteRrcSap::RrcConnectionReestablishment rrcConnectionReestablishmentMsg;
313  LteRrcSap::RrcConnectionReestablishmentReject rrcConnectionReestablishmentRejectMsg;
314  LteRrcSap::RrcConnectionSetup rrcConnectionSetupMsg;
315  LteRrcSap::RrcConnectionReject rrcConnectionRejectMsg;
316 
317  // Deserialize packet and call member recv function with appropriate structure
318  switch ( rrcDlCcchMessage.GetMessageType () )
319  {
320  case 0:
321  // RrcConnectionReestablishment
322  p->RemoveHeader (rrcConnectionReestablishmentHeader);
323  rrcConnectionReestablishmentMsg = rrcConnectionReestablishmentHeader.GetMessage ();
324  m_ueRrcSapProvider->RecvRrcConnectionReestablishment (rrcConnectionReestablishmentMsg);
325  break;
326  case 1:
327  // RrcConnectionReestablishmentReject
328  p->RemoveHeader (rrcConnectionReestablishmentRejectHeader);
329  rrcConnectionReestablishmentRejectMsg = rrcConnectionReestablishmentRejectHeader.GetMessage ();
330  // m_ueRrcSapProvider->RecvRrcConnectionReestablishmentReject (rrcConnectionReestablishmentRejectMsg);
331  break;
332  case 2:
333  // RrcConnectionReject
334  p->RemoveHeader (rrcConnectionRejectHeader);
335  rrcConnectionRejectMsg = rrcConnectionRejectHeader.GetMessage ();
336  m_ueRrcSapProvider->RecvRrcConnectionReject (rrcConnectionRejectMsg);
337  break;
338  case 3:
339  // RrcConnectionSetup
340  p->RemoveHeader (rrcConnectionSetupHeader);
341  rrcConnectionSetupMsg = rrcConnectionSetupHeader.GetMessage ();
342  m_ueRrcSapProvider->RecvRrcConnectionSetup (rrcConnectionSetupMsg);
343  break;
344  }
345 }
346 
347 void
349 {
350  // Get type of message received
351  RrcDlDcchMessage rrcDlDcchMessage;
352  params.pdcpSdu->PeekHeader (rrcDlDcchMessage);
353 
354  // Declare possible headers to receive
355  RrcConnectionReconfigurationHeader rrcConnectionReconfigurationHeader;
356  RrcConnectionReleaseHeader rrcConnectionReleaseHeader;
357 
358  // Declare possible messages to receive
359  LteRrcSap::RrcConnectionReconfiguration rrcConnectionReconfigurationMsg;
360  LteRrcSap::RrcConnectionRelease rrcConnectionReleaseMsg;
361 
362  // Deserialize packet and call member recv function with appropriate structure
363  switch ( rrcDlDcchMessage.GetMessageType () )
364  {
365  case 4:
366  params.pdcpSdu->RemoveHeader (rrcConnectionReconfigurationHeader);
367  rrcConnectionReconfigurationMsg = rrcConnectionReconfigurationHeader.GetMessage ();
368  m_ueRrcSapProvider->RecvRrcConnectionReconfiguration (rrcConnectionReconfigurationMsg);
369  break;
370  case 5:
371  params.pdcpSdu->RemoveHeader (rrcConnectionReleaseHeader);
372  rrcConnectionReleaseMsg = rrcConnectionReleaseHeader.GetMessage ();
373  //m_ueRrcSapProvider->RecvRrcConnectionRelease (rrcConnectionReleaseMsg);
374  break;
375  }
376 }
377 
379 
381  : m_enbRrcSapProvider (0)
382 {
383  NS_LOG_FUNCTION (this);
385 }
386 
388 {
389  NS_LOG_FUNCTION (this);
390 }
391 
392 void
394 {
395  NS_LOG_FUNCTION (this);
396  delete m_enbRrcSapUser;
397  for (std::map<uint16_t, LteEnbRrcSapProvider::CompleteSetupUeParameters>::iterator
398  it = m_completeSetupUeParametersMap.begin ();
399  it != m_completeSetupUeParametersMap.end ();
400  ++it)
401  {
402  delete it->second.srb0SapUser;
403  delete it->second.srb1SapUser;
404  }
406 }
407 
408 TypeId
410 {
411  static TypeId tid = TypeId ("ns3::LteEnbRrcProtocolReal")
412  .SetParent<Object> ()
413  .SetGroupName("Lte")
414  .AddConstructor<LteEnbRrcProtocolReal> ()
415  ;
416  return tid;
417 }
418 
419 void
421 {
423 }
424 
427 {
428  return m_enbRrcSapUser;
429 }
430 
431 void
433 {
434  m_cellId = cellId;
435 }
436 
439 {
440  std::map<uint16_t, LteUeRrcSapProvider*>::const_iterator it;
441  it = m_enbRrcSapProviderMap.find (rnti);
442  NS_ASSERT_MSG (it != m_enbRrcSapProviderMap.end (), "could not find RNTI = " << rnti);
443  return it->second;
444 }
445 
446 void
448 {
449  std::map<uint16_t, LteUeRrcSapProvider*>::iterator it;
450  it = m_enbRrcSapProviderMap.find (rnti);
451  // TODO: remove after merge of ho_failure branch
452  // assign UE RRC only if the RNTI is found at eNB
453  if (it != m_enbRrcSapProviderMap.end ())
454  {
455  it->second = p;
456  }
457 }
458 
459 void
461 {
462  NS_LOG_FUNCTION (this << rnti);
463 
464  // // walk list of all nodes to get the peer UE RRC SAP Provider
465  // Ptr<LteUeRrc> ueRrc;
466  // NodeList::Iterator listEnd = NodeList::End ();
467  // bool found = false;
468  // for (NodeList::Iterator i = NodeList::Begin (); (i != listEnd) && (found == false); i++)
469  // {
470  // Ptr<Node> node = *i;
471  // int nDevs = node->GetNDevices ();
472  // for (int j = 0; j < nDevs; j++)
473  // {
474  // Ptr<LteUeNetDevice> ueDev = node->GetDevice (j)->GetObject <LteUeNetDevice> ();
475  // if (!ueDev)
476  // {
477  // continue;
478  // }
479  // else
480  // {
481  // ueRrc = ueDev->GetRrc ();
482  // if ((ueRrc->GetRnti () == rnti) && (ueRrc->GetCellId () == m_cellId))
483  // {
484  // found = true;
485  // break;
486  // }
487  // }
488  // }
489  // }
490  // NS_ASSERT_MSG (found , " Unable to find UE with RNTI=" << rnti << " cellId=" << m_cellId);
491  // m_enbRrcSapProviderMap[rnti] = ueRrc->GetLteUeRrcSapProvider ();
492 
493  // just create empty entry, the UeRrcSapProvider will be set by the
494  // ue upon connection request or connection reconfiguration
495  // completed
496  m_enbRrcSapProviderMap[rnti] = 0;
497 
498  // Store SetupUeParameters
499  m_setupUeParametersMap[rnti] = params;
500 
501  LteEnbRrcSapProvider::CompleteSetupUeParameters completeSetupUeParameters;
502  std::map<uint16_t, LteEnbRrcSapProvider::CompleteSetupUeParameters>::iterator
503  csupIt = m_completeSetupUeParametersMap.find (rnti);
504  if (csupIt == m_completeSetupUeParametersMap.end ())
505  {
506  // Create LteRlcSapUser, LtePdcpSapUser
507  LteRlcSapUser* srb0SapUser = new RealProtocolRlcSapUser (this,rnti);
509  completeSetupUeParameters.srb0SapUser = srb0SapUser;
510  completeSetupUeParameters.srb1SapUser = srb1SapUser;
511  // Store LteRlcSapUser, LtePdcpSapUser
512  m_completeSetupUeParametersMap[rnti] = completeSetupUeParameters;
513  }
514  else
515  {
516  completeSetupUeParameters = csupIt->second;
517  }
518  m_enbRrcSapProvider->CompleteSetupUe (rnti, completeSetupUeParameters);
519 }
520 
521 void
523 {
524  NS_LOG_FUNCTION (this << rnti);
525  std::map<uint16_t, LteEnbRrcSapProvider::CompleteSetupUeParameters>::iterator
526  it = m_completeSetupUeParametersMap.find (rnti);
528  delete it->second.srb0SapUser;
529  delete it->second.srb1SapUser;
531  m_enbRrcSapProviderMap.erase (rnti);
532  m_setupUeParametersMap.erase (rnti);
533 }
534 
535 void
537 {
538  NS_LOG_FUNCTION (this << cellId);
539  // walk list of all nodes to get UEs with this cellId
540  Ptr<LteUeRrc> ueRrc;
541  for (NodeList::Iterator i = NodeList::Begin (); i != NodeList::End (); ++i)
542  {
543  Ptr<Node> node = *i;
544  int nDevs = node->GetNDevices ();
545  for (int j = 0; j < nDevs; ++j)
546  {
547  Ptr<LteUeNetDevice> ueDev = node->GetDevice (j)->GetObject <LteUeNetDevice> ();
548  if (ueDev != 0)
549  {
550  Ptr<LteUeRrc> ueRrc = ueDev->GetRrc ();
551  NS_LOG_LOGIC ("considering UE IMSI " << ueDev->GetImsi () << " that has cellId " << ueRrc->GetCellId ());
552  if (ueRrc->GetCellId () == cellId)
553  {
554  NS_LOG_LOGIC ("sending SI to IMSI " << ueDev->GetImsi ());
555 
559  ueRrc->GetLteUeRrcSapProvider (),
560  msg);
561  }
562  }
563  }
564  }
565 }
566 
567 void
569 {
570  Ptr<Packet> packet = Create<Packet> ();
571 
572  RrcConnectionSetupHeader rrcConnectionSetupHeader;
573  rrcConnectionSetupHeader.SetMessage (msg);
574 
575  packet->AddHeader (rrcConnectionSetupHeader);
576 
577  LteRlcSapProvider::TransmitPdcpPduParameters transmitPdcpPduParameters;
578  transmitPdcpPduParameters.pdcpPdu = packet;
579  transmitPdcpPduParameters.rnti = rnti;
580  transmitPdcpPduParameters.lcid = 0;
581 
582  m_setupUeParametersMap.at (rnti).srb0SapProvider->TransmitPdcpPdu (transmitPdcpPduParameters);
583 }
584 
585 void
587 {
588  Ptr<Packet> packet = Create<Packet> ();
589 
590  RrcConnectionRejectHeader rrcConnectionRejectHeader;
591  rrcConnectionRejectHeader.SetMessage (msg);
592 
593  packet->AddHeader (rrcConnectionRejectHeader);
594 
595  LteRlcSapProvider::TransmitPdcpPduParameters transmitPdcpPduParameters;
596  transmitPdcpPduParameters.pdcpPdu = packet;
597  transmitPdcpPduParameters.rnti = rnti;
598  transmitPdcpPduParameters.lcid = 0;
599 
600  m_setupUeParametersMap[rnti].srb0SapProvider->TransmitPdcpPdu (transmitPdcpPduParameters);
601 }
602 
603 void
605 {
606  Ptr<Packet> packet = Create<Packet> ();
607 
608  RrcConnectionReconfigurationHeader rrcConnectionReconfigurationHeader;
609  rrcConnectionReconfigurationHeader.SetMessage (msg);
610 
611  packet->AddHeader (rrcConnectionReconfigurationHeader);
612 
613  LtePdcpSapProvider::TransmitPdcpSduParameters transmitPdcpSduParameters;
614  transmitPdcpSduParameters.pdcpSdu = packet;
615  transmitPdcpSduParameters.rnti = rnti;
616  transmitPdcpSduParameters.lcid = 1;
617 
618  m_setupUeParametersMap[rnti].srb1SapProvider->TransmitPdcpSdu (transmitPdcpSduParameters);
619 }
620 
621 void
623 {
624  Ptr<Packet> packet = Create<Packet> ();
625 
626  RrcConnectionReestablishmentHeader rrcConnectionReestablishmentHeader;
627  rrcConnectionReestablishmentHeader.SetMessage (msg);
628 
629  packet->AddHeader (rrcConnectionReestablishmentHeader);
630 
631  LteRlcSapProvider::TransmitPdcpPduParameters transmitPdcpPduParameters;
632  transmitPdcpPduParameters.pdcpPdu = packet;
633  transmitPdcpPduParameters.rnti = rnti;
634  transmitPdcpPduParameters.lcid = 0;
635 
636  m_setupUeParametersMap[rnti].srb0SapProvider->TransmitPdcpPdu (transmitPdcpPduParameters);
637 }
638 
639 void
641 {
642  Ptr<Packet> packet = Create<Packet> ();
643 
644  RrcConnectionReestablishmentRejectHeader rrcConnectionReestablishmentRejectHeader;
645  rrcConnectionReestablishmentRejectHeader.SetMessage (msg);
646 
647  packet->AddHeader (rrcConnectionReestablishmentRejectHeader);
648 
649  LteRlcSapProvider::TransmitPdcpPduParameters transmitPdcpPduParameters;
650  transmitPdcpPduParameters.pdcpPdu = packet;
651  transmitPdcpPduParameters.rnti = rnti;
652  transmitPdcpPduParameters.lcid = 0;
653 
654  m_setupUeParametersMap[rnti].srb0SapProvider->TransmitPdcpPdu (transmitPdcpPduParameters);
655 }
656 
657 void
659 {
660  Ptr<Packet> packet = Create<Packet> ();
661 
662  RrcConnectionReleaseHeader rrcConnectionReleaseHeader;
663  rrcConnectionReleaseHeader.SetMessage (msg);
664 
665  packet->AddHeader (rrcConnectionReleaseHeader);
666 
667  LtePdcpSapProvider::TransmitPdcpSduParameters transmitPdcpSduParameters;
668  transmitPdcpSduParameters.pdcpSdu = packet;
669  transmitPdcpSduParameters.rnti = rnti;
670  transmitPdcpSduParameters.lcid = 1;
671 
672  m_setupUeParametersMap[rnti].srb1SapProvider->TransmitPdcpSdu (transmitPdcpSduParameters);
673 }
674 
675 void
677 {
678  // Get type of message received
679  RrcUlCcchMessage rrcUlCcchMessage;
680  p->PeekHeader (rrcUlCcchMessage);
681 
682  // Declare possible headers to receive
683  RrcConnectionReestablishmentRequestHeader rrcConnectionReestablishmentRequestHeader;
684  RrcConnectionRequestHeader rrcConnectionRequestHeader;
685 
686  // Deserialize packet and call member recv function with appropriate structure
687  switch ( rrcUlCcchMessage.GetMessageType () )
688  {
689  case 0:
690  p->RemoveHeader (rrcConnectionReestablishmentRequestHeader);
691  LteRrcSap::RrcConnectionReestablishmentRequest rrcConnectionReestablishmentRequestMsg;
692  rrcConnectionReestablishmentRequestMsg = rrcConnectionReestablishmentRequestHeader.GetMessage ();
693  m_enbRrcSapProvider->RecvRrcConnectionReestablishmentRequest (rnti,rrcConnectionReestablishmentRequestMsg);
694  break;
695  case 1:
696  p->RemoveHeader (rrcConnectionRequestHeader);
697  LteRrcSap::RrcConnectionRequest rrcConnectionRequestMsg;
698  rrcConnectionRequestMsg = rrcConnectionRequestHeader.GetMessage ();
699  m_enbRrcSapProvider->RecvRrcConnectionRequest (rnti,rrcConnectionRequestMsg);
700  break;
701  }
702 }
703 
704 void
706 {
707  // Get type of message received
708  RrcUlDcchMessage rrcUlDcchMessage;
709  params.pdcpSdu->PeekHeader (rrcUlDcchMessage);
710 
711  // Declare possible headers to receive
712  MeasurementReportHeader measurementReportHeader;
713  RrcConnectionReconfigurationCompleteHeader rrcConnectionReconfigurationCompleteHeader;
714  RrcConnectionReestablishmentCompleteHeader rrcConnectionReestablishmentCompleteHeader;
715  RrcConnectionSetupCompleteHeader rrcConnectionSetupCompleteHeader;
716 
717  // Declare possible messages to receive
718  LteRrcSap::MeasurementReport measurementReportMsg;
719  LteRrcSap::RrcConnectionReconfigurationCompleted rrcConnectionReconfigurationCompleteMsg;
720  LteRrcSap::RrcConnectionReestablishmentComplete rrcConnectionReestablishmentCompleteMsg;
721  LteRrcSap::RrcConnectionSetupCompleted rrcConnectionSetupCompletedMsg;
722 
723  // Deserialize packet and call member recv function with appropriate structure
724  switch ( rrcUlDcchMessage.GetMessageType () )
725  {
726  case 1:
727  params.pdcpSdu->RemoveHeader (measurementReportHeader);
728  measurementReportMsg = measurementReportHeader.GetMessage ();
729  m_enbRrcSapProvider->RecvMeasurementReport (params.rnti,measurementReportMsg);
730  break;
731  case 2:
732  params.pdcpSdu->RemoveHeader (rrcConnectionReconfigurationCompleteHeader);
733  rrcConnectionReconfigurationCompleteMsg = rrcConnectionReconfigurationCompleteHeader.GetMessage ();
734  m_enbRrcSapProvider->RecvRrcConnectionReconfigurationCompleted (params.rnti,rrcConnectionReconfigurationCompleteMsg);
735  break;
736  case 3:
737  params.pdcpSdu->RemoveHeader (rrcConnectionReestablishmentCompleteHeader);
738  rrcConnectionReestablishmentCompleteMsg = rrcConnectionReestablishmentCompleteHeader.GetMessage ();
739  m_enbRrcSapProvider->RecvRrcConnectionReestablishmentComplete (params.rnti,rrcConnectionReestablishmentCompleteMsg);
740  break;
741  case 4:
742  params.pdcpSdu->RemoveHeader (rrcConnectionSetupCompleteHeader);
743  rrcConnectionSetupCompletedMsg = rrcConnectionSetupCompleteHeader.GetMessage ();
744  m_enbRrcSapProvider->RecvRrcConnectionSetupCompleted (params.rnti, rrcConnectionSetupCompletedMsg);
745  break;
746  }
747 }
748 
751 {
753  h.SetMessage (msg);
754 
755  Ptr<Packet> p = Create<Packet> ();
756  p->AddHeader (h);
757  return p;
758 }
759 
762 {
764  p->RemoveHeader (h);
766  return msg;
767 }
768 
771 {
773  h.SetMessage (msg);
774  Ptr<Packet> p = Create<Packet> ();
775  p->AddHeader (h);
776  return p;
777 }
778 
781 {
783  p->RemoveHeader (h);
785  return msg;
786 }
787 
789 
791  : m_pdcp (pdcp),
792  m_rnti (rnti)
793 {
794 }
795 
797 {
798 }
799 
800 void
802 {
804 }
805 
806 } // namespace ns3
This class manages the serialization/deserialization of HandoverPreparationInfo IE.
void SetMessage(LteRrcSap::HandoverPreparationInfo msg)
Receives a HandoverPreparationInfo IE and stores the contents into the class attributes.
LteRrcSap::HandoverPreparationInfo GetMessage() const
Returns a HandoverPreparationInfo IE from the values in the class attributes.
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 a real fashion, by creating real RR...
void DoSendRrcConnectionRelease(uint16_t rnti, LteRrcSap::RrcConnectionRelease msg)
Send RRC connection release function.
std::map< uint16_t, LteEnbRrcSapProvider::CompleteSetupUeParameters > m_completeSetupUeParametersMap
complete setup UE parameters map
friend class LtePdcpSpecificLtePdcpSapUser< LteEnbRrcProtocolReal >
allow LtePdcpSpecificLtePdcpSapUser<LteEnbRrcProtocolReal> class friend access
void DoSetupUe(uint16_t rnti, LteEnbRrcSapUser::SetupUeParameters params)
Setup UE function.
LteUeRrcSapProvider * GetUeRrcSapProvider(uint16_t rnti)
Get UE RRC SAP provider function.
void SetCellId(uint16_t cellId)
Set cell ID function.
void DoReceivePdcpSdu(LtePdcpSapUser::ReceivePdcpSduParameters params)
Receive PDCP SDU function.
void DoSendRrcConnectionReestablishmentReject(uint16_t rnti, LteRrcSap::RrcConnectionReestablishmentReject msg)
Send RRC connection reestabishment reject function.
void DoSendSystemInformation(uint16_t cellId, LteRrcSap::SystemInformation msg)
Send system information function.
void DoReceivePdcpPdu(uint16_t rnti, Ptr< Packet > p)
Receive PDCP PDU function.
LteEnbRrcSapProvider * m_enbRrcSapProvider
ENB RRC SAP provider.
Ptr< Packet > DoEncodeHandoverCommand(LteRrcSap::RrcConnectionReconfiguration msg)
Encode handover command function.
LteEnbRrcSapUser * GetLteEnbRrcSapUser()
Get LTE ENB RRC SAP user function.
void DoSendRrcConnectionSetup(uint16_t rnti, LteRrcSap::RrcConnectionSetup msg)
Send RRC connection setup function.
friend class MemberLteEnbRrcSapUser< LteEnbRrcProtocolReal >
allow MemberLteEnbRrcSapUser<LteEnbRrcProtocolReal> class friend access
static TypeId GetTypeId(void)
Get the type ID.
void DoRemoveUe(uint16_t rnti)
Remove UE function.
Ptr< Packet > DoEncodeHandoverPreparationInformation(LteRrcSap::HandoverPreparationInfo msg)
Encode handover preparation information function.
void SetLteEnbRrcSapProvider(LteEnbRrcSapProvider *p)
Set LTE ENB RRC SAP provider function.
LteEnbRrcSapUser * m_enbRrcSapUser
ENB RRC SAP user.
void DoSendRrcConnectionReject(uint16_t rnti, LteRrcSap::RrcConnectionReject msg)
Send RRC connection reject function.
friend class RealProtocolRlcSapUser
allow RealProtocolRlcSapUser class friend access
std::map< uint16_t, LteEnbRrcSapUser::SetupUeParameters > m_setupUeParametersMap
setup UE parameters map
LteRrcSap::RrcConnectionReconfiguration DoDecodeHandoverCommand(Ptr< Packet > p)
Decode handover command function.
LteRrcSap::HandoverPreparationInfo DoDecodeHandoverPreparationInformation(Ptr< Packet > p)
Decode handover preparation information function.
virtual void DoDispose(void)
Destructor implementation.
void DoSendRrcConnectionReestablishment(uint16_t rnti, LteRrcSap::RrcConnectionReestablishment msg)
Send RRC connection reestabishment function.
void SetUeRrcSapProvider(uint16_t rnti, LteUeRrcSapProvider *p)
Set UE RRC SAP provider function.
void DoSendRrcConnectionReconfiguration(uint16_t rnti, LteRrcSap::RrcConnectionReconfiguration msg)
Send RRC connection reconfiguration function.
std::map< uint16_t, LteUeRrcSapProvider * > m_enbRrcSapProviderMap
ENB RRC SAP provider map.
Part of the RRC protocol.
Definition: lte-rrc-sap.h:1201
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 CompleteSetupUe(uint16_t rnti, CompleteSetupUeParameters params)=0
Complete setup UE function.
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:1082
virtual void TransmitPdcpSdu(TransmitPdcpSduParameters params)=0
Send RRC PDU parameters to the PDCP for transmission.
Service Access Point (SAP) offered by the PDCP entity to the RRC entity See 3GPP 36....
Definition: lte-pdcp-sap.h:70
virtual void TransmitPdcpPdu(TransmitPdcpPduParameters params)=0
Send a PDCP PDU to the RLC for transmission This method is to be called when upper PDCP entity has a ...
Service Access Point (SAP) offered by the UM-RLC and AM-RLC entities to the PDCP entity See 3GPP 36....
Definition: lte-rlc-sap.h:68
The LteUeNetDevice class implements the UE net device.
Models the transmission of RRC messages from the UE to the eNB in a real fashion, by creating real RR...
LteEnbRrcSapProvider * m_enbRrcSapProvider
ENB RRC SAP provider.
LteUeRrcSapProvider * m_ueRrcSapProvider
UE RRC SAP provider.
LteUeRrcSapUser::SetupParameters m_setupParameters
setup parameters
void SetEnbRrcSapProvider()
Set ENB RRC SAP provider.
void DoSendRrcConnectionReconfigurationCompleted(LteRrcSap::RrcConnectionReconfigurationCompleted msg)
Send RRC connection reconfiguration setup completed function.
virtual void DoDispose(void)
Destructor implementation.
void SetLteUeRrcSapProvider(LteUeRrcSapProvider *p)
Set LTE UE RRC SAP provider function.
void DoSendRrcConnectionSetupCompleted(LteRrcSap::RrcConnectionSetupCompleted msg)
Send RRC connection setup completed function.
friend class MemberLteUeRrcSapUser< LteUeRrcProtocolReal >
allow MemberLteUeRrcSapUser<LteUeRrcProtocolReal> class friend access
void DoReceivePdcpPdu(Ptr< Packet > p)
Receive PDCP PDU function.
Ptr< LteUeRrc > m_rrc
the RRC
void DoSendRrcConnectionReestablishmentComplete(LteRrcSap::RrcConnectionReestablishmentComplete msg)
Send RRC connection reestablishment complete function.
void DoReceivePdcpSdu(LtePdcpSapUser::ReceivePdcpSduParameters params)
Receive PDCP SDU function.
void DoSetup(LteUeRrcSapUser::SetupParameters params)
Setup function.
void SetUeRrc(Ptr< LteUeRrc > rrc)
Set UE RRC function.
LteUeRrcSapUser * m_ueRrcSapUser
UE RRC SAP user.
void DoSendMeasurementReport(LteRrcSap::MeasurementReport msg)
Send measurement report function.
friend class LtePdcpSpecificLtePdcpSapUser< LteUeRrcProtocolReal >
allow LtePdcpSpecificLtePdcpSapUser<LteUeRrcProtocolReal> class friend access
void DoSendRrcConnectionReestablishmentRequest(LteRrcSap::RrcConnectionReestablishmentRequest msg)
Send RRC connection reestablishment request function.
LteUeRrcSapUser * GetLteUeRrcSapUser()
Get LTE UE RRC SAP user function.
void DoSendIdealUeContextRemoveRequest(uint16_t rnti)
Send ideal UE context remove request function.
static TypeId GetTypeId(void)
Get the type ID.
void DoSendRrcConnectionRequest(LteRrcSap::RrcConnectionRequest msg)
Send RRC connection request function.
LteUeRrcSapProvider::CompleteSetupParameters m_completeSetupParameters
complete setup parameters
friend class LteRlcSpecificLteRlcSapUser< LteUeRrcProtocolReal >
allow LteRlcSpecificLteRlcSapUser<LteUeRrcProtocolReal> class friend access
Part of the RRC protocol.
Definition: lte-rrc-sap.h:1001
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 CompleteSetup(CompleteSetupParameters params)=0
Complete setup function.
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:917
This class manages the serialization/deserialization of MeasurementReport IE.
LteRrcSap::MeasurementReport GetMessage() const
Returns a MeasurementReport IE from the values in the class attributes.
void SetMessage(LteRrcSap::MeasurementReport msg)
Receives a MeasurementReport IE and stores the contents into the class attributes.
uint32_t GetId(void) const
Definition: node.cc:109
uint32_t GetNDevices(void) const
Definition: node.cc:152
Ptr< NetDevice > GetDevice(uint32_t index) const
Retrieve the index-th NetDevice associated to this node.
Definition: node.cc:144
static Iterator End(void)
Definition: node-list.cc:235
static Iterator Begin(void)
Definition: node-list.cc:229
std::vector< Ptr< Node > >::const_iterator Iterator
Node container iterator.
Definition: node-list.h:44
A base class which provides memory management and object aggregation.
Definition: object.h:88
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
Definition: object.h:470
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer.
Definition: packet.cc:280
void AddHeader(const Header &header)
Add header to this packet.
Definition: packet.cc:256
uint32_t PeekHeader(Header &header) const
Deserialize but does not remove the header from the internal buffer.
Definition: packet.cc:290
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:74
virtual void ReceivePdcpPdu(Ptr< Packet > p)
Called by the RLC entity to notify the PDCP entity of the reception of a new PDCP PDU.
LteEnbRrcProtocolReal * m_pdcp
PDCP.
int GetMessageType()
Get message type.
This class manages the serialization/deserialization of RrcConnectionSetupComplete IE.
LteRrcSap::RrcConnectionReconfigurationCompleted GetMessage() const
Returns a RrcConnectionReconfigurationCompleted IE from the values in the class attributes.
void SetMessage(LteRrcSap::RrcConnectionReconfigurationCompleted msg)
Receives a RrcConnectionReconfigurationCompleted IE and stores the contents into the class attributes...
This class manages the serialization/deserialization of RrcConnectionReconfiguration IE.
LteRrcSap::RrcConnectionReconfiguration GetMessage() const
Returns a RrcConnectionReconfiguration IE from the values in the class attributes.
void SetMessage(LteRrcSap::RrcConnectionReconfiguration msg)
Receives a RrcConnectionReconfiguration IE and stores the contents into the class attributes.
This class manages the serialization/deserialization of RrcConnectionReestablishmentComplete IE.
void SetMessage(LteRrcSap::RrcConnectionReestablishmentComplete msg)
Receives a RrcConnectionReestablishmentComplete IE and stores the contents into the class attributes.
LteRrcSap::RrcConnectionReestablishmentComplete GetMessage() const
Returns a RrcConnectionReestablishmentComplete IE from the values in the class attributes.
This class manages the serialization/deserialization of RrcConnectionReestablishment IE.
LteRrcSap::RrcConnectionReestablishment GetMessage() const
Returns a RrcConnectionReestablishment IE from the values in the class attributes.
void SetMessage(LteRrcSap::RrcConnectionReestablishment msg)
Receives a RrcConnectionReestablishment IE and stores the contents into the class attributes.
This class manages the serialization/deserialization of RrcConnectionReestablishmentReject IE.
void SetMessage(LteRrcSap::RrcConnectionReestablishmentReject msg)
Receives a RrcConnectionReestablishmentReject IE and stores the contents into the class attributes.
LteRrcSap::RrcConnectionReestablishmentReject GetMessage() const
Returns a RrcConnectionReestablishmentReject IE from the values in the class attributes.
This class manages the serialization/deserialization of RRCConnectionReestablishmentRequest IE.
LteRrcSap::RrcConnectionReestablishmentRequest GetMessage() const
Returns a RrcConnectionReestablishmentRequest IE from the values in the class attributes.
void SetMessage(LteRrcSap::RrcConnectionReestablishmentRequest msg)
Receives a RrcConnectionReestablishmentRequest IE and stores the contents into the class attributes.
This class manages the serialization/deserialization of RrcConnectionReject IE.
LteRrcSap::RrcConnectionReject GetMessage() const
Returns a RrcConnectionReject IE from the values in the class attributes.
void SetMessage(LteRrcSap::RrcConnectionReject msg)
Receives a RrcConnectionReject IE and stores the contents into the class attributes.
This class manages the serialization/deserialization of RrcConnectionRelease IE.
LteRrcSap::RrcConnectionRelease GetMessage() const
Returns a RrcConnectionRelease IE from the values in the class attributes.
void SetMessage(LteRrcSap::RrcConnectionRelease msg)
Receives a RrcConnectionRelease IE and stores the contents into the class attributes.
This class manages the serialization/deserialization of RrcConnectionRequest IE.
void SetMessage(LteRrcSap::RrcConnectionRequest msg)
Receives a RrcConnectionRequest IE and stores the contents into the class attributes.
LteRrcSap::RrcConnectionRequest GetMessage() const
Returns a RrcConnectionRequest IE from the values in the class attributes.
This class manages the serialization/deserialization of RrcConnectionSetupComplete IE.
LteRrcSap::RrcConnectionSetupCompleted GetMessage() const
Returns a RrcConnectionSetupCompleted IE from the values in the class attributes.
void SetMessage(LteRrcSap::RrcConnectionSetupCompleted msg)
Receives a RrcConnectionSetupCompleted IE and stores the contents into the class attributes.
This class manages the serialization/deserialization of RrcConnectionSetup IE.
void SetMessage(LteRrcSap::RrcConnectionSetup msg)
Receives a RrcConnectionSetup IE and stores the contents into the class attributes.
LteRrcSap::RrcConnectionSetup GetMessage() const
Returns a RrcConnectionSetup IE from the values in the class attributes.
This class only serves to discriminate which message type has been received in downlink (eNb to ue) f...
This class only serves to discriminate which message type has been received in downlink (eNb to ue) f...
This class only serves to discriminate which message type has been received in uplink (ue to eNb) for...
This class only serves to discriminate which message type has been received in uplink (ue to eNb) for...
static EventId Schedule(Time const &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
Definition: simulator.h:556
static void ScheduleWithContext(uint32_t context, Time const &delay, FUNC f, Ts &&... args)
Schedule an event with the given context.
Definition: simulator.h:571
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:103
a unique identifier for an interface.
Definition: type-id.h:59
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:922
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
Definition: assert.h:67
#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
#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:205
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition: log.h:273
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
Definition: log.h:289
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:45
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:1252
Every class exported by the ns3 library is enclosed in the ns3 namespace.
const Time RRC_REAL_MSG_DELAY
RRC real message delay.
CompleteSetupUeParameters structure.
Definition: lte-rrc-sap.h:1205
SetupUeParameters structure.
Definition: lte-rrc-sap.h:1086
Parameters for LtePdcpSapProvider::TransmitPdcpSdu.
Definition: lte-pdcp-sap.h:44
uint8_t lcid
the logical channel id corresponding to the sending RLC instance
Definition: lte-pdcp-sap.h:47
uint16_t rnti
the C-RNTI identifying the UE
Definition: lte-pdcp-sap.h:46
Parameters for LtePdcpSapUser::ReceivePdcpSdu.
Definition: lte-pdcp-sap.h:78
uint16_t rnti
the C-RNTI identifying the UE
Definition: lte-pdcp-sap.h:80
Parameters for LteRlcSapProvider::TransmitPdcpPdu.
Definition: lte-rlc-sap.h:44
uint8_t lcid
the logical channel id corresponding to the sending RLC instance
Definition: lte-rlc-sap.h:47
uint16_t rnti
the C-RNTI identifying the UE
Definition: lte-rlc-sap.h:46
HandoverPreparationInfo structure.
Definition: lte-rrc-sap.h:896
MeasurementReport structure.
Definition: lte-rrc-sap.h:902
RrcConnectionReconfigurationCompleted structure.
Definition: lte-rrc-sap.h:852
RrcConnectionReconfiguration structure.
Definition: lte-rrc-sap.h:837
RrcConnectionReestablishmentComplete structure.
Definition: lte-rrc-sap.h:873
RrcConnectionReestablishment structure.
Definition: lte-rrc-sap.h:866
RrcConnectionReestablishmentReject structure.
Definition: lte-rrc-sap.h:879
RrcConnectionReestablishmentRequest structure.
Definition: lte-rrc-sap.h:859
RrcConnectionReject structure.
Definition: lte-rrc-sap.h:890
RrcConnectionRelease structure.
Definition: lte-rrc-sap.h:884
RrcConnectionRequest structure.
Definition: lte-rrc-sap.h:693
RrcConnectionSetupCompleted structure.
Definition: lte-rrc-sap.h:706
RrcConnectionSetup structure.
Definition: lte-rrc-sap.h:699
SystemInformation structure.
Definition: lte-rrc-sap.h:609
LtePdcpSapUser * srb1SapUser
SRB1 SAP user.
Definition: lte-rrc-sap.h:1007
SetupParameters structure.
Definition: lte-rrc-sap.h:921
LteRlcSapProvider * srb0SapProvider
SRB0 SAP provider.
Definition: lte-rrc-sap.h:922
LtePdcpSapProvider * srb1SapProvider
SRB1 SAP provider.
Definition: lte-rrc-sap.h:923