diff --git a/src/lte/model/epc-x2-sap.h b/src/lte/model/epc-x2-sap.h index 71aef0f8c..88384925d 100644 --- a/src/lte/model/epc-x2-sap.h +++ b/src/lte/model/epc-x2-sap.h @@ -61,7 +61,7 @@ public: bool dlForwarding; Ipv4Address transportLayerAddress; uint32_t gtpTeid; - + ErabToBeSetupItem (); }; @@ -76,7 +76,7 @@ public: uint32_t ulGtpTeid; uint32_t dlGtpTeid; }; - + /** * E-RABs not admitted item as * it is used in the HANDOVER REQUEST ACKNOWLEDGE message. @@ -141,6 +141,56 @@ public: RelativeNarrowbandTxBand relativeNarrowbandTxBand; }; + /** + * Load Indicator as + * it is used in the RESOURCE STATUS UPDATE message. + * See section 9.2.36 for further info about the value + */ + enum LoadIndicator + { + LowLoad, + MediumLoad, + HighLoad, + Overload + }; + + /** + * Composite Available Capacity as + * it is used in the RESOURCE STATUS UPDATE message. + * See section 9.2.45 for further info about the parameters + */ + struct CompositeAvailCapacity + { + uint16_t cellCapacityClassValue; + uint16_t capacityValue; + }; + + /** + * Cell Measurement Result Item as + * it is used in the RESOURCE STATUS UPDATE message. + * See section 9.1.2.14 for further info about the parameters + */ + struct CellMeasurementResultItem + { + uint16_t sourceCellId; + + LoadIndicator dlHardwareLoadIndicator; + LoadIndicator ulHardwareLoadIndicator; + + LoadIndicator dlS1TnlLoadIndicator; + LoadIndicator ulS1TnlLoadIndicator; + + uint16_t dlGbrPrbUsage; + uint16_t ulGbrPrbUsage; + uint16_t dlNonGbrPrbUsage; + uint16_t ulNonGbrPrbUsage; + uint16_t dlTotalPrbUsage; + uint16_t ulTotalPrbUsage; + + CompositeAvailCapacity dlCompositeAvailableCapacity; + CompositeAvailCapacity ulCompositeAvailableCapacity; + }; + enum IdCause { @@ -165,7 +215,7 @@ public: std::vector bearers; Ptr rrcContext; }; - + /** * \brief Parameters of the HANDOVER REQUEST ACKNOWLEDGE message. * @@ -205,6 +255,19 @@ public: std::vector cellInformationList; }; + /** + * \brief Parameters of the RESOURCE STATUS UPDATE message. + * + * See section 9.1.2.14 for further info about the parameters + */ + struct ResourceStatusUpdateParams + { + uint16_t targetCellId; + uint16_t enb1MeasurementId; + uint16_t enb2MeasurementId; + std::vector cellMeasurementResultList; + }; + }; @@ -216,7 +279,7 @@ class EpcX2SapProvider : public EpcX2Sap { public: virtual ~EpcX2SapProvider (); - + /** * Service primitives */ @@ -228,6 +291,8 @@ public: virtual void SendUeContextRelease (UeContextReleaseParams params) = 0; virtual void SendLoadInformation (LoadInformationParams params) = 0; + + virtual void SendResourceStatusUpdate (ResourceStatusUpdateParams params) = 0; }; @@ -251,6 +316,8 @@ public: virtual void RecvUeContextRelease (UeContextReleaseParams params) = 0; virtual void RecvLoadInformation (LoadInformationParams params) = 0; + + virtual void RecvResourceStatusUpdate (ResourceStatusUpdateParams params) = 0; }; /////////////////////////////////////// @@ -272,7 +339,9 @@ public: virtual void SendUeContextRelease (UeContextReleaseParams params); virtual void SendLoadInformation (LoadInformationParams params); - + + virtual void SendResourceStatusUpdate (ResourceStatusUpdateParams params); + private: EpcX2SpecificEpcX2SapProvider (); C* m_x2; @@ -317,6 +386,13 @@ EpcX2SpecificEpcX2SapProvider::SendLoadInformation (LoadInformationParams par m_x2->DoSendLoadInformation (params); } +template +void +EpcX2SpecificEpcX2SapProvider::SendResourceStatusUpdate (ResourceStatusUpdateParams params) +{ + m_x2->DoSendResourceStatusUpdate (params); +} + /////////////////////////////////////// template @@ -332,11 +408,13 @@ public: virtual void RecvHandoverRequest (HandoverRequestParams params); virtual void RecvHandoverRequestAck (HandoverRequestAckParams params); - + virtual void RecvUeContextRelease (UeContextReleaseParams params); virtual void RecvLoadInformation (LoadInformationParams params); + virtual void RecvResourceStatusUpdate (ResourceStatusUpdateParams params); + private: EpcX2SpecificEpcX2SapUser (); C* m_rrc; @@ -381,6 +459,13 @@ EpcX2SpecificEpcX2SapUser::RecvLoadInformation (LoadInformationParams params) m_rrc->DoRecvLoadInformation (params); } +template +void +EpcX2SpecificEpcX2SapUser::RecvResourceStatusUpdate (ResourceStatusUpdateParams params) +{ + m_rrc->DoRecvResourceStatusUpdate (params); +} + } // namespace ns3 #endif // EPC_X2_SAP_H