A Discrete-Event Network Simulator
API
epc-x2-header.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: Manuel Requena <manuel.requena@cttc.es>
19  */
20 
21 #include "ns3/log.h"
22 #include "ns3/epc-x2-header.h"
23 
24 
25 namespace ns3 {
26 
27 NS_LOG_COMPONENT_DEFINE ("EpcX2Header");
28 
29 NS_OBJECT_ENSURE_REGISTERED (EpcX2Header);
30 
32  : m_messageType (0xfa),
33  m_procedureCode (0xfa),
34  m_lengthOfIes (0xfa),
35  m_numberOfIes (0xfa)
36 {
37 }
38 
40 {
41  m_messageType = 0xfb;
42  m_procedureCode = 0xfb;
43  m_lengthOfIes = 0xfb;
44  m_numberOfIes = 0xfb;
45 }
46 
47 TypeId
49 {
50  static TypeId tid = TypeId ("ns3::EpcX2Header")
51  .SetParent<Header> ()
52  .SetGroupName("Lte")
53  .AddConstructor<EpcX2Header> ()
54  ;
55  return tid;
56 }
57 
58 TypeId
60 {
61  return GetTypeId ();
62 }
63 
64 uint32_t
66 {
67  return 7;
68 }
69 
70 void
72 {
74 
77 
78  i.WriteU8 (0x00); // criticality = REJECT
79  i.WriteU8 (m_lengthOfIes + 3);
80  i.WriteHtonU16 (0);
82 }
83 
84 uint32_t
86 {
88 
89  m_messageType = i.ReadU8 ();
90  m_procedureCode = i.ReadU8 ();
91 
92  i.ReadU8 ();
93  m_lengthOfIes = i.ReadU8 () - 3;
94  i.ReadNtohU16 ();
95  m_numberOfIes = i.ReadU8 ();
96 
97  return GetSerializedSize ();
98 }
99 
100 void
101 EpcX2Header::Print (std::ostream &os) const
102 {
103  os << "MessageType=" << (uint32_t) m_messageType;
104  os << " ProcedureCode=" << (uint32_t) m_procedureCode;
105  os << " LengthOfIEs=" << (uint32_t) m_lengthOfIes;
106  os << " NumberOfIEs=" << (uint32_t) m_numberOfIes;
107 }
108 
109 uint8_t
111 {
112  return m_messageType;
113 }
114 
115 void
116 EpcX2Header::SetMessageType (uint8_t messageType)
117 {
118  m_messageType = messageType;
119 }
120 
121 uint8_t
123 {
124  return m_procedureCode;
125 }
126 
127 void
128 EpcX2Header::SetProcedureCode (uint8_t procedureCode)
129 {
130  m_procedureCode = procedureCode;
131 }
132 
133 
134 void
135 EpcX2Header::SetLengthOfIes (uint32_t lengthOfIes)
136 {
137  m_lengthOfIes = lengthOfIes;
138 }
139 
140 void
141 EpcX2Header::SetNumberOfIes (uint32_t numberOfIes)
142 {
143  m_numberOfIes = numberOfIes;
144 }
145 
147 
149 
151  : m_numberOfIes (1 + 1 + 1 + 1),
152  m_headerLength (6 + 5 + 12 + (3 + 4 + 8 + 8 + 4)),
153  m_oldEnbUeX2apId (0xfffa),
154  m_cause (0xfffa),
155  m_targetCellId (0xfffa),
156  m_mmeUeS1apId (0xfffffffa)
157 {
158  m_erabsToBeSetupList.clear ();
159 }
160 
162 {
163  m_numberOfIes = 0;
164  m_headerLength = 0;
165  m_oldEnbUeX2apId = 0xfffb;
166  m_cause = 0xfffb;
167  m_targetCellId = 0xfffb;
168  m_mmeUeS1apId = 0xfffffffb;
169  m_erabsToBeSetupList.clear ();
170 }
171 
172 TypeId
174 {
175  static TypeId tid = TypeId ("ns3::EpcX2HandoverRequestHeader")
176  .SetParent<Header> ()
177  .SetGroupName("Lte")
178  .AddConstructor<EpcX2HandoverRequestHeader> ()
179  ;
180  return tid;
181 }
182 
183 TypeId
185 {
186  return GetTypeId ();
187 }
188 
189 uint32_t
191 {
192  return m_headerLength;
193 }
194 
195 void
197 {
199 
200  i.WriteHtonU16 (10); // id = OLD_ENB_UE_X2AP_ID
201  i.WriteU8 (0); // criticality = REJECT
202  i.WriteU8 (2); // length of OLD_ENB_UE_X2AP_ID
204 
205  i.WriteHtonU16 (5); // id = CAUSE
206  i.WriteU8 (1 << 6); // criticality = IGNORE
207  i.WriteU8 (1); // length of CAUSE
208  i.WriteU8 (m_cause);
209 
210  i.WriteHtonU16 (11); // id = TARGET_CELLID
211  i.WriteU8 (0); // criticality = REJECT
212  i.WriteU8 (8); // length of TARGET_CELLID
213  i.WriteHtonU32 (0x123456); // fake PLMN
214  i.WriteHtonU32 (m_targetCellId << 4);
215 
216  i.WriteHtonU16 (14); // id = UE_CONTEXT_INFORMATION
217  i.WriteU8 (0); // criticality = REJECT
218 
222 
223  std::vector <EpcX2Sap::ErabToBeSetupItem>::size_type sz = m_erabsToBeSetupList.size ();
224  i.WriteHtonU32 (sz); // number of bearers
225  for (int j = 0; j < (int) sz; j++)
226  {
227  i.WriteHtonU16 (m_erabsToBeSetupList [j].erabId);
228  i.WriteHtonU16 (m_erabsToBeSetupList [j].erabLevelQosParameters.qci);
229  i.WriteHtonU64 (m_erabsToBeSetupList [j].erabLevelQosParameters.gbrQosInfo.gbrDl);
230  i.WriteHtonU64 (m_erabsToBeSetupList [j].erabLevelQosParameters.gbrQosInfo.gbrUl);
231  i.WriteHtonU64 (m_erabsToBeSetupList [j].erabLevelQosParameters.gbrQosInfo.mbrDl);
232  i.WriteHtonU64 (m_erabsToBeSetupList [j].erabLevelQosParameters.gbrQosInfo.mbrUl);
233  i.WriteU8 (m_erabsToBeSetupList [j].erabLevelQosParameters.arp.priorityLevel);
234  i.WriteU8 (m_erabsToBeSetupList [j].erabLevelQosParameters.arp.preemptionCapability);
235  i.WriteU8 (m_erabsToBeSetupList [j].erabLevelQosParameters.arp.preemptionVulnerability);
236  i.WriteU8 (m_erabsToBeSetupList [j].dlForwarding);
237  i.WriteHtonU32 (m_erabsToBeSetupList [j].transportLayerAddress.Get ());
238  i.WriteHtonU32 (m_erabsToBeSetupList [j].gtpTeid);
239  }
240 
241 }
242 
243 uint32_t
245 {
247 
248  m_headerLength = 0;
249  m_numberOfIes = 0;
250 
251  i.ReadNtohU16 ();
252  i.ReadU8 ();
253  i.ReadU8 ();
255  m_headerLength += 6;
256  m_numberOfIes++;
257 
258  i.ReadNtohU16 ();
259  i.ReadU8 ();
260  i.ReadU8 ();
261  m_cause = i.ReadU8 ();
262  m_headerLength += 5;
263  m_numberOfIes++;
264 
265  i.ReadNtohU16 ();
266  i.ReadU8 ();
267  i.ReadU8 ();
268  i.ReadNtohU32 ();
269  m_targetCellId = i.ReadNtohU32 () >> 4;
270  m_headerLength += 12;
271  m_numberOfIes++;
272 
273  i.ReadNtohU16 ();
274  i.ReadU8 ();
275  m_mmeUeS1apId = i.ReadNtohU32 ();
278  int sz = i.ReadNtohU32 ();
279  m_headerLength += 27;
280  m_numberOfIes++;
281 
282  for (int j = 0; j < sz; j++)
283  {
285 
286  erabItem.erabId = i.ReadNtohU16 ();
287 
296 
297  erabItem.dlForwarding = i.ReadU8 ();
299  erabItem.gtpTeid = i.ReadNtohU32 ();
300 
301  m_erabsToBeSetupList.push_back (erabItem);
302  m_headerLength += 48;
303  }
304 
305  return GetSerializedSize ();
306 }
307 
308 void
309 EpcX2HandoverRequestHeader::Print (std::ostream &os) const
310 {
311  os << "OldEnbUeX2apId = " << m_oldEnbUeX2apId;
312  os << " Cause = " << m_cause;
313  os << " TargetCellId = " << m_targetCellId;
314  os << " MmeUeS1apId = " << m_mmeUeS1apId;
315  os << " UeAggrMaxBitRateDownlink = " << m_ueAggregateMaxBitRateDownlink;
316  os << " UeAggrMaxBitRateUplink = " << m_ueAggregateMaxBitRateUplink;
317  os << " NumOfBearers = " << m_erabsToBeSetupList.size ();
318 
319  std::vector <EpcX2Sap::ErabToBeSetupItem>::size_type sz = m_erabsToBeSetupList.size ();
320  if (sz > 0)
321  {
322  os << " [";
323  }
324  for (int j = 0; j < (int) sz; j++)
325  {
326  os << m_erabsToBeSetupList[j].erabId;
327  if (j < (int) sz - 1)
328  {
329  os << ", ";
330  }
331  else
332  {
333  os << "]";
334  }
335  }
336 }
337 
338 uint16_t
340 {
341  return m_oldEnbUeX2apId;
342 }
343 
344 void
346 {
347  m_oldEnbUeX2apId = x2apId;
348 }
349 
350 uint16_t
352 {
353  return m_cause;
354 }
355 
356 void
358 {
359  m_cause = cause;
360 }
361 
362 uint16_t
364 {
365  return m_targetCellId;
366 }
367 
368 void
370 {
371  m_targetCellId = targetCellId;
372 }
373 
374 uint32_t
376 {
377  return m_mmeUeS1apId;
378 }
379 
380 void
382 {
383  m_mmeUeS1apId = mmeUeS1apId;
384 }
385 
386 std::vector <EpcX2Sap::ErabToBeSetupItem>
388 {
389  return m_erabsToBeSetupList;
390 }
391 
392 void
393 EpcX2HandoverRequestHeader::SetBearers (std::vector <EpcX2Sap::ErabToBeSetupItem> bearers)
394 {
395  m_headerLength += 48 * bearers.size ();
396  m_erabsToBeSetupList = bearers;
397 }
398 
399 uint64_t
401 {
403 }
404 
405 void
407 {
409 }
410 
411 uint64_t
413 {
415 }
416 
417 void
419 {
421 }
422 
423 uint32_t
425 {
426  return m_headerLength;
427 }
428 
429 uint32_t
431 {
432  return m_numberOfIes;
433 }
434 
436 
438 
440  : m_numberOfIes (1 + 1 + 1 + 1),
441  m_headerLength (2 + 2 + 4 + 4),
442  m_oldEnbUeX2apId (0xfffa),
443  m_newEnbUeX2apId (0xfffa)
444 {
445 }
446 
448 {
449  m_numberOfIes = 0;
450  m_headerLength = 0;
451  m_oldEnbUeX2apId = 0xfffb;
452  m_newEnbUeX2apId = 0xfffb;
453  m_erabsAdmittedList.clear ();
454  m_erabsNotAdmittedList.clear ();
455 }
456 
457 TypeId
459 {
460  static TypeId tid = TypeId ("ns3::EpcX2HandoverRequestAckHeader")
461  .SetParent<Header> ()
462  .SetGroupName("Lte")
463  .AddConstructor<EpcX2HandoverRequestAckHeader> ()
464  ;
465  return tid;
466 }
467 
468 TypeId
470 {
471  return GetTypeId ();
472 }
473 
474 uint32_t
476 {
477  return m_headerLength;
478 }
479 
480 void
482 {
484 
487 
488  std::vector <EpcX2Sap::ErabAdmittedItem>::size_type sz = m_erabsAdmittedList.size ();
489  i.WriteHtonU32 (sz);
490  for (int j = 0; j < (int) sz; j++)
491  {
492  i.WriteHtonU16 (m_erabsAdmittedList [j].erabId);
493  i.WriteHtonU32 (m_erabsAdmittedList [j].ulGtpTeid);
494  i.WriteHtonU32 (m_erabsAdmittedList [j].dlGtpTeid);
495  }
496 
497  std::vector <EpcX2Sap::ErabNotAdmittedItem>::size_type sz2 = m_erabsNotAdmittedList.size ();
498  i.WriteHtonU32 (sz2);
499  for (int j = 0; j < (int) sz2; j++)
500  {
501  i.WriteHtonU16 (m_erabsNotAdmittedList [j].erabId);
502  i.WriteHtonU16 (m_erabsNotAdmittedList [j].cause);
503  }
504 }
505 
506 uint32_t
508 {
510 
511  m_headerLength = 0;
512  m_numberOfIes = 0;
513 
516  m_headerLength += 4;
517  m_numberOfIes += 2;
518 
519  int sz = i.ReadNtohU32 ();
520  m_headerLength += 4;
521  m_numberOfIes++;
522 
523  for (int j = 0; j < sz; j++)
524  {
526 
527  erabItem.erabId = i.ReadNtohU16 ();
528  erabItem.ulGtpTeid = i.ReadNtohU32 ();
529  erabItem.dlGtpTeid = i.ReadNtohU32 ();
530 
531  m_erabsAdmittedList.push_back (erabItem);
532  m_headerLength += 10;
533  }
534 
535  sz = i.ReadNtohU32 ();
536  m_headerLength += 4;
537  m_numberOfIes++;
538 
539  for (int j = 0; j < sz; j++)
540  {
542 
543  erabItem.erabId = i.ReadNtohU16 ();
544  erabItem.cause = i.ReadNtohU16 ();
545 
546  m_erabsNotAdmittedList.push_back (erabItem);
547  m_headerLength += 4;
548  }
549 
550  return GetSerializedSize ();
551 }
552 
553 void
554 EpcX2HandoverRequestAckHeader::Print (std::ostream &os) const
555 {
556  os << "OldEnbUeX2apId=" << m_oldEnbUeX2apId;
557  os << " NewEnbUeX2apId=" << m_newEnbUeX2apId;
558 
559  os << " AdmittedBearers=" << m_erabsAdmittedList.size ();
560  std::vector <EpcX2Sap::ErabAdmittedItem>::size_type sz = m_erabsAdmittedList.size ();
561  if (sz > 0)
562  {
563  os << " [";
564  }
565  for (int j = 0; j < (int) sz; j++)
566  {
567  os << m_erabsAdmittedList[j].erabId;
568  if (j < (int) sz - 1)
569  {
570  os << ", ";
571  }
572  else
573  {
574  os << "]";
575  }
576  }
577 
578  os << " NotAdmittedBearers=" << m_erabsNotAdmittedList.size ();
579  std::vector <EpcX2Sap::ErabNotAdmittedItem>::size_type sz2 = m_erabsNotAdmittedList.size ();
580  if (sz2 > 0)
581  {
582  os << " [";
583  }
584  for (int j = 0; j < (int) sz2; j++)
585  {
586  os << m_erabsNotAdmittedList[j].erabId;
587  if (j < (int) sz2 - 1)
588  {
589  os << ", ";
590  }
591  else
592  {
593  os << "]";
594  }
595  }
596 
597 }
598 
599 uint16_t
601 {
602  return m_oldEnbUeX2apId;
603 }
604 
605 void
607 {
608  m_oldEnbUeX2apId = x2apId;
609 }
610 
611 uint16_t
613 {
614  return m_newEnbUeX2apId;
615 }
616 
617 void
619 {
620  m_newEnbUeX2apId = x2apId;
621 }
622 
623 std::vector <EpcX2Sap::ErabAdmittedItem>
625 {
626  return m_erabsAdmittedList;
627 }
628 
629 void
630 EpcX2HandoverRequestAckHeader::SetAdmittedBearers (std::vector <EpcX2Sap::ErabAdmittedItem> bearers)
631 {
632  m_headerLength += 10 * bearers.size ();
633  m_erabsAdmittedList = bearers;
634 }
635 
636 std::vector <EpcX2Sap::ErabNotAdmittedItem>
638 {
639  return m_erabsNotAdmittedList;
640 }
641 
642 void
643 EpcX2HandoverRequestAckHeader::SetNotAdmittedBearers (std::vector <EpcX2Sap::ErabNotAdmittedItem> bearers)
644 {
645  m_headerLength += 4 * bearers.size ();
646  m_erabsNotAdmittedList = bearers;
647 }
648 
649 uint32_t
651 {
652  return m_headerLength;
653 }
654 
655 uint32_t
657 {
658  return m_numberOfIes;
659 }
660 
662 
664 
666  : m_numberOfIes (1 + 1 + 1),
667  m_headerLength (2 + 2 + 2),
668  m_oldEnbUeX2apId (0xfffa),
669  m_cause (0xfffa),
670  m_criticalityDiagnostics (0xfffa)
671 {
672 }
673 
675 {
676  m_numberOfIes = 0;
677  m_headerLength = 0;
678  m_oldEnbUeX2apId = 0xfffb;
679  m_cause = 0xfffb;
680  m_criticalityDiagnostics = 0xfffb;
681 }
682 
683 TypeId
685 {
686  static TypeId tid = TypeId ("ns3::EpcX2HandoverPreparationFailureHeader")
687  .SetParent<Header> ()
688  .SetGroupName("Lte")
689  .AddConstructor<EpcX2HandoverPreparationFailureHeader> ()
690  ;
691  return tid;
692 }
693 
694 TypeId
696 {
697  return GetTypeId ();
698 }
699 
700 uint32_t
702 {
703  return m_headerLength;
704 }
705 
706 void
708 {
710 
712  i.WriteHtonU16 (m_cause);
714 }
715 
716 uint32_t
718 {
720 
722  m_cause = i.ReadNtohU16 ();
724 
725  m_headerLength = 6;
726  m_numberOfIes = 3;
727 
728  return GetSerializedSize ();
729 }
730 
731 void
733 {
734  os << "OldEnbUeX2apId = " << m_oldEnbUeX2apId;
735  os << " Cause = " << m_cause;
736  os << " CriticalityDiagnostics = " << m_criticalityDiagnostics;
737 }
738 
739 uint16_t
741 {
742  return m_oldEnbUeX2apId;
743 }
744 
745 void
747 {
748  m_oldEnbUeX2apId = x2apId;
749 }
750 
751 uint16_t
753 {
754  return m_cause;
755 }
756 
757 void
759 {
760  m_cause = cause;
761 }
762 
763 uint16_t
765 {
767 }
768 
769 void
771 {
772  m_criticalityDiagnostics = criticalityDiagnostics;
773 }
774 
775 uint32_t
777 {
778  return m_headerLength;
779 }
780 
781 uint32_t
783 {
784  return m_numberOfIes;
785 }
786 
788 
790 
792  : m_numberOfIes (3),
793  m_headerLength (6),
794  m_oldEnbUeX2apId (0xfffa),
795  m_newEnbUeX2apId (0xfffa)
796 {
798 }
799 
801 {
802  m_numberOfIes = 0;
803  m_headerLength = 0;
804  m_oldEnbUeX2apId = 0xfffb;
805  m_newEnbUeX2apId = 0xfffb;
807 }
808 
809 TypeId
811 {
812  static TypeId tid = TypeId ("ns3::EpcX2SnStatusTransferHeader")
813  .SetParent<Header> ()
814  .SetGroupName("Lte")
815  .AddConstructor<EpcX2SnStatusTransferHeader> ()
816  ;
817  return tid;
818 }
819 
820 TypeId
822 {
823  return GetTypeId ();
824 }
825 
826 uint32_t
828 {
829  return m_headerLength;
830 }
831 
832 void
834 {
836 
839 
840  std::vector <EpcX2Sap::ErabsSubjectToStatusTransferItem>::size_type sz = m_erabsSubjectToStatusTransferList.size ();
841  i.WriteHtonU16 (sz); // number of ErabsSubjectToStatusTransferItems
842 
843  for (int j = 0; j < (int) sz; j++)
844  {
846 
847  i.WriteHtonU16 (item.erabId);
848 
849  uint16_t bitsetSize = EpcX2Sap::m_maxPdcpSn / 64;
850  for (int k = 0; k < bitsetSize; k++)
851  {
852  uint64_t statusValue = 0;
853  for (int m = 0; m < 64; m++)
854  {
855  statusValue |= item.receiveStatusOfUlPdcpSdus[64 * k + m] << m;
856  }
857  i.WriteHtonU64 (statusValue);
858  }
859 
860  i.WriteHtonU16 (item.ulPdcpSn);
861  i.WriteHtonU32 (item.ulHfn);
862  i.WriteHtonU16 (item.dlPdcpSn);
863  i.WriteHtonU32 (item.dlHfn);
864  }
865 }
866 
867 uint32_t
869 {
871 
874  int sz = i.ReadNtohU16 ();
875 
876  m_numberOfIes = 3;
877  m_headerLength = 6 + sz * (14 + (EpcX2Sap::m_maxPdcpSn / 64));
878 
879  for (int j = 0; j < sz; j++)
880  {
882  ErabItem.erabId = i.ReadNtohU16 ();
883 
884  uint16_t bitsetSize = EpcX2Sap::m_maxPdcpSn / 64;
885  for (int k = 0; k < bitsetSize; k++)
886  {
887  uint64_t statusValue = i.ReadNtohU64 ();
888  for (int m = 0; m < 64; m++)
889  {
890  ErabItem.receiveStatusOfUlPdcpSdus[64 * k + m] = (statusValue >> m) & 1;
891  }
892  }
893 
894  ErabItem.ulPdcpSn = i.ReadNtohU16 ();
895  ErabItem.ulHfn = i.ReadNtohU32 ();
896  ErabItem.dlPdcpSn = i.ReadNtohU16 ();
897  ErabItem.dlHfn = i.ReadNtohU32 ();
898 
899  m_erabsSubjectToStatusTransferList.push_back (ErabItem);
900  }
901 
902  return GetSerializedSize ();
903 }
904 
905 void
906 EpcX2SnStatusTransferHeader::Print (std::ostream &os) const
907 {
908  os << "OldEnbUeX2apId = " << m_oldEnbUeX2apId;
909  os << " NewEnbUeX2apId = " << m_newEnbUeX2apId;
910  os << " ErabsSubjectToStatusTransferList size = " << m_erabsSubjectToStatusTransferList.size ();
911 
912  std::vector <EpcX2Sap::ErabsSubjectToStatusTransferItem>::size_type sz = m_erabsSubjectToStatusTransferList.size ();
913  if (sz > 0)
914  {
915  os << " [";
916  }
917  for (int j = 0; j < (int) sz; j++)
918  {
919  os << m_erabsSubjectToStatusTransferList[j].erabId;
920  if (j < (int) sz - 1)
921  {
922  os << ", ";
923  }
924  else
925  {
926  os << "]";
927  }
928  }
929 }
930 
931 uint16_t
933 {
934  return m_oldEnbUeX2apId;
935 }
936 
937 void
939 {
940  m_oldEnbUeX2apId = x2apId;
941 }
942 
943 uint16_t
945 {
946  return m_newEnbUeX2apId;
947 }
948 
949 void
951 {
952  m_newEnbUeX2apId = x2apId;
953 }
954 
955 std::vector <EpcX2Sap::ErabsSubjectToStatusTransferItem>
957 {
959 }
960 
961 void
962 EpcX2SnStatusTransferHeader::SetErabsSubjectToStatusTransferList (std::vector <EpcX2Sap::ErabsSubjectToStatusTransferItem> erabs)
963 {
964  m_headerLength += erabs.size () * (14 + (EpcX2Sap::m_maxPdcpSn / 8));
966 }
967 
968 uint32_t
970 {
971  return m_headerLength;
972 }
973 
974 uint32_t
976 {
977  return m_numberOfIes;
978 }
979 
981 
983 
985  : m_numberOfIes (1 + 1),
986  m_headerLength (2 + 2),
987  m_oldEnbUeX2apId (0xfffa),
988  m_newEnbUeX2apId (0xfffa)
989 {
990 }
991 
993 {
994  m_numberOfIes = 0;
995  m_headerLength = 0;
996  m_oldEnbUeX2apId = 0xfffb;
997  m_newEnbUeX2apId = 0xfffb;
998 }
999 
1000 TypeId
1002 {
1003  static TypeId tid = TypeId ("ns3::EpcX2UeContextReleaseHeader")
1004  .SetParent<Header> ()
1005  .SetGroupName("Lte")
1006  .AddConstructor<EpcX2UeContextReleaseHeader> ()
1007  ;
1008  return tid;
1009 }
1010 
1011 TypeId
1013 {
1014  return GetTypeId ();
1015 }
1016 
1017 uint32_t
1019 {
1020  return m_headerLength;
1021 }
1022 
1023 void
1025 {
1026  Buffer::Iterator i = start;
1027 
1030 }
1031 
1032 uint32_t
1034 {
1035  Buffer::Iterator i = start;
1036 
1039  m_numberOfIes = 2;
1040  m_headerLength = 4;
1041 
1042  return GetSerializedSize ();
1043 }
1044 
1045 void
1046 EpcX2UeContextReleaseHeader::Print (std::ostream &os) const
1047 {
1048  os << "OldEnbUeX2apId=" << m_oldEnbUeX2apId;
1049  os << " NewEnbUeX2apId=" << m_newEnbUeX2apId;
1050 }
1051 
1052 uint16_t
1054 {
1055  return m_oldEnbUeX2apId;
1056 }
1057 
1058 void
1060 {
1061  m_oldEnbUeX2apId = x2apId;
1062 }
1063 
1064 uint16_t
1066 {
1067  return m_newEnbUeX2apId;
1068 }
1069 
1070 void
1072 {
1073  m_newEnbUeX2apId = x2apId;
1074 }
1075 
1076 uint32_t
1078 {
1079  return m_headerLength;
1080 }
1081 
1082 uint32_t
1084 {
1085  return m_numberOfIes;
1086 }
1087 
1089 
1091 
1093  : m_numberOfIes (1),
1094  m_headerLength (6)
1095 {
1096  m_cellInformationList.clear ();
1097 }
1098 
1100 {
1101  m_numberOfIes = 0;
1102  m_headerLength = 0;
1103  m_cellInformationList.clear ();
1104 }
1105 
1106 TypeId
1108 {
1109  static TypeId tid = TypeId ("ns3::EpcX2LoadInformationHeader")
1110  .SetParent<Header> ()
1111  .SetGroupName("Lte")
1112  .AddConstructor<EpcX2LoadInformationHeader> ()
1113  ;
1114  return tid;
1115 }
1116 
1117 TypeId
1119 {
1120  return GetTypeId ();
1121 }
1122 
1123 uint32_t
1125 {
1126  return m_headerLength;
1127 }
1128 
1129 void
1131 {
1132  Buffer::Iterator i = start;
1133 
1134  i.WriteHtonU16 (6); // id = CELL_INFORMATION
1135  i.WriteU8 (1 << 6); // criticality = IGNORE
1136  i.WriteU8 (4); // length of CELL_INFORMATION_ID
1137 
1138  std::vector <EpcX2Sap::CellInformationItem>::size_type sz = m_cellInformationList.size ();
1139  i.WriteHtonU16 (sz); // number of cellInformationItems
1140 
1141  for (int j = 0; j < (int) sz; j++)
1142  {
1143  i.WriteHtonU16 (m_cellInformationList [j].sourceCellId);
1144 
1145  std::vector <EpcX2Sap::UlInterferenceOverloadIndicationItem>::size_type sz2;
1146  sz2 = m_cellInformationList [j].ulInterferenceOverloadIndicationList.size ();
1147  i.WriteHtonU16 (sz2); // number of UlInterferenceOverloadIndicationItem
1148 
1149  for (int k = 0; k < (int) sz2; k++)
1150  {
1151  i.WriteU8 (m_cellInformationList [j].ulInterferenceOverloadIndicationList [k]);
1152  }
1153 
1154  std::vector <EpcX2Sap::UlHighInterferenceInformationItem>::size_type sz3;
1155  sz3 = m_cellInformationList [j].ulHighInterferenceInformationList.size ();
1156  i.WriteHtonU16 (sz3); // number of UlHighInterferenceInformationItem
1157 
1158  for (int k = 0; k < (int) sz3; k++)
1159  {
1160  i.WriteHtonU16 (m_cellInformationList [j].ulHighInterferenceInformationList [k].targetCellId);
1161 
1162  std::vector <bool>::size_type sz4;
1163  sz4 = m_cellInformationList [j].ulHighInterferenceInformationList [k].ulHighInterferenceIndicationList.size ();
1164  i.WriteHtonU16 (sz4);
1165 
1166  for (int m = 0; m < (int) sz4; m++)
1167  {
1168  i.WriteU8 (m_cellInformationList [j].ulHighInterferenceInformationList [k].ulHighInterferenceIndicationList [m]);
1169  }
1170  }
1171 
1172  std::vector <bool>::size_type sz5;
1173  sz5 = m_cellInformationList [j].relativeNarrowbandTxBand.rntpPerPrbList.size ();
1174  i.WriteHtonU16 (sz5);
1175 
1176  for (int k = 0; k < (int) sz5; k++)
1177  {
1178  i.WriteU8 (m_cellInformationList [j].relativeNarrowbandTxBand.rntpPerPrbList [k]);
1179  }
1180 
1181  i.WriteHtonU16 (m_cellInformationList [j].relativeNarrowbandTxBand.rntpThreshold);
1182  i.WriteHtonU16 (m_cellInformationList [j].relativeNarrowbandTxBand.antennaPorts);
1183  i.WriteHtonU16 (m_cellInformationList [j].relativeNarrowbandTxBand.pB);
1184  i.WriteHtonU16 (m_cellInformationList [j].relativeNarrowbandTxBand.pdcchInterferenceImpact);
1185  }
1186 }
1187 
1188 uint32_t
1190 {
1191  Buffer::Iterator i = start;
1192 
1193  m_headerLength = 0;
1194  m_numberOfIes = 0;
1195 
1196  i.ReadNtohU16 ();
1197  i.ReadU8 ();
1198  i.ReadU8 ();
1199  int sz = i.ReadNtohU16 ();
1200  m_headerLength += 6;
1201  m_numberOfIes++;
1202 
1203  for (int j = 0; j < sz; j++)
1204  {
1205  EpcX2Sap::CellInformationItem cellInfoItem;
1206  cellInfoItem.sourceCellId = i.ReadNtohU16 ();
1207  m_headerLength += 2;
1208 
1209  int sz2 = i.ReadNtohU16 ();
1210  m_headerLength += 2;
1211  for (int k = 0; k < sz2; k++)
1212  {
1214  cellInfoItem.ulInterferenceOverloadIndicationList.push_back (item);
1215  }
1216  m_headerLength += sz2;
1217 
1218  int sz3 = i.ReadNtohU16 ();
1219  m_headerLength += 2;
1220  for (int k = 0; k < sz3; k++)
1221  {
1223  item.targetCellId = i.ReadNtohU16 ();
1224  m_headerLength += 2;
1225 
1226  int sz4 = i.ReadNtohU16 ();
1227  m_headerLength += 2;
1228  for (int m = 0; m < sz4; m++)
1229  {
1230  item.ulHighInterferenceIndicationList.push_back (i.ReadU8 ());
1231  }
1232  m_headerLength += sz4;
1233 
1234  cellInfoItem.ulHighInterferenceInformationList.push_back (item);
1235  }
1236 
1237  int sz5 = i.ReadNtohU16 ();
1238  m_headerLength += 2;
1239  for (int k = 0; k < sz5; k++)
1240  {
1241  cellInfoItem.relativeNarrowbandTxBand.rntpPerPrbList.push_back (i.ReadU8 ());
1242  }
1243  m_headerLength += sz5;
1244 
1247  cellInfoItem.relativeNarrowbandTxBand.pB = i.ReadNtohU16 ();
1249  m_headerLength += 8;
1250 
1251  m_cellInformationList.push_back (cellInfoItem);
1252  }
1253 
1254  return GetSerializedSize ();
1255 }
1256 
1257 void
1258 EpcX2LoadInformationHeader::Print (std::ostream &os) const
1259 {
1260  os << "NumOfCellInformationItems=" << m_cellInformationList.size ();
1261 }
1262 
1263 std::vector <EpcX2Sap::CellInformationItem>
1265 {
1266  return m_cellInformationList;
1267 }
1268 
1269 void
1270 EpcX2LoadInformationHeader::SetCellInformationList (std::vector <EpcX2Sap::CellInformationItem> cellInformationList)
1271 {
1272  m_cellInformationList = cellInformationList;
1273  m_headerLength += 2;
1274 
1275  std::vector <EpcX2Sap::CellInformationItem>::size_type sz = m_cellInformationList.size ();
1276  for (int j = 0; j < (int) sz; j++)
1277  {
1278  m_headerLength += 2;
1279 
1280  std::vector <EpcX2Sap::UlInterferenceOverloadIndicationItem>::size_type sz2;
1281  sz2 = m_cellInformationList [j].ulInterferenceOverloadIndicationList.size ();
1282  m_headerLength += 2 + sz2;
1283 
1284  std::vector <EpcX2Sap::UlHighInterferenceInformationItem>::size_type sz3;
1285  sz3 = m_cellInformationList [j].ulHighInterferenceInformationList.size ();
1286  m_headerLength += 2;
1287 
1288  for (int k = 0; k < (int) sz3; k++)
1289  {
1290  std::vector <bool>::size_type sz4;
1291  sz4 = m_cellInformationList [j].ulHighInterferenceInformationList [k].ulHighInterferenceIndicationList.size ();
1292  m_headerLength += 2 + 2 + sz4;
1293  }
1294 
1295  std::vector <bool>::size_type sz5;
1296  sz5 = m_cellInformationList [j].relativeNarrowbandTxBand.rntpPerPrbList.size ();
1297  m_headerLength += 2 + sz5 + 8;
1298  }
1299 }
1300 
1301 uint32_t
1303 {
1304  return m_headerLength;
1305 }
1306 
1307 uint32_t
1309 {
1310  return m_numberOfIes;
1311 }
1312 
1314 
1316 
1318  : m_numberOfIes (3),
1319  m_headerLength (6),
1320  m_enb1MeasurementId (0xfffa),
1321  m_enb2MeasurementId (0xfffa)
1322 {
1323  m_cellMeasurementResultList.clear ();
1324 }
1325 
1327 {
1328  m_numberOfIes = 0;
1329  m_headerLength = 0;
1330  m_enb1MeasurementId = 0xfffb;
1331  m_enb2MeasurementId = 0xfffb;
1332  m_cellMeasurementResultList.clear ();
1333 }
1334 
1335 TypeId
1337 {
1338  static TypeId tid = TypeId ("ns3::EpcX2ResourceStatusUpdateHeader")
1339  .SetParent<Header> ()
1340  .SetGroupName("Lte")
1341  .AddConstructor<EpcX2ResourceStatusUpdateHeader> ()
1342  ;
1343  return tid;
1344 }
1345 
1346 TypeId
1348 {
1349  return GetTypeId ();
1350 }
1351 
1352 uint32_t
1354 {
1355  return m_headerLength;
1356 }
1357 
1358 void
1360 {
1361  Buffer::Iterator i = start;
1362 
1365 
1366  std::vector <EpcX2Sap::CellMeasurementResultItem>::size_type sz = m_cellMeasurementResultList.size ();
1367  i.WriteHtonU16 (sz); // number of CellMeasurementResultItem
1368 
1369  for (int j = 0; j < (int) sz; j++)
1370  {
1372 
1373  i.WriteHtonU16 (item.sourceCellId);
1376  i.WriteU8 (item.dlS1TnlLoadIndicator);
1377  i.WriteU8 (item.ulS1TnlLoadIndicator);
1378 
1379  i.WriteHtonU16 (item.dlGbrPrbUsage);
1380  i.WriteHtonU16 (item.ulGbrPrbUsage);
1381  i.WriteHtonU16 (item.dlNonGbrPrbUsage);
1382  i.WriteHtonU16 (item.ulNonGbrPrbUsage);
1383  i.WriteHtonU16 (item.dlTotalPrbUsage);
1384  i.WriteHtonU16 (item.ulTotalPrbUsage);
1385 
1390  }
1391 }
1392 
1393 uint32_t
1395 {
1396  Buffer::Iterator i = start;
1397 
1400 
1401  int sz = i.ReadNtohU16 ();
1402  for (int j = 0; j < sz; j++)
1403  {
1405 
1406  item.sourceCellId = i.ReadNtohU16 ();
1411 
1412  item.dlGbrPrbUsage = i.ReadNtohU16 ();
1413  item.ulGbrPrbUsage = i.ReadNtohU16 ();
1414  item.dlNonGbrPrbUsage = i.ReadNtohU16 ();
1415  item.ulNonGbrPrbUsage = i.ReadNtohU16 ();
1416  item.dlTotalPrbUsage = i.ReadNtohU16 ();
1417  item.ulTotalPrbUsage = i.ReadNtohU16 ();
1418 
1423 
1424  m_cellMeasurementResultList.push_back (item);
1425  }
1426 
1427  m_headerLength = 6 + sz * 26;
1428  m_numberOfIes = 3;
1429 
1430  return GetSerializedSize ();
1431 }
1432 
1433 void
1435 {
1436  os << "Enb1MeasurementId = " << m_enb1MeasurementId
1437  << " Enb2MeasurementId = " << m_enb2MeasurementId
1438  << " NumOfCellMeasurementResultItems = " << m_cellMeasurementResultList.size ();
1439 }
1440 
1441 uint16_t
1443 {
1444  return m_enb1MeasurementId;
1445 }
1446 
1447 void
1449 {
1450  m_enb1MeasurementId = enb1MeasurementId;
1451 }
1452 
1453 uint16_t
1455 {
1456  return m_enb2MeasurementId;
1457 }
1458 
1459 void
1461 {
1462  m_enb2MeasurementId = enb2MeasurementId;
1463 }
1464 
1465 std::vector <EpcX2Sap::CellMeasurementResultItem>
1467 {
1469 }
1470 
1471 void
1472 EpcX2ResourceStatusUpdateHeader::SetCellMeasurementResultList (std::vector <EpcX2Sap::CellMeasurementResultItem> cellMeasurementResultList)
1473 {
1474  m_cellMeasurementResultList = cellMeasurementResultList;
1475 
1476  std::vector <EpcX2Sap::CellMeasurementResultItem>::size_type sz = m_cellMeasurementResultList.size ();
1477  m_headerLength += sz * 26;
1478 }
1479 
1480 uint32_t
1482 {
1483  return m_headerLength;
1484 }
1485 
1486 uint32_t
1488 {
1489  return m_numberOfIes;
1490 }
1491 
1492 } // namespace ns3
iterator in a Buffer instance
Definition: buffer.h:99
uint16_t ReadNtohU16(void)
Definition: buffer.h:946
void WriteHtonU64(uint64_t data)
Definition: buffer.cc:941
uint64_t ReadNtohU64(void)
Definition: buffer.cc:1044
void WriteU8(uint8_t data)
Definition: buffer.h:869
uint8_t ReadU8(void)
Definition: buffer.h:1021
void WriteHtonU16(uint16_t data)
Definition: buffer.h:905
void WriteHtonU32(uint32_t data)
Definition: buffer.h:924
uint32_t ReadNtohU32(void)
Definition: buffer.h:970
EpcX2HandoverPreparationFailureHeader.
virtual uint32_t GetSerializedSize(void) const
virtual void Serialize(Buffer::Iterator start) const
void SetCriticalityDiagnostics(uint16_t criticalityDiagnostics)
Set criticality diagnostics function.
void SetCause(uint16_t cause)
Set cause function.
uint16_t GetOldEnbUeX2apId() const
Get old ENB UE X2 AP ID function.
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
uint16_t GetCause() const
Get cause function.
static TypeId GetTypeId(void)
Get the type ID.
uint16_t m_criticalityDiagnostics
criticality diagnostics
uint32_t GetLengthOfIes() const
Get length of IEs function.
uint16_t GetCriticalityDiagnostics() const
Get criticality diagnostics function.
uint16_t m_oldEnbUeX2apId
old ENB UE X2 AP ID
void SetOldEnbUeX2apId(uint16_t x2apId)
Set old ENB UE X2 AP ID function.
uint32_t GetNumberOfIes() const
Get number of IEs function.
virtual void Print(std::ostream &os) const
EpcX2HandoverRequestAckHeader.
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
uint16_t GetNewEnbUeX2apId() const
Get new ENB UE X2 AP ID function.
uint32_t m_headerLength
header length
uint32_t GetLengthOfIes() const
Get length of IEs function.
std::vector< EpcX2Sap::ErabNotAdmittedItem > GetNotAdmittedBearers() const
Get not admitted bearers function.
virtual void Serialize(Buffer::Iterator start) const
uint16_t m_oldEnbUeX2apId
old ENB UE X2 AP ID
uint16_t m_newEnbUeX2apId
new ENB UE X2 AP ID
uint32_t m_numberOfIes
number of IEs
virtual void Print(std::ostream &os) const
uint16_t GetOldEnbUeX2apId() const
Get old ENB UE X2 AP ID function.
std::vector< EpcX2Sap::ErabAdmittedItem > GetAdmittedBearers() const
Get admittied bearers function.
void SetNotAdmittedBearers(std::vector< EpcX2Sap::ErabNotAdmittedItem > bearers)
Set not admitted bearers function.
void SetNewEnbUeX2apId(uint16_t x2apId)
Set new ENB UE X2 AP ID function.
std::vector< EpcX2Sap::ErabAdmittedItem > m_erabsAdmittedList
ERABs admitted list.
void SetOldEnbUeX2apId(uint16_t x2apId)
Set old ENB UE X2 AP ID function.
static TypeId GetTypeId(void)
Get the type ID.
std::vector< EpcX2Sap::ErabNotAdmittedItem > m_erabsNotAdmittedList
ERABs not admitted list.
uint32_t GetNumberOfIes() const
Get number of IEs function.
void SetAdmittedBearers(std::vector< EpcX2Sap::ErabAdmittedItem > bearers)
Set admitted bearers function.
virtual uint32_t GetSerializedSize(void) const
EpcX2HandoverRequestHeader.
uint16_t GetCause() const
Get cause function.
void SetCause(uint16_t cause)
Set cause function.
uint32_t m_mmeUeS1apId
MME UE S1 AP ID.
std::vector< EpcX2Sap::ErabToBeSetupItem > m_erabsToBeSetupList
ERAB to be setup list.
void SetMmeUeS1apId(uint32_t mmeUeS1apId)
Set MME UE S1 AP ID function.
uint32_t GetMmeUeS1apId() const
Get MME UE S1 AP ID function.
static TypeId GetTypeId(void)
Get the type ID.
void SetTargetCellId(uint16_t targetCellId)
Set target cell id function.
uint64_t m_ueAggregateMaxBitRateUplink
aggregate max bit rate uplink
virtual void Print(std::ostream &os) const
uint32_t m_headerLength
header length
void SetUeAggregateMaxBitRateUplink(uint64_t bitRate)
Set UE Aggregrate Max Bit Rate Uplik function.
uint64_t GetUeAggregateMaxBitRateUplink() const
Get UE Aggregrate Max Bit Rate Uplik function.
uint16_t GetTargetCellId() const
Get target cell id function.
void SetBearers(std::vector< EpcX2Sap::ErabToBeSetupItem > bearers)
Set bearers function.
uint64_t GetUeAggregateMaxBitRateDownlink() const
Get UE Aggregate Max Bit Rate Downlink function.
void SetUeAggregateMaxBitRateDownlink(uint64_t bitRate)
Set UE Aggregrate Max Bit Rate Downlink function.
uint32_t m_numberOfIes
number of IEs
virtual void Serialize(Buffer::Iterator start) const
virtual uint32_t GetSerializedSize(void) const
uint16_t m_targetCellId
target cell ID
void SetOldEnbUeX2apId(uint16_t x2apId)
Set old ENB X2 AP ID function.
uint32_t GetNumberOfIes() const
Get number of IEs.
uint16_t m_oldEnbUeX2apId
old ENB UE X1 AP ID
uint16_t GetOldEnbUeX2apId() const
Get old ENB X2 AP ID function.
uint32_t GetLengthOfIes() const
Get length of IEs.
std::vector< EpcX2Sap::ErabToBeSetupItem > GetBearers() const
Get bearers function.
uint64_t m_ueAggregateMaxBitRateDownlink
aggregate max bit rate downlink
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
Introspection did not find any typical Config paths.
Definition: epc-x2-header.h:34
void SetLengthOfIes(uint32_t lengthOfIes)
Set length of IEs function.
virtual void Print(std::ostream &os) const
uint8_t m_messageType
message type
virtual ~EpcX2Header()
void SetProcedureCode(uint8_t procedureCode)
Set procedure code function.
virtual uint32_t GetSerializedSize(void) const
uint8_t GetProcedureCode() const
Get procedure code function.
static TypeId GetTypeId(void)
Get the type ID.
uint32_t m_numberOfIes
number of IEs
uint8_t m_procedureCode
procedure code
void SetNumberOfIes(uint32_t numberOfIes)
Set number of IEs function.
virtual void Serialize(Buffer::Iterator start) const
uint32_t m_lengthOfIes
length of IEs
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
uint8_t GetMessageType() const
Get message type function.
void SetMessageType(uint8_t messageType)
Set message type function.
EpcX2LoadInformationHeader.
uint32_t m_headerLength
length of IEs
std::vector< EpcX2Sap::CellInformationItem > GetCellInformationList() const
Get cell information list function.
virtual uint32_t GetSerializedSize(void) const
virtual void Print(std::ostream &os) const
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
uint32_t GetNumberOfIes() const
Get number of IEs function.
void SetCellInformationList(std::vector< EpcX2Sap::CellInformationItem > cellInformationList)
Set cell information list function.
virtual void Serialize(Buffer::Iterator start) const
std::vector< EpcX2Sap::CellInformationItem > m_cellInformationList
cell information list
uint32_t GetLengthOfIes() const
Get length of IEs function.
static TypeId GetTypeId(void)
Get the type ID.
uint32_t m_numberOfIes
number of IEs
EpcX2ResourceStatusUpdateHeader.
uint16_t m_enb1MeasurementId
ENB1 measurement.
virtual uint32_t GetSerializedSize(void) const
uint16_t m_enb2MeasurementId
ENB2 measurement.
uint32_t m_headerLength
header length
void SetEnb2MeasurementId(uint16_t enb2MeasurementId)
Set ENB2 measurement ID function.
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
void SetEnb1MeasurementId(uint16_t enb1MeasurementId)
Set ENB1 measurement ID function.
uint32_t GetLengthOfIes() const
Get length of IEs function.
uint32_t GetNumberOfIes() const
Get number of IEs function.
virtual void Print(std::ostream &os) const
static TypeId GetTypeId(void)
Get the type ID.
uint16_t GetEnb2MeasurementId() const
Get ENB2 measurement ID function.
std::vector< EpcX2Sap::CellMeasurementResultItem > GetCellMeasurementResultList() const
Get cell measurement results list function.
std::vector< EpcX2Sap::CellMeasurementResultItem > m_cellMeasurementResultList
cell measurement result list
void SetCellMeasurementResultList(std::vector< EpcX2Sap::CellMeasurementResultItem > cellMeasurementResultList)
Set cell measurement results list function.
virtual void Serialize(Buffer::Iterator start) const
uint16_t GetEnb1MeasurementId() const
Get ENB1 measurement ID function.
uint32_t m_numberOfIes
number of IEs
static const uint16_t m_maxPdcpSn
E-RABs subject to status transfer item as it is used in the SN STATUS TRANSFER message.
Definition: epc-x2-sap.h:98
UlInterferenceOverloadIndicationItem
UL Interference OverloadIndication as it is used in the LOAD INFORMATION message.
Definition: epc-x2-sap.h:117
LoadIndicator
Load Indicator as it is used in the RESOURCE STATUS UPDATE message.
Definition: epc-x2-sap.h:170
EpcX2SnStatusTransferHeader.
uint16_t GetOldEnbUeX2apId() const
Get old ENB UE X2 AP ID function.
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
uint16_t GetNewEnbUeX2apId() const
Get new ENB UE X2 AP ID function.
virtual void Print(std::ostream &os) const
static TypeId GetTypeId(void)
Get the type ID.
virtual uint32_t GetSerializedSize(void) const
uint32_t GetNumberOfIes() const
Get number of IEs function.
void SetErabsSubjectToStatusTransferList(std::vector< EpcX2Sap::ErabsSubjectToStatusTransferItem > erabs)
Set ERABs subject to status transfer list function.
std::vector< EpcX2Sap::ErabsSubjectToStatusTransferItem > GetErabsSubjectToStatusTransferList() const
Get ERABs subject to status transfer list function.
virtual void Serialize(Buffer::Iterator start) const
uint16_t m_oldEnbUeX2apId
old ENB UE X2 AP ID
void SetNewEnbUeX2apId(uint16_t x2apId)
Set new ENB UE X2 AP ID function.
std::vector< EpcX2Sap::ErabsSubjectToStatusTransferItem > m_erabsSubjectToStatusTransferList
ERABs subject to status transfer list.
uint32_t m_headerLength
header length
void SetOldEnbUeX2apId(uint16_t x2apId)
Set old ENB UE X2 AP ID function.
uint16_t m_newEnbUeX2apId
new ENB UE X2 AP ID
uint32_t GetLengthOfIes() const
Get length of IEs function.
uint32_t m_numberOfIes
number of IEs
EpcX2UeContextReleaseHeader.
uint16_t m_newEnbUeX2apId
new ENB UE X2 AP ID
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
uint32_t m_headerLength
header length
void SetNewEnbUeX2apId(uint16_t x2apId)
Set new ENB UE X2 AP ID function.
uint16_t GetNewEnbUeX2apId() const
Get new ENB UE X2 AP ID function.
virtual void Serialize(Buffer::Iterator start) const
void SetOldEnbUeX2apId(uint16_t x2apId)
Set old ENB UE X2 AP ID function.
uint32_t GetLengthOfIes() const
Get length of IEs function.
virtual uint32_t GetSerializedSize(void) const
uint16_t GetOldEnbUeX2apId() const
Get old ENB UE X2 AP ID function.
uint32_t GetNumberOfIes() const
Set length of IEs function.
static TypeId GetTypeId(void)
Get the type ID.
uint32_t m_numberOfIes
number of IEs
virtual void Print(std::ostream &os) const
uint16_t m_oldEnbUeX2apId
old ENB UE X2 AP ID
This class contains the specification of EPS Bearers.
Definition: eps-bearer.h:92
AllocationRetentionPriority arp
allocation retention priority
Definition: eps-bearer.h:132
GbrQosInformation gbrQosInfo
GBR QOS information.
Definition: eps-bearer.h:131
Qci
QoS Class Indicator.
Definition: eps-bearer.h:107
Protocol header serialization and deserialization.
Definition: header.h:43
virtual uint32_t Deserialize(Buffer::Iterator start)=0
Deserialize the object from a buffer iterator.
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:41
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_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:205
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:45
Every class exported by the ns3 library is enclosed in the ns3 namespace.
def start()
Definition: core.py:1853
bool preemptionVulnerability
true if bearer can be preempted by others
Definition: eps-bearer.h:61
bool preemptionCapability
true if bearer can preempt others
Definition: eps-bearer.h:60
uint8_t priorityLevel
1-15; 1 = highest
Definition: eps-bearer.h:59
Cell Information Item as it is used in the LOAD INFORMATION message.
Definition: epc-x2-sap.h:157
uint16_t sourceCellId
source cell ID
Definition: epc-x2-sap.h:158
std::vector< UlHighInterferenceInformationItem > ulHighInterferenceInformationList
UL high interference information list.
Definition: epc-x2-sap.h:160
RelativeNarrowbandTxBand relativeNarrowbandTxBand
relative narrow transmit band
Definition: epc-x2-sap.h:161
std::vector< UlInterferenceOverloadIndicationItem > ulInterferenceOverloadIndicationList
UL interference overload indication list.
Definition: epc-x2-sap.h:159
Cell Measurement Result Item as it is used in the RESOURCE STATUS UPDATE message.
Definition: epc-x2-sap.h:194
uint16_t ulTotalPrbUsage
UL Total PRB usage.
Definition: epc-x2-sap.h:208
LoadIndicator ulHardwareLoadIndicator
UL hardware load indicator.
Definition: epc-x2-sap.h:198
LoadIndicator dlHardwareLoadIndicator
DL hardware load indicator.
Definition: epc-x2-sap.h:197
uint16_t sourceCellId
source cell id
Definition: epc-x2-sap.h:195
uint16_t ulGbrPrbUsage
UL GBR PRB usage.
Definition: epc-x2-sap.h:204
uint16_t dlTotalPrbUsage
DL Total PRB usage.
Definition: epc-x2-sap.h:207
LoadIndicator dlS1TnlLoadIndicator
DL S1 TNL load indicator.
Definition: epc-x2-sap.h:200
uint16_t ulNonGbrPrbUsage
UL Non GBR PRB usage.
Definition: epc-x2-sap.h:206
CompositeAvailCapacity dlCompositeAvailableCapacity
DL composite available capacity.
Definition: epc-x2-sap.h:210
CompositeAvailCapacity ulCompositeAvailableCapacity
UL composite available capacity.
Definition: epc-x2-sap.h:211
uint16_t dlGbrPrbUsage
DL GBR PRB usage.
Definition: epc-x2-sap.h:203
LoadIndicator ulS1TnlLoadIndicator
UL S1 TNL load indicator.
Definition: epc-x2-sap.h:201
uint16_t dlNonGbrPrbUsage
DL Non GBR PRB usage.
Definition: epc-x2-sap.h:205
uint16_t cellCapacityClassValue
cell capacity class value
Definition: epc-x2-sap.h:184
uint16_t capacityValue
capacity value
Definition: epc-x2-sap.h:185
E-RABs admitted item as it is used in the HANDOVER REQUEST ACKNOWLEDGE message.
Definition: epc-x2-sap.h:76
uint32_t dlGtpTeid
downlink GTP TEID
Definition: epc-x2-sap.h:79
uint32_t ulGtpTeid
uplink GTP TEID
Definition: epc-x2-sap.h:78
uint16_t erabId
E-RAB ID.
Definition: epc-x2-sap.h:77
E-RABs not admitted item as it is used in the HANDOVER REQUEST ACKNOWLEDGE message.
Definition: epc-x2-sap.h:88
E-RABs to be setup item as it is used in the HANDOVER REQUEST message.
Definition: epc-x2-sap.h:60
bool dlForwarding
DL forwarding.
Definition: epc-x2-sap.h:63
Ipv4Address transportLayerAddress
transport layer address
Definition: epc-x2-sap.h:64
EpsBearer erabLevelQosParameters
E-RAB level QOS parameters.
Definition: epc-x2-sap.h:62
ErabsSubjectToStatusTransferItem structure.
Definition: epc-x2-sap.h:102
std::bitset< m_maxPdcpSn > receiveStatusOfUlPdcpSdus
receive status of UL PDCP SDUs
Definition: epc-x2-sap.h:104
int16_t rntpThreshold
RNTP threshold.
Definition: epc-x2-sap.h:145
uint16_t antennaPorts
antenna ports
Definition: epc-x2-sap.h:146
std::vector< bool > rntpPerPrbList
RNTP per prb list.
Definition: epc-x2-sap.h:144
uint16_t pdcchInterferenceImpact
PDC channel interference list.
Definition: epc-x2-sap.h:148
UL High Interference Information as it is used in the LOAD INFORMATION message.
Definition: epc-x2-sap.h:129
std::vector< bool > ulHighInterferenceIndicationList
UL high interference indication list.
Definition: epc-x2-sap.h:131
uint64_t gbrDl
Guaranteed Bit Rate (bit/s) in downlink.
Definition: eps-bearer.h:42
uint64_t gbrUl
Guaranteed Bit Rate (bit/s) in uplink.
Definition: eps-bearer.h:43
uint64_t mbrDl
Maximum Bit Rate (bit/s) in downlink.
Definition: eps-bearer.h:44
uint64_t mbrUl
Maximum Bit Rate (bit/s) in uplink.
Definition: eps-bearer.h:45