Commit c56eb9ed authored by Raymond Knopp's avatar Raymond Knopp

addition of configuration (DU) for F1AP and filling of F1AP_SET_REQ parameters

parent b797dafd
......@@ -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;
......
......@@ -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
......@@ -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 ####
#################
......
......@@ -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)
......@@ -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_ */
......@@ -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
......
......@@ -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"
......
......@@ -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"
......
......@@ -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
......
......@@ -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;
......
......@@ -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;
......
......@@ -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);
......
......@@ -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 {
......
......@@ -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;
......
......@@ -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
......
......@@ -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;
......
......@@ -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
......
......@@ -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;
}
......
......@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment