A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
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
24namespace ns3
25{
26
27NS_LOG_COMPONENT_DEFINE("EpcX2Header");
28
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
49{
50 static TypeId tid = TypeId("ns3::EpcX2Header")
52 .SetGroupName("Lte")
53 .AddConstructor<EpcX2Header>();
54 return tid;
55}
56
59{
60 return GetTypeId();
61}
62
65{
66 return 7;
67}
68
69void
71{
72 Buffer::Iterator i = start;
73
76
77 i.WriteU8(0x00); // criticality = REJECT
79 i.WriteHtonU16(0);
81}
82
85{
86 Buffer::Iterator i = start;
87
90
91 i.ReadU8();
92 m_lengthOfIes = i.ReadU8() - 3;
93 i.ReadNtohU16();
95
96 return GetSerializedSize();
97}
98
99void
100EpcX2Header::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
108uint8_t
110{
111 return m_messageType;
112}
113
114void
115EpcX2Header::SetMessageType(uint8_t messageType)
116{
117 m_messageType = messageType;
118}
119
120uint8_t
122{
123 return m_procedureCode;
124}
125
126void
127EpcX2Header::SetProcedureCode(uint8_t procedureCode)
128{
129 m_procedureCode = procedureCode;
130}
131
132void
134{
135 m_lengthOfIes = lengthOfIes;
136}
137
138void
140{
141 m_numberOfIes = numberOfIes;
142}
143
144/////////////////////////////////////////////////////////////////////
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
170TypeId
172{
173 static TypeId tid = TypeId("ns3::EpcX2HandoverRequestHeader")
174 .SetParent<Header>()
175 .SetGroupName("Lte")
176 .AddConstructor<EpcX2HandoverRequestHeader>();
177 return tid;
178}
179
180TypeId
182{
183 return GetTypeId();
184}
185
188{
189 return m_headerLength;
190}
191
192void
194{
195 Buffer::Iterator i = start;
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 {
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());
236 }
237}
238
241{
242 Buffer::Iterator i = start;
243
244 m_headerLength = 0;
245 m_numberOfIes = 0;
246
247 i.ReadNtohU16();
248 i.ReadU8();
249 i.ReadU8();
251 m_headerLength += 6;
253
254 i.ReadNtohU16();
255 i.ReadU8();
256 i.ReadU8();
257 m_cause = i.ReadU8();
258 m_headerLength += 5;
260
261 i.ReadNtohU16();
262 i.ReadU8();
263 i.ReadU8();
264 i.ReadNtohU32();
265 m_targetCellId = i.ReadNtohU32() >> 4;
266 m_headerLength += 12;
268
269 i.ReadNtohU16();
270 i.ReadU8();
274 int sz = i.ReadNtohU32();
275 m_headerLength += 27;
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
304void
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
334uint16_t
336{
337 return m_oldEnbUeX2apId;
338}
339
340void
342{
343 m_oldEnbUeX2apId = x2apId;
344}
345
346uint16_t
348{
349 return m_cause;
350}
351
352void
354{
355 m_cause = cause;
356}
357
358uint16_t
360{
361 return m_targetCellId;
362}
363
364void
366{
367 m_targetCellId = targetCellId;
368}
369
372{
373 return m_mmeUeS1apId;
374}
375
376void
378{
379 m_mmeUeS1apId = mmeUeS1apId;
380}
381
382std::vector<EpcX2Sap::ErabToBeSetupItem>
384{
386}
387
388void
389EpcX2HandoverRequestHeader::SetBearers(std::vector<EpcX2Sap::ErabToBeSetupItem> bearers)
390{
391 m_headerLength += 48 * bearers.size();
392 m_erabsToBeSetupList = bearers;
393}
394
395uint64_t
397{
399}
400
401void
403{
405}
406
407uint64_t
409{
411}
412
413void
415{
417}
418
421{
422 return m_headerLength;
423}
424
427{
428 return m_numberOfIes;
429}
430
431/////////////////////////////////////////////////////////////////////
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();
451}
452
453TypeId
455{
456 static TypeId tid = TypeId("ns3::EpcX2HandoverRequestAckHeader")
457 .SetParent<Header>()
458 .SetGroupName("Lte")
459 .AddConstructor<EpcX2HandoverRequestAckHeader>();
460 return tid;
461}
462
463TypeId
465{
466 return GetTypeId();
467}
468
471{
472 return m_headerLength;
473}
474
475void
477{
478 Buffer::Iterator i = start;
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 {
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
503{
504 Buffer::Iterator i = start;
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;
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;
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
548void
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
593uint16_t
595{
596 return m_oldEnbUeX2apId;
597}
598
599void
601{
602 m_oldEnbUeX2apId = x2apId;
603}
604
605uint16_t
607{
608 return m_newEnbUeX2apId;
609}
610
611void
613{
614 m_newEnbUeX2apId = x2apId;
615}
616
617std::vector<EpcX2Sap::ErabAdmittedItem>
619{
620 return m_erabsAdmittedList;
621}
622
623void
624EpcX2HandoverRequestAckHeader::SetAdmittedBearers(std::vector<EpcX2Sap::ErabAdmittedItem> bearers)
625{
626 m_headerLength += 10 * bearers.size();
627 m_erabsAdmittedList = bearers;
628}
629
630std::vector<EpcX2Sap::ErabNotAdmittedItem>
632{
634}
635
636void
638 std::vector<EpcX2Sap::ErabNotAdmittedItem> bearers)
639{
640 m_headerLength += 4 * bearers.size();
641 m_erabsNotAdmittedList = bearers;
642}
643
646{
647 return m_headerLength;
648}
649
652{
653 return m_numberOfIes;
654}
655
656/////////////////////////////////////////////////////////////////////
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;
676}
677
678TypeId
680{
681 static TypeId tid = TypeId("ns3::EpcX2HandoverPreparationFailureHeader")
682 .SetParent<Header>()
683 .SetGroupName("Lte")
684 .AddConstructor<EpcX2HandoverPreparationFailureHeader>();
685 return tid;
686}
687
688TypeId
690{
691 return GetTypeId();
692}
693
696{
697 return m_headerLength;
698}
699
700void
702{
703 Buffer::Iterator i = start;
704
708}
709
712{
713 Buffer::Iterator i = start;
714
716 m_cause = i.ReadNtohU16();
718
719 m_headerLength = 6;
720 m_numberOfIes = 3;
721
722 return GetSerializedSize();
723}
724
725void
727{
728 os << "OldEnbUeX2apId = " << m_oldEnbUeX2apId;
729 os << " Cause = " << m_cause;
730 os << " CriticalityDiagnostics = " << m_criticalityDiagnostics;
731}
732
733uint16_t
735{
736 return m_oldEnbUeX2apId;
737}
738
739void
741{
742 m_oldEnbUeX2apId = x2apId;
743}
744
745uint16_t
747{
748 return m_cause;
749}
750
751void
753{
754 m_cause = cause;
755}
756
757uint16_t
759{
761}
762
763void
765{
766 m_criticalityDiagnostics = criticalityDiagnostics;
767}
768
771{
772 return m_headerLength;
773}
774
777{
778 return m_numberOfIes;
779}
780
781/////////////////////////////////////////////////////////////////////
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
803TypeId
805{
806 static TypeId tid = TypeId("ns3::EpcX2SnStatusTransferHeader")
807 .SetParent<Header>()
808 .SetGroupName("Lte")
809 .AddConstructor<EpcX2SnStatusTransferHeader>();
810 return tid;
811}
812
813TypeId
815{
816 return GetTypeId();
817}
818
821{
822 return m_headerLength;
823}
824
825void
827{
828 Buffer::Iterator i = start;
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
863{
864 Buffer::Iterator i = start;
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
899void
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 {
915 if (j < (int)sz - 1)
916 {
917 os << ", ";
918 }
919 else
920 {
921 os << "]";
922 }
923 }
924}
925
926uint16_t
928{
929 return m_oldEnbUeX2apId;
930}
931
932void
934{
935 m_oldEnbUeX2apId = x2apId;
936}
937
938uint16_t
940{
941 return m_newEnbUeX2apId;
942}
943
944void
946{
947 m_newEnbUeX2apId = x2apId;
948}
949
950std::vector<EpcX2Sap::ErabsSubjectToStatusTransferItem>
952{
954}
955
956void
958 std::vector<EpcX2Sap::ErabsSubjectToStatusTransferItem> erabs)
959{
960 m_headerLength += erabs.size() * (14 + (EpcX2Sap::m_maxPdcpSn / 8));
962}
963
966{
967 return m_headerLength;
968}
969
972{
973 return m_numberOfIes;
974}
975
976/////////////////////////////////////////////////////////////////////
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
996TypeId
998{
999 static TypeId tid = TypeId("ns3::EpcX2UeContextReleaseHeader")
1000 .SetParent<Header>()
1001 .SetGroupName("Lte")
1002 .AddConstructor<EpcX2UeContextReleaseHeader>();
1003 return tid;
1004}
1005
1006TypeId
1008{
1009 return GetTypeId();
1010}
1011
1014{
1015 return m_headerLength;
1016}
1017
1018void
1020{
1021 Buffer::Iterator i = start;
1022
1025}
1026
1029{
1030 Buffer::Iterator i = start;
1031
1034 m_numberOfIes = 2;
1035 m_headerLength = 4;
1036
1037 return GetSerializedSize();
1038}
1039
1040void
1042{
1043 os << "OldEnbUeX2apId=" << m_oldEnbUeX2apId;
1044 os << " NewEnbUeX2apId=" << m_newEnbUeX2apId;
1045}
1046
1047uint16_t
1049{
1050 return m_oldEnbUeX2apId;
1051}
1052
1053void
1055{
1056 m_oldEnbUeX2apId = x2apId;
1057}
1058
1059uint16_t
1061{
1062 return m_newEnbUeX2apId;
1063}
1064
1065void
1067{
1068 m_newEnbUeX2apId = x2apId;
1069}
1070
1073{
1074 return m_headerLength;
1075}
1076
1079{
1080 return m_numberOfIes;
1081}
1082
1083/////////////////////////////////
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
1101TypeId
1103{
1104 static TypeId tid = TypeId("ns3::EpcX2LoadInformationHeader")
1105 .SetParent<Header>()
1106 .SetGroupName("Lte")
1107 .AddConstructor<EpcX2LoadInformationHeader>();
1108 return tid;
1109}
1110
1111TypeId
1113{
1114 return GetTypeId();
1115}
1116
1119{
1120 return m_headerLength;
1121}
1122
1123void
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
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
1256void
1258{
1259 os << "NumOfCellInformationItems=" << m_cellInformationList.size();
1260}
1261
1262std::vector<EpcX2Sap::CellInformationItem>
1264{
1265 return m_cellInformationList;
1266}
1267
1268void
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
1305{
1306 return m_headerLength;
1307}
1308
1311{
1312 return m_numberOfIes;
1313}
1314
1315////////////////
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
1337TypeId
1339{
1340 static TypeId tid = TypeId("ns3::EpcX2ResourceStatusUpdateHeader")
1341 .SetParent<Header>()
1342 .SetGroupName("Lte")
1343 .AddConstructor<EpcX2ResourceStatusUpdateHeader>();
1344 return tid;
1345}
1346
1347TypeId
1349{
1350 return GetTypeId();
1351}
1352
1355{
1356 return m_headerLength;
1357}
1358
1359void
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);
1380
1387
1392 }
1393}
1394
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
1435void
1437{
1438 os << "Enb1MeasurementId = " << m_enb1MeasurementId
1439 << " Enb2MeasurementId = " << m_enb2MeasurementId
1440 << " NumOfCellMeasurementResultItems = " << m_cellMeasurementResultList.size();
1441}
1442
1443uint16_t
1445{
1446 return m_enb1MeasurementId;
1447}
1448
1449void
1451{
1452 m_enb1MeasurementId = enb1MeasurementId;
1453}
1454
1455uint16_t
1457{
1458 return m_enb2MeasurementId;
1459}
1460
1461void
1463{
1464 m_enb2MeasurementId = enb2MeasurementId;
1465}
1466
1467std::vector<EpcX2Sap::CellMeasurementResultItem>
1469{
1471}
1472
1473void
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
1486{
1487 return m_headerLength;
1488}
1489
1492{
1493 return m_numberOfIes;
1494}
1495
1496///////////////////////////////////////////////////////////////////////////////
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
1518TypeId
1520{
1521 static TypeId tid = TypeId("ns3::EpcX2HandoverCancelHeader")
1522 .SetParent<Header>()
1523 .SetGroupName("Lte")
1524 .AddConstructor<EpcX2HandoverCancelHeader>();
1525 return tid;
1526}
1527
1528TypeId
1530{
1531 return GetTypeId();
1532}
1533
1536{
1537 return m_headerLength;
1538}
1539
1540void
1542{
1543 Buffer::Iterator i = start;
1544
1548}
1549
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
1564void
1566{
1567 os << "OldEnbUeX2apId=" << m_oldEnbUeX2apId;
1568 os << " NewEnbUeX2apId=" << m_newEnbUeX2apId;
1569 os << " Cause = " << m_cause;
1570}
1571
1572uint16_t
1574{
1575 return m_oldEnbUeX2apId;
1576}
1577
1578void
1580{
1581 m_oldEnbUeX2apId = x2apId;
1582}
1583
1584uint16_t
1586{
1587 return m_newEnbUeX2apId;
1588}
1589
1590void
1592{
1593 m_newEnbUeX2apId = x2apId;
1594}
1595
1596uint16_t
1598{
1599 return m_cause;
1600}
1601
1602void
1604{
1605 m_cause = cause;
1606}
1607
1610{
1611 return m_headerLength;
1612}
1613
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 Deserialize(Buffer::Iterator start) override
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.
uint32_t Deserialize(Buffer::Iterator start) override
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.
uint32_t Deserialize(Buffer::Iterator start) override
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
uint32_t Deserialize(Buffer::Iterator start) override
Introspection did not find any typical Config paths.
Definition: epc-x2-header.h:33
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
uint32_t Deserialize(Buffer::Iterator start) override
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 Deserialize(Buffer::Iterator start) override
uint32_t m_numberOfIes
number of IEs
static TypeId GetTypeId()
Get the type ID.
EpcX2ResourceStatusUpdateHeader.
uint16_t m_enb1MeasurementId
ENB1 measurement.
uint32_t Deserialize(Buffer::Iterator start) override
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 Deserialize(Buffer::Iterator start) override
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
uint32_t Deserialize(Buffer::Iterator start) override
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
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:932
#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