Commit ce2eedfa authored by yangjian's avatar yangjian

add srs location

parent c63e86a5
......@@ -2048,6 +2048,11 @@ target_link_libraries(lte-uesoftmodem PRIVATE
# nr-softmodem
###################################################
find_package(PythonInterp REQUIRED)
find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
add_executable(nr-softmodem
${rrc_h}
${nr_rrc_h}
......@@ -2055,6 +2060,10 @@ add_executable(nr-softmodem
${OPENAIR_DIR}/executables/nr-gnb.c
${OPENAIR_DIR}/executables/nr-ru.c
${OPENAIR_DIR}/executables/nr-softmodem.c
${OPENAIR_DIR}/executables/http_server.c
${OPENAIR_DIR}/executables/scatter_plot.cpp
${OPENAIR_DIR}/executables/socket_task.cpp
${OPENAIR_DIR}/executables/srs_circle_queue.c
${OPENAIR_DIR}/executables/softmodem-common.c
${OPENAIR_DIR}/radio/COMMON/common_lib.c
${OPENAIR_DIR}/radio/COMMON/record_player.c
......@@ -2073,6 +2082,7 @@ target_link_libraries(nr-softmodem PRIVATE
ITTI ${NAS_UE_LIB} lte_rrc nr_rrc
ngap s1ap L2_LTE_NR L2_NR MAC_NR_COMMON NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB SIMU SIMU_ETH
x2ap f1ap m2ap m3ap e1ap shlib_loader
${PYTHON_LIBRARIES} fftw3
-Wl,--end-group z dl)
target_link_libraries(nr-softmodem PRIVATE pthread m CONFIG_LIB rt sctp)
......
#!/bin/bash
sudo ./ran_build/build/nr-softmodem --sa -O ../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.1x4.oxgrf.conf
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "softmodem-common.h"
#include "http_server.h"
#define PORT 12345
#define BUFFER_SIZE 1024
extern int srs_pos;
extern int write_srs_get_count;
void handle_client(int client_socket) {
char buffer[BUFFER_SIZE] = {0};
char response_200[] = "HTTP/1.1 200 OK\n";
char response_401[] = "HTTP/1.1 401 Unauthorized\n";
int ofdm_symbol_num=0;
int pos=0;
// 读取客户端请求
read(client_socket, buffer, BUFFER_SIZE);
// printf("Received request:\n%s\n", buffer);
// 解析请求路径中的数字
if (sscanf(buffer, "GET /%d/%d ", &ofdm_symbol_num, &pos) == 2) {
printf("SRS ofdm_symbol_num: %d\n", ofdm_symbol_num);
printf("SRS pos: %d\n", pos);
int write_srs_get_count_tmp = __atomic_load_n(&write_srs_get_count, __ATOMIC_SEQ_CST);
if(write_srs_get_count_tmp == -1) {
__atomic_store_n(&srs_pos, pos, __ATOMIC_SEQ_CST);
__atomic_store_n(&write_srs_get_count, ofdm_symbol_num, __ATOMIC_SEQ_CST);
write(client_socket, response_200, strlen(response_200));
} else {
write(client_socket, response_401, strlen(response_401));
}
} else {
write(client_socket, response_401, strlen(response_401));
}
// 关闭连接
close(client_socket);
}
void *http_server(void *args_p)
{
int server_fd, client_socket;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
// 创建socket文件描述符
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("socket failed");
return NULL;
}
// 设置socket选项
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
perror("setsockopt");
return NULL;
}
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);
// 绑定socket到端口
if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
perror("bind failed");
return NULL;
}
// 开始监听
if (listen(server_fd, 3) < 0) {
perror("listen");
return NULL;
}
printf("Server listening on port %d...\n", PORT);
while (1) {
// 接受新连接
if ((client_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {
perror("accept");
continue;
}
printf("New connection from %s:%d\n",
inet_ntoa(address.sin_addr), ntohs(address.sin_port));
// 处理客户端请求
handle_client(client_socket);
}
}
#ifndef HTTP_SERVER_H_
#define HTTP_SERVER_H_
void *http_server(void *args_p);
#endif /* HTTP_SERVER_H_ */
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -81,6 +81,11 @@ unsigned short config_frames[4] = {2,9,11,13};
#include "gnb_config.h"
#include "openair2/E1AP/e1ap_common.h"
#include "http_server.h"
#include "scatter_plot.h"
#include "socket_task.h"
#include "srs_circle_queue.h"
#ifdef E2_AGENT
#include "openair2/E2AP/flexric/src/agent/e2_agent_api.h"
#include "openair2/E2AP/RAN_FUNCTION/init_ran_func.h"
......@@ -618,6 +623,16 @@ static void initialize_agent(ngran_node_t node_type, e2_agent_args_t oai_args)
}
#endif
volatile bool running_scatter = true;
static void catch_sigterm(int) {
fcloseall();
running_scatter = false;
static const char msg[] = "\n** Caught SIGTERM, shutting down\n";
__attribute__((unused))
int unused = write(STDOUT_FILENO, msg, sizeof(msg) - 1);
itti_wait_tasks_unblock();
}
configmodule_interface_t *uniqCfg = NULL;
int main( int argc, char **argv ) {
int ru_id, CC_id = 0;
......@@ -807,10 +822,54 @@ int main( int argc, char **argv ) {
pthread_mutex_unlock(&sync_mutex);
}
// 检查路径是否存在
const char *srs_data_path = "srs_data";
struct stat st;
if (stat(srs_data_path, &st) == -1) {
// 不存在,尝试创建
if (mkdir(srs_data_path, 0755) == 0) {
LOG_I(GNB_APP, "Directory %s has been created.\n", srs_data_path);
} else {
LOG_E(GNB_APP, "Failed to create the directory");
}
} else if (S_ISDIR(st.st_mode)) {
// 路径存在,且是目录
LOG_I(GNB_APP, "Directory %s already exists.\n", srs_data_path);
} else {
// 路径存在,但不是目录
LOG_E(GNB_APP, "Path %s exists, but it is not a directory!\n", srs_data_path);
}
pthread_t ntid;
if (pthread_create(&ntid, NULL, http_server, NULL) < 0) {
fprintf(stderr, "location_task: Failed to create thread: %s\n",
strerror(errno));
exit(-1);
}
#if SRS_PING_PONG_BUF
pthread_t scatter_pid;
if (pthread_create(&scatter_pid, NULL, scatter_plot_task, NULL) < 0) {
fprintf(stderr, "scatter_plot_task: Failed to create thread: %s\n",
strerror(errno));
exit(-1);
}
pthread_setname_np(scatter_pid, "scatter_plot");
#endif
srs_queue_init();
pthread_t socket_task_pid;
if (pthread_create(&socket_task_pid, NULL, socket_task, NULL) < 0) {
fprintf(stderr, "socket_task: Failed to create thread: %s\n",
strerror(errno));
exit(-1);
}
// wait for end of program
printf("Entering ITTI signals handler\n");
printf("TYPE <CTRL-C> TO TERMINATE\n");
itti_wait_tasks_end(NULL);
// itti_wait_tasks_end(NULL);
itti_wait_tasks_end(catch_sigterm);
printf("Returned from ITTI signal handler\n");
oai_exit=1;
printf("oai_exit=%d\n",oai_exit);
......
This diff is collapsed.
#ifndef _SCATTER_PLOT_H_
#define _SCATTER_PLOT_H_
void *scatter_plot_task(void *args_p);
// void *srs_scatter_plot_task(void *args_p);
#endif /* _SCATTER_PLOT_H_ */
This diff is collapsed.
#ifndef _SOCKET_TASK_H_
#define _SOCKET_TASK_H_
void *socket_task(void *args_p);
#endif
\ No newline at end of file
......@@ -36,6 +36,9 @@
extern "C"
{
#endif
#include <openair1/PHY/TOOLS/tools_defs.h>
/* help strings definition for command line options, used in CMDLINE_XXX_DESC macros and printed when -h option is used */
#define CONFIG_HLP_RFCFGF "Configuration file for front-end (e.g. LMS7002M)\n"
#define CONFIG_HLP_SPLIT73 "Split 7.3 (below rate matching) option: <cu|du>:<remote ip address>:<remote port>\n"
......@@ -380,6 +383,31 @@ void rx_func(void *param);
void ru_tx_func(void *param);
extern uint8_t nfapi_mode;
extern int16_t vnf_pnf_sfnslot_delta;
#define RX_ARRAY_LENGTH 2048
extern int srs_pos;
extern int write_srs_get_count;
#define SRS_PING_PONG_BUF 1 //ping pong buffer no/off
#define PING_PONG_BUFFER_SIZE (RX_ARRAY_LENGTH*4)
typedef struct {
c16_t ping[PING_PONG_BUFFER_SIZE];
c16_t pong[PING_PONG_BUFFER_SIZE];
int16_t ping_lenght;
int16_t pong_lenght;
volatile bool ping_ready;
volatile bool pong_ready;
volatile bool ping_active;
} IQBuffer;
extern IQBuffer scatter_buf;
extern IQBuffer srs_scatter_buf;
extern c16_t srs_generated_buffer[RX_ARRAY_LENGTH];
extern pthread_mutex_t srs_generated_mutex;
#ifdef __cplusplus
}
#endif
......
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "srs_circle_queue.h"
static Queue queue;
// 初始化队列
void queue_init(Queue *q) {
q->head = q->tail = q->count = 0;
pthread_mutex_init(&q->mutex, NULL);
pthread_cond_init(&q->not_empty, NULL);
pthread_cond_init(&q->not_full, NULL);
}
// 入队
void queue_enqueue(Queue *q, const int32_t *data) {
pthread_mutex_lock(&q->mutex);
while (q->count == ELEMENT_COUNT) {
pthread_cond_wait(&q->not_full, &q->mutex);
}
memcpy(q->buffer[q->tail].data, data, sizeof(int32_t) * ELEMENT_SIZE);
q->tail = (q->tail + 1) % ELEMENT_COUNT;
q->count++;
pthread_cond_signal(&q->not_empty);
pthread_mutex_unlock(&q->mutex);
}
// 出队
void queue_dequeue(Queue *q, int32_t *data_out) {
pthread_mutex_lock(&q->mutex);
while (q->count == 0) {
pthread_cond_wait(&q->not_empty, &q->mutex);
}
memcpy(data_out, q->buffer[q->head].data, sizeof(int32_t) * ELEMENT_SIZE);
q->head = (q->head + 1) % ELEMENT_COUNT;
q->count--;
pthread_cond_signal(&q->not_full);
pthread_mutex_unlock(&q->mutex);
}
void srs_queue_init()
{
queue_init(&queue);
}
void srs_queue_enqueue(const int32_t *data)
{
queue_enqueue(&queue, data);
}
void srs_queue_dequeue(int32_t *data_out)
{
queue_dequeue(&queue, data_out);
}
\ No newline at end of file
#ifndef _CIRCLE_QUEUE_H_
#define _CIRCLE_QUEUE_H_
#include <pthread.h>
#include <stdint.h>
#include "softmodem-common.h"
#define ELEMENT_COUNT 1600
#define ELEMENT_SIZE (RX_ARRAY_LENGTH * 4) // 每个元素4096*4个int32,即64KB
typedef struct {
int32_t data[ELEMENT_SIZE];
} QueueElement;
typedef struct {
QueueElement buffer[ELEMENT_COUNT];
int head; // 读
int tail; // 写
int count;
pthread_mutex_t mutex;
pthread_cond_t not_empty;
pthread_cond_t not_full;
} Queue;
void queue_init(Queue *q);
void queue_enqueue(Queue *q, const int32_t *data);
void queue_dequeue(Queue *q, int32_t *data_out);
void srs_queue_init();
void srs_queue_enqueue(const int32_t *data);
void srs_queue_dequeue(int32_t *data_out);
#endif
\ No newline at end of file
......@@ -10,6 +10,7 @@
#include "common/utils/nr/nr_common.h"
#include <openair1/PHY/TOOLS/phy_scope_interface.h>
#include "PHY/sse_intrin.h"
#include "executables/softmodem-common.h"
#define INVALID_VALUE 255
......@@ -1258,6 +1259,15 @@ static uint8_t nr_ulsch_mmse_2layers(NR_DL_FRAME_PARMS *frame_parms,
return(0);
}
IQBuffer scatter_buf = {
.ping = {0},
.pong = {0},
.ping_lenght = 0,
.pong_lenght = 0,
.ping_ready = false,
.pong_ready = false,
.ping_active = true
};
static void inner_rx(PHY_VARS_gNB *gNB,
int ulsch_id,
int slot,
......@@ -1322,6 +1332,27 @@ static void inner_rx(PHY_VARS_gNB *gNB,
buffer_length,
output_shift);
// LOG_W(PHY,"============= buffer_length is %d, nb_layer is %d, symbol is %d \n", buffer_length, nb_layer,symbol);
// c16_t *tmp = pusch_vars->rxdataF_comp[0];
// fwrite(tmp+buffer_length*symbol,sizeof(c16_t),buffer_length,fd);
// c16_t* tmp = (c16_t*)pusch_vars->rxdataF_comp[0];
bool ping_active = __atomic_load_n(&scatter_buf.ping_active, __ATOMIC_SEQ_CST);
if(ping_active) {
// for (int m = 0; m < nb_rx_ant; m++) {
// memcpy(&scatter_buf.ping[m*buffer_length], ((c16_t*)pusch_vars->rxdataF_comp[m])+buffer_length*symbol, buffer_length*sizeof(c16_t));
// }
memcpy(scatter_buf.ping, ((c16_t*)pusch_vars->rxdataF_comp[0])+buffer_length*symbol, buffer_length*sizeof(c16_t));
scatter_buf.ping_lenght = buffer_length;
__atomic_store_n(&scatter_buf.ping_ready, true, __ATOMIC_SEQ_CST);
} else {
// for (int m = 0; m < nb_rx_ant; m++) {
// memcpy(&scatter_buf.pong[m*buffer_length], ((c16_t*)pusch_vars->rxdataF_comp[m])+buffer_length*symbol, buffer_length*sizeof(c16_t));
// }
memcpy(scatter_buf.pong, ((c16_t*)pusch_vars->rxdataF_comp[0])+buffer_length*symbol, buffer_length*sizeof(c16_t));
scatter_buf.pong_lenght = buffer_length;
__atomic_store_n(&scatter_buf.pong_ready, true, __ATOMIC_SEQ_CST);
}
if (nb_layer == 1 && rel15_ul->transform_precoding == transformPrecoder_enabled && rel15_ul->qam_mod_order <= 6) {
if (rel15_ul->qam_mod_order > 2)
nr_freq_equalization(frame_parms,
......
......@@ -730,6 +730,22 @@ int check_srs_pdu(const nfapi_nr_srs_pdu_t *srs_pdu, nfapi_nr_srs_pdu_t *saved_s
return 0;
}
IQBuffer srs_scatter_buf = {
.ping = {0},
.pong = {0},
.ping_lenght = 0,
.pong_lenght = 0,
.ping_ready = false,
.pong_ready = false,
.ping_active = true
};
c16_t srs_generated_buffer[RX_ARRAY_LENGTH] = {0};
pthread_mutex_t srs_generated_mutex = PTHREAD_MUTEX_INITIALIZER;
extern int16_t ta_sum;
int srs_pos = 0;
int write_srs_get_count = (-1);
int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
{
/* those variables to log T_GNB_PHY_PUCCH_PUSCH_IQ only when we try to decode */
......@@ -963,6 +979,19 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
start_meas(&gNB->generate_srs_stats);
if (check_srs_pdu(srs_pdu, &gNB->nr_srs_info[i]->srs_pdu) == 0) {
generate_srs_nr(srs_pdu, frame_parms, gNB->nr_srs_info[i]->srs_generated_signal, 0, gNB->nr_srs_info[i], AMP, frame_rx, slot_rx);
static FILE *file_generate;
if (file_generate == NULL) {
file_generate = fopen("srs_data/srs_generate.bin", "wb");
}
for (int m = 0; m < frame_parms->nb_antennas_rx; m++) {
fwrite(gNB->nr_srs_info[i]->srs_generated_signal[m],
sizeof(c16_t), frame_parms->ofdm_symbol_size * N_symb_SRS, file_generate);
}
// fflush(file_generate);
pthread_mutex_lock(&srs_generated_mutex);
memcpy(&srs_generated_buffer, gNB->nr_srs_info[i]->srs_generated_signal[0], frame_parms->ofdm_symbol_size * N_symb_SRS * sizeof(c16_t));
pthread_mutex_unlock(&srs_generated_mutex);
}
stop_meas(&gNB->generate_srs_stats);
......@@ -971,6 +1000,60 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
stop_meas(&gNB->get_srs_signal_stats);
if (srs_est >= 0) {
static uint32_t srs_save_count = 0;
srs_save_count ++;
static FILE *file_get;
int write_srs_get_count_tmp = __atomic_load_n(&write_srs_get_count, __ATOMIC_SEQ_CST);
if (write_srs_get_count_tmp > 0) {
if (file_get == NULL) {
char srs_get_file_name[128] = {0};
sprintf(srs_get_file_name,"srs_data/srs_get_%02d.bin",__atomic_load_n(&srs_pos, __ATOMIC_SEQ_CST));
file_get = fopen(srs_get_file_name, "wb");
}
for (int m = 0; m < frame_parms->nb_antennas_rx; m++) {
fwrite(srs_received_signal[m], sizeof(int32_t), frame_parms->ofdm_symbol_size * N_symb_SRS, file_get);
}
//int32_t read_ta_value = __atomic_load_n(&ta_sum, __ATOMIC_SEQ_CST);
//fwrite(&read_ta_value, sizeof(int32_t), 1, file_get);
int32_t rnti_value = srs_pdu->rnti;
fwrite(&rnti_value, sizeof(int32_t), 1, file_get);
// fflush(file_get);
__atomic_sub_fetch(&write_srs_get_count, 1, __ATOMIC_SEQ_CST);
} else if(write_srs_get_count_tmp == 0) {
fclose(file_get);
file_get = NULL;
__atomic_sub_fetch(&write_srs_get_count, 1, __ATOMIC_SEQ_CST);
} else {
if(srs_save_count%50 == 0) {
LOG_E(PHY, "******************************************\n");
LOG_E(PHY, "************ SRS data saved **************\n");
LOG_E(PHY, "******************************************\n");
}
}
//ping pong buffer
#if SRS_PING_PONG_BUF
bool srs_ping_active = __atomic_load_n(&srs_scatter_buf.ping_active, __ATOMIC_SEQ_CST);
if(srs_ping_active) {
for (int m = 0; m < frame_parms->nb_antennas_rx; m++) {
memcpy(&srs_scatter_buf.ping[frame_parms->ofdm_symbol_size * N_symb_SRS * m], srs_received_signal[m], frame_parms->ofdm_symbol_size * N_symb_SRS * sizeof(c16_t));
}
srs_scatter_buf.ping_lenght = frame_parms->ofdm_symbol_size * N_symb_SRS * frame_parms->nb_antennas_rx;
__atomic_store_n(&srs_scatter_buf.ping_ready, true, __ATOMIC_SEQ_CST);
} else {
for (int m = 0; m < frame_parms->nb_antennas_rx; m++) {
memcpy(&srs_scatter_buf.pong[frame_parms->ofdm_symbol_size * N_symb_SRS * m], srs_received_signal[m], frame_parms->ofdm_symbol_size * N_symb_SRS * sizeof(c16_t));
}
srs_scatter_buf.pong_lenght = frame_parms->ofdm_symbol_size * N_symb_SRS * frame_parms->nb_antennas_rx;
__atomic_store_n(&srs_scatter_buf.pong_ready, true, __ATOMIC_SEQ_CST);
}
#endif
srs_queue_enqueue((const int32_t *)srs_received_signal[0]);
start_meas(&gNB->srs_channel_estimation_stats);
nr_srs_channel_estimation(gNB,
frame_rx,
......
......@@ -1993,6 +1993,7 @@ void nr_clear_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP, NR_RA_t
// - sending only 1 RAR subPDU
// - UL Grant: hardcoded CSI, TPC, time alloc
// - padding
int16_t ta_sum = 0;
static void nr_fill_rar(uint8_t Mod_idP, NR_RA_t *ra, uint8_t *dlsch_buffer, nfapi_nr_pusch_pdu_t *pusch_pdu)
{
LOG_D(NR_MAC, "[gNB] Generate RAR MAC PDU frame %d slot %d preamble index %u TA command %d \n", ra->Msg2_frame, ra-> Msg2_slot, ra->preamble_index, ra->timing_offset);
......@@ -2026,6 +2027,9 @@ static void nr_fill_rar(uint8_t Mod_idP, NR_RA_t *ra, uint8_t *dlsch_buffer, nfa
// TA command
rar->TA1 = (uint8_t) (ra->timing_offset >> 5); // 7 MSBs of timing advance
rar->TA2 = (uint8_t) (ra->timing_offset & 0x1f); // 5 LSBs of timing advance
int16_t init_value = rar->TA2 + (rar->TA1 << 5);
__atomic_store_n(&ta_sum, init_value, __ATOMIC_SEQ_CST);
// TC-RNTI
rar->TCRNTI_1 = (uint8_t) (ra->rnti >> 8); // 8 MSBs of rnti
......
......@@ -915,6 +915,7 @@ nr_pp_impl_dl nr_init_fr1_dlsch_preprocessor(int CC_id) {
return nr_fr1_dlsch_preprocessor;
}
extern int16_t ta_sum;
void nr_schedule_ue_spec(module_id_t module_id,
frame_t frame,
sub_frame_t slot,
......@@ -1239,6 +1240,16 @@ void nr_schedule_ue_spec(module_id_t module_id,
UE->mac_stats.dl.total_rbs_retx += sched_pdsch->rbSize;
} else { /* initial transmission */
LOG_D(NR_MAC, "Initial HARQ transmission in %d.%d\n", frame, slot);
if (sched_ctrl->ta_apply && sched_ctrl->ta_update != 31) {
int ta_value = sched_ctrl->ta_update - 31;
if (ta_value > 0) {
__atomic_add_fetch(&ta_sum, ta_value, __ATOMIC_SEQ_CST);
}
else {
ta_value = ta_value * -1;
__atomic_sub_fetch(&ta_sum, ta_value, __ATOMIC_SEQ_CST);
}
}
uint8_t *buf = (uint8_t *) harq->transportBlock;
/* first, write all CEs that might be there */
int written = nr_write_ce_dlsch_pdu(module_id,
......
Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
gNBs =
(
{
////////// Identification parameters:
gNB_ID = 0xe00;
gNB_name = "gNB-OAI";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 100;
plmn_list = ({ mcc = 001; mnc = 01; mnc_length = 2; snssaiList = ({ sst = 1; }) });
nr_cellid = 12345678L;
////////// Physical parameters:
sib1_tda = 15;
min_rxtxtime = 6;
do_CSIRS = 1;
do_SRS = 1;
pdsch_AntennaPorts_XP = 1;
pusch_AntennaPorts = 4;
servingCellConfigCommon = (
{
#spCellConfigCommon
physCellId = 5;
# downlinkConfigCommon
#frequencyInfoDL
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
absoluteFrequencySSB = 623232;
dl_frequencyBand = 78;
# this is 3600 MHz
dl_absoluteFrequencyPointA = 621960;
#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=27,L=48 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth = 28875; # 6366 12925 12956 28875 12952
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0;
#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 = 28875;
# 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 = -96;
#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 = 3;
#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,
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 = -25;
}
);
# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "172.11.200.14";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "docker-openxg";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.11.200.1/24";
GNB_INTERFACE_NAME_FOR_NGU = "docker-openxg";
GNB_IPV4_ADDRESS_FOR_NGU = "172.11.200.1/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
}
);
MACRLCs = (
{
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 150;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 0;
}
);
L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 200;
pucch0_dtx_threshold = 100;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}
);
RUs = (
{
local_rf = "yes"
nb_tx = 1
nb_rx = 4
att_tx = 0;
att_rx = 0;
bands = [78];
max_pdschReferenceSignalPower = -27;
max_rxgain = 102;
eNB_instances = [0];
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
sdr_addrs = "dev=pciex:0,auxdac1=1725";
clock_src = "internal";
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
rfsimulator :
{
serveraddr = "server";
serverport = "4043";
options = (); #("saviq"); or/and "chanmod"
modelname = "AWGN";
IQfile = "/tmp/rfsimulator.iqs";
};
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" );
# preferred integrity algorithms
# the first one of the list that an UE supports in chosen
# valid values: nia0, nia1, nia2, nia3
integrity_algorithms = ( "nia2", "nia0" );
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
drb_ciphering = "yes";
drb_integrity = "no";
};
log_config :
{
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
ngap_log_level ="debug";
f1ap_log_level ="debug";
};
Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
gNBs =
(
{
////////// Identification parameters:
gNB_ID = 0xe00;
gNB_name = "gNB-OAI";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 100;
plmn_list = ({ mcc = 001; mnc = 01; mnc_length = 2; snssaiList = ({ sst = 1; }) });
nr_cellid = 12345678L;
////////// Physical parameters:
sib1_tda = 15;
min_rxtxtime = 6;
do_CSIRS = 1;
do_SRS = 1;
pdsch_AntennaPorts_XP = 1;
pusch_AntennaPorts = 4;
servingCellConfigCommon = (
{
#spCellConfigCommon
physCellId = 5;
# downlinkConfigCommon
#frequencyInfoDL
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
absoluteFrequencySSB = 623232;
dl_frequencyBand = 78;
# this is 3600 MHz
dl_absoluteFrequencyPointA = 621960;
#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=27,L=48 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth = 28875; # 6366 12925 12956 28875 12952
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0;
#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 = 28875;
# 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 = -96;
#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 = 3;
#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,
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 = -25;
}
);
# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "192.168.199.212";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "eno1";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.199.105/24";
GNB_INTERFACE_NAME_FOR_NGU = "eno1";
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.199.105/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
}
);
MACRLCs = (
{
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 150;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 0;
}
);
L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 200;
pucch0_dtx_threshold = 100;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}
);
RUs = (
{
local_rf = "yes"
nb_tx = 1
nb_rx = 4
att_tx = 0;
att_rx = 0;
bands = [78];
max_pdschReferenceSignalPower = -27;
max_rxgain = 102;
eNB_instances = [0];
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
sdr_addrs = "dev=pciex:0,auxdac1=1725";
clock_src = "internal";
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
rfsimulator :
{
serveraddr = "server";
serverport = "4043";
options = (); #("saviq"); or/and "chanmod"
modelname = "AWGN";
IQfile = "/tmp/rfsimulator.iqs";
};
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" );
# preferred integrity algorithms
# the first one of the list that an UE supports in chosen
# valid values: nia0, nia1, nia2, nia3
integrity_algorithms = ( "nia2", "nia0" );
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
drb_ciphering = "yes";
drb_integrity = "no";
};
log_config :
{
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
ngap_log_level ="debug";
f1ap_log_level ="debug";
};
Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
gNBs =
(
{
////////// Identification parameters:
gNB_ID = 0xe00;
gNB_name = "gNB-OAI";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 100;
plmn_list = ({ mcc = 466; mnc = 92; mnc_length = 2; snssaiList = ({ sst = 1; }) });
nr_cellid = 12345678L;
////////// Physical parameters:
sib1_tda = 15;
min_rxtxtime = 6;
do_CSIRS = 1;
do_SRS = 1;
servingCellConfigCommon = (
{
#spCellConfigCommon
physCellId = 5;
# downlinkConfigCommon
#frequencyInfoDL
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
absoluteFrequencySSB = 623232;
dl_frequencyBand = 78;
# this is 3600 MHz
dl_absoluteFrequencyPointA = 621960;
#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=27,L=48 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth = 28875; # 6366 12925 12956 28875 12952
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0;
#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 = 28875;
# 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 = -96;
#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 = 3;
#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,
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 = -25;
}
);
# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "172.11.200.14";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "docker-openxg";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.11.200.1/24";
GNB_INTERFACE_NAME_FOR_NGU = "docker-openxg";
GNB_IPV4_ADDRESS_FOR_NGU = "172.11.200.1/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
}
);
MACRLCs = (
{
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 150;
pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 0;
}
);
L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 200;
pucch0_dtx_threshold = 100;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}
);
RUs = (
{
local_rf = "yes"
nb_tx = 1
nb_rx = 1
att_tx = 0;
att_rx = 0;
bands = [78];
max_pdschReferenceSignalPower = -27;
max_rxgain = 102;
eNB_instances = [0];
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
sdr_addrs = "dev=pciex:0,auxdac1=1725";
clock_src = "internal";
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
rfsimulator :
{
serveraddr = "server";
serverport = "4043";
options = (); #("saviq"); or/and "chanmod"
modelname = "AWGN";
IQfile = "/tmp/rfsimulator.iqs";
};
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" );
# preferred integrity algorithms
# the first one of the list that an UE supports in chosen
# valid values: nia0, nia1, nia2, nia3
integrity_algorithms = ( "nia2", "nia0" );
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
drb_ciphering = "yes";
drb_integrity = "no";
};
log_config :
{
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
ngap_log_level ="debug";
f1ap_log_level ="debug";
};
......@@ -11,7 +11,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 100;
plmn_list = ({ mcc = 466; mnc = 92; mnc_length = 2; snssaiList = ({ sst = 1; }) });
plmn_list = ({ mcc = 001; mnc = 01; mnc_length = 2; snssaiList = ({ sst = 1; }) });
nr_cellid = 12345678L;
......@@ -160,7 +160,7 @@ gNBs =
////////// AMF parameters:
amf_ip_address = ( { ipv4 = "172.11.200.14";
amf_ip_address = ( { ipv4 = "192.168.199.232";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
......@@ -170,10 +170,10 @@ gNBs =
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "docker-openxg";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.11.200.1/24";
GNB_INTERFACE_NAME_FOR_NGU = "docker-openxg";
GNB_IPV4_ADDRESS_FOR_NGU = "172.11.200.1/24";
GNB_INTERFACE_NAME_FOR_NG_AMF = "eno1";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.199.105/24";
GNB_INTERFACE_NAME_FOR_NGU = "eno1";
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.199.105/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
......@@ -214,7 +214,7 @@ RUs = (
eNB_instances = [0];
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
sdr_addrs = "dev=pciex:0,auxdac1=1511";
sdr_addrs = "dev=pciex:0,auxdac1=1725";
clock_src = "internal";
}
);
......
......@@ -218,7 +218,7 @@ RUs = (
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights = [0x00007fff, 0x0000];
#clock_src = "internal";
sdr_addrs = "dev=pciex:0,auxdac1=340";
sdr_addrs = "dev=pciex:0,auxdac1=1725";
}
);
......
......@@ -217,7 +217,7 @@ RUs = (
eNB_instances = [0];
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
sdr_addrs = "dev=pciex:0,auxdac1=340";
sdr_addrs = "dev=pciex:0,auxdac1=1725";
clock_src = "internal";
}
);
......
Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
gNBs = (
{
////////// Identification parameters:
gNB_ID = 0xe00;
gNB_name = "gNB-OAI";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 100;
plmn_list = ({ mcc = 466; mnc = 92; mnc_length = 2; snssaiList = ({ sst = 1; }); });
nr_cellid = 12345678L;
////////// Physical parameters:
min_rxtxtime = 6;
pdsch_AntennaPorts_XP = 1;
pusch_AntennaPorts = 1;
do_CSIRS = 1;
do_SRS = 1;
ul_prbblacklist = "135,136,137,138"
servingCellConfigCommon = (
{
# spCellConfigCommon
physCellId = 0;
# downlinkConfigCommon
# frequencyInfoDL
# this is 3900.60 MHz + (134 PRBs + 4 SCs)@30kHz SCS (GSCN: 8158)
absoluteFrequencySSB = 623232;
dl_frequencyBand = 78;
# this is 3900.60 MHz
dl_absoluteFrequencyPointA = 620016;
# scs-SpecificCarrierList
dl_offstToCarrier = 0;
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 273;
# initialDownlinkBWP
# genericParameters
initialDLBWPlocationAndBandwidth = 1099;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
# pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0;
# uplinkConfigCommon
# frequencyInfoUL
ul_frequencyBand = 78;
# scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 273;
pMax = 20;
# initialUplinkBWP
# genericParameters
initialULBWPlocationAndBandwidth = 1099;
# 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 = 12;
preambleReceivedTargetPower = -90;
# 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 = 3;
# 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,
msg3_DeltaPreamble = 1;
p0_NominalWithGrant =-90;
# pucch-ConfigCommon
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -70;
# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing = 1;
# 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;
#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 = -25;
}
);
# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};
////////// AMF parameters:
amf_ip_address = (
{
ipv4 = "192.168.199.232";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "eno1";
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.199.105/24";
GNB_INTERFACE_NAME_FOR_NGU = "eno1";
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.199.105/24";
GNB_PORT_FOR_S1U = 32152; # Spec 2152
GNB_PORT_FOR_NGU = 32152;
}
}
);
MACRLCs = (
{
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 300;
pucch_TargetSNRx10 = 200;
pusch_FailureThres = 1000;
ulsch_max_frame_inactivity = 0;
ul_max_mcs = 28;
}
);
L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 120;
pucch0_dtx_threshold = 80;
}
);
RUs = (
{
local_rf = "yes"
nb_tx = 1
nb_rx = 1
att_tx = 0;
att_rx = 0;
bands = [78];
max_pdschReferenceSignalPower = -27;
max_rxgain = 102;
eNB_instances = [0];
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
sdr_addrs = "dev=pciex:0,auxdac1=1725";
clock_src = "internal";
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
rfsimulator :
{
serveraddr = "server";
serverport = "4043";
options = (); #("saviq"); or/and "chanmod"
modelname = "AWGN";
IQfile = "/tmp/rfsimulator.iqs";
};
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" );
# preferred integrity algorithms
# the first one of the list that an UE supports in chosen
# valid values: nia0, nia1, nia2, nia3
integrity_algorithms = ( "nia2", "nia0" );
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
drb_ciphering = "yes";
drb_integrity = "no";
};
log_config :
{
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
ngap_log_level ="debug";
f1ap_log_level ="debug";
};
uicc0 = {
imsi = "466920000000001";
imsi = "460110000000001";
key = "00112233445566778899aabbccddeeff";
opc= "000102030405060708090a0b0c0d0e0f";
dnn= "internet";
......
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