From c56eb9eda797cda6ce372086e35a59e50d96d25c Mon Sep 17 00:00:00 2001
From: Raymond Knopp <raymond.knopp@eurecom.fr>
Date: Tue, 4 Sep 2018 07:40:04 +0200
Subject: [PATCH] addition of configuration (DU) for F1AP and filling of
 F1AP_SET_REQ parameters

---
 common/ran_context.h                  |    3 +
 common/utils/T/T_IDs.h                |  690 +++++------
 common/utils/T/T_messages.txt         |   32 +-
 openair2/COMMON/f1ap_messages_def.h   |   65 +-
 openair2/COMMON/f1ap_messages_types.h |  755 +++--------
 openair2/COMMON/mac_rrc_primitives.h  |    2 +-
 openair2/COMMON/messages_def.h        |    1 +
 openair2/COMMON/messages_types.h      |    3 +-
 openair2/COMMON/rrc_messages_types.h  |    1 +
 openair2/ENB_APP/enb_app.c            |   61 +-
 openair2/ENB_APP/enb_config.c         | 1652 +++++++++++++------------
 openair2/ENB_APP/enb_config.h         |    6 +-
 openair2/F1AP/DU_F1AP.c               |    3 +
 openair2/F1AP/f1ap_common.h           |    8 +
 openair2/LAYER2/MAC/mac.h             |    1 +
 openair2/LAYER2/MAC/main.c            |    4 +-
 openair2/RRC/LTE/rrc_defs.h           |    5 +
 openair2/RRC/LTE/rrc_eNB.c            |  524 ++++----
 targets/RT/USER/lte-softmodem.c       |    2 +-
 19 files changed, 1812 insertions(+), 2006 deletions(-)

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