Commit acd6535a authored by Romain Beurdouche's avatar Romain Beurdouche

feat(nr_ulsim): Remove maximum number of UEs

parent da57c5b2
...@@ -68,7 +68,6 @@ ...@@ -68,7 +68,6 @@
#include <openair3/ocp-gtpu/gtp_itf.h> #include <openair3/ocp-gtpu/gtp_itf.h>
#include "executables/nr-uesoftmodem.h" #include "executables/nr-uesoftmodem.h"
//#define DEBUG_ULSIM //#define DEBUG_ULSIM
#define MAX_UE_CONNECT 16
const char *__asan_default_options() const char *__asan_default_options()
{ {
...@@ -134,7 +133,6 @@ nrUE_params_t *get_nrUE_params(void) { ...@@ -134,7 +133,6 @@ nrUE_params_t *get_nrUE_params(void) {
return &nrUE_params; return &nrUE_params;
} }
// needed for some functions // needed for some functions
uint16_t n_rnti[MAX_UE_CONNECT] = {0x1234, 0x1235, 0x1236, 0x1237, 0x1238, 0x1239, 0x1240, 0x1241, 0x1243, 0x1244, 0x1245, 0x1246, 0x1247, 0x1248, 0x1249, 0x1250};
openair0_config_t openair0_cfg[MAX_CARDS]; openair0_config_t openair0_cfg[MAX_CARDS];
channel_desc_t *UE2gNB[MAX_MOBILES_PER_GNB][NUMBER_OF_gNB_MAX]; channel_desc_t *UE2gNB[MAX_MOBILES_PER_GNB][NUMBER_OF_gNB_MAX];
...@@ -156,7 +154,7 @@ int main(int argc, char *argv[]) ...@@ -156,7 +154,7 @@ int main(int argc, char *argv[])
FILE *output_fd = NULL; FILE *output_fd = NULL;
double ***s_re,***s_im,***r_re,***r_im; double ***s_re,***s_im,***r_re,***r_im;
//uint8_t write_output_file = 0; //uint8_t write_output_file = 0;
int trial, n_trials = 1, n_false_positive[MAX_UE_CONNECT], delay = 0; int trial, n_trials = 1, delay = 0;
double maxDoppler = 0.0; double maxDoppler = 0.0;
uint8_t n_tx = 1, n_rx = 1; uint8_t n_tx = 1, n_rx = 1;
channel_desc_t *UE2gNB; channel_desc_t *UE2gNB;
...@@ -217,13 +215,16 @@ int main(int argc, char *argv[]) ...@@ -217,13 +215,16 @@ int main(int argc, char *argv[])
// Multi-UE // Multi-UE
int cnt; int cnt;
PHY_VARS_NR_UE** UE_list = (PHY_VARS_NR_UE**)malloc(MAX_UE_CONNECT * sizeof(PHY_VARS_NR_UE*));
char *token; char *token;
int number_of_UEs = 1; int number_of_UEs = 1;
int start_rb = 0; int start_rb = 0;
int ue_start_rb = 0; int ue_start_rb = 0;
int nb_rb[MAX_UE_CONNECT] = {0}; char *n_rnti_str = calloc(1,sizeof(char));
int Imcs[MAX_UE_CONNECT] = {9}; n_rnti_str[0] = 0;
char *nb_rb_str = calloc(1,sizeof(char));
nb_rb_str[0] = 0;
char *Imcs_str = calloc(1,sizeof(char));
Imcs_str[0] = 0;
//logInit(); //logInit();
randominit(0); randominit(0);
...@@ -248,13 +249,9 @@ int main(int argc, char *argv[]) ...@@ -248,13 +249,9 @@ int main(int argc, char *argv[])
break; break;
case 'c': case 'c':
cnt = 0; free(n_rnti_str);
token = strtok(optarg, ","); n_rnti_str = calloc(strlen(optarg)+1,sizeof(char));
while (token != NULL) { strcpy(n_rnti_str,optarg);
n_rnti[cnt++] = atoi(token);
AssertFatal(n_rnti[cnt - 1] > 0 && n_rnti[cnt - 1] <= 65535, "Illegal n_rnti[%d] %x\n", cnt - 1, n_rnti[cnt - 1]);
token = strtok(NULL, ",");
}
break; break;
case 'd': case 'd':
...@@ -334,12 +331,9 @@ int main(int argc, char *argv[]) ...@@ -334,12 +331,9 @@ int main(int argc, char *argv[])
break; break;
case 'm': case 'm':
cnt = 0; free(Imcs_str);
token = strtok(optarg, ","); Imcs_str = calloc(strlen(optarg)+1,sizeof(char));
while (token != NULL) { strcpy(Imcs_str,optarg);
Imcs[cnt++] = atoi(token);
token = strtok(NULL, ",");
}
break; break;
case 'W': case 'W':
...@@ -363,12 +357,9 @@ int main(int argc, char *argv[]) ...@@ -363,12 +357,9 @@ int main(int argc, char *argv[])
break; break;
case 'r': case 'r':
cnt = 0; free(nb_rb_str);
token = strtok(optarg, ","); nb_rb_str = calloc(strlen(optarg)+1,sizeof(char));
while (token != NULL) { strcpy(nb_rb_str,optarg);
nb_rb[cnt++] = atoi(token);
token = strtok(NULL, ",");
}
break; break;
case 's': case 's':
...@@ -399,10 +390,6 @@ int main(int argc, char *argv[]) ...@@ -399,10 +390,6 @@ int main(int argc, char *argv[])
case 'x': case 'x':
number_of_UEs = atoi(optarg); number_of_UEs = atoi(optarg);
if (number_of_UEs > MAX_UE_CONNECT) {
printf("Unsupported number of UEs, maximum number of UEs is %d\n", MAX_UE_CONNECT);
exit(-1);
}
break; break;
case 'y': case 'y':
...@@ -536,7 +523,7 @@ int main(int argc, char *argv[]) ...@@ -536,7 +523,7 @@ int main(int argc, char *argv[])
printf("-u Set the numerology\n"); printf("-u Set the numerology\n");
printf("-v Set the max rounds\n"); printf("-v Set the max rounds\n");
printf("-w Start PRB for PUSCH\n"); printf("-w Start PRB for PUSCH\n");
printf("-x Set the number of UEs, maximum number of UEs is %d\n", MAX_UE_CONNECT); printf("-x Set the number of UEs\n");
printf("-y Number of TX antennas used at UE\n"); printf("-y Number of TX antennas used at UE\n");
printf("-z Number of RX antennas used at gNB\n"); printf("-z Number of RX antennas used at gNB\n");
printf("-C Specify the number of threads for the simulation\n"); printf("-C Specify the number of threads for the simulation\n");
...@@ -560,6 +547,41 @@ int main(int argc, char *argv[]) ...@@ -560,6 +547,41 @@ int main(int argc, char *argv[])
} }
} }
int n_false_positive[number_of_UEs];
PHY_VARS_NR_UE** UE_list = (PHY_VARS_NR_UE**)malloc(number_of_UEs * sizeof(PHY_VARS_NR_UE*));
uint16_t n_rnti[number_of_UEs];
memset((void *)n_rnti,0,number_of_UEs * sizeof(uint16_t));
int nb_rb[number_of_UEs];
memset((void *)nb_rb,0,number_of_UEs * sizeof(int));
int Imcs[number_of_UEs];
memset((void *)Imcs,0,number_of_UEs * sizeof(int));
for (int UE_id = 0; UE_id < number_of_UEs; UE_id++) {
n_rnti[UE_id] = 0x1234 + UE_id;
Imcs[UE_id] = 9;
}
cnt = 0;
token = strtok(n_rnti_str, ",");
while (token != NULL) {
n_rnti[cnt++] = atoi(token);
AssertFatal(n_rnti[cnt - 1] > 0 && n_rnti[cnt - 1] <= 65535, "Illegal n_rnti[%d] %x\n", cnt - 1, n_rnti[cnt - 1]);
token = strtok(NULL, ",");
}
free(n_rnti_str);
cnt = 0;
token = strtok(nb_rb_str, ",");
while (token != NULL) {
nb_rb[cnt++] = atoi(token);
token = strtok(NULL, ",");
}
free(nb_rb_str);
cnt = 0;
token = strtok(Imcs_str, ",");
while (token != NULL) {
Imcs[cnt++] = atoi(token);
token = strtok(NULL, ",");
}
free(Imcs_str);
for (int UE_id = 0; UE_id < number_of_UEs; UE_id++) { for (int UE_id = 0; UE_id < number_of_UEs; UE_id++) {
if (nb_rb[UE_id] == 0) { if (nb_rb[UE_id] == 0) {
...@@ -787,11 +809,14 @@ int main(int argc, char *argv[]) ...@@ -787,11 +809,14 @@ int main(int argc, char *argv[])
Sched_INFO[UE_id].sched_response_id = -1; Sched_INFO[UE_id].sched_response_id = -1;
} }
nr_phy_data_tx_t phy_data[MAX_UE_CONNECT] = {0}; nr_phy_data_tx_t phy_data[number_of_UEs];
memset((void *)phy_data,0,number_of_UEs * sizeof(nr_phy_data_tx_t));
uint32_t errors_decoding[MAX_UE_CONNECT] = {0}; uint32_t errors_decoding[number_of_UEs];
memset((void *)errors_decoding,0,number_of_UEs * sizeof(uint32_t));
fapi_nr_ul_config_request_t ul_config[MAX_UE_CONNECT] = {0}; fapi_nr_ul_config_request_t ul_config[number_of_UEs];
memset((void *)ul_config,0,number_of_UEs * sizeof(fapi_nr_ul_config_request_t));
uint8_t ptrs_mcs1 = 2; uint8_t ptrs_mcs1 = 2;
uint8_t ptrs_mcs2 = 4; uint8_t ptrs_mcs2 = 4;
...@@ -803,7 +828,8 @@ int main(int argc, char *argv[]) ...@@ -803,7 +828,8 @@ int main(int argc, char *argv[])
for (int UE_id = 0; UE_id < number_of_UEs; UE_id++) { for (int UE_id = 0; UE_id < number_of_UEs; UE_id++) {
pdu_bit_map[UE_id] = PUSCH_PDU_BITMAP_PUSCH_DATA; // | PUSCH_PDU_BITMAP_PUSCH_PTRS; pdu_bit_map[UE_id] = PUSCH_PDU_BITMAP_PUSCH_DATA; // | PUSCH_PDU_BITMAP_PUSCH_PTRS;
} }
uint8_t crc_status[MAX_UE_CONNECT] = {0}; uint8_t crc_status[number_of_UEs];
memset((void *)crc_status,0,number_of_UEs * sizeof(uint8_t));
unsigned char mod_order[number_of_UEs]; unsigned char mod_order[number_of_UEs];
uint16_t code_rate[number_of_UEs]; uint16_t code_rate[number_of_UEs];
...@@ -1017,7 +1043,8 @@ int main(int argc, char *argv[]) ...@@ -1017,7 +1043,8 @@ int main(int argc, char *argv[])
for (SNR = snr0; SNR <= snr1; SNR += snr_step) { for (SNR = snr0; SNR <= snr1; SNR += snr_step) {
varArray_t *table_rx=initVarArray(1000,sizeof(double)); varArray_t *table_rx=initVarArray(1000,sizeof(double));
int error_flag[MAX_UE_CONNECT] = {0}; int error_flag[number_of_UEs];
memset((void *)error_flag,0,number_of_UEs * sizeof(int));
for (int UE_id = 0; UE_id < number_of_UEs; UE_id++) { for (int UE_id = 0; UE_id < number_of_UEs; UE_id++) {
n_false_positive[UE_id] = 0; n_false_positive[UE_id] = 0;
} }
...@@ -1046,16 +1073,25 @@ int main(int argc, char *argv[]) ...@@ -1046,16 +1073,25 @@ int main(int argc, char *argv[])
reset_meas(&gNB->srs_beam_report_stats); reset_meas(&gNB->srs_beam_report_stats);
reset_meas(&gNB->srs_iq_matrix_stats); reset_meas(&gNB->srs_iq_matrix_stats);
uint32_t errors_scrambling[MAX_UE_CONNECT][16] = {0}; uint32_t errors_scrambling[number_of_UEs][16];
int n_errors[MAX_UE_CONNECT][16] = {0}; int n_errors[number_of_UEs][16];
int round_trials[MAX_UE_CONNECT][16] = {0}; int round_trials[number_of_UEs][16];
double blerStats[MAX_UE_CONNECT][16] = {0}; double blerStats[number_of_UEs][16];
double berStats[MAX_UE_CONNECT][16] = {0}; double berStats[number_of_UEs][16];
for (int UE_id = 0; UE_id < number_of_UEs; UE_id++) {
memset((void *)errors_scrambling[UE_id],0,16 * sizeof(uint32_t));
memset((void *)n_errors[UE_id],0,16 * sizeof(int));
memset((void *)round_trials[UE_id],0,16 * sizeof(int));
memset((void *)blerStats[UE_id],0,16 * sizeof(double));
memset((void *)berStats[UE_id],0,16 * sizeof(double));
}
uint64_t sum_pusch_delay[MAX_UE_CONNECT] = {0}; uint64_t sum_pusch_delay[number_of_UEs];
memset((void *)sum_pusch_delay,0,number_of_UEs * sizeof(uint64_t));
int min_pusch_delay = INT_MAX; int min_pusch_delay = INT_MAX;
int max_pusch_delay = INT_MIN; int max_pusch_delay = INT_MIN;
int delay_pusch_est_count[MAX_UE_CONNECT] = {0}; int delay_pusch_est_count[number_of_UEs];
memset((void *)delay_pusch_est_count,0,number_of_UEs * sizeof(int));
for (trial = 0; trial < n_trials; trial++) { for (trial = 0; trial < n_trials; trial++) {
...@@ -1065,10 +1101,10 @@ int main(int argc, char *argv[]) ...@@ -1065,10 +1101,10 @@ int main(int argc, char *argv[])
errors_decoding[UE_id] = 0; errors_decoding[UE_id] = 0;
} }
// MAX_UE_CONNECT
// FIXME: Multi-UE, Here I only track the round of one of the UEs // FIXME: Multi-UE, Here I only track the round of one of the UEs
while (round < max_rounds && crc_status[0]) { while (round < max_rounds && crc_status[0]) {
nr_scheduled_response_t scheduled_response[MAX_UE_CONNECT] = {0}; nr_scheduled_response_t scheduled_response[number_of_UEs];
memset((void *)scheduled_response,0,number_of_UEs * sizeof(nr_scheduled_response_t));
for (int UE_id = 0; UE_id < number_of_UEs; UE_id++) { for (int UE_id = 0; UE_id < number_of_UEs; UE_id++) {
......
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