X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fdu_app%2Fdu_mgr.h;h=9202092f4fe54f1e30793d110211f61a9f74c278;hb=5b0a8c1ccec481f354d22c1dff57b35bf72a1622;hp=99ceeeb62b7449a79a792c349d53f176fa892dec;hpb=0fccb83e55b237d60cf451bab71a0c7242cc6e66;p=o-du%2Fl2.git diff --git a/src/du_app/du_mgr.h b/src/du_app/du_mgr.h index 99ceeeb62..9202092f4 100644 --- a/src/du_app/du_mgr.h +++ b/src/du_app/du_mgr.h @@ -19,70 +19,7 @@ /* This file contains message handling functionality for DU cell management */ #ifndef __DU_MGR_H__ #define __DU_MGR_H__ - -#include "stdio.h" -#include "ctype.h" -#include "envopt.h" /* Environment options */ -#include "envdep.h" /* Environment dependent */ -#include "envind.h" /* Environment independent */ -#include "gen.h" /* General */ -#include "ssi.h" /* System services */ -#include "cm5.h" /* Common timer defines */ -#include "cm_tkns.h" /* Common tokens defines */ -#include "cm_mblk.h" /* Common memory allocation library defines */ -#include "cm_llist.h" /* Common link list defines */ -#include "cm_hash.h" /* Common hashlist defines */ -#include "cm_lte.h" -#include "cm_inet.h" -#include "lkw.h" -#include "lrg.h" -#include "legtp.h" -#include "du_app_mac_inf.h" - -#include "gen.x" /* General */ -#include "ssi.x" /* System services */ - -#include "cm5.x" /* Common timer library */ -#include "cm_tkns.x" /* Common tokens */ -#include "cm_mblk.x" /* Common memory allocation */ -#include "cm_llist.x" /* Common link list */ -#include "cm_hash.x" /* Common hashlist */ -#include "cm_lte.x" -#include "cm_inet.x" -#include "cm_lib.x" -#include "lkw.x" -#include "lrg.x" - -#include "du_cfg.h" - #define DU_PROC 0 -/* Memory related configs */ -#define DU_APP_MEM_REGION 0 -#define RLC_UL_MEM_REGION 1 -#define RLC_DL_MEM_REGION 4 -#define MAC_MEM_REGION 4 - -#define DU_POOL 1 -#define RLC_POOL 1 -#define RG_POOL 1 - -/* Events */ -#define EVTCFG 0 -#define EVTSCTPSTRT 1 -#define EVENT_CU_DATA 2 -#define EVENT_SCTP_NTFY 3 -#define EVTSRVOPENREQ 4 -#define EVTSRVOPENCFM 5 -#define EVTTNLMGMTREQ 6 -#define EVTTNLMGMTCFM 7 -#define EVTSLOTIND 8 -#define EVTSTARTPOLL 9 -#define EVENT_RIC_DATA 10 - -/* Selector */ -#define DU_SELECTOR_LC 0 -#define DU_SELECTOR_TC 1 -#define DU_SELECTOR_LWLC 2 /* SAP IDs */ #define DU_MAC_SUID 0 @@ -100,7 +37,6 @@ #define DU_ZERO_VAL 0 /* Macros */ - #define ADD 0 #define DEL 1 @@ -119,52 +55,17 @@ #define MAC_CONFIGURED (MAC_GEN_CFG | MAC_SAP_CFG) #define DU_SET_ZERO(_buf, _size) \ - cmMemset((U8 *)(_buf), 0, _size); - -/* allocate and zero out a static buffer */ -#define DU_ALLOC(_datPtr, _size) \ -{ \ - S16 _ret; \ - _ret = SGetSBuf(DU_APP_MEM_REGION, DU_POOL, \ - (Data **)&_datPtr, _size); \ - if(_ret == ROK) \ - cmMemset((U8*)_datPtr, 0, _size); \ - else \ - _datPtr = NULLP; \ -} - -/* free a static buffer */ -#define DU_FREE(_datPtr, _size) \ - if(_datPtr) \ - SPutSBuf(DU_APP_MEM_REGION, DU_POOL, \ - (Data *)_datPtr, _size); - -/* Allocate shared memory to be used for LWLC - * during inter-layer communication */ -#define DU_ALLOC_SHRABL_BUF(_buf, _size) \ -{ \ - if(SGetStaticBuffer(DU_APP_MEM_REGION, DU_POOL, \ - (Data **)&_buf, (Size) _size, 0) == ROK) \ - { \ - cmMemset((U8 *)(_buf), 0, _size); \ - } \ - else \ - { \ - (_buf) = NULLP; \ - } \ -} - -/* Free shared memory, received through LWLC */ -#define DU_FREE_SHRABL_BUF(_region, _pool,_buf, _size) \ -{ \ - if (_buf != NULLP) \ - { \ - (Void) SPutStaticBuffer(_region, _pool, \ - (Data *) _buf, (Size) _size, 0); \ - _buf = NULLP; \ - } \ -} + memset((_buf), 0, _size); +/*Refer Spec 38.331 Annexure A: maxNrofPageRec : 32 [Maximum number of page records]*/ +#define MAX_PAGING_UE_RECORDS 32 + +typedef enum +{ + SLICE_INFO_NOT_AVAILABLE, + SLICE_CONFIGURED, + SLICE_RECONFIGURED +}SliceCfgState; typedef enum { @@ -174,22 +75,224 @@ typedef enum DELETION_IN_PROGRESS }CellStatus; +typedef enum +{ + UE_INACTIVE, + UE_ACTIVE, + UE_HANDIN_IN_PROGRESS, + UE_DELETION_IN_PROGRESS, + UE_RESET_IN_PROGRESS +}UeState; + +typedef enum +{ + UE_CTXT_UNKNOWN, + UE_CTXT_SETUP, + UE_CTXT_MOD, + UE_CTXT_RRC_RECFG_COMPLETE, + UE_CTXT_CFG_QUERY, + UE_CTXT_RELEASE +}UeCtxtActionType; + +/** F1AP Msg IE **/ +typedef struct f1setupRsp +{ + uint32_t transId; /* Uniquely identify transaction */ + char cuName[CU_DU_NAME_LEN_MAX]; /* CU Name */ + F1RrcVersion rrcVersion; /* RRC version */ +}F1SetupRsp; + +typedef struct f1DlRrcMsg +{ + uint32_t gnbDuUeF1apId; + uint32_t gnbCuUeF1apId; + uint8_t srbId; + bool execDup; + bool deliveryStatRpt; + uint16_t rrcMsgSize; + uint8_t *rrcMsgPdu; +}F1DlRrcMsg; + +typedef struct gtpTnlCfg +{ + uint32_t ulTnlAddress; /* remote Address */ + uint32_t dlTnlAddress; /* local Address */ + uint32_t teId; +}GtpTnlCfg; + +typedef struct upTnlCfg +{ + ConfigType configType; + uint8_t cellId; + uint8_t ueId; + uint8_t drbId; + GtpTnlCfg *tnlCfg1; /* Tunnel 1 */ + GtpTnlCfg *tnlCfg2; /* Tunnel 2 */ +}UpTnlCfg; + +#ifdef NR_DRX +/* This structures is taken from the DRX Cycle section of + * specification 33.473. */ +typedef struct drxCycle +{ + uint16_t drxLongCycleLength; + bool shortDrxCyclePres; + ShortDrx shortDrxCycle; +}DrxCycle; +#endif + +typedef struct duLcCfg +{ + ConfigType configType; + LcCfg lcConfig; +}DuLcCfg; + +typedef struct duMacUeCfg +{ + uint16_t cellId; + uint8_t ueId; + uint16_t crnti; + bool macCellGrpCfgPres; + MacCellGrpCfg macCellGrpCfg; + bool phyCellGrpCfgPres; + PhyCellGrpCfg phyCellGrpCfg; + bool spCellCfgPres; + SpCellRecfg spCellCfg; + AmbrCfg *ambrCfg; + ModulationInfo dlModInfo; /* DL modulation info */ //TBD + ModulationInfo ulModInfo; /* UL modulation info */ //TBD + uint8_t numLcs; + DuLcCfg lcCfgList[MAX_NUM_LC]; + UeCfgState macUeCfgState; /* InActive / Completed */ //TBD + DataTransmissionAction transmissionAction; //TBD +#ifdef NR_DRX + bool drxConfigIndicatorRelease; +#endif +}DuMacUeCfg; + +typedef struct duRlcBearerCfg +{ + ConfigType configType; + RlcBearerCfg rlcBearerCfg; +}DuRlcBearerCfg; + +typedef struct duRlcUeCfg +{ + uint16_t cellId; + uint8_t ueId; + uint8_t numLcs; + DuRlcBearerCfg rlcLcCfg[MAX_NUM_LC]; + UeCfgState rlcUeCfgState; /* InActive / Completed */ +}DuRlcUeCfg; + + +typedef struct duUeCfg +{ + void *cellGrpCfg; + void *ueNrCapability; + uint8_t numRlcLcs; /* Rlc Ue Cfg */ + DuRlcBearerCfg rlcLcCfg[MAX_NUM_LC]; + uint8_t numMacLcs; /* Mac Ue Cfg */ + DuLcCfg macLcCfg[MAX_NUM_LC]; + AmbrCfg *ambrCfg; + uint8_t numDrb; + UpTnlCfg upTnlInfo[MAX_NUM_DRB]; /* User plane TNL Info*/ + uint8_t numDrbSetupMod; /*No. of DRB Added during Modification*/ + uint8_t numDrbModified; /*No. of DRB Modified during Modification*/ + DuMacUeCfg copyOfmacUeCfg; + DataTransmissionAction dataTransmissionAction; +#ifdef NR_DRX + bool drxCyclePres; + DrxCycle drxCycle; + bool drxConfigIndicatorRelease; +#endif +}DuUeCfg; + +typedef struct f1UeContextSetup +{ + UeCtxtActionType actionType; + uint8_t cellIdx; + DuUeCfg duUeCfg; + bool dlRrcMsgPres; + F1DlRrcMsg *dlRrcMsg; +}F1UeContextSetupDb; + typedef struct cellCfgParams { NrEcgi nrEcgi; /* ECGI */ - U16 nrPci; /* PCI */ - U16 fiveGsTac; /* 5gSTac */ - Plmn plmn[MAX_PLMN]; /* List of serving PLMN IDs */ - U32 maxUe; /* max UE per slot */ + uint16_t nrPci; /* PCI */ + uint16_t fiveGsTac; /* 5gSTac */ + Plmn plmn[MAX_PLMN]; /* List of serving PLMN IDs */ + uint32_t maxUe; /* max UE per slot */ }CellCfgParams; +typedef struct duUeCb +{ + F1UeContextSetupDb *f1UeDb; + uint16_t crnti; + uint32_t gnbDuUeF1apId; /* GNB DU UE F1AP ID */ + uint32_t gnbCuUeF1apId; /* GNB CU UE F1AP ID */ + uint32_t drbBitMap; /* Drb Bit Map */ + UeState ueState; /* UE Active/ Ue Inactive state */ + MacCfraResource cfraResource; /* CF-RA resource assigned by MAC/SCH */ + DuMacUeCfg duMacUeCfg; /* Mac Ue Cfg */ + DuRlcUeCfg duRlcUeCfg; /* Rlc Ue Cfg */ +}DuUeCb; + +typedef struct slotInfo +{ + uint16_t sfn; + uint16_t slot; +}SlotInfo; + +typedef struct pagingMsg +{ + /*Note: Paging UEID is extracted from 5gSTMSI as per Spec 38.304, Sec 7.1. + *This is not same as DU-UE_F1AP_ID or CU_UE_F1AP_ID*/ + uint16_t pagUeId; /* UE Identifier from CU*/ + + /*TODO: When RAN Inititated Paging will be supported then I-RNTI will be + * added as a choice for UE Identity along with S-TMSI*/ + uint64_t sTmsi; /* UE Paging Identity: S-TMSI */ + bool pagingDrxPres; /* flag to indicate paging drx present or not */ + uint16_t pagingDrx; /* UE specific paging drx */ + uint8_t pagPriority; /* Paging priority */ + uint16_t pagingFrame; /* paging frame */ + uint16_t pagingFrameOffset; /* paging offset */ + uint8_t i_s; /* Index points to PO from the sub-frame pattern */ + uint16_t T; /* T is DRX cycle of the UE */ +}DuPagingMsg; + +typedef struct duPagUeRecord +{ + uint16_t pagUeId; /*UEID calculated from 5gsTMSI as per Spec 38.304*/ + uint64_t sTmsi; /* UE Paging Identity: S-TMSI */ +}DuPagUeRecord; + +typedef struct duPagInfo +{ + uint8_t i_s; /*Index of PO*/ + CmLListCp pagUeList; /*List of UEs to be paged in this Paging Frame/Paging Occ*/ +}DuPagUeList; + +typedef struct duPagInfoMap +{ + uint16_t pf; /* Paging Frame*/ + CmLListCp pagInfoList; /* Master List of Paging Identified by PF and i_s*/ +}DuPagInfoList; typedef struct duCellCb { - U32 cellId; /* Internal cell Id */ - CellCfgParams cellInfo; /* Cell info */ - Bool firstSlotIndRcvd; - CellStatus cellStatus; /*Cell status */ + uint16_t cellId; /* Internal cell Id */ + CellCfgParams cellInfo; /* Cell info */ + /* pointer to store the address of macCellCfg params used to send du-app to MAC */ + MacCellCfg *duMacCellCfg; + CellStatus cellStatus; /* Cell status */ + uint32_t numActvUes; /* Total Active UEs */ + DuUeCb ueCb[MAX_NUM_UE]; /* Stores UE context */ + SlotInfo currSlotInfo; + DuPagingMsg tmpPagingInfoOfUe; /* UE paging information */ + CmHashListCp pagingInfoMap; /*Paging Map between PF and PagingInfoList*/ }DuCellCb; typedef struct duLSapCb @@ -200,23 +303,53 @@ typedef struct duLSapCb State sapState; Mem mem; CmTimer timer; - U8 bndRetryCnt; - U8 maxBndRetry; + uint8_t bndRetryCnt; + uint8_t maxBndRetry; TmrCfg bndTmr; }DuLSapCb; +typedef struct ueCcchCtxt +{ + uint32_t gnbDuUeF1apId; /* GNB DU UE F1AP ID */ + uint16_t crnti; /* CRNTI */ + uint16_t cellId; /* Cell Id */ +}UeCcchCtxt; + +/* This structure is added to store the information about the F1AP pdu and + * transId so that It can be used in future */ +typedef struct reservedF1apPduInfo +{ + uint8_t transId; /* trans Id */ + void *f1apMsg; /* msg structure */ +}ReservedF1apPduInfo; + +typedef struct duTimer +{ + CmTqCp tmrTqCp; /*!< Timer Task Queue Cntrl Point */ + CmTqType tmrTq[DU_TQ_SIZE]; /*!< Timer Task Queue */ + uint8_t tmrRes; /*!< Timer resolution */ +}DuTimers; + /* DU APP DB */ typedef struct duCb { - Mem mem; /* Memory configs */ - TskInit init; /* DU Init */ - //DuLSapCb **macSap; /* MAC SAP */ - Bool f1Status; /* Status of F1 connection */ - Bool e2Status; /* Status of E2 connection */ - DuCellCb* cfgCellLst[DU_MAX_CELLS]; /* List of cells at DU APP of type DuCellCb */ - DuCellCb* actvCellLst[DU_MAX_CELLS]; /* List of cells activated/to be activated of type DuCellCb */ - /* pointer to store the address of macCellCfg params used to send du-app to MAC */ - MacCellCfg *duMacCellCfg; /* pointer to store params while sending DU-APP to MAC */ + Mem mem; /* Memory configs */ + TskInit init; /* DU Init */ + bool f1Status; /* Status of F1 connection */ + bool e2Status; /* Status of E2 connection */ + E2apDb e2apDb; /* E2AP database */ + uint8_t numCfgCells; /* number of configured cells */ + DuCellCb* cfgCellLst[MAX_NUM_CELL]; /* List of cells at DU APP of type DuCellCb */ + uint8_t numActvCells; /* Number of active cells */ + DuCellCb* actvCellLst[MAX_NUM_CELL]; /* List of cells activated/to be activated of type DuCellCb */ + uint32_t gnbDuUeF1apIdGenerator; /* Generating Du Ue F1ap Id */ + uint32_t numUe; /* current number of UEs */ + UeCcchCtxt ueCcchCtxt[MAX_NUM_UE]; /* mapping of gnbDuUeF1apId to CRNTI required for CCCH processing*/ + uint8_t numTeId; /* current number of TEIDs configured in the system*/ + UpTnlCfg* upTnlCfg[MAX_TEID]; /* tunnel info for every Drb */ + CmLListCp reservedF1apPduList; /*storing F1AP pdu infomation and transId */ + SliceCfgState sliceState; /* Slice status */ + DuTimers duTimersInfo; /* Du timers queue */ }DuCb; @@ -233,7 +366,7 @@ typedef struct duLSapCfg Route dstRoute; Selector dstSel; Mem mem; - U8 maxBndRetry; + uint8_t maxBndRetry; TmrCfg bndTmr; TmrCfg connTmr; }DuLSapCfg; @@ -243,41 +376,39 @@ DuCb duCb; //DuCfgParams duCfgParam; /* DU Cell Functions */ -S16 duActvInit(Ent entity, Inst inst, Region region, Reason reason); -S16 duActvTsk(Pst *pst, Buffer *mBuf); -S16 duSendRlcUlCfg(); -S16 duSendRlcDlCfg(); -S16 duBuildRlcCfg(Inst inst); -S16 duBuildRlcLsapCfg(Ent ent, Inst inst, U8 lsapInst); -S16 duBuildRlcUsapCfg(U8 elemId, Ent ent, Inst inst); -S16 duHdlRlcCfgComplete(Pst *pst, KwMngmt *cfm); -S16 duHdlRlcCntrlCfgComplete(Pst *pst, KwMngmt *cfm); -S16 duProcRlcUlCfgComplete(Pst *pst, KwMngmt *cfm); -S16 duProcRlcDlCfgComplete(Pst *pst, KwMngmt *cfm); -S16 duSendMacCfg(); -S16 duBuildMacGenCfg(); -S16 duBuildMacUsapCfg(SpId sapId); -S16 duHdlMacCfgComplete(Pst *pst, RgMngmt *cfm); -S16 duBindUnbindRlcToMacSap(U8 inst, U8 action); -S16 duProcCfgComplete(); -S16 duSendSchCfg(); -S16 duSctpStartReq(); -S16 duSctpNtfyHdl(Buffer *mBuf, CmInetSctpNotification *ntfy); - -S16 duBuildEgtpCfgReq(); -S16 duHdlEgtpCfgComplete(CmStatus cfm); -S16 duSendEgtpSrvOpenReq(); -S16 duHdlEgtpSrvOpenComplete(CmStatus cfm); -S16 duSendEgtpTnlMgmtReq(U8 action, U32 lclTeid, U32 remTeid); -S16 duHdlEgtpTnlMgmtCfm(EgtpTnlEvt tnlEvtCfm); -S16 duSendEgtpTestData(); -S16 duSendEgtpDatInd(Buffer *mBuf); -S16 duHdlSchCfgComplete(Pst *pst, RgMngmt *cfm); -uint16_t duBuildAndSendMacCellStartReq(); -uint16_t duBuildAndSendMacCellStopReq(); +uint8_t duActvInit(Ent entity, Inst inst, Region region, Reason reason); +uint8_t duActvTsk(Pst *pst, Buffer *mBuf); +uint8_t duSendRlcUlCfg(); +uint8_t duSendRlcDlCfg(); +uint8_t duBuildRlcCfg(Inst inst); +uint8_t duBuildRlcLsapCfg(Ent ent, Inst inst, uint8_t lsapInst); +uint8_t duBuildRlcUsapCfg(uint8_t elemId, Ent ent, Inst inst); +uint8_t DuHdlRlcCfgComplete(Pst *pst, RlcMngmt *cfm); +uint8_t duHdlRlcCntrlCfgComplete(Pst *pst, RlcMngmt *cfm); +uint8_t duProcRlcUlCfgComplete(Pst *pst, RlcMngmt *cfm); +uint8_t duProcRlcDlCfgComplete(Pst *pst, RlcMngmt *cfm); +uint8_t duSendMacCfg(); +uint8_t duBuildMacGenCfg(); +uint8_t duBuildMacUsapCfg(SpId sapId); +uint8_t duHdlMacCfgComplete(Pst *pst, RgMngmt *cfm); +uint8_t duBindUnbindRlcToMacSap(uint8_t inst, uint8_t action); +uint8_t duProcCfgComplete(); +uint8_t duSendSchCfg(); +uint8_t duSctpStartReq(); +uint8_t duSctpNtfyHdl(Buffer *mBuf, CmInetSctpNotification *ntfy); + +uint8_t duBuildEgtpCfgReq(); +uint8_t duHdlEgtpCfgComplete(CmStatus cfm); +uint8_t duSendEgtpSrvOpenReq(); +uint8_t duHdlEgtpSrvOpenComplete(CmStatus cfm); +uint8_t duSendEgtpTnlMgmtReq(uint8_t action, uint32_t teIdMod, GtpTnlCfg *tnlInfo); +uint8_t duSendEgtpDatInd(Buffer *mBuf); +uint8_t duHdlSchCfgComplete(Pst *pst, RgMngmt *cfm); +uint8_t duBuildAndSendMacCellStart(); +uint8_t duBuildAndSendMacCellStop(uint16_t cellId); #endif /********************************************************************** - End of file -**********************************************************************/ + End of file + **********************************************************************/