Merge remote-tracking branch 'develop' into NR_DL_MIMO
This commit is contained in:
@@ -105,9 +105,10 @@ typedef enum {
|
||||
ADRV9371_ZC706_DEV,
|
||||
/*!\brief device is UEDv2 */
|
||||
UEDv2_DEV,
|
||||
RFSIMULATOR,
|
||||
MAX_RF_DEV_TYPE
|
||||
} dev_type_t;
|
||||
#define DEVTYPE_NAMES {"","EXMIMO","USRP B200","USRP X300","USRP N300","BLADERF","LMSSDR","IRIS","No HW","ADRV9371_ZC706","UEDv2"}
|
||||
#define DEVTYPE_NAMES {"","EXMIMO","USRP B200","USRP X300","USRP N300","BLADERF","LMSSDR","IRIS","No HW","ADRV9371_ZC706","UEDv2", "RFSIMULATOR"}
|
||||
/*!\brief transport protocol types
|
||||
*/
|
||||
typedef enum {
|
||||
@@ -491,15 +492,11 @@ struct openair0_device_t {
|
||||
typedef int(*oai_device_initfunc_t)(openair0_device *device, openair0_config_t *openair0_cfg);
|
||||
/* type of transport init function, implemented in shared lib */
|
||||
typedef int(*oai_transport_initfunc_t)(openair0_device *device, openair0_config_t *openair0_cfg, eth_params_t *eth_params);
|
||||
#define UE_MAGICDL_FDD 0xA5A5A5A5A5A5A5A5 // UE DL FDD record
|
||||
#define UE_MAGICUL_FDD 0x5A5A5A5A5A5A5A5A // UE UL FDD record
|
||||
#define UE_MAGICDL_TDD 0xA6A6A6A6A6A6A6A6 // UE DL TDD record
|
||||
#define UE_MAGICUL_TDD 0x6A6A6A6A6A6A6A6A // UE UL TDD record
|
||||
#define UE_MAGICDL 0xA5A5A5A5A5A5A5A5 // UE DL FDD record
|
||||
#define UE_MAGICUL 0x5A5A5A5A5A5A5A5A // UE UL FDD record
|
||||
|
||||
#define ENB_MAGICDL_FDD 0xB5B5B5B5B5B5B5B5 // eNB DL FDD record
|
||||
#define ENB_MAGICUL_FDD 0x5B5B5B5B5B5B5B5B // eNB UL FDD record
|
||||
#define ENB_MAGICDL_TDD 0xB6B6B6B6B6B6B6B6 // eNB DL TDD record
|
||||
#define ENB_MAGICUL_TDD 0x6B6B6B6B6B6B6B6B // eNB UL TDD record
|
||||
#define ENB_MAGICDL 0xB5B5B5B5B5B5B5B5 // eNB DL FDD record
|
||||
#define ENB_MAGICUL 0x5B5B5B5B5B5B5B5B // eNB UL FDD record
|
||||
|
||||
#define OPTION_LZ4 0x00000001 // LZ4 compression (option_value is set to compressed size)
|
||||
|
||||
@@ -516,19 +513,6 @@ typedef struct {
|
||||
uint32_t option_flag; // Option flag
|
||||
} samplesBlockHeader_t;
|
||||
|
||||
#define UE_MAGICDL_FDD 0xA5A5A5A5A5A5A5A5 // UE DL FDD record
|
||||
#define UE_MAGICUL_FDD 0x5A5A5A5A5A5A5A5A // UE UL FDD record
|
||||
#define UE_MAGICDL_TDD 0xA6A6A6A6A6A6A6A6 // UE DL TDD record
|
||||
#define UE_MAGICUL_TDD 0x6A6A6A6A6A6A6A6A // UE UL TDD record
|
||||
|
||||
#define ENB_MAGICDL_FDD 0xB5B5B5B5B5B5B5B5 // eNB DL FDD record
|
||||
#define ENB_MAGICUL_FDD 0x5B5B5B5B5B5B5B5B // eNB UL FDD record
|
||||
#define ENB_MAGICDL_TDD 0xB6B6B6B6B6B6B6B6 // eNB DL TDD record
|
||||
#define ENB_MAGICUL_TDD 0x6B6B6B6B6B6B6B6B // eNB UL TDD record
|
||||
|
||||
#define OPTION_LZ4 0x00000001 // LZ4 compression (option_value is set to compressed size)
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
|
||||
@@ -163,8 +163,8 @@ int trx_benetel_ctlrecv(openair0_device *device, void *msg, ssize_t msg_len)
|
||||
cap->FH_fmt = OAI_IF4p5_only;
|
||||
cap->num_bands = 1;
|
||||
cap->band_list[0] = 7;
|
||||
cap->nb_rx[0] = 1;
|
||||
cap->nb_tx[0] = 1;
|
||||
cap->nb_rx[0] = device->openair0_cfg->rx_num_channels;
|
||||
cap->nb_tx[0] = device->openair0_cfg->tx_num_channels;
|
||||
cap->max_pdschReferenceSignalPower[0] = -27;
|
||||
cap->max_rxgain[0] = 90;
|
||||
|
||||
@@ -194,11 +194,12 @@ void benetel_fh_if4p5_south_in(RU_t *ru,
|
||||
LTE_DL_FRAME_PARMS *fp;
|
||||
int symbol;
|
||||
int32_t *rxdata;
|
||||
int antenna = 0;
|
||||
int antenna;
|
||||
|
||||
lock_ul_buffer(&s->buffers, *subframe);
|
||||
next:
|
||||
while (!(s->buffers.ul_busy[*subframe] == 0x3fff ||
|
||||
while (!((s->buffers.ul_busy[0][*subframe] == 0x3fff &&
|
||||
s->buffers.ul_busy[1][*subframe] == 0x3fff) ||
|
||||
s->buffers.prach_busy[*subframe] == 1))
|
||||
wait_ul_buffer(&s->buffers, *subframe);
|
||||
if (s->buffers.prach_busy[*subframe] == 1) {
|
||||
@@ -217,24 +218,27 @@ next:
|
||||
|
||||
eNB = eNB_list[0];
|
||||
fp = &eNB->frame_parms;
|
||||
for (symbol = 0; symbol < 14; symbol++) {
|
||||
int i;
|
||||
uint16_t *p = (uint16_t *)(&s->buffers.ul[*subframe][symbol*1200*4]);
|
||||
for (i = 0; i < 1200*2; i++) {
|
||||
p[i] = htons(p[i]);
|
||||
}
|
||||
rxdata = &ru->common.rxdataF[antenna][symbol * fp->ofdm_symbol_size];
|
||||
for (antenna = 0; antenna < ru->nb_rx; antenna++) {
|
||||
for (symbol = 0; symbol < 14; symbol++) {
|
||||
int i;
|
||||
uint16_t *p = (uint16_t *)(&s->buffers.ul[antenna][*subframe][symbol*1200*4]);
|
||||
for (i = 0; i < 1200*2; i++) {
|
||||
p[i] = htons(p[i]);
|
||||
}
|
||||
rxdata = &ru->common.rxdataF[antenna][symbol * fp->ofdm_symbol_size];
|
||||
#if 1
|
||||
memcpy(rxdata + 2048 - 600,
|
||||
&s->buffers.ul[*subframe][symbol*1200*4],
|
||||
600 * 4);
|
||||
memcpy(rxdata,
|
||||
&s->buffers.ul[*subframe][symbol*1200*4] + 600*4,
|
||||
600 * 4);
|
||||
memcpy(rxdata + 2048 - 600,
|
||||
&s->buffers.ul[antenna][*subframe][symbol*1200*4],
|
||||
600 * 4);
|
||||
memcpy(rxdata,
|
||||
&s->buffers.ul[antenna][*subframe][symbol*1200*4] + 600*4,
|
||||
600 * 4);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
s->buffers.ul_busy[*subframe] = 0;
|
||||
s->buffers.ul_busy[0][*subframe] = 0;
|
||||
s->buffers.ul_busy[1][*subframe] = 0;
|
||||
signal_ul_buffer(&s->buffers, *subframe);
|
||||
unlock_ul_buffer(&s->buffers, *subframe);
|
||||
|
||||
@@ -272,45 +276,49 @@ void benetel_fh_if4p5_south_out(RU_t *ru,
|
||||
LTE_DL_FRAME_PARMS *fp;
|
||||
int symbol;
|
||||
int32_t *txdata;
|
||||
int aa = 0;
|
||||
int aa;
|
||||
|
||||
//printf("BENETEL: %s (f.sf %d.%d ts %ld)\n", __FUNCTION__, frame, subframe, timestamp);
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, ru->proc.timestamp_tx&0xffffffff );
|
||||
|
||||
lock_dl_buffer(&s->buffers, subframe);
|
||||
if (s->buffers.dl_busy[subframe]) {
|
||||
if (s->buffers.dl_busy[0][subframe] ||
|
||||
s->buffers.dl_busy[1][subframe]) {
|
||||
printf("%s: fatal: DL buffer busy for subframe %d\n", __FUNCTION__, subframe);
|
||||
unlock_dl_buffer(&s->buffers, subframe);
|
||||
return;
|
||||
}
|
||||
eNB = eNB_list[0];
|
||||
fp = &eNB->frame_parms;
|
||||
if (ru->num_eNB != 1 || ru->nb_tx != 1 || fp->ofdm_symbol_size != 2048 ||
|
||||
if (ru->num_eNB != 1 || fp->ofdm_symbol_size != 2048 ||
|
||||
fp->Ncp != NORMAL || fp->symbols_per_tti != 14) {
|
||||
printf("%s:%d:%s: unsupported configuration\n",
|
||||
__FILE__, __LINE__, __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
for (symbol = 0; symbol < 14; symbol++) {
|
||||
txdata = &ru->common.txdataF_BF[aa][symbol * fp->ofdm_symbol_size];
|
||||
for (aa = 0; aa < ru->nb_tx; aa++) {
|
||||
for (symbol = 0; symbol < 14; symbol++) {
|
||||
txdata = &ru->common.txdataF_BF[aa][symbol * fp->ofdm_symbol_size];
|
||||
#if 1
|
||||
memcpy(&s->buffers.dl[subframe][symbol*1200*4],
|
||||
txdata + 2048 - 600,
|
||||
600 * 4);
|
||||
memcpy(&s->buffers.dl[subframe][symbol*1200*4] + 600*4,
|
||||
txdata + 1,
|
||||
600 * 4);
|
||||
memcpy(&s->buffers.dl[aa][subframe][symbol*1200*4],
|
||||
txdata + 2048 - 600,
|
||||
600 * 4);
|
||||
memcpy(&s->buffers.dl[aa][subframe][symbol*1200*4] + 600*4,
|
||||
txdata + 1,
|
||||
600 * 4);
|
||||
#endif
|
||||
int i;
|
||||
uint16_t *p = (uint16_t *)(&s->buffers.dl[subframe][symbol*1200*4]);
|
||||
for (i = 0; i < 1200*2; i++) {
|
||||
p[i] = htons(p[i]);
|
||||
int i;
|
||||
uint16_t *p = (uint16_t *)(&s->buffers.dl[aa][subframe][symbol*1200*4]);
|
||||
for (i = 0; i < 1200*2; i++) {
|
||||
p[i] = htons(p[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
s->buffers.dl_busy[subframe] = 0x3fff;
|
||||
s->buffers.dl_busy[0][subframe] = 0x3fff;
|
||||
s->buffers.dl_busy[1][subframe] = 0x3fff;
|
||||
unlock_dl_buffer(&s->buffers, subframe);
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_IF4P5_SOUTH_OUT_RU+ru->idx, ru->proc.frame_tx);
|
||||
|
||||
@@ -233,19 +233,20 @@ l2fwd_simple_forward(struct rte_mbuf *m, unsigned portid, benetel_t *bs)
|
||||
}
|
||||
|
||||
|
||||
if(PAYLOAD_1 == 0x12 && PAYLOAD_2 == 0xce && ANT_NUM == 0x00) {
|
||||
if(PAYLOAD_1 == 0x12 && PAYLOAD_2 == 0xce) {
|
||||
p.frame = FRAME;
|
||||
p.subframe = SUBFRAME >> 4;
|
||||
p.slot = 0; /* unused */
|
||||
p.symbol = SYMBOL;
|
||||
p.antenna = 0;
|
||||
p.antenna = ANT_NUM;
|
||||
memcpy(p.iq, IQ_ptr, 4800);
|
||||
store_ul(bs, &p);
|
||||
}
|
||||
|
||||
// U-PLANE UL ANT_0 PROCESSING
|
||||
if(PAYLOAD_1 == 0x12 && PAYLOAD_2 == 0xce && ANT_NUM == 0x00 && dl_start == 1)
|
||||
// U-PLANE UL PROCESSING
|
||||
if(PAYLOAD_1 == 0x12 && PAYLOAD_2 == 0xce && dl_start == 1)
|
||||
{
|
||||
int a = ANT_NUM;
|
||||
int tx_frame = FRAME;
|
||||
int tx_subframe = SUBFRAME >> 4;
|
||||
int tx_symbol = SYMBOL + 5;
|
||||
@@ -266,33 +267,20 @@ l2fwd_simple_forward(struct rte_mbuf *m, unsigned portid, benetel_t *bs)
|
||||
SUBFRAME = tx_subframe << 4;
|
||||
SYMBOL = tx_symbol;
|
||||
|
||||
/* antenna 0 - send actual DL data (if available) */
|
||||
/* send actual DL data (if available) */
|
||||
lock_dl_buffer(bs->buffers, tx_subframe);
|
||||
if (!(bs->buffers->dl_busy[tx_subframe] & (1 << tx_symbol))) {
|
||||
printf("%s: warning, DL underflow (sf.symbol %d.%d)\n", __FUNCTION__,
|
||||
if (!(bs->buffers->dl_busy[a][tx_subframe] & (1 << tx_symbol))) {
|
||||
printf("%s: warning, DL underflow (antenna %d sf.symbol %d.%d)\n",
|
||||
__FUNCTION__,
|
||||
a,
|
||||
tx_subframe, tx_symbol);
|
||||
memset(IQ_ptr, 0, 1200 * 4);
|
||||
} else {
|
||||
memcpy(IQ_ptr, bs->buffers->dl[tx_subframe] + tx_symbol * 1200*4,
|
||||
memcpy(IQ_ptr, bs->buffers->dl[a][tx_subframe] + tx_symbol * 1200*4,
|
||||
1200*4);
|
||||
}
|
||||
bs->buffers->dl_busy[tx_subframe] &= ~(1 << tx_symbol);
|
||||
bs->buffers->dl_busy[a][tx_subframe] &= ~(1 << tx_symbol);
|
||||
unlock_dl_buffer(bs->buffers, tx_subframe);
|
||||
|
||||
// fill DL Data for ant 0 with 0 value
|
||||
// memset(IQ_ptr, 0, 4800);
|
||||
}
|
||||
|
||||
// U-PLANE UL ANT_1 PROCESSING
|
||||
else if(PAYLOAD_1 == 0x12 && PAYLOAD_2 == 0xce && ANT_NUM == 0x01 && dl_start == 1)
|
||||
{
|
||||
|
||||
// ANT_NUM = 0x01;
|
||||
SYMBOL = (SYMBOL + 5) % 14;
|
||||
PAYLOAD_2 = 0xc8;
|
||||
|
||||
// fill DL Data for ant 1 with 0 value
|
||||
memset(IQ_ptr, 0, 4800);
|
||||
}
|
||||
|
||||
// U-PLANE PRACH PROCESSING
|
||||
|
||||
@@ -27,37 +27,36 @@
|
||||
|
||||
void store_ul(benetel_t *bs, ul_packet_t *ul)
|
||||
{
|
||||
/* only antenna 0 for the moment */
|
||||
if (ul->antenna != 0)
|
||||
return;
|
||||
int a = ul->antenna;
|
||||
|
||||
if (ul->subframe != bs->next_subframe ||
|
||||
ul->symbol != bs->next_symbol) {
|
||||
printf("%s: fatal, expected frame.sf.symbol %d.%d.%d, got %d.%d.%d\n",
|
||||
if (ul->subframe != bs->next_subframe[a] ||
|
||||
ul->symbol != bs->next_symbol[a]) {
|
||||
printf("%s: fatal, antenna %d expected frame.sf.symbol %d.%d.%d, got %d.%d.%d\n",
|
||||
__FUNCTION__,
|
||||
bs->expected_benetel_frame, bs->next_subframe, bs->next_symbol,
|
||||
a,
|
||||
bs->expected_benetel_frame[a], bs->next_subframe[a], bs->next_symbol[a],
|
||||
ul->frame, ul->subframe, ul->symbol);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
lock_ul_buffer(bs->buffers, bs->next_subframe);
|
||||
if (bs->buffers->ul_busy[bs->next_subframe] & (1 << bs->next_symbol)) {
|
||||
lock_ul_buffer(bs->buffers, bs->next_subframe[a]);
|
||||
if (bs->buffers->ul_busy[a][bs->next_subframe[a]] & (1 << bs->next_symbol[a])) {
|
||||
printf("%s: warning, UL overflow (sf.symbol %d.%d)\n", __FUNCTION__,
|
||||
bs->next_subframe, bs->next_symbol);
|
||||
bs->next_subframe[a], bs->next_symbol[a]);
|
||||
}
|
||||
memcpy(bs->buffers->ul[bs->next_subframe] + bs->next_symbol * 1200*4,
|
||||
memcpy(bs->buffers->ul[a][bs->next_subframe[a]] + bs->next_symbol[a] * 1200*4,
|
||||
ul->iq, 1200*4);
|
||||
bs->buffers->ul_busy[bs->next_subframe] |= (1 << bs->next_symbol);
|
||||
signal_ul_buffer(bs->buffers, bs->next_subframe);
|
||||
unlock_ul_buffer(bs->buffers, bs->next_subframe);
|
||||
bs->buffers->ul_busy[a][bs->next_subframe[a]] |= (1 << bs->next_symbol[a]);
|
||||
signal_ul_buffer(bs->buffers, bs->next_subframe[a]);
|
||||
unlock_ul_buffer(bs->buffers, bs->next_subframe[a]);
|
||||
|
||||
bs->next_symbol++;
|
||||
if (bs->next_symbol == 14) {
|
||||
bs->next_symbol = 0;
|
||||
bs->next_subframe = (bs->next_subframe + 1) % 10;
|
||||
if (bs->next_subframe == 0) {
|
||||
bs->expected_benetel_frame++;
|
||||
bs->expected_benetel_frame &= 255;
|
||||
bs->next_symbol[a]++;
|
||||
if (bs->next_symbol[a] == 14) {
|
||||
bs->next_symbol[a] = 0;
|
||||
bs->next_subframe[a] = (bs->next_subframe[a] + 1) % 10;
|
||||
if (bs->next_subframe[a] == 0) {
|
||||
bs->expected_benetel_frame[a]++;
|
||||
bs->expected_benetel_frame[a] &= 255;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,9 +26,10 @@
|
||||
|
||||
typedef struct {
|
||||
shared_buffers *buffers;
|
||||
int next_subframe;
|
||||
int next_symbol;
|
||||
int expected_benetel_frame;
|
||||
/* [2] is for two antennas */
|
||||
int next_subframe[2];
|
||||
int next_symbol[2];
|
||||
int expected_benetel_frame[2];
|
||||
char *dpdk_main_command_line;
|
||||
} benetel_t;
|
||||
|
||||
|
||||
@@ -68,7 +68,8 @@ void *benetel_start_dpdk(char *ifname, shared_buffers *buffers, char *dpdk_main_
|
||||
|
||||
bs->buffers = buffers;
|
||||
|
||||
bs->expected_benetel_frame = 255;
|
||||
bs->expected_benetel_frame[0] = 255;
|
||||
bs->expected_benetel_frame[1] = 255;
|
||||
|
||||
bs->dpdk_main_command_line = dpdk_main_command_line;
|
||||
|
||||
|
||||
@@ -44,9 +44,12 @@ void init_buffers(shared_buffers *s)
|
||||
/* in FDD the eNB's first transmitted DL subframe is 4 but the device
|
||||
* needs to have subframes 1, 2 and 3 ready. Let's pretend there are ready.
|
||||
*/
|
||||
s->dl_busy[1] = 0x3fff;
|
||||
s->dl_busy[2] = 0x3fff;
|
||||
s->dl_busy[3] = 0x3fff;
|
||||
s->dl_busy[0][1] = 0x3fff;
|
||||
s->dl_busy[0][2] = 0x3fff;
|
||||
s->dl_busy[0][3] = 0x3fff;
|
||||
s->dl_busy[1][1] = 0x3fff;
|
||||
s->dl_busy[1][2] = 0x3fff;
|
||||
s->dl_busy[1][3] = 0x3fff;
|
||||
}
|
||||
|
||||
void lock_dl_buffer(shared_buffers *s, int subframe)
|
||||
|
||||
@@ -26,10 +26,11 @@
|
||||
#include <stdint.h>
|
||||
|
||||
typedef struct {
|
||||
unsigned char dl[10][14*1200*4];
|
||||
unsigned char ul[10][14*1200*4];
|
||||
uint16_t dl_busy[10];
|
||||
uint16_t ul_busy[10];
|
||||
/* [2] is for two antennas */
|
||||
unsigned char dl[2][10][14*1200*4];
|
||||
unsigned char ul[2][10][14*1200*4];
|
||||
uint16_t dl_busy[2][10];
|
||||
uint16_t ul_busy[2][10];
|
||||
|
||||
pthread_mutex_t m_ul[10];
|
||||
pthread_cond_t c_ul[10];
|
||||
|
||||
@@ -162,8 +162,9 @@ int trx_benetel_ctlrecv(openair0_device *device, void *msg, ssize_t msg_len)
|
||||
cap->FH_fmt = OAI_IF4p5_only;
|
||||
cap->num_bands = 1;
|
||||
cap->band_list[0] = 78;
|
||||
cap->nb_rx[0] = 1;
|
||||
cap->nb_tx[0] = 1;
|
||||
/* TODO: hardcoded to 1 for the moment, get the real value somehow... */
|
||||
cap->nb_rx[0] = 1; //device->openair0_cfg->rx_num_channels;
|
||||
cap->nb_tx[0] = 1; //device->openair0_cfg->tx_num_channels;
|
||||
cap->max_pdschReferenceSignalPower[0] = -27;
|
||||
cap->max_rxgain[0] = 90;
|
||||
|
||||
@@ -201,12 +202,13 @@ void benetel_fh_if4p5_south_in(RU_t *ru,
|
||||
NR_DL_FRAME_PARMS *fp;
|
||||
int symbol;
|
||||
int32_t *rxdata;
|
||||
int antenna = 0;
|
||||
int antenna;
|
||||
|
||||
lock_ul_buffer(&s->buffers, *slot);
|
||||
#if 1
|
||||
next:
|
||||
while (!(s->buffers.ul_busy[*slot] == 0x3fff ||
|
||||
while (!((s->buffers.ul_busy[0][*slot] == 0x3fff &&
|
||||
s->buffers.ul_busy[1][*slot] == 0x3fff) ||
|
||||
s->buffers.prach_busy[*slot] == 1))
|
||||
wait_ul_buffer(&s->buffers, *slot);
|
||||
if (s->buffers.prach_busy[*slot] == 1) {
|
||||
@@ -226,24 +228,31 @@ next:
|
||||
#endif
|
||||
|
||||
fp = ru->nr_frame_parms;
|
||||
for (symbol = 0; symbol < 14; symbol++) {
|
||||
int i;
|
||||
uint16_t *p = (uint16_t *)(&s->buffers.ul[*slot][symbol*1272*4]);
|
||||
for (i = 0; i < 1272*2; i++) {
|
||||
p[i] = htons(p[i]);
|
||||
}
|
||||
rxdata = &ru->common.rxdataF[antenna][symbol * fp->ofdm_symbol_size];
|
||||
#if 1
|
||||
memcpy(rxdata + 2048 - 1272/2,
|
||||
&s->buffers.ul[*slot][symbol*1272*4],
|
||||
(1272/2) * 4);
|
||||
memcpy(rxdata,
|
||||
&s->buffers.ul[*slot][symbol*1272*4] + (1272/2)*4,
|
||||
(1272/2) * 4);
|
||||
for (antenna = 0; antenna < ru->nb_rx; antenna++) {
|
||||
for (symbol = 0; symbol < 14; symbol++) {
|
||||
int i;
|
||||
int16_t *p = (int16_t *)(&s->buffers.ul[antenna][*slot][symbol*1272*4]);
|
||||
for (i = 0; i < 1272*2; i++) {
|
||||
p[i] = (int16_t)(ntohs(p[i])) / 16;
|
||||
}
|
||||
rxdata = &ru->common.rxdataF[antenna][symbol * fp->ofdm_symbol_size];
|
||||
#if 0
|
||||
if (*slot == 0 && symbol == 0)
|
||||
printf("rxdata in benetel_fh_if4p5_south_in %p\n", &ru->common.rxdataF[antenna][0]);
|
||||
#endif
|
||||
#if 1
|
||||
memcpy(rxdata + 2048 - 1272/2,
|
||||
&s->buffers.ul[antenna][*slot][symbol*1272*4],
|
||||
(1272/2) * 4);
|
||||
memcpy(rxdata,
|
||||
&s->buffers.ul[antenna][*slot][symbol*1272*4] + (1272/2)*4,
|
||||
(1272/2) * 4);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
s->buffers.ul_busy[*slot] = 0;
|
||||
s->buffers.ul_busy[0][*slot] = 0;
|
||||
s->buffers.ul_busy[1][*slot] = 0;
|
||||
signal_ul_buffer(&s->buffers, *slot);
|
||||
unlock_ul_buffer(&s->buffers, *slot);
|
||||
|
||||
@@ -281,43 +290,47 @@ void benetel_fh_if4p5_south_out(RU_t *ru,
|
||||
NR_DL_FRAME_PARMS *fp;
|
||||
int symbol;
|
||||
int32_t *txdata;
|
||||
int aa = 0;
|
||||
int aa;
|
||||
|
||||
//printf("BENETEL: %s (f.sf %d.%d ts %ld)\n", __FUNCTION__, frame, slot, timestamp);
|
||||
|
||||
lock_dl_buffer(&s->buffers, slot);
|
||||
if (s->buffers.dl_busy[slot]) {
|
||||
if (s->buffers.dl_busy[0][slot] ||
|
||||
s->buffers.dl_busy[1][slot]) {
|
||||
printf("%s: fatal: DL buffer busy for subframe %d\n", __FUNCTION__, slot);
|
||||
unlock_dl_buffer(&s->buffers, slot);
|
||||
return;
|
||||
}
|
||||
|
||||
fp = ru->nr_frame_parms;
|
||||
if (ru->num_gNB != 1 || ru->nb_tx != 1 || fp->ofdm_symbol_size != 2048 ||
|
||||
if (ru->num_gNB != 1 || fp->ofdm_symbol_size != 2048 ||
|
||||
fp->Ncp != NORMAL || fp->symbols_per_slot != 14) {
|
||||
printf("%s:%d:%s: unsupported configuration\n",
|
||||
__FILE__, __LINE__, __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
for (symbol = 0; symbol < 14; symbol++) {
|
||||
txdata = &ru->common.txdataF_BF[aa][symbol * fp->ofdm_symbol_size];
|
||||
for (aa = 0; aa < ru->nb_tx; aa++) {
|
||||
for (symbol = 0; symbol < 14; symbol++) {
|
||||
txdata = &ru->common.txdataF_BF[aa][symbol * fp->ofdm_symbol_size];
|
||||
#if 1
|
||||
memcpy(&s->buffers.dl[slot][symbol*1272*4],
|
||||
txdata + 2048 - (1272/2),
|
||||
(1272/2) * 4);
|
||||
memcpy(&s->buffers.dl[slot][symbol*1272*4] + (1272/2)*4,
|
||||
txdata,
|
||||
(1272/2) * 4);
|
||||
memcpy(&s->buffers.dl[aa][slot][symbol*1272*4],
|
||||
txdata + 2048 - (1272/2),
|
||||
(1272/2) * 4);
|
||||
memcpy(&s->buffers.dl[aa][slot][symbol*1272*4] + (1272/2)*4,
|
||||
txdata,
|
||||
(1272/2) * 4);
|
||||
#endif
|
||||
int i;
|
||||
uint16_t *p = (uint16_t *)(&s->buffers.dl[slot][symbol*1272*4]);
|
||||
for (i = 0; i < 1272*2; i++) {
|
||||
p[i] = htons(p[i]);
|
||||
int i;
|
||||
uint16_t *p = (uint16_t *)(&s->buffers.dl[aa][slot][symbol*1272*4]);
|
||||
for (i = 0; i < 1272*2; i++) {
|
||||
p[i] = htons(p[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
s->buffers.dl_busy[slot] = 0x3fff;
|
||||
s->buffers.dl_busy[0][slot] = 0x3fff;
|
||||
s->buffers.dl_busy[1][slot] = 0x3fff;
|
||||
unlock_dl_buffer(&s->buffers, slot);
|
||||
}
|
||||
|
||||
|
||||
@@ -243,21 +243,22 @@ l2fwd_simple_forward(struct rte_mbuf *m, unsigned portid, benetel_t *bs)
|
||||
}
|
||||
|
||||
|
||||
if(PAYLOAD_1 == 0x13 && PAYLOAD_2 == 0xe4 && ANT_NUM == 0x00) {
|
||||
if(PAYLOAD_1 == 0x13 && PAYLOAD_2 == 0xe4) {
|
||||
int subframe = SUBFRAME >> 4;
|
||||
int slot = ((SUBFRAME & 0x0f) << 2) | ((SYMBOL >> 6) & 0x03);
|
||||
p.frame = FRAME;
|
||||
p.slot = subframe * 2 + slot;
|
||||
p.symbol = SYMBOL & 0x3f;
|
||||
p.antenna = 0;
|
||||
p.antenna = ANT_NUM;
|
||||
memcpy(p.iq, IQ_ptr, 5088);
|
||||
store_ul(bs, &p);
|
||||
// if (p.symbol==0) printf("store ul f.sl.sy %d.%d.%d\n", p.frame, p.slot, p.symbol);
|
||||
}
|
||||
|
||||
// U-PLANE UL ANT_0 PROCESSING
|
||||
if(PAYLOAD_1 == 0x13 && PAYLOAD_2 == 0xe4 && ANT_NUM == 0x00 && dl_start == 1)
|
||||
// U-PLANE UL PROCESSING
|
||||
if(PAYLOAD_1 == 0x13 && PAYLOAD_2 == 0xe4 && dl_start == 1)
|
||||
{
|
||||
int a = ANT_NUM & 0x01;
|
||||
int frame = FRAME;
|
||||
int subframe = SUBFRAME >> 4;
|
||||
int slot = ((SUBFRAME & 0x0f) << 2) | ((SYMBOL >> 6) & 0x03);
|
||||
@@ -282,66 +283,45 @@ l2fwd_simple_forward(struct rte_mbuf *m, unsigned portid, benetel_t *bs)
|
||||
}
|
||||
}
|
||||
|
||||
ANT_NUM = 0x00;
|
||||
|
||||
// Mask the symbol bits from UL packet received and apply the shift.
|
||||
SYMBOL = ((SYMBOL & 0b00111111) + 10) % 14;
|
||||
|
||||
ANT_NUM = 0x00;
|
||||
ANT_NUM = a;
|
||||
SUBFRAME = sf;
|
||||
|
||||
if (a == 1)
|
||||
slot_id_ctrl++;
|
||||
|
||||
// Slot id control for DL
|
||||
if(slot_id_ctrl > 13){
|
||||
SYMBOL = SYMBOL | 0b01000000;
|
||||
if (slot_id_ctrl > 13) {
|
||||
SYMBOL = SYMBOL | 0b01000000;
|
||||
|
||||
if (a == 1) {
|
||||
if (slot_id_ctrl > 27) {
|
||||
slot_id_ctrl = 0;
|
||||
sf = sf + 0x10;
|
||||
|
||||
if (sf > 0x90){
|
||||
sf = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* antenna 0 - send actual DL data (if available) */
|
||||
/* send actual DL data (if available) */
|
||||
oai_slot = tx_subframe * 2 + tx_slot;
|
||||
lock_dl_buffer(bs->buffers, oai_slot);
|
||||
if (!(bs->buffers->dl_busy[oai_slot] & (1 << tx_symbol))) {
|
||||
printf("%s: warning, DL underflow (sl.symbol %d.%d)\n", __FUNCTION__,
|
||||
oai_slot, tx_symbol);
|
||||
if (!(bs->buffers->dl_busy[a][oai_slot] & (1 << tx_symbol))) {
|
||||
printf("%s: warning, DL underflow (antenna %d sl.symbol %d.%d)\n", __FUNCTION__,
|
||||
a, oai_slot, tx_symbol);
|
||||
memset(IQ_ptr, 0, 1272 * 4);
|
||||
} else {
|
||||
memcpy(IQ_ptr, bs->buffers->dl[oai_slot] + tx_symbol * 1272*4,
|
||||
memcpy(IQ_ptr, bs->buffers->dl[a][oai_slot] + tx_symbol * 1272*4,
|
||||
1272*4);
|
||||
}
|
||||
//printf("DL buffer f sf slot symbol %d %d %d %d (sf %d)\n", tx_frame, tx_subframe, tx_slot, tx_symbol, (int)sf);
|
||||
bs->buffers->dl_busy[oai_slot] &= ~(1 << tx_symbol);
|
||||
bs->buffers->dl_busy[a][oai_slot] &= ~(1 << tx_symbol);
|
||||
unlock_dl_buffer(bs->buffers, oai_slot);
|
||||
|
||||
// fill DL Data for ant 0 with 0 value
|
||||
// memset(IQ_ptr, 0, 5088);
|
||||
}
|
||||
|
||||
// U-PLANE UL ANT_1 PROCESSING
|
||||
if(PAYLOAD_1 == 0x13 && PAYLOAD_2 == 0xe4 && ANT_NUM == 0x01 && dl_start == 1)
|
||||
{
|
||||
|
||||
// Mask the symbol bits from UL packet received and apply the shift.
|
||||
SYMBOL = ((SYMBOL & 0b00111111) +10) % 14;
|
||||
|
||||
ANT_NUM = 0x01;
|
||||
SUBFRAME = sf;
|
||||
|
||||
slot_id_ctrl++;
|
||||
|
||||
// Slot id control for DL
|
||||
if(slot_id_ctrl > 13){
|
||||
SYMBOL = SYMBOL | 0b01000000;
|
||||
|
||||
if(slot_id_ctrl > 27){
|
||||
slot_id_ctrl = 0;
|
||||
sf = sf + 0x10;
|
||||
|
||||
if (sf >0x90){
|
||||
sf = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// fill DL Data for ant 1 with 0 value
|
||||
memset(IQ_ptr, 0, 5088);
|
||||
}
|
||||
|
||||
// U-PLANE PRACH PROCESSING
|
||||
|
||||
@@ -35,63 +35,61 @@ printf("store_ul %d.%ld (%ld)\n", (int)(t.tv_sec % 60), t.tv_nsec, t.tv_nsec - o
|
||||
old = t;
|
||||
#endif
|
||||
|
||||
/* only antenna 0 for the moment */
|
||||
if (ul->antenna != 0)
|
||||
return;
|
||||
int a = ul->antenna;
|
||||
|
||||
if (ul->slot != bs->next_slot ||
|
||||
ul->symbol != bs->next_symbol) {
|
||||
printf("%s: error, expected frame.sl.symbol %d.%d.%d, got %d.%d.%d\n",
|
||||
if (ul->slot != bs->next_slot[a] ||
|
||||
ul->symbol != bs->next_symbol[a]) {
|
||||
printf("%s: error, antenna %d expected frame.sl.symbol %d.%d.%d, got %d.%d.%d\n",
|
||||
__FUNCTION__,
|
||||
bs->expected_benetel_frame, bs->next_slot, bs->next_symbol,
|
||||
a, bs->expected_benetel_frame[a], bs->next_slot[a], bs->next_symbol[a],
|
||||
ul->frame, ul->slot, ul->symbol);
|
||||
}
|
||||
|
||||
/* fill missing data with 0s */
|
||||
while (ul->slot != bs->next_slot ||
|
||||
ul->symbol != bs->next_symbol) {
|
||||
lock_ul_buffer(bs->buffers, bs->next_slot);
|
||||
if (bs->buffers->ul_busy[bs->next_slot] & (1 << bs->next_symbol)) {
|
||||
printf("%s: warning, UL overflow (sl.symbol %d.%d)\n", __FUNCTION__,
|
||||
bs->next_slot, bs->next_symbol);
|
||||
while (ul->slot != bs->next_slot[a] ||
|
||||
ul->symbol != bs->next_symbol[a]) {
|
||||
lock_ul_buffer(bs->buffers, bs->next_slot[a]);
|
||||
if (bs->buffers->ul_busy[a][bs->next_slot[a]] & (1 << bs->next_symbol[a])) {
|
||||
printf("%s: warning, antenna %d UL overflow (sl.symbol %d.%d)\n", __FUNCTION__,
|
||||
a, bs->next_slot[a], bs->next_symbol[a]);
|
||||
}
|
||||
|
||||
memset(bs->buffers->ul[bs->next_slot] + bs->next_symbol * 1272*4,
|
||||
memset(bs->buffers->ul[a][bs->next_slot[a]] + bs->next_symbol[a] * 1272*4,
|
||||
0, 1272*4);
|
||||
bs->buffers->ul_busy[bs->next_slot] |= (1 << bs->next_symbol);
|
||||
signal_ul_buffer(bs->buffers, bs->next_slot);
|
||||
unlock_ul_buffer(bs->buffers, bs->next_slot);
|
||||
bs->buffers->ul_busy[a][bs->next_slot[a]] |= (1 << bs->next_symbol[a]);
|
||||
signal_ul_buffer(bs->buffers, bs->next_slot[a]);
|
||||
unlock_ul_buffer(bs->buffers, bs->next_slot[a]);
|
||||
|
||||
bs->next_symbol++;
|
||||
if (bs->next_symbol == 14) {
|
||||
bs->next_symbol = 0;
|
||||
bs->next_slot = (bs->next_slot + 1) % 20;
|
||||
if (bs->next_slot == 0) {
|
||||
bs->expected_benetel_frame++;
|
||||
bs->expected_benetel_frame &= 255;
|
||||
bs->next_symbol[a]++;
|
||||
if (bs->next_symbol[a] == 14) {
|
||||
bs->next_symbol[a] = 0;
|
||||
bs->next_slot[a] = (bs->next_slot[a] + 1) % 20;
|
||||
if (bs->next_slot[a] == 0) {
|
||||
bs->expected_benetel_frame[a]++;
|
||||
bs->expected_benetel_frame[a] &= 255;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
lock_ul_buffer(bs->buffers, bs->next_slot);
|
||||
if (bs->buffers->ul_busy[bs->next_slot] & (1 << bs->next_symbol)) {
|
||||
printf("%s: warning, UL overflow (sl.symbol %d.%d)\n", __FUNCTION__,
|
||||
bs->next_slot, bs->next_symbol);
|
||||
lock_ul_buffer(bs->buffers, bs->next_slot[a]);
|
||||
if (bs->buffers->ul_busy[a][bs->next_slot[a]] & (1 << bs->next_symbol[a])) {
|
||||
printf("%s: warning, antenna %d UL overflow (sl.symbol %d.%d)\n", __FUNCTION__,
|
||||
a, bs->next_slot[a], bs->next_symbol[a]);
|
||||
}
|
||||
|
||||
memcpy(bs->buffers->ul[bs->next_slot] + bs->next_symbol * 1272*4,
|
||||
memcpy(bs->buffers->ul[a][bs->next_slot[a]] + bs->next_symbol[a] * 1272*4,
|
||||
ul->iq, 1272*4);
|
||||
bs->buffers->ul_busy[bs->next_slot] |= (1 << bs->next_symbol);
|
||||
signal_ul_buffer(bs->buffers, bs->next_slot);
|
||||
unlock_ul_buffer(bs->buffers, bs->next_slot);
|
||||
bs->buffers->ul_busy[a][bs->next_slot[a]] |= (1 << bs->next_symbol[a]);
|
||||
signal_ul_buffer(bs->buffers, bs->next_slot[a]);
|
||||
unlock_ul_buffer(bs->buffers, bs->next_slot[a]);
|
||||
|
||||
bs->next_symbol++;
|
||||
if (bs->next_symbol == 14) {
|
||||
bs->next_symbol = 0;
|
||||
bs->next_slot = (bs->next_slot + 1) % 20;
|
||||
if (bs->next_slot == 0) {
|
||||
bs->expected_benetel_frame++;
|
||||
bs->expected_benetel_frame &= 255;
|
||||
bs->next_symbol[a]++;
|
||||
if (bs->next_symbol[a] == 14) {
|
||||
bs->next_symbol[a] = 0;
|
||||
bs->next_slot[a] = (bs->next_slot[a] + 1) % 20;
|
||||
if (bs->next_slot[a] == 0) {
|
||||
bs->expected_benetel_frame[a]++;
|
||||
bs->expected_benetel_frame[a] &= 255;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,9 +26,10 @@
|
||||
|
||||
typedef struct {
|
||||
shared_buffers *buffers;
|
||||
int next_slot;
|
||||
int next_symbol;
|
||||
int expected_benetel_frame;
|
||||
/* [2] is for two antennas */
|
||||
int next_slot[2];
|
||||
int next_symbol[2];
|
||||
int expected_benetel_frame[2];
|
||||
char *dpdk_main_command_line;
|
||||
} benetel_t;
|
||||
|
||||
|
||||
@@ -68,7 +68,8 @@ void *benetel_start_dpdk(char *ifname, shared_buffers *buffers, char *dpdk_main_
|
||||
|
||||
bs->buffers = buffers;
|
||||
|
||||
bs->expected_benetel_frame = 255;
|
||||
bs->expected_benetel_frame[0] = 255;
|
||||
bs->expected_benetel_frame[1] = 255;
|
||||
|
||||
bs->dpdk_main_command_line = dpdk_main_command_line;
|
||||
|
||||
|
||||
@@ -45,11 +45,16 @@ void init_buffers(shared_buffers *s)
|
||||
* needs to have slots 1, 2 and 3, 4 and 5 ready. Let's pretend
|
||||
* they are ready.
|
||||
*/
|
||||
s->dl_busy[1] = 0x3fff;
|
||||
s->dl_busy[2] = 0x3fff;
|
||||
s->dl_busy[3] = 0x3fff;
|
||||
s->dl_busy[4] = 0x3fff;
|
||||
s->dl_busy[5] = 0x3fff;
|
||||
s->dl_busy[0][1] = 0x3fff;
|
||||
s->dl_busy[0][2] = 0x3fff;
|
||||
s->dl_busy[0][3] = 0x3fff;
|
||||
s->dl_busy[0][4] = 0x3fff;
|
||||
s->dl_busy[0][5] = 0x3fff;
|
||||
s->dl_busy[1][1] = 0x3fff;
|
||||
s->dl_busy[1][2] = 0x3fff;
|
||||
s->dl_busy[1][3] = 0x3fff;
|
||||
s->dl_busy[1][4] = 0x3fff;
|
||||
s->dl_busy[1][5] = 0x3fff;
|
||||
}
|
||||
|
||||
void lock_dl_buffer(shared_buffers *s, int slot)
|
||||
|
||||
@@ -26,10 +26,11 @@
|
||||
#include <stdint.h>
|
||||
|
||||
typedef struct {
|
||||
unsigned char dl[20][14*1272*4];
|
||||
unsigned char ul[20][14*1272*4];
|
||||
uint16_t dl_busy[20];
|
||||
uint16_t ul_busy[20];
|
||||
/* [2] is for two antennas */
|
||||
unsigned char dl[2][20][14*1272*4];
|
||||
unsigned char ul[2][20][14*1272*4];
|
||||
uint16_t dl_busy[2][20];
|
||||
uint16_t ul_busy[2][20];
|
||||
|
||||
pthread_mutex_t m_ul[20];
|
||||
pthread_cond_t c_ul[20];
|
||||
|
||||
@@ -76,15 +76,16 @@ extern RAN_CONTEXT_t RC;
|
||||
/* configuration parameters for the rfsimulator device */
|
||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||
/*-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
#define RFSIMULATOR_PARAMS_DESC {\
|
||||
{"serveraddr", "<ip address to connect to>\n", 0, strptr:&(rfsimulator->ip), defstrval:"127.0.0.1", TYPE_STRING, 0 },\
|
||||
{"serverport", "<port to connect to>\n", 0, u16ptr:&(rfsimulator->port), defuintval:PORT, TYPE_UINT16, 0 },\
|
||||
{RFSIMU_OPTIONS_PARAMNAME, RFSIM_CONFIG_HELP_OPTIONS, 0, strlistptr:NULL, defstrlistval:NULL, TYPE_STRINGLIST,0 },\
|
||||
{"IQfile", "<file path to use when saving IQs>\n", 0, strptr:&(saveF), defstrval:"/tmp/rfsimulator.iqs",TYPE_STRING, 0 },\
|
||||
{"modelname", "<channel model name>\n", 0, strptr:&(modelname), defstrval:"AWGN", TYPE_STRING, 0 },\
|
||||
{"ploss", "<channel path loss in dB>\n", 0, dblptr:&(rfsimulator->chan_pathloss), defdblval:0, TYPE_DOUBLE, 0 },\
|
||||
{"forgetfact", "<channel forget factor ((0 to 1)>\n", 0, dblptr:&(rfsimulator->chan_forgetfact), defdblval:0, TYPE_DOUBLE, 0 },\
|
||||
{"offset", "<channel offset in samps>\n", 0, iptr:&(rfsimulator->chan_offset), defintval:0, TYPE_INT, 0 }\
|
||||
#define simOpt PARAMFLAG_NOFREE|PARAMFLAG_CMDLINE_NOPREFIXENABLED
|
||||
#define RFSIMULATOR_PARAMS_DESC { \
|
||||
{"serveraddr", "<ip address to connect to>\n", simOpt , strptr:&(rfsimulator->ip), defstrval:"127.0.0.1", TYPE_STRING, 0 },\
|
||||
{"serverport", "<port to connect to>\n", simOpt, u16ptr:&(rfsimulator->port), defuintval:PORT, TYPE_UINT16, 0 },\
|
||||
{RFSIMU_OPTIONS_PARAMNAME, RFSIM_CONFIG_HELP_OPTIONS, 0, strlistptr:NULL, defstrlistval:NULL, TYPE_STRINGLIST,0 },\
|
||||
{"IQfile", "<file path to use when saving IQs>\n",simOpt, strptr:&(saveF), defstrval:"/tmp/rfsimulator.iqs",TYPE_STRING, 0 },\
|
||||
{"modelname", "<channel model name>\n", simOpt, strptr:&(modelname), defstrval:"AWGN", TYPE_STRING, 0 },\
|
||||
{"ploss", "<channel path loss in dB>\n", simOpt, dblptr:&(rfsimulator->chan_pathloss), defdblval:0, TYPE_DOUBLE, 0 },\
|
||||
{"forgetfact", "<channel forget factor ((0 to 1)>\n", simOpt, dblptr:&(rfsimulator->chan_forgetfact), defdblval:0, TYPE_DOUBLE, 0 },\
|
||||
{"offset", "<channel offset in samps>\n", simOpt, iptr:&(rfsimulator->chan_offset), defintval:0, TYPE_INT, 0 }\
|
||||
};
|
||||
|
||||
|
||||
@@ -137,7 +138,7 @@ typedef struct {
|
||||
} rfsimulator_state_t;
|
||||
|
||||
|
||||
void allocCirBuf(rfsimulator_state_t *bridge, int sock) {
|
||||
static void allocCirBuf(rfsimulator_state_t *bridge, int sock) {
|
||||
buffer_t *ptr=&bridge->buf[sock];
|
||||
AssertFatal ( (ptr->circularBuf=(sample_t *) malloc(sampleToByte(CirSize,1))) != NULL, "");
|
||||
ptr->circularBufEnd=((char *)ptr->circularBuf)+sampleToByte(CirSize,1);
|
||||
@@ -195,7 +196,7 @@ void allocCirBuf(rfsimulator_state_t *bridge, int sock) {
|
||||
}
|
||||
}
|
||||
|
||||
void removeCirBuf(rfsimulator_state_t *bridge, int sock) {
|
||||
static void removeCirBuf(rfsimulator_state_t *bridge, int sock) {
|
||||
AssertFatal( epoll_ctl(bridge->epollfd, EPOLL_CTL_DEL, sock, NULL) != -1, "");
|
||||
close(sock);
|
||||
free(bridge->buf[sock].circularBuf);
|
||||
@@ -206,12 +207,12 @@ void removeCirBuf(rfsimulator_state_t *bridge, int sock) {
|
||||
bridge->buf[sock].conn_sock=-1;
|
||||
}
|
||||
|
||||
void socketError(rfsimulator_state_t *bridge, int sock) {
|
||||
static void socketError(rfsimulator_state_t *bridge, int sock) {
|
||||
if (bridge->buf[sock].conn_sock!=-1) {
|
||||
LOG_W(HW,"Lost socket \n");
|
||||
removeCirBuf(bridge, sock);
|
||||
|
||||
if (bridge->typeStamp==UE_MAGICDL_FDD)
|
||||
if (bridge->typeStamp==UE_MAGICDL)
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
@@ -229,7 +230,7 @@ enum blocking_t {
|
||||
blocking
|
||||
};
|
||||
|
||||
void setblocking(int sock, enum blocking_t active) {
|
||||
static void setblocking(int sock, enum blocking_t active) {
|
||||
int opts;
|
||||
AssertFatal( (opts = fcntl(sock, F_GETFL)) >= 0,"");
|
||||
|
||||
@@ -243,7 +244,7 @@ void setblocking(int sock, enum blocking_t active) {
|
||||
|
||||
static bool flushInput(rfsimulator_state_t *t, int timeout, int nsamps);
|
||||
|
||||
void fullwrite(int fd, void *_buf, ssize_t count, rfsimulator_state_t *t) {
|
||||
static void fullwrite(int fd, void *_buf, ssize_t count, rfsimulator_state_t *t) {
|
||||
if (t->saveIQfile != -1) {
|
||||
if (write(t->saveIQfile, _buf, count) != count )
|
||||
LOG_E(HW,"write in save iq file failed (%s)\n",strerror(errno));
|
||||
@@ -277,7 +278,7 @@ void fullwrite(int fd, void *_buf, ssize_t count, rfsimulator_state_t *t) {
|
||||
}
|
||||
}
|
||||
|
||||
void rfsimulator_readconfig(rfsimulator_state_t *rfsimulator) {
|
||||
static void rfsimulator_readconfig(rfsimulator_state_t *rfsimulator) {
|
||||
char *saveF=NULL;
|
||||
char *modelname=NULL;
|
||||
paramdef_t rfsimu_params[] = RFSIMULATOR_PARAMS_DESC;
|
||||
@@ -312,9 +313,9 @@ void rfsimulator_readconfig(rfsimulator_state_t *rfsimulator) {
|
||||
|
||||
if ( strncasecmp(rfsimulator->ip,"enb",3) == 0 ||
|
||||
strncasecmp(rfsimulator->ip,"server",3) == 0 )
|
||||
rfsimulator->typeStamp = ENB_MAGICDL_FDD;
|
||||
rfsimulator->typeStamp = ENB_MAGICDL;
|
||||
else
|
||||
rfsimulator->typeStamp = UE_MAGICDL_FDD;
|
||||
rfsimulator->typeStamp = UE_MAGICDL;
|
||||
}
|
||||
|
||||
static int rfsimu_setchanmod_cmd(char *buff, int debug, telnet_printfunc_t prnt, void *arg) {
|
||||
@@ -358,9 +359,9 @@ static int rfsimu_setchanmod_cmd(char *buff, int debug, telnet_printfunc_t prnt,
|
||||
return CMDSTATUS_FOUND;
|
||||
}
|
||||
|
||||
int server_start(openair0_device *device) {
|
||||
static int startServer(openair0_device *device) {
|
||||
rfsimulator_state_t *t = (rfsimulator_state_t *) device->priv;
|
||||
t->typeStamp=ENB_MAGICDL_FDD;
|
||||
t->typeStamp=ENB_MAGICDL;
|
||||
AssertFatal((t->listen_sock = socket(AF_INET, SOCK_STREAM, 0)) >= 0, "");
|
||||
int enable = 1;
|
||||
AssertFatal(setsockopt(t->listen_sock, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(int)) == 0, "");
|
||||
@@ -381,9 +382,9 @@ sin_addr:
|
||||
return 0;
|
||||
}
|
||||
|
||||
int start_ue(openair0_device *device) {
|
||||
static int startClient(openair0_device *device) {
|
||||
rfsimulator_state_t *t = device->priv;
|
||||
t->typeStamp=UE_MAGICDL_FDD;
|
||||
t->typeStamp=UE_MAGICDL;
|
||||
int sock;
|
||||
AssertFatal((sock = socket(AF_INET, SOCK_STREAM, 0)) >= 0, "");
|
||||
struct sockaddr_in addr = {
|
||||
@@ -458,7 +459,7 @@ static int rfsimulator_write_internal(rfsimulator_state_t *t, openair0_timestamp
|
||||
return nsamps;
|
||||
}
|
||||
|
||||
int rfsimulator_write(openair0_device *device, openair0_timestamp timestamp, void **samplesVoid, int nsamps, int nbAnt, int flags) {
|
||||
static int rfsimulator_write(openair0_device *device, openair0_timestamp timestamp, void **samplesVoid, int nsamps, int nbAnt, int flags) {
|
||||
return rfsimulator_write_internal(device->priv, timestamp, samplesVoid, nsamps, nbAnt, flags, false);
|
||||
}
|
||||
|
||||
@@ -483,7 +484,7 @@ static bool flushInput(rfsimulator_state_t *t, int timeout, int nsamps_for_initi
|
||||
AssertFatal( (conn_sock = accept(t->listen_sock,NULL,NULL)) != -1, "");
|
||||
setblocking(conn_sock, notBlocking);
|
||||
allocCirBuf(t, conn_sock);
|
||||
LOG_I(HW,"A ue connected, sending the current time\n");
|
||||
LOG_I(HW,"A client connected, sending the current time\n");
|
||||
struct complex16 v= {0};
|
||||
void *samplesVoid[t->tx_num_channels];
|
||||
|
||||
@@ -534,8 +535,8 @@ static bool flushInput(rfsimulator_state_t *t, int timeout, int nsamps_for_initi
|
||||
|
||||
// check the header and start block transfer
|
||||
if ( b->headerMode==true && b->remainToTransfer==0) {
|
||||
AssertFatal( (t->typeStamp == UE_MAGICDL_FDD && b->th.magic==ENB_MAGICDL_FDD) ||
|
||||
(t->typeStamp == ENB_MAGICDL_FDD && b->th.magic==UE_MAGICDL_FDD), "Socket Error in protocol");
|
||||
AssertFatal( (t->typeStamp == UE_MAGICDL && b->th.magic==ENB_MAGICDL) ||
|
||||
(t->typeStamp == ENB_MAGICDL && b->th.magic==UE_MAGICDL), "Socket Error in protocol");
|
||||
b->headerMode=false;
|
||||
|
||||
if ( t->nextTimestamp == 0 ) { // First block in UE, resync with the eNB current TS
|
||||
@@ -606,7 +607,7 @@ static bool flushInput(rfsimulator_state_t *t, int timeout, int nsamps_for_initi
|
||||
return nfds>0;
|
||||
}
|
||||
|
||||
int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimestamp, void **samplesVoid, int nsamps, int nbAnt) {
|
||||
static int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimestamp, void **samplesVoid, int nsamps, int nbAnt) {
|
||||
if (nbAnt != 1) {
|
||||
LOG_W(HW, "rfsimulator: only 1 antenna tested\n");
|
||||
}
|
||||
@@ -748,31 +749,24 @@ int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimestamp, vo
|
||||
signal_energy(samplesVoid[0], nsamps));
|
||||
return nsamps;
|
||||
}
|
||||
int rfsimulator_request(openair0_device *device, void *msg, ssize_t msg_len) {
|
||||
abort();
|
||||
|
||||
static int rfsimulator_get_stats(openair0_device *device) {
|
||||
return 0;
|
||||
}
|
||||
int rfsimulator_reply(openair0_device *device, void *msg, ssize_t msg_len) {
|
||||
abort();
|
||||
static int rfsimulator_reset_stats(openair0_device *device) {
|
||||
return 0;
|
||||
}
|
||||
int rfsimulator_get_stats(openair0_device *device) {
|
||||
static void rfsimulator_end(openair0_device *device) {}
|
||||
static int rfsimulator_stop(openair0_device *device) {
|
||||
return 0;
|
||||
}
|
||||
int rfsimulator_reset_stats(openair0_device *device) {
|
||||
static int rfsimulator_set_freq(openair0_device *device, openair0_config_t *openair0_cfg,int exmimo_dump_config) {
|
||||
return 0;
|
||||
}
|
||||
void rfsimulator_end(openair0_device *device) {}
|
||||
int rfsimulator_stop(openair0_device *device) {
|
||||
static int rfsimulator_set_gains(openair0_device *device, openair0_config_t *openair0_cfg) {
|
||||
return 0;
|
||||
}
|
||||
int rfsimulator_set_freq(openair0_device *device, openair0_config_t *openair0_cfg,int exmimo_dump_config) {
|
||||
return 0;
|
||||
}
|
||||
int rfsimulator_set_gains(openair0_device *device, openair0_config_t *openair0_cfg) {
|
||||
return 0;
|
||||
}
|
||||
int rfsimulator_write_init(openair0_device *device) {
|
||||
static int rfsimulator_write_init(openair0_device *device) {
|
||||
return 0;
|
||||
}
|
||||
__attribute__((__visibility__("default")))
|
||||
@@ -782,10 +776,10 @@ int device_init(openair0_device *device, openair0_config_t *openair0_cfg) {
|
||||
rfsimulator_state_t *rfsimulator = (rfsimulator_state_t *)calloc(sizeof(rfsimulator_state_t),1);
|
||||
rfsimulator_readconfig(rfsimulator);
|
||||
pthread_mutex_init(&Sockmutex, NULL);
|
||||
LOG_I(HW,"rfsimulator: running as %s\n", rfsimulator-> typeStamp == ENB_MAGICDL_FDD ? "(eg)NB" : "UE");
|
||||
device->trx_start_func = rfsimulator->typeStamp == ENB_MAGICDL_FDD ?
|
||||
server_start :
|
||||
start_ue;
|
||||
LOG_I(HW,"rfsimulator: running as %s\n", rfsimulator-> typeStamp == ENB_MAGICDL ? "server waiting opposite rfsimulators to connect" : "client: will connect to a rfsimulator server side");
|
||||
device->trx_start_func = rfsimulator->typeStamp == ENB_MAGICDL ?
|
||||
startServer :
|
||||
startClient;
|
||||
device->trx_get_stats_func = rfsimulator_get_stats;
|
||||
device->trx_reset_stats_func = rfsimulator_reset_stats;
|
||||
device->trx_end_func = rfsimulator_end;
|
||||
@@ -795,7 +789,7 @@ int device_init(openair0_device *device, openair0_config_t *openair0_cfg) {
|
||||
device->trx_write_func = rfsimulator_write;
|
||||
device->trx_read_func = rfsimulator_read;
|
||||
/* let's pretend to be a b2x0 */
|
||||
device->type = USRP_B200_DEV;
|
||||
device->type = RFSIMULATOR;
|
||||
device->openair0_cfg=&openair0_cfg[0];
|
||||
device->priv = rfsimulator;
|
||||
device->trx_write_init = rfsimulator_write_init;
|
||||
|
||||
@@ -200,7 +200,10 @@ int main(int argc, char *argv[]) {
|
||||
int bufSize=100000;
|
||||
void *buff=malloc(bufSize);
|
||||
uint64_t timestamp=0;
|
||||
const int blockSize=1000;
|
||||
const int blockSize=1920;
|
||||
|
||||
// If fileSize is not multiple of blockSize*4 then discard remaining samples
|
||||
fileSize = (fileSize/(blockSize<<2))*(blockSize<<2);
|
||||
|
||||
while (1) {
|
||||
//Rewind the file to loop on the samples
|
||||
|
||||
@@ -230,12 +230,12 @@ RUs = (
|
||||
local_if_name = "dpdk";
|
||||
sdr_addrs = "softmodem -m 2048 -l 35 -n 2 -b 0000:81:00.3 --proc-type auto --file-prefix ggg -- -p 0x1";
|
||||
#sdr_addrs = "softmodem -l 8 -n 2 -- -p 0x2";
|
||||
remote_address = "127.0.0.2";
|
||||
local_address = "127.0.0.1";
|
||||
local_portc = 50000;
|
||||
remote_portc = 50000;
|
||||
local_portd = 50001;
|
||||
remote_portd = 50001;
|
||||
#remote_address = "127.0.0.2";
|
||||
#local_address = "127.0.0.1";
|
||||
#local_portc = 50000;
|
||||
#remote_portc = 50000;
|
||||
#local_portd = 50001;
|
||||
#remote_portd = 50001;
|
||||
local_rf = "no"
|
||||
tr_preference = "raw_if4p5"
|
||||
nb_tx = 1
|
||||
|
||||
@@ -23,6 +23,9 @@ gNBs =
|
||||
|
||||
ssb_SubcarrierOffset = 31; //0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
#pusch_TargetSNRx10 = 200;
|
||||
#pucch_TargetSNRx10 = 200;
|
||||
pusch_TargetSNRx10 = 200;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
|
||||
@@ -102,8 +105,9 @@ gNBs =
|
||||
prach_msg1_FDM = 0;
|
||||
prach_msg1_FrequencyStart = 74;
|
||||
zeroCorrelationZoneConfig = 13;
|
||||
#preambleReceivedTargetPower = -118;
|
||||
preambleReceivedTargetPower = -104;
|
||||
preambleReceivedTargetPower = -118;
|
||||
#preambleReceivedTargetPower = -104;
|
||||
#preambleReceivedTargetPower = -108;
|
||||
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||
preambleTransMax = 6;
|
||||
#powerRampingStep
|
||||
@@ -149,14 +153,16 @@ gNBs =
|
||||
initialULBWPstartSymbolAndLength_2 = 52;
|
||||
|
||||
msg3_DeltaPreamble = 1;
|
||||
p0_NominalWithGrant =-90;
|
||||
#p0_NominalWithGrant =-90;
|
||||
p0_NominalWithGrant =-118;
|
||||
|
||||
# pucch-ConfigCommon setup :
|
||||
# pucchGroupHopping
|
||||
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||
pucchGroupHopping = 0;
|
||||
hoppingId = 40;
|
||||
p0_nominal = -90;
|
||||
#p0_nominal = -90;
|
||||
p0_nominal = -118;
|
||||
# ssb_PositionsInBurs_BitmapPR
|
||||
# 1=short, 2=medium, 3=long
|
||||
ssb_PositionsInBurst_PR = 2;
|
||||
@@ -189,7 +195,7 @@ gNBs =
|
||||
nrofUplinkSymbols = 4; //0; //4;
|
||||
|
||||
#ssPBCH_BlockPower = 10;
|
||||
ssPBCH_BlockPower = 10;
|
||||
ssPBCH_BlockPower = -35;
|
||||
}
|
||||
|
||||
);
|
||||
@@ -229,9 +235,9 @@ gNBs =
|
||||
{
|
||||
|
||||
GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||
GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.18.195/24";
|
||||
GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.18.187/24";
|
||||
GNB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||
GNB_IPV4_ADDRESS_FOR_S1U = "192.168.18.195/24";
|
||||
GNB_IPV4_ADDRESS_FOR_S1U = "192.168.18.187/24";
|
||||
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||
GNB_IPV4_ADDRESS_FOR_X2C = "127.0.0.2/24";
|
||||
GNB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||
@@ -251,6 +257,7 @@ L1s = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
pusch_proc_threads = 8;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ gNBs =
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
|
||||
@@ -23,6 +23,7 @@ gNBs =
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
|
||||
@@ -23,6 +23,7 @@ gNBs =
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
pusch_TargetSNRx10 = 200;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ gNBs =
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
@@ -225,19 +226,20 @@ MACRLCs = (
|
||||
num_cc = 1;
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "local_RRC";
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
L1s = (
|
||||
{
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
}
|
||||
pusch_proc_threads = 8;
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "yes"
|
||||
local_rf = "yes"
|
||||
nb_tx = 1;
|
||||
nb_rx = 1;
|
||||
att_tx = 0;
|
||||
@@ -246,8 +248,14 @@ RUs = (
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 75;
|
||||
eNB_instances = [0];
|
||||
#beamforming 1x4 matrix:
|
||||
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
||||
## beamforming 1x2 matrix: 1 layer x 2 antennas
|
||||
bf_weights = [0x00007fff, 0x0000];
|
||||
## beamforming 1x4 matrix: 1 layer x 4 antennas
|
||||
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
|
||||
## beamforming 2x2 matrix:
|
||||
#bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
|
||||
## beamforming 4x4 matrix:
|
||||
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
||||
sdr_addrs = "addr=192.168.10.2,mgmt_addr=192.168.10.2,second_addr=192.168.20.2";
|
||||
clock_src = "external";
|
||||
# if_freq = 3700000000L;
|
||||
|
||||
@@ -23,6 +23,7 @@ gNBs =
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
@@ -225,19 +226,20 @@ MACRLCs = (
|
||||
num_cc = 1;
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "local_RRC";
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
L1s = (
|
||||
{
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
}
|
||||
pusch_proc_threads = 8;
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "yes"
|
||||
local_rf = "yes"
|
||||
nb_tx = 1;
|
||||
nb_rx = 1;
|
||||
att_tx = 0;
|
||||
@@ -246,8 +248,14 @@ RUs = (
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 114;
|
||||
eNB_instances = [0];
|
||||
#beamforming 1x4 matrix:
|
||||
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
||||
## beamforming 1x2 matrix: 1 layer x 2 antennas
|
||||
bf_weights = [0x00007fff, 0x0000];
|
||||
## beamforming 1x4 matrix: 1 layer x 4 antennas
|
||||
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
|
||||
## beamforming 2x2 matrix:
|
||||
#bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
|
||||
## beamforming 4x4 matrix:
|
||||
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
||||
sdr_addrs = "type=x300";
|
||||
clock_src = "external";
|
||||
# if_freq = 3700000000L;
|
||||
|
||||
@@ -23,6 +23,7 @@ gNBs =
|
||||
|
||||
ssb_SubcarrierOffset = 31;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
|
||||
@@ -23,6 +23,7 @@ gNBs =
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
|
||||
@@ -23,6 +23,7 @@ gNBs =
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
|
||||
@@ -23,6 +23,7 @@ gNBs =
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
@@ -228,7 +229,7 @@ L1s = (
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "yes"
|
||||
local_rf = "yes"
|
||||
nb_tx = 1
|
||||
nb_rx = 1
|
||||
att_tx = 0
|
||||
@@ -237,7 +238,15 @@ RUs = (
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 114;
|
||||
eNB_instances = [0];
|
||||
sdr_addrs = "type=b200";
|
||||
## beamforming 1x2 matrix: 1 layer x 2 antennas
|
||||
#bf_weights = [0x00007fff, 0x00007fff];
|
||||
## beamforming 1x4 matrix: 1 layer x 4 antennas
|
||||
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
|
||||
## beamforming 2x2 matrix:
|
||||
#bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
|
||||
## beamforming 4x4 matrix:
|
||||
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
||||
sdr_addrs = "type=b200";
|
||||
#clock_src = "external";
|
||||
}
|
||||
);
|
||||
|
||||
@@ -227,20 +227,20 @@ MACRLCs = (
|
||||
num_cc = 1;
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "local_RRC";
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
L1s = (
|
||||
{
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
pusch_proc_threads = 8;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "yes"
|
||||
local_rf = "yes"
|
||||
nb_tx = 1
|
||||
nb_rx = 1
|
||||
att_tx = 0
|
||||
@@ -249,9 +249,9 @@ RUs = (
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 50;
|
||||
eNB_instances = [0];
|
||||
##beamforming 1x2 matrix: 1 layer x 2 antennas
|
||||
## beamforming 1x2 matrix: 1 layer x 2 antennas
|
||||
#bf_weights = [0x00007fff, 0x00007fff];
|
||||
##beamforming 1x4 matrix: 1 layer x 4 antennas
|
||||
## beamforming 1x4 matrix: 1 layer x 4 antennas
|
||||
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
|
||||
## beamforming 2x2 matrix:
|
||||
#bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
|
||||
|
||||
@@ -23,7 +23,8 @@ gNBs =
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
|
||||
pusch_AntennaPorts = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
#spCellConfigCommon
|
||||
@@ -135,18 +136,17 @@ gNBs =
|
||||
initialULBWPmappingType_0 = 1
|
||||
# this is SS=0 L=11
|
||||
initialULBWPstartSymbolAndLength_0 = 55;
|
||||
|
||||
initialULBWPk2_1 = 6;
|
||||
|
||||
initialULBWPk2_1 = 6;
|
||||
initialULBWPmappingType_1 = 1;
|
||||
# this is SS=0 L=12
|
||||
initialULBWPstartSymbolAndLength_1 = 69;
|
||||
|
||||
initialULBWPk2_2 = 7;
|
||||
initialULBWPk2_2 = 7;
|
||||
initialULBWPmappingType_2 = 1;
|
||||
# this is SS=10 L=4
|
||||
initialULBWPstartSymbolAndLength_2 = 52;
|
||||
|
||||
|
||||
msg3_DeltaPreamble = 1;
|
||||
p0_NominalWithGrant =-90;
|
||||
|
||||
@@ -227,14 +227,15 @@ MACRLCs = (
|
||||
num_cc = 1;
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "local_RRC";
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
L1s = (
|
||||
{
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
}
|
||||
pusch_proc_threads = 8;
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
@@ -248,8 +249,14 @@ RUs = (
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 114;
|
||||
eNB_instances = [0];
|
||||
#beamforming 1x4 matrix:
|
||||
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
||||
##beamforming 1x2 matrix: 1 layer x 2 antennas
|
||||
bf_weights = [0x00007fff, 0x0000];
|
||||
##beamforming 1x4 matrix: 1 layer x 4 antennas
|
||||
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
|
||||
## beamforming 2x2 matrix:
|
||||
# bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
|
||||
## beamforming 4x4 matrix:
|
||||
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
||||
sdr_addrs = "type=x300";
|
||||
clock_src = "external";
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ gNBs =
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
@@ -33,7 +34,7 @@ gNBs =
|
||||
# downlinkConfigCommon
|
||||
#frequencyInfoDL
|
||||
# this is 3600 MHz + 84 PRBs@30kHz SCS (same as initial BWP)
|
||||
absoluteFrequencySSB = 642364;
|
||||
absoluteFrequencySSB = 642016;#642364;
|
||||
dl_frequencyBand = 78;
|
||||
# this is 3600 MHz
|
||||
dl_absoluteFrequencyPointA = 640000;
|
||||
@@ -130,16 +131,21 @@ gNBs =
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
restrictedSetConfig = 0,
|
||||
# pusch-ConfigCommon (up to 16 elements)
|
||||
initialULBWPk2_0 = 2;
|
||||
initialULBWPk2_0 = 6; #2;
|
||||
initialULBWPmappingType_0 = 1
|
||||
# this is SS=0 L=11
|
||||
initialULBWPstartSymbolAndLength_0 = 55;
|
||||
|
||||
initialULBWPk2_1 = 2;
|
||||
initialULBWPk2_1 = 6; #2;
|
||||
initialULBWPmappingType_1 = 1;
|
||||
# this is SS=0 L=12
|
||||
initialULBWPstartSymbolAndLength_1 = 69;
|
||||
|
||||
initialULBWPk2_2 = 7;
|
||||
initialULBWPmappingType_2 = 1;
|
||||
# this is SS=10 L=4
|
||||
initialULBWPstartSymbolAndLength_2 = 52;
|
||||
|
||||
|
||||
msg3_DeltaPreamble = 1;
|
||||
p0_NominalWithGrant =-90;
|
||||
|
||||
@@ -23,6 +23,7 @@ gNBs =
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
|
||||
@@ -23,6 +23,7 @@ gNBs =
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
@@ -130,16 +131,21 @@ gNBs =
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
restrictedSetConfig = 0,
|
||||
# pusch-ConfigCommon (up to 16 elements)
|
||||
initialULBWPk2_0 = 2;
|
||||
initialULBWPk2_0 = 6;#2;
|
||||
initialULBWPmappingType_0 = 1
|
||||
# this is SS=0 L=11
|
||||
initialULBWPstartSymbolAndLength_0 = 55;
|
||||
|
||||
initialULBWPk2_1 = 2;
|
||||
initialULBWPk2_1 = 6;#2;
|
||||
initialULBWPmappingType_1 = 1;
|
||||
# this is SS=0 L=12
|
||||
initialULBWPstartSymbolAndLength_1 = 69;
|
||||
|
||||
initialULBWPk2_2 = 7;
|
||||
initialULBWPmappingType_2 = 1;
|
||||
# this is SS=10 L=4
|
||||
initialULBWPstartSymbolAndLength_2 = 52;
|
||||
|
||||
|
||||
msg3_DeltaPreamble = 1;
|
||||
p0_NominalWithGrant =-90;
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
log_config = {
|
||||
global_log_level ="debug";
|
||||
global_log_verbosity ="medium";
|
||||
hw_log_level ="info";
|
||||
hw_log_verbosity ="medium";
|
||||
phy_log_level ="info";
|
||||
phy_log_verbosity ="medium";
|
||||
mac_log_level ="debug";
|
||||
mac_log_verbosity ="medium";
|
||||
rlc_log_level ="info";
|
||||
rlc_log_verbosity ="medium";
|
||||
pdcp_log_level ="info";
|
||||
pdcp_log_verbosity ="medium";
|
||||
rrc_log_level ="debug";
|
||||
rrc_log_verbosity ="full";
|
||||
};
|
||||
|
||||
|
||||
|
||||
L1s = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "nfapi";
|
||||
local_n_if_name = "lo";
|
||||
remote_n_address = "127.0.0.2"; // vnf addr
|
||||
local_n_address = "127.0.0.1"; // pnf addr
|
||||
local_n_portc = 50000; // pnf p5 port [!]
|
||||
remote_n_portc = 50001; // vnf p5 port
|
||||
local_n_portd = 50010; // pnf p7 port
|
||||
remote_n_portd = 50011; // vnf p7 port
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "yes"
|
||||
nb_tx = 1
|
||||
nb_rx = 1
|
||||
att_tx = 0
|
||||
att_rx = 0;
|
||||
bands = [7];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 114;
|
||||
sdr_addrs = "type=x300"; // USRP type
|
||||
}
|
||||
);
|
||||
@@ -0,0 +1,291 @@
|
||||
Active_gNBs = ( "gNB-Eurecom-5GNRBox");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
gNBs =
|
||||
(
|
||||
{
|
||||
////////// Identification parameters:
|
||||
gNB_ID = 0xe00;
|
||||
|
||||
cell_type = "CELL_MACRO_GNB";
|
||||
|
||||
gNB_name = "gNB-Eurecom-5GNRBox";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = 1;
|
||||
|
||||
plmn_list = ({mcc = 208; mnc = 93; mnc_length = 2;});
|
||||
|
||||
tr_s_preference = "local_mac"
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
#spCellConfigCommon
|
||||
|
||||
physCellId = 0;
|
||||
|
||||
# downlinkConfigCommon
|
||||
#frequencyInfoDL
|
||||
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
|
||||
absoluteFrequencySSB = 641032;
|
||||
dl_frequencyBand = 78;
|
||||
# this is 3600 MHz
|
||||
dl_absoluteFrequencyPointA = 640000;
|
||||
#scs-SpecificCarrierList
|
||||
dl_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
dl_subcarrierSpacing = 1;
|
||||
dl_carrierBandwidth = 106;
|
||||
#initialDownlinkBWP
|
||||
#genericParameters
|
||||
# this is RBstart=41,L=24 (275*(L-1))+RBstart
|
||||
initialDLBWPlocationAndBandwidth = 6366;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialDLBWPsubcarrierSpacing = 1;
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 12;
|
||||
initialDLBWPsearchSpaceZero = 0;
|
||||
#pdsch-ConfigCommon
|
||||
#pdschTimeDomainAllocationList (up to 16 entries)
|
||||
initialDLBWPk0_0 = 0;
|
||||
#initialULBWPmappingType
|
||||
#0=typeA,1=typeB
|
||||
initialDLBWPmappingType_0 = 0;
|
||||
#this is SS=1,L=13
|
||||
initialDLBWPstartSymbolAndLength_0 = 40;
|
||||
|
||||
initialDLBWPk0_1 = 0;
|
||||
initialDLBWPmappingType_1 = 0;
|
||||
#this is SS=2,L=12
|
||||
initialDLBWPstartSymbolAndLength_1 = 53;
|
||||
|
||||
initialDLBWPk0_2 = 0;
|
||||
initialDLBWPmappingType_2 = 0;
|
||||
#this is SS=1,L=12
|
||||
initialDLBWPstartSymbolAndLength_2 = 54;
|
||||
|
||||
initialDLBWPk0_3 = 0;
|
||||
initialDLBWPmappingType_3 = 0;
|
||||
#this is SS=1,L=5
|
||||
initialDLBWPstartSymbolAndLength_3 = 57;
|
||||
|
||||
#uplinkConfigCommon
|
||||
#frequencyInfoUL
|
||||
ul_frequencyBand = 78;
|
||||
#scs-SpecificCarrierList
|
||||
ul_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
ul_subcarrierSpacing = 1;
|
||||
ul_carrierBandwidth = 106;
|
||||
pMax = 20;
|
||||
#initialUplinkBWP
|
||||
#genericParameters
|
||||
initialULBWPlocationAndBandwidth = 6366;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialULBWPsubcarrierSpacing = 1;
|
||||
#rach-ConfigCommon
|
||||
#rach-ConfigGeneric
|
||||
prach_ConfigurationIndex = 98;
|
||||
#prach_msg1_FDM
|
||||
#0 = one, 1=two, 2=four, 3=eight
|
||||
prach_msg1_FDM = 0;
|
||||
prach_msg1_FrequencyStart = 0;
|
||||
zeroCorrelationZoneConfig = 13;
|
||||
preambleReceivedTargetPower = -118;
|
||||
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||
preambleTransMax = 6;
|
||||
#powerRampingStep
|
||||
# 0=dB0,1=dB2,2=dB4,3=dB6
|
||||
powerRampingStep = 1;
|
||||
#ra_ReponseWindow
|
||||
#1,2,4,8,10,20,40,80
|
||||
ra_ResponseWindow = 4;
|
||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||
#ra_ContentionResolutionTimer
|
||||
#(0..7) 8,16,24,32,40,48,56,64
|
||||
ra_ContentionResolutionTimer = 7;
|
||||
rsrp_ThresholdSSB = 19;
|
||||
#prach-RootSequenceIndex_PR
|
||||
#1 = 839, 2 = 139
|
||||
prach_RootSequenceIndex_PR = 2;
|
||||
prach_RootSequenceIndex = 1;
|
||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||
#
|
||||
msg1_SubcarrierSpacing = 1,
|
||||
# restrictedSetConfig
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
restrictedSetConfig = 0,
|
||||
|
||||
# pusch-ConfigCommon (up to 16 elements)
|
||||
initialULBWPk2_0 = 6;
|
||||
initialULBWPmappingType_0 = 1
|
||||
# this is SS=0 L=11
|
||||
initialULBWPstartSymbolAndLength_0 = 55;
|
||||
|
||||
initialULBWPk2_1 = 6;
|
||||
initialULBWPmappingType_1 = 1;
|
||||
# this is SS=0 L=12
|
||||
initialULBWPstartSymbolAndLength_1 = 69;
|
||||
|
||||
initialULBWPk2_2 = 7;
|
||||
initialULBWPmappingType_2 = 1;
|
||||
# this is SS=10 L=4
|
||||
initialULBWPstartSymbolAndLength_2 = 52;
|
||||
|
||||
msg3_DeltaPreamble = 1;
|
||||
p0_NominalWithGrant =-90;
|
||||
|
||||
# pucch-ConfigCommon setup :
|
||||
# pucchGroupHopping
|
||||
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||
pucchGroupHopping = 0;
|
||||
hoppingId = 40;
|
||||
p0_nominal = -90;
|
||||
# ssb_PositionsInBurs_BitmapPR
|
||||
# 1=short, 2=medium, 3=long
|
||||
ssb_PositionsInBurst_PR = 2;
|
||||
ssb_PositionsInBurst_Bitmap = 1;
|
||||
|
||||
# ssb_periodicityServingCell
|
||||
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
||||
ssb_periodicityServingCell = 2;
|
||||
|
||||
# dmrs_TypeA_position
|
||||
# 0 = pos2, 1 = pos3
|
||||
dmrs_TypeA_Position = 0;
|
||||
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
subcarrierSpacing = 1;
|
||||
|
||||
|
||||
#tdd-UL-DL-ConfigurationCommon
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
referenceSubcarrierSpacing = 1;
|
||||
# pattern1
|
||||
# dl_UL_TransmissionPeriodicity
|
||||
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
||||
dl_UL_TransmissionPeriodicity = 6;
|
||||
nrofDownlinkSlots = 7;
|
||||
nrofDownlinkSymbols = 6;
|
||||
nrofUplinkSlots = 2;
|
||||
nrofUplinkSymbols = 4;
|
||||
|
||||
ssPBCH_BlockPower = 10;
|
||||
}
|
||||
|
||||
|
||||
);
|
||||
|
||||
|
||||
|
||||
srb1_parameters :
|
||||
{
|
||||
# timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
|
||||
timer_poll_retransmit = 80;
|
||||
|
||||
# timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
|
||||
timer_reordering = 35;
|
||||
|
||||
# timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
|
||||
timer_status_prohibit = 0;
|
||||
|
||||
# poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
|
||||
poll_pdu = 4;
|
||||
|
||||
# poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
|
||||
poll_byte = 99999;
|
||||
|
||||
# max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
|
||||
max_retx_threshold = 4;
|
||||
}
|
||||
|
||||
# ------- SCTP definitions
|
||||
SCTP :
|
||||
{
|
||||
# Number of streams to use in input/output
|
||||
SCTP_INSTREAMS = 2;
|
||||
SCTP_OUTSTREAMS = 2;
|
||||
};
|
||||
|
||||
|
||||
////////// MME parameters:
|
||||
mme_ip_address = ( { ipv4 = "192.168.12.26";
|
||||
ipv6 = "192:168:30::17";
|
||||
active = "yes";
|
||||
preference = "ipv4";
|
||||
}
|
||||
);
|
||||
|
||||
NETWORK_INTERFACES :
|
||||
{
|
||||
|
||||
GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||
GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
|
||||
GNB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||
GNB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
|
||||
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
MACRLCs = (
|
||||
{
|
||||
num_cc = 1;
|
||||
local_s_if_name = "lo:";
|
||||
remote_s_address = "127.0.0.1"; // pnf addr [!]
|
||||
local_s_address = "127.0.0.2"; // vnf addr
|
||||
local_s_portc = 50001; // vnf p5 port
|
||||
remote_s_portc = 50000; // pnf p5 port [!]
|
||||
local_s_portd = 50011; // vnf p7 port [!]
|
||||
remote_s_portd = 50010; // pnf p7 port [!]
|
||||
tr_s_preference = "nfapi";
|
||||
tr_n_preference = "local_RRC";
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
log_config =
|
||||
{
|
||||
global_log_level ="info";
|
||||
global_log_verbosity ="medium";
|
||||
hw_log_level ="info";
|
||||
hw_log_verbosity ="medium";
|
||||
phy_log_level ="info";
|
||||
phy_log_verbosity ="medium";
|
||||
mac_log_level ="info";
|
||||
mac_log_verbosity ="high";
|
||||
rlc_log_level ="info";
|
||||
rlc_log_verbosity ="medium";
|
||||
pdcp_log_level ="info";
|
||||
pdcp_log_verbosity ="medium";
|
||||
rrc_log_level ="info";
|
||||
rrc_log_verbosity ="medium";
|
||||
};
|
||||
|
||||
@@ -23,6 +23,7 @@ gNBs =
|
||||
|
||||
ssb_SubcarrierOffset = 31; //0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
pusch_TargetSNRx10 = 200;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
|
||||
@@ -278,6 +279,18 @@ THREAD_STRUCT = (
|
||||
}
|
||||
);
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
# the first one of the list that an UE supports in chosen
|
||||
# valid values: nea0, nea1, nea2, nea3
|
||||
ciphering_algorithms = ( "nea0", "nea2" );
|
||||
|
||||
# preferred integrity algorithms
|
||||
# the first one of the list that an UE supports in chosen
|
||||
# valid values: nia0, nia1, nia2, nia3
|
||||
integrity_algorithms = ( "nia0" );
|
||||
};
|
||||
|
||||
log_config :
|
||||
{
|
||||
global_log_level ="info";
|
||||
|
||||
@@ -23,6 +23,7 @@ gNBs =
|
||||
|
||||
ssb_SubcarrierOffset = 31; //0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
|
||||
@@ -75,17 +75,12 @@ gNBs =
|
||||
initialDLBWPk0_2 = 0;
|
||||
initialDLBWPmappingType_2 = 0;
|
||||
#this is SS=1,L=12
|
||||
initialDLBWPstartSymbolAndLength_2 = 95;
|
||||
initialDLBWPstartSymbolAndLength_2 = 54;
|
||||
|
||||
initialDLBWPk0_3 = 0;
|
||||
initialDLBWPmappingType_3 = 0;
|
||||
#this is SS=2,L=7
|
||||
initialDLBWPstartSymbolAndLength_3 = 86;
|
||||
|
||||
initialDLBWPk0_4 = 0;
|
||||
initialDLBWPmappingType_4 = 0;
|
||||
#this is SS=2,L=5
|
||||
initialDLBWPstartSymbolAndLength_4 = 58;
|
||||
#this is SS=1,L=5
|
||||
initialDLBWPstartSymbolAndLength_3 = 57;
|
||||
|
||||
#uplinkConfigCommon
|
||||
#frequencyInfoUL
|
||||
|
||||
@@ -2986,6 +2986,7 @@ void RCconfig_RU(void) {
|
||||
RC.ru[j]->if_south = LOCAL_RF;
|
||||
RC.ru[j]->function = NGFI_RRU_IF4p5;
|
||||
RC.ru[j]->eth_params.transp_preference = ETH_RAW_IF4p5_MODE;
|
||||
RC.ru[j]->has_ctrl_prt =1;
|
||||
LOG_I(PHY,"Setting function for RU %d to NGFI_RRU_IF4p5 (raw)\n",j);
|
||||
}
|
||||
|
||||
@@ -3039,6 +3040,7 @@ else {
|
||||
RC.ru[j]->if_south = REMOTE_IF4p5;
|
||||
RC.ru[j]->function = NGFI_RAU_IF4p5;
|
||||
RC.ru[j]->eth_params.transp_preference = ETH_RAW_IF4p5_MODE;
|
||||
RC.ru[j]->has_ctrl_prt = 1;
|
||||
|
||||
if (strcmp(*(RUParamList.paramarray[j][RU_IS_SLAVE_IDX].strptr), "yes") == 0) RC.ru[j]->is_slave=1;
|
||||
else RC.ru[j]->is_slave=0;
|
||||
|
||||
@@ -583,6 +583,7 @@ int main ( int argc, char **argv )
|
||||
if (RC.nb_inst > 0) {
|
||||
/* Start the agent. If it is turned off in the configuration, it won't start */
|
||||
for (i = 0; i < RC.nb_inst; i++) {
|
||||
if(NFAPI_MODE != NFAPI_MODE_PNF)
|
||||
flexran_agent_start(i);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user