Delete ITTI-SIM
This commit is contained in:
@@ -845,7 +845,6 @@ add_boolean_option(UE_EXPANSION False "enable UE_EXPANSION w
|
|||||||
add_boolean_option(PHY_TX_THREAD False "enable UE_EXPANSION with max 256 UE")
|
add_boolean_option(PHY_TX_THREAD False "enable UE_EXPANSION with max 256 UE")
|
||||||
add_boolean_option(PRE_SCD_THREAD False "enable UE_EXPANSION with max 256 UE")
|
add_boolean_option(PRE_SCD_THREAD False "enable UE_EXPANSION with max 256 UE")
|
||||||
add_boolean_option(UESIM_EXPANSION False "enable UESIM_EXPANSION with max 256 UE")
|
add_boolean_option(UESIM_EXPANSION False "enable UESIM_EXPANSION with max 256 UE")
|
||||||
add_boolean_option(ITTI_SIM False "enable itti simulator")
|
|
||||||
|
|
||||||
########################
|
########################
|
||||||
# Include order
|
# Include order
|
||||||
@@ -3034,7 +3033,7 @@ if (${T_TRACER})
|
|||||||
foreach(i
|
foreach(i
|
||||||
#all "add_executable" definitions (except tests, rb_tool, updatefw)
|
#all "add_executable" definitions (except tests, rb_tool, updatefw)
|
||||||
lte-softmodem lte-uesoftmodem nr-softmodem
|
lte-softmodem lte-uesoftmodem nr-softmodem
|
||||||
nr-uesoftmodem dlsim dlsim_tm4 dlsim_tm7 nr-ittisim
|
nr-uesoftmodem dlsim dlsim_tm4 dlsim_tm7
|
||||||
ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim
|
ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim
|
||||||
syncsim nr_ulsim nr_dlsim nr_dlschsim nr_pbchsim nr_pucchsim
|
syncsim nr_ulsim nr_dlsim nr_dlschsim nr_pbchsim nr_pucchsim
|
||||||
nr_ulschsim ldpctest polartest smallblocktest cu_test du_test
|
nr_ulschsim ldpctest polartest smallblocktest cu_test du_test
|
||||||
@@ -3120,50 +3119,6 @@ add_executable(rb_tool
|
|||||||
)
|
)
|
||||||
target_include_directories(rb_tool PRIVATE ${OPENAIR2_DIR}/NETWORK_DRIVER/MESH/)
|
target_include_directories(rb_tool PRIVATE ${OPENAIR2_DIR}/NETWORK_DRIVER/MESH/)
|
||||||
|
|
||||||
# nr-ittisim
|
|
||||||
###################################################
|
|
||||||
|
|
||||||
add_executable(nr-ittisim
|
|
||||||
${rrc_h}
|
|
||||||
${nr_rrc_h}
|
|
||||||
${OPENAIR2_DIR}/GNB_APP/gnb_app.c
|
|
||||||
${OPENAIR2_DIR}/GNB_APP/gnb_config.c
|
|
||||||
${OPENAIR_DIR}/executables/nr-gnb.c
|
|
||||||
${OPENAIR_DIR}/executables/nr-ru.c
|
|
||||||
${OPENAIR2_DIR}/SIMULATION/NR_RRC/itti_sim.c
|
|
||||||
${OPENAIR_DIR}/executables/softmodem-common.c
|
|
||||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
|
||||||
${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
|
|
||||||
${OPENAIR_TARGETS}/ARCH/COMMON/record_player.c
|
|
||||||
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
|
|
||||||
${OPENAIR2_DIR}/RRC/NAS/rb_config.c
|
|
||||||
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
|
||||||
${OPENAIR3_DIR}/NAS/UE/nas_ue_task.c
|
|
||||||
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
|
||||||
${OPENAIR_DIR}/common/utils/lte/ue_power.c
|
|
||||||
${OPENAIR_DIR}/common/utils/lte/prach_utils.c
|
|
||||||
${OPENAIR2_DIR}/ENB_APP/flexran_agent_ran_api_to_fix.c
|
|
||||||
${XFORMSINTERFACE_SOURCE}
|
|
||||||
${T_SOURCE}
|
|
||||||
${SHLIB_LOADER_SOURCES}
|
|
||||||
)
|
|
||||||
|
|
||||||
target_link_libraries (nr-ittisim
|
|
||||||
-Wl,--start-group
|
|
||||||
UTIL HASHTABLE SCTP_CLIENT SCHED_LIB SCHED_RU_LIB SCHED_NR_LIB PHY_NR PHY PHY_COMMON PHY_NR_COMMON PHY_RU GTPV1U SECU_CN SECU_OSA
|
|
||||||
ITTI ${FLPT_MSG_LIB} ${FLEXRAN_AGENT_LIB} ${RAL_LIB} ${NAS_SIM_LIB} RRC_LIB NR_RRC_LIB
|
|
||||||
NGAP_LIB NGAP_GNB S1AP_LIB S1AP_ENB L2_LTE_NR L2_NR MAC_NR_COMMON NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
|
||||||
X2AP_LIB X2AP_ENB F1AP_LIB F1AP M2AP_LIB M2AP_ENB M3AP_LIB M3AP_ENB ${FSPT_MSG_LIB}
|
|
||||||
PHY_NR_UE SCHED_NR_UE_LIB NR_L2_UE
|
|
||||||
-Wl,--end-group z dl)
|
|
||||||
|
|
||||||
target_link_libraries (nr-ittisim ${LIBXML2_LIBRARIES})
|
|
||||||
target_link_libraries (nr-ittisim pthread m CONFIG_LIB rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
|
|
||||||
target_link_libraries (nr-ittisim ${LIB_LMS_LIBRARIES})
|
|
||||||
target_link_libraries (nr-ittisim ${T_LIB})
|
|
||||||
|
|
||||||
add_dependencies( nr-ittisim ldpc_orig ldpc_optim ldpc_optim8seg ldpc )
|
|
||||||
|
|
||||||
# ???
|
# ???
|
||||||
####################
|
####################
|
||||||
list(APPEND oai_nw_drv_src device.c common.c ioctl.c classifier.c tool.c)
|
list(APPEND oai_nw_drv_src device.c common.c ioctl.c classifier.c tool.c)
|
||||||
|
|||||||
@@ -177,8 +177,6 @@ Options:
|
|||||||
Enable the address sanitizer on all targets
|
Enable the address sanitizer on all targets
|
||||||
--sanitize-undefined | -fsanitize=undefined
|
--sanitize-undefined | -fsanitize=undefined
|
||||||
Enable the undefined behavior sanitizer on all targets
|
Enable the undefined behavior sanitizer on all targets
|
||||||
--ittiSIM
|
|
||||||
Makes the itti simulator
|
|
||||||
-h | --help
|
-h | --help
|
||||||
Print this help
|
Print this help
|
||||||
|
|
||||||
@@ -465,11 +463,6 @@ function main() {
|
|||||||
--sanitize-undefined | -fundefined=address)
|
--sanitize-undefined | -fundefined=address)
|
||||||
CMAKE_CMD="$CMAKE_CMD -DSANITIZE_UNDEFINED=True"
|
CMAKE_CMD="$CMAKE_CMD -DSANITIZE_UNDEFINED=True"
|
||||||
shift;;
|
shift;;
|
||||||
--ittiSIM)
|
|
||||||
ittiSIM=1
|
|
||||||
CMAKE_CMD="$CMAKE_CMD -DITTI_SIM=True"
|
|
||||||
echo_info "Will compile itti simulator"
|
|
||||||
shift;;
|
|
||||||
-h | --help)
|
-h | --help)
|
||||||
print_help
|
print_help
|
||||||
exit 1;;
|
exit 1;;
|
||||||
@@ -623,9 +616,6 @@ function main() {
|
|||||||
if [ "$nrUE" = 1 ] ; then
|
if [ "$nrUE" = 1 ] ; then
|
||||||
execlist="$execlist nr-uesoftmodem"
|
execlist="$execlist nr-uesoftmodem"
|
||||||
fi
|
fi
|
||||||
if [ "$ittiSIM" = "1" ] ; then
|
|
||||||
execlist="$execlist nr-ittisim"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$execlist" == "" && "$SIMUS_PHY" != "1" ]]; then
|
if [[ "$execlist" == "" && "$SIMUS_PHY" != "1" ]]; then
|
||||||
echo_success "installing dependencies successful"
|
echo_success "installing dependencies successful"
|
||||||
|
|||||||
@@ -17,7 +17,4 @@
|
|||||||
#include "openair2/COMMON/flexran_messages_def.h"
|
#include "openair2/COMMON/flexran_messages_def.h"
|
||||||
#include "openair2/COMMON/f1ap_messages_def.h"
|
#include "openair2/COMMON/f1ap_messages_def.h"
|
||||||
#include "openair2/COMMON/ngap_messages_def.h"
|
#include "openair2/COMMON/ngap_messages_def.h"
|
||||||
#if ITTI_SIM
|
|
||||||
#include "openair2/COMMON/itti_sim_messages_def.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|||||||
@@ -262,10 +262,6 @@ void *rrc_enb_process_itti_msg(void *);
|
|||||||
#include <openair3/SCTP/sctp_eNB_task.h>
|
#include <openair3/SCTP/sctp_eNB_task.h>
|
||||||
#include <openair3/NGAP/ngap_gNB.h>
|
#include <openair3/NGAP/ngap_gNB.h>
|
||||||
|
|
||||||
#ifdef ITTI_SIM
|
|
||||||
#include <openair2/COMMON/itti_sim_messages_types.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
static const char *const messages_definition_xml = {
|
static const char *const messages_definition_xml = {
|
||||||
#include <messages_xml.h>
|
#include <messages_xml.h>
|
||||||
|
|||||||
@@ -1,48 +0,0 @@
|
|||||||
<table style="border-collapse: collapse; border: none;">
|
|
||||||
<tr style="border-collapse: collapse; border: none;">
|
|
||||||
<td style="border-collapse: collapse; border: none;">
|
|
||||||
<a href="http://www.openairinterface.org/">
|
|
||||||
<img src="./images/oai_final_logo.png" alt="" border=3 height=50 width=150>
|
|
||||||
</img>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td style="border-collapse: collapse; border: none; vertical-align: center;">
|
|
||||||
<b><font size = "5">Running L3 ITTI simulator</font></b>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
This page is valid on the following branches:
|
|
||||||
|
|
||||||
- `develop` starting from tag `2020.w48`
|
|
||||||
|
|
||||||
# 1. Building the ITTI simulator.
|
|
||||||
|
|
||||||
The ITTI simulator is available directly from the standard build.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ source oaienv
|
|
||||||
$ cd cmake_targets
|
|
||||||
$ sudo ./build_oai -x -w None -c -ittiSIM
|
|
||||||
```
|
|
||||||
|
|
||||||
# 2. Running the ITTI simulator.
|
|
||||||
|
|
||||||
The ITTI simulator establishes ITTI-threaded communication between the gNB RRC task and the UE RRC task.
|
|
||||||
|
|
||||||
This allows to test the sequence of NGAP/RRC/NAS messages.
|
|
||||||
|
|
||||||
The main limitations are:
|
|
||||||
|
|
||||||
- NAS is a simple stub that just sends and receives messages
|
|
||||||
- only initial Attach sequence
|
|
||||||
|
|
||||||
## 2.1. Starting the ITTI simulator
|
|
||||||
|
|
||||||
The ITTI simulator is able to run with a connected 5GC or without any.
|
|
||||||
The develop branch tag `2020.w48` only works RRC without 5GC connection.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ sudo -E ./ran_build/build/nr-ittisim -O gnb.conf
|
|
||||||
```
|
|
||||||
|
|
||||||
@@ -1,36 +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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \file itti_sim_messages_def.h
|
|
||||||
* \brief itti message for itti simulator
|
|
||||||
* \author Yoshio INOUE, Masayuki HARADA
|
|
||||||
* \email yoshio.inoue@fujitsu.com,masayuki.harada@fujitsu.com
|
|
||||||
* \date 2020
|
|
||||||
* \version 0.1
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
MESSAGE_DEF(GNB_RRC_BCCH_DATA_IND, MESSAGE_PRIORITY_MED, itti_sim_rrc_ch_t, GNBBCCHind)
|
|
||||||
MESSAGE_DEF(GNB_RRC_CCCH_DATA_IND, MESSAGE_PRIORITY_MED, itti_sim_rrc_ch_t, GNBCCCHind)
|
|
||||||
MESSAGE_DEF(GNB_RRC_DCCH_DATA_IND, MESSAGE_PRIORITY_MED, itti_sim_rrc_ch_t, GNBDCCHind)
|
|
||||||
MESSAGE_DEF(UE_RRC_CCCH_DATA_IND, MESSAGE_PRIORITY_MED, itti_sim_rrc_ch_t, UECCCHind)
|
|
||||||
MESSAGE_DEF(UE_RRC_DCCH_DATA_IND, MESSAGE_PRIORITY_MED, itti_sim_rrc_ch_t, UEDCCHind)
|
|
||||||
@@ -1,51 +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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \file itti_sim_messages_types.h
|
|
||||||
* \brief itti message for itti simulator
|
|
||||||
* \author Yoshio INOUE, Masayuki HARADA
|
|
||||||
* \email yoshio.inoue@fujitsu.com,masayuki.harada@fujitsu.com
|
|
||||||
* \date 2020
|
|
||||||
* \version 0.1
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef ITTI_SIM_MESSAGES_TYPES_H_
|
|
||||||
#define ITTI_SIM_MESSAGES_TYPES_H_
|
|
||||||
|
|
||||||
#include "LTE_asn_constant.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define GNB_RRC_BCCH_DATA_IND(mSGpTR) (mSGpTR)->ittiMsg.GNBBCCHind
|
|
||||||
#define GNB_RRC_CCCH_DATA_IND(mSGpTR) (mSGpTR)->ittiMsg.GNBCCCHind
|
|
||||||
#define GNB_RRC_DCCH_DATA_IND(mSGpTR) (mSGpTR)->ittiMsg.GNBDCCHind
|
|
||||||
#define UE_RRC_CCCH_DATA_IND(mSGpTR) (mSGpTR)->ittiMsg.UECCCHind
|
|
||||||
#define UE_RRC_DCCH_DATA_IND(mSGpTR) (mSGpTR)->ittiMsg.UEDCCHind
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct itti_sim_rrc_ch_s {
|
|
||||||
rb_id_t rbid;
|
|
||||||
uint8_t *sdu;
|
|
||||||
int size;
|
|
||||||
} itti_sim_rrc_ch_t;
|
|
||||||
|
|
||||||
#endif /* ITTI_SIM_MESSAGES_TYPES_H_ */
|
|
||||||
@@ -973,9 +973,6 @@ int CU_handle_UE_CONTEXT_RELEASE_COMPLETE(instance_t instance,
|
|||||||
LOG_E(F1AP, "could not find ue_context of UE RNTI %x\n", rnti);
|
LOG_E(F1AP, "could not find ue_context of UE RNTI %x\n", rnti);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ITTI_SIM
|
|
||||||
return 0;
|
|
||||||
#endif
|
|
||||||
} else {
|
} else {
|
||||||
struct rrc_eNB_ue_context_s *ue_context_p =
|
struct rrc_eNB_ue_context_s *ue_context_p =
|
||||||
rrc_eNB_get_ue_context(RC.rrc[instance], rnti);
|
rrc_eNB_get_ue_context(RC.rrc[instance], rnti);
|
||||||
|
|||||||
@@ -37,9 +37,6 @@
|
|||||||
|
|
||||||
#include "COMMON/s1ap_messages_types.h"
|
#include "COMMON/s1ap_messages_types.h"
|
||||||
#include "COMMON/rrc_messages_types.h"
|
#include "COMMON/rrc_messages_types.h"
|
||||||
#if ITTI_SIM
|
|
||||||
#include "COMMON/itti_sim_messages_types.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "collection/tree.h"
|
#include "collection/tree.h"
|
||||||
#include "rrc_types_NB_IoT.h"
|
#include "rrc_types_NB_IoT.h"
|
||||||
|
|||||||
@@ -26,24 +26,9 @@
|
|||||||
|
|
||||||
static void dl_rrc_message_transfer_direct(module_id_t module_id, const f1ap_dl_rrc_message_t *dl_rrc)
|
static void dl_rrc_message_transfer_direct(module_id_t module_id, const f1ap_dl_rrc_message_t *dl_rrc)
|
||||||
{
|
{
|
||||||
#ifdef ITTI_SIM
|
|
||||||
const int len = dl_rrc->rrc_container_length;
|
|
||||||
LOG_I(NR_RRC,
|
|
||||||
PROTOCOL_NR_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel DL-CCCH, Generating RRCSetup (bytes %d)\n",
|
|
||||||
PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),
|
|
||||||
len);
|
|
||||||
uint8_t *message_buffer;
|
|
||||||
message_buffer = itti_malloc(TASK_RRC_GNB, TASK_RRC_UE_SIM, len);
|
|
||||||
memcpy (message_buffer, dl_rrc->rrc_container, len);
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_GNB, 0, GNB_RRC_CCCH_DATA_IND);
|
|
||||||
GNB_RRC_CCCH_DATA_IND (message_p).sdu = message_buffer;
|
|
||||||
GNB_RRC_CCCH_DATA_IND (message_p).size = len;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_UE_SIM, ctxt_pP->instance, message_p);
|
|
||||||
#else
|
|
||||||
/* TODO how to manage inter-thread communication? */
|
/* TODO how to manage inter-thread communication? */
|
||||||
|
|
||||||
dl_rrc_message(module_id, dl_rrc);
|
dl_rrc_message(module_id, dl_rrc);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void mac_rrc_dl_direct_init(nr_mac_rrc_dl_if_t *mac_rrc)
|
void mac_rrc_dl_direct_init(nr_mac_rrc_dl_if_t *mac_rrc)
|
||||||
|
|||||||
+2
-131
@@ -447,17 +447,6 @@ rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(
|
|||||||
ue_context_pP->ue_context.ue_release_timer_thres = 1000;
|
ue_context_pP->ue_context.ue_release_timer_thres = 1000;
|
||||||
/* init timers */
|
/* init timers */
|
||||||
// ue_context_pP->ue_context.ue_rrc_inactivity_timer = 0;
|
// ue_context_pP->ue_context.ue_rrc_inactivity_timer = 0;
|
||||||
#ifdef ITTI_SIM
|
|
||||||
MessageDef *message_p;
|
|
||||||
uint8_t *message_buffer;
|
|
||||||
message_buffer = itti_malloc (TASK_RRC_GNB, TASK_RRC_UE_SIM,
|
|
||||||
ue_p->Srb0.Tx_buffer.payload_size);
|
|
||||||
memcpy (message_buffer, (uint8_t*)ue_p->Srb0.Tx_buffer.Payload, ue_p->Srb0.Tx_buffer.payload_size);
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_GNB, 0, GNB_RRC_CCCH_DATA_IND);
|
|
||||||
GNB_RRC_CCCH_DATA_IND (message_p).sdu = message_buffer;
|
|
||||||
GNB_RRC_CCCH_DATA_IND (message_p).size = ue_p->Srb0.Tx_buffer.payload_size;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_UE_SIM, ctxt_pP->instance, message_p);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -507,16 +496,8 @@ rrc_gNB_generate_RRCReject(
|
|||||||
|
|
||||||
case ngran_gNB:
|
case ngran_gNB:
|
||||||
{
|
{
|
||||||
#ifdef ITTI_SIM
|
// NOTE: there was ITTI_SIM which has been removed. This case is maybe
|
||||||
uint8_t *message_buffer;
|
// not necessary anymore
|
||||||
message_buffer = itti_malloc (TASK_RRC_GNB, TASK_RRC_UE_SIM,
|
|
||||||
ue_p->Srb0.Tx_buffer.payload_size);
|
|
||||||
memcpy (message_buffer, (uint8_t*)ue_p->Srb0.Tx_buffer.Payload, ue_p->Srb0.Tx_buffer.payload_size);
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_GNB, 0, GNB_RRC_CCCH_DATA_IND);
|
|
||||||
GNB_RRC_CCCH_DATA_IND (message_p).sdu = message_buffer;
|
|
||||||
GNB_RRC_CCCH_DATA_IND (message_p).size = ue_p->Srb0.Tx_buffer.payload_size;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_UE_SIM, ctxt_pP->instance, message_p);
|
|
||||||
#endif
|
|
||||||
// rrc_mac_config_req_gNB
|
// rrc_mac_config_req_gNB
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -724,17 +705,6 @@ rrc_gNB_generate_defaultRRCReconfiguration(
|
|||||||
|
|
||||||
case ngran_gNB:
|
case ngran_gNB:
|
||||||
{
|
{
|
||||||
#ifdef ITTI_SIM
|
|
||||||
MessageDef *message_p;
|
|
||||||
uint8_t *message_buffer;
|
|
||||||
message_buffer = itti_malloc (TASK_RRC_GNB, TASK_RRC_UE_SIM, size);
|
|
||||||
memcpy (message_buffer, buffer, size);
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_GNB, 0, GNB_RRC_DCCH_DATA_IND);
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).rbid = DCCH;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).sdu = message_buffer;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).size = size;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_UE_SIM, ctxt_pP->instance, message_p);
|
|
||||||
#else
|
|
||||||
LOG_D(NR_RRC, "[FRAME %05d][RRC_gNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n",
|
LOG_D(NR_RRC, "[FRAME %05d][RRC_gNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n",
|
||||||
ctxt_pP->frame,
|
ctxt_pP->frame,
|
||||||
ctxt_pP->module_id,
|
ctxt_pP->module_id,
|
||||||
@@ -751,7 +721,6 @@ rrc_gNB_generate_defaultRRCReconfiguration(
|
|||||||
buffer,
|
buffer,
|
||||||
PDCP_TRANSMISSION_MODE_CONTROL);
|
PDCP_TRANSMISSION_MODE_CONTROL);
|
||||||
// rrc_pdcp_config_asn1_req
|
// rrc_pdcp_config_asn1_req
|
||||||
#endif
|
|
||||||
// rrc_rlc_config_asn1_req
|
// rrc_rlc_config_asn1_req
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1014,17 +983,6 @@ rrc_gNB_generate_dedicatedRRCReconfiguration(
|
|||||||
"[FRAME %05d][RRC_gNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n",
|
"[FRAME %05d][RRC_gNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n",
|
||||||
ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_gNB_mui, ctxt_pP->module_id, DCCH);
|
ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_gNB_mui, ctxt_pP->module_id, DCCH);
|
||||||
|
|
||||||
#ifdef ITTI_SIM
|
|
||||||
MessageDef *message_p;
|
|
||||||
uint8_t *message_buffer;
|
|
||||||
message_buffer = itti_malloc (TASK_RRC_GNB_SIM, TASK_RRC_UE_SIM, size);
|
|
||||||
memcpy (message_buffer, buffer, size);
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_GNB_SIM, 0, GNB_RRC_DCCH_DATA_IND);
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).rbid = DCCH;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).sdu = message_buffer;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).size = size;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_UE_SIM, ctxt_pP->instance, message_p);
|
|
||||||
#else
|
|
||||||
nr_rrc_data_req(
|
nr_rrc_data_req(
|
||||||
ctxt_pP,
|
ctxt_pP,
|
||||||
DCCH,
|
DCCH,
|
||||||
@@ -1033,7 +991,6 @@ rrc_gNB_generate_dedicatedRRCReconfiguration(
|
|||||||
size,
|
size,
|
||||||
buffer,
|
buffer,
|
||||||
PDCP_TRANSMISSION_MODE_CONTROL);
|
PDCP_TRANSMISSION_MODE_CONTROL);
|
||||||
#endif
|
|
||||||
|
|
||||||
if (NODE_IS_DU(rrc->node_type) || NODE_IS_MONOLITHIC(rrc->node_type)) {
|
if (NODE_IS_DU(rrc->node_type) || NODE_IS_MONOLITHIC(rrc->node_type)) {
|
||||||
rrc_mac_config_req_gNB(rrc->module_id,
|
rrc_mac_config_req_gNB(rrc->module_id,
|
||||||
@@ -1212,17 +1169,6 @@ rrc_gNB_modify_dedicatedRRCReconfiguration(
|
|||||||
"[FRAME %05d][RRC_gNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n",
|
"[FRAME %05d][RRC_gNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n",
|
||||||
ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_gNB_mui, ctxt_pP->module_id, DCCH);
|
ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_gNB_mui, ctxt_pP->module_id, DCCH);
|
||||||
|
|
||||||
#ifdef ITTI_SIM
|
|
||||||
MessageDef *message_p;
|
|
||||||
uint8_t *message_buffer;
|
|
||||||
message_buffer = itti_malloc (TASK_RRC_GNB_SIM, TASK_RRC_UE_SIM, size);
|
|
||||||
memcpy (message_buffer, buffer, size);
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_GNB_SIM, 0, GNB_RRC_DCCH_DATA_IND);
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).rbid = DCCH;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).sdu = message_buffer;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).size = size;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_UE_SIM, ctxt_pP->instance, message_p);
|
|
||||||
#else
|
|
||||||
nr_rrc_data_req(
|
nr_rrc_data_req(
|
||||||
ctxt_pP,
|
ctxt_pP,
|
||||||
DCCH,
|
DCCH,
|
||||||
@@ -1231,7 +1177,6 @@ rrc_gNB_modify_dedicatedRRCReconfiguration(
|
|||||||
size,
|
size,
|
||||||
buffer,
|
buffer,
|
||||||
PDCP_TRANSMISSION_MODE_CONTROL);
|
PDCP_TRANSMISSION_MODE_CONTROL);
|
||||||
#endif
|
|
||||||
|
|
||||||
if (NODE_IS_DU(RC.nrrrc[ctxt_pP->module_id]->node_type) || NODE_IS_MONOLITHIC(RC.nrrrc[ctxt_pP->module_id]->node_type)) {
|
if (NODE_IS_DU(RC.nrrrc[ctxt_pP->module_id]->node_type) || NODE_IS_MONOLITHIC(RC.nrrrc[ctxt_pP->module_id]->node_type)) {
|
||||||
uint32_t delay_ms = ue_context_pP->ue_context.masterCellGroup &&
|
uint32_t delay_ms = ue_context_pP->ue_context.masterCellGroup &&
|
||||||
@@ -1325,17 +1270,6 @@ rrc_gNB_generate_dedicatedRRCReconfiguration_release(
|
|||||||
LOG_D(NR_RRC,
|
LOG_D(NR_RRC,
|
||||||
"[FRAME %05d][RRC_gNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n",
|
"[FRAME %05d][RRC_gNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n",
|
||||||
ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_gNB_mui, ctxt_pP->module_id, DCCH);
|
ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_gNB_mui, ctxt_pP->module_id, DCCH);
|
||||||
#ifdef ITTI_SIM
|
|
||||||
MessageDef *message_p;
|
|
||||||
uint8_t *message_buffer;
|
|
||||||
message_buffer = itti_malloc (TASK_RRC_GNB, TASK_RRC_UE_SIM, size);
|
|
||||||
memcpy (message_buffer, buffer, size);
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_GNB, 0, GNB_RRC_DCCH_DATA_IND);
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).rbid = DCCH;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).sdu = message_buffer;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).size = size;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_UE_SIM, ctxt_pP->instance, message_p);
|
|
||||||
#else
|
|
||||||
nr_rrc_data_req(
|
nr_rrc_data_req(
|
||||||
ctxt_pP,
|
ctxt_pP,
|
||||||
DCCH,
|
DCCH,
|
||||||
@@ -1344,7 +1278,6 @@ rrc_gNB_generate_dedicatedRRCReconfiguration_release(
|
|||||||
size,
|
size,
|
||||||
buffer,
|
buffer,
|
||||||
PDCP_TRANSMISSION_MODE_CONTROL);
|
PDCP_TRANSMISSION_MODE_CONTROL);
|
||||||
#endif
|
|
||||||
|
|
||||||
if (NODE_IS_DU(RC.nrrrc[ctxt_pP->module_id]->node_type) || NODE_IS_MONOLITHIC(RC.nrrrc[ctxt_pP->module_id]->node_type)) {
|
if (NODE_IS_DU(RC.nrrrc[ctxt_pP->module_id]->node_type) || NODE_IS_MONOLITHIC(RC.nrrrc[ctxt_pP->module_id]->node_type)) {
|
||||||
uint32_t delay_ms = ue_context_pP->ue_context.masterCellGroup &&
|
uint32_t delay_ms = ue_context_pP->ue_context.masterCellGroup &&
|
||||||
@@ -1402,7 +1335,6 @@ rrc_gNB_process_RRCReconfigurationComplete(
|
|||||||
&kRRCint);
|
&kRRCint);
|
||||||
/* Refresh SRBs/DRBs */
|
/* Refresh SRBs/DRBs */
|
||||||
|
|
||||||
#ifndef ITTI_SIM
|
|
||||||
LOG_D(NR_RRC,"Configuring PDCP DRBs/SRBs for UE %x\n",ue_context_pP->ue_context.rnti);
|
LOG_D(NR_RRC,"Configuring PDCP DRBs/SRBs for UE %x\n",ue_context_pP->ue_context.rnti);
|
||||||
|
|
||||||
nr_rrc_pdcp_config_asn1_req(ctxt_pP,
|
nr_rrc_pdcp_config_asn1_req(ctxt_pP,
|
||||||
@@ -1428,7 +1360,6 @@ rrc_gNB_process_RRCReconfigurationComplete(
|
|||||||
NULL,
|
NULL,
|
||||||
get_softmodem_params()->sa ? ue_context_pP->ue_context.masterCellGroup->rlc_BearerToAddModList : NULL);
|
get_softmodem_params()->sa ? ue_context_pP->ue_context.masterCellGroup->rlc_BearerToAddModList : NULL);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Set the SRB active in UE context */
|
/* Set the SRB active in UE context */
|
||||||
if (SRB_configList != NULL) {
|
if (SRB_configList != NULL) {
|
||||||
@@ -1590,18 +1521,6 @@ rrc_gNB_generate_RRCReestablishment(
|
|||||||
rnti);
|
rnti);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef ITTI_SIM
|
|
||||||
MessageDef *message_p;
|
|
||||||
uint8_t *message_buffer;
|
|
||||||
message_buffer = itti_malloc (TASK_RRC_GNB, TASK_RRC_UE_SIM, ue_context->Srb0.Tx_buffer.payload_size);
|
|
||||||
memcpy (message_buffer, (uint8_t *) ue_context->Srb0.Tx_buffer.Payload, ue_context->Srb0.Tx_buffer.payload_size);
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_GNB, 0, GNB_RRC_DCCH_DATA_IND);
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).rbid = DCCH;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).sdu = message_buffer;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).size = ue_context->Srb0.Tx_buffer.payload_size;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_UE_SIM, ctxt_pP->instance, message_p);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -1839,17 +1758,6 @@ rrc_gNB_process_RRCConnectionReestablishmentComplete(
|
|||||||
LOG_D(NR_RRC,
|
LOG_D(NR_RRC,
|
||||||
"[FRAME %05d][RRC_gNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcConnectionReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n",
|
"[FRAME %05d][RRC_gNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcConnectionReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n",
|
||||||
ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_gNB_mui, ctxt_pP->module_id, DCCH);
|
ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_gNB_mui, ctxt_pP->module_id, DCCH);
|
||||||
#ifdef ITTI_SIM
|
|
||||||
MessageDef *message_p;
|
|
||||||
uint8_t *message_buffer;
|
|
||||||
message_buffer = itti_malloc (TASK_RRC_GNB, TASK_RRC_UE_SIM, size);
|
|
||||||
memcpy (message_buffer, buffer, size);
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_GNB, 0, GNB_RRC_DCCH_DATA_IND);
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).rbid = DCCH;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).sdu = message_buffer;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).size = size;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_UE_SIM, ctxt_pP->instance, message_p);
|
|
||||||
#else
|
|
||||||
nr_rrc_data_req(
|
nr_rrc_data_req(
|
||||||
ctxt_pP,
|
ctxt_pP,
|
||||||
DCCH,
|
DCCH,
|
||||||
@@ -1858,7 +1766,6 @@ rrc_gNB_process_RRCConnectionReestablishmentComplete(
|
|||||||
size,
|
size,
|
||||||
buffer,
|
buffer,
|
||||||
PDCP_TRANSMISSION_MODE_CONTROL);
|
PDCP_TRANSMISSION_MODE_CONTROL);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NODE_IS_DU(RC.nrrrc[ctxt_pP->module_id]->node_type) || NODE_IS_MONOLITHIC(RC.nrrrc[ctxt_pP->module_id]->node_type)) {
|
if (NODE_IS_DU(RC.nrrrc[ctxt_pP->module_id]->node_type) || NODE_IS_MONOLITHIC(RC.nrrrc[ctxt_pP->module_id]->node_type)) {
|
||||||
@@ -4210,17 +4117,6 @@ rrc_gNB_generate_SecurityModeCommand(
|
|||||||
size,
|
size,
|
||||||
rrc_gNB_mui,
|
rrc_gNB_mui,
|
||||||
DCCH);
|
DCCH);
|
||||||
#ifdef ITTI_SIM
|
|
||||||
MessageDef *message_p;
|
|
||||||
uint8_t *message_buffer;
|
|
||||||
message_buffer = itti_malloc (TASK_RRC_GNB, TASK_RRC_UE_SIM,size);
|
|
||||||
memcpy (message_buffer, buffer, size);
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_GNB, 0, GNB_RRC_DCCH_DATA_IND);
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).rbid = DCCH;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).sdu = message_buffer;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).size = size;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_UE_SIM, ctxt_pP->instance, message_p);
|
|
||||||
#else
|
|
||||||
LOG_D(NR_RRC,"calling rrc_data_req :securityModeCommand\n");
|
LOG_D(NR_RRC,"calling rrc_data_req :securityModeCommand\n");
|
||||||
nr_rrc_data_req(ctxt_pP,
|
nr_rrc_data_req(ctxt_pP,
|
||||||
DCCH,
|
DCCH,
|
||||||
@@ -4229,7 +4125,6 @@ rrc_gNB_generate_SecurityModeCommand(
|
|||||||
size,
|
size,
|
||||||
buffer,
|
buffer,
|
||||||
PDCP_TRANSMISSION_MODE_CONTROL);
|
PDCP_TRANSMISSION_MODE_CONTROL);
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default :
|
default :
|
||||||
@@ -4282,17 +4177,6 @@ rrc_gNB_generate_UECapabilityEnquiry(
|
|||||||
size,
|
size,
|
||||||
rrc_gNB_mui,
|
rrc_gNB_mui,
|
||||||
DCCH);
|
DCCH);
|
||||||
#ifdef ITTI_SIM
|
|
||||||
MessageDef *message_p;
|
|
||||||
uint8_t *message_buffer;
|
|
||||||
message_buffer = itti_malloc (TASK_RRC_GNB, TASK_RRC_UE_SIM, size);
|
|
||||||
memcpy (message_buffer, buffer, size);
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_GNB, 0, GNB_RRC_DCCH_DATA_IND);
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).rbid = DCCH;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).sdu = message_buffer;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).size = size;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_UE_SIM, ctxt_pP->instance, message_p);
|
|
||||||
#else
|
|
||||||
nr_rrc_data_req(ctxt_pP,
|
nr_rrc_data_req(ctxt_pP,
|
||||||
DCCH,
|
DCCH,
|
||||||
rrc_gNB_mui++,
|
rrc_gNB_mui++,
|
||||||
@@ -4300,7 +4184,6 @@ rrc_gNB_generate_UECapabilityEnquiry(
|
|||||||
size,
|
size,
|
||||||
buffer,
|
buffer,
|
||||||
PDCP_TRANSMISSION_MODE_CONTROL);
|
PDCP_TRANSMISSION_MODE_CONTROL);
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default :
|
default :
|
||||||
@@ -4342,17 +4225,6 @@ rrc_gNB_generate_RRCRelease(
|
|||||||
rrc_gNB_mui,
|
rrc_gNB_mui,
|
||||||
DCCH);
|
DCCH);
|
||||||
|
|
||||||
#ifdef ITTI_SIM
|
|
||||||
MessageDef *message_p;
|
|
||||||
uint8_t *message_buffer;
|
|
||||||
message_buffer = itti_malloc (TASK_RRC_GNB, TASK_RRC_UE_SIM, size);
|
|
||||||
memcpy (message_buffer, buffer, size);
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_GNB, 0, GNB_RRC_DCCH_DATA_IND);
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).rbid = DCCH;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).sdu = message_buffer;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).size = size;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_UE_SIM, ctxt_pP->instance, message_p);
|
|
||||||
#else
|
|
||||||
if (NODE_IS_CU(RC.nrrrc[ctxt_pP->module_id]->node_type)) {
|
if (NODE_IS_CU(RC.nrrrc[ctxt_pP->module_id]->node_type)) {
|
||||||
uint8_t *message_buffer = itti_malloc (TASK_RRC_GNB, TASK_CU_F1, size);
|
uint8_t *message_buffer = itti_malloc (TASK_RRC_GNB, TASK_CU_F1, size);
|
||||||
memcpy (message_buffer, buffer, size);
|
memcpy (message_buffer, buffer, size);
|
||||||
@@ -4375,7 +4247,6 @@ rrc_gNB_generate_RRCRelease(
|
|||||||
rrc_gNB_send_NGAP_UE_CONTEXT_RELEASE_COMPLETE(ctxt_pP->instance, ue_context_pP->ue_context.gNB_ue_ngap_id);
|
rrc_gNB_send_NGAP_UE_CONTEXT_RELEASE_COMPLETE(ctxt_pP->instance, ue_context_pP->ue_context.gNB_ue_ngap_id);
|
||||||
ue_context_pP->ue_context.ue_release_timer_rrc = 1;
|
ue_context_pP->ue_context.ue_release_timer_rrc = 1;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
void nr_rrc_trigger(protocol_ctxt_t *ctxt, int CC_id, int frame, int subframe)
|
void nr_rrc_trigger(protocol_ctxt_t *ctxt, int CC_id, int frame, int subframe)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -824,17 +824,6 @@ rrc_gNB_process_NGAP_DOWNLINK_NAS(
|
|||||||
case ngran_gNB:
|
case ngran_gNB:
|
||||||
{
|
{
|
||||||
// rrc_mac_config_req_gNB
|
// rrc_mac_config_req_gNB
|
||||||
#ifdef ITTI_SIM
|
|
||||||
uint8_t *message_buffer;
|
|
||||||
message_buffer = itti_malloc (TASK_RRC_GNB, TASK_RRC_UE_SIM, length);
|
|
||||||
memcpy (message_buffer, buffer, length);
|
|
||||||
MessageDef *message_p = itti_alloc_new_message (TASK_RRC_GNB, 0, GNB_RRC_DCCH_DATA_IND);
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).rbid = DCCH;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).sdu = message_buffer;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).size = length;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_UE_SIM, instance, message_p);
|
|
||||||
LOG_I(NR_RRC, "Send DL NAS message \n");
|
|
||||||
#else
|
|
||||||
/* Transfer data to PDCP */
|
/* Transfer data to PDCP */
|
||||||
nr_rrc_data_req (
|
nr_rrc_data_req (
|
||||||
&ctxt,
|
&ctxt,
|
||||||
@@ -844,7 +833,6 @@ rrc_gNB_process_NGAP_DOWNLINK_NAS(
|
|||||||
length,
|
length,
|
||||||
buffer,
|
buffer,
|
||||||
PDCP_TRANSMISSION_MODE_CONTROL);
|
PDCP_TRANSMISSION_MODE_CONTROL);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -1342,12 +1342,6 @@ static void rrc_ue_generate_RRCSetupComplete(
|
|||||||
int nas_msg_length;
|
int nas_msg_length;
|
||||||
|
|
||||||
if (AMF_MODE_ENABLED) {
|
if (AMF_MODE_ENABLED) {
|
||||||
#if defined(ITTI_SIM)
|
|
||||||
as_nas_info_t initialNasMsg;
|
|
||||||
generateRegistrationRequest(&initialNasMsg, ctxt_pP->module_id);
|
|
||||||
nas_msg = (char*)initialNasMsg.data;
|
|
||||||
nas_msg_length = initialNasMsg.length;
|
|
||||||
#else
|
|
||||||
if (get_softmodem_params()->sa) {
|
if (get_softmodem_params()->sa) {
|
||||||
as_nas_info_t initialNasMsg;
|
as_nas_info_t initialNasMsg;
|
||||||
generateRegistrationRequest(&initialNasMsg, ctxt_pP->module_id);
|
generateRegistrationRequest(&initialNasMsg, ctxt_pP->module_id);
|
||||||
@@ -1357,7 +1351,6 @@ static void rrc_ue_generate_RRCSetupComplete(
|
|||||||
nas_msg = (char *) NR_UE_rrc_inst[ctxt_pP->module_id].initialNasMsg.data;
|
nas_msg = (char *) NR_UE_rrc_inst[ctxt_pP->module_id].initialNasMsg.data;
|
||||||
nas_msg_length = NR_UE_rrc_inst[ctxt_pP->module_id].initialNasMsg.length;
|
nas_msg_length = NR_UE_rrc_inst[ctxt_pP->module_id].initialNasMsg.length;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
} else {
|
} else {
|
||||||
nas_msg = nr_nas_attach_req_imsi;
|
nas_msg = nr_nas_attach_req_imsi;
|
||||||
nas_msg_length = sizeof(nr_nas_attach_req_imsi);
|
nas_msg_length = sizeof(nr_nas_attach_req_imsi);
|
||||||
@@ -1381,18 +1374,6 @@ static void rrc_ue_generate_RRCSetupComplete(
|
|||||||
size,
|
size,
|
||||||
buffer,
|
buffer,
|
||||||
PDCP_TRANSMISSION_MODE_CONTROL);
|
PDCP_TRANSMISSION_MODE_CONTROL);
|
||||||
|
|
||||||
#ifdef ITTI_SIM
|
|
||||||
MessageDef *message_p;
|
|
||||||
uint8_t *message_buffer;
|
|
||||||
message_buffer = itti_malloc (TASK_RRC_NRUE, TASK_RRC_GNB_SIM, size);
|
|
||||||
memcpy (message_buffer, buffer, size);
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_NRUE, 0, UE_RRC_DCCH_DATA_IND);
|
|
||||||
UE_RRC_DCCH_DATA_IND (message_p).rbid = 1;
|
|
||||||
UE_RRC_DCCH_DATA_IND (message_p).sdu = message_buffer;
|
|
||||||
UE_RRC_DCCH_DATA_IND (message_p).size = size;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_GNB_SIM, ctxt_pP->instance, message_p);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int8_t nr_rrc_ue_decode_ccch( const protocol_ctxt_t *const ctxt_pP, const NR_SRB_INFO *const Srb_info, const uint8_t gNB_index ){
|
int8_t nr_rrc_ue_decode_ccch( const protocol_ctxt_t *const ctxt_pP, const NR_SRB_INFO *const Srb_info, const uint8_t gNB_index ){
|
||||||
@@ -1711,19 +1692,6 @@ int8_t nr_rrc_ue_decode_ccch( const protocol_ctxt_t *const ctxt_pP, const NR_SRB
|
|||||||
}
|
}
|
||||||
|
|
||||||
LOG_T(NR_RRC, "\n");
|
LOG_T(NR_RRC, "\n");
|
||||||
#ifdef ITTI_SIM
|
|
||||||
MessageDef *message_p;
|
|
||||||
uint8_t *message_buffer;
|
|
||||||
message_buffer = itti_malloc (TASK_RRC_NRUE,TASK_RRC_GNB_SIM,
|
|
||||||
(enc_rval.encoded + 7) / 8);
|
|
||||||
memcpy (message_buffer, buffer, (enc_rval.encoded + 7) / 8);
|
|
||||||
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_NRUE, 0, UE_RRC_DCCH_DATA_IND);
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).rbid = DCCH;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).sdu = message_buffer;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).size = (enc_rval.encoded + 7) / 8;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_GNB_SIM, ctxt_pP->instance, message_p);
|
|
||||||
#else
|
|
||||||
rrc_data_req_nr_ue (ctxt_pP,
|
rrc_data_req_nr_ue (ctxt_pP,
|
||||||
DCCH,
|
DCCH,
|
||||||
nr_rrc_mui++,
|
nr_rrc_mui++,
|
||||||
@@ -1731,7 +1699,6 @@ int8_t nr_rrc_ue_decode_ccch( const protocol_ctxt_t *const ctxt_pP, const NR_SRB
|
|||||||
(enc_rval.encoded + 7) / 8,
|
(enc_rval.encoded + 7) / 8,
|
||||||
buffer,
|
buffer,
|
||||||
PDCP_TRANSMISSION_MODE_CONTROL);
|
PDCP_TRANSMISSION_MODE_CONTROL);
|
||||||
#endif
|
|
||||||
} else
|
} else
|
||||||
LOG_W(NR_RRC,"securityModeCommand->criticalExtensions.present (%d) != NR_SecurityModeCommand__criticalExtensions_PR_securityModeCommand\n",
|
LOG_W(NR_RRC,"securityModeCommand->criticalExtensions.present (%d) != NR_SecurityModeCommand__criticalExtensions_PR_securityModeCommand\n",
|
||||||
securityModeCommand->criticalExtensions.present);
|
securityModeCommand->criticalExtensions.present);
|
||||||
@@ -1777,19 +1744,6 @@ int8_t nr_rrc_ue_decode_ccch( const protocol_ctxt_t *const ctxt_pP, const NR_SRB
|
|||||||
//printf("\n");
|
//printf("\n");
|
||||||
/*UE_rrc_inst[ue_mod_idP].Srb0[Idx].Tx_buffer.Payload[i] = taus()&0xff;
|
/*UE_rrc_inst[ue_mod_idP].Srb0[Idx].Tx_buffer.Payload[i] = taus()&0xff;
|
||||||
UE_rrc_inst[ue_mod_idP].Srb0[Idx].Tx_buffer.payload_size =i; */
|
UE_rrc_inst[ue_mod_idP].Srb0[Idx].Tx_buffer.payload_size =i; */
|
||||||
|
|
||||||
#ifdef ITTI_SIM
|
|
||||||
MessageDef *message_p;
|
|
||||||
uint8_t *message_buffer;
|
|
||||||
message_buffer = itti_malloc (TASK_RRC_NRUE,TASK_RRC_GNB_SIM,
|
|
||||||
NR_UE_rrc_inst[module_id].Srb0[gNB_index].Tx_buffer.payload_size);
|
|
||||||
memcpy (message_buffer, (uint8_t*)NR_UE_rrc_inst[module_id].Srb0[gNB_index].Tx_buffer.Payload,
|
|
||||||
NR_UE_rrc_inst[module_id].Srb0[gNB_index].Tx_buffer.payload_size);
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_NRUE, 0, UE_RRC_CCCH_DATA_IND);
|
|
||||||
GNB_RRC_CCCH_DATA_IND (message_p).sdu = message_buffer;
|
|
||||||
GNB_RRC_CCCH_DATA_IND (message_p).size = NR_UE_rrc_inst[module_id].Srb0[gNB_index].Tx_buffer.payload_size;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_GNB_SIM, gNB_index, message_p);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2254,19 +2208,6 @@ nr_rrc_ue_establish_srb2(
|
|||||||
nr_rrc_mui,
|
nr_rrc_mui,
|
||||||
UE_MODULE_ID_TO_INSTANCE(ctxt_pP->module_id),
|
UE_MODULE_ID_TO_INSTANCE(ctxt_pP->module_id),
|
||||||
DCCH);
|
DCCH);
|
||||||
#ifdef ITTI_SIM
|
|
||||||
MessageDef *message_p;
|
|
||||||
uint8_t *message_buffer;
|
|
||||||
message_buffer = itti_malloc (TASK_RRC_NRUE,TASK_RRC_GNB_SIM,size);
|
|
||||||
memcpy (message_buffer, buffer, size);
|
|
||||||
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_NRUE, 0, UE_RRC_DCCH_DATA_IND);
|
|
||||||
UE_RRC_DCCH_DATA_IND (message_p).rbid = DCCH;
|
|
||||||
UE_RRC_DCCH_DATA_IND (message_p).sdu = message_buffer;
|
|
||||||
UE_RRC_DCCH_DATA_IND (message_p).size = size;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_GNB_SIM, ctxt_pP->instance, message_p);
|
|
||||||
|
|
||||||
#else
|
|
||||||
rrc_data_req_nr_ue (
|
rrc_data_req_nr_ue (
|
||||||
ctxt_pP,
|
ctxt_pP,
|
||||||
DCCH,
|
DCCH,
|
||||||
@@ -2275,8 +2216,6 @@ nr_rrc_ue_establish_srb2(
|
|||||||
size,
|
size,
|
||||||
buffer,
|
buffer,
|
||||||
PDCP_TRANSMISSION_MODE_CONTROL);
|
PDCP_TRANSMISSION_MODE_CONTROL);
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// from NR SRB1
|
// from NR SRB1
|
||||||
@@ -2523,22 +2462,6 @@ nr_rrc_ue_establish_srb2(
|
|||||||
length = do_NR_ULInformationTransfer(&buffer, NAS_UPLINK_DATA_REQ (msg_p).nasMsg.length, NAS_UPLINK_DATA_REQ (msg_p).nasMsg.data);
|
length = do_NR_ULInformationTransfer(&buffer, NAS_UPLINK_DATA_REQ (msg_p).nasMsg.length, NAS_UPLINK_DATA_REQ (msg_p).nasMsg.data);
|
||||||
/* Transfer data to PDCP */
|
/* Transfer data to PDCP */
|
||||||
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, ue_mod_id, GNB_FLAG_NO, NR_UE_rrc_inst[ue_mod_id].Info[0].rnti, 0, 0,0);
|
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, ue_mod_id, GNB_FLAG_NO, NR_UE_rrc_inst[ue_mod_id].Info[0].rnti, 0, 0,0);
|
||||||
#ifdef ITTI_SIM
|
|
||||||
MessageDef *message_p;
|
|
||||||
uint8_t *message_buffer;
|
|
||||||
message_buffer = itti_malloc (TASK_RRC_NRUE,TASK_RRC_GNB_SIM,length);
|
|
||||||
memcpy (message_buffer, buffer, length);
|
|
||||||
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_NRUE, 0, UE_RRC_DCCH_DATA_IND);
|
|
||||||
if(NR_UE_rrc_inst[ue_mod_id].SRB2_config[0] == NULL)
|
|
||||||
UE_RRC_DCCH_DATA_IND (message_p).rbid = DCCH;
|
|
||||||
else
|
|
||||||
UE_RRC_DCCH_DATA_IND (message_p).rbid = DCCH1;
|
|
||||||
UE_RRC_DCCH_DATA_IND (message_p).sdu = message_buffer;
|
|
||||||
UE_RRC_DCCH_DATA_IND (message_p).size = length;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_GNB_SIM, ctxt.instance, message_p);
|
|
||||||
|
|
||||||
#else
|
|
||||||
// check if SRB2 is created, if yes request data_req on DCCH1 (SRB2)
|
// check if SRB2 is created, if yes request data_req on DCCH1 (SRB2)
|
||||||
if(NR_UE_rrc_inst[ue_mod_id].SRB2_config[0] == NULL) {
|
if(NR_UE_rrc_inst[ue_mod_id].SRB2_config[0] == NULL) {
|
||||||
rrc_data_req_nr_ue (&ctxt,
|
rrc_data_req_nr_ue (&ctxt,
|
||||||
@@ -2555,7 +2478,6 @@ nr_rrc_ue_establish_srb2(
|
|||||||
length, buffer,
|
length, buffer,
|
||||||
PDCP_TRANSMISSION_MODE_CONTROL);
|
PDCP_TRANSMISSION_MODE_CONTROL);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2699,19 +2621,6 @@ nr_rrc_ue_process_ueCapabilityEnquiry(
|
|||||||
}
|
}
|
||||||
|
|
||||||
LOG_I(NR_RRC, "UECapabilityInformation Encoded %zd bits (%zd bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
|
LOG_I(NR_RRC, "UECapabilityInformation Encoded %zd bits (%zd bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
|
||||||
#ifdef ITTI_SIM
|
|
||||||
MessageDef *message_p;
|
|
||||||
uint8_t *message_buffer;
|
|
||||||
message_buffer = itti_malloc (TASK_RRC_NRUE,TASK_RRC_GNB_SIM,
|
|
||||||
(enc_rval.encoded + 7) / 8);
|
|
||||||
memcpy (message_buffer, buffer, (enc_rval.encoded + 7) / 8);
|
|
||||||
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_NRUE, 0, UE_RRC_DCCH_DATA_IND);
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).rbid = DCCH;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).sdu = message_buffer;
|
|
||||||
GNB_RRC_DCCH_DATA_IND (message_p).size = (enc_rval.encoded + 7) / 8;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_GNB_SIM, ctxt_pP->instance, message_p);
|
|
||||||
#else
|
|
||||||
rrc_data_req_nr_ue (
|
rrc_data_req_nr_ue (
|
||||||
ctxt_pP,
|
ctxt_pP,
|
||||||
DCCH,
|
DCCH,
|
||||||
@@ -2720,7 +2629,6 @@ nr_rrc_ue_process_ueCapabilityEnquiry(
|
|||||||
(enc_rval.encoded + 7) / 8,
|
(enc_rval.encoded + 7) / 8,
|
||||||
buffer,
|
buffer,
|
||||||
PDCP_TRANSMISSION_MODE_CONTROL);
|
PDCP_TRANSMISSION_MODE_CONTROL);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2739,19 +2647,6 @@ nr_rrc_ue_generate_rrcReestablishmentComplete(
|
|||||||
rrcReestablishment->rrc_TransactionIdentifier);
|
rrcReestablishment->rrc_TransactionIdentifier);
|
||||||
LOG_I(NR_RRC,"[UE %d][RAPROC] Frame %d : Logical Channel UL-DCCH (SRB1), Generating RRCReestablishmentComplete (bytes%d, gNB %d)\n",
|
LOG_I(NR_RRC,"[UE %d][RAPROC] Frame %d : Logical Channel UL-DCCH (SRB1), Generating RRCReestablishmentComplete (bytes%d, gNB %d)\n",
|
||||||
ctxt_pP->module_id,ctxt_pP->frame, length, gNB_index);
|
ctxt_pP->module_id,ctxt_pP->frame, length, gNB_index);
|
||||||
#ifdef ITTI_SIM
|
|
||||||
MessageDef *message_p;
|
|
||||||
uint8_t *message_buffer;
|
|
||||||
message_buffer = itti_malloc (TASK_RRC_NRUE,TASK_RRC_GNB_SIM,length);
|
|
||||||
memcpy (message_buffer, buffer, length);
|
|
||||||
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_NRUE, 0, UE_RRC_DCCH_DATA_IND);
|
|
||||||
UE_RRC_DCCH_DATA_IND (message_p).rbid = DCCH;
|
|
||||||
UE_RRC_DCCH_DATA_IND (message_p).sdu = message_buffer;
|
|
||||||
UE_RRC_DCCH_DATA_IND (message_p).size = length;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_GNB_SIM, ctxt_pP->instance, message_p);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void *recv_msgs_from_lte_ue(void *args_p)
|
void *recv_msgs_from_lte_ue(void *args_p)
|
||||||
|
|||||||
@@ -1,664 +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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \file itti_sim.c
|
|
||||||
* \brief simulator for itti message from node to UE
|
|
||||||
* \author Yoshio INOUE, Masayuki HARADA
|
|
||||||
* \email yoshio.inoue@fujitsu.com,masayuki.harada@fujitsu.com
|
|
||||||
* \date 2020
|
|
||||||
* \version 0.1
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include <sched.h>
|
|
||||||
|
|
||||||
|
|
||||||
#include "T.h"
|
|
||||||
|
|
||||||
#undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all
|
|
||||||
#include <common/utils/assertions.h>
|
|
||||||
|
|
||||||
#include "common/ran_context.h"
|
|
||||||
|
|
||||||
#include "common/config/config_userapi.h"
|
|
||||||
#include "common/utils/load_module_shlib.h"
|
|
||||||
#undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all
|
|
||||||
|
|
||||||
#include "PHY/phy_vars.h"
|
|
||||||
#include "SCHED/sched_common_vars.h"
|
|
||||||
#include "LAYER2/MAC/mac_vars.h"
|
|
||||||
#include "RRC/LTE/rrc_vars.h"
|
|
||||||
#include "gnb_config.h"
|
|
||||||
#include "SIMULATION/TOOLS/sim.h"
|
|
||||||
|
|
||||||
#ifdef SMBV
|
|
||||||
#include "PHY/TOOLS/smbv.h"
|
|
||||||
unsigned short config_frames[4] = {2,9,11,13};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "common/utils/LOG/log.h"
|
|
||||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
|
||||||
#include "UTIL/OPT/opt.h"
|
|
||||||
|
|
||||||
#include "intertask_interface.h"
|
|
||||||
|
|
||||||
|
|
||||||
#include "system.h"
|
|
||||||
#include <openair2/GNB_APP/gnb_app.h>
|
|
||||||
#include "PHY/TOOLS/phy_scope_interface.h"
|
|
||||||
#include "PHY/TOOLS/nr_phy_scope.h"
|
|
||||||
#include "stats.h"
|
|
||||||
#include "nr-softmodem.h"
|
|
||||||
#include "executables/softmodem-common.h"
|
|
||||||
#include "executables/thread-common.h"
|
|
||||||
#include "NB_IoT_interface.h"
|
|
||||||
#include "x2ap_eNB.h"
|
|
||||||
#include "ngap_gNB.h"
|
|
||||||
#include "RRC/NR_UE/rrc_proto.h"
|
|
||||||
#include "RRC/NR_UE/rrc_vars.h"
|
|
||||||
#include "openair3/NAS/UE/nas_ue_task.h"
|
|
||||||
#include <executables/split_headers.h>
|
|
||||||
#include <executables/nr-uesoftmodem.h>
|
|
||||||
#if ITTI_SIM
|
|
||||||
#include "nr_nas_msg_sim.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
pthread_cond_t nfapi_sync_cond;
|
|
||||||
pthread_mutex_t nfapi_sync_mutex;
|
|
||||||
int nfapi_sync_var=-1; //!< protected by mutex \ref nfapi_sync_mutex
|
|
||||||
|
|
||||||
uint32_t timing_advance = 0;
|
|
||||||
uint64_t num_missed_slots=0;
|
|
||||||
|
|
||||||
int split73=0;
|
|
||||||
void sendFs6Ul(PHY_VARS_eNB *eNB, int UE_id, int harq_pid, int segmentID, int16_t *data, int dataLen, int r_offset) {
|
|
||||||
AssertFatal(false, "Must not be called in this context\n");
|
|
||||||
}
|
|
||||||
void sendFs6Ulharq(enum pckType type, int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, int frame, int subframe, uint8_t *harq_ack, uint8_t tdd_mapping_mode, uint16_t tdd_multiplexing_mask, uint16_t rnti, int32_t stat) {
|
|
||||||
AssertFatal(false, "Must not be called in this context\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
nrUE_params_t nrUE_params;
|
|
||||||
nrUE_params_t *get_nrUE_params(void) {
|
|
||||||
return &nrUE_params;
|
|
||||||
}
|
|
||||||
|
|
||||||
void processSlotTX(void *arg) {}
|
|
||||||
|
|
||||||
THREAD_STRUCT thread_struct;
|
|
||||||
pthread_cond_t sync_cond;
|
|
||||||
pthread_mutex_t sync_mutex;
|
|
||||||
int sync_var=-1; //!< protected by mutex \ref sync_mutex.
|
|
||||||
int config_sync_var=-1;
|
|
||||||
|
|
||||||
openair0_config_t openair0_cfg[MAX_CARDS];
|
|
||||||
|
|
||||||
//volatile int start_gNB = 0;
|
|
||||||
volatile int oai_exit = 0;
|
|
||||||
|
|
||||||
//static int wait_for_sync = 0;
|
|
||||||
|
|
||||||
unsigned int mmapped_dma=0;
|
|
||||||
int single_thread_flag=1;
|
|
||||||
|
|
||||||
int8_t threequarter_fs=0;
|
|
||||||
|
|
||||||
uint64_t downlink_frequency[MAX_NUM_CCs][4];
|
|
||||||
int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
|
|
||||||
|
|
||||||
//Temp fix for inexistent NR upper layer
|
|
||||||
unsigned char NB_gNB_INST = 1;
|
|
||||||
|
|
||||||
|
|
||||||
int UE_scan = 1;
|
|
||||||
int UE_scan_carrier = 0;
|
|
||||||
runmode_t mode = normal_txrx;
|
|
||||||
static double snr_dB=20;
|
|
||||||
|
|
||||||
FILE *input_fd=NULL;
|
|
||||||
|
|
||||||
int chain_offset=0;
|
|
||||||
|
|
||||||
|
|
||||||
uint8_t dci_Format = 0;
|
|
||||||
uint8_t agregation_Level =0xFF;
|
|
||||||
|
|
||||||
uint8_t nb_antenna_tx = 1;
|
|
||||||
uint8_t nb_antenna_rx = 1;
|
|
||||||
|
|
||||||
char ref[128] = "internal";
|
|
||||||
char channels[128] = "0";
|
|
||||||
|
|
||||||
int otg_enabled;
|
|
||||||
|
|
||||||
extern void *udp_eNB_task(void *args_p);
|
|
||||||
|
|
||||||
int transmission_mode=1;
|
|
||||||
int emulate_rf = 0;
|
|
||||||
int numerology = 0;
|
|
||||||
|
|
||||||
|
|
||||||
double cpuf;
|
|
||||||
|
|
||||||
extern char uecap_xer[1024];
|
|
||||||
char uecap_xer_in=0;
|
|
||||||
|
|
||||||
/* see file openair2/LAYER2/MAC/main.c for why abstraction_flag is needed
|
|
||||||
* this is very hackish - find a proper solution
|
|
||||||
*/
|
|
||||||
uint8_t abstraction_flag=0;
|
|
||||||
|
|
||||||
/* forward declarations */
|
|
||||||
void set_default_frame_parms(nfapi_nr_config_request_scf_t *config[MAX_NUM_CCs], NR_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]);
|
|
||||||
|
|
||||||
/*---------------------BMC: timespec helpers -----------------------------*/
|
|
||||||
|
|
||||||
struct timespec min_diff_time = { .tv_sec = 0, .tv_nsec = 0 };
|
|
||||||
struct timespec max_diff_time = { .tv_sec = 0, .tv_nsec = 0 };
|
|
||||||
|
|
||||||
struct timespec clock_difftime(struct timespec start, struct timespec end) {
|
|
||||||
struct timespec temp;
|
|
||||||
|
|
||||||
if ((end.tv_nsec-start.tv_nsec)<0) {
|
|
||||||
temp.tv_sec = end.tv_sec-start.tv_sec-1;
|
|
||||||
temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
|
|
||||||
} else {
|
|
||||||
temp.tv_sec = end.tv_sec-start.tv_sec;
|
|
||||||
temp.tv_nsec = end.tv_nsec-start.tv_nsec;
|
|
||||||
}
|
|
||||||
|
|
||||||
return temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define KNRM "\x1B[0m"
|
|
||||||
#define KRED "\x1B[31m"
|
|
||||||
#define KGRN "\x1B[32m"
|
|
||||||
#define KBLU "\x1B[34m"
|
|
||||||
#define RESET "\033[0m"
|
|
||||||
|
|
||||||
|
|
||||||
void exit_function(const char *file, const char *function, const int line, const char *s) {
|
|
||||||
int ru_id;
|
|
||||||
|
|
||||||
if (s != NULL) {
|
|
||||||
printf("%s:%d %s() Exiting OAI softmodem: %s\n",file,line, function, s);
|
|
||||||
}
|
|
||||||
|
|
||||||
oai_exit = 1;
|
|
||||||
|
|
||||||
if (RC.ru == NULL)
|
|
||||||
exit(-1); // likely init not completed, prevent crash or hang, exit now...
|
|
||||||
|
|
||||||
for (ru_id=0; ru_id<RC.nb_RU; ru_id++) {
|
|
||||||
if (RC.ru[ru_id] && RC.ru[ru_id]->rfdevice.trx_end_func) {
|
|
||||||
RC.ru[ru_id]->rfdevice.trx_end_func(&RC.ru[ru_id]->rfdevice);
|
|
||||||
RC.ru[ru_id]->rfdevice.trx_end_func = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RC.ru[ru_id] && RC.ru[ru_id]->ifdevice.trx_end_func) {
|
|
||||||
RC.ru[ru_id]->ifdevice.trx_end_func(&RC.ru[ru_id]->ifdevice);
|
|
||||||
RC.ru[ru_id]->ifdevice.trx_end_func = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sleep(1); //allow lte-softmodem threads to exit first
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void wait_gNBs(void) {
|
|
||||||
int i;
|
|
||||||
int waiting=1;
|
|
||||||
|
|
||||||
while (waiting==1) {
|
|
||||||
printf("Waiting for gNB L1 instances to all get configured ... sleeping 50ms (nb_nr_sL1_inst %d)\n",RC.nb_nr_L1_inst);
|
|
||||||
usleep(50*1000);
|
|
||||||
waiting=0;
|
|
||||||
|
|
||||||
for (i=0; i<RC.nb_nr_L1_inst; i++) {
|
|
||||||
|
|
||||||
if (RC.gNB[i]->configured==0) {
|
|
||||||
waiting=1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("gNB L1 are configured\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
void wait_RUs(void) {
|
|
||||||
LOG_I(PHY,"Waiting for RUs to be configured ... RC.ru_mask:%02lx\n", RC.ru_mask);
|
|
||||||
// wait for all RUs to be configured over fronthaul
|
|
||||||
pthread_mutex_lock(&RC.ru_mutex);
|
|
||||||
|
|
||||||
while (RC.ru_mask>0) {
|
|
||||||
pthread_cond_wait(&RC.ru_cond,&RC.ru_mutex);
|
|
||||||
printf("RC.ru_mask:%02lx\n", RC.ru_mask);
|
|
||||||
}
|
|
||||||
|
|
||||||
pthread_mutex_unlock(&RC.ru_mutex);
|
|
||||||
LOG_I(PHY,"RUs configured\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int stop_L1L2(module_id_t gnb_id) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int restart_L1L2(module_id_t gnb_id) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int create_gNB_tasks(uint32_t gnb_nb) {
|
|
||||||
LOG_D(GNB_APP, "%s(gnb_nb:%d)\n", __FUNCTION__, gnb_nb);
|
|
||||||
itti_wait_ready(1);
|
|
||||||
|
|
||||||
|
|
||||||
if (gnb_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 (is_x2ap_enabled()) {
|
|
||||||
if(itti_create_task(TASK_X2AP, x2ap_task, NULL) < 0){
|
|
||||||
LOG_E(X2AP, "Create task for X2AP failed\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
LOG_I(X2AP, "X2AP is disabled.\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (AMF_MODE_ENABLED && (get_softmodem_params()->phy_test==0 && get_softmodem_params()->do_ra==0 && get_softmodem_params()->sa==0)) {
|
|
||||||
if (gnb_nb > 0) {
|
|
||||||
if (itti_create_task (TASK_NGAP, ngap_gNB_task, NULL) < 0) {
|
|
||||||
LOG_E(S1AP, "Create task for NGAP 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, &nr_gtpv1u_gNB_task, NULL) < 0) {
|
|
||||||
LOG_E(GTPU, "Create task for GTPV1U failed\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (gnb_nb > 0) {
|
|
||||||
if (itti_create_task (TASK_GNB_APP, gNB_app_task, NULL) < 0) {
|
|
||||||
LOG_E(GNB_APP, "Create task for gNB APP failed\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
LOG_I(NR_RRC,"Creating NR RRC gNB Task\n");
|
|
||||||
|
|
||||||
if (itti_create_task (TASK_RRC_GNB, rrc_gnb_task, NULL) < 0) {
|
|
||||||
LOG_E(NR_RRC, "Create task for NR RRC gNB failed\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void get_options(void) {
|
|
||||||
|
|
||||||
|
|
||||||
paramdef_t cmdline_params[] = CMDLINE_PARAMS_DESC_GNB ;
|
|
||||||
|
|
||||||
CONFIG_SETRTFLAG(CONFIG_NOEXITONHELP);
|
|
||||||
get_common_options(SOFTMODEM_GNB_BIT );
|
|
||||||
config_process_cmdline( cmdline_params,sizeof(cmdline_params)/sizeof(paramdef_t),NULL);
|
|
||||||
CONFIG_CLEARRTFLAG(CONFIG_NOEXITONHELP);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ( !(CONFIG_ISFLAGSET(CONFIG_ABORT)) ) {
|
|
||||||
memset((void *)&RC,0,sizeof(RC));
|
|
||||||
/* Read RC configuration file */
|
|
||||||
NRRCConfig();
|
|
||||||
NB_gNB_INST = RC.nb_nr_inst;
|
|
||||||
NB_RU = RC.nb_RU;
|
|
||||||
printf("Configuration: nb_rrc_inst %d, nb_nr_L1_inst %d, nb_ru %hhu\n",NB_gNB_INST,RC.nb_nr_L1_inst,NB_RU);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void set_default_frame_parms(nfapi_nr_config_request_scf_t *config[MAX_NUM_CCs],
|
|
||||||
NR_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs])
|
|
||||||
{
|
|
||||||
for (int CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
|
||||||
frame_parms[CC_id] = (NR_DL_FRAME_PARMS *) malloc(sizeof(NR_DL_FRAME_PARMS));
|
|
||||||
config[CC_id] = (nfapi_nr_config_request_scf_t *) malloc(sizeof(nfapi_nr_config_request_scf_t));
|
|
||||||
config[CC_id]->ssb_config.scs_common.value = 1;
|
|
||||||
config[CC_id]->cell_config.frame_duplex_type.value = 1; //FDD
|
|
||||||
config[CC_id]->carrier_config.dl_grid_size[1].value = 106;
|
|
||||||
config[CC_id]->carrier_config.ul_grid_size[1].value = 106;
|
|
||||||
config[CC_id]->cell_config.phy_cell_id.value = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* helper function to terminate a certain ITTI task
|
|
||||||
*/
|
|
||||||
void terminate_task(task_id_t task_id, module_id_t mod_id) {
|
|
||||||
LOG_I(GNB_APP, "sending TERMINATE_MESSAGE to task %s (%d)\n", itti_get_task_name(task_id), task_id);
|
|
||||||
MessageDef *msg;
|
|
||||||
msg = itti_alloc_new_message (ENB_APP, 0, TERMINATE_MESSAGE);
|
|
||||||
itti_send_msg_to_task (task_id, ENB_MODULE_ID_TO_INSTANCE(mod_id), msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
//extern void free_transport(PHY_VARS_gNB *);
|
|
||||||
extern void nr_phy_free_RU(RU_t *);
|
|
||||||
|
|
||||||
statis void init_pdcp(void) {
|
|
||||||
//if (!NODE_IS_DU(RC.rrc[0]->node_type)) {
|
|
||||||
pdcp_layer_init();
|
|
||||||
uint32_t pdcp_initmask = (IS_SOFTMODEM_NOS1) ?
|
|
||||||
(PDCP_USE_NETLINK_BIT | LINK_ENB_PDCP_TO_IP_DRIVER_BIT) : LINK_ENB_PDCP_TO_GTPV1U_BIT;
|
|
||||||
|
|
||||||
if (IS_SOFTMODEM_NOS1) {
|
|
||||||
printf("IS_SOFTMODEM_NOS1 option enabled \n");
|
|
||||||
pdcp_initmask = pdcp_initmask | ENB_NAS_USE_TUN_BIT | SOFTMODEM_NOKRNMOD_BIT ;
|
|
||||||
}
|
|
||||||
|
|
||||||
pdcp_module_init(pdcp_initmask, 0);
|
|
||||||
|
|
||||||
pdcp_set_rlc_data_req_func(rlc_data_req);
|
|
||||||
pdcp_set_pdcp_data_ind_func(pdcp_data_ind);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int create_tasks_nrue(uint32_t ue_nb) {
|
|
||||||
LOG_D(ENB_APP, "%s(ue_nb:%d)\n", __FUNCTION__, ue_nb);
|
|
||||||
itti_wait_ready(1);
|
|
||||||
|
|
||||||
if (ue_nb > 0) {
|
|
||||||
LOG_D(NR_RRC, "create TASK_RRC_NRUE\n");
|
|
||||||
if (itti_create_task (TASK_RRC_NRUE, rrc_nrue_task, NULL) < 0) {
|
|
||||||
LOG_E(NR_RRC, "Create task for RRC UE failed\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG_D(NR_RRC,"create TASK_NAS_NRUE\n");
|
|
||||||
if (itti_create_task (TASK_NAS_NRUE, nas_nrue_task, NULL) < 0) {
|
|
||||||
LOG_E(NR_RRC, "Create task for NAS UE failed\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
itti_wait_ready(0);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void *itti_sim_ue_rrc_task( void *args_p) {
|
|
||||||
MessageDef *msg_p, *message_p;
|
|
||||||
instance_t instance;
|
|
||||||
unsigned int ue_mod_id;
|
|
||||||
int result;
|
|
||||||
itti_mark_task_ready (TASK_RRC_UE_SIM);
|
|
||||||
|
|
||||||
while(1) {
|
|
||||||
// Wait for a message
|
|
||||||
itti_receive_msg (TASK_RRC_UE_SIM, &msg_p);
|
|
||||||
instance = ITTI_MSG_DESTINATION_INSTANCE (msg_p);
|
|
||||||
ue_mod_id = UE_INSTANCE_TO_MODULE_ID(instance);
|
|
||||||
|
|
||||||
switch (ITTI_MSG_ID(msg_p)) {
|
|
||||||
case TERMINATE_MESSAGE:
|
|
||||||
LOG_W(NR_RRC, " *** Exiting RRC thread\n");
|
|
||||||
itti_exit_task ();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MESSAGE_TEST:
|
|
||||||
LOG_D(NR_RRC, "[UE %d] Received %s\n", ue_mod_id, ITTI_MSG_NAME (msg_p));
|
|
||||||
break;
|
|
||||||
case GNB_RRC_BCCH_DATA_IND:
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_UE_SIM, 0, NR_RRC_MAC_BCCH_DATA_IND);
|
|
||||||
memset (NR_RRC_MAC_BCCH_DATA_IND (message_p).sdu, 0, BCCH_SDU_SIZE);
|
|
||||||
NR_RRC_MAC_BCCH_DATA_IND (message_p).sdu_size = GNB_RRC_BCCH_DATA_IND(msg_p).size;
|
|
||||||
memcpy (NR_RRC_MAC_BCCH_DATA_IND (message_p).sdu, GNB_RRC_BCCH_DATA_IND(msg_p).sdu, GNB_RRC_BCCH_DATA_IND(msg_p).size);
|
|
||||||
itti_send_msg_to_task (TASK_RRC_NRUE, instance, message_p);
|
|
||||||
break;
|
|
||||||
case GNB_RRC_CCCH_DATA_IND:
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_UE_SIM, 0, NR_RRC_MAC_CCCH_DATA_IND);
|
|
||||||
printf("receive GNB_RRC_CCCH_DATA_IND\n");
|
|
||||||
memset (NR_RRC_MAC_CCCH_DATA_IND (message_p).sdu, 0, CCCH_SDU_SIZE);
|
|
||||||
memcpy (NR_RRC_MAC_CCCH_DATA_IND (message_p).sdu, GNB_RRC_CCCH_DATA_IND(msg_p).sdu, GNB_RRC_CCCH_DATA_IND(msg_p).size);
|
|
||||||
NR_RRC_MAC_CCCH_DATA_IND (message_p).sdu_size = GNB_RRC_CCCH_DATA_IND(msg_p).size;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_NRUE, instance, message_p);
|
|
||||||
break;
|
|
||||||
case GNB_RRC_DCCH_DATA_IND:
|
|
||||||
printf("receive GNB_RRC_DCCH_DATA_IND\n");
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_UE_SIM, 0, NR_RRC_DCCH_DATA_IND);
|
|
||||||
NR_RRC_DCCH_DATA_IND (message_p).dcch_index = GNB_RRC_DCCH_DATA_IND(msg_p).rbid;
|
|
||||||
NR_RRC_DCCH_DATA_IND (message_p).sdu_size = GNB_RRC_DCCH_DATA_IND(msg_p).size;
|
|
||||||
NR_RRC_DCCH_DATA_IND (message_p).sdu_p = GNB_RRC_DCCH_DATA_IND(msg_p).sdu;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_NRUE, instance, message_p);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
LOG_E(NR_RRC, "[UE %d] Received unexpected message %s\n", ue_mod_id, ITTI_MSG_NAME (msg_p));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
result = itti_free (ITTI_MSG_ORIGIN_ID(msg_p), msg_p);
|
|
||||||
AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
|
|
||||||
msg_p = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void *itti_sim_gnb_rrc_task( void *args_p) {
|
|
||||||
MessageDef *msg_p, *message_p;
|
|
||||||
instance_t instance;
|
|
||||||
unsigned int ue_mod_id;
|
|
||||||
int result;
|
|
||||||
itti_mark_task_ready (TASK_RRC_GNB_SIM);
|
|
||||||
|
|
||||||
while(1) {
|
|
||||||
// Wait for a message
|
|
||||||
itti_receive_msg (TASK_RRC_GNB_SIM, &msg_p);
|
|
||||||
instance = ITTI_MSG_DESTINATION_INSTANCE (msg_p);
|
|
||||||
ue_mod_id = UE_INSTANCE_TO_MODULE_ID(instance);
|
|
||||||
|
|
||||||
switch (ITTI_MSG_ID(msg_p)) {
|
|
||||||
case TERMINATE_MESSAGE:
|
|
||||||
LOG_W(NR_RRC, " *** Exiting RRC thread\n");
|
|
||||||
itti_exit_task ();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MESSAGE_TEST:
|
|
||||||
LOG_D(NR_RRC, "[UE %d] Received %s\n", ue_mod_id, ITTI_MSG_NAME (msg_p));
|
|
||||||
break;
|
|
||||||
case UE_RRC_CCCH_DATA_IND:
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_GNB_SIM, 0, NR_RRC_MAC_CCCH_DATA_IND);
|
|
||||||
NR_RRC_MAC_CCCH_DATA_IND (message_p).sdu_size = UE_RRC_CCCH_DATA_IND(msg_p).size;
|
|
||||||
memset (NR_RRC_MAC_CCCH_DATA_IND (message_p).sdu, 0, CCCH_SDU_SIZE);
|
|
||||||
memcpy (NR_RRC_MAC_CCCH_DATA_IND (message_p).sdu, UE_RRC_CCCH_DATA_IND(msg_p).sdu, UE_RRC_CCCH_DATA_IND(msg_p).size);
|
|
||||||
itti_send_msg_to_task (TASK_RRC_GNB, instance, message_p);
|
|
||||||
break;
|
|
||||||
case UE_RRC_DCCH_DATA_IND:
|
|
||||||
message_p = itti_alloc_new_message (TASK_RRC_GNB_SIM, 0, NR_RRC_DCCH_DATA_IND);
|
|
||||||
NR_RRC_DCCH_DATA_IND (message_p).sdu_size = UE_RRC_DCCH_DATA_IND(msg_p).size;
|
|
||||||
NR_RRC_DCCH_DATA_IND (message_p).dcch_index = UE_RRC_DCCH_DATA_IND(msg_p).rbid;
|
|
||||||
NR_RRC_DCCH_DATA_IND (message_p).sdu_p = UE_RRC_DCCH_DATA_IND(msg_p).sdu;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_GNB, instance, message_p);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
LOG_E(NR_RRC, "[UE %d] Received unexpected message %s\n", ue_mod_id, ITTI_MSG_NAME (msg_p));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
result = itti_free (ITTI_MSG_ORIGIN_ID(msg_p), msg_p);
|
|
||||||
AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
|
|
||||||
msg_p = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int main( int argc, char **argv )
|
|
||||||
{
|
|
||||||
start_background_system();
|
|
||||||
|
|
||||||
///static configuration for NR at the moment
|
|
||||||
if ( load_configmodule(argc,argv,CONFIG_ENABLECMDLINEONLY) == NULL) {
|
|
||||||
exit_fun("[SOFTMODEM] Error, configuration module init failed\n");
|
|
||||||
}
|
|
||||||
set_softmodem_sighandler();
|
|
||||||
#ifdef DEBUG_CONSOLE
|
|
||||||
setvbuf(stdout, NULL, _IONBF, 0);
|
|
||||||
setvbuf(stderr, NULL, _IONBF, 0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
logInit();
|
|
||||||
//set_latency_target();
|
|
||||||
printf("Reading in command-line options\n");
|
|
||||||
get_options ();
|
|
||||||
|
|
||||||
if (CONFIG_ISFLAGSET(CONFIG_ABORT) ) {
|
|
||||||
fprintf(stderr,"Getting configuration failed\n");
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
AMF_MODE_ENABLED = !IS_SOFTMODEM_NOS1;
|
|
||||||
// AMF_MODE_ENABLED = 0;
|
|
||||||
NGAP_CONF_MODE = !IS_SOFTMODEM_NOS1; //!get_softmodem_params()->phy_test;
|
|
||||||
|
|
||||||
#if T_TRACER
|
|
||||||
T_Config_Init();
|
|
||||||
#endif
|
|
||||||
//randominit (0);
|
|
||||||
set_taus_seed (0);
|
|
||||||
printf("configuring for RAU/RRU\n");
|
|
||||||
|
|
||||||
if (opp_enabled ==1) {
|
|
||||||
reset_opp_meas();
|
|
||||||
}
|
|
||||||
|
|
||||||
cpuf=get_cpu_freq_GHz();
|
|
||||||
itti_init(TASK_MAX, tasks_info);
|
|
||||||
|
|
||||||
init_opt();
|
|
||||||
|
|
||||||
LOG_I(HW, "Version: %s\n", PACKAGE_VERSION);
|
|
||||||
|
|
||||||
if(IS_SOFTMODEM_NOS1)
|
|
||||||
init_pdcp();
|
|
||||||
|
|
||||||
if (RC.nb_nr_inst > 0) {
|
|
||||||
nr_read_config_and_init();
|
|
||||||
// don't create if node doesn't connect to RRC/S1/GTP
|
|
||||||
AssertFatal(create_gNB_tasks(1) == 0,"cannot create ITTI tasks\n");
|
|
||||||
for (int gnb_id = 0; gnb_id < RC.nb_nr_inst; gnb_id++) {
|
|
||||||
MessageDef *msg_p = itti_alloc_new_message (TASK_GNB_APP, 0, NRRRC_CONFIGURATION_REQ);
|
|
||||||
NRRRC_CONFIGURATION_REQ(msg_p) = RC.nrrrc[gnb_id]->configuration;
|
|
||||||
itti_send_msg_to_task (TASK_RRC_GNB, GNB_MODULE_ID_TO_INSTANCE(gnb_id), msg_p);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
printf("No ITTI, Initializing L1\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(itti_create_task (TASK_RRC_GNB_SIM, itti_sim_gnb_rrc_task, NULL) < 0){
|
|
||||||
printf("cannot create ITTI tasks\n");
|
|
||||||
exit(-1); // need a softer mode
|
|
||||||
}
|
|
||||||
|
|
||||||
openair_rrc_top_init_ue_nr("./");
|
|
||||||
|
|
||||||
if (create_tasks_nrue(1) < 0) {
|
|
||||||
printf("cannot create ITTI tasks\n");
|
|
||||||
exit(-1); // need a softer mode
|
|
||||||
}
|
|
||||||
|
|
||||||
if(itti_create_task (TASK_RRC_UE_SIM, itti_sim_ue_rrc_task, NULL) < 0){
|
|
||||||
printf("cannot create ITTI tasks\n");
|
|
||||||
exit(-1); // need a softer mode
|
|
||||||
}
|
|
||||||
|
|
||||||
pthread_cond_init(&sync_cond,NULL);
|
|
||||||
pthread_mutex_init(&sync_mutex, NULL);
|
|
||||||
|
|
||||||
printf("Sending sync to all threads\n");
|
|
||||||
pthread_mutex_lock(&sync_mutex);
|
|
||||||
sync_var=0;
|
|
||||||
pthread_cond_broadcast(&sync_cond);
|
|
||||||
pthread_mutex_unlock(&sync_mutex);
|
|
||||||
// wait for end of program
|
|
||||||
printf("TYPE <CTRL-C> TO TERMINATE\n");
|
|
||||||
|
|
||||||
usleep(100000);
|
|
||||||
protocol_ctxt_t ctxt;
|
|
||||||
struct rrc_gNB_ue_context_s *ue_context_p = NULL;
|
|
||||||
|
|
||||||
|
|
||||||
ue_context_p = rrc_gNB_allocate_new_UE_context(RC.nrrrc[0]);
|
|
||||||
|
|
||||||
if(ue_context_p == NULL){
|
|
||||||
printf("ue_context_p == NULL");
|
|
||||||
}
|
|
||||||
PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt,
|
|
||||||
0,
|
|
||||||
ENB_FLAG_YES,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0);
|
|
||||||
NR_UE_rrc_inst[ctxt.module_id].Info[0].State = RRC_SI_RECEIVED;
|
|
||||||
|
|
||||||
nr_rrc_ue_generate_RRCSetupRequest(ctxt.module_id, 0);
|
|
||||||
|
|
||||||
printf("Entering ITTI signals handler\n");
|
|
||||||
itti_wait_tasks_end();
|
|
||||||
printf("Returned from ITTI signal handler\n");
|
|
||||||
oai_exit=1;
|
|
||||||
printf("oai_exit=%d\n",oai_exit);
|
|
||||||
|
|
||||||
printf("stopping MODEM threads\n");
|
|
||||||
|
|
||||||
|
|
||||||
/* release memory used by the RU/gNB threads (incomplete), after all
|
|
||||||
* threads have been stopped (they partially use the same memory) */
|
|
||||||
|
|
||||||
pthread_cond_destroy(&sync_cond);
|
|
||||||
pthread_mutex_destroy(&sync_mutex);
|
|
||||||
|
|
||||||
logClean();
|
|
||||||
printf("Bye.\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1369,15 +1369,6 @@ int ngap_gNB_pdusession_release_resp(instance_t instance,
|
|||||||
item->pDUSessionResourceReleaseResponseTransfer.size = 0;
|
item->pDUSessionResourceReleaseResponseTransfer.size = 0;
|
||||||
item->pDUSessionResourceReleaseResponseTransfer.buf = NULL;
|
item->pDUSessionResourceReleaseResponseTransfer.buf = NULL;
|
||||||
NGAP_DEBUG("pdusession_release_resp: transfer_buffer is NULL!\n");
|
NGAP_DEBUG("pdusession_release_resp: transfer_buffer is NULL!\n");
|
||||||
#ifdef ITTI_SIM
|
|
||||||
//For testing only
|
|
||||||
item->pDUSessionResourceReleaseResponseTransfer.buf = malloc(sizeof(uint8_t) * 1);
|
|
||||||
item->pDUSessionResourceReleaseResponseTransfer.size = 1;
|
|
||||||
uint8_t temp = 0;
|
|
||||||
memcpy(item->pDUSessionResourceReleaseResponseTransfer.buf,
|
|
||||||
&temp,
|
|
||||||
item->pDUSessionResourceReleaseResponseTransfer.size);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
NGAP_DEBUG("pdusession_release_resp: pdusession ID %ld\n", item->pDUSessionID);
|
NGAP_DEBUG("pdusession_release_resp: pdusession ID %ld\n", item->pDUSessionID);
|
||||||
ASN_SEQUENCE_ADD(&ie->value.choice.PDUSessionResourceReleasedListRelRes.list, item);
|
ASN_SEQUENCE_ADD(&ie->value.choice.PDUSessionResourceReleasedListRelRes.list, item);
|
||||||
|
|||||||
Reference in New Issue
Block a user