Commit 36ebb6ec authored by Kirill Smelkov's avatar Kirill Smelkov

software/ors-amarisoft: enb+ue: Switch to JSON schemas as the primary source...

software/ors-amarisoft: enb+ue: Switch to JSON schemas as the primary source of defaults; stop rendering them

JSON schemas for eNB/gNB and UE specify defaults for many parameters and the
software release use those defaults when parameters are not explicitly
specified on the instantiation.

Some primary defaults - for bandwidth and n_antenna DL/UL - were setup in
render-templates and propagated through all places to avoid duplicating them.

Defaults for many other parameters were duplicated in both JSON schemas and in
the code that handles those parameters.

To avoid this duplication we either need to extend render-templates and put
defaults for all the other many parameters there, or just switch to JSON
schemas to be primary source of those defaults, and use the schemas on
instantiation by automatically loading them and extracting defaults for all
parameters from there.

I decided to go the second way because it avoids additional layer of rendering
and the need to keep on remembering not to put raw defaults in the JSON
schemas. Evidently this is the same approach that Rapid CDN is going to take
(see nexedi/slapos!1380 for details).

In this patch we stop rendering JSON schemas and keep their last rendered
result. In the later patches we will handle formed duplication there and go on
to further merge enb and gnb.

UE is handled brutally for now, because it will be much reworked after.

Actually loading JSON schemas is left as TODO as I do not have resources to
implement that now. Still this step is needed as precondition for further
patches. I hope bit of duplication for enb/gnb parameters is ok, given that
they are now centrally maintained and corresponding TODO warning is in place.
parent 215c637e
......@@ -23,10 +23,10 @@ rf_driver: {
multi_ue: true,
cells: [
{
bandwidth: {{ slapparameter_dict.get('bandwidth', default_lte_bandwidth) .removesuffix(' MHz') }},
bandwidth: {{ slapparameter_dict.get('bandwidth', '20 MHz') .removesuffix(' MHz') }},
dl_earfcn: {{ slapparameter_dict.get('dl_earfcn', 0) }},
n_antenna_dl: {{ slapparameter_dict.get('n_antenna_dl', default_n_antenna_dl) }},
n_antenna_ul: {{ slapparameter_dict.get('n_antenna_ul', default_n_antenna_ul) }},
n_antenna_dl: {{ slapparameter_dict.get('n_antenna_dl', 2) }},
n_antenna_ul: {{ slapparameter_dict.get('n_antenna_ul', 2) }},
global_timing_advance: -1,
}
],
......@@ -41,13 +41,13 @@ rf_driver: {
multi_ue: false,
cells: [{
rf_port: 0,
bandwidth: {{ slapparameter_dict.get('bandwidth', default_nr_bandwidth) }},
bandwidth: {{ slapparameter_dict.get('bandwidth', 40) }},
band: {{ slapparameter_dict.get('nr_band', 0) }},
dl_nr_arfcn: {{ slapparameter_dict.get('dl_nr_arfcn', 0) }},
ssb_nr_arfcn: {{ slapparameter_dict.get('ssb_nr_arfcn', 0) }},
subcarrier_spacing: 30,
n_antenna_dl: {{ slapparameter_dict.get('n_antenna_dl', default_n_antenna_dl) }},
n_antenna_ul: {{ slapparameter_dict.get('n_antenna_ul', default_n_antenna_ul) }},
n_antenna_dl: {{ slapparameter_dict.get('n_antenna_dl', 2) }},
n_antenna_ul: {{ slapparameter_dict.get('n_antenna_ul', 2) }},
}
],
},
......@@ -61,8 +61,8 @@ rf_driver: {
sqn: "{{ slapparameter_dict.get('sqn', '000000000000') }}",
impu: "{{ slapparameter_dict.get('impu', '') }}",
impi: "{{ slapparameter_dict.get('impi', '') }}",
imsi: "{{ slapparameter_dict.get('imsi', default_imsi) }}",
K: "{{ slapparameter_dict.get('k', default_k) }}",
imsi: "{{ slapparameter_dict.get('imsi', '001010123456789') }}",
K: "{{ slapparameter_dict.get('k', '00112233445566778899aabbccddeeff') }}",
{%- if ue_type == 'lte' %}
ue_category: 12,
{%- endif %}
......
{
"type": "object",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Input Parameters",
"properties": {
{%- if bbu == 'ors' %}
"bandwidth": {
"title": "Bandwidth",
"description": "Downlink Bandwidth",
"type": "string",
"enum": [
"1.4 MHz",
"3 MHz",
"5 MHz",
"10 MHz",
"15 MHz",
"20 MHz"
],
"default": "{{ default_lte_bandwidth }}"
},
"n_antenna_dl": {
"$ref": "ru/common.json#/properties/n_antenna_dl",
"enum": [
1,
2
],
"default": {{ default_n_antenna_dl }}
},
"n_antenna_ul": {
"$ref": "ru/common.json#/properties/n_antenna_ul",
"enum": [
1,
2
],
"default": {{ default_n_antenna_ul }}
},
"rf_mode": {
"$ref": "cell/common.json#/properties/rf_mode",
"default": "tdd"
},
"tdd_ul_dl_config": {
"$ref": "cell/lte/input-schema.json#/properties/tdd_ul_dl_config"
},
"dl_earfcn": {
"$ref": "cell/lte/input-schema.json#/properties/dl_earfcn"
},
"pci": {
"$ref": "cell/common.json#/properties/pci",
"default": 1
},
"cell_id": {
"$ref": "cell/common.json#/properties/cell_id",
"default": "0x01"
},
"tac": {
"$ref": "cell/lte/input-schema.json#/properties/tac",
"default": "0x0001"
},
"root_sequence_index": {
"$ref": "cell/common.json#/properties/root_sequence_index",
"default": 204
},
{%- else %}
"cell_list": {
"title": "Cell List",
"description": "Cell List",
"patternProperties": {
".*": {
"$ref": "cell/lte/input-schema.json"
}
},
"type": "object",
"default": {}
},
{%- endif %}
{%- if bbu == 'ors' %}
"tx_gain": {
"$ref": "ru/sdr/input-schema.json#/properties/tx_gain"
},
"rx_gain": {
"$ref": "ru/sdr/input-schema.json#/properties/rx_gain"
},
{%- endif %}
{%- if bbu != 'ors' %}
"user-authorized-key": {
"title": "User Authorized Key",
"description": "SSH public key in order to connect to the SSH server of this instance.",
"textarea": true,
"type": "string"
},
{%- endif %}
"enb_id": {
"title": "eNB ID",
"description": "eNB ID{% if bbu != 'ors' %}. (must be set if there are LTE cells){% endif %}",
"type": "string"
{%- if bbu == 'ors' %},
"default": "0x1A2D0"
{%- endif %}
},
"gtp_addr": {
"title": "GTP Address",
"description": "String. Set the IP address (and optional port) on which the GTP-U packets are received. The default port is 2152. It is normally the IP address of the network interface connected to the core network.",
"type": "string",
"default": "127.0.1.1"
},
"mme_list": {
"title": "MME list",
{%- if bbu == 'ors' %}
"description": "Optionnal. List of MME to which the gNodeB is connected",
{%- else %}
"description": "List of MME to which the eNodeB is connected. (must be set if there are LTE cells)",
{%- endif %}
"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"
{%- if bbu == 'ors' %},
"default": {
"1": {
"mme_addr": "127.0.1.100"
}
}
{%- endif %}
},
"plmn_list": {
"title": "PLMN list",
{%- if bbu == 'ors' %}
"description": "List of PLMNs broadcasted by the eNodeB, at most 6 (default: 00101)",
{%- else %}
"description": "List of PLMNs broadcasted by the eNodeB, at most 6. (must be set if there are LTE cells)",
{%- endif %}
"patternProperties": {
".*": {
"properties": {
"plmn": {
{%- if bbu == 'ors' %}
"default": "00101",
{%- endif %}
"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"
{%- if bbu == 'ors' %},
"default": {
"1": {
"plmn": "00101"
}
}
{%- endif %}
},
{%- if bbu == 'ors' %}
"lte_handover_a3_offset": {
"title": "A3 offset for LTE handover",
"description": "RSRP gain offset between gNBs which will trigger handover",
"type": "number",
"default": 6
},
"lte_handover_time_to_trigger": {
"title": "Time to Trigger for LTE handover",
"description": "Time to triger after which LTE handover will be triggered 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": 480
},
{%- endif %}
"ncell_list": {
"title": "Neighbour Cell Info",
"description": "Neighbour Cell Info",
"patternProperties": {
".*": {
"properties": {
"dl_earfcn": {
"title": "DL EARFCN",
"description": "Downlink E-UTRA 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"
},
"cell_id": {
"title": "Cell ID",
"description": "Concatenation of enb_id and cell_id of the neighbour cell",
"type": "string"
},
"tac": {
"title": "Tracking Area Code",
"description": "Integer (range 0 to 16777215)",
"type": "number"
}
},
"type": "object"
}
},
"type": "object",
"default": {}
},
"websocket_password": {
"title": "Websocket password",
"description": "Activates websocket for remote control and sets password",
"type": "string"
},
{%- if bbu == 'ors' %}
"inactivity_timer": {
"title": "Inactivity Timer",
"description": "Send RRC connection release after this time (in ms) of network inactivity.",
"type": "number",
"default": {{ default_lte_inactivity_timer }}
},
{%- endif %}
"log_phy_debug": {
"title": "Physical layer log debug",
"description": "Enable debug mode for physical layer logs",
"type": "boolean",
"default": false
},
"gps_sync": {
"default": false,
"title": "GPS synchronisation",
"description": "True if GPS should be used for synchronisation",
"type": "boolean"
},
"disable_sdr": {
"default": false,
"title": "Disable SDR",
"description": "Disables radio",
"type": "boolean"
},
"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_rxtx_delay": {
"title": "Minimum available time for radio front end processing (ms)",
"description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (lower than this value)",
"type": "number",
"default": 0
},
"xlog_fluentbit_forward_host": {
"title": "Address to Forward Xlog by Fluenbit",
"description": "Address of Remote Fluentd or Fluentbit Server to Forward Xlog",
"type": "string"
},
"xlog_fluentbit_forward_port": {
"title": "Port to Forward Xlog by Fluentbit",
"description": "Optional Port of Remote Fluentd or Fluentbit Server to Forward Xlog",
"type": "string"
},
"xlog_fluentbit_forward_shared_key": {
"title": "Shared Key to Forward Xlog by Fluentbit",
"description": "Secret Key Shared with Remote Fluentd or Fluentbit Server for Authentication when Forwarding Xlog",
"type": "string"
}
}
}
......@@ -196,13 +196,6 @@ context =
raw gtp_addr_v6 {{ my_ipv6 }}
raw gtp_addr_v4 {{ lan_ipv4 }}
raw gtp_addr_lo {{ gtp_addr_lo }}
raw default_lte_bandwidth {{ default_lte_bandwidth }}
raw default_lte_inactivity_timer {{ default_lte_inactivity_timer }}
raw default_nr_bandwidth {{ default_nr_bandwidth }}
raw default_nr_ssb_pos_bitmap {{ default_nr_ssb_pos_bitmap }}
raw default_nr_inactivity_timer {{ default_nr_inactivity_timer }}
raw default_n_antenna_dl {{ default_n_antenna_dl }}
raw default_n_antenna_ul {{ default_n_antenna_ul }}
json do_lte {{ do_lte | tojson }}
json do_nr {{ do_nr | tojson }}
import netaddr netaddr
......
......@@ -7,9 +7,9 @@
{#- defaults for ORS parameters.
TODO automatically load ORS/enb and ORS/gnb defaults from JSON schema #}
{%- set ors_enb_defaults = {
"bandwidth": str(default_lte_bandwidth),
"n_antenna_dl": int(default_n_antenna_dl),
"n_antenna_ul": int(default_n_antenna_ul),
"bandwidth": "20 MHz",
"n_antenna_dl": 2,
"n_antenna_ul": 2,
"rf_mode": "tdd",
"tdd_ul_dl_config": "[Configuration 2] 5ms 2UL 6DL (default)",
"pci": 1,
......@@ -19,22 +19,22 @@
"enb_id": "0x1A2D0",
"mme_list": {'1': {'mme_addr': '127.0.1.100'}},
"plmn_list": {"1": {'plmn': '00101'}},
"inactivity_timer": int(default_lte_inactivity_timer),
"inactivity_timer": 10000,
} %}
{%- set ors_gnb_defaults = {
"nr_bandwidth": float(default_nr_bandwidth),
"n_antenna_dl": int(default_n_antenna_dl),
"n_antenna_ul": int(default_n_antenna_ul),
"nr_bandwidth": 40,
"n_antenna_dl": 2,
"n_antenna_ul": 2,
"rf_mode": "tdd",
"tdd_ul_dl_config": "5ms 2UL 7DL 4/6 (default)",
"ssb_pos_bitmap": default_nr_ssb_pos_bitmap,
"ssb_pos_bitmap": "10000000",
"pci": 500,
"cell_id": "0x01",
"gnb_id": "0x12345",
"gnb_id_bits": 28,
"amf_list": {'1': {'amf_addr': '127.0.1.100'}},
"plmn_list": {'1': {'plmn': '00101', 'tac': 100}},
"inactivity_timer": int(default_nr_inactivity_timer),
"inactivity_timer": 10000,
} %}
{%- set ors_defaults = {'enb': ors_enb_defaults, 'gnb': ors_gnb_defaults} [enb_mode] %}
......
{
"type": "object",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Input Parameters",
"properties": {
"ue": {
"title": "UE",
"oneOf": [
{
"$ref": "ue/lte/input-schema.json"
},
{
"$ref": "ue/nr/input-schema.json"
}
]
},
"tx_gain": {
"title": "Tx gain",
"description": "Tx gain (in dB)",
"type": "number"
},
"rx_gain": {
"title": "Rx gain",
"description": "Rx gain (in dB)",
"type": "number"
},
"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 }}
}
}
}
......@@ -93,12 +93,6 @@ context =
section pub_info publish-connection-information
key slap_configuration myslap:configuration
key slapparameter_dict myslap:parameter_dict
raw default_lte_bandwidth {{ default_lte_bandwidth }}
raw default_nr_bandwidth {{ default_nr_bandwidth }}
raw default_n_antenna_dl {{ default_n_antenna_dl }}
raw default_n_antenna_ul {{ default_n_antenna_ul }}
raw default_imsi {{ default_imsi }}
raw default_k {{default_k}}
[lte-ue-config]
<= config-base
......
......@@ -138,13 +138,6 @@ extra-context =
raw ru_tapsplit ${ru_tapsplit:target}
raw netcapdo ${netcapdo:exe}
raw openssl_location ${openssl:location}
raw default_lte_bandwidth ${default-params:default-lte-bandwidth}
raw default_lte_inactivity_timer ${default-params:default-lte-inactivity-timer}
raw default_nr_bandwidth ${default-params:default-nr-bandwidth}
raw default_nr_ssb_pos_bitmap ${default-params:default-nr-ssb-pos-bitmap}
raw default_nr_inactivity_timer ${default-params:default-nr-inactivity-timer}
raw default_n_antenna_dl ${default-params:default-n-antenna-dl}
raw default_n_antenna_ul ${default-params:default-n-antenna-ul}
raw ru_dnsmasq_template ${ru_dnsmasq.jinja2.cfg:target}
raw dnsmasq_location ${dnsmasq:location}
raw fluent_bit_location ${fluent-bit:location}
......@@ -183,12 +176,6 @@ extra-context =
key sdr amarisoft:sdr
raw ue_template ${ue.jinja2.cfg:target}
raw openssl_location ${openssl:location}
raw default_lte_bandwidth ${default-params:default-lte-bandwidth}
raw default_nr_bandwidth ${default-params:default-nr-bandwidth}
raw default_n_antenna_dl ${default-params:default-n-antenna-dl}
raw default_n_antenna_ul ${default-params:default-n-antenna-ul}
raw default_imsi ${default-params:default-imsi}
raw default_k ${default-params:default-k}
[ue-db-config]
recipe = slapos.recipe.template:jinja2
......
......@@ -22,23 +22,6 @@ generic = {
'bbu' : 'server',
}
defaults = {
'default_lte_bandwidth' : "20 MHz",
'default_lte_inactivity_timer' : 10000,
'default_nr_bandwidth' : 40,
'default_nr_ssb_pos_bitmap' : "10000000",
'default_n_antenna_dl' : 2,
'default_n_antenna_ul' : 2,
'default_nr_inactivity_timer' : 10000,
'default_imsi' : "001010123456789",
'default_k' : "00112233445566778899aabbccddeeff",
}
instance_json_template_map = {}
for software_type in ['enb', 'gnb', 'ue']:
with open('instance-{}-input-schema.json.jinja2'.format(software_type), 'r') as f:
instance_json_template_map[software_type] = Template(f.read())
with open('software.jinja2.cfg', 'r') as f:
software_template = Template(f.read())
......@@ -52,7 +35,7 @@ def emit(path, data):
f.write(data)
for software in (ors, generic):
ctx = software | defaults | global_context
ctx = software | global_context
if software is generic:
v = ''
else:
......@@ -60,20 +43,3 @@ for software in (ors, generic):
emit('software{}.cfg'.format(v),
software_template.render(**ctx))
for software_type in ['enb', 'gnb', 'ue']:
# no ue for ors
if software['bbu'] == 'ors' and software_type == 'ue':
continue
emit('instance{}-{}-input-schema.json'.format(
v,
software_type),
instance_json_template_map[software_type].render(**ctx))
# render emits file @ path from path.jinja2
def render(path):
with open('%s.jinja2' % path, 'r') as f:
template = Template(f.read())
emit(path, template.render(**defaults, **global_context))
for path in ('ue/common.json', 'ue/lte/input-schema.json', 'ue/nr/input-schema.json'):
render(path)
......@@ -9,7 +9,11 @@
- error reports instantiation error.
-#}
{#- defaults provide default values for lte parameters. #}
{#- defaults provide default values for lte parameters.
it should be kept in sync with "default" in json schemas
TODO automatically load defaults from JSON schemas #}
{%- set defaults = {
'ru': {
},
......@@ -42,7 +46,7 @@
},
'cell/lte': {
'inactivity_timer': default_lte_inactivity_timer,
'inactivity_timer': 10000,
},
'cell/lte/fdd': {
},
......@@ -51,8 +55,8 @@
},
'cell/nr': {
'inactivity_timer': default_nr_inactivity_timer,
'ssb_pos_bitmap': default_nr_ssb_pos_bitmap,
'inactivity_timer': 10000,
'ssb_pos_bitmap': '10000000',
},
'cell/nr/fdd': {
},
......
......@@ -71,12 +71,6 @@ def do(src, out, rat, slapparameter_dict):
"slap_configuration": {
"tap-name": "slaptap9"
},
"default_lte_bandwidth": "10 MHz",
"default_imsi": "001010123456789",
"default_k": "00112233445566778899aabbccddeeff",
"default_nr_bandwidth": 40,
"default_n_antenna_dl": 2,
"default_n_antenna_ul": 2,
"directory": {
"log": "log",
"etc": "etc",
......
......@@ -2,17 +2,3 @@
[buildout]
extends =
software-ors-base.cfg
[default-params]
default-lte-bandwidth = 20 MHz
default-lte-inactivity-timer = 10000
default-nr-bandwidth = 40
default-nr-ssb-pos-bitmap = 10000000
default-nr-inactivity-timer = 10000
default-imsi = 001010123456789
default-k = 00112233445566778899aabbccddeeff
default-n-antenna-dl = 2
default-n-antenna-ul = 2
......@@ -2,17 +2,3 @@
[buildout]
extends =
software-base.cfg
[default-params]
default-lte-bandwidth = 20 MHz
default-lte-inactivity-timer = 10000
default-nr-bandwidth = 40
default-nr-ssb-pos-bitmap = 10000000
default-nr-inactivity-timer = 10000
default-imsi = 001010123456789
default-k = 00112233445566778899aabbccddeeff
default-n-antenna-dl = 2
default-n-antenna-ul = 2
......@@ -6,17 +6,3 @@ extends =
{%- else %}
software-base.cfg
{%- endif %}
[default-params]
default-lte-bandwidth = {{ default_lte_bandwidth }}
default-lte-inactivity-timer = {{ default_lte_inactivity_timer }}
default-nr-bandwidth = {{ default_nr_bandwidth }}
default-nr-ssb-pos-bitmap = {{ default_nr_ssb_pos_bitmap }}
default-nr-inactivity-timer = {{ default_nr_inactivity_timer }}
default-imsi = {{ default_imsi }}
default-k = {{ default_k }}
default-n-antenna-dl = {{ default_n_antenna_dl }}
default-n-antenna-ul = {{ default_n_antenna_ul }}
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "UE. Common properties",
"type": "object",
"required": [
"ue_type",
"rue_addr"
],
"properties": {
"$ref": "../sim/input-schema.json#/properties",
"ue_type": {
"type": "string",
"options": { "hidden": true }
},
"rue_addr": {
"title": "[Required] Remote UE address",
"description": "[Required] Address of remote UE server. Default port is 2152.",
"type": "string",
"default": ""
},
"imsi": {
"$ref": "../sim/input-schema.json#/properties/imsi",
"default": "{{ default_imsi }}"
},
"k": {
"$ref": "../sim/input-schema.json#/properties/k",
"default": "{{ default_k }}"
},
"sim_algo": {
"$ref": "../sim/input-schema.json#/properties/sim_algo",
"description": "Optional enumeration. xor, milenage or tuak (default = milenage). Set the USIM authentication algorithm. Note: test USIM cards use the XOR algorithm."
},
"opc": {
"$ref": "../sim/input-schema.json#/properties/opc",
"default": "milenage"
}
}
}
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "LTE UE",
"type": "object",
"properties": {
"$ref": "../../ue/common.json#/properties",
"ue_type": {
"$ref": "#/properties/ue_type",
"const": "lte",
"template": "lte"
},
"dl_earfcn": {
"title": "DL EARFCN",
"description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell",
"type": "number"
},
"bandwidth": {
"title": "Bandwidth",
"description": "Downlink Bandwidth",
"type": "string",
"enum": [
"1.4 MHz",
"3 MHz",
"5 MHz",
"10 MHz",
"15 MHz",
"20 MHz"
],
"default": "{{ default_lte_bandwidth }}"
}
}
}
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "NR UE",
"type": "object",
"properties": {
"$ref": "../../ue/common.json#/properties",
"ue_type": {
"$ref": "#/properties/ue_type",
"const": "lte",
"template": "lte"
},
"dl_nr_arfcn": {
"title": "DL NR ARFCN",
"description": "Downlink NR Absolute Radio Frequency Channel Number of the cell",
"type": "number"
},
"band": {
"title": "NR band",
"description": "NR band number",
"type": "number"
},
"bandwidth": {
"title": "Bandwidth",
"description": "Downlink Bandwidth (in MHz)",
"type": "number",
"default": {{ default_nr_bandwidth }}
},
"ssb_nr_arfcn": {
"title": "SSB NR ARFCN",
"description": "SSB NR ARFCN, you can retrieve from ENB/GNB side",
"type": "number"
}
}
}
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