[Epic-ID: ODUHIGH-406][Task-ID: ODUHIGH-423]UE context creation at MAC/SCH in Target DU
[o-du/l2.git] / src / du_app / du_mgr.h
index cd059c1..c294cb8 100644 (file)
 #define DU_SET_ZERO(_buf, _size)   \
    memset((_buf), 0, _size);
 
+typedef enum
+{
+   SLICE_INFO_NOT_AVAILABLE,
+   SLICE_CONFIGURED,
+   SLICE_RECONFIGURED
+}SliceCfgState;
+
 typedef enum
 {
    CELL_OUT_OF_SERVICE,
@@ -68,47 +75,93 @@ 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;
 
 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;
 }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 */
@@ -116,19 +169,26 @@ typedef struct duUeCb
    UeState  ueState;         /* UE Active/ Ue Inactive state */
    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 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];       /* UE context created after RRC setup */
+   uint32_t       numHoUes;               /* Number of UE handover in progress */
+   DuUeCb         hoUeCb[MAX_NUM_UE];     /* UE context created before RACH for UE being handover to this DU */
+   SlotInfo       currSlotInfo;
 }DuCellCb;
 
 typedef struct duLSapCb
@@ -151,21 +211,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 +289,11 @@ 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
 
 /**********************************************************************