RIC:1060: Change in PTL
[ric-plt/submgr.git] / e2ap / libe2ap_wrapper / E2AP_if.h
index d70d2b6..a98570c 100644 (file)
@@ -26,6 +26,7 @@
 
 #include <stdbool.h>
 #include <stdint.h>
+#include <ProcedureCode.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -33,59 +34,48 @@ extern "C" {
 
 typedef unsigned char byte;
 
-extern const int64_t cMaxNrOfErrors;
-
 extern const uint64_t cMaxSizeOfOctetString;
 
 typedef struct { // Octet string in ASN.1 does not have maximum length!
     size_t contentLength;
-    uint8_t data[1024]; // table size is const cMaxSizeOfOctetString
+    uint8_t data[1024]; // Table size is const cMaxSizeOfOctetString
 } OctetString_t;
 
+typedef struct { // Octet string in ASN.1 does not have maximum length!
+    size_t length;
+    uint8_t* data;
+} DynOctetString_t;
+
 typedef struct {
-    uint8_t unusedbits; // trailing unused bits 0 - 7
-    size_t byteLength;  // length in bytes
-    uint8_t data[1024];
-} Bitstring_t;
+    uint8_t unusedBits; // Trailing unused bits 0 - 7
+    size_t byteLength;  // Length in bytes
+    uint8_t* data;
+} DynBitString_t;
 
 typedef struct  {
-       uint32_t ricRequestorID;
-       uint32_t ricRequestSequenceNumber;
+       uint32_t ricRequestorID; // 0..65535
+       uint32_t ricInstanceID;  // 0..65535
 } RICRequestID_t;
 
-typedef uint16_t RANFunctionID_t;
+typedef uint16_t RANFunctionID_t; // 0..4095
 
-typedef uint64_t RICActionID_t;
+typedef uint64_t RICActionID_t; // 0..255
 
 enum RICActionType_t {
-     RICActionType_report
-    ,RICActionType_insert
-    ,RICActionType_policy
+     RICActionType_report,
+     RICActionType_insert,
+     RICActionType_policy
 };
 
-typedef uint64_t StyleID_t;
-
-typedef uint32_t ParameterID_t;
-
-typedef struct {
-    uint32_t dummy; // This data type has no content. This dymmy is added here to solve problem with Golang. Golang do not like empty types.
-} ParameterValue_t;
-
-typedef struct {
-    ParameterID_t parameterID;
-    ParameterValue_t ParameterValue;
-} SequenceOfActionParameters_t;
-
-typedef struct {
-    StyleID_t styleID;
-    SequenceOfActionParameters_t sequenceOfActionParameters;
-} RICActionDefinition_t;
-
 enum RICSubsequentActionType_t {
        RICSubsequentActionType_Continue,
        RICSubsequentActionType_wait
 };
 
+typedef struct {
+    OctetString_t octetString;   // This element is E2AP spec format
+} RICActionDefinitionChoice_t;
+
 enum RICTimeToWait_t {
        RICTimeToWait_zero,
        RICTimeToWait_w1ms,
@@ -108,15 +98,15 @@ enum RICTimeToWait_t {
 };
 
 typedef struct {
-       uint64_t ricSubsequentActionType;  // this is type of enum RICSubsequentActionType_t
-       uint64_t ricTimeToWait;  // this is type of enum RICTimeToWait_t
+       uint64_t ricSubsequentActionType;  // This is type of enum RICSubsequentActionType_t
+       uint64_t ricTimeToWait;  // This is type of enum RICTimeToWait_t
 } RICSubsequentAction_t;
 
 typedef struct  {
        RICActionID_t ricActionID;
-       uint64_t ricActionType;  // this is type of enum RICActionType_t
+       uint64_t ricActionType;  // This is type of enum RICActionType_t
        bool ricActionDefinitionPresent;
-       RICActionDefinition_t ricActionDefinition;
+       RICActionDefinitionChoice_t ricActionDefinitionChoice;
        bool ricSubsequentActionPresent;
        RICSubsequentAction_t ricSubsequentAction;
 } RICActionToBeSetupItem_t;
@@ -125,7 +115,7 @@ static const uint64_t cMaxofRICactionID = 16;
 
 typedef struct  {
     uint8_t contentLength;
-    RICActionToBeSetupItem_t ricActionToBeSetupItem[16];  // table size is const cMaxofRICactionID
+    RICActionToBeSetupItem_t ricActionToBeSetupItem[16];  // 1..16 // Table size is const cMaxofRICactionID
 } RICActionToBeSetupList_t;
 
 typedef struct {
@@ -163,100 +153,33 @@ enum InterfaceDirection__t {
 
 typedef uint8_t ProcedureCode__t;
 
-typedef struct  {
-       ProcedureCode__t procedureCode;
-       uint8_t typeOfMessage;  // This is X2AP-PDU, CHOICE of InitiatingMessage or SuccessfulOutcome or UnsuccessfulOutcome
-} RICInterfaceMessageType_t;
-
-typedef uint32_t InterfaceProtocolIEID_t;
-
-enum ProtocolIEtestCondition_t {
-       ProtocolIEtestCondition_equal,
-       ProtocolIEtestCondition_greaterthan,
-       ProtocolIEtestCondition_lessthan,
-       ProtocolIEtestCondition_contains,
-       ProtocolIEtestCondition_present
-};
-
-typedef struct {   // CHOICE. Only one value can be present
-    bool valueIntPresent;
-       int64_t integer;           //INTEGER;
-       bool valueEnumPresent;
-       int64_t valueEnum;         // INTEGER
-    bool valueBoolPresent;
-       bool valueBool;            // BOOLEAN
-    bool valueBitSPresent;
-       Bitstring_t octetstring;   // OCTET STRING,
-    bool octetstringPresent;
-       OctetString_t octetString; // OCTET STRING,
-} InterfaceProtocolIEValue_t;
-
-typedef struct {
-    InterfaceProtocolIEID_t interfaceProtocolIEID;
-    //ProtocolIEtestCondition_t protocolIEtestCondition;  Golang do not like this line. We do not need this right now.
-    InterfaceProtocolIEValue_t  interfaceProtocolIEValue;
-} SequenceOfProtocolIE_t;
-
-static const uint64_t cMaxofProtocolIE = 16;
-
 typedef struct {
-    SequenceOfProtocolIE_t sequenceOfProtocolIE[16]; // table size is const cMaxofProtocolIE
-} SequenceOfProtocolIEList_t;
-
-typedef struct {
-    OctetString_t octetString;   // E2AP spec format, the other elements for E2SM-X2 format
-    InterfaceID_t interfaceID;
-    uint8_t interfaceDirection;  // this is type of enum InterfaceDirection_t
-    RICInterfaceMessageType_t interfaceMessageType ;
-    bool sequenceOfProtocolIEListPresent;
-    SequenceOfProtocolIEList_t SequenceOfProtocolIEList;
+    OctetString_t octetString;   // This element is E2AP spec format
 } RICEventTriggerDefinition_t;
 
 typedef struct {
     RICEventTriggerDefinition_t ricEventTriggerDefinition;
     RICActionToBeSetupList_t ricActionToBeSetupItemIEs;
-} RICSubscription_t;
+} RICSubscriptionDetails_t;
 
 typedef struct {
     uint8_t contentLength;
-       RICActionID_t ricActionID[16]; // table size is const cMaxofRICactionID
+       RICActionID_t ricActionID[16]; // Table size is const cMaxofRICactionID
 } RICActionAdmittedList_t;
 
-enum CauseRIC_t {
-       CauseRIC__function_id_Invalid,
-       CauseRIC__action_not_supported,
-       CauseRIC__excessive_actions,
-       CauseRIC__duplicate_action,
-       CauseRIC__duplicate_event,
-       CauseRIC__function_resource_limit,
-       CauseRIC__request_id_unknown,
-       CauseRIC__inconsistent_action_subsequent_action_sequence,
-       CauseRIC__control_message_invalid,
-       CauseRIC__call_process_id_invalid,
-       CauseRIC__function_not_required,
-       CauseRIC__excessive_functions,
-       CauseRIC__ric_resource_limit
-};
-
-extern const int cRICCauseRadioNetwork; // this is content of type RICCause_t
-extern const int cRICCauseTransport; // this is content of type RICCause_t
-extern const int cRICCauseProtocol; // this is content of type RICCause_t
-extern const int cRICCauseMisc; // this is content of type RICCause_t
-extern const int cRICCauseRic; // this is content of type RICCause_t
-
 typedef struct {
     uint8_t content; // See above constants
-    uint8_t cause; // this is type of enum CauseRIC_t
+    uint8_t causeVal; // This is type of enum CauseRIC_t
 } RICCause_t;
 
 typedef struct {
        RICActionID_t ricActionID;
-    RICCause_t ricCause;
+    RICCause_t cause;
 } RICActionNotAdmittedItem_t;
 
 typedef struct {
     uint8_t contentLength;
-    RICActionNotAdmittedItem_t RICActionNotAdmittedItem[16];  // table size is const cMaxofRICactionID
+    RICActionNotAdmittedItem_t RICActionNotAdmittedItem[16];  // Table size is const cMaxofRICactionID
 } RICActionNotAdmittedList_t;
 
 enum Criticality_t {
@@ -279,44 +202,26 @@ enum TypeOfError_t {
 };
 
 typedef struct {
-       uint8_t iECriticality; // this is type of enum Criticality_t
+       uint8_t iECriticality; // This is type of enum Criticality_t
        ProtocolIE_ID__t iE_ID;
-       uint8_t typeOfError; // this is type of enum TypeOfError_t
+       uint8_t typeOfError; // This is type of enum TypeOfError_t
        //iE-Extensions  // This has no content in E2AP ASN.1 specification
 } CriticalityDiagnosticsIEListItem_t;
 
 typedef struct {
     bool procedureCodePresent;
-       ProcedureCode__t procedureCode;
+       ProcedureCode__t procedureCode;  // OPTIONAL
        bool triggeringMessagePresent;
-       uint8_t triggeringMessage; // this is type of enum TriggeringMessage_t
+       uint8_t triggeringMessage;       // OPTIONAL. This is type of enum TriggeringMessage_t
        bool procedureCriticalityPresent;
-       uint8_t procedureCriticality; // this is type of enum Criticality_t
+       uint8_t procedureCriticality;    // OPTIONAL. This is type of enum Criticality_t
+       bool ricRequestorIDPresent;
+    RICRequestID_t ricRequestorID;   //OPTIONAL
        bool iEsCriticalityDiagnosticsPresent;
-    uint16_t criticalityDiagnosticsIELength;
-       CriticalityDiagnosticsIEListItem_t criticalityDiagnosticsIEListItem[256];  // table size is const cMaxNrOfErrors
-       //iE-Extensions   // This has no content in E2AP ASN.1 specification
-
+    uint16_t criticalityDiagnosticsIELength; // 1..256
+       CriticalityDiagnosticsIEListItem_t criticalityDiagnosticsIEListItem[256];  // OPTIONAL. Table size is const cMaxNrOfErrors
 } CriticalityDiagnostics__t;
 
-typedef int32_t RICIndicationSN_t;
-
-enum RICIndicationType_t {
-       RICIndicationType_RICIndicationTypeReport,
-       RICIndicationType_RICIndicationTypeInsert
-};
-
-typedef struct {
-    OctetString_t octetString;    // E2AP spec format, the other elements for E2SM-X2 format
-    InterfaceID_t interfaceID;
-    uint8_t interfaceDirection;
-} RICIndicationHeader_t;
-
-typedef struct {
-    OctetString_t octetString;    // E2AP spec format, the other elements for E2SM-X2 format
-    OctetString_t interfaceMessage;
-} RICIndicationMessage_t;
-
 typedef struct {
     OctetString_t octetString;    // E2AP spec format, the other elements for E2SM-X2 format
     uint64_t ricCallProcessIDVal;
@@ -330,66 +235,25 @@ enum e2err {
     e2err_RICSubscriptionRequestAllocRANfunctionIDFail,
     e2err_RICSubscriptionRequestAllocRICeventTriggerDefinitionBufFail,
     e2err_RICSubscriptionRequestAllocRICaction_ToBeSetup_ItemIEsFail,
+    e2err_RICSubscriptionRequestAllocRICactionDefinitionBufFail,
+    e2err_RICSubscriptionRequestAllocRICactionDefinitionFail,
     e2err_RICSubscriptionRequestAllocRICsubsequentActionFail,
     e2err_RICSubscriptionRequestAllocRICsubscriptionRequest_IEsFail,
     e2err_RICSubscriptionRequestEncodeFail,
     e2err_RICSubscriptionRequestAllocE2AP_PDUFail,
-    e2err_RICEventTriggerDefinitionIEValueFail_1,
-    e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDpLMN_IdentityBufFail,
-    e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDmacro_eNB_IDBufFail,
-    e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDhome_eNB_IDBufFail,
-    e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDshort_Macro_eNB_IDBufFail,
-    e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDlong_Macro_eNB_IDBufFail,
-    e2err_RICEventTriggerDefinitionIEValueFail_2,
-    e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_gNB_IDpLMN_IdentityBufFail,
-    e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_gNB_IDgNB_IDBufFail,
-    e2err_RICEventTriggerDefinitionIEValueFail_3,
-    e2err_RICEventTriggerDefinitionIEValueFail_4,
-    e2err_RICEventTriggerDefinitionPackFail_1,
-    e2err_RICEventTriggerDefinitionPackFail_2,
-    e2err_RICEventTriggerDefinitionAllocE2SM_gNB_X2_eventTriggerDefinitionFail,
     e2err_RICSubscriptionResponseAllocRICrequestIDFail,
     e2err_RICSubscriptionResponseAllocRANfunctionIDFail,
     e2err_RICSubscriptionResponseAllocRICaction_Admitted_ItemIEsFail,
     e2err_RICSubscriptionResponseAllocRICActionAdmittedListFail,
     e2err_RICSubscriptionResponseAllocRICaction_NotAdmitted_ItemIEsFail,
-    e2err_RICSubscriptionResponseAllocRICActionNotAdmittedListFail,
     e2err_RICSubscriptionResponseEncodeFail,
     e2err_RICSubscriptionResponseAllocE2AP_PDUFail,
     e2err_RICSubscriptionFailureAllocRICrequestIDFail,
     e2err_RICSubscriptionFailureAllocRANfunctionIDFail,
     e2err_RICSubscriptionFailureAllocRICaction_NotAdmitted_ItemIEsFail,
-    e2err_RICSubscriptionFailureAllocRICActionAdmittedListFail,
+    e2err_RICSubscriptionFailureAllocCauseFail,
     e2err_RICSubscriptionFailureEncodeFail,
     e2err_RICSubscriptionFailureAllocE2AP_PDUFail,
-    e2err_RICIndicationRICrequestIDFail,
-    e2err_RICIndicationAllocRANfunctionIDFail,
-    e2err_RICIndicationAllocRICactionIDFail,
-    e2err_RICIndicationAllocRICindicationSNFail,
-    e2err_RICIndicationAllocRICindicationTypeFail,
-    e2err_RICIndicationAllocRRICindicationHeaderBufFail,
-    e2err_RICIndicationAllocRICindicationHeaderFail,
-    e2err_RICIndicationAllocRICindicationMessageBufFail,
-    e2err_RICIndicationAllocRICindicationMessageFail,
-    e2err_RICIndicationEncodeFail,
-    e2err_RICIndicationAllocE2AP_PDUFail,
-    e2err_RICindicationHeaderIEValueFail_1,
-    e2err_RICIndicationAllocRICIndicationHeaderglobal_eNB_IDpLMN_IdentityBufFail,
-    e2err_RICIndicationAllocRICIndicationHeaderglobal_eNB_IDeNB_IDmacro_eNB_IDBufFail,
-    e2err_RICIndicationAllocRICIndicationHeaderglobal_eNB_IDeNB_IDhome_eNB_IDBufFail,
-    e2err_RICIndicationAllocRICIndicationHeaderglobal_eNB_IDeNB_IDshort_Macro_eNB_IDBufFail,
-    e2err_RICIndicationAllocRICIndicationHeaderglobal_eNB_IDeNB_IDlong_Macro_eNB_IDBufFail,
-    e2err_RICindicationHeaderIEValueFail_2,
-    e2err_RICIndicationAllocRICIndicationHeaderglobal_gNB_IDpLMN_IdentityBufFail,
-    e2err_RICIndicationAllocRICIndicationHeaderglobal_gNB_IDgNB_IDgNB_IDBufFail,
-    e2err_RICindicationHeaderIEValueFail_3,
-    e2err_RICindicationHeaderPackFail_1,
-    e2err_RICindicationHeaderPackFail_2,
-    e2err_RICIndicationHeaderAllocE2AP_PDUFail,
-    e2err_RICIndicationMessageAllocinterfaceMessageFail,
-    e2err_RICindicationMessagePackFail_1,
-    e2err_RICindicationMessagePackFail_2,
-    e2err_E2SM_gNB_X2_indicationMessageAllocE2AP_PDUFail,
     e2err_RICSubscriptionDeleteRequestAllocRICrequestIDFail,
     e2err_RICSubscriptionDeleteRequestAllocRANfunctionIDFail,
     e2err_RICSubscriptionDeleteRequestEncodeFail,
@@ -406,115 +270,63 @@ enum e2err {
     e2err_RICsubscriptionRequestRICrequestIDMissing,
     e2err_RICsubscriptionRequestRANfunctionIDMissing,
     e2err_RICsubscriptionRequestICsubscriptionMissing,
-    e2err_RICEventTriggerDefinitionIEValueFail_5,
-    e2err_RICEventTriggerDefinitionIEValueFail_6,
-    e2err_RICEventTriggerDefinitionIEValueFail_7,
-    e2err_RICEventTriggerDefinitionIEValueFail_8,
-    e2err_RICEventTriggerDefinitionDecodeWMOREFail,
-    e2err_RICEventTriggerDefinitionDecodeFAIL,
-    e2err_RICEventTriggerDefinitionDecodeDefaultFail,
     e2err_RICsubscriptionResponseRICrequestIDMissing,
     e2err_RICsubscriptionResponseRANfunctionIDMissing,
     e2err_RICsubscriptionResponseRICaction_Admitted_ListMissing,
-    e2err_RICsubscriptionResponseRICaction_NotAdmitted_ListMissing,
     e2err_RICsubscriptionFailureRICrequestIDMissing,
     e2err_RICsubscriptionFailureRANfunctionIDMissing,
-    e2err_RICsubscriptionFailureRICaction_NotAdmitted_ListMissing,
-    e2err_RICindicationRICrequestIDMissing,
-    e2err_RICindicationRANfunctionIDMissing,
-    e2err_RICindicationRICactionIDMissing,
-    e2err_RICindicationRICindicationSNMissing,
-    e2err_RICindicationRICindicationTypeMissing,
-    e2err_RICIndicationHeaderContentLengthFail,
-    e2err_RICindicationRICindicationHeaderMissing,
-    e2err_RICIndicationMessageContentLengthFail,
-    e2err_RICindicationRICindicationMessageMissing,
-    e2err_RICEventTriggerDefinitionIEValueFail_9,
-    e2err_RICEventTriggerDefinitionIEValueFail_10,
-    e2err_RICEventTriggerDefinitionIEValueFail_11,
-    e2err_RICIndicationHeaderDecodeWMOREFail,
-    e2err_RICIndicationHeaderDecodeFAIL,
-    e2err_RICIndicationHeaderDecodeDefaultFail,
-    e2err_RICIndicationMessageIEContentLengthFail,
-    e2err_RICIndicationMessageDecodeWMOREFail,
-    e2err_RICIndicationMessageDecodeFAIL,
-    e2err_RICIndicationMessageDecodeDefaultFail,
+    e2err_RICsubscriptionFailureCauseMissing,
     e2err_RICsubscriptionDeleteRequestRICrequestIDMissing,
     e2err_RICsubscriptionDeleteRequestRANfunctionIDMissing,
     e2err_RICsubscriptionDeleteResponseRICrequestIDMissing,
     e2err_RICsubscriptionDeleteResponseRANfunctionIDMissing,
     e2err_RICsubscriptionDeleteFailureRICrequestIDMissing,
     e2err_RICsubscriptionDeleteFailureRANfunctionIDMissing,
-    e2err_RICsubscriptionDeleteFailureRICcauseMissing
+    e2err_RICsubscriptionDeleteFailureRICcauseMissing,
+    e2err_RICSubscriptionDeleteRequiredRICrequestIDMissing,
+    e2err_RICSubscriptionDeleteRequiredRANfunctionIDMissing,
+    e2err_RICSubscriptionDeleteRequiredRICcauseMissing,
+    e2err_RICSubscriptionDeleteRequiredEncodeFail,
+    e2err_RICSubscriptionDeleteRequiredAllocE2AP_PDUFail,
+    e2err_RICsubscriptionResponseRICrequestIDWrongOrder,
+    e2err_RICsubscriptionResponseRANfunctionIDWrongOrder,
+    e2err_RICsubscriptionResponseRICaction_Admitted_ListWrongOrder,
+    e2err_RICsubscriptionResponseRICaction_NotAdmitted_ListWrongOrder,
+    e2err_RICsubscriptionFailureRICrequestIDWrongOrder,
+    e2err_RICsubscriptionFailureRANfunctionIDWrongOrder,
+    e2err_RICsubscriptionFailureCauseWrongOrder,
+    e2err_RICsubscriptionDeleteResponseRICrequestIDWrongOrder,
+    e2err_RICsubscriptionDeleteResponseRANfunctionIDWrongOrder,
+    e2err_RICsubscriptionDeleteFailureRICrequestIDWrongOrder,
+    e2err_RICsubscriptionDeleteFailureRANfunctionIDWrongOrder,
+    e2err_RICsubscriptionDeleteFailureRICcauseWrongOrder
 };
 
-
 static const char* const E2ErrorStrings[] = {
     "e2err_OK",
     "e2err_RICSubscriptionRequestAllocRICrequestIDFail",
     "e2err_RICSubscriptionRequestAllocRANfunctionIDFail",
     "e2err_RICSubscriptionRequestAllocRICeventTriggerDefinitionBufFail",
     "e2err_RICSubscriptionRequestAllocRICaction_ToBeSetup_ItemIEsFail",
+    "e2err_RICSubscriptionRequestAllocRICactionDefinitionBufFail",
+    "e2err_RICSubscriptionRequestAllocRICactionDefinitionFail",
     "e2err_RICSubscriptionRequestAllocRICsubsequentActionFail",
     "e2err_RICSubscriptionRequestAllocRICsubscriptionRequest_IEsFail",
     "e2err_RICSubscriptionRequestEncodeFail",
     "e2err_RICSubscriptionRequestAllocE2AP_PDUFail",
-    "e2err_RICEventTriggerDefinitionIEValueFail_1",
-    "e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDpLMN_IdentityBufFail",
-    "e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDmacro_eNB_IDBufFail",
-    "e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDhome_eNB_IDBufFail",
-    "e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDshort_Macro_eNB_IDBufFail",
-    "e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_eNB_IDeNB_IDlong_Macro_eNB_IDBufFail",
-    "e2err_RICEventTriggerDefinitionIEValueFail_2",
-    "e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_gNB_IDpLMN_IdentityBufFail",
-    "e2err_RICIndicationAllocRICEventTriggerDefinitionglobal_gNB_IDgNB_IDBufFail",
-    "e2err_RICEventTriggerDefinitionIEValueFail_3",
-    "e2err_RICEventTriggerDefinitionIEValueFail_4",
-    "e2err_RICEventTriggerDefinitionPackFail_1",
-    "e2err_RICEventTriggerDefinitionPackFail_2",
-    "e2err_RICEventTriggerDefinitionAllocE2SM_gNB_X2_eventTriggerDefinitionFail",
     "e2err_RICSubscriptionResponseAllocRICrequestIDFail",
     "e2err_RICSubscriptionResponseAllocRANfunctionIDFail",
     "e2err_RICSubscriptionResponseAllocRICaction_Admitted_ItemIEsFail",
     "e2err_RICSubscriptionResponseAllocRICActionAdmittedListFail",
     "e2err_RICSubscriptionResponseAllocRICaction_NotAdmitted_ItemIEsFail",
-    "e2err_RICSubscriptionResponseAllocRICActionNotAdmittedListFail",
     "e2err_RICSubscriptionResponseEncodeFail",
     "e2err_RICSubscriptionResponseAllocE2AP_PDUFail",
     "e2err_RICSubscriptionFailureAllocRICrequestIDFail",
     "e2err_RICSubscriptionFailureAllocRANfunctionIDFail",
     "e2err_RICSubscriptionFailureAllocRICaction_NotAdmitted_ItemIEsFail",
-    "e2err_RICSubscriptionFailureAllocRICActionAdmittedListFail",
+    "e2err_RICSubscriptionFailureAllocCauseFail",
     "e2err_RICSubscriptionFailureEncodeFail",
     "e2err_RICSubscriptionFailureAllocE2AP_PDUFail",
-    "e2err_RICIndicationRICrequestIDFail",
-    "e2err_RICIndicationAllocRANfunctionIDFail",
-    "e2err_RICIndicationAllocRICactionIDFail",
-    "e2err_RICIndicationAllocRICindicationSNFail",
-    "e2err_RICIndicationAllocRICindicationTypeFail",
-    "e2err_RICIndicationAllocRRICindicationHeaderBufFail",
-    "e2err_RICIndicationAllocRICindicationHeaderFail",
-    "e2err_RICIndicationAllocRICindicationMessageBufFail",
-    "e2err_RICIndicationAllocRICindicationMessageFail",
-    "e2err_RICIndicationEncodeFail",
-    "e2err_RICIndicationAllocE2AP_PDUFail",
-    "e2err_RICindicationHeaderIEValueFail_1",
-    "e2err_RICIndicationAllocRICIndicationHeaderglobal_eNB_IDpLMN_IdentityBufFail",
-    "e2err_RICIndicationAllocRICIndicationHeaderglobal_eNB_IDeNB_IDmacro_eNB_IDBufFail",
-    "e2err_RICIndicationAllocRICIndicationHeaderglobal_eNB_IDeNB_IDhome_eNB_IDBufFail",
-    "e2err_RICIndicationAllocRICIndicationHeaderglobal_eNB_IDeNB_IDshort_Macro_eNB_IDBufFail",
-    "e2err_RICIndicationAllocRICIndicationHeaderglobal_eNB_IDeNB_IDlong_Macro_eNB_IDBufFail",
-    "e2err_RICindicationHeaderIEValueFail_2",
-    "e2err_RICIndicationAllocRICIndicationHeaderglobal_gNB_IDpLMN_IdentityBufFail",
-    "e2err_RICIndicationAllocRICIndicationHeaderglobal_gNB_IDgNB_IDgNB_IDBufFail",
-    "e2err_RICindicationHeaderIEValueFail_3",
-    "e2err_RICindicationHeaderPackFail_1",
-    "e2err_RICindicationHeaderPackFail_2",
-    "e2err_RICIndicationHeaderAllocE2AP_PDUFail",
-    "e2err_RICIndicationMessageAllocinterfaceMessageFail",
-    "e2err_RICindicationMessagePackFail_1",
-    "e2err_RICindicationMessagePackFail_2",
-    "e2err_E2SM_gNB_X2_indicationMessageAllocE2AP_PDUFail",
     "e2err_RICSubscriptionDeleteRequestAllocRICrequestIDFail",
     "e2err_RICSubscriptionDeleteRequestAllocRANfunctionIDFail",
     "e2err_RICSubscriptionDeleteRequestEncodeFail",
@@ -531,46 +343,31 @@ static const char* const E2ErrorStrings[] = {
     "e2err_RICsubscriptionRequestRICrequestIDMissing",
     "e2err_RICsubscriptionRequestRANfunctionIDMissing",
     "e2err_RICsubscriptionRequestICsubscriptionMissing",
-    "e2err_RICEventTriggerDefinitionIEValueFail_5",
-    "e2err_RICEventTriggerDefinitionIEValueFail_6",
-    "e2err_RICEventTriggerDefinitionIEValueFail_7",
-    "e2err_RICEventTriggerDefinitionIEValueFail_8",
-    "e2err_RICEventTriggerDefinitionDecodeWMOREFail",
-    "e2err_RICEventTriggerDefinitionDecodeFAIL",
-    "e2err_RICEventTriggerDefinitionDecodeDefaultFail",
     "e2err_RICsubscriptionResponseRICrequestIDMissing",
     "e2err_RICsubscriptionResponseRANfunctionIDMissing",
     "e2err_RICsubscriptionResponseRICaction_Admitted_ListMissing",
-    "e2err_RICsubscriptionResponseRICaction_NotAdmitted_ListMissing",
     "e2err_RICsubscriptionFailureRICrequestIDMissing",
     "e2err_RICsubscriptionFailureRANfunctionIDMissing",
-    "e2err_RICsubscriptionFailureRICaction_NotAdmitted_ListMissing",
-    "e2err_RICindicationRICrequestIDMissing",
-    "e2err_RICindicationRANfunctionIDMissing",
-    "e2err_RICindicationRICactionIDMissing",
-    "e2err_RICindicationRICindicationSNMissing",
-    "e2err_RICindicationRICindicationTypeMissing",
-    "e2err_RICIndicationHeaderContentLengthFail",
-    "e2err_RICindicationRICindicationHeaderMissing",
-    "e2err_RICIndicationMessageContentLengthFail",
-    "e2err_RICindicationRICindicationMessageMissing",
-    "e2err_RICEventTriggerDefinitionIEValueFail_9",
-    "e2err_RICEventTriggerDefinitionIEValueFail_10",
-    "e2err_RICEventTriggerDefinitionIEValueFail_11",
-    "e2err_RICIndicationHeaderDecodeWMOREFail",
-    "e2err_RICIndicationHeaderDecodeFAIL",
-    "e2err_RICIndicationHeaderDecodeDefaultFail",
-    "e2err_RICIndicationMessageIEContentLengthFail",
-    "e2err_RICIndicationMessageDecodeWMOREFail",
-    "e2err_RICIndicationMessageDecodeFAIL",
-    "e2err_RICIndicationMessageDecodeDefaultFail",
+    "e2err_RICsubscriptionFailureCauseMissing",
     "e2err_RICsubscriptionDeleteRequestRICrequestIDMissing",
     "e2err_RICsubscriptionDeleteRequestRANfunctionIDMissing",
     "e2err_RICsubscriptionDeleteResponseRICrequestIDMissing",
     "e2err_RICsubscriptionDeleteResponseRANfunctionIDMissing",
     "e2err_RICsubscriptionDeleteFailureRICrequestIDMissing",
     "e2err_RICsubscriptionDeleteFailureRANfunctionIDMissing",
-    "e2err_RICsubscriptionDeleteFailureRICcauseMissing"
+    "e2err_RICsubscriptionDeleteFailureRICcauseMissing",
+    "e2err_RICSubscriptionDeleteRequiredRICrequestIDMissing",
+    "e2err_RICSubscriptionDeleteRequiredRANfunctionIDMissing",
+    "e2err_RICSubscriptionDeleteRequiredRICcauseMissing",
+    "e2err_RICSubscriptionDeleteRequiredEncodeFail",
+    "e2err_RICSubscriptionDeleteRequiredAllocE2AP_PDUFail",
+    "e2err_RICsubscriptionResponseRICrequestIDWrongOrder",
+    "e2err_RICsubscriptionResponseRANfunctionIDWrongOrder",
+    "e2err_RICsubscriptionResponseRICaction_Admitted_ListWrongOrder",
+    "e2err_RICsubscriptionResponseRICaction_NotAdmitted_ListWrongOrder",
+    "e2err_RICsubscriptionFailureRICrequestIDWrongOrder",
+    "e2err_RICsubscriptionFailureRANfunctionIDWrongOrder",
+    "e2err_RICsubscriptionFailureCauseWrongOrder",
 };
 
 typedef struct {
@@ -591,7 +388,7 @@ extern const uint64_t cE2UnsuccessfulOutcome;
 // Initiating message
 extern const uint64_t cRICSubscriptionRequest;
 extern const uint64_t cRICSubscriptionDeleteRequest;
-extern const uint64_t cRICIndication;
+extern const uint64_t cRICSubscriptionDeleteRequired;
 
 // Successful outcome
 extern const uint64_t cRICSubscriptionResponse;
@@ -604,7 +401,7 @@ extern const uint64_t cRICsubscriptionDeleteFailure;
 typedef struct {
     RICRequestID_t ricRequestID;
     RANFunctionID_t ranFunctionID;
-    RICSubscription_t ricSubscription;
+    RICSubscriptionDetails_t ricSubscriptionDetails;
 } RICSubscriptionRequest_t;
 
 typedef struct {
@@ -615,26 +412,14 @@ typedef struct {
     RICActionNotAdmittedList_t ricActionNotAdmittedList;
 } RICSubscriptionResponse_t;
 
-
 typedef struct {
     RICRequestID_t ricRequestID;
     RANFunctionID_t ranFunctionID;
-    RICActionNotAdmittedList_t ricActionNotAdmittedList;
+    RICCause_t cause;
     bool criticalityDiagnosticsPresent;
     CriticalityDiagnostics__t criticalityDiagnostics;
 } RICSubscriptionFailure_t;
 
-typedef struct {
-       RICRequestID_t ricRequestID;
-       RANFunctionID_t ranFunctionID;
-       RICActionID_t ricActionID;
-       RICIndicationSN_t ricIndicationSN;
-       uint64_t ricIndicationType; // this is type of enum RICIndicationType_t
-       RICIndicationHeader_t ricIndicationHeader;
-       RICIndicationMessage_t ricIndicationMessage;
-    RICCallProcessID_t ricCallProcessID;  // Not usein RIC currently
-} RICIndication_t;
-
 typedef struct {
     RICRequestID_t ricRequestID;
     RANFunctionID_t ranFunctionID;
@@ -648,58 +433,67 @@ typedef struct  {
 typedef struct  {
     RICRequestID_t ricRequestID;
     RANFunctionID_t ranFunctionID;
-    RICCause_t ricCause;
+    RICCause_t cause;
     bool criticalityDiagnosticsPresent;
-    CriticalityDiagnostics__t criticalityDiagnostics; // Not usein RIC currently
+    CriticalityDiagnostics__t criticalityDiagnostics; // OPTIONAL. Not used in RIC currently
 } RICSubscriptionDeleteFailure_t;
 
+typedef struct {
+    RICRequestID_t ricRequestID;
+    RANFunctionID_t ranFunctionID;
+    RICCause_t cause;
+} RICSubscriptionDeleteRequired_t;
+
+typedef struct {
+    int noOfRanSubscriptions;
+    RICSubscriptionDeleteRequired_t ranSubscriptionsDelRequired[1024];
+
+} RICSubsDeleteRequired_t;
+
 //////////////////////////////////////////////////////////////////////
 // Function declarations
 
+void allowASN1DebugPrints(bool);
+
+void allowOutOfOrderIEMsg(uint8_t);
+
 const char* getE2ErrorString(uint64_t);
 
 typedef void* e2ap_pdu_ptr_t;
 
 uint64_t packRICSubscriptionRequest(size_t*, byte*, char*,RICSubscriptionRequest_t*);
-uint64_t packRICEventTriggerDefinition(char*,RICEventTriggerDefinition_t*);
 uint64_t packRICSubscriptionResponse(size_t*, byte*, char*,RICSubscriptionResponse_t*);
 uint64_t packRICSubscriptionFailure(size_t*, byte*, char*,RICSubscriptionFailure_t*);
-uint64_t packRICIndication(size_t*, byte*, char*,RICIndication_t*);
-uint64_t packRICIndicationHeader(char*,RICIndicationHeader_t*);
-uint64_t packRICIndicationMessage(char*,RICIndicationMessage_t*);
 uint64_t packRICSubscriptionDeleteRequest(size_t*, byte*, char*,RICSubscriptionDeleteRequest_t*);
 uint64_t packRICSubscriptionDeleteResponse(size_t*, byte*, char*,RICSubscriptionDeleteResponse_t*);
 uint64_t packRICSubscriptionDeleteFailure(size_t*, byte*, char*,RICSubscriptionDeleteFailure_t*);
+uint64_t packRICSubscriptionDeleteRequired(size_t*, byte*, char*,RICSubsDeleteRequired_t*);
 
 e2ap_pdu_ptr_t* unpackE2AP_pdu(const size_t, const byte*, char*, E2MessageInfo_t*);
 uint64_t getRICSubscriptionRequestData(e2ap_pdu_ptr_t*, RICSubscriptionRequest_t*);
-uint64_t getRICEventTriggerDefinitionData(RICEventTriggerDefinition_t*);
 uint64_t getRICSubscriptionResponseData(e2ap_pdu_ptr_t*, RICSubscriptionResponse_t*);
 uint64_t getRICSubscriptionFailureData(e2ap_pdu_ptr_t*, RICSubscriptionFailure_t*);
-uint64_t getRICIndicationData(e2ap_pdu_ptr_t*, RICIndication_t*);
-uint64_t getRICIndicationHeaderData(RICIndicationHeader_t*);
-uint64_t getRICIndicationMessageData(RICIndicationMessage_t*);
 uint64_t getRICSubscriptionDeleteRequestData(e2ap_pdu_ptr_t*, RICSubscriptionDeleteRequest_t*);
 uint64_t getRICSubscriptionDeleteResponseData(e2ap_pdu_ptr_t*, RICSubscriptionDeleteResponse_t*);
 uint64_t getRICSubscriptionDeleteFailureData(e2ap_pdu_ptr_t*, RICSubscriptionDeleteFailure_t*);
-
+uint64_t getRICSubscriptionDeleteRequiredData(e2ap_pdu_ptr_t*, RICSubsDeleteRequired_t*);
 
 #if DEBUG
 bool TestRICSubscriptionRequest();
 bool TestRICSubscriptionResponse();
 bool TestRICSubscriptionFailure();
-bool TestRICIndication();
 bool TestRICSubscriptionDeleteRequest();
 bool TestRICSubscriptionDeleteResponse();
 bool TestRICSubscriptionDeleteFailure();
+bool TestRICSubscriptionDeleteRequired();
 
 void printRICSubscriptionRequest(const RICSubscriptionRequest_t*);
 void printRICSubscriptionResponse(const RICSubscriptionResponse_t*);
 void printRICSubscriptionFailure(const RICSubscriptionFailure_t*);
-void printRICIndication(const RICIndication_t*);
 void printRICSubscriptionDeleteRequest(const RICSubscriptionDeleteRequest_t*);
 void printRICSubscriptionDeleteResponse(const RICSubscriptionDeleteResponse_t*);
 void printRICSubscriptionDeleteFailure(const RICSubscriptionDeleteFailure_t*);
+void printRICSubscriptionDeleteRequired(const RICSubsDeleteRequired_t*);
 #endif
 
 #ifdef __cplusplus