[Epic-ID: ODUHIGH-406] [Task-ID: ODUHIGH-439] Building Paging RRC PDU
[o-du/l2.git] / src / du_app / du_mgr.h
index b0c553e..d5a2dda 100644 (file)
 /* 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"
-
 #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 RG_MEM_REGION     4
-
-#define DU_POOL  1
-#define RLC_POOL  1
-#define RG_POOL 1
-
-/* Events */
-#define EVTCFG 0
-#define EVTSCTPSTRT  1
-#define EVTSCTPDATA  2
-#define EVTSCTPNTFY  3
-#define EVTSRVOPENREQ  4
-#define EVTSRVOPENCFM  5
-#define EVTTNLMGMTREQ  6
-#define EVTTNLMGMTCFM  7
-#define EVTTTIIND    8
-
-/* Selector */
-#define DU_SELECTOR_LC   0
-#define DU_SELECTOR_TC   1
-#define DU_SELECTOR_LWLC 2
 
 /* SAP IDs */
 #define DU_MAC_SUID 0
@@ -96,9 +37,6 @@
 #define DU_ZERO_VAL 0
 
 /* Macros */
-#define DEFAULT_CELLS    1
-#define NR_RANAC 150
-
 #define ADD 0
 #define DEL 1
 
 #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);
+   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
 {
-   OOS,
+   CELL_OUT_OF_SERVICE,
    ACTIVATION_IN_PROGRESS,
    ACTIVATED,
    DELETION_IN_PROGRESS
 }CellStatus;
 
-#if 0
+typedef enum
+{
+   UE_INACTIVE,
+   UE_ACTIVE,
+   UE_HANDIN_IN_PROGRESS,
+   UE_DELETION_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;
+
+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];
+   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; 
+}DuUeCfg;
+
+typedef struct f1UeContextSetup
+{
+   UeCtxtActionType actionType;
+   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 */
+   MacUeCfg macUeCfg;        /* Mac Ue Cfg */
+   RlcUeCfg rlcUeCfg;        /* 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 */
-   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;
-#endif
 
 typedef struct duLSapCb
 {
@@ -162,22 +239,45 @@ typedef struct duLSapCb
    State       sapState;
    Mem         mem;
    CmTimer     timer;
-   U8                        bndRetryCnt;
-   U8                        maxBndRetry;
-   TmrCfg                    bndTmr;
+   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;
+
 /* DU APP DB */
 typedef struct duCb
 {
-   Mem           mem;    /* Memory configs */
-   TskInit       init;   /* DU Init */
-   //DuLSapCb      **macSap;  /* MAC SAP */
-   Bool          f1Status; /* Status of F1 connection */
-   CmHashListCp  cellLst;     /* List of cells at DU APP of type DuCellCb */
-   CmHashListCp  actvCellLst; /* 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 */
+   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;
 
 
@@ -194,7 +294,7 @@ typedef struct duLSapCfg
    Route       dstRoute;
    Selector    dstSel;
    Mem         mem;
-   U8          maxBndRetry;
+   uint8_t          maxBndRetry;
    TmrCfg      bndTmr;
    TmrCfg      connTmr;
 }DuLSapCfg;
@@ -204,38 +304,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 duSendEgtpDatInd();
-S16 duHdlSchCfgComplete(Pst *pst, RgMngmt *cfm);
+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
+ **********************************************************************/