A Discrete-Event Network Simulator
API
epc-x2-header.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation;
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16  *
17  * Author: Manuel Requena <manuel.requena@cttc.es>
18  */
19 
20 #include "epc-x2-header.h"
21 
22 #include "ns3/log.h"
23 
24 namespace ns3
25 {
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  return tid;
55 }
56 
57 TypeId
59 {
60  return GetTypeId();
61 }
62 
63 uint32_t
65 {
66  return 7;
67 }
68 
69 void
71 {
73 
76 
77  i.WriteU8(0x00); // criticality = REJECT
78  i.WriteU8(m_lengthOfIes + 3);
79  i.WriteHtonU16(0);
81 }
82 
83 uint32_t
85 {
87 
88  m_messageType = i.ReadU8();
89  m_procedureCode = i.ReadU8();
90 
91  i.ReadU8();
92  m_lengthOfIes = i.ReadU8() - 3;
93  i.ReadNtohU16();
94  m_numberOfIes = i.ReadU8();
95 
96  return GetSerializedSize();
97 }
98 
99 void
100 EpcX2Header::Print(std::ostream& os) const
101 {
102  os << "MessageType=" << (uint32_t)m_messageType;
103  os << " ProcedureCode=" << (uint32_t)m_procedureCode;
104  os << " LengthOfIEs=" << (uint32_t)m_lengthOfIes;
105  os << " NumberOfIEs=" << (uint32_t)m_numberOfIes;
106 }
107 
108 uint8_t
110 {
111  return m_messageType;
112 }
113 
114 void
115 EpcX2Header::SetMessageType(uint8_t messageType)
116 {
117  m_messageType = messageType;
118 }
119 
120 uint8_t
122 {
123  return m_procedureCode;
124 }
125 
126 void
127 EpcX2Header::SetProcedureCode(uint8_t procedureCode)
128 {
129  m_procedureCode = procedureCode;
130 }
131 
132 void
133 EpcX2Header::SetLengthOfIes(uint32_t lengthOfIes)
134 {
135  m_lengthOfIes = lengthOfIes;
136 }
137 
138 void
139 EpcX2Header::SetNumberOfIes(uint32_t numberOfIes)
140 {
141  m_numberOfIes = numberOfIes;
142 }
143 
145 
147 
149  : m_numberOfIes(1 + 1 + 1 + 1),
150  m_headerLength(6 + 5 + 12 + (3 + 4 + 8 + 8 + 4)),
151  m_oldEnbUeX2apId(0xfffa),
152  m_cause(0xfffa),
153  m_targetCellId(0xfffa),
154  m_mmeUeS1apId(0xfffffffa)
155 {
156  m_erabsToBeSetupList.clear();
157 }
158 
160 {
161  m_numberOfIes = 0;
162  m_headerLength = 0;
163  m_oldEnbUeX2apId = 0xfffb;
164  m_cause = 0xfffb;
165  m_targetCellId = 0xfffb;
166  m_mmeUeS1apId = 0xfffffffb;
167  m_erabsToBeSetupList.clear();
168 }
169 
170 TypeId
172 {
173  static TypeId tid = TypeId("ns3::EpcX2HandoverRequestHeader")
174  .SetParent<Header>()
175  .SetGroupName("Lte")
176  .AddConstructor<EpcX2HandoverRequestHeader>();
177  return tid;
178 }
179 
180 TypeId
182 {
183  return GetTypeId();
184 }
185 
186 uint32_t
188 {
189  return m_headerLength;
190 }
191 
192 void
194 {
196 
197  i.WriteHtonU16(10); // id = OLD_ENB_UE_X2AP_ID
198  i.WriteU8(0); // criticality = REJECT
199  i.WriteU8(2); // length of OLD_ENB_UE_X2AP_ID
201 
202  i.WriteHtonU16(5); // id = CAUSE
203  i.WriteU8(1 << 6); // criticality = IGNORE
204  i.WriteU8(1); // length of CAUSE
205  i.WriteU8(m_cause);
206 
207  i.WriteHtonU16(11); // id = TARGET_CELLID
208  i.WriteU8(0); // criticality = REJECT
209  i.WriteU8(8); // length of TARGET_CELLID
210  i.WriteHtonU32(0x123456); // fake PLMN
212 
213  i.WriteHtonU16(14); // id = UE_CONTEXT_INFORMATION
214  i.WriteU8(0); // criticality = REJECT
215 
219 
220  std::vector<EpcX2Sap::ErabToBeSetupItem>::size_type sz = m_erabsToBeSetupList.size();
221  i.WriteHtonU32(sz); // number of bearers
222  for (int j = 0; j < (int)sz; j++)
223  {
224  i.WriteHtonU16(m_erabsToBeSetupList[j].erabId);
225  i.WriteHtonU16(m_erabsToBeSetupList[j].erabLevelQosParameters.qci);
226  i.WriteHtonU64(m_erabsToBeSetupList[j].erabLevelQosParameters.gbrQosInfo.gbrDl);
227  i.WriteHtonU64(m_erabsToBeSetupList[j].erabLevelQosParameters.gbrQosInfo.gbrUl);
228  i.WriteHtonU64(m_erabsToBeSetupList[j].erabLevelQosParameters.gbrQosInfo.mbrDl);
229  i.WriteHtonU64(m_erabsToBeSetupList[j].erabLevelQosParameters.gbrQosInfo.mbrUl);
230  i.WriteU8(m_erabsToBeSetupList[j].erabLevelQosParameters.arp.priorityLevel);
231  i.WriteU8(m_erabsToBeSetupList[j].erabLevelQosParameters.arp.preemptionCapability);
232  i.WriteU8(m_erabsToBeSetupList[j].erabLevelQosParameters.arp.preemptionVulnerability);
233  i.WriteU8(m_erabsToBeSetupList[j].dlForwarding);
234  i.WriteHtonU32(m_erabsToBeSetupList[j].transportLayerAddress.Get());
235  i.WriteHtonU32(m_erabsToBeSetupList[j].gtpTeid);
236  }
237 }
238 
239 uint32_t
241 {
243 
244  m_headerLength = 0;
245  m_numberOfIes = 0;
246 
247  i.ReadNtohU16();
248  i.ReadU8();
249  i.ReadU8();
251  m_headerLength += 6;
252  m_numberOfIes++;
253 
254  i.ReadNtohU16();
255  i.ReadU8();
256  i.ReadU8();
257  m_cause = i.ReadU8();
258  m_headerLength += 5;
259  m_numberOfIes++;
260 
261  i.ReadNtohU16();
262  i.ReadU8();
263  i.ReadU8();
264  i.ReadNtohU32();
265  m_targetCellId = i.ReadNtohU32() >> 4;
266  m_headerLength += 12;
267  m_numberOfIes++;
268 
269  i.ReadNtohU16();
270  i.ReadU8();
274  int sz = i.ReadNtohU32();
275  m_headerLength += 27;
276  m_numberOfIes++;
277 
278  for (int j = 0; j < sz; j++)
279  {
281 
282  erabItem.erabId = i.ReadNtohU16();
283 
292 
293  erabItem.dlForwarding = i.ReadU8();
295  erabItem.gtpTeid = i.ReadNtohU32();
296 
297  m_erabsToBeSetupList.push_back(erabItem);
298  m_headerLength += 48;
299  }
300 
301  return GetSerializedSize();
302 }
303 
304 void
305 EpcX2HandoverRequestHeader::Print(std::ostream& os) const
306 {
307  os << "OldEnbUeX2apId = " << m_oldEnbUeX2apId;
308  os << " Cause = " << m_cause;
309  os << " TargetCellId = " << m_targetCellId;
310  os << " MmeUeS1apId = " << m_mmeUeS1apId;
311  os << " UeAggrMaxBitRateDownlink = " << m_ueAggregateMaxBitRateDownlink;
312  os << " UeAggrMaxBitRateUplink = " << m_ueAggregateMaxBitRateUplink;
313  os << " NumOfBearers = " << m_erabsToBeSetupList.size();
314 
315  std::vector<EpcX2Sap::ErabToBeSetupItem>::size_type sz = m_erabsToBeSetupList.size();
316  if (sz > 0)
317  {
318  os << " [";
319  }
320  for (int j = 0; j < (int)sz; j++)
321  {
322  os << m_erabsToBeSetupList[j].erabId;
323  if (j < (int)sz - 1)
324  {
325  os << ", ";
326  }
327  else
328  {
329  os << "]";
330  }
331  }
332 }
333 
334 uint16_t
336 {
337  return m_oldEnbUeX2apId;
338 }
339 
340 void
342 {
343  m_oldEnbUeX2apId = x2apId;
344 }
345 
346 uint16_t
348 {
349  return m_cause;
350 }
351 
352 void
354 {
355  m_cause = cause;
356 }
357 
358 uint16_t
360 {
361  return m_targetCellId;
362 }
363 
364 void
366 {
367  m_targetCellId = targetCellId;
368 }
369 
370 uint32_t
372 {
373  return m_mmeUeS1apId;
374 }
375 
376 void
378 {
379  m_mmeUeS1apId = mmeUeS1apId;
380 }
381 
382 std::vector<EpcX2Sap::ErabToBeSetupItem>
384 {
385  return m_erabsToBeSetupList;
386 }
387 
388 void
389 EpcX2HandoverRequestHeader::SetBearers(std::vector<EpcX2Sap::ErabToBeSetupItem> bearers)
390 {
391  m_headerLength += 48 * bearers.size();
392  m_erabsToBeSetupList = bearers;
393 }
394 
395 uint64_t
397 {
399 }
400 
401 void
403 {
405 }
406 
407 uint64_t
409 {
411 }
412 
413 void
415 {
417 }
418 
419 uint32_t
421 {
422  return m_headerLength;
423 }
424 
425 uint32_t
427 {
428  return m_numberOfIes;
429 }
430 
432 
434 
436  : m_numberOfIes(1 + 1 + 1 + 1),
437  m_headerLength(2 + 2 + 4 + 4),
438  m_oldEnbUeX2apId(0xfffa),
439  m_newEnbUeX2apId(0xfffa)
440 {
441 }
442 
444 {
445  m_numberOfIes = 0;
446  m_headerLength = 0;
447  m_oldEnbUeX2apId = 0xfffb;
448  m_newEnbUeX2apId = 0xfffb;
449  m_erabsAdmittedList.clear();
450  m_erabsNotAdmittedList.clear();
451 }
452 
453 TypeId
455 {
456  static TypeId tid = TypeId("ns3::EpcX2HandoverRequestAckHeader")
457  .SetParent<Header>()
458  .SetGroupName("Lte")
459  .AddConstructor<EpcX2HandoverRequestAckHeader>();
460  return tid;
461 }
462 
463 TypeId
465 {
466  return GetTypeId();
467 }
468 
469 uint32_t
471 {
472  return m_headerLength;
473 }
474 
475 void
477 {
479 
482 
483  std::vector<EpcX2Sap::ErabAdmittedItem>::size_type sz = m_erabsAdmittedList.size();
484  i.WriteHtonU32(sz);
485  for (int j = 0; j < (int)sz; j++)
486  {
487  i.WriteHtonU16(m_erabsAdmittedList[j].erabId);
488  i.WriteHtonU32(m_erabsAdmittedList[j].ulGtpTeid);
489  i.WriteHtonU32(m_erabsAdmittedList[j].dlGtpTeid);
490  }
491 
492  std::vector<EpcX2Sap::ErabNotAdmittedItem>::size_type sz2 = m_erabsNotAdmittedList.size();
493  i.WriteHtonU32(sz2);
494  for (int j = 0; j < (int)sz2; j++)
495  {
498  }
499 }
500 
501 uint32_t
503 {
505 
506  m_headerLength = 0;
507  m_numberOfIes = 0;
508 
511  m_headerLength += 4;
512  m_numberOfIes += 2;
513 
514  int sz = i.ReadNtohU32();
515  m_headerLength += 4;
516  m_numberOfIes++;
517 
518  for (int j = 0; j < sz; j++)
519  {
521 
522  erabItem.erabId = i.ReadNtohU16();
523  erabItem.ulGtpTeid = i.ReadNtohU32();
524  erabItem.dlGtpTeid = i.ReadNtohU32();
525 
526  m_erabsAdmittedList.push_back(erabItem);
527  m_headerLength += 10;
528  }
529 
530  sz = i.ReadNtohU32();
531  m_headerLength += 4;
532  m_numberOfIes++;
533 
534  for (int j = 0; j < sz; j++)
535  {
537 
538  erabItem.erabId = i.ReadNtohU16();
539  erabItem.cause = i.ReadNtohU16();
540 
541  m_erabsNotAdmittedList.push_back(erabItem);
542  m_headerLength += 4;
543  }
544 
545  return GetSerializedSize();
546 }
547 
548 void
550 {
551  os << "OldEnbUeX2apId=" << m_oldEnbUeX2apId;
552  os << " NewEnbUeX2apId=" << m_newEnbUeX2apId;
553 
554  os << " AdmittedBearers=" << m_erabsAdmittedList.size();
555  std::vector<EpcX2Sap::ErabAdmittedItem>::size_type sz = m_erabsAdmittedList.size();
556  if (sz > 0)
557  {
558  os << " [";
559  }
560  for (int j = 0; j < (int)sz; j++)
561  {
562  os << m_erabsAdmittedList[j].erabId;
563  if (j < (int)sz - 1)
564  {
565  os << ", ";
566  }
567  else
568  {
569  os << "]";
570  }
571  }
572 
573  os << " NotAdmittedBearers=" << m_erabsNotAdmittedList.size();
574  std::vector<EpcX2Sap::ErabNotAdmittedItem>::size_type sz2 = m_erabsNotAdmittedList.size();
575  if (sz2 > 0)
576  {
577  os << " [";
578  }
579  for (int j = 0; j < (int)sz2; j++)
580  {
581  os << m_erabsNotAdmittedList[j].erabId;
582  if (j < (int)sz2 - 1)
583  {
584  os << ", ";
585  }
586  else
587  {
588  os << "]";
589  }
590  }
591 }
592 
593 uint16_t
595 {
596  return m_oldEnbUeX2apId;
597 }
598 
599 void
601 {
602  m_oldEnbUeX2apId = x2apId;
603 }
604 
605 uint16_t
607 {
608  return m_newEnbUeX2apId;
609 }
610 
611 void
613 {
614  m_newEnbUeX2apId = x2apId;
615 }
616 
617 std::vector<EpcX2Sap::ErabAdmittedItem>
619 {
620  return m_erabsAdmittedList;
621 }
622 
623 void
624 EpcX2HandoverRequestAckHeader::SetAdmittedBearers(std::vector<EpcX2Sap::ErabAdmittedItem> bearers)
625 {
626  m_headerLength += 10 * bearers.size();
627  m_erabsAdmittedList = bearers;
628 }
629 
630 std::vector<EpcX2Sap::ErabNotAdmittedItem>
632 {
633  return m_erabsNotAdmittedList;
634 }
635 
636 void
638  std::vector<EpcX2Sap::ErabNotAdmittedItem> bearers)
639 {
640  m_headerLength += 4 * bearers.size();
641  m_erabsNotAdmittedList = bearers;
642 }
643 
644 uint32_t
646 {
647  return m_headerLength;
648 }
649 
650 uint32_t
652 {
653  return m_numberOfIes;
654 }
655 
657 
659 
661  : m_numberOfIes(1 + 1 + 1),
662  m_headerLength(2 + 2 + 2),
663  m_oldEnbUeX2apId(0xfffa),
664  m_cause(0xfffa),
665  m_criticalityDiagnostics(0xfffa)
666 {
667 }
668 
670 {
671  m_numberOfIes = 0;
672  m_headerLength = 0;
673  m_oldEnbUeX2apId = 0xfffb;
674  m_cause = 0xfffb;
675  m_criticalityDiagnostics = 0xfffb;
676 }
677 
678 TypeId
680 {
681  static TypeId tid = TypeId("ns3::EpcX2HandoverPreparationFailureHeader")
682  .SetParent<Header>()
683  .SetGroupName("Lte")
684  .AddConstructor<EpcX2HandoverPreparationFailureHeader>();
685  return tid;
686 }
687 
688 TypeId
690 {
691  return GetTypeId();
692 }
693 
694 uint32_t
696 {
697  return m_headerLength;
698 }
699 
700 void
702 {
704 
708 }
709 
710 uint32_t
712 {
714 
716  m_cause = i.ReadNtohU16();
718 
719  m_headerLength = 6;
720  m_numberOfIes = 3;
721 
722  return GetSerializedSize();
723 }
724 
725 void
727 {
728  os << "OldEnbUeX2apId = " << m_oldEnbUeX2apId;
729  os << " Cause = " << m_cause;
730  os << " CriticalityDiagnostics = " << m_criticalityDiagnostics;
731 }
732 
733 uint16_t
735 {
736  return m_oldEnbUeX2apId;
737 }
738 
739 void
741 {
742  m_oldEnbUeX2apId = x2apId;
743 }
744 
745 uint16_t
747 {
748  return m_cause;
749 }
750 
751 void
753 {
754  m_cause = cause;
755 }
756 
757 uint16_t
759 {
761 }
762 
763 void
765 {
766  m_criticalityDiagnostics = criticalityDiagnostics;
767 }
768 
769 uint32_t
771 {
772  return m_headerLength;
773 }
774 
775 uint32_t
777 {
778  return m_numberOfIes;
779 }
780 
782 
784 
786  : m_numberOfIes(3),
787  m_headerLength(6),
788  m_oldEnbUeX2apId(0xfffa),
789  m_newEnbUeX2apId(0xfffa)
790 {
792 }
793 
795 {
796  m_numberOfIes = 0;
797  m_headerLength = 0;
798  m_oldEnbUeX2apId = 0xfffb;
799  m_newEnbUeX2apId = 0xfffb;
801 }
802 
803 TypeId
805 {
806  static TypeId tid = TypeId("ns3::EpcX2SnStatusTransferHeader")
807  .SetParent<Header>()
808  .SetGroupName("Lte")
809  .AddConstructor<EpcX2SnStatusTransferHeader>();
810  return tid;
811 }
812 
813 TypeId
815 {
816  return GetTypeId();
817 }
818 
819 uint32_t
821 {
822  return m_headerLength;
823 }
824 
825 void
827 {
829 
832 
833  std::vector<EpcX2Sap::ErabsSubjectToStatusTransferItem>::size_type sz =
835  i.WriteHtonU16(sz); // number of ErabsSubjectToStatusTransferItems
836 
837  for (int j = 0; j < (int)sz; j++)
838  {
840 
841  i.WriteHtonU16(item.erabId);
842 
843  uint16_t bitsetSize = EpcX2Sap::m_maxPdcpSn / 64;
844  for (int k = 0; k < bitsetSize; k++)
845  {
846  uint64_t statusValue = 0;
847  for (int m = 0; m < 64; m++)
848  {
849  statusValue |= item.receiveStatusOfUlPdcpSdus[64 * k + m] << m;
850  }
851  i.WriteHtonU64(statusValue);
852  }
853 
854  i.WriteHtonU16(item.ulPdcpSn);
855  i.WriteHtonU32(item.ulHfn);
856  i.WriteHtonU16(item.dlPdcpSn);
857  i.WriteHtonU32(item.dlHfn);
858  }
859 }
860 
861 uint32_t
863 {
865 
868  int sz = i.ReadNtohU16();
869 
870  m_numberOfIes = 3;
871  m_headerLength = 6 + sz * (14 + (EpcX2Sap::m_maxPdcpSn / 64));
872 
873  for (int j = 0; j < sz; j++)
874  {
876  ErabItem.erabId = i.ReadNtohU16();
877 
878  uint16_t bitsetSize = EpcX2Sap::m_maxPdcpSn / 64;
879  for (int k = 0; k < bitsetSize; k++)
880  {
881  uint64_t statusValue = i.ReadNtohU64();
882  for (int m = 0; m < 64; m++)
883  {
884  ErabItem.receiveStatusOfUlPdcpSdus[64 * k + m] = (statusValue >> m) & 1;
885  }
886  }
887 
888  ErabItem.ulPdcpSn = i.ReadNtohU16();
889  ErabItem.ulHfn = i.ReadNtohU32();
890  ErabItem.dlPdcpSn = i.ReadNtohU16();
891  ErabItem.dlHfn = i.ReadNtohU32();
892 
893  m_erabsSubjectToStatusTransferList.push_back(ErabItem);
894  }
895 
896  return GetSerializedSize();
897 }
898 
899 void
900 EpcX2SnStatusTransferHeader::Print(std::ostream& os) const
901 {
902  os << "OldEnbUeX2apId = " << m_oldEnbUeX2apId;
903  os << " NewEnbUeX2apId = " << m_newEnbUeX2apId;
904  os << " ErabsSubjectToStatusTransferList size = " << m_erabsSubjectToStatusTransferList.size();
905 
906  std::vector<EpcX2Sap::ErabsSubjectToStatusTransferItem>::size_type sz =
908  if (sz > 0)
909  {
910  os << " [";
911  }
912  for (int j = 0; j < (int)sz; j++)
913  {
914  os << m_erabsSubjectToStatusTransferList[j].erabId;
915  if (j < (int)sz - 1)
916  {
917  os << ", ";
918  }
919  else
920  {
921  os << "]";
922  }
923  }
924 }
925 
926 uint16_t
928 {
929  return m_oldEnbUeX2apId;
930 }
931 
932 void
934 {
935  m_oldEnbUeX2apId = x2apId;
936 }
937 
938 uint16_t
940 {
941  return m_newEnbUeX2apId;
942 }
943 
944 void
946 {
947  m_newEnbUeX2apId = x2apId;
948 }
949 
950 std::vector<EpcX2Sap::ErabsSubjectToStatusTransferItem>
952 {
954 }
955 
956 void
958  std::vector<EpcX2Sap::ErabsSubjectToStatusTransferItem> erabs)
959 {
960  m_headerLength += erabs.size() * (14 + (EpcX2Sap::m_maxPdcpSn / 8));
962 }
963 
964 uint32_t
966 {
967  return m_headerLength;
968 }
969 
970 uint32_t
972 {
973  return m_numberOfIes;
974 }
975 
977 
979 
981  : m_numberOfIes(1 + 1),
982  m_headerLength(2 + 2),
983  m_oldEnbUeX2apId(0xfffa),
984  m_newEnbUeX2apId(0xfffa)
985 {
986 }
987 
989 {
990  m_numberOfIes = 0;
991  m_headerLength = 0;
992  m_oldEnbUeX2apId = 0xfffb;
993  m_newEnbUeX2apId = 0xfffb;
994 }
995 
996 TypeId
998 {
999  static TypeId tid = TypeId("ns3::EpcX2UeContextReleaseHeader")
1000  .SetParent<Header>()
1001  .SetGroupName("Lte")
1002  .AddConstructor<EpcX2UeContextReleaseHeader>();
1003  return tid;
1004 }
1005 
1006 TypeId
1008 {
1009  return GetTypeId();
1010 }
1011 
1012 uint32_t
1014 {
1015  return m_headerLength;
1016 }
1017 
1018 void
1020 {
1021  Buffer::Iterator i = start;
1022 
1025 }
1026 
1027 uint32_t
1029 {
1030  Buffer::Iterator i = start;
1031 
1034  m_numberOfIes = 2;
1035  m_headerLength = 4;
1036 
1037  return GetSerializedSize();
1038 }
1039 
1040 void
1041 EpcX2UeContextReleaseHeader::Print(std::ostream& os) const
1042 {
1043  os << "OldEnbUeX2apId=" << m_oldEnbUeX2apId;
1044  os << " NewEnbUeX2apId=" << m_newEnbUeX2apId;
1045 }
1046 
1047 uint16_t
1049 {
1050  return m_oldEnbUeX2apId;
1051 }
1052 
1053 void
1055 {
1056  m_oldEnbUeX2apId = x2apId;
1057 }
1058 
1059 uint16_t
1061 {
1062  return m_newEnbUeX2apId;
1063 }
1064 
1065 void
1067 {
1068  m_newEnbUeX2apId = x2apId;
1069 }
1070 
1071 uint32_t
1073 {
1074  return m_headerLength;
1075 }
1076 
1077 uint32_t
1079 {
1080  return m_numberOfIes;
1081 }
1082 
1084 
1086 
1088  : m_numberOfIes(1),
1089  m_headerLength(6)
1090 {
1091  m_cellInformationList.clear();
1092 }
1093 
1095 {
1096  m_numberOfIes = 0;
1097  m_headerLength = 0;
1098  m_cellInformationList.clear();
1099 }
1100 
1101 TypeId
1103 {
1104  static TypeId tid = TypeId("ns3::EpcX2LoadInformationHeader")
1105  .SetParent<Header>()
1106  .SetGroupName("Lte")
1107  .AddConstructor<EpcX2LoadInformationHeader>();
1108  return tid;
1109 }
1110 
1111 TypeId
1113 {
1114  return GetTypeId();
1115 }
1116 
1117 uint32_t
1119 {
1120  return m_headerLength;
1121 }
1122 
1123 void
1125 {
1126  Buffer::Iterator i = start;
1127 
1128  i.WriteHtonU16(6); // id = CELL_INFORMATION
1129  i.WriteU8(1 << 6); // criticality = IGNORE
1130  i.WriteU8(4); // length of CELL_INFORMATION_ID
1131 
1132  std::vector<EpcX2Sap::CellInformationItem>::size_type sz = m_cellInformationList.size();
1133  i.WriteHtonU16(sz); // number of cellInformationItems
1134 
1135  for (int j = 0; j < (int)sz; j++)
1136  {
1137  i.WriteHtonU16(m_cellInformationList[j].sourceCellId);
1138 
1139  std::vector<EpcX2Sap::UlInterferenceOverloadIndicationItem>::size_type sz2;
1140  sz2 = m_cellInformationList[j].ulInterferenceOverloadIndicationList.size();
1141  i.WriteHtonU16(sz2); // number of UlInterferenceOverloadIndicationItem
1142 
1143  for (int k = 0; k < (int)sz2; k++)
1144  {
1145  i.WriteU8(m_cellInformationList[j].ulInterferenceOverloadIndicationList[k]);
1146  }
1147 
1148  std::vector<EpcX2Sap::UlHighInterferenceInformationItem>::size_type sz3;
1149  sz3 = m_cellInformationList[j].ulHighInterferenceInformationList.size();
1150  i.WriteHtonU16(sz3); // number of UlHighInterferenceInformationItem
1151 
1152  for (int k = 0; k < (int)sz3; k++)
1153  {
1154  i.WriteHtonU16(
1155  m_cellInformationList[j].ulHighInterferenceInformationList[k].targetCellId);
1156 
1157  std::vector<bool>::size_type sz4;
1158  sz4 = m_cellInformationList[j]
1159  .ulHighInterferenceInformationList[k]
1160  .ulHighInterferenceIndicationList.size();
1161  i.WriteHtonU16(sz4);
1162 
1163  for (int m = 0; m < (int)sz4; m++)
1164  {
1166  .ulHighInterferenceInformationList[k]
1167  .ulHighInterferenceIndicationList[m]);
1168  }
1169  }
1170 
1171  std::vector<bool>::size_type sz5;
1172  sz5 = m_cellInformationList[j].relativeNarrowbandTxBand.rntpPerPrbList.size();
1173  i.WriteHtonU16(sz5);
1174 
1175  for (int k = 0; k < (int)sz5; k++)
1176  {
1177  i.WriteU8(m_cellInformationList[j].relativeNarrowbandTxBand.rntpPerPrbList[k]);
1178  }
1179 
1180  i.WriteHtonU16(m_cellInformationList[j].relativeNarrowbandTxBand.rntpThreshold);
1181  i.WriteHtonU16(m_cellInformationList[j].relativeNarrowbandTxBand.antennaPorts);
1182  i.WriteHtonU16(m_cellInformationList[j].relativeNarrowbandTxBand.pB);
1183  i.WriteHtonU16(m_cellInformationList[j].relativeNarrowbandTxBand.pdcchInterferenceImpact);
1184  }
1185 }
1186 
1187 uint32_t
1189 {
1190  Buffer::Iterator i = start;
1191 
1192  m_headerLength = 0;
1193  m_numberOfIes = 0;
1194 
1195  i.ReadNtohU16();
1196  i.ReadU8();
1197  i.ReadU8();
1198  int sz = i.ReadNtohU16();
1199  m_headerLength += 6;
1200  m_numberOfIes++;
1201 
1202  for (int j = 0; j < sz; j++)
1203  {
1204  EpcX2Sap::CellInformationItem cellInfoItem;
1205  cellInfoItem.sourceCellId = i.ReadNtohU16();
1206  m_headerLength += 2;
1207 
1208  int sz2 = i.ReadNtohU16();
1209  m_headerLength += 2;
1210  for (int k = 0; k < sz2; k++)
1211  {
1213  cellInfoItem.ulInterferenceOverloadIndicationList.push_back(item);
1214  }
1215  m_headerLength += sz2;
1216 
1217  int sz3 = i.ReadNtohU16();
1218  m_headerLength += 2;
1219  for (int k = 0; k < sz3; k++)
1220  {
1222  item.targetCellId = i.ReadNtohU16();
1223  m_headerLength += 2;
1224 
1225  int sz4 = i.ReadNtohU16();
1226  m_headerLength += 2;
1227  for (int m = 0; m < sz4; m++)
1228  {
1229  item.ulHighInterferenceIndicationList.push_back(i.ReadU8());
1230  }
1231  m_headerLength += sz4;
1232 
1233  cellInfoItem.ulHighInterferenceInformationList.push_back(item);
1234  }
1235 
1236  int sz5 = i.ReadNtohU16();
1237  m_headerLength += 2;
1238  for (int k = 0; k < sz5; k++)
1239  {
1240  cellInfoItem.relativeNarrowbandTxBand.rntpPerPrbList.push_back(i.ReadU8());
1241  }
1242  m_headerLength += sz5;
1243 
1246  cellInfoItem.relativeNarrowbandTxBand.pB = i.ReadNtohU16();
1248  m_headerLength += 8;
1249 
1250  m_cellInformationList.push_back(cellInfoItem);
1251  }
1252 
1253  return GetSerializedSize();
1254 }
1255 
1256 void
1257 EpcX2LoadInformationHeader::Print(std::ostream& os) const
1258 {
1259  os << "NumOfCellInformationItems=" << m_cellInformationList.size();
1260 }
1261 
1262 std::vector<EpcX2Sap::CellInformationItem>
1264 {
1265  return m_cellInformationList;
1266 }
1267 
1268 void
1270  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]
1292  .ulHighInterferenceInformationList[k]
1293  .ulHighInterferenceIndicationList.size();
1294  m_headerLength += 2 + 2 + sz4;
1295  }
1296 
1297  std::vector<bool>::size_type sz5;
1298  sz5 = m_cellInformationList[j].relativeNarrowbandTxBand.rntpPerPrbList.size();
1299  m_headerLength += 2 + sz5 + 8;
1300  }
1301 }
1302 
1303 uint32_t
1305 {
1306  return m_headerLength;
1307 }
1308 
1309 uint32_t
1311 {
1312  return m_numberOfIes;
1313 }
1314 
1316 
1318 
1320  : m_numberOfIes(3),
1321  m_headerLength(6),
1322  m_enb1MeasurementId(0xfffa),
1323  m_enb2MeasurementId(0xfffa)
1324 {
1326 }
1327 
1329 {
1330  m_numberOfIes = 0;
1331  m_headerLength = 0;
1332  m_enb1MeasurementId = 0xfffb;
1333  m_enb2MeasurementId = 0xfffb;
1335 }
1336 
1337 TypeId
1339 {
1340  static TypeId tid = TypeId("ns3::EpcX2ResourceStatusUpdateHeader")
1341  .SetParent<Header>()
1342  .SetGroupName("Lte")
1343  .AddConstructor<EpcX2ResourceStatusUpdateHeader>();
1344  return tid;
1345 }
1346 
1347 TypeId
1349 {
1350  return GetTypeId();
1351 }
1352 
1353 uint32_t
1355 {
1356  return m_headerLength;
1357 }
1358 
1359 void
1361 {
1362  Buffer::Iterator i = start;
1363 
1366 
1367  std::vector<EpcX2Sap::CellMeasurementResultItem>::size_type sz =
1369  i.WriteHtonU16(sz); // number of CellMeasurementResultItem
1370 
1371  for (int j = 0; j < (int)sz; j++)
1372  {
1374 
1375  i.WriteHtonU16(item.sourceCellId);
1378  i.WriteU8(item.dlS1TnlLoadIndicator);
1379  i.WriteU8(item.ulS1TnlLoadIndicator);
1380 
1381  i.WriteHtonU16(item.dlGbrPrbUsage);
1382  i.WriteHtonU16(item.ulGbrPrbUsage);
1385  i.WriteHtonU16(item.dlTotalPrbUsage);
1386  i.WriteHtonU16(item.ulTotalPrbUsage);
1387 
1392  }
1393 }
1394 
1395 uint32_t
1397 {
1398  Buffer::Iterator i = start;
1399 
1402 
1403  int sz = i.ReadNtohU16();
1404  for (int j = 0; j < sz; j++)
1405  {
1407 
1408  item.sourceCellId = i.ReadNtohU16();
1413 
1414  item.dlGbrPrbUsage = i.ReadNtohU16();
1415  item.ulGbrPrbUsage = i.ReadNtohU16();
1416  item.dlNonGbrPrbUsage = i.ReadNtohU16();
1417  item.ulNonGbrPrbUsage = i.ReadNtohU16();
1418  item.dlTotalPrbUsage = i.ReadNtohU16();
1419  item.ulTotalPrbUsage = i.ReadNtohU16();
1420 
1425 
1426  m_cellMeasurementResultList.push_back(item);
1427  }
1428 
1429  m_headerLength = 6 + sz * 26;
1430  m_numberOfIes = 3;
1431 
1432  return GetSerializedSize();
1433 }
1434 
1435 void
1437 {
1438  os << "Enb1MeasurementId = " << m_enb1MeasurementId
1439  << " Enb2MeasurementId = " << m_enb2MeasurementId
1440  << " NumOfCellMeasurementResultItems = " << m_cellMeasurementResultList.size();
1441 }
1442 
1443 uint16_t
1445 {
1446  return m_enb1MeasurementId;
1447 }
1448 
1449 void
1451 {
1452  m_enb1MeasurementId = enb1MeasurementId;
1453 }
1454 
1455 uint16_t
1457 {
1458  return m_enb2MeasurementId;
1459 }
1460 
1461 void
1463 {
1464  m_enb2MeasurementId = enb2MeasurementId;
1465 }
1466 
1467 std::vector<EpcX2Sap::CellMeasurementResultItem>
1469 {
1471 }
1472 
1473 void
1475  std::vector<EpcX2Sap::CellMeasurementResultItem> cellMeasurementResultList)
1476 {
1477  m_cellMeasurementResultList = cellMeasurementResultList;
1478 
1479  std::vector<EpcX2Sap::CellMeasurementResultItem>::size_type sz =
1481  m_headerLength += sz * 26;
1482 }
1483 
1484 uint32_t
1486 {
1487  return m_headerLength;
1488 }
1489 
1490 uint32_t
1492 {
1493  return m_numberOfIes;
1494 }
1495 
1497 
1499 
1501  : m_numberOfIes(3),
1502  m_headerLength(6),
1503  m_oldEnbUeX2apId(0xfffa),
1504  m_newEnbUeX2apId(0xfffa),
1505  m_cause(0xfffa)
1506 {
1507 }
1508 
1510 {
1511  m_numberOfIes = 0;
1512  m_headerLength = 0;
1513  m_oldEnbUeX2apId = 0xfffb;
1514  m_newEnbUeX2apId = 0xfffb;
1515  m_cause = 0xfffb;
1516 }
1517 
1518 TypeId
1520 {
1521  static TypeId tid = TypeId("ns3::EpcX2HandoverCancelHeader")
1522  .SetParent<Header>()
1523  .SetGroupName("Lte")
1524  .AddConstructor<EpcX2HandoverCancelHeader>();
1525  return tid;
1526 }
1527 
1528 TypeId
1530 {
1531  return GetTypeId();
1532 }
1533 
1534 uint32_t
1536 {
1537  return m_headerLength;
1538 }
1539 
1540 void
1542 {
1543  Buffer::Iterator i = start;
1544 
1547  i.WriteHtonU16(m_cause);
1548 }
1549 
1550 uint32_t
1552 {
1553  Buffer::Iterator i = start;
1554 
1557  m_cause = i.ReadNtohU16();
1558  m_numberOfIes = 3;
1559  m_headerLength = 6;
1560 
1561  return GetSerializedSize();
1562 }
1563 
1564 void
1565 EpcX2HandoverCancelHeader::Print(std::ostream& os) const
1566 {
1567  os << "OldEnbUeX2apId=" << m_oldEnbUeX2apId;
1568  os << " NewEnbUeX2apId=" << m_newEnbUeX2apId;
1569  os << " Cause = " << m_cause;
1570 }
1571 
1572 uint16_t
1574 {
1575  return m_oldEnbUeX2apId;
1576 }
1577 
1578 void
1580 {
1581  m_oldEnbUeX2apId = x2apId;
1582 }
1583 
1584 uint16_t
1586 {
1587  return m_newEnbUeX2apId;
1588 }
1589 
1590 void
1592 {
1593  m_newEnbUeX2apId = x2apId;
1594 }
1595 
1596 uint16_t
1598 {
1599  return m_cause;
1600 }
1601 
1602 void
1604 {
1605  m_cause = cause;
1606 }
1607 
1608 uint32_t
1610 {
1611  return m_headerLength;
1612 }
1613 
1614 uint32_t
1616 {
1617  return m_numberOfIes;
1618 }
1619 
1620 } // namespace ns3
iterator in a Buffer instance
Definition: buffer.h:100
void WriteHtonU64(uint64_t data)
Definition: buffer.cc:934
uint64_t ReadNtohU64()
Definition: buffer.cc:1041
uint8_t ReadU8()
Definition: buffer.h:1027
void WriteU8(uint8_t data)
Definition: buffer.h:881
void WriteHtonU16(uint16_t data)
Definition: buffer.h:915
uint32_t ReadNtohU32()
Definition: buffer.h:978
void WriteHtonU32(uint32_t data)
Definition: buffer.h:933
uint16_t ReadNtohU16()
Definition: buffer.h:954
EpcX2HandoverCancelHeader.
uint16_t m_oldEnbUeX2apId
old ENB UE X2 AP ID
uint16_t GetNewEnbUeX2apId() const
Get new ENB UE X2 AP ID function.
void SetOldEnbUeX2apId(uint16_t x2apId)
Set old ENB UE X2 AP ID function.
uint32_t GetLengthOfIes() const
Get length of IEs function.
uint16_t m_newEnbUeX2apId
new ENB UE X2 AP ID
uint16_t GetOldEnbUeX2apId() const
Get old ENB UE X2 AP ID function.
uint32_t m_headerLength
header length
void SetCause(uint16_t cause)
Set cause function.
void Serialize(Buffer::Iterator start) const override
uint16_t GetCause() const
Get cause function.
uint32_t GetNumberOfIes() const
Get number of IEs function.
void Print(std::ostream &os) const override
uint32_t GetSerializedSize() const override
uint32_t m_numberOfIes
number of IEs
static TypeId GetTypeId()
Get the type ID.
void SetNewEnbUeX2apId(uint16_t x2apId)
Set new ENB UE X2 AP ID function.
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
EpcX2HandoverPreparationFailureHeader.
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.
void Serialize(Buffer::Iterator start) const override
static TypeId GetTypeId()
Get the type ID.
uint16_t GetCause() const
Get cause function.
uint16_t m_criticalityDiagnostics
criticality diagnostics
uint32_t GetLengthOfIes() const
Get length of IEs function.
uint16_t GetCriticalityDiagnostics() const
Get criticality diagnostics function.
void Print(std::ostream &os) const override
uint32_t GetSerializedSize() const override
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.
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
EpcX2HandoverRequestAckHeader.
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.
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
static TypeId GetTypeId()
Get the type ID.
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.
uint32_t GetSerializedSize() const override
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.
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.
void Print(std::ostream &os) const override
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
void Serialize(Buffer::Iterator start) const override
EpcX2HandoverRequestHeader.
uint16_t GetCause() const
Get cause function.
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
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.
void Serialize(Buffer::Iterator start) const override
void SetTargetCellId(uint16_t targetCellId)
Set target cell id function.
void Print(std::ostream &os) const override
uint64_t m_ueAggregateMaxBitRateUplink
aggregate max bit rate uplink
uint32_t m_headerLength
header length
void SetUeAggregateMaxBitRateUplink(uint64_t bitRate)
Set UE Aggregate Max Bit Rate Uplik function.
uint64_t GetUeAggregateMaxBitRateUplink() const
Get UE Aggregate 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 Aggregate Max Bit Rate Downlink function.
uint32_t m_numberOfIes
number of IEs
static TypeId GetTypeId()
Get the type ID.
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.
uint32_t GetSerializedSize() const override
uint64_t m_ueAggregateMaxBitRateDownlink
aggregate max bit rate downlink
static TypeId GetTypeId()
Get the type ID.
void SetLengthOfIes(uint32_t lengthOfIes)
Set length of IEs function.
void Print(std::ostream &os) const override
uint8_t m_messageType
message type
void SetProcedureCode(uint8_t procedureCode)
Set procedure code function.
uint8_t GetProcedureCode() const
Get procedure code function.
uint32_t GetSerializedSize() const override
void Serialize(Buffer::Iterator start) const override
uint32_t m_numberOfIes
number of IEs
uint8_t m_procedureCode
procedure code
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
void SetNumberOfIes(uint32_t numberOfIes)
Set number of IEs function.
uint32_t m_lengthOfIes
length of IEs
uint8_t GetMessageType() const
Get message type function.
~EpcX2Header() override
void SetMessageType(uint8_t messageType)
Set message type function.
EpcX2LoadInformationHeader.
uint32_t m_headerLength
length of IEs
void Print(std::ostream &os) const override
std::vector< EpcX2Sap::CellInformationItem > GetCellInformationList() const
Get cell information list function.
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
void Serialize(Buffer::Iterator start) const override
uint32_t GetNumberOfIes() const
Get number of IEs function.
void SetCellInformationList(std::vector< EpcX2Sap::CellInformationItem > cellInformationList)
Set cell information list function.
std::vector< EpcX2Sap::CellInformationItem > m_cellInformationList
cell information list
uint32_t GetLengthOfIes() const
Get length of IEs function.
uint32_t GetSerializedSize() const override
uint32_t m_numberOfIes
number of IEs
static TypeId GetTypeId()
Get the type ID.
EpcX2ResourceStatusUpdateHeader.
uint16_t m_enb1MeasurementId
ENB1 measurement.
uint16_t m_enb2MeasurementId
ENB2 measurement.
uint32_t m_headerLength
header length
void SetEnb2MeasurementId(uint16_t enb2MeasurementId)
Set ENB2 measurement ID function.
void SetEnb1MeasurementId(uint16_t enb1MeasurementId)
Set ENB1 measurement ID function.
uint32_t GetLengthOfIes() const
Get length of IEs function.
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
uint32_t GetNumberOfIes() const
Get number of IEs function.
void Print(std::ostream &os) const override
uint16_t GetEnb2MeasurementId() const
Get ENB2 measurement ID function.
std::vector< EpcX2Sap::CellMeasurementResultItem > GetCellMeasurementResultList() const
Get cell measurement results list function.
static TypeId GetTypeId()
Get the type ID.
std::vector< EpcX2Sap::CellMeasurementResultItem > m_cellMeasurementResultList
cell measurement result list
void SetCellMeasurementResultList(std::vector< EpcX2Sap::CellMeasurementResultItem > cellMeasurementResultList)
Set cell measurement results list function.
uint16_t GetEnb1MeasurementId() const
Get ENB1 measurement ID function.
uint32_t m_numberOfIes
number of IEs
void Serialize(Buffer::Iterator start) const override
uint32_t GetSerializedSize() const override
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:173
EpcX2SnStatusTransferHeader.
uint16_t GetOldEnbUeX2apId() const
Get old ENB UE X2 AP ID function.
uint16_t GetNewEnbUeX2apId() const
Get new ENB UE X2 AP ID function.
static TypeId GetTypeId()
Get the type ID.
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.
void Serialize(Buffer::Iterator start) const override
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
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.
uint32_t GetSerializedSize() const override
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
void Print(std::ostream &os) const override
EpcX2UeContextReleaseHeader.
uint16_t m_newEnbUeX2apId
new ENB UE X2 AP ID
static TypeId GetTypeId()
Get the type ID.
uint32_t m_headerLength
header length
void SetNewEnbUeX2apId(uint16_t x2apId)
Set new ENB UE X2 AP ID function.
void Serialize(Buffer::Iterator start) const override
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
uint16_t GetNewEnbUeX2apId() const
Get new ENB UE X2 AP ID function.
uint32_t GetSerializedSize() const override
void SetOldEnbUeX2apId(uint16_t x2apId)
Set old ENB UE X2 AP ID function.
uint32_t GetLengthOfIes() const
Get length of IEs function.
uint16_t GetOldEnbUeX2apId() const
Get old ENB UE X2 AP ID function.
uint32_t GetNumberOfIes() const
Set length of IEs function.
void Print(std::ostream &os) const override
uint32_t m_numberOfIes
number of IEs
uint16_t m_oldEnbUeX2apId
old ENB UE X2 AP ID
This class contains the specification of EPS Bearers.
Definition: eps-bearer.h:91
AllocationRetentionPriority arp
allocation retention priority
Definition: eps-bearer.h:154
GbrQosInformation gbrQosInfo
GBR QOS information.
Definition: eps-bearer.h:153
Qci
QoS Class Indicator.
Definition: eps-bearer.h:106
Protocol header serialization and deserialization.
Definition: header.h:44
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:42
a unique identifier for an interface.
Definition: type-id.h:59
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:931
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:202
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:46
Every class exported by the ns3 library is enclosed in the ns3 namespace.
bool preemptionVulnerability
true if bearer can be preempted by others
Definition: eps-bearer.h:60
bool preemptionCapability
true if bearer can preempt others
Definition: eps-bearer.h:59
uint8_t priorityLevel
1-15; 1 = highest
Definition: eps-bearer.h:58
Cell Information Item as it is used in the LOAD INFORMATION message.
Definition: epc-x2-sap.h:158
uint16_t sourceCellId
source cell ID
Definition: epc-x2-sap.h:159
std::vector< UlHighInterferenceInformationItem > ulHighInterferenceInformationList
UL high interference information list.
Definition: epc-x2-sap.h:163
RelativeNarrowbandTxBand relativeNarrowbandTxBand
relative narrow transmit band
Definition: epc-x2-sap.h:164
std::vector< UlInterferenceOverloadIndicationItem > ulInterferenceOverloadIndicationList
UL interference overload indication list.
Definition: epc-x2-sap.h:161
Cell Measurement Result Item as it is used in the RESOURCE STATUS UPDATE message.
Definition: epc-x2-sap.h:197
uint16_t ulTotalPrbUsage
UL Total PRB usage.
Definition: epc-x2-sap.h:211
LoadIndicator ulHardwareLoadIndicator
UL hardware load indicator.
Definition: epc-x2-sap.h:201
LoadIndicator dlHardwareLoadIndicator
DL hardware load indicator.
Definition: epc-x2-sap.h:200
uint16_t sourceCellId
source cell id
Definition: epc-x2-sap.h:198
uint16_t ulGbrPrbUsage
UL GBR PRB usage.
Definition: epc-x2-sap.h:207
uint16_t dlTotalPrbUsage
DL Total PRB usage.
Definition: epc-x2-sap.h:210
LoadIndicator dlS1TnlLoadIndicator
DL S1 TNL load indicator.
Definition: epc-x2-sap.h:203
uint16_t ulNonGbrPrbUsage
UL Non GBR PRB usage.
Definition: epc-x2-sap.h:209
CompositeAvailCapacity dlCompositeAvailableCapacity
DL composite available capacity.
Definition: epc-x2-sap.h:213
CompositeAvailCapacity ulCompositeAvailableCapacity
UL composite available capacity.
Definition: epc-x2-sap.h:214
uint16_t dlGbrPrbUsage
DL GBR PRB usage.
Definition: epc-x2-sap.h:206
LoadIndicator ulS1TnlLoadIndicator
UL S1 TNL load indicator.
Definition: epc-x2-sap.h:204
uint16_t dlNonGbrPrbUsage
DL Non GBR PRB usage.
Definition: epc-x2-sap.h:208
uint16_t cellCapacityClassValue
cell capacity class value
Definition: epc-x2-sap.h:187
uint16_t capacityValue
capacity value
Definition: epc-x2-sap.h:188
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:146
uint16_t antennaPorts
antenna ports
Definition: epc-x2-sap.h:147
std::vector< bool > rntpPerPrbList
RNTP per prb list.
Definition: epc-x2-sap.h:145
uint16_t pdcchInterferenceImpact
PDC channel interference list.
Definition: epc-x2-sap.h:149
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:132
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