Commit e8c634ac authored by Lu Xu's avatar Lu Xu 👀 Committed by Joanne Hugé

WIP: software/ors-amarisoft: add custom configuration

parent df6b58d2
......@@ -16,7 +16,7 @@
[template]
filename = instance.cfg
md5sum = acd9dd8dbe613e7101e62930a8380ef0
md5sum = bae57f54df08d48c1f7d2f13654156ed
[template-ors]
filename = instance-ors.cfg
......@@ -24,7 +24,7 @@ md5sum = f5c76c3443b75569eb18503dce38e783
[slaplte.jinja2]
_update_hash_filename_ = slaplte.jinja2
md5sum = 871ade334f445e22d6cb473e4d4e3522
md5sum = 9f93fad31cd1a31e35acfc3b3be5e4ef
[ru_amarisoft-stats.jinja2.py]
_update_hash_filename_ = ru/amarisoft-stats.jinja2.py
......@@ -36,7 +36,7 @@ md5sum = ab666fdfadbfc7d8a16ace38d295c883
[ru_libinstance.jinja2.cfg]
_update_hash_filename_ = ru/libinstance.jinja2.cfg
md5sum = 2dda7713832be83d94522c7abb4901f9
md5sum = 18f94a784f28487d3d87584a97814f4a
[ru_sdr_libinstance.jinja2.cfg]
_update_hash_filename_ = ru/sdr/libinstance.jinja2.cfg
......@@ -88,7 +88,7 @@ md5sum = 52da9fe3a569199e35ad89ae1a44c30e
[template-enb]
_update_hash_filename_ = instance-enb.jinja2.cfg
md5sum = 8b9301f26fc4ffbc7eda9c1ac8da1a46
md5sum = cd3a994ad2db0afab4231935f1d1372d
[template-ors-enb]
_update_hash_filename_ = instance-ors-enb.jinja2.cfg
......@@ -112,19 +112,39 @@ md5sum = 3b901e8733e6afff8940c6c318da4493
[enb.jinja2.cfg]
filename = config/enb.jinja2.cfg
md5sum = e1c40827e30d6ddcd98be35ec8569af2
md5sum = 936a89fa76754f613c37400323056001
[drb_lte.jinja2.cfg]
filename = config/drb_lte.jinja2.cfg
md5sum = 01eb971e2ff580da52291138495a81ca
md5sum = b1dd9773cc46d727cb2c8cc8103801d8
[drb_nr.jinja2.cfg]
filename = config/drb_nr.jinja2.cfg
md5sum = 282b11d7b72b01b8325df4632d82b84d
[redirect.jinja2.asn]
filename = config/redirect.jinja2.asn
md5sum = 6ffb3702e19194bc9d2b533e0f9899f0
[sib23.jinja2.asn]
filename = config/sib23.jinja2.asn
md5sum = 959523597e29b048e45ebf58f7ea4c5b
md5sum = 5036b8c8852a96907cc6431ef1c5ead4
[sib4.jinja2.asn]
filename = config/sib4.jinja2.asn
md5sum = 07d28915a58a983ebd7d019ac8196462
[sib5.jinja2.asn]
filename = config/sib5.jinja2.asn
md5sum = d95b64b441e6ef2deaf5582c4c7e0723
[sib6.jinja2.asn]
filename = config/sib6.jinja2.asn
md5sum = 57d6c4cd1ae0adcb61addb3857a8b636
[sib7.jinja2.asn]
filename = config/sib7.jinja2.asn
md5sum = da2102b5ff5bf9317c348e8f97aa5db5
[mme.jinja2.cfg]
filename = config/mme.jinja2.cfg
......
......@@ -69,6 +69,6 @@
"$ref": "#/properties/root_sequence_index",
"description": "Range: 0 to 837. Set the PRACH root sequence index (SIB2.rootSequenceIndex field). It must be different for each neighbour cell operating on the same frequency and sharing the same PRACH configuration.",
"default": 204
}
},
}
}
......@@ -10,8 +10,13 @@
qci: 1,
ims_dedicated_bearer: true,
pdcp_config: {
{%- if cell.custom_config %}
discardTimer: 300,
pdcp_SN_Size: 12,
{%- else %}
discardTimer: 100,
pdcp_SN_Size: 7,
{%- endif %}
},
......@@ -21,6 +26,9 @@
pdcp_SN_SizeDL: 12,
statusReportRequired: false,
outOfOrderDelivery: false,
{%- if cell.custom_config %}
t_Reordering: 0,
{%- endif %}
restrict_to_ng_enb: true,
......@@ -48,7 +56,11 @@
qci: 2,
ims_dedicated_bearer: true,
pdcp_config: {
{%- if cell.custom_config %}
discardTimer: 750,
{%- else %}
discardTimer: 150,
{%- endif %}
pdcp_SN_Size: 12,
},
nr_pdcp_config: {
......@@ -81,11 +93,19 @@
{
qci: 3,
pdcp_config: {
{%- if cell.custom_config %}
discardTimer: 750,
{%- else %}
discardTimer: 100,
{%- endif %}
pdcp_SN_Size: 12,
},
nr_pdcp_config: {
{%- if cell.custom_config %}
discardTimer: 300,
{%- else %}
discardTimer: 100,
{%- endif %}
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: false,
......@@ -146,6 +166,7 @@
logicalChannelSR_Prohibit: false,
},
},
{%- if not cell.custom_config %}
{
qci: 65,
ims_dedicated_bearer: true,
......@@ -254,6 +275,7 @@
logicalChannelSR_Prohibit: false,
},
},
{%- endif %}
{
qci: 5,
......@@ -293,7 +315,11 @@
{
qci: 6,
pdcp_config: {
{%- if cell.custom_config %}
discardTimer: 750,
{%- else %}
discardTimer: 0,
{%- endif %}
statusReportRequired: true,
},
nr_pdcp_config: {
......@@ -302,6 +328,9 @@
pdcp_SN_SizeDL: 18,
statusReportRequired: true,
outOfOrderDelivery: false,
{%- if cell.custom_config %}
t_Reordering: 3000,
{%- endif %}
restrict_to_ng_enb: true,
},
rlc_config: {
......@@ -328,8 +357,13 @@
{
qci: 7,
pdcp_config: {
{%- if cell.custom_config %}
discardTimer: 750,
statusReportRequired: true,
{%- else %}
discardTimer: 100,
pdcp_SN_Size: 12,
{%- endif %}
},
nr_pdcp_config: {
discardTimer: 100,
......@@ -341,6 +375,18 @@
restrict_to_ng_enb: true,
},
rlc_config: {
{%- if cell.custom_config %}
ul_am: {
t_PollRetransmit: 80,
pollPDU: 64,
pollByte: 125,
maxRetxThreshold: 32,
},
dl_am: {
t_Reordering: 35,
t_StatusProhibit: 10,
},
{%- else %}
ul_um: {
sn_FieldLength: 10,
},
......@@ -348,6 +394,7 @@
sn_FieldLength: 10,
t_Reordering: {{ T_REORDERING }},
},
{%- endif %}
},
logical_channel_config: {
priority: 13,
......@@ -361,7 +408,11 @@
{
qci: 8,
pdcp_config: {
{%- if cell.custom_config %}
discardTimer: 750,
{%- else %}
discardTimer: 0,
{%- endif %}
statusReportRequired: true,
},
nr_pdcp_config: {
......@@ -370,6 +421,9 @@
pdcp_SN_SizeDL: 18,
statusReportRequired: true,
outOfOrderDelivery: false,
{%- if cell.custom_config %}
t_Reordering: 3000,
{%- endif %}
restrict_to_ng_enb: true,
},
rlc_config: {
......@@ -396,7 +450,11 @@
{
qci: 9,
pdcp_config: {
{%- if cell.custom_config %}
discardTimer: 750,
{%- else %}
discardTimer: 0,
{%- endif %}
statusReportRequired: true,
},
nr_pdcp_config: {
......@@ -404,6 +462,9 @@
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: true,
{%- if cell.custom_config %}
t_Reordering: 3000,
{%- endif %}
outOfOrderDelivery: false,
},
en_dc_split: {
......@@ -431,6 +492,7 @@
logicalChannelSR_Prohibit: false,
},
},
{%- if not cell.custom_config %}
{
qci: 69,
pdcp_config: {
......@@ -501,4 +563,5 @@
logicalChannelSR_Prohibit: false,
},
},
{%- endif %}
]
This diff is collapsed.
......@@ -8,9 +8,9 @@
{#- 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 %}
{%- set iru_dict = {} %}
{%- set icell_dict = {} %}
{%- set ipeer_dict = {} %}
{%- set iru_dict = {} %}
{%- set icell_dict = {} %}
{%- set ipeer_dict = {} %}
{%- set ipeercell_dict = {} %}
{%- do slaplte.load_iru_and_icell(iru_dict, icell_dict, icell_kind='enb') %}
{%- do slaplte.load_ipeer(ipeer_dict) %}
......@@ -18,6 +18,7 @@
{%- do slaplte.check_loaded_everything() %}
{%- endif %}
{%- set custom_config = slaplte.custom_config %}
{#- 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 #}
......@@ -28,17 +29,18 @@
{#- handover_config emits handover configuration for specified cell #}
{%- macro handover_config(cell_ref) %}
{%- macro handover_config(cell_ref, custom_config) %}
ncell_list: [
// Intra-ENB HO
{%- for cell2_ref, icell2 in icell_dict|dictsort %}
{%- set cell2 = icell2['_'] %}
{%- if cell2_ref != cell_ref %} {#- NOTE: HO to both LTE and NR #}
{%- set ru2_ref = J(jcell_ru_ref(icell2, icell_dict)) %}
{%- set iru2 = iru_dict[ru2_ref] %}
{%- set ru2 = iru2['_'] %}
{%- if not custom_config %}
{%- for cell2_ref, icell2 in icell_dict|dictsort %}
{%- set cell2 = icell2['_'] %}
{%- if cell2_ref != cell_ref %} {#- NOTE: HO to both LTE and NR #}
{%- set ru2_ref = J(jcell_ru_ref(icell2, icell_dict)) %}
{%- set iru2 = iru_dict[ru2_ref] %}
{%- set ru2 = iru2['_'] %}
{
{%- if cell2.cell_type == 'lte' %}
{%- if cell2.cell_type == 'lte' %}
rat: "eutra",
cell_id: {{ slapparameter_dict.enb_id }}{{ cell2.cell_id.removeprefix('0x') }}, // -> {{ B(cell2_ref) }}
n_id_cell: {{ cell2.pci }},
......@@ -46,15 +48,16 @@
tac: {{ cell2.tac }},
allowed_meas_bandwidth: {{ jlte_n_rb_dl(cell2.bandwidth) }},
antenna_port_1: {{ (ru2.n_antenna_dl > 1) | tojson }},
{%- elif cell2.cell_type == 'nr' %}
{%- elif cell2.cell_type == 'nr' %}
rat: "nr",
cell_id: {{ cell2.cell_id }}, // -> {{ B(cell2_ref) }}
{%- else %}
{%- do bug('unreachable') %}
{%- endif %}
{%- else %}
{%- do bug('unreachable') %}
{%- endif %}
},
{%- endif %}
{%- endfor %}
{%- endif %}
{%- endfor %}
{%- endif %}
// Inter-ENB HO
{#- TODO: add info about peers as shared instances - one instance per peer *ENB*.
......@@ -62,8 +65,9 @@
put them as peers here #}
{%- for peercell_ref, ipeercell in ipeercell_dict|dictsort %}
{%- set ncell = ipeercell['_'] %}
{%- if ncell.get('cell_ref', False) and (ncell.cell_ref == cell_ref) %}
{
{%- if ncell.cell_type == 'lte' %}
{%- if ncell.cell_type == 'lte' %}
rat: "eutra",
cell_id: {{ ncell.e_cell_id }}, // -> {{ B(peercell_ref) }}
n_id_cell: {{ ncell.pci }},
......@@ -72,8 +76,14 @@
{#- TODO: consider extending peer/cell/lte with
.allowed_meas_bandwidth and .antenna_port_1 #}
allowed_meas_bandwidth: {{ jlte_n_rb_dl(1.4) }}, // (minimum possible bw)
{%- if custom_config %}
"neigh_cell_config": 1,
"individual_offset": 0,
antenna_port_1: true,
{%- else %}
antenna_port_1: false, // (conservative stub)
{%- elif ncell.cell_type == 'nr' %}
{%- endif %}
{%- elif ncell.cell_type == 'nr' %}
rat: "nr",
nr_cell_id: {{ ncell.nr_cell_id }}, // -> {{ B(peercell_ref) }}
gnb_id_bits: {{ ncell.gnb_id_bits }},
......@@ -87,11 +97,12 @@
ssb_period: 20,
ssb_offset: 0,
ssb_duration: 1,
{%- else %}
{%- do bug('unreachable') %}
{%- endif %}
{%- else %}
{%- do bug('unreachable') %}
{%- endif %}
},
{%- endfor %}
{%- endif %}
{%- endfor %}
],
{%- endmacro %}
......@@ -130,7 +141,6 @@
{{- (_.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,
......@@ -161,6 +171,16 @@
{%- for _, mme in slapparameter_dict.mme_list |dictsort %}
{
mme_addr: "{{ mme['mme_addr'] }}",
{%- if mme.get('qci_dscp_mapping', []) %}
qci_dscp_mapping: [
{%- for qci_dscp in mme.get('qci_dscp_mapping', []) %}
{
qci: {{ qci_dscp['qci'] }},
dscp: {{ qci_dscp['dscp'] }},
},
{%- endfor %}
],
{%- endif %}
},
{%- endfor %}
],
......@@ -246,8 +266,6 @@
// {{ 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 }},
......@@ -256,10 +274,12 @@
ul_earfcn: {{ cell.ul_earfcn }},
root_sequence_index: {{ cell.root_sequence_index }},
inactivity_timer: {{ cell.inactivity_timer }},
n_antenna_dl: {{ ru.n_antenna_dl }},
n_antenna_ul: {{ ru.n_antenna_ul }},
// Handover
{{- handover_config(cell_ref) }}
{{- handover_config(cell_ref, cell.custom_config) }}
// Carrier Aggregation: LTE + LTE
scell_list: [
......@@ -269,6 +289,9 @@
{
cell_id: {{ cell2.cell_id }}, // + {{ B(cell2_ref) }}
cross_carrier_scheduling: false,
{%- if cell.custom_config %}
"rrc_configuration": "measurement",
{%- endif %}
},
{%- endif %}
{%- endfor %}
......@@ -309,13 +332,22 @@
si_coderate: {{ 0.30 if n_rb_dl == 6 else 0.20 }},
pdsch_dedicated: {
{%- if cell.custom_config %}
p_a: {{ cell.pdsch_dedicated.p_a }},
p_b: {{ cell.pdsch_dedicated.p_b }},
{%- else %}
p_a: {{ {4: -6, 2: -3}.get(ru.n_antenna_dl, 0) }},
p_b: -1,
{%- endif %}
},
pdcch_format: {{ 1 if n_rb_dl == 6 else 2 }},
prach_config_index: {{ 15 if n_rb_dl == 6 else 4 }},
{%- if cell.custom_config %}
initial_cqi: {{ cell.initial_cqi }},
{%- else %}
initial_cqi: {{ 5 if n_rb_dl == 6 else 3 }},
{%- endif %}
pucch_dedicated: {
n1_pucch_sr_count: 11,
......@@ -371,6 +403,20 @@
filename: "{{ B('%s-sib23.asn' % cell_ref) }}",
si_periodicity: 16,
},
{%- if cell.custom_config %}
{
filename: "{{ B('%s-sib5.asn' % cell_ref) }}",
si_periodicity: 32,
},
{
filename: "{{ B('%s-sib6.asn' % cell_ref) }}",
si_periodicity: 64,
},
{
filename: "{{ B('%s-sib7.asn' % cell_ref) }}",
si_periodicity: 64,
},
{%- endif %}
],
},
{%- endfor %}
......
geran: {
startingARFCN 10,
bandIndicator dcs1800,
followingARFCNs explicitListOfARFCNs: {99, 116, 879, 862, 859, 872, 84, 86, 864, 865, 123, 882, 884, 866, 765, 871, 80, 875, 881, 763, 874, 863, 98, 81, 85}
},
utra-FDD: 10762
......@@ -8,7 +8,14 @@
radioResourceConfigCommon {
rach-ConfigCommon {
preambleInfo {
numberOfRA-Preambles n52
numberOfRA-Preambles n52,
{%- if cell.custom_config %}
preamblesGroupAConfig{
sizeOfRA-PreamblesGroupA n28,
messageSizeGroupA b56,
messagePowerOffsetGroupB dB10
}
{%- endif %}
},
powerRampingParameters {
powerRampingStep dB2,
......@@ -17,24 +24,40 @@
ra-SupervisionInfo {
preambleTransMax n10,
ra-ResponseWindowSize sf10,
mac-ContentionResolutionTimer sf40
{%- if cell.custom_config %}
mac-ContentionResolutionTimer sf64
{%- endif %}
},
maxHARQ-Msg3Tx 5
},
bcch-Config {
{%- if cell.custom_config %}
modificationPeriodCoeff n2
{%- else %}
modificationPeriodCoeff n4
{%- endif %}
},
pcch-Config {
{%- if cell.custom_config %}
defaultPagingCycle rf64,
{%- else %}
defaultPagingCycle rf128,
{%- endif %}
nB oneT
},
prach-Config {
rootSequenceIndex 0, /* patched by eNB */
prach-ConfigInfo {
{%- if cell.custom_config %}
prach-ConfigIndex 3, /* patched by eNB */
zeroCorrelationZoneConfig 12,
prach-FreqOffset 17 /* patched by eNB */
{%- else %}
prach-ConfigIndex 4, /* patched by eNB */
highSpeedFlag FALSE,
zeroCorrelationZoneConfig 11,
prach-FreqOffset 4 /* patched by eNB */
{%- endif %}
highSpeedFlag FALSE,
}
},
pdsch-ConfigCommon {
......@@ -90,12 +113,21 @@
ul-CyclicPrefixLength len1
},
ue-TimersAndConstants {
{%- if cell.custom_config %}
t300 ms600,
t301 ms600,
t310 ms2000,
n310 n10,
t311 ms5000,
n311 n1
{%- else %}
t300 ms200,
t301 ms200,
t310 ms200,
n310 n6,
t311 ms10000,
n311 n5
{%- endif %}
},
freqInfo {
additionalSpectrumEmission 1
......@@ -107,14 +139,23 @@
q-Hyst dB2
},
cellReselectionServingFreqInfo {
{%- if cell.custom_config %}
s-NonIntraSearch 21,
threshServingLow 4,
{%- else %}
s-NonIntraSearch 3,
threshServingLow 2,
{%- endif %}
cellReselectionPriority 6
},
intraFreqCellReselectionInfo {
q-RxLevMin -61,
p-Max 23,
{%- if cell.custom_config %}
s-IntraSearch 26,
{%- else %}
s-IntraSearch 5,
{%- endif %}
presenceAntennaPort1 TRUE,
neighCellConfig '01'B,
t-ReselectionEUTRA 1
......
{
message c1: systemInformation: {
criticalExtensions systemInformation-r8: {
sib-TypeAndInfo {
sib4: {
intraFreqNeighCellList {
{
physCellId 100,
q-OffsetCell dB0
}
}
}
}
}
}
}
{%- if cell.custom_config %}
{
message c1: systemInformation: {
criticalExtensions systemInformation-r8: {
sib-TypeAndInfo {
sib5: {
interFreqCarrierFreqList {
{%- for earfcn in [1802, 3200, 6275, 38100, 375] %}
{%- if cell.dl_earfcn != earfcn %}
{
dl-CarrierFreq {{ earfcn }},
q-RxLevMin {{ custom_config[earfcn]['sib5']['q-RxLevMin'] }},
p-Max 23,
t-ReselectionEUTRA {{ custom_config[earfcn]['sib5']['t-ReselectionEUTRA'] }},
t-ReselectionEUTRA-SF {
sf-Medium oDot25,
sf-High oDot25
},
threshX-High {{ custom_config[earfcn]['sib5']['threshX-High'] }},
threshX-Low {{ custom_config[earfcn]['sib5']['threshX-Low'] }},
allowedMeasBandwidth {{ custom_config[earfcn]['sib5']['allowedMeasBandwidth'] }},
presenceAntennaPort1 TRUE,
cellReselectionPriority {{ custom_config[earfcn]['sib5']['cellReselectionPriority'] }},
neighCellConfig '01'B,
q-OffsetFreq {{ custom_config[earfcn]['sib5']['q-OffsetFreq'] }}
},
{%- endif %}
{%- endfor %}
}
}
}
}
}
}
{%- endif %}
{
message c1: systemInformation: {
criticalExtensions systemInformation-r8: {
sib-TypeAndInfo {
sib5: {
interFreqCarrierFreqList {
{
dl-CarrierFreq 6275,
q-RxLevMin -61,
p-Max 23,
t-ReselectionEUTRA 2,
t-ReselectionEUTRA-SF {
sf-Medium oDot25,
sf-High oDot25
},
threshX-High 0,
threshX-Low 13,
allowedMeasBandwidth mbw25,
presenceAntennaPort1 TRUE,
cellReselectionPriority 2,
neighCellConfig '01'B,
q-OffsetFreq dB0
},
{
dl-CarrierFreq 3200,
q-RxLevMin -61,
p-Max 23,
t-ReselectionEUTRA 1,
t-ReselectionEUTRA-SF {
sf-Medium oDot25,
sf-High oDot25
},
threshX-High 6,
threshX-Low 0,
allowedMeasBandwidth mbw50,
presenceAntennaPort1 TRUE,
cellReselectionPriority 5,
neighCellConfig '01'B,
q-OffsetFreq dB0
},
{
dl-CarrierFreq 1802,
q-RxLevMin -61,
p-Max 23,
t-ReselectionEUTRA 1,
t-ReselectionEUTRA-SF {
sf-Medium oDot25,
sf-High oDot25
},
threshX-High 6,
threshX-Low 6,
allowedMeasBandwidth mbw100,
presenceAntennaPort1 TRUE,
cellReselectionPriority 5,
neighCellConfig '01'B,
q-OffsetFreq dB0
},
{
dl-CarrierFreq 38100,
q-RxLevMin -53,
p-Max 23,
t-ReselectionEUTRA 1,
t-ReselectionEUTRA-SF {
sf-Medium oDot25,
sf-High oDot25
},
threshX-High 6,
threshX-Low 0,
allowedMeasBandwidth mbw100,
presenceAntennaPort1 TRUE,
cellReselectionPriority 5,
neighCellConfig '01'B,
q-OffsetFreq dB-10
},
{
dl-CarrierFreq 375,
q-RxLevMin -61,
p-Max 23,
t-ReselectionEUTRA 1,
t-ReselectionEUTRA-SF {
sf-Medium oDot25,
sf-High oDot25
},
threshX-High 6,
threshX-Low 0,
allowedMeasBandwidth mbw75,
presenceAntennaPort1 TRUE,
cellReselectionPriority 5,
neighCellConfig '01'B,
q-OffsetFreq dB-3
}
}
},
sib6: {
t-ReselectionUTRA 2,
carrierFreqListUTRA-FDD {
{
carrierFreq 10714,
cellReselectionPriority 7,
threshX-High 5,
threshX-Low 5,
q-RxLevMin -53,
p-MaxUTRA 24,
q-QualMin -22
},
{
carrierFreq 10762,
cellReselectionPriority 3,
threshX-High 5,
threshX-Low 5,
q-RxLevMin -53,
p-MaxUTRA 24,
q-QualMin -22
},
{
carrierFreq 10738,
cellReselectionPriority 3,
threshX-High 5,
threshX-Low 5,
q-RxLevMin -53,
p-MaxUTRA 24,
q-QualMin -22
},
{
carrierFreq 10713,
cellReselectionPriority 3,
threshX-High 5,
threshX-Low 5,
q-RxLevMin -53,
p-MaxUTRA 24,
q-QualMin -22
},
{
carrierFreq 2987,
cellReselectionPriority 3,
threshX-High 5,
threshX-Low 5,
q-RxLevMin -53,
p-MaxUTRA 24,
q-QualMin -22
}
}
}
}
}
}
}
{
message c1: systemInformation: {
criticalExtensions systemInformation-r8: {
sib-TypeAndInfo {
sib7: {
t-ReselectionGERAN 1,
carrierFreqsInfoList {
{
carrierFreqs {
startingARFCN 763,
bandIndicator dcs1800,
followingARFCNs explicitListOfARFCNs: {763,765,859,862,863,864,865,866,871,872,874,875,879,881,882,884}
},
commonInfo {
ncc-Permitted '11111111'B,
q-RxLevMin 11,
threshX-High 0,
threshX-Low 2
}
},
{
carrierFreqs {
startingARFCN 80,
bandIndicator dcs1800,
followingARFCNs explicitListOfARFCNs: {80, 81, 84, 85, 86, 98, 99, 116, 123}
},
commonInfo {
ncc-Permitted '11111111'B,
q-RxLevMin 11,
threshX-High 0,
threshX-Low 2
}
}
}
}
}
}
}
}
......@@ -30,6 +30,27 @@
"title": "MME Address",
"description": "IP address (and optional port) of S1AP SCTP connection to the MME. The default port is 36412.",
"type": "string"
},
"qci_dscp_mapping":{
"title": "QCI DSCP Mapping",
"description": "Optional array of objects. Allows to define a specific IP differentiated services code point for a given QCI. QCI not explicitly configured use the default DSCP value 0.",
"type": "array",
"items": {
"title": "QCI DSCP Mapping",
"type":"object",
"properties": {
"qci": {
"title": "QCI",
"description": "Integer (range 1 to 254). QCI value.",
"type":"integer"
},
"dscp": {
"title": "DSCP",
"description": "Integer (range 0 to 63). DSCP value.",
"type":"integer"
}
}
}
}
},
"type": "object"
......@@ -37,6 +58,15 @@
},
"type": "object"
},
"x2_peers": {
"title": "X2 Peers",
"description": "Optional array of strings. IP addresses and optional port of other eNodeBs to establish X2 connections. The default port is 36422.",
"type": "array",
"items": {
"title": "X2 Peers",
"type": "string"
}
},
"plmn_list": {
"title": "PLMN list (4G)",
"description": "List of PLMNs broadcasted by the eNodeB, at most 6. (must be set if there are LTE cells)",
......
......@@ -34,14 +34,14 @@ eggs-directory = {{ eggs_directory }}
develop-eggs-directory = {{ develop_eggs_directory }}
offline = true
{%- set icell_kind='enb' %}
{%- import 'slaplte.jinja2' as slaplte with context %}
{%- import 'ru_libinstance.jinja2.cfg' as rulib with context %}
{%- set ipeer_dict = {} %}
{%- set ipeercell_dict = {} %}
{%- do slaplte.load_ipeer(ipeer_dict) %}
{%- do slaplte.load_ipeercell(ipeercell_dict) %}
{%- do slaplte.check_loaded_everything() %}
{%- set icell_kind='enb' %}
{%- import 'slaplte.jinja2' as slaplte with context %}
{%- import 'ru_libinstance.jinja2.cfg' as rulib with context %}
{%- set ipeer_dict = {} %}
{%- set ipeercell_dict = {} %}
{%- do slaplte.load_ipeer(ipeer_dict) %}
{%- do slaplte.load_ipeercell(ipeercell_dict) %}
{%- do slaplte.check_loaded_everything() %}
{{ rulib.buildout() }}
......
......@@ -155,7 +155,12 @@ extra-context =
raw slaplte_template ${slaplte.jinja2:target}
raw drb_lte_template ${drb_lte.jinja2.cfg:target}
raw drb_nr_template ${drb_nr.jinja2.cfg:target}
raw redirect_template ${redirect.jinja2.asn:target}
raw sib23_template ${sib23.jinja2.asn:target}
raw sib4_template ${sib4.jinja2.asn:target}
raw sib5_template ${sib5.jinja2.asn:target}
raw sib6_template ${sib6.jinja2.asn:target}
raw sib7_template ${sib7.jinja2.asn:target}
raw ru_amarisoft_stats_template ${ru_amarisoft-stats.jinja2.py:target}
raw ru_amarisoft_rf_info_template ${ru_amarisoft-rf-info.jinja2.py:target}
raw ru_lopcomm_stats_template ${ru_lopcomm_stats.jinja2.py:target}
......
......@@ -27,6 +27,7 @@
},
"dl_earfcn": { "$ref": "../../../cell/lte/input-schema.json#/properties/dl_earfcn" },
"pci": { "$ref": "../../../cell/lte/input-schema.json#/properties/pci" },
"tac": { "$ref": "../../../cell/lte/input-schema.json#/properties/tac" }
"tac": { "$ref": "../../../cell/lte/input-schema.json#/properties/tac" },
"allowed_meas_bandwidth": { "$ref": "../../../cell/lte/input-schema.json#/properties/bandwidth" }
}
}
......@@ -18,9 +18,9 @@
#}
{%- set iru_dict = {} %}
{%- set icell_dict = {} %}
{%- set custom_config = slaplte.custom_defaults %}
{%- do slaplte.load_iru_and_icell(iru_dict, icell_dict, icell_kind) %}
{%- macro buildout() %}
{%- set root = slap_configuration['instance-title'] %}
{%- set testing = slapparameter_dict.get("testing", False) %}
......@@ -35,6 +35,7 @@
[{{ B(name) }}]
{%- endmacro %}
{#- promise emits new buildout section for a promise #}
{%- macro promise(name) %}
{#- show in monitor RU1-... instead of COMP-ENB/RU1- #}
......@@ -291,6 +292,65 @@ cell_ref = {{ dumps(cell_ref) }}
cell = {{ dumps(cell ) }}
ru_ref = {{ dumps(ru_ref ) }}
ru = {{ dumps(ru ) }}
{#- generate CELL-sib4.asn, CELL-sib5.asn, CELL-sib6.asn and CELL-sib7.asn #}
{{ part('sib4-config-%s' % cell_ref) }}
<= config-base
url = {{ sib4_template }}
output = ${directory:etc}/{{B('%s-sib4.asn' % cell_ref)}}
extra-context =
key cell_ref :cell_ref
key cell :cell
key ru_ref :ru_ref
key ru :ru
cell_ref = {{ dumps(cell_ref) }}
cell = {{ dumps(cell ) }}
ru_ref = {{ dumps(ru_ref ) }}
ru = {{ dumps(ru ) }}
{{ part('sib5-config-%s' % cell_ref) }}
<= config-base
url = {{ sib5_template }}
output = ${directory:etc}/{{B('%s-sib5.asn' % cell_ref)}}
extra-context =
key cell_ref :cell_ref
key cell :cell
key ru_ref :ru_ref
key ru :ru
key custom_config :custom_config
cell_ref = {{ dumps(cell_ref) }}
cell = {{ dumps(cell ) }}
ru_ref = {{ dumps(ru_ref ) }}
ru = {{ dumps(ru ) }}
custom_config = {{ dumps(custom_config) }}
{{ part('sib6-config-%s' % cell_ref) }}
<= config-base
url = {{ sib6_template }}
output = ${directory:etc}/{{B('%s-sib6.asn' % cell_ref)}}
extra-context =
key cell_ref :cell_ref
key cell :cell
key ru_ref :ru_ref
key ru :ru
cell_ref = {{ dumps(cell_ref) }}
cell = {{ dumps(cell ) }}
ru_ref = {{ dumps(ru_ref ) }}
ru = {{ dumps(ru ) }}
{{ part('sib7-config-%s' % cell_ref) }}
<= config-base
url = {{ sib7_template }}
output = ${directory:etc}/{{B('%s-sib7.asn' % cell_ref)}}
extra-context =
key cell_ref :cell_ref
key cell :cell
key ru_ref :ru_ref
key ru :ru
cell_ref = {{ dumps(cell_ref) }}
cell = {{ dumps(cell ) }}
ru_ref = {{ dumps(ru_ref ) }}
ru = {{ dumps(ru ) }}
{%- endif %}
{#- publish information about the cell (skipping synthetic) #}
......
......@@ -88,6 +88,144 @@
}
%}
{#- Custom configuration request by one of our clients #}
{%- set custom_defaults = {
3200: {
'ru/lopcomm': {
'n_antenna_dl': 4,
'n_antenna_ul': 4,
},
'cell/lte': {
'pdsch_dedicated': {
'p_a': -6,
'p_b': -1,
},
'bandwidth': 10,
'initial_cqi': 1,
},
'cell/lte/sib_sched_list': {
'sib5_filename': 'sib5_3200.asn',
},
'sib5': {
'q-RxLevMin': -61,
't-ReselectionEUTRA': 1,
'threshX-High': 6,
'threshX-Low': 0,
'allowedMeasBandwidth': 'mbw50',
'cellReselectionPriority': 5,
'q-OffsetFreq': 'dB0',
},
},
6275: {
'ru/lopcomm': {
'n_antenna_dl': 2,
'n_antenna_ul': 2,
},
'cell/lte': {
'pdsch_dedicated': {
'p_a': -3,
'p_b': -1,
},
'bandwidth': 5,
'initial_cqi': 3,
},
'cell/lte/sib_sched_list': {
'sib5_filename': 'sib5_6275.asn',
},
'sib5': {
'q-RxLevMin': -61,
't-ReselectionEUTRA': 2,
'threshX-High': 0,
'threshX-Low': 13,
'allowedMeasBandwidth': 'mbw25',
'cellReselectionPriority': 2,
'q-OffsetFreq': 'dB0',
},
},
1802: {
'ru/lopcomm': {
'n_antenna_dl': 4,
'n_antenna_ul': 4,
},
'cell/lte': {
'n_antenna_dl': 4,
'n_antenna_ul': 4,
'pdsch_dedicated': {
'p_a': -6,
'p_b': -1,
},
'bandwidth': 20,
'initial_cqi': 1,
},
'cell/lte/sib_sched_list': {
'sib5_filename': 'sib5_1802.asn',
},
'sib5': {
'q-RxLevMin': -61,
't-ReselectionEUTRA': 1,
'threshX-High': 6,
'threshX-Low': 6,
'allowedMeasBandwidth': 'mbw100',
'cellReselectionPriority': 5,
'q-OffsetFreq': 'dB0',
},
},
38100: {
'ru/lopcomm': {
'n_antenna_dl': 0,
'n_antenna_ul': 0,
},
'cell/lte': {
'pdsch_dedicated': {
'p_a': 0,
'p_b': 0,
},
'bandwidth': 0,
'initial_cqi': 0,
},
'cell/lte/sib_sched_list': {
'sib5_filename': 'xxx',
},
'sib5': {
'q-RxLevMin': -53,
't-ReselectionEUTRA': 1,
'threshX-High': 6,
'threshX-Low': 0,
'allowedMeasBandwidth': 'mbw100',
'cellReselectionPriority': 5,
'q-OffsetFreq': 'dB-10',
},
},
375: {
'ru/lopcomm': {
'n_antenna_dl': 0,
'n_antenna_ul': 0,
},
'cell/lte': {
'pdsch_dedicated': {
'p_a': 0,
'p_b': 0,
},
'bandwidth': 0,
'initial_cqi': 0,
},
'cell/lte/sib_sched_list': {
'sib5_filename': 'xxx',
},
'sib5': {
'q-RxLevMin': -61,
't-ReselectionEUTRA': 1,
'threshX-High': 6,
'threshX-Low': 0,
'allowedMeasBandwidth': 'mbw75',
'cellReselectionPriority': 5,
'q-OffsetFreq': 'dB-3',
},
},
}
%}
{#- B(name) escapes name to be safe to use in buildout code.
......@@ -207,6 +345,9 @@
{%- do ishared.update({'_': J(ishared['_'])}) %}
{%- endfor %}
{%- macro load_custom_config(cc) %}
{%- do cc.update(custom_config) %}
{%- endmacro %}
{#- load_iru_and_icell initializes RU and cell registries.
......@@ -230,6 +371,7 @@
{%- set icell = ishared %}
{%- do _cell_set_defaults(_, icell_kind, icell_dict) %}
{%- do icell_dict.update({ref: icell}) %}
{%- do _cell_set_custom_defaults(_, icell_kind) %}
{%- set ru = _['ru'] %}
{%- if ru.ru_type not in ('ru_ref', 'ruincell_ref') %}
{#- embedded ru definition -> expose it as synthethic `_<cell_ref>_ru` #}
......@@ -244,6 +386,9 @@
{%- do qother.append(ishared) %}
{%- endif %}
{%- endfor %}
{%- for ref, iru in iru_dict|dictsort %}
{%- do _ru_set_custom_defaults(ref, iru, icell_dict) %}
{%- endfor %}
{%- do qshared_instance_list.clear() %}
{%- do qshared_instance_list.extend(qother) %}
......@@ -331,6 +476,35 @@
{%- endif %}
{%- endmacro %}
{%- macro _cell_set_custom_defaults(cell, icell_kind) %}
{%- do cell.setdefault('custom_config', False) %}
{%- if icell_kind == 'enb' %}
{%- if cell.custom_config %}
{%- if cell.dl_earfcn in custom_defaults %}
{%- for k, v in custom_defaults[cell.dl_earfcn]['cell/%s' % (cell.cell_type,)].items() %}
{%- do cell.setdefault(k, v) %}
{%- endfor %}
{%- do cell.setdefault('sib5_filename', custom_defaults[cell.dl_earfcn]['cell/lte/sib_sched_list']['sib5_filename']) %}
{%- do cell.setdefault('sib5', {}) %}
{%- for k, v in custom_defaults[cell.dl_earfcn]['sib5'].items() %}
{%- do cell['sib5'].setdefault(k, v) %}
{%- endfor %}
{%- endif %}
{%- endif %}
{%- endif %}
{%- endmacro %}
{%- macro _ru_set_custom_defaults(ru_ref, ru, icell_dict) %}
{%- set earfcn = {'_': 0} %}
{%- for _, icell in icell_dict|dictsort %}
{%- if icell['_'].ru.ru_ref == ru_ref %}
{%- do earfcn.update({'_': icell['_'].dl_earfcn}) %}
{%- endif %}
{%- endfor %}
{%- for k, v in custom_defaults[earfcn['_']]['ru/lopcomm'].items() %}
{%- do ru['_'].update({k: v}) %}
{%- endfor %}
{%- endmacro %}
{#- jcell_ru_ref returns RU reference linked from a cell.
if the cell embeds RU definition, its reference comes as `_<cell_ref>_ru`. #}
......
......@@ -482,6 +482,10 @@ def _do_enb_with(iru_icell_func):
json_params = """{
%(jextra)s
"sib23_file": "sib2_3.asn",
"sib4_file": "sib4.asn",
"sib5_file": "sib5.asn",
"sib6_file": "sib6.asn",
"sib7_file": "sib7.asn",
"slap_configuration": {
"tap-name": "slaptap9",
"slap-computer-partition-id": "slappart9",
......@@ -492,6 +496,7 @@ def _do_enb_with(iru_icell_func):
"etc": "etc",
"var": "var"
},
"custom_config": "False",
"slapparameter_dict": {
"enb_id": "0x1A2D0",
"gnb_id": "0x12345",
......@@ -514,6 +519,7 @@ def _do_enb_with(iru_icell_func):
icell_dict = {}
ipeer_dict = {}
ipeercell_dict = {}
custom_config = False
for ishared in ienb.shared_instance_list:
ref = ref_of_shared(ishared)
_ = json.loads(ishared['_'])
......@@ -547,6 +553,7 @@ def _do_enb_with(iru_icell_func):
'cell': cell,
'ru_ref': ru_ref,
'ru': ru,
'custom_config': custom_config,
})
j2render('drb_%s.jinja2.cfg' % cell['cell_type'],
'%s/%s-drb.cfg' % (out, B(cell_ref)),
......@@ -556,6 +563,23 @@ def _do_enb_with(iru_icell_func):
'%s/%s-sib23.asn' % (out, B(cell_ref)),
jctx)
if custom_config:
j2render('sib4.jinja2.asn',
'%s/%s-sib4.asn' % (out, B(cell_ref)),
jctx)
j2render('sib5.jinja2.asn',
'%s/%s-sib5.asn' % (out, B(cell_ref)),
jctx)
j2render('sib6.jinja2.asn',
'%s/%s-sib6.asn' % (out, B(cell_ref)),
jctx)
j2render('sib7.jinja2.asn',
'%s/%s-sib7.asn' % (out, B(cell_ref)),
jctx)
# ---- UE ----
......
......@@ -34,7 +34,12 @@ parts +=
ue.jinja2.cfg
drb_lte.jinja2.cfg
drb_nr.jinja2.cfg
redirect.jinja2.asn
sib23.jinja2.asn
sib4.jinja2.asn
sib5.jinja2.asn
sib6.jinja2.asn
sib7.jinja2.asn
monitor-httpd-extra-conf
# copy all gadget file
gadget
......@@ -111,9 +116,23 @@ filename = enb.jinja2.cfg
<= copy-config-to-instance
[drb_nr.jinja2.cfg]
<= copy-config-to-instance
[redirect.jinja2.asn]
<= copy-config-to-instance
[sib23.jinja2.asn]
<= copy-config-to-instance
filename = sib23.jinja2.asn
[sib4.jinja2.asn]
<= copy-config-to-instance
filename = sib4.jinja2.asn
[sib5.jinja2.asn]
<= copy-config-to-instance
filename = sib5.jinja2.asn
[sib6.jinja2.asn]
<= copy-config-to-instance
filename = sib6.jinja2.asn
[sib7.jinja2.asn]
<= copy-config-to-instance
filename = sib7.jinja2.asn
[ue_db.jinja2.cfg]
<= copy-config-to-instance
filename = ue_db.jinja2.cfg
......
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