From c56eb9eda797cda6ce372086e35a59e50d96d25c Mon Sep 17 00:00:00 2001 From: Raymond Knopp <raymond.knopp@eurecom.fr> Date: Tue, 4 Sep 2018 07:40:04 +0200 Subject: [PATCH] addition of configuration (DU) for F1AP and filling of F1AP_SET_REQ parameters --- common/ran_context.h | 3 + common/utils/T/T_IDs.h | 690 +++++------ common/utils/T/T_messages.txt | 32 +- openair2/COMMON/f1ap_messages_def.h | 65 +- openair2/COMMON/f1ap_messages_types.h | 755 +++-------- openair2/COMMON/mac_rrc_primitives.h | 2 +- openair2/COMMON/messages_def.h | 1 + openair2/COMMON/messages_types.h | 3 +- openair2/COMMON/rrc_messages_types.h | 1 + openair2/ENB_APP/enb_app.c | 61 +- openair2/ENB_APP/enb_config.c | 1652 +++++++++++++------------ openair2/ENB_APP/enb_config.h | 6 +- openair2/F1AP/DU_F1AP.c | 3 + openair2/F1AP/f1ap_common.h | 8 + openair2/LAYER2/MAC/mac.h | 1 + openair2/LAYER2/MAC/main.c | 4 +- openair2/RRC/LTE/rrc_defs.h | 5 + openair2/RRC/LTE/rrc_eNB.c | 524 ++++---- targets/RT/USER/lte-softmodem.c | 2 +- 19 files changed, 1812 insertions(+), 2006 deletions(-) diff --git a/common/ran_context.h b/common/ran_context.h index 343258cb1d..85c22467f6 100644 --- a/common/ran_context.h +++ b/common/ran_context.h @@ -53,6 +53,9 @@ #include "PHY/defs_L1_NB_IoT.h" #include "RRC/LTE/defs_NB_IoT.h" + + + typedef struct { /// RAN context config file name char *config_file_name; diff --git a/common/utils/T/T_IDs.h b/common/utils/T/T_IDs.h index 58b4307518..df37706186 100644 --- a/common/utils/T/T_IDs.h +++ b/common/utils/T/T_IDs.h @@ -199,348 +199,348 @@ #define T_LEGACY_CLI_WARNING T_ID(196) #define T_LEGACY_CLI_DEBUG T_ID(197) #define T_LEGACY_CLI_TRACE T_ID(198) -#define T_UE_MASTER_TICK T_ID(199) -#define T_UE_PHY_UL_TICK T_ID(200) -#define T_UE_PHY_DL_TICK T_ID(201) -#define T_UE_PHY_DLSCH_UE_DCI T_ID(202) -#define T_UE_PHY_DLSCH_UE_ACK T_ID(203) -#define T_UE_PHY_DLSCH_UE_NACK T_ID(204) -#define T_UE_PHY_ULSCH_UE_DCI T_ID(205) -#define T_UE_PHY_ULSCH_UE_ACK T_ID(206) -#define T_UE_PHY_ULSCH_UE_NACK T_ID(207) -#define T_UE_PHY_INPUT_SIGNAL T_ID(208) -#define T_UE_PHY_DL_CHANNEL_ESTIMATE T_ID(209) -#define T_UE_PHY_PDCCH_IQ T_ID(210) -#define T_UE_PHY_PDCCH_ENERGY T_ID(211) -#define T_UE_PHY_PDSCH_IQ T_ID(212) -#define T_UE_PHY_PDSCH_ENERGY T_ID(213) -#define T_UE_PHY_PUSCH_TX_POWER T_ID(214) -#define T_UE_PHY_PUCCH_TX_POWER T_ID(215) -#define T_UE_PHY_MEAS T_ID(216) -#define T_first T_ID(217) -#define T_buf_test T_ID(218) -#define T_VCD_VARIABLE_FRAME_NUMBER_TX0_ENB T_ID(219) -#define T_VCD_VARIABLE_FRAME_NUMBER_TX1_ENB T_ID(220) -#define T_VCD_VARIABLE_FRAME_NUMBER_RX0_ENB T_ID(221) -#define T_VCD_VARIABLE_FRAME_NUMBER_RX1_ENB T_ID(222) -#define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX0_ENB T_ID(223) -#define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX1_ENB T_ID(224) -#define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX0_ENB T_ID(225) -#define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX1_ENB T_ID(226) -#define T_VCD_VARIABLE_FRAME_NUMBER_TX0_RU T_ID(227) -#define T_VCD_VARIABLE_FRAME_NUMBER_TX1_RU T_ID(228) -#define T_VCD_VARIABLE_FRAME_NUMBER_RX0_RU T_ID(229) -#define T_VCD_VARIABLE_FRAME_NUMBER_RX1_RU T_ID(230) -#define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX0_RU T_ID(231) -#define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX1_RU T_ID(232) -#define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX0_RU T_ID(233) -#define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX1_RU T_ID(234) -#define T_VCD_VARIABLE_RUNTIME_TX_ENB T_ID(235) -#define T_VCD_VARIABLE_RUNTIME_RX_ENB T_ID(236) -#define T_VCD_VARIABLE_FRAME_NUMBER_TX0_UE T_ID(237) -#define T_VCD_VARIABLE_FRAME_NUMBER_TX1_UE T_ID(238) -#define T_VCD_VARIABLE_FRAME_NUMBER_RX0_UE T_ID(239) -#define T_VCD_VARIABLE_FRAME_NUMBER_RX1_UE T_ID(240) -#define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX0_UE T_ID(241) -#define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX1_UE T_ID(242) -#define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX0_UE T_ID(243) -#define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX1_UE T_ID(244) -#define T_VCD_VARIABLE_UE_RX_OFFSET T_ID(245) -#define T_VCD_VARIABLE_DIFF T_ID(246) -#define T_VCD_VARIABLE_HW_SUBFRAME T_ID(247) -#define T_VCD_VARIABLE_HW_FRAME T_ID(248) -#define T_VCD_VARIABLE_HW_SUBFRAME_RX T_ID(249) -#define T_VCD_VARIABLE_HW_FRAME_RX T_ID(250) -#define T_VCD_VARIABLE_TXCNT T_ID(251) -#define T_VCD_VARIABLE_RXCNT T_ID(252) -#define T_VCD_VARIABLE_TRX_TS T_ID(253) -#define T_VCD_VARIABLE_TRX_TST T_ID(254) -#define T_VCD_VARIABLE_TRX_TS_UE T_ID(255) -#define T_VCD_VARIABLE_TRX_TST_UE T_ID(256) -#define T_VCD_VARIABLE_TRX_WRITE_FLAGS T_ID(257) -#define T_VCD_VARIABLE_TX_TS T_ID(258) -#define T_VCD_VARIABLE_RX_TS T_ID(259) -#define T_VCD_VARIABLE_RX_HWCNT T_ID(260) -#define T_VCD_VARIABLE_RX_LHWCNT T_ID(261) -#define T_VCD_VARIABLE_TX_HWCNT T_ID(262) -#define T_VCD_VARIABLE_TX_LHWCNT T_ID(263) -#define T_VCD_VARIABLE_RX_PCK T_ID(264) -#define T_VCD_VARIABLE_TX_PCK T_ID(265) -#define T_VCD_VARIABLE_RX_SEQ_NUM T_ID(266) -#define T_VCD_VARIABLE_RX_SEQ_NUM_PRV T_ID(267) -#define T_VCD_VARIABLE_TX_SEQ_NUM T_ID(268) -#define T_VCD_VARIABLE_CNT T_ID(269) -#define T_VCD_VARIABLE_DUMMY_DUMP T_ID(270) -#define T_VCD_VARIABLE_ITTI_SEND_MSG T_ID(271) -#define T_VCD_VARIABLE_ITTI_POLL_MSG T_ID(272) -#define T_VCD_VARIABLE_ITTI_RECV_MSG T_ID(273) -#define T_VCD_VARIABLE_ITTI_ALLOC_MSG T_ID(274) -#define T_VCD_VARIABLE_MP_ALLOC T_ID(275) -#define T_VCD_VARIABLE_MP_FREE T_ID(276) -#define T_VCD_VARIABLE_UE_INST_CNT_RX T_ID(277) -#define T_VCD_VARIABLE_UE_INST_CNT_TX T_ID(278) -#define T_VCD_VARIABLE_DCI_INFO T_ID(279) -#define T_VCD_VARIABLE_UE0_BSR T_ID(280) -#define T_VCD_VARIABLE_UE0_BO T_ID(281) -#define T_VCD_VARIABLE_UE0_SCHEDULED T_ID(282) -#define T_VCD_VARIABLE_UE0_TIMING_ADVANCE T_ID(283) -#define T_VCD_VARIABLE_UE0_SR_ENERGY T_ID(284) -#define T_VCD_VARIABLE_UE0_SR_THRES T_ID(285) -#define T_VCD_VARIABLE_UE0_RSSI0 T_ID(286) -#define T_VCD_VARIABLE_UE0_RSSI1 T_ID(287) -#define T_VCD_VARIABLE_UE0_RSSI2 T_ID(288) -#define T_VCD_VARIABLE_UE0_RSSI3 T_ID(289) -#define T_VCD_VARIABLE_UE0_RSSI4 T_ID(290) -#define T_VCD_VARIABLE_UE0_RSSI5 T_ID(291) -#define T_VCD_VARIABLE_UE0_RSSI6 T_ID(292) -#define T_VCD_VARIABLE_UE0_RSSI7 T_ID(293) -#define T_VCD_VARIABLE_UE0_RES0 T_ID(294) -#define T_VCD_VARIABLE_UE0_RES1 T_ID(295) -#define T_VCD_VARIABLE_UE0_RES2 T_ID(296) -#define T_VCD_VARIABLE_UE0_RES3 T_ID(297) -#define T_VCD_VARIABLE_UE0_RES4 T_ID(298) -#define T_VCD_VARIABLE_UE0_RES5 T_ID(299) -#define T_VCD_VARIABLE_UE0_RES6 T_ID(300) -#define T_VCD_VARIABLE_UE0_RES7 T_ID(301) -#define T_VCD_VARIABLE_UE0_MCS0 T_ID(302) -#define T_VCD_VARIABLE_UE0_MCS1 T_ID(303) -#define T_VCD_VARIABLE_UE0_MCS2 T_ID(304) -#define T_VCD_VARIABLE_UE0_MCS3 T_ID(305) -#define T_VCD_VARIABLE_UE0_MCS4 T_ID(306) -#define T_VCD_VARIABLE_UE0_MCS5 T_ID(307) -#define T_VCD_VARIABLE_UE0_MCS6 T_ID(308) -#define T_VCD_VARIABLE_UE0_MCS7 T_ID(309) -#define T_VCD_VARIABLE_UE0_RB0 T_ID(310) -#define T_VCD_VARIABLE_UE0_RB1 T_ID(311) -#define T_VCD_VARIABLE_UE0_RB2 T_ID(312) -#define T_VCD_VARIABLE_UE0_RB3 T_ID(313) -#define T_VCD_VARIABLE_UE0_RB4 T_ID(314) -#define T_VCD_VARIABLE_UE0_RB5 T_ID(315) -#define T_VCD_VARIABLE_UE0_RB6 T_ID(316) -#define T_VCD_VARIABLE_UE0_RB7 T_ID(317) -#define T_VCD_VARIABLE_UE0_ROUND0 T_ID(318) -#define T_VCD_VARIABLE_UE0_ROUND1 T_ID(319) -#define T_VCD_VARIABLE_UE0_ROUND2 T_ID(320) -#define T_VCD_VARIABLE_UE0_ROUND3 T_ID(321) -#define T_VCD_VARIABLE_UE0_ROUND4 T_ID(322) -#define T_VCD_VARIABLE_UE0_ROUND5 T_ID(323) -#define T_VCD_VARIABLE_UE0_ROUND6 T_ID(324) -#define T_VCD_VARIABLE_UE0_ROUND7 T_ID(325) -#define T_VCD_VARIABLE_UE0_SFN0 T_ID(326) -#define T_VCD_VARIABLE_UE0_SFN1 T_ID(327) -#define T_VCD_VARIABLE_UE0_SFN2 T_ID(328) -#define T_VCD_VARIABLE_UE0_SFN3 T_ID(329) -#define T_VCD_VARIABLE_UE0_SFN4 T_ID(330) -#define T_VCD_VARIABLE_UE0_SFN5 T_ID(331) -#define T_VCD_VARIABLE_UE0_SFN6 T_ID(332) -#define T_VCD_VARIABLE_UE0_SFN7 T_ID(333) -#define T_VCD_VARIABLE_SEND_IF4_SYMBOL T_ID(334) -#define T_VCD_VARIABLE_RECV_IF4_SYMBOL T_ID(335) -#define T_VCD_VARIABLE_SEND_IF5_PKT_ID T_ID(336) -#define T_VCD_VARIABLE_RECV_IF5_PKT_ID T_ID(337) -#define T_VCD_VARIABLE_UE_PDCP_FLUSH_SIZE T_ID(338) -#define T_VCD_VARIABLE_UE_PDCP_FLUSH_ERR T_ID(339) -#define T_VCD_VARIABLE_UE0_TRX_READ_NS T_ID(340) -#define T_VCD_VARIABLE_UE0_TRX_WRITE_NS T_ID(341) -#define T_VCD_VARIABLE_UE0_TRX_READ_NS_MISSING T_ID(342) -#define T_VCD_VARIABLE_UE0_TRX_WRITE_NS_MISSING T_ID(343) -#define T_VCD_VARIABLE_CPUID_ENB_THREAD_RXTX T_ID(344) -#define T_VCD_VARIABLE_CPUID_RU_THREAD T_ID(345) -#define T_VCD_VARIABLE_CPUID_RU_THREAD_TX T_ID(346) -#define T_VCD_FUNCTION_RT_SLEEP T_ID(347) -#define T_VCD_FUNCTION_TRX_READ T_ID(348) -#define T_VCD_FUNCTION_TRX_WRITE T_ID(349) -#define T_VCD_FUNCTION_TRX_READ_UE T_ID(350) -#define T_VCD_FUNCTION_TRX_WRITE_UE T_ID(351) -#define T_VCD_FUNCTION_TRX_READ_IF T_ID(352) -#define T_VCD_FUNCTION_TRX_WRITE_IF T_ID(353) -#define T_VCD_FUNCTION_eNB_PROC_RXTX0 T_ID(354) -#define T_VCD_FUNCTION_eNB_PROC_RXTX1 T_ID(355) -#define T_VCD_FUNCTION_UE_THREAD_SYNCH T_ID(356) -#define T_VCD_FUNCTION_UE_THREAD_RXTX0 T_ID(357) -#define T_VCD_FUNCTION_UE_THREAD_RXTX1 T_ID(358) -#define T_VCD_FUNCTION_TRX_READ_SF9 T_ID(359) -#define T_VCD_FUNCTION_TRX_WRITE_SF9 T_ID(360) -#define T_VCD_FUNCTION_UE_SIGNAL_COND_RXTX0 T_ID(361) -#define T_VCD_FUNCTION_UE_SIGNAL_COND_RXTX1 T_ID(362) -#define T_VCD_FUNCTION_UE_WAIT_COND_RXTX0 T_ID(363) -#define T_VCD_FUNCTION_UE_WAIT_COND_RXTX1 T_ID(364) -#define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT0 T_ID(365) -#define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT1 T_ID(366) -#define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT0 T_ID(367) -#define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT1 T_ID(368) -#define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0 T_ID(369) -#define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT1 T_ID(370) -#define T_VCD_FUNCTION_SIM_DO_DL_SIGNAL T_ID(371) -#define T_VCD_FUNCTION_SIM_DO_UL_SIGNAL T_ID(372) -#define T_VCD_FUNCTION_SIM_UE_TRX_READ T_ID(373) -#define T_VCD_FUNCTION_eNB_TX T_ID(374) -#define T_VCD_FUNCTION_eNB_RX T_ID(375) -#define T_VCD_FUNCTION_eNB_TRX T_ID(376) -#define T_VCD_FUNCTION_eNB_TM T_ID(377) -#define T_VCD_FUNCTION_eNB_RX_SLEEP T_ID(378) -#define T_VCD_FUNCTION_eNB_TX_SLEEP T_ID(379) -#define T_VCD_FUNCTION_eNB_PROC_SLEEP T_ID(380) -#define T_VCD_FUNCTION_TRX_READ_RF T_ID(381) -#define T_VCD_FUNCTION_TRX_WRITE_RF T_ID(382) -#define T_VCD_FUNCTION_UE_SYNCH T_ID(383) -#define T_VCD_FUNCTION_UE_SLOT_FEP T_ID(384) -#define T_VCD_FUNCTION_UE_RRC_MEASUREMENTS T_ID(385) -#define T_VCD_FUNCTION_UE_GAIN_CONTROL T_ID(386) -#define T_VCD_FUNCTION_UE_ADJUST_SYNCH T_ID(387) -#define T_VCD_FUNCTION_UE_MEASUREMENT_PROCEDURES T_ID(388) -#define T_VCD_FUNCTION_UE_PDCCH_PROCEDURES T_ID(389) -#define T_VCD_FUNCTION_UE_PBCH_PROCEDURES T_ID(390) -#define T_VCD_FUNCTION_PHY_PROCEDURES_ENB_TX T_ID(391) -#define T_VCD_FUNCTION_PHY_PROCEDURES_ENB_TX1 T_ID(392) -#define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPRX T_ID(393) -#define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPRX1 T_ID(394) -#define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_OFDM T_ID(395) -#define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_OFDM1 T_ID(396) -#define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_PREC T_ID(397) -#define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_PREC1 T_ID(398) -#define T_VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_UESPEC T_ID(399) -#define T_VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_UESPEC1 T_ID(400) -#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX T_ID(401) -#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_RX T_ID(402) -#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX_ULSCH_UESPEC T_ID(403) -#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX_PUCCH T_ID(404) -#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX_ULSCH_COMMON T_ID(405) -#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX_PRACH T_ID(406) -#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX_ULSCH_RAR T_ID(407) -#define T_VCD_FUNCTION_PHY_PROCEDURES_ENB_LTE T_ID(408) -#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_LTE T_ID(409) -#define T_VCD_FUNCTION_PDSCH_THREAD T_ID(410) -#define T_VCD_FUNCTION_DLSCH_THREAD0 T_ID(411) -#define T_VCD_FUNCTION_DLSCH_THREAD1 T_ID(412) -#define T_VCD_FUNCTION_DLSCH_THREAD2 T_ID(413) -#define T_VCD_FUNCTION_DLSCH_THREAD3 T_ID(414) -#define T_VCD_FUNCTION_DLSCH_THREAD4 T_ID(415) -#define T_VCD_FUNCTION_DLSCH_THREAD5 T_ID(416) -#define T_VCD_FUNCTION_DLSCH_THREAD6 T_ID(417) -#define T_VCD_FUNCTION_DLSCH_THREAD7 T_ID(418) -#define T_VCD_FUNCTION_DLSCH_DECODING0 T_ID(419) -#define T_VCD_FUNCTION_DLSCH_DECODING1 T_ID(420) -#define T_VCD_FUNCTION_DLSCH_DECODING2 T_ID(421) -#define T_VCD_FUNCTION_DLSCH_DECODING3 T_ID(422) -#define T_VCD_FUNCTION_DLSCH_DECODING4 T_ID(423) -#define T_VCD_FUNCTION_DLSCH_DECODING5 T_ID(424) -#define T_VCD_FUNCTION_DLSCH_DECODING6 T_ID(425) -#define T_VCD_FUNCTION_DLSCH_DECODING7 T_ID(426) -#define T_VCD_FUNCTION_RX_PDCCH T_ID(427) -#define T_VCD_FUNCTION_DCI_DECODING T_ID(428) -#define T_VCD_FUNCTION_RX_PHICH T_ID(429) -#define T_VCD_FUNCTION_PDSCH_PROC T_ID(430) -#define T_VCD_FUNCTION_PDSCH_PROC_SI T_ID(431) -#define T_VCD_FUNCTION_PDSCH_PROC_P T_ID(432) -#define T_VCD_FUNCTION_PDSCH_PROC_RA T_ID(433) -#define T_VCD_FUNCTION_PHY_UE_CONFIG_SIB2 T_ID(434) -#define T_VCD_FUNCTION_PHY_CONFIG_SIB1_ENB T_ID(435) -#define T_VCD_FUNCTION_PHY_CONFIG_SIB2_ENB T_ID(436) -#define T_VCD_FUNCTION_PHY_CONFIG_DEDICATED_ENB T_ID(437) -#define T_VCD_FUNCTION_PHY_UE_COMPUTE_PRACH T_ID(438) -#define T_VCD_FUNCTION_PHY_ENB_ULSCH_MSG3 T_ID(439) -#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING0 T_ID(440) -#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING1 T_ID(441) -#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING2 T_ID(442) -#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING3 T_ID(443) -#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING4 T_ID(444) -#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING5 T_ID(445) -#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING6 T_ID(446) -#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING7 T_ID(447) -#define T_VCD_FUNCTION_PHY_ENB_SFGEN T_ID(448) -#define T_VCD_FUNCTION_PHY_ENB_PRACH_RX T_ID(449) -#define T_VCD_FUNCTION_PHY_RU_PRACH_RX T_ID(450) -#define T_VCD_FUNCTION_PHY_ENB_PDCCH_TX T_ID(451) -#define T_VCD_FUNCTION_PHY_ENB_RS_TX T_ID(452) -#define T_VCD_FUNCTION_UE_GENERATE_PRACH T_ID(453) -#define T_VCD_FUNCTION_UE_ULSCH_MODULATION T_ID(454) -#define T_VCD_FUNCTION_UE_ULSCH_ENCODING T_ID(455) -#define T_VCD_FUNCTION_UE_ULSCH_ENCODING_FILL_CQI T_ID(456) -#define T_VCD_FUNCTION_UE_ULSCH_SCRAMBLING T_ID(457) -#define T_VCD_FUNCTION_ENB_DLSCH_MODULATION T_ID(458) -#define T_VCD_FUNCTION_ENB_DLSCH_ENCODING T_ID(459) -#define T_VCD_FUNCTION_ENB_DLSCH_ENCODING_W T_ID(460) -#define T_VCD_FUNCTION_ENB_DLSCH_SCRAMBLING T_ID(461) -#define T_VCD_FUNCTION_ENB_BEAM_PRECODING T_ID(462) -#define T_VCD_FUNCTION_ENB_OFDM_MODULATION T_ID(463) -#define T_VCD_FUNCTION_MACPHY_INIT T_ID(464) -#define T_VCD_FUNCTION_MACPHY_EXIT T_ID(465) -#define T_VCD_FUNCTION_ENB_DLSCH_ULSCH_SCHEDULER T_ID(466) -#define T_VCD_FUNCTION_FILL_RAR T_ID(467) -#define T_VCD_FUNCTION_TERMINATE_RA_PROC T_ID(468) -#define T_VCD_FUNCTION_INITIATE_RA_PROC T_ID(469) -#define T_VCD_FUNCTION_CANCEL_RA_PROC T_ID(470) -#define T_VCD_FUNCTION_GET_DCI_SDU T_ID(471) -#define T_VCD_FUNCTION_GET_DLSCH_SDU T_ID(472) -#define T_VCD_FUNCTION_RX_SDU T_ID(473) -#define T_VCD_FUNCTION_MRBCH_PHY_SYNC_FAILURE T_ID(474) -#define T_VCD_FUNCTION_SR_INDICATION T_ID(475) -#define T_VCD_FUNCTION_DLSCH_PREPROCESSOR T_ID(476) -#define T_VCD_FUNCTION_SCHEDULE_DLSCH T_ID(477) -#define T_VCD_FUNCTION_FILL_DLSCH_DCI T_ID(478) -#define T_VCD_FUNCTION_OUT_OF_SYNC_IND T_ID(479) -#define T_VCD_FUNCTION_UE_DECODE_SI T_ID(480) -#define T_VCD_FUNCTION_UE_DECODE_PCCH T_ID(481) -#define T_VCD_FUNCTION_UE_DECODE_CCCH T_ID(482) -#define T_VCD_FUNCTION_UE_DECODE_BCCH T_ID(483) -#define T_VCD_FUNCTION_UE_SEND_SDU T_ID(484) -#define T_VCD_FUNCTION_UE_GET_SDU T_ID(485) -#define T_VCD_FUNCTION_UE_GET_RACH T_ID(486) -#define T_VCD_FUNCTION_UE_PROCESS_RAR T_ID(487) -#define T_VCD_FUNCTION_UE_SCHEDULER T_ID(488) -#define T_VCD_FUNCTION_UE_GET_SR T_ID(489) -#define T_VCD_FUNCTION_UE_SEND_MCH_SDU T_ID(490) -#define T_VCD_FUNCTION_RLC_DATA_REQ T_ID(491) -#define T_VCD_FUNCTION_MAC_RLC_STATUS_IND T_ID(492) -#define T_VCD_FUNCTION_MAC_RLC_DATA_REQ T_ID(493) -#define T_VCD_FUNCTION_MAC_RLC_DATA_IND T_ID(494) -#define T_VCD_FUNCTION_RLC_UM_TRY_REASSEMBLY T_ID(495) -#define T_VCD_FUNCTION_RLC_UM_CHECK_TIMER_DAR_TIME_OUT T_ID(496) -#define T_VCD_FUNCTION_RLC_UM_RECEIVE_PROCESS_DAR T_ID(497) -#define T_VCD_FUNCTION_PDCP_RUN T_ID(498) -#define T_VCD_FUNCTION_PDCP_DATA_REQ T_ID(499) -#define T_VCD_FUNCTION_PDCP_DATA_IND T_ID(500) -#define T_VCD_FUNCTION_PDCP_APPLY_SECURITY T_ID(501) -#define T_VCD_FUNCTION_PDCP_VALIDATE_SECURITY T_ID(502) -#define T_VCD_FUNCTION_PDCP_FIFO_READ T_ID(503) -#define T_VCD_FUNCTION_PDCP_FIFO_READ_BUFFER T_ID(504) -#define T_VCD_FUNCTION_PDCP_FIFO_FLUSH T_ID(505) -#define T_VCD_FUNCTION_PDCP_FIFO_FLUSH_BUFFER T_ID(506) -#define T_VCD_FUNCTION_RRC_RX_TX T_ID(507) -#define T_VCD_FUNCTION_RRC_MAC_CONFIG T_ID(508) -#define T_VCD_FUNCTION_RRC_UE_DECODE_SIB1 T_ID(509) -#define T_VCD_FUNCTION_RRC_UE_DECODE_SI T_ID(510) -#define T_VCD_FUNCTION_GTPV1U_ENB_TASK T_ID(511) -#define T_VCD_FUNCTION_GTPV1U_PROCESS_UDP_REQ T_ID(512) -#define T_VCD_FUNCTION_GTPV1U_PROCESS_TUNNEL_DATA_REQ T_ID(513) -#define T_VCD_FUNCTION_UDP_ENB_TASK T_ID(514) -#define T_VCD_FUNCTION_EMU_TRANSPORT T_ID(515) -#define T_VCD_FUNCTION_LOG_RECORD T_ID(516) -#define T_VCD_FUNCTION_ITTI_ENQUEUE_MESSAGE T_ID(517) -#define T_VCD_FUNCTION_ITTI_DUMP_ENQUEUE_MESSAGE T_ID(518) -#define T_VCD_FUNCTION_ITTI_DUMP_ENQUEUE_MESSAGE_MALLOC T_ID(519) -#define T_VCD_FUNCTION_ITTI_RELAY_THREAD T_ID(520) -#define T_VCD_FUNCTION_TEST T_ID(521) -#define T_VCD_FUNCTION_SEND_IF4 T_ID(522) -#define T_VCD_FUNCTION_RECV_IF4 T_ID(523) -#define T_VCD_FUNCTION_SEND_IF5 T_ID(524) -#define T_VCD_FUNCTION_RECV_IF5 T_ID(525) -#define T_VCD_FUNCTION_TRX_COMPR_IF T_ID(526) -#define T_VCD_FUNCTION_TRX_DECOMPR_IF T_ID(527) -#define T_VCD_FUNCTION_NFAPI T_ID(528) -#define T_VCD_FUNCTION_GENERATE_PCFICH T_ID(529) -#define T_VCD_FUNCTION_GENERATE_DCI0 T_ID(530) -#define T_VCD_FUNCTION_GENERATE_DLSCH T_ID(531) -#define T_VCD_FUNCTION_GENERATE_PHICH T_ID(532) -#define T_VCD_FUNCTION_PDCCH_SCRAMBLING T_ID(533) -#define T_VCD_FUNCTION_PDCCH_MODULATION T_ID(534) -#define T_VCD_FUNCTION_PDCCH_INTERLEAVING T_ID(535) -#define T_VCD_FUNCTION_PDCCH_TX T_ID(536) -#define T_NUMBER_OF_IDS 537 - -#define T_LEGACY_PROTO_AGENT_DEBUG T_ID(538) -#define T_LEGACY_PROTO_AGENT_INFO T_ID(539) -#define T_LEGACY_PROTO_AGENT_ERROR T_ID(540) -#define T_LEGACY_F1U_ERROR T_ID(541) -#define T_LEGACY_F1U_DEBUG T_ID(542) +#define T_LEGACY_PROTO_AGENT_DEBUG T_ID(199) +#define T_LEGACY_PROTO_AGENT_INFO T_ID(200) +#define T_LEGACY_PROTO_AGENT_ERROR T_ID(201) +#define T_LEGACY_F1U_DEBUG T_ID(202) +#define T_LEGACY_F1U_INFO T_ID(203) +#define T_LEGACY_F1U_ERROR T_ID(204) +#define T_UE_MASTER_TICK T_ID(205) +#define T_UE_PHY_UL_TICK T_ID(206) +#define T_UE_PHY_DL_TICK T_ID(207) +#define T_UE_PHY_DLSCH_UE_DCI T_ID(208) +#define T_UE_PHY_DLSCH_UE_ACK T_ID(209) +#define T_UE_PHY_DLSCH_UE_NACK T_ID(210) +#define T_UE_PHY_ULSCH_UE_DCI T_ID(211) +#define T_UE_PHY_ULSCH_UE_ACK T_ID(212) +#define T_UE_PHY_ULSCH_UE_NACK T_ID(213) +#define T_UE_PHY_INPUT_SIGNAL T_ID(214) +#define T_UE_PHY_DL_CHANNEL_ESTIMATE T_ID(215) +#define T_UE_PHY_PDCCH_IQ T_ID(216) +#define T_UE_PHY_PDCCH_ENERGY T_ID(217) +#define T_UE_PHY_PDSCH_IQ T_ID(218) +#define T_UE_PHY_PDSCH_ENERGY T_ID(219) +#define T_UE_PHY_PUSCH_TX_POWER T_ID(220) +#define T_UE_PHY_PUCCH_TX_POWER T_ID(221) +#define T_UE_PHY_MEAS T_ID(222) +#define T_first T_ID(223) +#define T_buf_test T_ID(224) +#define T_VCD_VARIABLE_FRAME_NUMBER_TX0_ENB T_ID(225) +#define T_VCD_VARIABLE_FRAME_NUMBER_TX1_ENB T_ID(226) +#define T_VCD_VARIABLE_FRAME_NUMBER_RX0_ENB T_ID(227) +#define T_VCD_VARIABLE_FRAME_NUMBER_RX1_ENB T_ID(228) +#define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX0_ENB T_ID(229) +#define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX1_ENB T_ID(230) +#define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX0_ENB T_ID(231) +#define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX1_ENB T_ID(232) +#define T_VCD_VARIABLE_FRAME_NUMBER_TX0_RU T_ID(233) +#define T_VCD_VARIABLE_FRAME_NUMBER_TX1_RU T_ID(234) +#define T_VCD_VARIABLE_FRAME_NUMBER_RX0_RU T_ID(235) +#define T_VCD_VARIABLE_FRAME_NUMBER_RX1_RU T_ID(236) +#define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX0_RU T_ID(237) +#define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX1_RU T_ID(238) +#define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX0_RU T_ID(239) +#define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX1_RU T_ID(240) +#define T_VCD_VARIABLE_RUNTIME_TX_ENB T_ID(241) +#define T_VCD_VARIABLE_RUNTIME_RX_ENB T_ID(242) +#define T_VCD_VARIABLE_FRAME_NUMBER_TX0_UE T_ID(243) +#define T_VCD_VARIABLE_FRAME_NUMBER_TX1_UE T_ID(244) +#define T_VCD_VARIABLE_FRAME_NUMBER_RX0_UE T_ID(245) +#define T_VCD_VARIABLE_FRAME_NUMBER_RX1_UE T_ID(246) +#define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX0_UE T_ID(247) +#define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX1_UE T_ID(248) +#define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX0_UE T_ID(249) +#define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX1_UE T_ID(250) +#define T_VCD_VARIABLE_UE_RX_OFFSET T_ID(251) +#define T_VCD_VARIABLE_DIFF T_ID(252) +#define T_VCD_VARIABLE_HW_SUBFRAME T_ID(253) +#define T_VCD_VARIABLE_HW_FRAME T_ID(254) +#define T_VCD_VARIABLE_HW_SUBFRAME_RX T_ID(255) +#define T_VCD_VARIABLE_HW_FRAME_RX T_ID(256) +#define T_VCD_VARIABLE_TXCNT T_ID(257) +#define T_VCD_VARIABLE_RXCNT T_ID(258) +#define T_VCD_VARIABLE_TRX_TS T_ID(259) +#define T_VCD_VARIABLE_TRX_TST T_ID(260) +#define T_VCD_VARIABLE_TRX_TS_UE T_ID(261) +#define T_VCD_VARIABLE_TRX_TST_UE T_ID(262) +#define T_VCD_VARIABLE_TRX_WRITE_FLAGS T_ID(263) +#define T_VCD_VARIABLE_TX_TS T_ID(264) +#define T_VCD_VARIABLE_RX_TS T_ID(265) +#define T_VCD_VARIABLE_RX_HWCNT T_ID(266) +#define T_VCD_VARIABLE_RX_LHWCNT T_ID(267) +#define T_VCD_VARIABLE_TX_HWCNT T_ID(268) +#define T_VCD_VARIABLE_TX_LHWCNT T_ID(269) +#define T_VCD_VARIABLE_RX_PCK T_ID(270) +#define T_VCD_VARIABLE_TX_PCK T_ID(271) +#define T_VCD_VARIABLE_RX_SEQ_NUM T_ID(272) +#define T_VCD_VARIABLE_RX_SEQ_NUM_PRV T_ID(273) +#define T_VCD_VARIABLE_TX_SEQ_NUM T_ID(274) +#define T_VCD_VARIABLE_CNT T_ID(275) +#define T_VCD_VARIABLE_DUMMY_DUMP T_ID(276) +#define T_VCD_VARIABLE_ITTI_SEND_MSG T_ID(277) +#define T_VCD_VARIABLE_ITTI_POLL_MSG T_ID(278) +#define T_VCD_VARIABLE_ITTI_RECV_MSG T_ID(279) +#define T_VCD_VARIABLE_ITTI_ALLOC_MSG T_ID(280) +#define T_VCD_VARIABLE_MP_ALLOC T_ID(281) +#define T_VCD_VARIABLE_MP_FREE T_ID(282) +#define T_VCD_VARIABLE_UE_INST_CNT_RX T_ID(283) +#define T_VCD_VARIABLE_UE_INST_CNT_TX T_ID(284) +#define T_VCD_VARIABLE_DCI_INFO T_ID(285) +#define T_VCD_VARIABLE_UE0_BSR T_ID(286) +#define T_VCD_VARIABLE_UE0_BO T_ID(287) +#define T_VCD_VARIABLE_UE0_SCHEDULED T_ID(288) +#define T_VCD_VARIABLE_UE0_TIMING_ADVANCE T_ID(289) +#define T_VCD_VARIABLE_UE0_SR_ENERGY T_ID(290) +#define T_VCD_VARIABLE_UE0_SR_THRES T_ID(291) +#define T_VCD_VARIABLE_UE0_RSSI0 T_ID(292) +#define T_VCD_VARIABLE_UE0_RSSI1 T_ID(293) +#define T_VCD_VARIABLE_UE0_RSSI2 T_ID(294) +#define T_VCD_VARIABLE_UE0_RSSI3 T_ID(295) +#define T_VCD_VARIABLE_UE0_RSSI4 T_ID(296) +#define T_VCD_VARIABLE_UE0_RSSI5 T_ID(297) +#define T_VCD_VARIABLE_UE0_RSSI6 T_ID(298) +#define T_VCD_VARIABLE_UE0_RSSI7 T_ID(299) +#define T_VCD_VARIABLE_UE0_RES0 T_ID(300) +#define T_VCD_VARIABLE_UE0_RES1 T_ID(301) +#define T_VCD_VARIABLE_UE0_RES2 T_ID(302) +#define T_VCD_VARIABLE_UE0_RES3 T_ID(303) +#define T_VCD_VARIABLE_UE0_RES4 T_ID(304) +#define T_VCD_VARIABLE_UE0_RES5 T_ID(305) +#define T_VCD_VARIABLE_UE0_RES6 T_ID(306) +#define T_VCD_VARIABLE_UE0_RES7 T_ID(307) +#define T_VCD_VARIABLE_UE0_MCS0 T_ID(308) +#define T_VCD_VARIABLE_UE0_MCS1 T_ID(309) +#define T_VCD_VARIABLE_UE0_MCS2 T_ID(310) +#define T_VCD_VARIABLE_UE0_MCS3 T_ID(311) +#define T_VCD_VARIABLE_UE0_MCS4 T_ID(312) +#define T_VCD_VARIABLE_UE0_MCS5 T_ID(313) +#define T_VCD_VARIABLE_UE0_MCS6 T_ID(314) +#define T_VCD_VARIABLE_UE0_MCS7 T_ID(315) +#define T_VCD_VARIABLE_UE0_RB0 T_ID(316) +#define T_VCD_VARIABLE_UE0_RB1 T_ID(317) +#define T_VCD_VARIABLE_UE0_RB2 T_ID(318) +#define T_VCD_VARIABLE_UE0_RB3 T_ID(319) +#define T_VCD_VARIABLE_UE0_RB4 T_ID(320) +#define T_VCD_VARIABLE_UE0_RB5 T_ID(321) +#define T_VCD_VARIABLE_UE0_RB6 T_ID(322) +#define T_VCD_VARIABLE_UE0_RB7 T_ID(323) +#define T_VCD_VARIABLE_UE0_ROUND0 T_ID(324) +#define T_VCD_VARIABLE_UE0_ROUND1 T_ID(325) +#define T_VCD_VARIABLE_UE0_ROUND2 T_ID(326) +#define T_VCD_VARIABLE_UE0_ROUND3 T_ID(327) +#define T_VCD_VARIABLE_UE0_ROUND4 T_ID(328) +#define T_VCD_VARIABLE_UE0_ROUND5 T_ID(329) +#define T_VCD_VARIABLE_UE0_ROUND6 T_ID(330) +#define T_VCD_VARIABLE_UE0_ROUND7 T_ID(331) +#define T_VCD_VARIABLE_UE0_SFN0 T_ID(332) +#define T_VCD_VARIABLE_UE0_SFN1 T_ID(333) +#define T_VCD_VARIABLE_UE0_SFN2 T_ID(334) +#define T_VCD_VARIABLE_UE0_SFN3 T_ID(335) +#define T_VCD_VARIABLE_UE0_SFN4 T_ID(336) +#define T_VCD_VARIABLE_UE0_SFN5 T_ID(337) +#define T_VCD_VARIABLE_UE0_SFN6 T_ID(338) +#define T_VCD_VARIABLE_UE0_SFN7 T_ID(339) +#define T_VCD_VARIABLE_SEND_IF4_SYMBOL T_ID(340) +#define T_VCD_VARIABLE_RECV_IF4_SYMBOL T_ID(341) +#define T_VCD_VARIABLE_SEND_IF5_PKT_ID T_ID(342) +#define T_VCD_VARIABLE_RECV_IF5_PKT_ID T_ID(343) +#define T_VCD_VARIABLE_UE_PDCP_FLUSH_SIZE T_ID(344) +#define T_VCD_VARIABLE_UE_PDCP_FLUSH_ERR T_ID(345) +#define T_VCD_VARIABLE_UE0_TRX_READ_NS T_ID(346) +#define T_VCD_VARIABLE_UE0_TRX_WRITE_NS T_ID(347) +#define T_VCD_VARIABLE_UE0_TRX_READ_NS_MISSING T_ID(348) +#define T_VCD_VARIABLE_UE0_TRX_WRITE_NS_MISSING T_ID(349) +#define T_VCD_VARIABLE_CPUID_ENB_THREAD_RXTX T_ID(350) +#define T_VCD_VARIABLE_CPUID_RU_THREAD T_ID(351) +#define T_VCD_VARIABLE_CPUID_RU_THREAD_TX T_ID(352) +#define T_VCD_FUNCTION_RT_SLEEP T_ID(353) +#define T_VCD_FUNCTION_TRX_READ T_ID(354) +#define T_VCD_FUNCTION_TRX_WRITE T_ID(355) +#define T_VCD_FUNCTION_TRX_READ_UE T_ID(356) +#define T_VCD_FUNCTION_TRX_WRITE_UE T_ID(357) +#define T_VCD_FUNCTION_TRX_READ_IF T_ID(358) +#define T_VCD_FUNCTION_TRX_WRITE_IF T_ID(359) +#define T_VCD_FUNCTION_eNB_PROC_RXTX0 T_ID(360) +#define T_VCD_FUNCTION_eNB_PROC_RXTX1 T_ID(361) +#define T_VCD_FUNCTION_UE_THREAD_SYNCH T_ID(362) +#define T_VCD_FUNCTION_UE_THREAD_RXTX0 T_ID(363) +#define T_VCD_FUNCTION_UE_THREAD_RXTX1 T_ID(364) +#define T_VCD_FUNCTION_TRX_READ_SF9 T_ID(365) +#define T_VCD_FUNCTION_TRX_WRITE_SF9 T_ID(366) +#define T_VCD_FUNCTION_UE_SIGNAL_COND_RXTX0 T_ID(367) +#define T_VCD_FUNCTION_UE_SIGNAL_COND_RXTX1 T_ID(368) +#define T_VCD_FUNCTION_UE_WAIT_COND_RXTX0 T_ID(369) +#define T_VCD_FUNCTION_UE_WAIT_COND_RXTX1 T_ID(370) +#define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT0 T_ID(371) +#define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT1 T_ID(372) +#define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT0 T_ID(373) +#define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT1 T_ID(374) +#define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0 T_ID(375) +#define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT1 T_ID(376) +#define T_VCD_FUNCTION_SIM_DO_DL_SIGNAL T_ID(377) +#define T_VCD_FUNCTION_SIM_DO_UL_SIGNAL T_ID(378) +#define T_VCD_FUNCTION_SIM_UE_TRX_READ T_ID(379) +#define T_VCD_FUNCTION_eNB_TX T_ID(380) +#define T_VCD_FUNCTION_eNB_RX T_ID(381) +#define T_VCD_FUNCTION_eNB_TRX T_ID(382) +#define T_VCD_FUNCTION_eNB_TM T_ID(383) +#define T_VCD_FUNCTION_eNB_RX_SLEEP T_ID(384) +#define T_VCD_FUNCTION_eNB_TX_SLEEP T_ID(385) +#define T_VCD_FUNCTION_eNB_PROC_SLEEP T_ID(386) +#define T_VCD_FUNCTION_TRX_READ_RF T_ID(387) +#define T_VCD_FUNCTION_TRX_WRITE_RF T_ID(388) +#define T_VCD_FUNCTION_UE_SYNCH T_ID(389) +#define T_VCD_FUNCTION_UE_SLOT_FEP T_ID(390) +#define T_VCD_FUNCTION_UE_RRC_MEASUREMENTS T_ID(391) +#define T_VCD_FUNCTION_UE_GAIN_CONTROL T_ID(392) +#define T_VCD_FUNCTION_UE_ADJUST_SYNCH T_ID(393) +#define T_VCD_FUNCTION_UE_MEASUREMENT_PROCEDURES T_ID(394) +#define T_VCD_FUNCTION_UE_PDCCH_PROCEDURES T_ID(395) +#define T_VCD_FUNCTION_UE_PBCH_PROCEDURES T_ID(396) +#define T_VCD_FUNCTION_PHY_PROCEDURES_ENB_TX T_ID(397) +#define T_VCD_FUNCTION_PHY_PROCEDURES_ENB_TX1 T_ID(398) +#define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPRX T_ID(399) +#define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPRX1 T_ID(400) +#define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_OFDM T_ID(401) +#define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_OFDM1 T_ID(402) +#define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_PREC T_ID(403) +#define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_PREC1 T_ID(404) +#define T_VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_UESPEC T_ID(405) +#define T_VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_UESPEC1 T_ID(406) +#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX T_ID(407) +#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_RX T_ID(408) +#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX_ULSCH_UESPEC T_ID(409) +#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX_PUCCH T_ID(410) +#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX_ULSCH_COMMON T_ID(411) +#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX_PRACH T_ID(412) +#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX_ULSCH_RAR T_ID(413) +#define T_VCD_FUNCTION_PHY_PROCEDURES_ENB_LTE T_ID(414) +#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_LTE T_ID(415) +#define T_VCD_FUNCTION_PDSCH_THREAD T_ID(416) +#define T_VCD_FUNCTION_DLSCH_THREAD0 T_ID(417) +#define T_VCD_FUNCTION_DLSCH_THREAD1 T_ID(418) +#define T_VCD_FUNCTION_DLSCH_THREAD2 T_ID(419) +#define T_VCD_FUNCTION_DLSCH_THREAD3 T_ID(420) +#define T_VCD_FUNCTION_DLSCH_THREAD4 T_ID(421) +#define T_VCD_FUNCTION_DLSCH_THREAD5 T_ID(422) +#define T_VCD_FUNCTION_DLSCH_THREAD6 T_ID(423) +#define T_VCD_FUNCTION_DLSCH_THREAD7 T_ID(424) +#define T_VCD_FUNCTION_DLSCH_DECODING0 T_ID(425) +#define T_VCD_FUNCTION_DLSCH_DECODING1 T_ID(426) +#define T_VCD_FUNCTION_DLSCH_DECODING2 T_ID(427) +#define T_VCD_FUNCTION_DLSCH_DECODING3 T_ID(428) +#define T_VCD_FUNCTION_DLSCH_DECODING4 T_ID(429) +#define T_VCD_FUNCTION_DLSCH_DECODING5 T_ID(430) +#define T_VCD_FUNCTION_DLSCH_DECODING6 T_ID(431) +#define T_VCD_FUNCTION_DLSCH_DECODING7 T_ID(432) +#define T_VCD_FUNCTION_RX_PDCCH T_ID(433) +#define T_VCD_FUNCTION_DCI_DECODING T_ID(434) +#define T_VCD_FUNCTION_RX_PHICH T_ID(435) +#define T_VCD_FUNCTION_PDSCH_PROC T_ID(436) +#define T_VCD_FUNCTION_PDSCH_PROC_SI T_ID(437) +#define T_VCD_FUNCTION_PDSCH_PROC_P T_ID(438) +#define T_VCD_FUNCTION_PDSCH_PROC_RA T_ID(439) +#define T_VCD_FUNCTION_PHY_UE_CONFIG_SIB2 T_ID(440) +#define T_VCD_FUNCTION_PHY_CONFIG_SIB1_ENB T_ID(441) +#define T_VCD_FUNCTION_PHY_CONFIG_SIB2_ENB T_ID(442) +#define T_VCD_FUNCTION_PHY_CONFIG_DEDICATED_ENB T_ID(443) +#define T_VCD_FUNCTION_PHY_UE_COMPUTE_PRACH T_ID(444) +#define T_VCD_FUNCTION_PHY_ENB_ULSCH_MSG3 T_ID(445) +#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING0 T_ID(446) +#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING1 T_ID(447) +#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING2 T_ID(448) +#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING3 T_ID(449) +#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING4 T_ID(450) +#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING5 T_ID(451) +#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING6 T_ID(452) +#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING7 T_ID(453) +#define T_VCD_FUNCTION_PHY_ENB_SFGEN T_ID(454) +#define T_VCD_FUNCTION_PHY_ENB_PRACH_RX T_ID(455) +#define T_VCD_FUNCTION_PHY_RU_PRACH_RX T_ID(456) +#define T_VCD_FUNCTION_PHY_ENB_PDCCH_TX T_ID(457) +#define T_VCD_FUNCTION_PHY_ENB_RS_TX T_ID(458) +#define T_VCD_FUNCTION_UE_GENERATE_PRACH T_ID(459) +#define T_VCD_FUNCTION_UE_ULSCH_MODULATION T_ID(460) +#define T_VCD_FUNCTION_UE_ULSCH_ENCODING T_ID(461) +#define T_VCD_FUNCTION_UE_ULSCH_ENCODING_FILL_CQI T_ID(462) +#define T_VCD_FUNCTION_UE_ULSCH_SCRAMBLING T_ID(463) +#define T_VCD_FUNCTION_ENB_DLSCH_MODULATION T_ID(464) +#define T_VCD_FUNCTION_ENB_DLSCH_ENCODING T_ID(465) +#define T_VCD_FUNCTION_ENB_DLSCH_ENCODING_W T_ID(466) +#define T_VCD_FUNCTION_ENB_DLSCH_SCRAMBLING T_ID(467) +#define T_VCD_FUNCTION_ENB_BEAM_PRECODING T_ID(468) +#define T_VCD_FUNCTION_ENB_OFDM_MODULATION T_ID(469) +#define T_VCD_FUNCTION_MACPHY_INIT T_ID(470) +#define T_VCD_FUNCTION_MACPHY_EXIT T_ID(471) +#define T_VCD_FUNCTION_ENB_DLSCH_ULSCH_SCHEDULER T_ID(472) +#define T_VCD_FUNCTION_FILL_RAR T_ID(473) +#define T_VCD_FUNCTION_TERMINATE_RA_PROC T_ID(474) +#define T_VCD_FUNCTION_INITIATE_RA_PROC T_ID(475) +#define T_VCD_FUNCTION_CANCEL_RA_PROC T_ID(476) +#define T_VCD_FUNCTION_GET_DCI_SDU T_ID(477) +#define T_VCD_FUNCTION_GET_DLSCH_SDU T_ID(478) +#define T_VCD_FUNCTION_RX_SDU T_ID(479) +#define T_VCD_FUNCTION_MRBCH_PHY_SYNC_FAILURE T_ID(480) +#define T_VCD_FUNCTION_SR_INDICATION T_ID(481) +#define T_VCD_FUNCTION_DLSCH_PREPROCESSOR T_ID(482) +#define T_VCD_FUNCTION_SCHEDULE_DLSCH T_ID(483) +#define T_VCD_FUNCTION_FILL_DLSCH_DCI T_ID(484) +#define T_VCD_FUNCTION_OUT_OF_SYNC_IND T_ID(485) +#define T_VCD_FUNCTION_UE_DECODE_SI T_ID(486) +#define T_VCD_FUNCTION_UE_DECODE_PCCH T_ID(487) +#define T_VCD_FUNCTION_UE_DECODE_CCCH T_ID(488) +#define T_VCD_FUNCTION_UE_DECODE_BCCH T_ID(489) +#define T_VCD_FUNCTION_UE_SEND_SDU T_ID(490) +#define T_VCD_FUNCTION_UE_GET_SDU T_ID(491) +#define T_VCD_FUNCTION_UE_GET_RACH T_ID(492) +#define T_VCD_FUNCTION_UE_PROCESS_RAR T_ID(493) +#define T_VCD_FUNCTION_UE_SCHEDULER T_ID(494) +#define T_VCD_FUNCTION_UE_GET_SR T_ID(495) +#define T_VCD_FUNCTION_UE_SEND_MCH_SDU T_ID(496) +#define T_VCD_FUNCTION_RLC_DATA_REQ T_ID(497) +#define T_VCD_FUNCTION_MAC_RLC_STATUS_IND T_ID(498) +#define T_VCD_FUNCTION_MAC_RLC_DATA_REQ T_ID(499) +#define T_VCD_FUNCTION_MAC_RLC_DATA_IND T_ID(500) +#define T_VCD_FUNCTION_RLC_UM_TRY_REASSEMBLY T_ID(501) +#define T_VCD_FUNCTION_RLC_UM_CHECK_TIMER_DAR_TIME_OUT T_ID(502) +#define T_VCD_FUNCTION_RLC_UM_RECEIVE_PROCESS_DAR T_ID(503) +#define T_VCD_FUNCTION_PDCP_RUN T_ID(504) +#define T_VCD_FUNCTION_PDCP_DATA_REQ T_ID(505) +#define T_VCD_FUNCTION_PDCP_DATA_IND T_ID(506) +#define T_VCD_FUNCTION_PDCP_APPLY_SECURITY T_ID(507) +#define T_VCD_FUNCTION_PDCP_VALIDATE_SECURITY T_ID(508) +#define T_VCD_FUNCTION_PDCP_FIFO_READ T_ID(509) +#define T_VCD_FUNCTION_PDCP_FIFO_READ_BUFFER T_ID(510) +#define T_VCD_FUNCTION_PDCP_FIFO_FLUSH T_ID(511) +#define T_VCD_FUNCTION_PDCP_FIFO_FLUSH_BUFFER T_ID(512) +#define T_VCD_FUNCTION_RRC_RX_TX T_ID(513) +#define T_VCD_FUNCTION_RRC_MAC_CONFIG T_ID(514) +#define T_VCD_FUNCTION_RRC_UE_DECODE_SIB1 T_ID(515) +#define T_VCD_FUNCTION_RRC_UE_DECODE_SI T_ID(516) +#define T_VCD_FUNCTION_GTPV1U_ENB_TASK T_ID(517) +#define T_VCD_FUNCTION_GTPV1U_PROCESS_UDP_REQ T_ID(518) +#define T_VCD_FUNCTION_GTPV1U_PROCESS_TUNNEL_DATA_REQ T_ID(519) +#define T_VCD_FUNCTION_UDP_ENB_TASK T_ID(520) +#define T_VCD_FUNCTION_EMU_TRANSPORT T_ID(521) +#define T_VCD_FUNCTION_LOG_RECORD T_ID(522) +#define T_VCD_FUNCTION_ITTI_ENQUEUE_MESSAGE T_ID(523) +#define T_VCD_FUNCTION_ITTI_DUMP_ENQUEUE_MESSAGE T_ID(524) +#define T_VCD_FUNCTION_ITTI_DUMP_ENQUEUE_MESSAGE_MALLOC T_ID(525) +#define T_VCD_FUNCTION_ITTI_RELAY_THREAD T_ID(526) +#define T_VCD_FUNCTION_TEST T_ID(527) +#define T_VCD_FUNCTION_SEND_IF4 T_ID(528) +#define T_VCD_FUNCTION_RECV_IF4 T_ID(529) +#define T_VCD_FUNCTION_SEND_IF5 T_ID(530) +#define T_VCD_FUNCTION_RECV_IF5 T_ID(531) +#define T_VCD_FUNCTION_TRX_COMPR_IF T_ID(532) +#define T_VCD_FUNCTION_TRX_DECOMPR_IF T_ID(533) +#define T_VCD_FUNCTION_NFAPI T_ID(534) +#define T_VCD_FUNCTION_GENERATE_PCFICH T_ID(535) +#define T_VCD_FUNCTION_GENERATE_DCI0 T_ID(536) +#define T_VCD_FUNCTION_GENERATE_DLSCH T_ID(537) +#define T_VCD_FUNCTION_GENERATE_PHICH T_ID(538) +#define T_VCD_FUNCTION_PDCCH_SCRAMBLING T_ID(539) +#define T_VCD_FUNCTION_PDCCH_MODULATION T_ID(540) +#define T_VCD_FUNCTION_PDCCH_INTERLEAVING T_ID(541) +#define T_VCD_FUNCTION_PDCCH_TX T_ID(542) +#define T_NUMBER_OF_IDS 543 diff --git a/common/utils/T/T_messages.txt b/common/utils/T/T_messages.txt index 676f329a0e..ccac7de253 100644 --- a/common/utils/T/T_messages.txt +++ b/common/utils/T/T_messages.txt @@ -621,7 +621,7 @@ ID = LEGACY_OCM_DEBUG FORMAT = string,log ID = LEGACY_OCM_TRACE DESC = OCM legacy logs - trace level - GROUP = ALL:LEGACY_OCM:LEGACY_GROUP_TRACE:LEGACY + OGROUP = ALL:LEGACY_OCM:LEGACY_GROUP_TRACE:LEGACY FORMAT = string,log ID = LEGACY_OIP_INFO @@ -838,6 +838,36 @@ ID = LEGACY_CLI_TRACE GROUP = ALL:LEGACY_CLI:LEGACY_GROUP_TRACE:LEGACY FORMAT = string,log +ID = LEGACY_PROTO_AGENT_DEBUG + DESC = PROTO AGENT DEBUG LEVEL + GROUP = ALL:LEGACY_PROTO:LEGACY_GROUP_DEBUG:LEGACY + FORMAT = string,log + +ID = LEGACY_PROTO_AGENT_INFO + DESC = PROTO AGENT INFO LEVEL + GROUP = ALL:LEGACY_PROTO:LEGACY_GROUP_INFO:LEGACY + FORMAT = string,log + +ID = LEGACY_PROTO_AGENT_ERROR + DESC = PROTO AGENT ERROR LEVEL + GROUP = ALL:LEGACY_PROTO:LEGACY_GROUP_ERROR:LEGACY + FORMAT = string,log + +ID = LEGACY_F1U_DEBUG + DESC = F1U DEBUG LEVEL + GROUP = ALL:LEGACY_F1U:LEGACY_GROUP_DEBUG:LEGACY + FORMAT = string,log + +ID = LEGACY_F1U_INFO + DESC = F1U INFO LEVEL + GROUP = ALL:LEGACY_F1U:LEGACY_GROUP_INFO:LEGACY + FORMAT = string,log + +ID = LEGACY_F1U_ERROR + DESC = F1U ERROR LEVEL + GROUP = ALL:LEGACY_F1U:LEGACY_GROUP_ERROR:LEGACY + FORMAT = string,log + ################# #### UE LOGS #### ################# diff --git a/openair2/COMMON/f1ap_messages_def.h b/openair2/COMMON/f1ap_messages_def.h index d81bd87ed5..67a803face 100644 --- a/openair2/COMMON/f1ap_messages_def.h +++ b/openair2/COMMON/f1ap_messages_def.h @@ -19,59 +19,22 @@ * contact@openairinterface.org */ -/* Messages for S1AP logging */ -MESSAGE_DEF(S1AP_UPLINK_NAS_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_uplink_nas_log) -MESSAGE_DEF(S1AP_UE_CAPABILITY_IND_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_ue_capability_ind_log) -MESSAGE_DEF(S1AP_INITIAL_CONTEXT_SETUP_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_initial_context_setup_log) -MESSAGE_DEF(S1AP_NAS_NON_DELIVERY_IND_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_nas_non_delivery_ind_log) -MESSAGE_DEF(S1AP_DOWNLINK_NAS_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_downlink_nas_log) -MESSAGE_DEF(S1AP_S1_SETUP_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_s1_setup_log) -MESSAGE_DEF(S1AP_INITIAL_UE_MESSAGE_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_initial_ue_message_log) -MESSAGE_DEF(S1AP_UE_CONTEXT_RELEASE_REQ_LOG, MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_ue_context_release_req_log) -MESSAGE_DEF(S1AP_UE_CONTEXT_RELEASE_COMMAND_LOG, MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_ue_context_release_command_log) -MESSAGE_DEF(S1AP_UE_CONTEXT_RELEASE_COMPLETE_LOG, MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_ue_context_release_complete_log) -MESSAGE_DEF(S1AP_UE_CONTEXT_RELEASE_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_ue_context_release_log) -MESSAGE_DEF(S1AP_E_RAB_SETUP_REQUEST_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_e_rab_setup_request_log) -MESSAGE_DEF(S1AP_E_RAB_SETUP_RESPONSE_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_e_rab_setup_response_log) -MESSAGE_DEF(S1AP_E_RAB_MODIFY_REQUEST_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_e_rab_modify_request_log) -MESSAGE_DEF(S1AP_E_RAB_MODIFY_RESPONSE_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_e_rab_modify_response_log) -MESSAGE_DEF(S1AP_PAGING_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_paging_log) -MESSAGE_DEF(S1AP_E_RAB_RELEASE_REQUEST_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_e_rab_release_request_log) -MESSAGE_DEF(S1AP_E_RAB_RELEASE_RESPONSE_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_e_rab_release_response_log) -MESSAGE_DEF(S1AP_E_RAB_ERROR_INDICATION_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_error_indication_log) +/* eNB application layer -> F1AP messages */ +MESSAGE_DEF(F1AP_SETUP_REQ , MESSAGE_PRIORITY_MED, f1ap_setup_req_t , f1ap_setup_req) -/* eNB application layer -> S1AP messages */ -MESSAGE_DEF(S1AP_REGISTER_ENB_REQ , MESSAGE_PRIORITY_MED, s1ap_register_enb_req_t , s1ap_register_enb_req) +/* F1AP -> eNB application layer messages */ +MESSAGE_DEF(F1AP_SETUP_RESP , MESSAGE_PRIORITY_MED, f1ap_setup_resp_t , f1ap_setup_resp) +MESSAGE_DEF(F1AP_SETUP_FAILURE , MESSAGE_PRIORITY_MED, f1ap_setup_failure_t , f1ap_setup_failure) -/* S1AP -> eNB application layer messages */ -MESSAGE_DEF(S1AP_REGISTER_ENB_CNF , MESSAGE_PRIORITY_MED, s1ap_register_enb_cnf_t , s1ap_register_enb_cnf) -MESSAGE_DEF(S1AP_DEREGISTERED_ENB_IND , MESSAGE_PRIORITY_MED, s1ap_deregistered_enb_ind_t , s1ap_deregistered_enb_ind) +/* MAC -> F1AP messages */ +MESSAGE_DEF(F1AP_INITIAL_UL_RRC_MESSAGE , MESSAGE_PRIORITY_MED, f1ap_initial_ul_rrc_message_t , f1ap_initial_ul_rrc_message) +MESSAGE_DEF(F1AP_UL_RRC_MESSAGE , MESSAGE_PRIORITY_MED, f1ap_ul_rrc_message_t , f1ap_ul_rrc_message) +//MESSAGE_DEF(F1AP_INITIAL_CONTEXT_SETUP_RESP, MESSAGE_PRIORITY_MED, f1ap_initial_context_setup_resp_t, f1ap_initial_context_setup_resp) +//MESSAGE_DEF(F1AP_INITIAL_CONTEXT_SETUP_FAILURE, MESSAGE_PRIORITY_MED, f1ap_initial_context_setup_failure_t, f1ap_initial_context_setup_failure) -/* RRC -> S1AP messages */ -MESSAGE_DEF(S1AP_NAS_FIRST_REQ , MESSAGE_PRIORITY_MED, s1ap_nas_first_req_t , s1ap_nas_first_req) -MESSAGE_DEF(S1AP_UPLINK_NAS , MESSAGE_PRIORITY_MED, s1ap_uplink_nas_t , s1ap_uplink_nas) -MESSAGE_DEF(S1AP_UE_CAPABILITIES_IND , MESSAGE_PRIORITY_MED, s1ap_ue_cap_info_ind_t , s1ap_ue_cap_info_ind) -MESSAGE_DEF(S1AP_INITIAL_CONTEXT_SETUP_RESP, MESSAGE_PRIORITY_MED, s1ap_initial_context_setup_resp_t, s1ap_initial_context_setup_resp) -MESSAGE_DEF(S1AP_INITIAL_CONTEXT_SETUP_FAIL, MESSAGE_PRIORITY_MED, s1ap_initial_context_setup_fail_t, s1ap_initial_context_setup_fail) -MESSAGE_DEF(S1AP_NAS_NON_DELIVERY_IND , MESSAGE_PRIORITY_MED, s1ap_nas_non_delivery_ind_t , s1ap_nas_non_delivery_ind) -MESSAGE_DEF(S1AP_UE_CONTEXT_RELEASE_RESP , MESSAGE_PRIORITY_MED, s1ap_ue_release_resp_t , s1ap_ue_release_resp) -MESSAGE_DEF(S1AP_UE_CONTEXT_RELEASE_COMPLETE, MESSAGE_PRIORITY_MED, s1ap_ue_release_complete_t , s1ap_ue_release_complete) -MESSAGE_DEF(S1AP_UE_CTXT_MODIFICATION_RESP , MESSAGE_PRIORITY_MED, s1ap_ue_ctxt_modification_resp_t , s1ap_ue_ctxt_modification_resp) -MESSAGE_DEF(S1AP_UE_CTXT_MODIFICATION_FAIL , MESSAGE_PRIORITY_MED, s1ap_ue_ctxt_modification_fail_t , s1ap_ue_ctxt_modification_fail) -MESSAGE_DEF(S1AP_E_RAB_SETUP_RESP , MESSAGE_PRIORITY_MED, s1ap_e_rab_setup_resp_t , s1ap_e_rab_setup_resp) -MESSAGE_DEF(S1AP_E_RAB_SETUP_REQUEST_FAIL , MESSAGE_PRIORITY_MED, s1ap_e_rab_setup_req_fail_t , s1ap_e_rab_setup_request_fail) -MESSAGE_DEF(S1AP_E_RAB_MODIFY_RESP , MESSAGE_PRIORITY_MED, s1ap_e_rab_modify_resp_t , s1ap_e_rab_modify_resp) -MESSAGE_DEF(S1AP_E_RAB_RELEASE_RESPONSE , MESSAGE_PRIORITY_MED, s1ap_e_rab_release_resp_t , s1ap_e_rab_release_resp) -/* S1AP -> RRC messages */ -MESSAGE_DEF(S1AP_DOWNLINK_NAS , MESSAGE_PRIORITY_MED, s1ap_downlink_nas_t , s1ap_downlink_nas ) -MESSAGE_DEF(S1AP_INITIAL_CONTEXT_SETUP_REQ , MESSAGE_PRIORITY_MED, s1ap_initial_context_setup_req_t , s1ap_initial_context_setup_req ) -MESSAGE_DEF(S1AP_UE_CTXT_MODIFICATION_REQ , MESSAGE_PRIORITY_MED, s1ap_ue_ctxt_modification_req_t , s1ap_ue_ctxt_modification_req) -MESSAGE_DEF(S1AP_PAGING_IND , MESSAGE_PRIORITY_MED, s1ap_paging_ind_t , s1ap_paging_ind ) -MESSAGE_DEF(S1AP_E_RAB_SETUP_REQ , MESSAGE_PRIORITY_MED, s1ap_e_rab_setup_req_t , s1ap_e_rab_setup_req ) -MESSAGE_DEF(S1AP_E_RAB_MODIFY_REQ , MESSAGE_PRIORITY_MED, s1ap_e_rab_modify_req_t , s1ap_e_rab_modify_req ) -MESSAGE_DEF(S1AP_E_RAB_RELEASE_COMMAND , MESSAGE_PRIORITY_MED, s1ap_e_rab_release_command_t , s1ap_e_rab_release_command) -MESSAGE_DEF(S1AP_UE_CONTEXT_RELEASE_COMMAND, MESSAGE_PRIORITY_MED, s1ap_ue_release_command_t , s1ap_ue_release_command) +/* RRC -> F1AP messages */ +MESSAGE_DEF(F1AP_DL_RRC_MESSAGE , MESSAGE_PRIORITY_MED, f1ap_dl_rrc_message_t , f1ap_downlink_rrc_message ) +//MESSAGE_DEF(F1AP_INITIAL_CONTEXT_SETUP_REQ , MESSAGE_PRIORITY_MED, f1ap_initial_context_setup_req_t , f1ap_initial_context_setup_req ) + -/* S1AP <-> RRC messages (can be initiated either by MME or eNB) */ -MESSAGE_DEF(S1AP_UE_CONTEXT_RELEASE_REQ , MESSAGE_PRIORITY_MED, s1ap_ue_release_req_t , s1ap_ue_release_req) diff --git a/openair2/COMMON/f1ap_messages_types.h b/openair2/COMMON/f1ap_messages_types.h index 4a5f492b0b..61854e2048 100644 --- a/openair2/COMMON/f1ap_messages_types.h +++ b/openair2/COMMON/f1ap_messages_types.h @@ -19,628 +19,187 @@ * contact@openairinterface.org */ -#ifndef S1AP_MESSAGES_TYPES_H_ -#define S1AP_MESSAGES_TYPES_H_ +#ifndef F1AP_MESSAGES_TYPES_H_ +#define F1AP_MESSAGES_TYPES_H_ //-------------------------------------------------------------------------------------------// // Defines to access message fields. -#define S1AP_REGISTER_ENB_REQ(mSGpTR) (mSGpTR)->ittiMsg.s1ap_register_enb_req - -#define S1AP_REGISTER_ENB_CNF(mSGpTR) (mSGpTR)->ittiMsg.s1ap_register_enb_cnf -#define S1AP_DEREGISTERED_ENB_IND(mSGpTR) (mSGpTR)->ittiMsg.s1ap_deregistered_enb_ind - -#define S1AP_NAS_FIRST_REQ(mSGpTR) (mSGpTR)->ittiMsg.s1ap_nas_first_req -#define S1AP_UPLINK_NAS(mSGpTR) (mSGpTR)->ittiMsg.s1ap_uplink_nas -#define S1AP_UE_CAPABILITIES_IND(mSGpTR) (mSGpTR)->ittiMsg.s1ap_ue_cap_info_ind -#define S1AP_INITIAL_CONTEXT_SETUP_RESP(mSGpTR) (mSGpTR)->ittiMsg.s1ap_initial_context_setup_resp -#define S1AP_INITIAL_CONTEXT_SETUP_FAIL(mSGpTR) (mSGpTR)->ittiMsg.s1ap_initial_context_setup_fail -#define S1AP_UE_CONTEXT_RELEASE_RESP(mSGpTR) (mSGpTR)->ittiMsg.s1ap_ue_release_resp -#define S1AP_NAS_NON_DELIVERY_IND(mSGpTR) (mSGpTR)->ittiMsg.s1ap_nas_non_delivery_ind -#define S1AP_UE_CTXT_MODIFICATION_RESP(mSGpTR) (mSGpTR)->ittiMsg.s1ap_ue_ctxt_modification_resp -#define S1AP_UE_CTXT_MODIFICATION_FAIL(mSGpTR) (mSGpTR)->ittiMsg.s1ap_ue_ctxt_modification_fail -#define S1AP_E_RAB_SETUP_RESP(mSGpTR) (mSGpTR)->ittiMsg.s1ap_e_rab_setup_resp -#define S1AP_E_RAB_SETUP_FAIL(mSGpTR) (mSGpTR)->ittiMsg.s1ap_e_rab_setup_req_fail -#define S1AP_E_RAB_MODIFY_RESP(mSGpTR) (mSGpTR)->ittiMsg.s1ap_e_rab_modify_resp - -#define S1AP_DOWNLINK_NAS(mSGpTR) (mSGpTR)->ittiMsg.s1ap_downlink_nas -#define S1AP_INITIAL_CONTEXT_SETUP_REQ(mSGpTR) (mSGpTR)->ittiMsg.s1ap_initial_context_setup_req -#define S1AP_UE_CTXT_MODIFICATION_REQ(mSGpTR) (mSGpTR)->ittiMsg.s1ap_ue_ctxt_modification_req -#define S1AP_UE_CONTEXT_RELEASE_COMMAND(mSGpTR) (mSGpTR)->ittiMsg.s1ap_ue_release_command -#define S1AP_UE_CONTEXT_RELEASE_COMPLETE(mSGpTR) (mSGpTR)->ittiMsg.s1ap_ue_release_complete -#define S1AP_E_RAB_SETUP_REQ(mSGpTR) (mSGpTR)->ittiMsg.s1ap_e_rab_setup_req -#define S1AP_E_RAB_MODIFY_REQ(mSGpTR) (mSGpTR)->ittiMsg.s1ap_e_rab_modify_req -#define S1AP_PAGING_IND(mSGpTR) (mSGpTR)->ittiMsg.s1ap_paging_ind - -#define S1AP_UE_CONTEXT_RELEASE_REQ(mSGpTR) (mSGpTR)->ittiMsg.s1ap_ue_release_req -#define S1AP_E_RAB_RELEASE_COMMAND(mSGpTR) (mSGpTR)->ittiMsg.s1ap_e_rab_release_command -#define S1AP_E_RAB_RELEASE_RESPONSE(mSGpTR) (mSGpTR)->ittiMsg.s1ap_e_rab_release_resp +#define F1AP_SETUP_REQ(mSGpTR) (mSGpTR)->ittiMsg.f1ap_setup_req +#define F1AP_SETUP_RESP(mSGpTR) (mSGpTR)->ittiMsg.f1ap_setup_resp +#define F1AP_SETUP_FAILURE(mSGpTR) (mSGpTR)->ittiMsg.f1ap_setup_failure -//-------------------------------------------------------------------------------------------// -/* Maximum number of e-rabs to be setup/deleted in a single message. - * Even if only one bearer will be modified by message. - */ -#define S1AP_MAX_E_RAB 11 +#define F1AP_INITIAL_UL_RRC_MESSAGE(mSGpTR) (mSGpTR)->ittiMsg.f1ap_initial_ul_rrc_message +#define F1AP_UL_RRC_MESSAGE(mSGpTR) (mSGpTR)->ittiMsg.f1ap_ul_rrc_message +#define F1AP_UE_CONTEXT_RELEASE_RESP(mSGpTR) (mSGpTR)->ittiMsg.f1ap_ue_context_release_resp +#define F1AP_UE_CONTEXT_MODIFICATION_RESP(mSGpTR) (mSGpTR)->ittiMsg.f1ap_ue_context_modification_resp +#define F1AP_UE_CONTEXT_MODIFICATION_FAIL(mSGpTR) (mSGpTR)->ittiMsg.f1ap_ue_context_modification_fail + +#define F1AP_DL_RRC_MESSAGE(mSGpTR) (mSGpTR)->ittiMsg.f1ap_dl_rrc_message +#define F1AP_UE_CONTEXT_RELEASE_REQ(mSGpTR) (mSGpTR)->ittiMsg.f1ap_ue_context_release_req +#define F1AP_UE_CONTEXT_MODIFICATION_REQ(mSGpTR) (mSGpTR)->ittiMsg.f1ap_ue_context_modification_req /* Length of the transport layer address string * 160 bits / 8 bits by char. */ -#define S1AP_TRANSPORT_LAYER_ADDRESS_SIZE (160 / 8) +#define F1AP_TRANSPORT_LAYER_ADDRESS_SIZE (160 / 8) -#define S1AP_MAX_NB_MME_IP_ADDRESS 10 -#define S1AP_IMSI_LENGTH 16 +#define F1AP_MAX_NB_CU_IP_ADDRESS 10 -/* Security key length used within eNB - * Even if only 16 bytes will be effectively used, - * the key length is 32 bytes (256 bits) - */ -#define SECURITY_KEY_LENGTH 32 -#ifndef OCP_FRAMEWORK -typedef enum cell_type_e { - CELL_MACRO_ENB, - CELL_HOME_ENB -} cell_type_t; - -typedef enum paging_drx_e { - PAGING_DRX_32 = 0x0, - PAGING_DRX_64 = 0x1, - PAGING_DRX_128 = 0x2, - PAGING_DRX_256 = 0x3 -} paging_drx_t; - -/* Lower value codepoint - * indicates higher priority. - */ -typedef enum paging_priority_s { - PAGING_PRIO_LEVEL1 = 0, - PAGING_PRIO_LEVEL2 = 1, - PAGING_PRIO_LEVEL3 = 2, - PAGING_PRIO_LEVEL4 = 3, - PAGING_PRIO_LEVEL5 = 4, - PAGING_PRIO_LEVEL6 = 5, - PAGING_PRIO_LEVEL7 = 6, - PAGING_PRIO_LEVEL8 = 7 -} paging_priority_t; - -typedef enum cn_domain_s { - CN_DOMAIN_PS = 1, - CN_DOMAIN_CS = 2 -} cn_domain_t; -#endif - -typedef struct net_ip_address_s { - unsigned ipv4:1; - unsigned ipv6:1; - char ipv4_address[16]; - char ipv6_address[46]; -} net_ip_address_t; - -typedef uint64_t bitrate_t; - -typedef struct ambr_s { - bitrate_t br_ul; - bitrate_t br_dl; -} ambr_t; - -#ifndef OCP_FRAMEWORK -typedef enum priority_level_s { - PRIORITY_LEVEL_SPARE = 0, - PRIORITY_LEVEL_HIGHEST = 1, - PRIORITY_LEVEL_LOWEST = 14, - PRIORITY_LEVEL_NO_PRIORITY = 15 -} priority_level_t; - -typedef enum pre_emp_capability_e { - PRE_EMPTION_CAPABILITY_ENABLED = 0, - PRE_EMPTION_CAPABILITY_DISABLED = 1, - PRE_EMPTION_CAPABILITY_MAX, -} pre_emp_capability_t; - -typedef enum pre_emp_vulnerability_e { - PRE_EMPTION_VULNERABILITY_ENABLED = 0, - PRE_EMPTION_VULNERABILITY_DISABLED = 1, - PRE_EMPTION_VULNERABILITY_MAX, -} pre_emp_vulnerability_t; -#endif - -typedef struct allocation_retention_priority_s { - priority_level_t priority_level; - pre_emp_capability_t pre_emp_capability; - pre_emp_vulnerability_t pre_emp_vulnerability; -} allocation_retention_priority_t; - -typedef struct security_capabilities_s { - uint16_t encryption_algorithms; - uint16_t integrity_algorithms; -} security_capabilities_t; - -/* Provides the establishment cause for the RRC connection request as provided - * by the upper layers. W.r.t. the cause value names: highPriorityAccess - * concerns AC11..AC15, ‘mt’ stands for ‘Mobile Terminating’ and ‘mo’ for - * 'Mobile Originating'. Defined in TS 36.331. - */ -typedef enum rrc_establishment_cause_e { - RRC_CAUSE_EMERGENCY = 0x0, - RRC_CAUSE_HIGH_PRIO_ACCESS = 0x1, - RRC_CAUSE_MT_ACCESS = 0x2, - RRC_CAUSE_MO_SIGNALLING = 0x3, - RRC_CAUSE_MO_DATA = 0x4, -#if defined(UPDATE_RELEASE_10) - RRC_CAUSE_DELAY_TOLERANT_ACCESS = 0x5, -#endif - RRC_CAUSE_LAST -} rrc_establishment_cause_t; - -typedef struct s1ap_gummei_s { - uint16_t mcc; - uint16_t mnc; - uint8_t mnc_len; - uint8_t mme_code; - uint16_t mme_group_id; -} s1ap_gummei_t; - -typedef struct s1ap_imsi_s { - uint8_t buffer[S1AP_IMSI_LENGTH]; - uint8_t length; -} s1ap_imsi_t; - -typedef struct s_tmsi_s { - uint8_t mme_code; - uint32_t m_tmsi; -} s_tmsi_t; - -typedef enum ue_paging_identity_presenceMask_e { - UE_PAGING_IDENTITY_NONE = 0, - UE_PAGING_IDENTITY_imsi = (1 << 1), - UE_PAGING_IDENTITY_s_tmsi = (1 << 2), -} ue_paging_identity_presenceMask_t; - -typedef struct ue_paging_identity_s { - ue_paging_identity_presenceMask_t presenceMask; - union { - s1ap_imsi_t imsi; - s_tmsi_t s_tmsi; - } choice; -} ue_paging_identity_t; - -typedef enum ue_identities_presenceMask_e { - UE_IDENTITIES_NONE = 0, - UE_IDENTITIES_s_tmsi = 1 << 1, - UE_IDENTITIES_gummei = 1 << 2, -} ue_identities_presenceMask_t; - -typedef struct ue_identity_s { - ue_identities_presenceMask_t presenceMask; - s_tmsi_t s_tmsi; - s1ap_gummei_t gummei; -} ue_identity_t; - -typedef struct nas_pdu_s { - /* Octet string data */ - uint8_t *buffer; - /* Length of the octet string */ - uint32_t length; -} nas_pdu_t, ue_radio_cap_t; - -typedef struct transport_layer_addr_s { - /* Length of the transport layer address buffer in bits. S1AP layer received a - * bit string<1..160> containing one of the following addresses: ipv4, - * ipv6, or ipv4 and ipv6. The layer doesn't interpret the buffer but - * silently forward it to S1-U. - */ - uint8_t length; - uint8_t buffer[20]; // in network byte order -} transport_layer_addr_t; - -#define TRANSPORT_LAYER_ADDR_COPY(dEST,sOURCE) \ - do { \ - AssertFatal(sOURCE.len <= 20); \ - memcpy(dEST.buffer, sOURCE.buffer, sOURCE.len); \ - dEST.length = sOURCE.length; \ - } while (0) - -typedef struct e_rab_level_qos_parameter_s { - uint8_t qci; - - allocation_retention_priority_t allocation_retention_priority; -} e_rab_level_qos_parameter_t; - -typedef struct e_rab_s { - /* Unique e_rab_id for the UE. */ - uint8_t e_rab_id; - /* Quality of service for this e_rab */ - e_rab_level_qos_parameter_t qos; - /* The NAS PDU should be forwarded by the RRC layer to the NAS layer */ - nas_pdu_t nas_pdu; - /* The transport layer address for the IP packets */ - transport_layer_addr_t sgw_addr; - /* S-GW Tunnel endpoint identifier */ - uint32_t gtp_teid; -} e_rab_t; - -typedef struct e_rab_setup_s { - /* Unique e_rab_id for the UE. */ - uint8_t e_rab_id; - - /* The transport layer address for the IP packets */ - transport_layer_addr_t eNB_addr; - - /* S-GW Tunnel endpoint identifier */ - uint32_t gtp_teid; -} e_rab_setup_t; - -typedef struct e_rab_modify_s { - /* Unique e_rab_id for the UE. */ - uint8_t e_rab_id; -} e_rab_modify_t; - -typedef enum S1ap_Cause_e { - S1AP_CAUSE_NOTHING, /* No components present */ - S1AP_CAUSE_RADIO_NETWORK, - S1AP_CAUSE_TRANSPORT, - S1AP_CAUSE_NAS, - S1AP_CAUSE_PROTOCOL, - S1AP_CAUSE_MISC, - /* Extensions may appear below */ - -} s1ap_Cause_t; - -typedef struct e_rab_failed_s { - /* Unique e_rab_id for the UE. */ - uint8_t e_rab_id; - /* Cause of the failure */ - // cause_t cause; - s1ap_Cause_t cause; - uint8_t cause_value; -} e_rab_failed_t; - -typedef enum s1ap_ue_ctxt_modification_present_s { - S1AP_UE_CONTEXT_MODIFICATION_SECURITY_KEY = (1 << 0), - S1AP_UE_CONTEXT_MODIFICATION_UE_AMBR = (1 << 1), - S1AP_UE_CONTEXT_MODIFICATION_UE_SECU_CAP = (1 << 2), -} s1ap_ue_ctxt_modification_present_t; - -typedef enum s1ap_paging_ind_present_s { - S1AP_PAGING_IND_PAGING_DRX = (1 << 0), - S1AP_PAGING_IND_PAGING_PRIORITY = (1 << 1), -} s1ap_paging_ind_present_t; +// Note this should be 512 from maxval in 38.473 +#define F1AP_MAX_NB_CELLS 2 -//-------------------------------------------------------------------------------------------// -// eNB application layer -> S1AP messages -typedef struct s1ap_register_enb_req_s { - /* Unique eNB_id to identify the eNB within EPC. - * For macro eNB ids this field should be 20 bits long. - * For home eNB ids this field should be 28 bits long. - */ - uint32_t eNB_id; - /* The type of the cell */ - enum cell_type_e cell_type; +typedef struct f1ap_setup_req_s { - /* Optional name for the cell - * NOTE: the name can be NULL (i.e no name) and will be cropped to 150 - * characters. - */ - char *eNB_name; - - /* Tracking area code */ - uint16_t tac; - - /* Mobile Country Code - * Mobile Network Code - */ - uint16_t mcc; - uint16_t mnc; - uint8_t mnc_digit_length; - - /* Default Paging DRX of the eNB as defined in TS 36.304 */ - paging_drx_t default_drx; + // Midhaul networking parameters /* The eNB IP address to bind */ - net_ip_address_t enb_ip_address; - - /* Nb of MME to connect to */ - uint8_t nb_mme; - /* List of MME to connect to */ - net_ip_address_t mme_ip_address[S1AP_MAX_NB_MME_IP_ADDRESS]; + char CU_ipv4_address[16]; + int CU_port; /* Number of SCTP streams used for a mme association */ uint16_t sctp_in_streams; uint16_t sctp_out_streams; -} s1ap_register_enb_req_t; -//-------------------------------------------------------------------------------------------// -// S1AP -> eNB application layer messages -typedef struct s1ap_register_enb_cnf_s { - /* Nb of MME connected */ - uint8_t nb_mme; -} s1ap_register_enb_cnf_t; - -typedef struct s1ap_deregistered_enb_ind_s { - /* Nb of MME connected */ - uint8_t nb_mme; -} s1ap_deregistered_enb_ind_t; - -//-------------------------------------------------------------------------------------------// -// RRC -> S1AP messages - -/* The NAS First Req is the first message exchanged between RRC and S1AP - * for an UE. - * The rnti uniquely identifies an UE within a cell. Later the enb_ue_s1ap_id - * will be the unique identifier used between RRC and S1AP. - */ -typedef struct s1ap_nas_first_req_s { - /* UE id for initial connection to S1AP */ - uint16_t ue_initial_id; + // F1_Setup_Req payload + uint32_t gNB_DU_id; + char *gNB_DU_name; - /* Establishment cause as sent by UE */ - rrc_establishment_cause_t establishment_cause; + /// number of DU cells available + uint16_t num_cells_available; //0< num_cells_to_available <= 512; - /* NAS PDU */ - nas_pdu_t nas_pdu; + // Served Cell Information + /* Tracking area code */ + uint16_t tac[F1AP_MAX_NB_CELLS]; - /* If this flag is set S1AP layer is expecting the GUMMEI. If = 0, - * the temporary s-tmsi is used. + /* Mobile Country Codes + * Mobile Network Codes */ - ue_identity_t ue_identity; -} s1ap_nas_first_req_t; - -typedef struct s1ap_uplink_nas_s { - /* Unique UE identifier within an eNB */ - unsigned eNB_ue_s1ap_id:24; - - /* NAS pdu */ - nas_pdu_t nas_pdu; -} s1ap_uplink_nas_t; - -typedef struct s1ap_ue_cap_info_ind_s { - unsigned eNB_ue_s1ap_id:24; - ue_radio_cap_t ue_radio_cap; -} s1ap_ue_cap_info_ind_t; - -typedef struct s1ap_initial_context_setup_resp_s { - unsigned eNB_ue_s1ap_id:24; - - /* Number of e_rab setup-ed in the list */ - uint8_t nb_of_e_rabs; - /* list of e_rab setup-ed by RRC layers */ - e_rab_setup_t e_rabs[S1AP_MAX_E_RAB]; - - /* Number of e_rab failed to be setup in list */ - uint8_t nb_of_e_rabs_failed; - /* list of e_rabs that failed to be setup */ - e_rab_failed_t e_rabs_failed[S1AP_MAX_E_RAB]; -} s1ap_initial_context_setup_resp_t; - -typedef struct s1ap_initial_context_setup_fail_s { - unsigned eNB_ue_s1ap_id:24; - - /* TODO add cause */ -} s1ap_initial_context_setup_fail_t, s1ap_ue_ctxt_modification_fail_t, s1ap_e_rab_setup_req_fail_t; - -typedef struct s1ap_nas_non_delivery_ind_s { - unsigned eNB_ue_s1ap_id:24; - nas_pdu_t nas_pdu; - /* TODO: add cause */ -} s1ap_nas_non_delivery_ind_t; - -typedef struct s1ap_ue_ctxt_modification_req_s { - unsigned eNB_ue_s1ap_id:24; - - /* Bit-mask of possible present parameters */ - s1ap_ue_ctxt_modification_present_t present; - - /* Following fields are optionnaly present */ - - /* Security key */ - uint8_t security_key[SECURITY_KEY_LENGTH]; - - /* UE aggregate maximum bitrate */ - ambr_t ue_ambr; - - /* Security capabilities */ - security_capabilities_t security_capabilities; -} s1ap_ue_ctxt_modification_req_t; - -typedef struct s1ap_ue_ctxt_modification_resp_s { - unsigned eNB_ue_s1ap_id:24; -} s1ap_ue_ctxt_modification_resp_t; - -typedef struct s1ap_ue_release_complete_s { - - unsigned eNB_ue_s1ap_id:24; - -} s1ap_ue_release_complete_t; - -//-------------------------------------------------------------------------------------------// -// S1AP -> RRC messages -typedef struct s1ap_downlink_nas_s { - /* UE id for initial connection to S1AP */ - uint16_t ue_initial_id; - - /* Unique UE identifier within an eNB */ - unsigned eNB_ue_s1ap_id:24; - - /* NAS pdu */ - nas_pdu_t nas_pdu; -} s1ap_downlink_nas_t; - - -typedef struct s1ap_initial_context_setup_req_s { - /* UE id for initial connection to S1AP */ - uint16_t ue_initial_id; - - /* eNB ue s1ap id as initialized by S1AP layer */ - unsigned eNB_ue_s1ap_id:24; + uint16_t mcc[F1AP_MAX_NB_CELLS]; + uint16_t mnc[F1AP_MAX_NB_CELLS]; + uint8_t mnc_digit_length[F1AP_MAX_NB_CELLS]; + + // NR Physical Cell Ids + uint16_t nr_pci[F1AP_MAX_NB_CELLS]; + // NR Cell Ids + uint8_t nr_cellid[F1AP_MAX_NB_CELLS]; + // Number of slide support items (max 16, could be increased to as much as 1024) + uint16_t num_ssi[F1AP_MAX_NB_CELLS]; + uint8_t sst[F1AP_MAX_NB_CELLS][16]; + uint8_t sd[F1AP_MAX_NB_CELLS][16]; - /* UE aggregate maximum bitrate */ - ambr_t ue_ambr; - - /* Security algorithms */ - security_capabilities_t security_capabilities; - - /* Security key */ - uint8_t security_key[SECURITY_KEY_LENGTH]; - - /* Number of e_rab to be setup in the list */ - uint8_t nb_of_e_rabs; - /* list of e_rab to be setup by RRC layers */ - e_rab_t e_rab_param[S1AP_MAX_E_RAB]; -} s1ap_initial_context_setup_req_t; - -typedef struct tai_plmn_identity_s { + union { + struct { + uint32_t ul_nr_arfcn; + uint8_t ul_scs; + uint8_t ul_nrb; + + uint32_t dl_nr_arfcn; + uint8_t dl_scs; + uint8_t dl_nrb; + + uint32_t sul_active; + uint32_t sul_nr_arfcn; + uint8_t sul_scs; + uint8_t sul_nrb; + + uint8_t num_frequency_bands; + uint16_t nr_band[32]; + uint8_t num_sul_frequency_bands; + uint16_t nr_sul_band[32]; + } fdd; + struct { + + uint32_t nr_arfcn; + uint8_t scs; + uint8_t nrb; + + uint32_t sul_active; + uint32_t sul_nr_arfcn; + uint8_t sul_scs; + uint8_t sul_nrb; + + uint8_t num_frequency_bands; + uint16_t nr_band[32]; + uint8_t num_sul_frequency_bands; + uint16_t nr_sul_band[32]; + + } tdd; + } nr_mode_info[F1AP_MAX_NB_CELLS]; + + char *measurement_timing_information[F1AP_MAX_NB_CELLS]; + uint8_t ranac[F1AP_MAX_NB_CELLS]; + + // System Information + uint8_t *mib[F1AP_MAX_NB_CELLS]; + uint8_t *sib1[F1AP_MAX_NB_CELLS]; + + + +} f1ap_setup_req_t; + +typedef struct f1ap_setup_resp_s { + /// string holding gNB_CU_name + char *gNB_CU_name; + /// number of DU cells to activate + uint16_t num_cells_to_activate; //0< num_cells_to_activate <= 512; + /// mcc of DU cells + uint16_t mcc[F1AP_MAX_NB_CELLS]; + /// mnc of DU cells + uint16_t mnc[F1AP_MAX_NB_CELLS]; + /// mnc digit length of DU cells + uint8_t mnc_digit_length[F1AP_MAX_NB_CELLS]; + /// NRPCI + uint16_t nrpci[F1AP_MAX_NB_CELLS]; + /// num SI messages per DU cell + uint8_t num_SI[F1AP_MAX_NB_CELLS]; + /// SI message containers (up to 21 messages per cell) + uint8_t *SI_container[F1AP_MAX_NB_CELLS][21]; +} f1ap_setup_resp_t; + +typedef struct f1ap_setup_failure_s { + uint16_t cause; + uint16_t time_to_wait; + uint16_t criticality_diagnostics; +} f1ap_setup_failure_t; + +typedef struct f1ap_dl_rrc_message_s { + + uint32_t gNB_CU_ue_id; + uint32_t gNB_DU_ue_id; + uint32_t old_gNB_DU_ue_id; + uint8_t srb_id; + uint8_t execute_duplication; + uint8_t *rrc_container; + union { + // both map 0..255 => 1..256 + uint8_t en_dc; + uint8_t ngran; + } RAT_frequency_priority_information; +} f1ap_dl_rrc_message_t; + +typedef struct f1ap_initial_ul_rrc_message_s { + uint32_t gNB_DU_ue_id; + /// mcc of DU cell uint16_t mcc; + /// mnc of DU cell uint16_t mnc; - uint8_t mnc_digit_length; -} plmn_identity_t; - -typedef struct s1ap_paging_ind_s { - /* UE identity index value. - * Specified in 3GPP TS 36.304 - */ - unsigned ue_index_value:10; - - /* UE paging identity */ - ue_paging_identity_t ue_paging_identity; - - /* Indicates origin of paging */ - cn_domain_t cn_domain; - - /* PLMN_identity in TAI of Paging*/ - plmn_identity_t plmn_identity[256]; - - /* TAC in TAIList of Paging*/ - int16_t tac[256]; - - /* size of TAIList*/ - int16_t tai_size; - - /* Optional fields */ - paging_drx_t paging_drx; - - paging_priority_t paging_priority; -} s1ap_paging_ind_t; - -typedef struct s1ap_e_rab_setup_req_s { - /* UE id for initial connection to S1AP */ - uint16_t ue_initial_id; - - /* MME UE id */ - uint16_t mme_ue_s1ap_id; - - /* eNB ue s1ap id as initialized by S1AP layer */ - unsigned eNB_ue_s1ap_id:24; - - /* Number of e_rab to be setup in the list */ - uint8_t nb_e_rabs_tosetup; - - /* E RAB setup request */ - e_rab_t e_rab_setup_params[S1AP_MAX_E_RAB]; - -} s1ap_e_rab_setup_req_t; - -typedef struct s1ap_e_rab_setup_resp_s { - unsigned eNB_ue_s1ap_id:24; - - /* Number of e_rab setup-ed in the list */ - uint8_t nb_of_e_rabs; - /* list of e_rab setup-ed by RRC layers */ - e_rab_setup_t e_rabs[S1AP_MAX_E_RAB]; - - /* Number of e_rab failed to be setup in list */ - uint8_t nb_of_e_rabs_failed; - /* list of e_rabs that failed to be setup */ - e_rab_failed_t e_rabs_failed[S1AP_MAX_E_RAB]; -} s1ap_e_rab_setup_resp_t; - - -// S1AP --> RRC messages -typedef struct s1ap_ue_release_command_s { - - unsigned eNB_ue_s1ap_id:24; - -} s1ap_ue_release_command_t; - - -//-------------------------------------------------------------------------------------------// -// S1AP <-- RRC messages -typedef struct s1ap_ue_release_req_s { - unsigned eNB_ue_s1ap_id:24; - s1ap_Cause_t cause; - long cause_value; -} s1ap_ue_release_req_t, s1ap_ue_release_resp_t; - -typedef struct s1ap_e_rab_modify_req_s { - /* UE id for initial connection to S1AP */ - uint16_t ue_initial_id; - - /* MME UE id */ - uint16_t mme_ue_s1ap_id; - - /* eNB ue s1ap id as initialized by S1AP layer */ - unsigned eNB_ue_s1ap_id:24; - - /* Number of e_rab to be modify in the list */ - uint8_t nb_e_rabs_tomodify; - - /* E RAB modify request */ - e_rab_t e_rab_modify_params[S1AP_MAX_E_RAB]; -} s1ap_e_rab_modify_req_t; - -typedef struct s1ap_e_rab_modify_resp_s { - unsigned eNB_ue_s1ap_id:24; - - /* Number of e_rab modify-ed in the list */ - uint8_t nb_of_e_rabs; - /* list of e_rab modify-ed by RRC layers */ - e_rab_modify_t e_rabs[S1AP_MAX_E_RAB]; - - /* Number of e_rab failed to be modify in list */ - uint8_t nb_of_e_rabs_failed; - /* list of e_rabs that failed to be modify */ - e_rab_failed_t e_rabs_failed[S1AP_MAX_E_RAB]; -} s1ap_e_rab_modify_resp_t; - -typedef struct e_rab_release_s { - /* Unique e_rab_id for the UE. */ - uint8_t e_rab_id; -} e_rab_release_t; - -typedef struct s1ap_e_rab_release_command_s { - /* MME UE id */ - uint16_t mme_ue_s1ap_id; - - /* eNB ue s1ap id as initialized by S1AP layer */ - unsigned eNB_ue_s1ap_id:24; - - /* The NAS PDU should be forwarded by the RRC layer to the NAS layer */ - nas_pdu_t nas_pdu; - - /* Number of e_rab to be released in the list */ - uint8_t nb_e_rabs_torelease; - - /* E RAB release command */ - e_rab_release_t e_rab_release_params[S1AP_MAX_E_RAB]; - -} s1ap_e_rab_release_command_t; - -typedef struct s1ap_e_rab_release_resp_s { - /* MME UE id */ - uint16_t mme_ue_s1ap_id; - - /* eNB ue s1ap id as initialized by S1AP layer */ - unsigned eNB_ue_s1ap_id:24; - - /* Number of e_rab released in the list */ - uint8_t nb_of_e_rabs_released; - - /* list of e_rabs released */ - e_rab_release_t e_rab_release[S1AP_MAX_E_RAB]; - - /* Number of e_rab failed to be released in list */ - uint8_t nb_of_e_rabs_failed; - /* list of e_rabs that failed to be released */ - e_rab_failed_t e_rabs_failed[S1AP_MAX_E_RAB]; - -} s1ap_e_rab_release_resp_t; - -#endif /* S1AP_MESSAGES_TYPES_H_ */ + /// mnc digit length of DU cells + uint8_t mnc_digit_length; + uint16_t crnti; + uint8_t *rrc_container; + uint8_t *du2cu_rrc_container; +} f1ap_initial_ul_rrc_message_t; + +typedef struct f1ap_ul_rrc_message_s { + uint32_t gNB_CU_ue_id; + uint32_t gNB_DU_ue_id; + uint8_t srb_id; + uint8_t *rrc_container; +} f1ap_ul_rrc_message_t; + +/*typedef struct f1ap_ue_context_setup_req_s { + + } f1ap_ue_context_setup_req_t;*/ + +#endif /* F1AP_MESSAGES_TYPES_H_ */ diff --git a/openair2/COMMON/mac_rrc_primitives.h b/openair2/COMMON/mac_rrc_primitives.h index d902de15d9..f175f9ddf8 100644 --- a/openair2/COMMON/mac_rrc_primitives.h +++ b/openair2/COMMON/mac_rrc_primitives.h @@ -390,7 +390,7 @@ typedef struct { -#define IDLE 0 +//#define IDLE 0 #define NEED_RADIO_CONFIG 3 #define RADIO_CONFIG_TX 2 #define RADIO_CONFIG_OK 1 diff --git a/openair2/COMMON/messages_def.h b/openair2/COMMON/messages_def.h index 2434d15776..be7c2afabd 100644 --- a/openair2/COMMON/messages_def.h +++ b/openair2/COMMON/messages_def.h @@ -34,6 +34,7 @@ #include "ral_messages_def.h" #endif #include "s1ap_messages_def.h" +#include "f1ap_messages_def.h" #include "x2ap_messages_def.h" #include "sctp_messages_def.h" #include "udp_messages_def.h" diff --git a/openair2/COMMON/messages_types.h b/openair2/COMMON/messages_types.h index 5e5fdadd2a..f5ca697f50 100644 --- a/openair2/COMMON/messages_types.h +++ b/openair2/COMMON/messages_types.h @@ -40,8 +40,9 @@ #include "nas_messages_types.h" #if ENABLE_RAL #include "ral_messages_types.h" -#endif +#endif #include "s1ap_messages_types.h" +#include "f1ap_messages_types.h" #include "x2ap_messages_types.h" #include "sctp_messages_types.h" #include "udp_messages_types.h" diff --git a/openair2/COMMON/rrc_messages_types.h b/openair2/COMMON/rrc_messages_types.h index 4a0137d4b6..62bc535e70 100644 --- a/openair2/COMMON/rrc_messages_types.h +++ b/openair2/COMMON/rrc_messages_types.h @@ -32,6 +32,7 @@ #include "as_message.h" #include "rrc_types.h" #include "s1ap_messages_types.h" +#include "f1ap_messages_types.h" #ifdef CMAKER #include "SystemInformationBlockType2.h" #else diff --git a/openair2/ENB_APP/enb_app.c b/openair2/ENB_APP/enb_app.c index 379ef311c7..0008361d93 100644 --- a/openair2/ENB_APP/enb_app.c +++ b/openair2/ENB_APP/enb_app.c @@ -113,7 +113,7 @@ static void configure_rrc(uint32_t enb_id) /*------------------------------------------------------------------------------*/ # if defined(ENABLE_USE_MME) -static uint32_t eNB_app_register(uint32_t enb_id_start, uint32_t enb_id_end)//, const Enb_properties_array_t *enb_properties) +static uint32_t eNB_app_register(ngran_node_t node_type,uint32_t enb_id_start, uint32_t enb_id_end)//, const Enb_properties_array_t *enb_properties) { uint32_t enb_id; MessageDef *msg_p; @@ -121,20 +121,38 @@ static uint32_t eNB_app_register(uint32_t enb_id_start, uint32_t enb_id_end)//, for (enb_id = enb_id_start; (enb_id < enb_id_end) ; enb_id++) { { - /* note: there is an implicit relationship between the data structure and the message name */ - msg_p = itti_alloc_new_message (TASK_ENB_APP, S1AP_REGISTER_ENB_REQ); + if (node_type == ngran_eNB_DU) { // F1AP registration - RCconfig_S1(msg_p, enb_id); + // configure F1AP here for F1C + LOG_I(ENB_APP,"ngran_eNB_DU: Allocating ITTI message for F1AP_SETUP_REQ\n"); + msg_p = itti_alloc_new_message (TASK_ENB_APP, F1AP_SETUP_REQ); + RCconfig_DU_F1(msg_p, enb_id); - if (enb_id == 0) RCconfig_gtpu(); - - LOG_I(ENB_APP,"default drx %d\n",((S1AP_REGISTER_ENB_REQ(msg_p)).default_drx)); - - LOG_I(ENB_APP,"[eNB %d] eNB_app_register for instance %d\n", enb_id, ENB_MODULE_ID_TO_INSTANCE(enb_id)); + LOG_I(ENB_APP,"[eNB %d] eNB_app_register via F1AP for instance %d\n", enb_id, ENB_MODULE_ID_TO_INSTANCE(enb_id)); + AssertFatal(1==0,"No ITTI ask for F1AP yet\n"); + // itti_send_msg_to_task (TASK_F1AP, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p); + // configure GTPu here for F1U + } + else { // S1AP registration + /* note: there is an implicit relationship between the data structure and the message name */ + msg_p = itti_alloc_new_message (TASK_ENB_APP, S1AP_REGISTER_ENB_REQ); + + RCconfig_S1(msg_p, enb_id); + + if (node_type == ngran_eNB_CU || node_type == ngran_ng_eNB_CU) RCconfig_CU_F1(enb_id); + + if (enb_id == 0) RCconfig_gtpu(); + + LOG_I(ENB_APP,"default drx %d\n",((S1AP_REGISTER_ENB_REQ(msg_p)).default_drx)); + + LOG_I(ENB_APP,"[eNB %d] eNB_app_register via S1AP for instance %d\n", enb_id, ENB_MODULE_ID_TO_INSTANCE(enb_id)); + itti_send_msg_to_task (TASK_S1AP, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p); + } - itti_send_msg_to_task (TASK_S1AP, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p); + register_enb_pending++; + } } @@ -161,6 +179,9 @@ void *eNB_app_task(void *args_p) int result; /* for no gcc warnings */ (void)instance; + int mac_has_f1[MAX_MAC_INST]; + + memset(mac_has_f1,0,MAX_MAC_INST*sizeof(int)); itti_mark_task_ready (TASK_ENB_APP); @@ -168,12 +189,15 @@ void *eNB_app_task(void *args_p) RCconfig_L1(); - RCconfig_macrlc(); + RCconfig_macrlc(mac_has_f1); + + LOG_I(PHY, "%s() RC.nb_L1_inst:%d\n", __FUNCTION__, RC.nb_macrlc_inst); LOG_I(PHY, "%s() RC.nb_L1_inst:%d\n", __FUNCTION__, RC.nb_L1_inst); if (RC.nb_L1_inst>0) AssertFatal(l1_north_init_eNB()==0,"could not initialize L1 north interface\n"); + AssertFatal (enb_nb <= RC.nb_inst, "Number of eNB is greater than eNB defined in configuration file (%d/%d)!", enb_nb, RC.nb_inst); @@ -183,17 +207,26 @@ void *eNB_app_task(void *args_p) RC.rrc = (eNB_RRC_INST **)malloc(RC.nb_inst*sizeof(eNB_RRC_INST *)); LOG_I(PHY, "%s() RC.nb_inst:%d RC.rrc:%p\n", __FUNCTION__, RC.nb_inst, RC.rrc); + if (RC.nb_macrlc_inst>0) AssertFatal(RC.nb_macrlc_inst == enb_id_end-enb_id_start, + "Number of MACRLC instances %d != number of RRC instances %d\n", + RC.nb_macrlc_inst,enb_id_end-enb_id_start); for (enb_id = enb_id_start; (enb_id < enb_id_end) ; enb_id++) { RC.rrc[enb_id] = (eNB_RRC_INST*)malloc(sizeof(eNB_RRC_INST)); LOG_I(PHY, "%s() Creating RRC instance RC.rrc[%d]:%p (%d of %d)\n", __FUNCTION__, enb_id, RC.rrc[enb_id], enb_id+1, enb_id_end); memset((void *)RC.rrc[enb_id],0,sizeof(eNB_RRC_INST)); configure_rrc(enb_id); + + if (RC.nb_macrlc_inst >0 && mac_has_f1[enb_id]==1) RC.rrc[enb_id]->node_type = ngran_eNB_DU; + + pdcp_layer_init(); } + # if defined(ENABLE_USE_MME) /* Try to register each eNB */ registered_enb = 0; - register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p); + // This assumes that node_type of all RRC instances is the same + register_enb_pending = eNB_app_register (RC.rrc[0]->node_type,enb_id_start, enb_id_end);//, enb_properties_p); # else /* Start L2L1 task */ msg_p = itti_alloc_new_message(TASK_ENB_APP, INITIALIZE_MESSAGE); @@ -251,7 +284,7 @@ void *eNB_app_task(void *args_p) sleep(ENB_REGISTER_RETRY_DELAY); /* Restart the registration process */ registered_enb = 0; - register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p); + register_enb_pending = eNB_app_register (RC.rrc[0]->node_type,enb_id_start, enb_id_end);//, enb_properties_p); } } } @@ -271,7 +304,7 @@ void *eNB_app_task(void *args_p) if (TIMER_HAS_EXPIRED (msg_p).timer_id == enb_register_retry_timer_id) { /* Restart the registration process */ registered_enb = 0; - register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p); + register_enb_pending = eNB_app_register (RC.rrc[0]->node_type,enb_id_start, enb_id_end);//, enb_properties_p); } break; diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index b24c61df94..9cbb6cc9c8 100644 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -42,6 +42,7 @@ # include "sctp_eNB_task.h" # endif #endif +#include "common/ran_context.h" #include "sctp_default_values.h" #include "SystemInformationBlockType2.h" #include "LAYER2/MAC/mac_extern.h" @@ -329,21 +330,24 @@ void RCconfig_L1(void) { } } -void RCconfig_macrlc() { - int j; +void RCconfig_macrlc(int *mac_has_f1) { + int j; paramdef_t MacRLC_Params[] = MACRLCPARAMS_DESC; paramlist_def_t MacRLC_ParamList = {CONFIG_STRING_MACRLC_LIST,NULL,0}; config_getlist( &MacRLC_ParamList,MacRLC_Params,sizeof(MacRLC_Params)/sizeof(paramdef_t), NULL); - + if ( MacRLC_ParamList.numelt > 0) { + RC.nb_macrlc_inst=MacRLC_ParamList.numelt; mac_top_init_eNB(); RC.nb_mac_CC = (int*)malloc(RC.nb_macrlc_inst*sizeof(int)); + printf("Configuring %d MACRLC entities\n",RC.nb_macrlc_inst); + for (j=0;j<RC.nb_macrlc_inst;j++) { RC.mac[j]->puSch10xSnr = *(MacRLC_ParamList.paramarray[j][MACRLC_PUSCH10xSNR_IDX ].iptr); RC.mac[j]->puCch10xSnr = *(MacRLC_ParamList.paramarray[j][MACRLC_PUCCH10xSNR_IDX ].iptr); @@ -353,8 +357,9 @@ void RCconfig_macrlc() { if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "local_RRC") == 0) { // check number of instances is same as RRC/PDCP - - } else if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "cudu") == 0) { + printf("Configuring local RRC for MACRLC\n"); + } else if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "f1") == 0) { + printf("Configuring F1 interfaces for MACRLC\n"); RC.mac[j]->eth_params_n.local_if_name = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_IF_NAME_IDX].strptr)); RC.mac[j]->eth_params_n.my_addr = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_ADDRESS_IDX].strptr)); RC.mac[j]->eth_params_n.remote_addr = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_N_ADDRESS_IDX].strptr)); @@ -363,6 +368,7 @@ void RCconfig_macrlc() { RC.mac[j]->eth_params_n.my_portd = *(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_PORTD_IDX].iptr); RC.mac[j]->eth_params_n.remote_portd = *(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_N_PORTD_IDX].iptr);; RC.mac[j]->eth_params_n.transp_preference = ETH_UDP_MODE; + mac_has_f1[j] = 1; } else { // other midhaul AssertFatal(1==0,"MACRLC %d: %s unknown northbound midhaul\n",j, *(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr)); } @@ -399,10 +405,10 @@ void RCconfig_macrlc() { printf("sched mode = default %d [%s]\n",global_scheduler_mode,*(MacRLC_ParamList.paramarray[j][MACRLC_SCHED_MODE_IDX].strptr)); } }// j=0..num_inst - } else {// MacRLC_ParamList.numelt > 0 + }/* else {// MacRLC_ParamList.numelt > 0 AssertFatal (0, "No " CONFIG_STRING_MACRLC_LIST " configuration found"); - } + }*/ } @@ -713,6 +719,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { paramdef_t SRB1Params[] = SRB1PARAMS_DESC; + /* map parameter checking array instances to parameter definition array instances */ for (int I=0; I< ( sizeof(CCsParams)/ sizeof(paramdef_t) ) ; I++) { CCsParams[I].chkPptr = &(config_check_CCparams[I]); @@ -768,39 +775,47 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { } - printf("RRC %d: Southbound Transport %s\n",i,*(ENBParamList.paramarray[i][ENB_TRANSPORT_S_PREFERENCE_IDX].strptr)); + LOG_I(RRC,"Instance %d: Southbound Transport %s\n",i,*(ENBParamList.paramarray[i][ENB_TRANSPORT_S_PREFERENCE_IDX].strptr)); if (strcmp(*(ENBParamList.paramarray[i][ENB_TRANSPORT_S_PREFERENCE_IDX].strptr), "local_mac") == 0) { - - + rrc->node_type = ngran_eNB; } - else if (strcmp(*(ENBParamList.paramarray[i][ENB_TRANSPORT_S_PREFERENCE_IDX].strptr), "cudu") == 0) { + else if (strcmp(*(ENBParamList.paramarray[i][ENB_TRANSPORT_S_PREFERENCE_IDX].strptr), "f1") == 0) { rrc->eth_params_s.local_if_name = strdup(*(ENBParamList.paramarray[i][ENB_LOCAL_S_IF_NAME_IDX].strptr)); + LOG_I(RRC,"Configuring CU-DU interfaces for MACRLC on %s\n",rrc->eth_params_s.local_if_name); rrc->eth_params_s.my_addr = strdup(*(ENBParamList.paramarray[i][ENB_LOCAL_S_ADDRESS_IDX].strptr)); + LOG_I(RRC,"local address: %s\n",rrc->eth_params_s.my_addr); rrc->eth_params_s.remote_addr = strdup(*(ENBParamList.paramarray[i][ENB_REMOTE_S_ADDRESS_IDX].strptr)); + LOG_I(RRC,"remote address: %s\n",rrc->eth_params_s.remote_addr); rrc->eth_params_s.my_portc = *(ENBParamList.paramarray[i][ENB_LOCAL_S_PORTC_IDX].uptr); + LOG_I(RRC,"local port (F1AP) %d\n",rrc->eth_params_s.my_portc); rrc->eth_params_s.remote_portc = *(ENBParamList.paramarray[i][ENB_REMOTE_S_PORTC_IDX].uptr); + LOG_I(RRC,"remote port (F1AP) %d\n",rrc->eth_params_s.remote_portc); rrc->eth_params_s.my_portd = *(ENBParamList.paramarray[i][ENB_LOCAL_S_PORTD_IDX].uptr); + LOG_I(RRC,"local port (F1U) %d\n",rrc->eth_params_s.my_portd); rrc->eth_params_s.remote_portd = *(ENBParamList.paramarray[i][ENB_REMOTE_S_PORTD_IDX].uptr); + LOG_I(RRC,"remote port (F1U) %d\n",rrc->eth_params_s.remote_portd); rrc->eth_params_s.transp_preference = ETH_UDP_MODE; + rrc->node_type = ngran_eNB_CU; } - else { // other midhaul + else { // no F1 + // set to ngran_eNB for now, it will get set to ngran_DU if macrlc entity which uses F1 is present + rrc->node_type = ngran_eNB; } // search if in active list - - - - - + LOG_I(RRC,"RRC instances %d\n",num_enbs); for (k=0; k <num_enbs ; k++) { if (strcmp(ENBSParams[ENB_ACTIVE_ENBS_IDX].strlistptr[k], *(ENBParamList.paramarray[i][ENB_ENB_NAME_IDX].strptr) )== 0) { char enbpath[MAX_OPTNAME_SIZE + 8]; - - RRC_CONFIGURATION_REQ (msg_p).cell_identity = enb_id; + + if (rrc->node_type != ngran_eNB_CU && rrc->node_type != ngran_ng_eNB_CU) { + LOG_I(RRC,"Configuring Cell Information\n"); + // PLMN information for SIB1 in DU + RRC_CONFIGURATION_REQ (msg_p).cell_identity = enb_id; /* if (strcmp(*(ENBParamList.paramarray[i][ENB_CELL_TYPE_IDX].strptr), "CELL_MACRO_ENB") == 0) { @@ -815,20 +830,22 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { enb_properties_loc.properties[enb_properties_loc_index]->eNB_name = strdup(enb_name); */ - RRC_CONFIGURATION_REQ (msg_p).tac = (uint16_t)atoi( *(ENBParamList.paramarray[i][ENB_TRACKING_AREA_CODE_IDX].strptr) ); - RRC_CONFIGURATION_REQ (msg_p).mcc = (uint16_t)atoi( *(ENBParamList.paramarray[i][ENB_MOBILE_COUNTRY_CODE_IDX].strptr) ); - RRC_CONFIGURATION_REQ (msg_p).mnc = (uint16_t)atoi( *(ENBParamList.paramarray[i][ENB_MOBILE_NETWORK_CODE_IDX].strptr) ); - RRC_CONFIGURATION_REQ (msg_p).mnc_digit_length = strlen(*(ENBParamList.paramarray[i][ENB_MOBILE_NETWORK_CODE_IDX].strptr)); - AssertFatal((RRC_CONFIGURATION_REQ (msg_p).mnc_digit_length == 2) || - (RRC_CONFIGURATION_REQ (msg_p).mnc_digit_length == 3), - "BAD MNC DIGIT LENGTH %d", - RRC_CONFIGURATION_REQ (msg_p).mnc_digit_length); - + RRC_CONFIGURATION_REQ (msg_p).tac = (uint16_t)atoi( *(ENBParamList.paramarray[i][ENB_TRACKING_AREA_CODE_IDX].strptr) ); + RRC_CONFIGURATION_REQ (msg_p).mcc = (uint16_t)atoi( *(ENBParamList.paramarray[i][ENB_MOBILE_COUNTRY_CODE_IDX].strptr) ); + RRC_CONFIGURATION_REQ (msg_p).mnc = (uint16_t)atoi( *(ENBParamList.paramarray[i][ENB_MOBILE_NETWORK_CODE_IDX].strptr) ); + RRC_CONFIGURATION_REQ (msg_p).mnc_digit_length = strlen(*(ENBParamList.paramarray[i][ENB_MOBILE_NETWORK_CODE_IDX].strptr)); + AssertFatal((RRC_CONFIGURATION_REQ (msg_p).mnc_digit_length == 2) || + (RRC_CONFIGURATION_REQ (msg_p).mnc_digit_length == 3), + "BAD MNC DIGIT LENGTH %d", + RRC_CONFIGURATION_REQ (msg_p).mnc_digit_length); + - // Parse optional physical parameters - sprintf(enbpath,"%s.[%i]",ENB_CONFIG_STRING_ENB_LIST,k), - config_getlist( &CCsParamList,NULL,0,enbpath); - + // Parse optional physical parameters + sprintf(enbpath,"%s.[%i]",ENB_CONFIG_STRING_ENB_LIST,k), + config_getlist( &CCsParamList,NULL,0,enbpath); + } + + LOG_I(RRC,"num component carriers %d \n",CCsParamList.numelt); if ( CCsParamList.numelt> 0) { char ccspath[MAX_OPTNAME_SIZE*2 + 16]; @@ -846,224 +863,195 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { nb_cc++; + if (rrc->node_type != ngran_eNB_CU && rrc->node_type != ngran_ng_eNB_CU) { + // Cell params, MIB/SIB1 in DU + RRC_CONFIGURATION_REQ (msg_p).tdd_config[j] = tdd_config; - RRC_CONFIGURATION_REQ (msg_p).tdd_config[j] = tdd_config; - - AssertFatal (tdd_config <= TDD_Config__subframeAssignment_sa6, - "Failed to parse eNB configuration file %s, enb %d illegal tdd_config %d (should be 0-%d)!", - RC.config_file_name, i, tdd_config, TDD_Config__subframeAssignment_sa6); + AssertFatal (tdd_config <= TDD_Config__subframeAssignment_sa6, + "Failed to parse eNB configuration file %s, enb %d illegal tdd_config %d (should be 0-%d)!", + RC.config_file_name, i, tdd_config, TDD_Config__subframeAssignment_sa6); - RRC_CONFIGURATION_REQ (msg_p).tdd_config_s[j] = tdd_config_s; - AssertFatal (tdd_config_s <= TDD_Config__specialSubframePatterns_ssp8, - "Failed to parse eNB configuration file %s, enb %d illegal tdd_config_s %d (should be 0-%d)!", - RC.config_file_name, i, tdd_config_s, TDD_Config__specialSubframePatterns_ssp8); - - if (!prefix_type) - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d define %s: NORMAL,EXTENDED!\n", - RC.config_file_name, i, ENB_CONFIG_STRING_PREFIX_TYPE); - else if (strcmp(prefix_type, "NORMAL") == 0) { - RRC_CONFIGURATION_REQ (msg_p).prefix_type[j] = NORMAL; - } else if (strcmp(prefix_type, "EXTENDED") == 0) { - RRC_CONFIGURATION_REQ (msg_p).prefix_type[j] = EXTENDED; - } else { - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for prefix_type choice: NORMAL or EXTENDED !\n", - RC.config_file_name, i, prefix_type); - } -#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) - if (!pbch_repetition) - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d define %s: TRUE,FALSE!\n", - RC.config_file_name, i, ENB_CONFIG_STRING_PBCH_REPETITION); - else if (strcmp(pbch_repetition, "TRUE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).pbch_repetition[j] = 1; - } else if (strcmp(pbch_repetition, "FALSE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).pbch_repetition[j] = 0; - } else { - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pbch_repetition choice: TRUE or FALSE !\n", - RC.config_file_name, i, pbch_repetition); - } -#endif - - RRC_CONFIGURATION_REQ (msg_p).eutra_band[j] = eutra_band; - RRC_CONFIGURATION_REQ (msg_p).downlink_frequency[j] = (uint32_t) downlink_frequency; - RRC_CONFIGURATION_REQ (msg_p).uplink_frequency_offset[j] = (unsigned int) uplink_frequency_offset; - RRC_CONFIGURATION_REQ (msg_p).Nid_cell[j]= Nid_cell; - - if (Nid_cell>503) { - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for Nid_cell choice: 0...503 !\n", - RC.config_file_name, i, Nid_cell); - } - - RRC_CONFIGURATION_REQ (msg_p).N_RB_DL[j]= N_RB_DL; - - if ((N_RB_DL!=6) && (N_RB_DL!=15) && (N_RB_DL!=25) && (N_RB_DL!=50) && (N_RB_DL!=75) && (N_RB_DL!=100)) { - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for N_RB_DL choice: 6,15,25,50,75,100 !\n", - RC.config_file_name, i, N_RB_DL); - } - - if (strcmp(frame_type, "FDD") == 0) { - RRC_CONFIGURATION_REQ (msg_p).frame_type[j] = FDD; - } else if (strcmp(frame_type, "TDD") == 0) { - RRC_CONFIGURATION_REQ (msg_p).frame_type[j] = TDD; - } else { - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for frame_type choice: FDD or TDD !\n", - RC.config_file_name, i, frame_type); - } - - - RRC_CONFIGURATION_REQ (msg_p).tdd_config[j] = tdd_config; - AssertFatal (tdd_config <= TDD_Config__subframeAssignment_sa6, - "Failed to parse eNB configuration file %s, enb %d illegal tdd_config %d (should be 0-%d)!", - RC.config_file_name, i, tdd_config, TDD_Config__subframeAssignment_sa6); - - - RRC_CONFIGURATION_REQ (msg_p).tdd_config_s[j] = tdd_config_s; - AssertFatal (tdd_config_s <= TDD_Config__specialSubframePatterns_ssp8, - "Failed to parse eNB configuration file %s, enb %d illegal tdd_config_s %d (should be 0-%d)!", - RC.config_file_name, i, tdd_config_s, TDD_Config__specialSubframePatterns_ssp8); - - - - if (!prefix_type) - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d define %s: NORMAL,EXTENDED!\n", - RC.config_file_name, i, ENB_CONFIG_STRING_PREFIX_TYPE); - else if (strcmp(prefix_type, "NORMAL") == 0) { - RRC_CONFIGURATION_REQ (msg_p).prefix_type[j] = NORMAL; - } else if (strcmp(prefix_type, "EXTENDED") == 0) { - RRC_CONFIGURATION_REQ (msg_p).prefix_type[j] = EXTENDED; - } else { - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for prefix_type choice: NORMAL or EXTENDED !\n", - RC.config_file_name, i, prefix_type); - } - - - - RRC_CONFIGURATION_REQ (msg_p).eutra_band[j] = eutra_band; - // printf( "\teutra band:\t%d\n",RRC_CONFIGURATION_REQ (msg_p).eutra_band); + RRC_CONFIGURATION_REQ (msg_p).tdd_config_s[j] = tdd_config_s; + AssertFatal (tdd_config_s <= TDD_Config__specialSubframePatterns_ssp8, + "Failed to parse eNB configuration file %s, enb %d illegal tdd_config_s %d (should be 0-%d)!", + RC.config_file_name, i, tdd_config_s, TDD_Config__specialSubframePatterns_ssp8); + + if (!prefix_type) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d define %s: NORMAL,EXTENDED!\n", + RC.config_file_name, i, ENB_CONFIG_STRING_PREFIX_TYPE); + else if (strcmp(prefix_type, "NORMAL") == 0) { + RRC_CONFIGURATION_REQ (msg_p).prefix_type[j] = NORMAL; + } else if (strcmp(prefix_type, "EXTENDED") == 0) { + RRC_CONFIGURATION_REQ (msg_p).prefix_type[j] = EXTENDED; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for prefix_type choice: NORMAL or EXTENDED !\n", + RC.config_file_name, i, prefix_type); + } + + RRC_CONFIGURATION_REQ (msg_p).eutra_band[j] = eutra_band; + RRC_CONFIGURATION_REQ (msg_p).downlink_frequency[j] = (uint32_t) downlink_frequency; + RRC_CONFIGURATION_REQ (msg_p).uplink_frequency_offset[j] = (unsigned int) uplink_frequency_offset; + + if (config_check_band_frequencies(j, + RRC_CONFIGURATION_REQ (msg_p).eutra_band[j], + RRC_CONFIGURATION_REQ (msg_p).downlink_frequency[j], + RRC_CONFIGURATION_REQ (msg_p).uplink_frequency_offset[j], + RRC_CONFIGURATION_REQ (msg_p).frame_type[j])) { + AssertFatal(0, "error calling enb_check_band_frequencies\n"); + } + + RRC_CONFIGURATION_REQ (msg_p).Nid_cell[j]= Nid_cell; + if (Nid_cell>503) { + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for Nid_cell choice: 0...503 !\n", + RC.config_file_name, i, Nid_cell); + } + + RRC_CONFIGURATION_REQ (msg_p).N_RB_DL[j]= N_RB_DL; + + if ((N_RB_DL!=6) && (N_RB_DL!=15) && (N_RB_DL!=25) && (N_RB_DL!=50) && (N_RB_DL!=75) && (N_RB_DL!=100)) { + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for N_RB_DL choice: 6,15,25,50,75,100 !\n", + RC.config_file_name, i, N_RB_DL); + } + + if (strcmp(frame_type, "FDD") == 0) { + RRC_CONFIGURATION_REQ (msg_p).frame_type[j] = FDD; + } else if (strcmp(frame_type, "TDD") == 0) { + RRC_CONFIGURATION_REQ (msg_p).frame_type[j] = TDD; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for frame_type choice: FDD or TDD !\n", + RC.config_file_name, i, frame_type); + } + - RRC_CONFIGURATION_REQ (msg_p).downlink_frequency[j] = (uint32_t) downlink_frequency; - //printf( "\tdownlink freq:\t%u\n",RRC_CONFIGURATION_REQ (msg_p).downlink_frequency); - RRC_CONFIGURATION_REQ (msg_p).uplink_frequency_offset[j] = (unsigned int) uplink_frequency_offset; - if (config_check_band_frequencies(j, - RRC_CONFIGURATION_REQ (msg_p).eutra_band[j], - RRC_CONFIGURATION_REQ (msg_p).downlink_frequency[j], - RRC_CONFIGURATION_REQ (msg_p).uplink_frequency_offset[j], - RRC_CONFIGURATION_REQ (msg_p).frame_type[j])) { - AssertFatal(0, "error calling enb_check_band_frequencies\n"); + if ((nb_antenna_ports <1) || (nb_antenna_ports > 2)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for nb_antenna_ports choice: 1..2 !\n", + RC.config_file_name, i, nb_antenna_ports); + + RRC_CONFIGURATION_REQ (msg_p).nb_antenna_ports[j] = nb_antenna_ports; + } + else {//this is CU, SIB2-20 in CU - if ((nb_antenna_ports <1) || (nb_antenna_ports > 2)) - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for nb_antenna_ports choice: 1..2 !\n", - RC.config_file_name, i, nb_antenna_ports); - - RRC_CONFIGURATION_REQ (msg_p).nb_antenna_ports[j] = nb_antenna_ports; - - - RRC_CONFIGURATION_REQ (msg_p).prach_root[j] = prach_root; - - if ((prach_root <0) || (prach_root > 1023)) - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for prach_root choice: 0..1023 !\n", - RC.config_file_name, i, prach_root); - - RRC_CONFIGURATION_REQ (msg_p).prach_config_index[j] = prach_config_index; - - if ((prach_config_index <0) || (prach_config_index > 63)) - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for prach_config_index choice: 0..1023 !\n", - RC.config_file_name, i, prach_config_index); - - if (!prach_high_speed) - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d define %s: ENABLE,DISABLE!\n", - RC.config_file_name, i, ENB_CONFIG_STRING_PRACH_HIGH_SPEED); - else if (strcmp(prach_high_speed, "ENABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).prach_high_speed[j] = TRUE; - } else if (strcmp(prach_high_speed, "DISABLE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).prach_high_speed[j] = FALSE; - } else - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for prach_config choice: ENABLE,DISABLE !\n", - RC.config_file_name, i, prach_high_speed); - - RRC_CONFIGURATION_REQ (msg_p).prach_zero_correlation[j] =prach_zero_correlation; - - if ((prach_zero_correlation <0) || (prach_zero_correlation > 15)) - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for prach_zero_correlation choice: 0..15!\n", - RC.config_file_name, i, prach_zero_correlation); - - RRC_CONFIGURATION_REQ (msg_p).prach_freq_offset[j] = prach_freq_offset; - if ((prach_freq_offset <0) || (prach_freq_offset > 94)) - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for prach_freq_offset choice: 0..94!\n", - RC.config_file_name, i, prach_freq_offset); - - RRC_CONFIGURATION_REQ (msg_p).pucch_delta_shift[j] = pucch_delta_shift-1; - - if ((pucch_delta_shift <1) || (pucch_delta_shift > 3)) - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pucch_delta_shift choice: 1..3!\n", - RC.config_file_name, i, pucch_delta_shift); - +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) + if (!pbch_repetition) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d define %s: TRUE,FALSE!\n", + RC.config_file_name, i, ENB_CONFIG_STRING_PBCH_REPETITION); + else if (strcmp(pbch_repetition, "TRUE") == 0) { + RRC_CONFIGURATION_REQ (msg_p).pbch_repetition[j] = 1; + } else if (strcmp(pbch_repetition, "FALSE") == 0) { + RRC_CONFIGURATION_REQ (msg_p).pbch_repetition[j] = 0; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pbch_repetition choice: TRUE or FALSE !\n", + RC.config_file_name, i, pbch_repetition); + } +#endif + + + + RRC_CONFIGURATION_REQ (msg_p).prach_root[j] = prach_root; + + if ((prach_root <0) || (prach_root > 1023)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for prach_root choice: 0..1023 !\n", + RC.config_file_name, i, prach_root); + + RRC_CONFIGURATION_REQ (msg_p).prach_config_index[j] = prach_config_index; + + if ((prach_config_index <0) || (prach_config_index > 63)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for prach_config_index choice: 0..1023 !\n", + RC.config_file_name, i, prach_config_index); + + if (!prach_high_speed) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d define %s: ENABLE,DISABLE!\n", + RC.config_file_name, i, ENB_CONFIG_STRING_PRACH_HIGH_SPEED); + else if (strcmp(prach_high_speed, "ENABLE") == 0) { + RRC_CONFIGURATION_REQ (msg_p).prach_high_speed[j] = TRUE; + } else if (strcmp(prach_high_speed, "DISABLE") == 0) { + RRC_CONFIGURATION_REQ (msg_p).prach_high_speed[j] = FALSE; + } else + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for prach_config choice: ENABLE,DISABLE !\n", + RC.config_file_name, i, prach_high_speed); + + RRC_CONFIGURATION_REQ (msg_p).prach_zero_correlation[j] =prach_zero_correlation; + + if ((prach_zero_correlation <0) || (prach_zero_correlation > 15)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for prach_zero_correlation choice: 0..15!\n", + RC.config_file_name, i, prach_zero_correlation); + + RRC_CONFIGURATION_REQ (msg_p).prach_freq_offset[j] = prach_freq_offset; + if ((prach_freq_offset <0) || (prach_freq_offset > 94)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for prach_freq_offset choice: 0..94!\n", + RC.config_file_name, i, prach_freq_offset); + + RRC_CONFIGURATION_REQ (msg_p).pucch_delta_shift[j] = pucch_delta_shift-1; + + if ((pucch_delta_shift <1) || (pucch_delta_shift > 3)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pucch_delta_shift choice: 1..3!\n", + RC.config_file_name, i, pucch_delta_shift); + RRC_CONFIGURATION_REQ (msg_p).pucch_nRB_CQI[j] = pucch_nRB_CQI; - + if ((pucch_nRB_CQI <0) || (pucch_nRB_CQI > 98)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pucch_nRB_CQI choice: 0..98!\n", RC.config_file_name, i, pucch_nRB_CQI); - + RRC_CONFIGURATION_REQ (msg_p).pucch_nCS_AN[j] = pucch_nCS_AN; - + if ((pucch_nCS_AN <0) || (pucch_nCS_AN > 7)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pucch_nCS_AN choice: 0..7!\n", RC.config_file_name, i, pucch_nCS_AN); - -//#if (RRC_VERSION < MAKE_VERSION(10, 0, 0)) + + //#if (RRC_VERSION < MAKE_VERSION(10, 0, 0)) RRC_CONFIGURATION_REQ (msg_p).pucch_n1_AN[j] = pucch_n1_AN; - + if ((pucch_n1_AN <0) || (pucch_n1_AN > 2047)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pucch_n1_AN choice: 0..2047!\n", RC.config_file_name, i, pucch_n1_AN); - -//#endif + + //#endif RRC_CONFIGURATION_REQ (msg_p).pdsch_referenceSignalPower[j] = pdsch_referenceSignalPower; - + if ((pdsch_referenceSignalPower <-60) || (pdsch_referenceSignalPower > 50)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pdsch_referenceSignalPower choice:-60..50!\n", RC.config_file_name, i, pdsch_referenceSignalPower); - + RRC_CONFIGURATION_REQ (msg_p).pdsch_p_b[j] = pdsch_p_b; - + if ((pdsch_p_b <0) || (pdsch_p_b > 3)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pdsch_p_b choice: 0..3!\n", RC.config_file_name, i, pdsch_p_b); - + RRC_CONFIGURATION_REQ (msg_p).pusch_n_SB[j] = pusch_n_SB; - + if ((pusch_n_SB <1) || (pusch_n_SB > 4)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pusch_n_SB choice: 1..4!\n", RC.config_file_name, i, pusch_n_SB); - + if (!pusch_hoppingMode) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d define %s: interSubframe,intraAndInterSubframe!\n", @@ -1076,14 +1064,14 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pusch_hoppingMode choice: interSubframe,intraAndInterSubframe!\n", RC.config_file_name, i, pusch_hoppingMode); - + RRC_CONFIGURATION_REQ (msg_p).pusch_hoppingOffset[j] = pusch_hoppingOffset; - + if ((pusch_hoppingOffset<0) || (pusch_hoppingOffset>98)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pusch_hoppingOffset choice: 0..98!\n", RC.config_file_name, i, pusch_hoppingMode); - + if (!pusch_enable64QAM) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d define %s: ENABLE,DISABLE!\n", @@ -1096,7 +1084,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pusch_enable64QAM choice: ENABLE,DISABLE!\n", RC.config_file_name, i, pusch_enable64QAM); - + if (!pusch_groupHoppingEnabled) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d define %s: ENABLE,DISABLE!\n", @@ -1109,15 +1097,15 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pusch_groupHoppingEnabled choice: ENABLE,DISABLE!\n", RC.config_file_name, i, pusch_groupHoppingEnabled); - - + + RRC_CONFIGURATION_REQ (msg_p).pusch_groupAssignment[j] = pusch_groupAssignment; - + if ((pusch_groupAssignment<0)||(pusch_groupAssignment>29)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pusch_groupAssignment choice: 0..29!\n", RC.config_file_name, i, pusch_groupAssignment); - + if (!pusch_sequenceHoppingEnabled) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d define %s: ENABLE,DISABLE!\n", @@ -1130,14 +1118,14 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pusch_sequenceHoppingEnabled choice: ENABLE,DISABLE!\n", RC.config_file_name, i, pusch_sequenceHoppingEnabled); - + RRC_CONFIGURATION_REQ (msg_p).pusch_nDMRS1[j] = pusch_nDMRS1; //cyclic_shift in RRC! - + if ((pusch_nDMRS1 <0) || (pusch_nDMRS1>7)) AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pusch_nDMRS1 choice: 0..7!\n", RC.config_file_name, i, pusch_nDMRS1); - + if (strcmp(phich_duration,"NORMAL")==0) { RRC_CONFIGURATION_REQ (msg_p).phich_duration[j] = PHICH_Config__phich_Duration_normal; } else if (strcmp(phich_duration,"EXTENDED")==0) { @@ -1146,7 +1134,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for phich_duration choice: NORMAL,EXTENDED!\n", RC.config_file_name, i, phich_duration); - + if (strcmp(phich_resource,"ONESIXTH")==0) { RRC_CONFIGURATION_REQ (msg_p).phich_resource[j] = PHICH_Config__phich_Resource_oneSixth ; } else if (strcmp(phich_resource,"HALF")==0) { @@ -1206,7 +1194,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for srs_MaxUpPts choice: ENABLE,DISABLE !\n", RC.config_file_name, i, srs_MaxUpPts); } - + RRC_CONFIGURATION_REQ (msg_p).pusch_p0_Nominal[j] = pusch_p0_Nominal; if ((pusch_p0_Nominal<-126) || (pusch_p0_Nominal>24)) @@ -1233,7 +1221,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { RRC_CONFIGURATION_REQ (msg_p).pusch_alpha[j] = UplinkPowerControlCommon__alpha_al1; } #endif - + #if (RRC_VERSION >= MAKE_VERSION(12, 0, 0)) if (strcmp(pusch_alpha,"AL0")==0) { RRC_CONFIGURATION_REQ (msg_p).pusch_alpha[j] = Alpha_r12_al0; @@ -1271,7 +1259,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for msg3_delta_Preamble choice: -1..6 !\n", RC.config_file_name, i, msg3_delta_Preamble); - + if (strcmp(pucch_deltaF_Format1,"deltaF_2")==0) { RRC_CONFIGURATION_REQ (msg_p).pucch_deltaF_Format1[j] = DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF_2; @@ -1332,7 +1320,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { RC.config_file_name, i, pucch_deltaF_Format2b); - + RRC_CONFIGURATION_REQ (msg_p).rach_numberOfRA_Preambles[j] = (rach_numberOfRA_Preambles/4)-1; @@ -1435,7 +1423,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { RC.config_file_name, i, rach_powerRampingStep); - + switch (rach_preambleTransMax) { #if (RRC_VERSION < MAKE_VERSION(14, 0, 0)) case 3: @@ -1668,639 +1656,641 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { break; } - RRC_CONFIGURATION_REQ (msg_p).ue_multiple_max[j] = ue_multiple_max; - - switch (N_RB_DL) { - case 25: - if ((ue_multiple_max < 1) || (ue_multiple_max > 4)) - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for ue_multiple_max choice: 1..4!\n", - RC.config_file_name, i, ue_multiple_max); - break; - case 50: - if ((ue_multiple_max < 1) || (ue_multiple_max > 8)) - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for ue_multiple_max choice: 1..8!\n", - RC.config_file_name, i, ue_multiple_max); - break; - case 100: - if ((ue_multiple_max < 1) || (ue_multiple_max > 16)) - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for ue_multiple_max choice: 1..16!\n", - RC.config_file_name, i, ue_multiple_max); - break; - default: - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for N_RB_DL choice: 25,50,100 !\n", - RC.config_file_name, i, N_RB_DL); - break; - } + RRC_CONFIGURATION_REQ (msg_p).ue_multiple_max[j] = ue_multiple_max; + switch (N_RB_DL) { + case 25: + if ((ue_multiple_max < 1) || (ue_multiple_max > 4)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for ue_multiple_max choice: 1..4!\n", + RC.config_file_name, i, ue_multiple_max); + break; + case 50: + if ((ue_multiple_max < 1) || (ue_multiple_max > 8)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for ue_multiple_max choice: 1..8!\n", + RC.config_file_name, i, ue_multiple_max); + break; + case 100: + if ((ue_multiple_max < 1) || (ue_multiple_max > 16)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for ue_multiple_max choice: 1..16!\n", + RC.config_file_name, i, ue_multiple_max); + break; + default: + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for N_RB_DL choice: 25,50,100 !\n", + RC.config_file_name, i, N_RB_DL); + break; + } + //TTN - for D2D //SIB18 if (strcmp(rxPool_sc_CP_Len,"normal")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_CP_Len[j] = SL_CP_Len_r12_normal; + RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_CP_Len[j] = SL_CP_Len_r12_normal; } else if (strcmp(rxPool_sc_CP_Len,"extended")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_CP_Len[j] = SL_CP_Len_r12_extended; + RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_CP_Len[j] = SL_CP_Len_r12_extended; } else - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for rxPool_sc_CP_Len choice: normal,extended!\n", - RC.config_file_name, i, rxPool_sc_CP_Len); - + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for rxPool_sc_CP_Len choice: normal,extended!\n", + RC.config_file_name, i, rxPool_sc_CP_Len); + if (strcmp(rxPool_sc_Period,"sf40")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_sf40; + RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_sf40; } else if (strcmp(rxPool_sc_Period,"sf60")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_sf60; + RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_sf60; } else if (strcmp(rxPool_sc_Period,"sf70")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_sf70; + RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_sf70; } else if (strcmp(rxPool_sc_Period,"sf80")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_sf80; + RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_sf80; } else if (strcmp(rxPool_sc_Period,"sf120")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_sf120; + RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_sf120; } else if (strcmp(rxPool_sc_Period,"sf140")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_sf140; + RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_sf140; } else if (strcmp(rxPool_sc_Period,"sf160")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_sf160; + RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_sf160; } else if (strcmp(rxPool_sc_Period,"sf240")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_sf240; + RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_sf240; } else if (strcmp(rxPool_sc_Period,"sf280")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_sf280; + RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_sf280; } else if (strcmp(rxPool_sc_Period,"sf320")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_sf320; + RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_sf320; } else if (strcmp(rxPool_sc_Period,"spare6")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_spare6; + RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_spare6; } else if (strcmp(rxPool_sc_Period,"spare5")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_spare5; + RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_spare5; } else if (strcmp(rxPool_sc_Period,"spare4")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_spare4; + RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_spare4; } else if (strcmp(rxPool_sc_Period,"spare3")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_spare3; + RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_spare3; } else if (strcmp(rxPool_sc_Period,"spare2")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_spare2; + RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_spare2; } else if (strcmp(rxPool_sc_Period,"spare")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_spare; + RRC_CONFIGURATION_REQ (msg_p).rxPool_sc_Period[j] = SL_PeriodComm_r12_spare; } else - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for rxPool_sc_Period choice: sf40,sf60,sf70,sf80,sf120,sf140,sf160,sf240,sf280,sf320,spare6,spare5,spare4,spare3,spare2,spare!\n", - RC.config_file_name, i, rxPool_sc_Period); - + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for rxPool_sc_Period choice: sf40,sf60,sf70,sf80,sf120,sf140,sf160,sf240,sf280,sf320,spare6,spare5,spare4,spare3,spare2,spare!\n", + RC.config_file_name, i, rxPool_sc_Period); + if (strcmp(rxPool_data_CP_Len,"normal")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_data_CP_Len[j] = SL_CP_Len_r12_normal; + RRC_CONFIGURATION_REQ (msg_p).rxPool_data_CP_Len[j] = SL_CP_Len_r12_normal; } else if (strcmp(rxPool_data_CP_Len,"extended")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_data_CP_Len[j] = SL_CP_Len_r12_extended; + RRC_CONFIGURATION_REQ (msg_p).rxPool_data_CP_Len[j] = SL_CP_Len_r12_extended; } else - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for rxPool_data_CP_Len choice: normal,extended!\n", - RC.config_file_name, i, rxPool_data_CP_Len); - + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for rxPool_data_CP_Len choice: normal,extended!\n", + RC.config_file_name, i, rxPool_data_CP_Len); + RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_prb_Num[j] = rxPool_ResourceConfig_prb_Num; RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_prb_Start[j] = rxPool_ResourceConfig_prb_Start; RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_prb_End[j] = rxPool_ResourceConfig_prb_End; - + if (strcmp(rxPool_ResourceConfig_offsetIndicator_present,"prNothing")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_offsetIndicator_present[j] = SL_OffsetIndicator_r12_PR_NOTHING; + RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_offsetIndicator_present[j] = SL_OffsetIndicator_r12_PR_NOTHING; } else if (strcmp(rxPool_ResourceConfig_offsetIndicator_present,"prSmall")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_offsetIndicator_present[j] = SL_OffsetIndicator_r12_PR_small_r12; + RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_offsetIndicator_present[j] = SL_OffsetIndicator_r12_PR_small_r12; } else if (strcmp(rxPool_ResourceConfig_offsetIndicator_present,"prLarge")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_offsetIndicator_present[j] = SL_OffsetIndicator_r12_PR_large_r12; + RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_offsetIndicator_present[j] = SL_OffsetIndicator_r12_PR_large_r12; } else - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for rxPool_ResourceConfig_offsetIndicator_present choice: prNothing,prSmal,prLarge!\n", - RC.config_file_name, i, rxPool_ResourceConfig_offsetIndicator_present); - + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for rxPool_ResourceConfig_offsetIndicator_present choice: prNothing,prSmal,prLarge!\n", + RC.config_file_name, i, rxPool_ResourceConfig_offsetIndicator_present); + RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_offsetIndicator_choice[j] = rxPool_ResourceConfig_offsetIndicator_choice; - + if (strcmp(rxPool_ResourceConfig_subframeBitmap_present,"prNothing")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_NOTHING; + RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_NOTHING; } else if (strcmp(rxPool_ResourceConfig_subframeBitmap_present,"prBs4")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs4_r12; + RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs4_r12; } else if (strcmp(rxPool_ResourceConfig_subframeBitmap_present,"prBs8")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs8_r12; + RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs8_r12; } else if (strcmp(rxPool_ResourceConfig_subframeBitmap_present,"prBs12")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs12_r12; + RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs12_r12; } else if (strcmp(rxPool_ResourceConfig_subframeBitmap_present,"prBs16")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs16_r12; + RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs16_r12; } else if (strcmp(rxPool_ResourceConfig_subframeBitmap_present,"prBs30")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs30_r12; + RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs30_r12; } else if (strcmp(rxPool_ResourceConfig_subframeBitmap_present,"prBs40")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs40_r12; + RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs40_r12; } else if (strcmp(rxPool_ResourceConfig_subframeBitmap_present,"prBs42")==0) { - RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs42_r12; + RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs42_r12; } else - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for rxPool_ResourceConfig_subframeBitmap_present choice: prNothing,prBs4,prBs8,prBs12,prBs16,prBs30,prBs40,prBs42!\n", - RC.config_file_name, i, rxPool_ResourceConfig_subframeBitmap_present); - + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for rxPool_ResourceConfig_subframeBitmap_present choice: prNothing,prBs4,prBs8,prBs12,prBs16,prBs30,prBs40,prBs42!\n", + RC.config_file_name, i, rxPool_ResourceConfig_subframeBitmap_present); + RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_choice_bs_buf[j] = rxPool_ResourceConfig_subframeBitmap_choice_bs_buf; RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_choice_bs_size[j] = rxPool_ResourceConfig_subframeBitmap_choice_bs_size; RRC_CONFIGURATION_REQ (msg_p).rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused[j] = rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused; - + //SIB19 - for discRxPool if (strcmp(discRxPool_cp_Len,"normal")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_cp_Len[j] = SL_CP_Len_r12_normal; + RRC_CONFIGURATION_REQ (msg_p).discRxPool_cp_Len[j] = SL_CP_Len_r12_normal; } else if (strcmp(discRxPool_cp_Len,"extended")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_cp_Len[j] = SL_CP_Len_r12_extended; + RRC_CONFIGURATION_REQ (msg_p).discRxPool_cp_Len[j] = SL_CP_Len_r12_extended; } else - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPool_cp_Len choice: normal,extended!\n", - RC.config_file_name, i, discRxPool_cp_Len); - - + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPool_cp_Len choice: normal,extended!\n", + RC.config_file_name, i, discRxPool_cp_Len); + + if (strcmp(discRxPool_discPeriod,"rf32")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf32; + RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf32; } else if (strcmp(discRxPool_discPeriod,"rf64")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf64; + RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf64; } else if (strcmp(discRxPool_discPeriod,"rf128")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf128; + RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf128; } else if (strcmp(discRxPool_discPeriod,"rf256")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf256; + RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf256; } else if (strcmp(discRxPool_discPeriod,"rf512")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf512; + RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf512; } else if (strcmp(discRxPool_discPeriod,"rf1024")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf1024; + RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf1024; } else if (strcmp(discRxPool_discPeriod,"rf16")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf16_v1310; + RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf16_v1310; } else if (strcmp(discRxPool_discPeriod,"spare")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_spare; + RRC_CONFIGURATION_REQ (msg_p).discRxPool_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_spare; } else - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPool_discPeriod choice: rf32,rf64,rf128,rf512,rf1024,rf16,spare!\n", - RC.config_file_name, i, discRxPool_discPeriod); - - - + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPool_discPeriod choice: rf32,rf64,rf128,rf512,rf1024,rf16,spare!\n", + RC.config_file_name, i, discRxPool_discPeriod); + + + RRC_CONFIGURATION_REQ (msg_p).discRxPool_numRetx[j] = discRxPool_numRetx; RRC_CONFIGURATION_REQ (msg_p).discRxPool_numRepetition[j] = discRxPool_numRepetition; - - + + RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_prb_Num[j] = discRxPool_ResourceConfig_prb_Num; RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_prb_Start[j] = discRxPool_ResourceConfig_prb_Start; RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_prb_End[j] = discRxPool_ResourceConfig_prb_End; - + if (strcmp(discRxPool_ResourceConfig_offsetIndicator_present,"prNothing")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_offsetIndicator_present[j] = SL_OffsetIndicator_r12_PR_NOTHING; + RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_offsetIndicator_present[j] = SL_OffsetIndicator_r12_PR_NOTHING; } else if (strcmp(discRxPool_ResourceConfig_offsetIndicator_present,"prSmall")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_offsetIndicator_present[j] = SL_OffsetIndicator_r12_PR_small_r12; + RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_offsetIndicator_present[j] = SL_OffsetIndicator_r12_PR_small_r12; } else if (strcmp(discRxPool_ResourceConfig_offsetIndicator_present,"prLarge")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_offsetIndicator_present[j] = SL_OffsetIndicator_r12_PR_large_r12; + RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_offsetIndicator_present[j] = SL_OffsetIndicator_r12_PR_large_r12; } else - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPool_ResourceConfig_offsetIndicator_present choice: prNothing,prSmal,prLarge!\n", - RC.config_file_name, i, discRxPool_ResourceConfig_offsetIndicator_present); - + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPool_ResourceConfig_offsetIndicator_present choice: prNothing,prSmal,prLarge!\n", + RC.config_file_name, i, discRxPool_ResourceConfig_offsetIndicator_present); + RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_offsetIndicator_choice[j] = discRxPool_ResourceConfig_offsetIndicator_choice; - + if (strcmp(discRxPool_ResourceConfig_subframeBitmap_present,"prNothing")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_NOTHING; + RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_NOTHING; } else if (strcmp(discRxPool_ResourceConfig_subframeBitmap_present,"prBs4")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs4_r12; + RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs4_r12; } else if (strcmp(discRxPool_ResourceConfig_subframeBitmap_present,"prBs8")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs8_r12; + RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs8_r12; } else if (strcmp(discRxPool_ResourceConfig_subframeBitmap_present,"prBs12")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs12_r12; + RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs12_r12; } else if (strcmp(discRxPool_ResourceConfig_subframeBitmap_present,"prBs16")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs16_r12; + RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs16_r12; } else if (strcmp(discRxPool_ResourceConfig_subframeBitmap_present,"prBs30")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs30_r12; + RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs30_r12; } else if (strcmp(discRxPool_ResourceConfig_subframeBitmap_present,"prBs40")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs40_r12; + RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs40_r12; } else if (strcmp(discRxPool_ResourceConfig_subframeBitmap_present,"prBs42")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs42_r12; + RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs42_r12; } else - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPool_ResourceConfig_subframeBitmap_present choice: prNothing,prBs4,prBs8,prBs12,prBs16,prBs30,prBs40,prBs42!\n", - RC.config_file_name, i, discRxPool_ResourceConfig_subframeBitmap_present); - + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPool_ResourceConfig_subframeBitmap_present choice: prNothing,prBs4,prBs8,prBs12,prBs16,prBs30,prBs40,prBs42!\n", + RC.config_file_name, i, discRxPool_ResourceConfig_subframeBitmap_present); + RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf[j] = discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf; RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_choice_bs_size[j] = discRxPool_ResourceConfig_subframeBitmap_choice_bs_size; RRC_CONFIGURATION_REQ (msg_p).discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused[j] = discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused; - + //SIB19 - For discRxPoolPS - if (strcmp(discRxPoolPS_cp_Len,"normal")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_cp_Len[j] = SL_CP_Len_r12_normal; - } else if (strcmp(discRxPoolPS_cp_Len,"extended")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_cp_Len[j] = SL_CP_Len_r12_extended; - } else - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPoolPS_cp_Len choice: normal,extended!\n", - RC.config_file_name, i, discRxPoolPS_cp_Len); - - - if (strcmp(discRxPoolPS_discPeriod,"rf32")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf32; - } else if (strcmp(discRxPoolPS_discPeriod,"rf64")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf64; - } else if (strcmp(discRxPoolPS_discPeriod,"rf128")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf128; - } else if (strcmp(discRxPoolPS_discPeriod,"rf256")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf256; - } else if (strcmp(discRxPoolPS_discPeriod,"rf512")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf512; - } else if (strcmp(discRxPoolPS_discPeriod,"rf1024")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf1024; - } else if (strcmp(discRxPoolPS_discPeriod,"rf16")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf16_v1310; - } else if (strcmp(discRxPoolPS_discPeriod,"spare")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_spare; - } else - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPoolPS_discPeriod choice: rf32,rf64,rf128,rf512,rf1024,rf16,spare!\n", - RC.config_file_name, i, discRxPoolPS_discPeriod); - - - - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_numRetx[j] = discRxPoolPS_numRetx; - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_numRepetition[j] = discRxPoolPS_numRepetition; - - - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_prb_Num[j] = discRxPoolPS_ResourceConfig_prb_Num; - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_prb_Start[j] = discRxPoolPS_ResourceConfig_prb_Start; - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_prb_End[j] = discRxPoolPS_ResourceConfig_prb_End; - - if (strcmp(discRxPoolPS_ResourceConfig_offsetIndicator_present,"prNothing")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_offsetIndicator_present[j] = SL_OffsetIndicator_r12_PR_NOTHING; - } else if (strcmp(discRxPoolPS_ResourceConfig_offsetIndicator_present,"prSmall")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_offsetIndicator_present[j] = SL_OffsetIndicator_r12_PR_small_r12; - } else if (strcmp(discRxPoolPS_ResourceConfig_offsetIndicator_present,"prLarge")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_offsetIndicator_present[j] = SL_OffsetIndicator_r12_PR_large_r12; - } else - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPoolPS_ResourceConfig_offsetIndicator_present choice: prNothing,prSmal,prLarge!\n", - RC.config_file_name, i, discRxPoolPS_ResourceConfig_offsetIndicator_present); - - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_offsetIndicator_choice[j] = discRxPoolPS_ResourceConfig_offsetIndicator_choice; - - if (strcmp(discRxPoolPS_ResourceConfig_subframeBitmap_present,"prNothing")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_NOTHING; - } else if (strcmp(discRxPoolPS_ResourceConfig_subframeBitmap_present,"prBs4")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs4_r12; - } else if (strcmp(discRxPoolPS_ResourceConfig_subframeBitmap_present,"prBs8")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs8_r12; - } else if (strcmp(discRxPoolPS_ResourceConfig_subframeBitmap_present,"prBs12")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs12_r12; - } else if (strcmp(discRxPoolPS_ResourceConfig_subframeBitmap_present,"prBs16")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs16_r12; - } else if (strcmp(discRxPoolPS_ResourceConfig_subframeBitmap_present,"prBs30")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs30_r12; - } else if (strcmp(discRxPoolPS_ResourceConfig_subframeBitmap_present,"prBs40")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs40_r12; - } else if (strcmp(discRxPoolPS_ResourceConfig_subframeBitmap_present,"prBs42")==0) { - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs42_r12; - } else - AssertFatal (0, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPoolPS_ResourceConfig_subframeBitmap_present choice: prNothing,prBs4,prBs8,prBs12,prBs16,prBs30,prBs40,prBs42!\n", - RC.config_file_name, i, discRxPoolPS_ResourceConfig_subframeBitmap_present); - - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_buf[j] = discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_buf; - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_size[j] = discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_size; - RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_bits_unused[j] = discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_bits_unused; - - + if (strcmp(discRxPoolPS_cp_Len,"normal")==0) { + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_cp_Len[j] = SL_CP_Len_r12_normal; + } else if (strcmp(discRxPoolPS_cp_Len,"extended")==0) { + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_cp_Len[j] = SL_CP_Len_r12_extended; + } else + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPoolPS_cp_Len choice: normal,extended!\n", + RC.config_file_name, i, discRxPoolPS_cp_Len); + + + if (strcmp(discRxPoolPS_discPeriod,"rf32")==0) { + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf32; + } else if (strcmp(discRxPoolPS_discPeriod,"rf64")==0) { + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf64; + } else if (strcmp(discRxPoolPS_discPeriod,"rf128")==0) { + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf128; + } else if (strcmp(discRxPoolPS_discPeriod,"rf256")==0) { + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf256; + } else if (strcmp(discRxPoolPS_discPeriod,"rf512")==0) { + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf512; + } else if (strcmp(discRxPoolPS_discPeriod,"rf1024")==0) { + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf1024; + } else if (strcmp(discRxPoolPS_discPeriod,"rf16")==0) { + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_rf16_v1310; + } else if (strcmp(discRxPoolPS_discPeriod,"spare")==0) { + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_discPeriod[j] = SL_DiscResourcePool_r12__discPeriod_r12_spare; + } else + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPoolPS_discPeriod choice: rf32,rf64,rf128,rf512,rf1024,rf16,spare!\n", + RC.config_file_name, i, discRxPoolPS_discPeriod); + + + + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_numRetx[j] = discRxPoolPS_numRetx; + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_numRepetition[j] = discRxPoolPS_numRepetition; + + + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_prb_Num[j] = discRxPoolPS_ResourceConfig_prb_Num; + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_prb_Start[j] = discRxPoolPS_ResourceConfig_prb_Start; + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_prb_End[j] = discRxPoolPS_ResourceConfig_prb_End; + + if (strcmp(discRxPoolPS_ResourceConfig_offsetIndicator_present,"prNothing")==0) { + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_offsetIndicator_present[j] = SL_OffsetIndicator_r12_PR_NOTHING; + } else if (strcmp(discRxPoolPS_ResourceConfig_offsetIndicator_present,"prSmall")==0) { + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_offsetIndicator_present[j] = SL_OffsetIndicator_r12_PR_small_r12; + } else if (strcmp(discRxPoolPS_ResourceConfig_offsetIndicator_present,"prLarge")==0) { + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_offsetIndicator_present[j] = SL_OffsetIndicator_r12_PR_large_r12; + } else + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPoolPS_ResourceConfig_offsetIndicator_present choice: prNothing,prSmal,prLarge!\n", + RC.config_file_name, i, discRxPoolPS_ResourceConfig_offsetIndicator_present); + + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_offsetIndicator_choice[j] = discRxPoolPS_ResourceConfig_offsetIndicator_choice; + + if (strcmp(discRxPoolPS_ResourceConfig_subframeBitmap_present,"prNothing")==0) { + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_NOTHING; + } else if (strcmp(discRxPoolPS_ResourceConfig_subframeBitmap_present,"prBs4")==0) { + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs4_r12; + } else if (strcmp(discRxPoolPS_ResourceConfig_subframeBitmap_present,"prBs8")==0) { + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs8_r12; + } else if (strcmp(discRxPoolPS_ResourceConfig_subframeBitmap_present,"prBs12")==0) { + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs12_r12; + } else if (strcmp(discRxPoolPS_ResourceConfig_subframeBitmap_present,"prBs16")==0) { + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs16_r12; + } else if (strcmp(discRxPoolPS_ResourceConfig_subframeBitmap_present,"prBs30")==0) { + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs30_r12; + } else if (strcmp(discRxPoolPS_ResourceConfig_subframeBitmap_present,"prBs40")==0) { + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs40_r12; + } else if (strcmp(discRxPoolPS_ResourceConfig_subframeBitmap_present,"prBs42")==0) { + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_present[j] = SubframeBitmapSL_r12_PR_bs42_r12; + } else + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for discRxPoolPS_ResourceConfig_subframeBitmap_present choice: prNothing,prBs4,prBs8,prBs12,prBs16,prBs30,prBs40,prBs42!\n", + RC.config_file_name, i, discRxPoolPS_ResourceConfig_subframeBitmap_present); + + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_buf[j] = discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_buf; + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_size[j] = discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_size; + RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_bits_unused[j] = discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_bits_unused; + + } } - char srb1path[MAX_OPTNAME_SIZE*2 + 8]; - sprintf(srb1path,"%s.%s",enbpath,ENB_CONFIG_STRING_SRB1); - int npar = config_get( SRB1Params,sizeof(SRB1Params)/sizeof(paramdef_t), srb1path); - if (npar == sizeof(SRB1Params)/sizeof(paramdef_t)) { - switch (srb1_max_retx_threshold) { - case 1: - rrc->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t1; - break; - - case 2: - rrc->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t2; - break; - - case 3: - rrc->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t3; - break; - - case 4: - rrc->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t4; - break; - - case 6: - rrc->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t6; - break; - - case 8: - rrc->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t8; - break; - - case 16: - rrc->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t16; - break; - - case 32: - rrc->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t32; - break; - - default: - AssertFatal (0, - "Bad config value when parsing eNB configuration file %s, enb %d srb1_max_retx_threshold %u!\n", - RC.config_file_name, i, srb1_max_retx_threshold); - } - - - switch (srb1_poll_pdu) { - case 4: - rrc->srb1_poll_pdu = PollPDU_p4; - break; - - case 8: - rrc->srb1_poll_pdu = PollPDU_p8; - break; - - case 16: - rrc->srb1_poll_pdu = PollPDU_p16; - break; - - case 32: - rrc->srb1_poll_pdu = PollPDU_p32; - break; - - case 64: - rrc->srb1_poll_pdu = PollPDU_p64; - break; - - case 128: - rrc->srb1_poll_pdu = PollPDU_p128; - break; - - case 256: - rrc->srb1_poll_pdu = PollPDU_p256; - break; - - default: - if (srb1_poll_pdu >= 10000) - rrc->srb1_poll_pdu = PollPDU_pInfinity; - else + if (rrc->node_type == ngran_eNB_CU || rrc->node_type == ngran_ng_eNB_CU) { + char srb1path[MAX_OPTNAME_SIZE*2 + 8]; + sprintf(srb1path,"%s.%s",enbpath,ENB_CONFIG_STRING_SRB1); + int npar = config_get( SRB1Params,sizeof(SRB1Params)/sizeof(paramdef_t), srb1path); + if (npar == sizeof(SRB1Params)/sizeof(paramdef_t)) { + switch (srb1_max_retx_threshold) { + case 1: + rrc->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t1; + break; + + case 2: + rrc->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t2; + break; + + case 3: + rrc->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t3; + break; + + case 4: + rrc->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t4; + break; + + case 6: + rrc->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t6; + break; + + case 8: + rrc->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t8; + break; + + case 16: + rrc->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t16; + break; + + case 32: + rrc->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t32; + break; + + default: AssertFatal (0, - "Bad config value when parsing eNB configuration file %s, enb %d srb1_poll_pdu %u!\n", - RC.config_file_name, i, srb1_poll_pdu); - } - - rrc->srb1_poll_byte = srb1_poll_byte; - - switch (srb1_poll_byte) { - case 25: - rrc->srb1_poll_byte = PollByte_kB25; - break; - - case 50: - rrc->srb1_poll_byte = PollByte_kB50; - break; - - case 75: - rrc->srb1_poll_byte = PollByte_kB75; - break; - - case 100: - rrc->srb1_poll_byte = PollByte_kB100; - break; - - case 125: - rrc->srb1_poll_byte = PollByte_kB125; - break; - - case 250: - rrc->srb1_poll_byte = PollByte_kB250; - break; - - case 375: - rrc->srb1_poll_byte = PollByte_kB375; - break; - - case 500: - rrc->srb1_poll_byte = PollByte_kB500; - break; - - case 750: - rrc->srb1_poll_byte = PollByte_kB750; - break; - - case 1000: - rrc->srb1_poll_byte = PollByte_kB1000; - break; - - case 1250: - rrc->srb1_poll_byte = PollByte_kB1250; - break; - - case 1500: - rrc->srb1_poll_byte = PollByte_kB1500; - break; - - case 2000: - rrc->srb1_poll_byte = PollByte_kB2000; - break; - - case 3000: - rrc->srb1_poll_byte = PollByte_kB3000; - break; + "Bad config value when parsing eNB configuration file %s, enb %d srb1_max_retx_threshold %u!\n", + RC.config_file_name, i, srb1_max_retx_threshold); + } + + + switch (srb1_poll_pdu) { + case 4: + rrc->srb1_poll_pdu = PollPDU_p4; + break; + + case 8: + rrc->srb1_poll_pdu = PollPDU_p8; + break; + + case 16: + rrc->srb1_poll_pdu = PollPDU_p16; + break; + + case 32: + rrc->srb1_poll_pdu = PollPDU_p32; + break; + + case 64: + rrc->srb1_poll_pdu = PollPDU_p64; + break; + + case 128: + rrc->srb1_poll_pdu = PollPDU_p128; + break; + + case 256: + rrc->srb1_poll_pdu = PollPDU_p256; + break; + + default: + if (srb1_poll_pdu >= 10000) + rrc->srb1_poll_pdu = PollPDU_pInfinity; + else + AssertFatal (0, + "Bad config value when parsing eNB configuration file %s, enb %d srb1_poll_pdu %u!\n", + RC.config_file_name, i, srb1_poll_pdu); + } + + rrc->srb1_poll_byte = srb1_poll_byte; + + switch (srb1_poll_byte) { + case 25: + rrc->srb1_poll_byte = PollByte_kB25; + break; + + case 50: + rrc->srb1_poll_byte = PollByte_kB50; + break; + + case 75: + rrc->srb1_poll_byte = PollByte_kB75; + break; + + case 100: + rrc->srb1_poll_byte = PollByte_kB100; + break; + + case 125: + rrc->srb1_poll_byte = PollByte_kB125; + break; + + case 250: + rrc->srb1_poll_byte = PollByte_kB250; + break; + + case 375: + rrc->srb1_poll_byte = PollByte_kB375; + break; + + case 500: + rrc->srb1_poll_byte = PollByte_kB500; + break; + + case 750: + rrc->srb1_poll_byte = PollByte_kB750; + break; - default: - if (srb1_poll_byte >= 10000) - rrc->srb1_poll_byte = PollByte_kBinfinity; - else + case 1000: + rrc->srb1_poll_byte = PollByte_kB1000; + break; + + case 1250: + rrc->srb1_poll_byte = PollByte_kB1250; + break; + + case 1500: + rrc->srb1_poll_byte = PollByte_kB1500; + break; + + case 2000: + rrc->srb1_poll_byte = PollByte_kB2000; + break; + + case 3000: + rrc->srb1_poll_byte = PollByte_kB3000; + break; + + default: + if (srb1_poll_byte >= 10000) + rrc->srb1_poll_byte = PollByte_kBinfinity; + else + AssertFatal (0, + "Bad config value when parsing eNB configuration file %s, enb %d srb1_poll_byte %u!\n", + RC.config_file_name, i, srb1_poll_byte); + } + + if (srb1_timer_poll_retransmit <= 250) { + rrc->srb1_timer_poll_retransmit = (srb1_timer_poll_retransmit - 5)/5; + } else if (srb1_timer_poll_retransmit <= 500) { + rrc->srb1_timer_poll_retransmit = (srb1_timer_poll_retransmit - 300)/50 + 50; + } else { AssertFatal (0, - "Bad config value when parsing eNB configuration file %s, enb %d srb1_poll_byte %u!\n", - RC.config_file_name, i, srb1_poll_byte); - } - - if (srb1_timer_poll_retransmit <= 250) { - rrc->srb1_timer_poll_retransmit = (srb1_timer_poll_retransmit - 5)/5; - } else if (srb1_timer_poll_retransmit <= 500) { - rrc->srb1_timer_poll_retransmit = (srb1_timer_poll_retransmit - 300)/50 + 50; + "Bad config value when parsing eNB configuration file %s, enb %d srb1_timer_poll_retransmit %u!\n", + RC.config_file_name, i, srb1_timer_poll_retransmit); + } + + if (srb1_timer_status_prohibit <= 250) { + rrc->srb1_timer_status_prohibit = srb1_timer_status_prohibit/5; + } else if ((srb1_timer_poll_retransmit >= 300) && (srb1_timer_poll_retransmit <= 500)) { + rrc->srb1_timer_status_prohibit = (srb1_timer_status_prohibit - 300)/50 + 51; + } else { + AssertFatal (0, + "Bad config value when parsing eNB configuration file %s, enb %d srb1_timer_status_prohibit %u!\n", + RC.config_file_name, i, srb1_timer_status_prohibit); + } + + switch (srb1_timer_reordering) { + case 0: + rrc->srb1_timer_reordering = T_Reordering_ms0; + break; + + case 5: + rrc->srb1_timer_reordering = T_Reordering_ms5; + break; + + case 10: + rrc->srb1_timer_reordering = T_Reordering_ms10; + break; + + case 15: + rrc->srb1_timer_reordering = T_Reordering_ms15; + break; + + case 20: + rrc->srb1_timer_reordering = T_Reordering_ms20; + break; + + case 25: + rrc->srb1_timer_reordering = T_Reordering_ms25; + break; + + case 30: + rrc->srb1_timer_reordering = T_Reordering_ms30; + break; + + case 35: + rrc->srb1_timer_reordering = T_Reordering_ms35; + break; + + case 40: + rrc->srb1_timer_reordering = T_Reordering_ms40; + break; + + case 45: + rrc->srb1_timer_reordering = T_Reordering_ms45; + break; + + case 50: + rrc->srb1_timer_reordering = T_Reordering_ms50; + break; + + case 55: + rrc->srb1_timer_reordering = T_Reordering_ms55; + break; + + case 60: + rrc->srb1_timer_reordering = T_Reordering_ms60; + break; + + case 65: + rrc->srb1_timer_reordering = T_Reordering_ms65; + break; + + case 70: + rrc->srb1_timer_reordering = T_Reordering_ms70; + break; + + case 75: + rrc->srb1_timer_reordering = T_Reordering_ms75; + break; + + case 80: + rrc->srb1_timer_reordering = T_Reordering_ms80; + break; + + case 85: + rrc->srb1_timer_reordering = T_Reordering_ms85; + break; + + case 90: + rrc->srb1_timer_reordering = T_Reordering_ms90; + break; + + case 95: + rrc->srb1_timer_reordering = T_Reordering_ms95; + break; + + case 100: + rrc->srb1_timer_reordering = T_Reordering_ms100; + break; + + case 110: + rrc->srb1_timer_reordering = T_Reordering_ms110; + break; + + case 120: + rrc->srb1_timer_reordering = T_Reordering_ms120; + break; + + case 130: + rrc->srb1_timer_reordering = T_Reordering_ms130; + break; + + case 140: + rrc->srb1_timer_reordering = T_Reordering_ms140; + break; + + case 150: + rrc->srb1_timer_reordering = T_Reordering_ms150; + break; + + case 160: + rrc->srb1_timer_reordering = T_Reordering_ms160; + break; + + case 170: + rrc->srb1_timer_reordering = T_Reordering_ms170; + break; + + case 180: + rrc->srb1_timer_reordering = T_Reordering_ms180; + break; + + case 190: + rrc->srb1_timer_reordering = T_Reordering_ms190; + break; + + case 200: + rrc->srb1_timer_reordering = T_Reordering_ms200; + break; + + default: + AssertFatal (0, + "Bad config value when parsing eNB configuration file %s, enb %d srb1_timer_reordering %u!\n", + RC.config_file_name, i, srb1_timer_reordering); + } + } else { - AssertFatal (0, - "Bad config value when parsing eNB configuration file %s, enb %d srb1_timer_poll_retransmit %u!\n", - RC.config_file_name, i, srb1_timer_poll_retransmit); + rrc->srb1_timer_poll_retransmit = T_PollRetransmit_ms80; + rrc->srb1_timer_reordering = T_Reordering_ms35; + rrc->srb1_timer_status_prohibit = T_StatusProhibit_ms0; + rrc->srb1_poll_pdu = PollPDU_p4; + rrc->srb1_poll_byte = PollByte_kBinfinity; + rrc->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t8; } - - if (srb1_timer_status_prohibit <= 250) { - rrc->srb1_timer_status_prohibit = srb1_timer_status_prohibit/5; - } else if ((srb1_timer_poll_retransmit >= 300) && (srb1_timer_poll_retransmit <= 500)) { - rrc->srb1_timer_status_prohibit = (srb1_timer_status_prohibit - 300)/50 + 51; - } else { - AssertFatal (0, - "Bad config value when parsing eNB configuration file %s, enb %d srb1_timer_status_prohibit %u!\n", - RC.config_file_name, i, srb1_timer_status_prohibit); + + /* + // Network Controller + subsetting = config_setting_get_member (setting_enb, ENB_CONFIG_STRING_NETWORK_CONTROLLER_CONFIG); + + if (subsetting != NULL) { + if ( ( + config_setting_lookup_string( subsetting, ENB_CONFIG_STRING_FLEXRAN_AGENT_INTERFACE_NAME, + (const char **)&flexran_agent_interface_name) + && config_setting_lookup_string( subsetting, ENB_CONFIG_STRING_FLEXRAN_AGENT_IPV4_ADDRESS, + (const char **)&flexran_agent_ipv4_address) + && config_setting_lookup_int(subsetting, ENB_CONFIG_STRING_FLEXRAN_AGENT_PORT, + &flexran_agent_port) + && config_setting_lookup_string( subsetting, ENB_CONFIG_STRING_FLEXRAN_AGENT_CACHE, + (const char **)&flexran_agent_cache) + ) + ) { + enb_properties_loc.properties[enb_properties_loc_index]->flexran_agent_interface_name = strdup(flexran_agent_interface_name); + cidr = flexran_agent_ipv4_address; + address = strtok(cidr, "/"); + //enb_properties_loc.properties[enb_properties_loc_index]->flexran_agent_ipv4_address = strdup(address); + if (address) { + IPV4_STR_ADDR_TO_INT_NWBO (address, enb_properties_loc.properties[enb_properties_loc_index]->flexran_agent_ipv4_address, "BAD IP ADDRESS FORMAT FOR eNB Agent !\n" ); } - - switch (srb1_timer_reordering) { - case 0: - rrc->srb1_timer_reordering = T_Reordering_ms0; - break; - - case 5: - rrc->srb1_timer_reordering = T_Reordering_ms5; - break; - - case 10: - rrc->srb1_timer_reordering = T_Reordering_ms10; - break; - - case 15: - rrc->srb1_timer_reordering = T_Reordering_ms15; - break; - - case 20: - rrc->srb1_timer_reordering = T_Reordering_ms20; - break; - - case 25: - rrc->srb1_timer_reordering = T_Reordering_ms25; - break; - - case 30: - rrc->srb1_timer_reordering = T_Reordering_ms30; - break; - - case 35: - rrc->srb1_timer_reordering = T_Reordering_ms35; - break; - - case 40: - rrc->srb1_timer_reordering = T_Reordering_ms40; - break; - - case 45: - rrc->srb1_timer_reordering = T_Reordering_ms45; - break; - - case 50: - rrc->srb1_timer_reordering = T_Reordering_ms50; - break; - - case 55: - rrc->srb1_timer_reordering = T_Reordering_ms55; - break; - - case 60: - rrc->srb1_timer_reordering = T_Reordering_ms60; - break; - - case 65: - rrc->srb1_timer_reordering = T_Reordering_ms65; - break; - - case 70: - rrc->srb1_timer_reordering = T_Reordering_ms70; - break; - - case 75: - rrc->srb1_timer_reordering = T_Reordering_ms75; - break; - - case 80: - rrc->srb1_timer_reordering = T_Reordering_ms80; - break; - - case 85: - rrc->srb1_timer_reordering = T_Reordering_ms85; - break; - - case 90: - rrc->srb1_timer_reordering = T_Reordering_ms90; - break; - - case 95: - rrc->srb1_timer_reordering = T_Reordering_ms95; - break; - - case 100: - rrc->srb1_timer_reordering = T_Reordering_ms100; - break; - - case 110: - rrc->srb1_timer_reordering = T_Reordering_ms110; - break; - - case 120: - rrc->srb1_timer_reordering = T_Reordering_ms120; - break; - - case 130: - rrc->srb1_timer_reordering = T_Reordering_ms130; - break; - - case 140: - rrc->srb1_timer_reordering = T_Reordering_ms140; - break; - - case 150: - rrc->srb1_timer_reordering = T_Reordering_ms150; - break; - - case 160: - rrc->srb1_timer_reordering = T_Reordering_ms160; - break; - - case 170: - rrc->srb1_timer_reordering = T_Reordering_ms170; - break; - - case 180: - rrc->srb1_timer_reordering = T_Reordering_ms180; - break; - - case 190: - rrc->srb1_timer_reordering = T_Reordering_ms190; - break; - - case 200: - rrc->srb1_timer_reordering = T_Reordering_ms200; - break; - - default: - AssertFatal (0, - "Bad config value when parsing eNB configuration file %s, enb %d srb1_timer_reordering %u!\n", - RC.config_file_name, i, srb1_timer_reordering); + + enb_properties_loc.properties[enb_properties_loc_index]->flexran_agent_port = flexran_agent_port; + enb_properties_loc.properties[enb_properties_loc_index]->flexran_agent_cache = strdup(flexran_agent_cache); } - - } else { - rrc->srb1_timer_poll_retransmit = T_PollRetransmit_ms80; - rrc->srb1_timer_reordering = T_Reordering_ms35; - rrc->srb1_timer_status_prohibit = T_StatusProhibit_ms0; - rrc->srb1_poll_pdu = PollPDU_p4; - rrc->srb1_poll_byte = PollByte_kBinfinity; - rrc->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t8; - } - - /* - // Network Controller - subsetting = config_setting_get_member (setting_enb, ENB_CONFIG_STRING_NETWORK_CONTROLLER_CONFIG); - - if (subsetting != NULL) { - if ( ( - config_setting_lookup_string( subsetting, ENB_CONFIG_STRING_FLEXRAN_AGENT_INTERFACE_NAME, - (const char **)&flexran_agent_interface_name) - && config_setting_lookup_string( subsetting, ENB_CONFIG_STRING_FLEXRAN_AGENT_IPV4_ADDRESS, - (const char **)&flexran_agent_ipv4_address) - && config_setting_lookup_int(subsetting, ENB_CONFIG_STRING_FLEXRAN_AGENT_PORT, - &flexran_agent_port) - && config_setting_lookup_string( subsetting, ENB_CONFIG_STRING_FLEXRAN_AGENT_CACHE, - (const char **)&flexran_agent_cache) - ) - ) { - enb_properties_loc.properties[enb_properties_loc_index]->flexran_agent_interface_name = strdup(flexran_agent_interface_name); - cidr = flexran_agent_ipv4_address; - address = strtok(cidr, "/"); - //enb_properties_loc.properties[enb_properties_loc_index]->flexran_agent_ipv4_address = strdup(address); - if (address) { - IPV4_STR_ADDR_TO_INT_NWBO (address, enb_properties_loc.properties[enb_properties_loc_index]->flexran_agent_ipv4_address, "BAD IP ADDRESS FORMAT FOR eNB Agent !\n" ); - } - - enb_properties_loc.properties[enb_properties_loc_index]->flexran_agent_port = flexran_agent_port; - enb_properties_loc.properties[enb_properties_loc_index]->flexran_agent_cache = strdup(flexran_agent_cache); } + */ + break; } - */ - break; + } } - - } + } } return 0; } @@ -2350,6 +2340,131 @@ int RCconfig_gtpu(void ) { return 0; } +int RCconfig_CU_F1(uint32_t i) { + + AssertFatal(1==0,"Shouldn't get here yet\n"); +} + +int RCconfig_DU_F1(MessageDef *msg_p, uint32_t i) { + + int k; + + paramdef_t ENBSParams[] = ENBSPARAMS_DESC; + + paramdef_t ENBParams[] = ENBPARAMS_DESC; + paramlist_def_t ENBParamList = {ENB_CONFIG_STRING_ENB_LIST,NULL,0}; + + config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL); + int num_enbs = ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt; + AssertFatal (i<num_enbs, + "Failed to parse config file no %ith element in %s \n",i, ENB_CONFIG_STRING_ACTIVE_ENBS); + + if (num_enbs>0) { + // Output a list of all eNBs. + config_getlist( &ENBParamList,ENBParams,sizeof(ENBParams)/sizeof(paramdef_t),NULL); + AssertFatal(ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr != NULL, + "eNB id %d is not defined in configuration file\n",i); + for (k=0; k <num_enbs ; k++) { + if (strcmp(ENBSParams[ENB_ACTIVE_ENBS_IDX].strlistptr[k], *(ENBParamList.paramarray[i][ENB_ENB_NAME_IDX].strptr) )== 0) { + + paramdef_t SCTPParams[] = SCTPPARAMS_DESC; + paramdef_t NETParams[] = NETPARAMS_DESC; + char aprefix[MAX_OPTNAME_SIZE*2 + 8]; + + F1AP_SETUP_REQ (msg_p).gNB_DU_id = *(ENBParamList.paramarray[0][ENB_ENB_ID_IDX].uptr); + LOG_I(ENB_APP,"F1AP: gNB_DU_id[%d] %d\n",k,F1AP_SETUP_REQ (msg_p).gNB_DU_id); + + F1AP_SETUP_REQ (msg_p).gNB_DU_name = strdup(*(ENBParamList.paramarray[0][ENB_ENB_NAME_IDX].strptr)); + LOG_I(ENB_APP,"F1AP: gNB_DU_name[%d] %s\n",k,F1AP_SETUP_REQ (msg_p).gNB_DU_name); + + F1AP_SETUP_REQ (msg_p).tac[k] = (uint16_t)atoi(*(ENBParamList.paramarray[i][ENB_TRACKING_AREA_CODE_IDX].strptr)); + LOG_I(ENB_APP,"F1AP: tac[%d] %d\n",k,F1AP_SETUP_REQ (msg_p).tac[k]); + + F1AP_SETUP_REQ (msg_p).mcc[k] = (uint16_t)atoi(*(ENBParamList.paramarray[i][ENB_MOBILE_COUNTRY_CODE_IDX].strptr)); + LOG_I(ENB_APP,"F1AP: mcc[%d] %d\n",k,F1AP_SETUP_REQ (msg_p).mcc[k]); + + F1AP_SETUP_REQ (msg_p).mnc[k] = (uint16_t)atoi(*(ENBParamList.paramarray[i][ENB_MOBILE_NETWORK_CODE_IDX].strptr)); + LOG_I(ENB_APP,"F1AP: mnc[%d] %d\n",k,F1AP_SETUP_REQ (msg_p).mnc[k]); + + F1AP_SETUP_REQ (msg_p).mnc_digit_length[k] = strlen(*(ENBParamList.paramarray[i][ENB_MOBILE_NETWORK_CODE_IDX].strptr)); + LOG_I(ENB_APP,"F1AP: mnc_digit_length[%d] %d\n",k,F1AP_SETUP_REQ (msg_p).mnc_digit_length[k]); + + AssertFatal((F1AP_SETUP_REQ (msg_p).mnc_digit_length[k] == 2) || + (F1AP_SETUP_REQ (msg_p).mnc_digit_length[k] == 3), + "BAD MNC DIGIT LENGTH %d", + F1AP_SETUP_REQ (msg_p).mnc_digit_length[k]); + + LOG_I(ENB_APP,"F1AP: CU_ip4_address %s\n",RC.mac[k]->eth_params_n.remote_addr); + LOG_I(ENB_APP,"FIAP: CU_ip4_address %p, strlen %d\n",F1AP_SETUP_REQ (msg_p).CU_ipv4_address,(int)strlen(RC.mac[k]->eth_params_n.remote_addr)); + + strcpy(F1AP_SETUP_REQ (msg_p).CU_ipv4_address, + RC.mac[k]->eth_params_n.remote_addr); + //strcpy(F1AP_SETUP_REQ (msg_p).CU_ip_address[l].ipv6_address,*(F1ParamList.paramarray[l][ENB_CU_IPV6_ADDRESS_IDX].strptr)); + F1AP_SETUP_REQ (msg_p).CU_port = RC.mac[k]->eth_params_n.remote_portc; + + sprintf(aprefix,"%s.[%i].%s",ENB_CONFIG_STRING_ENB_LIST,k,ENB_CONFIG_STRING_SCTP_CONFIG); + config_get( SCTPParams,sizeof(SCTPParams)/sizeof(paramdef_t),aprefix); + F1AP_SETUP_REQ (msg_p).sctp_in_streams = (uint16_t)*(SCTPParams[ENB_SCTP_INSTREAMS_IDX].uptr); + F1AP_SETUP_REQ (msg_p).sctp_out_streams = (uint16_t)*(SCTPParams[ENB_SCTP_OUTSTREAMS_IDX].uptr); + + eNB_RRC_INST *rrc = RC.rrc[k]; + // wait until RRC cell information is configured + int cell_info_configured=0; + do { + LOG_I(ENB_APP,"ngran_eNB_DU: Waiting for basic cell configuration\n"); + usleep(100000); + pthread_mutex_lock(&rrc->cell_info_mutex); + cell_info_configured = rrc->cell_info_configured; + pthread_mutex_unlock(&rrc->cell_info_mutex); + } while (cell_info_configured ==0); + + + F1AP_SETUP_REQ (msg_p).nr_pci[k] = rrc->carrier[0].physCellId; + F1AP_SETUP_REQ (msg_p).nr_cellid[k] = 0; + F1AP_SETUP_REQ (msg_p).num_ssi[k] = 0; + if (rrc->carrier[0].sib1->tdd_Config) { + + LOG_I(ENB_APP,"ngran_DU: Configuring Cell %d for TDD\n",k); + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].tdd.nr_arfcn = freq_to_arfcn10(rrc->carrier[0].sib1->freqBandIndicator, + rrc->carrier[0].dl_CarrierFreq); + // For LTE use scs field to carry prefix type and number of antennas + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].tdd.scs = (rrc->carrier[0].Ncp<<2)+rrc->carrier[0].p_eNB;; + // use nrb field to hold LTE N_RB_DL (0...5) + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].tdd.nrb = rrc->carrier[0].mib.message.dl_Bandwidth; + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].tdd.nrb = rrc->carrier[0].mib.message.dl_Bandwidth; + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].tdd.num_frequency_bands = 1; + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].tdd.nr_band[0] = rrc->carrier[0].sib1->freqBandIndicator; + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.sul_active = 0; + } + else { + LOG_I(ENB_APP,"ngran_DU: Configuring Cell %d for FDD\n",k); + + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.dl_nr_arfcn = freq_to_arfcn10(rrc->carrier[0].sib1->freqBandIndicator, + rrc->carrier[0].dl_CarrierFreq); + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.ul_nr_arfcn = F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.dl_nr_arfcn; + // For LTE use scs field to carry prefix type and number of antennas + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.dl_scs = (rrc->carrier[0].Ncp<<2)+rrc->carrier[0].p_eNB;; + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.ul_scs = rrc->carrier[0].Ncp; + // use nrb field to hold LTE N_RB_DL (0...5) + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.ul_nrb = rrc->carrier[0].mib.message.dl_Bandwidth; + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.ul_nrb = rrc->carrier[0].mib.message.dl_Bandwidth; + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.num_frequency_bands = 1; + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.nr_band[0] = rrc->carrier[0].sib1->freqBandIndicator; + F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.sul_active = 0; + } + F1AP_SETUP_REQ (msg_p).measurement_timing_information[k] = NULL; + F1AP_SETUP_REQ (msg_p).ranac[k] = 0; + F1AP_SETUP_REQ (msg_p).mib[k] = rrc->carrier[0].MIB; + F1AP_SETUP_REQ (msg_p).sib1[k] = rrc->carrier[0].SIB1; + + break; + } + } + } + + return 0; + +} int RCconfig_S1(MessageDef *msg_p, uint32_t i) { @@ -2556,7 +2671,7 @@ void RCConfig(void) { char aprefix[MAX_OPTNAME_SIZE*2 + 8]; - RCconfig_cudu(); + // RCconfig_cudu(); /* get global parameters, defined outside any section in the config file */ @@ -2579,6 +2694,9 @@ void RCConfig(void) { config_getlist( &MACRLCParamList,NULL,0, NULL); RC.nb_macrlc_inst = MACRLCParamList.numelt; + AssertFatal(RC.nb_macrlc_inst <= MAX_MAC_INST, + "Too many macrlc instances %d\n",RC.nb_macrlc_inst); + // Get num L1 instances config_getlist( &L1ParamList,NULL,0, NULL); RC.nb_L1_inst = L1ParamList.numelt; diff --git a/openair2/ENB_APP/enb_config.h b/openair2/ENB_APP/enb_config.h index 3e645b458c..33076c6e3f 100644 --- a/openair2/ENB_APP/enb_config.h +++ b/openair2/ENB_APP/enb_config.h @@ -40,6 +40,7 @@ #include "PHY/impl_defs_lte.h" #include "PHY/defs_eNB.h" #include "s1ap_messages_types.h" +#include "f1ap_messages_types.h" #ifdef CMAKER #include "SystemInformationBlockType2.h" #include "rrc_messages_types.h" @@ -134,7 +135,7 @@ typedef struct ru_config_s { extern void RCconfig_RU(void); extern void RCconfig_flexran(void); extern void RCconfig_L1(void); -extern void RCconfig_macrlc(void); +extern void RCconfig_macrlc(int*); extern void UE_config_stub_pnf(void); extern int RCconfig_gtpu(void ); extern void RCConfig(void); @@ -144,6 +145,9 @@ void ru_config_display(void); int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc); int RCconfig_S1(MessageDef *msg_p, uint32_t i); +int RCconfig_DU_F1(MessageDef *msg_p, uint32_t i); +int RCconfig_CU_F1(uint32_t i); + void RCconfig_cudu(void); cudu_params_t *get_cudu_config(void); diff --git a/openair2/F1AP/DU_F1AP.c b/openair2/F1AP/DU_F1AP.c index 4d9f0cc5f8..a610d6ed55 100644 --- a/openair2/F1AP/DU_F1AP.c +++ b/openair2/F1AP/DU_F1AP.c @@ -36,6 +36,9 @@ #include "platform_types.h" #include "log.h" + + + /* This structure describes association of a DU to a CU */ typedef struct f1ap_info { diff --git a/openair2/F1AP/f1ap_common.h b/openair2/F1AP/f1ap_common.h index 884e3dcfe7..22dc981565 100644 --- a/openair2/F1AP/f1ap_common.h +++ b/openair2/F1AP/f1ap_common.h @@ -394,6 +394,14 @@ extern int asn1_xer_print; //Forward declaration //struct f1ap_message_s; +typedef struct net_ip_address_s { + unsigned ipv4:1; + unsigned ipv6:1; + char ipv4_address[16]; + char ipv6_address[46]; +} net_ip_address_t; + + typedef struct f1ap_message_s { F1AP_ProtocolIE_ID_t id; F1AP_Criticality_t criticality; diff --git a/openair2/LAYER2/MAC/mac.h b/openair2/LAYER2/MAC/mac.h index d9e914f087..7e43c86d14 100644 --- a/openair2/LAYER2/MAC/mac.h +++ b/openair2/LAYER2/MAC/mac.h @@ -82,6 +82,7 @@ * @{ */ +#define MAX_MAC_INST 16 #define BCCH_PAYLOAD_SIZE_MAX 128 #define CCCH_PAYLOAD_SIZE_MAX 128 #define PCCH_PAYLOAD_SIZE_MAX 128 diff --git a/openair2/LAYER2/MAC/main.c b/openair2/LAYER2/MAC/main.c index da2d977875..1532bbd7c2 100644 --- a/openair2/LAYER2/MAC/main.c +++ b/openair2/LAYER2/MAC/main.c @@ -104,9 +104,9 @@ void mac_top_init_eNB(void) "Could not initialize RLC layer\n"); // These should be out of here later - pdcp_layer_init(); + //pdcp_layer_init(); - rrc_init_global_param(); + // rrc_init_global_param(); } else { RC.mac = NULL; diff --git a/openair2/RRC/LTE/rrc_defs.h b/openair2/RRC/LTE/rrc_defs.h index e21cb9255a..9767cc6ee9 100644 --- a/openair2/RRC/LTE/rrc_defs.h +++ b/openair2/RRC/LTE/rrc_defs.h @@ -36,6 +36,7 @@ #include <string.h> #include "collection/tree.h" +#include "common/ngran_types.h" #include "rrc_types.h" //#include "PHY/phy_defs.h" #include "LAYER2/RLC/rlc.h" @@ -673,8 +674,10 @@ typedef struct { uint32_t sizeof_paging[MAX_MOBILES_PER_ENB]; } rrc_eNB_carrier_data_t; + typedef struct eNB_RRC_INST_s { /// southbound midhaul configuration + ngran_node_t node_type; eth_params_t eth_params_s; rrc_eNB_carrier_data_t carrier[MAX_NUM_CCs]; uid_allocator_t uid_allocator; // for rrc_ue_head @@ -715,6 +718,8 @@ typedef struct eNB_RRC_INST_s { int srb1_timer_reordering; int srb1_timer_status_prohibit; int srs_enable[MAX_NUM_CCs]; + int cell_info_configured; + pthread_mutex_t cell_info_mutex; } eNB_RRC_INST; #define MAX_UE_CAPABILITY_SIZE 255 diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c index b0b444084c..bed228a499 100644 --- a/openair2/RRC/LTE/rrc_eNB.c +++ b/openair2/RRC/LTE/rrc_eNB.c @@ -156,273 +156,338 @@ init_SI( #endif LOG_D(RRC,"%s()\n\n\n\n",__FUNCTION__); + eNB_RRC_INST *rrc = RC.rrc[ctxt_pP->module_id]; + rrc_eNB_carrier_data_t *carrier=&rrc->carrier[CC_id]; - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].MIB = (uint8_t*) malloc16(4); - // copy basic parameters - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].physCellId = configuration->Nid_cell[CC_id]; - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].p_eNB = configuration->nb_antenna_ports[CC_id]; - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Ncp = configuration->prefix_type[CC_id]; - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].dl_CarrierFreq = configuration->downlink_frequency[CC_id]; - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].ul_CarrierFreq = configuration->downlink_frequency[CC_id]+ configuration->uplink_frequency_offset[CC_id]; + carrier->MIB = (uint8_t*) malloc16(4); + carrier->sizeof_SIB1 = 0; + carrier->sizeof_SIB23 = 0; + carrier->SIB1 = (uint8_t*) malloc16(32); + + AssertFatal(carrier->SIB1!=NULL,PROTOCOL_RRC_CTXT_FMT" init_SI: FATAL, no memory for SIB1 allocated\n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP)); + + if (rrc->node_type != ngran_eNB_CU && rrc->node_type != ngran_ng_eNB_CU) { + // copy basic Cell parameters + carrier->physCellId = configuration->Nid_cell[CC_id]; + carrier->p_eNB = configuration->nb_antenna_ports[CC_id]; + carrier->Ncp = configuration->prefix_type[CC_id]; + carrier->dl_CarrierFreq = configuration->downlink_frequency[CC_id]; + carrier->ul_CarrierFreq = configuration->downlink_frequency[CC_id]+ configuration->uplink_frequency_offset[CC_id]; #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].pbch_repetition = configuration->pbch_repetition[CC_id]; + carrier->pbch_repetition = configuration->pbch_repetition[CC_id]; #endif - LOG_I(RRC, "Configuring MIB (N_RB_DL %d,phich_Resource %d,phich_Duration %d)\n", - (int)configuration->N_RB_DL[CC_id], - (int)configuration->phich_resource[CC_id], - (int)configuration->phich_duration[CC_id]); - do_MIB(&RC.rrc[ctxt_pP->module_id]->carrier[CC_id], + + LOG_I(RRC, "Configuring MIB (N_RB_DL %d,phich_Resource %d,phich_Duration %d)\n", + (int)configuration->N_RB_DL[CC_id], + (int)configuration->phich_resource[CC_id], + (int)configuration->phich_duration[CC_id]); + do_MIB(&rrc->carrier[CC_id], #ifdef ENABLE_ITTI - configuration->N_RB_DL[CC_id], - configuration->phich_resource[CC_id], - configuration->phich_duration[CC_id] + configuration->N_RB_DL[CC_id], + configuration->phich_resource[CC_id], + configuration->phich_duration[CC_id] #else - 50,0,0 + 50,0,0 #endif - ,0); - - - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1 = 0; - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB23 = 0; - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].SIB1 = (uint8_t*) malloc16(32); - - AssertFatal(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].SIB1!=NULL,PROTOCOL_RRC_CTXT_FMT" init_SI: FATAL, no memory for SIB1 allocated\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP)); - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1 = do_SIB1(&RC.rrc[ctxt_pP->module_id]->carrier[CC_id],ctxt_pP->module_id,CC_id + ,0); + + + carrier->sizeof_SIB1 = do_SIB1(&rrc->carrier[CC_id],ctxt_pP->module_id,CC_id #if defined(ENABLE_ITTI) - , configuration + , configuration #endif - ); - - AssertFatal(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1 != 255,"FATAL, RC.rrc[enb_mod_idP].carrier[CC_id].sizeof_SIB1 == 255"); + ); + + AssertFatal(carrier->sizeof_SIB1 != 255,"FATAL, RC.rrc[enb_mod_idP].carrier[CC_id].sizeof_SIB1 == 255"); - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].SIB23 = (uint8_t*) malloc16(64); - AssertFatal(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].SIB23!=NULL,"cannot allocate memory for SIB"); - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB23 = do_SIB23( - ctxt_pP->module_id, - - CC_id + } + else if (rrc->node_type != ngran_eNB_DU) { + + carrier->SIB23 = (uint8_t*) malloc16(64); + AssertFatal(carrier->SIB23!=NULL,"cannot allocate memory for SIB"); + carrier->sizeof_SIB23 = do_SIB23( + ctxt_pP->module_id, + + CC_id #if defined(ENABLE_ITTI) - , configuration + , configuration #endif - ); - - AssertFatal(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB23 != 255,"FATAL, RC.rrc[mod].carrier[CC_id].sizeof_SIB23 == 255"); - - - LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" SIB2/3 Contents (partial)\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP)); - LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.n_SB = %ld\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. - pusch_ConfigBasic.n_SB); - LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.hoppingMode = %ld\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. - pusch_ConfigBasic.hoppingMode); - LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.pusch_HoppingOffset = %ld\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. - pusch_ConfigBasic.pusch_HoppingOffset); - LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.enable64QAM = %d\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - (int)RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. - pusch_ConfigBasic.enable64QAM); - LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.groupHoppingEnabled = %d\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - (int)RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. - ul_ReferenceSignalsPUSCH.groupHoppingEnabled); - LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.groupAssignmentPUSCH = %ld\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. - ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH); - LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.sequenceHoppingEnabled = %d\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - (int)RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. - ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled); - LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.cyclicShift = %ld\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. - ul_ReferenceSignalsPUSCH.cyclicShift); - + ); + + AssertFatal(carrier->sizeof_SIB23 != 255,"FATAL, RC.rrc[mod].carrier[CC_id].sizeof_SIB23 == 255"); + + + LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" SIB2/3 Contents (partial)\n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP)); + LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.n_SB = %ld\n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon. + pusch_ConfigBasic.n_SB); + LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.hoppingMode = %ld\n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon. + pusch_ConfigBasic.hoppingMode); + LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.pusch_HoppingOffset = %ld\n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon. + pusch_ConfigBasic.pusch_HoppingOffset); + LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.enable64QAM = %d\n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + (int)carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon. + pusch_ConfigBasic.enable64QAM); + LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.groupHoppingEnabled = %d\n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + (int)carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon. + ul_ReferenceSignalsPUSCH.groupHoppingEnabled); + LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.groupAssignmentPUSCH = %ld\n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon. + ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH); + LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.sequenceHoppingEnabled = %d\n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + (int)carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon. + ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled); + LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.cyclicShift = %ld\n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon. + ul_ReferenceSignalsPUSCH.cyclicShift); + #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) - - if (RC.rrc[ctxt_pP->module_id]->carrier[CC_id].MBMS_flag > 0) { - for (i = 0; i < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->mbsfn_SubframeConfigList->list.count; i++) { - // SIB 2 - // LOG_D(RRC, "[eNB %d] mbsfn_SubframeConfigList.list.count = %ld\n", enb_mod_idP, RC.rrc[enb_mod_idP].sib2->mbsfn_SubframeConfigList->list.count); - LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" SIB13 contents for MBSFN subframe allocation %d/%d(partial)\n", + + if (carrier->MBMS_flag > 0) { + for (i = 0; i < carrier->sib2->mbsfn_SubframeConfigList->list.count; i++) { + // SIB 2 + // LOG_D(RRC, "[eNB %d] mbsfn_SubframeConfigList.list.count = %ld\n", enb_mod_idP, RC.rrc[enb_mod_idP].sib2->mbsfn_SubframeConfigList->list.count); + LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" SIB13 contents for MBSFN subframe allocation %d/%d(partial)\n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + i, + carrier->sib2->mbsfn_SubframeConfigList->list.count); + LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" mbsfn_Subframe_pattern is = %x\n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + carrier->sib2->mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0] >> 0); + LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" radioframe_allocation_period = %ld (just index number, not the real value)\n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + carrier->sib2->mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationPeriod); // need to display the real value, using array of char (like in dumping SIB2) + LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" radioframe_allocation_offset = %ld\n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + carrier->sib2->mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationOffset); + } + +#if (RRC_VERSION >= MAKE_VERSION(9, 0, 0)) + // SIB13 + for (i = 0; i < carrier->sib13->mbsfn_AreaInfoList_r9.list.count; i++) { + LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" SIB13 contents for MBSFN sync area %d/%d (partial)\n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + i, + carrier->sib13->mbsfn_AreaInfoList_r9.list.count); + LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" MCCH Repetition Period: %ld (just index number, not real value)\n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + carrier->sib13->mbsfn_AreaInfoList_r9.list.array[i]->mcch_Config_r9.mcch_RepetitionPeriod_r9); + LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" MCCH Offset: %ld\n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + carrier->sib13->mbsfn_AreaInfoList_r9.list.array[i]->mcch_Config_r9.mcch_Offset_r9); + } +#endif + } + else memset((void*)&carrier->sib13,0,sizeof(carrier->sib13)); + + //TTN - SIB 18 + for (int j = 0; j < carrier->sib18->commConfig_r12->commRxPool_r12.list.count; j++) { + LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" Contents of SIB18 %d/%d \n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + j+1, + carrier->sib18->commConfig_r12->commRxPool_r12.list.count); + LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 rxPool_sc_CP_Len: %ld \n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_CP_Len_r12); + LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 sc_Period_r12: %ld \n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_Period_r12); + LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 data_CP_Len_r12: %ld \n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->data_CP_Len_r12); + LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 prb_Num_r12: %ld \n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - i, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->mbsfn_SubframeConfigList->list.count); - LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" mbsfn_Subframe_pattern is = %x\n", + carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_TF_ResourceConfig_r12.prb_Num_r12); + LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 prb_Start_r12: %ld \n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0] >> 0); - LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" radioframe_allocation_period = %ld (just index number, not the real value)\n", + carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_TF_ResourceConfig_r12.prb_Start_r12); + LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 prb_End_r12: %ld \n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationPeriod); // need to display the real value, using array of char (like in dumping SIB2) - LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" radioframe_allocation_offset = %ld\n", + carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_TF_ResourceConfig_r12.prb_End_r12); + LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 offsetIndicator: %ld \n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationOffset); + carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_TF_ResourceConfig_r12.offsetIndicator_r12.choice.small_r12); + LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 subframeBitmap_choice_bs_buf: %s \n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_TF_ResourceConfig_r12.subframeBitmap_r12.choice.bs16_r12.buf); + } - -#if (RRC_VERSION >= MAKE_VERSION(9, 0, 0)) - // SIB13 - for (i = 0; i < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib13->mbsfn_AreaInfoList_r9.list.count; i++) { - LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" SIB13 contents for MBSFN sync area %d/%d (partial)\n", + + //TTN - SIB 19 + for (int j = 0; j < carrier->sib19->discConfig_r12->discRxPool_r12.list.count; j++) { + LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" Contents of SIB19 %d/%d \n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + j+1, + carrier->sib19->discConfig_r12->discRxPool_r12.list.count); + LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 cp_Len_r12: %ld \n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->cp_Len_r12); + LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 discPeriod_r12: %ld \n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->discPeriod_r12); + LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 numRetx_r12: %ld \n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->numRetx_r12); + LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 numRepetition_r12: %ld \n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->numRepetition_r12); + LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 tf_ResourceConfig_r12 prb_Num_r12: %ld \n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->tf_ResourceConfig_r12.prb_Num_r12); + LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 tf_ResourceConfig_r12 prb_Start_r12: %ld \n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - i, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib13->mbsfn_AreaInfoList_r9.list.count); - LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" MCCH Repetition Period: %ld (just index number, not real value)\n", + carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->tf_ResourceConfig_r12.prb_Start_r12); + LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 tf_ResourceConfig_r12 prb_End_r12: %ld \n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib13->mbsfn_AreaInfoList_r9.list.array[i]->mcch_Config_r9.mcch_RepetitionPeriod_r9); - LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" MCCH Offset: %ld\n", + carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->tf_ResourceConfig_r12.prb_End_r12); + LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 tf_ResourceConfig_r12 offsetIndicator: %ld \n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib13->mbsfn_AreaInfoList_r9.list.array[i]->mcch_Config_r9.mcch_Offset_r9); + carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->tf_ResourceConfig_r12.offsetIndicator_r12.choice.small_r12); + LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 tf_ResourceConfig_r12 subframeBitmap_choice_bs_buf: %s \n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), + carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->tf_ResourceConfig_r12.subframeBitmap_r12.choice.bs16_r12.buf); + } + #endif } - else memset((void*)&RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib13,0,sizeof(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib13)); - - //TTN - SIB 18 - for (int j = 0; j < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib18->commConfig_r12->commRxPool_r12.list.count; j++) { - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" Contents of SIB18 %d/%d \n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - j+1, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib18->commConfig_r12->commRxPool_r12.list.count); - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 rxPool_sc_CP_Len: %ld \n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_CP_Len_r12); - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 sc_Period_r12: %ld \n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_Period_r12); - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 data_CP_Len_r12: %ld \n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib18->commConfig_r12->commRxPool_r12.list.array[j]->data_CP_Len_r12); - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 prb_Num_r12: %ld \n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_TF_ResourceConfig_r12.prb_Num_r12); - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 prb_Start_r12: %ld \n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_TF_ResourceConfig_r12.prb_Start_r12); - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 prb_End_r12: %ld \n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_TF_ResourceConfig_r12.prb_End_r12); - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 offsetIndicator: %ld \n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_TF_ResourceConfig_r12.offsetIndicator_r12.choice.small_r12); - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 subframeBitmap_choice_bs_buf: %s \n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_TF_ResourceConfig_r12.subframeBitmap_r12.choice.bs16_r12.buf); - - } - - //TTN - SIB 19 - for (int j = 0; j < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib19->discConfig_r12->discRxPool_r12.list.count; j++) { - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" Contents of SIB19 %d/%d \n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - j+1, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib19->discConfig_r12->discRxPool_r12.list.count); - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 cp_Len_r12: %ld \n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib19->discConfig_r12->discRxPool_r12.list.array[j]->cp_Len_r12); - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 discPeriod_r12: %ld \n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib19->discConfig_r12->discRxPool_r12.list.array[j]->discPeriod_r12); - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 numRetx_r12: %ld \n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib19->discConfig_r12->discRxPool_r12.list.array[j]->numRetx_r12); - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 numRepetition_r12: %ld \n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib19->discConfig_r12->discRxPool_r12.list.array[j]->numRepetition_r12); - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 tf_ResourceConfig_r12 prb_Num_r12: %ld \n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib19->discConfig_r12->discRxPool_r12.list.array[j]->tf_ResourceConfig_r12.prb_Num_r12); - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 tf_ResourceConfig_r12 prb_Start_r12: %ld \n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib19->discConfig_r12->discRxPool_r12.list.array[j]->tf_ResourceConfig_r12.prb_Start_r12); - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 tf_ResourceConfig_r12 prb_End_r12: %ld \n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib19->discConfig_r12->discRxPool_r12.list.array[j]->tf_ResourceConfig_r12.prb_End_r12); - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 tf_ResourceConfig_r12 offsetIndicator: %ld \n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib19->discConfig_r12->discRxPool_r12.list.array[j]->tf_ResourceConfig_r12.offsetIndicator_r12.choice.small_r12); - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 tf_ResourceConfig_r12 subframeBitmap_choice_bs_buf: %s \n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib19->discConfig_r12->discRxPool_r12.list.array[j]->tf_ResourceConfig_r12.subframeBitmap_r12.choice.bs16_r12.buf); - - } - -#endif - + LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" RRC_UE --- MAC_CONFIG_REQ (SIB1.tdd & SIB2 params) ---> MAC_UE\n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP)); + // LTE-M stuff here (take out CU-DU for now) + if (rrc->node_type == ngran_eNB) { #if (RRC_VERSION >= MAKE_VERSION(13, 0, 0)) - if ((RC.rrc[ctxt_pP->module_id]->carrier[CC_id].mib.message.schedulingInfoSIB1_BR_r13>0) && - (RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1_BR!=NULL)) { - AssertFatal(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1_BR->nonCriticalExtension!=NULL, + if ((carrier->mib.message.schedulingInfoSIB1_BR_r13>0) && + (carrier->sib1_BR!=NULL)) { + AssertFatal(carrier->sib1_BR->nonCriticalExtension!=NULL, "sib2_br->nonCriticalExtension is null (v8.9)\n"); - AssertFatal(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1_BR->nonCriticalExtension->nonCriticalExtension!=NULL, + AssertFatal(carrier->sib1_BR->nonCriticalExtension->nonCriticalExtension!=NULL, "sib2_br->nonCriticalExtension is null (v9.2)\n"); - AssertFatal(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension!=NULL, + AssertFatal(carrier->sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension!=NULL, "sib2_br->nonCriticalExtension is null (v11.3)\n"); - AssertFatal(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension!=NULL, + AssertFatal(carrier->sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension!=NULL, "sib2_br->nonCriticalExtension is null (v12.5)\n"); - AssertFatal(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension!=NULL, + AssertFatal(carrier->sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension!=NULL, "sib2_br->nonCriticalExtension is null (v13.10)\n"); - sib1_v13ext = RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension; - } + sib1_v13ext = carrier->sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension; + } #endif - - LOG_D(RRC, "About to call rrc_mac_config_req_eNB\n"); - - rrc_mac_config_req_eNB(ctxt_pP->module_id, CC_id, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].physCellId, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].p_eNB, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Ncp, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1->freqBandIndicator, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].dl_CarrierFreq, + + } + if (rrc->node_type == ngran_eNB_DU) { + LOG_D(RRC, "About to call rrc_mac_config_req_eNB for ngran_eNB_DU\n"); + + rrc_mac_config_req_eNB(ctxt_pP->module_id, CC_id, + carrier->physCellId, + carrier->p_eNB, + carrier->Ncp, + carrier->sib1->freqBandIndicator, + carrier->dl_CarrierFreq, #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].pbch_repetition, + carrier->pbch_repetition, #endif - 0, // rnti - (BCCH_BCH_Message_t *) - &RC.rrc[ctxt_pP->module_id]->carrier[CC_id].mib, - (RadioResourceConfigCommonSIB_t *) & - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon, + 0, // rnti + (BCCH_BCH_Message_t *) + &carrier->mib, + (RadioResourceConfigCommonSIB_t *) NULL, #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) - (RadioResourceConfigCommonSIB_t *) & - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2_BR->radioResourceConfigCommon, + (RadioResourceConfigCommonSIB_t *) NULL, #endif - (struct PhysicalConfigDedicated *)NULL, + (struct PhysicalConfigDedicated *)NULL, #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) - (SCellToAddMod_r10_t *)NULL, - //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, + (SCellToAddMod_r10_t *)NULL, + //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, +#endif + (MeasObjectToAddMod_t **) NULL, + (MAC_MainConfig_t *) NULL, 0, + (struct LogicalChannelConfig *)NULL, + (MeasGapConfig_t *) NULL, + carrier->sib1->tdd_Config, + NULL, + &carrier->sib1->schedulingInfoList, + carrier->ul_CarrierFreq, + NULL, + NULL, + NULL +#if (RRC_VERSION >= MAKE_VERSION(9, 0, 0)) + , + carrier->MBMS_flag, + NULL, + (PMCH_InfoList_r9_t *) NULL #endif - (MeasObjectToAddMod_t **) NULL, - (MAC_MainConfig_t *) NULL, 0, - (struct LogicalChannelConfig *)NULL, - (MeasGapConfig_t *) NULL, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1->tdd_Config, - NULL, - &RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1->schedulingInfoList, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].ul_CarrierFreq, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->freqInfo.ul_Bandwidth, - &RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->freqInfo.additionalSpectrumEmission, - (MBSFN_SubframeConfigList_t*) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->mbsfn_SubframeConfigList +#if (RRC_VERSION >= MAKE_VERSION(13, 0, 0)) + , + NULL +#endif + ); + } + else if (rrc->node_type == ngran_eNB) { + LOG_D(RRC, "About to call rrc_mac_config_req_eNB for ngran_eNB\n"); + + rrc_mac_config_req_eNB(ctxt_pP->module_id, CC_id, + carrier->physCellId, + carrier->p_eNB, + carrier->Ncp, + carrier->sib1->freqBandIndicator, + carrier->dl_CarrierFreq, +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) + carrier->pbch_repetition, +#endif + 0, // rnti + (BCCH_BCH_Message_t *) + &carrier->mib, + (RadioResourceConfigCommonSIB_t *) & + carrier->sib2->radioResourceConfigCommon, +#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) + (RadioResourceConfigCommonSIB_t *) & + carrier->sib2_BR->radioResourceConfigCommon, +#endif + (struct PhysicalConfigDedicated *)NULL, +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) + (SCellToAddMod_r10_t *)NULL, + //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, +#endif + (MeasObjectToAddMod_t **) NULL, + (MAC_MainConfig_t *) NULL, 0, + (struct LogicalChannelConfig *)NULL, + (MeasGapConfig_t *) NULL, + carrier->sib1->tdd_Config, + NULL, + &carrier->sib1->schedulingInfoList, + carrier->ul_CarrierFreq, + carrier->sib2->freqInfo.ul_Bandwidth, + &carrier->sib2->freqInfo.additionalSpectrumEmission, + (MBSFN_SubframeConfigList_t*) carrier->sib2->mbsfn_SubframeConfigList #if (RRC_VERSION >= MAKE_VERSION(9, 0, 0)) - , - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].MBMS_flag, - (MBSFN_AreaInfoList_r9_t*) & RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib13->mbsfn_AreaInfoList_r9, - (PMCH_InfoList_r9_t *) NULL + , + carrier->MBMS_flag, + (MBSFN_AreaInfoList_r9_t*) & carrier->sib13->mbsfn_AreaInfoList_r9, + (PMCH_InfoList_r9_t *) NULL #endif #if (RRC_VERSION >= MAKE_VERSION(13, 0, 0)) - , - sib1_v13ext + , + sib1_v13ext #endif - ); + ); + } + // set flag to indicate that cell information is configured. This is required in DU to trigger F1AP_SETUP procedure. + pthread_mutex_lock(&rrc->cell_info_mutex); + rrc->cell_info_configured=1; + pthread_mutex_unlock(&rrc->cell_info_mutex); } #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) @@ -5849,6 +5914,10 @@ rrc_eNB_generate_RRCConnectionSetup( ue_context_pP->ue_context.ue_release_timer_thres=1000; } +void setup_ngran_CU(eNB_RRC_INST *rrc) { + + +} #if defined(ENABLE_ITTI) //----------------------------------------------------------------------------- @@ -5901,6 +5970,9 @@ openair_rrc_eNB_init( // } RC.rrc[ctxt.module_id]->Nb_ue = 0; + pthread_mutex_init(&RC.rrc[ctxt.module_id]->cell_info_mutex,NULL); + RC.rrc[ctxt.module_id]->cell_info_configured = 0; + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { RC.rrc[ctxt.module_id]->carrier[CC_id].Srb0.Active = 0; } @@ -6008,8 +6080,12 @@ openair_rrc_eNB_init( openair_rrc_top_init_eNB(RC.rrc[ctxt.module_id]->carrier[CC_id].MBMS_flag,0); } + openair_rrc_on(&ctxt); - + + if (RC.rrc[ctxt.module_id]->node_type == ngran_eNB_CU || RC.rrc[ctxt.module_id]->node_type == ngran_ng_eNB_CU) + setup_ngran_CU(RC.rrc[ctxt.module_id]); + return 0; } diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index e84f99e67f..bf07e93f39 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -1062,7 +1062,7 @@ int main( int argc, char **argv ) #if defined(ENABLE_ITTI) if (RC.nb_inst > 0) { - // don't create if node doesn't connect to RRC/S1/GTP + // don't create if node doesn't connect to RRC/S1/F1/GTP if (create_tasks(1) < 0) { printf("cannot create ITTI tasks\n"); exit(-1); // need a softer mode -- GitLab