#define EVENT_RLC_UE_RECONFIG_REQ 215
#define EVENT_RLC_UE_RECONFIG_RSP 216
#define EVENT_DL_RRC_MSG_RSP_TO_DU 217
-#define EVENT_DL_USER_DATA_TRANS_TO_DU 218
+#define EVENT_DL_USER_DATA_TRANS_TO_RLC 218
#define EVENT_UL_USER_DATA_TRANS_TO_DU 219
+#define EVENT_RLC_UE_DELETE_REQ 220
+#define EVENT_RLC_UE_DELETE_RSP 221
+#define EVENT_RLC_SLICE_PM_TO_DU 222
+#define EVENT_RLC_UE_REESTABLISH_REQ 223
+#define EVENT_RLC_UE_REESTABLISH_RSP 224
+#define EVENT_RLC_MAX_RETRANSMISSION 225
#define RB_ID_SRB 0
#define RB_ID_DRB 1
-#define RB_TYPE_SRB 0 /* Signalling Radio Bearer */
-#define RB_TYPE_DRB 1 /* Data Radio Bearer */
-
/* RLC Direction Config */
#define RLC_CFG_DIR_UL 1 /*!< Uplink direction */
#define RLC_CFG_DIR_DL 2 /*!< Downlink direction */
#define LCH_DTCH 4 /*!< DTCH Logical Channel */
#define LCH_DCCH 5 /*!< DCCH Logical Channel */
+typedef enum
+{
+ RB_TYPE_SRB, /* Signalling Radio Bearer */
+ RB_TYPE_DRB /* Data Radio Bearer */
+}RlcRbType;
+
typedef enum
{
TRANSMISSION_IN_PROGRESS,
typedef enum
{
- RE_ASM_0MS,
- RE_ASM_5MS,
- RE_ASM_10MS,
- RE_ASM_15MS,
- RE_ASM_20MS,
- RE_ASM_25MS,
- RE_ASM_30MS,
- RE_ASM_35MS,
- RE_ASM_40MS,
- RE_ASM_45MS,
- RE_ASM_50MS,
- RE_ASM_55MS,
- RE_ASM_60MS,
- RE_ASM_65MS,
- RE_ASM_70MS,
- RE_ASM_75MS,
- RE_ASM_80MS,
- RE_ASM_85MS,
- RE_ASM_90MS,
- RE_ASM_95MS,
- RE_ASM_100MS,
- RE_ASM_105MS,
- RE_ASM_110MS,
- RE_ASM_115MS,
- RE_ASM_120MS,
- RE_ASM_125MS,
- RE_ASM_130MS,
- RE_ASM_135MS,
- RE_ASM_140MS,
- RE_ASM_145MS,
- RE_ASM_150MS,
- RE_ASM_155MS,
- RE_ASM_160MS,
- RE_ASM_165MS,
- RE_ASM_170MS,
- RE_ASM_175MS,
- RE_ASM_180MS,
- RE_ASM_185MS,
- RE_ASM_190MS,
- RE_ASM_195MS,
- RE_ASM_200MS,
- RE_ASM_SPARE1
-
-}TReAssembleTmr;
+ RLC_DU_APP_RSP_OK = 1,
+ RLC_DU_APP_RSP_NOK
+}RlcRsp;
-typedef enum
-{
- PROH_0MS,
- PROH_5MS,
- PROH_10MS,
- PROH_15MS,
- PROH_20MS,
- PROH_25MS,
- PROH_30MS,
- PROH_35MS,
- PROH_40MS,
- PROH_45MS,
- PROH_50MS,
- PROH_55MS,
- PROH_60MS,
- PROH_65MS,
- PROH_70MS,
- PROH_75MS,
- PROH_80MS,
- PROH_85MS,
- PROH_90MS,
- PROH_95MS,
- PROH_100MS,
- PROH_105MS,
- PROH_110MS,
- PROH_115MS,
- PROH_120MS,
- PROH_125MS,
- PROH_130MS,
- PROH_135MS,
- PROH_140MS,
- PROH_145MS,
- PROH_150MS,
- PROH_155MS,
- PROH_160MS,
- PROH_165MS,
- PROH_170MS,
- PROH_175MS,
- PROH_180MS,
- PROH_185MS,
- PROH_190MS,
- PROH_195MS,
- PROH_200MS,
- PROH_205MS,
- PROH_210MS,
- PROH_215MS,
- PROH_220MS,
- PROH_225MS,
- PROH_230MS,
- PROH_235MS,
- PROH_240MS,
- PROH_245MS,
- PROH_250MS,
- PROH_300MS,
- PROH_350MS,
- PROH_400MS,
- PROH_450MS,
- PROH_500MS,
- PROH_800MS,
- PROH_1000MS,
- PROH_1200MS,
- PROH_1600MS,
- PROH_2000MS,
- PROH_2400MS,
- PROH_SPARE2,
- PROH_SPARE1
-
-}TStatProhTmr;
+/* Ref: ORAN_WG8.V7.0.0 Sec 11.2.5.10 RLC Max Retransmission Reached */
-typedef enum
+typedef struct rlcMaxRetransInd
{
- RLC_DU_APP_RSP_NOK,
- RLC_DU_APP_RSP_OK
-}RlcRsp;
+ uint16_t cellId;
+ uint16_t ueId;
+ RlcRbType lcType;
+ uint8_t lcId;
+}RlcMaxRetransInfo;
typedef struct ulAmCfg
{
SnLenAm snLenUl; /* Sequence Number length in bits. Allowed values are 12 and 18 */
- TReAssembleTmr reAssemTmr; /* T_reassembling Timer in msec*/
- TStatProhTmr statProhTmr; /* T_status_prohibit Timer in msec*/
+ int8_t reAssemTmr; /* T_reassembling Timer in msec*/
+ int16_t statProhTmr; /* T_status_prohibit Timer in msec*/
}UlAmCfg;
int16_t pollPdu; /* Used to trigger a poll for every pollPdu.*/
int32_t pollByte; /* Poll_Byte in bytes. */
uint8_t maxRetxTh; /* Max_Retx_Threshold */
-
+
}DlAmCfg;
typedef struct dlUmCfg
typedef struct ulUmCfg
{
SnLenUm snLenUlUm; /* Sequence Number length in bits. Allowed values are 6 and 12 */
- TReAssembleTmr reAssemTmr; /* T_reassembling Timer in msec*/
+ int8_t reAssemTmr; /* T_reassembling Timer in msec*/
}UlUmCfg;
/* Spec Ref: 38.331, 6.3.2 RLC-BearerConfig */
typedef struct rlcBearerCfg
{
- ConfigType configType;
uint8_t rbId;
- uint8_t rbType;
+ RlcRbType rbType;
uint8_t lcId;
uint8_t lcType;
+ Snssai *snssai;
RlcMode rlcMode;
union
{
UmUniDirUlBearerCfg *umUniDirUlCfg;
UmUniDirDlBearerCfg *umUniDirDlCfg;
}u;
+ bool isLcAddModRspSent;
}RlcBearerCfg;
-typedef struct rlcUeCfg
+/* Ref: ORAN_WG8.V7.0.0 Sec 11.2.5.3 UE Reconfiguration */
+typedef struct rlcUeRecfg
{
- uint16_t cellId;
- uint8_t ueIdx;
- uint8_t numLcs;
- RlcBearerCfg rlcLcCfg[MAX_NUM_LC];
- UeCfgState rlcUeCfgState; /* InActive / Completed */
-}RlcUeCfg;
+ uint16_t cellId;
+ uint8_t ueId;
+ uint8_t numLcsToAdd;
+ RlcBearerCfg rlcLcCfgAdd[MAX_NUM_LC];
+ uint8_t numLcsToMod;
+ RlcBearerCfg rlcLcCfgMod[MAX_NUM_LC];
+ uint8_t numLcsToRel;
+ RlcBearerCfg rlcLcCfgRel[MAX_NUM_LC];
+}RlcUeRecfg;
+
+/* Ref: ORAN_WG8.V7.0.0 Sec 11.2.5.1 UE Create */
+typedef struct rlcUeCreate
+{
+ uint16_t cellId;
+ uint8_t ueId;
+ uint8_t numLcsToAdd;
+ RlcBearerCfg rlcLcCfgAdd[MAX_NUM_LC];
+}RlcUeCreate;
-typedef struct rlcUeCfgRsp
+/* Ref: ORAN_WG8.V7.0.0 Sec 11.2.5.2 UE Create Response */
+typedef struct rlcUeCreateRsp
{
uint16_t cellId;
- uint16_t ueIdx;
+ uint16_t ueId;
RlcRsp result;
FailureReason reason;
-}RlcUeCfgRsp;
+}RlcUeCreateRsp;
-/* UL RRC Message from RLC to DU APP */
+/* Ref: ORAN_WG8.V7.0.0 Sec 11.2.5.4 UE Reconfig Response */
+typedef struct rlcUeCreateRsp RlcUeReconfigRsp;
+
+/* Ref: ORAN_WG8.V7.0.0 Sec 11.2.5.5 UE Delete Response */
+typedef struct rlcUeDelete
+{
+ uint16_t cellId;
+ uint8_t ueId;
+}RlcUeDelete;
+
+/* Ref: ORAN_WG8.V7.0.0 Sec 11.2.5.6 UE Delete Response */
+typedef struct rlcUeDeleteRsp
+{
+ uint16_t cellId;
+ uint8_t ueId;
+ CauseOfResult status;
+}RlcUeDeleteRsp;
+
+/* Ref: ORAN_WG8.V7.0.0 Sec 11.2.5.8 UL RRC Message Transfer*/
typedef struct ulRrcMsgInfo
{
uint16_t cellId; /* Cell Id */
- uint16_t ueIdx; /* UE Index */
+ uint16_t ueId; /* UE Id */
uint8_t lcId; /* Logical channel Id */
uint16_t msgLen; /* RRC message length (in bytes) */
uint8_t *rrcMsg; /* RRC Message (UL-DCCH Message) */
}RlcUlRrcMsgInfo;
-/* UL User Data from RLC to DU APP */
-typedef struct ulUserDatInfo
-{
- uint16_t cellId; /* Cell Id */
- uint16_t ueIdx; /* UE Index */
- uint8_t rbId;
- uint16_t msgLen; /* User data length (in bytes) */
- uint8_t *userData; /* User data (UL-DTCH Message) */
-}RlcUlUserDatInfo;
-
-/* DL RRC Message from DU APP to RLC */
+/* Ref: ORAN_WG8.V7.0.0 Sec 11.2.5.7 DL RRC Message Transfer */
typedef struct dlRrcMsgInfo
{
uint16_t cellId; /* Cell Id */
- uint16_t ueIdx; /* UE index */
- uint8_t rbType; /* Radio Bearer Type */
- uint8_t rbId; /* Radio Bearer Id */
- uint8_t lcType; /* Logical channel type */
- uint8_t lcId; /* Logical channel Id */
+ uint16_t ueId; /* UE Id */
+ uint8_t lcId; /* Logical channel Id {1...3} */
bool execDup; /* Execution duplication enabled */
bool deliveryStaRpt; /* Reporting of delivery status by RLC to DU-APP enabled */
uint16_t msgLen; /* RRC Message length */
uint8_t *rrcMsg; /* RRC Message (DL-DCCH Message) */
}RlcDlRrcMsgInfo;
-/* DL RRC Message Rsp From RLC to DU APP */
+/* UL User Data from RLC to DU APP */
+typedef struct ulUserDatInfo
+{
+ uint16_t cellId; /* Cell Id */
+ uint16_t ueId; /* UE Id */
+ uint8_t rbId;
+ uint16_t msgLen; /* User data length (in bytes) */
+ uint8_t *userData; /* User data (UL-DTCH Message) */
+}RlcUlUserDatInfo;
+
+/* DL RRC Message Rsp From RLC to DU APP */
typedef struct dlRrcMsgRsp
{
uint16_t cellId; /* Cell Id */
DlMsgState state; /* Dl RRC Msg State */
}RlcDlRrcMsgRsp;
-/* RRC delivery message from RLC to DU APP */
+typedef struct
+{
+ uint32_t sd:24;
+ uint8_t sst;
+}SliceIdentifier;
+
+/*Pm Metric for NW Slicing from RLC to DUAPP*/
+typedef struct slicePm
+{
+ SliceIdentifier networkSliceIdentifier;
+ double ThpDl;
+ double ThpUl;
+}SlicePm;
+
+typedef struct slicePmList
+{
+ uint8_t numSlice;
+ SlicePm *sliceRecord;
+}SlicePmList;
+
+/* DL Data Message from DU APP to RLC */
+typedef struct dlDataMsgInfo
+{
+ uint16_t cellId; /* Cell Id */
+ uint16_t ueId; /* UE Id */
+ uint8_t rbId; /* Radio Bearer Id {4 .. MAC\7fX_NUM_DRB} */
+ uint16_t msgLen; /* Message length */
+ Buffer *dlMsg; /* DL Data */
+}RlcDlUserDataInfo;
+
+/*Ref: ORAN_WG8.V7.0.0 Sec 11.2.5.9 UL RRC Message Delivery Report */
typedef struct rrcDeliveryStatus
{
uint16_t deliveryStatus;
typedef struct rrcDeliveryReportInfo
{
uint16_t cellId;
- uint16_t ueIdx;
+ uint16_t ueId;
uint8_t srbId;
RrcDeliveryStatus rrcDeliveryStatus;
}RrcDeliveryReport;
+/*Ref: ORAN_WG8.V7.0.0 Sec 11.2.5.11 UE RLC Re-establishment Req */
+
+typedef struct rlcUeReestablishReq
+{
+ uint16_t cellId;
+ uint16_t ueId;
+ uint8_t numLcsToReestablish;
+ uint8_t lcToReestablish[MAX_NUM_LC];
+}RlcUeReestablishReq;
+
+/*Ref: ORAN_WG8.V7.0.0 Sec 11.2.5.12 UE RLC Re-establishment Rsp */
+typedef struct rlcUeReestablishRsp
+{
+ uint16_t cellId;
+ uint16_t ueId;
+ CauseOfResult status;
+}RlcUeReestablishRsp;
+
/* Function Pointers */
+
+/* Max Retransmission from RLC to DU APP*/
+typedef uint8_t (*RlcDuMaxRetransInd) ARGS((
+ Pst *pst,
+ RlcMaxRetransInfo *maxRetransInfo));
+
/* UE create Request from DU APP to RLC*/
typedef uint8_t (*DuRlcUeCreateReq) ARGS((
Pst *pst,
- RlcUeCfg *ueCfg ));
+ RlcUeCreate *ueCfg ));
+
+/* UE Create Response from RLC to DU APP*/
+typedef uint8_t (*RlcDuUeCreateRsp) ARGS((
+ Pst *pst,
+ RlcUeCreateRsp *ueCreateRsp));
-/* UE Cfg Response from RLC to DU APP*/
-typedef uint8_t (*RlcDuUeCfgRsp) ARGS((
+/* UE Delete Response from RLC to DU APP*/
+typedef uint8_t (*RlcDuUeDeleteRsp) ARGS((
Pst *pst,
- RlcUeCfgRsp *ueCfgRsp));
+ RlcUeDeleteRsp *ueDelRsp));
/* UL RRC Message from RLC to DU APP */
typedef uint8_t (*RlcUlRrcMsgToDuFunc) ARGS((
Pst *pst,
RrcDeliveryReport *rrcDeliveryReport));
+/* UE Reconfig Request from DU APP to RLC */
typedef uint8_t (*DuRlcUeReconfigReq) ARGS((
Pst *pst,
- RlcUeCfg *ueCfg ));
+ RlcUeRecfg *ueRecfg ));
+
+/* UE Reconfig Response from RLC to DU APP*/
+typedef uint8_t (*RlcDuUeReconfigRsp) ARGS((
+ Pst *pst,
+ RlcUeReconfigRsp *ueReconfigRsp));
+
+/* UE Delete Request from DU APP to RLC */
+typedef uint8_t (*DuRlcUeDeleteReq) ARGS((
+ Pst *pst,
+ RlcUeDelete *ueDelete));
/* DL RRC Message from RLC to DU APP */
typedef uint8_t (*RlcDlRrcMsgRspToDuFunc) ARGS((
Pst *pst,
RlcUlUserDatInfo *ulUserData));
+/* DL User Data from DU APP to RLC */
+typedef uint8_t (*DuRlcDlUserDataToRlcFunc) ARGS((
+ Pst *pst,
+ RlcDlUserDataInfo *dlDataMsg));
+
+/* Slice Metrics from RLC to DU APP */
+typedef uint8_t (*RlcSlicePmToDuFunc) ARGS((
+ Pst *pst,
+ SlicePmList *sliceStats));
+
+/* UE Re-establishment Request from DU APP to RLC */
+typedef uint8_t (*DuRlcUeReestablishReq) ARGS((
+ Pst *pst,
+ RlcUeReestablishReq *ueReestablishReq));
+
+/* UE Re-establishment Response from RLC to DU APP*/
+typedef uint8_t (*RlcDuUeReestablishRsp) ARGS((
+ Pst *pst,
+ RlcUeReestablishRsp *ueDelRsp));
+
/* Pack/Unpack function declarations */
-uint8_t packDuRlcUeCreateReq(Pst *pst, RlcUeCfg *ueCfg);
+uint8_t packRlcDuMaxRetransInd(Pst *pst, RlcMaxRetransInfo *maxRetransInd);
+uint8_t unpackRlcMaxRetransInd(RlcDuMaxRetransInd func, Pst *pst, Buffer *mBuf);
+uint8_t packDuRlcUeCreateReq(Pst *pst, RlcUeCreate *ueCfg);
uint8_t unpackRlcUeCreateReq(DuRlcUeCreateReq func, Pst *pst, Buffer *mBuf);
-uint8_t packRlcDuUeCfgRsp(Pst *pst, RlcUeCfgRsp *ueCfgRsp);
-uint8_t unpackRlcUeCfgRsp(RlcDuUeCfgRsp func, Pst *pst, Buffer *mBuf);
+uint8_t packRlcDuUeCreateRsp(Pst *pst, RlcUeCreateRsp *ueCfgRsp);
+uint8_t unpackRlcUeCreateRsp(RlcDuUeCreateRsp func, Pst *pst, Buffer *mBuf);
+uint8_t packRlcDuUeReconfigRsp(Pst *pst, RlcUeReconfigRsp *ueCfgRsp);
+uint8_t unpackRlcUeReconfigRsp(RlcDuUeReconfigRsp func, Pst *pst, Buffer *mBuf);
uint8_t packRlcUlRrcMsgToDu(Pst *pst, RlcUlRrcMsgInfo *ulRrcMsgInfo);
uint8_t unpackRlcUlRrcMsgToDu(RlcUlRrcMsgToDuFunc func, Pst *pst, Buffer *mBuf);
uint8_t packDlRrcMsgToRlc(Pst *pst, RlcDlRrcMsgInfo *dlRrcMsgInfo);
uint8_t unpackDlRrcMsgToRlc(DuDlRrcMsgToRlcFunc func, Pst *pst, Buffer *mBuf);
uint8_t packRrcDeliveryReportToDu(Pst *pst, RrcDeliveryReport *rrcDeliveryReport);
uint8_t unpackRrcDeliveryReportToDu(RlcRrcDeliveryReportToDuFunc func,Pst *pst, Buffer *mBuf);
-uint8_t packDuRlcUeReconfigReq(Pst *pst, RlcUeCfg *ueCfg);
+uint8_t packDuRlcUeReconfigReq(Pst *pst, RlcUeRecfg *ueCfg);
uint8_t unpackRlcUeReconfigReq(DuRlcUeReconfigReq func, Pst *pst, Buffer *mBuf);
uint8_t packRlcDlRrcMsgRspToDu(Pst *pst, RlcDlRrcMsgRsp *dlRrcMsgRsp);
uint8_t unpackRlcDlRrcMsgRspToDu(RlcDlRrcMsgRspToDuFunc func, Pst *pst, Buffer *mBuf);
uint8_t packRlcUlUserDataToDu(Pst *pst, RlcUlUserDatInfo *ulUserData);
uint8_t unpackRlcUlUserDataToDu(RlcUlUserDataToDuFunc func, Pst *pst, Buffer *mBuf);
+uint8_t packRlcDlUserDataToRlc(Pst *pst, RlcDlUserDataInfo *dlDataMsg);
+uint8_t unpackRlcDlUserDataToRlc(DuRlcDlUserDataToRlcFunc func, Pst *pst, Buffer *mBuf);
+uint8_t packDuRlcUeDeleteReq(Pst *pst, RlcUeDelete *ueDelete);
+uint8_t unpackRlcUeDeleteReq(DuRlcUeDeleteReq func, Pst *pst, Buffer *mBuf);
+uint8_t packRlcDuUeDeleteRsp(Pst *pst, RlcUeDeleteRsp *ueDeleteRsp);
+uint8_t unpackRlcUeDeleteRsp(RlcDuUeDeleteRsp func, Pst *pst, Buffer *mBuf);
+uint8_t packRlcDuSlicePm(Pst *pst, SlicePmList *sliceStats);
+uint8_t unpackRlcSlicePm(RlcSlicePmToDuFunc func, Pst *pst, Buffer *mBuf);
+uint8_t packDuRlcUeReestablishReq(Pst *pst, RlcUeReestablishReq *ueReestablish);
+uint8_t unpackRlcUeReestablishReq(DuRlcUeReestablishReq func, Pst *pst, Buffer *mBuf);
+uint8_t packRlcDuUeReestablishRsp(Pst *pst, RlcUeReestablishRsp *ueReestablishRsp);
+uint8_t unpackRlcUeReestablishRsp(RlcDuUeReestablishRsp func, Pst *pst, Buffer *mBuf);
/* Event Handler function declarations */
-uint8_t RlcProcUeCreateReq(Pst *pst, RlcUeCfg *ueCfg);
-uint8_t DuProcRlcUeCfgRsp(Pst *pst, RlcUeCfgRsp *cfgRsp);
+uint8_t DuProcRlcMaxRetransInd(Pst *pst, RlcMaxRetransInfo *maxRetransInd);
+uint8_t RlcProcUeCreateReq(Pst *pst, RlcUeCreate *ueCfg);
+uint8_t DuProcRlcUeCreateRsp(Pst *pst, RlcUeCreateRsp *cfgRsp);
+uint8_t DuProcRlcUeReconfigRsp(Pst *pst, RlcUeReconfigRsp *recfgRsp);
uint8_t DuProcRlcUlRrcMsgTrans(Pst *pst, RlcUlRrcMsgInfo *ulRrcMsgInfo);
uint8_t RlcProcDlRrcMsgTransfer(Pst *pst, RlcDlRrcMsgInfo *dlRrcMsgInfo);
uint8_t DuProcRlcRrcDeliveryReport(Pst *pst, RrcDeliveryReport *rrcDeliveryReport);
-uint8_t RlcProcUeReconfigReq(Pst *pst, RlcUeCfg *ueCfg);
+uint8_t RlcProcUeReconfigReq(Pst *pst, RlcUeRecfg *ueCfg);
uint8_t DuProcRlcDlRrcMsgRsp(Pst *pst, RlcDlRrcMsgRsp *dlRrcMsg);
uint8_t DuProcRlcUlUserDataTrans(Pst *pst, RlcUlUserDatInfo *ulUserData);
-
+uint8_t RlcProcDlUserDataTransfer(Pst *pst, RlcDlUserDataInfo *dlDataMsgInfo);
+uint8_t RlcProcUeDeleteReq(Pst *pst, RlcUeDelete *ueDelete);
+uint8_t DuProcRlcUeDeleteRsp(Pst *pst, RlcUeDeleteRsp *delRsp);
+uint8_t DuProcRlcSliceMetrics(Pst *pst, SlicePmList *sliceStats);
+uint8_t RlcProcUeReestablishReq(Pst *pst, RlcUeReestablishReq *ueReestablish);
+uint8_t DuProcRlcUeReestablishRsp(Pst *pst, RlcUeReestablishRsp *delRsp);
#endif /* RLC_INF_H */
/**********************************************************************