# macro for output file name and makefile name
#
-PLTFRM_FLAGS=-UMSPD -DODU -DINTEL_FAPI -UODU_MEMORY_DEBUG_LOG -DDEBUG_ASN_PRINT -UDEBUG_PRINT -DERROR_PRINT -USTART_DL_UL_DATA -UNR_DRX -UCALL_FLOW_DEBUG_LOG -UODU_SLOT_IND_DEBUG_LOG -UTHREAD_AFFINITY
+PLTFRM_FLAGS=-UMSPD -DODU -DINTEL_FAPI -UODU_MEMORY_DEBUG_LOG -DDEBUG_ASN_PRINT -UDEBUG_PRINT -DERROR_PRINT -USTART_DL_UL_DATA -UNR_DRX -UCALL_FLOW_DEBUG_LOG -UODU_SLOT_IND_DEBUG_LOG -UTHREAD_AFFINITY -UMEM_SIZE_CHECK
ifeq ($(MODE),TDD)
PLTFRM_FLAGS += -DNR_TDD
#1. libssh
cd $NETCONF_PATH && \
- git clone -c http.sslverify=false -b v0-7 --depth 1 https://git.libssh.org/projects/libssh.git && \
+ git clone -c http.sslverify=false --depth 1 https://github.com/libssh/libssh-mirror.git && \
+ mv libssh-mirror libssh && \
cd libssh; mkdir build; cd build && \
cmake .. && \
make && \
# The Jenkins job requires a tag to build the Docker image.
# Global-JJB script assumes this file is in the repo root.
---
-tag: 9.0.5
+tag: 10.0.1
API-Docs
########
-This is the API-docs for I release o-du/l2.
+This is the API-docs for J release o-du/l2.
.. contents::
:depth: 3
| **Date** | **Ver.** | **Author** | **Comment** |
| | | | |
+--------------------+--------------------+--------------------+--------------------+
+| 2023-06-10 | 8.0.1 | Radisys | J release |
+| | | | |
++--------------------+--------------------+--------------------+--------------------+
| 2023-12-14 | 7.0.1 | Radisys | I release |
| | | | |
+--------------------+--------------------+--------------------+--------------------+
- Ubuntu : sudo apt-get install -y build-essential
- CentOS : sudo yum groups mark install -y “Development Tools”
- Ensure the version is 4.6.3 and above using
+ Ensure the version is 11.4.0 and above using
- gcc --version
Release-Notes
**************
-This document provides the release notes for I Release of O-DU-L2.
+This document provides the release notes for J Release of O-DU-L2.
.. contents::
:depth: 3
| **Date** | **Ver.** | **Author** | **Comment** |
| | | | |
+--------------------+--------------------+--------------------+--------------------+
+| 2024-06-10 | 10.0.0 | Radisys | J release |
+| | | | |
++--------------------+--------------------+--------------------+--------------------+
| 2023-12-14 | 9.0.0 | Radisys | I release |
| | | | |
+--------------------+--------------------+--------------------+--------------------+
Summary
-------
+J- release
+^^^^^^^^^^
+This release contains the following:
+
+ - Multi UE (max=2) scheduling per TTI in scheduler
+ - Supporting both DL and UL scheduling
+
+ - XML based input configuration for ODU-High
+ - Added E2 related configurations
+
+ - Code changes upgraded to Gcc version 11.4.0
+
I- release
^^^^^^^^^^
This release contains the following:
Release Data
------------
+J release
+^^^^^^^^^^
++--------------------------------------+------------------------------------------+
+| **Project** | ODUHIGH |
+| | |
++--------------------------------------+------------------------------------------+
+| **Repo/commit-ID** | o-du/l2/ |
+| | I512cbbc3d79ec7b4bb7c3f9eb07585b04dad9a5a|
++--------------------------------------+------------------------------------------+
+| **Release designation** | J release |
+| | |
++--------------------------------------+------------------------------------------+
+| **Release date** | 2024-06-10 |
+| | |
++--------------------------------------+------------------------------------------+
+| **Purpose of the delivery** | J release |
+| | |
++--------------------------------------+------------------------------------------+
+
I release
^^^^^^^^^^
+--------------------------------------+------------------------------------------+
**JIRA BACK-LOG:**
+J-release
+^^^^^^^^^^
+
++-----------------------------------------------+-----------------------------------------------+
+| **JIRA REFERENCE** | **SLOGAN** |
+| | |
++-----------------------------------------------+-----------------------------------------------+
+| https://jira.o-ran-sc.org/browse/ODUHIGH-556 | Multi UE per slot scheduling UL |
+| | |
++-----------------------------------------------+-----------------------------------------------+
+| https://jira.o-ran-sc.org/browse/ODUHIGH-538 | XML based input configuration for ODU-High |
+| | |
++-----------------------------------------------+-----------------------------------------------+
+| https://jira.o-ran-sc.org/browse/ODUHIGH-557 | OSC-OAI Collaboration |
+| | |
++-----------------------------------------------+-----------------------------------------------+
+| https://jira.o-ran-sc.org/browse/ODUHIGH-475 | Integration of ODU-High with intel L1 |
+| | |
++-----------------------------------------------+-----------------------------------------------+
+
I-release
^^^^^^^^^^
**JIRA TICKETS:**
-NA
+J-release
+^^^^^^^^^^
+
++----------------------------------------------+-------------------------------------------------+
+| **JIRA REFERENCE** | **BUG DESCRIPTION** |
+| | |
++----------------------------------------------+-------------------------------------------------+
+| https://jira.o-ran-sc.org/browse/ODUHIGH-606 | Fixing null memory size allocation issue |
+| | |
++----------------------------------------------+-------------------------------------------------+
+| https://jira.o-ran-sc.org/browse/ODUHIGH-593 | Pack and unpack function nomenclature correction|
+| | |
++----------------------------------------------+-------------------------------------------------+
+| https://jira.o-ran-sc.org/browse/ODUHIGH-584 | Fixing the error number issue CmInetSctpConnectx|
+| | function |
++----------------------------------------------+-------------------------------------------------+
+| https://jira.o-ran-sc.org/browse/ODUHIGH-574 | Fix for Inconsistent behavious in ML |
+| | |
++----------------------------------------------+-------------------------------------------------+
Deliverables
- Multi UE scheduling per TTI is supported up to 2 UEs as of now.
-- Currently, only DL supports multi-UE scheduling. UL supports single-UE scheduling per TTI
-
-
Known Issues
^^^^^^^^^^^^^
User Guide
***********
-This is the user guide for I release of O-DU/l2.
+This is the user guide for J release of O-DU/l2.
Follow installation-guide to get all the dependencies ready.
.. contents::
The call flow between O-DU High and CU Stub can be achieved by executing docker containers.
- Pull the last built docker images:
- - docker pull nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2:9.0.5
+ - docker pull nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2:10.0.1
- docker pull nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2-cu-stub:
- Run CU Stub docker:
- docker run -it --privileged --net=host --entrypoint bash
- nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2-cu-stub:9.0.5
+ nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2-cu-stub:10.0.1
- ./cu_stub
- Run ODU docker:
- docker run -it --privileged --net=host --entrypoint bash
- nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2:9.0.5
+ nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2:10.0.1
- ./odu
---
distribution_type: container
-container_release_tag: 9.0.5
+container_release_tag: 10.0.1
container_pull_registry: nexus.o-ran-sc.org:10004
container_push_registry: nexus.o-ran-sc.org:10002
project: o-du-l2
-ref: 6e44ef6bdb6ece8e5a19a662016c3cec5b346c91
+ref: 666701aebc17e9f0160ad0f763497503d7c67870
containers:
- name: o-du-l2
-version: 9.0.5
+version: 10.0.1
---
distribution_type: container
-container_release_tag: 9.0.5
+container_release_tag: 10.0.1
container_pull_registry: nexus.o-ran-sc.org:10004
container_push_registry: nexus.o-ran-sc.org:10002
project: o-du-l2
-ref: 6e44ef6bdb6ece8e5a19a662016c3cec5b346c91
+ref: 666701aebc17e9f0160ad0f763497503d7c67870
containers:
- name: o-du-l2-cu-stub
-version: 9.0.5
+version: 10.0.1
MSG_TX_ERR
}ErrorCode;
+#ifdef MEM_SIZE_CHECK
+#define WLS_MEMORY_ALLOC_SIZE_LOG(_line, _func, _size) \
+{\
+ DU_LOG("\nRLC line = %d, func = %s, _size= %d ", _line, _func, _size); \
+}
+#else
+#define WLS_MEMORY_ALLOC_SIZE_LOG(_line, _func, _size) {}
+#endif
+
#ifdef ODU_MEMORY_DEBUG_LOG
#define WLS_MEM_LOG(_macro, _file, _line, _func, _size, _datPtr)\
{\
/* allocate static buffer from WLS memory */
#define WLS_MEM_ALLOC(_datPtr, _size) \
{ \
+ WLS_MEMORY_ALLOC_SIZE_LOG(__LINE__, __FUNCTION__, _size); \
uint8_t _ret; \
_ret = SGetSBufWls(0, 0, (Data **)&_datPtr, _size); \
if(_ret == ROK) \
for(plmnIdx = 0; plmnIdx < MAX_PLMN; plmnIdx++)
{
macCb.macCell[cellIdx]->macCellCfg.cellCfg.plmnInfoList[plmnIdx].suppSliceList.numSupportedSlices = macCellCfg->cellCfg.plmnInfoList[plmnIdx].suppSliceList.numSupportedSlices;
- if(macCb.macCell[cellIdx]->macCellCfg.cellCfg.plmnInfoList[plmnIdx].suppSliceList.numSupportedSlices ==0)
+
+ if(macCb.macCell[cellIdx]->macCellCfg.cellCfg.plmnInfoList[plmnIdx].suppSliceList.numSupportedSlices==0)
break;
+
MAC_ALLOC(macCb.macCell[cellIdx]->macCellCfg.cellCfg.plmnInfoList[plmnIdx].suppSliceList.snssai, macCb.macCell[cellIdx]->macCellCfg.cellCfg.plmnInfoList[plmnIdx].suppSliceList.numSupportedSlices\
* sizeof(Snssai*));
if(macCb.macCell[cellIdx]->macCellCfg.cellCfg.plmnInfoList[plmnIdx].suppSliceList.snssai == NULLP)
#define MAC_MEM_REGION 4
#define MAC_POOL 1
+/* allocate and zero out a static buffer */
+
+#ifdef MEM_SIZE_CHECK
+#define MAC_MEMORY_ALLOC_SIZE_LOG(_line, _func, _size) \
+{\
+ DU_LOG("\n MAC line = %d, func = %s, _size= %d ", _line, _func, _size); \
+}
+#else
+#define MAC_MEMORY_ALLOC_SIZE_LOG(_line, _func, _size) {}
+#endif
+
#ifdef ODU_MEMORY_DEBUG_LOG
#define MAC_MEM_LOG(_macro, _file, _line, _func, _size, _datPtr)\
{\
/* allocate and zero out a MAC static buffer */
#define MAC_ALLOC(_datPtr, _size) \
{ \
+ MAC_MEMORY_ALLOC_SIZE_LOG(__LINE__, __FUNCTION__, _size); \
uint8_t _ret; \
_ret = SGetSBuf(MAC_MEM_REGION, MAC_POOL, \
(Data **)&_datPtr, _size); \
* during inter-layer communication */
#define MAC_ALLOC_SHRABL_BUF(_buf, _size) \
{ \
+ MAC_MEMORY_ALLOC_SIZE_LOG(__LINE__, __FUNCTION__, _size); \
if(SGetStaticBuffer(MAC_MEM_REGION, MAC_POOL, \
(Data **)&_buf, (Size) _size, 0) == ROK) \
{ \
* Memory related Defines
******************************************************************************/
/* Allocate function */
+#ifdef MEM_SIZE_CHECK
+#define RLC_MEMORY_ALLOC_SIZE_LOG(_line, _func, _size) \
+{\
+ DU_LOG("\nRLC line = %d, func = %s, _size= %d ", _line, _func, _size); \
+}
+#else
+#define RLC_MEMORY_ALLOC_SIZE_LOG(_line, _func, _size) {}
+#endif
+
#ifdef ODU_MEMORY_DEBUG_LOG
#define RLC_MEM_LOG(_macro, _file, _line, _func, _size, _datPtr)\
{\
#define RLC_ALLOC(_cb,_buf, _size) \
{ \
+ RLC_MEMORY_ALLOC_SIZE_LOG(__LINE__, __FUNCTION__, _size); \
if (SGetSBuf(_cb->init.region, _cb->init.pool, (Data **)&_buf, \
(Size) _size) == ROK) \
{ \
#define RLC_ALLOC_SHRABL_BUF_WC(_region, _pool,_buf, _size) \
{ \
+ RLC_MEMORY_ALLOC_SIZE_LOG(__LINE__, __FUNCTION__, _size); \
if(SGetStaticBuffer(_region, _pool, (Data **)&_buf, \
(Size) _size, 0)==ROK) \
{\
#define RLC_ALLOC_SHRABL_BUF(_region, _pool,_buf, _size) \
{ \
+ RLC_MEMORY_ALLOC_SIZE_LOG(__LINE__, __FUNCTION__, _size); \
if (SGetStaticBuffer(_region, _pool, (Data **)&_buf, \
(Size) _size, 0) == ROK) \
{ \
#define RLC_ALLOC_WC(_cb,_buf, _size) \
{\
+ RLC_MEMORY_ALLOC_SIZE_LOG(__LINE__, __FUNCTION__, _size); \
if(SGetSBuf(_cb->init.region, _cb->init.pool, (Data **)&_buf, (Size) _size) == ROK)\
{\
RLC_MEM_LOG("RLC,ALLOC_WC", __FILE__, __LINE__, __FUNCTION__, _size, _buf);\
#define RLC_SHRABL_STATIC_BUF_ALLOC(_region, _pool, _buf, _size) \
{ \
+ RLC_MEMORY_ALLOC_SIZE_LOG(__LINE__, __FUNCTION__, _size); \
SGetStaticBuffer(_region, _pool, (Data **)&_buf, \
(Size) _size, 0); \
RLC_MEM_LOG("RLC,SHRABL_STATIC_BUF_ALLOC", __FILE__, __LINE__, __FUNCTION__, _size, _buf);\
}
/* allocate and zero out a static buffer */
+#ifdef MEM_SIZE_CHECK
+#define SCH_MEMORY_ALLOC_SIZE_LOG(_line, _func, _size) \
+{\
+ DU_LOG("\n SCH line = %d, func = %s, _size= %d ", _line, _func, _size); \
+}
+#else
+#define SCH_MEMORY_ALLOC_SIZE_LOG(_line, _func, _size) {}
+#endif
+
#ifdef ODU_MEMORY_DEBUG_LOG
#define SCH_MEM_LOG(_macro, _file, _line, _func, _size, _datPtr)\
{\
#define SCH_ALLOC(_datPtr, _size) \
{ \
- uint8_t _ret; \
+ SCH_MEMORY_ALLOC_SIZE_LOG(__LINE__, __FUNCTION__, _size); \
+ uint8_t _ret; \
_ret = SGetSBuf(SCH_MEM_REGION, SCH_POOL, \
(Data **)&_datPtr, _size); \
if(_ret == ROK) \
#include "common_def.h"
+#ifdef MEM_SIZE_CHECK
+#define CM_MEMORY_ALLOC_SIZE_LOG(_line, _func, _size) \
+{\
+ DU_LOG("\nRLC line = %d, func = %s, _size= %d ", _line, _func, _size); \
+}
+#else
+#define CM_MEMORY_ALLOC_SIZE_LOG(_line, _func, _size) {}
+#endif
+
/*Spec 38.104, Table 5.4.2.1-1 ARFCN - FREQ mapping*/
/*{ F_REF(Mhz), ΔF_Global, F_REF-Offs, N_REF-offs, Range of N_REF }*/
uint32_t arfcnFreqTable[3][5] = {
* ****************************************************************/
uint8_t SGetSBufNewForDebug(char *file, const char *func, int line, Region region, Pool pool, Data **ptr, Size size)
{
+ CM_MEMORY_ALLOC_SIZE_LOG(line, func, size);
if(SGetSBuf(region, pool, ptr, size) == ROK)
{
#ifdef ODU_MEMORY_DEBUG_LOG
uint8_t SGetStaticBufNewForDebug(char *file, const char *func, int line, \
Region region, Pool pool, Data **ptr, Size size, uint8_t memType)
{
+ CM_MEMORY_ALLOC_SIZE_LOG(line, func, size);
if(SGetStaticBuffer(region, pool, ptr, size, memType) == ROK)
{
#ifdef ODU_MEMORY_DEBUG_LOG
#define BSR_SR_DELAY_TMR_2560 2560
#define PAGING_SCHED_DELTA 4
-#define MAX_PLMN 2
+#define MAX_PLMN 1
/********************* Global Variable ********************/
extern uint64_t ueBitMapPerCell[MAX_NUM_CELL]; /* Bit Map to store used/free UE-IDX per Cell */
#define DEFAULT_K2_VALUE_FOR_SCS60 2
#define DEFAULT_K2_VALUE_FOR_SCS120 3
-#define MAX_PLMN 2
+#define MAX_PLMN 1
#define DL_DMRS_SYMBOL_POS 4 /* Bitmap value 00000000000100 i.e. using 3rd symbol for PDSCH DMRS */
#define MAX_PHR_REPORT 1 /*TODO: Range of PHR reports in multiple PHR.*/
/* allocate and zero out a static buffer */
+#ifdef MEM_SIZE_CHECK
+#define DU_APP_MEMORY_ALLOC_SIZE_LOG(_line, _func, _size) \
+{\
+ DU_LOG("\n DUAPP line = %d, func = %s, _size= %d ", _line, _func, _size); \
+}
+#else
+#define DU_APP_MEMORY_ALLOC_SIZE_LOG(_line, _func, _size) {}
+#endif
+
+
#ifdef ODU_MEMORY_DEBUG_LOG
#define DU_MEM_LOG(_macro, _file, _line, _func, _size, _datPtr)\
{\
#define DU_ALLOC(_datPtr, _size) \
{ \
+ DU_APP_MEMORY_ALLOC_SIZE_LOG(__LINE__, __FUNCTION__, _size); \
int _ret; \
_ret = SGetSBuf(DU_APP_MEM_REGION, DU_POOL, \
(Data **)&_datPtr, _size); \
* during inter-layer communication */
#define DU_ALLOC_SHRABL_BUF(_buf, _size) \
{ \
+ DU_APP_MEMORY_ALLOC_SIZE_LOG(__LINE__, __FUNCTION__, _size); \
if(SGetStaticBuffer(DU_APP_MEM_REGION, DU_POOL, \
(Data **)&_buf, (Size) _size, 0) == ROK) \
{ \