Commit b054bb72 authored by Joanne Hugé's avatar Joanne Hugé

simpleran: clean-up and update gNB configuration

Update gNB configuration to match 2024 Amarisoft
parent b49bc3b3
......@@ -88,7 +88,7 @@ md5sum = dd50b4e4780830ddbde28b84af118f18
[enb.jinja2.cfg]
filename = config/enb.jinja2.cfg
md5sum = ac7000a3b6999b51635083619e640e30
md5sum = 5f5441444d442e87526b6ced33265656
[drb_lte.jinja2.cfg]
filename = config/drb_lte.jinja2.cfg
......
......@@ -4,7 +4,9 @@
{%- set jcell_ru_ref = slaplte.jcell_ru_ref %}
{%- set ierror = slaplte.ierror %}
{%- set bug = slaplte.bug %}
{#-
#}
{#- for standalone testing via slapos-render-config.py
NOTE: keep in sync with instance-enb.jinja2.cfg and ru/libinstance.jinja2.cfg #}
{%- if _standalone is defined %}
......@@ -17,16 +19,18 @@
{%- do slaplte.load_ipeercell(ipeercell_dict) %}
{%- do slaplte.check_loaded_everything() %}
{%- endif %}
{#-
#}
{#- do_lte/do_nr indicate whether we have LTE and/or NR cells
icell_dict_lte/icell_dict_nr keep LTE/NR parts of icell_dict registry #}
{%- set icell_dict_lte = dict(icell_dict|dictsort | selectattr('1._.cell_type', '==', 'lte')) %}
{%- set icell_dict_nr = dict(icell_dict|dictsort | selectattr('1._.cell_type', '==', 'nr' )) %}
{%- set do_lte = len(icell_dict_lte) > 0 %}
{%- set do_nr = len(icell_dict_nr) > 0 %}
{#-
#}
{#- handover_config emits handover configuration for specified cell #}
{%- macro handover_config(cell_ref) %}
ncell_list: [
......@@ -55,7 +59,6 @@
},
{%- endif %}
{%- endfor %}
// Inter-ENB HO
{#- TODO: add info about peers as shared instances - one instance per peer *ENB*.
then query SlapOS Master about cells configured on that peer ENB and
......@@ -96,7 +99,9 @@
{%- endfor %}
],
{%- endmacro %}
{#-
#}
{#- jlte_n_rb_dl returns n_rb_dl for an LTE bandwidth. #}
{%- macro jlte_n_rb_dl(bandwidth) %}
{%- set _ = {1.4: 6,
......@@ -107,7 +112,9 @@
20: 100} %}
{{- _[bandwidth] | tojson }}
{%- endmacro %}
{#-
#}
{#- jhostport splits address into (host,port) pair. #}
{%- macro jhostport(addr) %}
{%- set _ = namespace() %}
......@@ -131,8 +138,9 @@
{%- endif %}
{{- (_.host, _.port) | tojson }}
{%- endmacro -%}
{#-
#}
{#- start of the config -#}
{
log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,s1ap.level=debug,s1ap.max_size=1,x2ap.level=debug,x2ap.max_size=1,rrc.level=debug,rrc.max_size=1,ngap.level=debug,ngap.max_size=1,xnap.level=debug,xnap.max_size=1,
......@@ -143,21 +151,20 @@
{%- endif -%}
,file.rotate=200M",
log_filename: "{{ directory['log'] }}/enb.log",
{#-
{# instantiate radio units #}
#}
{#- instantiate radio units #}
{{ slaplte.ru_config(iru_dict, slapparameter_dict, True) }}
com_addr: "{{ slapparameter_dict.com_addr }}:{{ slapparameter_dict.com_ws_port }}",
com_auth: {
password: "{{ websocket_password }}",
unsecure: false,
},
{%- if slapparameter_dict.get('mbmsgw_addr', '') %}
mbmsgw_addr: "{{ slapparameter_dict.mbmsgw_addr }}",
{%- endif %}
{% if do_lte %}
{%- if do_lte %}
// LTE core network
mme_list: [
{%- for _, mme in slapparameter_dict.mme_list |dictsort %}
......@@ -170,8 +177,7 @@
{%- endfor %}
],
{%- endif %}
{% if do_nr %}
{%- if do_nr %}
// NR core network
amf_list: [
{%- for _, amf in slapparameter_dict.amf_list |dictsort %}
......@@ -184,7 +190,6 @@
{%- endfor %}
],
{%- endif %}
{#- listen-address for GTP-U - either explicitly given, or autodetect #}
{%- if slapparameter_dict.get('gtp_addr') %}
gtp_addr: "{{ slapparameter_dict.gtp_addr }}",
......@@ -216,7 +221,9 @@
{%- endif %}
{%- endif %}
{%- endif %}
{#-
#}
{#- X2/Xn peers
TODO: add info about peers as shared instances - one instance per peer *ENB*.
then query SlapOS Master about cells configured on that peer ENB and
......@@ -231,8 +238,9 @@
| map(attribute='1._.xn_addr')
| list | tojson }},
{%- endif %}
{#-
#}
{%- if do_lte %}
enb_id: {{ slapparameter_dict.enb_id }},
{%- endif %}
......@@ -241,7 +249,6 @@
gnb_id: {{ slapparameter_dict.gnb_id }},
en_dc_support: true,
{%- endif %}
// LTE cells
cell_list: [
{%- if do_lte %}
......@@ -250,13 +257,11 @@
{%- set ru_ref = J(jcell_ru_ref(icell, icell_dict)) %}
{%- set iru = iru_dict[ru_ref] %}
{%- set ru = iru['_'] %}
// {{ B(cell_ref) }} ({{ B(ru_ref) }})
{
rf_port: {{ ru._rf_port }},
n_antenna_dl: {{ ru.n_antenna_dl }},
n_antenna_ul: {{ ru.n_antenna_ul }},
cell_id: {{ cell.cell_id }},
tac: {{ cell.tac }},
n_id_cell: {{ cell.pci }},
......@@ -264,11 +269,8 @@
ul_earfcn: {{ cell.ul_earfcn }},
root_sequence_index: {{ cell.root_sequence_index }},
inactivity_timer: {{ cell.inactivity_timer }},
// Handover
{{- handover_config(cell_ref) }}
// Carrier Aggregation: LTE + LTE
scell_list: [
{%- for cell2_ref, icell2 in icell_dict_lte|dictsort %}
......@@ -281,7 +283,6 @@
{%- endif %}
{%- endfor %}
],
{%- if do_nr %}
// Dual Connectivity: LTE + NR
en_dc_scg_cell_list: [
......@@ -295,13 +296,10 @@
{%- endfor %}
],
{%- endif %}
// tune LTE parameters for the cell
{% if ors %}
{%- if ors %}
manual_ref_signal_power: true,
{% endif %}
{%- endif %}
{%- set tdd = (cell.rf_mode == 'tdd') %}
{%- if tdd %}
uldl_config: {{
......@@ -311,20 +309,16 @@
}},
sp_config: 7,
{%- endif %}
{%- set n_rb_dl = J(jlte_n_rb_dl(cell.bandwidth)) %}
n_rb_dl: {{ n_rb_dl }},
si_coderate: {{ 0.60 if n_rb_dl == 6 else 0.20 }},
pdsch_dedicated: {
p_a: {{ {4: -6, 2: -3}.get(ru.n_antenna_dl, 0) }},
p_b: -1,
},
pdcch_format: {{ 1 if n_rb_dl == 6 else 2 }},
prach_config_index: {{ 0 if n_rb_dl == 6 else 4 }},
initial_cqi: {{ 5 if n_rb_dl == 6 else 3 }},
pucch_dedicated: {
n1_pucch_sr_count: 11,
cqi_pucch_n_rb: 1,
......@@ -341,12 +335,10 @@
tdd_ack_nack_feedback_mode: "multiplexing", /* TDD only */
{%- endif %}
},
{%- if ru.n_antenna_dl >= 2 %}
m_ri: 8,
transmission_mode: 3,
{%- endif %}
srs_dedicated: {
{%- if n_rb_dl == 6 %}
srs_bandwidth_config: 7,
......@@ -371,9 +363,7 @@
srs_period: 40,
srs_hopping_bandwidth: 0,
},
drb_config: "{{ B('%s-drb.cfg' % cell_ref) }}",
sib_sched_list: [
{
filename: "{{ B('%s-sib23.asn' % cell_ref) }}",
......@@ -384,7 +374,6 @@
{%- endfor %}
{%- endif %}
],
{%- if do_lte %}
cell_default: {
plmn_list: [
......@@ -397,37 +386,26 @@
{%- endfor %}
],
cyclic_prefix: "normal",
phich_duration: "normal",
phich_resource: "1",
si_value_tag: 0,
cell_barred: false,
intra_freq_reselection: true,
q_rx_lev_min: -70,
si_window_length: 40,
si_pdcch_format: 2,
n_symb_cch: 0,
prach_freq_offset: -1,
pusch_dedicated: {
beta_offset_ack_index: 9,
beta_offset_ri_index: 6,
beta_offset_cqi_index: 6,
},
pusch_hopping_offset: -1,
pusch_msg3_mcs: 0,
dl_256qam: true,
ul_64qam: true,
sr_period: 20,
cqi_period: 40,
{%- if ors %}
mac_config: {
......@@ -442,15 +420,11 @@
},
dpc_pucch_snr_target: 20,
{%- endif %}
pusch_max_its: 6,
dpc: true,
dpc_pusch_snr_target: 25,
cipher_algo_pref: [],
integ_algo_pref: [2, 1],
srb_config: [
{
id: 1,
......@@ -465,9 +439,8 @@
t_PollRetransmit: 60,
}
],
{# TODO fully expose lte meas_config_desc in generic SR #}
{%- if (len(icell_dict) + len(ipeercell_dict)) > 0 %}
{#- TODO fully expose lte meas_config_desc in generic SR #}
{%- if (len(icell_dict) + len(ipeercell_dict)) > 1 %}
meas_config_desc: {
a1_report_type: "rsrp",
a1_rsrp: {{ slapparameter_dict.handover_a1_rsrp }},
......@@ -482,8 +455,10 @@
a3_report_type: "rsrp",
a3_offset: {{ slapparameter_dict.eutra_handover.event.a3_rsrp }},
{%- elif 'a4_rsrp' in slapparameter_dict.eutra_handover.event %}
a4_report_type: "rsrp",
a4_threshold_rsrp: {{ slapparameter_dict.eutra_handover.event.a4_rsrp }},
{%- elif 'a5_rsrp' in slapparameter_dict.eutra_handover.event %}
a5_report_type: "rsrp",
a5_threshold1_rsrp: {{ slapparameter_dict.eutra_handover.event.a5_threshold1_rsrp }},
a5_threshold2_rsrp: {{ slapparameter_dict.eutra_handover.event.a5_threshold2_rsrp }},
{%- endif %}
......@@ -493,8 +468,10 @@
},
nr_handover: {
{%- if 'b1_rsrp' in slapparameter_dict.nr_handover.event %}
b1_report_type: "rsrp",
b1_threshold_rsrp: {{ slapparameter_dict.nr_handover.event.b1_rsrp }},
{%- elif 'b2_rsrp' in slapparameter_dict.nr_handover.event %}
b2_report_type: "rsrp",
b2_threshold1_rsrp: {{ slapparameter_dict.nr_handover.event.b2_threshold1_rsrp }},
b2_threshold2_rsrp: {{ slapparameter_dict.nr_handover.event.b2_threshold2_rsrp }},
{%- endif %}
......@@ -566,8 +543,7 @@
{%- endif %}
},
{%- endif %}
{% if do_nr %}
{%- if do_nr %}
// NR cells
nr_cell_list: [
{%- for cell_ref, icell in icell_dict_nr|dictsort %}
......@@ -575,30 +551,24 @@
{%- set ru_ref = J(jcell_ru_ref(icell, icell_dict)) %}
{%- set iru = iru_dict[ru_ref] %}
{%- set ru = iru['_'] %}
// {{ B(cell_ref) }} ({{ B(ru_ref) }})
{
rf_port: {{ ru._rf_port }},
n_antenna_dl: {{ ru.n_antenna_dl }},
n_antenna_ul: {{ ru.n_antenna_ul }},
cell_id: {{ cell.cell_id }},
n_id_cell: {{ cell.pci }},
band: {{ cell.nr_band }},
dl_nr_arfcn: {{ cell.dl_nr_arfcn }},
ul_nr_arfcn: {{ cell.ul_nr_arfcn }},
bandwidth: {{ cell.bandwidth }},
subcarrier_spacing: {{ cell.subcarrier_spacing }},
ssb_nr_arfcn: {{ cell.ssb_nr_arfcn }},
ssb_pos_bitmap: "{{ cell.ssb_pos_bitmap }}",
root_sequence_index: {{ cell.root_sequence_index }},
inactivity_timer: {{ cell.inactivity_timer }},
// Handover
{{- handover_config(cell_ref) }}
// Carrier Aggregation: NR + NR
scell_list: [
{%- for cell2_ref, icell2 in icell_dict_nr|dictsort %}
......@@ -610,10 +580,8 @@
{%- endif %}
{%- endfor %}
],
{#- NOTE: NR + LTE Dual Connectivity is setup via EN-DC only - via en_dc_scg_cell_list.
nr_dc_scg_cell_list sets up NR+NR Dual Connectivity #}
// tune NR parameters for the cell
{%- if ors %}
manual_ref_signal_power: true,
......@@ -623,7 +591,6 @@
ss_pbch_block_power: {{ ru.tx_gain - 35 }},
{%- endif -%}
{%- endif %}
{%- set tdd = (cell.rf_mode == 'tdd') %}
{%- set tdd_config =
{'5ms 2UL 7DL 4/6 (default)': 1,
......@@ -632,7 +599,7 @@
'5ms 6UL 3DL 10/2 (high uplink)': 4}
[cell.tdd_ul_dl_config]
if tdd else None %}
{% if tdd_config == 1 %}
{%- if tdd_config == 1 %}
tdd_ul_dl_config: {
pattern1: {
period: 5,
......@@ -642,7 +609,7 @@
ul_symbols: 4,
},
},
{% elif tdd_config == 2 %}
{%- elif tdd_config == 2 %}
tdd_ul_dl_config: {
pattern1: {
period: 2.5,
......@@ -652,7 +619,7 @@
ul_symbols: 2,
},
},
{% elif tdd_config == 3 %}
{%- elif tdd_config == 3 %}
tdd_ul_dl_config: {
pattern1: {
period: 5, /* in ms */
......@@ -662,7 +629,7 @@
ul_symbols: 2,
},
},
{% elif tdd_config == 4 %}
{%- elif tdd_config == 4 %}
tdd_ul_dl_config: {
pattern1: {
period: 5, /* in ms */
......@@ -672,15 +639,13 @@
ul_symbols: 10,
},
},
{% endif %}
{%- endif %}
prach: {
{%- if ru.ru_type == "sunwave" %}
msg1_frequency_start: 0,
{%- endif %}
ra_response_window: {{ 20 if tdd else 10 }},
},
pdcch: {
{%- if ru.ru_type == "sunwave" %}
n_rb_coreset0: 48,
......@@ -701,7 +666,6 @@
},
{%- endif %}
},
pdsch: {
{%- if ru.ru_type == "sunwave" %}
k0: 0,
......@@ -710,7 +674,6 @@
k1: [4, 11],
{%- endif %}
},
pusch: {
{%- if ru.ru_type == "sunwave" %}
k2: 4,
......@@ -720,157 +683,12 @@
msg3_k2: 7,
{%- endif %}
},
csi_rs: {
nzp_csi_rs_resource: [
{
{%- if ru.n_antenna_dl == 1 %}
n_ports: 1,
frequency_domain_allocation: "row2",
bitmap: "100000000000",
cdm_type: "no_cdm",
{%- elif ru.n_antenna_dl == 2 %}
n_ports: 2,
frequency_domain_allocation: "other",
bitmap: "100000",
cdm_type: "fd_cdm2",
{%- elif ru.n_antenna_dl == 4 %}
n_ports: 4,
frequency_domain_allocation: "row4",
bitmap: "100",
cdm_type: "fd_cdm2",
{%- elif ru.n_antenna_dl == 8 %}
n_ports: 8,
frequency_domain_allocation: "other",
bitmap: "110011",
cdm_type: "fd_cdm2",
{%- else %}
{%- do ierror(iru, 'n_antenna_dl=%d is not supported' % ru.n_antenna_dl) %}
{%- endif %}
},
{%- if tdd_config != 3 %}
{
csi_rs_id: 1,
n_ports: 1,
frequency_domain_allocation: "row1",
bitmap: "0001",
cdm_type: "no_cdm",
density: 3,
first_symb: 4,
rb_start: 0,
l_crb: -1,
power_control_offset: 0,
power_control_offset_ss: 0,
period: 40,
offset: 11,
qcl_info_periodic_csi_rs: 0,
},
{
csi_rs_id: 2,
n_ports: 1,
frequency_domain_allocation: "row1",
bitmap: "0001",
cdm_type: "no_cdm",
density: 3,
first_symb: 8,
rb_start: 0,
l_crb: -1,
power_control_offset: 0,
power_control_offset_ss: 0,
period: 40,
offset: 11,
qcl_info_periodic_csi_rs: 0,
},
{
csi_rs_id: 3,
n_ports: 1,
frequency_domain_allocation: "row1",
bitmap: "0001",
cdm_type: "no_cdm",
density: 3,
first_symb: 4,
rb_start: 0,
l_crb: -1,
power_control_offset: 0,
power_control_offset_ss: 0,
period: 40,
offset: 12,
qcl_info_periodic_csi_rs: 0,
},
{
csi_rs_id: 4,
n_ports: 1,
frequency_domain_allocation: "row1",
bitmap: "0001",
cdm_type: "no_cdm",
density: 3,
first_symb: 8,
rb_start: 0,
l_crb: -1,
power_control_offset: 0,
power_control_offset_ss: 0,
period: 40,
offset: 12,
qcl_info_periodic_csi_rs: 0,
},
{%- endif %}
],
nzp_csi_rs_resource_set: [
{},
{%- if tdd_config != 3 %}
{
csi_rs_set_id: 1,
nzp_csi_rs_resources: [ 1, 2, 3, 4 ],
repetition: false,
trs_info: true,
},
{%- endif %}
],
csi_resource_config: [
{},
{},
{%- if tdd_config != 3 %}
{
csi_rsc_config_id: 2,
nzp_csi_rs_resource_set_list: [ 1 ],
resource_type: "periodic",
},
{%- endif %}
],
csi_report_config: [
{
{%- if ru.n_antenna_dl > 1 %}
codebook_config: {
codebook_type: "type1",
sub_type: "typeI_SinglePanel",
{%- if ru.n_antenna_dl == 2 %}
{%- elif ru.n_antenna_dl == 4 %}
n1: 2,
n2: 1,
codebook_mode: 1,
{%- elif ru.n_antenna_dl == 8 %}
n1: 4,
n2: 1,
codebook_mode: 1,
{%- endif %}
},
{%- endif %}
},
],
},
drb_config: "{{ B('%s-drb.cfg' % cell_ref) }}",
},
{%- endfor %}
],
nr_cell_default: {
ssb_period: 20,
plmn_list: [
{%- for _, plmn in slapparameter_dict.plmn_list_5g |dictsort %}
{
......@@ -893,7 +711,6 @@
},
{%- endfor %}
],
si_window_length: 40,
cell_barred: false,
intra_freq_reselection: true,
......@@ -940,86 +757,13 @@
si_mcs: 6,
},
csi_rs: {
nzp_csi_rs_resource: [
{
csi_rs_id: 0,
density: 1,
first_symb: 4,
rb_start: 0,
l_crb: -1,
power_control_offset: 0,
power_control_offset_ss: 0,
period: 80,
offset: 1,
qcl_info_periodic_csi_rs: 0,
},
],
nzp_csi_rs_resource_set: [
{
csi_rs_set_id: 0,
nzp_csi_rs_resources: [ 0 ],
repetition: false,
},
],
csi_im_resource: [
{
csi_im_id: 0,
pattern: 1,
subcarrier_location: 8,
symbol_location: 8,
rb_start: 0,
l_crb: -1,
period: 80,
offset: 1,
},
],
csi_im_resource_set: [
{
csi_im_set_id: 0,
csi_im_resources: [ 0 ],
}
],
zp_csi_rs_resource: [
{
csi_rs_id: 0,
frequency_domain_allocation: "row4",
bitmap: "100",
n_ports: 4,
cdm_type: "fd_cdm2",
first_symb: 8,
density: 1,
rb_start: 0,
l_crb: -1,
period: 80,
offset: 1,
resource_auto: {
nzp_csi_rs_period: 80,
},
],
p_zp_csi_rs_resource_set: [
{
zp_csi_rs_resources: [ 0 ],
},
],
csi_resource_config: [
{
csi_rsc_config_id: 0,
nzp_csi_rs_resource_set_list: [ 0 ],
resource_type: "periodic",
},
{
csi_rsc_config_id: 1,
csi_im_resource_set_list: [ 0 ],
resource_type: "periodic",
},
],
csi_report_config: [
{
resources_for_channel_measurement: 0,
csi_im_resources_for_interference: 1,
report_config_type: "periodic",
period: 80,
report_quantity: "CRI_RI_PMI_CQI",
cqi_table: 2,
subband_size: "value1",
},
],
},
......@@ -1073,18 +817,7 @@
},
cipher_algo_pref: [],
integ_algo_pref: [2, 1],
{# TODO fully expose nr meas_config_desc in generic SR #}
{#- TODO fully expose nr meas_config_desc in generic SR #}
{%- if (len(icell_dict) + len(ipeercell_dict)) > 1 %}
meas_config_desc: {
a1_report_type: "rsrp",
......@@ -1182,44 +915,7 @@
{{ band }},
{%- endfor -%}
],
{%- endif %}
meas_config_desc: {
a1_report_type: "rsrp",
a1_rsrp: -60,
a1_hysteresis: 10,
a1_time_to_trigger: 100,
a2_report_type: "rsrp",
a2_rsrp: -70,
a2_hysteresis: 0,
a2_time_to_trigger: 100,
a3_report_type: "rsrp",
a3_offset: {{ slapparameter_dict.get('nr_handover_a3_offset', 6) }},
a3_hysteresis: 0,
a3_time_to_trigger: {{ slapparameter_dict.get('nr_handover_time_to_trigger', 100) }},
ssb_rsrq_filter_coeff: 3,
ssb_sinr_filter_coeff: 5
},
meas_gap_config: {
pattern_id: 0
},
},
{%- endif %}
}
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