*******************************************************************************/
/* This file contains all E2AP message handler related functionality */
-
-#define MAX_NUM_TRANSACTION 256 /* As per, O-RAN WG3 E2AP v3.0, section 9.2.33 */
#define MAX_E2_SETUP_TMR 1
+#define MAX_E2_NODE_CONFIG_UPDATE_TMR 1
+#define MAX_RIC_SERVICE_UPDATE_TMR 1
+#define MAX_RIC_SUBSCRIPTION_REPORTING_TMR 1
+
#define EVENT_E2_SETUP_TMR 1
+#define EVENT_RIC_SERVICE_UPDATE_TMR 2
+#define EVENT_E2_NODE_CONFIG_UPDATE_TMR 3
+#define EVENT_RIC_SUBSCRIPTION_REPORTING_TMR 4
+
+#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_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 MAX_PENDING_SUBSCRIPTION_RSP 5 /* Number of statistics request in processing */
#define STRING_SIZE_150_BYTES 150
#define STRING_SIZE_1000_BYTES 1000
#define REPORT_STYLE_NAME "E2 Node Measurement"
#define REPORT_STYLE_TYPE 1
#define REPORT_ACTION_FORMAT_TYPE 1
-#define NUM_OF_MEASUREMENT_INFO_SUPPORTED 2
#define MEASUREMENT_TYPE_NAME (char*[]) {"RRU.PrbTotDl", "RRU.PrbTotUl"}
#define RIC_INDICATION_HEADER_FORMAT 1
#define RIC_INDICATION_MESSAGE_FORMAT 1
typedef enum
{
E2_NODE_COMPONENT_ADD,
- E2_NODE_COMPONENT_UPDATE
+ E2_NODE_COMPONENT_UPDATE,
+ E2_NODE_COMPONENT_DEL
}ComponentActionType;
+
/* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.2.30 */
typedef enum
{
/* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.2.11 */
typedef enum
{
- INSERT,
REPORT,
+ INSERT,
POLICY
}ActionType;
typedef uint8_t E2Cause;
+typedef struct e2FailureCause
+{
+ E2CauseType causeType;
+ uint8_t cause;
+}E2FailureCause;
+
typedef struct
{
uint8_t transactionId;
typedef struct e2Transcation
{
- uint8_t transIdCounter;
- E2TransInfo onGoingTransaction[MAX_NUM_TRANSACTION];
- /* Any new parameter for transaction handling can be added here in future */
+ 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 e2NodeCfgItem
+{
+ InterfaceType interface;
+ uint64_t componentId;
+}E2NodeConfigItem;
+
+typedef struct e2NodeCfgList
+{
+ uint16_t addE2NodeCount;
+ E2NodeConfigItem addE2Node[MAX_E2_NODE_COMPONENT];
+ uint16_t updateE2NodeCount;
+ E2NodeConfigItem updateE2Node[MAX_E2_NODE_COMPONENT];
+ uint16_t removeE2NodeCount;
+ E2NodeConfigItem removeE2Node[MAX_E2_NODE_COMPONENT];
+}E2NodeConfigList;
+
+typedef struct
+{
+ E2NodeConfigList configList;
+ CmTimer timer;
+}E2NodeConfigUpdateTimer;
+
typedef struct e2Timer
{
CmTimer e2SetupTimer;
+ RicServiceUpdateTimer ricServiceUpdateTimer;
+ E2NodeConfigUpdateTimer e2NodeConfigUpdate;
/* More timers can be added to this structure in future */
}E2Timer;
uint16_t instanceId;
}RicRequestId;
+typedef struct reportStartTime
+{
+ uint32_t timeInSec;
+ uint32_t timeInMilliSec;
+}ReportStartTime;
+
/* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.1.1.1 */
typedef struct
{
- uint32_t reportingPeriod;
+ uint32_t reportingPeriod; /* In milliseconds */
+ ReportStartTime startTime;
}EventTriggerFormat1;
/* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.1.1 */
/* 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;
+ char measurementTypeName[STRING_SIZE_150_BYTES];
+ uint16_t measurementTypeId;
/* 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;
typedef struct
{
uint8_t styleType;
+ uint8_t formatType;
union
{
ActionDefFormat1 format1;
/* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.1.1.1 : maxofRICActionID */
typedef struct
{
- uint8_t id;
+ int16_t actionId; /* O-RAN.WG3.E2AP-R003-v03.00 Section 9.2.10. Valid action id range = 0..255 */
ActionType type;
ActionDefinition definition;
ConfigType action;
+ E2FailureCause failureCause; /* Used only when an action is required to be deleted */
}ActionInfo;
/* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.1.1.1 : maxofRICActionID */
typedef struct
{
RicRequestId requestId;
+ uint16_t ranFuncId;
EventTriggerDefinition eventTriggerDefinition;
- uint8_t numOfActions;
- ActionInfo actionSequence[MAX_RIC_ACTION];
+ CmLListCp actionSequence;
+ CmTimer ricSubsReportTimer;
+ ConfigType action;
+ E2FailureCause failureCause; /* Used only when a subscription is required to be deleted */
}RicSubscription;
+typedef struct rejectedAction
+{
+ uint8_t id;
+ E2FailureCause failureCause;
+}RejectedAction;
+
+typedef struct pendingSubsRspInfo
+{
+ RicRequestId requestId;
+ uint16_t ranFuncId;
+ uint8_t numOfAcceptedActions;
+ uint8_t acceptedActionList[MAX_RIC_ACTION];
+ uint8_t numOfRejectedActions;
+ RejectedAction rejectedActionList[MAX_RIC_ACTION];
+}PendingSubsRspInfo;
+
+typedef struct actionStatus
+{
+ uint8_t numOfAcceptedActions;
+ uint8_t acceptedActionList[MAX_RIC_ACTION];
+ uint8_t numOfRejectedActions;
+ RejectedAction rejectedActionList[MAX_RIC_ACTION];
+}ActionStatus;
+
+typedef struct pendingSubsModRspInfo
+{
+ RicRequestId requestId;
+ uint16_t ranFuncId;
+ bool addActionCompleted;
+ ActionStatus addActionStatus;
+ bool modActionCompleted;
+ ActionStatus modActionStatus;
+ bool removeActionCompleted;
+ ActionStatus removeActionStatus;
+}PendingSubsModRspInfo;
+
typedef struct
{
/* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.2.1 */
uint8_t ricIndicationMessageFormat;
/* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.1.1.1 */
CmLListCp subscriptionList;
+ uint8_t numPendingSubsRsp;
+ PendingSubsRspInfo pendingSubsRspInfo[MAX_PENDING_SUBSCRIPTION_RSP];
+ uint8_t numPendingSubsModRsp;
+ PendingSubsModRspInfo pendingSubsModRspInfo[MAX_PENDING_SUBSCRIPTION_RSP];
}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;
+ uint8_t reqBufSize;
+ uint8_t *componentRequestPart;
+ uint8_t rspBufSize;
+ uint8_t *componentResponsePart;
+}E2NodeConfig;
+
+typedef struct
+{
+ InterfaceType interfaceType;
+ uint64_t componentId;
+ E2NodeConfig *addConfiguration;
+ E2NodeConfig *updateConfiguration;
+ bool deleteConfiguration;
}E2NodeComponent;
/* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.2.29 */
E2TimersInfo e2TimersInfo;
}E2apDb;
+typedef struct e2ConnectionItem
+{
+ uint32_t ipV4Addr;
+ AssocUsage usage;
+}E2ConnectionItem;
+
+typedef struct e2ConnectionList
+{
+ uint8_t numOfE2ConnectionSetup;
+ E2ConnectionItem setupE2Connection[MAX_TNL_ASSOCIATION];
+ uint8_t numOfE2ConnectionFailedToSetup;
+ E2ConnectionItem failedToSetupE2Connection[MAX_TNL_ASSOCIATION];
+}E2ConnectionList;
+
uint8_t assignTransactionId();
-uint8_t ResetE2Request(E2ProcedureDirection dir, E2CauseType type, E2Cause cause);
+ActionInfo *fetchActionInfoFromActionId(uint8_t actionId, RicSubscription *ricSubscriptionInfo, CmLList ** actionNode, ConfigType configType);
+RicSubscription *fetchSubsInfoFromRicReqId(RicRequestId ricReqId, RanFunction *ranFuncDb, CmLList **ricSubscriptionNode);
+RanFunction *fetchRanFuncFromRanFuncId(uint16_t ranFuncId);
+uint8_t fetchSubsInfoFromSubsId(uint64_t subscriptionId, RanFunction **ranFuncDb, CmLList **ricSubscriptionNode, \
+ RicSubscription **ricSubscriptionInfo);
+void fetchRicSubsToBeDeleted(CmLListCp *ricSubsToBeDelList);
+
+uint8_t fillRicSubsInMacStatsReq(MacStatsReq *macStatsReq, RicSubscription* ricSubscriptionInfo);
+uint8_t e2ProcStatsRsp(MacStatsRsp *statsRsp);
+uint8_t e2ProcStatsInd(MacStatsInd *statsInd);
+void E2apHdlRicSubsReportTmrExp(RicSubscription *ricSubscription);
+
+uint8_t ResetE2Request(E2ProcedureDirection dir, E2FailureCause resetCause);
uint8_t SendE2APMsg(Region region, Pool pool, char *encBuf, int encBufSize);
+E2NodeComponent *fetchE2NodeComponentInfo(InterfaceType interfaceType, uint64_t componentId, CmLList **e2ComponentNode);
+uint8_t fillE2NodeComponentReqInfo(InterfaceType interfaceType, uint64_t componentId, uint8_t action, uint8_t bufSize, char *bufString);
+uint8_t fillE2NodeComponentRspInfo(InterfaceType interfaceType, uint64_t componentId, uint8_t action, uint8_t bufSize, char *bufString);
+void deleteRicSubscriptionList(CmLListCp *subscriptionList);
+void deleteRicSubscriptionNode(CmLList *ricSubscriptionInfo);
+void deleteMeasurementInfoList(CmLListCp *measInfoList);
+void deleteActionSequence(CmLList *action);
+void deleteMeasuredValueList(CmLListCp *measuredValueList);
+void removeE2NodeInformation();
+void encodeSubscriptionId(uint64_t *subscriptionId, uint16_t ranFuncId, RicRequestId ricReqId);
+uint8_t e2ProcStatsDeleteRsp(MacStatsDeleteRsp *statsDeleteRsp);
+uint8_t fillRicSubsInMacStatsModificationReq(MacStatsModificationReq *macStatsModReq, RicSubscription* ricSubscriptionInfo);
+uint8_t e2ProcActionDeleteRsp(MacStatsDeleteRsp *statsDeleteRsp);
+uint8_t e2ProcStatsModificationRsp(MacStatsModificationRsp *statsModificationRsp);
+uint8_t duProcPendingSubsModRsp( PendingSubsModRspInfo *pendingSubsModRsp);
/**********************************************************************
End of file
**********************************************************************/