280 lines
8.4 KiB
Cheetah
280 lines
8.4 KiB
Cheetah
/* lteenb configuration file version 2018-10-18
|
|
* Copyright (C) 2015-2018 Amarisoft
|
|
*/
|
|
{
|
|
|
|
%if enb.license_server_addr != '0.0.0.0':
|
|
license_server: {
|
|
server_addr: "${enb.license_server_addr}",
|
|
name: "amarisoft",
|
|
},
|
|
%endif
|
|
|
|
% if enb.rf_dev_type == 'zmq':
|
|
/* Force sampling rate (if uncommented) */
|
|
sample_rate: ${enb.sample_rate},
|
|
%endif
|
|
|
|
/* Log filter: syntax: layer.field=value[,...]
|
|
|
|
Possible layers are phy, mac, rlc, pdcp, rrc, nas, s1ap, x2ap, gtpu and
|
|
all. The 'all' layer is used to address all the layers at the
|
|
same time.
|
|
|
|
field values:
|
|
|
|
- 'level': the log level of each layer can be set to 'none',
|
|
'error', 'info' or 'debug'. Use 'debug' to log all the messages.
|
|
|
|
- 'max_size': set the maximum size of the hex dump. 0 means no
|
|
hex dump. -1 means no limit.
|
|
*/
|
|
log_options: "${enb.log_options}",
|
|
log_filename: "${enb.log_filename}",
|
|
|
|
% if enb.enable_pcap == 'true':
|
|
pcap: {filename:"${enb.pcap_filename}"},
|
|
%endif
|
|
|
|
/* Enable remote API and Web interface */
|
|
com_addr: "${enb.addr}:9001",
|
|
|
|
/* RF driver configuration */
|
|
include "amarisoft_rf_driver.cfg",
|
|
|
|
% if enb.enable_dl_awgn:
|
|
channel_dl: {
|
|
type: "awgn",
|
|
snr: ${enb.dl_awgn_snr}
|
|
},
|
|
% endif
|
|
|
|
mme_list: [
|
|
{
|
|
s1ap_bind_addr: "${enb.addr}",
|
|
/* address of MME for S1AP connection. Must be modified if the MME
|
|
runs on a different host. */
|
|
mme_addr: "${enb.mme_addr}",
|
|
},
|
|
],
|
|
/* GTP bind address (=address of the ethernet interface connected to
|
|
the MME). Must be modified if the MME runs on a different host. */
|
|
gtp_addr: "${enb.gtp_bind_addr}",
|
|
|
|
/* high 20 bits of SIB1.cellIdentifier */
|
|
enb_id: ${enb.id},
|
|
|
|
/* list of cells */
|
|
cell_list: [
|
|
|
|
%for cell in enb.cell_list:
|
|
{
|
|
dl_earfcn: ${cell.dl_earfcn},
|
|
rf_port: ${cell.rf_port},
|
|
cell_id: ${cell.cell_id},
|
|
n_id_cell: ${cell.pci},
|
|
tac: 0x0007,
|
|
root_sequence_index: ${loop.index * 10 + 204}, /* PRACH root sequence index */
|
|
|
|
ncell_list: [
|
|
%for ncell in cell.ncell_list:
|
|
{ n_id_cell: ${ncell.pci}, dl_earfcn: ${ncell.dl_earfcn}, cell_id: ${ncell.cell_id}, tac: 7 },
|
|
%endfor
|
|
],
|
|
|
|
scell_list: [
|
|
%for scell_id in cell.scell_list:
|
|
{ cell_id: ${scell_id}, cross_carrier_scheduling: false, scheduling_cell_id: ${cell.cell_id}, ul_allowed: true},
|
|
%endfor
|
|
],
|
|
},
|
|
%endfor
|
|
], /* cell_list */
|
|
|
|
/* default cell parameters */
|
|
cell_default: {
|
|
/* Broadcasted PLMN identities */
|
|
plmn_list: [
|
|
"${'{0:03}'.format(int(enb.mcc))}${'{0:02}'.format(int(enb.mnc))}",
|
|
],
|
|
|
|
% if enb.get('duplex') == "tdd":
|
|
uldl_config: ${enb.tdd_uldl_config},
|
|
sp_config: ${enb.tdd_special_subframe_pattern},
|
|
% endif
|
|
|
|
% if int(enb.get('transmission_mode')) == 1:
|
|
n_antenna_dl: 1, /* number of DL antennas */
|
|
n_antenna_ul: 1, /* number of UL antennas */
|
|
% else:
|
|
n_antenna_dl: 2, /* number of DL antennas */
|
|
n_antenna_ul: 2, /* number of UL antennas */
|
|
% endif
|
|
|
|
n_rb_dl: ${enb.num_prb}, /* Bandwidth: 25: 5 MHz, 50: 10 MHz, 75: 15 MHz, 100: 20 MHz */
|
|
cyclic_prefix: "normal",
|
|
|
|
phich_duration: "normal",
|
|
phich_resource: "1", /* ratio of NG */
|
|
|
|
/* System Information Block type 1 */
|
|
sib1: "amarisoft_sib1.asn",
|
|
|
|
/* other SIBs, in same order as the scheduling list in SIB 1 */
|
|
sib_sched_list: [ "amarisoft_sib23.asn" ],
|
|
|
|
si_coderate: 0.30, /* maximum code rate for SI/RA/P-RNTI messages */
|
|
si_pdcch_format: 2, /* 2 or 3. Log2 of the number of CCEs for PDCCH
|
|
for SI/RA/P-RNTI */
|
|
|
|
n_symb_cch: 0, /* number of symbols for CCH (0 = auto) */
|
|
|
|
/* PDSCH dedicated config (currently same for all UEs) */
|
|
pdsch_dedicated: {
|
|
p_a: 0,
|
|
},
|
|
|
|
/* If defined, force for number of CCEs for UE specific PDCCH to
|
|
2^pdcch_format. Otherwise it is computed from the reported
|
|
CQI. Range: 0 to 3. */
|
|
//pdcch_format: 1,
|
|
|
|
/* if defined, force the PDSCH MCS for all UEs. Otherwise it is
|
|
computed from the reported CQI */
|
|
/* pdsch_mcs: 12, */
|
|
|
|
/* PUSCH dedicated config (currently same for all UEs) */
|
|
pusch_dedicated: {
|
|
beta_offset_ack_index: 9,
|
|
beta_offset_ri_index: 6,
|
|
beta_offset_cqi_index: 6,
|
|
},
|
|
|
|
/* MCS for Msg3 (=CCCH RRC Connection Request) */
|
|
pusch_msg3_mcs: 0,
|
|
|
|
/* this CQI value is assumed when none is received from the UE */
|
|
initial_cqi: 5,
|
|
|
|
/* if defined, force the PUSCH MCS for all UEs. Otherwise it is
|
|
computed from the last received SRS/PUSCH. */
|
|
// pusch_mcs: 18,
|
|
|
|
transmission_mode: ${enb.transmission_mode},
|
|
|
|
/* Scheduling request period (ms). Must be >= 40 for HD-FDD */
|
|
sr_period: 20,
|
|
|
|
/* CQI report config */
|
|
cqi_period: 40, /* period (ms). Must be >= 32 for HD-FDD */
|
|
|
|
/* RI reporting is done with a period of m_ri * cqi_period.
|
|
m_ri = 0 (default) disables RI reporting. */
|
|
% if int(enb.get('transmission_mode')) > 1:
|
|
m_ri: 8,
|
|
% endif
|
|
|
|
pucch_dedicated: {
|
|
/* ack/nack feedback mode when carrier aggregation is
|
|
enabled. It can be "cs" (for at most two scells) or "pucch3"
|
|
(used in all cases if more than two cells). */
|
|
ack_nack_feedback_mode_ca: "cs",
|
|
|
|
/* TDD ack/nack feedback mode when a rel 10 UE is detected. It
|
|
can be "bundling", "multiplexing", "cs" or "pucch3". By
|
|
default is it the same as tdd_ack_nack_feedback_mode. */
|
|
% if enb.get('duplex') == "tdd":
|
|
tdd_ack_nack_feedback_mode: "bundling",
|
|
// tdd_ack_nack_feedback_mode_r10: "cs",
|
|
% endif
|
|
|
|
/* number of PUCCH 1b CS resources. It determines
|
|
the maximum number of UEs that can be scheduled in one TTI
|
|
using carrier aggregation with PUCCH 1b CS ack/nack feedback. */
|
|
n1_pucch_an_cs_count: 1,
|
|
|
|
/* number of resource blocks for PUCCH 3. It determines
|
|
the maximum number of UEs that can be scheduled in one TTI
|
|
using carrier aggregation with PUCCH 3 ack/nack feedback. */
|
|
n3_pucch_an_n_rb: 0,
|
|
},
|
|
|
|
/* SRS dedicated config. All UEs share these
|
|
parameters. srs_config_index and freq_domain_position are
|
|
allocated for each UE) */
|
|
srs_dedicated: {
|
|
srs_period: 160, /* period (ms). Must be >= 40 for HD-FDD */
|
|
srs_bandwidth: 1,
|
|
srs_hopping_bandwidth: 0,
|
|
},
|
|
|
|
/* MAC configuration (same for all UEs) */
|
|
mac_config: {
|
|
ul_max_harq_tx: 5, /* max number of HARQ transmissions for uplink */
|
|
dl_max_harq_tx: 5, /* max number of HARQ transmissions for downlink */
|
|
ul_max_consecutive_retx: 1000,
|
|
},
|
|
|
|
/* CPU load limitation */
|
|
pusch_max_its: 6, /* max number of turbo decoder iterations */
|
|
|
|
/* dynamic power control */
|
|
dpc: true,
|
|
dpc_pusch_snr_target: 15,
|
|
dpc_pucch_snr_target: 10,
|
|
|
|
/* RRC/UP ciphering algorithm preference. EEA0 is always the last. */
|
|
cipher_algo_pref: [${', '.join(list(dict.fromkeys(enb.cipher_list))).split("eea")[1] if len(list(dict.fromkeys(enb.cipher_list))) > 0 else ''}],
|
|
/* RRC integrity algorithm preference. EIA0 is always the last. */
|
|
integ_algo_pref: [${', '.join(list(dict.fromkeys(enb.integrity_list))).split("eia")[1]}],
|
|
|
|
/* (in ms) send RRC connection release after this time of network
|
|
inactivity */
|
|
inactivity_timer: ${enb.inactivity_timer},
|
|
|
|
/* SRB configuration */
|
|
srb_config: [
|
|
{
|
|
id: 1,
|
|
maxRetxThreshold: 32,
|
|
t_Reordering: 45,
|
|
t_PollRetransmit: 60,
|
|
},
|
|
{
|
|
id: 2 ,
|
|
maxRetxThreshold: 32,
|
|
t_Reordering: 45,
|
|
t_PollRetransmit: 60,
|
|
}
|
|
],
|
|
|
|
/* DRB configuration */
|
|
drb_config: "amarisoft_drb.cfg",
|
|
|
|
% if enb.enable_measurements:
|
|
/* measurement configuration */
|
|
meas_config_desc: {
|
|
a1_report_type: "${enb.a1_report_type}",
|
|
a1_${enb.a1_report_type}: ${enb.a1_report_value},
|
|
a1_hysteresis: ${enb.a1_hysteresis},
|
|
a1_time_to_trigger: ${enb.a1_time_to_trigger},
|
|
a2_report_type: "${enb.a2_report_type}",
|
|
a2_${enb.a2_report_type}: ${enb.a2_report_value},
|
|
a2_hysteresis: ${enb.a2_hysteresis},
|
|
a2_time_to_trigger: ${enb.a2_time_to_trigger},
|
|
a3_report_type: "${enb.a3_report_type}",
|
|
a3_offset: ${enb.a3_report_value},
|
|
a3_hysteresis: ${enb.a3_hysteresis},
|
|
a3_time_to_trigger: ${enb.a3_time_to_trigger},
|
|
},
|
|
|
|
/* measurement gap configuration */
|
|
meas_gap_config: "gp0",
|
|
|
|
/* if true, initiate a handover when a suitable measurement report
|
|
is received */
|
|
ho_from_meas: true,
|
|
% endif
|
|
},
|
|
}
|