Commit 8263ac09 authored by Robert Schmidt's avatar Robert Schmidt

Merge remote-tracking branch 'origin/dead-code-f1-removal' into integration_2023_w10b

parents 14364709 61f49be3
...@@ -447,7 +447,6 @@ add_library(f1ap ...@@ -447,7 +447,6 @@ add_library(f1ap
${F1AP_DIR}/f1ap_cu_interface_management.c ${F1AP_DIR}/f1ap_cu_interface_management.c
${F1AP_DIR}/f1ap_cu_paging.c ${F1AP_DIR}/f1ap_cu_paging.c
${F1AP_DIR}/f1ap_cu_rrc_message_transfer.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_task.c
${F1AP_DIR}/f1ap_cu_ue_context_management.c ${F1AP_DIR}/f1ap_cu_ue_context_management.c
${F1AP_DIR}/f1ap_cu_warning_message_transmission.c ${F1AP_DIR}/f1ap_cu_warning_message_transmission.c
......
...@@ -1024,7 +1024,6 @@ INPUT = \ ...@@ -1024,7 +1024,6 @@ INPUT = \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_encoder.h \ @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_task.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_system_information.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_rrc_message_transfer.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_interface_management.c \ @CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_interface_management.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_handlers.c \ @CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_handlers.c \
......
...@@ -32,15 +32,14 @@ ...@@ -32,15 +32,14 @@
#include "f1ap_common.h" #include "f1ap_common.h"
static f1ap_cudu_inst_t *f1_du_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_eNB_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) { uint8_t F1AP_get_next_transaction_identifier(instance_t mod_idP, instance_t cu_mod_idP) {
static uint8_t transaction_identifier[NUMBER_OF_eNB_MAX]; static uint8_t transaction_identifier[NUMBER_OF_gNB_MAX];
transaction_identifier[enb_mod_idP+cu_mod_idP] = transaction_identifier[mod_idP+cu_mod_idP] =
(transaction_identifier[enb_mod_idP+cu_mod_idP] + 1) % F1AP_TRANSACTION_IDENTIFIER_NUMBER; (transaction_identifier[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[mod_idP+cu_mod_idP];
return transaction_identifier[enb_mod_idP+cu_mod_idP];
} }
f1ap_cudu_inst_t *getCxt(F1_t isCU, instance_t instanceP) { f1ap_cudu_inst_t *getCxt(F1_t isCU, instance_t instanceP) {
...@@ -72,7 +71,7 @@ int f1ap_add_ue(F1_t isCu, ...@@ -72,7 +71,7 @@ int f1ap_add_ue(F1_t isCu,
rnti_t rntiP) { rnti_t rntiP) {
f1ap_cudu_inst_t *f1_inst=getCxt(isCu, instanceP); 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) { if (f1_inst->f1ap_ue[i].rnti == rntiP) {
f1_inst->f1ap_ue[i].f1ap_uid = i; 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); 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, ...@@ -81,7 +80,7 @@ int f1ap_add_ue(F1_t isCu,
} }
// We didn't find the rnti // 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 ) { if (f1_inst->f1ap_ue[i].rnti == 0 ) {
f1_inst->f1ap_ue[i].rnti = rntiP; f1_inst->f1ap_ue[i].rnti = rntiP;
f1_inst->f1ap_ue[i].f1ap_uid = i; f1_inst->f1ap_ue[i].f1ap_uid = i;
...@@ -101,7 +100,7 @@ int f1ap_remove_ue(F1_t isCu, instance_t instanceP, ...@@ -101,7 +100,7 @@ int f1ap_remove_ue(F1_t isCu, instance_t instanceP,
rnti_t rntiP) { rnti_t rntiP) {
f1ap_cudu_inst_t *f1_inst=getCxt(isCu, instanceP); 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) { if (f1_inst->f1ap_ue[i].rnti == rntiP) {
f1_inst->f1ap_ue[i].rnti = 0; f1_inst->f1ap_ue[i].rnti = 0;
break; break;
...@@ -116,7 +115,7 @@ int f1ap_get_du_ue_f1ap_id(F1_t isCu, instance_t instanceP, ...@@ -116,7 +115,7 @@ int f1ap_get_du_ue_f1ap_id(F1_t isCu, instance_t instanceP,
rnti_t rntiP) { rnti_t rntiP) {
f1ap_cudu_inst_t *f1_inst=getCxt(isCu, instanceP); 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) { if (f1_inst->f1ap_ue[i].rnti == rntiP) {
return f1_inst->f1ap_ue[i].du_ue_f1ap_id; 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, ...@@ -129,7 +128,7 @@ int f1ap_get_cu_ue_f1ap_id(F1_t isCu, instance_t instanceP,
rnti_t rntiP) { rnti_t rntiP) {
f1ap_cudu_inst_t *f1_inst=getCxt(isCu, instanceP); 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) { if (f1_inst->f1ap_ue[i].rnti == rntiP) {
return f1_inst->f1ap_ue[i].cu_ue_f1ap_id; 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, ...@@ -142,7 +141,7 @@ int f1ap_get_rnti_by_du_id(F1_t isCu, instance_t instanceP,
instance_t du_ue_f1ap_id ) { instance_t du_ue_f1ap_id ) {
f1ap_cudu_inst_t *f1_inst=getCxt(isCu, instanceP); 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) { if (f1_inst->f1ap_ue[i].du_ue_f1ap_id == du_ue_f1ap_id) {
return f1_inst->f1ap_ue[i].rnti; return f1_inst->f1ap_ue[i].rnti;
} }
...@@ -155,7 +154,7 @@ int f1ap_get_rnti_by_cu_id(F1_t isCu, instance_t instanceP, ...@@ -155,7 +154,7 @@ int f1ap_get_rnti_by_cu_id(F1_t isCu, instance_t instanceP,
instance_t cu_ue_f1ap_id ) { instance_t cu_ue_f1ap_id ) {
f1ap_cudu_inst_t *f1_inst=getCxt(isCu, instanceP); 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) { if (f1_inst->f1ap_ue[i].cu_ue_f1ap_id == cu_ue_f1ap_id) {
return f1_inst->f1ap_ue[i].rnti; return f1_inst->f1ap_ue[i].rnti;
} }
...@@ -170,14 +169,14 @@ int f1ap_du_add_cu_ue_id(instance_t instanceP, ...@@ -170,14 +169,14 @@ int f1ap_du_add_cu_ue_id(instance_t instanceP,
f1ap_cudu_inst_t *f1_inst=getCxt(DUtype, instanceP); f1ap_cudu_inst_t *f1_inst=getCxt(DUtype, instanceP);
instance_t f1ap_uid=-1; 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) { if (f1_inst->f1ap_ue[i].du_ue_f1ap_id == du_ue_f1ap_id) {
f1ap_uid=i; f1ap_uid=i;
break; break;
} }
} }
if (f1ap_uid < 0 || f1ap_uid >= MAX_MOBILES_PER_ENB) if (f1ap_uid < 0 || f1ap_uid >= MAX_MOBILES_PER_GNB)
return -1; return -1;
f1_inst->f1ap_ue[f1ap_uid].cu_ue_f1ap_id = cu_ue_f1ap_id; 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, ...@@ -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); const uint8_t *const data, const uint32_t data_length);
typedef struct f1ap_cudu_ue_inst_s { typedef struct f1ap_cudu_ue_inst_s {
// used for eNB stats generation // used for NB stats generation
rnti_t rnti; rnti_t rnti;
instance_t f1ap_uid; instance_t f1ap_uid;
instance_t du_ue_f1ap_id; instance_t du_ue_f1ap_id;
...@@ -419,7 +419,7 @@ typedef struct f1ap_cudu_inst_s { ...@@ -419,7 +419,7 @@ typedef struct f1ap_cudu_inst_s {
instance_t gtpInst; instance_t gtpInst;
uint64_t gNB_DU_id; uint64_t gNB_DU_id;
uint16_t num_ues; 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; } f1ap_cudu_inst_t;
typedef enum { typedef enum {
...@@ -429,7 +429,7 @@ 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}; 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); 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) { ...@@ -465,8 +465,6 @@ static inline f1ap_setup_req_t *f1ap_req(F1_t isCu, instance_t instanceP) {
return &getCxt(isCu, instanceP)->setupReq; 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 //lts: C struct type is not homogeneous, so we need macros instead of functions
#define addnRCGI(nRCGi, servedCelL) \ #define addnRCGI(nRCGi, servedCelL) \
MCC_MNC_TO_PLMNID((servedCelL)->mcc,(servedCelL)-> mnc,(servedCelL)->mnc_digit_length, \ 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, ...@@ -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) ); memcpy(&F1AP_SETUP_REQ(message_p), req, sizeof(f1ap_setup_req_t) );
if (req->num_cells_available > 0) { 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); 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 { } else {
CU_send_F1_SETUP_FAILURE(instance); CU_send_F1_SETUP_FAILURE(instance);
itti_free(TASK_CU_F1,message_p); itti_free(TASK_CU_F1,message_p);
......
/*
* 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
*/
/*
* 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
*/
\ No newline at end of file
...@@ -92,8 +92,8 @@ static void cu_task_handle_sctp_data_ind(instance_t instance, sctp_data_ind_t *s ...@@ -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) { 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 // 1. get the itti msg, and retrive the nb_id from the message
// 2. use RC.rrc[enb_id] to fill the sctp_init_t with the ip, port // 2. use RC.rrc[nb_id] to fill the sctp_init_t with the ip, port
// 3. creat an itti message to init // 3. creat an itti message to init
LOG_I(F1AP, "F1AP_CU_SCTP_REQ(create socket)\n"); LOG_I(F1AP, "F1AP_CU_SCTP_REQ(create socket)\n");
MessageDef *message_p = NULL; MessageDef *message_p = NULL;
......
...@@ -38,9 +38,6 @@ ...@@ -38,9 +38,6 @@
#include <string.h> #include <string.h>
#include "rrc_extern.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 "openair2/RRC/NR/rrc_gNB_NGAP.h"
#include <openair3/ocp-gtpu/gtp_itf.h> #include <openair3/ocp-gtpu/gtp_itf.h>
#include "pdcp.h" #include "pdcp.h"
...@@ -827,16 +824,7 @@ int CU_handle_UE_CONTEXT_RELEASE_REQUEST(instance_t instance, ...@@ -827,16 +824,7 @@ int CU_handle_UE_CONTEXT_RELEASE_REQUEST(instance_t instance,
if (f1ap_req(true, instance)->cell_type==CELL_MACRO_GNB) { if (f1ap_req(true, instance)->cell_type==CELL_MACRO_GNB) {
AssertFatal(false,"must be devlopped\n"); 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; return 0;
} }
...@@ -957,7 +945,7 @@ int CU_handle_UE_CONTEXT_RELEASE_COMPLETE(instance_t instance, ...@@ -957,7 +945,7 @@ int CU_handle_UE_CONTEXT_RELEASE_COMPLETE(instance_t instance,
} }
protocol_ctxt_t ctxt; 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); struct rrc_gNB_ue_context_s *ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[instance], rnti);
......
...@@ -33,13 +33,6 @@ ...@@ -33,13 +33,6 @@
#ifndef F1AP_DEFAULT_VALUES_H_ #ifndef F1AP_DEFAULT_VALUES_H_
#define 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_PORT_NUMBER (38472)
#define F1AP_SCTP_PPID (62) #define F1AP_SCTP_PPID (62)
......
...@@ -95,7 +95,7 @@ int DU_handle_ERROR_INDICATION(instance_t instance, ...@@ -95,7 +95,7 @@ int DU_handle_ERROR_INDICATION(instance_t instance,
// SETUP REQUEST // SETUP REQUEST
int DU_send_F1_SETUP_REQUEST(instance_t instance) { 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; instance_t du_mod_idP=0;
F1AP_F1AP_PDU_t pdu= {0}; F1AP_F1AP_PDU_t pdu= {0};
uint8_t *buffer; uint8_t *buffer;
...@@ -114,7 +114,7 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance) { ...@@ -114,7 +114,7 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance) {
ieC1->id = F1AP_ProtocolIE_ID_id_TransactionID; ieC1->id = F1AP_ProtocolIE_ID_id_TransactionID;
ieC1->criticality = F1AP_Criticality_reject; ieC1->criticality = F1AP_Criticality_reject;
ieC1->value.present = F1AP_F1SetupRequestIEs__value_PR_TransactionID; 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 */ /* mandatory */
/* c2. GNB_DU_ID (integer value) */ /* c2. GNB_DU_ID (integer value) */
asn1cSequenceAdd(f1Setup->protocolIEs.list, F1AP_F1SetupRequestIEs_t, ieC2); asn1cSequenceAdd(f1Setup->protocolIEs.list, F1AP_F1SetupRequestIEs_t, ieC2);
...@@ -515,7 +515,7 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance, ...@@ -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); 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"); 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; return 0;
} }
...@@ -936,7 +936,7 @@ int DU_handle_gNB_CU_CONFIGURATION_UPDATE(instance_t instance, ...@@ -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); 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; 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"); 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; return 0;
} }
......
...@@ -37,11 +37,6 @@ ...@@ -37,11 +37,6 @@
#include "f1ap_du_rrc_message_transfer.h" #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_DL-CCCH-Message.h"
#include "NR_UL-CCCH-Message.h" #include "NR_UL-CCCH-Message.h"
#include "NR_DL-DCCH-Message.h" #include "NR_DL-DCCH-Message.h"
...@@ -50,7 +45,6 @@ ...@@ -50,7 +45,6 @@
#include "rrc_extern.h" #include "rrc_extern.h"
#include "common/ran_context.h" #include "common/ran_context.h"
#include "rrc_eNB_UE_context.h"
#include "openair2/RRC/NR/rrc_gNB_UE_context.h" #include "openair2/RRC/NR/rrc_gNB_UE_context.h"
#include "asn1_msg.h" #include "asn1_msg.h"
#include "intertask_interface.h" #include "intertask_interface.h"
...@@ -161,174 +155,6 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance, ...@@ -161,174 +155,6 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
return 0; 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_D(F1AP, "[DU %ld] %s: size %d UE RNTI %x in SRB %d\n",
instance, __func__, msg->rrc_container_length, rnti, msg->srb_id);
//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);
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_D(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_D(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_D(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_D(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_D(F1AP, "[MSG] RRC securityModeComplete \n");
break;
case LTE_UL_DCCH_MessageType__c1_PR_securityModeFailure:
break;
case LTE_UL_DCCH_MessageType__c1_PR_ueCapabilityInformation:
LOG_D(F1AP, "[MSG] RRC ueCapabilityInformation \n");
break;
case LTE_UL_DCCH_MessageType__c1_PR_ulHandoverPreparationTransfer:
break;
case LTE_UL_DCCH_MessageType__c1_PR_ulInformationTransfer:
LOG_D(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 */ /* UL RRC Message Transfer */
int DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t instanceP, int DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t instanceP,
int CC_idP, int CC_idP,
......
...@@ -41,7 +41,6 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance, ...@@ -41,7 +41,6 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
uint32_t stream, uint32_t stream,
F1AP_F1AP_PDU_t *pdu); 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_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, 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 ...@@ -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) { void *F1AP_DU_task(void *arg) {
//sctp_cu_init(); //sctp_cu_init();
LOG_I(F1AP, "Starting F1AP at DU\n"); LOG_I(F1AP, "Starting F1AP at DU\n");
//f1ap_eNB_prepare_internal_data();
itti_mark_task_ready(TASK_DU_F1); itti_mark_task_ready(TASK_DU_F1);
// SCTP // SCTP
...@@ -111,7 +110,7 @@ void *F1AP_DU_task(void *arg) { ...@@ -111,7 +110,7 @@ void *F1AP_DU_task(void *arg) {
ITTI_MSG_NAME(msg),myInstance); ITTI_MSG_NAME(msg),myInstance);
switch (ITTI_MSG_ID(msg)) { switch (ITTI_MSG_ID(msg)) {
case F1AP_SETUP_REQ: { 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, // 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. store the message in f1ap context, that is also stored in RC
// 2. send a sctp_association req // 2. send a sctp_association req
......
...@@ -37,7 +37,6 @@ ...@@ -37,7 +37,6 @@
#include "f1ap_du_ue_context_management.h" #include "f1ap_du_ue_context_management.h"
#include "rrc_extern.h" #include "rrc_extern.h"
#include "rrc_eNB_UE_context.h"
#include "openair2/RRC/NR/rrc_gNB_UE_context.h" #include "openair2/RRC/NR/rrc_gNB_UE_context.h"
#include "openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h" #include "openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h"
#include <openair3/ocp-gtpu/gtp_itf.h> #include <openair3/ocp-gtpu/gtp_itf.h>
......
...@@ -25,7 +25,4 @@ ...@@ -25,7 +25,4 @@
void f1ap_itti_send_sctp_data_req(bool isCu,instance_t instance, uint8_t *buffer, void f1ap_itti_send_sctp_data_req(bool isCu,instance_t instance, uint8_t *buffer,
uint32_t buffer_length, uint16_t stream); 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_ */ #endif /* F1AP_ITTI_MESSAGING_H_ */
/*
* 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_ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment