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 ...@@ -88,7 +88,7 @@ md5sum = dd50b4e4780830ddbde28b84af118f18
[enb.jinja2.cfg] [enb.jinja2.cfg]
filename = config/enb.jinja2.cfg filename = config/enb.jinja2.cfg
md5sum = ac7000a3b6999b51635083619e640e30 md5sum = 5f5441444d442e87526b6ced33265656
[drb_lte.jinja2.cfg] [drb_lte.jinja2.cfg]
filename = config/drb_lte.jinja2.cfg filename = config/drb_lte.jinja2.cfg
......
...@@ -4,7 +4,9 @@ ...@@ -4,7 +4,9 @@
{%- set jcell_ru_ref = slaplte.jcell_ru_ref %} {%- set jcell_ru_ref = slaplte.jcell_ru_ref %}
{%- set ierror = slaplte.ierror %} {%- set ierror = slaplte.ierror %}
{%- set bug = slaplte.bug %} {%- set bug = slaplte.bug %}
{#-
#}
{#- for standalone testing via slapos-render-config.py {#- for standalone testing via slapos-render-config.py
NOTE: keep in sync with instance-enb.jinja2.cfg and ru/libinstance.jinja2.cfg #} NOTE: keep in sync with instance-enb.jinja2.cfg and ru/libinstance.jinja2.cfg #}
{%- if _standalone is defined %} {%- if _standalone is defined %}
...@@ -17,86 +19,89 @@ ...@@ -17,86 +19,89 @@
{%- do slaplte.load_ipeercell(ipeercell_dict) %} {%- do slaplte.load_ipeercell(ipeercell_dict) %}
{%- do slaplte.check_loaded_everything() %} {%- do slaplte.check_loaded_everything() %}
{%- endif %} {%- endif %}
{#-
#}
{#- do_lte/do_nr indicate whether we have LTE and/or NR cells {#- 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 #} 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_lte = dict(icell_dict|dictsort | selectattr('1._.cell_type', '==', 'lte')) %}
{%- set icell_dict_nr = dict(icell_dict|dictsort | selectattr('1._.cell_type', '==', 'nr' )) %} {%- set icell_dict_nr = dict(icell_dict|dictsort | selectattr('1._.cell_type', '==', 'nr' )) %}
{%- set do_lte = len(icell_dict_lte) > 0 %} {%- set do_lte = len(icell_dict_lte) > 0 %}
{%- set do_nr = len(icell_dict_nr) > 0 %} {%- set do_nr = len(icell_dict_nr) > 0 %}
{#-
#}
{#- handover_config emits handover configuration for specified cell #} {#- handover_config emits handover configuration for specified cell #}
{%- macro handover_config(cell_ref) %} {%- macro handover_config(cell_ref) %}
ncell_list: [ ncell_list: [
// Intra-ENB HO // Intra-ENB HO
{%- for cell2_ref, icell2 in icell_dict|dictsort %} {%- for cell2_ref, icell2 in icell_dict|dictsort %}
{%- set cell2 = icell2['_'] %} {%- set cell2 = icell2['_'] %}
{%- if cell2_ref != cell_ref %} {#- NOTE: HO to both LTE and NR #} {%- if cell2_ref != cell_ref %} {#- NOTE: HO to both LTE and NR #}
{%- set ru2_ref = J(jcell_ru_ref(icell2, icell_dict)) %} {%- set ru2_ref = J(jcell_ru_ref(icell2, icell_dict)) %}
{%- set iru2 = iru_dict[ru2_ref] %} {%- set iru2 = iru_dict[ru2_ref] %}
{%- set ru2 = iru2['_'] %} {%- set ru2 = iru2['_'] %}
{ {
{%- if cell2.cell_type == 'lte' %} {%- if cell2.cell_type == 'lte' %}
rat: "eutra", rat: "eutra",
cell_id: {{ slapparameter_dict.enb_id }}{{ cell2.cell_id.removeprefix('0x') }}, // -> {{ B(cell2_ref) }} cell_id: {{ slapparameter_dict.enb_id }}{{ cell2.cell_id.removeprefix('0x') }}, // -> {{ B(cell2_ref) }}
n_id_cell: {{ cell2.pci }}, n_id_cell: {{ cell2.pci }},
dl_earfcn: {{ cell2.dl_earfcn }}, dl_earfcn: {{ cell2.dl_earfcn }},
tac: {{ cell2.tac }}, tac: {{ cell2.tac }},
allowed_meas_bandwidth: {{ jlte_n_rb_dl(cell2.bandwidth) }}, allowed_meas_bandwidth: {{ jlte_n_rb_dl(cell2.bandwidth) }},
antenna_port_1: {{ (ru2.n_antenna_dl > 1) | tojson }}, antenna_port_1: {{ (ru2.n_antenna_dl > 1) | tojson }},
{%- elif cell2.cell_type == 'nr' %} {%- elif cell2.cell_type == 'nr' %}
rat: "nr", rat: "nr",
cell_id: {{ cell2.cell_id }}, // -> {{ B(cell2_ref) }} cell_id: {{ cell2.cell_id }}, // -> {{ B(cell2_ref) }}
{%- else %} {%- else %}
{%- do bug('unreachable') %} {%- do bug('unreachable') %}
{%- endif %} {%- endif %}
}, },
{%- endif %} {%- endif %}
{%- endfor %} {%- endfor %}
// Inter-ENB HO
// Inter-ENB HO
{#- TODO: add info about peers as shared instances - one instance per peer *ENB*. {#- 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 then query SlapOS Master about cells configured on that peer ENB and
put them as peers here #} put them as peers here #}
{%- for peercell_ref, ipeercell in ipeercell_dict|dictsort %} {%- for peercell_ref, ipeercell in ipeercell_dict|dictsort %}
{%- set ncell = ipeercell['_'] %} {%- set ncell = ipeercell['_'] %}
{ {
{%- if ncell.cell_type == 'lte' %} {%- if ncell.cell_type == 'lte' %}
rat: "eutra", rat: "eutra",
cell_id: {{ ncell.e_cell_id }}, // -> {{ B(peercell_ref) }} cell_id: {{ ncell.e_cell_id }}, // -> {{ B(peercell_ref) }}
n_id_cell: {{ ncell.pci }}, n_id_cell: {{ ncell.pci }},
dl_earfcn: {{ ncell.dl_earfcn }}, dl_earfcn: {{ ncell.dl_earfcn }},
tac: {{ ncell.tac }}, tac: {{ ncell.tac }},
plmn: "{{ ncell.plmn }}", plmn: "{{ ncell.plmn }}",
{#- TODO: consider extending peer/cell/lte with {#- TODO: consider extending peer/cell/lte with
.allowed_meas_bandwidth and .antenna_port_1 #} .allowed_meas_bandwidth and .antenna_port_1 #}
allowed_meas_bandwidth: {{ jlte_n_rb_dl(1.4) }}, // (minimum possible bw) allowed_meas_bandwidth: {{ jlte_n_rb_dl(1.4) }}, // (minimum possible bw)
antenna_port_1: false, // (conservative stub) antenna_port_1: false, // (conservative stub)
{%- elif ncell.cell_type == 'nr' %} {%- elif ncell.cell_type == 'nr' %}
rat: "nr", rat: "nr",
nr_cell_id: {{ ncell.nr_cell_id }}, // -> {{ B(peercell_ref) }} nr_cell_id: {{ ncell.nr_cell_id }}, // -> {{ B(peercell_ref) }}
gnb_id_bits: {{ ncell.gnb_id_bits }}, gnb_id_bits: {{ ncell.gnb_id_bits }},
n_id_cell: {{ ncell.pci }}, n_id_cell: {{ ncell.pci }},
dl_nr_arfcn: {{ ncell.dl_nr_arfcn }}, dl_nr_arfcn: {{ ncell.dl_nr_arfcn }},
band: {{ ncell.nr_band }}, band: {{ ncell.nr_band }},
ssb_nr_arfcn: {{ ncell.ssb_nr_arfcn }}, ssb_nr_arfcn: {{ ncell.ssb_nr_arfcn }},
ul_nr_arfcn: {{ ncell.ul_nr_arfcn }}, ul_nr_arfcn: {{ ncell.ul_nr_arfcn }},
tac: {{ ncell.tac }}, tac: {{ ncell.tac }},
plmn: "{{ ncell.plmn }}", plmn: "{{ ncell.plmn }}",
ssb_subcarrier_spacing: 30, ssb_subcarrier_spacing: 30,
ssb_period: 20, ssb_period: 20,
ssb_offset: 0, ssb_offset: 0,
ssb_duration: 1, ssb_duration: 1,
{%- else %} {%- else %}
{%- do bug('unreachable') %} {%- do bug('unreachable') %}
{%- endif %} {%- endif %}
}, },
{%- endfor %} {%- endfor %}
], ],
{%- endmacro %} {%- endmacro %}
{#-
#}
{#- jlte_n_rb_dl returns n_rb_dl for an LTE bandwidth. #} {#- jlte_n_rb_dl returns n_rb_dl for an LTE bandwidth. #}
{%- macro jlte_n_rb_dl(bandwidth) %} {%- macro jlte_n_rb_dl(bandwidth) %}
{%- set _ = {1.4: 6, {%- set _ = {1.4: 6,
...@@ -107,7 +112,9 @@ ...@@ -107,7 +112,9 @@
20: 100} %} 20: 100} %}
{{- _[bandwidth] | tojson }} {{- _[bandwidth] | tojson }}
{%- endmacro %} {%- endmacro %}
{#-
#}
{#- jhostport splits address into (host,port) pair. #} {#- jhostport splits address into (host,port) pair. #}
{%- macro jhostport(addr) %} {%- macro jhostport(addr) %}
{%- set _ = namespace() %} {%- set _ = namespace() %}
...@@ -131,8 +138,9 @@ ...@@ -131,8 +138,9 @@
{%- endif %} {%- endif %}
{{- (_.host, _.port) | tojson }} {{- (_.host, _.port) | tojson }}
{%- endmacro -%} {%- endmacro -%}
{#-
#}
{#- start of the config -#} {#- 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, 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 @@ ...@@ -143,21 +151,20 @@
{%- endif -%} {%- endif -%}
,file.rotate=200M", ,file.rotate=200M",
log_filename: "{{ directory['log'] }}/enb.log", log_filename: "{{ directory['log'] }}/enb.log",
{#-
{# instantiate radio units #} #}
{#- instantiate radio units #}
{{ slaplte.ru_config(iru_dict, slapparameter_dict, True) }} {{ slaplte.ru_config(iru_dict, slapparameter_dict, True) }}
com_addr: "{{ slapparameter_dict.com_addr }}:{{ slapparameter_dict.com_ws_port }}", com_addr: "{{ slapparameter_dict.com_addr }}:{{ slapparameter_dict.com_ws_port }}",
com_auth: { com_auth: {
password: "{{ websocket_password }}", password: "{{ websocket_password }}",
unsecure: false, unsecure: false,
}, },
{%- if slapparameter_dict.get('mbmsgw_addr', '') %} {%- if slapparameter_dict.get('mbmsgw_addr', '') %}
mbmsgw_addr: "{{ slapparameter_dict.mbmsgw_addr }}", mbmsgw_addr: "{{ slapparameter_dict.mbmsgw_addr }}",
{%- endif %} {%- endif %}
{%- if do_lte %}
{% if do_lte %}
// LTE core network // LTE core network
mme_list: [ mme_list: [
{%- for _, mme in slapparameter_dict.mme_list |dictsort %} {%- for _, mme in slapparameter_dict.mme_list |dictsort %}
...@@ -170,8 +177,7 @@ ...@@ -170,8 +177,7 @@
{%- endfor %} {%- endfor %}
], ],
{%- endif %} {%- endif %}
{%- if do_nr %}
{% if do_nr %}
// NR core network // NR core network
amf_list: [ amf_list: [
{%- for _, amf in slapparameter_dict.amf_list |dictsort %} {%- for _, amf in slapparameter_dict.amf_list |dictsort %}
...@@ -184,7 +190,6 @@ ...@@ -184,7 +190,6 @@
{%- endfor %} {%- endfor %}
], ],
{%- endif %} {%- endif %}
{#- listen-address for GTP-U - either explicitly given, or autodetect #} {#- listen-address for GTP-U - either explicitly given, or autodetect #}
{%- if slapparameter_dict.get('gtp_addr') %} {%- if slapparameter_dict.get('gtp_addr') %}
gtp_addr: "{{ slapparameter_dict.gtp_addr }}", gtp_addr: "{{ slapparameter_dict.gtp_addr }}",
...@@ -216,7 +221,9 @@ ...@@ -216,7 +221,9 @@
{%- endif %} {%- endif %}
{%- endif %} {%- endif %}
{%- endif %} {%- endif %}
{#-
#}
{#- X2/Xn peers {#- X2/Xn peers
TODO: add info about peers as shared instances - one instance per peer *ENB*. 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 then query SlapOS Master about cells configured on that peer ENB and
...@@ -231,8 +238,9 @@ ...@@ -231,8 +238,9 @@
| map(attribute='1._.xn_addr') | map(attribute='1._.xn_addr')
| list | tojson }}, | list | tojson }},
{%- endif %} {%- endif %}
{#-
#}
{%- if do_lte %} {%- if do_lte %}
enb_id: {{ slapparameter_dict.enb_id }}, enb_id: {{ slapparameter_dict.enb_id }},
{%- endif %} {%- endif %}
...@@ -241,7 +249,6 @@ ...@@ -241,7 +249,6 @@
gnb_id: {{ slapparameter_dict.gnb_id }}, gnb_id: {{ slapparameter_dict.gnb_id }},
en_dc_support: true, en_dc_support: true,
{%- endif %} {%- endif %}
// LTE cells // LTE cells
cell_list: [ cell_list: [
{%- if do_lte %} {%- if do_lte %}
...@@ -250,13 +257,11 @@ ...@@ -250,13 +257,11 @@
{%- set ru_ref = J(jcell_ru_ref(icell, icell_dict)) %} {%- set ru_ref = J(jcell_ru_ref(icell, icell_dict)) %}
{%- set iru = iru_dict[ru_ref] %} {%- set iru = iru_dict[ru_ref] %}
{%- set ru = iru['_'] %} {%- set ru = iru['_'] %}
// {{ B(cell_ref) }} ({{ B(ru_ref) }}) // {{ B(cell_ref) }} ({{ B(ru_ref) }})
{ {
rf_port: {{ ru._rf_port }}, rf_port: {{ ru._rf_port }},
n_antenna_dl: {{ ru.n_antenna_dl }}, n_antenna_dl: {{ ru.n_antenna_dl }},
n_antenna_ul: {{ ru.n_antenna_ul }}, n_antenna_ul: {{ ru.n_antenna_ul }},
cell_id: {{ cell.cell_id }}, cell_id: {{ cell.cell_id }},
tac: {{ cell.tac }}, tac: {{ cell.tac }},
n_id_cell: {{ cell.pci }}, n_id_cell: {{ cell.pci }},
...@@ -264,11 +269,8 @@ ...@@ -264,11 +269,8 @@
ul_earfcn: {{ cell.ul_earfcn }}, ul_earfcn: {{ cell.ul_earfcn }},
root_sequence_index: {{ cell.root_sequence_index }}, root_sequence_index: {{ cell.root_sequence_index }},
inactivity_timer: {{ cell.inactivity_timer }}, inactivity_timer: {{ cell.inactivity_timer }},
// Handover // Handover
{{- handover_config(cell_ref) }} {{- handover_config(cell_ref) }}
// Carrier Aggregation: LTE + LTE // Carrier Aggregation: LTE + LTE
scell_list: [ scell_list: [
{%- for cell2_ref, icell2 in icell_dict_lte|dictsort %} {%- for cell2_ref, icell2 in icell_dict_lte|dictsort %}
...@@ -281,7 +283,6 @@ ...@@ -281,7 +283,6 @@
{%- endif %} {%- endif %}
{%- endfor %} {%- endfor %}
], ],
{%- if do_nr %} {%- if do_nr %}
// Dual Connectivity: LTE + NR // Dual Connectivity: LTE + NR
en_dc_scg_cell_list: [ en_dc_scg_cell_list: [
...@@ -295,13 +296,10 @@ ...@@ -295,13 +296,10 @@
{%- endfor %} {%- endfor %}
], ],
{%- endif %} {%- endif %}
// tune LTE parameters for the cell // tune LTE parameters for the cell
{% if ors %} {%- if ors %}
manual_ref_signal_power: true, manual_ref_signal_power: true,
{% endif %} {%- endif %}
{%- set tdd = (cell.rf_mode == 'tdd') %} {%- set tdd = (cell.rf_mode == 'tdd') %}
{%- if tdd %} {%- if tdd %}
uldl_config: {{ uldl_config: {{
...@@ -311,20 +309,16 @@ ...@@ -311,20 +309,16 @@
}}, }},
sp_config: 7, sp_config: 7,
{%- endif %} {%- endif %}
{%- set n_rb_dl = J(jlte_n_rb_dl(cell.bandwidth)) %} {%- set n_rb_dl = J(jlte_n_rb_dl(cell.bandwidth)) %}
n_rb_dl: {{ n_rb_dl }}, n_rb_dl: {{ n_rb_dl }},
si_coderate: {{ 0.60 if n_rb_dl == 6 else 0.20 }}, si_coderate: {{ 0.60 if n_rb_dl == 6 else 0.20 }},
pdsch_dedicated: { pdsch_dedicated: {
p_a: {{ {4: -6, 2: -3}.get(ru.n_antenna_dl, 0) }}, p_a: {{ {4: -6, 2: -3}.get(ru.n_antenna_dl, 0) }},
p_b: -1, p_b: -1,
}, },
pdcch_format: {{ 1 if n_rb_dl == 6 else 2 }}, pdcch_format: {{ 1 if n_rb_dl == 6 else 2 }},
prach_config_index: {{ 0 if n_rb_dl == 6 else 4 }}, prach_config_index: {{ 0 if n_rb_dl == 6 else 4 }},
initial_cqi: {{ 5 if n_rb_dl == 6 else 3 }}, initial_cqi: {{ 5 if n_rb_dl == 6 else 3 }},
pucch_dedicated: { pucch_dedicated: {
n1_pucch_sr_count: 11, n1_pucch_sr_count: 11,
cqi_pucch_n_rb: 1, cqi_pucch_n_rb: 1,
...@@ -341,12 +335,10 @@ ...@@ -341,12 +335,10 @@
tdd_ack_nack_feedback_mode: "multiplexing", /* TDD only */ tdd_ack_nack_feedback_mode: "multiplexing", /* TDD only */
{%- endif %} {%- endif %}
}, },
{%- if ru.n_antenna_dl >= 2 %} {%- if ru.n_antenna_dl >= 2 %}
m_ri: 8, m_ri: 8,
transmission_mode: 3, transmission_mode: 3,
{%- endif %} {%- endif %}
srs_dedicated: { srs_dedicated: {
{%- if n_rb_dl == 6 %} {%- if n_rb_dl == 6 %}
srs_bandwidth_config: 7, srs_bandwidth_config: 7,
...@@ -371,9 +363,7 @@ ...@@ -371,9 +363,7 @@
srs_period: 40, srs_period: 40,
srs_hopping_bandwidth: 0, srs_hopping_bandwidth: 0,
}, },
drb_config: "{{ B('%s-drb.cfg' % cell_ref) }}", drb_config: "{{ B('%s-drb.cfg' % cell_ref) }}",
sib_sched_list: [ sib_sched_list: [
{ {
filename: "{{ B('%s-sib23.asn' % cell_ref) }}", filename: "{{ B('%s-sib23.asn' % cell_ref) }}",
...@@ -384,7 +374,6 @@ ...@@ -384,7 +374,6 @@
{%- endfor %} {%- endfor %}
{%- endif %} {%- endif %}
], ],
{%- if do_lte %} {%- if do_lte %}
cell_default: { cell_default: {
plmn_list: [ plmn_list: [
...@@ -397,37 +386,26 @@ ...@@ -397,37 +386,26 @@
{%- endfor %} {%- endfor %}
], ],
cyclic_prefix: "normal", cyclic_prefix: "normal",
phich_duration: "normal", phich_duration: "normal",
phich_resource: "1", phich_resource: "1",
si_value_tag: 0, si_value_tag: 0,
cell_barred: false, cell_barred: false,
intra_freq_reselection: true, intra_freq_reselection: true,
q_rx_lev_min: -70, q_rx_lev_min: -70,
si_window_length: 40, si_window_length: 40,
si_pdcch_format: 2, si_pdcch_format: 2,
n_symb_cch: 0, n_symb_cch: 0,
prach_freq_offset: -1, prach_freq_offset: -1,
pusch_dedicated: { pusch_dedicated: {
beta_offset_ack_index: 9, beta_offset_ack_index: 9,
beta_offset_ri_index: 6, beta_offset_ri_index: 6,
beta_offset_cqi_index: 6, beta_offset_cqi_index: 6,
}, },
pusch_hopping_offset: -1, pusch_hopping_offset: -1,
pusch_msg3_mcs: 0, pusch_msg3_mcs: 0,
dl_256qam: true, dl_256qam: true,
ul_64qam: true, ul_64qam: true,
sr_period: 20, sr_period: 20,
cqi_period: 40, cqi_period: 40,
{%- if ors %} {%- if ors %}
mac_config: { mac_config: {
...@@ -442,15 +420,11 @@ ...@@ -442,15 +420,11 @@
}, },
dpc_pucch_snr_target: 20, dpc_pucch_snr_target: 20,
{%- endif %} {%- endif %}
pusch_max_its: 6, pusch_max_its: 6,
dpc: true, dpc: true,
dpc_pusch_snr_target: 25, dpc_pusch_snr_target: 25,
cipher_algo_pref: [], cipher_algo_pref: [],
integ_algo_pref: [2, 1], integ_algo_pref: [2, 1],
srb_config: [ srb_config: [
{ {
id: 1, id: 1,
...@@ -465,9 +439,8 @@ ...@@ -465,9 +439,8 @@
t_PollRetransmit: 60, t_PollRetransmit: 60,
} }
], ],
{#- TODO fully expose lte meas_config_desc in generic SR #}
{# TODO fully expose lte meas_config_desc in generic SR #} {%- if (len(icell_dict) + len(ipeercell_dict)) > 1 %}
{%- if (len(icell_dict) + len(ipeercell_dict)) > 0 %}
meas_config_desc: { meas_config_desc: {
a1_report_type: "rsrp", a1_report_type: "rsrp",
a1_rsrp: {{ slapparameter_dict.handover_a1_rsrp }}, a1_rsrp: {{ slapparameter_dict.handover_a1_rsrp }},
...@@ -482,8 +455,10 @@ ...@@ -482,8 +455,10 @@
a3_report_type: "rsrp", a3_report_type: "rsrp",
a3_offset: {{ slapparameter_dict.eutra_handover.event.a3_rsrp }}, a3_offset: {{ slapparameter_dict.eutra_handover.event.a3_rsrp }},
{%- elif 'a4_rsrp' in slapparameter_dict.eutra_handover.event %} {%- elif 'a4_rsrp' in slapparameter_dict.eutra_handover.event %}
a4_report_type: "rsrp",
a4_threshold_rsrp: {{ slapparameter_dict.eutra_handover.event.a4_rsrp }}, a4_threshold_rsrp: {{ slapparameter_dict.eutra_handover.event.a4_rsrp }},
{%- elif 'a5_rsrp' in slapparameter_dict.eutra_handover.event %} {%- 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_threshold1_rsrp: {{ slapparameter_dict.eutra_handover.event.a5_threshold1_rsrp }},
a5_threshold2_rsrp: {{ slapparameter_dict.eutra_handover.event.a5_threshold2_rsrp }}, a5_threshold2_rsrp: {{ slapparameter_dict.eutra_handover.event.a5_threshold2_rsrp }},
{%- endif %} {%- endif %}
...@@ -493,8 +468,10 @@ ...@@ -493,8 +468,10 @@
}, },
nr_handover: { nr_handover: {
{%- if 'b1_rsrp' in slapparameter_dict.nr_handover.event %} {%- if 'b1_rsrp' in slapparameter_dict.nr_handover.event %}
b1_report_type: "rsrp",
b1_threshold_rsrp: {{ slapparameter_dict.nr_handover.event.b1_rsrp }}, b1_threshold_rsrp: {{ slapparameter_dict.nr_handover.event.b1_rsrp }},
{%- elif 'b2_rsrp' in slapparameter_dict.nr_handover.event %} {%- 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_threshold1_rsrp: {{ slapparameter_dict.nr_handover.event.b2_threshold1_rsrp }},
b2_threshold2_rsrp: {{ slapparameter_dict.nr_handover.event.b2_threshold2_rsrp }}, b2_threshold2_rsrp: {{ slapparameter_dict.nr_handover.event.b2_threshold2_rsrp }},
{%- endif %} {%- endif %}
...@@ -566,8 +543,7 @@ ...@@ -566,8 +543,7 @@
{%- endif %} {%- endif %}
}, },
{%- endif %} {%- endif %}
{%- if do_nr %}
{% if do_nr %}
// NR cells // NR cells
nr_cell_list: [ nr_cell_list: [
{%- for cell_ref, icell in icell_dict_nr|dictsort %} {%- for cell_ref, icell in icell_dict_nr|dictsort %}
...@@ -575,30 +551,24 @@ ...@@ -575,30 +551,24 @@
{%- set ru_ref = J(jcell_ru_ref(icell, icell_dict)) %} {%- set ru_ref = J(jcell_ru_ref(icell, icell_dict)) %}
{%- set iru = iru_dict[ru_ref] %} {%- set iru = iru_dict[ru_ref] %}
{%- set ru = iru['_'] %} {%- set ru = iru['_'] %}
// {{ B(cell_ref) }} ({{ B(ru_ref) }}) // {{ B(cell_ref) }} ({{ B(ru_ref) }})
{ {
rf_port: {{ ru._rf_port }}, rf_port: {{ ru._rf_port }},
n_antenna_dl: {{ ru.n_antenna_dl }}, n_antenna_dl: {{ ru.n_antenna_dl }},
n_antenna_ul: {{ ru.n_antenna_ul }}, n_antenna_ul: {{ ru.n_antenna_ul }},
cell_id: {{ cell.cell_id }}, cell_id: {{ cell.cell_id }},
n_id_cell: {{ cell.pci }}, n_id_cell: {{ cell.pci }},
band: {{ cell.nr_band }}, band: {{ cell.nr_band }},
dl_nr_arfcn: {{ cell.dl_nr_arfcn }}, dl_nr_arfcn: {{ cell.dl_nr_arfcn }},
ul_nr_arfcn: {{ cell.ul_nr_arfcn }}, ul_nr_arfcn: {{ cell.ul_nr_arfcn }},
bandwidth: {{ cell.bandwidth }}, bandwidth: {{ cell.bandwidth }},
subcarrier_spacing: {{ cell.subcarrier_spacing }}, subcarrier_spacing: {{ cell.subcarrier_spacing }},
ssb_nr_arfcn: {{ cell.ssb_nr_arfcn }}, ssb_nr_arfcn: {{ cell.ssb_nr_arfcn }},
ssb_pos_bitmap: "{{ cell.ssb_pos_bitmap }}", ssb_pos_bitmap: "{{ cell.ssb_pos_bitmap }}",
root_sequence_index: {{ cell.root_sequence_index }}, root_sequence_index: {{ cell.root_sequence_index }},
inactivity_timer: {{ cell.inactivity_timer }}, inactivity_timer: {{ cell.inactivity_timer }},
// Handover // Handover
{{- handover_config(cell_ref) }} {{- handover_config(cell_ref) }}
// Carrier Aggregation: NR + NR // Carrier Aggregation: NR + NR
scell_list: [ scell_list: [
{%- for cell2_ref, icell2 in icell_dict_nr|dictsort %} {%- for cell2_ref, icell2 in icell_dict_nr|dictsort %}
...@@ -610,10 +580,8 @@ ...@@ -610,10 +580,8 @@
{%- endif %} {%- endif %}
{%- endfor %} {%- endfor %}
], ],
{#- NOTE: NR + LTE Dual Connectivity is setup via EN-DC only - via en_dc_scg_cell_list. {#- 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 #} nr_dc_scg_cell_list sets up NR+NR Dual Connectivity #}
// tune NR parameters for the cell // tune NR parameters for the cell
{%- if ors %} {%- if ors %}
manual_ref_signal_power: true, manual_ref_signal_power: true,
...@@ -623,7 +591,6 @@ ...@@ -623,7 +591,6 @@
ss_pbch_block_power: {{ ru.tx_gain - 35 }}, ss_pbch_block_power: {{ ru.tx_gain - 35 }},
{%- endif -%} {%- endif -%}
{%- endif %} {%- endif %}
{%- set tdd = (cell.rf_mode == 'tdd') %} {%- set tdd = (cell.rf_mode == 'tdd') %}
{%- set tdd_config = {%- set tdd_config =
{'5ms 2UL 7DL 4/6 (default)': 1, {'5ms 2UL 7DL 4/6 (default)': 1,
...@@ -632,7 +599,7 @@ ...@@ -632,7 +599,7 @@
'5ms 6UL 3DL 10/2 (high uplink)': 4} '5ms 6UL 3DL 10/2 (high uplink)': 4}
[cell.tdd_ul_dl_config] [cell.tdd_ul_dl_config]
if tdd else None %} if tdd else None %}
{% if tdd_config == 1 %} {%- if tdd_config == 1 %}
tdd_ul_dl_config: { tdd_ul_dl_config: {
pattern1: { pattern1: {
period: 5, period: 5,
...@@ -642,7 +609,7 @@ ...@@ -642,7 +609,7 @@
ul_symbols: 4, ul_symbols: 4,
}, },
}, },
{% elif tdd_config == 2 %} {%- elif tdd_config == 2 %}
tdd_ul_dl_config: { tdd_ul_dl_config: {
pattern1: { pattern1: {
period: 2.5, period: 2.5,
...@@ -652,7 +619,7 @@ ...@@ -652,7 +619,7 @@
ul_symbols: 2, ul_symbols: 2,
}, },
}, },
{% elif tdd_config == 3 %} {%- elif tdd_config == 3 %}
tdd_ul_dl_config: { tdd_ul_dl_config: {
pattern1: { pattern1: {
period: 5, /* in ms */ period: 5, /* in ms */
...@@ -662,7 +629,7 @@ ...@@ -662,7 +629,7 @@
ul_symbols: 2, ul_symbols: 2,
}, },
}, },
{% elif tdd_config == 4 %} {%- elif tdd_config == 4 %}
tdd_ul_dl_config: { tdd_ul_dl_config: {
pattern1: { pattern1: {
period: 5, /* in ms */ period: 5, /* in ms */
...@@ -672,15 +639,13 @@ ...@@ -672,15 +639,13 @@
ul_symbols: 10, ul_symbols: 10,
}, },
}, },
{% endif %} {%- endif %}
prach: { prach: {
{%- if ru.ru_type == "sunwave" %} {%- if ru.ru_type == "sunwave" %}
msg1_frequency_start: 0, msg1_frequency_start: 0,
{%- endif %} {%- endif %}
ra_response_window: {{ 20 if tdd else 10 }}, ra_response_window: {{ 20 if tdd else 10 }},
}, },
pdcch: { pdcch: {
{%- if ru.ru_type == "sunwave" %} {%- if ru.ru_type == "sunwave" %}
n_rb_coreset0: 48, n_rb_coreset0: 48,
...@@ -701,7 +666,6 @@ ...@@ -701,7 +666,6 @@
}, },
{%- endif %} {%- endif %}
}, },
pdsch: { pdsch: {
{%- if ru.ru_type == "sunwave" %} {%- if ru.ru_type == "sunwave" %}
k0: 0, k0: 0,
...@@ -710,7 +674,6 @@ ...@@ -710,7 +674,6 @@
k1: [4, 11], k1: [4, 11],
{%- endif %} {%- endif %}
}, },
pusch: { pusch: {
{%- if ru.ru_type == "sunwave" %} {%- if ru.ru_type == "sunwave" %}
k2: 4, k2: 4,
...@@ -720,157 +683,12 @@ ...@@ -720,157 +683,12 @@
msg3_k2: 7, msg3_k2: 7,
{%- endif %} {%- 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) }}", drb_config: "{{ B('%s-drb.cfg' % cell_ref) }}",
}, },
{%- endfor %} {%- endfor %}
], ],
nr_cell_default: { nr_cell_default: {
ssb_period: 20, ssb_period: 20,
plmn_list: [ plmn_list: [
{%- for _, plmn in slapparameter_dict.plmn_list_5g |dictsort %} {%- for _, plmn in slapparameter_dict.plmn_list_5g |dictsort %}
{ {
...@@ -893,7 +711,6 @@ ...@@ -893,7 +711,6 @@
}, },
{%- endfor %} {%- endfor %}
], ],
si_window_length: 40, si_window_length: 40,
cell_barred: false, cell_barred: false,
intra_freq_reselection: true, intra_freq_reselection: true,
...@@ -940,86 +757,13 @@ ...@@ -940,86 +757,13 @@
si_mcs: 6, si_mcs: 6,
}, },
csi_rs: { csi_rs: {
nzp_csi_rs_resource: [ resource_auto: {
{ nzp_csi_rs_period: 80,
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,
},
],
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: [ csi_report_config: [
{ {
resources_for_channel_measurement: 0,
csi_im_resources_for_interference: 1,
report_config_type: "periodic", report_config_type: "periodic",
period: 80, period: 80,
report_quantity: "CRI_RI_PMI_CQI",
cqi_table: 2,
subband_size: "value1",
}, },
], ],
}, },
...@@ -1073,18 +817,7 @@ ...@@ -1073,18 +817,7 @@
}, },
cipher_algo_pref: [], cipher_algo_pref: [],
integ_algo_pref: [2, 1], 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 %} {%- if (len(icell_dict) + len(ipeercell_dict)) > 1 %}
meas_config_desc: { meas_config_desc: {
a1_report_type: "rsrp", a1_report_type: "rsrp",
...@@ -1182,44 +915,7 @@ ...@@ -1182,44 +915,7 @@
{{ band }}, {{ band }},
{%- endfor -%} {%- endfor -%}
], ],
{%- endif %} {%- 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 %} {%- 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