PLTFRM_FLAGS= -UMSPD -DODU -DINTEL_FAPI #-DODU_SLOT_IND_DEBUG_LOG -DEGTP_TEST
ifeq ($(MODE),TDD)
- PLTFRM_FLAGS += -DMODE=TDD
+ PLTFRM_FLAGS += -DNR_TDD
endif
ifeq ($(CA_ENABLE),YES)
PLTFRM_FLAGS += -DCA_ENABLE=YES
@echo -e "$(OPTS) NODE=TEST_STUB - Mandatory option for cu_stub/ric_stub$(NORM)"
@echo -e "$(OPTS) MODE=TDD - If not specified, MODE=FDD$(NORM)"
@echo -e "$(OPTS) PHY=INTEL_L1 - If not specified, Phy stub is used$(NORM)"
- @echo -e "$(OPTS) PHY_MODE=TIMER - Testing mode for INTEL_L1
+ @echo -e "$(OPTS) PHY_MODE=TIMER - Testing mode for INTEL_L1"
@echo -e "******************************************************************"
prepare_dirs:
$(Q)$(MAKE) -f $(COM_BUILD_DIR)/mt.mak OBJ_DIR=$(OBJ_ROOT)/odu LIB_DIR=$(LIB_ROOT)/odu LOG_DIR=$(LOG_ROOT)/odu CC='$(CC1)'
$(Q)$(MAKE) -f $(COM_BUILD_DIR)/rl.mak OBJ_DIR=$(OBJ_ROOT)/odu LIB_DIR=$(LIB_ROOT)/odu LOG_DIR=$(LOG_ROOT)/odu CC='$(CC1)'
$(Q)$(MAKE) -f $(COM_BUILD_DIR)/phy_stub.mak OBJ_DIR=$(OBJ_ROOT)/odu LIB_DIR=$(LIB_ROOT)/odu LOG_DIR=$(LOG_ROOT)/odu CC='$(CC1)'
+ ifeq ($(O1_ENABLE),YES)
$(Q)$(MAKE) -f $(COM_BUILD_DIR)/o1_client.mak OBJ_DIR=$(OBJ_ROOT)/odu LIB_DIR=$(LIB_ROOT)/odu LOG_DIR=$(LOG_ROOT)/odu CC='$(CC1)'
+ endif
link_du: du
$(Q)$(CC1) -g -o $(OBJ_ROOT)/odu/odu -Wl,-R../lib/:. $(OBJ_ROOT)/odu/*.o\
$(Q)$(MAKE) -f $(COM_BUILD_DIR)/mt.mak clean OBJ_DIR=$(OBJ_ROOT)/odu LIB_DIR=$(LIB_ROOT)/odu LOG_DIR=$(LOG_ROOT)/odu CC='$(CC1)'
$(Q)$(MAKE) -f $(COM_BUILD_DIR)/rl.mak clean OBJ_DIR=$(OBJ_ROOT)/odu LIB_DIR=$(LIB_ROOT)/odu LOG_DIR=$(LOG_ROOT)/odu CC='$(CC1)'
$(Q)$(MAKE) -f $(COM_BUILD_DIR)/phy_stub.mak clean OBJ_DIR=$(OBJ_ROOT)/odu LIB_DIR=$(LIB_ROOT)/odu LOG_DIR=$(LOG_ROOT)/odu CC='$(CC1)'
+ ifeq ($(O1_ENABLE),YES)
$(Q)$(MAKE) -f $(COM_BUILD_DIR)/o1_client.mak clean OBJ_DIR=$(OBJ_ROOT)/odu LIB_DIR=$(LIB_ROOT)/odu LOG_DIR=$(LOG_ROOT)/odu CC='$(CC1)'
+ endif
$(Q)rm -rf $(OBJ_ROOT)/odu/*
$(Q)rm -rf $(LIB_ROOT)/odu/*
$(Q)rm -rf $(BIN_DIR)/odu/*
$(Q)$(MAKE) -f $(COM_BUILD_DIR)/asn_rrc.mak OBJ_DIR=$(OBJ_ROOT)/cu_stub LIB_DIR=$(LIB_ROOT)/cu_stub LOG_DIR=$(LOG_ROOT)/cu_stub CC='$(CC1)'
$(Q)$(MAKE) -f $(COM_BUILD_DIR)/cm.mak OBJ_DIR=$(OBJ_ROOT)/cu_stub LIB_DIR=$(LIB_ROOT)/cu_stub LOG_DIR=$(LOG_ROOT)/cu_stub CC='$(CC1)'
$(Q)$(MAKE) -f $(COM_BUILD_DIR)/mt.mak OBJ_DIR=$(OBJ_ROOT)/cu_stub LIB_DIR=$(LIB_ROOT)/cu_stub LOG_DIR=$(LOG_ROOT)/cu_stub CC='$(CC1)'
+ ifeq ($(O1_ENABLE),YES)
+ $(Q)$(MAKE) -f $(COM_BUILD_DIR)/o1_client.mak OBJ_DIR=$(OBJ_ROOT)/cu_stub LIB_DIR=$(LIB_ROOT)/cu_stub LOG_DIR=$(LOG_ROOT)/cu_stub CC='$(CC1)'
+ endif
clean_cu:
$(Q)$(MAKE) -f $(COM_BUILD_DIR)/cu_stub.mak clean OBJ_DIR=$(OBJ_ROOT)/cu_stub LIB_DIR=$(LIB_ROOT)/cu_stub LOG_DIR=$(LOG_ROOT)/cu_stub CC='$(CC1)'
$(Q)$(MAKE) -f $(COM_BUILD_DIR)/asn_rrc.mak clean OBJ_DIR=$(OBJ_ROOT)/cu_stub LIB_DIR=$(LIB_ROOT)/cu_stub LOG_DIR=$(LOG_ROOT)/cu_stub CC='$(CC1)'
$(Q)$(MAKE) -f $(COM_BUILD_DIR)/cm.mak clean OBJ_DIR=$(OBJ_ROOT)/cu_stub LIB_DIR=$(LIB_ROOT)/cu_stub LOG_DIR=$(LOG_ROOT)/cu_stub CC='$(CC1)'
$(Q)$(MAKE) -f $(COM_BUILD_DIR)/mt.mak clean OBJ_DIR=$(OBJ_ROOT)/cu_stub LIB_DIR=$(LIB_ROOT)/cu_stub LOG_DIR=$(LOG_ROOT)/cu_stub CC='$(CC1)'
+ ifeq ($(O1_ENABLE),YES)
+ $(Q)$(MAKE) -f $(COM_BUILD_DIR)/o1_client.mak clean OBJ_DIR=$(OBJ_ROOT)/cu_stub LIB_DIR=$(LIB_ROOT)/cu_stub LOG_DIR=$(LOG_ROOT)/cu_stub CC='$(CC1)'
+ endif
$(Q)rm -rf $(OBJ_ROOT)/cu_stub/*
$(Q)rm -rf $(LIB_ROOT)/cu_stub/*
$(Q)rm -rf $(BIN_DIR)/cu_stub/*
$(Q)$(MAKE) -f $(COM_BUILD_DIR)/asn_e2ap.mak OBJ_DIR=$(OBJ_ROOT)/ric_stub LIB_DIR=$(LIB_ROOT)/ric_stub LOG_DIR=$(LOG_ROOT)/ric_stub CC='$(CC1)'
$(Q)$(MAKE) -f $(COM_BUILD_DIR)/cm.mak OBJ_DIR=$(OBJ_ROOT)/ric_stub LIB_DIR=$(LIB_ROOT)/ric_stub LOG_DIR=$(LOG_ROOT)/ric_stub CC='$(CC1)'
$(Q)$(MAKE) -f $(COM_BUILD_DIR)/mt.mak OBJ_DIR=$(OBJ_ROOT)/ric_stub LIB_DIR=$(LIB_ROOT)/ric_stub LOG_DIR=$(LOG_ROOT)/ric_stub CC='$(CC1)'
+ ifeq ($(O1_ENABLE),YES)
+ $(Q)$(MAKE) -f $(COM_BUILD_DIR)/o1_client.mak OBJ_DIR=$(OBJ_ROOT)/ric_stub LIB_DIR=$(LIB_ROOT)/ric_stub LOG_DIR=$(LOG_ROOT)/ric_stub CC='$(CC1)'
+ endif
clean_ric:
$(Q)$(MAKE) -f $(COM_BUILD_DIR)/ric_stub.mak clean OBJ_DIR=$(OBJ_ROOT)/ric_stub LIB_DIR=$(LIB_ROOT)/ric_stub LOG_DIR=$(LOG_ROOT)/ric_stub CC='$(CC1)'
$(Q)$(MAKE) -f $(COM_BUILD_DIR)/asn_rrc.mak clean OBJ_DIR=$(OBJ_ROOT)/ric_stub LIB_DIR=$(LIB_ROOT)/ric_stub LOG_DIR=$(LOG_ROOT)/ric_stub CC='$(CC1)'
$(Q)$(MAKE) -f $(COM_BUILD_DIR)/cm.mak clean OBJ_DIR=$(OBJ_ROOT)/ric_stub LIB_DIR=$(LIB_ROOT)/ric_stub LOG_DIR=$(LOG_ROOT)/ric_stub CC='$(CC1)'
$(Q)$(MAKE) -f $(COM_BUILD_DIR)/mt.mak clean OBJ_DIR=$(OBJ_ROOT)/ric_stub LIB_DIR=$(LIB_ROOT)/ric_stub LOG_DIR=$(LOG_ROOT)/ric_stub CC='$(CC1)'
+ ifeq ($(O1_ENABLE),YES)
+ $(Q)$(MAKE) -f $(COM_BUILD_DIR)/o1_client.mak clean OBJ_DIR=$(OBJ_ROOT)/ric_stub LIB_DIR=$(LIB_ROOT)/ric_stub LOG_DIR=$(LOG_ROOT)/ric_stub CC='$(CC1)'
+ endif
$(Q)rm -rf $(OBJ_ROOT)/ric_stub/*
$(Q)rm -rf $(LIB_ROOT)/ric_stub/*
$(Q)rm -rf $(BIN_DIR)/ric_stub/*
#include "cu_stub_egtp.h"
#include "du_log.h"
+ #ifdef O1_ENABLE
+
+ #include "Config.h"
+
+ #endif
+
#define CU_ID 1
#define CU_NAME "ORAN_OAM_CU"
- #define DU_IP_V4_ADDR "192.168.130.81"
- #define CU_IP_V4_ADDR "192.168.130.82"
+
#define DU_IP_V6_ADDR "0000:0000:0000:0000:0000:0000:0000:0001"
#define CU_IP_V6_ADDR "0000:0000:0000:0000:0000:0000:0000:0011"
+
+ #ifndef O1_ENABLE
+
+ #define DU_IP_V4_ADDR "192.168.130.81"
+ #define CU_IP_V4_ADDR "192.168.130.82"
#define DU_PORT 38472
#define CU_PORT 38472
+
+ #endif
+
#define DU_EGTP_PORT 39001
#define CU_EGTP_PORT 39002
#define RRC_VER 0
#define PLMN_MNC1 8
#define PLMN_MNC2 0
+ #ifdef O1_ENABLE
+
+ extern StartupConfig g_cfg;
+
+ #endif
+
+
/*******************************************************************
*
* @brief Handles SCTP notification
void init_log()
{
- openlog("CU_STUB",LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
+ openlog("CU_STUB",LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
}
/*******************************************************************
*
pthread_attr_t attr;
init_log();
- DU_LOG("\nStarting CU_STUB\n");
+ DU_LOG("\nINFO --> CU_STUB : Starting CU_STUB\n");
/* Start thread to receive console input */
pthread_attr_init(&attr);
retVal = pthread_create(&conThrdId, &attr, cuConsoleHandler, NULLP);
if(retVal != 0)
{
- DU_LOG("\nCU_STUB: Thread creation failed. Cause %d", retVal);
+ DU_LOG("\nERROR --> CU_STUB : Thread creation failed. Cause %d", retVal);
}
pthread_attr_destroy(&attr);
{
uint32_t ipv4_du, ipv4_cu;
- DU_LOG("\nReading CU configurations");
+ DU_LOG("\nDEBUG --> CU_STUB : Reading CU configurations");
+ #ifdef O1_ENABLE
+ if( getStartupConfig(&g_cfg) != ROK )
+ {
+ RETVALUE(RFAILED);
+ }
+ DU_LOG("\nReading CU configurations---");
+ DU_LOG("\nReading CU configurations g_cfg.DU_IPV4_Addr=%s", g_cfg.DU_IPV4_Addr);
+ DU_LOG("\nReading CU configurations g_cfg.CU_IPV4_Addr=%s", g_cfg.CU_IPV4_Addr);
+ cmInetAddr((S8*)g_cfg.DU_IPV4_Addr, &ipv4_du);
+ cmInetAddr((S8*)g_cfg.CU_IPV4_Addr, &ipv4_cu);
+
+ cuCfgParams.sctpParams.duPort = g_cfg.DU_Port;
+ cuCfgParams.sctpParams.cuPort = g_cfg.CU_Port;
+ #else
cmInetAddr((S8*)DU_IP_V4_ADDR, &ipv4_du);
cmInetAddr((S8*)CU_IP_V4_ADDR, &ipv4_cu);
-
+ cuCfgParams.sctpParams.duPort = DU_PORT;
+ cuCfgParams.sctpParams.cuPort = CU_PORT;
+ #endif
+
cuCfgParams.cuId = CU_ID;
strcpy(cuCfgParams.cuName, CU_NAME);
/* DU IP Address and Port*/
cuCfgParams.sctpParams.duIpAddr.ipV4Addr = ipv4_du;
cuCfgParams.sctpParams.duIpAddr.ipV6Pres = false;
- cuCfgParams.sctpParams.duPort = DU_PORT;
/* CU IP Address and Port*/
cuCfgParams.sctpParams.cuIpAddr.ipV4Addr = ipv4_cu;
cuCfgParams.sctpParams.cuIpAddr.ipV6Pres = false;
- cuCfgParams.sctpParams.cuPort = CU_PORT;
/*PLMN*/
cuCfgParams.plmn.mcc[0] = PLMN_MCC0;
if((ch = getchar()) == 'd')
{
/* Start Pumping data from CU to DU */
- DU_LOG("\nEGTP: Sending DL User Data");
+ DU_LOG("\nDEBUG --> EGTP: Sending DL User Data");
cuEgtpDatReq();
}
}
#include "BWP-DownlinkCommon.h"
#include "BWP-UplinkCommon.h"
+ #ifdef O1_ENABLE
+
+ #include "Config.h"
+ extern StartupConfig g_cfg;
+
+ #endif
+
DuCfgParams duCfgParam;
char encBuf[ENC_BUF_MAX_LEN];
uint8_t slot = 0;
uint8_t symbol =0;
- memset(duCfgParam.macCellCfg.tddCfg.slotCfg, 0, sizeof(duCfgParam.macCellCfg.tddCfg.slotCfg[0][0]*\
- MAXIMUM_TDD_PERIODICITY*MAX_SYMB_PER_SLOT));
+ memset(duCfgParam.macCellCfg.tddCfg.slotCfg, 0, sizeof(duCfgParam.macCellCfg.tddCfg.slotCfg[slot][symbol]* \
+ MAX_TDD_PERIODICITY_SLOTS*MAX_SYMB_PER_SLOT));
- //Filling the DL Slots
- for(slot =0; slot < NUM_DL_SLOTS; slot++)
+ //Filling the DL Slots and initializing flexi slot
+ for(slot = 0; slot <= NUM_DL_SLOTS; slot++)
{
for(symbol =0; symbol < MAX_SYMB_PER_SLOT; symbol++)
{
duCfgParam.macCellCfg.tddCfg.slotCfg[slot][symbol] = DL_SLOT;
}
}
-
- //Filling the Flexi Slot
- for(symbol =0; symbol < NUM_DL_SYMBOLS; symbol++)
- {
- duCfgParam.macCellCfg.tddCfg.slotCfg[GUARD_SLOT_IDX][symbol] = DL_SLOT;
- }
- duCfgParam.macCellCfg.tddCfg.slotCfg[GUARD_SLOT_IDX][symbol] = GUARD_SLOT;
- symbol++;
- duCfgParam.macCellCfg.tddCfg.slotCfg[GUARD_SLOT_IDX][symbol] = UL_SLOT;
-
- //Filling the UL Slot
- for(slot = GUARD_SLOT_IDX + 1; slot < MAXIMUM_TDD_PERIODICITY; slot++)
+
+ //Filling UL Slots
+ for(slot = NUM_DL_SLOTS+1; slot <= NUM_DL_SLOTS+NUM_UL_SLOTS; slot++)
{
- for(symbol =0; symbol < MAX_SYMB_PER_SLOT; symbol++)
- {
+ for(symbol = 0; symbol < MAX_SYMB_PER_SLOT; symbol++)
duCfgParam.macCellCfg.tddCfg.slotCfg[slot][symbol] = UL_SLOT;
- }
- }
+ }
+ //Updating Flexi Slot
+ slot = NUM_DL_SLOTS;
+ duCfgParam.macCellCfg.tddCfg.slotCfg[slot][12] = FLEXI_SLOT;
+ duCfgParam.macCellCfg.tddCfg.slotCfg[slot][13] = UL_SLOT;
}
#endif
* ****************************************************************/
uint8_t fillDuPort(uint16_t *duPort)
{
+
+ #ifdef O1_ENABLE
+ duPort[F1_INTERFACE] = g_cfg.DU_Port;
+ duPort[E2_INTERFACE] = g_cfg.RIC_Port;
+ #else
duPort[F1_INTERFACE] = DU_PORT; /* DU Port idx 0 38472 */
duPort[E2_INTERFACE] = RIC_PORT; /* RIC Port idx 1 38482 */
-
+ #endif
return ROK;
}
MibParams mib;
Sib1Params sib1;
+ #ifdef O1_ENABLE
+ if( getStartupConfig(&g_cfg) != ROK )
+ {
+ RETVALUE(RFAILED);
+ }
+ cmInetAddr((S8*)g_cfg.DU_IPV4_Addr, &ipv4_du);
+ cmInetAddr((S8*)g_cfg.CU_IPV4_Addr, &ipv4_cu);
+ cmInetAddr((S8*)g_cfg.RIC_IPV4_Addr, &ipv4_ric);
+
+ duCfgParam.sctpParams.cuPort = g_cfg.CU_Port;
+ duCfgParam.sctpParams.ricPort = g_cfg.RIC_Port;
+ #else
cmInetAddr((S8*)DU_IP_V4_ADDR, &ipv4_du);
cmInetAddr((S8*)CU_IP_V4_ADDR, &ipv4_cu);
cmInetAddr((S8*)RIC_IP_V4_ADDR, &ipv4_ric);
+
+ duCfgParam.sctpParams.cuPort = CU_PORT;
+ duCfgParam.sctpParams.ricPort = RIC_PORT;
+ #endif
+
fillDuPort(duCfgParam.sctpParams.duPort);
/* F1 DU IP Address and Port*/
/* F1 CU IP Address and Port*/
duCfgParam.sctpParams.cuIpAddr.ipV4Addr = ipv4_cu;
- duCfgParam.sctpParams.cuPort = CU_PORT;
/* Fill RIC Params */
duCfgParam.sctpParams.ricIpAddr.ipV4Addr = ipv4_ric;
- duCfgParam.sctpParams.ricPort = RIC_PORT;
+
/* EGTP Parameters */
duCfgParam.egtpParams.localIp.ipV4Pres = TRUE;
duCfgParam.egtpParams.localIp.ipV4Addr = ipv4_du;
/* MACROS */
#define DU_INST 0
#define DU_ID 1
+
+ #ifndef O1_ENABLE
+
#define DU_IP_V4_ADDR "192.168.130.81"
#define CU_IP_V4_ADDR "192.168.130.82"
#define RIC_IP_V4_ADDR "192.168.130.80"
#define DU_PORT 38472
#define CU_PORT 38472
#define RIC_PORT 36422 /* using X2 port since E2 port not defined */
+
+ #endif
+
#define DU_EGTP_PORT 39001
#define CU_EGTP_PORT 39002
#define NR_PCI 1
#define NR_CELL_ID 1
#define NR_NUMEROLOGY 0
+
#define DU_NAME "ORAN_OAM_DU"
#define CELL_TYPE SMALL
#define DUPLEX_MODE DUP_MODE_FDD
+
+#ifdef NR_TDD
+#define DUPLEX_MODE DUP_MODE_TDD
+#endif
+
#define DU_TAC 1
#define PLMN_MCC0 3
#define PLMN_MCC1 1
#include "ric_stub_sctp.h"
#include "du_log.h"
+ #ifdef O1_ENABLE
+ #include "Config.h"
+ #endif
+
#define RIC_ID 1
#define RIC_NAME "ORAN_OAM_RIC"
- #define DU_IP_V4_ADDR "192.168.130.81"
- #define RIC_IP_V4_ADDR "192.168.130.80"
+
#define DU_IP_V6_ADDR "0000:0000:0000:0000:0000:0000:0000:0001"
#define RIC_IP_V6_ADDR "0000:0000:0000:0000:0000:0000:0000:0011"
+
+ #ifndef O1_ENABLE
+
+ #define DU_IP_V4_ADDR "192.168.130.81"
+ #define RIC_IP_V4_ADDR "192.168.130.80"
#define DU_PORT 36422
#define RIC_PORT 36422
+
+ #endif
+
#define RRC_VER 0
#define EXT_RRC_VER 5
#define PLMN_MCC0 3
#define PLMN_MNC1 8
#define PLMN_MNC2 0
+ #ifdef O1_ENABLE
+
+ extern StartupConfig g_cfg;
+
+ #endif
+
/*******************************************************************
*
* @brief Handles SCTP notification
{
init_log();
- DU_LOG("\nStarting RIC_STUB");
+ DU_LOG("\nINFO --> RIC : Starting RIC_STUB");
/* Read RIC configurations */
readRicCfg();
{
uint32_t ipv4_du, ipv4_ric;
- DU_LOG("\nReading RIC configurations");
+ DU_LOG("\nINFO --> RIC : Reading RIC configurations");
+ #ifdef O1_ENABLE
+ if( getStartupConfig(&g_cfg) != ROK )
+ {
+ RETVALUE(RFAILED);
+ }
+ cmInetAddr((S8*)g_cfg.DU_IPV4_Addr, &ipv4_du);
+ cmInetAddr((S8*)g_cfg.RIC_IPV4_Addr, &ipv4_ric);
+
+ ricCfgParams.sctpParams.duPort = g_cfg.RIC_Port;
+ ricCfgParams.sctpParams.ricPort = g_cfg.RIC_Port;
+ #else
cmInetAddr((S8*)DU_IP_V4_ADDR, &ipv4_du);
cmInetAddr((S8*)RIC_IP_V4_ADDR, &ipv4_ric);
-
+
+ ricCfgParams.sctpParams.duPort = DU_PORT;
+ ricCfgParams.sctpParams.ricPort = RIC_PORT;
+ #endif
+
ricCfgParams.ricId = RIC_ID;
strcpy(ricCfgParams.ricName, RIC_NAME);
/* DU IP Address and Port*/
ricCfgParams.sctpParams.duIpAddr.ipV4Addr = ipv4_du;
ricCfgParams.sctpParams.duIpAddr.ipV6Pres = false;
- ricCfgParams.sctpParams.duPort = DU_PORT;
/* RIC IP Address and Port*/
ricCfgParams.sctpParams.ricIpAddr.ipV4Addr = ipv4_ric;
ricCfgParams.sctpParams.ricIpAddr.ipV6Pres = false;
- ricCfgParams.sctpParams.ricPort = RIC_PORT;
/*PLMN*/
ricCfgParams.plmn.mcc[0] = PLMN_MCC0;