Merge branch 'feature-127-protocol-split' of https://gitlab.eurecom.fr/oai/openairinterface5g into feature-127-protocol-split
This commit is contained in:
@@ -2082,7 +2082,6 @@ add_executable(lte-softmodem
|
|||||||
${OPENAIR_TARGETS}/RT/USER/lte-softmodem.c
|
${OPENAIR_TARGETS}/RT/USER/lte-softmodem.c
|
||||||
${OPENAIR2_DIR}/ENB_APP/NB_IoT_interface.c
|
${OPENAIR2_DIR}/ENB_APP/NB_IoT_interface.c
|
||||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
||||||
${OPENAIR_TARGETS}/COMMON/create_tasks.c
|
|
||||||
${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
|
${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
|
||||||
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
||||||
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/multicast_link.c
|
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/multicast_link.c
|
||||||
@@ -2123,7 +2122,6 @@ add_executable(lte-softmodem-nos1
|
|||||||
${OPENAIR_TARGETS}/RT/USER/lte-softmodem.c
|
${OPENAIR_TARGETS}/RT/USER/lte-softmodem.c
|
||||||
${OPENAIR2_DIR}/ENB_APP/NB_IoT_interface.c
|
${OPENAIR2_DIR}/ENB_APP/NB_IoT_interface.c
|
||||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
||||||
${OPENAIR_TARGETS}/COMMON/create_tasks.c
|
|
||||||
${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
|
${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
|
||||||
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
|
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
|
||||||
${OPENAIR2_DIR}/RRC/NAS/rb_config.c
|
${OPENAIR2_DIR}/RRC/NAS/rb_config.c
|
||||||
@@ -2163,7 +2161,6 @@ add_executable(lte-uesoftmodem
|
|||||||
${OPENAIR_TARGETS}/RT/USER/lte-ru.c
|
${OPENAIR_TARGETS}/RT/USER/lte-ru.c
|
||||||
${OPENAIR_TARGETS}/RT/USER/rfsim.c
|
${OPENAIR_TARGETS}/RT/USER/rfsim.c
|
||||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
||||||
${OPENAIR_TARGETS}/COMMON/create_tasks_ue.c
|
|
||||||
${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
|
${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
|
||||||
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
||||||
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/multicast_link.c
|
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/multicast_link.c
|
||||||
|
|||||||
+73
-64
@@ -41,9 +41,12 @@
|
|||||||
# include "intertask_interface.h"
|
# include "intertask_interface.h"
|
||||||
# include "timer.h"
|
# include "timer.h"
|
||||||
# if defined(ENABLE_USE_MME)
|
# if defined(ENABLE_USE_MME)
|
||||||
|
# define ENB_REGISTER_RETRY_DELAY 10
|
||||||
# include "s1ap_eNB.h"
|
# include "s1ap_eNB.h"
|
||||||
# include "sctp_eNB_task.h"
|
# include "sctp_eNB_task.h"
|
||||||
# include "gtpv1u_eNB_task.h"
|
# include "gtpv1u_eNB_task.h"
|
||||||
|
# include "nas_ue_task.h"
|
||||||
|
# include "udp_eNB_task.h"
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#if defined(FLEXRAN_AGENT_SB_IF)
|
#if defined(FLEXRAN_AGENT_SB_IF)
|
||||||
@@ -54,61 +57,66 @@
|
|||||||
extern unsigned char NB_eNB_INST;
|
extern unsigned char NB_eNB_INST;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
extern int emulate_rf;
|
||||||
extern RAN_CONTEXT_t RC;
|
extern RAN_CONTEXT_t RC;
|
||||||
|
extern void *l2l1_task(void *arg);
|
||||||
|
|
||||||
#if defined(ENABLE_ITTI)
|
#if defined(ENABLE_ITTI)
|
||||||
|
|
||||||
#include "LAYER2/PROTO_AGENT/proto_agent.h"
|
|
||||||
//#include "../PROTO_AGENT/proto_agent.h"
|
|
||||||
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
# if defined(ENABLE_USE_MME)
|
static void create_remaining_tasks(module_id_t enb_id)
|
||||||
# define ENB_REGISTER_RETRY_DELAY 10
|
|
||||||
# endif
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
static void configure_phy(module_id_t enb_id, const Enb_properties_array_t* enb_properties)
|
|
||||||
{
|
{
|
||||||
MessageDef *msg_p;
|
ngran_node_t type = RC.rrc[enb_id]->node_type;
|
||||||
int CC_id;
|
int rc;
|
||||||
|
itti_wait_ready(1);
|
||||||
msg_p = itti_alloc_new_message (TASK_ENB_APP, PHY_CONFIGURATION_REQ);
|
switch (type) {
|
||||||
|
case ngran_eNB:
|
||||||
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
case ngran_ng_eNB:
|
||||||
PHY_CONFIGURATION_REQ (msg_p).frame_type[CC_id] = enb_properties->properties[enb_id]->frame_type[CC_id];
|
case ngran_gNB:
|
||||||
PHY_CONFIGURATION_REQ (msg_p).prefix_type[CC_id] = enb_properties->properties[enb_id]->prefix_type[CC_id];
|
case ngran_eNB_CU:
|
||||||
PHY_CONFIGURATION_REQ (msg_p).downlink_frequency[CC_id] = enb_properties->properties[enb_id]->downlink_frequency[CC_id];
|
case ngran_ng_eNB_CU:
|
||||||
PHY_CONFIGURATION_REQ (msg_p).uplink_frequency_offset[CC_id] = enb_properties->properties[enb_id]->uplink_frequency_offset[CC_id];
|
case ngran_gNB_CU:
|
||||||
PHY_CONFIGURATION_REQ (msg_p).nb_antennas_tx[CC_id] = enb_properties->properties[enb_id]->nb_antennas_tx[CC_id];
|
rc = itti_create_task(TASK_SCTP, sctp_eNB_task, NULL);
|
||||||
PHY_CONFIGURATION_REQ (msg_p).nb_antennas_rx[CC_id] = enb_properties->properties[enb_id]->nb_antennas_rx[CC_id];
|
AssertFatal(rc >= 0, "Create task for SCTP failed\n");
|
||||||
PHY_CONFIGURATION_REQ (msg_p).tx_gain[CC_id] = enb_properties->properties[enb_id]->tx_gain[CC_id];
|
rc = itti_create_task(TASK_S1AP, s1ap_eNB_task, NULL);
|
||||||
PHY_CONFIGURATION_REQ (msg_p).rx_gain[CC_id] = enb_properties->properties[enb_id]->rx_gain[CC_id];
|
AssertFatal(rc >= 0, "Create task for S1AP failed\n");
|
||||||
|
if (!emulate_rf){
|
||||||
|
rc = itti_create_task(TASK_UDP, udp_eNB_task, NULL);
|
||||||
|
AssertFatal(rc >= 0, "Create task for UDP failed\n");
|
||||||
|
}
|
||||||
|
rc = itti_create_task(TASK_GTPV1_U, >pv1u_eNB_task, NULL);
|
||||||
|
AssertFatal(rc >= 0, "Create task for GTPV1U failed\n");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* intentionally left blank */
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
switch (type) {
|
||||||
itti_send_msg_to_task (TASK_PHY_ENB, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p);
|
case ngran_eNB:
|
||||||
|
case ngran_ng_eNB:
|
||||||
|
case ngran_gNB:
|
||||||
|
case ngran_eNB_DU:
|
||||||
|
case ngran_gNB_DU:
|
||||||
|
rc = itti_create_task (TASK_L2L1, l2l1_task, NULL);
|
||||||
|
AssertFatal(rc >= 0, "Create task for L2L1 failed\n");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* intentioally left blank */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
itti_wait_ready(0);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
static void configure_rrc(uint32_t enb_id)
|
static void configure_rrc(uint32_t enb_id, MessageDef **msg_p)
|
||||||
{
|
{
|
||||||
MessageDef *msg_p = NULL;
|
RC.rrc[enb_id] = malloc(sizeof(eNB_RRC_INST));
|
||||||
// int CC_id;
|
AssertFatal(RC.rrc[enb_id], "RRC context for eNB %d not allocated\n", enb_id);
|
||||||
|
LOG_I(ENB_APP, "%s() Creating RRC instance RC.rrc[%d]: %p\n",
|
||||||
msg_p = itti_alloc_new_message (TASK_ENB_APP, RRC_CONFIGURATION_REQ);
|
__FUNCTION__, enb_id, RC.rrc[enb_id]);
|
||||||
|
memset((void *)RC.rrc[enb_id],0,sizeof(eNB_RRC_INST));
|
||||||
if (RC.rrc[enb_id]) {
|
*msg_p = itti_alloc_new_message (TASK_ENB_APP, RRC_CONFIGURATION_REQ);
|
||||||
RCconfig_RRC(msg_p,enb_id, RC.rrc[enb_id]);
|
RCconfig_RRC(*msg_p, enb_id, RC.rrc[enb_id]);
|
||||||
|
|
||||||
|
|
||||||
LOG_I(ENB_APP,"Sending configuration message to RRC task\n");
|
|
||||||
itti_send_msg_to_task (TASK_RRC_ENB, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p);
|
|
||||||
|
|
||||||
}
|
|
||||||
else AssertFatal(0,"RRC context for eNB %d not allocated\n",enb_id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
@@ -174,47 +182,48 @@ void *eNB_app_task(void *args_p)
|
|||||||
MessageDef *msg_p = NULL;
|
MessageDef *msg_p = NULL;
|
||||||
instance_t instance;
|
instance_t instance;
|
||||||
int result;
|
int result;
|
||||||
|
MessageDef *rrc_msg_p[enb_nb];
|
||||||
/* for no gcc warnings */
|
/* for no gcc warnings */
|
||||||
(void)instance;
|
(void)instance;
|
||||||
int mac_has_f1[MAX_MAC_INST];
|
int mac_has_f1[MAX_MAC_INST];
|
||||||
|
|
||||||
memset(mac_has_f1,0,MAX_MAC_INST*sizeof(int));
|
memset(mac_has_f1,0,MAX_MAC_INST*sizeof(int));
|
||||||
|
|
||||||
itti_mark_task_ready (TASK_ENB_APP);
|
itti_mark_task_ready (TASK_ENB_APP);
|
||||||
|
LOG_I(PHY, "%s() Task ready, initialise L1/MAC/RRC structures\n", __FUNCTION__);
|
||||||
LOG_I(PHY, "%s() Task ready initialise structures\n", __FUNCTION__);
|
|
||||||
|
|
||||||
RCconfig_L1();
|
RCconfig_L1();
|
||||||
|
|
||||||
RCconfig_macrlc(mac_has_f1);
|
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");
|
LOG_I(PHY, "%s() RC.nb_macrlc_inst:%d\n", __FUNCTION__, RC.nb_macrlc_inst);
|
||||||
|
|
||||||
|
if (RC.nb_L1_inst>0)
|
||||||
AssertFatal (enb_nb <= RC.nb_inst,
|
AssertFatal(l1_north_init_eNB()==0,"could not initialize L1 north interface\n");
|
||||||
"Number of eNB is greater than eNB defined in configuration file (%d/%d)!",
|
if (RC.nb_macrlc_inst>0)
|
||||||
enb_nb, RC.nb_inst);
|
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);
|
||||||
|
|
||||||
LOG_I(ENB_APP,"Allocating eNB_RRC_INST for %d instances\n",RC.nb_inst);
|
LOG_I(ENB_APP,"Allocating eNB_RRC_INST for %d instances\n",RC.nb_inst);
|
||||||
|
|
||||||
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(ENB_APP, "%s() RC.nb_inst:%d RC.rrc:%p\n", __FUNCTION__, RC.nb_inst, RC.rrc);
|
LOG_I(ENB_APP, "%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));
|
configure_rrc(enb_id, &rrc_msg_p[enb_id]);
|
||||||
LOG_I(ENB_APP, "%s() Creating RRC instance RC.rrc[%d]:%p (%d of %d)\n", __FUNCTION__, enb_id, RC.rrc[enb_id], enb_id+1, enb_id_end);
|
|
||||||
memset((void *)RC.rrc[enb_id],0,sizeof(eNB_RRC_INST));
|
|
||||||
configure_rrc(enb_id);
|
|
||||||
|
|
||||||
if (RC.nb_macrlc_inst >0 && mac_has_f1[enb_id]==1) RC.rrc[enb_id]->node_type = ngran_eNB_DU;
|
if (RC.nb_macrlc_inst > 0 && mac_has_f1[enb_id]==1)
|
||||||
else pdcp_layer_init();
|
RC.rrc[enb_id]->node_type = ngran_eNB_DU;
|
||||||
|
else
|
||||||
|
pdcp_layer_init();
|
||||||
|
}
|
||||||
|
|
||||||
|
create_remaining_tasks(0);
|
||||||
|
|
||||||
|
for (enb_id = enb_id_start; (enb_id < enb_id_end) ; enb_id++) {
|
||||||
|
LOG_I(ENB_APP,"Sending configuration message to RRC task\n");
|
||||||
|
itti_send_msg_to_task (TASK_RRC_ENB, ENB_MODULE_ID_TO_INSTANCE(enb_id), rrc_msg_p[enb_id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
# if defined(ENABLE_USE_MME)
|
# if defined(ENABLE_USE_MME)
|
||||||
|
|||||||
@@ -1,103 +0,0 @@
|
|||||||
/*
|
|
||||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
|
||||||
* this work for additional information regarding copyright ownership.
|
|
||||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
|
||||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
|
||||||
* except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.openairinterface.org/?page_id=698
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*-------------------------------------------------------------------------------
|
|
||||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
|
||||||
* contact@openairinterface.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined(ENABLE_ITTI)
|
|
||||||
# include "intertask_interface.h"
|
|
||||||
# include "create_tasks.h"
|
|
||||||
# include "log.h"
|
|
||||||
|
|
||||||
# ifdef OPENAIR2
|
|
||||||
# if defined(ENABLE_USE_MME)
|
|
||||||
# include "sctp_eNB_task.h"
|
|
||||||
# include "s1ap_eNB.h"
|
|
||||||
# include "nas_ue_task.h"
|
|
||||||
# include "udp_eNB_task.h"
|
|
||||||
# include "gtpv1u_eNB_task.h"
|
|
||||||
# endif
|
|
||||||
# if ENABLE_RAL
|
|
||||||
# include "lteRALue.h"
|
|
||||||
# include "lteRALenb.h"
|
|
||||||
# endif
|
|
||||||
# include "RRC/LTE/rrc_defs.h"
|
|
||||||
# endif
|
|
||||||
# include "enb_app.h"
|
|
||||||
|
|
||||||
extern int emulate_rf;
|
|
||||||
|
|
||||||
int create_tasks(uint32_t enb_nb)
|
|
||||||
{
|
|
||||||
LOG_D(ENB_APP, "%s(enb_nb:%d\n", __FUNCTION__, enb_nb);
|
|
||||||
|
|
||||||
itti_wait_ready(1);
|
|
||||||
if (itti_create_task (TASK_L2L1, l2l1_task, NULL) < 0) {
|
|
||||||
LOG_E(PDCP, "Create task for L2L1 failed\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (enb_nb > 0) {
|
|
||||||
/* Last task to create, others task must be ready before its start */
|
|
||||||
if (itti_create_task (TASK_ENB_APP, eNB_app_task, NULL) < 0) {
|
|
||||||
LOG_E(ENB_APP, "Create task for eNB APP failed\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# if defined(ENABLE_USE_MME)
|
|
||||||
if (enb_nb > 0) {
|
|
||||||
if (itti_create_task (TASK_SCTP, sctp_eNB_task, NULL) < 0) {
|
|
||||||
LOG_E(SCTP, "Create task for SCTP failed\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (itti_create_task (TASK_S1AP, s1ap_eNB_task, NULL) < 0) {
|
|
||||||
LOG_E(S1AP, "Create task for S1AP failed\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if(!emulate_rf){
|
|
||||||
if (itti_create_task (TASK_UDP, udp_eNB_task, NULL) < 0) {
|
|
||||||
LOG_E(UDP_, "Create task for UDP failed\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (itti_create_task (TASK_GTPV1_U, >pv1u_eNB_task, NULL) < 0) {
|
|
||||||
LOG_E(GTPU, "Create task for GTPV1U failed\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# endif
|
|
||||||
|
|
||||||
if (enb_nb > 0) {
|
|
||||||
LOG_I(RRC,"Creating RRC eNB Task\n");
|
|
||||||
|
|
||||||
if (itti_create_task (TASK_RRC_ENB, rrc_enb_task, NULL) < 0) {
|
|
||||||
LOG_E(RRC, "Create task for RRC eNB failed\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
itti_wait_ready(0);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
/*
|
|
||||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
|
||||||
* this work for additional information regarding copyright ownership.
|
|
||||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
|
||||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
|
||||||
* except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.openairinterface.org/?page_id=698
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*-------------------------------------------------------------------------------
|
|
||||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
|
||||||
* contact@openairinterface.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef CREATE_TASKS_H_
|
|
||||||
#define CREATE_TASKS_H_
|
|
||||||
|
|
||||||
#if defined(ENABLE_ITTI)
|
|
||||||
/* External declaration of L2L1 task that depend on the target */
|
|
||||||
extern void *l2l1_task(void *arg);
|
|
||||||
|
|
||||||
int create_tasks(uint32_t enb_nb);
|
|
||||||
int create_tasks_ue(uint32_t ue_nb);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* CREATE_TASKS_H_ */
|
|
||||||
@@ -21,7 +21,6 @@
|
|||||||
|
|
||||||
#if defined(ENABLE_ITTI)
|
#if defined(ENABLE_ITTI)
|
||||||
# include "intertask_interface.h"
|
# include "intertask_interface.h"
|
||||||
# include "create_tasks.h"
|
|
||||||
# include "log.h"
|
# include "log.h"
|
||||||
|
|
||||||
# ifdef OPENAIR2
|
# ifdef OPENAIR2
|
||||||
|
|||||||
@@ -84,7 +84,6 @@ unsigned short config_frames[4] = {2,9,11,13};
|
|||||||
|
|
||||||
#if defined(ENABLE_ITTI)
|
#if defined(ENABLE_ITTI)
|
||||||
#include "intertask_interface_init.h"
|
#include "intertask_interface_init.h"
|
||||||
#include "create_tasks.h"
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "PHY/INIT/phy_init.h"
|
#include "PHY/INIT/phy_init.h"
|
||||||
@@ -1064,13 +1063,16 @@ int main( int argc, char **argv )
|
|||||||
int have_rrc=0;
|
int have_rrc=0;
|
||||||
|
|
||||||
if (RC.nb_inst > 0) {
|
if (RC.nb_inst > 0) {
|
||||||
|
LOG_I(ENB_APP, "Creating ENB_APP eNB Task\n");
|
||||||
// don't create if node doesn't connect to RRC/S1/F1/GTP
|
if (itti_create_task (TASK_ENB_APP, eNB_app_task, NULL) < 0) {
|
||||||
if (create_tasks(1) < 0) {
|
LOG_E(ENB_APP, "Create task for eNB APP failed\n");
|
||||||
printf("cannot create ITTI tasks\n");
|
return -1;
|
||||||
exit(-1); // need a softer mode
|
}
|
||||||
|
LOG_I(RRC,"Creating RRC eNB Task\n");
|
||||||
|
if (itti_create_task (TASK_RRC_ENB, rrc_enb_task, NULL) < 0) {
|
||||||
|
LOG_E(RRC, "Create task for RRC eNB failed\n");
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
printf("ITTI tasks created\n");
|
|
||||||
have_rrc=1;
|
have_rrc=1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -289,4 +289,6 @@ extern PHY_VARS_UE* init_ue_vars(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
uint8_t UE_id,
|
uint8_t UE_id,
|
||||||
uint8_t abstraction_flag);
|
uint8_t abstraction_flag);
|
||||||
|
|
||||||
|
extern void *eNB_app_task(void* args);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -85,7 +85,6 @@
|
|||||||
|
|
||||||
#if defined(ENABLE_ITTI)
|
#if defined(ENABLE_ITTI)
|
||||||
#include "intertask_interface_init.h"
|
#include "intertask_interface_init.h"
|
||||||
#include "create_tasks.h"
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "system.h"
|
#include "system.h"
|
||||||
|
|||||||
Reference in New Issue
Block a user