X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fdu_app%2Fdu_mgr.h;h=e7345f58d8536b9cc2a9f16062d43a741a4f51a2;hb=6bd517aac8dc6e3166389be3f468c58ba56d5608;hp=cd059c1087884a00b4fb45de184b1be98e8c1b55;hpb=7c6820e987fadb1102e5891408ad33a8ce36ba95;p=o-du%2Fl2.git diff --git a/src/du_app/du_mgr.h b/src/du_app/du_mgr.h index cd059c108..e7345f58d 100644 --- a/src/du_app/du_mgr.h +++ b/src/du_app/du_mgr.h @@ -57,6 +57,16 @@ #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, + SLICE_CONFIGURED, + SLICE_RECONFIGURED +}SliceCfgState; + typedef enum { CELL_OUT_OF_SERVICE, @@ -68,67 +78,174 @@ typedef enum typedef enum { UE_INACTIVE, - UE_ACTIVE + UE_ACTIVE, + UE_HANDIN_IN_PROGRESS, + UE_DELETION_IN_PROGRESS }UeState; typedef enum { UE_CTXT_UNKNOWN, UE_CTXT_SETUP, - UE_CTXT_MOD + UE_CTXT_MOD, + UE_CTXT_RRC_RECFG_COMPLETE, + UE_CTXT_CFG_QUERY, + UE_CTXT_RELEASE }UeCtxtActionType; -typedef struct cellCfgParams +/** F1AP Msg IE **/ +typedef struct f1setupRsp { - NrEcgi nrEcgi; /* ECGI */ - 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; + 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 duUeCfg { + void *cellGrpCfg; + void *ueNrCapability; uint8_t numRlcLcs; /* Rlc Ue Cfg */ RlcBearerCfg rlcLcCfg[MAX_NUM_LC]; uint8_t numMacLcs; /* Mac Ue Cfg */ LcCfg macLcCfg[MAX_NUM_LC]; - MaxAggrBitRate *maxAggrBitRate; + 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; + DataTransmissionAction dataTransmissionAction; +#ifdef NR_DRX + bool drxCyclePres; + DrxCycle drxCycle; + bool drxConfigIndicatorRelease; +#endif }DuUeCfg; -typedef struct ueContextSetup +typedef struct f1UeContextSetup { UeCtxtActionType actionType; - uint8_t cellIdx; - void *cellGrpCfg; - uint16_t rrcMsgLen; - uint8_t *rrcMsg; - bool deliveryStaReq; - DuUeCfg duUeCfg; /* Du Ue Cfg */ -}UeContextSetupDb; + uint8_t cellIdx; + DuUeCfg duUeCfg; + bool dlRrcMsgPres; + F1DlRrcMsg *dlRrcMsg; +}F1UeContextSetupDb; + +typedef struct cellCfgParams +{ + NrEcgi nrEcgi; /* ECGI */ + 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 */ MacUeCfg macUeCfg; /* Mac Ue Cfg */ RlcUeCfg rlcUeCfg; /* Rlc Ue Cfg */ - UeContextSetupDb *f1UeDb; }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 */ - CellCfgParams cellInfo; /* Cell info */ + 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; - bool firstSlotIndRcvd; - CellStatus cellStatus; /* Cell status */ - uint32_t numActvUes; /* Total Active UEs */ - DuUeCb ueCb[MAX_NUM_UE]; /* UE CONTEXT */ + 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 @@ -151,21 +268,33 @@ typedef struct ueCcchCtxt 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; /* 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 */ - uint8_t numCfgCells; - DuCellCb* cfgCellLst[MAX_NUM_CELL]; /* List of cells at DU APP of type DuCellCb */ - uint8_t numActvCells; - DuCellCb* actvCellLst[MAX_NUM_CELL]; /* List of cells activated/to be activated of type DuCellCb */ - uint32_t numUe; /* current number of UEs */ - UeCcchCtxt ueCcchCtxt[MAX_NUM_UE]; /* mapping of gnbDuUeF1apId to CRNTI required for CCCH processing*/ + Mem mem; /* Memory configs */ + TskInit init; /* DU Init */ + bool f1Status; /* Status of F1 connection */ + bool e2Status; /* Status of E2 connection */ + 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; + F1SetupMsg f1SetupReqAndRspMsg; }DuCb; @@ -217,13 +346,12 @@ uint8_t duBuildEgtpCfgReq(); uint8_t duHdlEgtpCfgComplete(CmStatus cfm); uint8_t duSendEgtpSrvOpenReq(); uint8_t duHdlEgtpSrvOpenComplete(CmStatus cfm); -uint8_t duSendEgtpTnlMgmtReq(uint8_t action, uint32_t lclTeid, uint32_t remTeid); -uint8_t duHdlEgtpTnlMgmtCfm(EgtpTnlEvt tnlEvtCfm); -uint8_t duSendEgtpTestData(); +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 duBuildAndSendMacCellStartReq(); -uint8_t duBuildAndSendMacCellStopReq(); +uint8_t duBuildAndSendMacCellStart(); +uint8_t duBuildAndSendMacCellStop(uint16_t cellId); + #endif /**********************************************************************