Commit 26ce3333 authored by Navid Nikaein's avatar Navid Nikaein

* fix issues foe multi UE scenarios in MAC

* add target MCS for DL and UL for LTE softmodem
* make RLC message print for ITTI an option



git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5762 818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent 69025978
...@@ -506,11 +506,11 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, ...@@ -506,11 +506,11 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
#ifdef USER_MODE // need to be adapted for the emulation in the kernel space #ifdef USER_MODE // need to be adapted for the emulation in the kernel space
if (uniformrandom() < bler) { if (uniformrandom() < bler) {
LOG_I(OCM,"abstraction_decoding failed (mcs=%d, sinr_eff=%f, bler=%f)\n",mcs,sinr_eff,bler); LOG_I(OCM,"abstraction_decoding failed (mcs=%d, sinr_eff=%f, bler=%f, TM %d)\n",mcs,sinr_eff,bler, TM);
return(0); return(1);
} }
else { else {
LOG_I(OCM,"abstraction_decoding successful (mcs=%d, sinr_eff=%f, bler=%f)\n",mcs,sinr_eff,bler); LOG_I(OCM,"abstraction_decoding successful (mcs=%d, sinr_eff=%f, bler=%f, TM %d)\n",mcs,sinr_eff,bler, TM);
return(1); return(1);
} }
#endif #endif
......
...@@ -418,21 +418,19 @@ void schedule_ue_spec(module_id_t module_idP, ...@@ -418,21 +418,19 @@ void schedule_ue_spec(module_id_t module_idP,
sdu_length_total=0; sdu_length_total=0;
num_sdus=0; num_sdus=0;
if (openair_daq_vars.target_ue_dl_mcs <= 0) {
/* /*
DevCheck(((eNB_UE_stats->DL_cqi[0] < MIN_CQI_VALUE) || (eNB_UE_stats->DL_cqi[0] > MAX_CQI_VALUE)), DevCheck(((eNB_UE_stats->DL_cqi[0] < MIN_CQI_VALUE) || (eNB_UE_stats->DL_cqi[0] > MAX_CQI_VALUE)),
eNB_UE_stats->DL_cqi[0], MIN_CQI_VALUE, MAX_CQI_VALUE); eNB_UE_stats->DL_cqi[0], MIN_CQI_VALUE, MAX_CQI_VALUE);
*/ */
eNB_UE_stats->dlsch_mcs1 = cqi_to_mcs[eNB_UE_stats->DL_cqi[0]]; eNB_UE_stats->dlsch_mcs1 = cqi_to_mcs[eNB_UE_stats->DL_cqi[0]];
LOG_T(MAC,"CQI %d\n",eNB_UE_stats->DL_cqi[0]); eNB_UE_stats->dlsch_mcs1 = cmin(eNB_UE_stats->dlsch_mcs1, openair_daq_vars.target_ue_dl_mcs);
}
else
eNB_UE_stats->dlsch_mcs1 = openair_daq_vars.target_ue_dl_mcs;
#ifdef EXMIMO #ifdef EXMIMO
if (mac_xface->get_transmission_mode(module_idP,CC_id, rnti)==5) if (mac_xface->get_transmission_mode(module_idP,CC_id, rnti)==5)
eNB_UE_stats->dlsch_mcs1 = cmin(eNB_UE_stats->dlsch_mcs1,16); eNB_UE_stats->dlsch_mcs1 = cmin(eNB_UE_stats->dlsch_mcs1,16);
#endif #endif
// store stats // store stats
UE_list->eNB_UE_stats[CC_id][UE_id].dl_cqi= eNB_UE_stats->DL_cqi[0]; UE_list->eNB_UE_stats[CC_id][UE_id].dl_cqi= eNB_UE_stats->DL_cqi[0];
// initializing the rb allocation indicator for each UE // initializing the rb allocation indicator for each UE
...@@ -637,7 +635,8 @@ void schedule_ue_spec(module_id_t module_idP, ...@@ -637,7 +635,8 @@ void schedule_ue_spec(module_id_t module_idP,
header_len_dcch = 2; // 2 bytes DCCH SDU subheader header_len_dcch = 2; // 2 bytes DCCH SDU subheader
if ( TBS-ta_len-header_len_dcch > 0 )
{
rlc_status = mac_rlc_status_ind( rlc_status = mac_rlc_status_ind(
module_idP, module_idP,
UE_id, UE_id,
...@@ -676,8 +675,10 @@ void schedule_ue_spec(module_id_t module_idP, ...@@ -676,8 +675,10 @@ void schedule_ue_spec(module_id_t module_idP,
header_len_dcch = 0; header_len_dcch = 0;
sdu_length_total = 0; sdu_length_total = 0;
} }
}
// check for DCCH1 and update header information (assume 2 byte sub-header) // check for DCCH1 and update header information (assume 2 byte sub-header)
if (TBS-ta_len-header_len_dcch-sdu_length_total > 0 )
{
rlc_status = mac_rlc_status_ind( rlc_status = mac_rlc_status_ind(
module_idP, module_idP,
UE_id, UE_id,
...@@ -688,7 +689,8 @@ void schedule_ue_spec(module_id_t module_idP, ...@@ -688,7 +689,8 @@ void schedule_ue_spec(module_id_t module_idP,
(TBS-ta_len-header_len_dcch-sdu_length_total)); // transport block set size less allocations for timing advance and (TBS-ta_len-header_len_dcch-sdu_length_total)); // transport block set size less allocations for timing advance and
// DCCH SDU // DCCH SDU
if (rlc_status.bytes_in_buffer > 0) { if (rlc_status.bytes_in_buffer > 0)
{
LOG_D(MAC,"[eNB %d], Frame %d, DCCH1->DLSCH, Requesting %d bytes from RLC (RRC message)\n", LOG_D(MAC,"[eNB %d], Frame %d, DCCH1->DLSCH, Requesting %d bytes from RLC (RRC message)\n",
module_idP,frameP,TBS-header_len_dcch-sdu_length_total); module_idP,frameP,TBS-header_len_dcch-sdu_length_total);
sdu_lengths[num_sdus] += mac_rlc_data_req( sdu_lengths[num_sdus] += mac_rlc_data_req(
...@@ -708,6 +710,7 @@ void schedule_ue_spec(module_id_t module_idP, ...@@ -708,6 +710,7 @@ void schedule_ue_spec(module_id_t module_idP,
num_sdus++; num_sdus++;
LOG_D(MAC,"[eNB %d] Got %d bytes for DCCH from RLC\n",module_idP,sdu_lengths[0]); LOG_D(MAC,"[eNB %d] Got %d bytes for DCCH from RLC\n",module_idP,sdu_lengths[0]);
} }
}
// check for DTCH and update header information // check for DTCH and update header information
// here we should loop over all possible DTCH // here we should loop over all possible DTCH
...@@ -717,6 +720,8 @@ void schedule_ue_spec(module_id_t module_idP, ...@@ -717,6 +720,8 @@ void schedule_ue_spec(module_id_t module_idP,
module_idP,frameP,DTCH,TBS, module_idP,frameP,DTCH,TBS,
TBS-ta_len-header_len_dcch-sdu_length_total-header_len_dtch); TBS-ta_len-header_len_dcch-sdu_length_total-header_len_dtch);
if (TBS-ta_len-header_len_dcch-sdu_length_total-header_len_dtch > 0 )
{
rlc_status = mac_rlc_status_ind( rlc_status = mac_rlc_status_ind(
module_idP, module_idP,
UE_id, UE_id,
...@@ -752,6 +757,7 @@ void schedule_ue_spec(module_id_t module_idP, ...@@ -752,6 +757,7 @@ void schedule_ue_spec(module_id_t module_idP,
else { else {
header_len_dtch = 0; header_len_dtch = 0;
} }
}
// there is a payload // there is a payload
if (((sdu_length_total + header_len_dcch + header_len_dtch )> 0)) { if (((sdu_length_total + header_len_dcch + header_len_dtch )> 0)) {
......
...@@ -168,6 +168,8 @@ void assign_rbs_required (module_id_t Mod_id, ...@@ -168,6 +168,8 @@ void assign_rbs_required (module_id_t Mod_id,
eNB_UE_stats[CC_id]->DL_cqi[0], MIN_CQI_VALUE, MAX_CQI_VALUE); eNB_UE_stats[CC_id]->DL_cqi[0], MIN_CQI_VALUE, MAX_CQI_VALUE);
*/ */
eNB_UE_stats[CC_id]->dlsch_mcs1=cqi_to_mcs[eNB_UE_stats[CC_id]->DL_cqi[0]]; eNB_UE_stats[CC_id]->dlsch_mcs1=cqi_to_mcs[eNB_UE_stats[CC_id]->DL_cqi[0]];
eNB_UE_stats[CC_id]->dlsch_mcs1 = cmin(eNB_UE_stats[CC_id]->dlsch_mcs1,openair_daq_vars.target_ue_dl_mcs);
} }
// provide the list of CCs sorted according to MCS // provide the list of CCs sorted according to MCS
for (i=0;i<UE_list->numactiveCCs[UE_id];i++) { for (i=0;i<UE_list->numactiveCCs[UE_id];i++) {
...@@ -194,13 +196,16 @@ void assign_rbs_required (module_id_t Mod_id, ...@@ -194,13 +196,16 @@ void assign_rbs_required (module_id_t Mod_id,
LOG_D(MAC,"[preprocessor] assign RB for UE %d\n",UE_id); LOG_D(MAC,"[preprocessor] assign RB for UE %d\n",UE_id);
for (i=0;i<UE_list->numactiveCCs[UE_id];i++) { for (i=0;i<UE_list->numactiveCCs[UE_id];i++) {
CC_id = UE_list->ordered_CCids[i][UE_id]; CC_id = UE_list->ordered_CCids[i][UE_id];
LOG_D(MAC,"[preprocessor] assign RB for UE %d\n",UE_id);
if (eNB_UE_stats[CC_id]->dlsch_mcs1==0) nb_rbs_required[CC_id][UE_id] = 4; // don't let the TBS get too small if (eNB_UE_stats[CC_id]->dlsch_mcs1==0) nb_rbs_required[CC_id][UE_id] = 4; // don't let the TBS get too small
else nb_rbs_required[CC_id][UE_id] = min_rb_unit[CC_id]; else nb_rbs_required[CC_id][UE_id] = min_rb_unit[CC_id];
TBS = mac_xface->get_TBS_DL(eNB_UE_stats[CC_id]->dlsch_mcs1,nb_rbs_required[CC_id][UE_id]); TBS = mac_xface->get_TBS_DL(eNB_UE_stats[CC_id]->dlsch_mcs1,nb_rbs_required[CC_id][UE_id]);
LOG_D(MAC,"[preprocessor] start RB assignement for UE %d CC_id %d dl buffer %d (RB unit %d, MCS %d, TBS %d) \n",
UE_id, CC_id, UE_list->UE_template[pCCid][UE_id].dl_buffer_total,
nb_rbs_required[CC_id][UE_id],eNB_UE_stats[CC_id]->dlsch_mcs1,TBS);
/* calculating required number of RBs for each UE */ /* calculating required number of RBs for each UE */
while (TBS < UE_list->UE_template[UE_id]->dl_buffer_total) { while (TBS < UE_list->UE_template[pCCid][UE_id].dl_buffer_total) {
nb_rbs_required[CC_id][UE_id] += min_rb_unit[CC_id]; nb_rbs_required[CC_id][UE_id] += min_rb_unit[CC_id];
if (nb_rbs_required[CC_id][UE_id] > frame_parms[CC_id]->N_RB_DL) { if (nb_rbs_required[CC_id][UE_id] > frame_parms[CC_id]->N_RB_DL) {
TBS = mac_xface->get_TBS_DL(eNB_UE_stats[CC_id]->dlsch_mcs1,frame_parms[CC_id]->N_RB_DL); TBS = mac_xface->get_TBS_DL(eNB_UE_stats[CC_id]->dlsch_mcs1,frame_parms[CC_id]->N_RB_DL);
...@@ -209,8 +214,8 @@ void assign_rbs_required (module_id_t Mod_id, ...@@ -209,8 +214,8 @@ void assign_rbs_required (module_id_t Mod_id,
} }
TBS = mac_xface->get_TBS_DL(eNB_UE_stats[CC_id]->dlsch_mcs1,nb_rbs_required[CC_id][UE_id]); TBS = mac_xface->get_TBS_DL(eNB_UE_stats[CC_id]->dlsch_mcs1,nb_rbs_required[CC_id][UE_id]);
} // end of while } // end of while
LOG_D(MAC,"[eNB %d] Frame %d: UE %d on CC %d nb_required RB %d (TBS %d, mcs %d)\n", LOG_D(MAC,"[eNB %d] Frame %d: UE %d on CC %d: RB unit %d, nb_required RB %d (TBS %d, mcs %d)\n",
Mod_id, frameP,UE_id, CC_id, nb_rbs_required[CC_id][UE_id], TBS, eNB_UE_stats[CC_id]->dlsch_mcs1); Mod_id, frameP,UE_id, CC_id, min_rb_unit[CC_id], nb_rbs_required[CC_id][UE_id], TBS, eNB_UE_stats[CC_id]->dlsch_mcs1);
} }
} }
} }
......
...@@ -48,7 +48,8 @@ ...@@ -48,7 +48,8 @@
#include "rlc_um_very_simple_test.h" #include "rlc_um_very_simple_test.h"
#define DEBUG_RLC_UM_TX_STATUS 1 #define DEBUG_RLC_UM_TX_STATUS 1
#define TRACE_RLC_UM_PDU 1 // NN --> LG: this could become a perf bottleneck, I added this to the makefile.
//#define TRACE_RLC_UM_PDU 1
#ifdef TRACE_RLC_UM_PDU #ifdef TRACE_RLC_UM_PDU
char message_string[10000]; char message_string[10000];
...@@ -663,7 +664,7 @@ rlc_um_data_req (void *rlc_pP, frame_t frameP, mem_block_t *sdu_pP) ...@@ -663,7 +664,7 @@ rlc_um_data_req (void *rlc_pP, frame_t frameP, mem_block_t *sdu_pP)
rlc_p->stat_tx_pdcp_sdu += 1; rlc_p->stat_tx_pdcp_sdu += 1;
rlc_p->stat_tx_pdcp_bytes += ((struct rlc_um_tx_sdu_management *) (sdu_pP->data))->sdu_size; rlc_p->stat_tx_pdcp_bytes += ((struct rlc_um_tx_sdu_management *) (sdu_pP->data))->sdu_size;
# if defined(ENABLE_ITTI) # if defined(TRACE_RLC_UM_PDU)
data_offset = sizeof (struct rlc_um_data_req_alloc); data_offset = sizeof (struct rlc_um_data_req_alloc);
data_size = ((struct rlc_um_tx_sdu_management *)(sdu_pP->data))->sdu_size; data_size = ((struct rlc_um_tx_sdu_management *)(sdu_pP->data))->sdu_size;
message_string_size += sprintf(&message_string[message_string_size], "Bearer : %u\n", rlc_p->rb_id); message_string_size += sprintf(&message_string[message_string_size], "Bearer : %u\n", rlc_p->rb_id);
...@@ -696,6 +697,7 @@ rlc_um_data_req (void *rlc_pP, frame_t frameP, mem_block_t *sdu_pP) ...@@ -696,6 +697,7 @@ rlc_um_data_req (void *rlc_pP, frame_t frameP, mem_block_t *sdu_pP)
} }
message_string_size += sprintf(&message_string[message_string_size], " |\n"); message_string_size += sprintf(&message_string[message_string_size], " |\n");
# if defined(ENABLE_ITTI)
msg_p = itti_alloc_new_message_sized (rlc_p->is_enb > 0 ? TASK_RLC_ENB:TASK_RLC_UE , RLC_UM_SDU_REQ, message_string_size + sizeof (IttiMsgText)); msg_p = itti_alloc_new_message_sized (rlc_p->is_enb > 0 ? TASK_RLC_ENB:TASK_RLC_UE , RLC_UM_SDU_REQ, message_string_size + sizeof (IttiMsgText));
msg_p->ittiMsg.rlc_um_sdu_req.size = message_string_size; msg_p->ittiMsg.rlc_um_sdu_req.size = message_string_size;
memcpy(&msg_p->ittiMsg.rlc_um_sdu_req.text, message_string, message_string_size); memcpy(&msg_p->ittiMsg.rlc_um_sdu_req.text, message_string, message_string_size);
...@@ -705,6 +707,9 @@ rlc_um_data_req (void *rlc_pP, frame_t frameP, mem_block_t *sdu_pP) ...@@ -705,6 +707,9 @@ rlc_um_data_req (void *rlc_pP, frame_t frameP, mem_block_t *sdu_pP)
} else { } else {
itti_send_msg_to_task(TASK_UNKNOWN, rlc_p->ue_module_id + NB_eNB_INST, msg_p); itti_send_msg_to_task(TASK_UNKNOWN, rlc_p->ue_module_id + NB_eNB_INST, msg_p);
} }
#else
LOG_T(RLC, "%s", message_string);
#endif
# endif # endif
} else { } else {
......
...@@ -262,7 +262,11 @@ rlc_um_init (rlc_um_entity_t * const rlc_pP) ...@@ -262,7 +262,11 @@ rlc_um_init (rlc_um_entity_t * const rlc_pP)
rlc_pP->tx_header_min_length_in_bytes = 2; rlc_pP->tx_header_min_length_in_bytes = 2;
// SPARE : not 3GPP // SPARE : not 3GPP
#ifdef JUMBO_FRAME
rlc_pP->size_input_sdus_buffer =1024;
#else
rlc_pP->size_input_sdus_buffer =128; rlc_pP->size_input_sdus_buffer =128;
#endif
if ((rlc_pP->input_sdus == NULL) && (rlc_pP->size_input_sdus_buffer > 0)) { if ((rlc_pP->input_sdus == NULL) && (rlc_pP->size_input_sdus_buffer > 0)) {
rlc_pP->input_sdus = calloc(1 , rlc_pP->size_input_sdus_buffer * sizeof (void *)); rlc_pP->input_sdus = calloc(1 , rlc_pP->size_input_sdus_buffer * sizeof (void *));
......
...@@ -510,7 +510,7 @@ rlc_op_status_t rlc_data_req (const module_id_t enb_module_idP, ...@@ -510,7 +510,7 @@ rlc_op_status_t rlc_data_req (const module_id_t enb_module_idP,
((struct rlc_um_data_req *) (new_sdu_p->data))->data_offset = sizeof (struct rlc_um_data_req_alloc); ((struct rlc_um_data_req *) (new_sdu_p->data))->data_offset = sizeof (struct rlc_um_data_req_alloc);
free_mem_block(sdu_pP); free_mem_block(sdu_pP);
LOG_D(RLC, "%s\n",RLC_FG_BRIGHT_COLOR_RED); //LOG_D(RLC, "%s\n",RLC_FG_BRIGHT_COLOR_RED);
LOG_D(RLC, "[FRAME %5u][%s][%s][INST %u/%u][%s %u][--- RLC_UM_DATA_REQ/%d Bytes --->][RLC_UM][INST %u/%u][%s %u]\n", LOG_D(RLC, "[FRAME %5u][%s][%s][INST %u/%u][%s %u][--- RLC_UM_DATA_REQ/%d Bytes --->][RLC_UM][INST %u/%u][%s %u]\n",
frameP, frameP,
(enb_flagP) ? "eNB" : "UE", (enb_flagP) ? "eNB" : "UE",
...@@ -524,7 +524,7 @@ rlc_op_status_t rlc_data_req (const module_id_t enb_module_idP, ...@@ -524,7 +524,7 @@ rlc_op_status_t rlc_data_req (const module_id_t enb_module_idP,
ue_module_idP, ue_module_idP,
(srb_flagP) ? "SRB" : "DRB", (srb_flagP) ? "SRB" : "DRB",
rb_idP); rb_idP);
LOG_D(RLC, "%s\n",RLC_FG_COLOR_DEFAULT); //LOG_D(RLC, "%s\n",RLC_FG_COLOR_DEFAULT);
rlc_um_data_req(&rlc_union_p->rlc.um, frameP, new_sdu_p); rlc_um_data_req(&rlc_union_p->rlc.um, frameP, new_sdu_p);
//free_mem_block(new_sdu); //free_mem_block(new_sdu);
......
...@@ -103,17 +103,17 @@ private_mem_block(void check_free_mem_block (mem_block_t * leP);) ...@@ -103,17 +103,17 @@ private_mem_block(void check_free_mem_block (mem_block_t * leP);)
# define MEM_MNGT_MB4_BLOCK_SIZE MEM_MNGT_MB0_BLOCK_SIZE*16 # define MEM_MNGT_MB4_BLOCK_SIZE MEM_MNGT_MB0_BLOCK_SIZE*16
// 1024 // 1024
# define MEM_MNGT_MB4_NB_BLOCKS 512 * MEM_SCALE # define MEM_MNGT_MB4_NB_BLOCKS 1024 * MEM_SCALE
# define MEM_MNGT_POOL_ID4 4 # define MEM_MNGT_POOL_ID4 4
# define MEM_MNGT_MB5_BLOCK_SIZE MEM_MNGT_MB0_BLOCK_SIZE*32 # define MEM_MNGT_MB5_BLOCK_SIZE MEM_MNGT_MB0_BLOCK_SIZE*32
// 2048 // 2048
# define MEM_MNGT_MB5_NB_BLOCKS 512 * MEM_SCALE // LG WAS 1024 # define MEM_MNGT_MB5_NB_BLOCKS 1024 * MEM_SCALE // LG WAS 1024
# define MEM_MNGT_POOL_ID5 5 # define MEM_MNGT_POOL_ID5 5
# define MEM_MNGT_MB6_BLOCK_SIZE MEM_MNGT_MB0_BLOCK_SIZE*64 # define MEM_MNGT_MB6_BLOCK_SIZE MEM_MNGT_MB0_BLOCK_SIZE*64
// 4096 // 4096
# define MEM_MNGT_MB6_NB_BLOCKS 128 * MEM_SCALE // LG WAS 256 # define MEM_MNGT_MB6_NB_BLOCKS 1024 * MEM_SCALE // LG WAS 256
# define MEM_MNGT_POOL_ID6 6 # define MEM_MNGT_POOL_ID6 6
# define MEM_MNGT_MB7_BLOCK_SIZE MEM_MNGT_MB0_BLOCK_SIZE*128 # define MEM_MNGT_MB7_BLOCK_SIZE MEM_MNGT_MB0_BLOCK_SIZE*128
......
...@@ -262,7 +262,7 @@ Send Packets when: ...@@ -262,7 +262,7 @@ Send Packets when:
otg_info->size_background[src][dst]=g_otg->aggregation_level[src][dst][application]*otg_info->size_background[src][dst]; otg_info->size_background[src][dst]=g_otg->aggregation_level[src][dst][application]*otg_info->size_background[src][dst];
else{ else{
//otg_info->size_background[src][dst]=PAYLOAD_MAX; //otg_info->size_background[src][dst]=PAYLOAD_MAX;
LOG_E(OTG,"[BACKGROUND] Aggregated packet larger than PAYLOAD_MAX, payload is limited to PAYLOAD_MAX %d\n"); LOG_E(OTG,"[BACKGROUND] Aggregated packet larger than PAYLOAD_MAX, payload is limited to %d\n", PAYLOAD_MAX);
} }
header =random_string(header_size_gen_background(src,dst), g_otg->packet_gen_type, HEADER_ALPHABET); header =random_string(header_size_gen_background(src,dst), g_otg->packet_gen_type, HEADER_ALPHABET);
payload = random_string(otg_info->size_background[src][dst], RANDOM_STRING, PAYLOAD_ALPHABET); payload = random_string(otg_info->size_background[src][dst], RANDOM_STRING, PAYLOAD_ALPHABET);
...@@ -466,7 +466,7 @@ int check_data_transmit(int src,int dst, int app, int ctime){ ...@@ -466,7 +466,7 @@ int check_data_transmit(int src,int dst, int app, int ctime){
/* if the aggregated size is less than PAYLOAD_MAX the traffic is aggregated, otherwise size=PAYLOAD_MAX */ /* if the aggregated size is less than PAYLOAD_MAX the traffic is aggregated, otherwise size=PAYLOAD_MAX */
if (size>=(PAYLOAD_MAX-(sizeof(otg_hdr_info_t) + sizeof(otg_hdr_t) + otg_info->header_size[src][dst]))) { if (size>=(PAYLOAD_MAX-(sizeof(otg_hdr_info_t) + sizeof(otg_hdr_t) + otg_info->header_size[src][dst]))) {
//size=PAYLOAD_MAX- (sizeof(otg_hdr_info_t) + sizeof(otg_hdr_t) + otg_info->header_size[src][dst]); //size=PAYLOAD_MAX- (sizeof(otg_hdr_info_t) + sizeof(otg_hdr_t) + otg_info->header_size[src][dst]);
LOG_E(OTG,"Aggregated packet larger than PAYLOAD_MAX, payload is limited to PAYLOAD_MAX \n"); LOG_E(OTG,"Aggregated packet larger than PAYLOAD_MAX, payload is limited to %d \n", PAYLOAD_MAX );
} }
} //check if there is background traffic to generate } //check if there is background traffic to generate
......
...@@ -301,6 +301,10 @@ static int mbox_bounds[20] = {8,16,24,30,38,46,54,60,68,7 ...@@ -301,6 +301,10 @@ static int mbox_bounds[20] = {8,16,24,30,38,46,54,60,68,7
static LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]; static LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs];
int multi_thread=1; int multi_thread=1;
// this allows
uint32_t target_dl_mcs = 28;
uint32_t target_ul_mcs = 8;
int16_t glog_level=LOG_DEBUG; int16_t glog_level=LOG_DEBUG;
int16_t glog_verbosity=LOG_MED; int16_t glog_verbosity=LOG_MED;
...@@ -1735,7 +1739,7 @@ static void get_options (int argc, char **argv) { ...@@ -1735,7 +1739,7 @@ static void get_options (int argc, char **argv) {
{"no-L2-connect", no_argument, NULL, LONG_OPTION_NO_L2_CONNECT}, {"no-L2-connect", no_argument, NULL, LONG_OPTION_NO_L2_CONNECT},
{NULL, 0, NULL, 0}}; {NULL, 0, NULL, 0}};
while ((c = getopt_long (argc, argv, "C:dK:g:G:qO:SUVRMr:s:",long_options,NULL)) != -1) { while ((c = getopt_long (argc, argv, "C:dK:g:G:qO:m:SUVRMr:s:t:",long_options,NULL)) != -1) {
switch (c) { switch (c) {
case LONG_OPTION_ULSCH_MAX_CONSECUTIVE_ERRORS: case LONG_OPTION_ULSCH_MAX_CONSECUTIVE_ERRORS:
ULSCH_max_consecutive_errors = atoi(optarg); ULSCH_max_consecutive_errors = atoi(optarg);
...@@ -1806,6 +1810,13 @@ static void get_options (int argc, char **argv) { ...@@ -1806,6 +1810,13 @@ static void get_options (int argc, char **argv) {
UE_flag = 1; UE_flag = 1;
break; break;
case 'm':
target_dl_mcs = atoi (optarg);
break;
case 't':
target_ul_mcs = atoi (optarg);
break;
case 'V': case 'V':
ouput_vcd = 1; ouput_vcd = 1;
break; break;
...@@ -2240,9 +2251,9 @@ int main(int argc, char **argv) { ...@@ -2240,9 +2251,9 @@ int main(int argc, char **argv) {
NB_INST=1; NB_INST=1;
openair_daq_vars.ue_dl_rb_alloc=0x1fff; openair_daq_vars.ue_dl_rb_alloc=0x1fff;
openair_daq_vars.target_ue_dl_mcs=20; openair_daq_vars.target_ue_dl_mcs=target_dl_mcs;
openair_daq_vars.ue_ul_nb_rb=6; openair_daq_vars.ue_ul_nb_rb=6;
openair_daq_vars.target_ue_ul_mcs=6; openair_daq_vars.target_ue_ul_mcs=target_ul_mcs;
} }
......
...@@ -11,8 +11,8 @@ ...@@ -11,8 +11,8 @@
<TOPOLOGY_CONFIG> <TOPOLOGY_CONFIG>
<AREA> <AREA>
<X_m>500</X_m> <X_m>1000</X_m>
<Y_m>500</Y_m> <Y_m>1000</Y_m>
</AREA> </AREA>
<MOBILITY> <MOBILITY>
<UE_MOBILITY> <UE_MOBILITY>
...@@ -77,8 +77,8 @@ ...@@ -77,8 +77,8 @@
<OWD_RADIO_ACCESS>enable</OWD_RADIO_ACCESS> <!-- option: enable, disable. If enable owd curve shows the one way radio access delay, else it shows end to end owd --> <OWD_RADIO_ACCESS>enable</OWD_RADIO_ACCESS> <!-- option: enable, disable. If enable owd curve shows the one way radio access delay, else it shows end to end owd -->
</PERFORMANCE_METRICS> </PERFORMANCE_METRICS>
<LOG> <!-- set the global log level --> <LOG> <!-- set the global log level -->
<LEVEL>info</LEVEL> <LEVEL>debug</LEVEL>
<VERBOSITY>low</VERBOSITY> <VERBOSITY>medium</VERBOSITY>
<INTERVAL>1</INTERVAL> <INTERVAL>1</INTERVAL>
</LOG> </LOG>
<SEED_VALUE>0</SEED_VALUE> <!-- value 0 means randomly generated by OAI --> <SEED_VALUE>0</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
......
<OAI_EMULATION>
<ENVIRONMENT_SYSTEM_CONFIG>
<FADING>
<FREE_SPACE_MODEL_PARAMETERS>
<PATHLOSS_EXPONENT>2.0</PATHLOSS_EXPONENT>
</FREE_SPACE_MODEL_PARAMETERS>
<SMALL_SCALE>AWGN</SMALL_SCALE>
</FADING>
<SYSTEM_FREQUENCY_GHz>1.9</SYSTEM_FREQUENCY_GHz>
</ENVIRONMENT_SYSTEM_CONFIG>
<TOPOLOGY_CONFIG>
<AREA>
<X_m>1000</X_m>
<Y_m>1000</Y_m>
</AREA>
<MOBILITY>
<UE_MOBILITY>
<RANDOM_UE_DISTRIBUTION>
<NUMBER_OF_NODES>1</NUMBER_OF_NODES>
</RANDOM_UE_DISTRIBUTION>
<UE_MOBILITY_TYPE>STATIC</UE_MOBILITY_TYPE> <!-- STATIC -->
</UE_MOBILITY>
<eNB_MOBILITY>
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
<RANDOM_eNB_DISTRIBUTION>
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
</RANDOM_eNB_DISTRIBUTION>
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
</eNB_MOBILITY>
</MOBILITY>
</TOPOLOGY_CONFIG>
<APPLICATION_CONFIG>
<!-- Basic configuration of a customized traffic : one state-->
<CUSTOMIZED_TRAFFIC>
<SOURCE_ID>0</SOURCE_ID>
<TRANSPORT_PROTOCOL>udp</TRANSPORT_PROTOCOL> <!-- OPTIONS: tcp (default), udp -->
<IP_VERSION>ipv4</IP_VERSION> <!-- OPTIONS: ipv4 (default), ipv6 -->
<DESTINATION_ID>1</DESTINATION_ID>
<FLOW_START_ms>1000</FLOW_START_ms> <!-- indicates the start time of the app or the actual duration of the traffic-->
<FLOW_DURATION_ms>10000</FLOW_DURATION_ms> <!-- indicates the start time of the app or the actual duration of the traffic-->
<BACKGROUND_TRAFFIC>disable</BACKGROUND_TRAFFIC> <!-- options: enable, disable. If enable, it generates a background traffic corresponding to the traffic direction-->
<IDT_DIST>fixed</IDT_DIST> <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
<IDT_MIN_ms>1</IDT_MIN_ms> <!--Minimum IDT values in milliseconds-->
<IDT_MAX_ms>1</IDT_MAX_ms> <!--Minimum IDT values in milliseconds-->
<SIZE_DIST>fixed</SIZE_DIST> <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
<SIZE_MIN_byte>1000</SIZE_MIN_byte> <!--Minimum PAYLOAD size values in bytes-->
<SIZE_MAX_byte>2000</SIZE_MAX_byte> <!--MAximum PAYLOAD size values in bytes-->
</CUSTOMIZED_TRAFFIC>
<CUSTOMIZED_TRAFFIC>
<SOURCE_ID>1</SOURCE_ID>
<TRANSPORT_PROTOCOL>udp</TRANSPORT_PROTOCOL> <!-- OPTIONS: tcp (default), udp -->
<IP_VERSION>ipv6</IP_VERSION> <!-- OPTIONS: ipv4 (default), ipv6 -->
<DESTINATION_ID>0</DESTINATION_ID>
<FLOW_START_ms>1000</FLOW_START_ms> <!-- indicates the start time of the app or the actual duration of the traffic-->
<FLOW_DURATION_ms>10000</FLOW_DURATION_ms> <!-- indicates the start time of the app or the actual duration of the traffic-->
<BACKGROUND_TRAFFIC>disable</BACKGROUND_TRAFFIC> <!-- options: enable, disable. If enable, it generates a background traffic corresponding to the traffic direction-->
<IDT_DIST>uniform</IDT_DIST> <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
<IDT_MIN_ms>100</IDT_MIN_ms> <!--Minimum IDT values in milliseconds-->
<IDT_MAX_ms>150</IDT_MAX_ms> <!--Minimum IDT values in milliseconds-->
<SIZE_DIST>uniform</SIZE_DIST> <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
<SIZE_MIN_byte>256</SIZE_MIN_byte> <!--Minimum PAYLOAD size values in bytes-->
<SIZE_MAX_byte>768</SIZE_MAX_byte> <!--Maximum PAYLOAD size values in bytes-->
</CUSTOMIZED_TRAFFIC>
</APPLICATION_CONFIG>
<EMULATION_CONFIG>
<EMULATION_TIME_ms>15000</EMULATION_TIME_ms> <!--if 0 set to infinity-->
<CURVE>disable</CURVE> <!-- option: enable, disable. If CURVE is enabled, graphes are ploted in real time (UL and DL) of WOD and throughput measurement for each packet -->
<PERFORMANCE_METRICS>
<THROUGHPUT>enable</THROUGHPUT> <!-- option: enable, disable. If enable, throughput measurements are plotted in real time-->
<LATENCY>enable</LATENCY> <!-- option: enable, disable. If enable, latency measurements are plotted in real time-->
<OWD_RADIO_ACCESS>enable</OWD_RADIO_ACCESS> <!-- option: enable, disable. If enable owd curve shows the one way radio access delay, else it shows end to end owd -->
</PERFORMANCE_METRICS>
<LOG> <!-- set the global log level -->
<LEVEL>debug</LEVEL>
<VERBOSITY>medium</VERBOSITY>
<INTERVAL>1</INTERVAL>
</LOG>
<SEED_VALUE>0</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
</EMULATION_CONFIG>
<PROFILE>MEDIEVAL_OTG_1</PROFILE>
</OAI_EMULATION>
...@@ -19,6 +19,7 @@ linux = $(shell if [ `uname` = "Linux" ] ; then echo "1" ; else echo "0" ; fi) ...@@ -19,6 +19,7 @@ linux = $(shell if [ `uname` = "Linux" ] ; then echo "1" ; else echo "0" ; fi)
ifdef DEBUG ifdef DEBUG
CFLAGS += -g -ggdb -DDEBUG_PHY -DDEBUG_MEAS CFLAGS += -g -ggdb -DDEBUG_PHY -DDEBUG_MEAS
CFLAGS += -DTRACE_RLC_UM_PDU
else else
CFLAGE += -O2 CFLAGE += -O2
endif endif
......
...@@ -91,7 +91,7 @@ int for_times = 0; ...@@ -91,7 +91,7 @@ int for_times = 0;
static char *conf_config_file_name = NULL; static char *conf_config_file_name = NULL;
uint16_t Nid_cell = 0; //needed by init_lte_vars uint16_t Nid_cell = 0; //needed by init_lte_vars
int nb_antennas_rx = 2; // // int nb_antennas_rx = 2; // //
uint8_t target_dl_mcs = 0; // not set uint8_t target_dl_mcs = 16; // max mcs used by MAC scheduler
uint8_t rate_adaptation_flag = 0; uint8_t rate_adaptation_flag = 0;
uint8_t set_sinr = 0; uint8_t set_sinr = 0;
double snr_dB=0, sinr_dB=0; double snr_dB=0, sinr_dB=0;
...@@ -468,6 +468,7 @@ void get_simulation_options(int argc, char *argv[]) { ...@@ -468,6 +468,7 @@ void get_simulation_options(int argc, char *argv[]) {
case 'm': case 'm':
target_dl_mcs = atoi (optarg); target_dl_mcs = atoi (optarg);
printf("Max target downlink MCS used by MAC scheduler is set to %d\n", target_dl_mcs);
break; break;
case 'M': case 'M':
...@@ -559,6 +560,7 @@ void get_simulation_options(int argc, char *argv[]) { ...@@ -559,6 +560,7 @@ void get_simulation_options(int argc, char *argv[]) {
case 't': case 't':
target_ul_mcs = atoi (optarg); target_ul_mcs = atoi (optarg);
printf("Max target uplink MCS used by MAC scheduler is set to %d\n", target_ul_mcs);
break; break;
case 'T': case 'T':
...@@ -840,8 +842,8 @@ void init_openair1(void) { ...@@ -840,8 +842,8 @@ void init_openair1(void) {
openair_daq_vars.rx_gain_mode = DAQ_AGC_ON; openair_daq_vars.rx_gain_mode = DAQ_AGC_ON;
openair_daq_vars.dlsch_transmission_mode = oai_emulation.info.transmission_mode[0]; openair_daq_vars.dlsch_transmission_mode = oai_emulation.info.transmission_mode[0];
#warning "NN->FK: OAI EMU channel abstraction does not work for MCS higher than"
openair_daq_vars.target_ue_dl_mcs = target_dl_mcs; openair_daq_vars.target_ue_dl_mcs = cmin(target_dl_mcs,16);
openair_daq_vars.target_ue_ul_mcs = target_ul_mcs; openair_daq_vars.target_ue_ul_mcs = target_ul_mcs;
openair_daq_vars.ue_dl_rb_alloc=0x1fff; openair_daq_vars.ue_dl_rb_alloc=0x1fff;
openair_daq_vars.ue_ul_nb_rb=6; openair_daq_vars.ue_ul_nb_rb=6;
......
...@@ -77,7 +77,7 @@ def execute(oai, user, pw, host, logfile,logdir,debug): ...@@ -77,7 +77,7 @@ def execute(oai, user, pw, host, logfile,logdir,debug):
oai.send('make cleanall;') oai.send('make cleanall;')
oai.send('make cleanasn1;') oai.send('make cleanasn1;')
oai.send('rm -f ./oaisim.rel8.'+host) oai.send('rm -f ./oaisim.rel8.'+host)
oai.send_expect_false('make -j4' + tee, makerr1, 1500) oai.send_expect_false('make -j4 JF=1' + tee, makerr1, 1500)
oai.send('cp ./oaisim ./oaisim.rel8.'+host) oai.send('cp ./oaisim ./oaisim.rel8.'+host)
except log.err, e: except log.err, e:
log.fail(case, test, name, conf, e.value, diag, logfile,trace) log.fail(case, test, name, conf, e.value, diag, logfile,trace)
...@@ -99,7 +99,7 @@ def execute(oai, user, pw, host, logfile,logdir,debug): ...@@ -99,7 +99,7 @@ def execute(oai, user, pw, host, logfile,logdir,debug):
oai.send_expect_false('make nasmesh_fix' + tee, makerr1, 60) oai.send_expect_false('make nasmesh_fix' + tee, makerr1, 60)
trace = logdir + '/log_' + case + test + '_2.txt;' trace = logdir + '/log_' + case + test + '_2.txt;'
tee = ' 2>&1 | tee ' + trace tee = ' 2>&1 | tee ' + trace
oai.send_expect_false('make NAS=1 -j4' + tee, makerr1, 1500) oai.send_expect_false('make NAS=1 JF=1 -j4' + tee, makerr1, 1500)
oai.send('cp ./oaisim ./oaisim.rel8.nas.'+host) oai.send('cp ./oaisim ./oaisim.rel8.nas.'+host)
except log.err, e: except log.err, e:
......
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