7#include "nr-epc-x2-header.h"
14NS_LOG_COMPONENT_DEFINE(
"NrEpcX2Header");
16NS_OBJECT_ENSURE_REGISTERED(NrEpcX2Header);
18NrEpcX2Header::NrEpcX2Header()
19 : m_messageType(0xfa),
20 m_procedureCode(0xfa),
26NrEpcX2Header::~NrEpcX2Header()
29 m_procedureCode = 0xfb;
35NrEpcX2Header::GetTypeId()
37 static TypeId tid = TypeId(
"ns3::NrEpcX2Header")
45NrEpcX2Header::GetInstanceTypeId()
const
51NrEpcX2Header::GetSerializedSize()
const
57NrEpcX2Header::Serialize(Buffer::Iterator start)
const
59 Buffer::Iterator i = start;
61 i.WriteU8(m_messageType);
62 i.WriteU8(m_procedureCode);
65 i.WriteU8(m_lengthOfIes + 3);
67 i.WriteU8(m_numberOfIes);
71NrEpcX2Header::Deserialize(Buffer::Iterator start)
73 Buffer::Iterator i = start;
75 m_messageType = i.ReadU8();
76 m_procedureCode = i.ReadU8();
79 m_lengthOfIes = i.ReadU8() - 3;
81 m_numberOfIes = i.ReadU8();
83 return GetSerializedSize();
87NrEpcX2Header::Print(std::ostream& os)
const
89 os <<
"MessageType=" << (uint32_t)m_messageType;
90 os <<
" ProcedureCode=" << (uint32_t)m_procedureCode;
91 os <<
" LengthOfIEs=" << (uint32_t)m_lengthOfIes;
92 os <<
" NumberOfIEs=" << (uint32_t)m_numberOfIes;
96NrEpcX2Header::GetMessageType()
const
102NrEpcX2Header::SetMessageType(uint8_t messageType)
104 m_messageType = messageType;
108NrEpcX2Header::GetProcedureCode()
const
110 return m_procedureCode;
114NrEpcX2Header::SetProcedureCode(uint8_t procedureCode)
116 m_procedureCode = procedureCode;
120NrEpcX2Header::SetLengthOfIes(uint32_t lengthOfIes)
122 m_lengthOfIes = lengthOfIes;
126NrEpcX2Header::SetNumberOfIes(uint32_t numberOfIes)
128 m_numberOfIes = numberOfIes;
135NrEpcX2HandoverRequestHeader::NrEpcX2HandoverRequestHeader()
136 : m_numberOfIes(1 + 1 + 1 + 1),
137 m_headerLength(6 + 5 + 12 + (3 + 4 + 8 + 8 + 4)),
138 m_oldGnbUeX2apId(0xfffa),
140 m_targetCellId(0xfffa),
141 m_mmeUeS1apId(0xfffffffa)
143 m_erabsToBeSetupList.clear();
146NrEpcX2HandoverRequestHeader::~NrEpcX2HandoverRequestHeader()
150 m_oldGnbUeX2apId = 0xfffb;
152 m_targetCellId = 0xfffb;
153 m_mmeUeS1apId = 0xfffffffb;
154 m_erabsToBeSetupList.clear();
160 static TypeId tid = TypeId(
"ns3::NrEpcX2HandoverRequestHeader")
168NrEpcX2HandoverRequestHeader::GetInstanceTypeId()
const
174NrEpcX2HandoverRequestHeader::GetSerializedSize()
const
176 return m_headerLength;
180NrEpcX2HandoverRequestHeader::Serialize(Buffer::Iterator start)
const
182 Buffer::Iterator i = start;
187 i.WriteHtonU16(m_oldGnbUeX2apId);
197 i.WriteHtonU32(0x123456);
198 i.WriteHtonU32(m_targetCellId << 4);
203 i.WriteHtonU32(m_mmeUeS1apId);
204 i.WriteHtonU64(m_ueAggregateMaxBitRateDownlink);
205 i.WriteHtonU64(m_ueAggregateMaxBitRateUplink);
207 std::vector<NrEpcX2Sap::ErabToBeSetupItem>::size_type sz = m_erabsToBeSetupList.size();
209 for (
int j = 0; j < (int)sz; j++)
211 i.WriteHtonU16(m_erabsToBeSetupList[j].erabId);
212 i.WriteHtonU16(m_erabsToBeSetupList[j].erabLevelQosParameters.qci);
213 i.WriteHtonU64(m_erabsToBeSetupList[j].erabLevelQosParameters.gbrQosInfo.gbrDl);
214 i.WriteHtonU64(m_erabsToBeSetupList[j].erabLevelQosParameters.gbrQosInfo.gbrUl);
215 i.WriteHtonU64(m_erabsToBeSetupList[j].erabLevelQosParameters.gbrQosInfo.mbrDl);
216 i.WriteHtonU64(m_erabsToBeSetupList[j].erabLevelQosParameters.gbrQosInfo.mbrUl);
217 i.WriteU8(m_erabsToBeSetupList[j].erabLevelQosParameters.arp.priorityLevel);
218 i.WriteU8(m_erabsToBeSetupList[j].erabLevelQosParameters.arp.preemptionCapability);
219 i.WriteU8(m_erabsToBeSetupList[j].erabLevelQosParameters.arp.preemptionVulnerability);
220 i.WriteU8(m_erabsToBeSetupList[j].dlForwarding);
221 i.WriteHtonU32(m_erabsToBeSetupList[j].transportLayerAddress.Get());
222 i.WriteHtonU32(m_erabsToBeSetupList[j].gtpTeid);
227NrEpcX2HandoverRequestHeader::Deserialize(Buffer::Iterator start)
229 Buffer::Iterator i = start;
237 m_oldGnbUeX2apId = i.ReadNtohU16();
244 m_cause = i.ReadU8();
252 m_targetCellId = i.ReadNtohU32() >> 4;
253 m_headerLength += 12;
258 m_mmeUeS1apId = i.ReadNtohU32();
259 m_ueAggregateMaxBitRateDownlink = i.ReadNtohU64();
260 m_ueAggregateMaxBitRateUplink = i.ReadNtohU64();
261 int sz = i.ReadNtohU32();
262 m_headerLength += 27;
265 for (
int j = 0; j < sz; j++)
267 NrEpcX2Sap::ErabToBeSetupItem erabItem;
269 erabItem.erabId = i.ReadNtohU16();
271 erabItem.erabLevelQosParameters = NrEpsBearer((
NrEpsBearer::Qci)i.ReadNtohU16());
272 erabItem.erabLevelQosParameters.gbrQosInfo.gbrDl = i.ReadNtohU64();
273 erabItem.erabLevelQosParameters.gbrQosInfo.gbrUl = i.ReadNtohU64();
274 erabItem.erabLevelQosParameters.gbrQosInfo.mbrDl = i.ReadNtohU64();
275 erabItem.erabLevelQosParameters.gbrQosInfo.mbrUl = i.ReadNtohU64();
276 erabItem.erabLevelQosParameters.arp.priorityLevel = i.ReadU8();
277 erabItem.erabLevelQosParameters.arp.preemptionCapability = i.ReadU8();
278 erabItem.erabLevelQosParameters.arp.preemptionVulnerability = i.ReadU8();
280 erabItem.dlForwarding = i.ReadU8();
281 erabItem.transportLayerAddress = Ipv4Address(i.ReadNtohU32());
282 erabItem.gtpTeid = i.ReadNtohU32();
284 m_erabsToBeSetupList.push_back(erabItem);
285 m_headerLength += 48;
288 return GetSerializedSize();
292NrEpcX2HandoverRequestHeader::Print(std::ostream& os)
const
294 os <<
"OldGnbUeX2apId = " << m_oldGnbUeX2apId;
295 os <<
" Cause = " << m_cause;
296 os <<
" TargetCellId = " << m_targetCellId;
297 os <<
" MmeUeS1apId = " << m_mmeUeS1apId;
298 os <<
" UeAggrMaxBitRateDownlink = " << m_ueAggregateMaxBitRateDownlink;
299 os <<
" UeAggrMaxBitRateUplink = " << m_ueAggregateMaxBitRateUplink;
300 os <<
" NumOfBearers = " << m_erabsToBeSetupList.size();
302 std::vector<NrEpcX2Sap::ErabToBeSetupItem>::size_type sz = m_erabsToBeSetupList.size();
307 for (
int j = 0; j < (int)sz; j++)
309 os << m_erabsToBeSetupList[j].erabId;
324 return m_oldGnbUeX2apId;
330 m_oldGnbUeX2apId = x2apId;
348 return m_targetCellId;
354 m_targetCellId = targetCellId;
360 return m_mmeUeS1apId;
366 m_mmeUeS1apId = mmeUeS1apId;
369std::vector<NrEpcX2Sap::ErabToBeSetupItem>
372 return m_erabsToBeSetupList;
378 m_headerLength += 48 * bearers.size();
379 m_erabsToBeSetupList = bearers;
385 return m_ueAggregateMaxBitRateDownlink;
391 m_ueAggregateMaxBitRateDownlink = bitRate;
397 return m_ueAggregateMaxBitRateUplink;
403 m_ueAggregateMaxBitRateUplink = bitRate;
409 return m_headerLength;
415 return m_numberOfIes;
422NrEpcX2HandoverRequestAckHeader::NrEpcX2HandoverRequestAckHeader()
423 : m_numberOfIes(1 + 1 + 1 + 1),
424 m_headerLength(2 + 2 + 4 + 4),
425 m_oldGnbUeX2apId(0xfffa),
426 m_newGnbUeX2apId(0xfffa)
430NrEpcX2HandoverRequestAckHeader::~NrEpcX2HandoverRequestAckHeader()
434 m_oldGnbUeX2apId = 0xfffb;
435 m_newGnbUeX2apId = 0xfffb;
436 m_erabsAdmittedList.clear();
437 m_erabsNotAdmittedList.clear();
443 static TypeId tid = TypeId(
"ns3::NrEpcX2HandoverRequestAckHeader")
451NrEpcX2HandoverRequestAckHeader::GetInstanceTypeId()
const
457NrEpcX2HandoverRequestAckHeader::GetSerializedSize()
const
459 return m_headerLength;
463NrEpcX2HandoverRequestAckHeader::Serialize(Buffer::Iterator start)
const
465 Buffer::Iterator i = start;
467 i.WriteHtonU16(m_oldGnbUeX2apId);
468 i.WriteHtonU16(m_newGnbUeX2apId);
470 std::vector<NrEpcX2Sap::ErabAdmittedItem>::size_type sz = m_erabsAdmittedList.size();
472 for (
int j = 0; j < (int)sz; j++)
474 i.WriteHtonU16(m_erabsAdmittedList[j].erabId);
475 i.WriteHtonU32(m_erabsAdmittedList[j].ulGtpTeid);
476 i.WriteHtonU32(m_erabsAdmittedList[j].dlGtpTeid);
479 std::vector<NrEpcX2Sap::ErabNotAdmittedItem>::size_type sz2 = m_erabsNotAdmittedList.size();
481 for (
int j = 0; j < (int)sz2; j++)
483 i.WriteHtonU16(m_erabsNotAdmittedList[j].erabId);
484 i.WriteHtonU16(m_erabsNotAdmittedList[j].cause);
489NrEpcX2HandoverRequestAckHeader::Deserialize(Buffer::Iterator start)
491 Buffer::Iterator i = start;
496 m_oldGnbUeX2apId = i.ReadNtohU16();
497 m_newGnbUeX2apId = i.ReadNtohU16();
501 int sz = i.ReadNtohU32();
505 for (
int j = 0; j < sz; j++)
507 NrEpcX2Sap::ErabAdmittedItem erabItem;
509 erabItem.erabId = i.ReadNtohU16();
510 erabItem.ulGtpTeid = i.ReadNtohU32();
511 erabItem.dlGtpTeid = i.ReadNtohU32();
513 m_erabsAdmittedList.push_back(erabItem);
514 m_headerLength += 10;
517 sz = i.ReadNtohU32();
521 for (
int j = 0; j < sz; j++)
523 NrEpcX2Sap::ErabNotAdmittedItem erabItem;
525 erabItem.erabId = i.ReadNtohU16();
526 erabItem.cause = i.ReadNtohU16();
528 m_erabsNotAdmittedList.push_back(erabItem);
532 return GetSerializedSize();
536NrEpcX2HandoverRequestAckHeader::Print(std::ostream& os)
const
538 os <<
"OldGnbUeX2apId=" << m_oldGnbUeX2apId;
539 os <<
" NewGnbUeX2apId=" << m_newGnbUeX2apId;
541 os <<
" AdmittedBearers=" << m_erabsAdmittedList.size();
542 std::vector<NrEpcX2Sap::ErabAdmittedItem>::size_type sz = m_erabsAdmittedList.size();
547 for (
int j = 0; j < (int)sz; j++)
549 os << m_erabsAdmittedList[j].erabId;
560 os <<
" NotAdmittedBearers=" << m_erabsNotAdmittedList.size();
561 std::vector<NrEpcX2Sap::ErabNotAdmittedItem>::size_type sz2 = m_erabsNotAdmittedList.size();
566 for (
int j = 0; j < (int)sz2; j++)
568 os << m_erabsNotAdmittedList[j].erabId;
569 if (j < (
int)sz2 - 1)
583 return m_oldGnbUeX2apId;
589 m_oldGnbUeX2apId = x2apId;
595 return m_newGnbUeX2apId;
601 m_newGnbUeX2apId = x2apId;
604std::vector<NrEpcX2Sap::ErabAdmittedItem>
607 return m_erabsAdmittedList;
612 std::vector<NrEpcX2Sap::ErabAdmittedItem> bearers)
614 m_headerLength += 10 * bearers.size();
615 m_erabsAdmittedList = bearers;
618std::vector<NrEpcX2Sap::ErabNotAdmittedItem>
621 return m_erabsNotAdmittedList;
626 std::vector<NrEpcX2Sap::ErabNotAdmittedItem> bearers)
628 m_headerLength += 4 * bearers.size();
629 m_erabsNotAdmittedList = bearers;
635 return m_headerLength;
641 return m_numberOfIes;
648NrEpcX2HandoverPreparationFailureHeader::NrEpcX2HandoverPreparationFailureHeader()
649 : m_numberOfIes(1 + 1 + 1),
650 m_headerLength(2 + 2 + 2),
651 m_oldGnbUeX2apId(0xfffa),
653 m_criticalityDiagnostics(0xfffa)
657NrEpcX2HandoverPreparationFailureHeader::~NrEpcX2HandoverPreparationFailureHeader()
661 m_oldGnbUeX2apId = 0xfffb;
663 m_criticalityDiagnostics = 0xfffb;
669 static TypeId tid = TypeId(
"ns3::NrEpcX2HandoverPreparationFailureHeader")
677NrEpcX2HandoverPreparationFailureHeader::GetInstanceTypeId()
const
683NrEpcX2HandoverPreparationFailureHeader::GetSerializedSize()
const
685 return m_headerLength;
689NrEpcX2HandoverPreparationFailureHeader::Serialize(Buffer::Iterator start)
const
691 Buffer::Iterator i = start;
693 i.WriteHtonU16(m_oldGnbUeX2apId);
694 i.WriteHtonU16(m_cause);
695 i.WriteHtonU16(m_criticalityDiagnostics);
699NrEpcX2HandoverPreparationFailureHeader::Deserialize(Buffer::Iterator start)
701 Buffer::Iterator i = start;
703 m_oldGnbUeX2apId = i.ReadNtohU16();
704 m_cause = i.ReadNtohU16();
705 m_criticalityDiagnostics = i.ReadNtohU16();
710 return GetSerializedSize();
714NrEpcX2HandoverPreparationFailureHeader::Print(std::ostream& os)
const
716 os <<
"OldGnbUeX2apId = " << m_oldGnbUeX2apId;
717 os <<
" Cause = " << m_cause;
718 os <<
" CriticalityDiagnostics = " << m_criticalityDiagnostics;
724 return m_oldGnbUeX2apId;
730 m_oldGnbUeX2apId = x2apId;
748 return m_criticalityDiagnostics;
754 m_criticalityDiagnostics = criticalityDiagnostics;
760 return m_headerLength;
766 return m_numberOfIes;
773NrEpcX2SnStatusTransferHeader::NrEpcX2SnStatusTransferHeader()
776 m_oldGnbUeX2apId(0xfffa),
777 m_newGnbUeX2apId(0xfffa)
779 m_erabsSubjectToStatusTransferList.clear();
782NrEpcX2SnStatusTransferHeader::~NrEpcX2SnStatusTransferHeader()
786 m_oldGnbUeX2apId = 0xfffb;
787 m_newGnbUeX2apId = 0xfffb;
788 m_erabsSubjectToStatusTransferList.clear();
794 static TypeId tid = TypeId(
"ns3::NrEpcX2SnStatusTransferHeader")
802NrEpcX2SnStatusTransferHeader::GetInstanceTypeId()
const
808NrEpcX2SnStatusTransferHeader::GetSerializedSize()
const
810 return m_headerLength;
814NrEpcX2SnStatusTransferHeader::Serialize(Buffer::Iterator start)
const
816 Buffer::Iterator i = start;
818 i.WriteHtonU16(m_oldGnbUeX2apId);
819 i.WriteHtonU16(m_newGnbUeX2apId);
821 std::vector<NrEpcX2Sap::ErabsSubjectToStatusTransferItem>::size_type sz =
822 m_erabsSubjectToStatusTransferList.size();
825 for (
int j = 0; j < (int)sz; j++)
827 NrEpcX2Sap::ErabsSubjectToStatusTransferItem item = m_erabsSubjectToStatusTransferList[j];
829 i.WriteHtonU16(item.erabId);
832 for (
int k = 0; k < bitsetSize; k++)
834 uint64_t statusValue = 0;
835 for (
int m = 0; m < 64; m++)
837 statusValue |= item.receiveStatusOfUlPdcpSdus[64 * k + m] << m;
839 i.WriteHtonU64(statusValue);
842 i.WriteHtonU16(item.ulPdcpSn);
843 i.WriteHtonU32(item.ulHfn);
844 i.WriteHtonU16(item.dlPdcpSn);
845 i.WriteHtonU32(item.dlHfn);
850NrEpcX2SnStatusTransferHeader::Deserialize(Buffer::Iterator start)
852 Buffer::Iterator i = start;
854 m_oldGnbUeX2apId = i.ReadNtohU16();
855 m_newGnbUeX2apId = i.ReadNtohU16();
856 int sz = i.ReadNtohU16();
861 for (
int j = 0; j < sz; j++)
863 NrEpcX2Sap::ErabsSubjectToStatusTransferItem ErabItem;
864 ErabItem.erabId = i.ReadNtohU16();
867 for (
int k = 0; k < bitsetSize; k++)
869 uint64_t statusValue = i.ReadNtohU64();
870 for (
int m = 0; m < 64; m++)
872 ErabItem.receiveStatusOfUlPdcpSdus[64 * k + m] = (statusValue >> m) & 1;
876 ErabItem.ulPdcpSn = i.ReadNtohU16();
877 ErabItem.ulHfn = i.ReadNtohU32();
878 ErabItem.dlPdcpSn = i.ReadNtohU16();
879 ErabItem.dlHfn = i.ReadNtohU32();
881 m_erabsSubjectToStatusTransferList.push_back(ErabItem);
884 return GetSerializedSize();
888NrEpcX2SnStatusTransferHeader::Print(std::ostream& os)
const
890 os <<
"OldGnbUeX2apId = " << m_oldGnbUeX2apId;
891 os <<
" NewGnbUeX2apId = " << m_newGnbUeX2apId;
892 os <<
" ErabsSubjectToStatusTransferList size = " << m_erabsSubjectToStatusTransferList.size();
894 std::vector<NrEpcX2Sap::ErabsSubjectToStatusTransferItem>::size_type sz =
895 m_erabsSubjectToStatusTransferList.size();
900 for (
int j = 0; j < (int)sz; j++)
902 os << m_erabsSubjectToStatusTransferList[j].erabId;
917 return m_oldGnbUeX2apId;
923 m_oldGnbUeX2apId = x2apId;
929 return m_newGnbUeX2apId;
935 m_newGnbUeX2apId = x2apId;
938std::vector<NrEpcX2Sap::ErabsSubjectToStatusTransferItem>
941 return m_erabsSubjectToStatusTransferList;
946 std::vector<NrEpcX2Sap::ErabsSubjectToStatusTransferItem> erabs)
949 m_erabsSubjectToStatusTransferList = erabs;
955 return m_headerLength;
961 return m_numberOfIes;
968NrEpcX2UeContextReleaseHeader::NrEpcX2UeContextReleaseHeader()
969 : m_numberOfIes(1 + 1),
970 m_headerLength(2 + 2),
971 m_oldGnbUeX2apId(0xfffa),
972 m_newGnbUeX2apId(0xfffa)
976NrEpcX2UeContextReleaseHeader::~NrEpcX2UeContextReleaseHeader()
980 m_oldGnbUeX2apId = 0xfffb;
981 m_newGnbUeX2apId = 0xfffb;
987 static TypeId tid = TypeId(
"ns3::NrEpcX2UeContextReleaseHeader")
995NrEpcX2UeContextReleaseHeader::GetInstanceTypeId()
const
1001NrEpcX2UeContextReleaseHeader::GetSerializedSize()
const
1003 return m_headerLength;
1007NrEpcX2UeContextReleaseHeader::Serialize(Buffer::Iterator start)
const
1009 Buffer::Iterator i = start;
1011 i.WriteHtonU16(m_oldGnbUeX2apId);
1012 i.WriteHtonU16(m_newGnbUeX2apId);
1016NrEpcX2UeContextReleaseHeader::Deserialize(Buffer::Iterator start)
1018 Buffer::Iterator i = start;
1020 m_oldGnbUeX2apId = i.ReadNtohU16();
1021 m_newGnbUeX2apId = i.ReadNtohU16();
1025 return GetSerializedSize();
1029NrEpcX2UeContextReleaseHeader::Print(std::ostream& os)
const
1031 os <<
"OldGnbUeX2apId=" << m_oldGnbUeX2apId;
1032 os <<
" NewGnbUeX2apId=" << m_newGnbUeX2apId;
1038 return m_oldGnbUeX2apId;
1044 m_oldGnbUeX2apId = x2apId;
1050 return m_newGnbUeX2apId;
1056 m_newGnbUeX2apId = x2apId;
1062 return m_headerLength;
1068 return m_numberOfIes;
1075NrEpcX2LoadInformationHeader::NrEpcX2LoadInformationHeader()
1079 m_cellInformationList.clear();
1082NrEpcX2LoadInformationHeader::~NrEpcX2LoadInformationHeader()
1086 m_cellInformationList.clear();
1092 static TypeId tid = TypeId(
"ns3::NrEpcX2LoadInformationHeader")
1093 .SetParent<Header>()
1100NrEpcX2LoadInformationHeader::GetInstanceTypeId()
const
1106NrEpcX2LoadInformationHeader::GetSerializedSize()
const
1108 return m_headerLength;
1112NrEpcX2LoadInformationHeader::Serialize(Buffer::Iterator start)
const
1114 Buffer::Iterator i = start;
1120 std::vector<NrEpcX2Sap::CellInformationItem>::size_type sz = m_cellInformationList.size();
1123 for (
int j = 0; j < (int)sz; j++)
1125 i.WriteHtonU16(m_cellInformationList[j].sourceCellId);
1127 std::vector<NrEpcX2Sap::UlInterferenceOverloadIndicationItem>::size_type sz2;
1128 sz2 = m_cellInformationList[j].ulInterferenceOverloadIndicationList.size();
1129 i.WriteHtonU16(sz2);
1131 for (
int k = 0; k < (int)sz2; k++)
1133 i.WriteU8(m_cellInformationList[j].ulInterferenceOverloadIndicationList[k]);
1136 std::vector<NrEpcX2Sap::UlHighInterferenceInformationItem>::size_type sz3;
1137 sz3 = m_cellInformationList[j].ulHighInterferenceInformationList.size();
1138 i.WriteHtonU16(sz3);
1140 for (
int k = 0; k < (int)sz3; k++)
1143 m_cellInformationList[j].ulHighInterferenceInformationList[k].targetCellId);
1145 std::vector<bool>::size_type sz4;
1146 sz4 = m_cellInformationList[j]
1147 .ulHighInterferenceInformationList[k]
1148 .ulHighInterferenceIndicationList.size();
1149 i.WriteHtonU16(sz4);
1151 for (
int m = 0; m < (int)sz4; m++)
1153 i.WriteU8(m_cellInformationList[j]
1154 .ulHighInterferenceInformationList[k]
1155 .ulHighInterferenceIndicationList[m]);
1159 std::vector<bool>::size_type sz5;
1160 sz5 = m_cellInformationList[j].relativeNarrowbandTxBand.rntpPerPrbList.size();
1161 i.WriteHtonU16(sz5);
1163 for (
int k = 0; k < (int)sz5; k++)
1165 i.WriteU8(m_cellInformationList[j].relativeNarrowbandTxBand.rntpPerPrbList[k]);
1168 i.WriteHtonU16(m_cellInformationList[j].relativeNarrowbandTxBand.rntpThreshold);
1169 i.WriteHtonU16(m_cellInformationList[j].relativeNarrowbandTxBand.antennaPorts);
1170 i.WriteHtonU16(m_cellInformationList[j].relativeNarrowbandTxBand.pB);
1171 i.WriteHtonU16(m_cellInformationList[j].relativeNarrowbandTxBand.pdcchInterferenceImpact);
1176NrEpcX2LoadInformationHeader::Deserialize(Buffer::Iterator start)
1178 Buffer::Iterator i = start;
1186 int sz = i.ReadNtohU16();
1187 m_headerLength += 6;
1190 for (
int j = 0; j < sz; j++)
1192 NrEpcX2Sap::CellInformationItem cellInfoItem;
1193 cellInfoItem.sourceCellId = i.ReadNtohU16();
1194 m_headerLength += 2;
1196 int sz2 = i.ReadNtohU16();
1197 m_headerLength += 2;
1198 for (
int k = 0; k < sz2; k++)
1201 cellInfoItem.ulInterferenceOverloadIndicationList.push_back(item);
1203 m_headerLength += sz2;
1205 int sz3 = i.ReadNtohU16();
1206 m_headerLength += 2;
1207 for (
int k = 0; k < sz3; k++)
1209 NrEpcX2Sap::UlHighInterferenceInformationItem item;
1210 item.targetCellId = i.ReadNtohU16();
1211 m_headerLength += 2;
1213 int sz4 = i.ReadNtohU16();
1214 m_headerLength += 2;
1215 for (
int m = 0; m < sz4; m++)
1217 item.ulHighInterferenceIndicationList.push_back(i.ReadU8());
1219 m_headerLength += sz4;
1221 cellInfoItem.ulHighInterferenceInformationList.push_back(item);
1224 int sz5 = i.ReadNtohU16();
1225 m_headerLength += 2;
1226 for (
int k = 0; k < sz5; k++)
1228 cellInfoItem.relativeNarrowbandTxBand.rntpPerPrbList.push_back(i.ReadU8());
1230 m_headerLength += sz5;
1232 cellInfoItem.relativeNarrowbandTxBand.rntpThreshold = i.ReadNtohU16();
1233 cellInfoItem.relativeNarrowbandTxBand.antennaPorts = i.ReadNtohU16();
1234 cellInfoItem.relativeNarrowbandTxBand.pB = i.ReadNtohU16();
1235 cellInfoItem.relativeNarrowbandTxBand.pdcchInterferenceImpact = i.ReadNtohU16();
1236 m_headerLength += 8;
1238 m_cellInformationList.push_back(cellInfoItem);
1241 return GetSerializedSize();
1245NrEpcX2LoadInformationHeader::Print(std::ostream& os)
const
1247 os <<
"NumOfCellInformationItems=" << m_cellInformationList.size();
1250std::vector<NrEpcX2Sap::CellInformationItem>
1253 return m_cellInformationList;
1258 std::vector<NrEpcX2Sap::CellInformationItem> cellInformationList)
1260 m_cellInformationList = cellInformationList;
1261 m_headerLength += 2;
1263 std::vector<NrEpcX2Sap::CellInformationItem>::size_type sz = m_cellInformationList.size();
1264 for (
int j = 0; j < (int)sz; j++)
1266 m_headerLength += 2;
1268 std::vector<NrEpcX2Sap::UlInterferenceOverloadIndicationItem>::size_type sz2;
1269 sz2 = m_cellInformationList[j].ulInterferenceOverloadIndicationList.size();
1270 m_headerLength += 2 + sz2;
1272 std::vector<NrEpcX2Sap::UlHighInterferenceInformationItem>::size_type sz3;
1273 sz3 = m_cellInformationList[j].ulHighInterferenceInformationList.size();
1274 m_headerLength += 2;
1276 for (
int k = 0; k < (int)sz3; k++)
1278 std::vector<bool>::size_type sz4;
1279 sz4 = m_cellInformationList[j]
1280 .ulHighInterferenceInformationList[k]
1281 .ulHighInterferenceIndicationList.size();
1282 m_headerLength += 2 + 2 + sz4;
1285 std::vector<bool>::size_type sz5;
1286 sz5 = m_cellInformationList[j].relativeNarrowbandTxBand.rntpPerPrbList.size();
1287 m_headerLength += 2 + sz5 + 8;
1294 return m_headerLength;
1300 return m_numberOfIes;
1307NrEpcX2ResourceStatusUpdateHeader::NrEpcX2ResourceStatusUpdateHeader()
1310 m_gnb1MeasurementId(0xfffa),
1311 m_gnb2MeasurementId(0xfffa)
1313 m_cellMeasurementResultList.clear();
1316NrEpcX2ResourceStatusUpdateHeader::~NrEpcX2ResourceStatusUpdateHeader()
1320 m_gnb1MeasurementId = 0xfffb;
1321 m_gnb2MeasurementId = 0xfffb;
1322 m_cellMeasurementResultList.clear();
1328 static TypeId tid = TypeId(
"ns3::NrEpcX2ResourceStatusUpdateHeader")
1329 .SetParent<Header>()
1336NrEpcX2ResourceStatusUpdateHeader::GetInstanceTypeId()
const
1342NrEpcX2ResourceStatusUpdateHeader::GetSerializedSize()
const
1344 return m_headerLength;
1348NrEpcX2ResourceStatusUpdateHeader::Serialize(Buffer::Iterator start)
const
1350 Buffer::Iterator i = start;
1352 i.WriteHtonU16(m_gnb1MeasurementId);
1353 i.WriteHtonU16(m_gnb2MeasurementId);
1355 std::vector<NrEpcX2Sap::CellMeasurementResultItem>::size_type sz =
1356 m_cellMeasurementResultList.size();
1359 for (
int j = 0; j < (int)sz; j++)
1361 NrEpcX2Sap::CellMeasurementResultItem item = m_cellMeasurementResultList[j];
1363 i.WriteHtonU16(item.sourceCellId);
1364 i.WriteU8(item.dlHardwareLoadIndicator);
1365 i.WriteU8(item.ulHardwareLoadIndicator);
1366 i.WriteU8(item.dlS1TnlLoadIndicator);
1367 i.WriteU8(item.ulS1TnlLoadIndicator);
1369 i.WriteHtonU16(item.dlGbrPrbUsage);
1370 i.WriteHtonU16(item.ulGbrPrbUsage);
1371 i.WriteHtonU16(item.dlNonGbrPrbUsage);
1372 i.WriteHtonU16(item.ulNonGbrPrbUsage);
1373 i.WriteHtonU16(item.dlTotalPrbUsage);
1374 i.WriteHtonU16(item.ulTotalPrbUsage);
1376 i.WriteHtonU16(item.dlCompositeAvailableCapacity.cellCapacityClassValue);
1377 i.WriteHtonU16(item.dlCompositeAvailableCapacity.capacityValue);
1378 i.WriteHtonU16(item.ulCompositeAvailableCapacity.cellCapacityClassValue);
1379 i.WriteHtonU16(item.ulCompositeAvailableCapacity.capacityValue);
1384NrEpcX2ResourceStatusUpdateHeader::Deserialize(Buffer::Iterator start)
1386 Buffer::Iterator i = start;
1388 m_gnb1MeasurementId = i.ReadNtohU16();
1389 m_gnb2MeasurementId = i.ReadNtohU16();
1391 int sz = i.ReadNtohU16();
1392 for (
int j = 0; j < sz; j++)
1394 NrEpcX2Sap::CellMeasurementResultItem item;
1396 item.sourceCellId = i.ReadNtohU16();
1402 item.dlGbrPrbUsage = i.ReadNtohU16();
1403 item.ulGbrPrbUsage = i.ReadNtohU16();
1404 item.dlNonGbrPrbUsage = i.ReadNtohU16();
1405 item.ulNonGbrPrbUsage = i.ReadNtohU16();
1406 item.dlTotalPrbUsage = i.ReadNtohU16();
1407 item.ulTotalPrbUsage = i.ReadNtohU16();
1409 item.dlCompositeAvailableCapacity.cellCapacityClassValue = i.ReadNtohU16();
1410 item.dlCompositeAvailableCapacity.capacityValue = i.ReadNtohU16();
1411 item.ulCompositeAvailableCapacity.cellCapacityClassValue = i.ReadNtohU16();
1412 item.ulCompositeAvailableCapacity.capacityValue = i.ReadNtohU16();
1414 m_cellMeasurementResultList.push_back(item);
1417 m_headerLength = 6 + sz * 26;
1420 return GetSerializedSize();
1424NrEpcX2ResourceStatusUpdateHeader::Print(std::ostream& os)
const
1426 os <<
"Gnb1MeasurementId = " << m_gnb1MeasurementId
1427 <<
" Gnb2MeasurementId = " << m_gnb2MeasurementId
1428 <<
" NumOfCellMeasurementResultItems = " << m_cellMeasurementResultList.size();
1434 return m_gnb1MeasurementId;
1440 m_gnb1MeasurementId = gnb1MeasurementId;
1446 return m_gnb2MeasurementId;
1452 m_gnb2MeasurementId = gnb2MeasurementId;
1455std::vector<NrEpcX2Sap::CellMeasurementResultItem>
1458 return m_cellMeasurementResultList;
1463 std::vector<NrEpcX2Sap::CellMeasurementResultItem> cellMeasurementResultList)
1465 m_cellMeasurementResultList = cellMeasurementResultList;
1467 std::vector<NrEpcX2Sap::CellMeasurementResultItem>::size_type sz =
1468 m_cellMeasurementResultList.size();
1469 m_headerLength += sz * 26;
1475 return m_headerLength;
1481 return m_numberOfIes;
1488NrEpcX2HandoverCancelHeader::NrEpcX2HandoverCancelHeader()
1491 m_oldGnbUeX2apId(0xfffa),
1492 m_newGnbUeX2apId(0xfffa),
1497NrEpcX2HandoverCancelHeader::~NrEpcX2HandoverCancelHeader()
1501 m_oldGnbUeX2apId = 0xfffb;
1502 m_newGnbUeX2apId = 0xfffb;
1509 static TypeId tid = TypeId(
"ns3::NrEpcX2HandoverCancelHeader")
1510 .SetParent<Header>()
1517NrEpcX2HandoverCancelHeader::GetInstanceTypeId()
const
1523NrEpcX2HandoverCancelHeader::GetSerializedSize()
const
1525 return m_headerLength;
1529NrEpcX2HandoverCancelHeader::Serialize(Buffer::Iterator start)
const
1531 Buffer::Iterator i = start;
1533 i.WriteHtonU16(m_oldGnbUeX2apId);
1534 i.WriteHtonU16(m_newGnbUeX2apId);
1535 i.WriteHtonU16(m_cause);
1539NrEpcX2HandoverCancelHeader::Deserialize(Buffer::Iterator start)
1541 Buffer::Iterator i = start;
1543 m_oldGnbUeX2apId = i.ReadNtohU16();
1544 m_newGnbUeX2apId = i.ReadNtohU16();
1545 m_cause = i.ReadNtohU16();
1549 return GetSerializedSize();
1553NrEpcX2HandoverCancelHeader::Print(std::ostream& os)
const
1555 os <<
"OldGnbUeX2apId=" << m_oldGnbUeX2apId;
1556 os <<
" NewGnbUeX2apId=" << m_newGnbUeX2apId;
1557 os <<
" Cause = " << m_cause;
1563 return m_oldGnbUeX2apId;
1569 m_oldGnbUeX2apId = x2apId;
1575 return m_newGnbUeX2apId;
1581 m_newGnbUeX2apId = x2apId;
1599 return m_headerLength;
1605 return m_numberOfIes;
uint32_t GetLengthOfIes() const
Get length of IEs function.
void SetNewGnbUeX2apId(uint16_t x2apId)
Set new gNB UE X2 AP ID function.
uint32_t GetNumberOfIes() const
Get number of IEs function.
void SetOldGnbUeX2apId(uint16_t x2apId)
Set old gNB UE X2 AP ID function.
uint16_t GetNewGnbUeX2apId() const
Get new gNB UE X2 AP ID function.
static TypeId GetTypeId()
Get the type ID.
void SetCause(uint16_t cause)
Set cause function.
uint16_t GetCause() const
Get cause function.
uint16_t GetOldGnbUeX2apId() const
Get old gNB UE X2 AP ID function.
uint32_t GetNumberOfIes() const
static TypeId GetTypeId()
Get the type ID.
uint32_t GetLengthOfIes() const
uint16_t GetCriticalityDiagnostics() const
uint16_t GetOldGnbUeX2apId() const
void SetCriticalityDiagnostics(uint16_t criticalityDiagnostics)
void SetOldGnbUeX2apId(uint16_t x2apId)
uint16_t GetCause() const
void SetCause(uint16_t cause)
std::vector< NrEpcX2Sap::ErabAdmittedItem > GetAdmittedBearers() const
uint16_t GetOldGnbUeX2apId() const
uint32_t GetLengthOfIes() const
void SetNotAdmittedBearers(std::vector< NrEpcX2Sap::ErabNotAdmittedItem > bearers)
void SetAdmittedBearers(std::vector< NrEpcX2Sap::ErabAdmittedItem > bearers)
std::vector< NrEpcX2Sap::ErabNotAdmittedItem > GetNotAdmittedBearers() const
void SetNewGnbUeX2apId(uint16_t x2apId)
void SetOldGnbUeX2apId(uint16_t x2apId)
uint32_t GetNumberOfIes() const
uint16_t GetNewGnbUeX2apId() const
static TypeId GetTypeId()
Get the type ID.
uint32_t GetNumberOfIes() const
void SetTargetCellId(uint16_t targetCellId)
uint16_t GetOldGnbUeX2apId() const
void SetUeAggregateMaxBitRateDownlink(uint64_t bitRate)
void SetOldGnbUeX2apId(uint16_t x2apId)
void SetMmeUeS1apId(uint32_t mmeUeS1apId)
uint64_t GetUeAggregateMaxBitRateUplink() const
void SetBearers(std::vector< NrEpcX2Sap::ErabToBeSetupItem > bearers)
uint32_t GetLengthOfIes() const
void SetUeAggregateMaxBitRateUplink(uint64_t bitRate)
void SetCause(uint16_t cause)
uint16_t GetTargetCellId() const
static TypeId GetTypeId()
Get the type ID.
uint16_t GetCause() const
uint64_t GetUeAggregateMaxBitRateDownlink() const
std::vector< NrEpcX2Sap::ErabToBeSetupItem > GetBearers() const
uint32_t GetMmeUeS1apId() const
UlInterferenceOverloadIndicationItem
static const uint16_t m_maxPdcpSn