Commit c56eb9ed authored by Raymond Knopp's avatar Raymond Knopp

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

parent b797dafd
...@@ -53,6 +53,9 @@ ...@@ -53,6 +53,9 @@
#include "PHY/defs_L1_NB_IoT.h" #include "PHY/defs_L1_NB_IoT.h"
#include "RRC/LTE/defs_NB_IoT.h" #include "RRC/LTE/defs_NB_IoT.h"
typedef struct { typedef struct {
/// RAN context config file name /// RAN context config file name
char *config_file_name; char *config_file_name;
......
...@@ -199,348 +199,348 @@ ...@@ -199,348 +199,348 @@
#define T_LEGACY_CLI_WARNING T_ID(196) #define T_LEGACY_CLI_WARNING T_ID(196)
#define T_LEGACY_CLI_DEBUG T_ID(197) #define T_LEGACY_CLI_DEBUG T_ID(197)
#define T_LEGACY_CLI_TRACE T_ID(198) #define T_LEGACY_CLI_TRACE T_ID(198)
#define T_UE_MASTER_TICK T_ID(199) #define T_LEGACY_PROTO_AGENT_DEBUG T_ID(199)
#define T_UE_PHY_UL_TICK T_ID(200) #define T_LEGACY_PROTO_AGENT_INFO T_ID(200)
#define T_UE_PHY_DL_TICK T_ID(201) #define T_LEGACY_PROTO_AGENT_ERROR T_ID(201)
#define T_UE_PHY_DLSCH_UE_DCI T_ID(202) #define T_LEGACY_F1U_DEBUG T_ID(202)
#define T_UE_PHY_DLSCH_UE_ACK T_ID(203) #define T_LEGACY_F1U_INFO T_ID(203)
#define T_UE_PHY_DLSCH_UE_NACK T_ID(204) #define T_LEGACY_F1U_ERROR T_ID(204)
#define T_UE_PHY_ULSCH_UE_DCI T_ID(205) #define T_UE_MASTER_TICK T_ID(205)
#define T_UE_PHY_ULSCH_UE_ACK T_ID(206) #define T_UE_PHY_UL_TICK T_ID(206)
#define T_UE_PHY_ULSCH_UE_NACK T_ID(207) #define T_UE_PHY_DL_TICK T_ID(207)
#define T_UE_PHY_INPUT_SIGNAL T_ID(208) #define T_UE_PHY_DLSCH_UE_DCI T_ID(208)
#define T_UE_PHY_DL_CHANNEL_ESTIMATE T_ID(209) #define T_UE_PHY_DLSCH_UE_ACK T_ID(209)
#define T_UE_PHY_PDCCH_IQ T_ID(210) #define T_UE_PHY_DLSCH_UE_NACK T_ID(210)
#define T_UE_PHY_PDCCH_ENERGY T_ID(211) #define T_UE_PHY_ULSCH_UE_DCI T_ID(211)
#define T_UE_PHY_PDSCH_IQ T_ID(212) #define T_UE_PHY_ULSCH_UE_ACK T_ID(212)
#define T_UE_PHY_PDSCH_ENERGY T_ID(213) #define T_UE_PHY_ULSCH_UE_NACK T_ID(213)
#define T_UE_PHY_PUSCH_TX_POWER T_ID(214) #define T_UE_PHY_INPUT_SIGNAL T_ID(214)
#define T_UE_PHY_PUCCH_TX_POWER T_ID(215) #define T_UE_PHY_DL_CHANNEL_ESTIMATE T_ID(215)
#define T_UE_PHY_MEAS T_ID(216) #define T_UE_PHY_PDCCH_IQ T_ID(216)
#define T_first T_ID(217) #define T_UE_PHY_PDCCH_ENERGY T_ID(217)
#define T_buf_test T_ID(218) #define T_UE_PHY_PDSCH_IQ T_ID(218)
#define T_VCD_VARIABLE_FRAME_NUMBER_TX0_ENB T_ID(219) #define T_UE_PHY_PDSCH_ENERGY T_ID(219)
#define T_VCD_VARIABLE_FRAME_NUMBER_TX1_ENB T_ID(220) #define T_UE_PHY_PUSCH_TX_POWER T_ID(220)
#define T_VCD_VARIABLE_FRAME_NUMBER_RX0_ENB T_ID(221) #define T_UE_PHY_PUCCH_TX_POWER T_ID(221)
#define T_VCD_VARIABLE_FRAME_NUMBER_RX1_ENB T_ID(222) #define T_UE_PHY_MEAS T_ID(222)
#define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX0_ENB T_ID(223) #define T_first T_ID(223)
#define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX1_ENB T_ID(224) #define T_buf_test T_ID(224)
#define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX0_ENB T_ID(225) #define T_VCD_VARIABLE_FRAME_NUMBER_TX0_ENB T_ID(225)
#define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX1_ENB T_ID(226) #define T_VCD_VARIABLE_FRAME_NUMBER_TX1_ENB T_ID(226)
#define T_VCD_VARIABLE_FRAME_NUMBER_TX0_RU T_ID(227) #define T_VCD_VARIABLE_FRAME_NUMBER_RX0_ENB T_ID(227)
#define T_VCD_VARIABLE_FRAME_NUMBER_TX1_RU T_ID(228) #define T_VCD_VARIABLE_FRAME_NUMBER_RX1_ENB T_ID(228)
#define T_VCD_VARIABLE_FRAME_NUMBER_RX0_RU T_ID(229) #define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX0_ENB T_ID(229)
#define T_VCD_VARIABLE_FRAME_NUMBER_RX1_RU T_ID(230) #define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX1_ENB T_ID(230)
#define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX0_RU T_ID(231) #define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX0_ENB T_ID(231)
#define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX1_RU T_ID(232) #define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX1_ENB T_ID(232)
#define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX0_RU T_ID(233) #define T_VCD_VARIABLE_FRAME_NUMBER_TX0_RU T_ID(233)
#define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX1_RU T_ID(234) #define T_VCD_VARIABLE_FRAME_NUMBER_TX1_RU T_ID(234)
#define T_VCD_VARIABLE_RUNTIME_TX_ENB T_ID(235) #define T_VCD_VARIABLE_FRAME_NUMBER_RX0_RU T_ID(235)
#define T_VCD_VARIABLE_RUNTIME_RX_ENB T_ID(236) #define T_VCD_VARIABLE_FRAME_NUMBER_RX1_RU T_ID(236)
#define T_VCD_VARIABLE_FRAME_NUMBER_TX0_UE T_ID(237) #define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX0_RU T_ID(237)
#define T_VCD_VARIABLE_FRAME_NUMBER_TX1_UE T_ID(238) #define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX1_RU T_ID(238)
#define T_VCD_VARIABLE_FRAME_NUMBER_RX0_UE T_ID(239) #define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX0_RU T_ID(239)
#define T_VCD_VARIABLE_FRAME_NUMBER_RX1_UE T_ID(240) #define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX1_RU T_ID(240)
#define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX0_UE T_ID(241) #define T_VCD_VARIABLE_RUNTIME_TX_ENB T_ID(241)
#define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX1_UE T_ID(242) #define T_VCD_VARIABLE_RUNTIME_RX_ENB T_ID(242)
#define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX0_UE T_ID(243) #define T_VCD_VARIABLE_FRAME_NUMBER_TX0_UE T_ID(243)
#define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX1_UE T_ID(244) #define T_VCD_VARIABLE_FRAME_NUMBER_TX1_UE T_ID(244)
#define T_VCD_VARIABLE_UE_RX_OFFSET T_ID(245) #define T_VCD_VARIABLE_FRAME_NUMBER_RX0_UE T_ID(245)
#define T_VCD_VARIABLE_DIFF T_ID(246) #define T_VCD_VARIABLE_FRAME_NUMBER_RX1_UE T_ID(246)
#define T_VCD_VARIABLE_HW_SUBFRAME T_ID(247) #define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX0_UE T_ID(247)
#define T_VCD_VARIABLE_HW_FRAME T_ID(248) #define T_VCD_VARIABLE_SUBFRAME_NUMBER_TX1_UE T_ID(248)
#define T_VCD_VARIABLE_HW_SUBFRAME_RX T_ID(249) #define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX0_UE T_ID(249)
#define T_VCD_VARIABLE_HW_FRAME_RX T_ID(250) #define T_VCD_VARIABLE_SUBFRAME_NUMBER_RX1_UE T_ID(250)
#define T_VCD_VARIABLE_TXCNT T_ID(251) #define T_VCD_VARIABLE_UE_RX_OFFSET T_ID(251)
#define T_VCD_VARIABLE_RXCNT T_ID(252) #define T_VCD_VARIABLE_DIFF T_ID(252)
#define T_VCD_VARIABLE_TRX_TS T_ID(253) #define T_VCD_VARIABLE_HW_SUBFRAME T_ID(253)
#define T_VCD_VARIABLE_TRX_TST T_ID(254) #define T_VCD_VARIABLE_HW_FRAME T_ID(254)
#define T_VCD_VARIABLE_TRX_TS_UE T_ID(255) #define T_VCD_VARIABLE_HW_SUBFRAME_RX T_ID(255)
#define T_VCD_VARIABLE_TRX_TST_UE T_ID(256) #define T_VCD_VARIABLE_HW_FRAME_RX T_ID(256)
#define T_VCD_VARIABLE_TRX_WRITE_FLAGS T_ID(257) #define T_VCD_VARIABLE_TXCNT T_ID(257)
#define T_VCD_VARIABLE_TX_TS T_ID(258) #define T_VCD_VARIABLE_RXCNT T_ID(258)
#define T_VCD_VARIABLE_RX_TS T_ID(259) #define T_VCD_VARIABLE_TRX_TS T_ID(259)
#define T_VCD_VARIABLE_RX_HWCNT T_ID(260) #define T_VCD_VARIABLE_TRX_TST T_ID(260)
#define T_VCD_VARIABLE_RX_LHWCNT T_ID(261) #define T_VCD_VARIABLE_TRX_TS_UE T_ID(261)
#define T_VCD_VARIABLE_TX_HWCNT T_ID(262) #define T_VCD_VARIABLE_TRX_TST_UE T_ID(262)
#define T_VCD_VARIABLE_TX_LHWCNT T_ID(263) #define T_VCD_VARIABLE_TRX_WRITE_FLAGS T_ID(263)
#define T_VCD_VARIABLE_RX_PCK T_ID(264) #define T_VCD_VARIABLE_TX_TS T_ID(264)
#define T_VCD_VARIABLE_TX_PCK T_ID(265) #define T_VCD_VARIABLE_RX_TS T_ID(265)
#define T_VCD_VARIABLE_RX_SEQ_NUM T_ID(266) #define T_VCD_VARIABLE_RX_HWCNT T_ID(266)
#define T_VCD_VARIABLE_RX_SEQ_NUM_PRV T_ID(267) #define T_VCD_VARIABLE_RX_LHWCNT T_ID(267)
#define T_VCD_VARIABLE_TX_SEQ_NUM T_ID(268) #define T_VCD_VARIABLE_TX_HWCNT T_ID(268)
#define T_VCD_VARIABLE_CNT T_ID(269) #define T_VCD_VARIABLE_TX_LHWCNT T_ID(269)
#define T_VCD_VARIABLE_DUMMY_DUMP T_ID(270) #define T_VCD_VARIABLE_RX_PCK T_ID(270)
#define T_VCD_VARIABLE_ITTI_SEND_MSG T_ID(271) #define T_VCD_VARIABLE_TX_PCK T_ID(271)
#define T_VCD_VARIABLE_ITTI_POLL_MSG T_ID(272) #define T_VCD_VARIABLE_RX_SEQ_NUM T_ID(272)
#define T_VCD_VARIABLE_ITTI_RECV_MSG T_ID(273) #define T_VCD_VARIABLE_RX_SEQ_NUM_PRV T_ID(273)
#define T_VCD_VARIABLE_ITTI_ALLOC_MSG T_ID(274) #define T_VCD_VARIABLE_TX_SEQ_NUM T_ID(274)
#define T_VCD_VARIABLE_MP_ALLOC T_ID(275) #define T_VCD_VARIABLE_CNT T_ID(275)
#define T_VCD_VARIABLE_MP_FREE T_ID(276) #define T_VCD_VARIABLE_DUMMY_DUMP T_ID(276)
#define T_VCD_VARIABLE_UE_INST_CNT_RX T_ID(277) #define T_VCD_VARIABLE_ITTI_SEND_MSG T_ID(277)
#define T_VCD_VARIABLE_UE_INST_CNT_TX T_ID(278) #define T_VCD_VARIABLE_ITTI_POLL_MSG T_ID(278)
#define T_VCD_VARIABLE_DCI_INFO T_ID(279) #define T_VCD_VARIABLE_ITTI_RECV_MSG T_ID(279)
#define T_VCD_VARIABLE_UE0_BSR T_ID(280) #define T_VCD_VARIABLE_ITTI_ALLOC_MSG T_ID(280)
#define T_VCD_VARIABLE_UE0_BO T_ID(281) #define T_VCD_VARIABLE_MP_ALLOC T_ID(281)
#define T_VCD_VARIABLE_UE0_SCHEDULED T_ID(282) #define T_VCD_VARIABLE_MP_FREE T_ID(282)
#define T_VCD_VARIABLE_UE0_TIMING_ADVANCE T_ID(283) #define T_VCD_VARIABLE_UE_INST_CNT_RX T_ID(283)
#define T_VCD_VARIABLE_UE0_SR_ENERGY T_ID(284) #define T_VCD_VARIABLE_UE_INST_CNT_TX T_ID(284)
#define T_VCD_VARIABLE_UE0_SR_THRES T_ID(285) #define T_VCD_VARIABLE_DCI_INFO T_ID(285)
#define T_VCD_VARIABLE_UE0_RSSI0 T_ID(286) #define T_VCD_VARIABLE_UE0_BSR T_ID(286)
#define T_VCD_VARIABLE_UE0_RSSI1 T_ID(287) #define T_VCD_VARIABLE_UE0_BO T_ID(287)
#define T_VCD_VARIABLE_UE0_RSSI2 T_ID(288) #define T_VCD_VARIABLE_UE0_SCHEDULED T_ID(288)
#define T_VCD_VARIABLE_UE0_RSSI3 T_ID(289) #define T_VCD_VARIABLE_UE0_TIMING_ADVANCE T_ID(289)
#define T_VCD_VARIABLE_UE0_RSSI4 T_ID(290) #define T_VCD_VARIABLE_UE0_SR_ENERGY T_ID(290)
#define T_VCD_VARIABLE_UE0_RSSI5 T_ID(291) #define T_VCD_VARIABLE_UE0_SR_THRES T_ID(291)
#define T_VCD_VARIABLE_UE0_RSSI6 T_ID(292) #define T_VCD_VARIABLE_UE0_RSSI0 T_ID(292)
#define T_VCD_VARIABLE_UE0_RSSI7 T_ID(293) #define T_VCD_VARIABLE_UE0_RSSI1 T_ID(293)
#define T_VCD_VARIABLE_UE0_RES0 T_ID(294) #define T_VCD_VARIABLE_UE0_RSSI2 T_ID(294)
#define T_VCD_VARIABLE_UE0_RES1 T_ID(295) #define T_VCD_VARIABLE_UE0_RSSI3 T_ID(295)
#define T_VCD_VARIABLE_UE0_RES2 T_ID(296) #define T_VCD_VARIABLE_UE0_RSSI4 T_ID(296)
#define T_VCD_VARIABLE_UE0_RES3 T_ID(297) #define T_VCD_VARIABLE_UE0_RSSI5 T_ID(297)
#define T_VCD_VARIABLE_UE0_RES4 T_ID(298) #define T_VCD_VARIABLE_UE0_RSSI6 T_ID(298)
#define T_VCD_VARIABLE_UE0_RES5 T_ID(299) #define T_VCD_VARIABLE_UE0_RSSI7 T_ID(299)
#define T_VCD_VARIABLE_UE0_RES6 T_ID(300) #define T_VCD_VARIABLE_UE0_RES0 T_ID(300)
#define T_VCD_VARIABLE_UE0_RES7 T_ID(301) #define T_VCD_VARIABLE_UE0_RES1 T_ID(301)
#define T_VCD_VARIABLE_UE0_MCS0 T_ID(302) #define T_VCD_VARIABLE_UE0_RES2 T_ID(302)
#define T_VCD_VARIABLE_UE0_MCS1 T_ID(303) #define T_VCD_VARIABLE_UE0_RES3 T_ID(303)
#define T_VCD_VARIABLE_UE0_MCS2 T_ID(304) #define T_VCD_VARIABLE_UE0_RES4 T_ID(304)
#define T_VCD_VARIABLE_UE0_MCS3 T_ID(305) #define T_VCD_VARIABLE_UE0_RES5 T_ID(305)
#define T_VCD_VARIABLE_UE0_MCS4 T_ID(306) #define T_VCD_VARIABLE_UE0_RES6 T_ID(306)
#define T_VCD_VARIABLE_UE0_MCS5 T_ID(307) #define T_VCD_VARIABLE_UE0_RES7 T_ID(307)
#define T_VCD_VARIABLE_UE0_MCS6 T_ID(308) #define T_VCD_VARIABLE_UE0_MCS0 T_ID(308)
#define T_VCD_VARIABLE_UE0_MCS7 T_ID(309) #define T_VCD_VARIABLE_UE0_MCS1 T_ID(309)
#define T_VCD_VARIABLE_UE0_RB0 T_ID(310) #define T_VCD_VARIABLE_UE0_MCS2 T_ID(310)
#define T_VCD_VARIABLE_UE0_RB1 T_ID(311) #define T_VCD_VARIABLE_UE0_MCS3 T_ID(311)
#define T_VCD_VARIABLE_UE0_RB2 T_ID(312) #define T_VCD_VARIABLE_UE0_MCS4 T_ID(312)
#define T_VCD_VARIABLE_UE0_RB3 T_ID(313) #define T_VCD_VARIABLE_UE0_MCS5 T_ID(313)
#define T_VCD_VARIABLE_UE0_RB4 T_ID(314) #define T_VCD_VARIABLE_UE0_MCS6 T_ID(314)
#define T_VCD_VARIABLE_UE0_RB5 T_ID(315) #define T_VCD_VARIABLE_UE0_MCS7 T_ID(315)
#define T_VCD_VARIABLE_UE0_RB6 T_ID(316) #define T_VCD_VARIABLE_UE0_RB0 T_ID(316)
#define T_VCD_VARIABLE_UE0_RB7 T_ID(317) #define T_VCD_VARIABLE_UE0_RB1 T_ID(317)
#define T_VCD_VARIABLE_UE0_ROUND0 T_ID(318) #define T_VCD_VARIABLE_UE0_RB2 T_ID(318)
#define T_VCD_VARIABLE_UE0_ROUND1 T_ID(319) #define T_VCD_VARIABLE_UE0_RB3 T_ID(319)
#define T_VCD_VARIABLE_UE0_ROUND2 T_ID(320) #define T_VCD_VARIABLE_UE0_RB4 T_ID(320)
#define T_VCD_VARIABLE_UE0_ROUND3 T_ID(321) #define T_VCD_VARIABLE_UE0_RB5 T_ID(321)
#define T_VCD_VARIABLE_UE0_ROUND4 T_ID(322) #define T_VCD_VARIABLE_UE0_RB6 T_ID(322)
#define T_VCD_VARIABLE_UE0_ROUND5 T_ID(323) #define T_VCD_VARIABLE_UE0_RB7 T_ID(323)
#define T_VCD_VARIABLE_UE0_ROUND6 T_ID(324) #define T_VCD_VARIABLE_UE0_ROUND0 T_ID(324)
#define T_VCD_VARIABLE_UE0_ROUND7 T_ID(325) #define T_VCD_VARIABLE_UE0_ROUND1 T_ID(325)
#define T_VCD_VARIABLE_UE0_SFN0 T_ID(326) #define T_VCD_VARIABLE_UE0_ROUND2 T_ID(326)
#define T_VCD_VARIABLE_UE0_SFN1 T_ID(327) #define T_VCD_VARIABLE_UE0_ROUND3 T_ID(327)
#define T_VCD_VARIABLE_UE0_SFN2 T_ID(328) #define T_VCD_VARIABLE_UE0_ROUND4 T_ID(328)
#define T_VCD_VARIABLE_UE0_SFN3 T_ID(329) #define T_VCD_VARIABLE_UE0_ROUND5 T_ID(329)
#define T_VCD_VARIABLE_UE0_SFN4 T_ID(330) #define T_VCD_VARIABLE_UE0_ROUND6 T_ID(330)
#define T_VCD_VARIABLE_UE0_SFN5 T_ID(331) #define T_VCD_VARIABLE_UE0_ROUND7 T_ID(331)
#define T_VCD_VARIABLE_UE0_SFN6 T_ID(332) #define T_VCD_VARIABLE_UE0_SFN0 T_ID(332)
#define T_VCD_VARIABLE_UE0_SFN7 T_ID(333) #define T_VCD_VARIABLE_UE0_SFN1 T_ID(333)
#define T_VCD_VARIABLE_SEND_IF4_SYMBOL T_ID(334) #define T_VCD_VARIABLE_UE0_SFN2 T_ID(334)
#define T_VCD_VARIABLE_RECV_IF4_SYMBOL T_ID(335) #define T_VCD_VARIABLE_UE0_SFN3 T_ID(335)
#define T_VCD_VARIABLE_SEND_IF5_PKT_ID T_ID(336) #define T_VCD_VARIABLE_UE0_SFN4 T_ID(336)
#define T_VCD_VARIABLE_RECV_IF5_PKT_ID T_ID(337) #define T_VCD_VARIABLE_UE0_SFN5 T_ID(337)
#define T_VCD_VARIABLE_UE_PDCP_FLUSH_SIZE T_ID(338) #define T_VCD_VARIABLE_UE0_SFN6 T_ID(338)
#define T_VCD_VARIABLE_UE_PDCP_FLUSH_ERR T_ID(339) #define T_VCD_VARIABLE_UE0_SFN7 T_ID(339)
#define T_VCD_VARIABLE_UE0_TRX_READ_NS T_ID(340) #define T_VCD_VARIABLE_SEND_IF4_SYMBOL T_ID(340)
#define T_VCD_VARIABLE_UE0_TRX_WRITE_NS T_ID(341) #define T_VCD_VARIABLE_RECV_IF4_SYMBOL T_ID(341)
#define T_VCD_VARIABLE_UE0_TRX_READ_NS_MISSING T_ID(342) #define T_VCD_VARIABLE_SEND_IF5_PKT_ID T_ID(342)
#define T_VCD_VARIABLE_UE0_TRX_WRITE_NS_MISSING T_ID(343) #define T_VCD_VARIABLE_RECV_IF5_PKT_ID T_ID(343)
#define T_VCD_VARIABLE_CPUID_ENB_THREAD_RXTX T_ID(344) #define T_VCD_VARIABLE_UE_PDCP_FLUSH_SIZE T_ID(344)
#define T_VCD_VARIABLE_CPUID_RU_THREAD T_ID(345) #define T_VCD_VARIABLE_UE_PDCP_FLUSH_ERR T_ID(345)
#define T_VCD_VARIABLE_CPUID_RU_THREAD_TX T_ID(346) #define T_VCD_VARIABLE_UE0_TRX_READ_NS T_ID(346)
#define T_VCD_FUNCTION_RT_SLEEP T_ID(347) #define T_VCD_VARIABLE_UE0_TRX_WRITE_NS T_ID(347)
#define T_VCD_FUNCTION_TRX_READ T_ID(348) #define T_VCD_VARIABLE_UE0_TRX_READ_NS_MISSING T_ID(348)
#define T_VCD_FUNCTION_TRX_WRITE T_ID(349) #define T_VCD_VARIABLE_UE0_TRX_WRITE_NS_MISSING T_ID(349)
#define T_VCD_FUNCTION_TRX_READ_UE T_ID(350) #define T_VCD_VARIABLE_CPUID_ENB_THREAD_RXTX T_ID(350)
#define T_VCD_FUNCTION_TRX_WRITE_UE T_ID(351) #define T_VCD_VARIABLE_CPUID_RU_THREAD T_ID(351)
#define T_VCD_FUNCTION_TRX_READ_IF T_ID(352) #define T_VCD_VARIABLE_CPUID_RU_THREAD_TX T_ID(352)
#define T_VCD_FUNCTION_TRX_WRITE_IF T_ID(353) #define T_VCD_FUNCTION_RT_SLEEP T_ID(353)
#define T_VCD_FUNCTION_eNB_PROC_RXTX0 T_ID(354) #define T_VCD_FUNCTION_TRX_READ T_ID(354)
#define T_VCD_FUNCTION_eNB_PROC_RXTX1 T_ID(355) #define T_VCD_FUNCTION_TRX_WRITE T_ID(355)
#define T_VCD_FUNCTION_UE_THREAD_SYNCH T_ID(356) #define T_VCD_FUNCTION_TRX_READ_UE T_ID(356)
#define T_VCD_FUNCTION_UE_THREAD_RXTX0 T_ID(357) #define T_VCD_FUNCTION_TRX_WRITE_UE T_ID(357)
#define T_VCD_FUNCTION_UE_THREAD_RXTX1 T_ID(358) #define T_VCD_FUNCTION_TRX_READ_IF T_ID(358)
#define T_VCD_FUNCTION_TRX_READ_SF9 T_ID(359) #define T_VCD_FUNCTION_TRX_WRITE_IF T_ID(359)
#define T_VCD_FUNCTION_TRX_WRITE_SF9 T_ID(360) #define T_VCD_FUNCTION_eNB_PROC_RXTX0 T_ID(360)
#define T_VCD_FUNCTION_UE_SIGNAL_COND_RXTX0 T_ID(361) #define T_VCD_FUNCTION_eNB_PROC_RXTX1 T_ID(361)
#define T_VCD_FUNCTION_UE_SIGNAL_COND_RXTX1 T_ID(362) #define T_VCD_FUNCTION_UE_THREAD_SYNCH T_ID(362)
#define T_VCD_FUNCTION_UE_WAIT_COND_RXTX0 T_ID(363) #define T_VCD_FUNCTION_UE_THREAD_RXTX0 T_ID(363)
#define T_VCD_FUNCTION_UE_WAIT_COND_RXTX1 T_ID(364) #define T_VCD_FUNCTION_UE_THREAD_RXTX1 T_ID(364)
#define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT0 T_ID(365) #define T_VCD_FUNCTION_TRX_READ_SF9 T_ID(365)
#define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT1 T_ID(366) #define T_VCD_FUNCTION_TRX_WRITE_SF9 T_ID(366)
#define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT0 T_ID(367) #define T_VCD_FUNCTION_UE_SIGNAL_COND_RXTX0 T_ID(367)
#define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT1 T_ID(368) #define T_VCD_FUNCTION_UE_SIGNAL_COND_RXTX1 T_ID(368)
#define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0 T_ID(369) #define T_VCD_FUNCTION_UE_WAIT_COND_RXTX0 T_ID(369)
#define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT1 T_ID(370) #define T_VCD_FUNCTION_UE_WAIT_COND_RXTX1 T_ID(370)
#define T_VCD_FUNCTION_SIM_DO_DL_SIGNAL T_ID(371) #define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT0 T_ID(371)
#define T_VCD_FUNCTION_SIM_DO_UL_SIGNAL T_ID(372) #define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT1 T_ID(372)
#define T_VCD_FUNCTION_SIM_UE_TRX_READ T_ID(373) #define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT0 T_ID(373)
#define T_VCD_FUNCTION_eNB_TX T_ID(374) #define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT1 T_ID(374)
#define T_VCD_FUNCTION_eNB_RX T_ID(375) #define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0 T_ID(375)
#define T_VCD_FUNCTION_eNB_TRX T_ID(376) #define T_VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT1 T_ID(376)
#define T_VCD_FUNCTION_eNB_TM T_ID(377) #define T_VCD_FUNCTION_SIM_DO_DL_SIGNAL T_ID(377)
#define T_VCD_FUNCTION_eNB_RX_SLEEP T_ID(378) #define T_VCD_FUNCTION_SIM_DO_UL_SIGNAL T_ID(378)
#define T_VCD_FUNCTION_eNB_TX_SLEEP T_ID(379) #define T_VCD_FUNCTION_SIM_UE_TRX_READ T_ID(379)
#define T_VCD_FUNCTION_eNB_PROC_SLEEP T_ID(380) #define T_VCD_FUNCTION_eNB_TX T_ID(380)
#define T_VCD_FUNCTION_TRX_READ_RF T_ID(381) #define T_VCD_FUNCTION_eNB_RX T_ID(381)
#define T_VCD_FUNCTION_TRX_WRITE_RF T_ID(382) #define T_VCD_FUNCTION_eNB_TRX T_ID(382)
#define T_VCD_FUNCTION_UE_SYNCH T_ID(383) #define T_VCD_FUNCTION_eNB_TM T_ID(383)
#define T_VCD_FUNCTION_UE_SLOT_FEP T_ID(384) #define T_VCD_FUNCTION_eNB_RX_SLEEP T_ID(384)
#define T_VCD_FUNCTION_UE_RRC_MEASUREMENTS T_ID(385) #define T_VCD_FUNCTION_eNB_TX_SLEEP T_ID(385)
#define T_VCD_FUNCTION_UE_GAIN_CONTROL T_ID(386) #define T_VCD_FUNCTION_eNB_PROC_SLEEP T_ID(386)
#define T_VCD_FUNCTION_UE_ADJUST_SYNCH T_ID(387) #define T_VCD_FUNCTION_TRX_READ_RF T_ID(387)
#define T_VCD_FUNCTION_UE_MEASUREMENT_PROCEDURES T_ID(388) #define T_VCD_FUNCTION_TRX_WRITE_RF T_ID(388)
#define T_VCD_FUNCTION_UE_PDCCH_PROCEDURES T_ID(389) #define T_VCD_FUNCTION_UE_SYNCH T_ID(389)
#define T_VCD_FUNCTION_UE_PBCH_PROCEDURES T_ID(390) #define T_VCD_FUNCTION_UE_SLOT_FEP T_ID(390)
#define T_VCD_FUNCTION_PHY_PROCEDURES_ENB_TX T_ID(391) #define T_VCD_FUNCTION_UE_RRC_MEASUREMENTS T_ID(391)
#define T_VCD_FUNCTION_PHY_PROCEDURES_ENB_TX1 T_ID(392) #define T_VCD_FUNCTION_UE_GAIN_CONTROL T_ID(392)
#define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPRX T_ID(393) #define T_VCD_FUNCTION_UE_ADJUST_SYNCH T_ID(393)
#define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPRX1 T_ID(394) #define T_VCD_FUNCTION_UE_MEASUREMENT_PROCEDURES T_ID(394)
#define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_OFDM T_ID(395) #define T_VCD_FUNCTION_UE_PDCCH_PROCEDURES T_ID(395)
#define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_OFDM1 T_ID(396) #define T_VCD_FUNCTION_UE_PBCH_PROCEDURES T_ID(396)
#define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_PREC T_ID(397) #define T_VCD_FUNCTION_PHY_PROCEDURES_ENB_TX T_ID(397)
#define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_PREC1 T_ID(398) #define T_VCD_FUNCTION_PHY_PROCEDURES_ENB_TX1 T_ID(398)
#define T_VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_UESPEC T_ID(399) #define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPRX T_ID(399)
#define T_VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_UESPEC1 T_ID(400) #define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPRX1 T_ID(400)
#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX T_ID(401) #define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_OFDM T_ID(401)
#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_RX T_ID(402) #define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_OFDM1 T_ID(402)
#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX_ULSCH_UESPEC T_ID(403) #define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_PREC T_ID(403)
#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX_PUCCH T_ID(404) #define T_VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_PREC1 T_ID(404)
#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX_ULSCH_COMMON T_ID(405) #define T_VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_UESPEC T_ID(405)
#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX_PRACH T_ID(406) #define T_VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_UESPEC1 T_ID(406)
#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX_ULSCH_RAR T_ID(407) #define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX T_ID(407)
#define T_VCD_FUNCTION_PHY_PROCEDURES_ENB_LTE T_ID(408) #define T_VCD_FUNCTION_PHY_PROCEDURES_UE_RX T_ID(408)
#define T_VCD_FUNCTION_PHY_PROCEDURES_UE_LTE T_ID(409) #define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX_ULSCH_UESPEC T_ID(409)
#define T_VCD_FUNCTION_PDSCH_THREAD T_ID(410) #define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX_PUCCH T_ID(410)
#define T_VCD_FUNCTION_DLSCH_THREAD0 T_ID(411) #define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX_ULSCH_COMMON T_ID(411)
#define T_VCD_FUNCTION_DLSCH_THREAD1 T_ID(412) #define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX_PRACH T_ID(412)
#define T_VCD_FUNCTION_DLSCH_THREAD2 T_ID(413) #define T_VCD_FUNCTION_PHY_PROCEDURES_UE_TX_ULSCH_RAR T_ID(413)
#define T_VCD_FUNCTION_DLSCH_THREAD3 T_ID(414) #define T_VCD_FUNCTION_PHY_PROCEDURES_ENB_LTE T_ID(414)
#define T_VCD_FUNCTION_DLSCH_THREAD4 T_ID(415) #define T_VCD_FUNCTION_PHY_PROCEDURES_UE_LTE T_ID(415)
#define T_VCD_FUNCTION_DLSCH_THREAD5 T_ID(416) #define T_VCD_FUNCTION_PDSCH_THREAD T_ID(416)
#define T_VCD_FUNCTION_DLSCH_THREAD6 T_ID(417) #define T_VCD_FUNCTION_DLSCH_THREAD0 T_ID(417)
#define T_VCD_FUNCTION_DLSCH_THREAD7 T_ID(418) #define T_VCD_FUNCTION_DLSCH_THREAD1 T_ID(418)
#define T_VCD_FUNCTION_DLSCH_DECODING0 T_ID(419) #define T_VCD_FUNCTION_DLSCH_THREAD2 T_ID(419)
#define T_VCD_FUNCTION_DLSCH_DECODING1 T_ID(420) #define T_VCD_FUNCTION_DLSCH_THREAD3 T_ID(420)
#define T_VCD_FUNCTION_DLSCH_DECODING2 T_ID(421) #define T_VCD_FUNCTION_DLSCH_THREAD4 T_ID(421)
#define T_VCD_FUNCTION_DLSCH_DECODING3 T_ID(422) #define T_VCD_FUNCTION_DLSCH_THREAD5 T_ID(422)
#define T_VCD_FUNCTION_DLSCH_DECODING4 T_ID(423) #define T_VCD_FUNCTION_DLSCH_THREAD6 T_ID(423)
#define T_VCD_FUNCTION_DLSCH_DECODING5 T_ID(424) #define T_VCD_FUNCTION_DLSCH_THREAD7 T_ID(424)
#define T_VCD_FUNCTION_DLSCH_DECODING6 T_ID(425) #define T_VCD_FUNCTION_DLSCH_DECODING0 T_ID(425)
#define T_VCD_FUNCTION_DLSCH_DECODING7 T_ID(426) #define T_VCD_FUNCTION_DLSCH_DECODING1 T_ID(426)
#define T_VCD_FUNCTION_RX_PDCCH T_ID(427) #define T_VCD_FUNCTION_DLSCH_DECODING2 T_ID(427)
#define T_VCD_FUNCTION_DCI_DECODING T_ID(428) #define T_VCD_FUNCTION_DLSCH_DECODING3 T_ID(428)
#define T_VCD_FUNCTION_RX_PHICH T_ID(429) #define T_VCD_FUNCTION_DLSCH_DECODING4 T_ID(429)
#define T_VCD_FUNCTION_PDSCH_PROC T_ID(430) #define T_VCD_FUNCTION_DLSCH_DECODING5 T_ID(430)
#define T_VCD_FUNCTION_PDSCH_PROC_SI T_ID(431) #define T_VCD_FUNCTION_DLSCH_DECODING6 T_ID(431)
#define T_VCD_FUNCTION_PDSCH_PROC_P T_ID(432) #define T_VCD_FUNCTION_DLSCH_DECODING7 T_ID(432)
#define T_VCD_FUNCTION_PDSCH_PROC_RA T_ID(433) #define T_VCD_FUNCTION_RX_PDCCH T_ID(433)
#define T_VCD_FUNCTION_PHY_UE_CONFIG_SIB2 T_ID(434) #define T_VCD_FUNCTION_DCI_DECODING T_ID(434)
#define T_VCD_FUNCTION_PHY_CONFIG_SIB1_ENB T_ID(435) #define T_VCD_FUNCTION_RX_PHICH T_ID(435)
#define T_VCD_FUNCTION_PHY_CONFIG_SIB2_ENB T_ID(436) #define T_VCD_FUNCTION_PDSCH_PROC T_ID(436)
#define T_VCD_FUNCTION_PHY_CONFIG_DEDICATED_ENB T_ID(437) #define T_VCD_FUNCTION_PDSCH_PROC_SI T_ID(437)
#define T_VCD_FUNCTION_PHY_UE_COMPUTE_PRACH T_ID(438) #define T_VCD_FUNCTION_PDSCH_PROC_P T_ID(438)
#define T_VCD_FUNCTION_PHY_ENB_ULSCH_MSG3 T_ID(439) #define T_VCD_FUNCTION_PDSCH_PROC_RA T_ID(439)
#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING0 T_ID(440) #define T_VCD_FUNCTION_PHY_UE_CONFIG_SIB2 T_ID(440)
#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING1 T_ID(441) #define T_VCD_FUNCTION_PHY_CONFIG_SIB1_ENB T_ID(441)
#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING2 T_ID(442) #define T_VCD_FUNCTION_PHY_CONFIG_SIB2_ENB T_ID(442)
#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING3 T_ID(443) #define T_VCD_FUNCTION_PHY_CONFIG_DEDICATED_ENB T_ID(443)
#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING4 T_ID(444) #define T_VCD_FUNCTION_PHY_UE_COMPUTE_PRACH T_ID(444)
#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING5 T_ID(445) #define T_VCD_FUNCTION_PHY_ENB_ULSCH_MSG3 T_ID(445)
#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING6 T_ID(446) #define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING0 T_ID(446)
#define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING7 T_ID(447) #define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING1 T_ID(447)
#define T_VCD_FUNCTION_PHY_ENB_SFGEN T_ID(448) #define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING2 T_ID(448)
#define T_VCD_FUNCTION_PHY_ENB_PRACH_RX T_ID(449) #define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING3 T_ID(449)
#define T_VCD_FUNCTION_PHY_RU_PRACH_RX T_ID(450) #define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING4 T_ID(450)
#define T_VCD_FUNCTION_PHY_ENB_PDCCH_TX T_ID(451) #define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING5 T_ID(451)
#define T_VCD_FUNCTION_PHY_ENB_RS_TX T_ID(452) #define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING6 T_ID(452)
#define T_VCD_FUNCTION_UE_GENERATE_PRACH T_ID(453) #define T_VCD_FUNCTION_PHY_ENB_ULSCH_DECODING7 T_ID(453)
#define T_VCD_FUNCTION_UE_ULSCH_MODULATION T_ID(454) #define T_VCD_FUNCTION_PHY_ENB_SFGEN T_ID(454)
#define T_VCD_FUNCTION_UE_ULSCH_ENCODING T_ID(455) #define T_VCD_FUNCTION_PHY_ENB_PRACH_RX T_ID(455)
#define T_VCD_FUNCTION_UE_ULSCH_ENCODING_FILL_CQI T_ID(456) #define T_VCD_FUNCTION_PHY_RU_PRACH_RX T_ID(456)
#define T_VCD_FUNCTION_UE_ULSCH_SCRAMBLING T_ID(457) #define T_VCD_FUNCTION_PHY_ENB_PDCCH_TX T_ID(457)
#define T_VCD_FUNCTION_ENB_DLSCH_MODULATION T_ID(458) #define T_VCD_FUNCTION_PHY_ENB_RS_TX T_ID(458)
#define T_VCD_FUNCTION_ENB_DLSCH_ENCODING T_ID(459) #define T_VCD_FUNCTION_UE_GENERATE_PRACH T_ID(459)
#define T_VCD_FUNCTION_ENB_DLSCH_ENCODING_W T_ID(460) #define T_VCD_FUNCTION_UE_ULSCH_MODULATION T_ID(460)
#define T_VCD_FUNCTION_ENB_DLSCH_SCRAMBLING T_ID(461) #define T_VCD_FUNCTION_UE_ULSCH_ENCODING T_ID(461)
#define T_VCD_FUNCTION_ENB_BEAM_PRECODING T_ID(462) #define T_VCD_FUNCTION_UE_ULSCH_ENCODING_FILL_CQI T_ID(462)
#define T_VCD_FUNCTION_ENB_OFDM_MODULATION T_ID(463) #define T_VCD_FUNCTION_UE_ULSCH_SCRAMBLING T_ID(463)
#define T_VCD_FUNCTION_MACPHY_INIT T_ID(464) #define T_VCD_FUNCTION_ENB_DLSCH_MODULATION T_ID(464)
#define T_VCD_FUNCTION_MACPHY_EXIT T_ID(465) #define T_VCD_FUNCTION_ENB_DLSCH_ENCODING T_ID(465)
#define T_VCD_FUNCTION_ENB_DLSCH_ULSCH_SCHEDULER T_ID(466) #define T_VCD_FUNCTION_ENB_DLSCH_ENCODING_W T_ID(466)
#define T_VCD_FUNCTION_FILL_RAR T_ID(467) #define T_VCD_FUNCTION_ENB_DLSCH_SCRAMBLING T_ID(467)
#define T_VCD_FUNCTION_TERMINATE_RA_PROC T_ID(468) #define T_VCD_FUNCTION_ENB_BEAM_PRECODING T_ID(468)
#define T_VCD_FUNCTION_INITIATE_RA_PROC T_ID(469) #define T_VCD_FUNCTION_ENB_OFDM_MODULATION T_ID(469)
#define T_VCD_FUNCTION_CANCEL_RA_PROC T_ID(470) #define T_VCD_FUNCTION_MACPHY_INIT T_ID(470)
#define T_VCD_FUNCTION_GET_DCI_SDU T_ID(471) #define T_VCD_FUNCTION_MACPHY_EXIT T_ID(471)
#define T_VCD_FUNCTION_GET_DLSCH_SDU T_ID(472) #define T_VCD_FUNCTION_ENB_DLSCH_ULSCH_SCHEDULER T_ID(472)
#define T_VCD_FUNCTION_RX_SDU T_ID(473) #define T_VCD_FUNCTION_FILL_RAR T_ID(473)
#define T_VCD_FUNCTION_MRBCH_PHY_SYNC_FAILURE T_ID(474) #define T_VCD_FUNCTION_TERMINATE_RA_PROC T_ID(474)
#define T_VCD_FUNCTION_SR_INDICATION T_ID(475) #define T_VCD_FUNCTION_INITIATE_RA_PROC T_ID(475)
#define T_VCD_FUNCTION_DLSCH_PREPROCESSOR T_ID(476) #define T_VCD_FUNCTION_CANCEL_RA_PROC T_ID(476)
#define T_VCD_FUNCTION_SCHEDULE_DLSCH T_ID(477) #define T_VCD_FUNCTION_GET_DCI_SDU T_ID(477)
#define T_VCD_FUNCTION_FILL_DLSCH_DCI T_ID(478) #define T_VCD_FUNCTION_GET_DLSCH_SDU T_ID(478)
#define T_VCD_FUNCTION_OUT_OF_SYNC_IND T_ID(479) #define T_VCD_FUNCTION_RX_SDU T_ID(479)
#define T_VCD_FUNCTION_UE_DECODE_SI T_ID(480) #define T_VCD_FUNCTION_MRBCH_PHY_SYNC_FAILURE T_ID(480)
#define T_VCD_FUNCTION_UE_DECODE_PCCH T_ID(481) #define T_VCD_FUNCTION_SR_INDICATION T_ID(481)
#define T_VCD_FUNCTION_UE_DECODE_CCCH T_ID(482) #define T_VCD_FUNCTION_DLSCH_PREPROCESSOR T_ID(482)
#define T_VCD_FUNCTION_UE_DECODE_BCCH T_ID(483) #define T_VCD_FUNCTION_SCHEDULE_DLSCH T_ID(483)
#define T_VCD_FUNCTION_UE_SEND_SDU T_ID(484) #define T_VCD_FUNCTION_FILL_DLSCH_DCI T_ID(484)
#define T_VCD_FUNCTION_UE_GET_SDU T_ID(485) #define T_VCD_FUNCTION_OUT_OF_SYNC_IND T_ID(485)
#define T_VCD_FUNCTION_UE_GET_RACH T_ID(486) #define T_VCD_FUNCTION_UE_DECODE_SI T_ID(486)
#define T_VCD_FUNCTION_UE_PROCESS_RAR T_ID(487) #define T_VCD_FUNCTION_UE_DECODE_PCCH T_ID(487)
#define T_VCD_FUNCTION_UE_SCHEDULER T_ID(488) #define T_VCD_FUNCTION_UE_DECODE_CCCH T_ID(488)
#define T_VCD_FUNCTION_UE_GET_SR T_ID(489) #define T_VCD_FUNCTION_UE_DECODE_BCCH T_ID(489)
#define T_VCD_FUNCTION_UE_SEND_MCH_SDU T_ID(490) #define T_VCD_FUNCTION_UE_SEND_SDU T_ID(490)
#define T_VCD_FUNCTION_RLC_DATA_REQ T_ID(491) #define T_VCD_FUNCTION_UE_GET_SDU T_ID(491)
#define T_VCD_FUNCTION_MAC_RLC_STATUS_IND T_ID(492) #define T_VCD_FUNCTION_UE_GET_RACH T_ID(492)
#define T_VCD_FUNCTION_MAC_RLC_DATA_REQ T_ID(493) #define T_VCD_FUNCTION_UE_PROCESS_RAR T_ID(493)
#define T_VCD_FUNCTION_MAC_RLC_DATA_IND T_ID(494) #define T_VCD_FUNCTION_UE_SCHEDULER T_ID(494)
#define T_VCD_FUNCTION_RLC_UM_TRY_REASSEMBLY T_ID(495) #define T_VCD_FUNCTION_UE_GET_SR T_ID(495)
#define T_VCD_FUNCTION_RLC_UM_CHECK_TIMER_DAR_TIME_OUT T_ID(496) #define T_VCD_FUNCTION_UE_SEND_MCH_SDU T_ID(496)
#define T_VCD_FUNCTION_RLC_UM_RECEIVE_PROCESS_DAR T_ID(497) #define T_VCD_FUNCTION_RLC_DATA_REQ T_ID(497)
#define T_VCD_FUNCTION_PDCP_RUN T_ID(498) #define T_VCD_FUNCTION_MAC_RLC_STATUS_IND T_ID(498)
#define T_VCD_FUNCTION_PDCP_DATA_REQ T_ID(499) #define T_VCD_FUNCTION_MAC_RLC_DATA_REQ T_ID(499)
#define T_VCD_FUNCTION_PDCP_DATA_IND T_ID(500) #define T_VCD_FUNCTION_MAC_RLC_DATA_IND T_ID(500)
#define T_VCD_FUNCTION_PDCP_APPLY_SECURITY T_ID(501) #define T_VCD_FUNCTION_RLC_UM_TRY_REASSEMBLY T_ID(501)
#define T_VCD_FUNCTION_PDCP_VALIDATE_SECURITY T_ID(502) #define T_VCD_FUNCTION_RLC_UM_CHECK_TIMER_DAR_TIME_OUT T_ID(502)
#define T_VCD_FUNCTION_PDCP_FIFO_READ T_ID(503) #define T_VCD_FUNCTION_RLC_UM_RECEIVE_PROCESS_DAR T_ID(503)
#define T_VCD_FUNCTION_PDCP_FIFO_READ_BUFFER T_ID(504) #define T_VCD_FUNCTION_PDCP_RUN T_ID(504)
#define T_VCD_FUNCTION_PDCP_FIFO_FLUSH T_ID(505) #define T_VCD_FUNCTION_PDCP_DATA_REQ T_ID(505)
#define T_VCD_FUNCTION_PDCP_FIFO_FLUSH_BUFFER T_ID(506) #define T_VCD_FUNCTION_PDCP_DATA_IND T_ID(506)
#define T_VCD_FUNCTION_RRC_RX_TX T_ID(507) #define T_VCD_FUNCTION_PDCP_APPLY_SECURITY T_ID(507)
#define T_VCD_FUNCTION_RRC_MAC_CONFIG T_ID(508) #define T_VCD_FUNCTION_PDCP_VALIDATE_SECURITY T_ID(508)
#define T_VCD_FUNCTION_RRC_UE_DECODE_SIB1 T_ID(509) #define T_VCD_FUNCTION_PDCP_FIFO_READ T_ID(509)
#define T_VCD_FUNCTION_RRC_UE_DECODE_SI T_ID(510) #define T_VCD_FUNCTION_PDCP_FIFO_READ_BUFFER T_ID(510)
#define T_VCD_FUNCTION_GTPV1U_ENB_TASK T_ID(511) #define T_VCD_FUNCTION_PDCP_FIFO_FLUSH T_ID(511)
#define T_VCD_FUNCTION_GTPV1U_PROCESS_UDP_REQ T_ID(512) #define T_VCD_FUNCTION_PDCP_FIFO_FLUSH_BUFFER T_ID(512)
#define T_VCD_FUNCTION_GTPV1U_PROCESS_TUNNEL_DATA_REQ T_ID(513) #define T_VCD_FUNCTION_RRC_RX_TX T_ID(513)
#define T_VCD_FUNCTION_UDP_ENB_TASK T_ID(514) #define T_VCD_FUNCTION_RRC_MAC_CONFIG T_ID(514)
#define T_VCD_FUNCTION_EMU_TRANSPORT T_ID(515) #define T_VCD_FUNCTION_RRC_UE_DECODE_SIB1 T_ID(515)
#define T_VCD_FUNCTION_LOG_RECORD T_ID(516) #define T_VCD_FUNCTION_RRC_UE_DECODE_SI T_ID(516)
#define T_VCD_FUNCTION_ITTI_ENQUEUE_MESSAGE T_ID(517) #define T_VCD_FUNCTION_GTPV1U_ENB_TASK T_ID(517)
#define T_VCD_FUNCTION_ITTI_DUMP_ENQUEUE_MESSAGE T_ID(518) #define T_VCD_FUNCTION_GTPV1U_PROCESS_UDP_REQ T_ID(518)
#define T_VCD_FUNCTION_ITTI_DUMP_ENQUEUE_MESSAGE_MALLOC T_ID(519) #define T_VCD_FUNCTION_GTPV1U_PROCESS_TUNNEL_DATA_REQ T_ID(519)
#define T_VCD_FUNCTION_ITTI_RELAY_THREAD T_ID(520) #define T_VCD_FUNCTION_UDP_ENB_TASK T_ID(520)
#define T_VCD_FUNCTION_TEST T_ID(521) #define T_VCD_FUNCTION_EMU_TRANSPORT T_ID(521)
#define T_VCD_FUNCTION_SEND_IF4 T_ID(522) #define T_VCD_FUNCTION_LOG_RECORD T_ID(522)
#define T_VCD_FUNCTION_RECV_IF4 T_ID(523) #define T_VCD_FUNCTION_ITTI_ENQUEUE_MESSAGE T_ID(523)
#define T_VCD_FUNCTION_SEND_IF5 T_ID(524) #define T_VCD_FUNCTION_ITTI_DUMP_ENQUEUE_MESSAGE T_ID(524)
#define T_VCD_FUNCTION_RECV_IF5 T_ID(525) #define T_VCD_FUNCTION_ITTI_DUMP_ENQUEUE_MESSAGE_MALLOC T_ID(525)
#define T_VCD_FUNCTION_TRX_COMPR_IF T_ID(526) #define T_VCD_FUNCTION_ITTI_RELAY_THREAD T_ID(526)
#define T_VCD_FUNCTION_TRX_DECOMPR_IF T_ID(527) #define T_VCD_FUNCTION_TEST T_ID(527)
#define T_VCD_FUNCTION_NFAPI T_ID(528) #define T_VCD_FUNCTION_SEND_IF4 T_ID(528)
#define T_VCD_FUNCTION_GENERATE_PCFICH T_ID(529) #define T_VCD_FUNCTION_RECV_IF4 T_ID(529)
#define T_VCD_FUNCTION_GENERATE_DCI0 T_ID(530) #define T_VCD_FUNCTION_SEND_IF5 T_ID(530)
#define T_VCD_FUNCTION_GENERATE_DLSCH T_ID(531) #define T_VCD_FUNCTION_RECV_IF5 T_ID(531)
#define T_VCD_FUNCTION_GENERATE_PHICH T_ID(532) #define T_VCD_FUNCTION_TRX_COMPR_IF T_ID(532)
#define T_VCD_FUNCTION_PDCCH_SCRAMBLING T_ID(533) #define T_VCD_FUNCTION_TRX_DECOMPR_IF T_ID(533)
#define T_VCD_FUNCTION_PDCCH_MODULATION T_ID(534) #define T_VCD_FUNCTION_NFAPI T_ID(534)
#define T_VCD_FUNCTION_PDCCH_INTERLEAVING T_ID(535) #define T_VCD_FUNCTION_GENERATE_PCFICH T_ID(535)
#define T_VCD_FUNCTION_PDCCH_TX T_ID(536) #define T_VCD_FUNCTION_GENERATE_DCI0 T_ID(536)
#define T_NUMBER_OF_IDS 537 #define T_VCD_FUNCTION_GENERATE_DLSCH T_ID(537)
#define T_VCD_FUNCTION_GENERATE_PHICH T_ID(538)
#define T_LEGACY_PROTO_AGENT_DEBUG T_ID(538) #define T_VCD_FUNCTION_PDCCH_SCRAMBLING T_ID(539)
#define T_LEGACY_PROTO_AGENT_INFO T_ID(539) #define T_VCD_FUNCTION_PDCCH_MODULATION T_ID(540)
#define T_LEGACY_PROTO_AGENT_ERROR T_ID(540) #define T_VCD_FUNCTION_PDCCH_INTERLEAVING T_ID(541)
#define T_LEGACY_F1U_ERROR T_ID(541) #define T_VCD_FUNCTION_PDCCH_TX T_ID(542)
#define T_LEGACY_F1U_DEBUG T_ID(542) #define T_NUMBER_OF_IDS 543
...@@ -621,7 +621,7 @@ ID = LEGACY_OCM_DEBUG ...@@ -621,7 +621,7 @@ ID = LEGACY_OCM_DEBUG
FORMAT = string,log FORMAT = string,log
ID = LEGACY_OCM_TRACE ID = LEGACY_OCM_TRACE
DESC = OCM legacy logs - trace level 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 FORMAT = string,log
ID = LEGACY_OIP_INFO ID = LEGACY_OIP_INFO
...@@ -838,6 +838,36 @@ ID = LEGACY_CLI_TRACE ...@@ -838,6 +838,36 @@ ID = LEGACY_CLI_TRACE
GROUP = ALL:LEGACY_CLI:LEGACY_GROUP_TRACE:LEGACY GROUP = ALL:LEGACY_CLI:LEGACY_GROUP_TRACE:LEGACY
FORMAT = string,log 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 #### #### UE LOGS ####
################# #################
......
...@@ -19,59 +19,22 @@ ...@@ -19,59 +19,22 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/* Messages for S1AP logging */ /* eNB application layer -> F1AP messages */
MESSAGE_DEF(S1AP_UPLINK_NAS_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , s1ap_uplink_nas_log) MESSAGE_DEF(F1AP_SETUP_REQ , MESSAGE_PRIORITY_MED, f1ap_setup_req_t , f1ap_setup_req)
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 -> S1AP messages */ /* F1AP -> eNB application layer messages */
MESSAGE_DEF(S1AP_REGISTER_ENB_REQ , MESSAGE_PRIORITY_MED, s1ap_register_enb_req_t , s1ap_register_enb_req) 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 */ /* MAC -> F1AP messages */
MESSAGE_DEF(S1AP_REGISTER_ENB_CNF , MESSAGE_PRIORITY_MED, s1ap_register_enb_cnf_t , s1ap_register_enb_cnf) MESSAGE_DEF(F1AP_INITIAL_UL_RRC_MESSAGE , MESSAGE_PRIORITY_MED, f1ap_initial_ul_rrc_message_t , f1ap_initial_ul_rrc_message)
MESSAGE_DEF(S1AP_DEREGISTERED_ENB_IND , MESSAGE_PRIORITY_MED, s1ap_deregistered_enb_ind_t , s1ap_deregistered_enb_ind) 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 */ /* RRC -> F1AP messages */
MESSAGE_DEF(S1AP_DOWNLINK_NAS , MESSAGE_PRIORITY_MED, s1ap_downlink_nas_t , s1ap_downlink_nas ) MESSAGE_DEF(F1AP_DL_RRC_MESSAGE , MESSAGE_PRIORITY_MED, f1ap_dl_rrc_message_t , f1ap_downlink_rrc_message )
MESSAGE_DEF(S1AP_INITIAL_CONTEXT_SETUP_REQ , MESSAGE_PRIORITY_MED, s1ap_initial_context_setup_req_t , s1ap_initial_context_setup_req ) //MESSAGE_DEF(F1AP_INITIAL_CONTEXT_SETUP_REQ , MESSAGE_PRIORITY_MED, f1ap_initial_context_setup_req_t , f1ap_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)
/* S1AP <-> RRC messages (can be initiated either by MME or eNB) */
MESSAGE_DEF(S1AP_UE_CONTEXT_RELEASE_REQ , MESSAGE_PRIORITY_MED, s1ap_ue_release_req_t , s1ap_ue_release_req)
...@@ -19,628 +19,187 @@ ...@@ -19,628 +19,187 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
#ifndef S1AP_MESSAGES_TYPES_H_ #ifndef F1AP_MESSAGES_TYPES_H_
#define S1AP_MESSAGES_TYPES_H_ #define F1AP_MESSAGES_TYPES_H_
//-------------------------------------------------------------------------------------------// //-------------------------------------------------------------------------------------------//
// Defines to access message fields. // Defines to access message fields.
#define S1AP_REGISTER_ENB_REQ(mSGpTR) (mSGpTR)->ittiMsg.s1ap_register_enb_req #define F1AP_SETUP_REQ(mSGpTR) (mSGpTR)->ittiMsg.f1ap_setup_req
#define F1AP_SETUP_RESP(mSGpTR) (mSGpTR)->ittiMsg.f1ap_setup_resp
#define S1AP_REGISTER_ENB_CNF(mSGpTR) (mSGpTR)->ittiMsg.s1ap_register_enb_cnf #define F1AP_SETUP_FAILURE(mSGpTR) (mSGpTR)->ittiMsg.f1ap_setup_failure
#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_INITIAL_UL_RRC_MESSAGE(mSGpTR) (mSGpTR)->ittiMsg.f1ap_initial_ul_rrc_message
/* Maximum number of e-rabs to be setup/deleted in a single message. #define F1AP_UL_RRC_MESSAGE(mSGpTR) (mSGpTR)->ittiMsg.f1ap_ul_rrc_message
* Even if only one bearer will be modified by 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 S1AP_MAX_E_RAB 11 #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 /* Length of the transport layer address string
* 160 bits / 8 bits by char. * 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
/* 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;
//-------------------------------------------------------------------------------------------//
// 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;
/* Optional name for the cell #define F1AP_MAX_NB_CU_IP_ADDRESS 10
* NOTE: the name can be NULL (i.e no name) and will be cropped to 150
* characters.
*/
char *eNB_name;
/* Tracking area code */ // Note this should be 512 from maxval in 38.473
uint16_t tac; #define F1AP_MAX_NB_CELLS 2
/* Mobile Country Code typedef struct f1ap_setup_req_s {
* 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 */ // Midhaul networking parameters
paging_drx_t default_drx;
/* The eNB IP address to bind */ /* The eNB IP address to bind */
net_ip_address_t enb_ip_address; char CU_ipv4_address[16];
int CU_port;
/* 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];
/* Number of SCTP streams used for a mme association */ /* Number of SCTP streams used for a mme association */
uint16_t sctp_in_streams; uint16_t sctp_in_streams;
uint16_t sctp_out_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 // F1_Setup_Req payload
* for an UE. uint32_t gNB_DU_id;
* The rnti uniquely identifies an UE within a cell. Later the enb_ue_s1ap_id char *gNB_DU_name;
* 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;
/* Establishment cause as sent by UE */ /// number of DU cells available
rrc_establishment_cause_t establishment_cause; uint16_t num_cells_available; //0< num_cells_to_available <= 512;
/* NAS PDU */ // Served Cell Information
nas_pdu_t nas_pdu; /* Tracking area code */
uint16_t tac[F1AP_MAX_NB_CELLS];
/* If this flag is set S1AP layer is expecting the GUMMEI. If = 0, /* Mobile Country Codes
* the temporary s-tmsi is used. * Mobile Network Codes
*/ */
ue_identity_t ue_identity; uint16_t mcc[F1AP_MAX_NB_CELLS];
} s1ap_nas_first_req_t; uint16_t mnc[F1AP_MAX_NB_CELLS];
uint8_t mnc_digit_length[F1AP_MAX_NB_CELLS];
typedef struct s1ap_uplink_nas_s {
/* Unique UE identifier within an eNB */ // NR Physical Cell Ids
unsigned eNB_ue_s1ap_id:24; uint16_t nr_pci[F1AP_MAX_NB_CELLS];
// NR Cell Ids
/* NAS pdu */ uint8_t nr_cellid[F1AP_MAX_NB_CELLS];
nas_pdu_t nas_pdu; // Number of slide support items (max 16, could be increased to as much as 1024)
} s1ap_uplink_nas_t; uint16_t num_ssi[F1AP_MAX_NB_CELLS];
uint8_t sst[F1AP_MAX_NB_CELLS][16];
typedef struct s1ap_ue_cap_info_ind_s { uint8_t sd[F1AP_MAX_NB_CELLS][16];
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;
union {
typedef struct s1ap_initial_context_setup_req_s { struct {
/* UE id for initial connection to S1AP */ uint32_t ul_nr_arfcn;
uint16_t ue_initial_id; uint8_t ul_scs;
uint8_t ul_nrb;
/* eNB ue s1ap id as initialized by S1AP layer */
unsigned eNB_ue_s1ap_id:24; uint32_t dl_nr_arfcn;
uint8_t dl_scs;
/* UE aggregate maximum bitrate */ uint8_t dl_nrb;
ambr_t ue_ambr;
uint32_t sul_active;
/* Security algorithms */ uint32_t sul_nr_arfcn;
security_capabilities_t security_capabilities; uint8_t sul_scs;
uint8_t sul_nrb;
/* Security key */
uint8_t security_key[SECURITY_KEY_LENGTH]; uint8_t num_frequency_bands;
uint16_t nr_band[32];
/* Number of e_rab to be setup in the list */ uint8_t num_sul_frequency_bands;
uint8_t nb_of_e_rabs; uint16_t nr_sul_band[32];
/* list of e_rab to be setup by RRC layers */ } fdd;
e_rab_t e_rab_param[S1AP_MAX_E_RAB]; struct {
} s1ap_initial_context_setup_req_t;
uint32_t nr_arfcn;
typedef struct tai_plmn_identity_s { 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; uint16_t mcc;
/// mnc of DU cell
uint16_t mnc; uint16_t mnc;
/// mnc digit length of DU cells
uint8_t mnc_digit_length; uint8_t mnc_digit_length;
} plmn_identity_t; uint16_t crnti;
uint8_t *rrc_container;
typedef struct s1ap_paging_ind_s { uint8_t *du2cu_rrc_container;
/* UE identity index value. } f1ap_initial_ul_rrc_message_t;
* 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 */ typedef struct f1ap_ul_rrc_message_s {
e_rab_release_t e_rab_release[S1AP_MAX_E_RAB]; 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;
/* Number of e_rab failed to be released in list */ /*typedef struct f1ap_ue_context_setup_req_s {
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; } f1ap_ue_context_setup_req_t;*/
#endif /* S1AP_MESSAGES_TYPES_H_ */ #endif /* F1AP_MESSAGES_TYPES_H_ */
...@@ -390,7 +390,7 @@ typedef struct { ...@@ -390,7 +390,7 @@ typedef struct {
#define IDLE 0 //#define IDLE 0
#define NEED_RADIO_CONFIG 3 #define NEED_RADIO_CONFIG 3
#define RADIO_CONFIG_TX 2 #define RADIO_CONFIG_TX 2
#define RADIO_CONFIG_OK 1 #define RADIO_CONFIG_OK 1
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include "ral_messages_def.h" #include "ral_messages_def.h"
#endif #endif
#include "s1ap_messages_def.h" #include "s1ap_messages_def.h"
#include "f1ap_messages_def.h"
#include "x2ap_messages_def.h" #include "x2ap_messages_def.h"
#include "sctp_messages_def.h" #include "sctp_messages_def.h"
#include "udp_messages_def.h" #include "udp_messages_def.h"
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
#include "ral_messages_types.h" #include "ral_messages_types.h"
#endif #endif
#include "s1ap_messages_types.h" #include "s1ap_messages_types.h"
#include "f1ap_messages_types.h"
#include "x2ap_messages_types.h" #include "x2ap_messages_types.h"
#include "sctp_messages_types.h" #include "sctp_messages_types.h"
#include "udp_messages_types.h" #include "udp_messages_types.h"
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include "as_message.h" #include "as_message.h"
#include "rrc_types.h" #include "rrc_types.h"
#include "s1ap_messages_types.h" #include "s1ap_messages_types.h"
#include "f1ap_messages_types.h"
#ifdef CMAKER #ifdef CMAKER
#include "SystemInformationBlockType2.h" #include "SystemInformationBlockType2.h"
#else #else
......
...@@ -113,7 +113,7 @@ static void configure_rrc(uint32_t enb_id) ...@@ -113,7 +113,7 @@ static void configure_rrc(uint32_t enb_id)
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
# if defined(ENABLE_USE_MME) # 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; uint32_t enb_id;
MessageDef *msg_p; MessageDef *msg_p;
...@@ -121,20 +121,38 @@ static uint32_t eNB_app_register(uint32_t enb_id_start, uint32_t enb_id_end)//, ...@@ -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++) { for (enb_id = enb_id_start; (enb_id < enb_id_end) ; enb_id++) {
{ {
if (node_type == ngran_eNB_DU) { // F1AP registration
// 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);
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 */ /* 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); msg_p = itti_alloc_new_message (TASK_ENB_APP, S1AP_REGISTER_ENB_REQ);
RCconfig_S1(msg_p, enb_id); 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(); 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,"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 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++; register_enb_pending++;
} }
} }
...@@ -161,6 +179,9 @@ void *eNB_app_task(void *args_p) ...@@ -161,6 +179,9 @@ void *eNB_app_task(void *args_p)
int result; int result;
/* for no gcc warnings */ /* for no gcc warnings */
(void)instance; (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); itti_mark_task_ready (TASK_ENB_APP);
...@@ -168,12 +189,15 @@ void *eNB_app_task(void *args_p) ...@@ -168,12 +189,15 @@ void *eNB_app_task(void *args_p)
RCconfig_L1(); 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); 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"); 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, AssertFatal (enb_nb <= RC.nb_inst,
"Number of eNB is greater than eNB defined in configuration file (%d/%d)!", "Number of eNB is greater than eNB defined in configuration file (%d/%d)!",
enb_nb, RC.nb_inst); enb_nb, RC.nb_inst);
...@@ -183,17 +207,26 @@ void *eNB_app_task(void *args_p) ...@@ -183,17 +207,26 @@ void *eNB_app_task(void *args_p)
RC.rrc = (eNB_RRC_INST **)malloc(RC.nb_inst*sizeof(eNB_RRC_INST *)); 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); 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++) { 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)); 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); 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)); memset((void *)RC.rrc[enb_id],0,sizeof(eNB_RRC_INST));
configure_rrc(enb_id); 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) # if defined(ENABLE_USE_MME)
/* Try to register each eNB */ /* Try to register each eNB */
registered_enb = 0; 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 # else
/* Start L2L1 task */ /* Start L2L1 task */
msg_p = itti_alloc_new_message(TASK_ENB_APP, INITIALIZE_MESSAGE); msg_p = itti_alloc_new_message(TASK_ENB_APP, INITIALIZE_MESSAGE);
...@@ -251,7 +284,7 @@ void *eNB_app_task(void *args_p) ...@@ -251,7 +284,7 @@ void *eNB_app_task(void *args_p)
sleep(ENB_REGISTER_RETRY_DELAY); sleep(ENB_REGISTER_RETRY_DELAY);
/* Restart the registration process */ /* Restart the registration process */
registered_enb = 0; 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) ...@@ -271,7 +304,7 @@ void *eNB_app_task(void *args_p)
if (TIMER_HAS_EXPIRED (msg_p).timer_id == enb_register_retry_timer_id) { if (TIMER_HAS_EXPIRED (msg_p).timer_id == enb_register_retry_timer_id) {
/* Restart the registration process */ /* Restart the registration process */
registered_enb = 0; 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; break;
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
# include "sctp_eNB_task.h" # include "sctp_eNB_task.h"
# endif # endif
#endif #endif
#include "common/ran_context.h"
#include "sctp_default_values.h" #include "sctp_default_values.h"
#include "SystemInformationBlockType2.h" #include "SystemInformationBlockType2.h"
#include "LAYER2/MAC/mac_extern.h" #include "LAYER2/MAC/mac_extern.h"
...@@ -329,9 +330,9 @@ void RCconfig_L1(void) { ...@@ -329,9 +330,9 @@ void RCconfig_L1(void) {
} }
} }
void RCconfig_macrlc() { void RCconfig_macrlc(int *mac_has_f1) {
int j;
int j;
paramdef_t MacRLC_Params[] = MACRLCPARAMS_DESC; paramdef_t MacRLC_Params[] = MACRLCPARAMS_DESC;
paramlist_def_t MacRLC_ParamList = {CONFIG_STRING_MACRLC_LIST,NULL,0}; paramlist_def_t MacRLC_ParamList = {CONFIG_STRING_MACRLC_LIST,NULL,0};
...@@ -340,10 +341,13 @@ void RCconfig_macrlc() { ...@@ -340,10 +341,13 @@ void RCconfig_macrlc() {
if ( MacRLC_ParamList.numelt > 0) { if ( MacRLC_ParamList.numelt > 0) {
RC.nb_macrlc_inst=MacRLC_ParamList.numelt; RC.nb_macrlc_inst=MacRLC_ParamList.numelt;
mac_top_init_eNB(); mac_top_init_eNB();
RC.nb_mac_CC = (int*)malloc(RC.nb_macrlc_inst*sizeof(int)); 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++) { for (j=0;j<RC.nb_macrlc_inst;j++) {
RC.mac[j]->puSch10xSnr = *(MacRLC_ParamList.paramarray[j][MACRLC_PUSCH10xSNR_IDX ].iptr); RC.mac[j]->puSch10xSnr = *(MacRLC_ParamList.paramarray[j][MACRLC_PUSCH10xSNR_IDX ].iptr);
RC.mac[j]->puCch10xSnr = *(MacRLC_ParamList.paramarray[j][MACRLC_PUCCH10xSNR_IDX ].iptr); RC.mac[j]->puCch10xSnr = *(MacRLC_ParamList.paramarray[j][MACRLC_PUCCH10xSNR_IDX ].iptr);
...@@ -353,8 +357,9 @@ void RCconfig_macrlc() { ...@@ -353,8 +357,9 @@ void RCconfig_macrlc() {
if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "local_RRC") == 0) { if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "local_RRC") == 0) {
// check number of instances is same as RRC/PDCP // check number of instances is same as RRC/PDCP
printf("Configuring local RRC for MACRLC\n");
} else if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "cudu") == 0) { } 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.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.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)); 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() { ...@@ -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.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.remote_portd = *(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_N_PORTD_IDX].iptr);;
RC.mac[j]->eth_params_n.transp_preference = ETH_UDP_MODE; RC.mac[j]->eth_params_n.transp_preference = ETH_UDP_MODE;
mac_has_f1[j] = 1;
} else { // other midhaul } else { // other midhaul
AssertFatal(1==0,"MACRLC %d: %s unknown northbound midhaul\n",j, *(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr)); 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() { ...@@ -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)); printf("sched mode = default %d [%s]\n",global_scheduler_mode,*(MacRLC_ParamList.paramarray[j][MACRLC_SCHED_MODE_IDX].strptr));
} }
}// j=0..num_inst }// j=0..num_inst
} else {// MacRLC_ParamList.numelt > 0 }/* else {// MacRLC_ParamList.numelt > 0
AssertFatal (0, AssertFatal (0,
"No " CONFIG_STRING_MACRLC_LIST " configuration found"); "No " CONFIG_STRING_MACRLC_LIST " configuration found");
} }*/
} }
...@@ -713,6 +719,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { ...@@ -713,6 +719,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
paramdef_t SRB1Params[] = SRB1PARAMS_DESC; paramdef_t SRB1Params[] = SRB1PARAMS_DESC;
/* map parameter checking array instances to parameter definition array instances */ /* map parameter checking array instances to parameter definition array instances */
for (int I=0; I< ( sizeof(CCsParams)/ sizeof(paramdef_t) ) ; I++) { for (int I=0; I< ( sizeof(CCsParams)/ sizeof(paramdef_t) ) ; I++) {
CCsParams[I].chkPptr = &(config_check_CCparams[I]); CCsParams[I].chkPptr = &(config_check_CCparams[I]);
...@@ -768,38 +775,46 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { ...@@ -768,38 +775,46 @@ 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) { 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)); 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)); 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)); 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); 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); 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); 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); 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->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 // search if in active list
LOG_I(RRC,"RRC instances %d\n",num_enbs);
for (k=0; k <num_enbs ; k++) { 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) { if (strcmp(ENBSParams[ENB_ACTIVE_ENBS_IDX].strlistptr[k], *(ENBParamList.paramarray[i][ENB_ENB_NAME_IDX].strptr) )== 0) {
char enbpath[MAX_OPTNAME_SIZE + 8]; char enbpath[MAX_OPTNAME_SIZE + 8];
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; RRC_CONFIGURATION_REQ (msg_p).cell_identity = enb_id;
/* /*
...@@ -828,6 +843,8 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { ...@@ -828,6 +843,8 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
// Parse optional physical parameters // Parse optional physical parameters
sprintf(enbpath,"%s.[%i]",ENB_CONFIG_STRING_ENB_LIST,k), sprintf(enbpath,"%s.[%i]",ENB_CONFIG_STRING_ENB_LIST,k),
config_getlist( &CCsParamList,NULL,0,enbpath); config_getlist( &CCsParamList,NULL,0,enbpath);
}
LOG_I(RRC,"num component carriers %d \n",CCsParamList.numelt); LOG_I(RRC,"num component carriers %d \n",CCsParamList.numelt);
if ( CCsParamList.numelt> 0) { if ( CCsParamList.numelt> 0) {
...@@ -846,7 +863,8 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { ...@@ -846,7 +863,8 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
nb_cc++; 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, AssertFatal (tdd_config <= TDD_Config__subframeAssignment_sa6,
...@@ -871,25 +889,20 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { ...@@ -871,25 +889,20 @@ 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 prefix_type choice: NORMAL or EXTENDED !\n", "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); 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).eutra_band[j] = eutra_band;
RRC_CONFIGURATION_REQ (msg_p).downlink_frequency[j] = (uint32_t) downlink_frequency; 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).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; RRC_CONFIGURATION_REQ (msg_p).Nid_cell[j]= Nid_cell;
if (Nid_cell>503) { if (Nid_cell>503) {
...@@ -917,60 +930,35 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { ...@@ -917,60 +930,35 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
} }
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) if ((nb_antenna_ports <1) || (nb_antenna_ports > 2))
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, AssertFatal (0,
"Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for prefix_type choice: NORMAL or EXTENDED !\n", "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, prefix_type); RC.config_file_name, i, nb_antenna_ports);
}
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).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; RRC_CONFIGURATION_REQ (msg_p).nb_antenna_ports[j] = nb_antenna_ports;
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");
} }
else {//this is CU, SIB2-20 in CU
if ((nb_antenna_ports <1) || (nb_antenna_ports > 2)) #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
if (!pbch_repetition)
AssertFatal (0, AssertFatal (0,
"Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for nb_antenna_ports choice: 1..2 !\n", "Failed to parse eNB configuration file %s, enb %d define %s: TRUE,FALSE!\n",
RC.config_file_name, i, nb_antenna_ports); 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).nb_antenna_ports[j] = nb_antenna_ports;
RRC_CONFIGURATION_REQ (msg_p).prach_root[j] = prach_root; RRC_CONFIGURATION_REQ (msg_p).prach_root[j] = prach_root;
...@@ -1034,7 +1022,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { ...@@ -1034,7 +1022,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 \"%d\" for pucch_nCS_AN choice: 0..7!\n", "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); 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; RRC_CONFIGURATION_REQ (msg_p).pucch_n1_AN[j] = pucch_n1_AN;
if ((pucch_n1_AN <0) || (pucch_n1_AN > 2047)) if ((pucch_n1_AN <0) || (pucch_n1_AN > 2047))
...@@ -1042,7 +1030,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { ...@@ -1042,7 +1030,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 \"%d\" for pucch_n1_AN choice: 0..2047!\n", "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); RC.config_file_name, i, pucch_n1_AN);
//#endif //#endif
RRC_CONFIGURATION_REQ (msg_p).pdsch_referenceSignalPower[j] = pdsch_referenceSignalPower; RRC_CONFIGURATION_REQ (msg_p).pdsch_referenceSignalPower[j] = pdsch_referenceSignalPower;
if ((pdsch_referenceSignalPower <-60) || (pdsch_referenceSignalPower > 50)) if ((pdsch_referenceSignalPower <-60) || (pdsch_referenceSignalPower > 50))
...@@ -1958,6 +1946,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { ...@@ -1958,6 +1946,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
} }
} }
if (rrc->node_type == ngran_eNB_CU || rrc->node_type == ngran_ng_eNB_CU) {
char srb1path[MAX_OPTNAME_SIZE*2 + 8]; char srb1path[MAX_OPTNAME_SIZE*2 + 8];
sprintf(srb1path,"%s.%s",enbpath,ENB_CONFIG_STRING_SRB1); sprintf(srb1path,"%s.%s",enbpath,ENB_CONFIG_STRING_SRB1);
int npar = config_get( SRB1Params,sizeof(SRB1Params)/sizeof(paramdef_t), srb1path); int npar = config_get( SRB1Params,sizeof(SRB1Params)/sizeof(paramdef_t), srb1path);
...@@ -2299,7 +2288,8 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { ...@@ -2299,7 +2288,8 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
*/ */
break; break;
} }
}
}
} }
} }
return 0; return 0;
...@@ -2350,6 +2340,131 @@ int RCconfig_gtpu(void ) { ...@@ -2350,6 +2340,131 @@ int RCconfig_gtpu(void ) {
return 0; 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) { int RCconfig_S1(MessageDef *msg_p, uint32_t i) {
...@@ -2556,7 +2671,7 @@ void RCConfig(void) { ...@@ -2556,7 +2671,7 @@ void RCConfig(void) {
char aprefix[MAX_OPTNAME_SIZE*2 + 8]; char aprefix[MAX_OPTNAME_SIZE*2 + 8];
RCconfig_cudu(); // RCconfig_cudu();
/* get global parameters, defined outside any section in the config file */ /* get global parameters, defined outside any section in the config file */
...@@ -2579,6 +2694,9 @@ void RCConfig(void) { ...@@ -2579,6 +2694,9 @@ void RCConfig(void) {
config_getlist( &MACRLCParamList,NULL,0, NULL); config_getlist( &MACRLCParamList,NULL,0, NULL);
RC.nb_macrlc_inst = MACRLCParamList.numelt; 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 // Get num L1 instances
config_getlist( &L1ParamList,NULL,0, NULL); config_getlist( &L1ParamList,NULL,0, NULL);
RC.nb_L1_inst = L1ParamList.numelt; RC.nb_L1_inst = L1ParamList.numelt;
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
#include "PHY/impl_defs_lte.h" #include "PHY/impl_defs_lte.h"
#include "PHY/defs_eNB.h" #include "PHY/defs_eNB.h"
#include "s1ap_messages_types.h" #include "s1ap_messages_types.h"
#include "f1ap_messages_types.h"
#ifdef CMAKER #ifdef CMAKER
#include "SystemInformationBlockType2.h" #include "SystemInformationBlockType2.h"
#include "rrc_messages_types.h" #include "rrc_messages_types.h"
...@@ -134,7 +135,7 @@ typedef struct ru_config_s { ...@@ -134,7 +135,7 @@ typedef struct ru_config_s {
extern void RCconfig_RU(void); extern void RCconfig_RU(void);
extern void RCconfig_flexran(void); extern void RCconfig_flexran(void);
extern void RCconfig_L1(void); extern void RCconfig_L1(void);
extern void RCconfig_macrlc(void); extern void RCconfig_macrlc(int*);
extern void UE_config_stub_pnf(void); extern void UE_config_stub_pnf(void);
extern int RCconfig_gtpu(void ); extern int RCconfig_gtpu(void );
extern void RCConfig(void); extern void RCConfig(void);
...@@ -144,6 +145,9 @@ void ru_config_display(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_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc);
int RCconfig_S1(MessageDef *msg_p, uint32_t i); 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); void RCconfig_cudu(void);
cudu_params_t *get_cudu_config(void); cudu_params_t *get_cudu_config(void);
......
...@@ -36,6 +36,9 @@ ...@@ -36,6 +36,9 @@
#include "platform_types.h" #include "platform_types.h"
#include "log.h" #include "log.h"
/* This structure describes association of a DU to a CU */ /* This structure describes association of a DU to a CU */
typedef struct f1ap_info { typedef struct f1ap_info {
......
...@@ -394,6 +394,14 @@ extern int asn1_xer_print; ...@@ -394,6 +394,14 @@ extern int asn1_xer_print;
//Forward declaration //Forward declaration
//struct f1ap_message_s; //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 { typedef struct f1ap_message_s {
F1AP_ProtocolIE_ID_t id; F1AP_ProtocolIE_ID_t id;
F1AP_Criticality_t criticality; F1AP_Criticality_t criticality;
......
...@@ -82,6 +82,7 @@ ...@@ -82,6 +82,7 @@
* @{ * @{
*/ */
#define MAX_MAC_INST 16
#define BCCH_PAYLOAD_SIZE_MAX 128 #define BCCH_PAYLOAD_SIZE_MAX 128
#define CCCH_PAYLOAD_SIZE_MAX 128 #define CCCH_PAYLOAD_SIZE_MAX 128
#define PCCH_PAYLOAD_SIZE_MAX 128 #define PCCH_PAYLOAD_SIZE_MAX 128
......
...@@ -104,9 +104,9 @@ void mac_top_init_eNB(void) ...@@ -104,9 +104,9 @@ void mac_top_init_eNB(void)
"Could not initialize RLC layer\n"); "Could not initialize RLC layer\n");
// These should be out of here later // These should be out of here later
pdcp_layer_init(); //pdcp_layer_init();
rrc_init_global_param(); // rrc_init_global_param();
} else { } else {
RC.mac = NULL; RC.mac = NULL;
......
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
#include <string.h> #include <string.h>
#include "collection/tree.h" #include "collection/tree.h"
#include "common/ngran_types.h"
#include "rrc_types.h" #include "rrc_types.h"
//#include "PHY/phy_defs.h" //#include "PHY/phy_defs.h"
#include "LAYER2/RLC/rlc.h" #include "LAYER2/RLC/rlc.h"
...@@ -673,8 +674,10 @@ typedef struct { ...@@ -673,8 +674,10 @@ typedef struct {
uint32_t sizeof_paging[MAX_MOBILES_PER_ENB]; uint32_t sizeof_paging[MAX_MOBILES_PER_ENB];
} rrc_eNB_carrier_data_t; } rrc_eNB_carrier_data_t;
typedef struct eNB_RRC_INST_s { typedef struct eNB_RRC_INST_s {
/// southbound midhaul configuration /// southbound midhaul configuration
ngran_node_t node_type;
eth_params_t eth_params_s; eth_params_t eth_params_s;
rrc_eNB_carrier_data_t carrier[MAX_NUM_CCs]; rrc_eNB_carrier_data_t carrier[MAX_NUM_CCs];
uid_allocator_t uid_allocator; // for rrc_ue_head uid_allocator_t uid_allocator; // for rrc_ue_head
...@@ -715,6 +718,8 @@ typedef struct eNB_RRC_INST_s { ...@@ -715,6 +718,8 @@ typedef struct eNB_RRC_INST_s {
int srb1_timer_reordering; int srb1_timer_reordering;
int srb1_timer_status_prohibit; int srb1_timer_status_prohibit;
int srs_enable[MAX_NUM_CCs]; int srs_enable[MAX_NUM_CCs];
int cell_info_configured;
pthread_mutex_t cell_info_mutex;
} eNB_RRC_INST; } eNB_RRC_INST;
#define MAX_UE_CAPABILITY_SIZE 255 #define MAX_UE_CAPABILITY_SIZE 255
......
...@@ -156,22 +156,33 @@ init_SI( ...@@ -156,22 +156,33 @@ init_SI(
#endif #endif
LOG_D(RRC,"%s()\n\n\n\n",__FUNCTION__); 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); carrier->MIB = (uint8_t*) malloc16(4);
// copy basic parameters carrier->sizeof_SIB1 = 0;
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].physCellId = configuration->Nid_cell[CC_id]; carrier->sizeof_SIB23 = 0;
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].p_eNB = configuration->nb_antenna_ports[CC_id]; carrier->SIB1 = (uint8_t*) malloc16(32);
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]; AssertFatal(carrier->SIB1!=NULL,PROTOCOL_RRC_CTXT_FMT" init_SI: FATAL, no memory for SIB1 allocated\n",
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].ul_CarrierFreq = configuration->downlink_frequency[CC_id]+ configuration->uplink_frequency_offset[CC_id]; 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)) #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 #endif
LOG_I(RRC, "Configuring MIB (N_RB_DL %d,phich_Resource %d,phich_Duration %d)\n", 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->N_RB_DL[CC_id],
(int)configuration->phich_resource[CC_id], (int)configuration->phich_resource[CC_id],
(int)configuration->phich_duration[CC_id]); (int)configuration->phich_duration[CC_id]);
do_MIB(&RC.rrc[ctxt_pP->module_id]->carrier[CC_id], do_MIB(&rrc->carrier[CC_id],
#ifdef ENABLE_ITTI #ifdef ENABLE_ITTI
configuration->N_RB_DL[CC_id], configuration->N_RB_DL[CC_id],
configuration->phich_resource[CC_id], configuration->phich_resource[CC_id],
...@@ -182,23 +193,20 @@ init_SI( ...@@ -182,23 +193,20 @@ init_SI(
,0); ,0);
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1 = 0; carrier->sizeof_SIB1 = do_SIB1(&rrc->carrier[CC_id],ctxt_pP->module_id,CC_id
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
#if defined(ENABLE_ITTI) #if defined(ENABLE_ITTI)
, configuration , configuration
#endif #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"); else if (rrc->node_type != ngran_eNB_DU) {
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB23 = do_SIB23(
carrier->SIB23 = (uint8_t*) malloc16(64);
AssertFatal(carrier->SIB23!=NULL,"cannot allocate memory for SIB");
carrier->sizeof_SIB23 = do_SIB23(
ctxt_pP->module_id, ctxt_pP->module_id,
CC_id CC_id
...@@ -207,194 +215,246 @@ init_SI( ...@@ -207,194 +215,246 @@ init_SI(
#endif #endif
); );
AssertFatal(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB23 != 255,"FATAL, RC.rrc[mod].carrier[CC_id].sizeof_SIB23 == 255"); 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", LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" SIB2/3 Contents (partial)\n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP)); PROTOCOL_RRC_CTXT_ARGS(ctxt_pP));
LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.n_SB = %ld\n", LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.n_SB = %ld\n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.
pusch_ConfigBasic.n_SB); pusch_ConfigBasic.n_SB);
LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.hoppingMode = %ld\n", LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.hoppingMode = %ld\n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.
pusch_ConfigBasic.hoppingMode); pusch_ConfigBasic.hoppingMode);
LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.pusch_HoppingOffset = %ld\n", LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.pusch_HoppingOffset = %ld\n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.
pusch_ConfigBasic.pusch_HoppingOffset); pusch_ConfigBasic.pusch_HoppingOffset);
LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.enable64QAM = %d\n", LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.enable64QAM = %d\n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
(int)RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. (int)carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.
pusch_ConfigBasic.enable64QAM); pusch_ConfigBasic.enable64QAM);
LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.groupHoppingEnabled = %d\n", LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.groupHoppingEnabled = %d\n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
(int)RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. (int)carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.
ul_ReferenceSignalsPUSCH.groupHoppingEnabled); ul_ReferenceSignalsPUSCH.groupHoppingEnabled);
LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.groupAssignmentPUSCH = %ld\n", LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.groupAssignmentPUSCH = %ld\n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.
ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH); ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH);
LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.sequenceHoppingEnabled = %d\n", LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.sequenceHoppingEnabled = %d\n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
(int)RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. (int)carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.
ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled); ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled);
LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.cyclicShift = %ld\n", LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.cyclicShift = %ld\n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.
ul_ReferenceSignalsPUSCH.cyclicShift); ul_ReferenceSignalsPUSCH.cyclicShift);
#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0))
if (RC.rrc[ctxt_pP->module_id]->carrier[CC_id].MBMS_flag > 0) { if (carrier->MBMS_flag > 0) {
for (i = 0; i < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->mbsfn_SubframeConfigList->list.count; i++) { for (i = 0; i < carrier->sib2->mbsfn_SubframeConfigList->list.count; i++) {
// SIB 2 // 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, "[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", LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" SIB13 contents for MBSFN subframe allocation %d/%d(partial)\n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
i, i,
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->mbsfn_SubframeConfigList->list.count); carrier->sib2->mbsfn_SubframeConfigList->list.count);
LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" mbsfn_Subframe_pattern is = %x\n", LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" mbsfn_Subframe_pattern is = %x\n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), 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); 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", 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), 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) 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", LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" radioframe_allocation_offset = %ld\n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationOffset); carrier->sib2->mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationOffset);
} }
#if (RRC_VERSION >= MAKE_VERSION(9, 0, 0)) #if (RRC_VERSION >= MAKE_VERSION(9, 0, 0))
// SIB13 // SIB13
for (i = 0; i < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib13->mbsfn_AreaInfoList_r9.list.count; i++) { 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", LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" SIB13 contents for MBSFN sync area %d/%d (partial)\n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
i, i,
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib13->mbsfn_AreaInfoList_r9.list.count); 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", LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" MCCH Repetition Period: %ld (just index number, not real value)\n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), 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); 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", LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" MCCH Offset: %ld\n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), 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->sib13->mbsfn_AreaInfoList_r9.list.array[i]->mcch_Config_r9.mcch_Offset_r9);
} }
#endif #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)); else memset((void*)&carrier->sib13,0,sizeof(carrier->sib13));
//TTN - SIB 18 //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++) { 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", LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" Contents of SIB18 %d/%d \n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
j+1, j+1,
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib18->commConfig_r12->commRxPool_r12.list.count); carrier->sib18->commConfig_r12->commRxPool_r12.list.count);
LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 rxPool_sc_CP_Len: %ld \n", LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 rxPool_sc_CP_Len: %ld \n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), 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); 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", LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 sc_Period_r12: %ld \n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), 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); 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", LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 data_CP_Len_r12: %ld \n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), 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); 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", LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 prb_Num_r12: %ld \n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), 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); 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", LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 prb_Start_r12: %ld \n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), 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); 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", LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 prb_End_r12: %ld \n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), 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); 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", LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 offsetIndicator: %ld \n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), 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); 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", LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB18 subframeBitmap_choice_bs_buf: %s \n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), 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); carrier->sib18->commConfig_r12->commRxPool_r12.list.array[j]->sc_TF_ResourceConfig_r12.subframeBitmap_r12.choice.bs16_r12.buf);
} }
//TTN - SIB 19 //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++) { 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", LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" Contents of SIB19 %d/%d \n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
j+1, j+1,
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib19->discConfig_r12->discRxPool_r12.list.count); carrier->sib19->discConfig_r12->discRxPool_r12.list.count);
LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 cp_Len_r12: %ld \n", LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 cp_Len_r12: %ld \n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), 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); carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->cp_Len_r12);
LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 discPeriod_r12: %ld \n", LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 discPeriod_r12: %ld \n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), 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); carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->discPeriod_r12);
LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 numRetx_r12: %ld \n", LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 numRetx_r12: %ld \n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), 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); carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->numRetx_r12);
LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 numRepetition_r12: %ld \n", LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 numRepetition_r12: %ld \n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), 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); 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", LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 tf_ResourceConfig_r12 prb_Num_r12: %ld \n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), 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); 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", LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 tf_ResourceConfig_r12 prb_Start_r12: %ld \n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), 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); 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", LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 tf_ResourceConfig_r12 prb_End_r12: %ld \n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), 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); 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", LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 tf_ResourceConfig_r12 offsetIndicator: %ld \n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), 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); 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", LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" SIB19 tf_ResourceConfig_r12 subframeBitmap_choice_bs_buf: %s \n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), 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); carrier->sib19->discConfig_r12->discRxPool_r12.list.array[j]->tf_ResourceConfig_r12.subframeBitmap_r12.choice.bs16_r12.buf);
} }
#endif #endif
}
LOG_D(RRC, LOG_D(RRC,
PROTOCOL_RRC_CTXT_FMT" RRC_UE --- MAC_CONFIG_REQ (SIB1.tdd & SIB2 params) ---> MAC_UE\n", PROTOCOL_RRC_CTXT_FMT" RRC_UE --- MAC_CONFIG_REQ (SIB1.tdd & SIB2 params) ---> MAC_UE\n",
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP)); 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 (RRC_VERSION >= MAKE_VERSION(13, 0, 0))
if ((RC.rrc[ctxt_pP->module_id]->carrier[CC_id].mib.message.schedulingInfoSIB1_BR_r13>0) && if ((carrier->mib.message.schedulingInfoSIB1_BR_r13>0) &&
(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1_BR!=NULL)) { (carrier->sib1_BR!=NULL)) {
AssertFatal(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1_BR->nonCriticalExtension!=NULL, AssertFatal(carrier->sib1_BR->nonCriticalExtension!=NULL,
"sib2_br->nonCriticalExtension is null (v8.9)\n"); "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"); "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"); "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"); "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"); "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 #endif
LOG_D(RRC, "About to call rrc_mac_config_req_eNB\n"); }
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, rrc_mac_config_req_eNB(ctxt_pP->module_id, CC_id,
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].physCellId, carrier->physCellId,
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].p_eNB, carrier->p_eNB,
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Ncp, carrier->Ncp,
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1->freqBandIndicator, carrier->sib1->freqBandIndicator,
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].dl_CarrierFreq, carrier->dl_CarrierFreq,
#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].pbch_repetition, carrier->pbch_repetition,
#endif #endif
0, // rnti 0, // rnti
(BCCH_BCH_Message_t *) (BCCH_BCH_Message_t *)
&RC.rrc[ctxt_pP->module_id]->carrier[CC_id].mib, &carrier->mib,
(RadioResourceConfigCommonSIB_t *) NULL,
#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
(RadioResourceConfigCommonSIB_t *) NULL,
#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,
NULL,
NULL,
NULL
#if (RRC_VERSION >= MAKE_VERSION(9, 0, 0))
,
carrier->MBMS_flag,
NULL,
(PMCH_InfoList_r9_t *) NULL
#endif
#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 *) & (RadioResourceConfigCommonSIB_t *) &
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon, carrier->sib2->radioResourceConfigCommon,
#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
(RadioResourceConfigCommonSIB_t *) & (RadioResourceConfigCommonSIB_t *) &
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2_BR->radioResourceConfigCommon, carrier->sib2_BR->radioResourceConfigCommon,
#endif #endif
(struct PhysicalConfigDedicated *)NULL, (struct PhysicalConfigDedicated *)NULL,
#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0))
...@@ -405,17 +465,17 @@ init_SI( ...@@ -405,17 +465,17 @@ init_SI(
(MAC_MainConfig_t *) NULL, 0, (MAC_MainConfig_t *) NULL, 0,
(struct LogicalChannelConfig *)NULL, (struct LogicalChannelConfig *)NULL,
(MeasGapConfig_t *) NULL, (MeasGapConfig_t *) NULL,
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1->tdd_Config, carrier->sib1->tdd_Config,
NULL, NULL,
&RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1->schedulingInfoList, &carrier->sib1->schedulingInfoList,
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].ul_CarrierFreq, carrier->ul_CarrierFreq,
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->freqInfo.ul_Bandwidth, carrier->sib2->freqInfo.ul_Bandwidth,
&RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->freqInfo.additionalSpectrumEmission, &carrier->sib2->freqInfo.additionalSpectrumEmission,
(MBSFN_SubframeConfigList_t*) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->mbsfn_SubframeConfigList (MBSFN_SubframeConfigList_t*) carrier->sib2->mbsfn_SubframeConfigList
#if (RRC_VERSION >= MAKE_VERSION(9, 0, 0)) #if (RRC_VERSION >= MAKE_VERSION(9, 0, 0))
, ,
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].MBMS_flag, carrier->MBMS_flag,
(MBSFN_AreaInfoList_r9_t*) & RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib13->mbsfn_AreaInfoList_r9, (MBSFN_AreaInfoList_r9_t*) & carrier->sib13->mbsfn_AreaInfoList_r9,
(PMCH_InfoList_r9_t *) NULL (PMCH_InfoList_r9_t *) NULL
#endif #endif
#if (RRC_VERSION >= MAKE_VERSION(13, 0, 0)) #if (RRC_VERSION >= MAKE_VERSION(13, 0, 0))
...@@ -423,6 +483,11 @@ init_SI( ...@@ -423,6 +483,11 @@ init_SI(
sib1_v13ext sib1_v13ext
#endif #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)) #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0))
...@@ -5849,6 +5914,10 @@ rrc_eNB_generate_RRCConnectionSetup( ...@@ -5849,6 +5914,10 @@ rrc_eNB_generate_RRCConnectionSetup(
ue_context_pP->ue_context.ue_release_timer_thres=1000; ue_context_pP->ue_context.ue_release_timer_thres=1000;
} }
void setup_ngran_CU(eNB_RRC_INST *rrc) {
}
#if defined(ENABLE_ITTI) #if defined(ENABLE_ITTI)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -5901,6 +5970,9 @@ openair_rrc_eNB_init( ...@@ -5901,6 +5970,9 @@ openair_rrc_eNB_init(
// } // }
RC.rrc[ctxt.module_id]->Nb_ue = 0; 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++) { for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
RC.rrc[ctxt.module_id]->carrier[CC_id].Srb0.Active = 0; RC.rrc[ctxt.module_id]->carrier[CC_id].Srb0.Active = 0;
} }
...@@ -6008,8 +6080,12 @@ openair_rrc_eNB_init( ...@@ -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_top_init_eNB(RC.rrc[ctxt.module_id]->carrier[CC_id].MBMS_flag,0);
} }
openair_rrc_on(&ctxt); 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; return 0;
} }
......
...@@ -1062,7 +1062,7 @@ int main( int argc, char **argv ) ...@@ -1062,7 +1062,7 @@ int main( int argc, char **argv )
#if defined(ENABLE_ITTI) #if defined(ENABLE_ITTI)
if (RC.nb_inst > 0) { 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) { if (create_tasks(1) < 0) {
printf("cannot create ITTI tasks\n"); printf("cannot create ITTI tasks\n");
exit(-1); // need a softer mode exit(-1); // need a softer mode
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment