Commit 0762e194 authored by Joanne Hugé's avatar Joanne Hugé

Update Release Candidate

parents 40e74f48 fa92eaca
...@@ -6,7 +6,6 @@ extends = ...@@ -6,7 +6,6 @@ extends =
../../stack/nxdtest.cfg ../../stack/nxdtest.cfg
../pygolang/buildout.cfg ../pygolang/buildout.cfg
../python-manuel/buildout.cfg
buildout.cfg buildout.cfg
../ZEO/buildout.cfg ../ZEO/buildout.cfg
...@@ -46,12 +45,6 @@ branch = master ...@@ -46,12 +45,6 @@ branch = master
revision = 4.6.4-0-g7ed95cf revision = 4.6.4-0-g7ed95cf
git-executable = ${git:location}/bin/git git-executable = ${git:location}/bin/git
# test-dependent eggs that must come through in-tree recipes.
[ZODB]
depends += ${manuel:egg}
# bin/python is preinstalled with sys.path to ZODB & friends. # bin/python is preinstalled with sys.path to ZODB & friends.
[ZODB-python] [ZODB-python]
<= python-interpreter <= python-interpreter
...@@ -110,9 +103,3 @@ inline = ...@@ -110,9 +103,3 @@ inline =
env.sh = ${ZODB-env.sh:output} env.sh = ${ZODB-env.sh:output}
workdir = ${buildout:directory} workdir = ${buildout:directory}
[versions]
random2 = 1.0.1
zope.testing = 4.7
zope.testrunner = 5.2
zope.exceptions = 4.4
[buildout]
extends = ../patch/buildout.cfg
parts = manuel
[manuel]
recipe = zc.recipe.egg
egg = manuel
find-links = https://github.com/benji-york/manuel/tarball/${:revision}/manuel-${versions:manuel}.tar.gz
revision = aeea5ce7e853b8dabb815efb83141c6ddeb62904
[versions]
manuel = 1.10.2.dev0
...@@ -60,7 +60,4 @@ inline = ...@@ -60,7 +60,4 @@ inline =
[versions] [versions]
neoppod = 1.12.0 neoppod = 1.12.0
zope.testrunner = 5.2
random2 = 1.0.1 random2 = 1.0.1
manuel = 1.10.1
...@@ -105,9 +105,10 @@ versions = versions ...@@ -105,9 +105,10 @@ versions = versions
[versions] [versions]
%s %s
zope.exceptions = 4.3 zope.exceptions = 4.6
zope.interface = 4.7.2 zope.interface = 5.4.0
zope.testing = 4.7 zope.testing = 4.7
zope.testrunner = 5.2
[testrunner] [testrunner]
recipe = zc.recipe.egg recipe = zc.recipe.egg
...@@ -117,11 +118,10 @@ eggs = ...@@ -117,11 +118,10 @@ eggs =
zope.testrunner zope.testrunner
scripts = scripts =
zope-testrunner zope-testrunner
extra-paths = extra-paths =%s
%s
""" % (''.join('\n ' + x for x in test_dict.values()), """ % (''.join('\n ' + x for x in test_dict.values()),
'\n'.join(x + ' =' for x in test_dict), '\n'.join(x + ' =' for x in test_dict),
get_distribution('manuel').location, ''.join('\n ' + get_distribution(x).location for x in ('manuel', 'six')),
))) )))
finally: finally:
os.close(fd) os.close(fd)
......
[buildout] [buildout]
extends = extends =
../../component/python-manuel/buildout.cfg
../../stack/slapos.cfg ../../stack/slapos.cfg
parts = parts =
slapos-cookbook slapos-cookbook
...@@ -15,7 +14,7 @@ git-executable = ${git:location}/bin/git ...@@ -15,7 +14,7 @@ git-executable = ${git:location}/bin/git
recipe = zc.recipe.egg recipe = zc.recipe.egg
eggs = erp5.util eggs = erp5.util
zc.buildout zc.buildout
${manuel:egg} manuel
scripts = ${:interpreter} scripts = ${:interpreter}
interpreter = ${:_buildout_section_name_} interpreter = ${:_buildout_section_name_}
......
...@@ -57,7 +57,4 @@ mysqlclient = 1.3.12 ...@@ -57,7 +57,4 @@ mysqlclient = 1.3.12
# indirect dependancies # indirect dependancies
cp.recipe.cmd = 0.5 cp.recipe.cmd = 0.5
plone.recipe.command = 1.1 plone.recipe.command = 1.1
zope.exceptions = 4.0.7
zope.testing = 4.1.3
zc.recipe.testrunner = 2.0.0 zc.recipe.testrunner = 2.0.0
zope.testrunner = 4.4.6
...@@ -31,9 +31,3 @@ url = ${:_profile_base_location_}/${:_update_hash_filename_} ...@@ -31,9 +31,3 @@ url = ${:_profile_base_location_}/${:_update_hash_filename_}
recipe = zc.recipe.egg recipe = zc.recipe.egg
eggs = erp5.util eggs = erp5.util
interpreter = ${:_buildout_section_name_} interpreter = ${:_buildout_section_name_}
[versions]
# To match ERP5
zope.exceptions = 4.6
zope.testing = 4.10
##
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
[template] [template]
filename = instance.cfg filename = instance.cfg
md5sum = 60945a3c51ad6704c1f02b2e43018bba md5sum = a0c646cb609946b3535ee1383c401e01
[amarisoft-stats.jinja2.py] [amarisoft-stats.jinja2.py]
_update_hash_filename_ = amarisoft-stats.jinja2.py _update_hash_filename_ = amarisoft-stats.jinja2.py
...@@ -36,15 +36,15 @@ md5sum = e0b68a87238282568e0e04c792ec7288 ...@@ -36,15 +36,15 @@ md5sum = e0b68a87238282568e0e04c792ec7288
[template-enb] [template-enb]
_update_hash_filename_ = instance-enb.jinja2.cfg _update_hash_filename_ = instance-enb.jinja2.cfg
md5sum = a7448167f7433a50938bf6d3e6903065 md5sum = ba704d02815e85f3ab30227f117c88ff
[template-gnb] [template-gnb]
_update_hash_filename_ = instance-gnb.jinja2.cfg _update_hash_filename_ = instance-gnb.jinja2.cfg
md5sum = afa508e78851fe151fd25d8781aaa34a md5sum = b2a1816ceb8e7f475e71454e5389d091
[template-core-network] [template-core-network]
_update_hash_filename_ = instance-core-network.jinja2.cfg _update_hash_filename_ = instance-core-network.jinja2.cfg
md5sum = 5a46abb4310fa7fa8015fb0cde6cd87f md5sum = b4af66e7cdb3be1d48eabd14488bea24
[template-ue-lte] [template-ue-lte]
_update_hash_filename_ = instance-ue-lte.jinja2.cfg _update_hash_filename_ = instance-ue-lte.jinja2.cfg
...@@ -64,7 +64,7 @@ md5sum = dcaac06553a3222b14c0013a13f4a149 ...@@ -64,7 +64,7 @@ md5sum = dcaac06553a3222b14c0013a13f4a149
[enb.jinja2.cfg] [enb.jinja2.cfg]
filename = config/enb.jinja2.cfg filename = config/enb.jinja2.cfg
md5sum = 1333ef2400f2088221ed879f1b03e777 md5sum = 879c015828ba33edf751358f163a45ba
[sib23.asn] [sib23.asn]
filename = config/sib23.asn filename = config/sib23.asn
...@@ -72,7 +72,7 @@ md5sum = b377dac7f1fcf94fb9ce9ebed617f36a ...@@ -72,7 +72,7 @@ md5sum = b377dac7f1fcf94fb9ce9ebed617f36a
[gnb.jinja2.cfg] [gnb.jinja2.cfg]
filename = config/gnb.jinja2.cfg filename = config/gnb.jinja2.cfg
md5sum = 678ba2f81ca43eca611e4a41c122073d md5sum = 96236b6e55be2fd3dcc128a19a5fc344
[ltelogs.jinja2.sh] [ltelogs.jinja2.sh]
filename = ltelogs.jinja2.sh filename = ltelogs.jinja2.sh
...@@ -80,7 +80,11 @@ md5sum = 1ba2e065bdf14a6411e95e80db17dcfd ...@@ -80,7 +80,11 @@ md5sum = 1ba2e065bdf14a6411e95e80db17dcfd
[mme.jinja2.cfg] [mme.jinja2.cfg]
filename = config/mme.jinja2.cfg filename = config/mme.jinja2.cfg
md5sum = 3b3ab394e5303ec39fdcdd849a749550 md5sum = c153d191c91a3bf28bae8724b0deb616
[dnsmasq.jinja2.cfg]
filename = config/dnsmasq.jinja2.cfg
md5sum = 972fbdd1c19aadec519b83731d26b608
[ims.jinja2.cfg] [ims.jinja2.cfg]
filename = config/ims.jinja2.cfg filename = config/ims.jinja2.cfg
......
Changelog Changelog
========= =========
Version 1.0.310 (2023-02-22) Version 1.0.321 (2023-05-05)
------------- -------------
* Add carrier control for Lopcomm RRH * Remove RRH options from ORS software releases
* Add custom TDD UL DL configuration
* Add time_to_trigger and a3_offset gNB XnAP and NGAP NR handover options
Version 1.0.312 (2023-03-20) Version 1.0.320 (2023-04-26)
------------- ----------------------------
* Add promise to test if reception is saturated * Add support for inter gNB XnAP and NGAP NR handover
* Add IMSI in connection parameters when SIM gets attached
Version 1.0.317 (2023-04-18)
---------------------------
* Add support for inter gNB NR handover
Version 1.0.316 (2023-04-14) Version 1.0.316 (2023-04-14)
------------- ----------------------------
* Remove enb-epc, gnb-epc and epc software types, the software types are now: * Remove enb-epc, gnb-epc and epc software types, the software types are now:
- enb - enb
- gnb - gnb
- core-network (replaces epc software type) - core-network (replaces epc software type)
Version 1.0.320 (2023-04-26) Version 1.0.312 (2023-03-20)
------------- ----------------------------
* Add support for inter gNB XnAP and NGAP NR handover * Add promise to test if reception is saturated
* Add gadget from SR to display on Monitor APP
* Add IMSI in connection parameters when SIM gets attached
* Add carrier control for Lopcomm RRH
Version 1.0.308 (2023-02-09)
----------------------------
* Add support for IPv6 in UEs if available
* Use latest amarisoft version on ORS if available
* Add gnb_id_bits parameter
* Use promises from slapos.toolbox repository
* Rotate and add timestamps in enb-output.log, gnb-output.log, mme-output.log etc...
* Add support for Lopcomm RRH
* Remove UE power emission limitation
interface={{ slap_configuration.get('tun-name', '') }}
port=5353
{%- set filtered_slave_instance_list = [] %}
{%- for slave_instance in slap_configuration.get('slave-instance-list', []) %}
{%- if slave_instance.get('_', '') != '' %}
{%- set slave = json_module.loads(slave_instance.pop('_')) %}
{%- else %}
{%- set slave = slave_instance %}
{%- endif %}
{%- if slave.get('domain', '') != '' %}
{%- do filtered_slave_instance_list.append(slave) %}
{%- endif %}
{%- endfor -%}
{%- for i, slave in enumerate(filtered_slave_instance_list) -%}
address=/{{ slave['domain'] }}/{{ slave.get('ip', '') }}
{% endfor -%}
...@@ -3,7 +3,11 @@ ...@@ -3,7 +3,11 @@
#define N_ANTENNA_UL {{ slapparameter_dict.get('n_antenna_ul', slap_configuration['configuration.default_n_antenna_ul']) }} #define N_ANTENNA_UL {{ slapparameter_dict.get('n_antenna_ul', slap_configuration['configuration.default_n_antenna_ul']) }}
{ {
{% if slapparameter_dict.get('log_phy_debug', False) %}
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,phy.level=debug,file.rotate=1G,file.path=/dev/null",
{% else %}
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,phy.level=info,file.rotate=1G,file.path=/dev/null", 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,phy.level=info,file.rotate=1G,file.path=/dev/null",
{% endif %}
log_filename: "{{ directory['log'] }}/enb.log", log_filename: "{{ directory['log'] }}/enb.log",
{% if slapparameter_dict.get('rrh', '') == "Lopcomm ORAN" %} {% if slapparameter_dict.get('rrh', '') == "Lopcomm ORAN" %}
......
#define FR2 0 // Values: 0 (FR1), 1 (FR2) #define N_ANTENNA_DL {{ slapparameter_dict.get('n_antenna_dl', slap_configuration['configuration.default_n_antenna_dl']) }}
#define NR_TDD_CONFIG 2 // Values: FR1: 1, 2, 3, 4 (compatible with LTE TDD config 2) FR2: 10
#define N_ANTENNA_DL {{ slapparameter_dict.get('n_antenna_dl', slap_configuration['configuration.default_n_antenna_dl']) }} // Values: 1 (SISO), 2 (MIMO 2x2), 4 (MIMO 4x4)
{% if slapparameter_dict.get('rrh', '') == "M2RU Sunwave" %} {% if slapparameter_dict.get('rrh', '') == "M2RU Sunwave" %}
#define N_ANTENNA_UL {{ slapparameter_dict.get('n_antenna_ul', 1) }} // Values: 1, 2, 4 #define N_ANTENNA_UL {{ slapparameter_dict.get('n_antenna_ul', 1) }}
{% else %} {% else %}
#define N_ANTENNA_UL {{ slapparameter_dict.get('n_antenna_ul', slap_configuration['configuration.default_n_antenna_dl']) }} // Values: 1, 2, 4 #define N_ANTENNA_UL {{ slapparameter_dict.get('n_antenna_ul', slap_configuration['configuration.default_n_antenna_dl']) }}
{% endif %} {% endif %}
#define NR_BANDWIDTH {{ slapparameter_dict.get('nr_bandwidth', slap_configuration['configuration.default_nr_bandwidth']) }} // NR cell bandwidth
#define NR_LONG_PUCCH_FORMAT 2 // Values: 2, 3, 4
{ {
{% if slapparameter_dict.get('log_phy_debug', False) %}
log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,ngap.level=debug,ngap.max_size=1,xnap.level=debug,xnap.max_size=1,rrc.level=debug,rrc.max_size=1,phy.level=debug,file.rotate=1G,file.path=/dev/null",
{% else %}
log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,ngap.level=debug,ngap.max_size=1,xnap.level=debug,xnap.max_size=1,rrc.level=debug,rrc.max_size=1,phy.level=info,file.rotate=1G,file.path=/dev/null", log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,ngap.level=debug,ngap.max_size=1,xnap.level=debug,xnap.max_size=1,rrc.level=debug,rrc.max_size=1,phy.level=info,file.rotate=1G,file.path=/dev/null",
{% endif %}
log_filename: "{{ directory['log'] }}/gnb.log", log_filename: "{{ directory['log'] }}/gnb.log",
{% if slapparameter_dict.get('rrh', '') == "M2RU Sunwave" %} {% if slapparameter_dict.get('rrh', '') == "M2RU Sunwave" %}
rf_driver: { rf_driver: {
name: "sdr", name: "sdr",
...@@ -39,7 +37,6 @@ ...@@ -39,7 +37,6 @@
rx_gain: {{ slapparameter_dict.get('rx_gain', slap_configuration['configuration.default_nr_rx_gain']) }}, rx_gain: {{ slapparameter_dict.get('rx_gain', slap_configuration['configuration.default_nr_rx_gain']) }},
{% endif %} {% endif %}
com_addr: "127.0.1.2:9001", com_addr: "127.0.1.2:9001",
amf_list: [ amf_list: [
{% if slapparameter_dict.get('amf_list', '') %} {% if slapparameter_dict.get('amf_list', '') %}
{%- for i, k in enumerate(slapparameter_dict['amf_list']) %} {%- for i, k in enumerate(slapparameter_dict['amf_list']) %}
...@@ -78,25 +75,8 @@ ...@@ -78,25 +75,8 @@
gnb_id_bits: {{ slapparameter_dict.get('gnb_id_bits', 28) }}, gnb_id_bits: {{ slapparameter_dict.get('gnb_id_bits', 28) }},
gnb_id: {{ slapparameter_dict.get('gnb_id', '0x12345') }}, gnb_id: {{ slapparameter_dict.get('gnb_id', '0x12345') }},
en_dc_support: true,
nr_support: true,
rf_ports: [
{
#if FR2
rf_dl_freq: 3500,
rf_ul_freq: 3500,
// rx_to_tx_latency: 1,
#endif
},
],
cell_list: [], cell_list: [],
nr_cell_list: [ nr_cell_list: [
{ {
rf_port: 0, rf_port: 0,
...@@ -105,7 +85,6 @@ ...@@ -105,7 +85,6 @@
dl_nr_arfcn: {{ slapparameter_dict.get('dl_nr_arfcn', slap_configuration['configuration.default_dl_nr_arfcn']) }}, dl_nr_arfcn: {{ slapparameter_dict.get('dl_nr_arfcn', slap_configuration['configuration.default_dl_nr_arfcn']) }},
subcarrier_spacing: 30, subcarrier_spacing: 30,
ssb_pos_bitmap: "{{ slapparameter_dict.get('ssb_pos_bitmap', slap_configuration['configuration.default_nr_ssb_pos_bitmap']) }}", ssb_pos_bitmap: "{{ slapparameter_dict.get('ssb_pos_bitmap', slap_configuration['configuration.default_nr_ssb_pos_bitmap']) }}",
{%- if slapparameter_dict.get('ncell_list', '') %} {%- if slapparameter_dict.get('ncell_list', '') %}
ncell_list: [ ncell_list: [
{%- for i, k in enumerate(slapparameter_dict['ncell_list']) %} {%- for i, k in enumerate(slapparameter_dict['ncell_list']) %}
...@@ -131,26 +110,14 @@ ...@@ -131,26 +110,14 @@
{%- endfor -%} {%- endfor -%}
], ],
{% endif %} {% endif %}
}, },
], ],
nr_cell_default: { nr_cell_default: {
bandwidth: NR_BANDWIDTH, bandwidth: {{ slapparameter_dict.get('nr_bandwidth', slap_configuration['configuration.default_nr_bandwidth']) }},
n_antenna_dl: N_ANTENNA_DL, n_antenna_dl: N_ANTENNA_DL,
n_antenna_ul: N_ANTENNA_UL, n_antenna_ul: N_ANTENNA_UL,
{% if slapparameter_dict.get('tdd_ul_dl_config', '5ms 2UL 7DL 4/6 (default)') == '5ms 2UL 7DL 4/6 (default)' %}
tdd_ul_dl_config: { tdd_ul_dl_config: {
#if NR_TDD_CONFIG == 1
pattern1: {
period: 5,
dl_slots: 7,
dl_symbols: 2,
ul_slots: 2,
ul_symbols: 2,
},
#elif NR_TDD_CONFIG == 2
pattern1: { pattern1: {
period: 5, period: 5,
dl_slots: 7, dl_slots: 7,
...@@ -158,43 +125,20 @@ ...@@ -158,43 +125,20 @@
ul_slots: 2, ul_slots: 2,
ul_symbols: 4, ul_symbols: 4,
}, },
#elif NR_TDD_CONFIG == 3 },
pattern1: { {% elif slapparameter_dict.get('tdd_ul_dl_config', '5ms 2UL 7DL 4/6 (default)') == '2.5ms 1UL 3DL 2/10' %}
period: 5, tdd_ul_dl_config: {
dl_slots: 6,
dl_symbols: 2,
ul_slots: 3,
ul_symbols: 2,
},
#elif NR_TDD_CONFIG == 4
pattern1: {
period: 3,
dl_slots: 3,
dl_symbols: 6,
ul_symbols: 4,
ul_slots: 2,
},
pattern2: {
period: 2,
dl_slots: 4,
dl_symbols: 0,
ul_symbols: 0,
ul_slots: 0,
},
#elif NR_TDD_CONFIG == 10
pattern1: { pattern1: {
period: 0.625, period: 2.5,
dl_slots: 3, dl_slots: 3,
dl_symbols: 10, dl_symbols: 10,
ul_slots: 1, ul_slots: 1,
ul_symbols: 2, ul_symbols: 2,
}, },
#endif
}, },
{% endif %}
ssb_period: 20, ssb_period: 20,
n_id_cell: {{ slapparameter_dict.get('pci', 500) }}, n_id_cell: {{ slapparameter_dict.get('pci', 500) }},
plmn_list: [ plmn_list: [
{%- if slapparameter_dict.get('plmn_list', '') %} {%- if slapparameter_dict.get('plmn_list', '') %}
{%- for i, k in enumerate(slapparameter_dict['plmn_list']) %} {%- for i, k in enumerate(slapparameter_dict['plmn_list']) %}
...@@ -259,31 +203,16 @@ ...@@ -259,31 +203,16 @@
}, },
{%- endif %} {%- endif %}
], ],
si_window_length: 40, si_window_length: 40,
cell_barred: false, cell_barred: false,
intra_freq_reselection: true, intra_freq_reselection: true,
q_rx_lev_min: -70, q_rx_lev_min: -70,
q_qual_min: -20, q_qual_min: -20,
root_sequence_index: 1, root_sequence_index: 1,
sr_period: 40, sr_period: 40,
dmrs_type_a_pos: 2, dmrs_type_a_pos: 2,
//pdsch_harq_ack_max: 2,
prach: { prach: {
#if NR_TDD_CONFIG == 4
prach_config_index: 156,
#else
prach_config_index: 160, prach_config_index: 160,
#endif
msg1_subcarrier_spacing: 30, msg1_subcarrier_spacing: 30,
msg1_fdm: 1, msg1_fdm: 1,
{% if slapparameter_dict.get('rrh', '') == "M2RU Sunwave" %} {% if slapparameter_dict.get('rrh', '') == "M2RU Sunwave" %}
...@@ -301,14 +230,12 @@ ...@@ -301,14 +230,12 @@
ssb_per_prach_occasion: 1, ssb_per_prach_occasion: 1,
cb_preambles_per_ssb: 8, cb_preambles_per_ssb: 8,
}, },
pdcch: { pdcch: {
{% if slapparameter_dict.get('rrh', '') == "M2RU Sunwave" %} {% if slapparameter_dict.get('rrh', '') == "M2RU Sunwave" %}
n_rb_coreset0: 48, n_rb_coreset0: 48,
n_symb_coreset0: 1, n_symb_coreset0: 1,
{% endif %} {% endif %}
search_space0_index: 0, search_space0_index: 0,
dedicated_coreset: { dedicated_coreset: {
rb_start: -1, rb_start: -1,
l_crb: -1, l_crb: -1,
...@@ -319,20 +246,17 @@ ...@@ -319,20 +246,17 @@
{% endif %} {% endif %}
precoder_granularity: "sameAsREG_bundle", precoder_granularity: "sameAsREG_bundle",
}, },
css: { css: {
n_candidates: [ 0, 0, 1, 0, 0 ], n_candidates: [ 0, 0, 4, 0, 0 ],
}, },
rar_al_index: 2, rar_al_index: 2,
si_al_index: 2, si_al_index: 2,
uss: { uss: {
n_candidates: [ 0, 2, 1, 0, 0 ], n_candidates: [ 0, 2, 1, 0, 0 ],
dci_0_1_and_1_1: true, dci_0_1_and_1_1: true,
}, },
al_index: 1, al_index: 1,
}, },
pdsch: { pdsch: {
mapping_type: "typeA", mapping_type: "typeA",
dmrs_add_pos: 1, dmrs_add_pos: 1,
...@@ -346,7 +270,6 @@ ...@@ -346,7 +270,6 @@
rar_mcs: 2, rar_mcs: 2,
si_mcs: 6, si_mcs: 6,
}, },
csi_rs: { csi_rs: {
nzp_csi_rs_resource: [ nzp_csi_rs_resource: [
{ {
...@@ -384,11 +307,6 @@ ...@@ -384,11 +307,6 @@
offset: 1, offset: 1,
qcl_info_periodic_csi_rs: 0, qcl_info_periodic_csi_rs: 0,
}, },
#if FR2 == 0
#define USE_TRS
#endif
#ifdef USE_TRS
{ {
csi_rs_id: 1, csi_rs_id: 1,
n_ports: 1, n_ports: 1,
...@@ -453,7 +371,6 @@ ...@@ -453,7 +371,6 @@
offset: 12, offset: 12,
qcl_info_periodic_csi_rs: 0, qcl_info_periodic_csi_rs: 0,
}, },
#endif
], ],
nzp_csi_rs_resource_set: [ nzp_csi_rs_resource_set: [
{ {
...@@ -461,16 +378,13 @@ ...@@ -461,16 +378,13 @@
nzp_csi_rs_resources: [ 0 ], nzp_csi_rs_resources: [ 0 ],
repetition: false, repetition: false,
}, },
#ifdef USE_TRS
{ {
csi_rs_set_id: 1, csi_rs_set_id: 1,
nzp_csi_rs_resources: [ 1, 2, 3, 4 ], nzp_csi_rs_resources: [ 1, 2, 3, 4 ],
repetition: false, repetition: false,
trs_info: true, trs_info: true,
}, },
#endif
], ],
csi_im_resource: [ csi_im_resource: [
{ {
csi_im_id: 0, csi_im_id: 0,
...@@ -489,7 +403,6 @@ ...@@ -489,7 +403,6 @@
csi_im_resources: [ 0 ], csi_im_resources: [ 0 ],
} }
], ],
zp_csi_rs_resource: [ zp_csi_rs_resource: [
{ {
csi_rs_id: 0, csi_rs_id: 0,
...@@ -510,7 +423,6 @@ ...@@ -510,7 +423,6 @@
zp_csi_rs_resources: [ 0 ], zp_csi_rs_resources: [ 0 ],
}, },
], ],
csi_resource_config: [ csi_resource_config: [
{ {
csi_rsc_config_id: 0, csi_rsc_config_id: 0,
...@@ -522,13 +434,11 @@ ...@@ -522,13 +434,11 @@
csi_im_resource_set_list: [ 0 ], csi_im_resource_set_list: [ 0 ],
resource_type: "periodic", resource_type: "periodic",
}, },
#ifdef USE_TRS
{ {
csi_rsc_config_id: 2, csi_rsc_config_id: 2,
nzp_csi_rs_resource_set_list: [ 1 ], nzp_csi_rs_resource_set_list: [ 1 ],
resource_type: "periodic", resource_type: "periodic",
}, },
#endif
], ],
csi_report_config: [ csi_report_config: [
{ {
...@@ -558,24 +468,15 @@ ...@@ -558,24 +468,15 @@
}, },
], ],
}, },
pucch: { pucch: {
pucch_group_hopping: "neither", pucch_group_hopping: "neither",
hopping_id: -1, hopping_id: -1,
p0_nominal: -90, p0_nominal: -90,
#if 0
pucch0: {
initial_cyclic_shift: 1,
n_symb: 1,
},
#else
pucch1: { pucch1: {
n_cs: 3, n_cs: 3,
n_occ: 3, n_occ: 3,
freq_hopping: true, freq_hopping: true,
}, },
#endif
#if NR_LONG_PUCCH_FORMAT == 2
pucch2: { pucch2: {
n_symb: 2, n_symb: 2,
n_prb: 1, n_prb: 1,
...@@ -583,27 +484,7 @@ ...@@ -583,27 +484,7 @@
simultaneous_harq_ack_csi: false, simultaneous_harq_ack_csi: false,
max_code_rate: 0.25, max_code_rate: 0.25,
}, },
#elif NR_LONG_PUCCH_FORMAT == 3
pucch3: {
bpsk: false,
additional_dmrs: false,
freq_hopping: true,
n_prb: 1,
simultaneous_harq_ack_csi: true,
max_code_rate: 0.25,
},
#elif NR_LONG_PUCCH_FORMAT == 4
pucch4: {
occ_len: 4,
bpsk: false,
additional_dmrs: false,
freq_hopping: true,
simultaneous_harq_ack_csi: true,
max_code_rate: 0.25,
},
#endif
}, },
pusch: { pusch: {
mapping_type: "typeA", mapping_type: "typeA",
n_symb: 14, n_symb: 14,
...@@ -618,13 +499,11 @@ ...@@ -618,13 +499,11 @@
k2: 4, k2: 4,
msg3_k2: 7, msg3_k2: 7,
{% endif %} {% endif %}
p0_nominal_with_grant: -76, p0_nominal_with_grant: -84,
msg3_mcs: 4, msg3_mcs: 4,
msg3_delta_power: 0, msg3_delta_power: 0,
beta_offset_ack_index: 9, beta_offset_ack_index: 9,
}, },
mac_config: { mac_config: {
msg3_max_harq_tx: 5, msg3_max_harq_tx: 5,
ul_max_harq_tx: 5, ul_max_harq_tx: 5,
...@@ -639,466 +518,436 @@ ...@@ -639,466 +518,436 @@
sr_prohibit_timer: 0, sr_prohibit_timer: 0,
sr_trans_max: 64, sr_trans_max: 64,
}, },
cipher_algo_pref: [], cipher_algo_pref: [],
integ_algo_pref: [2, 1], integ_algo_pref: [2, 1],
inactivity_timer: {{ slapparameter_dict.get('inactivity_timer', slap_configuration['configuration.default_nr_inactivity_timer']) }}, inactivity_timer: {{ slapparameter_dict.get('inactivity_timer', slap_configuration['configuration.default_nr_inactivity_timer']) }},
#ifndef EPS_FALLBACK
#define EPS_FALLBACK 0
#endif
drb_config: [ drb_config: [
{
{ qci: 1,
qci: 1, use_for_mr_dc_scg: false,
use_for_en_dc: false, ims_dedicated_bearer: true,
#if EPS_FALLBACK > 0 pdcp_config: {
trigger_eps_fallback: true, discardTimer: 100,
#endif pdcp_SN_SizeUL: 12,
ims_dedicated_bearer: true, pdcp_SN_SizeDL: 12,
pdcp_config: { statusReportRequired: false,
discardTimer: 100, outOfOrderDelivery: false,
pdcp_SN_SizeUL: 12, t_Reordering: 0,
pdcp_SN_SizeDL: 12, },
statusReportRequired: false, rlc_config: {
outOfOrderDelivery: false, ul_um: {
t_Reordering: 0, sn_FieldLength: 6,
},
dl_um: {
}, sn_FieldLength: 6,
rlc_config: { t_Reassembly: 50,
ul_um: { },
sn_FieldLength: 6,
}, },
dl_um: { logical_channel_config: {
sn_FieldLength: 6, priority: 7,
t_Reassembly: 50, prioritisedBitRate: 0,
bucketSizeDuration: 100,
logicalChannelGroup: 1,
}, },
}, },
logical_channel_config: { {
priority: 7, qci: 2,
prioritisedBitRate: 0, use_for_mr_dc_scg: false,
bucketSizeDuration: 100, ims_dedicated_bearer: true,
logicalChannelGroup: 1, pdcp_config: {
}, discardTimer: 150,
}, pdcp_SN_SizeUL: 18,
{ pdcp_SN_SizeDL: 18,
qci: 2, statusReportRequired: false,
use_for_en_dc: false, outOfOrderDelivery: false,
#if EPS_FALLBACK > 0 t_Reordering: 0,
trigger_eps_fallback: true, },
#endif rlc_config: {
ims_dedicated_bearer: true, ul_um: {
pdcp_config: { sn_FieldLength: 12,
discardTimer: 150, },
pdcp_SN_SizeUL: 18, dl_um: {
pdcp_SN_SizeDL: 18, sn_FieldLength: 12,
statusReportRequired: false, t_Reassembly: 50,
outOfOrderDelivery: false, },
t_Reordering: 0,
},
rlc_config: {
ul_um: {
sn_FieldLength: 12,
}, },
dl_um: { logical_channel_config: {
sn_FieldLength: 12, priority: 8,
t_Reassembly: 50, prioritisedBitRate: 0,
bucketSizeDuration: 100,
logicalChannelGroup: 1,
}, },
}, },
logical_channel_config: { {
priority: 8, qci: 3,
prioritisedBitRate: 0, pdcp_config: {
bucketSizeDuration: 100, discardTimer: 100,
logicalChannelGroup: 1, pdcp_SN_SizeUL: 18,
}, pdcp_SN_SizeDL: 18,
}, statusReportRequired: false,
{ outOfOrderDelivery: false,
qci: 3, t_Reordering: 0,
pdcp_config: { },
discardTimer: 100, rlc_config: {
pdcp_SN_SizeUL: 18, ul_um: {
pdcp_SN_SizeDL: 18, sn_FieldLength: 12,
statusReportRequired: false, },
outOfOrderDelivery: false, dl_um: {
t_Reordering: 0, sn_FieldLength: 12,
}, t_Reassembly: 50,
rlc_config: { },
ul_um: {
sn_FieldLength: 12,
}, },
dl_um: { logical_channel_config: {
sn_FieldLength: 12, priority: 7,
t_Reassembly: 50, prioritisedBitRate: 0,
bucketSizeDuration: 100,
logicalChannelGroup: 2,
}, },
}, },
logical_channel_config: { {
priority: 7, qci: 4,
prioritisedBitRate: 0, pdcp_config: {
bucketSizeDuration: 100, discardTimer: 0,
logicalChannelGroup: 2, pdcp_SN_SizeUL: 18,
}, pdcp_SN_SizeDL: 18,
}, statusReportRequired: true,
{ outOfOrderDelivery: false,
qci: 4, },
pdcp_config: { rlc_config: {
discardTimer: 0, ul_am: {
pdcp_SN_SizeUL: 18, sn_FieldLength: 18,
pdcp_SN_SizeDL: 18, t_PollRetransmit: 80,
statusReportRequired: true, pollPDU: 64,
outOfOrderDelivery: false, pollByte: 125,
}, maxRetxThreshold: 4,
rlc_config: { },
ul_am: { dl_am: {
sn_FieldLength: 18, sn_FieldLength: 18,
t_PollRetransmit: 80, t_Reassembly: 80,
pollPDU: 64, t_StatusProhibit: 10,
pollByte: 125, },
maxRetxThreshold: 4,
}, },
dl_am: { logical_channel_config: {
sn_FieldLength: 18, priority: 9,
t_Reassembly: 80, prioritisedBitRate: 8,
t_StatusProhibit: 10, bucketSizeDuration: 100,
logicalChannelGroup: 3,
}, },
}, },
logical_channel_config: { {
priority: 9, qci: 65,
prioritisedBitRate: 8, use_for_mr_dc_scg: false,
bucketSizeDuration: 100, ims_dedicated_bearer: true,
logicalChannelGroup: 3, pdcp_config: {
}, discardTimer: 100,
}, pdcp_SN_SizeUL: 12,
{ pdcp_SN_SizeDL: 12,
qci: 65, statusReportRequired: false,
use_for_en_dc: false, outOfOrderDelivery: false,
#if EPS_FALLBACK > 0 t_Reordering: 0,
trigger_eps_fallback: true, },
#endif rlc_config: {
ims_dedicated_bearer: true, ul_um: {
pdcp_config: { sn_FieldLength: 6,
discardTimer: 100, },
pdcp_SN_SizeUL: 12, dl_um: {
pdcp_SN_SizeDL: 12, sn_FieldLength: 6,
statusReportRequired: false, t_Reassembly: 50,
outOfOrderDelivery: false, },
t_Reordering: 0,
},
rlc_config: {
ul_um: {
sn_FieldLength: 6,
}, },
dl_um: { logical_channel_config: {
sn_FieldLength: 6, priority: 5,
t_Reassembly: 50, prioritisedBitRate: 0,
bucketSizeDuration: 100,
logicalChannelGroup: 4,
}, },
}, },
logical_channel_config: { {
priority: 5, qci: 66,
prioritisedBitRate: 0, use_for_mr_dc_scg: false,
bucketSizeDuration: 100, ims_dedicated_bearer: true,
logicalChannelGroup: 4, pdcp_config: {
}, discardTimer: 150,
}, pdcp_SN_SizeUL: 18,
{ pdcp_SN_SizeDL: 18,
qci: 66, statusReportRequired: false,
use_for_en_dc: false, outOfOrderDelivery: false,
#if EPS_FALLBACK > 0 t_Reordering: 0,
trigger_eps_fallback: true, },
#endif rlc_config: {
ims_dedicated_bearer: true, ul_um: {
pdcp_config: { sn_FieldLength: 12,
discardTimer: 150, },
pdcp_SN_SizeUL: 18, dl_um: {
pdcp_SN_SizeDL: 18, sn_FieldLength: 12,
statusReportRequired: false, t_Reassembly: 50,
outOfOrderDelivery: false, },
t_Reordering: 0,
},
rlc_config: {
ul_um: {
sn_FieldLength: 12,
}, },
dl_um: { logical_channel_config: {
sn_FieldLength: 12, priority: 7,
t_Reassembly: 50, prioritisedBitRate: 0,
bucketSizeDuration: 100,
logicalChannelGroup: 4,
}, },
}, },
logical_channel_config: { {
priority: 7, qci: 67,
prioritisedBitRate: 0, use_for_mr_dc_scg: false,
bucketSizeDuration: 100, ims_dedicated_bearer: true,
logicalChannelGroup: 4, pdcp_config: {
}, discardTimer: 100,
}, pdcp_SN_SizeUL: 18,
{ pdcp_SN_SizeDL: 18,
qci: 67, statusReportRequired: false,
use_for_en_dc: false, outOfOrderDelivery: false,
#if EPS_FALLBACK > 0 t_Reordering: 0,
trigger_eps_fallback: true, },
#endif rlc_config: {
ims_dedicated_bearer: true, ul_um: {
pdcp_config: { sn_FieldLength: 12,
discardTimer: 100, },
pdcp_SN_SizeUL: 18, dl_um: {
pdcp_SN_SizeDL: 18, sn_FieldLength: 12,
statusReportRequired: false, t_Reassembly: 50,
outOfOrderDelivery: false, },
t_Reordering: 0,
},
rlc_config: {
ul_um: {
sn_FieldLength: 12,
}, },
dl_um: { logical_channel_config: {
sn_FieldLength: 12, priority: 6,
t_Reassembly: 50, prioritisedBitRate: 0,
bucketSizeDuration: 100,
logicalChannelGroup: 5,
}, },
}, },
logical_channel_config: { {
priority: 6, qci: 5,
prioritisedBitRate: 0, use_for_mr_dc_scg: false,
bucketSizeDuration: 100, pdcp_config: {
logicalChannelGroup: 5, discardTimer: 0,
}, pdcp_SN_SizeUL: 18,
}, pdcp_SN_SizeDL: 18,
statusReportRequired: true,
{ outOfOrderDelivery: false,
qci: 5, },
use_for_en_dc: false, rlc_config: {
pdcp_config: { ul_am: {
discardTimer: 0, sn_FieldLength: 18,
pdcp_SN_SizeUL: 18, t_PollRetransmit: 80,
pdcp_SN_SizeDL: 18, pollPDU: 64,
statusReportRequired: true, pollByte: 125,
outOfOrderDelivery: false, maxRetxThreshold: 4,
}, },
rlc_config: { dl_am: {
ul_am: { sn_FieldLength: 18,
sn_FieldLength: 18, t_Reassembly: 80,
t_PollRetransmit: 80, t_StatusProhibit: 10,
pollPDU: 64, },
pollByte: 125,
maxRetxThreshold: 4,
}, },
dl_am: { logical_channel_config: {
sn_FieldLength: 18, priority: 6,
t_Reassembly: 80, prioritisedBitRate: 8,
t_StatusProhibit: 10, bucketSizeDuration: 100,
logicalChannelGroup: 4,
}, },
}, },
logical_channel_config: { {
priority: 6, qci: 6,
prioritisedBitRate: 8, pdcp_config: {
bucketSizeDuration: 100, discardTimer: 0,
logicalChannelGroup: 4, pdcp_SN_SizeUL: 18,
}, pdcp_SN_SizeDL: 18,
}, statusReportRequired: true,
{ outOfOrderDelivery: false,
qci: 6, },
pdcp_config: { rlc_config: {
discardTimer: 0, ul_am: {
pdcp_SN_SizeUL: 18, sn_FieldLength: 18,
pdcp_SN_SizeDL: 18, t_PollRetransmit: 80,
statusReportRequired: true, pollPDU: 64,
outOfOrderDelivery: false, pollByte: 125,
}, maxRetxThreshold: 4,
rlc_config: { },
ul_am: { dl_am: {
sn_FieldLength: 18, sn_FieldLength: 18,
t_PollRetransmit: 80, t_Reassembly: 80,
pollPDU: 64, t_StatusProhibit: 10,
pollByte: 125, },
maxRetxThreshold: 4,
}, },
dl_am: { logical_channel_config: {
sn_FieldLength: 18, priority: 10,
t_Reassembly: 80, prioritisedBitRate: 8,
t_StatusProhibit: 10, bucketSizeDuration: 100,
logicalChannelGroup: 5,
}, },
}, },
logical_channel_config: { {
priority: 10, qci: 7,
prioritisedBitRate: 8, pdcp_config: {
bucketSizeDuration: 100, discardTimer: 100,
logicalChannelGroup: 5, pdcp_SN_SizeUL: 18,
}, pdcp_SN_SizeDL: 18,
}, statusReportRequired: false,
{ outOfOrderDelivery: false,
qci: 7, t_Reordering: 0,
pdcp_config: { },
discardTimer: 100, rlc_config: {
pdcp_SN_SizeUL: 18, ul_um: {
pdcp_SN_SizeDL: 18, sn_FieldLength: 12,
statusReportRequired: false, },
outOfOrderDelivery: false, dl_um: {
t_Reordering: 0, sn_FieldLength: 12,
}, t_Reassembly: 50,
rlc_config: { },
ul_um: {
sn_FieldLength: 12,
}, },
dl_um: { logical_channel_config: {
sn_FieldLength: 12, priority: 11,
t_Reassembly: 50, prioritisedBitRate: 0,
bucketSizeDuration: 100,
logicalChannelGroup: 6,
}, },
}, },
logical_channel_config: { {
priority: 11, qci: 8,
prioritisedBitRate: 0, pdcp_config: {
bucketSizeDuration: 100, discardTimer: 0,
logicalChannelGroup: 6, pdcp_SN_SizeUL: 18,
}, pdcp_SN_SizeDL: 18,
}, statusReportRequired: true,
{ outOfOrderDelivery: false,
qci: 8, },
pdcp_config: { rlc_config: {
discardTimer: 0, ul_am: {
pdcp_SN_SizeUL: 18, sn_FieldLength: 18,
pdcp_SN_SizeDL: 18, t_PollRetransmit: 80,
statusReportRequired: true, pollPDU: 64,
outOfOrderDelivery: false, pollByte: 125,
}, maxRetxThreshold: 4,
rlc_config: { },
ul_am: { dl_am: {
sn_FieldLength: 18, sn_FieldLength: 18,
t_PollRetransmit: 80, t_Reassembly: 80,
pollPDU: 64, t_StatusProhibit: 10,
pollByte: 125, },
maxRetxThreshold: 4,
}, },
dl_am: { logical_channel_config: {
sn_FieldLength: 18, priority: 12,
t_Reassembly: 80, prioritisedBitRate: 8,
t_StatusProhibit: 10, bucketSizeDuration: 100,
logicalChannelGroup: 7,
}, },
}, },
logical_channel_config: { {
priority: 12, qci: 9,
prioritisedBitRate: 8, pdcp_config: {
bucketSizeDuration: 100, discardTimer: 0,
logicalChannelGroup: 7, pdcp_SN_SizeUL: 18,
}, pdcp_SN_SizeDL: 18,
}, statusReportRequired: true,
{ outOfOrderDelivery: false,
qci: 9, },
pdcp_config: { rlc_config: {
discardTimer: 0, ul_am: {
pdcp_SN_SizeUL: 18, sn_FieldLength: 18,
pdcp_SN_SizeDL: 18, t_PollRetransmit: 80,
statusReportRequired: true, pollPDU: 64,
outOfOrderDelivery: false, pollByte: 125,
}, maxRetxThreshold: 4,
rlc_config: { },
ul_am: { dl_am: {
sn_FieldLength: 18, sn_FieldLength: 18,
t_PollRetransmit: 80, t_Reassembly: 80,
pollPDU: 64, t_StatusProhibit: 10,
pollByte: 125, },
maxRetxThreshold: 4,
}, },
dl_am: { logical_channel_config: {
sn_FieldLength: 18, priority: 13,
t_Reassembly: 80, prioritisedBitRate: 8,
t_StatusProhibit: 10, bucketSizeDuration: 100,
logicalChannelGroup: 7,
}, },
}, },
logical_channel_config: { {
priority: 13, qci: 69,
prioritisedBitRate: 8, use_for_mr_dc_scg: false,
bucketSizeDuration: 100, pdcp_config: {
logicalChannelGroup: 7, discardTimer: 0,
}, pdcp_SN_SizeUL: 18,
}, pdcp_SN_SizeDL: 18,
{ statusReportRequired: true,
qci: 69, outOfOrderDelivery: false,
use_for_en_dc: false, },
pdcp_config: { rlc_config: {
discardTimer: 0, ul_am: {
pdcp_SN_SizeUL: 18, sn_FieldLength: 18,
pdcp_SN_SizeDL: 18, t_PollRetransmit: 80,
statusReportRequired: true, pollPDU: 64,
outOfOrderDelivery: false, pollByte: 125,
}, maxRetxThreshold: 4,
rlc_config: { },
ul_am: { dl_am: {
sn_FieldLength: 18, sn_FieldLength: 18,
t_PollRetransmit: 80, t_Reassembly: 80,
pollPDU: 64, t_StatusProhibit: 10,
pollByte: 125, },
maxRetxThreshold: 4,
}, },
dl_am: { logical_channel_config: {
sn_FieldLength: 18, priority: 4,
t_Reassembly: 80, prioritisedBitRate: 8,
t_StatusProhibit: 10, bucketSizeDuration: 100,
logicalChannelGroup: 4,
}, },
}, },
logical_channel_config: { {
priority: 4, qci: 70,
prioritisedBitRate: 8, pdcp_config: {
bucketSizeDuration: 100, discardTimer: 0,
logicalChannelGroup: 4, pdcp_SN_SizeUL: 18,
}, pdcp_SN_SizeDL: 18,
}, statusReportRequired: true,
{ outOfOrderDelivery: false,
qci: 70, },
pdcp_config: { rlc_config: {
discardTimer: 0, ul_am: {
pdcp_SN_SizeUL: 18, sn_FieldLength: 18,
pdcp_SN_SizeDL: 18, t_PollRetransmit: 80,
statusReportRequired: true, pollPDU: 64,
outOfOrderDelivery: false, pollByte: 125,
}, maxRetxThreshold: 4,
rlc_config: { },
ul_am: { dl_am: {
sn_FieldLength: 18, sn_FieldLength: 18,
t_PollRetransmit: 80, t_Reassembly: 80,
pollPDU: 64, t_StatusProhibit: 10,
pollByte: 125, },
maxRetxThreshold: 4,
}, },
dl_am: { logical_channel_config: {
sn_FieldLength: 18, priority: 11,
t_Reassembly: 80, prioritisedBitRate: 8,
t_StatusProhibit: 10, bucketSizeDuration: 100,
logicalChannelGroup: 5,
}, },
}, },
logical_channel_config: { ],
priority: 11,
prioritisedBitRate: 8, meas_config_desc: {
bucketSizeDuration: 100, a1_report_type: "rsrp",
logicalChannelGroup: 5, 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
}, },
],
/* measurement configuration */
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: 6,
a3_hysteresis: 0,
a3_time_to_trigger: 100,
ssb_rsrq_filter_coeff: 3,
ssb_sinr_filter_coeff: 5
},
meas_gap_config: {
pattern_id: 0
},
}, },
} }
...@@ -55,7 +55,11 @@ ...@@ -55,7 +55,11 @@
pdn_type: "ipv4v6", pdn_type: "ipv4v6",
first_ipv6_prefix: "{{ netaddr.IPAddress(slap_configuration.get('tun-ipv6-addr', '')) + 1 }}", first_ipv6_prefix: "{{ netaddr.IPAddress(slap_configuration.get('tun-ipv6-addr', '')) + 1 }}",
last_ipv6_prefix: "{{ netaddr.IPAddress(netaddr.IPNetwork(slap_configuration.get('tun-ipv6-network', '')).last) - 1 }}", last_ipv6_prefix: "{{ netaddr.IPAddress(netaddr.IPNetwork(slap_configuration.get('tun-ipv6-network', '')).last) - 1 }}",
{% if slapparameter_dict.get('dnsmasq', False) %}
dns_addr: ["{{ slap_configuration.get('tun-ipv4-addr', '') }}"],
{% else %}
dns_addr: ["8.8.8.8", "2001:4860:4860::8888"], dns_addr: ["8.8.8.8", "2001:4860:4860::8888"],
{% endif %}
{% else %} {% else %}
pdn_type: "ipv4", pdn_type: "ipv4",
dns_addr: "8.8.8.8", dns_addr: "8.8.8.8",
......
...@@ -21,6 +21,12 @@ ...@@ -21,6 +21,12 @@
"description": "Activate iperf3 UDP server", "description": "Activate iperf3 UDP server",
"type": "boolean" "type": "boolean"
}, },
"dnsmasq": {
"default": false,
"title": "dnsmasq",
"description": "dnsmasq",
"type": "boolean"
},
"use_ipv4": { "use_ipv4": {
"default": false, "default": false,
"title": "Use IPv4", "title": "Use IPv4",
......
...@@ -22,7 +22,10 @@ parts = ...@@ -22,7 +22,10 @@ parts =
publish-connection-information publish-connection-information
{% if slapparameter_dict.get("iperf3", None) %} {% if slapparameter_dict.get("iperf3", None) %}
iperf-service iperf-service
port-listening-promise iperf-listen-promise
{% endif %}
{% if slapparameter_dict.get("dnsmasq", None) %}
dnsmasq-service
{% endif %} {% endif %}
{% for part in part_list -%} {% for part in part_list -%}
{{ ' %s' % part }} {{ ' %s' % part }}
...@@ -170,7 +173,7 @@ wrapper-path = ${directory:service}/iperf3 ...@@ -170,7 +173,7 @@ wrapper-path = ${directory:service}/iperf3
mode = 0775 mode = 0775
pidfile = ${directory:run}/iperf3.pid pidfile = ${directory:run}/iperf3.pid
[port-listening-promise] [iperf-listen-promise]
<= monitor-promise-base <= monitor-promise-base
promise = check_socket_listening promise = check_socket_listening
name = iperf3-port-listening.py name = iperf3-port-listening.py
...@@ -204,6 +207,25 @@ url = {{ mme_template }} ...@@ -204,6 +207,25 @@ url = {{ mme_template }}
{% endif %} {% endif %}
output = ${directory:etc}/mme.cfg output = ${directory:etc}/mme.cfg
{% if slapparameter_dict.get("dnsmasq", None) %}
[dnsmasq-service]
recipe = slapos.cookbook:wrapper
port = 5353
ip = ${slap-configuration:tun-ipv4-addr}
command-line = {{ dnsmasq_location }}/sbin/dnsmasq --conf-file={{ dnsmasq_config_path }} -x ${directory:run}/dnsmasq.pid --local-service --keep-in-foreground
wrapper-path = ${directory:service}/dnsmasq
mode = 0775
hash-files =
{{ dnsmasq_config_path }}
#[dnsmasq-listen-promise]
#<= monitor-promise-base
#promise = check_socket_listening
#name = dnsmasq-port-listening.py
#config-host = ${dnsmasq-service:ip}
#config-port = ${dnsmasq-service:port}
{% endif %}
[monitor-instance-parameter] [monitor-instance-parameter]
{% if slapparameter_dict.get("name", None) %} {% if slapparameter_dict.get("name", None) %}
monitor-title = {{ slapparameter_dict['name'] | string }} monitor-title = {{ slapparameter_dict['name'] | string }}
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
"$schema": "http://json-schema.org/draft-04/schema", "$schema": "http://json-schema.org/draft-04/schema",
"title": "Input Parameters", "title": "Input Parameters",
"properties": { "properties": {
{% if rf_mode == 'tdd' %}
"rrh": { "rrh": {
"title": "RRH", "title": "RRH",
"description": "RRH", "description": "RRH",
...@@ -13,6 +14,33 @@ ...@@ -13,6 +14,33 @@
"Lopcomm ORAN" "Lopcomm ORAN"
] ]
}, },
"txa0cc00_active": {
"title": "Lopcomm ORAN TX array carriers (TXA0CC00)",
"description": "Activate or inactivate Lopcomm ORAN TX array carriers (TXA0CC00)",
"type": "string",
"default": "ACTIVE",
"enum": [
"ACTIVE",
"INACTIVE"
]
},
"rxa0cc00_active": {
"title": "Lopcomm ORAN RX array carriers (RXA0CC00)",
"description": "Activate or inactivate Lopcomm ORAN RX array carriers (RXA0CC00)",
"type": "string",
"default": "ACTIVE",
"enum": [
"ACTIVE",
"INACTIVE"
]
},
{% endif %}
"log_phy_debug": {
"title": "Physical layer log debug",
"description": "Enable debug mode for physical layer logs",
"type": "boolean",
"default": false
},
"tx_gain": { "tx_gain": {
"title": "Tx gain", "title": "Tx gain",
"description": "Tx gain (in dB)", "description": "Tx gain (in dB)",
...@@ -31,6 +59,18 @@ ...@@ -31,6 +59,18 @@
"description": "True if GPS should be used for synchronisation", "description": "True if GPS should be used for synchronisation",
"type": "boolean" "type": "boolean"
}, },
"n_antenna_dl": {
"title": "Number of DL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of DL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default": {{ default_n_antenna_dl }}
},
"n_antenna_ul": {
"title": "Number of UL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of UL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default": {{ default_n_antenna_ul }}
},
"dl_earfcn": { "dl_earfcn": {
"title": "DL EARFCN", "title": "DL EARFCN",
"description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell", "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell",
...@@ -122,6 +162,12 @@ ...@@ -122,6 +162,12 @@
"type": "number", "type": "number",
"default": 60 "default": 60
}, },
"enb_drb_stats_enabled": {
"title": "Enable eNB drb statistics",
"description": "Enable eNB drb statistics through 100Hz polling, needed for E-UTRAN IP Throughput KPI",
"type": "boolean",
"default": true
},
"max_rx_sample_db": { "max_rx_sample_db": {
"title": "Maximum RX sample value (dB)", "title": "Maximum RX sample value (dB)",
"description": "Maximum RX sample threshold above which RX saturated promise will fail", "description": "Maximum RX sample threshold above which RX saturated promise will fail",
...@@ -157,38 +203,6 @@ ...@@ -157,38 +203,6 @@
"description": "Duration during which average temperature should not exceed specified threshold", "description": "Duration during which average temperature should not exceed specified threshold",
"type": "number", "type": "number",
"default": 600 "default": 600
},
"n_antenna_dl": {
"title": "Number of DL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of DL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default": {{ default_n_antenna_dl }}
},
"n_antenna_ul": {
"title": "Number of UL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of UL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default": {{ default_n_antenna_ul }}
},
"txa0cc00_active": {
"title": "Lopcomm ORAN TX array carriers (TXA0CC00)",
"description": "Activate or inactivate Lopcomm ORAN TX array carriers (TXA0CC00)",
"type": "string",
"default": "ACTIVE",
"enum": [
"ACTIVE",
"INACTIVE"
]
},
"rxa0cc00_active": {
"title": "Lopcomm ORAN RX array carriers (RXA0CC00)",
"description": "Activate or inactivate Lopcomm ORAN RX array carriers (RXA0CC00)",
"type": "string",
"default": "ACTIVE",
"enum": [
"ACTIVE",
"INACTIVE"
]
} }
} }
} }
...@@ -4,6 +4,7 @@ parts = ...@@ -4,6 +4,7 @@ parts =
ltelogs ltelogs
enb-config enb-config
enb-service enb-service
xamari-xlog-service
amarisoft-stats-service amarisoft-stats-service
amarisoft-rf-info-service amarisoft-rf-info-service
{% if slapparameter_dict.get('rrh', '') == "Lopcomm ORAN" %} {% if slapparameter_dict.get('rrh', '') == "Lopcomm ORAN" %}
...@@ -133,6 +134,31 @@ environment = ...@@ -133,6 +134,31 @@ environment =
LD_LIBRARY_PATH={{ openssl_location }}/lib LD_LIBRARY_PATH={{ openssl_location }}/lib
AMARISOFT_PATH=/opt/amarisoft/.amarisoft AMARISOFT_PATH=/opt/amarisoft/.amarisoft
[xamari-xlog-script]
recipe = slapos.recipe.template
output = ${directory:bin}/${:_buildout_section_name_}
period = {{ slapparameter_dict.get("enb_stats_fetch_period", 60) }}
stats_logspec = stats[samples,rf]/${:period}s
{%- if slapparameter_dict.get("enb_drb_stats_enabled", True) %}
drb_stats_logspec = x.drb_stats/${:period}s
{%- else %}
drb_stats_logspec =
{%- endif %}
rotatespec = 100MB.9
logspec = ${:stats_logspec} ${:drb_stats_logspec}
websock = ws://127.0.1.2:9001
xamari = {{ buildout_directory }}/bin/xamari
logfile = ${monitor-directory:public}/enb.xlog
inline =
#!/bin/sh
exec ${:xamari} xlog --rotate ${:rotatespec} ${:websock} ${:logfile} ${:logspec}
[xamari-xlog-service]
recipe = slapos.cookbook:wrapper
wrapper-path = ${directory:service}/${:_buildout_section_name_}
command-line = ${xamari-xlog-script:output}
hash-files = ${:command-line}
[amarisoft-stats-template] [amarisoft-stats-template]
recipe = slapos.recipe.template:jinja2 recipe = slapos.recipe.template:jinja2
extensions = jinja2.ext.do extensions = jinja2.ext.do
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
"$schema": "http://json-schema.org/draft-04/schema", "$schema": "http://json-schema.org/draft-04/schema",
"title": "Input Parameters", "title": "Input Parameters",
"properties": { "properties": {
{% if rf_mode == 'tdd' %}
"rrh": { "rrh": {
"title": "RRH", "title": "RRH",
"description": "RRH", "description": "RRH",
...@@ -13,6 +14,53 @@ ...@@ -13,6 +14,53 @@
"M2RU Sunwave" "M2RU Sunwave"
] ]
}, },
{% endif %}
"log_phy_debug": {
"title": "Physical layer log debug",
"description": "Enable debug mode for physical layer logs",
"type": "boolean",
"default": false
},
"nr_handover_a3_offset": {
"title": "A3 offset for NR handover",
"description": "RSRP gain offset between gNBs which will trigger handover",
"type": "number",
"default": 6,
},
"nr_handover_time_to_trigger": {
"title": "Time to Trigger for NR handover",
"description": "Time to triger after which NR handover will be triggerd if A3 offset is reached",
"type": "number",
"enum": [
0,
40,
64,
80,
100,
128,
160,
256,
320,
480,
512,
640,
1024,
1280,
2560,
5120
],
"default": 100
},
"tdd_ul_dl_config": {
"title": "TDD",
"description": "TDD",
"type": "string",
"enum": [
"5ms 2UL 7DL 4/6 (default)",
"2.5ms 1UL 3DL 2/10",
],
"default": "5ms 2UL 7DL 4/6 (default)"
},
"tx_gain": { "tx_gain": {
"title": "Tx gain", "title": "Tx gain",
"description": "Tx gain (in dB)", "description": "Tx gain (in dB)",
...@@ -85,16 +133,16 @@ ...@@ -85,16 +133,16 @@
"patternProperties": { "patternProperties": {
".*": { ".*": {
"properties": { "properties": {
"dl_nr_arfcn": { "dl_nr_arfcn": {
"title": "DL NR ARFCN", "title": "DL NR ARFCN",
"description": "Downlink NR Absolute Radio Frequency Channel Number of the neighbour cell", "description": "Downlink NR Absolute Radio Frequency Channel Number of the neighbour cell",
"type": "number" "type": "number"
}, },
"ssb_nr_arfcn": { "ssb_nr_arfcn": {
"title": "SSB NR ARFCN", "title": "SSB NR ARFCN",
"description": "SSB NR Absolute Radio Frequency Channel Number of the neighbour cell", "description": "SSB NR Absolute Radio Frequency Channel Number of the neighbour cell",
"type": "number" "type": "number"
}, },
"pci": { "pci": {
"title": "Physical Cell ID", "title": "Physical Cell ID",
"description": "Physical Cell ID of the neighbour cell", "description": "Physical Cell ID of the neighbour cell",
...@@ -105,16 +153,16 @@ ...@@ -105,16 +153,16 @@
"description": "Concatenation of gnb_id and cell_id of the neighbour cell", "description": "Concatenation of gnb_id and cell_id of the neighbour cell",
"type": "string" "type": "string"
}, },
"gnb_id_bits": { "gnb_id_bits": {
"title": "gNB ID bits", "title": "gNB ID bits",
"description": "Number of bits for the gNodeB global identifier. (range 22 to 32)", "description": "Number of bits for the gNodeB global identifier. (range 22 to 32)",
"type": "number" "type": "number"
}, },
"nr_band": { "nr_band": {
"title": "NR band", "title": "NR band",
"description": "NR band number", "description": "NR band number",
"type": "number" "type": "number"
}, },
"tac": { "tac": {
"title": "Tracking Area Code", "title": "Tracking Area Code",
"description": "Integer (range 0 to 16777215)", "description": "Integer (range 0 to 16777215)",
...@@ -254,6 +302,12 @@ ...@@ -254,6 +302,12 @@
"type": "number", "type": "number",
"default": 60 "default": 60
}, },
"gnb_drb_stats_enabled": {
"title": "Enable gNB drb statistics",
"description": "Enable gNB drb statistics through 100Hz polling, needed for E-UTRAN IP Throughput KPI",
"type": "boolean",
"default": true
},
"max_rx_sample_db": { "max_rx_sample_db": {
"title": "Maximum RX sample value (dB)", "title": "Maximum RX sample value (dB)",
"description": "Maximum RX sample threshold above which RX saturated promise will fail", "description": "Maximum RX sample threshold above which RX saturated promise will fail",
......
...@@ -4,6 +4,7 @@ parts = ...@@ -4,6 +4,7 @@ parts =
ltelogs ltelogs
gnb-config gnb-config
enb-service enb-service
xamari-xlog-service
amarisoft-stats-service amarisoft-stats-service
amarisoft-rf-info-service amarisoft-rf-info-service
{% if slapparameter_dict.get('rrh', '') == "Lopcomm ORAN" %} {% if slapparameter_dict.get('rrh', '') == "Lopcomm ORAN" %}
...@@ -134,6 +135,32 @@ environment = ...@@ -134,6 +135,32 @@ environment =
LD_LIBRARY_PATH={{ openssl_location }}/lib LD_LIBRARY_PATH={{ openssl_location }}/lib
AMARISOFT_PATH=/opt/amarisoft/.amarisoft AMARISOFT_PATH=/opt/amarisoft/.amarisoft
[xamari-xlog-script]
recipe = slapos.recipe.template
output = ${directory:bin}/${:_buildout_section_name_}
period = {{ slapparameter_dict.get("gnb_stats_fetch_period", 60) }}
stats_logspec = stats[samples,rf]/${:period}s
{%- if slapparameter_dict.get("gnb_drb_stats_enabled", True) %}
drb_stats_logspec = x.drb_stats/${:period}s
{%- else %}
drb_stats_logspec =
{%- endif %}
rotatespec = 100MB.9
logspec = ${:stats_logspec} ${:drb_stats_logspec}
logspec = ${:stats_logspec} ${:drb_stats_logspec}
websock = ws://127.0.1.2:9001
xamari = {{ buildout_directory }}/bin/xamari
logfile = ${monitor-directory:public}/gnb.xlog
inline =
#!/bin/sh
exec ${:xamari} xlog --rotate ${:rotatespec} ${:websock} ${:logfile} ${:logspec}
[xamari-xlog-service]
recipe = slapos.cookbook:wrapper
wrapper-path = ${directory:service}/${:_buildout_section_name_}
command-line = ${xamari-xlog-script:output}
hash-files = ${:command-line}
[amarisoft-stats-template] [amarisoft-stats-template]
recipe = slapos.recipe.template:jinja2 recipe = slapos.recipe.template:jinja2
extensions = jinja2.ext.do extensions = jinja2.ext.do
......
{
"type": "object",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Input Parameters",
"properties": {
"rrh": {
"title": "RRH",
"description": "RRH",
"type": "string",
"default": "SDR",
"enum": [
"SDR",
"Lopcomm ORAN"
]
},
"txa0cc00_active": {
"title": "Lopcomm ORAN TX array carriers (TXA0CC00)",
"description": "Activate or inactivate Lopcomm ORAN TX array carriers (TXA0CC00)",
"type": "string",
"default": "ACTIVE",
"enum": [
"ACTIVE",
"INACTIVE"
]
},
"rxa0cc00_active": {
"title": "Lopcomm ORAN RX array carriers (RXA0CC00)",
"description": "Activate or inactivate Lopcomm ORAN RX array carriers (RXA0CC00)",
"type": "string",
"default": "ACTIVE",
"enum": [
"ACTIVE",
"INACTIVE"
]
},
"log_phy_debug": {
"title": "Physical layer log debug",
"description": "Enable debug mode for physical layer logs",
"type": "boolean",
"default": false
},
"tx_gain": {
"title": "Tx gain",
"description": "Tx gain (in dB)",
"type": "number",
"default":
},
"rx_gain": {
"title": "Rx gain",
"description": "Rx gain (in dB)",
"type": "number",
"default":
},
"gps_sync": {
"default": false,
"title": "GPS synchronisation",
"description": "True if GPS should be used for synchronisation",
"type": "boolean"
},
"n_antenna_dl": {
"title": "Number of DL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of DL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default":
},
"n_antenna_ul": {
"title": "Number of UL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of UL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default":
},
"dl_earfcn": {
"title": "DL EARFCN",
"description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell",
"type": "number",
"default": 0
},
"n_rb_dl": {
"title": "DL RB",
"description": "number of DL resource blocks",
"type": "number",
"default":
},
"mme_list": {
"title": "MME list",
"description": "Optionnal. List of MME to which the gNodeB is connected",
"patternProperties": {
".*": {
"properties": {
"mme_addr": {
"title": "MME Address",
"description": "IP address (and optional port) of S1AP SCTP connection to the MME. The default port is 36412.",
"type": "string"
}
},
"type": "object"
}
},
"type": "object",
"default": {}
},
"enb_id": {
"title": "eNB ID",
"description": "eNB ID",
"type": "string",
"default": "0x1A2D0"
},
"pci": {
"title": "Physical Cell ID",
"description": "Physical Cell ID",
"type": "number",
"default": 1
},
"plmn_list": {
"title": "PLMN list",
"description": "List of PLMNs broadcasted by the eNodeB, at most 6 (default: 00101)",
"patternProperties": {
".*": {
"properties": {
"plmn": {
"default": "00101",
"title": "Public Land Mobile Network",
"description": "Public Land Mobile Network",
"type": "string"
},
"attach_without_pdn": {
"default": false,
"title": "Attach Without PDN",
"description": "Optional boolean. Indicates if PLMN supports attach without PDN connectivity.",
"type": "boolean"
},
"reserved": {
"default": false,
"title": "Reserved",
"description": "True if the cell is reserved for operator use.",
"type": "boolean"
}
},
"type": "object"
}
},
"type": "object",
"default": {}
},
"inactivity_timer": {
"title": "Inactivity Timer",
"description": "Send RRC connection release after this time (in ms) of network inactivity.",
"type": "number",
"default":
},
"use_ipv4": {
"default": false,
"title": "Use IPv4",
"description": "Set to true to use IPv4 for AMF / MME addresses",
"type": "boolean"
},
"enb_stats_fetch_period": {
"title": "eNB statistics fetch period (seconds)",
"description": "Describes how often a call to Amarisoft remote API is made to get eNB statistics",
"type": "number",
"default": 60
},
"enb_drb_stats_enabled": {
"title": "Enable eNB drb statistics",
"description": "Enable eNB drb statistics through 100Hz polling, needed for E-UTRAN IP Throughput KPI",
"type": "boolean",
"default": true
},
"max_rx_sample_db": {
"title": "Maximum RX sample value (dB)",
"description": "Maximum RX sample threshold above which RX saturated promise will fail",
"type": "number",
"default": 0
},
"min_txrx_delay": {
"title": "Minimum available time for radio front end processing (ms)",
"description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (higher than this value)",
"type": "number",
"default": 5
},
"avg_txrx_delay": {
"title": "Average available time for radio front end processing (ms)",
"description": "Baseband latency promise will fail if average TX/RX diff reaches threshold (higher than this value)",
"type": "number",
"default": 7
},
"promise_cpu_max_spot_temp": {
"title": "Maximum CPU spot temperature",
"description": "Maximum CPU spot temperature above which CPU temperature promise will fail",
"type": "number",
"default": 90
},
"promise_cpu_max_avg_temp": {
"title": "Maximum average CPU temperature",
"description": "If average temperature over specified period reaches this threshold, promise will fail",
"type": "number",
"default": 80
},
"promise_cpu_avg_temp_period": {
"title": "Period of Average CPU temperature checks",
"description": "Duration during which average temperature should not exceed specified threshold",
"type": "number",
"default": 600
}
}
}
{
"type": "object",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Input Parameters",
"properties": {
"rrh": {
"title": "RRH",
"description": "RRH",
"type": "string",
"default": "SDR",
"enum": [
"SDR",
"M2RU Sunwave"
]
},
"log_phy_debug": {
"title": "Physical layer log debug",
"description": "Enable debug mode for physical layer logs",
"type": "boolean",
"default": false
},
"nr_handover_a3_offset": {
"title": "A3 offset for NR handover",
"description": "RSRP gain offset between gNBs which will trigger handover",
"type": "number",
"default": 6,
},
"nr_handover_time_to_trigger": {
"title": "Time to Trigger for NR handover",
"description": "Time to triger after which NR handover will be triggerd if A3 offset is reached",
"type": "number",
"enum": [
0,
40,
64,
80,
100,
128,
160,
256,
320,
480,
512,
640,
1024,
1280,
2560,
5120
],
"default": 100
},
"tdd_ul_dl_config": {
"title": "TDD",
"description": "TDD",
"type": "string",
"enum": [
"5ms 2UL 7DL 4/6 (default)",
"2.5ms 1UL 3DL 2/10",
],
"default": "5ms 2UL 7DL 4/6 (default)"
},
"tx_gain": {
"title": "Tx gain",
"description": "Tx gain (in dB)",
"type": "number",
"default":
},
"rx_gain": {
"title": "Rx gain",
"description": "Rx gain (in dB)",
"type": "number",
"default":
},
"n_antenna_dl": {
"title": "Number of DL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of DL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default":
},
"n_antenna_ul": {
"title": "Number of UL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of UL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default":
},
"gps_sync": {
"default": false,
"title": "GPS synchronisation",
"description": "True if GPS should be used for synchronisation",
"type": "boolean"
},
"dl_nr_arfcn": {
"title": "DL NR ARFCN",
"description": "Downlink NR Absolute Radio Frequency Channel Number of the cell",
"type": "number",
"default": 0
},
"nr_band": {
"title": "NR band",
"description": "NR band number",
"type": "number",
"default": 0
},
"nr_bandwidth": {
"title": "Bandwidth",
"description": "Downlink Bandwidth (in MHz)",
"type": "number",
"default":
},
"amf_list": {
"title": "AMF list",
"description": "Optionnal. List of AMF to which the gNodeB is connected",
"patternProperties": {
".*": {
"properties": {
"amf_addr": {
"title": "AMF Address",
"description": "IP address (and optional port) of NGAP SCTP connection to the AMF. The default port is 38412.",
"type": "string"
}
},
"type": "object"
}
},
"type": "object",
"default": {}
},
"ncell_list": {
"title": "Neighbour Cell Info",
"description": "Neighbour Cell Info",
"patternProperties": {
".*": {
"properties": {
"dl_nr_arfcn": {
"title": "DL NR ARFCN",
"description": "Downlink NR Absolute Radio Frequency Channel Number of the neighbour cell",
"type": "number"
},
"ssb_nr_arfcn": {
"title": "SSB NR ARFCN",
"description": "SSB NR Absolute Radio Frequency Channel Number of the neighbour cell",
"type": "number"
},
"pci": {
"title": "Physical Cell ID",
"description": "Physical Cell ID of the neighbour cell",
"type": "number"
},
"nr_cell_id": {
"title": "NR Cell ID",
"description": "Concatenation of gnb_id and cell_id of the neighbour cell",
"type": "string"
},
"gnb_id_bits": {
"title": "gNB ID bits",
"description": "Number of bits for the gNodeB global identifier. (range 22 to 32)",
"type": "number"
},
"nr_band": {
"title": "NR band",
"description": "NR band number",
"type": "number"
},
"tac": {
"title": "Tracking Area Code",
"description": "Integer (range 0 to 16777215)",
"type": "number"
}
},
"type": "object"
}
},
"type": "object",
"default": {}
},
"xn_peers": {
"title": "XN Peers",
"description": "XN Peers",
"patternProperties": {
".*": {
"properties": {
"xn_addr": {
"title": "XN Address",
"description": "XN Address of the neighbour cell (gNB Address)",
"type": "string"
}
},
"type": "object"
}
},
"type": "object",
"default": {}
},
"gnb_id": {
"title": "gNB ID",
"description": "gNB ID",
"type": "string",
"default": "0x12345"
},
"gnb_id_bits": {
"title": "gNB ID bits",
"description": "Number of bits for the gNodeB global identifier. (range 22 to 32)",
"type": "number",
"default": 28
},
"cell_id": {
"title": "Cell ID",
"description": "Cell ID",
"type": "string",
"default": "0x01"
},
"pci": {
"title": "Physical Cell ID",
"description": "Physical Cell ID",
"type": "number",
"default": 500
},
"ssb_pos_bitmap": {
"title": "SSB Position Bitmap",
"description": "SSB position bitmap in bits (4, 8 or 64 bits depending on the DL frequency).",
"type": "string",
"default": 10000000
},
"plmn_list": {
"title": "PLMN list",
"description": "List of PLMNs broadcasted by the gNodeB, at most 12 (default: 00101)",
"patternProperties": {
".*": {
"properties": {
"plmn": {
"default": "00101",
"title": "Public Land Mobile Network",
"description": "Public Land Mobile Network",
"type": "string"
},
"tac": {
"default": 100,
"title": "Tracking Area Code",
"description": "Integer (range 0 to 16777215)",
"type": "number"
},
"ranac": {
"title": "Optional integer (range 0 to 255)",
"description": "RAN Area Code",
"type": "number"
},
"reserved": {
"default": false,
"title": "Reserved",
"description": "True if the cell is reserved for operator use.",
"type": "boolean"
}
},
"type": "object"
}
},
"type": "object",
"default": {}
},
"nssai": {
"title": "AMF slices configuration",
"description": "AMF slices configuration.",
"patternProperties": {
".*": {
"properties": {
"sst": {
"default": 1,
"title": "Slice Service Type",
"description": "Integer (range 1 to 255).",
"type": "number"
},
"sd": {
"default": 50,
"title": "Slice Differentiator",
"description": "Optional integer (range 0 to 0xFFFFFE)",
"type": "number"
}
},
"type": "object"
}
},
"type": "object",
"default": {}
},
"inactivity_timer": {
"title": "Inactivity Timer",
"description": "Send RRC connection release after this time (in ms) of network inactivity.",
"type": "number",
"default":
},
"use_ipv4": {
"default": false,
"title": "Use IPv4",
"description": "Set to true to use IPv4 for AMF / MME addresses",
"type": "boolean"
},
"gnb_stats_fetch_period": {
"title": "gNB statistics fetch period (seconds)",
"description": "Describes how often a call to Amarisoft remote API is made to get gNB statistics",
"type": "number",
"default": 60
},
"gnb_drb_stats_enabled": {
"title": "Enable gNB drb statistics",
"description": "Enable gNB drb statistics through 100Hz polling, needed for E-UTRAN IP Throughput KPI",
"type": "boolean",
"default": true
},
"max_rx_sample_db": {
"title": "Maximum RX sample value (dB)",
"description": "Maximum RX sample threshold above which RX saturated promise will fail",
"type": "number",
"default": 0
},
"min_txrx_delay": {
"title": "Minimum available time for radio front end processing (ms)",
"description": "Minimum TX/RX diff threshold above which baseband latency promise will fail",
"type": "number",
"default": 5
},
"avg_txrx_delay": {
"title": "Average available time for radio front end processing (ms)",
"description": "Average TX/RX diff threshold above which baseband latency promise will fail",
"type": "number",
"default": 7
},
"promise_cpu_temperature_threshold": {
"title": "CPU temperature promise threshold",
"description": "Temperature threshold above which CPU temperature promise will fail",
"type": "number",
"default": 80
},
"promise_cpu_avg_temperature_threshold": {
"title": "Average CPU temperature promise threshold",
"description": "If average temperature over specified duration reaches this threshold, promise will fail",
"type": "number",
"default": 80
},
"promise_cpu_avg_temperature_threshold_duration": {
"title": "Average CPU temperature promise threshold duration",
"description": "Duration during which average temperature should not exceed specified threshold",
"type": "number",
"default": 600
}
}
}
{
"type": "object",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Input Parameters",
"properties": {
"rue_addr": {
"title": "[Required] Remote UE address",
"description": "[Required] Address of remote UE server. Default port is 2152.",
"type": "string",
"default": ""
},
"tx_gain": {
"title": "Tx gain",
"description": "Tx gain (in dB)",
"type": "number",
"default":
},
"rx_gain": {
"title": "Rx gain",
"description": "Rx gain (in dB)",
"type": "number",
"default":
},
"dl_earfcn": {
"title": "DL EARFCN",
"description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell",
"type": "number",
"default": 0
},
"n_rb_dl": {
"title": "DL RB",
"description": "number of DL resource blocks",
"type": "number",
"default":
},
"n_antenna_dl": {
"title": "Number of DL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of DL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default":
},
"n_antenna_ul": {
"title": "Number of UL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of UL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default":
},
"imsi": {
"title": "IMSI",
"description": "IMSI",
"type": "string",
"default": ""
},
"k": {
"title": "K",
"description": "Set the user secret key (as a 16 bytes hexadecimal string, or eventually 32 bytes hexadecimal string for TUAK).",
"type": "string",
"default": ""
},
"sim_algo": {
"title": "sim_algo",
"description": "Optional enumeration. xor, milenage or tuak (default = milenage). Set the USIM authentication algorithm. Note: test USIM cards use the XOR algorithm.",
"type": "string",
"default": "milenage"
},
"opc": {
"title": "opc",
"description": "Optional string. Operator key preprocessed with the user secret key (as a 16 byte hexadecimal string). When the Milenage authentication algorithm is used, either op or opc must be set.",
"type": "string",
"default": "milenage"
},
"amf": {
"title": "amf",
"description": "Range: 0 to 65535. Set the Authentication Management Field.",
"type": "string",
"default": "0x9001"
},
"sqn": {
"title": "sqn",
"description": "Optional String (6 byte hexadecimal string). Default = '000000000000'. Set the initial sequence number. For the XOR algorithm, the actual value does not matter. For the Milenage or TUAK algorithm, a sequence number resynchronization is initiated if the sequence number does not match the one stored in the USIM.",
"type": "string",
"default": "000000000000"
},
"impu": {
"title": "impu",
"description": "Array of string or object. Each string represent an IMPU and can be a sip URI or a telephone number.",
"type": "string",
"default": ""
},
"impi": {
"title": "impi",
"description": "String. Defines user IMPI. Must be fully filled with hostname if necessary.",
"type": "string",
"default": ""
},
"promise_cpu_temperature_threshold": {
"title": "CPU temperature promise threshold",
"description": "Temperature threshold above which CPU temperature promise will fail",
"type": "number",
"default": 80
},
"promise_cpu_avg_temperature_threshold": {
"title": "Average CPU temperature promise threshold",
"description": "If average temperature over specified duration reaches this threshold, promise will fail",
"type": "number",
"default": 80
},
"promise_cpu_avg_temperature_threshold_duration": {
"title": "Average CPU temperature promise threshold duration",
"description": "Duration during which average temperature should not exceed specified threshold",
"type": "number",
"default": 600
}
}
}
{
"type": "object",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Input Parameters",
"properties": {
"rue_addr": {
"title": "[Required] Remote UE address",
"description": "[Required] Address of remote UE server. Default port is 2152.",
"type": "string",
"default": ""
},
"tx_gain": {
"title": "Tx gain",
"description": "Tx gain (in dB)",
"type": "number",
"default":
},
"rx_gain": {
"title": "Rx gain",
"description": "Rx gain (in dB)",
"type": "number",
"default":
},
"dl_nr_arfcn": {
"title": "DL NR ARFCN",
"description": "Downlink NR Absolute Radio Frequency Channel Number of the cell",
"type": "number",
"default": 0
},
"nr_band": {
"title": "NR band",
"description": "NR band number",
"type": "number",
"default": 0
},
"nr_bandwidth": {
"title": "Bandwidth",
"description": "Downlink Bandwidth (in MHz)",
"type": "number",
"default":
},
"ssb_nr_arfcn": {
"title": "SSB NR ARFCN",
"description": "SSB NR ARFCN, you can retrieve from ENB/GNB side",
"type": "number",
"default": 0
},
"n_antenna_dl": {
"title": "Number of DL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of DL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default":
},
"n_antenna_ul": {
"title": "Number of UL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of UL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default":
},
"imsi": {
"title": "IMSI",
"description": "IMSI",
"type": "string",
"default": ""
},
"k": {
"title": "K",
"description": "Set the user secret key (as a 16 bytes hexadecimal string, or eventually 32 bytes hexadecimal string for TUAK).",
"type": "string",
"default": ""
},
"sim_algo": {
"title": "sim_algo",
"description": "Optional enumeration. xor, milenage or tuak (default = milenage). Set the USIM authentication algorithm. Note: test USIM cards use the XOR algorithm.",
"type": "string",
"default": "milenage"
},
"opc": {
"title": "opc",
"description": "Optional string. Operator key preprocessed with the user secret key (as a 16 byte hexadecimal string). When the Milenage authentication algorithm is used, either op or opc must be set.",
"type": "string",
"default": "milenage"
},
"amf": {
"title": "amf",
"description": "Range: 0 to 65535. Set the Authentication Management Field.",
"type": "string",
"default": "0x9001"
},
"sqn": {
"title": "sqn",
"description": "Optional String (6 byte hexadecimal string). Default = '000000000000'. Set the initial sequence number. For the XOR algorithm, the actual value does not matter. For the Milenage or TUAK algorithm, a sequence number resynchronization is initiated if the sequence number does not match the one stored in the USIM.",
"type": "string",
"default": "000000000000"
},
"impu": {
"title": "impu",
"description": "Array of string or object. Each string represent an IMPU and can be a sip URI or a telephone number.",
"type": "string",
"default": ""
},
"impi": {
"title": "impi",
"description": "String. Defines user IMPI. Must be fully filled with hostname if necessary.",
"type": "string",
"default": ""
},
"promise_cpu_temperature_threshold": {
"title": "CPU temperature promise threshold",
"description": "Temperature threshold above which CPU temperature promise will fail",
"type": "number",
"default": 80
},
"promise_cpu_avg_temperature_threshold": {
"title": "Average CPU temperature promise threshold",
"description": "If average temperature over specified duration reaches this threshold, promise will fail",
"type": "number",
"default": 80
},
"promise_cpu_avg_temperature_threshold_duration": {
"title": "Average CPU temperature promise threshold duration",
"description": "Duration during which average temperature should not exceed specified threshold",
"type": "number",
"default": 600
}
}
}
...@@ -3,15 +3,12 @@ ...@@ -3,15 +3,12 @@
"$schema": "http://json-schema.org/draft-04/schema", "$schema": "http://json-schema.org/draft-04/schema",
"title": "Input Parameters", "title": "Input Parameters",
"properties": { "properties": {
"rrh": {
"title": "RRH", "log_phy_debug": {
"description": "RRH", "title": "Physical layer log debug",
"type": "string", "description": "Enable debug mode for physical layer logs",
"default": "SDR", "type": "boolean",
"enum": [ "default": false
"SDR",
"Lopcomm ORAN"
]
}, },
"tx_gain": { "tx_gain": {
"title": "Tx gain", "title": "Tx gain",
...@@ -31,6 +28,18 @@ ...@@ -31,6 +28,18 @@
"description": "True if GPS should be used for synchronisation", "description": "True if GPS should be used for synchronisation",
"type": "boolean" "type": "boolean"
}, },
"n_antenna_dl": {
"title": "Number of DL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of DL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default": 2
},
"n_antenna_ul": {
"title": "Number of UL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of UL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default": 2
},
"dl_earfcn": { "dl_earfcn": {
"title": "DL EARFCN", "title": "DL EARFCN",
"description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell", "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell",
...@@ -122,6 +131,12 @@ ...@@ -122,6 +131,12 @@
"type": "number", "type": "number",
"default": 60 "default": 60
}, },
"enb_drb_stats_enabled": {
"title": "Enable eNB drb statistics",
"description": "Enable eNB drb statistics through 100Hz polling, needed for E-UTRAN IP Throughput KPI",
"type": "boolean",
"default": true
},
"max_rx_sample_db": { "max_rx_sample_db": {
"title": "Maximum RX sample value (dB)", "title": "Maximum RX sample value (dB)",
"description": "Maximum RX sample threshold above which RX saturated promise will fail", "description": "Maximum RX sample threshold above which RX saturated promise will fail",
...@@ -157,38 +172,6 @@ ...@@ -157,38 +172,6 @@
"description": "Duration during which average temperature should not exceed specified threshold", "description": "Duration during which average temperature should not exceed specified threshold",
"type": "number", "type": "number",
"default": 600 "default": 600
},
"n_antenna_dl": {
"title": "Number of DL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of DL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default": 2
},
"n_antenna_ul": {
"title": "Number of UL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of UL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default": 2
},
"txa0cc00_active": {
"title": "Lopcomm ORAN TX array carriers (TXA0CC00)",
"description": "Activate or inactivate Lopcomm ORAN TX array carriers (TXA0CC00)",
"type": "string",
"default": "ACTIVE",
"enum": [
"ACTIVE",
"INACTIVE"
]
},
"rxa0cc00_active": {
"title": "Lopcomm ORAN RX array carriers (RXA0CC00)",
"description": "Activate or inactivate Lopcomm ORAN RX array carriers (RXA0CC00)",
"type": "string",
"default": "ACTIVE",
"enum": [
"ACTIVE",
"INACTIVE"
]
} }
} }
} }
...@@ -3,15 +3,52 @@ ...@@ -3,15 +3,52 @@
"$schema": "http://json-schema.org/draft-04/schema", "$schema": "http://json-schema.org/draft-04/schema",
"title": "Input Parameters", "title": "Input Parameters",
"properties": { "properties": {
"rrh": {
"title": "RRH", "log_phy_debug": {
"description": "RRH", "title": "Physical layer log debug",
"description": "Enable debug mode for physical layer logs",
"type": "boolean",
"default": false
},
"nr_handover_a3_offset": {
"title": "A3 offset for NR handover",
"description": "RSRP gain offset between gNBs which will trigger handover",
"type": "number",
"default": 6,
},
"nr_handover_time_to_trigger": {
"title": "Time to Trigger for NR handover",
"description": "Time to triger after which NR handover will be triggerd if A3 offset is reached",
"type": "number",
"enum": [
0,
40,
64,
80,
100,
128,
160,
256,
320,
480,
512,
640,
1024,
1280,
2560,
5120
],
"default": 100
},
"tdd_ul_dl_config": {
"title": "TDD",
"description": "TDD",
"type": "string", "type": "string",
"default": "SDR",
"enum": [ "enum": [
"SDR", "5ms 2UL 7DL 4/6 (default)",
"M2RU Sunwave" "2.5ms 1UL 3DL 2/10",
] ],
"default": "5ms 2UL 7DL 4/6 (default)"
}, },
"tx_gain": { "tx_gain": {
"title": "Tx gain", "title": "Tx gain",
...@@ -85,16 +122,16 @@ ...@@ -85,16 +122,16 @@
"patternProperties": { "patternProperties": {
".*": { ".*": {
"properties": { "properties": {
"dl_nr_arfcn": { "dl_nr_arfcn": {
"title": "DL NR ARFCN", "title": "DL NR ARFCN",
"description": "Downlink NR Absolute Radio Frequency Channel Number of the neighbour cell", "description": "Downlink NR Absolute Radio Frequency Channel Number of the neighbour cell",
"type": "number" "type": "number"
}, },
"ssb_nr_arfcn": { "ssb_nr_arfcn": {
"title": "SSB NR ARFCN", "title": "SSB NR ARFCN",
"description": "SSB NR Absolute Radio Frequency Channel Number of the neighbour cell", "description": "SSB NR Absolute Radio Frequency Channel Number of the neighbour cell",
"type": "number" "type": "number"
}, },
"pci": { "pci": {
"title": "Physical Cell ID", "title": "Physical Cell ID",
"description": "Physical Cell ID of the neighbour cell", "description": "Physical Cell ID of the neighbour cell",
...@@ -105,16 +142,16 @@ ...@@ -105,16 +142,16 @@
"description": "Concatenation of gnb_id and cell_id of the neighbour cell", "description": "Concatenation of gnb_id and cell_id of the neighbour cell",
"type": "string" "type": "string"
}, },
"gnb_id_bits": { "gnb_id_bits": {
"title": "gNB ID bits", "title": "gNB ID bits",
"description": "Number of bits for the gNodeB global identifier. (range 22 to 32)", "description": "Number of bits for the gNodeB global identifier. (range 22 to 32)",
"type": "number" "type": "number"
}, },
"nr_band": { "nr_band": {
"title": "NR band", "title": "NR band",
"description": "NR band number", "description": "NR band number",
"type": "number" "type": "number"
}, },
"tac": { "tac": {
"title": "Tracking Area Code", "title": "Tracking Area Code",
"description": "Integer (range 0 to 16777215)", "description": "Integer (range 0 to 16777215)",
...@@ -173,7 +210,7 @@ ...@@ -173,7 +210,7 @@
"title": "SSB Position Bitmap", "title": "SSB Position Bitmap",
"description": "SSB position bitmap in bits (4, 8 or 64 bits depending on the DL frequency).", "description": "SSB position bitmap in bits (4, 8 or 64 bits depending on the DL frequency).",
"type": "string", "type": "string",
"default": 1000 "default": 10000000
}, },
"plmn_list": { "plmn_list": {
"title": "PLMN list", "title": "PLMN list",
...@@ -254,6 +291,12 @@ ...@@ -254,6 +291,12 @@
"type": "number", "type": "number",
"default": 60 "default": 60
}, },
"gnb_drb_stats_enabled": {
"title": "Enable gNB drb statistics",
"description": "Enable gNB drb statistics through 100Hz polling, needed for E-UTRAN IP Throughput KPI",
"type": "boolean",
"default": true
},
"max_rx_sample_db": { "max_rx_sample_db": {
"title": "Maximum RX sample value (dB)", "title": "Maximum RX sample value (dB)",
"description": "Maximum RX sample threshold above which RX saturated promise will fail", "description": "Maximum RX sample threshold above which RX saturated promise will fail",
......
...@@ -3,15 +3,12 @@ ...@@ -3,15 +3,12 @@
"$schema": "http://json-schema.org/draft-04/schema", "$schema": "http://json-schema.org/draft-04/schema",
"title": "Input Parameters", "title": "Input Parameters",
"properties": { "properties": {
"rrh": {
"title": "RRH", "log_phy_debug": {
"description": "RRH", "title": "Physical layer log debug",
"type": "string", "description": "Enable debug mode for physical layer logs",
"default": "SDR", "type": "boolean",
"enum": [ "default": false
"SDR",
"Lopcomm ORAN"
]
}, },
"tx_gain": { "tx_gain": {
"title": "Tx gain", "title": "Tx gain",
...@@ -31,6 +28,18 @@ ...@@ -31,6 +28,18 @@
"description": "True if GPS should be used for synchronisation", "description": "True if GPS should be used for synchronisation",
"type": "boolean" "type": "boolean"
}, },
"n_antenna_dl": {
"title": "Number of DL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of DL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default": 2
},
"n_antenna_ul": {
"title": "Number of UL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of UL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default": 2
},
"dl_earfcn": { "dl_earfcn": {
"title": "DL EARFCN", "title": "DL EARFCN",
"description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell", "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell",
...@@ -122,6 +131,12 @@ ...@@ -122,6 +131,12 @@
"type": "number", "type": "number",
"default": 60 "default": 60
}, },
"enb_drb_stats_enabled": {
"title": "Enable eNB drb statistics",
"description": "Enable eNB drb statistics through 100Hz polling, needed for E-UTRAN IP Throughput KPI",
"type": "boolean",
"default": true
},
"max_rx_sample_db": { "max_rx_sample_db": {
"title": "Maximum RX sample value (dB)", "title": "Maximum RX sample value (dB)",
"description": "Maximum RX sample threshold above which RX saturated promise will fail", "description": "Maximum RX sample threshold above which RX saturated promise will fail",
...@@ -157,38 +172,6 @@ ...@@ -157,38 +172,6 @@
"description": "Duration during which average temperature should not exceed specified threshold", "description": "Duration during which average temperature should not exceed specified threshold",
"type": "number", "type": "number",
"default": 600 "default": 600
},
"n_antenna_dl": {
"title": "Number of DL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of DL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default": 2
},
"n_antenna_ul": {
"title": "Number of UL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of UL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default": 2
},
"txa0cc00_active": {
"title": "Lopcomm ORAN TX array carriers (TXA0CC00)",
"description": "Activate or inactivate Lopcomm ORAN TX array carriers (TXA0CC00)",
"type": "string",
"default": "ACTIVE",
"enum": [
"ACTIVE",
"INACTIVE"
]
},
"rxa0cc00_active": {
"title": "Lopcomm ORAN RX array carriers (RXA0CC00)",
"description": "Activate or inactivate Lopcomm ORAN RX array carriers (RXA0CC00)",
"type": "string",
"default": "ACTIVE",
"enum": [
"ACTIVE",
"INACTIVE"
]
} }
} }
} }
...@@ -3,15 +3,52 @@ ...@@ -3,15 +3,52 @@
"$schema": "http://json-schema.org/draft-04/schema", "$schema": "http://json-schema.org/draft-04/schema",
"title": "Input Parameters", "title": "Input Parameters",
"properties": { "properties": {
"rrh": {
"title": "RRH", "log_phy_debug": {
"description": "RRH", "title": "Physical layer log debug",
"description": "Enable debug mode for physical layer logs",
"type": "boolean",
"default": false
},
"nr_handover_a3_offset": {
"title": "A3 offset for NR handover",
"description": "RSRP gain offset between gNBs which will trigger handover",
"type": "number",
"default": 6,
},
"nr_handover_time_to_trigger": {
"title": "Time to Trigger for NR handover",
"description": "Time to triger after which NR handover will be triggerd if A3 offset is reached",
"type": "number",
"enum": [
0,
40,
64,
80,
100,
128,
160,
256,
320,
480,
512,
640,
1024,
1280,
2560,
5120
],
"default": 100
},
"tdd_ul_dl_config": {
"title": "TDD",
"description": "TDD",
"type": "string", "type": "string",
"default": "SDR",
"enum": [ "enum": [
"SDR", "5ms 2UL 7DL 4/6 (default)",
"M2RU Sunwave" "2.5ms 1UL 3DL 2/10",
] ],
"default": "5ms 2UL 7DL 4/6 (default)"
}, },
"tx_gain": { "tx_gain": {
"title": "Tx gain", "title": "Tx gain",
...@@ -85,16 +122,16 @@ ...@@ -85,16 +122,16 @@
"patternProperties": { "patternProperties": {
".*": { ".*": {
"properties": { "properties": {
"dl_nr_arfcn": { "dl_nr_arfcn": {
"title": "DL NR ARFCN", "title": "DL NR ARFCN",
"description": "Downlink NR Absolute Radio Frequency Channel Number of the neighbour cell", "description": "Downlink NR Absolute Radio Frequency Channel Number of the neighbour cell",
"type": "number" "type": "number"
}, },
"ssb_nr_arfcn": { "ssb_nr_arfcn": {
"title": "SSB NR ARFCN", "title": "SSB NR ARFCN",
"description": "SSB NR Absolute Radio Frequency Channel Number of the neighbour cell", "description": "SSB NR Absolute Radio Frequency Channel Number of the neighbour cell",
"type": "number" "type": "number"
}, },
"pci": { "pci": {
"title": "Physical Cell ID", "title": "Physical Cell ID",
"description": "Physical Cell ID of the neighbour cell", "description": "Physical Cell ID of the neighbour cell",
...@@ -105,16 +142,16 @@ ...@@ -105,16 +142,16 @@
"description": "Concatenation of gnb_id and cell_id of the neighbour cell", "description": "Concatenation of gnb_id and cell_id of the neighbour cell",
"type": "string" "type": "string"
}, },
"gnb_id_bits": { "gnb_id_bits": {
"title": "gNB ID bits", "title": "gNB ID bits",
"description": "Number of bits for the gNodeB global identifier. (range 22 to 32)", "description": "Number of bits for the gNodeB global identifier. (range 22 to 32)",
"type": "number" "type": "number"
}, },
"nr_band": { "nr_band": {
"title": "NR band", "title": "NR band",
"description": "NR band number", "description": "NR band number",
"type": "number" "type": "number"
}, },
"tac": { "tac": {
"title": "Tracking Area Code", "title": "Tracking Area Code",
"description": "Integer (range 0 to 16777215)", "description": "Integer (range 0 to 16777215)",
...@@ -254,6 +291,12 @@ ...@@ -254,6 +291,12 @@
"type": "number", "type": "number",
"default": 60 "default": 60
}, },
"gnb_drb_stats_enabled": {
"title": "Enable gNB drb statistics",
"description": "Enable gNB drb statistics through 100Hz polling, needed for E-UTRAN IP Throughput KPI",
"type": "boolean",
"default": true
},
"max_rx_sample_db": { "max_rx_sample_db": {
"title": "Maximum RX sample value (dB)", "title": "Maximum RX sample value (dB)",
"description": "Maximum RX sample threshold above which RX saturated promise will fail", "description": "Maximum RX sample threshold above which RX saturated promise will fail",
......
...@@ -3,15 +3,12 @@ ...@@ -3,15 +3,12 @@
"$schema": "http://json-schema.org/draft-04/schema", "$schema": "http://json-schema.org/draft-04/schema",
"title": "Input Parameters", "title": "Input Parameters",
"properties": { "properties": {
"rrh": {
"title": "RRH", "log_phy_debug": {
"description": "RRH", "title": "Physical layer log debug",
"type": "string", "description": "Enable debug mode for physical layer logs",
"default": "SDR", "type": "boolean",
"enum": [ "default": false
"SDR",
"Lopcomm ORAN"
]
}, },
"tx_gain": { "tx_gain": {
"title": "Tx gain", "title": "Tx gain",
...@@ -31,6 +28,18 @@ ...@@ -31,6 +28,18 @@
"description": "True if GPS should be used for synchronisation", "description": "True if GPS should be used for synchronisation",
"type": "boolean" "type": "boolean"
}, },
"n_antenna_dl": {
"title": "Number of DL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of DL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default": 2
},
"n_antenna_ul": {
"title": "Number of UL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of UL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default": 2
},
"dl_earfcn": { "dl_earfcn": {
"title": "DL EARFCN", "title": "DL EARFCN",
"description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell", "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell",
...@@ -122,6 +131,12 @@ ...@@ -122,6 +131,12 @@
"type": "number", "type": "number",
"default": 60 "default": 60
}, },
"enb_drb_stats_enabled": {
"title": "Enable eNB drb statistics",
"description": "Enable eNB drb statistics through 100Hz polling, needed for E-UTRAN IP Throughput KPI",
"type": "boolean",
"default": true
},
"max_rx_sample_db": { "max_rx_sample_db": {
"title": "Maximum RX sample value (dB)", "title": "Maximum RX sample value (dB)",
"description": "Maximum RX sample threshold above which RX saturated promise will fail", "description": "Maximum RX sample threshold above which RX saturated promise will fail",
...@@ -157,38 +172,6 @@ ...@@ -157,38 +172,6 @@
"description": "Duration during which average temperature should not exceed specified threshold", "description": "Duration during which average temperature should not exceed specified threshold",
"type": "number", "type": "number",
"default": 600 "default": 600
},
"n_antenna_dl": {
"title": "Number of DL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of DL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default": 2
},
"n_antenna_ul": {
"title": "Number of UL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of UL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default": 2
},
"txa0cc00_active": {
"title": "Lopcomm ORAN TX array carriers (TXA0CC00)",
"description": "Activate or inactivate Lopcomm ORAN TX array carriers (TXA0CC00)",
"type": "string",
"default": "ACTIVE",
"enum": [
"ACTIVE",
"INACTIVE"
]
},
"rxa0cc00_active": {
"title": "Lopcomm ORAN RX array carriers (RXA0CC00)",
"description": "Activate or inactivate Lopcomm ORAN RX array carriers (RXA0CC00)",
"type": "string",
"default": "ACTIVE",
"enum": [
"ACTIVE",
"INACTIVE"
]
} }
} }
} }
...@@ -3,15 +3,52 @@ ...@@ -3,15 +3,52 @@
"$schema": "http://json-schema.org/draft-04/schema", "$schema": "http://json-schema.org/draft-04/schema",
"title": "Input Parameters", "title": "Input Parameters",
"properties": { "properties": {
"rrh": {
"title": "RRH", "log_phy_debug": {
"description": "RRH", "title": "Physical layer log debug",
"description": "Enable debug mode for physical layer logs",
"type": "boolean",
"default": false
},
"nr_handover_a3_offset": {
"title": "A3 offset for NR handover",
"description": "RSRP gain offset between gNBs which will trigger handover",
"type": "number",
"default": 6,
},
"nr_handover_time_to_trigger": {
"title": "Time to Trigger for NR handover",
"description": "Time to triger after which NR handover will be triggerd if A3 offset is reached",
"type": "number",
"enum": [
0,
40,
64,
80,
100,
128,
160,
256,
320,
480,
512,
640,
1024,
1280,
2560,
5120
],
"default": 100
},
"tdd_ul_dl_config": {
"title": "TDD",
"description": "TDD",
"type": "string", "type": "string",
"default": "SDR",
"enum": [ "enum": [
"SDR", "5ms 2UL 7DL 4/6 (default)",
"M2RU Sunwave" "2.5ms 1UL 3DL 2/10",
] ],
"default": "5ms 2UL 7DL 4/6 (default)"
}, },
"tx_gain": { "tx_gain": {
"title": "Tx gain", "title": "Tx gain",
...@@ -85,16 +122,16 @@ ...@@ -85,16 +122,16 @@
"patternProperties": { "patternProperties": {
".*": { ".*": {
"properties": { "properties": {
"dl_nr_arfcn": { "dl_nr_arfcn": {
"title": "DL NR ARFCN", "title": "DL NR ARFCN",
"description": "Downlink NR Absolute Radio Frequency Channel Number of the neighbour cell", "description": "Downlink NR Absolute Radio Frequency Channel Number of the neighbour cell",
"type": "number" "type": "number"
}, },
"ssb_nr_arfcn": { "ssb_nr_arfcn": {
"title": "SSB NR ARFCN", "title": "SSB NR ARFCN",
"description": "SSB NR Absolute Radio Frequency Channel Number of the neighbour cell", "description": "SSB NR Absolute Radio Frequency Channel Number of the neighbour cell",
"type": "number" "type": "number"
}, },
"pci": { "pci": {
"title": "Physical Cell ID", "title": "Physical Cell ID",
"description": "Physical Cell ID of the neighbour cell", "description": "Physical Cell ID of the neighbour cell",
...@@ -105,16 +142,16 @@ ...@@ -105,16 +142,16 @@
"description": "Concatenation of gnb_id and cell_id of the neighbour cell", "description": "Concatenation of gnb_id and cell_id of the neighbour cell",
"type": "string" "type": "string"
}, },
"gnb_id_bits": { "gnb_id_bits": {
"title": "gNB ID bits", "title": "gNB ID bits",
"description": "Number of bits for the gNodeB global identifier. (range 22 to 32)", "description": "Number of bits for the gNodeB global identifier. (range 22 to 32)",
"type": "number" "type": "number"
}, },
"nr_band": { "nr_band": {
"title": "NR band", "title": "NR band",
"description": "NR band number", "description": "NR band number",
"type": "number" "type": "number"
}, },
"tac": { "tac": {
"title": "Tracking Area Code", "title": "Tracking Area Code",
"description": "Integer (range 0 to 16777215)", "description": "Integer (range 0 to 16777215)",
...@@ -254,6 +291,12 @@ ...@@ -254,6 +291,12 @@
"type": "number", "type": "number",
"default": 60 "default": 60
}, },
"gnb_drb_stats_enabled": {
"title": "Enable gNB drb statistics",
"description": "Enable gNB drb statistics through 100Hz polling, needed for E-UTRAN IP Throughput KPI",
"type": "boolean",
"default": true
},
"max_rx_sample_db": { "max_rx_sample_db": {
"title": "Maximum RX sample value (dB)", "title": "Maximum RX sample value (dB)",
"description": "Maximum RX sample threshold above which RX saturated promise will fail", "description": "Maximum RX sample threshold above which RX saturated promise will fail",
......
...@@ -3,15 +3,12 @@ ...@@ -3,15 +3,12 @@
"$schema": "http://json-schema.org/draft-04/schema", "$schema": "http://json-schema.org/draft-04/schema",
"title": "Input Parameters", "title": "Input Parameters",
"properties": { "properties": {
"rrh": {
"title": "RRH", "log_phy_debug": {
"description": "RRH", "title": "Physical layer log debug",
"type": "string", "description": "Enable debug mode for physical layer logs",
"default": "SDR", "type": "boolean",
"enum": [ "default": false
"SDR",
"Lopcomm ORAN"
]
}, },
"tx_gain": { "tx_gain": {
"title": "Tx gain", "title": "Tx gain",
...@@ -31,6 +28,18 @@ ...@@ -31,6 +28,18 @@
"description": "True if GPS should be used for synchronisation", "description": "True if GPS should be used for synchronisation",
"type": "boolean" "type": "boolean"
}, },
"n_antenna_dl": {
"title": "Number of DL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of DL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default": 2
},
"n_antenna_ul": {
"title": "Number of UL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of UL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default": 2
},
"dl_earfcn": { "dl_earfcn": {
"title": "DL EARFCN", "title": "DL EARFCN",
"description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell", "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell",
...@@ -122,6 +131,12 @@ ...@@ -122,6 +131,12 @@
"type": "number", "type": "number",
"default": 60 "default": 60
}, },
"enb_drb_stats_enabled": {
"title": "Enable eNB drb statistics",
"description": "Enable eNB drb statistics through 100Hz polling, needed for E-UTRAN IP Throughput KPI",
"type": "boolean",
"default": true
},
"max_rx_sample_db": { "max_rx_sample_db": {
"title": "Maximum RX sample value (dB)", "title": "Maximum RX sample value (dB)",
"description": "Maximum RX sample threshold above which RX saturated promise will fail", "description": "Maximum RX sample threshold above which RX saturated promise will fail",
...@@ -157,38 +172,6 @@ ...@@ -157,38 +172,6 @@
"description": "Duration during which average temperature should not exceed specified threshold", "description": "Duration during which average temperature should not exceed specified threshold",
"type": "number", "type": "number",
"default": 600 "default": 600
},
"n_antenna_dl": {
"title": "Number of DL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of DL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default": 2
},
"n_antenna_ul": {
"title": "Number of UL antennas",
"description": "Enumeration: 1, 2, 4 or 8. Number of UL antennas. It must be the same for all NB-IoT and LTE cells sharing the same RF port.",
"type": "number",
"default": 2
},
"txa0cc00_active": {
"title": "Lopcomm ORAN TX array carriers (TXA0CC00)",
"description": "Activate or inactivate Lopcomm ORAN TX array carriers (TXA0CC00)",
"type": "string",
"default": "ACTIVE",
"enum": [
"ACTIVE",
"INACTIVE"
]
},
"rxa0cc00_active": {
"title": "Lopcomm ORAN RX array carriers (RXA0CC00)",
"description": "Activate or inactivate Lopcomm ORAN RX array carriers (RXA0CC00)",
"type": "string",
"default": "ACTIVE",
"enum": [
"ACTIVE",
"INACTIVE"
]
} }
} }
} }
...@@ -3,15 +3,52 @@ ...@@ -3,15 +3,52 @@
"$schema": "http://json-schema.org/draft-04/schema", "$schema": "http://json-schema.org/draft-04/schema",
"title": "Input Parameters", "title": "Input Parameters",
"properties": { "properties": {
"rrh": {
"title": "RRH", "log_phy_debug": {
"description": "RRH", "title": "Physical layer log debug",
"description": "Enable debug mode for physical layer logs",
"type": "boolean",
"default": false
},
"nr_handover_a3_offset": {
"title": "A3 offset for NR handover",
"description": "RSRP gain offset between gNBs which will trigger handover",
"type": "number",
"default": 6,
},
"nr_handover_time_to_trigger": {
"title": "Time to Trigger for NR handover",
"description": "Time to triger after which NR handover will be triggerd if A3 offset is reached",
"type": "number",
"enum": [
0,
40,
64,
80,
100,
128,
160,
256,
320,
480,
512,
640,
1024,
1280,
2560,
5120
],
"default": 100
},
"tdd_ul_dl_config": {
"title": "TDD",
"description": "TDD",
"type": "string", "type": "string",
"default": "SDR",
"enum": [ "enum": [
"SDR", "5ms 2UL 7DL 4/6 (default)",
"M2RU Sunwave" "2.5ms 1UL 3DL 2/10",
] ],
"default": "5ms 2UL 7DL 4/6 (default)"
}, },
"tx_gain": { "tx_gain": {
"title": "Tx gain", "title": "Tx gain",
...@@ -85,16 +122,16 @@ ...@@ -85,16 +122,16 @@
"patternProperties": { "patternProperties": {
".*": { ".*": {
"properties": { "properties": {
"dl_nr_arfcn": { "dl_nr_arfcn": {
"title": "DL NR ARFCN", "title": "DL NR ARFCN",
"description": "Downlink NR Absolute Radio Frequency Channel Number of the neighbour cell", "description": "Downlink NR Absolute Radio Frequency Channel Number of the neighbour cell",
"type": "number" "type": "number"
}, },
"ssb_nr_arfcn": { "ssb_nr_arfcn": {
"title": "SSB NR ARFCN", "title": "SSB NR ARFCN",
"description": "SSB NR Absolute Radio Frequency Channel Number of the neighbour cell", "description": "SSB NR Absolute Radio Frequency Channel Number of the neighbour cell",
"type": "number" "type": "number"
}, },
"pci": { "pci": {
"title": "Physical Cell ID", "title": "Physical Cell ID",
"description": "Physical Cell ID of the neighbour cell", "description": "Physical Cell ID of the neighbour cell",
...@@ -105,16 +142,16 @@ ...@@ -105,16 +142,16 @@
"description": "Concatenation of gnb_id and cell_id of the neighbour cell", "description": "Concatenation of gnb_id and cell_id of the neighbour cell",
"type": "string" "type": "string"
}, },
"gnb_id_bits": { "gnb_id_bits": {
"title": "gNB ID bits", "title": "gNB ID bits",
"description": "Number of bits for the gNodeB global identifier. (range 22 to 32)", "description": "Number of bits for the gNodeB global identifier. (range 22 to 32)",
"type": "number" "type": "number"
}, },
"nr_band": { "nr_band": {
"title": "NR band", "title": "NR band",
"description": "NR band number", "description": "NR band number",
"type": "number" "type": "number"
}, },
"tac": { "tac": {
"title": "Tracking Area Code", "title": "Tracking Area Code",
"description": "Integer (range 0 to 16777215)", "description": "Integer (range 0 to 16777215)",
...@@ -254,6 +291,12 @@ ...@@ -254,6 +291,12 @@
"type": "number", "type": "number",
"default": 60 "default": 60
}, },
"gnb_drb_stats_enabled": {
"title": "Enable gNB drb statistics",
"description": "Enable gNB drb statistics through 100Hz polling, needed for E-UTRAN IP Throughput KPI",
"type": "boolean",
"default": true
},
"max_rx_sample_db": { "max_rx_sample_db": {
"title": "Maximum RX sample value (dB)", "title": "Maximum RX sample value (dB)",
"description": "Maximum RX sample threshold above which RX saturated promise will fail", "description": "Maximum RX sample threshold above which RX saturated promise will fail",
......
...@@ -6,6 +6,12 @@ eggs-directory = ${buildout:eggs-directory} ...@@ -6,6 +6,12 @@ eggs-directory = ${buildout:eggs-directory}
develop-eggs-directory = ${buildout:develop-eggs-directory} develop-eggs-directory = ${buildout:develop-eggs-directory}
offline = true offline = true
[directory]
recipe = slapos.cookbook:mkdirectory
software = ${buildout:directory}
home = $${buildout:directory}
etc = $${:home}/etc
[slap-configuration] [slap-configuration]
recipe = slapos.cookbook:slapconfiguration.serialised recipe = slapos.cookbook:slapconfiguration.serialised
computer = $${slap-connection:computer-id} computer = $${slap-connection:computer-id}
...@@ -148,12 +154,15 @@ extra-context = ...@@ -148,12 +154,15 @@ extra-context =
raw monitor_template ${monitor2-template:output} raw monitor_template ${monitor2-template:output}
key mme amarisoft:mme key mme amarisoft:mme
raw mme_template ${mme.jinja2.cfg:target} raw mme_template ${mme.jinja2.cfg:target}
raw dnsmasq_template ${dnsmasq.jinja2.cfg:target}
raw ims_template ${ims.jinja2.cfg:target} raw ims_template ${ims.jinja2.cfg:target}
raw ltelogs_template ${ltelogs.jinja2.sh:target} raw ltelogs_template ${ltelogs.jinja2.sh:target}
raw openssl_location ${openssl:location} raw openssl_location ${openssl:location}
raw nghttp2_location ${nghttp2:location} raw nghttp2_location ${nghttp2:location}
raw iperf3_location ${iperf3:location} raw iperf3_location ${iperf3:location}
raw dnsmasq_location ${dnsmasq:location}
key ue_db_path ue-db-config:output key ue_db_path ue-db-config:output
key dnsmasq_config_path dnsmasq-config:output
key slave_instance_list slap-configuration:slave-instance-list key slave_instance_list slap-configuration:slave-instance-list
[dynamic-template-ue-lte] [dynamic-template-ue-lte]
...@@ -206,7 +215,17 @@ recipe = slapos.recipe.template:jinja2 ...@@ -206,7 +215,17 @@ recipe = slapos.recipe.template:jinja2
url = ${ue_db.jinja2.cfg:target} url = ${ue_db.jinja2.cfg:target}
filename = ue_db.cfg filename = ue_db.cfg
extensions = jinja2.ext.do extensions = jinja2.ext.do
output = $${buildout:directory}/$${:filename} output = $${directory:etc}/$${:filename}
context = context =
import json_module json import json_module json
key slave_instance_list slap-configuration:slave-instance-list key slave_instance_list slap-configuration:slave-instance-list
[dnsmasq-config]
recipe = slapos.recipe.template:jinja2
url = ${dnsmasq.jinja2.cfg:target}
filename = dnsmasq.cfg
extensions = jinja2.ext.do
output = $${directory:etc}/$${:filename}
context =
import json_module json
section slap_configuration slap-configuration
...@@ -32,7 +32,7 @@ rf_mode_context_list = [ ...@@ -32,7 +32,7 @@ rf_mode_context_list = [
'default_dl_nr_arfcn' : 378000, 'default_dl_nr_arfcn' : 378000,
'default_nr_band' : 39, 'default_nr_band' : 39,
'default_nr_dl_freq' : 1890.0, 'default_nr_dl_freq' : 1890.0,
'default_nr_ssb_pos_bitmap' : "1000", 'default_nr_ssb_pos_bitmap' : "10000000",
'default_ssb_nr_arfcn' : 377790, 'default_ssb_nr_arfcn' : 377790,
'min_frequency' : 1880.0, 'min_frequency' : 1880.0,
'max_frequency' : 1920, 'max_frequency' : 1920,
...@@ -72,6 +72,18 @@ rf_mode_context_list = [ ...@@ -72,6 +72,18 @@ rf_mode_context_list = [
'default_ssb_nr_arfcn' : 646656, 'default_ssb_nr_arfcn' : 646656,
'min_frequency' : 3600, 'min_frequency' : 3600,
'max_frequency' : 3800, 'max_frequency' : 3800,
}, {
'rf_mode' : 'tdd',
'default_dl_earfcn' : 0,
'default_lte_dl_freq' : 0.0,
'default_lte_band' : 0,
'default_dl_nr_arfcn' : 0,
'default_nr_band' : 0,
'default_nr_dl_freq' : 0.0,
'default_nr_ssb_pos_bitmap' : "10000000",
'default_ssb_nr_arfcn' : 0,
'min_frequency' : 0,
'max_frequency' : 0,
} }
] ]
......
...@@ -9,6 +9,10 @@ extends = ...@@ -9,6 +9,10 @@ extends =
../../component/python3/buildout.cfg ../../component/python3/buildout.cfg
../../component/python-pynacl/buildout.cfg ../../component/python-pynacl/buildout.cfg
../../component/bcrypt/buildout.cfg ../../component/bcrypt/buildout.cfg
../../component/numpy/buildout.cfg
../../component/pygolang/buildout.cfg
../../component/git/buildout.cfg
../../component/dnsmasq/buildout.cfg
parts += parts +=
template template
...@@ -16,6 +20,7 @@ parts += ...@@ -16,6 +20,7 @@ parts +=
ltelogs.jinja2.sh ltelogs.jinja2.sh
# copy all configs by default # copy all configs by default
mme.jinja2.cfg mme.jinja2.cfg
dnsmasq.jinja2.cfg
ims.jinja2.cfg ims.jinja2.cfg
enb.jinja2.cfg enb.jinja2.cfg
gnb.jinja2.cfg gnb.jinja2.cfg
...@@ -33,8 +38,9 @@ parts += ...@@ -33,8 +38,9 @@ parts +=
software.cfg.html software.cfg.html
rsvp.js rsvp.js
iperf3 iperf3
dnsmasq
eggs eggs
xamari
# unimplemented parts - the http monitor and better log handling using logrotate # unimplemented parts - the http monitor and better log handling using logrotate
# apache-php # apache-php
# logrotate # logrotate
...@@ -132,6 +138,9 @@ filename = ue_db.jinja2.cfg ...@@ -132,6 +138,9 @@ filename = ue_db.jinja2.cfg
[mme.jinja2.cfg] [mme.jinja2.cfg]
<= copy-config-to-instance <= copy-config-to-instance
filename = mme.jinja2.cfg filename = mme.jinja2.cfg
[dnsmasq.jinja2.cfg]
<= copy-config-to-instance
filename = dnsmasq.jinja2.cfg
[ims.jinja2.cfg] [ims.jinja2.cfg]
<= copy-config-to-instance <= copy-config-to-instance
filename = ims.jinja2.cfg filename = ims.jinja2.cfg
...@@ -175,6 +184,25 @@ eggs = ...@@ -175,6 +184,25 @@ eggs =
ncclient ncclient
interpreter = pythonwitheggs interpreter = pythonwitheggs
[xlte-repository]
recipe = slapos.recipe.build:gitclone
repository = https://lab.nexedi.com/kirr/xlte.git
revision = e716ab51
git-executable = ${git:location}/bin/git
[xlte]
recipe = zc.recipe.egg:develop
setup = ${xlte-repository:location}
egg = xlte
depends =
${numpy:egg}
${pygolang:egg}
[xamari]
recipe = zc.recipe.egg
eggs = ${xlte:egg}
scripts = xamari
[versions] [versions]
websocket-client = 1.4.2 websocket-client = 1.4.2
ncclient = 0.6.13 ncclient = 0.6.13
......
# This file was generated using a jinja2 template and the render-templates script, don't modify directly.
[buildout]
extends =
software-base.cfg
[default-params]
default-dl-earfcn = 0
default-lte-dl-freq = 0.0
default-lte-band = 0
default-lte-n-rb-dl =
default-lte-tx-gain =
default-lte-rx-gain =
default-lte-inactivity-timer =
default-lte-imsi =
default-lte-k =
default-dl-nr-arfcn = 0
default-nr-band = 0
default-nr-dl-freq = 0.0
default-nr-bandwidth =
default-nr-tx-gain =
default-nr-rx-gain =
default-nr-ssb-pos-bitmap = 10000000
default-ssb-nr-arfcn = 0
default-nr-inactivity-timer =
default-nr-imsi =
default-nr-k =
min-frequency = 0
max-frequency = 0
default-n-antenna-dl =
default-n-antenna-ul =
{
"name": "ORS Amarisoft",
"description": "4G and 5G amarisoft stack for ORS",
"serialisation": "json-in-xml",
"software-type": {
"ue-lte": {
"title": "UE-LTE",
"description": "UE LTE Configuration",
"software-type": "ue-lte",
"request": "instance-tdd-ue-lte-input-schema.json",
"response": "instance-tdd-ue-lte-schema.json",
"index": 4
},
"ue-nr": {
"title": "UE-NR",
"description": "UE NR Configuration",
"software-type": "ue-nr",
"request": "instance-tdd-ue-nr-input-schema.json",
"response": "instance-tdd-ue-nr-schema.json",
"index": 5
},
"enb": {
"title": "eNB",
"software-type": "enb",
"description": "eNodeB Configuration",
"request": "instance-tdd-enb-input-schema.json",
"response": "instance-tdd-enb-schema.json",
"index": 0
},
"gnb": {
"title": "gNB",
"software-type": "gnb",
"description": "gNodeB Configuration",
"request": "instance-tdd-gnb-input-schema.json",
"response": "instance-tdd-gnb-schema.json",
"index": 1
},
"core-network": {
"title": "Core Network",
"software-type": "core-network",
"description": "Core Network Configuration",
"request": "instance-core-network-input-schema.json",
"response": "instance-core-network-schema.json",
"index": 2
},
"core-network-slave": {
"title": "Core Network Sim Card",
"description": "Core Network Sim Card Configuration",
"software-type": "core-network",
"request": "instance-core-network-slave-input-schema.json",
"response": "instance-core-network-slave-schema.json",
"shared": true,
"index": 3
}
}
}
...@@ -20,7 +20,7 @@ default-nr-dl-freq = 1890.0 ...@@ -20,7 +20,7 @@ default-nr-dl-freq = 1890.0
default-nr-bandwidth = 40 default-nr-bandwidth = 40
default-nr-tx-gain = 60 default-nr-tx-gain = 60
default-nr-rx-gain = 45 default-nr-rx-gain = 45
default-nr-ssb-pos-bitmap = 1000 default-nr-ssb-pos-bitmap = 10000000
default-ssb-nr-arfcn = 377790 default-ssb-nr-arfcn = 377790
default-nr-inactivity-timer = 10000 default-nr-inactivity-timer = 10000
default-nr-imsi = 001010123456789 default-nr-imsi = 001010123456789
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
"description": "4G and 5G amarisoft stack for ORS", "description": "4G and 5G amarisoft stack for ORS",
"serialisation": "json-in-xml", "serialisation": "json-in-xml",
"software-type": { "software-type": {
"enb": { "enb": {
"title": "eNB", "title": "eNB",
"software-type": "enb", "software-type": "enb",
...@@ -35,22 +36,6 @@ ...@@ -35,22 +36,6 @@
"response": "instance-core-network-slave-schema.json", "response": "instance-core-network-slave-schema.json",
"shared": true, "shared": true,
"index": 3 "index": 3
},
"ue-lte": {
"title": "UE-LTE",
"description": "UE LTE Configuration",
"software-type": "ue-lte",
"request": "instance-tdd1900-ue-lte-input-schema.json",
"response": "instance-tdd1900-ue-lte-schema.json",
"index": 4
},
"ue-nr": {
"title": "UE-NR",
"description": "UE NR Configuration",
"software-type": "ue-nr",
"request": "instance-tdd1900-ue-nr-input-schema.json",
"response": "instance-tdd1900-ue-nr-schema.json",
"index": 5
} }
} }
} }
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
"description": "4G and 5G amarisoft stack for ORS", "description": "4G and 5G amarisoft stack for ORS",
"serialisation": "json-in-xml", "serialisation": "json-in-xml",
"software-type": { "software-type": {
"enb": { "enb": {
"title": "eNB", "title": "eNB",
"software-type": "enb", "software-type": "enb",
...@@ -35,22 +36,6 @@ ...@@ -35,22 +36,6 @@
"response": "instance-core-network-slave-schema.json", "response": "instance-core-network-slave-schema.json",
"shared": true, "shared": true,
"index": 3 "index": 3
},
"ue-lte": {
"title": "UE-LTE",
"description": "UE LTE Configuration",
"software-type": "ue-lte",
"request": "instance-tdd2600-ue-lte-input-schema.json",
"response": "instance-tdd2600-ue-lte-schema.json",
"index": 4
},
"ue-nr": {
"title": "UE-NR",
"description": "UE NR Configuration",
"software-type": "ue-nr",
"request": "instance-tdd2600-ue-nr-input-schema.json",
"response": "instance-tdd2600-ue-nr-schema.json",
"index": 5
} }
} }
} }
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
"description": "4G and 5G amarisoft stack for ORS", "description": "4G and 5G amarisoft stack for ORS",
"serialisation": "json-in-xml", "serialisation": "json-in-xml",
"software-type": { "software-type": {
"enb": { "enb": {
"title": "eNB", "title": "eNB",
"software-type": "enb", "software-type": "enb",
...@@ -35,22 +36,6 @@ ...@@ -35,22 +36,6 @@
"response": "instance-core-network-slave-schema.json", "response": "instance-core-network-slave-schema.json",
"shared": true, "shared": true,
"index": 3 "index": 3
},
"ue-lte": {
"title": "UE-LTE",
"description": "UE LTE Configuration",
"software-type": "ue-lte",
"request": "instance-tdd3500-ue-lte-input-schema.json",
"response": "instance-tdd3500-ue-lte-schema.json",
"index": 4
},
"ue-nr": {
"title": "UE-NR",
"description": "UE NR Configuration",
"software-type": "ue-nr",
"request": "instance-tdd3500-ue-nr-input-schema.json",
"response": "instance-tdd3500-ue-nr-schema.json",
"index": 5
} }
} }
} }
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
"description": "4G and 5G amarisoft stack for ORS", "description": "4G and 5G amarisoft stack for ORS",
"serialisation": "json-in-xml", "serialisation": "json-in-xml",
"software-type": { "software-type": {
"enb": { "enb": {
"title": "eNB", "title": "eNB",
"software-type": "enb", "software-type": "enb",
...@@ -35,22 +36,6 @@ ...@@ -35,22 +36,6 @@
"response": "instance-core-network-slave-schema.json", "response": "instance-core-network-slave-schema.json",
"shared": true, "shared": true,
"index": 3 "index": 3
},
"ue-lte": {
"title": "UE-LTE",
"description": "UE LTE Configuration",
"software-type": "ue-lte",
"request": "instance-tdd3700-ue-lte-input-schema.json",
"response": "instance-tdd3700-ue-lte-schema.json",
"index": 4
},
"ue-nr": {
"title": "UE-NR",
"description": "UE NR Configuration",
"software-type": "ue-nr",
"request": "instance-tdd3700-ue-nr-input-schema.json",
"response": "instance-tdd3700-ue-nr-schema.json",
"index": 5
} }
} }
} }
...@@ -3,6 +3,24 @@ ...@@ -3,6 +3,24 @@
"description": "4G and 5G amarisoft stack for ORS", "description": "4G and 5G amarisoft stack for ORS",
"serialisation": "json-in-xml", "serialisation": "json-in-xml",
"software-type": { "software-type": {
{% if rf_mode == 'tdd' %}
"ue-lte": {
"title": "UE-LTE",
"description": "UE LTE Configuration",
"software-type": "ue-lte",
"request": "instance-{{ rf_mode }}-ue-lte-input-schema.json",
"response": "instance-{{ rf_mode }}-ue-lte-schema.json",
"index": 4
},
"ue-nr": {
"title": "UE-NR",
"description": "UE NR Configuration",
"software-type": "ue-nr",
"request": "instance-{{ rf_mode }}-ue-nr-input-schema.json",
"response": "instance-{{ rf_mode }}-ue-nr-schema.json",
"index": 5
},
{% endif %}
"enb": { "enb": {
"title": "eNB", "title": "eNB",
"software-type": "enb", "software-type": "enb",
...@@ -35,22 +53,6 @@ ...@@ -35,22 +53,6 @@
"response": "instance-core-network-slave-schema.json", "response": "instance-core-network-slave-schema.json",
"shared": true, "shared": true,
"index": 3 "index": 3
},
"ue-lte": {
"title": "UE-LTE",
"description": "UE LTE Configuration",
"software-type": "ue-lte",
"request": "instance-{{ rf_mode }}-ue-lte-input-schema.json",
"response": "instance-{{ rf_mode }}-ue-lte-schema.json",
"index": 4
},
"ue-nr": {
"title": "UE-NR",
"description": "UE NR Configuration",
"software-type": "ue-nr",
"request": "instance-{{ rf_mode }}-ue-nr-input-schema.json",
"response": "instance-{{ rf_mode }}-ue-nr-schema.json",
"index": 5
} }
} }
} }
...@@ -39,19 +39,19 @@ setUpModule, ORSTestCase = makeModuleSetUpAndTestCaseClass( ...@@ -39,19 +39,19 @@ setUpModule, ORSTestCase = makeModuleSetUpAndTestCaseClass(
param_dict = { param_dict = {
'testing': True, 'testing': True,
"sim_algo": "milenage", 'sim_algo': 'milenage',
"imsi": "001010000000331", 'imsi': '001010000000331',
"opc": "000102030405060708090A0B0C0D0E0F", 'opc': '000102030405060708090A0B0C0D0E0F',
"amf": "0x9001", 'amf': '0x9001',
"sqn": "000000000000", 'sqn': '000000000000',
"k": "00112233445566778899AABBCCDDEEFF", 'k': '00112233445566778899AABBCCDDEEFF',
"impu": "impu331", 'impu': 'impu331',
"impi": "impi331@amarisoft.com", 'impi': 'impi331@amarisoft.com',
'tx_gain': 17, 'tx_gain': 17,
'rx_gain': 17, 'rx_gain': 17,
'dl_earfcn': 325320, 'dl_earfcn': 325320,
'n_rb_dl': 50, 'n_rb_dl': 50,
'enb_id': "0x17", 'enb_id': '0x17',
'pci': 250, 'pci': 250,
'mme_list': { 'mme_list': {
'10.0.0.1': {'mme_addr': '10.0.0.1'}, '10.0.0.1': {'mme_addr': '10.0.0.1'},
...@@ -62,17 +62,48 @@ param_dict = { ...@@ -62,17 +62,48 @@ param_dict = {
'nr_band': 99, 'nr_band': 99,
'nr_bandwidth': 50, 'nr_bandwidth': 50,
'ssb_nr_arfcn': 377790, 'ssb_nr_arfcn': 377790,
'rue_addr': "192.168.99.88", 'rue_addr': '192.168.99.88',
'n_antenna_dl': 2, 'n_antenna_dl': 2,
'n_antenna_ul': 2, 'n_antenna_ul': 2,
'inactivity_timer': 17, 'inactivity_timer': 17,
'gnb_id': "0x17", 'gnb_id': '0x17',
'gnb_id_bits': 30, 'gnb_id_bits': 30,
'ssb_pos_bitmap': "10", 'ssb_pos_bitmap': '10',
'amf_list': { 'amf_list': {
'10.0.0.1': {'amf_addr': '10.0.0.1'}, '10.0.0.1': {'amf_addr': '10.0.0.1'},
'2001:db8::1': {'amf_addr': '2001:db8::1'}, '2001:db8::1': {'amf_addr': '2001:db8::1'},
}, },
'nr_handover_time_to_trigger': 50,
'nr_handover_a3_offset': 10,
'ncell_list': {
'ORS1': {
'dl_nr_arfcn': 100000,
'ssb_nr_arfcn': 100000,
'pci': 1,
'nr_cell_id': '0x0000001',
'gnb_id_bits': 28,
'nr_band': 1,
'tac': 1
},
'ORS2': {
'dl_nr_arfcn': 200000,
'ssb_nr_arfcn': 200000,
'pci': 2,
'nr_cell_id': '0x0000002',
'gnb_id_bits': 30,
'nr_band': 2,
'tac': 2
},
},
'xn_peers': {
'2001:db8::1': {
'xn_addr': '2001:db8::1',
},
'2001:db8::2': {
'xn_addr': '2001:db8::2',
},
},
'tdd_ul_dl_config': '2.5ms 1UL 3DL 2/10',
} }
enb_param_dict = { enb_param_dict = {
'plmn_list': { 'plmn_list': {
...@@ -141,6 +172,27 @@ def test_gnb_conf1(self): ...@@ -141,6 +172,27 @@ def test_gnb_conf1(self):
self.assertEqual(p[n], gnb_param_dict1['plmn_list'][p['plmn']][n]) self.assertEqual(p[n], gnb_param_dict1['plmn_list'][p['plmn']][n])
for p in conf['amf_list']: for p in conf['amf_list']:
self.assertEqual(p['amf_addr'], gnb_param_dict1['amf_list'][p['amf_addr']]['amf_addr']) self.assertEqual(p['amf_addr'], gnb_param_dict1['amf_list'][p['amf_addr']]['amf_addr'])
for p in conf['xn_peers']:
self.assertEqual(p, gnb_param_dict1['xn_peers'][p]['xn_addr'])
for p in conf['nr_cell_list'][0]['ncell_list']:
for k in gnb_param_dict1['ncell_list']:
if p['dl_nr_arfcn'] == gnb_param_dict1['ncell_list'][k]['dl_nr_arfcn']:
break
conf_ncell = gnb_param_dict1['ncell_list'][k]
self.assertEqual(p['dl_nr_arfcn'], conf_ncell['dl_nr_arfcn'])
self.assertEqual(p['ssb_nr_arfcn'], conf_ncell['ssb_nr_arfcn'])
self.assertEqual(p['ul_nr_arfcn'], conf_ncell['dl_nr_arfcn'])
self.assertEqual(p['n_id_cell'], conf_ncell['pci'])
self.assertEqual(p['gnb_id_bits'], conf_ncell['gnb_id_bits'])
self.assertEqual(p['nr_cell_id'], int(conf_ncell['nr_cell_id'], 16))
self.assertEqual(p['tac'], conf_ncell['tac'])
self.assertEqual(p['band'], conf_ncell['nr_band'])
tdd_config = conf['nr_cell_default']['tdd_ul_dl_config']['pattern1']
self.assertEqual(float(tdd_config['period']), 2.5)
self.assertEqual(int(tdd_config['dl_slots']), 3)
self.assertEqual(int(tdd_config['dl_symbols']), 10)
self.assertEqual(int(tdd_config['ul_slots']), 1)
self.assertEqual(int(tdd_config['ul_symbols']), 2)
with open(conf_file, 'r') as f: with open(conf_file, 'r') as f:
for l in f: for l in f:
...@@ -171,7 +223,7 @@ def test_mme_conf(self): ...@@ -171,7 +223,7 @@ def test_mme_conf(self):
def test_sim_card(self): def test_sim_card(self):
conf_file = glob.glob(os.path.join( conf_file = glob.glob(os.path.join(
self.slap.instance_directory, '*', 'ue_db.cfg'))[0] self.slap.instance_directory, '*', 'etc', 'ue_db.cfg'))[0]
with open(conf_file, 'r') as f: with open(conf_file, 'r') as f:
conf = yaml.load(f) conf = yaml.load(f)
......
##############################################################################
#
# Copyright (c) 2018 Nexedi SA and Contributors. All Rights Reserved.
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsibility of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# guarantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 3
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
import os
import yaml
import json
import glob
import requests
from slapos.testing.testcase import makeModuleSetUpAndTestCaseClass
setUpModule, ORSTestCase = makeModuleSetUpAndTestCaseClass(
os.path.abspath(
os.path.join(os.path.dirname(__file__), '..', 'software-tdd.cfg')))
param_dict = {
'testing': True,
'sim_algo': 'milenage',
'imsi': '001010000000331',
'opc': '000102030405060708090A0B0C0D0E0F',
'amf': '0x9001',
'sqn': '000000000000',
'k': '00112233445566778899AABBCCDDEEFF',
'impu': 'impu331',
'impi': 'impi331@amarisoft.com',
'tx_gain': 17,
'rx_gain': 17,
'dl_earfcn': 325320,
'n_rb_dl': 50,
'enb_id': '0x17',
'pci': 250,
'mme_list': {
'10.0.0.1': {'mme_addr': '10.0.0.1'},
'2001:db8::1': {'mme_addr': '2001:db8::1'},
},
'core_network_plmn': '00102',
'dl_nr_arfcn': 325320,
'nr_band': 99,
'nr_bandwidth': 50,
'ssb_nr_arfcn': 377790,
'rue_addr': '192.168.99.88',
'n_antenna_dl': 2,
'n_antenna_ul': 2,
'inactivity_timer': 17,
'gnb_id': '0x17',
'gnb_id_bits': 30,
'ssb_pos_bitmap': '10',
'amf_list': {
'10.0.0.1': {'amf_addr': '10.0.0.1'},
'2001:db8::1': {'amf_addr': '2001:db8::1'},
},
'nr_handover_time_to_trigger': 50,
'nr_handover_a3_offset': 10,
'ncell_list': {
'ORS1': {
'dl_nr_arfcn': 100000,
'ssb_nr_arfcn': 100000,
'pci': 1,
'nr_cell_id': '0x0000001',
'gnb_id_bits': 28,
'nr_band': 1,
'tac': 1
},
'ORS2': {
'dl_nr_arfcn': 200000,
'ssb_nr_arfcn': 200000,
'pci': 2,
'nr_cell_id': '0x0000002',
'gnb_id_bits': 30,
'nr_band': 2,
'tac': 2
},
},
'xn_peers': {
'2001:db8::1': {
'xn_addr': '2001:db8::1',
},
'2001:db8::2': {
'xn_addr': '2001:db8::2',
},
},
'tdd_ul_dl_config': '2.5ms 1UL 3DL 2/10',
}
enb_param_dict = {
'plmn_list': {
'00101': {'attach_without_pdn': True, 'plmn': '00101', 'reserved': True},
'00102': {'attach_without_pdn': False, 'plmn': '00102', 'reserved': False},
},
}
gnb_param_dict1 = {
'plmn_list': {
'00101': {'plmn': '00101', 'ranac': 1, 'reserved': True, 'tac': 1},
'00102': {'plmn': '00102', 'ranac': 2, 'reserved': False, 'tac': 2},
},
}
gnb_param_dict2 = {
'nssai': {
'1': {'sd': 1, 'sst': 10},
'2': {'sd': 2, 'sst': 20},
},
}
enb_param_dict.update(param_dict)
gnb_param_dict1.update(param_dict)
gnb_param_dict2.update(param_dict)
def test_enb_conf(self):
conf_file = glob.glob(os.path.join(
self.slap.instance_directory, '*', 'etc', 'enb.cfg'))[0]
with open(conf_file, 'r') as f:
conf = yaml.load(f)
self.assertEqual(conf['tx_gain'], enb_param_dict['tx_gain'])
self.assertEqual(conf['rx_gain'], enb_param_dict['rx_gain'])
self.assertEqual(conf['cell_default']['inactivity_timer'], enb_param_dict['inactivity_timer'])
self.assertEqual(conf['cell_list'][0]['dl_earfcn'], enb_param_dict['dl_earfcn'])
self.assertEqual(conf['enb_id'], int(enb_param_dict['enb_id'], 16))
self.assertEqual(conf['cell_list'][0]['n_id_cell'], enb_param_dict['pci'])
for p in conf['cell_list'][0]['plmn_list']:
for n in "plmn attach_without_pdn reserved".split():
self.assertEqual(p[n], enb_param_dict['plmn_list'][p['plmn']][n])
for p in conf['mme_list']:
self.assertEqual(p['mme_addr'], enb_param_dict['mme_list'][p['mme_addr']]['mme_addr'])
with open(conf_file, 'r') as f:
for l in f:
if l.startswith('#define N_RB_DL'):
self.assertIn(str(enb_param_dict['n_rb_dl']), l)
def test_gnb_conf1(self):
conf_file = glob.glob(os.path.join(
self.slap.instance_directory, '*', 'etc', 'gnb.cfg'))[0]
with open(conf_file, 'r') as f:
conf = yaml.load(f)
self.assertEqual(conf['tx_gain'], gnb_param_dict1['tx_gain'])
self.assertEqual(conf['rx_gain'], gnb_param_dict1['rx_gain'])
self.assertEqual(conf['nr_cell_default']['inactivity_timer'], gnb_param_dict1['inactivity_timer'])
self.assertEqual(conf['nr_cell_list'][0]['dl_nr_arfcn'], gnb_param_dict1['dl_nr_arfcn'])
self.assertEqual(conf['nr_cell_list'][0]['band'], gnb_param_dict1['nr_band'])
self.assertEqual(conf['nr_cell_list'][0]['ssb_pos_bitmap'], gnb_param_dict1['ssb_pos_bitmap'])
self.assertEqual(conf['nr_cell_default']['n_id_cell'], gnb_param_dict1['pci'])
self.assertEqual(conf['gnb_id'], int(gnb_param_dict1['gnb_id'], 16))
self.assertEqual(conf['gnb_id_bits'], gnb_param_dict1['gnb_id_bits'])
for p in conf['nr_cell_default']['plmn_list']:
for n in "plmn ranac reserved tac".split():
self.assertEqual(p[n], gnb_param_dict1['plmn_list'][p['plmn']][n])
for p in conf['amf_list']:
self.assertEqual(p['amf_addr'], gnb_param_dict1['amf_list'][p['amf_addr']]['amf_addr'])
for p in conf['xn_peers']:
self.assertEqual(p, gnb_param_dict1['xn_peers'][p]['xn_addr'])
for p in conf['nr_cell_list'][0]['ncell_list']:
for k in gnb_param_dict1['ncell_list']:
if p['dl_nr_arfcn'] == gnb_param_dict1['ncell_list'][k]['dl_nr_arfcn']:
break
conf_ncell = gnb_param_dict1['ncell_list'][k]
self.assertEqual(p['dl_nr_arfcn'], conf_ncell['dl_nr_arfcn'])
self.assertEqual(p['ssb_nr_arfcn'], conf_ncell['ssb_nr_arfcn'])
self.assertEqual(p['ul_nr_arfcn'], conf_ncell['dl_nr_arfcn'])
self.assertEqual(p['n_id_cell'], conf_ncell['pci'])
self.assertEqual(p['gnb_id_bits'], conf_ncell['gnb_id_bits'])
self.assertEqual(p['nr_cell_id'], int(conf_ncell['nr_cell_id'], 16))
self.assertEqual(p['tac'], conf_ncell['tac'])
self.assertEqual(p['band'], conf_ncell['nr_band'])
tdd_config = conf['nr_cell_default']['tdd_ul_dl_config']['pattern1']
self.assertEqual(float(tdd_config['period']), 2.5)
self.assertEqual(int(tdd_config['dl_slots']), 3)
self.assertEqual(int(tdd_config['dl_symbols']), 10)
self.assertEqual(int(tdd_config['ul_slots']), 1)
self.assertEqual(int(tdd_config['ul_symbols']), 2)
with open(conf_file, 'r') as f:
for l in f:
if l.startswith('#define NR_BANDWIDTH'):
self.assertIn(str(gnb_param_dict1['nr_bandwidth']), l)
def test_gnb_conf2(self):
conf_file = glob.glob(os.path.join(
self.slap.instance_directory, '*', 'etc', 'gnb.cfg'))[0]
with open(conf_file, 'r') as f:
conf = yaml.load(f)
for p in conf['nr_cell_default']['plmn_list'][0]['nssai']:
for n in "sd sst".split():
self.assertEqual(p[n], gnb_param_dict2['nssai'][str(p['sd'])][n])
def test_mme_conf(self):
conf_file = glob.glob(os.path.join(
self.slap.instance_directory, '*', 'etc', 'mme.cfg'))[0]
with open(conf_file, 'r') as f:
conf = yaml.load(f)
self.assertEqual(conf['plmn'], param_dict['core_network_plmn'])
def test_sim_card(self):
conf_file = glob.glob(os.path.join(
self.slap.instance_directory, '*', 'etc', 'ue_db.cfg'))[0]
with open(conf_file, 'r') as f:
conf = yaml.load(f)
for n in "sim_algo imsi opc sqn impu impi".split():
self.assertEqual(conf['ue_db'][0][n], param_dict[n])
self.assertEqual(conf['ue_db'][0]['K'], param_dict['k'])
self.assertEqual(conf['ue_db'][0]['amf'], int(param_dict['amf'], 16))
p = self.requestSlaveInstance().getConnectionParameterDict()
p = p['_'] if '_' in p else p
self.assertIn('info', p)
def test_monitor_gadget_url(self):
parameters = json.loads(self.computer_partition.getConnectionParameterDict()['_'])
self.assertIn('monitor-gadget-url', parameters)
monitor_setup_url = parameters['monitor-setup-url']
monitor_gadget_url = parameters['monitor-gadget-url']
monitor_base_url = parameters['monitor-base-url']
public_url = monitor_base_url + '/public'
response = requests.get(public_url, verify=False)
self.assertEqual(requests.codes['OK'], response.status_code)
self.assertIn('software.cfg.html', monitor_gadget_url)
response = requests.get(monitor_gadget_url, verify=False)
self.assertEqual(requests.codes['OK'], response.status_code)
self.assertIn('<script src="rsvp.js"></script>', response.text)
self.assertIn('<script src="renderjs.js"></script>', response.text)
self.assertIn('<script src="g-chart.line.js"></script>', response.text)
self.assertIn('<script src="promise.gadget.js"></script>', response.text)
class TestENBParameters(ORSTestCase):
@classmethod
def getInstanceParameterDict(cls):
return {'_': json.dumps(enb_param_dict)}
@classmethod
def getInstanceSoftwareType(cls):
return "enb"
def test_enb_conf(self):
test_enb_conf(self)
class TestGNBParameters1(ORSTestCase):
@classmethod
def getInstanceParameterDict(cls):
return {'_': json.dumps(gnb_param_dict1)}
@classmethod
def getInstanceSoftwareType(cls):
return "gnb"
def test_gnb_conf(self):
test_gnb_conf1(self)
class TestGNBParameters2(ORSTestCase):
@classmethod
def getInstanceParameterDict(cls):
return {'_': json.dumps(gnb_param_dict2)}
@classmethod
def getInstanceSoftwareType(cls):
return "gnb"
def test_gnb_conf(self):
test_gnb_conf2(self)
class TestCoreNetworkParameters(ORSTestCase):
@classmethod
def getInstanceParameterDict(cls):
return {'_': json.dumps(param_dict)}
@classmethod
def getInstanceSoftwareType(cls):
return "core-network"
def test_mme_conf(self):
test_mme_conf(self)
def requestSlaveInstance(cls):
software_url = cls.getSoftwareURL()
return cls.slap.request(
software_release=software_url,
partition_reference="SIM-CARD",
partition_parameter_kw={'_': json.dumps(param_dict)},
shared=True,
software_type='core-network',
)
class TestENBMonitorGadgetUrl(ORSTestCase):
@classmethod
def getInstanceParameterDict(cls):
return {'_': json.dumps(enb_param_dict)}
@classmethod
def getInstanceSoftwareType(cls):
return "enb"
def test_monitor_gadget_url(self):
test_monitor_gadget_url(self)
class TestGNBMonitorGadgetUrl(ORSTestCase):
@classmethod
def getInstanceParameterDict(cls):
return {'_': json.dumps(gnb_param_dict1)}
@classmethod
def getInstanceSoftwareType(cls):
return "gnb"
def test_monitor_gadget_url(self):
test_monitor_gadget_url(self)
class TestCoreNetworkMonitorGadgetUrl(ORSTestCase):
@classmethod
def getInstanceParameterDict(cls):
return {'_': json.dumps({'testing': True, 'slave-list': []})}
@classmethod
def getInstanceSoftwareType(cls):
return "core-network"
def test_monitor_gadget_url(self):
test_monitor_gadget_url(self)
class TestUELTEMonitorGadgetUrl(ORSTestCase):
@classmethod
def getInstanceParameterDict(cls):
return {'_': json.dumps({'testing': True})}
@classmethod
def getInstanceSoftwareType(cls):
return "ue-lte"
def test_monitor_gadget_url(self):
test_monitor_gadget_url(self)
class TestUENRMonitorGadgetUrl(ORSTestCase):
@classmethod
def getInstanceParameterDict(cls):
return {'_': json.dumps({'testing': True})}
@classmethod
def getInstanceSoftwareType(cls):
return "ue-nr"
def test_monitor_gadget_url(self):
test_monitor_gadget_url(self)
class TestSimCard(ORSTestCase):
@classmethod
def requestDefaultInstance(cls, state='started'):
default_instance = super(
ORSTestCase, cls).requestDefaultInstance(state=state)
cls.requestSlaveInstance()
return default_instance
@classmethod
def requestSlaveInstance(cls):
return requestSlaveInstance(cls)
@classmethod
def getInstanceParameterDict(cls):
return {'_': json.dumps({'testing': True})}
@classmethod
def getInstanceSoftwareType(cls):
return "core-network"
def test_sim_card(self):
test_sim_card(self)
class TestUELTEParameters(ORSTestCase):
@classmethod
def getInstanceParameterDict(cls):
return {'_': json.dumps(param_dict)}
@classmethod
def getInstanceSoftwareType(cls):
return "ue-lte"
def test_ue_lte_conf(self):
conf_file = glob.glob(os.path.join(
self.slap.instance_directory, '*', 'etc', 'ue.cfg'))[0]
with open(conf_file, 'r') as f:
conf = yaml.load(f)
self.assertEqual(conf['cell_groups'][0]['cells'][0]['dl_earfcn'], param_dict['dl_earfcn'])
self.assertEqual(conf['cell_groups'][0]['cells'][0]['bandwidth'], param_dict['n_rb_dl'])
self.assertEqual(conf['cell_groups'][0]['cells'][0]['n_antenna_dl'], param_dict['n_antenna_dl'])
self.assertEqual(conf['cell_groups'][0]['cells'][0]['n_antenna_ul'], param_dict['n_antenna_ul'])
self.assertEqual(conf['ue_list'][0]['rue_addr'], param_dict['rue_addr'])
self.assertEqual(conf['ue_list'][0]['imsi'], param_dict['imsi'])
self.assertEqual(conf['ue_list'][0]['K'], param_dict['k'])
self.assertEqual(conf['ue_list'][0]['sim_algo'], param_dict['sim_algo'])
self.assertEqual(conf['ue_list'][0]['opc'], param_dict['opc'])
self.assertEqual(conf['ue_list'][0]['amf'], int(param_dict['amf'], 16))
self.assertEqual(conf['ue_list'][0]['sqn'], param_dict['sqn'])
self.assertEqual(conf['ue_list'][0]['impu'], param_dict['impu'])
self.assertEqual(conf['ue_list'][0]['impi'], param_dict['impi'])
self.assertEqual(conf['tx_gain'], param_dict['tx_gain'])
self.assertEqual(conf['rx_gain'], param_dict['rx_gain'])
class TestUENRParameters(ORSTestCase):
@classmethod
def getInstanceParameterDict(cls):
return {'_': json.dumps(param_dict)}
@classmethod
def getInstanceSoftwareType(cls):
return "ue-nr"
def test_ue_nr_conf(self):
conf_file = glob.glob(os.path.join(
self.slap.instance_directory, '*', 'etc', 'ue.cfg'))[0]
with open(conf_file, 'r') as f:
conf = yaml.load(f)
self.assertEqual(conf['cell_groups'][0]['cells'][0]['ssb_nr_arfcn'], param_dict['ssb_nr_arfcn'])
self.assertEqual(conf['cell_groups'][0]['cells'][0]['dl_nr_arfcn'], param_dict['dl_nr_arfcn'])
self.assertEqual(conf['cell_groups'][0]['cells'][0]['bandwidth'], param_dict['nr_bandwidth'])
self.assertEqual(conf['cell_groups'][0]['cells'][0]['band'], param_dict['nr_band'])
self.assertEqual(conf['cell_groups'][0]['cells'][0]['n_antenna_dl'], param_dict['n_antenna_dl'])
self.assertEqual(conf['cell_groups'][0]['cells'][0]['n_antenna_ul'], param_dict['n_antenna_ul'])
self.assertEqual(conf['ue_list'][0]['rue_addr'], param_dict['rue_addr'])
self.assertEqual(conf['ue_list'][0]['imsi'], param_dict['imsi'])
self.assertEqual(conf['ue_list'][0]['K'], param_dict['k'])
self.assertEqual(conf['ue_list'][0]['sim_algo'], param_dict['sim_algo'])
self.assertEqual(conf['ue_list'][0]['opc'], param_dict['opc'])
self.assertEqual(conf['ue_list'][0]['amf'], int(param_dict['amf'], 16))
self.assertEqual(conf['ue_list'][0]['sqn'], param_dict['sqn'])
self.assertEqual(conf['ue_list'][0]['impu'], param_dict['impu'])
self.assertEqual(conf['ue_list'][0]['impi'], param_dict['impi'])
self.assertEqual(conf['tx_gain'], param_dict['tx_gain'])
self.assertEqual(conf['rx_gain'], param_dict['rx_gain'])
...@@ -39,19 +39,19 @@ setUpModule, ORSTestCase = makeModuleSetUpAndTestCaseClass( ...@@ -39,19 +39,19 @@ setUpModule, ORSTestCase = makeModuleSetUpAndTestCaseClass(
param_dict = { param_dict = {
'testing': True, 'testing': True,
"sim_algo": "milenage", 'sim_algo': 'milenage',
"imsi": "001010000000331", 'imsi': '001010000000331',
"opc": "000102030405060708090A0B0C0D0E0F", 'opc': '000102030405060708090A0B0C0D0E0F',
"amf": "0x9001", 'amf': '0x9001',
"sqn": "000000000000", 'sqn': '000000000000',
"k": "00112233445566778899AABBCCDDEEFF", 'k': '00112233445566778899AABBCCDDEEFF',
"impu": "impu331", 'impu': 'impu331',
"impi": "impi331@amarisoft.com", 'impi': 'impi331@amarisoft.com',
'tx_gain': 17, 'tx_gain': 17,
'rx_gain': 17, 'rx_gain': 17,
'dl_earfcn': 325320, 'dl_earfcn': 325320,
'n_rb_dl': 50, 'n_rb_dl': 50,
'enb_id': "0x17", 'enb_id': '0x17',
'pci': 250, 'pci': 250,
'mme_list': { 'mme_list': {
'10.0.0.1': {'mme_addr': '10.0.0.1'}, '10.0.0.1': {'mme_addr': '10.0.0.1'},
...@@ -62,17 +62,48 @@ param_dict = { ...@@ -62,17 +62,48 @@ param_dict = {
'nr_band': 99, 'nr_band': 99,
'nr_bandwidth': 50, 'nr_bandwidth': 50,
'ssb_nr_arfcn': 377790, 'ssb_nr_arfcn': 377790,
'rue_addr': "192.168.99.88", 'rue_addr': '192.168.99.88',
'n_antenna_dl': 2, 'n_antenna_dl': 2,
'n_antenna_ul': 2, 'n_antenna_ul': 2,
'inactivity_timer': 17, 'inactivity_timer': 17,
'gnb_id': "0x17", 'gnb_id': '0x17',
'gnb_id_bits': 30, 'gnb_id_bits': 30,
'ssb_pos_bitmap': "10", 'ssb_pos_bitmap': '10',
'amf_list': { 'amf_list': {
'10.0.0.1': {'amf_addr': '10.0.0.1'}, '10.0.0.1': {'amf_addr': '10.0.0.1'},
'2001:db8::1': {'amf_addr': '2001:db8::1'}, '2001:db8::1': {'amf_addr': '2001:db8::1'},
}, },
'nr_handover_time_to_trigger': 50,
'nr_handover_a3_offset': 10,
'ncell_list': {
'ORS1': {
'dl_nr_arfcn': 100000,
'ssb_nr_arfcn': 100000,
'pci': 1,
'nr_cell_id': '0x0000001',
'gnb_id_bits': 28,
'nr_band': 1,
'tac': 1
},
'ORS2': {
'dl_nr_arfcn': 200000,
'ssb_nr_arfcn': 200000,
'pci': 2,
'nr_cell_id': '0x0000002',
'gnb_id_bits': 30,
'nr_band': 2,
'tac': 2
},
},
'xn_peers': {
'2001:db8::1': {
'xn_addr': '2001:db8::1',
},
'2001:db8::2': {
'xn_addr': '2001:db8::2',
},
},
'tdd_ul_dl_config': '2.5ms 1UL 3DL 2/10',
} }
enb_param_dict = { enb_param_dict = {
'plmn_list': { 'plmn_list': {
...@@ -141,6 +172,27 @@ def test_gnb_conf1(self): ...@@ -141,6 +172,27 @@ def test_gnb_conf1(self):
self.assertEqual(p[n], gnb_param_dict1['plmn_list'][p['plmn']][n]) self.assertEqual(p[n], gnb_param_dict1['plmn_list'][p['plmn']][n])
for p in conf['amf_list']: for p in conf['amf_list']:
self.assertEqual(p['amf_addr'], gnb_param_dict1['amf_list'][p['amf_addr']]['amf_addr']) self.assertEqual(p['amf_addr'], gnb_param_dict1['amf_list'][p['amf_addr']]['amf_addr'])
for p in conf['xn_peers']:
self.assertEqual(p, gnb_param_dict1['xn_peers'][p]['xn_addr'])
for p in conf['nr_cell_list'][0]['ncell_list']:
for k in gnb_param_dict1['ncell_list']:
if p['dl_nr_arfcn'] == gnb_param_dict1['ncell_list'][k]['dl_nr_arfcn']:
break
conf_ncell = gnb_param_dict1['ncell_list'][k]
self.assertEqual(p['dl_nr_arfcn'], conf_ncell['dl_nr_arfcn'])
self.assertEqual(p['ssb_nr_arfcn'], conf_ncell['ssb_nr_arfcn'])
self.assertEqual(p['ul_nr_arfcn'], conf_ncell['dl_nr_arfcn'])
self.assertEqual(p['n_id_cell'], conf_ncell['pci'])
self.assertEqual(p['gnb_id_bits'], conf_ncell['gnb_id_bits'])
self.assertEqual(p['nr_cell_id'], int(conf_ncell['nr_cell_id'], 16))
self.assertEqual(p['tac'], conf_ncell['tac'])
self.assertEqual(p['band'], conf_ncell['nr_band'])
tdd_config = conf['nr_cell_default']['tdd_ul_dl_config']['pattern1']
self.assertEqual(float(tdd_config['period']), 2.5)
self.assertEqual(int(tdd_config['dl_slots']), 3)
self.assertEqual(int(tdd_config['dl_symbols']), 10)
self.assertEqual(int(tdd_config['ul_slots']), 1)
self.assertEqual(int(tdd_config['ul_symbols']), 2)
with open(conf_file, 'r') as f: with open(conf_file, 'r') as f:
for l in f: for l in f:
...@@ -171,7 +223,7 @@ def test_mme_conf(self): ...@@ -171,7 +223,7 @@ def test_mme_conf(self):
def test_sim_card(self): def test_sim_card(self):
conf_file = glob.glob(os.path.join( conf_file = glob.glob(os.path.join(
self.slap.instance_directory, '*', 'ue_db.cfg'))[0] self.slap.instance_directory, '*', 'etc', 'ue_db.cfg'))[0]
with open(conf_file, 'r') as f: with open(conf_file, 'r') as f:
conf = yaml.load(f) conf = yaml.load(f)
......
...@@ -39,19 +39,19 @@ setUpModule, ORSTestCase = makeModuleSetUpAndTestCaseClass( ...@@ -39,19 +39,19 @@ setUpModule, ORSTestCase = makeModuleSetUpAndTestCaseClass(
param_dict = { param_dict = {
'testing': True, 'testing': True,
"sim_algo": "milenage", 'sim_algo': 'milenage',
"imsi": "001010000000331", 'imsi': '001010000000331',
"opc": "000102030405060708090A0B0C0D0E0F", 'opc': '000102030405060708090A0B0C0D0E0F',
"amf": "0x9001", 'amf': '0x9001',
"sqn": "000000000000", 'sqn': '000000000000',
"k": "00112233445566778899AABBCCDDEEFF", 'k': '00112233445566778899AABBCCDDEEFF',
"impu": "impu331", 'impu': 'impu331',
"impi": "impi331@amarisoft.com", 'impi': 'impi331@amarisoft.com',
'tx_gain': 17, 'tx_gain': 17,
'rx_gain': 17, 'rx_gain': 17,
'dl_earfcn': 325320, 'dl_earfcn': 325320,
'n_rb_dl': 50, 'n_rb_dl': 50,
'enb_id': "0x17", 'enb_id': '0x17',
'pci': 250, 'pci': 250,
'mme_list': { 'mme_list': {
'10.0.0.1': {'mme_addr': '10.0.0.1'}, '10.0.0.1': {'mme_addr': '10.0.0.1'},
...@@ -62,17 +62,48 @@ param_dict = { ...@@ -62,17 +62,48 @@ param_dict = {
'nr_band': 99, 'nr_band': 99,
'nr_bandwidth': 50, 'nr_bandwidth': 50,
'ssb_nr_arfcn': 377790, 'ssb_nr_arfcn': 377790,
'rue_addr': "192.168.99.88", 'rue_addr': '192.168.99.88',
'n_antenna_dl': 2, 'n_antenna_dl': 2,
'n_antenna_ul': 2, 'n_antenna_ul': 2,
'inactivity_timer': 17, 'inactivity_timer': 17,
'gnb_id': "0x17", 'gnb_id': '0x17',
'gnb_id_bits': 30, 'gnb_id_bits': 30,
'ssb_pos_bitmap': "10", 'ssb_pos_bitmap': '10',
'amf_list': { 'amf_list': {
'10.0.0.1': {'amf_addr': '10.0.0.1'}, '10.0.0.1': {'amf_addr': '10.0.0.1'},
'2001:db8::1': {'amf_addr': '2001:db8::1'}, '2001:db8::1': {'amf_addr': '2001:db8::1'},
}, },
'nr_handover_time_to_trigger': 50,
'nr_handover_a3_offset': 10,
'ncell_list': {
'ORS1': {
'dl_nr_arfcn': 100000,
'ssb_nr_arfcn': 100000,
'pci': 1,
'nr_cell_id': '0x0000001',
'gnb_id_bits': 28,
'nr_band': 1,
'tac': 1
},
'ORS2': {
'dl_nr_arfcn': 200000,
'ssb_nr_arfcn': 200000,
'pci': 2,
'nr_cell_id': '0x0000002',
'gnb_id_bits': 30,
'nr_band': 2,
'tac': 2
},
},
'xn_peers': {
'2001:db8::1': {
'xn_addr': '2001:db8::1',
},
'2001:db8::2': {
'xn_addr': '2001:db8::2',
},
},
'tdd_ul_dl_config': '2.5ms 1UL 3DL 2/10',
} }
enb_param_dict = { enb_param_dict = {
'plmn_list': { 'plmn_list': {
...@@ -141,6 +172,27 @@ def test_gnb_conf1(self): ...@@ -141,6 +172,27 @@ def test_gnb_conf1(self):
self.assertEqual(p[n], gnb_param_dict1['plmn_list'][p['plmn']][n]) self.assertEqual(p[n], gnb_param_dict1['plmn_list'][p['plmn']][n])
for p in conf['amf_list']: for p in conf['amf_list']:
self.assertEqual(p['amf_addr'], gnb_param_dict1['amf_list'][p['amf_addr']]['amf_addr']) self.assertEqual(p['amf_addr'], gnb_param_dict1['amf_list'][p['amf_addr']]['amf_addr'])
for p in conf['xn_peers']:
self.assertEqual(p, gnb_param_dict1['xn_peers'][p]['xn_addr'])
for p in conf['nr_cell_list'][0]['ncell_list']:
for k in gnb_param_dict1['ncell_list']:
if p['dl_nr_arfcn'] == gnb_param_dict1['ncell_list'][k]['dl_nr_arfcn']:
break
conf_ncell = gnb_param_dict1['ncell_list'][k]
self.assertEqual(p['dl_nr_arfcn'], conf_ncell['dl_nr_arfcn'])
self.assertEqual(p['ssb_nr_arfcn'], conf_ncell['ssb_nr_arfcn'])
self.assertEqual(p['ul_nr_arfcn'], conf_ncell['dl_nr_arfcn'])
self.assertEqual(p['n_id_cell'], conf_ncell['pci'])
self.assertEqual(p['gnb_id_bits'], conf_ncell['gnb_id_bits'])
self.assertEqual(p['nr_cell_id'], int(conf_ncell['nr_cell_id'], 16))
self.assertEqual(p['tac'], conf_ncell['tac'])
self.assertEqual(p['band'], conf_ncell['nr_band'])
tdd_config = conf['nr_cell_default']['tdd_ul_dl_config']['pattern1']
self.assertEqual(float(tdd_config['period']), 2.5)
self.assertEqual(int(tdd_config['dl_slots']), 3)
self.assertEqual(int(tdd_config['dl_symbols']), 10)
self.assertEqual(int(tdd_config['ul_slots']), 1)
self.assertEqual(int(tdd_config['ul_symbols']), 2)
with open(conf_file, 'r') as f: with open(conf_file, 'r') as f:
for l in f: for l in f:
...@@ -171,7 +223,7 @@ def test_mme_conf(self): ...@@ -171,7 +223,7 @@ def test_mme_conf(self):
def test_sim_card(self): def test_sim_card(self):
conf_file = glob.glob(os.path.join( conf_file = glob.glob(os.path.join(
self.slap.instance_directory, '*', 'ue_db.cfg'))[0] self.slap.instance_directory, '*', 'etc', 'ue_db.cfg'))[0]
with open(conf_file, 'r') as f: with open(conf_file, 'r') as f:
conf = yaml.load(f) conf = yaml.load(f)
......
...@@ -39,19 +39,19 @@ setUpModule, ORSTestCase = makeModuleSetUpAndTestCaseClass( ...@@ -39,19 +39,19 @@ setUpModule, ORSTestCase = makeModuleSetUpAndTestCaseClass(
param_dict = { param_dict = {
'testing': True, 'testing': True,
"sim_algo": "milenage", 'sim_algo': 'milenage',
"imsi": "001010000000331", 'imsi': '001010000000331',
"opc": "000102030405060708090A0B0C0D0E0F", 'opc': '000102030405060708090A0B0C0D0E0F',
"amf": "0x9001", 'amf': '0x9001',
"sqn": "000000000000", 'sqn': '000000000000',
"k": "00112233445566778899AABBCCDDEEFF", 'k': '00112233445566778899AABBCCDDEEFF',
"impu": "impu331", 'impu': 'impu331',
"impi": "impi331@amarisoft.com", 'impi': 'impi331@amarisoft.com',
'tx_gain': 17, 'tx_gain': 17,
'rx_gain': 17, 'rx_gain': 17,
'dl_earfcn': 325320, 'dl_earfcn': 325320,
'n_rb_dl': 50, 'n_rb_dl': 50,
'enb_id': "0x17", 'enb_id': '0x17',
'pci': 250, 'pci': 250,
'mme_list': { 'mme_list': {
'10.0.0.1': {'mme_addr': '10.0.0.1'}, '10.0.0.1': {'mme_addr': '10.0.0.1'},
...@@ -62,17 +62,48 @@ param_dict = { ...@@ -62,17 +62,48 @@ param_dict = {
'nr_band': 99, 'nr_band': 99,
'nr_bandwidth': 50, 'nr_bandwidth': 50,
'ssb_nr_arfcn': 377790, 'ssb_nr_arfcn': 377790,
'rue_addr': "192.168.99.88", 'rue_addr': '192.168.99.88',
'n_antenna_dl': 2, 'n_antenna_dl': 2,
'n_antenna_ul': 2, 'n_antenna_ul': 2,
'inactivity_timer': 17, 'inactivity_timer': 17,
'gnb_id': "0x17", 'gnb_id': '0x17',
'gnb_id_bits': 30, 'gnb_id_bits': 30,
'ssb_pos_bitmap': "10", 'ssb_pos_bitmap': '10',
'amf_list': { 'amf_list': {
'10.0.0.1': {'amf_addr': '10.0.0.1'}, '10.0.0.1': {'amf_addr': '10.0.0.1'},
'2001:db8::1': {'amf_addr': '2001:db8::1'}, '2001:db8::1': {'amf_addr': '2001:db8::1'},
}, },
'nr_handover_time_to_trigger': 50,
'nr_handover_a3_offset': 10,
'ncell_list': {
'ORS1': {
'dl_nr_arfcn': 100000,
'ssb_nr_arfcn': 100000,
'pci': 1,
'nr_cell_id': '0x0000001',
'gnb_id_bits': 28,
'nr_band': 1,
'tac': 1
},
'ORS2': {
'dl_nr_arfcn': 200000,
'ssb_nr_arfcn': 200000,
'pci': 2,
'nr_cell_id': '0x0000002',
'gnb_id_bits': 30,
'nr_band': 2,
'tac': 2
},
},
'xn_peers': {
'2001:db8::1': {
'xn_addr': '2001:db8::1',
},
'2001:db8::2': {
'xn_addr': '2001:db8::2',
},
},
'tdd_ul_dl_config': '2.5ms 1UL 3DL 2/10',
} }
enb_param_dict = { enb_param_dict = {
'plmn_list': { 'plmn_list': {
...@@ -141,6 +172,27 @@ def test_gnb_conf1(self): ...@@ -141,6 +172,27 @@ def test_gnb_conf1(self):
self.assertEqual(p[n], gnb_param_dict1['plmn_list'][p['plmn']][n]) self.assertEqual(p[n], gnb_param_dict1['plmn_list'][p['plmn']][n])
for p in conf['amf_list']: for p in conf['amf_list']:
self.assertEqual(p['amf_addr'], gnb_param_dict1['amf_list'][p['amf_addr']]['amf_addr']) self.assertEqual(p['amf_addr'], gnb_param_dict1['amf_list'][p['amf_addr']]['amf_addr'])
for p in conf['xn_peers']:
self.assertEqual(p, gnb_param_dict1['xn_peers'][p]['xn_addr'])
for p in conf['nr_cell_list'][0]['ncell_list']:
for k in gnb_param_dict1['ncell_list']:
if p['dl_nr_arfcn'] == gnb_param_dict1['ncell_list'][k]['dl_nr_arfcn']:
break
conf_ncell = gnb_param_dict1['ncell_list'][k]
self.assertEqual(p['dl_nr_arfcn'], conf_ncell['dl_nr_arfcn'])
self.assertEqual(p['ssb_nr_arfcn'], conf_ncell['ssb_nr_arfcn'])
self.assertEqual(p['ul_nr_arfcn'], conf_ncell['dl_nr_arfcn'])
self.assertEqual(p['n_id_cell'], conf_ncell['pci'])
self.assertEqual(p['gnb_id_bits'], conf_ncell['gnb_id_bits'])
self.assertEqual(p['nr_cell_id'], int(conf_ncell['nr_cell_id'], 16))
self.assertEqual(p['tac'], conf_ncell['tac'])
self.assertEqual(p['band'], conf_ncell['nr_band'])
tdd_config = conf['nr_cell_default']['tdd_ul_dl_config']['pattern1']
self.assertEqual(float(tdd_config['period']), 2.5)
self.assertEqual(int(tdd_config['dl_slots']), 3)
self.assertEqual(int(tdd_config['dl_symbols']), 10)
self.assertEqual(int(tdd_config['ul_slots']), 1)
self.assertEqual(int(tdd_config['ul_symbols']), 2)
with open(conf_file, 'r') as f: with open(conf_file, 'r') as f:
for l in f: for l in f:
...@@ -171,7 +223,7 @@ def test_mme_conf(self): ...@@ -171,7 +223,7 @@ def test_mme_conf(self):
def test_sim_card(self): def test_sim_card(self):
conf_file = glob.glob(os.path.join( conf_file = glob.glob(os.path.join(
self.slap.instance_directory, '*', 'ue_db.cfg'))[0] self.slap.instance_directory, '*', 'etc', 'ue_db.cfg'))[0]
with open(conf_file, 'r') as f: with open(conf_file, 'r') as f:
conf = yaml.load(f) conf = yaml.load(f)
......
...@@ -39,19 +39,19 @@ setUpModule, ORSTestCase = makeModuleSetUpAndTestCaseClass( ...@@ -39,19 +39,19 @@ setUpModule, ORSTestCase = makeModuleSetUpAndTestCaseClass(
param_dict = { param_dict = {
'testing': True, 'testing': True,
"sim_algo": "milenage", 'sim_algo': 'milenage',
"imsi": "001010000000331", 'imsi': '001010000000331',
"opc": "000102030405060708090A0B0C0D0E0F", 'opc': '000102030405060708090A0B0C0D0E0F',
"amf": "0x9001", 'amf': '0x9001',
"sqn": "000000000000", 'sqn': '000000000000',
"k": "00112233445566778899AABBCCDDEEFF", 'k': '00112233445566778899AABBCCDDEEFF',
"impu": "impu331", 'impu': 'impu331',
"impi": "impi331@amarisoft.com", 'impi': 'impi331@amarisoft.com',
'tx_gain': 17, 'tx_gain': 17,
'rx_gain': 17, 'rx_gain': 17,
'dl_earfcn': 325320, 'dl_earfcn': 325320,
'n_rb_dl': 50, 'n_rb_dl': 50,
'enb_id': "0x17", 'enb_id': '0x17',
'pci': 250, 'pci': 250,
'mme_list': { 'mme_list': {
'10.0.0.1': {'mme_addr': '10.0.0.1'}, '10.0.0.1': {'mme_addr': '10.0.0.1'},
...@@ -62,17 +62,48 @@ param_dict = { ...@@ -62,17 +62,48 @@ param_dict = {
'nr_band': 99, 'nr_band': 99,
'nr_bandwidth': 50, 'nr_bandwidth': 50,
'ssb_nr_arfcn': 377790, 'ssb_nr_arfcn': 377790,
'rue_addr': "192.168.99.88", 'rue_addr': '192.168.99.88',
'n_antenna_dl': 2, 'n_antenna_dl': 2,
'n_antenna_ul': 2, 'n_antenna_ul': 2,
'inactivity_timer': 17, 'inactivity_timer': 17,
'gnb_id': "0x17", 'gnb_id': '0x17',
'gnb_id_bits': 30, 'gnb_id_bits': 30,
'ssb_pos_bitmap': "10", 'ssb_pos_bitmap': '10',
'amf_list': { 'amf_list': {
'10.0.0.1': {'amf_addr': '10.0.0.1'}, '10.0.0.1': {'amf_addr': '10.0.0.1'},
'2001:db8::1': {'amf_addr': '2001:db8::1'}, '2001:db8::1': {'amf_addr': '2001:db8::1'},
}, },
'nr_handover_time_to_trigger': 50,
'nr_handover_a3_offset': 10,
'ncell_list': {
'ORS1': {
'dl_nr_arfcn': 100000,
'ssb_nr_arfcn': 100000,
'pci': 1,
'nr_cell_id': '0x0000001',
'gnb_id_bits': 28,
'nr_band': 1,
'tac': 1
},
'ORS2': {
'dl_nr_arfcn': 200000,
'ssb_nr_arfcn': 200000,
'pci': 2,
'nr_cell_id': '0x0000002',
'gnb_id_bits': 30,
'nr_band': 2,
'tac': 2
},
},
'xn_peers': {
'2001:db8::1': {
'xn_addr': '2001:db8::1',
},
'2001:db8::2': {
'xn_addr': '2001:db8::2',
},
},
'tdd_ul_dl_config': '2.5ms 1UL 3DL 2/10',
} }
enb_param_dict = { enb_param_dict = {
'plmn_list': { 'plmn_list': {
...@@ -141,6 +172,27 @@ def test_gnb_conf1(self): ...@@ -141,6 +172,27 @@ def test_gnb_conf1(self):
self.assertEqual(p[n], gnb_param_dict1['plmn_list'][p['plmn']][n]) self.assertEqual(p[n], gnb_param_dict1['plmn_list'][p['plmn']][n])
for p in conf['amf_list']: for p in conf['amf_list']:
self.assertEqual(p['amf_addr'], gnb_param_dict1['amf_list'][p['amf_addr']]['amf_addr']) self.assertEqual(p['amf_addr'], gnb_param_dict1['amf_list'][p['amf_addr']]['amf_addr'])
for p in conf['xn_peers']:
self.assertEqual(p, gnb_param_dict1['xn_peers'][p]['xn_addr'])
for p in conf['nr_cell_list'][0]['ncell_list']:
for k in gnb_param_dict1['ncell_list']:
if p['dl_nr_arfcn'] == gnb_param_dict1['ncell_list'][k]['dl_nr_arfcn']:
break
conf_ncell = gnb_param_dict1['ncell_list'][k]
self.assertEqual(p['dl_nr_arfcn'], conf_ncell['dl_nr_arfcn'])
self.assertEqual(p['ssb_nr_arfcn'], conf_ncell['ssb_nr_arfcn'])
self.assertEqual(p['ul_nr_arfcn'], conf_ncell['dl_nr_arfcn'])
self.assertEqual(p['n_id_cell'], conf_ncell['pci'])
self.assertEqual(p['gnb_id_bits'], conf_ncell['gnb_id_bits'])
self.assertEqual(p['nr_cell_id'], int(conf_ncell['nr_cell_id'], 16))
self.assertEqual(p['tac'], conf_ncell['tac'])
self.assertEqual(p['band'], conf_ncell['nr_band'])
tdd_config = conf['nr_cell_default']['tdd_ul_dl_config']['pattern1']
self.assertEqual(float(tdd_config['period']), 2.5)
self.assertEqual(int(tdd_config['dl_slots']), 3)
self.assertEqual(int(tdd_config['dl_symbols']), 10)
self.assertEqual(int(tdd_config['ul_slots']), 1)
self.assertEqual(int(tdd_config['ul_symbols']), 2)
with open(conf_file, 'r') as f: with open(conf_file, 'r') as f:
for l in f: for l in f:
...@@ -171,7 +223,7 @@ def test_mme_conf(self): ...@@ -171,7 +223,7 @@ def test_mme_conf(self):
def test_sim_card(self): def test_sim_card(self):
conf_file = glob.glob(os.path.join( conf_file = glob.glob(os.path.join(
self.slap.instance_directory, '*', 'ue_db.cfg'))[0] self.slap.instance_directory, '*', 'etc', 'ue_db.cfg'))[0]
with open(conf_file, 'r') as f: with open(conf_file, 'r') as f:
conf = yaml.load(f) conf = yaml.load(f)
......
...@@ -274,7 +274,6 @@ rubygemsrecipe = ...@@ -274,7 +274,6 @@ rubygemsrecipe =
# All other depencies should be pinned. # All other depencies should be pinned.
Pygments = 2.13.0 Pygments = 2.13.0
httmock = 1.2.6 httmock = 1.2.6
manuel = 1.9.0
testfixtures = 6.11.0 testfixtures = 6.11.0
pyflakes = 2.0.0 pyflakes = 2.0.0
zope.testing = 4.6.2 zope.testing = 4.6.2
......
...@@ -220,6 +220,7 @@ lock-file = 2.0 ...@@ -220,6 +220,7 @@ lock-file = 2.0
lockfile = 0.12.2:whl lockfile = 0.12.2:whl
lsprotocol = 2022.0.0a9:whl lsprotocol = 2022.0.0a9:whl
lxml = 4.9.1 lxml = 4.9.1
manuel = 1.11.2
MarkupSafe = 2.0.1 MarkupSafe = 2.0.1
matplotlib = 2.1.2 matplotlib = 2.1.2
meld3 = 1.0.2 meld3 = 1.0.2
...@@ -280,6 +281,7 @@ pytz = 2022.2.1 ...@@ -280,6 +281,7 @@ pytz = 2022.2.1
PyYAML = 5.4.1 PyYAML = 5.4.1
pyzmq = 22.3.0 pyzmq = 22.3.0
qtconsole = 4.3.0 qtconsole = 4.3.0
random2 = 1.0.1
regex = 2020.9.27 regex = 2020.9.27
requests = 2.28.1 requests = 2.28.1
rpdb = 0.1.5 rpdb = 0.1.5
...@@ -341,7 +343,10 @@ zdaemon = 4.2.0 ...@@ -341,7 +343,10 @@ zdaemon = 4.2.0
zipp = 3.12.0:whl zipp = 3.12.0:whl
zodburi = 2.5.0 zodburi = 2.5.0
zope.event = 4.6.0 zope.event = 4.6.0
zope.exceptions = 4.6
zope.interface = 5.4.0 zope.interface = 5.4.0
zope.testing = 4.7
zope.testrunner = 5.2
[versions:python2] [versions:python2]
......
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