Add MAC-RRC UL stubs for F1AP and direct
This commit is contained in:
@@ -1953,6 +1953,8 @@ set (MAC_NR_SRC
|
|||||||
${NR_GNB_MAC_DIR}/gNB_scheduler_srs.c
|
${NR_GNB_MAC_DIR}/gNB_scheduler_srs.c
|
||||||
${NR_GNB_MAC_DIR}/gNB_scheduler_RA.c
|
${NR_GNB_MAC_DIR}/gNB_scheduler_RA.c
|
||||||
${NR_GNB_MAC_DIR}/mac_rrc_dl_handler.c
|
${NR_GNB_MAC_DIR}/mac_rrc_dl_handler.c
|
||||||
|
${NR_GNB_MAC_DIR}/mac_rrc_ul_direct.c
|
||||||
|
${NR_GNB_MAC_DIR}/mac_rrc_ul_f1ap.c
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -759,7 +759,7 @@ int main(int argc, char **argv)
|
|||||||
RC.nb_nr_mac_CC = (int*)malloc(RC.nb_nr_macrlc_inst*sizeof(int));
|
RC.nb_nr_mac_CC = (int*)malloc(RC.nb_nr_macrlc_inst*sizeof(int));
|
||||||
for (i = 0; i < RC.nb_nr_macrlc_inst; i++)
|
for (i = 0; i < RC.nb_nr_macrlc_inst; i++)
|
||||||
RC.nb_nr_mac_CC[i] = 1;
|
RC.nb_nr_mac_CC[i] = 1;
|
||||||
mac_top_init_gNB();
|
mac_top_init_gNB(ngran_gNB);
|
||||||
gNB_mac = RC.nrmac[0];
|
gNB_mac = RC.nrmac[0];
|
||||||
gNB_RRC_INST rrc;
|
gNB_RRC_INST rrc;
|
||||||
memset((void*)&rrc,0,sizeof(rrc));
|
memset((void*)&rrc,0,sizeof(rrc));
|
||||||
|
|||||||
@@ -770,7 +770,7 @@ int main(int argc, char **argv)
|
|||||||
RC.nb_nr_mac_CC = (int*)malloc(RC.nb_nr_macrlc_inst*sizeof(int));
|
RC.nb_nr_mac_CC = (int*)malloc(RC.nb_nr_macrlc_inst*sizeof(int));
|
||||||
for (i = 0; i < RC.nb_nr_macrlc_inst; i++)
|
for (i = 0; i < RC.nb_nr_macrlc_inst; i++)
|
||||||
RC.nb_nr_mac_CC[i] = 1;
|
RC.nb_nr_mac_CC[i] = 1;
|
||||||
mac_top_init_gNB();
|
mac_top_init_gNB(ngran_gNB);
|
||||||
//gNB_MAC_INST* gNB_mac = RC.nrmac[0];
|
//gNB_MAC_INST* gNB_mac = RC.nrmac[0];
|
||||||
gNB_RRC_INST rrc;
|
gNB_RRC_INST rrc;
|
||||||
memset((void*)&rrc,0,sizeof(rrc));
|
memset((void*)&rrc,0,sizeof(rrc));
|
||||||
|
|||||||
@@ -85,7 +85,8 @@
|
|||||||
|
|
||||||
extern uint16_t sf_ahead;
|
extern uint16_t sf_ahead;
|
||||||
int macrlc_has_f1 = 0;
|
int macrlc_has_f1 = 0;
|
||||||
extern ngran_node_t node_type;
|
|
||||||
|
static ngran_node_t get_node_type(void);
|
||||||
|
|
||||||
extern int config_check_band_frequencies(int ind, int16_t band, uint64_t downlink_frequency,
|
extern int config_check_band_frequencies(int ind, int16_t band, uint64_t downlink_frequency,
|
||||||
int32_t uplink_frequency_offset, uint32_t frame_type);
|
int32_t uplink_frequency_offset, uint32_t frame_type);
|
||||||
@@ -795,6 +796,7 @@ void RCconfig_nr_macrlc() {
|
|||||||
paramdef_t GNBParams[] = GNBPARAMS_DESC;
|
paramdef_t GNBParams[] = GNBPARAMS_DESC;
|
||||||
|
|
||||||
paramlist_def_t GNBParamList = {GNB_CONFIG_STRING_GNB_LIST,NULL,0};
|
paramlist_def_t GNBParamList = {GNB_CONFIG_STRING_GNB_LIST,NULL,0};
|
||||||
|
ngran_node_t node_type = get_node_type();
|
||||||
|
|
||||||
config_get( GNBSParams,sizeof(GNBSParams)/sizeof(paramdef_t),NULL);
|
config_get( GNBSParams,sizeof(GNBSParams)/sizeof(paramdef_t),NULL);
|
||||||
int num_gnbs = GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt;
|
int num_gnbs = GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt;
|
||||||
@@ -825,7 +827,7 @@ void RCconfig_nr_macrlc() {
|
|||||||
if ( MacRLC_ParamList.numelt > 0) {
|
if ( MacRLC_ParamList.numelt > 0) {
|
||||||
|
|
||||||
RC.nb_nr_macrlc_inst=MacRLC_ParamList.numelt;
|
RC.nb_nr_macrlc_inst=MacRLC_ParamList.numelt;
|
||||||
mac_top_init_gNB();
|
mac_top_init_gNB(node_type);
|
||||||
RC.nb_nr_mac_CC = (int*)malloc(RC.nb_nr_macrlc_inst*sizeof(int));
|
RC.nb_nr_mac_CC = (int*)malloc(RC.nb_nr_macrlc_inst*sizeof(int));
|
||||||
|
|
||||||
for (j=0;j<RC.nb_nr_macrlc_inst;j++) {
|
for (j=0;j<RC.nb_nr_macrlc_inst;j++) {
|
||||||
@@ -2259,8 +2261,8 @@ int gNB_app_handle_f1ap_gnb_cu_configuration_update(f1ap_gnb_cu_configuration_up
|
|||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_node_type(void) {
|
static ngran_node_t get_node_type(void)
|
||||||
int j;
|
{
|
||||||
paramdef_t MacRLC_Params[] = MACRLCPARAMS_DESC;
|
paramdef_t MacRLC_Params[] = MACRLCPARAMS_DESC;
|
||||||
paramlist_def_t MacRLC_ParamList = {CONFIG_STRING_MACRLC_LIST,NULL,0};
|
paramlist_def_t MacRLC_ParamList = {CONFIG_STRING_MACRLC_LIST,NULL,0};
|
||||||
paramdef_t GNBParams[] = GNBPARAMS_DESC;
|
paramdef_t GNBParams[] = GNBPARAMS_DESC;
|
||||||
@@ -2271,24 +2273,19 @@ void set_node_type(void) {
|
|||||||
|
|
||||||
if ( MacRLC_ParamList.numelt > 0) {
|
if ( MacRLC_ParamList.numelt > 0) {
|
||||||
RC.nb_nr_macrlc_inst = MacRLC_ParamList.numelt;
|
RC.nb_nr_macrlc_inst = MacRLC_ParamList.numelt;
|
||||||
for (j=0;j<RC.nb_nr_macrlc_inst;j++) {
|
for (int j = 0; j < RC.nb_nr_macrlc_inst; j++) {
|
||||||
if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "f1") == 0) {
|
if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "f1") == 0) {
|
||||||
macrlc_has_f1 = 1;
|
macrlc_has_f1 = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(*(GNBParamList.paramarray[0][GNB_TRANSPORT_S_PREFERENCE_IDX].strptr), "f1") == 0) {
|
if (strcmp(*(GNBParamList.paramarray[0][GNB_TRANSPORT_S_PREFERENCE_IDX].strptr), "f1") == 0)
|
||||||
node_type = ngran_gNB_CU;
|
return ngran_gNB_CU;
|
||||||
} else {
|
else if (macrlc_has_f1 == 0)
|
||||||
if (macrlc_has_f1 == 0) {
|
return ngran_gNB;
|
||||||
node_type = ngran_gNB;
|
else
|
||||||
LOG_I(NR_RRC,"Setting node_type to ngran_gNB\n");
|
return ngran_gNB_DU;
|
||||||
} else {
|
|
||||||
node_type = ngran_gNB_DU;
|
|
||||||
LOG_I(NR_RRC,"Setting node_type to ngran_gNB_DU\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void nr_read_config_and_init(void) {
|
void nr_read_config_and_init(void) {
|
||||||
@@ -2297,7 +2294,6 @@ void nr_read_config_and_init(void) {
|
|||||||
uint32_t gnb_nb = RC.nb_nr_inst;
|
uint32_t gnb_nb = RC.nb_nr_inst;
|
||||||
|
|
||||||
RCconfig_NR_L1();
|
RCconfig_NR_L1();
|
||||||
set_node_type();
|
|
||||||
RCconfig_nr_macrlc();
|
RCconfig_nr_macrlc();
|
||||||
|
|
||||||
LOG_I(PHY, "%s() RC.nb_nr_L1_inst:%d\n", __FUNCTION__, RC.nb_nr_L1_inst);
|
LOG_I(PHY, "%s() RC.nb_nr_L1_inst:%d\n", __FUNCTION__, RC.nb_nr_L1_inst);
|
||||||
|
|||||||
@@ -51,7 +51,6 @@
|
|||||||
|
|
||||||
extern RAN_CONTEXT_t RC;
|
extern RAN_CONTEXT_t RC;
|
||||||
//extern int l2_init_gNB(void);
|
//extern int l2_init_gNB(void);
|
||||||
extern void mac_top_init_gNB(void);
|
|
||||||
extern uint8_t nfapi_mode;
|
extern uint8_t nfapi_mode;
|
||||||
|
|
||||||
void process_rlcBearerConfig(struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list,
|
void process_rlcBearerConfig(struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list,
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
void set_cset_offset(uint16_t);
|
void set_cset_offset(uint16_t);
|
||||||
|
|
||||||
void mac_top_init_gNB(void);
|
void mac_top_init_gNB(ngran_node_t node_type);
|
||||||
|
|
||||||
void config_common(int Mod_idP,
|
void config_common(int Mod_idP,
|
||||||
int pdsch_AntennaPorts,
|
int pdsch_AntennaPorts,
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* 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:
|
||||||
|
* conmnc_digit_lengtht@openairinterface.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MAC_RRC_UL_H
|
||||||
|
#define MAC_RRC_UL_H
|
||||||
|
|
||||||
|
#include "platform_types.h"
|
||||||
|
#include "f1ap_messages_types.h"
|
||||||
|
|
||||||
|
typedef void (*initial_ul_rrc_message_transfer_func_t)(module_id_t module_id, const f1ap_initial_ul_rrc_message_t *ul_rrc);
|
||||||
|
|
||||||
|
struct nr_mac_rrc_ul_if_s;
|
||||||
|
void mac_rrc_ul_direct_init(struct nr_mac_rrc_ul_if_s *mac_rrc);
|
||||||
|
void mac_rrc_ul_f1ap_init(struct nr_mac_rrc_ul_if_s *mac_rrc);
|
||||||
|
|
||||||
|
#endif /* MAC_RRC_UL_H */
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* 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:
|
||||||
|
* conmnc_digit_lengtht@openairinterface.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "nr_mac_gNB.h"
|
||||||
|
|
||||||
|
#include "mac_rrc_ul.h"
|
||||||
|
|
||||||
|
static void initial_ul_rrc_message_transfer_direct(module_id_t module_id, const f1ap_initial_ul_rrc_message_t *ul_rrc)
|
||||||
|
{
|
||||||
|
/* TODO ITTI message for NR_RRC_MAC_IND? */
|
||||||
|
AssertFatal(0 == 1, "not implemented\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void mac_rrc_ul_direct_init(struct nr_mac_rrc_ul_if_s *mac_rrc)
|
||||||
|
{
|
||||||
|
mac_rrc->initial_ul_rrc_message_transfer = initial_ul_rrc_message_transfer_direct;
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* 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:
|
||||||
|
* conmnc_digit_lengtht@openairinterface.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "nr_mac_gNB.h"
|
||||||
|
|
||||||
|
#include "mac_rrc_ul.h"
|
||||||
|
|
||||||
|
static void initial_ul_rrc_message_transfer_f1ap(module_id_t module_id, const f1ap_initial_ul_rrc_message_t *ul_rrc)
|
||||||
|
{
|
||||||
|
AssertFatal(0 == 1, "not implemented\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void mac_rrc_ul_f1ap_init(struct nr_mac_rrc_ul_if_s *mac_rrc)
|
||||||
|
{
|
||||||
|
mac_rrc->initial_ul_rrc_message_transfer = initial_ul_rrc_message_transfer_f1ap;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -173,8 +173,25 @@ size_t dump_mac_stats(gNB_MAC_INST *gNB, char *output, size_t strlen, bool reset
|
|||||||
return output - begin;
|
return output - begin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void mac_rrc_init(gNB_MAC_INST *mac, ngran_node_t node_type)
|
||||||
|
{
|
||||||
|
switch (node_type) {
|
||||||
|
case ngran_gNB_CU:
|
||||||
|
AssertFatal(1 == 0, "nothing to do for CU\n");
|
||||||
|
break;
|
||||||
|
case ngran_gNB_DU:
|
||||||
|
mac_rrc_ul_f1ap_init(&mac->mac_rrc);
|
||||||
|
break;
|
||||||
|
case ngran_gNB:
|
||||||
|
mac_rrc_ul_direct_init(&mac->mac_rrc);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
AssertFatal(0 == 1, "Unknown node type %d\n", node_type);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void mac_top_init_gNB(void)
|
void mac_top_init_gNB(ngran_node_t node_type)
|
||||||
{
|
{
|
||||||
module_id_t i;
|
module_id_t i;
|
||||||
gNB_MAC_INST *nrmac;
|
gNB_MAC_INST *nrmac;
|
||||||
@@ -221,6 +238,8 @@ void mac_top_init_gNB(void)
|
|||||||
}
|
}
|
||||||
if (!IS_SOFTMODEM_NOSTATS_BIT)
|
if (!IS_SOFTMODEM_NOSTATS_BIT)
|
||||||
pthread_create(&RC.nrmac[i]->stats_thread, NULL, nrmac_stats_thread, (void*)RC.nrmac[i]);
|
pthread_create(&RC.nrmac[i]->stats_thread, NULL, nrmac_stats_thread, (void*)RC.nrmac[i]);
|
||||||
|
|
||||||
|
mac_rrc_init(RC.nrmac[i], node_type);
|
||||||
}//END for (i = 0; i < RC.nb_nr_macrlc_inst; i++)
|
}//END for (i = 0; i < RC.nb_nr_macrlc_inst; i++)
|
||||||
|
|
||||||
AssertFatal(rlc_module_init(1) == 0,"Could not initialize RLC layer\n");
|
AssertFatal(rlc_module_init(1) == 0,"Could not initialize RLC layer\n");
|
||||||
|
|||||||
@@ -60,6 +60,7 @@
|
|||||||
/* Interface */
|
/* Interface */
|
||||||
#include "nfapi_nr_interface_scf.h"
|
#include "nfapi_nr_interface_scf.h"
|
||||||
#include "NR_PHY_INTERFACE/NR_IF_Module.h"
|
#include "NR_PHY_INTERFACE/NR_IF_Module.h"
|
||||||
|
#include "mac_rrc_ul.h"
|
||||||
|
|
||||||
/* MAC */
|
/* MAC */
|
||||||
#include "LAYER2/MAC/mac.h"
|
#include "LAYER2/MAC/mac.h"
|
||||||
@@ -685,6 +686,11 @@ typedef struct NR_bler_options {
|
|||||||
uint8_t harq_round_max;
|
uint8_t harq_round_max;
|
||||||
} NR_bler_options_t;
|
} NR_bler_options_t;
|
||||||
|
|
||||||
|
typedef struct nr_mac_rrc_ul_if_s {
|
||||||
|
/* TODO add other message types as necessary */
|
||||||
|
initial_ul_rrc_message_transfer_func_t initial_ul_rrc_message_transfer;
|
||||||
|
} nr_mac_rrc_ul_if_t;
|
||||||
|
|
||||||
/*! \brief UE list used by gNB to order UEs/CC for scheduling*/
|
/*! \brief UE list used by gNB to order UEs/CC for scheduling*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
rnti_t rnti;
|
rnti_t rnti;
|
||||||
@@ -838,6 +844,8 @@ typedef struct gNB_MAC_INST_s {
|
|||||||
NR_bler_options_t ul_bler;
|
NR_bler_options_t ul_bler;
|
||||||
uint8_t min_grant_prb;
|
uint8_t min_grant_prb;
|
||||||
uint8_t min_grant_mcs;
|
uint8_t min_grant_mcs;
|
||||||
|
|
||||||
|
nr_mac_rrc_ul_if_t mac_rrc;
|
||||||
} gNB_MAC_INST;
|
} gNB_MAC_INST;
|
||||||
|
|
||||||
#endif /*__LAYER2_NR_MAC_GNB_H__ */
|
#endif /*__LAYER2_NR_MAC_GNB_H__ */
|
||||||
|
|||||||
Reference in New Issue
Block a user