[Epic-ID: ODUHIGH-516][Task-ID: ODUHIGH-530] RIC Subscription Modification Req
[o-du/l2.git] / src / ric_stub / ric_stub.h
index bb7f095..a2663de 100644 (file)
 #define RIC_IP_V6_ADDR "0000:0000:0000:0000:0000:0000:0000:0011"
 
 #ifndef O1_ENABLE
-#define DU_IP_V4_ADDR (char*[]){"192.168.130.81", "192.168.130.83"}
-#define DU_SCTP_PORT (int[]){36421, 36422}
+#define LOCAL_IP_RIC "192.168.130.80"
 
-#define RIC_IP_V4_ADDR "192.168.130.80"
-#define RIC_SCTP_PORT_TO_DU (int[]){36421, 36422}
+#define E2_SCTP_PORT 36421
+#define NUM_E2_ASSOC 1 
+#define REMOTE_IP_DU (char*[]){"192.168.130.81", "192.168.130.83"}
 #endif
 
 #define RRC_VER 0
 
 #define RIC_APP_MEM_REG 1
 #define RIC_POOL 1
+#define MAX_RAN_FUNCTION 256        /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.1.2.2 : maxofRANfunctionID */
+#define MAX_NUM_TRANSACTION 256     /* As per, O-RAN WG3 E2AP v3.0, section 9.2.33 */
+#define MAX_E2_NODE_COMPONENT 1024     /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.1.2.2 : maxofE2nodeComponents */
+#define MAX_RIC_ACTION  16          /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.1.1.1 : maxofRICActionID */
+#define MAX_RIC_REQUEST 5           /* As per O-RAN.WG3.E2AP-R003-v03.00 : Section 9.2.7, max request is 65535. \
+                                     * But for our internal testing purpose, keeping it to 5 for now */
 
 /* allocate and zero out a static buffer */
 #define RIC_ALLOC(_datPtr, _size)                                \
    SPutSBuf(RIC_APP_MEM_REG, RIC_POOL,                         \
          (Data *)_datPtr, _size);
 
+#define SEARCH_DU_DB(_duIdx, _duId, _duDb){\
+   _duDb = NULLP; \
+   for(_duIdx=0; _duIdx < ricCb.numDu; _duIdx++)\
+   {\
+      if(ricCb.duInfo[_duIdx].duId == _duId)\
+      {\
+         _duDb =  (&ricCb.duInfo[_duIdx]);\
+         break; \
+     }\
+   }\
+}
+
+typedef enum
+{
+   ADD_CONNECTION,
+   MODIFY_CONNECTION,
+   REMOVE_CONNECTION
+}E2Connection;
+
+/* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.2.26 */
+typedef enum
+{
+   NG,
+   XN,
+   E1,
+   F1,
+   W1,
+   S1,
+   X2
+}InterfaceType;
+
+typedef struct
+{
+   uint16_t requestorId;
+   uint16_t instanceId;
+}RicRequestId;
+
+typedef struct
+{
+   int16_t         actionId;
+}ActionInfo;
+
+typedef struct ricSubscription
+{
+   RicRequestId    requestId;
+   uint16_t        ranFuncId;
+   uint8_t         numOfActions;
+   ActionInfo      actionSequence[MAX_RIC_ACTION];
+}RicSubscription;
+
+typedef struct
+{
+   uint16_t  id;
+   uint16_t  revisionCounter;
+   CmLListCp  subscriptionList;
+}RanFunction;
+
+typedef struct
+{
+   InterfaceType   interfaceType;
+   uint64_t        componentId;
+}E2NodeComponent;
+
+typedef struct duDb
+{
+   uint32_t        duId;
+   uint8_t         ricTransIdCounter;
+   uint16_t        numOfRanFunction;
+   RanFunction     ranFunction[MAX_RAN_FUNCTION];
+   CmLListCp       e2NodeComponent;
+}DuDb;
+
 typedef struct ricCfgParams
 {
-   uint32_t             ricId;
+   uint32_t        ricId;
    char            ricName[RIC_DU_NAME_LEN_MAX];
    RicSctpParams   sctpParams;
    Plmn            plmn;
 }RicCfgParams;
-RicCfgParams ricCfgParams; //global variable to hold all configs
+
+typedef struct cuGlobalCb
+{
+   RicCfgParams ricCfgParams;
+   uint8_t      numDu;
+   DuDb         duInfo[MAX_DU_SUPPORTED];
+}RicGlobalCb;
+
+RicGlobalCb ricCb;
+
+typedef struct
+{
+   uint8_t numOfRanFunAccepted;
+   RanFunction ranFunAcceptedList[MAX_RAN_FUNCTION];
+   uint8_t numOfRanFuneRejected;
+   RanFunction ranFunRejectedList[MAX_RAN_FUNCTION];
+}RicTmpRanFunList;
+
+typedef struct actionFailed
+{
+   uint8_t actionId;
+   uint8_t failureType;
+   uint8_t cause;
+}ActionFailed;
+
+typedef struct
+{
+   uint8_t numActionModified;
+   uint8_t actionModifiedList[MAX_RIC_ACTION];
+   uint8_t numActionModFailed;
+   ActionFailed actionModFailedList[MAX_RIC_ACTION];
+   uint8_t numActionRemoved;
+   uint8_t actionRemovedList[MAX_RIC_ACTION];
+   uint8_t numActionRemovalFailed;
+   ActionFailed actionRemovalFailedList[MAX_RIC_ACTION];
+}RicTmpActionList;
+
+typedef struct e2NodeCfgItem
+{
+   E2NodeComponent componentInfo;
+   bool           isSuccessful;
+}E2NodeConfigItem;
+
+typedef struct e2NodeCfgList
+{
+   uint16_t addedE2NodeCount;
+   E2NodeConfigItem addedE2Node[MAX_E2_NODE_COMPONENT];
+   uint16_t updatedE2NodeCount;
+   E2NodeConfigItem updatedE2Node[MAX_E2_NODE_COMPONENT];
+   uint16_t removedE2NodeCount;
+   E2NodeConfigItem removedE2Node[MAX_E2_NODE_COMPONENT];
+}E2NodeConfigList;
+
+typedef struct ricSubsActionInfo
+{
+   ConfigType  configType; 
+   uint16_t    actionId;
+}RicSubsActionInfo;
+
+typedef struct ricSubsModReq
+{ 
+    uint16_t   numOfActionToBeAdded;
+    ActionInfo actionToBeAdded[MAX_RIC_ACTION]; 
+    uint16_t   numOfActionToBeModify;
+    ActionInfo actionToBeModify[MAX_RIC_ACTION]; 
+    uint16_t   numOfActionToBeRemove;
+    ActionInfo actionToBeRemove[MAX_RIC_ACTION]; 
+}RicSubsModReq;
 
 void readRicCfg();
 void cuAppInmsgHdlr(Buffer *mBuf);