1 /*******************************************************************************
2 ################################################################################
3 # Copyright (c) [2017-2019] [Radisys] #
5 # Licensed under the Apache License, Version 2.0 (the "License"); #
6 # you may not use this file except in compliance with the License. #
7 # You may obtain a copy of the License at #
9 # http://www.apache.org/licenses/LICENSE-2.0 #
11 # Unless required by applicable law or agreed to in writing, software #
12 # distributed under the License is distributed on an "AS IS" BASIS, #
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
14 # See the License for the specific language governing permissions and #
15 # limitations under the License. #
16 ################################################################################
17 *******************************************************************************/
19 /* This file contains all E2AP message handler related functionality */
20 #define MAX_E2_SETUP_TMR 1
21 #define MAX_RIC_SERVICE_UPDATE_TMR 1
23 #define EVENT_E2_SETUP_TMR 1
24 #define EVENT_RIC_SERVICE_UPDATE_TMR 2
26 #define MAX_NUM_TRANSACTION 256 /* As per, O-RAN WG3 E2AP v3.0, section 9.2.33 */
27 #define MAX_RAN_FUNCTION 256 /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.1.2.2 : maxofRANfunctionID */
28 #define MAX_E2_NODE_COMPONENT 1024 /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.1.2.2 : maxofE2nodeComponents */
29 #define MAX_TNL_ASSOCIATION 32 /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.1.2.11 : maxofTNLA */
30 #define MAX_RIC_STYLES 64 /* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.2.1 : maxnoofRICstyle */
31 #define MAX_MEASUREMENT_INFO 65535 /* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.2.1 : maxnoofMeasurementInfo */
32 #define MAX_LABEL_INFO 2147483648 /* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.1.2.1 : maxnoofLabelInfo */
33 #define MAX_RIC_ACTION 16 /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.1.1.1 : maxofRICActionID */
34 #define MAX_RIC_REQUEST 65535 /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.2.7 */
35 #define MAX_PENDING_SUBSCRIPTION_RSP 5 /* Number of statistics request in processing */
37 #define STRING_SIZE_150_BYTES 150
38 #define STRING_SIZE_1000_BYTES 1000
40 #define SHORT_NAME "ORAN-E2SM-KPM"
41 #define SERVICE_MODEL_OID "1.3.6.1.4.1.53148.1.2.2.2"
42 #define DESCRIPTION "KPM Monitor"
43 #define NUM_OF_EVENT_TRIGGER_STYLE_SUPPORTED 1
44 #define EVENT_TRIGGER_STYLE_NAME "Periodic Report"
45 #define EVENT_TRIGGER_STYLE_TYPE 1
46 #define EVENT_TRIGGER_STYLE_FORMAT_TYPE 1
47 #define NUM_OF_RIC_REPORT_STYLE_SUPPORTED 1
48 #define REPORT_STYLE_NAME "E2 Node Measurement"
49 #define REPORT_STYLE_TYPE 1
50 #define REPORT_ACTION_FORMAT_TYPE 1
51 #define MEASUREMENT_TYPE_NAME (char*[]) {"RRU.PrbTotDl", "RRU.PrbTotUl"}
52 #define RIC_INDICATION_HEADER_FORMAT 1
53 #define RIC_INDICATION_MESSAGE_FORMAT 1
55 /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.2.26 */
69 E2_NODE_COMPONENT_ADD,
70 E2_NODE_COMPONENT_UPDATE
73 /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.2.30 */
81 /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.2.11 */
93 }E2ProcedureDirection;
97 E2_RAN_FUNCTION_ID_INVALID,
98 E2_ACTION_NOT_SUPPORTED,
99 E2_EXECESSIVE_ACTIONS,
101 E2_DUPLICATE_EVENT_TRIGGER,
102 E2_FUNCTION_RESOURCE_LIMIT,
103 E2_REQUEST_ID_UNKNOWN,
104 E2_INCONSISTENT_ACTION_SUBSEQUENT_ACTION_SEQUENCE,
105 E2_CONTROL_MESSAGE_INVALID,
106 E2_RIC_CALL_PROCESS_ID_INVALID,
107 E2_CONTROL_TIMER_EXPIRED,
108 E2_CONTROL_FAILED_TO_EXECUTE,
110 E2_RIC_REQUEST_CAUSE_UNSPECIFIED,
111 E2_RIC_SUBSCRIPTION_END_TIME_EXPIRED,
112 E2_RIC_SUBSCRIPTION_END_TIME_INVALID,
113 E2_DUPLICATE_RIC_REQUEST_ID,
114 E2_EVENT_TRIGGER_NOT_SUPPORTED,
115 E2_REQUEST_INFORMATION_UNAVAILABLE,
116 E2_INVALID_INFORMATION_REQUEST
121 E2_RAN_FUNCTION_NOT_SUPPORTED,
122 E2_EXCESSIVE_FUNCTIONS,
123 E2_RIC_RESOURCE_LIMIT,
128 E2_NODE_COMPONENT_UNKNOWN
133 E2_TRANSPORT_CAUSE_UNSPECIFIED,
134 E2_TRANSPORT_RESOURCE_UNAVAILABLE
139 E2_TRANSFER_SYNTAX_ERROR,
140 E2_ABSTRACT_SYNTAX_ERROR_REJECT,
141 E2_ABSTRACT_SYNTAX_ERROR_IGNORE_AND_NOTIFY,
142 E2_MESSAGE_NOT_COMPATIBLE_WITH_RECEIVER_STATE,
144 E2_ABSTRACT_SYNTAX_ERROR_FALSELY_CONSTRUCTED_MESSAGE,
145 E2_PROTOCOL_CAUSE_UNSPECIFIED
150 E2_CONTROL_PROCESSING_OVERLOAD,
153 E2_MISCELLANEOUS_CAUSE_UNSPECIFIED
167 typedef uint8_t E2Cause;
169 typedef struct e2FailureCause
171 E2CauseType causeType;
177 uint8_t transactionId;
178 uint8_t procedureCode;
181 typedef struct e2Transcation
183 uint8_t transIdCounter; /* counting the total number of DU initiated transaction */
184 E2TransInfo e2InitTransaction[MAX_NUM_TRANSACTION]; /* Storing DU-initiated transactions information */
185 E2TransInfo ricInitTransaction[MAX_NUM_TRANSACTION]; /* Storing RIC-initiated transactions information */
191 uint16_t revisionCounter;
196 uint8_t numOfRanFunToBeAdded;
197 RanFuncInfo ranFunToBeAdded[MAX_RAN_FUNCTION];
198 uint8_t numOfRanFunToBeModified;
199 RanFuncInfo ranFunToBeModified[MAX_RAN_FUNCTION];
200 uint8_t numOfRanFunToBeDeleted;
201 RanFuncInfo ranFunToBeDeleted[MAX_RAN_FUNCTION];
204 typedef struct ricServiceUpdate
206 E2ProcedureDirection dir;
208 E2TmpRanFunList recvRanFuncList;
213 RicServiceUpdate ricService;
215 }RicServiceUpdateTimer;
217 typedef struct e2Timer
219 CmTimer e2SetupTimer;
220 RicServiceUpdateTimer ricServiceUpdateTimer;
221 /* More timers can be added to this structure in future */
225 /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.2.4 */
229 uint32_t nearRtRicId;
232 /* O-RAN.WG3.E2SM-R003-v03.00 : Section 6.2.2.1 */
235 char shortName[STRING_SIZE_150_BYTES];
236 char serviceModelOID[STRING_SIZE_1000_BYTES];
237 char description[STRING_SIZE_150_BYTES];
240 /* O-RAN.WG3.E2SM-R003-v03.00 : Section 6.2.2.2-6.2.2.4 */
244 char name[STRING_SIZE_150_BYTES];
248 /* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.2.1 */
251 char measurementTypeName[STRING_SIZE_150_BYTES];
252 uint16_t measurementTypeId;
253 }MeasurementInfoForAction;
257 RicStyle reportStyle;
258 CmLListCp measurementInfoList;
261 /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.2.7 */
264 uint16_t requestorId;
268 /* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.1.1.1 */
271 uint32_t reportingPeriod; /* In milliseconds */
272 }EventTriggerFormat1;
274 /* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.1.1 */
280 EventTriggerFormat1 format1;
281 /* More formats can be added in future */
283 }EventTriggerDefinition;
285 /* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.3.11 */
288 /* TODO : To be added in future when subcounters for any
289 * measurment type is required */
292 /* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.1.2.1 */
295 char measurementTypeName[STRING_SIZE_150_BYTES];
296 uint16_t measurementTypeId;
298 /* As of now Labels are not used, hence it is not implemented completely */
299 //uint32_t numOfLabels;
300 //LabelInfo LabelInfoList[MAX_LABEL_INFO];
302 CmLListCp measuredValue; /* To be filled when numOfLabels is 0, else values are calculated per Label */
305 /* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.1.2.1 */
308 CmLListCp measurementInfoList; /* Each node corresponds to MeasurementInfo */
309 uint32_t granularityPeriod; /* In millisecond */
312 /* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.1.2.2 */
315 /* TODO : This format will be defined in future if required */
318 /* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.1.2.3 */
321 /* TODO : This format will be defined in future if required */
324 /* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.1.2.4 */
327 /* TODO : This format will be defined in future if required */
330 /* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.1.2.5 */
333 /* TODO : This format will be defined in future if required */
336 /* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.1.2 */
343 ActionDefFormat1 format1;
344 ActionDefFormat2 format2;
345 ActionDefFormat3 format3;
346 ActionDefFormat4 format4;
347 ActionDefFormat5 format5;
351 /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.1.1.1 : maxofRICActionID */
356 ActionDefinition definition;
360 /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.1.1.1 : maxofRICActionID */
363 RicRequestId requestId;
364 EventTriggerDefinition eventTriggerDefinition;
365 uint8_t numOfActions;
366 ActionInfo actionSequence[MAX_RIC_ACTION];
369 typedef struct rejectedAction
372 E2FailureCause failureCause;
375 typedef struct pendingSubsRspInfo
377 RicRequestId requestId;
379 uint8_t numOfAcceptedActions;
380 uint8_t acceptedActionList[MAX_RIC_ACTION];
381 uint8_t numOfRejectedActions;
382 RejectedAction rejectedActionList[MAX_RIC_ACTION];
387 /* O-RAN.WG3.E2SM-KPM-R003-v03.00 : Section 8.2.2.1 */
389 RanFunctionName name;
390 uint16_t revisionCounter;
391 uint8_t numOfEventTriggerStyleSupported;
392 RicStyle eventTriggerStyleList[MAX_RIC_STYLES];
393 uint8_t numOfReportStyleSupported;
394 RicReportStyle reportStyleList[MAX_RIC_STYLES];
395 uint8_t ricIndicationHeaderFormat;
396 uint8_t ricIndicationMessageFormat;
397 /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.1.1.1 */
398 CmLListCp subscriptionList;
399 uint8_t numPendingSubsRsp;
400 PendingSubsRspInfo pendingSubsRspInfo[MAX_PENDING_SUBSCRIPTION_RSP];
403 /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.2.26-9.2.27 */
406 InterfaceType interfaceType;
407 uint64_t componentId;
408 ComponentActionType componentActionType;
410 uint8_t *componentRequestPart;
412 uint8_t *componentResponsePart;
415 /* O-RAN.WG3.E2AP-R003-v03.00 : Section 9.2.29 */
417 typedef struct e2Ipaddr
425 E2IpAddr localIpAddress;
427 E2IpAddr destIpAddress;
432 typedef struct e2TimersInfo
435 uint8_t e2SetupTimerInterval;
442 E2Transaction e2TransInfo;
443 uint16_t numOfRanFunction;
444 RanFunction ranFunction[MAX_RAN_FUNCTION];
445 CmLListCp e2NodeComponentList;
446 uint8_t numOfTNLAssoc;
447 TNLAssociation tnlAssoc[MAX_TNL_ASSOCIATION];
448 E2TimersInfo e2TimersInfo;
451 uint8_t assignTransactionId();
452 ActionInfo *fetchActionInfoFromActionId(uint8_t actionId, RicSubscription *ricSubscriptionInfo);
453 RicSubscription *fetchSubsInfoFromRicReqId(RicRequestId ricReqId, RanFunction *ranFuncDb, CmLList **ricSubscriptionNode);
454 RanFunction *fetchRanFuncFromRanFuncId(uint16_t ranFuncId);
455 uint8_t fetchSubsInfoFromSubsId(uint64_t subscriptionId, RanFunction **ranFuncDb, CmLList **ricSubscriptionNode, \
456 RicSubscription **ricSubscriptionInfo);
458 uint8_t fillRicSubsInMacStatsReq(MacStatsReq *macStatsReq, uint16_t ranFuncId, RicSubscription* ricSubscriptionInfo);
459 void e2ProcStatsRsp(MacStatsRsp *statsRsp);
460 void e2ProcStatsInd(MacStatsInd *statsInd);
462 uint8_t ResetE2Request(E2ProcedureDirection dir, E2FailureCause resetCause);
463 uint8_t SendE2APMsg(Region region, Pool pool, char *encBuf, int encBufSize);
465 /**********************************************************************
467 **********************************************************************/