[Epic-ID: ODUHIGH-516][Task-ID: 526] Implementation of ric service update
[o-du/l2.git] / src / du_app / du_e2ap_mgr.h
index 9fea513..e59e646 100644 (file)
 #   See the License for the specific language governing permissions and        #
 #   limitations under the License.                                             #
 ################################################################################
-*******************************************************************************/
+ *******************************************************************************/
 
 /* This file contains all E2AP message handler related functionality */
+#define MAX_E2_SETUP_TMR 1
+#define MAX_RIC_SERVICE_UPDATE_TMR 1
+
+#define EVENT_E2_SETUP_TMR 1
+#define EVENT_RIC_SERVICE_UPDATE_TMR 2
 
 #define MAX_NUM_TRANSACTION 256 /* As per, O-RAN WG3 E2AP v3.0, section 9.2.33 */
+#define MAX_RAN_FUNCTION 256        /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.1.2.2 : maxofRANfunctionID */
+#define MAX_E2_NODE_COMPONENT 1024     /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.1.2.2 : maxofE2nodeComponents */
+#define MAX_TNL_ASSOCIATION 32         /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.1.2.11 : maxofTNLA */
+#define MAX_RIC_STYLES 64           /* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.2.1 : maxnoofRICstyle */
+#define MAX_MEASUREMENT_INFO 65535     /* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.2.1 : maxnoofMeasurementInfo */
+#define MAX_LABEL_INFO  2147483648     /* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.1.2.1 : maxnoofLabelInfo */
+#define MAX_RIC_ACTION  16          /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.1.1.1 : maxofRICActionID */
+#define MAX_RIC_REQUEST 65535       /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.2.7 */
+
+#define STRING_SIZE_150_BYTES 150
+#define STRING_SIZE_1000_BYTES 1000
+
+#define SHORT_NAME "ORAN-E2SM-KPM"
+#define SERVICE_MODEL_OID  "1.3.6.1.4.1.53148.1.2.2.2"
+#define DESCRIPTION "KPM Monitor"
+#define NUM_OF_EVENT_TRIGGER_STYLE_SUPPORTED 1
+#define EVENT_TRIGGER_STYLE_NAME "Periodic Report"
+#define EVENT_TRIGGER_STYLE_TYPE 1
+#define EVENT_TRIGGER_STYLE_FORMAT_TYPE 1
+#define NUM_OF_RIC_REPORT_STYLE_SUPPORTED 1
+#define REPORT_STYLE_NAME "E2 Node Measurement"
+#define REPORT_STYLE_TYPE 1
+#define REPORT_ACTION_FORMAT_TYPE 1
+#define MEASUREMENT_TYPE_NAME (char*[]) {"RRU.PrbTotDl", "RRU.PrbTotUl"}
+#define RIC_INDICATION_HEADER_FORMAT 1
+#define RIC_INDICATION_MESSAGE_FORMAT 1
+
+/* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.2.26 */
+typedef enum
+{
+   NG,
+   XN,
+   E1,
+   F1,
+   W1,
+   S1,
+   X2
+}InterfaceType;
+
+typedef enum
+{
+   E2_NODE_COMPONENT_ADD,
+   E2_NODE_COMPONENT_UPDATE
+}ComponentActionType;
+
+/* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.2.30 */
+typedef enum
+{
+   RIC_SERVICE,
+   SUPPORT_FUNCTIONS,
+   BOTH_FUNCTIONALITY
+}AssocUsage;
+
+/* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.2.11 */
+typedef enum
+{
+   INSERT,
+   REPORT,
+   POLICY
+}ActionType;
 
 typedef enum
 {
@@ -106,20 +171,261 @@ typedef struct
    uint8_t procedureCode;
 }E2TransInfo;
 
-typedef struct e2apDb
-{
-   uint16_t     ricId;
-   uint8_t      transIdCounter;
-   E2TransInfo  onGoingTransaction[MAX_NUM_TRANSACTION];
-   uint8_t      *plmn;
-   uint32_t     ricReqId;
-   uint32_t     ricInstanceId;
-   uint32_t     ranFuncId;
-   uint8_t     *ricEventTrigger;
-   uint32_t     ricActionId;
-   uint32_t     ricActionType;
+typedef struct e2Transcation
+{
+   uint8_t     transIdCounter; /* counting the total number of DU initiated transaction */
+   E2TransInfo e2InitTransaction[MAX_NUM_TRANSACTION]; /* Storing DU-initiated transactions information */
+   E2TransInfo ricInitTransaction[MAX_NUM_TRANSACTION]; /* Storing RIC-initiated transactions information */
+}E2Transaction;
+
+typedef struct
+{
+   uint16_t   id;
+   uint16_t   revisionCounter;
+}RanFuncInfo;
+
+typedef struct
+{
+   uint8_t     numOfRanFunToBeAdded;
+   RanFuncInfo ranFunToBeAdded[MAX_RAN_FUNCTION];
+   uint8_t     numOfRanFunToBeModified;
+   RanFuncInfo ranFunToBeModified[MAX_RAN_FUNCTION];
+   uint8_t     numOfRanFunToBeDeleted;
+   RanFuncInfo ranFunToBeDeleted[MAX_RAN_FUNCTION];
+}E2TmpRanFunList;
+
+typedef struct ricServiceUpdate
+{
+   E2ProcedureDirection dir;
+   uint8_t              transId;
+   E2TmpRanFunList      recvRanFuncList;
+}RicServiceUpdate;
+
+typedef struct 
+{
+   RicServiceUpdate ricService;
+   CmTimer          timer;
+}RicServiceUpdateTimer;
+
+typedef struct e2Timer
+{
+   CmTimer e2SetupTimer;
+   RicServiceUpdateTimer ricServiceUpdateTimer;
+   /* More timers can be added to this structure in future */
+}E2Timer;
+
+
+/* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.2.4 */
+typedef struct
+{
+   Plmn     plmnId; 
+   uint32_t nearRtRicId;
+}GlobalRicId;
+
+/* O-RAN.WG3.E2SM-R003-v03.00 : Section 6.2.2.1 */
+typedef struct
+{
+   char  shortName[STRING_SIZE_150_BYTES];
+   char  serviceModelOID[STRING_SIZE_1000_BYTES];
+   char  description[STRING_SIZE_150_BYTES];
+}RanFunctionName;
+
+/* O-RAN.WG3.E2SM-R003-v03.00 : Section 6.2.2.2-6.2.2.4 */
+typedef struct
+{
+   uint8_t styleType;
+   char    name[STRING_SIZE_150_BYTES];
+   uint8_t formatType;
+}RicStyle;
+
+/* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.2.1 */
+typedef struct
+{
+   char     measurementTypeName[STRING_SIZE_150_BYTES];
+   uint16_t measurementTypeId;
+}MeasurementInfoForAction;
+
+typedef struct
+{
+   RicStyle       reportStyle;
+   CmLListCp      measurementInfoList;
+}RicReportStyle;
+
+/* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.2.7 */
+typedef struct
+{
+   uint16_t requestorId;
+   uint16_t instanceId;
+}RicRequestId;
+
+/* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.1.1.1 */
+typedef struct
+{
+   uint32_t reportingPeriod;
+}EventTriggerFormat1;
+
+/* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.1.1 */
+typedef struct
+{
+   uint8_t  formatType;
+   union
+   {
+      EventTriggerFormat1 format1;
+      /* More formats can be added in future */
+   }choice;
+}EventTriggerDefinition;
+
+/* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.3.11 */
+typedef struct
+{
+   /* TODO : To be added in future when subcounters for any
+    * measurment type is required */
+}LabelInfo;
+
+/* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.1.2.1 */
+typedef struct
+{
+   union
+   {
+      char     measurementTypeName[STRING_SIZE_150_BYTES];
+      uint16_t measurementTypeId;
+   }choice;
+
+   /* As of now Labels are not used, hence it is not implemented completely */
+   //uint32_t    numOfLabels;
+   //LabelInfo   LabelInfoList[MAX_LABEL_INFO];
+   
+   CmLListCp   measuredValue;  /* To be filled when numOfLabels is 0, else values are calculated per Label */
+}MeasurementInfo;
+
+/* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.1.2.1 */
+typedef struct
+{
+   CmLListCp               measurementInfoList;    /* Each node corresponds to MeasurementInfo */
+   uint32_t                granularityPeriod;      /* In millisecond */
+}ActionDefFormat1;
+
+/* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.1.2.2 */
+typedef struct
+{
+   /* TODO : This format will be defined in future if required */
+}ActionDefFormat2;
+
+/* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.1.2.3 */
+typedef struct
+{
+   /* TODO : This format will be defined in future if required */
+}ActionDefFormat3;
+
+/* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.1.2.4 */
+typedef struct
+{
+   /* TODO : This format will be defined in future if required */
+}ActionDefFormat4;
+
+/* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.1.2.5 */
+typedef struct
+{
+   /* TODO : This format will be defined in future if required */
+}ActionDefFormat5;
+
+/* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.1.2 */
+typedef struct
+{
+   uint8_t     styleType;
+   union
+   {
+      ActionDefFormat1  format1;
+      ActionDefFormat2  format2;
+      ActionDefFormat3  format3;
+      ActionDefFormat4  format4;
+      ActionDefFormat5  format5;
+   }choice;
+}ActionDefinition;
+
+/* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.1.1.1 : maxofRICActionID */
+typedef struct
+{
+   uint8_t           id;
+   ActionType        type;
+   ActionDefinition  definition;
+   ConfigType        action;
+}ActionInfo;
+
+/* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.1.1.1 : maxofRICActionID */
+typedef struct
+{
+   RicRequestId           requestId;
+   EventTriggerDefinition eventTriggerDefinition;
+   uint8_t                numOfActions;
+   ActionInfo             actionSequence[MAX_RIC_ACTION];  
+}RicSubscription;
+
+typedef struct
+{
+   /* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.2.1 */
+   uint16_t         id;
+   RanFunctionName  name;
+   uint16_t         revisionCounter;
+   uint8_t          numOfEventTriggerStyleSupported;
+   RicStyle         eventTriggerStyleList[MAX_RIC_STYLES];
+   uint8_t          numOfReportStyleSupported;
+   RicReportStyle   reportStyleList[MAX_RIC_STYLES];
+   uint8_t          ricIndicationHeaderFormat;
+   uint8_t          ricIndicationMessageFormat;
+   /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.1.1.1 */
+   CmLListCp        subscriptionList;
+}RanFunction;
+
+/* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.2.26-9.2.27 */
+typedef struct
+{
+   InterfaceType        interfaceType;
+   uint64_t             componentId; 
+   ComponentActionType  componentActionType;
+   uint8_t              reqBufSize;
+   uint8_t              *componentRequestPart;
+   uint8_t              rspBufSize;
+   uint8_t              *componentResponsePart;
+}E2NodeComponent;
+
+/* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.2.29 */
+
+typedef struct e2Ipaddr
+{
+   bool     ipV4Pres;
+   uint32_t ipV4Addr;
+}E2IpAddr;
+
+typedef struct
+{
+   E2IpAddr    localIpAddress;
+   uint16_t    localPort;
+   E2IpAddr    destIpAddress;
+   uint16_t    destPort;
+   AssocUsage  usage;
+}TNLAssociation;
+
+typedef struct e2TimersInfo
+{
+   E2Timer  e2Timers;
+   uint8_t  e2SetupTimerInterval;
+}E2TimersInfo;
+
+typedef struct
+{
+   uint64_t         e2NodeId; 
+   GlobalRicId      ricId;
+   E2Transaction    e2TransInfo;
+   uint16_t         numOfRanFunction;
+   RanFunction      ranFunction[MAX_RAN_FUNCTION];  
+   CmLListCp        e2NodeComponentList; 
+   uint8_t          numOfTNLAssoc;
+   TNLAssociation   tnlAssoc[MAX_TNL_ASSOCIATION];
+   E2TimersInfo     e2TimersInfo;
 }E2apDb;
 
+
 uint8_t assignTransactionId();
 uint8_t ResetE2Request(E2ProcedureDirection dir, E2CauseType type, E2Cause cause);
 uint8_t SendE2APMsg(Region region, Pool pool, char *encBuf, int encBufSize);