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

ors-amarisoft: add support for AW2S Swallow CPRI board

parent f185af94
......@@ -16,7 +16,7 @@
[template]
filename = instance.cfg
md5sum = 43f02b7b3552d0d657fa7dbf43ce20a5
md5sum = abdaff3013c324f6730a60ecf6b3e0ba
[template-ors]
filename = instance-ors.cfg
......@@ -36,19 +36,23 @@ md5sum = ab666fdfadbfc7d8a16ace38d295c883
[ru_libinstance.jinja2.cfg]
_update_hash_filename_ = ru/libinstance.jinja2.cfg
md5sum = 2dda7713832be83d94522c7abb4901f9
md5sum = 03d73ba1c184ee85cc2407db078d67f3
[ru_sdr_libinstance.jinja2.cfg]
_update_hash_filename_ = ru/sdr/libinstance.jinja2.cfg
md5sum = b7906ca3a6b17963f78f680fc0842b74
md5sum = b1511c5916fe9b362df06aa1fee8fa58
[ru_lopcomm_libinstance.jinja2.cfg]
_update_hash_filename_ = ru/lopcomm/libinstance.jinja2.cfg
md5sum = caa51d27f5a5cd5b23e4c088b3e3bb02
md5sum = 931f414531536c84f1924d334e1e955e
[ru_aw2s_libinstance.jinja2.cfg]
_update_hash_filename_ = ru/aw2s/libinstance.jinja2.cfg
md5sum = 36935130de3c3db6dae2ddb781b22bf0
[ru_sunwave_libinstance.jinja2.cfg]
_update_hash_filename_ = ru/sunwave/libinstance.jinja2.cfg
md5sum = bc5d82b8737b6990674b280ef2774be7
md5sum = 9c13c8946dda5a12ce60c65c8912a03a
[ru_lopcomm_ncclient_common.py]
_update_hash_filename_ = ru/lopcomm/ncclient_common.py
......@@ -88,7 +92,7 @@ md5sum = 52da9fe3a569199e35ad89ae1a44c30e
[template-enb]
_update_hash_filename_ = instance-enb.jinja2.cfg
md5sum = 8b9301f26fc4ffbc7eda9c1ac8da1a46
md5sum = 61f65a166bb8e09849f1dc3797edf97e
[template-ors-enb]
_update_hash_filename_ = instance-ors-enb.jinja2.cfg
......@@ -108,11 +112,11 @@ md5sum = c5f581ba01654b2aec46000abf8d0e35
[ue_db.jinja2.cfg]
filename = config/ue_db.jinja2.cfg
md5sum = 3b901e8733e6afff8940c6c318da4493
md5sum = 8d3048d8d7e53e2a78f979e732e83e8b
[enb.jinja2.cfg]
filename = config/enb.jinja2.cfg
md5sum = 1b8dc68206485299c08ab0e1544773f6
md5sum = 1dd2d51298cc1c704c2157d18fefb29b
[drb_lte.jinja2.cfg]
filename = config/drb_lte.jinja2.cfg
......@@ -154,6 +158,14 @@ md5sum = e435990eb0a0d4be41efa9bd16dce09b
_update_hash_filename_ = ru/lopcomm/cu_config.jinja2.xml
md5sum = 346c911e1ac5e5001a39c8926b44c91e
[ru_aw2s_swallow.jinja2.xml]
_update_hash_filename_ = ru/aw2s/swallow.jinja2.xml
md5sum = f584d47e814b388309ba89399d40029f
[ru_aw2s_rmu.jinja2.xml]
_update_hash_filename_ = ru/aw2s/rmu.jinja2.xml
md5sum = c130e4c6cac181da590c5f81e444a615
[software.cfg.html]
_update_hash_filename_ = gadget/software.cfg.html
md5sum = 61a2f783fbf683a34aed3d13e00baca2
......
......@@ -108,6 +108,9 @@
{
"$ref": "../ru/lopcomm/input-schema.json"
},
{
"$ref": "../ru/aw2s/input-schema.json"
},
{
"$ref": "../ru/sunwave/input-schema.json"
}
......
......@@ -143,7 +143,21 @@
log_filename: "{{ directory['log'] }}/enb.log",
{# instantiate radio units #}
{%- if len(iru_dict|dictsort|selectattr('1._.ru_link_type', '==', 'aw2s_cpri')|list) > 0 %}
rf_driver: {
name: "swallow",
path: "/usr/local/lib/lteenb",
xml_config_file: "etc/swallow.xml",
},
tx_gain_offset: -15.0,
tx_gain: 0.0,
rx_gain: 0.0,
tx_pad_duration: 0,
rx_ta_offset: 0.0,
tx_time_offset: 0,
{%- else %}
{{ slaplte.ru_config(iru_dict, slapparameter_dict) }}
{%- endif %}
{%- if slapparameter_dict.get('websocket_password', '') %}
com_addr: "[{{ gtp_addr_v6 }}]:{{ slapparameter_dict.com_ws_port }}",
......
......@@ -23,5 +23,18 @@ ue_db: [
{%- endif %}
}
{%- endfor -%}
]
{%- if len(slap_configuration['sim_list']) > 0 %}
, {
{%- else %}
{
{%- endif %}
sim_algo: "xor",
imsi: "001010123456789",
amf: 0x9001,
sqn: "000000000000",
K: "00112233445566778899aabbccddeeff",
impi: "001010123456789@ims.mnc001.mcc001.3gppnetwork.org",
impu: ["001010123456789", "tel:0600000000", "tel:600"],
domain: "ims.mnc001.mcc001.3gppnetwork.org",
multi_sim: true,
}]
......@@ -89,22 +89,6 @@ version = {{ slapparameter_dict.get("enb_config_version") }}
offline = false
{% endif %}
[enb-sh-wrapper]
recipe = slapos.recipe.template
output = ${directory:bin}/${:_buildout_section_name_}
enb-log = ${directory:log}/enb-output.log
inline =
#!/bin/sh
{% if not slapparameter_dict.get("testing", False) %}
sudo -n /opt/amarisoft/rm-tmp-lte;
sudo -n /opt/amarisoft/init-sdr;
sudo -n /opt/amarisoft/init-enb;
(echo && echo && date "+[%Y/%m/%d %T.%N %Z] Starting eNB software..." && echo) >> ${:enb-log};
tail -c 1M ${:enb-log} > ${:enb-log}.tmp;
mv ${:enb-log}.tmp ${:enb-log};
{{ enb }}/lteenb ${directory:etc}/enb.cfg >> ${:enb-log} 2>> ${:enb-log};
{% endif %}
[enb-service]
recipe = slapos.cookbook:wrapper
command-line = ${enb-sh-wrapper:output}
......@@ -115,6 +99,8 @@ pidfile = ${directory:run}/enb.pid
hash-files =
${enb-config:output}
${enb-sh-wrapper:output}
${swallow.xml:output}
${rmu.xml:output}
environment =
LD_LIBRARY_PATH={{ openssl_location }}/lib
AMARISOFT_PATH=/opt/amarisoft/.amarisoft
......
......@@ -47,6 +47,7 @@ import-list =
rawfile ru_libinstance.jinja2.cfg ${ru_libinstance.jinja2.cfg:target}
rawfile ru_sdr_libinstance.jinja2.cfg ${ru_sdr_libinstance.jinja2.cfg:target}
rawfile ru_lopcomm_libinstance.jinja2.cfg ${ru_lopcomm_libinstance.jinja2.cfg:target}
rawfile ru_aw2s_libinstance.jinja2.cfg ${ru_aw2s_libinstance.jinja2.cfg:target}
rawfile ru_sunwave_libinstance.jinja2.cfg ${ru_sunwave_libinstance.jinja2.cfg:target}
# activate eggs and modules used in jinja2 templates
......@@ -168,6 +169,8 @@ extra-context =
raw ru_lopcomm_cu_inactive_config_template ${ru_lopcomm_cu_config.jinja2.xml:target}
raw ru_lopcomm_firmware_path ${ru_lopcomm_firmware-dl:target}
raw ru_lopcomm_firmware_filename ${ru_lopcomm_firmware-dl:filename}
raw ru_aw2s_swallow_xml_template ${ru_aw2s_swallow.jinja2.xml:target}
raw ru_aw2s_rmu_xml_template ${ru_aw2s_rmu.jinja2.xml:target}
raw ru_tapsplit ${ru_tapsplit:target}
raw netcapdo ${netcapdo:exe}
raw openssl_location ${openssl:location}
......
# ru/aw2s/buildout.cfg provides software code for handling AW2S Radio Units.
[buildout]
parts +=
ru_aw2s_swallow.jinja2.xml
ru_aw2s_rmu.jinja2.xml
[ru_aw2s_swallow.jinja2.xml]
<= download-base
[ru_aw2s_rmu.jinja2.xml]
<= download-base
[ru_aw2s_libinstance.jinja2.cfg]
<= download-base
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "AW2S",
"type": "object",
"required": [
"ru_type",
"ru_link_type",
"n_antenna_dl",
"n_antenna_ul"
],
"properties": {
"$ref": "../../ru/common.json#/properties",
"ru_type": {
"$ref": "#/properties/ru_type",
"const": "aw2s"
},
"ru_link_type": {
"$ref": "#/properties/ru_link_type",
"const": "aw2s"
},
"n_antenna_dl": {
"$ref": "#/properties/n_antenna_dl",
"default": 2
},
"n_antenna_ul": {
"$ref": "#/properties/n_antenna_ul",
"default": 2
},
"aw2s_cpri_link": {
"title": "AW2S CPRI link settings",
"type": "object",
"required": [
"swallow_board",
"sfp_port"
],
"properties": {
"swallow_board": {
"title": "ID of swallow board",
"type": "integer"
},
"sfp_port": {
"title": "SFP port # on the CPRI board",
"type": "integer"
},
"mult": {
"title": "CPRI line bit rate multipler",
"description": "Select the CPRI line bit rate in terms of multiple of option 1 (614.4 Mbps). E.g set 4 for option 3, 8 for option 5 and 16 for option 7",
"type": "integer",
"enum": [
4,
5,
8,
16
],
"default": 16
}
}
}
}
}
{#- Package ru/aw2s/libinstance provides instance code for handling AW2S Radio Units. #}
{%- macro buildout_swallow(iru_dict, icell_dict) %}
[swallow.xml]
<= config-base
url = {{ ru_aw2s_swallow_xml_template }}
output = ${directory:etc}/swallow.xml
extra-context =
key iru_dict :iru_dict
key icell_dict :icell_dict
import json_module json
iru_dict = {{ dumps(iru_dict) }}
icell_dict = {{ dumps(icell_dict) }}
import-list =
rawfile slaplte.jinja2 {{ slaplte_template }}
[rmu.xml]
<= config-base
url = {{ ru_aw2s_rmu_xml_template }}
output = ${directory:etc}/rmu.xml
extra-context =
key iru_dict :iru_dict
key icell_dict :icell_dict
iru_dict = {{ dumps(iru_dict) }}
icell_dict = {{ dumps(icell_dict) }}
{%- endmacro %}
{%- macro buildout() %}
[enb-sh-wrapper]
recipe = slapos.recipe.template
output = ${directory:bin}/${:_buildout_section_name_}
enb-log = ${directory:log}/enb-output.log
inline =
#!/bin/sh
{% if not testing %}
sudo -n /opt/amarisoft/rm-tmp-lte;
sudo -n /opt/amarisoft/init-enb;
(echo && echo && date "+[%Y/%m/%d %T.%N %Z] Starting eNB software..." && echo) >> ${:enb-log};
tail -c 1M ${:enb-log} > ${:enb-log}.tmp;
mv ${:enb-log}.tmp ${:enb-log};
sudo -n {{ enb }}/lteenb ${directory:etc}/enb.cfg >> ${:enb-log} 2>> ${:enb-log};
{% endif %}
{%- endmacro %}
{%- macro buildout_iru(iru, icell_list) %}
{%- endmacro %}
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Radio Management Unit configuration file -->
<rmu>
<!-- Swallow configuration -->
<swallow minor="*">
<sync mode="gps" output="umts"/>
<port id="*" line-speed="3" defragment="true"/>
</swallow>
<!-- Optional FTP links -->
<ftp>
<link alias="Releases">
<host>127.0.0.1</host>
<user>user</user>
<password>default0</password>
<directory>releases</directory>
</link>
</ftp>
</rmu>
{%- import 'slaplte.jinja2' as slaplte with context %}
<?xml version="1.0" encoding="utf-8"?>
<!-- Swallow V6 LTEENB TRx PCIe configuration file -->
{%- set cpri_board_list = [] %}
{%- for (ru_ref, iru) in iru_dict.items() | sort(attribute="1._._rf_port") %}
{%- set ru = iru['_'] %}
{%- set cpri_board = ru.aw2s_cpri_link.swallow_board %}
{%- if cpri_board not in cpri_board_list %}
{%- do cpri_board_list.append(cpri_board) %}
{%- endif %}
{%- endfor %}
{%- for cpri_board in cpri_board_list|sort %}
<swallow minor="{{ cpri_board }}">
<!-- CPU management -->
<cpu wait-mode="poll" irq-interval-us="250"/>
{%- if len(cpri_board_list) == 1 %}
<!-- Synchronization scheme (ignored when using MRAT transceiver) -->
<sync mode="gps" output="umts"/>
<!-- CPRI master ports setup (ignored when using MRAT transceiver) -->
{%- for (ru_ref, iru) in iru_dict.items() | sort(attribute="1._._rf_port") %}
{%- set ru = iru['_'] %}
<port id="{{ ru._rf_port }}" cpri-line-speed="{{ ru.aw2s_cpri_link.cpri_line_speed }}"/>
{%- endfor %}
{%- endif %}
<!-- Cells configuration -->
{%- for cell_index, (cell_ref, icell) in enumerate(icell_dict|dictsort) %}
{%- set cell = icell['_'] %}
{%- set ru_ref = slaplte.J(slaplte.jcell_ru_ref(icell, icell_dict)) %}
{%- set iru = iru_dict[ru_ref] %}
{%- set ru = iru['_'] %}
{%- if ru.aw2s_cpri_link.swallow_board == cpri_board %}
<cell id="{{ cell_index }}">
<iq-compression type="none" tx-sigma="7000" rx-sigma="4000"/>
{%- for ant in range(ru.n_antenna_dl) %}
<tx id="{{ ant }}" master-port="{{ ru._rf_port }}" hop-count="0" antport="{{ ant }}" power-dBm="{{ cell.power_dbm }}"/>
{%- endfor %}
{%- for ant in range(ru.n_antenna_ul) %}
<rx id="{{ ant }}" master-port="{{ ru._rf_port }}" hop-count="0" antport="{{ ant }}"/>
{%- endfor %}
</cell>
{%- endif %}
{%- endfor %}
</swallow>
{%- endfor %}
......@@ -4,6 +4,7 @@
extends =
sdr/buildout.cfg
lopcomm/buildout.cfg
aw2s/buildout.cfg
sunwave/buildout.cfg
parts +=
......
......@@ -9,6 +9,9 @@
{
"$ref": "lopcomm/input-schema.json"
},
{
"$ref": "aw2s/input-schema.json"
},
{
"$ref": "sunwave/input-schema.json"
}
......
......@@ -20,7 +20,6 @@
{%- set icell_dict = {} %}
{%- do slaplte.load_iru_and_icell(iru_dict, icell_dict, icell_kind) %}
{%- macro buildout() %}
{%- set root = slap_configuration['instance-title'] %}
{%- set testing = slapparameter_dict.get("testing", False) %}
......@@ -54,9 +53,11 @@ config-stats-period = {{ slapparameter_dict.get("enb_stats_fetch_period", 60) }}
{%- set ierror = slaplte.ierror %}
{%- import 'ru_sdr_libinstance.jinja2.cfg' as rudrv_sdr with context %}
{%- import 'ru_lopcomm_libinstance.jinja2.cfg' as rudrv_lopcomm with context %}
{%- import 'ru_aw2s_libinstance.jinja2.cfg' as rudrv_aw2s with context %}
{%- import 'ru_sunwave_libinstance.jinja2.cfg' as rudrv_sunwave with context %}
{%- set rudrv_dict = namespace(sdr=rudrv_sdr,
lopcomm=rudrv_lopcomm,
aw2s=rudrv_aw2s,
sunwave=rudrv_sunwave) %}
{%- set rudrv_init = {} %}
......@@ -216,7 +217,7 @@ config-sdr_dev = {{ ru.cpri_link.sdr_dev }}
config-sfp_port = {{ ru.cpri_link.sfp_port }}
config-amarisoft-rf-info-log = ${ru_amarisoft-rf-info-template:log-output}
{%- else %}
{%- elif ru.ru_link_type != 'aw2s_cpri' %}
{%- do bug('unreachable') %}
{%- endif %}
......@@ -233,6 +234,9 @@ config-max-rx-sample-db = {{ slapparameter_dict.get("max_rx_sample_db", 0) }}
{%- do rudrv_init.update({ru.ru_type: 1}) %}
{%- endif %}
{{ rudrv.buildout_iru(iru, iru_icell_list) }}
{%- if ru.ru_type == 'aw2s' %}
{{ rudrv.buildout_swallow(iru_dict, icell_dict) }}
{%- endif %}
{#- publish information about RU (skipping synthetic) #}
{%- if iru.slave_reference %}
......@@ -248,8 +252,10 @@ cell-list = {{ dumps(iru_icell_ref_list) }}
{%- if ru.ru_link_type == 'cpri' %}
ipv6 = ${vtap.{{ ru.cpri_link._tap }}:gateway}
{%- endif %}
{%- if ru.ru_link_type != 'aw2s_cpri' %}
tx_gain = {{ dumps(ru.tx_gain) }}
rx_gain = {{ dumps(ru.rx_gain) }}
{%- endif %}
txrx_active = {{ dumps(ru.txrx_active) }}
{%- endif %}
......
......@@ -248,6 +248,22 @@ firmware = {{ru_lopcomm_firmware_filename}}
{%- macro buildout() %}
[enb-sh-wrapper]
recipe = slapos.recipe.template
output = ${directory:bin}/${:_buildout_section_name_}
enb-log = ${directory:log}/enb-output.log
inline =
#!/bin/sh
{% if not slapparameter_dict.get("testing", False) %}
sudo -n /opt/amarisoft/rm-tmp-lte;
sudo -n /opt/amarisoft/init-sdr;
sudo -n /opt/amarisoft/init-enb;
(echo && echo && date "+[%Y/%m/%d %T.%N %Z] Starting eNB software..." && echo) >> ${:enb-log};
tail -c 1M ${:enb-log} > ${:enb-log}.tmp;
mv ${:enb-log}.tmp ${:enb-log};
{{ enb }}/lteenb ${directory:etc}/enb.cfg >> ${:enb-log} 2>> ${:enb-log};
{% endif %}
# deploy openssh-server for software upgrade
#
# FIXME user-authorized-key is global for eNB. Either we need to put SSH server
......
......@@ -5,5 +5,19 @@
{%- endmacro %}
{%- macro buildout() %}
{#- nothing SDR-specific #}
[enb-sh-wrapper]
recipe = slapos.recipe.template
output = ${directory:bin}/${:_buildout_section_name_}
enb-log = ${directory:log}/enb-output.log
inline =
#!/bin/sh
{% if not slapparameter_dict.get("testing", False) %}
sudo -n /opt/amarisoft/rm-tmp-lte;
sudo -n /opt/amarisoft/init-sdr;
sudo -n /opt/amarisoft/init-enb;
(echo && echo && date "+[%Y/%m/%d %T.%N %Z] Starting eNB software..." && echo) >> ${:enb-log};
tail -c 1M ${:enb-log} > ${:enb-log}.tmp;
mv ${:enb-log}.tmp ${:enb-log};
{{ enb }}/lteenb ${directory:etc}/enb.cfg >> ${:enb-log} 2>> ${:enb-log};
{% endif %}
{%- endmacro %}
......@@ -5,5 +5,19 @@
{%- endmacro %}
{%- macro buildout() %}
{#- nothing SunWave-specific #}
[enb-sh-wrapper]
recipe = slapos.recipe.template
output = ${directory:bin}/${:_buildout_section_name_}
enb-log = ${directory:log}/enb-output.log
inline =
#!/bin/sh
{% if not slapparameter_dict.get("testing", False) %}
sudo -n /opt/amarisoft/rm-tmp-lte;
sudo -n /opt/amarisoft/init-sdr;
sudo -n /opt/amarisoft/init-enb;
(echo && echo && date "+[%Y/%m/%d %T.%N %Z] Starting eNB software..." && echo) >> ${:enb-log};
tail -c 1M ${:enb-log} > ${:enb-log}.tmp;
mv ${:enb-log}.tmp ${:enb-log};
{{ enb }}/lteenb ${directory:etc}/enb.cfg >> ${:enb-log} 2>> ${:enb-log};
{% endif %}
{%- endmacro %}
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