Merge remote-tracking branch 'origin/fix_do_ra_data' into integration_2020_wk51
This commit is contained in:
+3
-5
@@ -416,12 +416,10 @@ void processSlotRX( PHY_VARS_NR_UE *UE, UE_nr_rxtx_proc_t *proc) {
|
|||||||
//printf(">>> nr_ue_pdcch_procedures ended\n");
|
//printf(">>> nr_ue_pdcch_procedures ended\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(IS_SOFTMODEM_NOS1){ //&& proc->nr_slot_rx==1
|
if(IS_SOFTMODEM_NOS1){
|
||||||
//Hardcoded rnti value
|
NR_UE_MAC_INST_t *mac = get_mac_inst(0);
|
||||||
protocol_ctxt_t ctxt;
|
protocol_ctxt_t ctxt;
|
||||||
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, UE->Mod_id, ENB_FLAG_NO,
|
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, UE->Mod_id, ENB_FLAG_NO, mac->crnti, proc->frame_rx, proc->nr_slot_rx, 0);
|
||||||
0x1234, proc->frame_rx,
|
|
||||||
proc->nr_slot_rx, 0);
|
|
||||||
pdcp_run(&ctxt);
|
pdcp_run(&ctxt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue,
|
|||||||
start_meas(&ue->phy_proc_tx);
|
start_meas(&ue->phy_proc_tx);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (ue->UE_mode[gNB_id] <= PUSCH || get_softmodem_params()->phy_test == 1){
|
if (ue->UE_mode[gNB_id] <= PUSCH){
|
||||||
|
|
||||||
if (ue->ulsch[proc->thread_id][gNB_id][0]->harq_processes[harq_pid]->status == ACTIVE)
|
if (ue->ulsch[proc->thread_id][gNB_id][0]->harq_processes[harq_pid]->status == ACTIVE)
|
||||||
nr_ue_ulsch_procedures(ue, harq_pid, frame_tx, slot_tx, proc->thread_id, gNB_id);
|
nr_ue_ulsch_procedures(ue, harq_pid, frame_tx, slot_tx, proc->thread_id, gNB_id);
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
*
|
*
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
|
#include "executables/softmodem-common.h"
|
||||||
#include "PHY/NR_REFSIG/ss_pbch_nr.h"
|
#include "PHY/NR_REFSIG/ss_pbch_nr.h"
|
||||||
#include "PHY/defs_nr_UE.h"
|
#include "PHY/defs_nr_UE.h"
|
||||||
#include <openair1/SCHED/sched_common.h>
|
#include <openair1/SCHED/sched_common.h>
|
||||||
@@ -228,13 +229,11 @@ bool pucch_procedures_ue_nr(PHY_VARS_NR_UE *ue, uint8_t gNB_id, UE_nr_rxtx_proc_
|
|||||||
int pucch_resource_indicator = MAX_PUCCH_RESOURCE_INDICATOR;
|
int pucch_resource_indicator = MAX_PUCCH_RESOURCE_INDICATOR;
|
||||||
int n_HARQ_ACK;
|
int n_HARQ_ACK;
|
||||||
|
|
||||||
uint16_t crnti=0x1234;
|
|
||||||
int dmrs_scrambling_id=0,data_scrambling_id=0;
|
int dmrs_scrambling_id=0,data_scrambling_id=0;
|
||||||
|
|
||||||
|
|
||||||
NR_UE_MAC_INST_t *mac = get_mac_inst(0);
|
NR_UE_MAC_INST_t *mac = get_mac_inst(0);
|
||||||
NR_PUCCH_Resource_t *pucch_resource;
|
NR_PUCCH_Resource_t *pucch_resource;
|
||||||
//NR_UE_MAC_INST_t *mac = get_mac_inst(0);
|
uint16_t crnti = mac->crnti;
|
||||||
|
|
||||||
/* update current context */
|
/* update current context */
|
||||||
|
|
||||||
|
|||||||
@@ -54,11 +54,9 @@ NR_UE_MAC_INST_t * nr_l2_init_ue(NR_UE_RRC_INST_t* rrc_inst)
|
|||||||
nr_rrc_mac_config_req_ue(0,0,0,NULL,rrc_inst->cell_group_config);
|
nr_rrc_mac_config_req_ue(0,0,0,NULL,rrc_inst->cell_group_config);
|
||||||
|
|
||||||
if (IS_SOFTMODEM_NOS1){
|
if (IS_SOFTMODEM_NOS1){
|
||||||
if (rlc_module_init(0) != 0) {
|
AssertFatal(rlc_module_init(0) == 0, "%s: Could not initialize RLC layer\n", __FUNCTION__);
|
||||||
LOG_I(RLC, "Problem at RLC initiation \n");
|
|
||||||
}
|
|
||||||
pdcp_layer_init();
|
pdcp_layer_init();
|
||||||
nr_DRB_preconfiguration();
|
nr_DRB_preconfiguration(nr_ue_mac_inst->crnti);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Allocate memory for ul_config_request in the mac instance. This is now a pointer and will
|
// Allocate memory for ul_config_request in the mac instance. This is now a pointer and will
|
||||||
|
|||||||
@@ -287,7 +287,7 @@ void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl
|
|||||||
if (ss->searchSpaceType->choice.ue_Specific){
|
if (ss->searchSpaceType->choice.ue_Specific){
|
||||||
if(ss->searchSpaceType->choice.ue_Specific->dci_Formats == NR_SearchSpace__searchSpaceType__ue_Specific__dci_Formats_formats0_1_And_1_1){
|
if(ss->searchSpaceType->choice.ue_Specific->dci_Formats == NR_SearchSpace__searchSpaceType__ue_Specific__dci_Formats_formats0_1_And_1_1){
|
||||||
// Monitors DCI 01 and 11 scrambled with C-RNTI, or CS-RNTI(s), or SP-CSI-RNTI
|
// Monitors DCI 01 and 11 scrambled with C-RNTI, or CS-RNTI(s), or SP-CSI-RNTI
|
||||||
if (get_softmodem_params()->phy_test == 1 && mac->crnti > 0) {
|
if ((mac->ra_state == RA_SUCCEEDED || get_softmodem_params()->phy_test) && mac->crnti > 0) {
|
||||||
LOG_D(MAC, "[DCI_CONFIG] Configure monitoring of PDCCH candidates in the user specific search space\n");
|
LOG_D(MAC, "[DCI_CONFIG] Configure monitoring of PDCCH candidates in the user specific search space\n");
|
||||||
rel15->num_dci_options = 2;
|
rel15->num_dci_options = 2;
|
||||||
rel15->dci_format_options[0] = NR_DL_DCI_FORMAT_1_1;
|
rel15->dci_format_options[0] = NR_DL_DCI_FORMAT_1_1;
|
||||||
|
|||||||
@@ -1501,8 +1501,10 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
|
|||||||
}
|
}
|
||||||
} else if (ul_info) {
|
} else if (ul_info) {
|
||||||
|
|
||||||
// ULSCH is handled only in phy-test mode (consistently with OAI gNB)
|
module_id_t mod_id = ul_info->module_id;
|
||||||
if (get_softmodem_params()->phy_test) {
|
NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
|
||||||
|
|
||||||
|
if (mac->ra_state == RA_SUCCEEDED || get_softmodem_params()->phy_test) {
|
||||||
|
|
||||||
uint8_t nb_dmrs_re_per_rb;
|
uint8_t nb_dmrs_re_per_rb;
|
||||||
uint8_t ulsch_input_buffer[MAX_ULSCH_PAYLOAD_BYTES];
|
uint8_t ulsch_input_buffer[MAX_ULSCH_PAYLOAD_BYTES];
|
||||||
@@ -1511,14 +1513,12 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
|
|||||||
uint32_t TBS;
|
uint32_t TBS;
|
||||||
int i, N_PRB_oh;
|
int i, N_PRB_oh;
|
||||||
|
|
||||||
module_id_t mod_id = ul_info->module_id;
|
|
||||||
uint32_t gNB_index = ul_info->gNB_index;
|
uint32_t gNB_index = ul_info->gNB_index;
|
||||||
int cc_id = ul_info->cc_id;
|
int cc_id = ul_info->cc_id;
|
||||||
frame_t rx_frame = ul_info->frame_rx;
|
frame_t rx_frame = ul_info->frame_rx;
|
||||||
slot_t rx_slot = ul_info->slot_rx;
|
slot_t rx_slot = ul_info->slot_rx;
|
||||||
frame_t frame_tx = ul_info->frame_tx;
|
frame_t frame_tx = ul_info->frame_tx;
|
||||||
slot_t slot_tx = ul_info->slot_tx;
|
slot_t slot_tx = ul_info->slot_tx;
|
||||||
NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
|
|
||||||
uint8_t access_mode = SCHEDULED_ACCESS;
|
uint8_t access_mode = SCHEDULED_ACCESS;
|
||||||
|
|
||||||
fapi_nr_ul_config_request_t *ul_config_req = get_ul_config_request(mac, slot_tx);
|
fapi_nr_ul_config_request_t *ul_config_req = get_ul_config_request(mac, slot_tx);
|
||||||
@@ -4935,7 +4935,7 @@ void nr_ue_process_mac_pdu(module_id_t module_idP,
|
|||||||
if (rx_lcid < NB_RB_MAX && rx_lcid >= DL_SCH_LCID_DTCH) {
|
if (rx_lcid < NB_RB_MAX && rx_lcid >= DL_SCH_LCID_DTCH) {
|
||||||
|
|
||||||
mac_rlc_data_ind(module_idP,
|
mac_rlc_data_ind(module_idP,
|
||||||
0x1234,
|
mac->crnti,
|
||||||
gNB_index,
|
gNB_index,
|
||||||
frameP,
|
frameP,
|
||||||
ENB_FLAG_NO,
|
ENB_FLAG_NO,
|
||||||
@@ -5147,6 +5147,7 @@ nr_ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
|
|||||||
uint8_t ulsch_sdus[MAX_ULSCH_PAYLOAD_BYTES];
|
uint8_t ulsch_sdus[MAX_ULSCH_PAYLOAD_BYTES];
|
||||||
uint16_t sdu_length_total = 0;
|
uint16_t sdu_length_total = 0;
|
||||||
//unsigned short post_padding = 0;
|
//unsigned short post_padding = 0;
|
||||||
|
NR_UE_MAC_INST_t *mac = get_mac_inst(module_idP);
|
||||||
|
|
||||||
rlc_buffer_occupancy_t lcid_buffer_occupancy_old =
|
rlc_buffer_occupancy_t lcid_buffer_occupancy_old =
|
||||||
0, lcid_buffer_occupancy_new = 0;
|
0, lcid_buffer_occupancy_new = 0;
|
||||||
@@ -5159,19 +5160,12 @@ nr_ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
|
|||||||
start_meas(&UE_mac_inst[module_idP].tx_ulsch_sdu);
|
start_meas(&UE_mac_inst[module_idP].tx_ulsch_sdu);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//NR_UE_MAC_INST_t *nr_ue_mac_inst = get_mac_inst(0);
|
|
||||||
|
|
||||||
// Check for DCCH first
|
// Check for DCCH first
|
||||||
// TO DO: Multiplex in the order defined by the logical channel prioritization
|
// TO DO: Multiplex in the order defined by the logical channel prioritization
|
||||||
for (lcid = UL_SCH_LCID_SRB1;
|
for (lcid = UL_SCH_LCID_SRB1;
|
||||||
lcid < NR_MAX_NUM_LCID; lcid++) {
|
lcid < NR_MAX_NUM_LCID; lcid++) {
|
||||||
|
|
||||||
lcid_buffer_occupancy_old =
|
lcid_buffer_occupancy_old = mac_rlc_get_buffer_occupancy_ind(module_idP, mac->crnti, eNB_index, frameP, subframe, ENB_FLAG_NO, lcid);
|
||||||
//TODO: Replace static value with CRNTI
|
|
||||||
mac_rlc_get_buffer_occupancy_ind(module_idP,
|
|
||||||
0x1234, eNB_index, frameP, //nr_ue_mac_inst->crnti
|
|
||||||
subframe, ENB_FLAG_NO,
|
|
||||||
lcid);
|
|
||||||
lcid_buffer_occupancy_new = lcid_buffer_occupancy_old;
|
lcid_buffer_occupancy_new = lcid_buffer_occupancy_old;
|
||||||
|
|
||||||
if(lcid_buffer_occupancy_new){
|
if(lcid_buffer_occupancy_new){
|
||||||
@@ -5187,17 +5181,17 @@ nr_ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
|
|||||||
|
|
||||||
while(buflen_remain > 0 && lcid_buffer_occupancy_new){
|
while(buflen_remain > 0 && lcid_buffer_occupancy_new){
|
||||||
|
|
||||||
//TODO: Replace static value with CRNTI
|
|
||||||
sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP,
|
sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP,
|
||||||
0x1234, eNB_index, //nr_ue_mac_inst->crnti
|
mac->crnti,
|
||||||
|
eNB_index,
|
||||||
frameP,
|
frameP,
|
||||||
ENB_FLAG_NO,
|
ENB_FLAG_NO,
|
||||||
MBMS_FLAG_NO,
|
MBMS_FLAG_NO,
|
||||||
lcid,
|
lcid,
|
||||||
buflen_remain,
|
buflen_remain,
|
||||||
(char *)&ulsch_sdus[sdu_length_total],0,
|
(char *)&ulsch_sdus[sdu_length_total],0,
|
||||||
0
|
0);
|
||||||
);
|
|
||||||
AssertFatal(buflen_remain >= sdu_lengths[num_sdus],
|
AssertFatal(buflen_remain >= sdu_lengths[num_sdus],
|
||||||
"LCID=%d RLC has segmented %d bytes but MAC has max=%d\n",
|
"LCID=%d RLC has segmented %d bytes but MAC has max=%d\n",
|
||||||
lcid, sdu_lengths[num_sdus], buflen_remain);
|
lcid, sdu_lengths[num_sdus], buflen_remain);
|
||||||
@@ -5213,14 +5207,13 @@ nr_ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Get updated BO after multiplexing this PDU */
|
/* Get updated BO after multiplexing this PDU */
|
||||||
//TODO: Replace static value with CRNTI
|
lcid_buffer_occupancy_new = mac_rlc_get_buffer_occupancy_ind(module_idP,
|
||||||
|
mac->crnti,
|
||||||
lcid_buffer_occupancy_new =
|
eNB_index,
|
||||||
mac_rlc_get_buffer_occupancy_ind(module_idP,
|
frameP,
|
||||||
0x1234, //nr_ue_mac_inst->crnti
|
subframe,
|
||||||
eNB_index, frameP,
|
ENB_FLAG_NO,
|
||||||
subframe, ENB_FLAG_NO,
|
lcid);
|
||||||
lcid);
|
|
||||||
buflen_remain =
|
buflen_remain =
|
||||||
buflen - (total_rlc_pdu_header_len + sdu_length_total + MAX_RLC_SDU_SUBHEADER_SIZE);
|
buflen - (total_rlc_pdu_header_len + sdu_length_total + MAX_RLC_SDU_SUBHEADER_SIZE);
|
||||||
}
|
}
|
||||||
@@ -5236,7 +5229,7 @@ nr_ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
|
|||||||
sdu_lengths, // sdu length
|
sdu_lengths, // sdu length
|
||||||
sdu_lcids, // sdu lcid
|
sdu_lcids, // sdu lcid
|
||||||
0, // power_headroom
|
0, // power_headroom
|
||||||
0, // crnti
|
mac->crnti, // crnti
|
||||||
0, // truncated_bsr
|
0, // truncated_bsr
|
||||||
0, // short_bsr
|
0, // short_bsr
|
||||||
0, // long_bsr
|
0, // long_bsr
|
||||||
|
|||||||
@@ -393,7 +393,7 @@ void nr_simple_dlsch_preprocessor(module_id_t module_id,
|
|||||||
/* Retrieve amount of data to send for this UE */
|
/* Retrieve amount of data to send for this UE */
|
||||||
sched_ctrl->num_total_bytes = 0;
|
sched_ctrl->num_total_bytes = 0;
|
||||||
const int lcid = DL_SCH_LCID_DTCH;
|
const int lcid = DL_SCH_LCID_DTCH;
|
||||||
const uint16_t rnti = UE_info->rnti[UE_id];
|
const rnti_t rnti = UE_info->rnti[UE_id];
|
||||||
sched_ctrl->rlc_status[lcid] = mac_rlc_status_ind(module_id,
|
sched_ctrl->rlc_status[lcid] = mac_rlc_status_ind(module_id,
|
||||||
rnti,
|
rnti,
|
||||||
module_id,
|
module_id,
|
||||||
@@ -408,8 +408,9 @@ void nr_simple_dlsch_preprocessor(module_id_t module_id,
|
|||||||
if (sched_ctrl->num_total_bytes == 0
|
if (sched_ctrl->num_total_bytes == 0
|
||||||
&& !sched_ctrl->ta_apply) /* If TA should be applied, give at least one RB */
|
&& !sched_ctrl->ta_apply) /* If TA should be applied, give at least one RB */
|
||||||
return;
|
return;
|
||||||
LOG_D(MAC,
|
|
||||||
"%d.%d, DTCH%d->DLSCH, RLC status %d bytes TA %d\n",
|
LOG_D(MAC, "[%s][%d.%d], DTCH%d->DLSCH, RLC status %d bytes TA %d\n",
|
||||||
|
__FUNCTION__,
|
||||||
frame,
|
frame,
|
||||||
slot,
|
slot,
|
||||||
lcid,
|
lcid,
|
||||||
@@ -551,8 +552,10 @@ void nr_schedule_ue_spec(module_id_t module_id,
|
|||||||
* Possible improvement: take the periodicity from input file.
|
* Possible improvement: take the periodicity from input file.
|
||||||
* If such UE is not scheduled now, it will be by the preprocessor later.
|
* If such UE is not scheduled now, it will be by the preprocessor later.
|
||||||
* If we add the CE, ta_apply will be reset */
|
* If we add the CE, ta_apply will be reset */
|
||||||
if (frame == (sched_ctrl->ta_frame + 10) % 1024)
|
if (frame == (sched_ctrl->ta_frame + 10) % 1024){
|
||||||
sched_ctrl->ta_apply = true; /* the timer is reset once TA CE is scheduled */
|
sched_ctrl->ta_apply = true; /* the timer is reset once TA CE is scheduled */
|
||||||
|
LOG_D(MAC, "[UE %d][%d.%d] UL timing alignment procedures: setting flag for Timing Advance command\n", UE_id, frame, slot);
|
||||||
|
}
|
||||||
|
|
||||||
if (sched_ctrl->rbSize <= 0)
|
if (sched_ctrl->rbSize <= 0)
|
||||||
continue;
|
continue;
|
||||||
@@ -650,6 +653,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
|
|||||||
harq->ndi);
|
harq->ndi);
|
||||||
} else { /* initial transmission */
|
} else { /* initial transmission */
|
||||||
|
|
||||||
|
LOG_D(MAC, "[%s] Initial HARQ transmission in %d.%d\n", __FUNCTION__, frame, slot);
|
||||||
/* reserve space for timing advance of UE if necessary,
|
/* reserve space for timing advance of UE if necessary,
|
||||||
* nr_generate_dlsch_pdu() checks for ta_apply and add TA CE if necessary */
|
* nr_generate_dlsch_pdu() checks for ta_apply and add TA CE if necessary */
|
||||||
const int ta_len = (sched_ctrl->ta_apply) ? 2 : 0;
|
const int ta_len = (sched_ctrl->ta_apply) ? 2 : 0;
|
||||||
@@ -703,7 +707,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
|
|||||||
header_length_total += header_length_last;
|
header_length_total += header_length_last;
|
||||||
num_sdus++;
|
num_sdus++;
|
||||||
}
|
}
|
||||||
else if (get_softmodem_params()->phy_test) {
|
else if (get_softmodem_params()->phy_test || get_softmodem_params()->do_ra) {
|
||||||
LOG_D(MAC, "Configuring DL_TX in %d.%d: random data\n", frame, slot);
|
LOG_D(MAC, "Configuring DL_TX in %d.%d: random data\n", frame, slot);
|
||||||
// fill dlsch_buffer with random data
|
// fill dlsch_buffer with random data
|
||||||
for (int i = 0; i < TBS; i++)
|
for (int i = 0; i < TBS; i++)
|
||||||
|
|||||||
@@ -217,33 +217,18 @@ void nr_process_mac_pdu(
|
|||||||
log_dump(MAC, pdu_ptr + mac_subheader_len, 32, LOG_DUMP_CHAR, "\n");
|
log_dump(MAC, pdu_ptr + mac_subheader_len, 32, LOG_DUMP_CHAR, "\n");
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
if(IS_SOFTMODEM_NOS1){
|
|
||||||
mac_rlc_data_ind(module_idP,
|
|
||||||
0x1234,
|
|
||||||
module_idP,
|
|
||||||
frameP,
|
|
||||||
ENB_FLAG_YES,
|
|
||||||
MBMS_FLAG_NO,
|
|
||||||
rx_lcid,
|
|
||||||
(char *) (pdu_ptr + mac_subheader_len),
|
|
||||||
mac_sdu_len,
|
|
||||||
1,
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
mac_rlc_data_ind(module_idP,
|
|
||||||
rnti,
|
|
||||||
module_idP,
|
|
||||||
frameP,
|
|
||||||
ENB_FLAG_YES,
|
|
||||||
MBMS_FLAG_NO,
|
|
||||||
rx_lcid,
|
|
||||||
(char *) (pdu_ptr + mac_subheader_len),
|
|
||||||
mac_sdu_len,
|
|
||||||
1,
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
mac_rlc_data_ind(module_idP,
|
||||||
|
rnti,
|
||||||
|
module_idP,
|
||||||
|
frameP,
|
||||||
|
ENB_FLAG_YES,
|
||||||
|
MBMS_FLAG_NO,
|
||||||
|
rx_lcid,
|
||||||
|
(char *) (pdu_ptr + mac_subheader_len),
|
||||||
|
mac_sdu_len,
|
||||||
|
1,
|
||||||
|
NULL);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -96,8 +96,8 @@ void mac_top_init_gNB(void)
|
|||||||
// These should be out of here later
|
// These should be out of here later
|
||||||
pdcp_layer_init();
|
pdcp_layer_init();
|
||||||
|
|
||||||
if(IS_SOFTMODEM_NOS1)
|
if(IS_SOFTMODEM_NOS1 && !get_softmodem_params()->do_ra)
|
||||||
nr_DRB_preconfiguration();
|
nr_DRB_preconfiguration(0x1234);
|
||||||
|
|
||||||
rrc_init_nr_global_param();
|
rrc_init_nr_global_param();
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,8 @@
|
|||||||
* contact@openairinterface.org
|
* contact@openairinterface.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
#ifndef _NR_PDCP_ENTITY_H_
|
#ifndef _NR_PDCP_ENTITY_H_
|
||||||
#define _NR_PDCP_ENTITY_H_
|
#define _NR_PDCP_ENTITY_H_
|
||||||
|
|
||||||
@@ -63,6 +65,6 @@ nr_pdcp_entity_t *new_nr_pdcp_entity_drb_am(
|
|||||||
int t_reordering,
|
int t_reordering,
|
||||||
int discard_timer);
|
int discard_timer);
|
||||||
|
|
||||||
void nr_DRB_preconfiguration(void);
|
void nr_DRB_preconfiguration(uint16_t crnti);
|
||||||
|
|
||||||
#endif /* _NR_PDCP_ENTITY_H_ */
|
#endif /* _NR_PDCP_ENTITY_H_ */
|
||||||
|
|||||||
@@ -24,13 +24,17 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include "common/utils/LOG/log.h"
|
||||||
|
|
||||||
void nr_pdcp_entity_drb_am_recv_pdu(nr_pdcp_entity_t *_entity, char *buffer, int size)
|
void nr_pdcp_entity_drb_am_recv_pdu(nr_pdcp_entity_t *_entity, char *buffer, int size)
|
||||||
{
|
{
|
||||||
nr_pdcp_entity_drb_am_t *entity = (nr_pdcp_entity_drb_am_t *)_entity;
|
nr_pdcp_entity_drb_am_t *entity = (nr_pdcp_entity_drb_am_t *)_entity;
|
||||||
|
|
||||||
if (size < 3) abort();
|
if (size < 3) abort();
|
||||||
if (!(buffer[0] & 0x80)) { printf("%s:%d:%s: fatal\n", __FILE__, __LINE__, __FUNCTION__); exit(1); }
|
|
||||||
|
if (!(buffer[0] & 0x80))
|
||||||
|
LOG_E(PDCP, "%s:%d:%s: fatal\n", __FILE__, __LINE__, __FUNCTION__);
|
||||||
|
|
||||||
entity->common.deliver_sdu(entity->common.deliver_sdu_data,
|
entity->common.deliver_sdu(entity->common.deliver_sdu_data,
|
||||||
(nr_pdcp_entity_t *)entity, buffer+3, size-3);
|
(nr_pdcp_entity_t *)entity, buffer+3, size-3);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,11 +26,13 @@
|
|||||||
#include "nr_pdcp_ue_manager.h"
|
#include "nr_pdcp_ue_manager.h"
|
||||||
#include "NR_RadioBearerConfig.h"
|
#include "NR_RadioBearerConfig.h"
|
||||||
#include "NR_RLC-BearerConfig.h"
|
#include "NR_RLC-BearerConfig.h"
|
||||||
|
#include "NR_RLC-Config.h"
|
||||||
#include "NR_CellGroupConfig.h"
|
#include "NR_CellGroupConfig.h"
|
||||||
#include "openair2/RRC/NR/nr_rrc_proto.h"
|
#include "openair2/RRC/NR/nr_rrc_proto.h"
|
||||||
|
|
||||||
/* from OAI */
|
/* from OAI */
|
||||||
#include "pdcp.h"
|
#include "pdcp.h"
|
||||||
|
#include "LAYER2/nr_rlc/nr_rlc_oai_api.h"
|
||||||
|
|
||||||
#define TODO do { \
|
#define TODO do { \
|
||||||
printf("%s:%d:%s: todo\n", __FILE__, __LINE__, __FUNCTION__); \
|
printf("%s:%d:%s: todo\n", __FILE__, __LINE__, __FUNCTION__); \
|
||||||
@@ -411,7 +413,6 @@ static void deliver_sdu_drb(void *_ue, nr_pdcp_entity_t *entity,
|
|||||||
len = write(nas_sock_fd[0], buf, size);
|
len = write(nas_sock_fd[0], buf, size);
|
||||||
if (len != size) {
|
if (len != size) {
|
||||||
LOG_E(PDCP, "%s:%d:%s: fatal\n", __FILE__, __LINE__, __FUNCTION__);
|
LOG_E(PDCP, "%s:%d:%s: fatal\n", __FILE__, __LINE__, __FUNCTION__);
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@@ -624,8 +625,7 @@ static void add_drb_am(int rnti, struct NR_DRB_ToAddMod *s)
|
|||||||
sn_size_dl, t_reordering, discard_timer);
|
sn_size_dl, t_reordering, discard_timer);
|
||||||
nr_pdcp_ue_add_drb_pdcp_entity(ue, drb_id, pdcp_drb);
|
nr_pdcp_ue_add_drb_pdcp_entity(ue, drb_id, pdcp_drb);
|
||||||
|
|
||||||
LOG_D(PDCP, "%s:%d:%s: added drb %d to ue %d\n",
|
LOG_D(PDCP, "%s:%d:%s: added drb %d to ue rnti %x\n", __FILE__, __LINE__, __FUNCTION__, drb_id, rnti);
|
||||||
__FILE__, __LINE__, __FUNCTION__, drb_id, rnti);
|
|
||||||
}
|
}
|
||||||
nr_pdcp_manager_unlock(nr_pdcp_ue_manager);
|
nr_pdcp_manager_unlock(nr_pdcp_ue_manager);
|
||||||
}
|
}
|
||||||
@@ -646,6 +646,7 @@ static void add_drb(int rnti, struct NR_DRB_ToAddMod *s, NR_RLC_Config_t *rlc_Co
|
|||||||
__FILE__, __LINE__, __FUNCTION__);
|
__FILE__, __LINE__, __FUNCTION__);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
LOG_I(PDCP, "%s:%s:%d: added DRB for UE RNTI %x\n", __FILE__, __FUNCTION__, __LINE__, rnti);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean_t nr_rrc_pdcp_config_asn1_req(
|
boolean_t nr_rrc_pdcp_config_asn1_req(
|
||||||
@@ -692,7 +693,6 @@ boolean_t nr_rrc_pdcp_config_asn1_req(
|
|||||||
|
|
||||||
if (drb2add_list != NULL) {
|
if (drb2add_list != NULL) {
|
||||||
for (i = 0; i < drb2add_list->list.count; i++) {
|
for (i = 0; i < drb2add_list->list.count; i++) {
|
||||||
LOG_I(PDCP, "Before calling add_drb \n");
|
|
||||||
add_drb(rnti, drb2add_list->list.array[i], rlc_bearer2add_list->list.array[i]->rlc_Config);
|
add_drb(rnti, drb2add_list->list.array[i], rlc_bearer2add_list->list.array[i]->rlc_Config);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -727,7 +727,7 @@ boolean_t rrc_pdcp_config_asn1_req(
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void nr_DRB_preconfiguration(void)
|
void nr_DRB_preconfiguration(uint16_t crnti)
|
||||||
{
|
{
|
||||||
|
|
||||||
NR_RadioBearerConfig_t *rbconfig = NULL;
|
NR_RadioBearerConfig_t *rbconfig = NULL;
|
||||||
@@ -779,67 +779,19 @@ void nr_DRB_preconfiguration(void)
|
|||||||
|
|
||||||
xer_fprint(stdout, &asn_DEF_NR_RadioBearerConfig, (const void*)rbconfig);
|
xer_fprint(stdout, &asn_DEF_NR_RadioBearerConfig, (const void*)rbconfig);
|
||||||
|
|
||||||
|
|
||||||
NR_RLC_BearerConfig_t *RLC_BearerConfig = calloc(1,sizeof(*RLC_BearerConfig));
|
NR_RLC_BearerConfig_t *RLC_BearerConfig = calloc(1,sizeof(*RLC_BearerConfig));
|
||||||
|
nr_rlc_bearer_init(RLC_BearerConfig);
|
||||||
RLC_BearerConfig->logicalChannelIdentity = 4;
|
nr_drb_config(RLC_BearerConfig->rlc_Config, NR_RLC_Config_PR_um_Bi_Directional);
|
||||||
RLC_BearerConfig->servedRadioBearer = calloc(1,sizeof(*RLC_BearerConfig->servedRadioBearer));
|
nr_rlc_bearer_init_ul_spec(RLC_BearerConfig->mac_LogicalChannelConfig);
|
||||||
RLC_BearerConfig->servedRadioBearer->present = NR_RLC_BearerConfig__servedRadioBearer_PR_drb_Identity;
|
|
||||||
|
|
||||||
RLC_BearerConfig->servedRadioBearer->choice.drb_Identity=1;
|
|
||||||
RLC_BearerConfig->reestablishRLC=calloc(1,sizeof(*RLC_BearerConfig->reestablishRLC));
|
|
||||||
*RLC_BearerConfig->reestablishRLC=NR_RLC_BearerConfig__reestablishRLC_true;
|
|
||||||
RLC_BearerConfig->rlc_Config=calloc(1,sizeof(*RLC_BearerConfig->rlc_Config));
|
|
||||||
|
|
||||||
// RLC UM Bi-directional Bearer configuration
|
|
||||||
RLC_BearerConfig->rlc_Config->present = NR_RLC_Config_PR_um_Bi_Directional;
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional = calloc(1,sizeof(*RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional));
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional->ul_UM_RLC.sn_FieldLength = calloc(1,sizeof(*RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional->ul_UM_RLC.sn_FieldLength));
|
|
||||||
*RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional->ul_UM_RLC.sn_FieldLength = NR_SN_FieldLengthUM_size12;
|
|
||||||
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional->dl_UM_RLC.sn_FieldLength = calloc(1,sizeof(*RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional->dl_UM_RLC.sn_FieldLength));
|
|
||||||
*RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional->dl_UM_RLC.sn_FieldLength = NR_SN_FieldLengthUM_size12;
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional->dl_UM_RLC.t_Reassembly = NR_T_Reassembly_ms15;
|
|
||||||
|
|
||||||
// RLC AM Bearer configuration
|
|
||||||
/*RLC_BearerConfig->rlc_Config->present = NR_RLC_Config_PR_am;
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.am = calloc(1,sizeof(*RLC_BearerConfig->rlc_Config->choice.am));
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.am->ul_AM_RLC.sn_FieldLength = calloc(1,sizeof(*RLC_BearerConfig->rlc_Config->choice.am->ul_AM_RLC.sn_FieldLength));
|
|
||||||
*RLC_BearerConfig->rlc_Config->choice.am->ul_AM_RLC.sn_FieldLength = NR_SN_FieldLengthAM_size18;
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.am->ul_AM_RLC.t_PollRetransmit = NR_T_PollRetransmit_ms45;
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.am->ul_AM_RLC.pollPDU = NR_PollPDU_p64;
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.am->ul_AM_RLC.pollByte = NR_PollByte_kB500;
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.am->ul_AM_RLC.maxRetxThreshold = NR_UL_AM_RLC__maxRetxThreshold_t32;
|
|
||||||
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.am->dl_AM_RLC.sn_FieldLength = calloc(1,sizeof(*RLC_BearerConfig->rlc_Config->choice.am->dl_AM_RLC.sn_FieldLength));
|
|
||||||
*RLC_BearerConfig->rlc_Config->choice.am->dl_AM_RLC.sn_FieldLength = NR_SN_FieldLengthAM_size18;
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.am->dl_AM_RLC.t_Reassembly = NR_T_Reassembly_ms15;
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.am->dl_AM_RLC.t_StatusProhibit = NR_T_StatusProhibit_ms15;*/
|
|
||||||
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig = calloc(1,sizeof(*RLC_BearerConfig->mac_LogicalChannelConfig));
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters = calloc(1,sizeof(*RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters));
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->priority = 1;
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->prioritisedBitRate = NR_LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity;
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->bucketSizeDuration = NR_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50;
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->allowedServingCells = NULL;
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->allowedSCS_List = NULL;
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->maxPUSCH_Duration = NULL;
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->configuredGrantType1Allowed = NULL;
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->logicalChannelGroup = calloc(1,sizeof(*RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->logicalChannelGroup));
|
|
||||||
*RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->logicalChannelGroup = 1;
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->schedulingRequestID = NULL;
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->logicalChannelSR_Mask = false;
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->logicalChannelSR_DelayTimerApplied = false;
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->bitRateQueryProhibitTimer = NULL;
|
|
||||||
|
|
||||||
Rlc_Bearer_ToAdd_list = calloc(1,sizeof(*Rlc_Bearer_ToAdd_list));
|
Rlc_Bearer_ToAdd_list = calloc(1,sizeof(*Rlc_Bearer_ToAdd_list));
|
||||||
ASN_SEQUENCE_ADD(&Rlc_Bearer_ToAdd_list->list, RLC_BearerConfig);
|
ASN_SEQUENCE_ADD(&Rlc_Bearer_ToAdd_list->list, RLC_BearerConfig);
|
||||||
|
|
||||||
if (ENB_NAS_USE_TUN){
|
if (ENB_NAS_USE_TUN){
|
||||||
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, 0, ENB_FLAG_YES, 0x1234, 0, 0,0);
|
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, 0, ENB_FLAG_YES, crnti, 0, 0, 0);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, 0, ENB_FLAG_NO, 0x1234, 0, 0,0);
|
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, 0, ENB_FLAG_NO, crnti, 0, 0,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
nr_rrc_pdcp_config_asn1_req(
|
nr_rrc_pdcp_config_asn1_req(
|
||||||
@@ -861,6 +813,9 @@ void nr_DRB_preconfiguration(void)
|
|||||||
rbconfig->drb_ToReleaseList,
|
rbconfig->drb_ToReleaseList,
|
||||||
(LTE_PMCH_InfoList_r9_t *) NULL,
|
(LTE_PMCH_InfoList_r9_t *) NULL,
|
||||||
Rlc_Bearer_ToAdd_list);
|
Rlc_Bearer_ToAdd_list);
|
||||||
|
|
||||||
|
LOG_D(PDCP, "%s:%d: done RRC PDCP/RLC ASN1 request for UE rnti %x\n", __FUNCTION__, __LINE__, ctxt.rnti);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t get_pdcp_optmask(void)
|
uint64_t get_pdcp_optmask(void)
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
#include "asn1_utils.h"
|
#include "asn1_utils.h"
|
||||||
#include "nr_rlc_ue_manager.h"
|
#include "nr_rlc_ue_manager.h"
|
||||||
#include "nr_rlc_entity.h"
|
#include "nr_rlc_entity.h"
|
||||||
|
#include "nr_rlc_oai_api.h"
|
||||||
#include "NR_RLC-BearerConfig.h"
|
#include "NR_RLC-BearerConfig.h"
|
||||||
#include "NR_DRB-ToAddMod.h"
|
#include "NR_DRB-ToAddMod.h"
|
||||||
#include "NR_DRB-ToAddModList.h"
|
#include "NR_DRB-ToAddModList.h"
|
||||||
@@ -44,6 +45,76 @@ static uint64_t nr_rlc_current_time;
|
|||||||
static int nr_rlc_current_time_last_frame;
|
static int nr_rlc_current_time_last_frame;
|
||||||
static int nr_rlc_current_time_last_subframe;
|
static int nr_rlc_current_time_last_subframe;
|
||||||
|
|
||||||
|
void nr_rlc_bearer_init(NR_RLC_BearerConfig_t *RLC_BearerConfig){
|
||||||
|
|
||||||
|
|
||||||
|
RLC_BearerConfig->servedRadioBearer = calloc(1, sizeof(*RLC_BearerConfig->servedRadioBearer));
|
||||||
|
RLC_BearerConfig->reestablishRLC = calloc(1, sizeof(*RLC_BearerConfig->reestablishRLC));
|
||||||
|
RLC_BearerConfig->rlc_Config = calloc(1, sizeof(*RLC_BearerConfig->rlc_Config));
|
||||||
|
RLC_BearerConfig->mac_LogicalChannelConfig = calloc(1, sizeof(*RLC_BearerConfig->mac_LogicalChannelConfig));
|
||||||
|
|
||||||
|
RLC_BearerConfig->logicalChannelIdentity = 4;
|
||||||
|
RLC_BearerConfig->servedRadioBearer->present = NR_RLC_BearerConfig__servedRadioBearer_PR_drb_Identity;
|
||||||
|
RLC_BearerConfig->servedRadioBearer->choice.drb_Identity = 1;
|
||||||
|
*RLC_BearerConfig->reestablishRLC = NR_RLC_BearerConfig__reestablishRLC_true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void nr_rlc_bearer_init_ul_spec(struct NR_LogicalChannelConfig *mac_LogicalChannelConfig){
|
||||||
|
|
||||||
|
mac_LogicalChannelConfig->ul_SpecificParameters = calloc(1, sizeof(*mac_LogicalChannelConfig->ul_SpecificParameters));
|
||||||
|
mac_LogicalChannelConfig->ul_SpecificParameters->priority = 1;
|
||||||
|
mac_LogicalChannelConfig->ul_SpecificParameters->prioritisedBitRate = NR_LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity;
|
||||||
|
mac_LogicalChannelConfig->ul_SpecificParameters->bucketSizeDuration = NR_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50;
|
||||||
|
mac_LogicalChannelConfig->ul_SpecificParameters->allowedServingCells = NULL;
|
||||||
|
mac_LogicalChannelConfig->ul_SpecificParameters->allowedSCS_List = NULL;
|
||||||
|
mac_LogicalChannelConfig->ul_SpecificParameters->maxPUSCH_Duration = NULL;
|
||||||
|
mac_LogicalChannelConfig->ul_SpecificParameters->configuredGrantType1Allowed = NULL;
|
||||||
|
|
||||||
|
mac_LogicalChannelConfig->ul_SpecificParameters->logicalChannelGroup = calloc(1,sizeof(*mac_LogicalChannelConfig->ul_SpecificParameters->logicalChannelGroup));
|
||||||
|
*mac_LogicalChannelConfig->ul_SpecificParameters->logicalChannelGroup = 1;
|
||||||
|
mac_LogicalChannelConfig->ul_SpecificParameters->schedulingRequestID = NULL;
|
||||||
|
mac_LogicalChannelConfig->ul_SpecificParameters->logicalChannelSR_Mask = false;
|
||||||
|
mac_LogicalChannelConfig->ul_SpecificParameters->logicalChannelSR_DelayTimerApplied = false;
|
||||||
|
mac_LogicalChannelConfig->ul_SpecificParameters->bitRateQueryProhibitTimer = NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void nr_drb_config(struct NR_RLC_Config *rlc_Config, NR_RLC_Config_PR rlc_config_pr){
|
||||||
|
|
||||||
|
switch (rlc_config_pr){
|
||||||
|
case NR_RLC_Config_PR_um_Bi_Directional:
|
||||||
|
// RLC UM Bi-directional Bearer configuration
|
||||||
|
rlc_Config->choice.um_Bi_Directional = calloc(1, sizeof(*rlc_Config->choice.um_Bi_Directional));
|
||||||
|
rlc_Config->choice.um_Bi_Directional->ul_UM_RLC.sn_FieldLength = calloc(1, sizeof(*rlc_Config->choice.um_Bi_Directional->ul_UM_RLC.sn_FieldLength));
|
||||||
|
*rlc_Config->choice.um_Bi_Directional->ul_UM_RLC.sn_FieldLength = NR_SN_FieldLengthUM_size12;
|
||||||
|
rlc_Config->choice.um_Bi_Directional->dl_UM_RLC.sn_FieldLength = calloc(1, sizeof(*rlc_Config->choice.um_Bi_Directional->dl_UM_RLC.sn_FieldLength));
|
||||||
|
*rlc_Config->choice.um_Bi_Directional->dl_UM_RLC.sn_FieldLength = NR_SN_FieldLengthUM_size12;
|
||||||
|
rlc_Config->choice.um_Bi_Directional->dl_UM_RLC.t_Reassembly = NR_T_Reassembly_ms15;
|
||||||
|
break;
|
||||||
|
case NR_RLC_Config_PR_am:
|
||||||
|
// RLC AM Bearer configuration
|
||||||
|
rlc_Config->choice.am = calloc(1, sizeof(*rlc_Config->choice.am));
|
||||||
|
rlc_Config->choice.am->ul_AM_RLC.sn_FieldLength = calloc(1, sizeof(*rlc_Config->choice.am->ul_AM_RLC.sn_FieldLength));
|
||||||
|
*rlc_Config->choice.am->ul_AM_RLC.sn_FieldLength = NR_SN_FieldLengthAM_size18;
|
||||||
|
rlc_Config->choice.am->ul_AM_RLC.t_PollRetransmit = NR_T_PollRetransmit_ms45;
|
||||||
|
rlc_Config->choice.am->ul_AM_RLC.pollPDU = NR_PollPDU_p64;
|
||||||
|
rlc_Config->choice.am->ul_AM_RLC.pollByte = NR_PollByte_kB500;
|
||||||
|
rlc_Config->choice.am->ul_AM_RLC.maxRetxThreshold = NR_UL_AM_RLC__maxRetxThreshold_t32;
|
||||||
|
rlc_Config->choice.am->dl_AM_RLC.sn_FieldLength = calloc(1, sizeof(*rlc_Config->choice.am->dl_AM_RLC.sn_FieldLength));
|
||||||
|
*rlc_Config->choice.am->dl_AM_RLC.sn_FieldLength = NR_SN_FieldLengthAM_size18;
|
||||||
|
rlc_Config->choice.am->dl_AM_RLC.t_Reassembly = NR_T_Reassembly_ms15;
|
||||||
|
rlc_Config->choice.am->dl_AM_RLC.t_StatusProhibit = NR_T_StatusProhibit_ms15;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LOG_E (RLC, "Error in %s: RLC config type %d is not handled\n", __FUNCTION__, rlc_config_pr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
rlc_Config->present = rlc_config_pr;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void mac_rlc_data_ind (
|
void mac_rlc_data_ind (
|
||||||
const module_id_t module_idP,
|
const module_id_t module_idP,
|
||||||
const rnti_t rntiP,
|
const rnti_t rntiP,
|
||||||
@@ -179,6 +250,7 @@ mac_rlc_status_resp_t mac_rlc_status_ind(
|
|||||||
+ buf_stat.retx_size
|
+ buf_stat.retx_size
|
||||||
+ buf_stat.tx_size;
|
+ buf_stat.tx_size;
|
||||||
} else {
|
} else {
|
||||||
|
LOG_W(RLC, "[%s] Radio Bearer (channel ID %d) is NULL for UE with rntiP %x\n", __FUNCTION__, channel_idP, rntiP);
|
||||||
ret.bytes_in_buffer = 0;
|
ret.bytes_in_buffer = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -586,8 +658,7 @@ static void add_srb(int rnti, struct LTE_SRB_ToAddMod *s)
|
|||||||
nr_rlc_manager_lock(nr_rlc_ue_manager);
|
nr_rlc_manager_lock(nr_rlc_ue_manager);
|
||||||
ue = nr_rlc_manager_get_ue(nr_rlc_ue_manager, rnti);
|
ue = nr_rlc_manager_get_ue(nr_rlc_ue_manager, rnti);
|
||||||
if (ue->srb[srb_id-1] != NULL) {
|
if (ue->srb[srb_id-1] != NULL) {
|
||||||
LOG_D(RLC, "%s:%d:%s: warning SRB %d already exist for ue %d, do nothing\n",
|
LOG_W(RLC, "%s:%d:%s: SRB %d already exists for UE with RNTI %x, do nothing\n", __FILE__, __LINE__, __FUNCTION__, srb_id, rnti);
|
||||||
__FILE__, __LINE__, __FUNCTION__, srb_id, rnti);
|
|
||||||
} else {
|
} else {
|
||||||
/* hack: hardcode values for NR */
|
/* hack: hardcode values for NR */
|
||||||
t_poll_retransmit = 45;
|
t_poll_retransmit = 45;
|
||||||
@@ -678,8 +749,7 @@ static void add_drb_am(int rnti, struct NR_DRB_ToAddMod *s, NR_RLC_BearerConfig_
|
|||||||
nr_rlc_manager_lock(nr_rlc_ue_manager);
|
nr_rlc_manager_lock(nr_rlc_ue_manager);
|
||||||
ue = nr_rlc_manager_get_ue(nr_rlc_ue_manager, rnti);
|
ue = nr_rlc_manager_get_ue(nr_rlc_ue_manager, rnti);
|
||||||
if (ue->drb[drb_id-1] != NULL) {
|
if (ue->drb[drb_id-1] != NULL) {
|
||||||
LOG_D(RLC, "%s:%d:%s: warning DRB %d already exist for ue %d, do nothing\n",
|
LOG_W(RLC, "%s:%d:%s: DRB %d already exists for UE with RNTI %d, do nothing\n", __FILE__, __LINE__, __FUNCTION__, drb_id, rnti);
|
||||||
__FILE__, __LINE__, __FUNCTION__, drb_id, rnti);
|
|
||||||
} else {
|
} else {
|
||||||
nr_rlc_am = new_nr_rlc_entity_am(100000,
|
nr_rlc_am = new_nr_rlc_entity_am(100000,
|
||||||
100000,
|
100000,
|
||||||
@@ -692,8 +762,7 @@ static void add_drb_am(int rnti, struct NR_DRB_ToAddMod *s, NR_RLC_BearerConfig_
|
|||||||
sn_field_length);
|
sn_field_length);
|
||||||
nr_rlc_ue_add_drb_rlc_entity(ue, drb_id, nr_rlc_am);
|
nr_rlc_ue_add_drb_rlc_entity(ue, drb_id, nr_rlc_am);
|
||||||
|
|
||||||
LOG_D(RLC, "%s:%d:%s: added drb %d to ue %d\n",
|
LOG_D(RLC, "%s:%d:%s: added drb %d to UE with RNTI %x\n", __FILE__, __LINE__, __FUNCTION__, drb_id, rnti);
|
||||||
__FILE__, __LINE__, __FUNCTION__, drb_id, rnti);
|
|
||||||
}
|
}
|
||||||
nr_rlc_manager_unlock(nr_rlc_ue_manager);
|
nr_rlc_manager_unlock(nr_rlc_ue_manager);
|
||||||
}
|
}
|
||||||
@@ -752,8 +821,7 @@ static void add_drb_um(int rnti, struct NR_DRB_ToAddMod *s, NR_RLC_BearerConfig_
|
|||||||
nr_rlc_manager_lock(nr_rlc_ue_manager);
|
nr_rlc_manager_lock(nr_rlc_ue_manager);
|
||||||
ue = nr_rlc_manager_get_ue(nr_rlc_ue_manager, rnti);
|
ue = nr_rlc_manager_get_ue(nr_rlc_ue_manager, rnti);
|
||||||
if (ue->drb[drb_id-1] != NULL) {
|
if (ue->drb[drb_id-1] != NULL) {
|
||||||
LOG_D(RLC, "%s:%d:%s: warning DRB %d already exist for ue %d, do nothing\n",
|
LOG_W(RLC, "DEBUG add_drb_um %s:%d:%s: warning DRB %d already exist for ue %d, do nothing\n", __FILE__, __LINE__, __FUNCTION__, drb_id, rnti);
|
||||||
__FILE__, __LINE__, __FUNCTION__, drb_id, rnti);
|
|
||||||
} else {
|
} else {
|
||||||
nr_rlc_um = new_nr_rlc_entity_um(1000000,
|
nr_rlc_um = new_nr_rlc_entity_um(1000000,
|
||||||
1000000,
|
1000000,
|
||||||
@@ -762,8 +830,7 @@ static void add_drb_um(int rnti, struct NR_DRB_ToAddMod *s, NR_RLC_BearerConfig_
|
|||||||
sn_field_length);
|
sn_field_length);
|
||||||
nr_rlc_ue_add_drb_rlc_entity(ue, drb_id, nr_rlc_um);
|
nr_rlc_ue_add_drb_rlc_entity(ue, drb_id, nr_rlc_um);
|
||||||
|
|
||||||
LOG_D(RLC, "%s:%d:%s: added drb %d to ue %d\n",
|
LOG_D(RLC, "%s:%d:%s: added drb %d to UE with RNTI %x\n", __FILE__, __LINE__, __FUNCTION__, drb_id, rnti);
|
||||||
__FILE__, __LINE__, __FUNCTION__, drb_id, rnti);
|
|
||||||
}
|
}
|
||||||
nr_rlc_manager_unlock(nr_rlc_ue_manager);
|
nr_rlc_manager_unlock(nr_rlc_ue_manager);
|
||||||
}
|
}
|
||||||
@@ -782,6 +849,7 @@ static void add_drb(int rnti, struct NR_DRB_ToAddMod *s, struct NR_RLC_BearerCon
|
|||||||
__FILE__, __LINE__, __FUNCTION__);
|
__FILE__, __LINE__, __FUNCTION__);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
LOG_I(RLC, "%s:%s:%d: added DRB to UE with RNTI %x\n", __FILE__, __FUNCTION__, __LINE__, rnti);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Dummy function due to dependency from LTE libraries */
|
/* Dummy function due to dependency from LTE libraries */
|
||||||
@@ -869,7 +937,7 @@ rlc_op_status_t rrc_rlc_config_req (
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
nr_rlc_manager_lock(nr_rlc_ue_manager);
|
nr_rlc_manager_lock(nr_rlc_ue_manager);
|
||||||
LOG_D(RLC, "%s:%d:%s: remove rb %ld (is_srb %d) for UE %d\n", __FILE__, __LINE__, __FUNCTION__, rb_idP, srb_flagP, ctxt_pP->rnti);
|
LOG_D(RLC, "%s:%d:%s: remove rb %ld (is_srb %d) for UE RNTI %x\n", __FILE__, __LINE__, __FUNCTION__, rb_idP, srb_flagP, ctxt_pP->rnti);
|
||||||
ue = nr_rlc_manager_get_ue(nr_rlc_ue_manager, ctxt_pP->rnti);
|
ue = nr_rlc_manager_get_ue(nr_rlc_ue_manager, ctxt_pP->rnti);
|
||||||
if (srb_flagP) {
|
if (srb_flagP) {
|
||||||
if (ue->srb[rb_idP-1] != NULL) {
|
if (ue->srb[rb_idP-1] != NULL) {
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* 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 nr_rlc_oai_api.h
|
||||||
|
* \brief Header file for nr_rlc_oai_api
|
||||||
|
* \author Guido Casati
|
||||||
|
* \date 2020
|
||||||
|
* \email: guido.casati@iis.fraunhofe.de
|
||||||
|
* \version 1.0
|
||||||
|
* @ingroup _rlc
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "NR_RLC-BearerConfig.h"
|
||||||
|
#include "NR_RLC-Config.h"
|
||||||
|
#include "NR_LogicalChannelIdentity.h"
|
||||||
|
#include "NR_RadioBearerConfig.h"
|
||||||
|
#include "NR_CellGroupConfig.h"
|
||||||
|
#include "openair2/RRC/NR/nr_rrc_proto.h"
|
||||||
|
|
||||||
|
/* from OAI */
|
||||||
|
#include "pdcp.h"
|
||||||
|
|
||||||
|
struct NR_RLC_Config;
|
||||||
|
struct NR_LogicalChannelConfig;
|
||||||
|
|
||||||
|
void nr_rlc_bearer_init(NR_RLC_BearerConfig_t *RLC_BearerConfig);
|
||||||
|
|
||||||
|
void nr_drb_config(struct NR_RLC_Config *rlc_Config, NR_RLC_Config_PR rlc_config_pr);
|
||||||
|
|
||||||
|
void nr_rlc_bearer_init_ul_spec(struct NR_LogicalChannelConfig *mac_LogicalChannelConfig);
|
||||||
@@ -85,7 +85,7 @@ nr_rlc_ue_t *nr_rlc_manager_get_ue(nr_rlc_ue_manager_t *_m, int rnti)
|
|||||||
if (m->ue_list[i]->rnti == rnti)
|
if (m->ue_list[i]->rnti == rnti)
|
||||||
return m->ue_list[i];
|
return m->ue_list[i];
|
||||||
|
|
||||||
LOG_D(RLC, "%s:%d:%s: new UE %d\n", __FILE__, __LINE__, __FUNCTION__, rnti);
|
LOG_D(RLC, "%s:%d:%s: new UE with RNTI %x\n", __FILE__, __LINE__, __FUNCTION__, rnti);
|
||||||
|
|
||||||
m->ue_count++;
|
m->ue_count++;
|
||||||
m->ue_list = realloc(m->ue_list, sizeof(nr_rlc_ue_t *) * m->ue_count);
|
m->ue_list = realloc(m->ue_list, sizeof(nr_rlc_ue_t *) * m->ue_count);
|
||||||
|
|||||||
@@ -642,8 +642,7 @@ static void add_srb(int rnti, int module_id, struct LTE_SRB_ToAddMod *s)
|
|||||||
poll_pdu, poll_byte, max_retx_threshold);
|
poll_pdu, poll_byte, max_retx_threshold);
|
||||||
rlc_ue_add_srb_rlc_entity(ue, srb_id, rlc_am);
|
rlc_ue_add_srb_rlc_entity(ue, srb_id, rlc_am);
|
||||||
|
|
||||||
LOG_D(RLC, "%s:%d:%s: added srb %d to ue %d\n",
|
LOG_D(RLC, "%s:%d:%s: added SRB %d to UE RNTI %x\n", __FILE__, __LINE__, __FUNCTION__, srb_id, rnti);
|
||||||
__FILE__, __LINE__, __FUNCTION__, srb_id, rnti);
|
|
||||||
}
|
}
|
||||||
rlc_manager_unlock(rlc_ue_manager);
|
rlc_manager_unlock(rlc_ue_manager);
|
||||||
}
|
}
|
||||||
@@ -720,8 +719,7 @@ static void add_drb_am(int rnti, int module_id, struct LTE_DRB_ToAddMod *s)
|
|||||||
poll_pdu, poll_byte, max_retx_threshold);
|
poll_pdu, poll_byte, max_retx_threshold);
|
||||||
rlc_ue_add_drb_rlc_entity(ue, drb_id, rlc_am);
|
rlc_ue_add_drb_rlc_entity(ue, drb_id, rlc_am);
|
||||||
|
|
||||||
LOG_D(RLC, "%s:%d:%s: added drb %d to ue %d\n",
|
LOG_D(RLC, "%s:%d:%s: added DRB %d to UE RNTI %x\n", __FILE__, __LINE__, __FUNCTION__, drb_id, rnti);
|
||||||
__FILE__, __LINE__, __FUNCTION__, drb_id, rnti);
|
|
||||||
}
|
}
|
||||||
rlc_manager_unlock(rlc_ue_manager);
|
rlc_manager_unlock(rlc_ue_manager);
|
||||||
}
|
}
|
||||||
@@ -791,8 +789,7 @@ static void add_drb_um(int rnti, int module_id, struct LTE_DRB_ToAddMod *s)
|
|||||||
sn_field_length);
|
sn_field_length);
|
||||||
rlc_ue_add_drb_rlc_entity(ue, drb_id, rlc_um);
|
rlc_ue_add_drb_rlc_entity(ue, drb_id, rlc_um);
|
||||||
|
|
||||||
LOG_D(RLC, "%s:%d:%s: added drb %d to ue %d\n",
|
LOG_D(RLC, "%s:%d:%s: added DRB %d to UE RNTI %x\n", __FILE__, __LINE__, __FUNCTION__, drb_id, rnti);
|
||||||
__FILE__, __LINE__, __FUNCTION__, drb_id, rnti);
|
|
||||||
}
|
}
|
||||||
rlc_manager_unlock(rlc_ue_manager);
|
rlc_manager_unlock(rlc_ue_manager);
|
||||||
}
|
}
|
||||||
@@ -909,8 +906,7 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP
|
|||||||
);
|
);
|
||||||
rlc_ue_add_drb_rlc_entity(ue, drb_id, rlc_um);
|
rlc_ue_add_drb_rlc_entity(ue, drb_id, rlc_um);
|
||||||
|
|
||||||
LOG_D(RLC, "%s:%d:%s: added drb %d to ue %d\n",
|
LOG_D(RLC, "%s:%d:%s: added DRB %d to UE RNTI %x\n", __FILE__, __LINE__, __FUNCTION__, (int)drb_id, mbms_rnti);
|
||||||
__FILE__, __LINE__, __FUNCTION__, (int)drb_id, mbms_rnti);
|
|
||||||
}
|
}
|
||||||
rlc_manager_unlock(rlc_ue_manager);
|
rlc_manager_unlock(rlc_ue_manager);
|
||||||
|
|
||||||
|
|||||||
@@ -75,7 +75,7 @@
|
|||||||
|
|
||||||
#include "rrc_eNB_GTPV1U.h"
|
#include "rrc_eNB_GTPV1U.h"
|
||||||
|
|
||||||
|
#include "nr_pdcp/nr_pdcp_entity.h"
|
||||||
#include "pdcp.h"
|
#include "pdcp.h"
|
||||||
#include "gtpv1u_eNB_task.h"
|
#include "gtpv1u_eNB_task.h"
|
||||||
|
|
||||||
|
|||||||
@@ -243,12 +243,9 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
|
|||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
LOG_W(RRC, "No E-RAB to be added received from SgNB Addition Request message \n");
|
LOG_W(RRC, "No E-RAB to be added received from SgNB Addition Request message \n");
|
||||||
}
|
|
||||||
|
|
||||||
if (m != NULL) {
|
|
||||||
X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).MeNB_ue_x2_id = m->ue_x2_id;
|
X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).MeNB_ue_x2_id = m->ue_x2_id;
|
||||||
X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).SgNB_ue_x2_id = ue_context_p->ue_context.secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity;
|
X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).SgNB_ue_x2_id = ue_context_p->ue_context.secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity;
|
||||||
|
|
||||||
//X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).rrc_buffer_size = CG_Config_size; //Need to verify correct value for the buffer_size
|
//X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).rrc_buffer_size = CG_Config_size; //Need to verify correct value for the buffer_size
|
||||||
// Send to X2 entity to transport to MeNB
|
// Send to X2 entity to transport to MeNB
|
||||||
asn_enc_rval_t enc_rval = uper_encode_to_buffer(&asn_DEF_NR_CG_Config,
|
asn_enc_rval_t enc_rval = uper_encode_to_buffer(&asn_DEF_NR_CG_Config,
|
||||||
@@ -258,6 +255,8 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
|
|||||||
1024);
|
1024);
|
||||||
X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).rrc_buffer_size = (enc_rval.encoded+7)>>3;
|
X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).rrc_buffer_size = (enc_rval.encoded+7)>>3;
|
||||||
itti_send_msg_to_task(TASK_X2AP, ENB_MODULE_ID_TO_INSTANCE(0), msg); //Check right id instead of hardcoding
|
itti_send_msg_to_task(TASK_X2AP, ENB_MODULE_ID_TO_INSTANCE(0), msg); //Check right id instead of hardcoding
|
||||||
|
} else if (get_softmodem_params()->do_ra) {
|
||||||
|
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, rrc->module_id, GNB_FLAG_YES, ue_context_p->ue_id_rnti, 0, 0,rrc->module_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
rrc->Nb_ue++;
|
rrc->Nb_ue++;
|
||||||
@@ -272,6 +271,15 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
|
|||||||
ue_context_p->ue_id_rnti,
|
ue_context_p->ue_id_rnti,
|
||||||
ue_context_p->ue_context.secondaryCellGroup);
|
ue_context_p->ue_context.secondaryCellGroup);
|
||||||
|
|
||||||
|
if(m == NULL){
|
||||||
|
LOG_W(RRC, "Calling RRC PDCP/RLC ASN1 request functions for protocol context %p with module_id %d, rnti %x, frame %d, subframe %d eNB_index %d \n", &ctxt,
|
||||||
|
ctxt.module_id,
|
||||||
|
ctxt.rnti,
|
||||||
|
ctxt.frame,
|
||||||
|
ctxt.subframe,
|
||||||
|
ctxt.eNB_index);
|
||||||
|
}
|
||||||
|
|
||||||
nr_rrc_pdcp_config_asn1_req(
|
nr_rrc_pdcp_config_asn1_req(
|
||||||
&ctxt,
|
&ctxt,
|
||||||
(NR_SRB_ToAddModList_t *) NULL,
|
(NR_SRB_ToAddModList_t *) NULL,
|
||||||
@@ -292,6 +300,8 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
|
|||||||
(LTE_PMCH_InfoList_r9_t *) NULL,
|
(LTE_PMCH_InfoList_r9_t *) NULL,
|
||||||
ue_context_p->ue_context.secondaryCellGroup->rlc_BearerToAddModList);
|
ue_context_p->ue_context.secondaryCellGroup->rlc_BearerToAddModList);
|
||||||
|
|
||||||
|
LOG_D(RRC, "%s:%d: done RRC PDCP/RLC ASN1 request for UE rnti %x\n", __FUNCTION__, __LINE__, ctxt.rnti);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void rrc_remove_nsa_user(gNB_RRC_INST *rrc, int rnti) {
|
void rrc_remove_nsa_user(gNB_RRC_INST *rrc, int rnti) {
|
||||||
|
|||||||
@@ -43,6 +43,7 @@
|
|||||||
#include "common/utils/nr/nr_common.h"
|
#include "common/utils/nr/nr_common.h"
|
||||||
#include "SIMULATION/TOOLS/sim.h"
|
#include "SIMULATION/TOOLS/sim.h"
|
||||||
#include "executables/softmodem-common.h"
|
#include "executables/softmodem-common.h"
|
||||||
|
#include "LAYER2/nr_rlc/nr_rlc_oai_api.h"
|
||||||
|
|
||||||
#define false 0
|
#define false 0
|
||||||
#define true 1
|
#define true 1
|
||||||
@@ -77,59 +78,13 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
|
|||||||
memset(secondaryCellGroup,0,sizeof(NR_CellGroupConfig_t));
|
memset(secondaryCellGroup,0,sizeof(NR_CellGroupConfig_t));
|
||||||
secondaryCellGroup->cellGroupId = scg_id;
|
secondaryCellGroup->cellGroupId = scg_id;
|
||||||
NR_RLC_BearerConfig_t *RLC_BearerConfig = calloc(1,sizeof(*RLC_BearerConfig));
|
NR_RLC_BearerConfig_t *RLC_BearerConfig = calloc(1,sizeof(*RLC_BearerConfig));
|
||||||
RLC_BearerConfig->logicalChannelIdentity = 4;
|
nr_rlc_bearer_init(RLC_BearerConfig);
|
||||||
RLC_BearerConfig->servedRadioBearer = calloc(1,sizeof(*RLC_BearerConfig->servedRadioBearer));
|
if (get_softmodem_params()->do_ra)
|
||||||
RLC_BearerConfig->servedRadioBearer->present = NR_RLC_BearerConfig__servedRadioBearer_PR_drb_Identity;
|
nr_drb_config(RLC_BearerConfig->rlc_Config, NR_RLC_Config_PR_um_Bi_Directional);
|
||||||
RLC_BearerConfig->servedRadioBearer->choice.drb_Identity=1;
|
else
|
||||||
RLC_BearerConfig->reestablishRLC=calloc(1,sizeof(*RLC_BearerConfig->reestablishRLC));
|
nr_drb_config(RLC_BearerConfig->rlc_Config, NR_RLC_Config_PR_am);
|
||||||
*RLC_BearerConfig->reestablishRLC=NR_RLC_BearerConfig__reestablishRLC_true;
|
nr_rlc_bearer_init_ul_spec(RLC_BearerConfig->mac_LogicalChannelConfig);
|
||||||
RLC_BearerConfig->rlc_Config=calloc(1,sizeof(*RLC_BearerConfig->rlc_Config));
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
|
|
||||||
// RLC UM Bi-directional Bearer configuration
|
|
||||||
RLC_BearerConfig->rlc_Config->present = NR_RLC_Config_PR_um_Bi_Directional;
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional = calloc(1,sizeof(*RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional));
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional->ul_UM_RLC.sn_FieldLength = calloc(1,sizeof(*RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional->ul_UM_RLC.sn_FieldLength));
|
|
||||||
*RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional->ul_UM_RLC.sn_FieldLength = NR_SN_FieldLengthUM_size12;
|
|
||||||
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional->dl_UM_RLC.sn_FieldLength = calloc(1,sizeof(*RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional->dl_UM_RLC.sn_FieldLength));
|
|
||||||
*RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional->dl_UM_RLC.sn_FieldLength = NR_SN_FieldLengthUM_size12;
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.um_Bi_Directional->dl_UM_RLC.t_Reassembly = NR_T_Reassembly_ms15;
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
// RLC AM Bearer configuration
|
|
||||||
RLC_BearerConfig->rlc_Config->present = NR_RLC_Config_PR_am;
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.am = calloc(1,sizeof(*RLC_BearerConfig->rlc_Config->choice.am));
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.am->ul_AM_RLC.sn_FieldLength = calloc(1,sizeof(*RLC_BearerConfig->rlc_Config->choice.am->ul_AM_RLC.sn_FieldLength));
|
|
||||||
*RLC_BearerConfig->rlc_Config->choice.am->ul_AM_RLC.sn_FieldLength = NR_SN_FieldLengthAM_size18;
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.am->ul_AM_RLC.t_PollRetransmit = NR_T_PollRetransmit_ms45;
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.am->ul_AM_RLC.pollPDU = NR_PollPDU_p64;
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.am->ul_AM_RLC.pollByte = NR_PollByte_kB500;
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.am->ul_AM_RLC.maxRetxThreshold = NR_UL_AM_RLC__maxRetxThreshold_t32;
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.am->dl_AM_RLC.sn_FieldLength = calloc(1,sizeof(*RLC_BearerConfig->rlc_Config->choice.am->dl_AM_RLC.sn_FieldLength));
|
|
||||||
*RLC_BearerConfig->rlc_Config->choice.am->dl_AM_RLC.sn_FieldLength = NR_SN_FieldLengthAM_size18;
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.am->dl_AM_RLC.t_Reassembly = NR_T_Reassembly_ms15;
|
|
||||||
RLC_BearerConfig->rlc_Config->choice.am->dl_AM_RLC.t_StatusProhibit = NR_T_StatusProhibit_ms15;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig = calloc(1,sizeof(*RLC_BearerConfig->mac_LogicalChannelConfig));
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters = calloc(1,sizeof(*RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters));
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->priority = 1;
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->prioritisedBitRate = NR_LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity;
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->bucketSizeDuration = NR_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50;
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->allowedServingCells = NULL;
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->allowedSCS_List = NULL;
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->maxPUSCH_Duration = NULL;
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->configuredGrantType1Allowed = NULL;
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->logicalChannelGroup = calloc(1,sizeof(*RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->logicalChannelGroup));
|
|
||||||
*RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->logicalChannelGroup = 1;
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->schedulingRequestID = NULL;
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->logicalChannelSR_Mask = false;
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->logicalChannelSR_DelayTimerApplied = false;
|
|
||||||
RLC_BearerConfig->mac_LogicalChannelConfig->ul_SpecificParameters->bitRateQueryProhibitTimer = NULL;
|
|
||||||
secondaryCellGroup->rlc_BearerToAddModList = calloc(1,sizeof(*secondaryCellGroup->rlc_BearerToAddModList));
|
secondaryCellGroup->rlc_BearerToAddModList = calloc(1,sizeof(*secondaryCellGroup->rlc_BearerToAddModList));
|
||||||
ASN_SEQUENCE_ADD(&secondaryCellGroup->rlc_BearerToAddModList->list, RLC_BearerConfig);
|
ASN_SEQUENCE_ADD(&secondaryCellGroup->rlc_BearerToAddModList->list, RLC_BearerConfig);
|
||||||
secondaryCellGroup->mac_CellGroupConfig=calloc(1,sizeof(*secondaryCellGroup->mac_CellGroupConfig));
|
secondaryCellGroup->mac_CellGroupConfig=calloc(1,sizeof(*secondaryCellGroup->mac_CellGroupConfig));
|
||||||
|
|||||||
Reference in New Issue
Block a user