cosmetic changes and duplicate code
This commit is contained in:
@@ -1384,7 +1384,6 @@ void *ru_thread( void *param ) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// At this point, all information for subframe has been received on FH interface
|
// At this point, all information for subframe has been received on FH interface
|
||||||
res = pullTpool(gNB->resp_L1, gNB->threadPool);
|
res = pullTpool(gNB->resp_L1, gNB->threadPool);
|
||||||
syncMsg = (processingData_L1_t *)NotifiedFifoData(res);
|
syncMsg = (processingData_L1_t *)NotifiedFifoData(res);
|
||||||
@@ -1396,7 +1395,6 @@ void *ru_thread( void *param ) {
|
|||||||
syncMsg->timestamp_tx = proc->timestamp_tx;
|
syncMsg->timestamp_tx = proc->timestamp_tx;
|
||||||
res->key = proc->tti_rx;
|
res->key = proc->tti_rx;
|
||||||
pushTpool(gNB->threadPool, res);
|
pushTpool(gNB->threadPool, res);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
printf( "Exiting ru_thread \n");
|
printf( "Exiting ru_thread \n");
|
||||||
|
|||||||
@@ -325,12 +325,6 @@ static void *nr_feptx_thread(void *param) {
|
|||||||
(void*)&ru->gNB_list[0]->common_vars.txdataF[aa%gNB_tx][txdataF_offset + l*fp->ofdm_symbol_size],
|
(void*)&ru->gNB_list[0]->common_vars.txdataF[aa%gNB_tx][txdataF_offset + l*fp->ofdm_symbol_size],
|
||||||
(fp->samples_per_slot_wCP>>1)*sizeof(int32_t));
|
(fp->samples_per_slot_wCP>>1)*sizeof(int32_t));
|
||||||
}
|
}
|
||||||
else if (ru->do_precoding == 0) {
|
|
||||||
int gNB_tx = ru->gNB_list[0]->frame_parms.nb_antennas_tx;
|
|
||||||
memcpy((void*)&ru->common.txdataF_BF[aa][l*fp->ofdm_symbol_size],
|
|
||||||
(void*)&ru->gNB_list[0]->common_vars.txdataF[aa%gNB_tx][txdataF_offset + l*fp->ofdm_symbol_size],
|
|
||||||
(fp->samples_per_slot_wCP>>1)*sizeof(int32_t));
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
bw = ru->beam_weights[0];
|
bw = ru->beam_weights[0];
|
||||||
for(i=0; i<fp->symbols_per_slot>>1; ++i){
|
for(i=0; i<fp->symbols_per_slot>>1; ++i){
|
||||||
|
|||||||
@@ -77,6 +77,13 @@ void dump_mac_stats(gNB_MAC_INST *gNB)
|
|||||||
int stroff=0;
|
int stroff=0;
|
||||||
for (int UE_id = UE_info->list.head; UE_id >= 0; UE_id = UE_info->list.next[UE_id]) {
|
for (int UE_id = UE_info->list.head; UE_id >= 0; UE_id = UE_info->list.next[UE_id]) {
|
||||||
stroff = sprintf(output,"UE ID %d RNTI %04x (%d/%d)\n", UE_id, UE_info->rnti[UE_id], num++, UE_info->num_UEs);
|
stroff = sprintf(output,"UE ID %d RNTI %04x (%d/%d)\n", UE_id, UE_info->rnti[UE_id], num++, UE_info->num_UEs);
|
||||||
|
LOG_I(NR_MAC, "UE ID %d RNTI %04x (%d/%d) PH %d dB PCMAX %d dBm\n",
|
||||||
|
UE_id,
|
||||||
|
UE_info->rnti[UE_id],
|
||||||
|
num++,
|
||||||
|
UE_info->num_UEs,
|
||||||
|
UE_info->UE_sched_ctrl[UE_id].ph,
|
||||||
|
UE_info->UE_sched_ctrl[UE_id].pcmax);
|
||||||
NR_mac_stats_t *stats = &UE_info->mac_stats[UE_id];
|
NR_mac_stats_t *stats = &UE_info->mac_stats[UE_id];
|
||||||
const int avg_rsrp = stats->num_rsrp_meas > 0 ? stats->cumul_rsrp / stats->num_rsrp_meas : 0;
|
const int avg_rsrp = stats->num_rsrp_meas > 0 ? stats->cumul_rsrp / stats->num_rsrp_meas : 0;
|
||||||
stroff+=sprintf(output+stroff,"UE %d: dlsch_rounds %d/%d/%d/%d, dlsch_errors %d, average RSRP %d (%d meas)\n",
|
stroff+=sprintf(output+stroff,"UE %d: dlsch_rounds %d/%d/%d/%d, dlsch_errors %d, average RSRP %d (%d meas)\n",
|
||||||
@@ -84,6 +91,12 @@ void dump_mac_stats(gNB_MAC_INST *gNB)
|
|||||||
stats->dlsch_rounds[0], stats->dlsch_rounds[1],
|
stats->dlsch_rounds[0], stats->dlsch_rounds[1],
|
||||||
stats->dlsch_rounds[2], stats->dlsch_rounds[3], stats->dlsch_errors,
|
stats->dlsch_rounds[2], stats->dlsch_rounds[3], stats->dlsch_errors,
|
||||||
avg_rsrp, stats->num_rsrp_meas);
|
avg_rsrp, stats->num_rsrp_meas);
|
||||||
|
LOG_I(NR_MAC, "UE %d: dlsch_rounds %d/%d/%d/%d, dlsch_errors %d, average RSRP %d (%d meas)\n",
|
||||||
|
UE_id,
|
||||||
|
stats->dlsch_rounds[0], stats->dlsch_rounds[1],
|
||||||
|
stats->dlsch_rounds[2], stats->dlsch_rounds[3], stats->dlsch_errors,
|
||||||
|
avg_rsrp, stats->num_rsrp_meas);
|
||||||
|
|
||||||
stats->num_rsrp_meas = 0;
|
stats->num_rsrp_meas = 0;
|
||||||
stats->cumul_rsrp = 0 ;
|
stats->cumul_rsrp = 0 ;
|
||||||
stroff+=sprintf(output+stroff,"UE %d: dlsch_total_bytes %d\n", UE_id, stats->dlsch_total_bytes);
|
stroff+=sprintf(output+stroff,"UE %d: dlsch_total_bytes %d\n", UE_id, stats->dlsch_total_bytes);
|
||||||
@@ -97,6 +110,17 @@ void dump_mac_stats(gNB_MAC_INST *gNB)
|
|||||||
"UE %d: ulsch_total_bytes_scheduled %d, ulsch_total_bytes_received %d\n",
|
"UE %d: ulsch_total_bytes_scheduled %d, ulsch_total_bytes_received %d\n",
|
||||||
UE_id,
|
UE_id,
|
||||||
stats->ulsch_total_bytes_scheduled, stats->ulsch_total_bytes_rx);
|
stats->ulsch_total_bytes_scheduled, stats->ulsch_total_bytes_rx);
|
||||||
|
LOG_I(NR_MAC, "UE %d: dlsch_total_bytes %d\n", UE_id, stats->dlsch_total_bytes);
|
||||||
|
LOG_I(NR_MAC, "UE %d: ulsch_rounds %d/%d/%d/%d, ulsch_DTX %d, ulsch_errors %d\n",
|
||||||
|
UE_id,
|
||||||
|
stats->ulsch_rounds[0], stats->ulsch_rounds[1],
|
||||||
|
stats->ulsch_rounds[2], stats->ulsch_rounds[3],
|
||||||
|
stats->ulsch_DTX,
|
||||||
|
stats->ulsch_errors);
|
||||||
|
LOG_I(NR_MAC,
|
||||||
|
"UE %d: ulsch_total_bytes_scheduled %d, ulsch_total_bytes_received %d\n",
|
||||||
|
UE_id,
|
||||||
|
stats->ulsch_total_bytes_scheduled, stats->ulsch_total_bytes_rx);
|
||||||
for (int lc_id = 0; lc_id < 63; lc_id++) {
|
for (int lc_id = 0; lc_id < 63; lc_id++) {
|
||||||
if (stats->lc_bytes_tx[lc_id] > 0) {
|
if (stats->lc_bytes_tx[lc_id] > 0) {
|
||||||
stroff+=sprintf(output+stroff, "UE %d: LCID %d: %d bytes TX\n", UE_id, lc_id, stats->lc_bytes_tx[lc_id]);
|
stroff+=sprintf(output+stroff, "UE %d: LCID %d: %d bytes TX\n", UE_id, lc_id, stats->lc_bytes_tx[lc_id]);
|
||||||
|
|||||||
@@ -932,10 +932,6 @@ boolean_t nr_rrc_pdcp_config_asn1_req(
|
|||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
if (drb2release_list != NULL) {
|
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|
||||||
free(kRRCenc);
|
free(kRRCenc);
|
||||||
free(kRRCint);
|
free(kRRCint);
|
||||||
free(kUPenc);
|
free(kUPenc);
|
||||||
|
|||||||
@@ -3043,20 +3043,20 @@ void nr_rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id) {
|
|||||||
RB_FOREACH(ue_context_p, rrc_nr_ue_tree_s, &(RC.nrrrc[ctxt_pP->module_id]->rrc_ue_head)) {
|
RB_FOREACH(ue_context_p, rrc_nr_ue_tree_s, &(RC.nrrrc[ctxt_pP->module_id]->rrc_ue_head)) {
|
||||||
ctxt_pP->rnti = ue_context_p->ue_id_rnti;
|
ctxt_pP->rnti = ue_context_p->ue_id_rnti;
|
||||||
|
|
||||||
if (fd) {
|
if (fd) {
|
||||||
if (ue_context_p->ue_context.Initialue_identity_5g_s_TMSI.presence == TRUE) {
|
if (ue_context_p->ue_context.Initialue_identity_5g_s_TMSI.presence == TRUE) {
|
||||||
fprintf(fd,"NR RRC UE rnti %x: S-TMSI %x failure timer %d/8\n",
|
fprintf(fd,"NR RRC UE rnti %x: S-TMSI %x failure timer %d/8\n",
|
||||||
ue_context_p->ue_id_rnti,
|
ue_context_p->ue_id_rnti,
|
||||||
ue_context_p->ue_context.Initialue_identity_5g_s_TMSI.fiveg_tmsi,
|
ue_context_p->ue_context.Initialue_identity_5g_s_TMSI.fiveg_tmsi,
|
||||||
ue_context_p->ue_context.ul_failure_timer);
|
ue_context_p->ue_context.ul_failure_timer);
|
||||||
} else {
|
} else {
|
||||||
fprintf(fd,"NR RRC UE rnti %x failure timer %d/8\n",
|
fprintf(fd,"NR RRC UE rnti %x failure timer %d/8\n",
|
||||||
ue_context_p->ue_id_rnti,
|
ue_context_p->ue_id_rnti,
|
||||||
ue_context_p->ue_context.ul_failure_timer);
|
ue_context_p->ue_context.ul_failure_timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ue_context_p->ue_context.UE_Capability_nr) {
|
if (ue_context_p->ue_context.UE_Capability_nr) {
|
||||||
fprintf(fd,"NR RRC UE cap: BW DL %x. BW UL %x, 256 QAM DL %s, 256 QAM UL %s, DL MIMO Layers %d UL MIMO Layers (CB) %d UL MIMO Layers (nonCB) %d\n",
|
fprintf(fd,"NR RRC UE cap: BW DL %x. BW UL %x, 256 QAM DL %s, 256 QAM UL %s, DL MIMO Layers %d UL MIMO Layers (CB) %d UL MIMO Layers (nonCB) %d\n",
|
||||||
get_dl_bw_mask(RC.nrrrc[0],ue_context_p->ue_context.UE_Capability_nr),
|
get_dl_bw_mask(RC.nrrrc[0],ue_context_p->ue_context.UE_Capability_nr),
|
||||||
get_ul_bw_mask(RC.nrrrc[0],ue_context_p->ue_context.UE_Capability_nr),
|
get_ul_bw_mask(RC.nrrrc[0],ue_context_p->ue_context.UE_Capability_nr),
|
||||||
is_dl_256QAM_supported(RC.nrrrc[0],ue_context_p->ue_context.UE_Capability_nr) == 1 ? "yes" : "no",
|
is_dl_256QAM_supported(RC.nrrrc[0],ue_context_p->ue_context.UE_Capability_nr) == 1 ? "yes" : "no",
|
||||||
@@ -3064,7 +3064,7 @@ void nr_rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id) {
|
|||||||
get_dl_mimo_layers(RC.nrrrc[0],ue_context_p->ue_context.UE_Capability_nr),
|
get_dl_mimo_layers(RC.nrrrc[0],ue_context_p->ue_context.UE_Capability_nr),
|
||||||
get_ul_mimo_layersCB(RC.nrrrc[0],ue_context_p->ue_context.UE_Capability_nr),
|
get_ul_mimo_layersCB(RC.nrrrc[0],ue_context_p->ue_context.UE_Capability_nr),
|
||||||
get_ul_mimo_layers(RC.nrrrc[0],ue_context_p->ue_context.UE_Capability_nr));
|
get_ul_mimo_layers(RC.nrrrc[0],ue_context_p->ue_context.UE_Capability_nr));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ue_context_p->ue_context.ul_failure_timer > 0) {
|
if (ue_context_p->ue_context.ul_failure_timer > 0) {
|
||||||
ue_context_p->ue_context.ul_failure_timer++;
|
ue_context_p->ue_context.ul_failure_timer++;
|
||||||
@@ -3125,88 +3125,6 @@ void nr_rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id) {
|
|||||||
|
|
||||||
if (fd) fclose(fd);
|
if (fd) fclose(fd);
|
||||||
|
|
||||||
ue_context_p = NULL;
|
|
||||||
fd=fopen("nrRRCstats.log","w");
|
|
||||||
RB_FOREACH(ue_context_p, rrc_nr_ue_tree_s, &(RC.nrrrc[ctxt_pP->module_id]->rrc_ue_head)) {
|
|
||||||
ctxt_pP->rnti = ue_context_p->ue_id_rnti;
|
|
||||||
|
|
||||||
if (fd) {
|
|
||||||
if (ue_context_p->ue_context.Initialue_identity_5g_s_TMSI.presence == TRUE) {
|
|
||||||
fprintf(fd,"NR RRC UE rnti %x: S-TMSI %x failure timer %d/8\n",
|
|
||||||
ue_context_p->ue_id_rnti,
|
|
||||||
ue_context_p->ue_context.Initialue_identity_5g_s_TMSI.fiveg_tmsi,
|
|
||||||
ue_context_p->ue_context.ul_failure_timer);
|
|
||||||
} else {
|
|
||||||
fprintf(fd,"NR RRC UE rnti %x failure timer %d/8\n",
|
|
||||||
ue_context_p->ue_id_rnti,
|
|
||||||
ue_context_p->ue_context.ul_failure_timer);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ue_context_p->ue_context.UE_Capability_nr) {
|
|
||||||
fprintf(fd,"NR RRC UE cap: BW DL %x. BW UL %x, 256 QAM DL %s, 256 QAM UL %s, DL MIMO Layers %d UL MIMO Layers (CB) %d UL MIMO Layers (nonCB) %d\n",
|
|
||||||
get_dl_bw_mask(RC.nrrrc[0],ue_context_p->ue_context.UE_Capability_nr),
|
|
||||||
get_ul_bw_mask(RC.nrrrc[0],ue_context_p->ue_context.UE_Capability_nr),
|
|
||||||
is_dl_256QAM_supported(RC.nrrrc[0],ue_context_p->ue_context.UE_Capability_nr) == 1 ? "yes" : "no",
|
|
||||||
is_ul_256QAM_supported(RC.nrrrc[0],ue_context_p->ue_context.UE_Capability_nr) == 1 ? "yes" : "no",
|
|
||||||
get_dl_mimo_layers(RC.nrrrc[0],ue_context_p->ue_context.UE_Capability_nr),
|
|
||||||
get_ul_mimo_layersCB(RC.nrrrc[0],ue_context_p->ue_context.UE_Capability_nr),
|
|
||||||
get_ul_mimo_layers(RC.nrrrc[0],ue_context_p->ue_context.UE_Capability_nr));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (ue_context_p->ue_context.ul_failure_timer > 0) {
|
|
||||||
ue_context_p->ue_context.ul_failure_timer++;
|
|
||||||
|
|
||||||
if (ue_context_p->ue_context.ul_failure_timer >= 20000) {
|
|
||||||
// remove UE after 20 seconds after MAC (or else) has indicated UL failure
|
|
||||||
LOG_I(RRC, "Removing UE %x instance, because of uplink failure timer timeout\n",
|
|
||||||
ue_context_p->ue_context.rnti);
|
|
||||||
if(ue_context_p->ue_context.StatusRrc >= NR_RRC_CONNECTED){
|
|
||||||
rrc_gNB_send_NGAP_UE_CONTEXT_RELEASE_REQ(
|
|
||||||
ctxt_pP->module_id,
|
|
||||||
ue_context_p,
|
|
||||||
NGAP_CAUSE_RADIO_NETWORK,
|
|
||||||
30);
|
|
||||||
}else{
|
|
||||||
mac_remove_nr_ue(ctxt_pP->module_id, ctxt_pP->rnti);
|
|
||||||
rrc_rlc_remove_ue(ctxt_pP);
|
|
||||||
pdcp_remove_UE(ctxt_pP);
|
|
||||||
|
|
||||||
/* remove RRC UE Context */
|
|
||||||
ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[ctxt_pP->module_id], ctxt_pP->rnti);
|
|
||||||
if (ue_context_p) {
|
|
||||||
rrc_gNB_remove_ue_context(ctxt_pP, RC.nrrrc[ctxt_pP->module_id], ue_context_p);
|
|
||||||
LOG_I(NR_RRC, "remove UE %x \n", ctxt_pP->rnti);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break; // break RB_FOREACH
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ue_context_p->ue_context.ue_release_timer_rrc > 0) {
|
|
||||||
ue_context_p->ue_context.ue_release_timer_rrc++;
|
|
||||||
|
|
||||||
if (ue_context_p->ue_context.ue_release_timer_rrc >= ue_context_p->ue_context.ue_release_timer_thres_rrc) {
|
|
||||||
LOG_I(NR_RRC, "Removing UE %x instance after UE_CONTEXT_RELEASE_Complete (ue_release_timer_rrc timeout)\n",
|
|
||||||
ue_context_p->ue_context.rnti);
|
|
||||||
ue_context_p->ue_context.ue_release_timer_rrc = 0;
|
|
||||||
|
|
||||||
mac_remove_nr_ue(ctxt_pP->module_id, ctxt_pP->rnti);
|
|
||||||
rrc_rlc_remove_ue(ctxt_pP);
|
|
||||||
pdcp_remove_UE(ctxt_pP);
|
|
||||||
|
|
||||||
/* remove RRC UE Context */
|
|
||||||
ue_context_p = rrc_gNB_get_ue_context(RC.nrrrc[ctxt_pP->module_id], ctxt_pP->rnti);
|
|
||||||
if (ue_context_p) {
|
|
||||||
rrc_gNB_remove_ue_context(ctxt_pP, RC.nrrrc[ctxt_pP->module_id], ue_context_p);
|
|
||||||
LOG_I(NR_RRC, "remove UE %x \n", ctxt_pP->rnti);
|
|
||||||
}
|
|
||||||
|
|
||||||
break; // break RB_FOREACH
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fclose(fd);
|
|
||||||
|
|
||||||
/* send a tick to x2ap */
|
/* send a tick to x2ap */
|
||||||
if (is_x2ap_enabled()){
|
if (is_x2ap_enabled()){
|
||||||
|
|||||||
@@ -787,7 +787,6 @@ rrc_gNB_process_NGAP_DOWNLINK_NAS(
|
|||||||
struct rrc_gNB_ue_context_s *ue_context_p = NULL;
|
struct rrc_gNB_ue_context_s *ue_context_p = NULL;
|
||||||
protocol_ctxt_t ctxt;
|
protocol_ctxt_t ctxt;
|
||||||
memset(&ctxt, 0, sizeof(protocol_ctxt_t));
|
memset(&ctxt, 0, sizeof(protocol_ctxt_t));
|
||||||
|
|
||||||
ue_initial_id = NGAP_DOWNLINK_NAS (msg_p).ue_initial_id;
|
ue_initial_id = NGAP_DOWNLINK_NAS (msg_p).ue_initial_id;
|
||||||
gNB_ue_ngap_id = NGAP_DOWNLINK_NAS (msg_p).gNB_ue_ngap_id;
|
gNB_ue_ngap_id = NGAP_DOWNLINK_NAS (msg_p).gNB_ue_ngap_id;
|
||||||
ue_context_p = rrc_gNB_get_ue_context_from_ngap_ids(instance, ue_initial_id, gNB_ue_ngap_id);
|
ue_context_p = rrc_gNB_get_ue_context_from_ngap_ids(instance, ue_initial_id, gNB_ue_ngap_id);
|
||||||
@@ -876,7 +875,6 @@ rrc_gNB_process_NGAP_DOWNLINK_NAS(
|
|||||||
{
|
{
|
||||||
// rrc_mac_config_req_gNB
|
// rrc_mac_config_req_gNB
|
||||||
#ifdef ITTI_SIM
|
#ifdef ITTI_SIM
|
||||||
MessageDef *message_p;
|
|
||||||
uint8_t *message_buffer;
|
uint8_t *message_buffer;
|
||||||
message_buffer = itti_malloc (TASK_RRC_GNB, TASK_RRC_UE_SIM, length);
|
message_buffer = itti_malloc (TASK_RRC_GNB, TASK_RRC_UE_SIM, length);
|
||||||
memcpy (message_buffer, buffer, length);
|
memcpy (message_buffer, buffer, length);
|
||||||
|
|||||||
@@ -645,7 +645,7 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
AssertFatal(1==0,"Shouldn't be here\n");
|
AssertFatal(1==0,"Shouldn't be here\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
samples_received=0;
|
samples_received=0;
|
||||||
while (samples_received != nsamps) {
|
while (samples_received != nsamps) {
|
||||||
|
|||||||
Reference in New Issue
Block a user