dead-code-f1-removal
This commit is contained in:
@@ -448,7 +448,6 @@ add_library(f1ap
|
||||
${F1AP_DIR}/f1ap_cu_interface_management.c
|
||||
${F1AP_DIR}/f1ap_cu_paging.c
|
||||
${F1AP_DIR}/f1ap_cu_rrc_message_transfer.c
|
||||
${F1AP_DIR}/f1ap_cu_system_information.c
|
||||
${F1AP_DIR}/f1ap_cu_task.c
|
||||
${F1AP_DIR}/f1ap_cu_ue_context_management.c
|
||||
${F1AP_DIR}/f1ap_cu_warning_message_transmission.c
|
||||
|
||||
@@ -1024,7 +1024,6 @@ INPUT = \
|
||||
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_encoder.h \
|
||||
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_task.c \
|
||||
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_system_information.c \
|
||||
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_system_information.c \
|
||||
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_rrc_message_transfer.c \
|
||||
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_interface_management.c \
|
||||
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_handlers.c \
|
||||
|
||||
+16
-17
@@ -32,15 +32,14 @@
|
||||
|
||||
#include "f1ap_common.h"
|
||||
|
||||
static f1ap_cudu_inst_t *f1_du_inst[NUMBER_OF_eNB_MAX]= {0};
|
||||
static f1ap_cudu_inst_t *f1_cu_inst[NUMBER_OF_eNB_MAX]= {0};
|
||||
static f1ap_cudu_inst_t *f1_du_inst[NUMBER_OF_gNB_MAX]= {0};
|
||||
static f1ap_cudu_inst_t *f1_cu_inst[NUMBER_OF_gNB_MAX]= {0};
|
||||
|
||||
uint8_t F1AP_get_next_transaction_identifier(instance_t enb_mod_idP, instance_t cu_mod_idP) {
|
||||
static uint8_t transaction_identifier[NUMBER_OF_eNB_MAX];
|
||||
transaction_identifier[enb_mod_idP+cu_mod_idP] =
|
||||
(transaction_identifier[enb_mod_idP+cu_mod_idP] + 1) % F1AP_TRANSACTION_IDENTIFIER_NUMBER;
|
||||
//LOG_T(F1AP,"generated xid is %d\n",transaction_identifier[enb_mod_idP+cu_mod_idP]);
|
||||
return transaction_identifier[enb_mod_idP+cu_mod_idP];
|
||||
uint8_t F1AP_get_next_transaction_identifier(instance_t mod_idP, instance_t cu_mod_idP) {
|
||||
static uint8_t transaction_identifier[NUMBER_OF_gNB_MAX];
|
||||
transaction_identifier[mod_idP+cu_mod_idP] =
|
||||
(transaction_identifier[mod_idP+cu_mod_idP] + 1) % F1AP_TRANSACTION_IDENTIFIER_NUMBER;
|
||||
return transaction_identifier[mod_idP+cu_mod_idP];
|
||||
}
|
||||
|
||||
f1ap_cudu_inst_t *getCxt(F1_t isCU, instance_t instanceP) {
|
||||
@@ -72,7 +71,7 @@ int f1ap_add_ue(F1_t isCu,
|
||||
rnti_t rntiP) {
|
||||
f1ap_cudu_inst_t *f1_inst=getCxt(isCu, instanceP);
|
||||
|
||||
for (int i = 0; i < MAX_MOBILES_PER_ENB; i++) {
|
||||
for (int i = 0; i < MAX_MOBILES_PER_GNB; i++) {
|
||||
if (f1_inst->f1ap_ue[i].rnti == rntiP) {
|
||||
f1_inst->f1ap_ue[i].f1ap_uid = i;
|
||||
LOG_I(F1AP, "Updating the index of UE with RNTI %x and du_ue_f1ap_id %ld\n", f1_inst->f1ap_ue[i].rnti, f1_inst->f1ap_ue[i].du_ue_f1ap_id);
|
||||
@@ -81,7 +80,7 @@ int f1ap_add_ue(F1_t isCu,
|
||||
}
|
||||
|
||||
// We didn't find the rnti
|
||||
for (int i = 0; i < MAX_MOBILES_PER_ENB; i++) {
|
||||
for (int i = 0; i < MAX_MOBILES_PER_GNB; i++) {
|
||||
if (f1_inst->f1ap_ue[i].rnti == 0 ) {
|
||||
f1_inst->f1ap_ue[i].rnti = rntiP;
|
||||
f1_inst->f1ap_ue[i].f1ap_uid = i;
|
||||
@@ -101,7 +100,7 @@ int f1ap_remove_ue(F1_t isCu, instance_t instanceP,
|
||||
rnti_t rntiP) {
|
||||
f1ap_cudu_inst_t *f1_inst=getCxt(isCu, instanceP);
|
||||
|
||||
for (int i = 0; i < MAX_MOBILES_PER_ENB; i++) {
|
||||
for (int i = 0; i < MAX_MOBILES_PER_GNB; i++) {
|
||||
if (f1_inst->f1ap_ue[i].rnti == rntiP) {
|
||||
f1_inst->f1ap_ue[i].rnti = 0;
|
||||
break;
|
||||
@@ -116,7 +115,7 @@ int f1ap_get_du_ue_f1ap_id(F1_t isCu, instance_t instanceP,
|
||||
rnti_t rntiP) {
|
||||
f1ap_cudu_inst_t *f1_inst=getCxt(isCu, instanceP);
|
||||
|
||||
for (int i = 0; i < MAX_MOBILES_PER_ENB; i++) {
|
||||
for (int i = 0; i < MAX_MOBILES_PER_GNB; i++) {
|
||||
if (f1_inst->f1ap_ue[i].rnti == rntiP) {
|
||||
return f1_inst->f1ap_ue[i].du_ue_f1ap_id;
|
||||
}
|
||||
@@ -129,7 +128,7 @@ int f1ap_get_cu_ue_f1ap_id(F1_t isCu, instance_t instanceP,
|
||||
rnti_t rntiP) {
|
||||
f1ap_cudu_inst_t *f1_inst=getCxt(isCu, instanceP);
|
||||
|
||||
for (int i = 0; i < MAX_MOBILES_PER_ENB; i++) {
|
||||
for (int i = 0; i < MAX_MOBILES_PER_GNB; i++) {
|
||||
if (f1_inst->f1ap_ue[i].rnti == rntiP) {
|
||||
return f1_inst->f1ap_ue[i].cu_ue_f1ap_id;
|
||||
}
|
||||
@@ -142,7 +141,7 @@ int f1ap_get_rnti_by_du_id(F1_t isCu, instance_t instanceP,
|
||||
instance_t du_ue_f1ap_id ) {
|
||||
f1ap_cudu_inst_t *f1_inst=getCxt(isCu, instanceP);
|
||||
|
||||
for (int i = 0; i < MAX_MOBILES_PER_ENB; i++) {
|
||||
for (int i = 0; i < MAX_MOBILES_PER_GNB; i++) {
|
||||
if (f1_inst->f1ap_ue[i].du_ue_f1ap_id == du_ue_f1ap_id) {
|
||||
return f1_inst->f1ap_ue[i].rnti;
|
||||
}
|
||||
@@ -155,7 +154,7 @@ int f1ap_get_rnti_by_cu_id(F1_t isCu, instance_t instanceP,
|
||||
instance_t cu_ue_f1ap_id ) {
|
||||
f1ap_cudu_inst_t *f1_inst=getCxt(isCu, instanceP);
|
||||
|
||||
for (int i = 0; i < MAX_MOBILES_PER_ENB; i++) {
|
||||
for (int i = 0; i < MAX_MOBILES_PER_GNB; i++) {
|
||||
if (f1_inst->f1ap_ue[i].cu_ue_f1ap_id == cu_ue_f1ap_id) {
|
||||
return f1_inst->f1ap_ue[i].rnti;
|
||||
}
|
||||
@@ -170,14 +169,14 @@ int f1ap_du_add_cu_ue_id(instance_t instanceP,
|
||||
f1ap_cudu_inst_t *f1_inst=getCxt(DUtype, instanceP);
|
||||
instance_t f1ap_uid=-1;
|
||||
|
||||
for (int i = 0; i < MAX_MOBILES_PER_ENB; i++) {
|
||||
for (int i = 0; i < MAX_MOBILES_PER_GNB; i++) {
|
||||
if (f1_inst->f1ap_ue[i].du_ue_f1ap_id == du_ue_f1ap_id) {
|
||||
f1ap_uid=i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (f1ap_uid < 0 || f1ap_uid >= MAX_MOBILES_PER_ENB)
|
||||
if (f1ap_uid < 0 || f1ap_uid >= MAX_MOBILES_PER_GNB)
|
||||
return -1;
|
||||
|
||||
f1_inst->f1ap_ue[f1ap_uid].cu_ue_f1ap_id = cu_ue_f1ap_id;
|
||||
|
||||
@@ -404,7 +404,7 @@ int f1ap_handle_message(instance_t instance, uint32_t assoc_id, int32_t stream,
|
||||
const uint8_t *const data, const uint32_t data_length);
|
||||
|
||||
typedef struct f1ap_cudu_ue_inst_s {
|
||||
// used for eNB stats generation
|
||||
// used for NB stats generation
|
||||
rnti_t rnti;
|
||||
instance_t f1ap_uid;
|
||||
instance_t du_ue_f1ap_id;
|
||||
@@ -419,7 +419,7 @@ typedef struct f1ap_cudu_inst_s {
|
||||
instance_t gtpInst;
|
||||
uint64_t gNB_DU_id;
|
||||
uint16_t num_ues;
|
||||
f1ap_cudu_ue_t f1ap_ue[MAX_MOBILES_PER_ENB];
|
||||
f1ap_cudu_ue_t f1ap_ue[MAX_MOBILES_PER_GNB];
|
||||
} f1ap_cudu_inst_t;
|
||||
|
||||
typedef enum {
|
||||
@@ -429,7 +429,7 @@ typedef enum {
|
||||
|
||||
static const int nrb_lut[29] = {11, 18, 24, 25, 31, 32, 38, 51, 52, 65, 66, 78, 79, 93, 106, 107, 121, 132, 133, 135, 160, 162, 189, 216, 217, 245, 264, 270, 273};
|
||||
|
||||
uint8_t F1AP_get_next_transaction_identifier(instance_t enb_mod_idP, instance_t cu_mod_idP);
|
||||
uint8_t F1AP_get_next_transaction_identifier(instance_t mod_idP, instance_t cu_mod_idP);
|
||||
|
||||
f1ap_cudu_inst_t *getCxt(F1_t isCU, instance_t instanceP);
|
||||
|
||||
@@ -465,8 +465,6 @@ static inline f1ap_setup_req_t *f1ap_req(F1_t isCu, instance_t instanceP) {
|
||||
return &getCxt(isCu, instanceP)->setupReq;
|
||||
}
|
||||
|
||||
#define TASK_F1APP f1ap_req(false, instance)->cell_type==CELL_MACRO_GNB?TASK_GNB_APP:TASK_ENB_APP
|
||||
|
||||
//lts: C struct type is not homogeneous, so we need macros instead of functions
|
||||
#define addnRCGI(nRCGi, servedCelL) \
|
||||
MCC_MNC_TO_PLMNID((servedCelL)->mcc,(servedCelL)-> mnc,(servedCelL)->mnc_digit_length, \
|
||||
|
||||
@@ -257,11 +257,7 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
|
||||
memcpy(&F1AP_SETUP_REQ(message_p), req, sizeof(f1ap_setup_req_t) );
|
||||
|
||||
if (req->num_cells_available > 0) {
|
||||
if (f1ap_req(true, instance)->cell_type == CELL_MACRO_GNB) {
|
||||
itti_send_msg_to_task(TASK_RRC_GNB, GNB_MODULE_ID_TO_INSTANCE(instance), message_p);
|
||||
} else {
|
||||
itti_send_msg_to_task(TASK_RRC_ENB, ENB_MODULE_ID_TO_INSTANCE(instance), message_p);
|
||||
}
|
||||
} else {
|
||||
CU_send_F1_SETUP_FAILURE(instance);
|
||||
itti_free(TASK_CU_F1,message_p);
|
||||
|
||||
@@ -1,31 +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 f1ap_du_interface_management.h
|
||||
* \brief f1ap interface management for DU
|
||||
* \author EURECOM/NTUST
|
||||
* \date 2018
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr, bing-kai.hong@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
@@ -1,31 +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 f1ap_du_interface_management.h
|
||||
* \brief f1ap interface management for DU
|
||||
* \author EURECOM/NTUST
|
||||
* \date 2018
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr, bing-kai.hong@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
@@ -92,8 +92,8 @@ static void cu_task_handle_sctp_data_ind(instance_t instance, sctp_data_ind_t *s
|
||||
}
|
||||
|
||||
static void cu_task_send_sctp_init_req(instance_t instance, char *my_addr) {
|
||||
// 1. get the itti msg, and retrive the enb_id from the message
|
||||
// 2. use RC.rrc[enb_id] to fill the sctp_init_t with the ip, port
|
||||
// 1. get the itti msg, and retrive the nb_id from the message
|
||||
// 2. use RC.rrc[nb_id] to fill the sctp_init_t with the ip, port
|
||||
// 3. creat an itti message to init
|
||||
LOG_I(F1AP, "F1AP_CU_SCTP_REQ(create socket)\n");
|
||||
MessageDef *message_p = NULL;
|
||||
|
||||
@@ -38,9 +38,6 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "rrc_extern.h"
|
||||
#include "rrc_eNB_UE_context.h"
|
||||
#include "rrc_eNB_S1AP.h"
|
||||
#include "rrc_eNB_GTPV1U.h"
|
||||
#include "openair2/RRC/NR/rrc_gNB_NGAP.h"
|
||||
#include <openair3/ocp-gtpu/gtp_itf.h>
|
||||
|
||||
@@ -826,16 +823,7 @@ int CU_handle_UE_CONTEXT_RELEASE_REQUEST(instance_t instance,
|
||||
|
||||
if (f1ap_req(true, instance)->cell_type==CELL_MACRO_GNB) {
|
||||
AssertFatal(false,"must be devlopped\n");
|
||||
} else {
|
||||
struct rrc_eNB_ue_context_s *ue_context_pP;
|
||||
ue_context_pP = rrc_eNB_get_ue_context(RC.rrc[instance], rnti);
|
||||
rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ(
|
||||
instance,
|
||||
ue_context_pP,
|
||||
S1AP_CAUSE_RADIO_NETWORK,
|
||||
21); // send cause 21: connection with ue lost
|
||||
}
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -956,7 +944,7 @@ int CU_handle_UE_CONTEXT_RELEASE_COMPLETE(instance_t instance,
|
||||
}
|
||||
|
||||
protocol_ctxt_t ctxt;
|
||||
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, instance, ENB_FLAG_YES, rnti, 0, 0, instance);
|
||||
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, instance, GNB_FLAG_YES, rnti, 0, 0, instance);
|
||||
|
||||
struct rrc_gNB_ue_context_s *ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[instance], rnti);
|
||||
|
||||
|
||||
@@ -33,13 +33,6 @@
|
||||
#ifndef F1AP_DEFAULT_VALUES_H_
|
||||
#define F1AP_DEFAULT_VALUES_H_
|
||||
|
||||
#define ENB_TAC (1)
|
||||
#define ENB_MCC (208)
|
||||
#define ENB_MNC (92)
|
||||
|
||||
#define ENB_NAME "Eurecom ENB"
|
||||
#define ENB_NAME_FORMAT (ENB_NAME" %u")
|
||||
|
||||
#define F1AP_PORT_NUMBER (38472)
|
||||
#define F1AP_SCTP_PPID (62)
|
||||
|
||||
|
||||
@@ -95,7 +95,7 @@ int DU_handle_ERROR_INDICATION(instance_t instance,
|
||||
|
||||
// SETUP REQUEST
|
||||
int DU_send_F1_SETUP_REQUEST(instance_t instance) {
|
||||
instance_t enb_mod_idP=0;
|
||||
instance_t nb_mod_idP=0;
|
||||
instance_t du_mod_idP=0;
|
||||
F1AP_F1AP_PDU_t pdu= {0};
|
||||
uint8_t *buffer;
|
||||
@@ -114,7 +114,7 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance) {
|
||||
ieC1->id = F1AP_ProtocolIE_ID_id_TransactionID;
|
||||
ieC1->criticality = F1AP_Criticality_reject;
|
||||
ieC1->value.present = F1AP_F1SetupRequestIEs__value_PR_TransactionID;
|
||||
ieC1->value.choice.TransactionID = F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);
|
||||
ieC1->value.choice.TransactionID = F1AP_get_next_transaction_identifier(nb_mod_idP, du_mod_idP);
|
||||
/* mandatory */
|
||||
/* c2. GNB_DU_ID (integer value) */
|
||||
asn1cSequenceAdd(f1Setup->protocolIEs.list, F1AP_F1SetupRequestIEs_t, ieC2);
|
||||
@@ -515,7 +515,7 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance,
|
||||
AssertFatal(F1AP_SETUP_RESP (msg_p).cells_to_activate[i].num_SI > 0, "System Information %d is missing",i);
|
||||
|
||||
LOG_D(F1AP, "Sending F1AP_SETUP_RESP ITTI message\n");
|
||||
itti_send_msg_to_task(TASK_F1APP, GNB_MODULE_ID_TO_INSTANCE(assoc_id), msg_p);
|
||||
itti_send_msg_to_task(TASK_GNB_APP, GNB_MODULE_ID_TO_INSTANCE(assoc_id), msg_p);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -936,7 +936,7 @@ int DU_handle_gNB_CU_CONFIGURATION_UPDATE(instance_t instance,
|
||||
LOG_D(F1AP,"F1AP: num_cells_to_activate %d\n",num_cells_to_activate);
|
||||
F1AP_GNB_CU_CONFIGURATION_UPDATE (msg_p).num_cells_to_activate = num_cells_to_activate;
|
||||
LOG_D(F1AP, "Sending F1AP_GNB_CU_CONFIGURATION_UPDATE ITTI message \n");
|
||||
itti_send_msg_to_task(TASK_F1APP, GNB_MODULE_ID_TO_INSTANCE(assoc_id), msg_p);
|
||||
itti_send_msg_to_task(TASK_GNB_APP, GNB_MODULE_ID_TO_INSTANCE(assoc_id), msg_p);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -37,11 +37,6 @@
|
||||
|
||||
#include "f1ap_du_rrc_message_transfer.h"
|
||||
|
||||
|
||||
#include "LTE_DL-CCCH-Message.h"
|
||||
#include "LTE_DL-DCCH-Message.h"
|
||||
#include "LTE_UL-DCCH-Message.h"
|
||||
|
||||
#include "NR_DL-CCCH-Message.h"
|
||||
#include "NR_UL-CCCH-Message.h"
|
||||
#include "NR_DL-DCCH-Message.h"
|
||||
@@ -50,7 +45,6 @@
|
||||
#include "rrc_extern.h"
|
||||
#include "common/ran_context.h"
|
||||
|
||||
#include "rrc_eNB_UE_context.h"
|
||||
#include "openair2/RRC/NR/rrc_gNB_UE_context.h"
|
||||
#include "asn1_msg.h"
|
||||
#include "intertask_interface.h"
|
||||
@@ -161,178 +155,6 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int DU_send_UL_RRC_MESSAGE_TRANSFER(instance_t instance,
|
||||
const f1ap_ul_rrc_message_t *msg) {
|
||||
const rnti_t rnti = msg->rnti;
|
||||
F1AP_F1AP_PDU_t pdu;
|
||||
F1AP_ULRRCMessageTransfer_t *out;
|
||||
F1AP_ULRRCMessageTransferIEs_t *ie;
|
||||
uint8_t *buffer = NULL;
|
||||
uint32_t len;
|
||||
LOG_I(F1AP, "[DU %ld] %s: size %d UE RNTI %x in SRB %d\n",
|
||||
instance, __func__, msg->rrc_container_length, rnti, msg->srb_id);
|
||||
//LOG_I(F1AP, "%s() RRCContainer size %d: ", __func__, msg->rrc_container_length);
|
||||
//for (int i = 0;i < msg->rrc_container_length; i++)
|
||||
// printf("%02x ", msg->rrc_container[i]);
|
||||
//printf("\n");
|
||||
/* Create */
|
||||
/* 0. Message Type */
|
||||
memset(&pdu, 0, sizeof(pdu));
|
||||
pdu.present = F1AP_F1AP_PDU_PR_initiatingMessage;
|
||||
pdu.choice.initiatingMessage = (F1AP_InitiatingMessage_t *)calloc(1, sizeof(F1AP_InitiatingMessage_t));
|
||||
pdu.choice.initiatingMessage->procedureCode = F1AP_ProcedureCode_id_ULRRCMessageTransfer;
|
||||
pdu.choice.initiatingMessage->criticality = F1AP_Criticality_ignore;
|
||||
pdu.choice.initiatingMessage->value.present = F1AP_InitiatingMessage__value_PR_ULRRCMessageTransfer;
|
||||
out = &pdu.choice.initiatingMessage->value.choice.ULRRCMessageTransfer;
|
||||
/* mandatory */
|
||||
/* c1. GNB_CU_UE_F1AP_ID */
|
||||
ie = (F1AP_ULRRCMessageTransferIEs_t *)calloc(1, sizeof(F1AP_ULRRCMessageTransferIEs_t));
|
||||
ie->id = F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID;
|
||||
ie->criticality = F1AP_Criticality_reject;
|
||||
ie->value.present = F1AP_ULRRCMessageTransferIEs__value_PR_GNB_CU_UE_F1AP_ID;
|
||||
ie->value.choice.GNB_CU_UE_F1AP_ID = f1ap_get_cu_ue_f1ap_id(DUtype, instance, rnti);
|
||||
asn1cSeqAdd(&out->protocolIEs.list, ie);
|
||||
/* mandatory */
|
||||
/* c2. GNB_DU_UE_F1AP_ID */
|
||||
ie = (F1AP_ULRRCMessageTransferIEs_t *)calloc(1, sizeof(F1AP_ULRRCMessageTransferIEs_t));
|
||||
ie->id = F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID;
|
||||
ie->criticality = F1AP_Criticality_reject;
|
||||
ie->value.present = F1AP_ULRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID;
|
||||
ie->value.choice.GNB_DU_UE_F1AP_ID = f1ap_get_du_ue_f1ap_id(DUtype, instance, rnti);
|
||||
asn1cSeqAdd(&out->protocolIEs.list, ie);
|
||||
/* mandatory */
|
||||
/* c3. SRBID */
|
||||
ie = (F1AP_ULRRCMessageTransferIEs_t *)calloc(1, sizeof(F1AP_ULRRCMessageTransferIEs_t));
|
||||
ie->id = F1AP_ProtocolIE_ID_id_SRBID;
|
||||
ie->criticality = F1AP_Criticality_reject;
|
||||
ie->value.present = F1AP_ULRRCMessageTransferIEs__value_PR_SRBID;
|
||||
ie->value.choice.SRBID = msg->srb_id;
|
||||
asn1cSeqAdd(&out->protocolIEs.list, ie);
|
||||
// issue in here
|
||||
/* mandatory */
|
||||
/* c4. RRCContainer */
|
||||
ie = (F1AP_ULRRCMessageTransferIEs_t *)calloc(1, sizeof(F1AP_ULRRCMessageTransferIEs_t));
|
||||
ie->id = F1AP_ProtocolIE_ID_id_RRCContainer;
|
||||
ie->criticality = F1AP_Criticality_reject;
|
||||
ie->value.present = F1AP_ULRRCMessageTransferIEs__value_PR_RRCContainer;
|
||||
OCTET_STRING_fromBuf(&ie->value.choice.RRCContainer,
|
||||
(const char *) msg->rrc_container,
|
||||
msg->rrc_container_length);
|
||||
asn1cSeqAdd(&out->protocolIEs.list, ie);
|
||||
|
||||
if (msg->srb_id == 1 || msg->srb_id == 2) {
|
||||
struct rrc_eNB_ue_context_s *ue_context_p = rrc_eNB_get_ue_context(RC.rrc[instance], rnti);
|
||||
LTE_UL_DCCH_Message_t *ul_dcch_msg=NULL;
|
||||
asn_dec_rval_t dec_rval;
|
||||
dec_rval = uper_decode(NULL,
|
||||
&asn_DEF_LTE_UL_DCCH_Message,
|
||||
(void **)&ul_dcch_msg,
|
||||
&ie->value.choice.RRCContainer.buf[1], // buf[0] includes the pdcp header
|
||||
msg->rrc_container_length, 0, 0);
|
||||
|
||||
if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0))
|
||||
LOG_E(F1AP, " Failed to decode UL-DCCH (%zu bytes)\n",dec_rval.consumed);
|
||||
else
|
||||
LOG_I(F1AP, "Received message: present %d and c1 present %d\n",
|
||||
ul_dcch_msg->message.present, ul_dcch_msg->message.choice.c1.present);
|
||||
|
||||
if (ul_dcch_msg->message.present == LTE_UL_DCCH_MessageType_PR_c1) {
|
||||
switch (ul_dcch_msg->message.choice.c1.present) {
|
||||
case LTE_UL_DCCH_MessageType__c1_PR_NOTHING: /* No components present */
|
||||
break;
|
||||
|
||||
case LTE_UL_DCCH_MessageType__c1_PR_csfbParametersRequestCDMA2000:
|
||||
break;
|
||||
|
||||
case LTE_UL_DCCH_MessageType__c1_PR_measurementReport:
|
||||
break;
|
||||
|
||||
case LTE_UL_DCCH_MessageType__c1_PR_rrcConnectionReconfigurationComplete:
|
||||
LOG_I(F1AP, "[MSG] RRC UL rrcConnectionReconfigurationComplete\n");
|
||||
/* CDRX: activated when RRC Connection Reconfiguration Complete is received */
|
||||
int UE_id_mac = find_UE_id(instance, rnti);
|
||||
|
||||
if (UE_id_mac == -1) {
|
||||
LOG_E(F1AP, "Can't find UE_id(MAC) of UE rnti %x\n", rnti);
|
||||
break;
|
||||
}
|
||||
|
||||
UE_sched_ctrl_t *UE_scheduling_control = &(RC.mac[instance]->UE_info.UE_sched_ctrl[UE_id_mac]);
|
||||
|
||||
if (UE_scheduling_control->cdrx_waiting_ack == true) {
|
||||
UE_scheduling_control->cdrx_waiting_ack = false;
|
||||
UE_scheduling_control->cdrx_configured = true; // Set to TRUE when RRC Connection Reconfiguration Complete is received
|
||||
LOG_I(F1AP, "CDRX configuration activated after RRC Connection Reconfiguration Complete reception\n");
|
||||
}
|
||||
|
||||
/* End of CDRX processing */
|
||||
break;
|
||||
|
||||
case LTE_UL_DCCH_MessageType__c1_PR_rrcConnectionReestablishmentComplete:
|
||||
break;
|
||||
|
||||
case LTE_UL_DCCH_MessageType__c1_PR_rrcConnectionSetupComplete:
|
||||
LOG_I(F1AP, "[MSG] RRC UL rrcConnectionSetupComplete \n");
|
||||
|
||||
if(!ue_context_p) {
|
||||
LOG_E(F1AP, "Did not find the UE context associated with UE RNTOI %x, ue_context_p is NULL\n", rnti);
|
||||
} else {
|
||||
LOG_I(F1AP, "Processing RRCConnectionSetupComplete UE %x\n", rnti);
|
||||
ue_context_p->ue_context.StatusRrc = RRC_CONNECTED;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case LTE_UL_DCCH_MessageType__c1_PR_securityModeComplete:
|
||||
LOG_I(F1AP, "[MSG] RRC securityModeComplete \n");
|
||||
break;
|
||||
|
||||
case LTE_UL_DCCH_MessageType__c1_PR_securityModeFailure:
|
||||
break;
|
||||
|
||||
case LTE_UL_DCCH_MessageType__c1_PR_ueCapabilityInformation:
|
||||
LOG_I(F1AP, "[MSG] RRC ueCapabilityInformation \n");
|
||||
break;
|
||||
|
||||
case LTE_UL_DCCH_MessageType__c1_PR_ulHandoverPreparationTransfer:
|
||||
break;
|
||||
|
||||
case LTE_UL_DCCH_MessageType__c1_PR_ulInformationTransfer:
|
||||
LOG_I(F1AP,"[MSG] RRC UL Information Transfer \n");
|
||||
break;
|
||||
|
||||
case LTE_UL_DCCH_MessageType__c1_PR_counterCheckResponse:
|
||||
break;
|
||||
|
||||
case LTE_UL_DCCH_MessageType__c1_PR_ueInformationResponse_r9:
|
||||
break;
|
||||
|
||||
case LTE_UL_DCCH_MessageType__c1_PR_proximityIndication_r9:
|
||||
break;
|
||||
|
||||
case LTE_UL_DCCH_MessageType__c1_PR_rnReconfigurationComplete_r10:
|
||||
break;
|
||||
|
||||
case LTE_UL_DCCH_MessageType__c1_PR_mbmsCountingResponse_r10:
|
||||
break;
|
||||
|
||||
case LTE_UL_DCCH_MessageType__c1_PR_interFreqRSTDMeasurementIndication_r10:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* encode */
|
||||
if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) {
|
||||
LOG_E(F1AP, "Failed to encode F1 UL RRC MESSAGE TRANSFER\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
ASN_STRUCT_RESET(asn_DEF_F1AP_F1AP_PDU, &pdu);
|
||||
f1ap_itti_send_sctp_data_req(false, instance, buffer, len, getCxt(DUtype, instance)->default_sctp_stream_id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* UL RRC Message Transfer */
|
||||
int DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t instanceP,
|
||||
int CC_idP,
|
||||
|
||||
@@ -41,7 +41,6 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
|
||||
uint32_t stream,
|
||||
F1AP_F1AP_PDU_t *pdu);
|
||||
|
||||
int DU_send_UL_RRC_MESSAGE_TRANSFER(instance_t instance, const f1ap_ul_rrc_message_t *msg);
|
||||
int DU_send_UL_NR_RRC_MESSAGE_TRANSFER(instance_t instance, const f1ap_ul_rrc_message_t *msg);
|
||||
|
||||
int DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t instanceP,
|
||||
|
||||
@@ -99,7 +99,6 @@ void du_task_handle_sctp_data_ind(instance_t instance, sctp_data_ind_t *sctp_dat
|
||||
void *F1AP_DU_task(void *arg) {
|
||||
//sctp_cu_init();
|
||||
LOG_I(F1AP, "Starting F1AP at DU\n");
|
||||
//f1ap_eNB_prepare_internal_data();
|
||||
itti_mark_task_ready(TASK_DU_F1);
|
||||
|
||||
// SCTP
|
||||
@@ -111,7 +110,7 @@ void *F1AP_DU_task(void *arg) {
|
||||
ITTI_MSG_NAME(msg),myInstance);
|
||||
switch (ITTI_MSG_ID(msg)) {
|
||||
case F1AP_SETUP_REQ: {
|
||||
// this is not a true F1 message, but rather an ITTI message sent by enb_app
|
||||
// this is not a true F1 message, but rather an ITTI message sent by gnb_app
|
||||
// 1. save the itti msg so that you can use it to sen f1ap_setup_req, fill the f1ap_setup_req message,
|
||||
// 2. store the message in f1ap context, that is also stored in RC
|
||||
// 2. send a sctp_association req
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
#include "f1ap_du_ue_context_management.h"
|
||||
|
||||
#include "rrc_extern.h"
|
||||
#include "rrc_eNB_UE_context.h"
|
||||
#include "openair2/RRC/NR/rrc_gNB_UE_context.h"
|
||||
#include "openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h"
|
||||
#include <openair3/ocp-gtpu/gtp_itf.h>
|
||||
|
||||
@@ -25,7 +25,4 @@
|
||||
void f1ap_itti_send_sctp_data_req(bool isCu,instance_t instance, uint8_t *buffer,
|
||||
uint32_t buffer_length, uint16_t stream);
|
||||
|
||||
void f1ap_eNB_itti_send_sctp_close_association(bool isCu,instance_t instance);
|
||||
|
||||
|
||||
#endif /* F1AP_ITTI_MESSAGING_H_ */
|
||||
|
||||
@@ -1,44 +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 f1ap_messaging.h
|
||||
* \brief f1ap procedures
|
||||
* \author EURECOM/NTUST
|
||||
* \date 2018
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr, bing-kai.hong@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
|
||||
#ifndef F1AP_MESSAGING_H_
|
||||
#define F1AP_MESSAGING_H_
|
||||
|
||||
void f1ap_send_sctp_data_req(instance_t instance, int32_t assoc_id, uint8_t *buffer,
|
||||
uint32_t buffer_length, uint16_t stream);
|
||||
|
||||
void f1ap_send_sctp_close_association(instance_t instance,
|
||||
int32_t assoc_id);
|
||||
|
||||
|
||||
#endif /* F1AP_MESSAGING_H_ */
|
||||
Reference in New Issue
Block a user