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=04e0b8a902d4dba421d5355c5be267bc0dc35064;hpb=c548e17125cafaa528acd0f040f93c188b00a488;p=o-du%2Fl2.git diff --git a/src/du_app/du_mgr.h b/src/du_app/du_mgr.h index 04e0b8a90..9202092f4 100644 --- a/src/du_app/du_mgr.h +++ b/src/du_app/du_mgr.h @@ -57,6 +57,9 @@ #define DU_SET_ZERO(_buf, _size) \ 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, @@ -76,7 +79,9 @@ typedef enum { UE_INACTIVE, UE_ACTIVE, - UE_DELETION_IN_PROGRESS + UE_HANDIN_IN_PROGRESS, + UE_DELETION_IN_PROGRESS, + UE_RESET_IN_PROGRESS }UeState; typedef enum @@ -84,6 +89,8 @@ typedef enum UE_CTXT_UNKNOWN, UE_CTXT_SETUP, UE_CTXT_MOD, + UE_CTXT_RRC_RECFG_COMPLETE, + UE_CTXT_CFG_QUERY, UE_CTXT_RELEASE }UeCtxtActionType; @@ -123,19 +130,82 @@ typedef struct upTnlCfg 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 */ - RlcBearerCfg rlcLcCfg[MAX_NUM_LC]; + DuRlcBearerCfg rlcLcCfg[MAX_NUM_LC]; uint8_t numMacLcs; /* Mac Ue Cfg */ - LcCfg macLcCfg[MAX_NUM_LC]; + 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*/ - MacUeCfg copyOfmacUeCfg; + 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 @@ -164,10 +234,53 @@ typedef struct duUeCb uint32_t gnbCuUeF1apId; /* GNB CU UE F1AP ID */ uint32_t drbBitMap; /* Drb Bit Map */ UeState ueState; /* UE Active/ Ue Inactive state */ - MacUeCfg macUeCfg; /* Mac Ue Cfg */ - RlcUeCfg rlcUeCfg; /* Rlc Ue Cfg */ + 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 { uint16_t cellId; /* Internal cell Id */ @@ -175,9 +288,11 @@ typedef struct duCellCb /* pointer to store the address of macCellCfg params used to send du-app to MAC */ MacCellCfg *duMacCellCfg; CellStatus cellStatus; /* Cell status */ - uint32_t gnbDuUeF1apIdGenerator; /* Generating Du Ue F1ap Id */ uint32_t numActvUes; /* Total Active UEs */ - DuUeCb ueCb[MAX_NUM_UE]; /* UE CONTEXT */ + 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 @@ -208,6 +323,13 @@ typedef struct reservedF1apPduInfo 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 { @@ -215,17 +337,19 @@ typedef struct duCb 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 */ + 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; - F1SetupMsg f1SetupReqAndRspMsg; + SliceCfgState sliceState; /* Slice status */ + DuTimers duTimersInfo; /* Du timers queue */ }DuCb; @@ -282,6 +406,7 @@ uint8_t duSendEgtpDatInd(Buffer *mBuf); uint8_t duHdlSchCfgComplete(Pst *pst, RgMngmt *cfm); uint8_t duBuildAndSendMacCellStart(); uint8_t duBuildAndSendMacCellStop(uint16_t cellId); + #endif /**********************************************************************