Commit 96be37c3 authored by Kirill Smelkov's avatar Kirill Smelkov

X disable_sdr is gone from generic

Whether RU is enabled or disabled is controlled via per-ru ru.txrx_active
parent 28b0b098
...@@ -6,11 +6,9 @@ ...@@ -6,11 +6,9 @@
// Radio Units // Radio Units
rf_driver: { rf_driver: {
// XXX vvv <- ru.txrx_active ? XXX how to handle txrx_active for SDR ?
// (tx_gain=-1000 does not work - it still sets tx_gain to min.possible value 14)
name: "sdr",
// RU1 2T1R (sdr) // RU1 2T1R (sdr)
// RU2 2T1R (sdr) // RU2 2T1R (sdr)
name: "sdr",
args: "dev0=/dev/sdr1,dev1=/dev/sdr2", args: "dev0=/dev/sdr1,dev1=/dev/sdr2",
rx_antenna:"tx_rx", rx_antenna:"tx_rx",
tdd_tx_mod: 1, tdd_tx_mod: 1,
......
...@@ -9,16 +9,14 @@ ...@@ -9,16 +9,14 @@
// Radio Units // Radio Units
rf_driver: { rf_driver: {
// XXX vvv <- ru.txrx_active ? XXX how to handle txrx_active for SDR ?
// (tx_gain=-1000 does not work - it still sets tx_gain to min.possible value 14)
name: "sdr",
// __UCELL1__ru 2T1R (sdr) // __UCELL1__ru 2T1R (sdr)
// __UCELL2__ru 2T2R (sdr) // __UCELL2__ru 2T2R (sdr)
name: "dummy",
args: "dev0=/dev/sdr0,dev1=/dev/sdr2", args: "dev0=/dev/sdr0,dev1=/dev/sdr2",
rx_antenna:"tx_rx", rx_antenna:"tx_rx",
tdd_tx_mod: 1, tdd_tx_mod: 1,
}, },
tx_gain: [41, 41, 31, 31], tx_gain: [-1000, -1000, -1000, -1000],
rx_gain: [42, 32, 32], rx_gain: [42, 32, 32],
......
...@@ -163,12 +163,6 @@ ...@@ -163,12 +163,6 @@
"description": "True if GPS should be used for synchronisation", "description": "True if GPS should be used for synchronisation",
"type": "boolean" "type": "boolean"
}, },
"disable_sdr": {
"default": false,
"title": "Disable SDR XXX kill ?",
"description": "Disables radio",
"type": "boolean"
},
"use_ipv4": { "use_ipv4": {
"default": false, "default": false,
"title": "Use IPv4", "title": "Use IPv4",
......
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
'n_antenna_ul': slapparameter_dict.n_antenna_ul, 'n_antenna_ul': slapparameter_dict.n_antenna_ul,
'tx_gain': ors_version['current-tx-gain'], 'tx_gain': ors_version['current-tx-gain'],
'rx_gain': ors_version['current-rx-gain'], 'rx_gain': ors_version['current-rx-gain'],
'txrx_active': 'ACTIVE', 'txrx_active': 'ACTIVE' if (not slapparameter_dict.disable_sdr) else 'INACTIVE',
} |tojson } |tojson
}) })
%} %}
......
...@@ -194,42 +194,16 @@ ...@@ -194,42 +194,16 @@
{%- set _ = ishared['_'] %} {%- set _ = ishared['_'] %}
{%- if 'ru_type' in _ %} {%- if 'ru_type' in _ %}
{%- set iru = ishared %} {%- set iru = ishared %}
{%- for k, v in defaults['ru'].items() %} {%- do _ru_set_defaults(_) %}
{%- do _.setdefault(k, v) %}
{%- endfor %}
{%- for k, v in defaults.get('ru/'+_.ru_type, {}).items() %}
{%- do _.setdefault(k, v) %}
{%- endfor %}
{%- if _.ru_link_type == 'cpri' %}
{%- set link = _.cpri_link %}
{%- for k, v in defaults['ru/cpri_link'].items() %}
{%- do link.setdefault(k, v) %}
{%- endfor %}
{%- endif %}
{%- do iru_dict.update({ref: iru}) %} {%- do iru_dict.update({ref: iru}) %}
{%- elif 'cell_type' in _ and _.get('cell_kind') == icell_kind %} {%- elif 'cell_type' in _ and _.get('cell_kind') == icell_kind %}
{%- set icell = ishared %} {%- set icell = ishared %}
{%- if icell_kind == 'enb' %} {%- do _cell_set_defaults(_, icell_kind) %}
{%- for k, v in defaults['cell/%s' % _.cell_type].items() %}
{%- do _.setdefault(k, v) %}
{%- endfor %}
{%- for k, v in defaults['cell/%s/%s' % (_.cell_type, _.rf_mode)].items() %}
{%- do _.setdefault(k, v) %}
{%- endfor %}
{%- endif %}
{%- if _.cell_type == 'lte' %}
{%- do _.setdefault('ul_earfcn', J(jdefault_ul_earfcn(_.dl_earfcn))) %}
{%- elif _.cell_type == 'nr' %}
{%- do _.setdefault('ul_nr_arfcn', J(jdefault_ul_nr_arfcn(_.dl_nr_arfcn, _.nr_band))) %}
{%- do _.setdefault('subcarrier_spacing', 30 if _.rf_mode == 'tdd' else 15) %} {# XXX just leave at 30 ? #}
{%- do _.setdefault('ssb_nr_arfcn', J(jdefault_ssb_nr_arfcn(_.dl_nr_arfcn, _.nr_band))) %}
{%- else %}
{%- do bug('unreachable') %}
{%- endif %}
{%- do icell_dict.update({ref: icell}) %} {%- do icell_dict.update({ref: icell}) %}
{%- set ru = _['ru'] %} {%- set ru = _['ru'] %}
{%- if ru.ru_type not in ('ru_ref', 'ruincell_ref') %} {%- if ru.ru_type not in ('ru_ref', 'ruincell_ref') %}
{#- embedded ru definition -> expose it as `_<cell_ref>_ru` #} {#- embedded ru definition -> expose it as `_<cell_ref>_ru` #}
{%- do _ru_set_defaults(ru) %}
{%- do iru_dict.update({'_%s_ru' % ref: { {%- do iru_dict.update({'_%s_ru' % ref: {
'_': ru, '_': ru,
'slave_title': '%s. RU' % icell.slave_title, 'slave_title': '%s. RU' % icell.slave_title,
...@@ -246,7 +220,6 @@ ...@@ -246,7 +220,6 @@
{#- do print('\n>>> iru_dict:'), pprint(iru_dict) #} {#- do print('\n>>> iru_dict:'), pprint(iru_dict) #}
{#- do print('\n>>> icell_dict:'), pprint(icell_dict) #} {#- do print('\n>>> icell_dict:'), pprint(icell_dict) #}
{#- verify that there is no dangling cell->ru references #} {#- verify that there is no dangling cell->ru references #}
{#- XXX also verify that there is no dangling cell -> cell refs in ruincell_ref #} {#- XXX also verify that there is no dangling cell -> cell refs in ruincell_ref #}
{%- for _, icell in icell_dict|dictsort %} {%- for _, icell in icell_dict|dictsort %}
...@@ -280,6 +253,42 @@ ...@@ -280,6 +253,42 @@
{%- endmacro %} {%- endmacro %}
{%- macro _ru_set_defaults(ru) %}
{%- for k, v in defaults['ru'].items() %}
{%- do ru.setdefault(k, v) %}
{%- endfor %}
{%- for k, v in defaults.get('ru/'+ru.ru_type, {}).items() %}
{%- do ru.setdefault(k, v) %}
{%- endfor %}
{%- if ru.ru_link_type == 'cpri' %}
{%- set link = ru.cpri_link %}
{%- for k, v in defaults['ru/cpri_link'].items() %}
{%- do link.setdefault(k, v) %}
{%- endfor %}
{%- endif %}
{%- endmacro %}
{%- macro _cell_set_defaults(cell, icell_kind) %}
{%- if icell_kind == 'enb' %}
{%- for k, v in defaults['cell/%s' % cell.cell_type].items() %}
{%- do cell.setdefault(k, v) %}
{%- endfor %}
{%- for k, v in defaults['cell/%s/%s' % (cell.cell_type, cell.rf_mode)].items() %}
{%- do cell.setdefault(k, v) %}
{%- endfor %}
{%- endif %}
{%- if cell.cell_type == 'lte' %}
{%- do cell.setdefault('ul_earfcn', J(jdefault_ul_earfcn(cell.dl_earfcn))) %}
{%- elif cell.cell_type == 'nr' %}
{%- do cell.setdefault('ul_nr_arfcn', J(jdefault_ul_nr_arfcn(cell.dl_nr_arfcn, cell.nr_band))) %}
{%- do cell.setdefault('subcarrier_spacing', 30 if cell.rf_mode == 'tdd' else 15) %} {# XXX just leave at 30 ? #}
{%- do cell.setdefault('ssb_nr_arfcn', J(jdefault_ssb_nr_arfcn(cell.dl_nr_arfcn, cell.nr_band))) %}
{%- else %}
{%- do bug('unreachable') %}
{%- endif %}
{%- endmacro %}
{#- jcell_ru_ref returns RU reference linked from a cell. {#- jcell_ru_ref returns RU reference linked from a cell.
if the cell embeds RU definition, its reference comes as `_<cell_ref>_ru`. #} if the cell embeds RU definition, its reference comes as `_<cell_ref>_ru`. #}
{%- macro jcell_ru_ref(icell, icell_dict) %} {%- macro jcell_ru_ref(icell, icell_dict) %}
...@@ -413,17 +422,6 @@ ...@@ -413,17 +422,6 @@
{%- macro ru_config(iru_dict, slapparameter_dict) %} {%- macro ru_config(iru_dict, slapparameter_dict) %}
// Radio Units // Radio Units
rf_driver: { rf_driver: {
// XXX vvv <- ru.txrx_active ? XXX how to handle txrx_active for SDR ?
// (tx_gain=-1000 does not work - it still sets tx_gain to min.possible value 14)
{%- if slapparameter_dict.get('disable_sdr', False) %}
name: "dummy",
{%- else %}
name: "sdr",
{%- endif %}
{%- if slapparameter_dict.get('gps_sync', False) %}
sync: "gps",
{%- endif %}
{%- set dev_argv = [] %} {%- set dev_argv = [] %}
{%- set ru_sdr_dict = {} %} {#- dev -> ru for ru with ru_type = sdr #} {%- set ru_sdr_dict = {} %} {#- dev -> ru for ru with ru_type = sdr #}
{%- set ru_cpri_dict = {} %} {#- dev -> ru for ru with link_type = cpri #} {%- set ru_cpri_dict = {} %} {#- dev -> ru for ru with link_type = cpri #}
...@@ -444,11 +442,12 @@ ...@@ -444,11 +442,12 @@
{%- else %} {%- else %}
{%- do bug('unreachable') %} {%- do bug('unreachable') %}
{%- endif %} {%- endif %}
{%- do tx_gainv.extend([ru.tx_gain]*ru.n_antenna_dl) %} {%- set ru_tx_gain = ru.tx_gain if ru.txrx_active == 'ACTIVE' else -1000 %}
{%- do tx_gainv.extend([ru_tx_gain]*ru.n_antenna_dl) %}
{%- do rx_gainv.extend([ru.rx_gain]*ru.n_antenna_ul) %} {%- do rx_gainv.extend([ru.rx_gain]*ru.n_antenna_ul) %}
{%- endfor %} {%- endfor %}
{#- emit big warning if both sdr and cpri are present {#- emit big error if both sdr and cpri are present
to protect users from unclear eNB failures in such unsupported combination #} to protect users from unclear eNB failures in such unsupported combination #}
{%- set do_sdr = len(ru_sdr_dict) > 0 %} {%- set do_sdr = len(ru_sdr_dict) > 0 %}
{%- set do_cpri = len(ru_cpri_dict) > 0 %} {%- set do_cpri = len(ru_cpri_dict) > 0 %}
...@@ -456,18 +455,30 @@ ...@@ -456,18 +455,30 @@
#error Mixing SDR and CPRI is not supported and breaks subtly. See https://support.amarisoft.com/issues/26021 for details. #error Mixing SDR and CPRI is not supported and breaks subtly. See https://support.amarisoft.com/issues/26021 for details.
{%- endif %} {%- endif %}
{#- disable trx completely if all we have is only inactive sdr(s) #}
{%- if do_sdr and (not do_cpri) and
len(iru_dict|dictsort | selectattr('1._.txrx_active', '==', 'ACTIVE') | list) == 0 %}
name: "dummy",
{%- else %}
name: "sdr",
{%- endif %}
{%- if slapparameter_dict.get('gps_sync', False) %}
sync: "gps",
{%- endif %}
{#- below we continue as if sdr and cpri are both supported by enb simultaneously #} {#- below we continue as if sdr and cpri are both supported by enb simultaneously #}
args: "{{(dev_argv | join(',')) or '---'}}", args: "{{(dev_argv | join(',')) or '---'}}",
{#- emit sdr-related options if an sdr ru is present #} {#- emit sdr-related options if an sdr ru is present #}
{%- if len(ru_sdr_dict) > 0 %} {%- if do_sdr %}
rx_antenna:"tx_rx", rx_antenna:"tx_rx",
tdd_tx_mod: 1, tdd_tx_mod: 1,
{%- endif %} {%- endif %}
{#- emit cpri_* options if a cpri ru is present #} {#- emit cpri_* options if a cpri ru is present #}
{#- NOTE values for non-cpri links come as empty #} {#- NOTE values for non-cpri links come as empty #}
{%- if len(ru_cpri_dict) > 0 %} {%- if do_cpri %}
{%- set vcpri = [None]*len(dev_argv) %} {%- set vcpri = [None]*len(dev_argv) %}
{%- for dev, ru in ru_cpri_dict|dictsort %} {%- for dev, ru in ru_cpri_dict|dictsort %}
{%- do vcpri.__setitem__(dev, ru.cpri_link) %} {%- do vcpri.__setitem__(dev, ru.cpri_link) %}
......
...@@ -156,6 +156,7 @@ def iRU2_SDR_tLTE_tNR(ienb): ...@@ -156,6 +156,7 @@ def iRU2_SDR_tLTE_tNR(ienb):
'n_antenna_ul': 1, 'n_antenna_ul': 1,
'tx_gain': 51, 'tx_gain': 51,
'rx_gain': 52, 'rx_gain': 52,
'txrx_active': 'ACTIVE',
} }
RU2 = copy.deepcopy(RU1) RU2 = copy.deepcopy(RU1)
......
...@@ -224,7 +224,7 @@ class RFTestCase4(AmariTestCase): ...@@ -224,7 +224,7 @@ class RFTestCase4(AmariTestCase):
def RU(i): def RU(i):
ru = cls.RUcfg(i) ru = cls.RUcfg(i)
ru |= {'n_antenna_dl': 4, 'n_antenna_ul': 2} ru |= {'n_antenna_dl': 4, 'n_antenna_ul': 2}
ru |= {'tx_gain': 10+i, 'rx_gain': 20+i, 'txrx_active': 'INACTIVE'} ru |= {'tx_gain': 10+i, 'rx_gain': 20+i, 'txrx_active': 'ACTIVE'}
cls.requestShared(imain, 'RU%d' % i, ru) cls.requestShared(imain, 'RU%d' % i, ru)
def CELL(i, ctx): def CELL(i, ctx):
...@@ -450,6 +450,7 @@ class SDR4: ...@@ -450,6 +450,7 @@ class SDR4:
# radio units configuration # radio units configuration
def test_rf_cfg_ru(t): def test_rf_cfg_ru(t):
assertMatch(t, t.rf_cfg['rf_driver'], dict( assertMatch(t, t.rf_cfg['rf_driver'], dict(
name='sdr',
args='dev0=/dev/sdr2,dev1=/dev/sdr3,dev2=/dev/sdr4,dev3=/dev/sdr5,' + args='dev0=/dev/sdr2,dev1=/dev/sdr3,dev2=/dev/sdr4,dev3=/dev/sdr5,' +
'dev4=/dev/sdr6,dev5=/dev/sdr7,dev6=/dev/sdr8,dev7=/dev/sdr9', 'dev4=/dev/sdr6,dev5=/dev/sdr7,dev6=/dev/sdr8,dev7=/dev/sdr9',
cpri_mapping=NO, cpri_mapping=NO,
...@@ -482,6 +483,7 @@ class Lopcomm4: ...@@ -482,6 +483,7 @@ class Lopcomm4:
# radio units configuration in enb.cfg # radio units configuration in enb.cfg
def test_rf_cfg_ru(t): def test_rf_cfg_ru(t):
assertMatch(t, t.rf_cfg['rf_driver'], dict( assertMatch(t, t.rf_cfg['rf_driver'], dict(
name='sdr',
args='dev0=/dev/sdr0@1,dev1=/dev/sdr0@2,dev2=/dev/sdr0@3,dev3=/dev/sdr0@4', args='dev0=/dev/sdr0@1,dev1=/dev/sdr0@2,dev2=/dev/sdr0@3,dev3=/dev/sdr0@4',
cpri_mapping='hw,hw,hw,hw', cpri_mapping='hw,hw,hw,hw',
cpri_mult='4,4,4,4', cpri_mult='4,4,4,4',
...@@ -580,6 +582,7 @@ class Sunwave4: ...@@ -580,6 +582,7 @@ class Sunwave4:
# radio units configuration in enb.cfg # radio units configuration in enb.cfg
def test_rf_cfg_ru(t): def test_rf_cfg_ru(t):
assertMatch(t, t.rf_cfg['rf_driver'], dict( assertMatch(t, t.rf_cfg['rf_driver'], dict(
name='sdr',
args='dev0=/dev/sdr1@1,dev1=/dev/sdr1@2,dev2=/dev/sdr1@3,dev3=/dev/sdr1@4', args='dev0=/dev/sdr1@1,dev1=/dev/sdr1@2,dev2=/dev/sdr1@3,dev3=/dev/sdr1@4',
cpri_mapping='bf1,bf1,bf1,bf1', cpri_mapping='bf1,bf1,bf1,bf1',
cpri_mult='5,5,5,5', cpri_mult='5,5,5,5',
...@@ -603,6 +606,7 @@ class RUMultiType4: ...@@ -603,6 +606,7 @@ class RUMultiType4:
# radio units configuration in enb.cfg # radio units configuration in enb.cfg
def test_rf_cfg_ru(t): def test_rf_cfg_ru(t):
assertMatch(t, t.rf_cfg['rf_driver'], dict( assertMatch(t, t.rf_cfg['rf_driver'], dict(
name='sdr',
args='dev0=/dev/sdr0@1,dev1=/dev/sdr0@2,dev2=/dev/sdr1@3,dev3=/dev/sdr1@4', args='dev0=/dev/sdr0@1,dev1=/dev/sdr0@2,dev2=/dev/sdr1@3,dev3=/dev/sdr1@4',
cpri_mapping='hw,hw,bf1,bf1', cpri_mapping='hw,hw,bf1,bf1',
cpri_mult='4,4,5,5', cpri_mult='4,4,5,5',
......
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