22 #include "ns3/epc-x2-header.h"
30 NS_OBJECT_ENSURE_REGISTERED (EpcX2Header);
32 EpcX2Header::EpcX2Header ()
33 : m_messageType (0xfa),
34 m_procedureCode (0xfa),
40 EpcX2Header::~EpcX2Header ()
43 m_procedureCode = 0xfb;
49 EpcX2Header::GetTypeId (
void)
51 static TypeId tid = TypeId (
"ns3::EpcX2Header")
53 .AddConstructor<EpcX2Header> ()
89 m_messageType = i.
ReadU8 ();
90 m_procedureCode = i.
ReadU8 ();
93 m_lengthOfIes = i.
ReadU8 () - 3;
95 m_numberOfIes = i.
ReadU8 ();
97 return GetSerializedSize ();
103 os <<
"MessageType=" << (uint32_t) m_messageType;
104 os <<
" ProcedureCode=" << (uint32_t) m_procedureCode;
105 os <<
" LengthOfIEs=" << (uint32_t) m_lengthOfIes;
106 os <<
" NumberOfIEs=" << (uint32_t) m_numberOfIes;
110 EpcX2Header::GetMessageType ()
const
112 return m_messageType;
116 EpcX2Header::SetMessageType (uint8_t messageType)
118 m_messageType = messageType;
122 EpcX2Header::GetProcedureCode ()
const
124 return m_procedureCode;
128 EpcX2Header::SetProcedureCode (uint8_t procedureCode)
130 m_procedureCode = procedureCode;
135 EpcX2Header::SetLengthOfIes (uint32_t lengthOfIes)
137 m_lengthOfIes = lengthOfIes;
141 EpcX2Header::SetNumberOfIes (uint32_t numberOfIes)
143 m_numberOfIes = numberOfIes;
148 NS_OBJECT_ENSURE_REGISTERED (EpcX2HandoverRequestHeader);
150 EpcX2HandoverRequestHeader::EpcX2HandoverRequestHeader ()
151 : m_numberOfIes (1 + 1 + 1 + 1),
152 m_headerLength (6 + 5 + 12 + (3 + 4 + 8 + 8 + 4)),
153 m_oldEnbUeX2apId (0xfffa),
155 m_targetCellId (0xfffa),
156 m_mmeUeS1apId (0xfffffffa)
158 m_erabsToBeSetupList.clear ();
161 EpcX2HandoverRequestHeader::~EpcX2HandoverRequestHeader ()
165 m_oldEnbUeX2apId = 0xfffb;
167 m_targetCellId = 0xfffb;
168 m_mmeUeS1apId = 0xfffffffb;
169 m_erabsToBeSetupList.clear ();
173 EpcX2HandoverRequestHeader::GetTypeId (
void)
175 static TypeId tid = TypeId (
"ns3::EpcX2HandoverRequestHeader")
176 .SetParent<Header> ()
177 .AddConstructor<EpcX2HandoverRequestHeader> ()
191 return m_headerLength;
222 std::vector <EpcX2Sap::ErabToBeSetupItem>::size_type sz = m_erabsToBeSetupList.size ();
224 for (
int j = 0; j < (int) sz; j++)
227 i.
WriteHtonU16 (m_erabsToBeSetupList [j].erabLevelQosParameters.qci);
228 i.
WriteHtonU64 (m_erabsToBeSetupList [j].erabLevelQosParameters.gbrQosInfo.gbrDl);
229 i.
WriteHtonU64 (m_erabsToBeSetupList [j].erabLevelQosParameters.gbrQosInfo.gbrUl);
230 i.
WriteHtonU64 (m_erabsToBeSetupList [j].erabLevelQosParameters.gbrQosInfo.mbrDl);
231 i.
WriteHtonU64 (m_erabsToBeSetupList [j].erabLevelQosParameters.gbrQosInfo.mbrUl);
232 i.
WriteU8 (m_erabsToBeSetupList [j].erabLevelQosParameters.arp.priorityLevel);
233 i.
WriteU8 (m_erabsToBeSetupList [j].erabLevelQosParameters.arp.preemptionCapability);
234 i.
WriteU8 (m_erabsToBeSetupList [j].erabLevelQosParameters.arp.preemptionVulnerability);
235 i.
WriteU8 (m_erabsToBeSetupList [j].dlForwarding);
236 i.
WriteHtonU32 (m_erabsToBeSetupList [j].transportLayerAddress.Get ());
269 m_headerLength += 12;
275 m_ueAggregateMaxBitRateDownlink = i.
ReadNtohU64 ();
278 m_headerLength += 27;
281 for (
int j = 0; j < sz; j++)
292 erabItem.erabLevelQosParameters.arp.priorityLevel = i.
ReadU8 ();
293 erabItem.erabLevelQosParameters.arp.preemptionCapability = i.
ReadU8 ();
294 erabItem.erabLevelQosParameters.arp.preemptionVulnerability = i.
ReadU8 ();
296 erabItem.dlForwarding = i.
ReadU8 ();
300 m_erabsToBeSetupList.push_back (erabItem);
301 m_headerLength += 48;
310 os <<
"OldEnbUeX2apId = " << m_oldEnbUeX2apId;
311 os <<
" Cause = " << m_cause;
312 os <<
" TargetCellId = " << m_targetCellId;
313 os <<
" MmeUeS1apId = " << m_mmeUeS1apId;
314 os <<
" UeAggrMaxBitRateDownlink = " << m_ueAggregateMaxBitRateDownlink;
315 os <<
" UeAggrMaxBitRateUplink = " << m_ueAggregateMaxBitRateUplink;
316 os <<
" NumOfBearers = " << m_erabsToBeSetupList.size ();
318 std::vector <EpcX2Sap::ErabToBeSetupItem>::size_type sz = m_erabsToBeSetupList.size ();
323 for (
int j = 0; j < (int) sz; j++)
325 os << m_erabsToBeSetupList[j].erabId;
326 if (j < (
int) sz - 1)
338 EpcX2HandoverRequestHeader::GetOldEnbUeX2apId ()
const
340 return m_oldEnbUeX2apId;
344 EpcX2HandoverRequestHeader::SetOldEnbUeX2apId (uint16_t x2apId)
346 m_oldEnbUeX2apId = x2apId;
350 EpcX2HandoverRequestHeader::GetCause ()
const
356 EpcX2HandoverRequestHeader::SetCause (uint16_t cause)
362 EpcX2HandoverRequestHeader::GetTargetCellId ()
const
364 return m_targetCellId;
368 EpcX2HandoverRequestHeader::SetTargetCellId (uint16_t targetCellId)
370 m_targetCellId = targetCellId;
374 EpcX2HandoverRequestHeader::GetMmeUeS1apId ()
const
376 return m_mmeUeS1apId;
380 EpcX2HandoverRequestHeader::SetMmeUeS1apId (uint32_t mmeUeS1apId)
382 m_mmeUeS1apId = mmeUeS1apId;
385 std::vector <EpcX2Sap::ErabToBeSetupItem>
386 EpcX2HandoverRequestHeader::GetBearers ()
const
388 return m_erabsToBeSetupList;
392 EpcX2HandoverRequestHeader::SetBearers (std::vector <EpcX2Sap::ErabToBeSetupItem> bearers)
394 m_headerLength += 48 * bearers.size ();
395 m_erabsToBeSetupList = bearers;
399 EpcX2HandoverRequestHeader::GetUeAggregateMaxBitRateDownlink ()
const
401 return m_ueAggregateMaxBitRateDownlink;
405 EpcX2HandoverRequestHeader::SetUeAggregateMaxBitRateDownlink (uint64_t bitRate)
407 m_ueAggregateMaxBitRateDownlink = bitRate;
411 EpcX2HandoverRequestHeader::GetUeAggregateMaxBitRateUplink ()
const
413 return m_ueAggregateMaxBitRateUplink;
417 EpcX2HandoverRequestHeader::SetUeAggregateMaxBitRateUplink (uint64_t bitRate)
419 m_ueAggregateMaxBitRateUplink = bitRate;
423 EpcX2HandoverRequestHeader::GetLengthOfIes ()
const
425 return m_headerLength;
429 EpcX2HandoverRequestHeader::GetNumberOfIes ()
const
431 return m_numberOfIes;
436 NS_OBJECT_ENSURE_REGISTERED (EpcX2HandoverRequestAckHeader);
438 EpcX2HandoverRequestAckHeader::EpcX2HandoverRequestAckHeader ()
439 : m_numberOfIes (1 + 1 + 1 + 1),
440 m_headerLength (2 + 2 + 4 + 4),
441 m_oldEnbUeX2apId (0xfffa),
442 m_newEnbUeX2apId (0xfffa)
446 EpcX2HandoverRequestAckHeader::~EpcX2HandoverRequestAckHeader ()
450 m_oldEnbUeX2apId = 0xfffb;
451 m_newEnbUeX2apId = 0xfffb;
452 m_erabsAdmittedList.clear ();
453 m_erabsNotAdmittedList.clear ();
457 EpcX2HandoverRequestAckHeader::GetTypeId (
void)
459 static TypeId tid = TypeId (
"ns3::EpcX2HandoverRequestAckHeader")
460 .SetParent<Header> ()
461 .AddConstructor<EpcX2HandoverRequestAckHeader> ()
475 return m_headerLength;
486 std::vector <EpcX2Sap::ErabAdmittedItem>::size_type sz = m_erabsAdmittedList.size ();
488 for (
int j = 0; j < (int) sz; j++)
495 std::vector <EpcX2Sap::ErabNotAdmittedItem>::size_type sz2 = m_erabsNotAdmittedList.size ();
497 for (
int j = 0; j < (int) sz2; j++)
521 for (
int j = 0; j < sz; j++)
529 m_erabsAdmittedList.push_back (erabItem);
530 m_headerLength += 10;
537 for (
int j = 0; j < sz; j++)
544 m_erabsNotAdmittedList.push_back (erabItem);
554 os <<
"OldEnbUeX2apId=" << m_oldEnbUeX2apId;
555 os <<
" NewEnbUeX2apId=" << m_newEnbUeX2apId;
557 os <<
" AdmittedBearers=" << m_erabsAdmittedList.size ();
558 std::vector <EpcX2Sap::ErabAdmittedItem>::size_type sz = m_erabsAdmittedList.size ();
563 for (
int j = 0; j < (int) sz; j++)
565 os << m_erabsAdmittedList[j].erabId;
566 if (j < (
int) sz - 1)
576 os <<
" NotAdmittedBearers=" << m_erabsNotAdmittedList.size ();
577 std::vector <EpcX2Sap::ErabNotAdmittedItem>::size_type sz2 = m_erabsNotAdmittedList.size ();
582 for (
int j = 0; j < (int) sz2; j++)
584 os << m_erabsNotAdmittedList[j].erabId;
585 if (j < (
int) sz2 - 1)
598 EpcX2HandoverRequestAckHeader::GetOldEnbUeX2apId ()
const
600 return m_oldEnbUeX2apId;
604 EpcX2HandoverRequestAckHeader::SetOldEnbUeX2apId (uint16_t x2apId)
606 m_oldEnbUeX2apId = x2apId;
610 EpcX2HandoverRequestAckHeader::GetNewEnbUeX2apId ()
const
612 return m_newEnbUeX2apId;
616 EpcX2HandoverRequestAckHeader::SetNewEnbUeX2apId (uint16_t x2apId)
618 m_newEnbUeX2apId = x2apId;
621 std::vector <EpcX2Sap::ErabAdmittedItem>
622 EpcX2HandoverRequestAckHeader::GetAdmittedBearers ()
const
624 return m_erabsAdmittedList;
628 EpcX2HandoverRequestAckHeader::SetAdmittedBearers (std::vector <EpcX2Sap::ErabAdmittedItem> bearers)
630 m_headerLength += 10 * bearers.size ();
631 m_erabsAdmittedList = bearers;
634 std::vector <EpcX2Sap::ErabNotAdmittedItem>
635 EpcX2HandoverRequestAckHeader::GetNotAdmittedBearers ()
const
637 return m_erabsNotAdmittedList;
641 EpcX2HandoverRequestAckHeader::SetNotAdmittedBearers (std::vector <EpcX2Sap::ErabNotAdmittedItem> bearers)
643 m_headerLength += 4 * bearers.size ();
644 m_erabsNotAdmittedList = bearers;
648 EpcX2HandoverRequestAckHeader::GetLengthOfIes ()
const
650 return m_headerLength;
654 EpcX2HandoverRequestAckHeader::GetNumberOfIes ()
const
656 return m_numberOfIes;
661 NS_OBJECT_ENSURE_REGISTERED (EpcX2HandoverPreparationFailureHeader);
663 EpcX2HandoverPreparationFailureHeader::EpcX2HandoverPreparationFailureHeader ()
664 : m_numberOfIes (1 + 1 + 1),
665 m_headerLength (2 + 2 + 2),
666 m_oldEnbUeX2apId (0xfffa),
668 m_criticalityDiagnostics (0xfffa)
672 EpcX2HandoverPreparationFailureHeader::~EpcX2HandoverPreparationFailureHeader ()
676 m_oldEnbUeX2apId = 0xfffb;
678 m_criticalityDiagnostics = 0xfffb;
682 EpcX2HandoverPreparationFailureHeader::GetTypeId (
void)
684 static TypeId tid = TypeId (
"ns3::EpcX2HandoverPreparationFailureHeader")
685 .SetParent<Header> ()
686 .AddConstructor<EpcX2HandoverPreparationFailureHeader> ()
700 return m_headerLength;
731 os <<
"OldEnbUeX2apId = " << m_oldEnbUeX2apId;
732 os <<
" Cause = " << m_cause;
733 os <<
" CriticalityDiagnostics = " << m_criticalityDiagnostics;
737 EpcX2HandoverPreparationFailureHeader::GetOldEnbUeX2apId ()
const
739 return m_oldEnbUeX2apId;
743 EpcX2HandoverPreparationFailureHeader::SetOldEnbUeX2apId (uint16_t x2apId)
745 m_oldEnbUeX2apId = x2apId;
749 EpcX2HandoverPreparationFailureHeader::GetCause ()
const
755 EpcX2HandoverPreparationFailureHeader::SetCause (uint16_t cause)
761 EpcX2HandoverPreparationFailureHeader::GetCriticalityDiagnostics ()
const
763 return m_criticalityDiagnostics;
767 EpcX2HandoverPreparationFailureHeader::SetCriticalityDiagnostics (uint16_t criticalityDiagnostics)
769 m_criticalityDiagnostics = criticalityDiagnostics;
773 EpcX2HandoverPreparationFailureHeader::GetLengthOfIes ()
const
775 return m_headerLength;
779 EpcX2HandoverPreparationFailureHeader::GetNumberOfIes ()
const
781 return m_numberOfIes;
786 NS_OBJECT_ENSURE_REGISTERED (EpcX2SnStatusTransferHeader);
788 EpcX2SnStatusTransferHeader::EpcX2SnStatusTransferHeader ()
791 m_oldEnbUeX2apId (0xfffa),
792 m_newEnbUeX2apId (0xfffa)
794 m_erabsSubjectToStatusTransferList.clear ();
797 EpcX2SnStatusTransferHeader::~EpcX2SnStatusTransferHeader ()
801 m_oldEnbUeX2apId = 0xfffb;
802 m_newEnbUeX2apId = 0xfffb;
803 m_erabsSubjectToStatusTransferList.clear ();
807 EpcX2SnStatusTransferHeader::GetTypeId (
void)
809 static TypeId tid = TypeId (
"ns3::EpcX2SnStatusTransferHeader")
810 .SetParent<Header> ()
811 .AddConstructor<EpcX2SnStatusTransferHeader> ()
825 return m_headerLength;
836 std::vector <EpcX2Sap::ErabsSubjectToStatusTransferItem>::size_type sz = m_erabsSubjectToStatusTransferList.size ();
839 for (
int j = 0; j < (int) sz; j++)
846 for (
int k = 0; k < bitsetSize; k++)
848 uint64_t statusValue = 0;
849 for (
int m = 0; m < 64; m++)
851 statusValue |= item.receiveStatusOfUlPdcpSdus[64 * k + m] << m;
875 for (
int j = 0; j < sz; j++)
881 for (
int k = 0; k < bitsetSize; k++)
884 for (
int m = 0; m < 64; m++)
886 ErabItem.receiveStatusOfUlPdcpSdus[64 * k + m] = (statusValue >> m) & 1;
895 m_erabsSubjectToStatusTransferList.push_back (ErabItem);
904 os <<
"OldEnbUeX2apId = " << m_oldEnbUeX2apId;
905 os <<
" NewEnbUeX2apId = " << m_newEnbUeX2apId;
906 os <<
" ErabsSubjectToStatusTransferList size = " << m_erabsSubjectToStatusTransferList.size ();
908 std::vector <EpcX2Sap::ErabsSubjectToStatusTransferItem>::size_type sz = m_erabsSubjectToStatusTransferList.size ();
913 for (
int j = 0; j < (int) sz; j++)
915 os << m_erabsSubjectToStatusTransferList[j].erabId;
916 if (j < (
int) sz - 1)
928 EpcX2SnStatusTransferHeader::GetOldEnbUeX2apId ()
const
930 return m_oldEnbUeX2apId;
934 EpcX2SnStatusTransferHeader::SetOldEnbUeX2apId (uint16_t x2apId)
936 m_oldEnbUeX2apId = x2apId;
940 EpcX2SnStatusTransferHeader::GetNewEnbUeX2apId ()
const
942 return m_newEnbUeX2apId;
946 EpcX2SnStatusTransferHeader::SetNewEnbUeX2apId (uint16_t x2apId)
948 m_newEnbUeX2apId = x2apId;
951 std::vector <EpcX2Sap::ErabsSubjectToStatusTransferItem>
952 EpcX2SnStatusTransferHeader::GetErabsSubjectToStatusTransferList ()
const
954 return m_erabsSubjectToStatusTransferList;
958 EpcX2SnStatusTransferHeader::SetErabsSubjectToStatusTransferList (std::vector <EpcX2Sap::ErabsSubjectToStatusTransferItem> erabs)
961 m_erabsSubjectToStatusTransferList = erabs;
965 EpcX2SnStatusTransferHeader::GetLengthOfIes ()
const
967 return m_headerLength;
971 EpcX2SnStatusTransferHeader::GetNumberOfIes ()
const
973 return m_numberOfIes;
978 NS_OBJECT_ENSURE_REGISTERED (EpcX2UeContextReleaseHeader);
980 EpcX2UeContextReleaseHeader::EpcX2UeContextReleaseHeader ()
981 : m_numberOfIes (1 + 1),
982 m_headerLength (2 + 2),
983 m_oldEnbUeX2apId (0xfffa),
984 m_newEnbUeX2apId (0xfffa)
988 EpcX2UeContextReleaseHeader::~EpcX2UeContextReleaseHeader ()
992 m_oldEnbUeX2apId = 0xfffb;
993 m_newEnbUeX2apId = 0xfffb;
997 EpcX2UeContextReleaseHeader::GetTypeId (
void)
999 static TypeId tid = TypeId (
"ns3::EpcX2UeContextReleaseHeader")
1000 .SetParent<Header> ()
1001 .AddConstructor<EpcX2UeContextReleaseHeader> ()
1009 return GetTypeId ();
1015 return m_headerLength;
1043 os <<
"OldEnbUeX2apId=" << m_oldEnbUeX2apId;
1044 os <<
" NewEnbUeX2apId=" << m_newEnbUeX2apId;
1048 EpcX2UeContextReleaseHeader::GetOldEnbUeX2apId ()
const
1050 return m_oldEnbUeX2apId;
1054 EpcX2UeContextReleaseHeader::SetOldEnbUeX2apId (uint16_t x2apId)
1056 m_oldEnbUeX2apId = x2apId;
1060 EpcX2UeContextReleaseHeader::GetNewEnbUeX2apId ()
const
1062 return m_newEnbUeX2apId;
1066 EpcX2UeContextReleaseHeader::SetNewEnbUeX2apId (uint16_t x2apId)
1068 m_newEnbUeX2apId = x2apId;
1072 EpcX2UeContextReleaseHeader::GetLengthOfIes ()
const
1074 return m_headerLength;
1078 EpcX2UeContextReleaseHeader::GetNumberOfIes ()
const
1080 return m_numberOfIes;
1085 NS_OBJECT_ENSURE_REGISTERED (EpcX2LoadInformationHeader);
1087 EpcX2LoadInformationHeader::EpcX2LoadInformationHeader ()
1088 : m_numberOfIes (1),
1091 m_cellInformationList.clear ();
1094 EpcX2LoadInformationHeader::~EpcX2LoadInformationHeader ()
1098 m_cellInformationList.clear ();
1102 EpcX2LoadInformationHeader::GetTypeId (
void)
1104 static TypeId tid = TypeId (
"ns3::EpcX2LoadInformationHeader")
1105 .SetParent<Header> ()
1106 .AddConstructor<EpcX2LoadInformationHeader> ()
1114 return GetTypeId ();
1120 return m_headerLength;
1132 std::vector <EpcX2Sap::CellInformationItem>::size_type sz = m_cellInformationList.size ();
1135 for (
int j = 0; j < (int) sz; j++)
1137 i.
WriteHtonU16 (m_cellInformationList [j].sourceCellId);
1139 std::vector <EpcX2Sap::UlInterferenceOverloadIndicationItem>::size_type sz2;
1140 sz2 = m_cellInformationList [j].ulInterferenceOverloadIndicationList.size ();
1143 for (
int k = 0; k < (int) sz2; k++)
1145 i.
WriteU8 (m_cellInformationList [j].ulInterferenceOverloadIndicationList [k]);
1148 std::vector <EpcX2Sap::UlHighInterferenceInformationItem>::size_type sz3;
1149 sz3 = m_cellInformationList [j].ulHighInterferenceInformationList.size ();
1152 for (
int k = 0; k < (int) sz3; k++)
1154 i.
WriteHtonU16 (m_cellInformationList [j].ulHighInterferenceInformationList [k].targetCellId);
1156 std::vector <bool>::size_type sz4;
1157 sz4 = m_cellInformationList [j].ulHighInterferenceInformationList [k].ulHighInterferenceIndicationList.size ();
1160 for (
int m = 0; m < (int) sz4; m++)
1162 i.
WriteU8 (m_cellInformationList [j].ulHighInterferenceInformationList [k].ulHighInterferenceIndicationList [m]);
1166 std::vector <bool>::size_type sz5;
1167 sz5 = m_cellInformationList [j].relativeNarrowbandTxBand.rntpPerPrbList.size ();
1170 for (
int k = 0; k < (int) sz5; k++)
1172 i.
WriteU8 (m_cellInformationList [j].relativeNarrowbandTxBand.rntpPerPrbList [k]);
1175 i.
WriteHtonU16 (m_cellInformationList [j].relativeNarrowbandTxBand.rntpThreshold);
1176 i.
WriteHtonU16 (m_cellInformationList [j].relativeNarrowbandTxBand.antennaPorts);
1177 i.
WriteHtonU16 (m_cellInformationList [j].relativeNarrowbandTxBand.pB);
1178 i.
WriteHtonU16 (m_cellInformationList [j].relativeNarrowbandTxBand.pdcchInterferenceImpact);
1194 m_headerLength += 6;
1197 for (
int j = 0; j < sz; j++)
1201 m_headerLength += 2;
1204 m_headerLength += 2;
1205 for (
int k = 0; k < sz2; k++)
1208 cellInfoItem.ulInterferenceOverloadIndicationList.push_back (item);
1210 m_headerLength += sz2;
1213 m_headerLength += 2;
1214 for (
int k = 0; k < sz3; k++)
1218 m_headerLength += 2;
1221 m_headerLength += 2;
1222 for (
int m = 0; m < sz4; m++)
1224 item.ulHighInterferenceIndicationList.push_back (i.
ReadU8 ());
1226 m_headerLength += sz4;
1228 cellInfoItem.ulHighInterferenceInformationList.push_back (item);
1232 m_headerLength += 2;
1233 for (
int k = 0; k < sz5; k++)
1235 cellInfoItem.relativeNarrowbandTxBand.rntpPerPrbList.push_back (i.
ReadU8 ());
1237 m_headerLength += sz5;
1239 cellInfoItem.relativeNarrowbandTxBand.rntpThreshold = i.
ReadNtohU16 ();
1240 cellInfoItem.relativeNarrowbandTxBand.antennaPorts = i.
ReadNtohU16 ();
1241 cellInfoItem.relativeNarrowbandTxBand.pB = i.
ReadNtohU16 ();
1242 cellInfoItem.relativeNarrowbandTxBand.pdcchInterferenceImpact = i.
ReadNtohU16 ();
1243 m_headerLength += 8;
1245 m_cellInformationList.push_back (cellInfoItem);
1254 os <<
"NumOfCellInformationItems=" << m_cellInformationList.size ();
1257 std::vector <EpcX2Sap::CellInformationItem>
1258 EpcX2LoadInformationHeader::GetCellInformationList ()
const
1260 return m_cellInformationList;
1264 EpcX2LoadInformationHeader::SetCellInformationList (std::vector <EpcX2Sap::CellInformationItem> cellInformationList)
1266 m_cellInformationList = cellInformationList;
1267 m_headerLength += 2;
1269 std::vector <EpcX2Sap::CellInformationItem>::size_type sz = m_cellInformationList.size ();
1270 for (
int j = 0; j < (int) sz; j++)
1272 m_headerLength += 2;
1274 std::vector <EpcX2Sap::UlInterferenceOverloadIndicationItem>::size_type sz2;
1275 sz2 = m_cellInformationList [j].ulInterferenceOverloadIndicationList.size ();
1276 m_headerLength += 2 + sz2;
1278 std::vector <EpcX2Sap::UlHighInterferenceInformationItem>::size_type sz3;
1279 sz3 = m_cellInformationList [j].ulHighInterferenceInformationList.size ();
1280 m_headerLength += 2;
1282 for (
int k = 0; k < (int) sz3; k++)
1284 std::vector <bool>::size_type sz4;
1285 sz4 = m_cellInformationList [j].ulHighInterferenceInformationList [k].ulHighInterferenceIndicationList.size ();
1286 m_headerLength += 2 + 2 + sz4;
1289 std::vector <bool>::size_type sz5;
1290 sz5 = m_cellInformationList [j].relativeNarrowbandTxBand.rntpPerPrbList.size ();
1291 m_headerLength += 2 + sz5 + 8;
1296 EpcX2LoadInformationHeader::GetLengthOfIes ()
const
1298 return m_headerLength;
1302 EpcX2LoadInformationHeader::GetNumberOfIes ()
const
1304 return m_numberOfIes;
1309 NS_OBJECT_ENSURE_REGISTERED (EpcX2ResourceStatusUpdateHeader);
1311 EpcX2ResourceStatusUpdateHeader::EpcX2ResourceStatusUpdateHeader ()
1312 : m_numberOfIes (3),
1314 m_enb1MeasurementId (0xfffa),
1315 m_enb2MeasurementId (0xfffa)
1317 m_cellMeasurementResultList.clear ();
1320 EpcX2ResourceStatusUpdateHeader::~EpcX2ResourceStatusUpdateHeader ()
1324 m_enb1MeasurementId = 0xfffb;
1325 m_enb2MeasurementId = 0xfffb;
1326 m_cellMeasurementResultList.clear ();
1330 EpcX2ResourceStatusUpdateHeader::GetTypeId (
void)
1332 static TypeId tid = TypeId (
"ns3::EpcX2ResourceStatusUpdateHeader")
1333 .SetParent<Header> ()
1334 .AddConstructor<EpcX2ResourceStatusUpdateHeader> ()
1342 return GetTypeId ();
1348 return m_headerLength;
1359 std::vector <EpcX2Sap::CellMeasurementResultItem>::size_type sz = m_cellMeasurementResultList.size ();
1362 for (
int j = 0; j < (int) sz; j++)
1367 i.
WriteU8 (item.dlHardwareLoadIndicator);
1368 i.
WriteU8 (item.ulHardwareLoadIndicator);
1369 i.
WriteU8 (item.dlS1TnlLoadIndicator);
1370 i.
WriteU8 (item.ulS1TnlLoadIndicator);
1379 i.
WriteHtonU16 (item.dlCompositeAvailableCapacity.cellCapacityClassValue);
1380 i.
WriteHtonU16 (item.dlCompositeAvailableCapacity.capacityValue);
1381 i.
WriteHtonU16 (item.ulCompositeAvailableCapacity.cellCapacityClassValue);
1382 i.
WriteHtonU16 (item.ulCompositeAvailableCapacity.capacityValue);
1395 for (
int j = 0; j < sz; j++)
1412 item.dlCompositeAvailableCapacity.cellCapacityClassValue = i.
ReadNtohU16 ();
1413 item.dlCompositeAvailableCapacity.capacityValue = i.
ReadNtohU16 ();
1414 item.ulCompositeAvailableCapacity.cellCapacityClassValue = i.
ReadNtohU16 ();
1415 item.ulCompositeAvailableCapacity.capacityValue = i.
ReadNtohU16 ();
1417 m_cellMeasurementResultList.push_back (item);
1420 m_headerLength = 6 + sz * 26;
1429 os <<
"Enb1MeasurementId = " << m_enb1MeasurementId
1430 <<
" Enb2MeasurementId = " << m_enb2MeasurementId
1431 <<
" NumOfCellMeasurementResultItems = " << m_cellMeasurementResultList.size ();
1435 EpcX2ResourceStatusUpdateHeader::GetEnb1MeasurementId ()
const
1437 return m_enb1MeasurementId;
1441 EpcX2ResourceStatusUpdateHeader::SetEnb1MeasurementId (uint16_t enb1MeasurementId)
1443 m_enb1MeasurementId = enb1MeasurementId;
1447 EpcX2ResourceStatusUpdateHeader::GetEnb2MeasurementId ()
const
1449 return m_enb2MeasurementId;
1453 EpcX2ResourceStatusUpdateHeader::SetEnb2MeasurementId (uint16_t enb2MeasurementId)
1455 m_enb2MeasurementId = enb2MeasurementId;
1458 std::vector <EpcX2Sap::CellMeasurementResultItem>
1459 EpcX2ResourceStatusUpdateHeader::GetCellMeasurementResultList ()
const
1461 return m_cellMeasurementResultList;
1465 EpcX2ResourceStatusUpdateHeader::SetCellMeasurementResultList (std::vector <EpcX2Sap::CellMeasurementResultItem> cellMeasurementResultList)
1467 m_cellMeasurementResultList = cellMeasurementResultList;
1469 std::vector <EpcX2Sap::CellMeasurementResultItem>::size_type sz = m_cellMeasurementResultList.size ();
1470 m_headerLength += sz * 26;
1474 EpcX2ResourceStatusUpdateHeader::GetLengthOfIes ()
const
1476 return m_headerLength;
1480 EpcX2ResourceStatusUpdateHeader::GetNumberOfIes ()
const
1482 return m_numberOfIes;
void WriteHtonU64(uint64_t data)
virtual void Serialize(Buffer::Iterator start) const
uint64_t ReadNtohU64(void)
#define NS_LOG_COMPONENT_DEFINE(name)
virtual void Print(std::ostream &os) const
virtual void Serialize(Buffer::Iterator start) const
uint32_t ReadNtohU32(void)
iterator in a Buffer instance
virtual void Serialize(Buffer::Iterator start) const
virtual TypeId GetInstanceTypeId(void) const
virtual uint32_t GetSerializedSize(void) const
UlInterferenceOverloadIndicationItem
static const uint16_t m_maxPdcpSn
virtual TypeId GetInstanceTypeId(void) const
void WriteHtonU16(uint16_t data)
virtual TypeId GetInstanceTypeId(void) const
virtual uint32_t Deserialize(Buffer::Iterator start)
void WriteHtonU32(uint32_t data)
Ipv4 addresses are stored in host order in this class.
virtual void Print(std::ostream &os) const
void WriteU8(uint8_t data)
virtual uint32_t GetSerializedSize(void) const
uint16_t ReadNtohU16(void)
virtual uint32_t GetSerializedSize(void) const
virtual uint32_t Deserialize(Buffer::Iterator start)
virtual uint32_t Deserialize(Buffer::Iterator start)
virtual void Print(std::ostream &os) const