Commit 258e38db authored by Kirill Smelkov's avatar Kirill Smelkov

software/ors-amarisoft: enb: Switch RU to be a runtime parameter

Previously RU type was static parameter of particular software - it was
possible to instantiate cells only with selected RU type for particular template.

In MultiRU it will be possible to generally instantiate all kind of cells -
LTE/NR and TDD/FDD all at the same time and each served by a different kind of Radio Unit.

-> Switch RU to be runtime parameter as a preparatory step for that.

There is now only two software releases:

  - ORS (software-ors.cfg), and
  - generic (software.cfg).

ORS behaviour stays the same as before here by patch.

For generic each cell in cell_list now needs to explicitly specify which kind
of RU it wants to use and with which parameters. There are less defaults: for
example which CPRI board and SFP port to use now needs to be explicitly
specified.

Only ORS tests are left for now. The old test{LOPCOMM,M2RU,ANY} did not
exercised any driver-specific functionality and until recently were not run at
all due to '-' in their file name. We remove them for now and we will add tests
for generic in a soon follow-up patch after switching LTE/NR cell type to also
be a runtime parameter.

Backward compatibility:

  * nothing changes for ORS
  * for generic all RU-related parameters are now moved from cell_list to
    cell_list.ru, there are several renames and besides ru_type ru_link_type also
    needs to be specified. Please see new RU-related JSON schemas added into
    ru/ for details. Cell_list itself now also does not provide a default with
    one cell - if no cells are configured no cells are instantiated.

--------

Appendix. Diff for rendered enb.cfg and gnb.cfg before and after this patch:

```
$ ./pythonwitheggs slapos-render-config.py && xdiff -w config/{old,out}
```

```diff
diff --git a/config/old/enb.cfg b/config/out/enb.cfg
index 1b39f7044..89862f1d9 100644
--- a/config/old/enb.cfg
+++ b/config/out/enb.cfg
@@ -6,7 +6,7 @@

   // Radio Units
   rf_driver: {
-      // default-RU 2T2R  (ors)
+      // CELL-RU 2T2R  (sdr)
       name: "sdr",
       args: "dev0=/dev/sdr0",
       rx_antenna:"tx_rx",
@@ -27,7 +27,7 @@
   // LTE cells
   cell_list: [

-    // default  (default-RU)
+    // CELL  (CELL-RU)
     {
       rf_port:      0,
       n_antenna_dl: 2,
@@ -90,11 +90,11 @@
       srs_hopping_bandwidth: 0,
     },

-    drb_config: "default-drb.cfg",
+    drb_config: "CELL-drb.cfg",

     sib_sched_list: [
       {
-        filename: "default-sib23.asn",
+        filename: "CELL-sib23.asn",
         si_periodicity: 16,
       },
     ],
diff --git a/config/old/gnb.cfg b/config/out/gnb.cfg
index 05deb5ada..1df699a22 100644
--- a/config/old/gnb.cfg
+++ b/config/out/gnb.cfg
@@ -6,7 +6,7 @@

   // Radio Units
   rf_driver: {
-      // default-RU 2T2R  (ors)
+      // CELL-RU 2T2R  (sdr)
       name: "sdr",
       args: "dev0=/dev/sdr0",
       rx_antenna:"tx_rx",
@@ -35,7 +35,7 @@
   // NR cells
   nr_cell_list: [

-      // default  (default-RU)
+      // CELL  (CELL-RU)
       {
         rf_port:      0,
         n_antenna_dl: 2,
@@ -136,7 +136,7 @@
           ],
         },

-        drb_config: "default-drb.cfg",
+        drb_config: "CELL-drb.cfg",
       },
   ],
```
parent 455ebd3b
...@@ -3,18 +3,6 @@ ...@@ -3,18 +3,6 @@
"$schema": "http://json-schema.org/draft-04/schema", "$schema": "http://json-schema.org/draft-04/schema",
"title": "Input Parameters", "title": "Input Parameters",
"properties": { "properties": {
"n_antenna_dl": {
"title": "Number of DL antennas",
"description": "1, 2, 4 or 8. Number of DL antennas.",
"type": "number",
"default": 2
},
"n_antenna_ul": {
"title": "Number of UL antennas",
"description": "1, 2, 4 or 8. Number of UL antennas.",
"type": "number",
"default": 2
},
"cell_list": { "cell_list": {
"title": "Cell List", "title": "Cell List",
"description": "Cell List", "description": "Cell List",
...@@ -46,6 +34,9 @@ ...@@ -46,6 +34,9 @@
} }
} }
}, },
"ru": {
"$ref": "ru/input-schema.json"
},
"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",
...@@ -100,16 +91,6 @@ ...@@ -100,16 +91,6 @@
"type": "object", "type": "object",
"default": {} "default": {}
}, },
"tx_gain": {
"title": "Tx gain",
"description": "Tx gain (in dB)",
"type": "number"
},
"rx_gain": {
"title": "Rx gain",
"description": "Rx gain (in dB)",
"type": "number"
},
"user-authorized-key": { "user-authorized-key": {
"title": "User Authorized Key", "title": "User Authorized Key",
"description": "SSH public key in order to connect to the SSH server of this instance.", "description": "SSH public key in order to connect to the SSH server of this instance.",
......
...@@ -18,28 +18,18 @@ ...@@ -18,28 +18,18 @@
], ],
"default": "{{ default_lte_bandwidth }}" "default": "{{ default_lte_bandwidth }}"
}, },
{%- endif %}
"n_antenna_dl": { "n_antenna_dl": {
"title": "Number of DL antennas", "title": "Number of DL antennas",
{%- if bbu == 'ors' %}
"description": "1 or 2. Number of DL antennas.", "description": "1 or 2. Number of DL antennas.",
{%- else %}
"description": "1, 2, 4 or 8. Number of DL antennas.",
{%- endif %}
"type": "number", "type": "number",
"default": {{ default_n_antenna_dl }} "default": {{ default_n_antenna_dl }}
}, },
"n_antenna_ul": { "n_antenna_ul": {
"title": "Number of UL antennas", "title": "Number of UL antennas",
{%- if bbu == 'ors' %}
"description": "1 or 2. Number of UL antennas.", "description": "1 or 2. Number of UL antennas.",
{%- else %}
"description": "1, 2, 4 or 8. Number of UL antennas.",
{%- endif %}
"type": "number", "type": "number",
"default": {{ default_n_antenna_ul }} "default": {{ default_n_antenna_ul }}
}, },
{%- if bbu == 'ors' %}
"rf_mode": { "rf_mode": {
"title": "RF mode", "title": "RF mode",
"description": "Mode for TX/RX radio multiplexing: Frequency- or Time- Domain Division", "description": "Mode for TX/RX radio multiplexing: Frequency- or Time- Domain Division",
...@@ -126,106 +116,9 @@ ...@@ -126,106 +116,9 @@
} }
} }
}, },
{%- if trx == 'cpri' %} "ru": {
"sdr_number": { "$ref": "ru/input-schema.json"
"title": "SDR Number",
"description": "SDR Number",
"type": "number",
"default": 0
}, },
"cpri_mult": {
"title": "CPRI Mult",
"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": "number",
"default": 16,
"enum": [
4,
5,
8,
16
]
},
"cpri_rx_delay": {
"title": "CPRI RX Delay",
"description": "Delays between TX and RX position in CPRI frame. This should be set to the value of (T2a + T3a - Toffset) provided by the RRH specification.",
"type": "number",
"default": 25.11
},
"cpri_tx_delay": {
"title": "CPRI TX Delay",
"description": "Advances Start of Frame relative to PPS to compensate for delays in transmit line and RRH. This should be set to T12 + T2a.",
"type": "number",
"default": 14.71
},
"cpri_tx_dbm": {
"title": "CPRI TX dBm",
"description": "Optional floating points value in dBm (default 0). Needed by ENB/GNB to have a notion of actual output power. Computed from maximum power output of the RRH for a 0dBFS input signal (full scale). ",
"type": "number",
"default": 63
},
"cpri_port_number": {
"title": "CPRI Port Number",
"description": "CPRI Port Number",
"type": "number",
"default": 0
},
"ru_mac_addr": {
"title": "RU MAC address",
"description": "RU MAC address used for NETCONF",
"type": "string"
},
{%- endif %}
{%- if ru == 'lopcomm' %}
"txa0cc00_active": {
"title": "Lopcomm ORAN TX array carriers (TXA0CC00)",
"description": "Activate or inactivate Lopcomm ORAN TX array carriers (TXA0CC00)",
"type": "string",
"default": "INACTIVE",
"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": "INACTIVE",
"enum": [
"ACTIVE",
"INACTIVE"
]
},
"txa0cc00_center_frequency": {
"title": "Lopcomm ORAN DL Center Frequency in MHz (TXA0CC00)",
"description": "Lopcomm ORAN Center Frequency in MHz (TXA0CC00)",
"type": "number",
"default": 2140
},
"rxa0cc00_center_frequency_earfcn": {
"title": "Lopcomm ORAN UL Center Frequency EARFCN (RXA0CC00)",
"description": "Lopcomm ORAN Center Frequency EARFCN (RXA0CC00)",
"type": "number",
"default": 18300
},
"rxa0cc00_center_frequency": {
"title": "Lopcomm ORAN UL Center Frequency in MHz (RXA0CC00)",
"description": "Lopcomm ORAN Center Frequency in MHz (RXA0CC00)",
"type": "number",
"default": 1950
},
"txa0cc00_gain": {
"title": "ORAN Gain",
"description": "Lopcomm ORAN Gain (TXA0CC00)",
"type": "number",
"default": -20
},
"reset_schedule": {
"title": "Cron schedule for RRH reset",
"description": "Refer https://crontab.guru/ to make a reset schedule for RRH, for example, '0 1 * * *' means the RRH will reset every day at 1 am",
"type": "string"
},
{%- endif %}
"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",
...@@ -281,7 +174,7 @@ ...@@ -281,7 +174,7 @@
"default": {} "default": {}
}, },
{%- endif %} {%- endif %}
{%- if trx == 'sdr' %} {%- if bbu == 'ors' %}
"tx_gain": { "tx_gain": {
"title": "Tx gain", "title": "Tx gain",
"description": "Tx gain (in dB)", "description": "Tx gain (in dB)",
......
...@@ -202,8 +202,6 @@ context = ...@@ -202,8 +202,6 @@ context =
raw gtp_addr_v6 {{ my_ipv6 }} raw gtp_addr_v6 {{ my_ipv6 }}
raw gtp_addr_v4 {{ lan_ipv4 }} raw gtp_addr_v4 {{ lan_ipv4 }}
raw gtp_addr_lo {{ gtp_addr_lo }} raw gtp_addr_lo {{ gtp_addr_lo }}
raw software_name {{ software_name }}
raw ru_type {{ ru_type }}
raw default_lte_bandwidth {{ default_lte_bandwidth }} raw default_lte_bandwidth {{ default_lte_bandwidth }}
raw default_lte_inactivity_timer {{ default_lte_inactivity_timer }} raw default_lte_inactivity_timer {{ default_lte_inactivity_timer }}
raw default_nr_bandwidth {{ default_nr_bandwidth }} raw default_nr_bandwidth {{ default_nr_bandwidth }}
......
...@@ -3,18 +3,6 @@ ...@@ -3,18 +3,6 @@
"$schema": "http://json-schema.org/draft-04/schema", "$schema": "http://json-schema.org/draft-04/schema",
"title": "Input Parameters", "title": "Input Parameters",
"properties": { "properties": {
"n_antenna_dl": {
"title": "Number of DL antennas",
"description": "1, 2, 4 or 8. Number of DL antennas.",
"type": "number",
"default": 2
},
"n_antenna_ul": {
"title": "Number of UL antennas",
"description": "1, 2, 4 or 8. Number of UL antennas.",
"type": "number",
"default": 2
},
"cell_list": { "cell_list": {
"title": "Cell List", "title": "Cell List",
"description": "Cell List", "description": "Cell List",
...@@ -47,6 +35,9 @@ ...@@ -47,6 +35,9 @@
} }
} }
}, },
"ru": {
"$ref": "ru/input-schema.json"
},
"dl_nr_arfcn": { "dl_nr_arfcn": {
"title": "DL NR ARFCN", "title": "DL NR ARFCN",
"description": "Downlink NR Absolute Radio Frequency Channel Number of the cell", "description": "Downlink NR Absolute Radio Frequency Channel Number of the cell",
...@@ -100,16 +91,6 @@ ...@@ -100,16 +91,6 @@
"type": "object", "type": "object",
"default": {} "default": {}
}, },
"tx_gain": {
"title": "Tx gain",
"description": "Tx gain (in dB)",
"type": "number"
},
"rx_gain": {
"title": "Rx gain",
"description": "Rx gain (in dB)",
"type": "number"
},
"user-authorized-key": { "user-authorized-key": {
"title": "User Authorized Key", "title": "User Authorized Key",
"description": "SSH public key in order to connect to the SSH server of this instance.", "description": "SSH public key in order to connect to the SSH server of this instance.",
......
...@@ -10,28 +10,18 @@ ...@@ -10,28 +10,18 @@
"type": "number", "type": "number",
"default": {{ default_nr_bandwidth }} "default": {{ default_nr_bandwidth }}
}, },
{%- endif %}
"n_antenna_dl": { "n_antenna_dl": {
"title": "Number of DL antennas", "title": "Number of DL antennas",
{%- if bbu == 'ors' %}
"description": "1 or 2. Number of DL antennas.", "description": "1 or 2. Number of DL antennas.",
{%- else %}
"description": "1, 2, 4 or 8. Number of DL antennas.",
{%- endif %}
"type": "number", "type": "number",
"default": {{ default_n_antenna_dl }} "default": {{ default_n_antenna_dl }}
}, },
"n_antenna_ul": { "n_antenna_ul": {
"title": "Number of UL antennas", "title": "Number of UL antennas",
{%- if bbu == 'ors' %}
"description": "1 or 2. Number of UL antennas.", "description": "1 or 2. Number of UL antennas.",
{%- else %}
"description": "1, 2, 4 or 8. Number of UL antennas.",
{%- endif %}
"type": "number", "type": "number",
"default": {{ default_n_antenna_ul }} "default": {{ default_n_antenna_ul }}
}, },
{%- if bbu == 'ors' %}
"rf_mode": { "rf_mode": {
"title": "RF mode", "title": "RF mode",
"description": "Mode for TX/RX radio multiplexing: Frequency- or Time- Domain Division", "description": "Mode for TX/RX radio multiplexing: Frequency- or Time- Domain Division",
...@@ -119,106 +109,9 @@ ...@@ -119,106 +109,9 @@
} }
} }
}, },
{%- if trx == 'cpri' %} "ru": {
"sdr_number": { "$ref": "ru/input-schema.json"
"title": "SDR Number",
"description": "SDR Number",
"type": "number",
"default": 0
}, },
"cpri_mult": {
"title": "CPRI Mult",
"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": "number",
"default": 16,
"enum": [
4,
5,
8,
16
]
},
"cpri_rx_delay": {
"title": "CPRI RX Delay",
"description": "Delays between TX and RX position in CPRI frame. This should be set to the value of (T2a + T3a - Toffset) provided by the RRH specification.",
"type": "number",
"default": 25.11
},
"cpri_tx_delay": {
"title": "CPRI TX Delay",
"description": "Advances Start of Frame relative to PPS to compensate for delays in transmit line and RRH. This should be set to T12 + T2a.",
"type": "number",
"default": 14.71
},
"cpri_tx_dbm": {
"title": "CPRI TX dBm",
"description": "Optional floating points value in dBm (default 0). Needed by ENB/GNB to have a notion of actual output power. Computed from maximum power output of the RRH for a 0dBFS input signal (full scale). ",
"type": "number",
"default": 63
},
"cpri_port_number": {
"title": "CPRI Port Number",
"description": "CPRI Port Number",
"type": "number",
"default": 0
},
"ru_mac_addr": {
"title": "RU MAC address",
"description": "RU MAC address used for NETCONF",
"type": "string"
},
{%- endif %}
{%- if ru == 'lopcomm' %}
"txa0cc00_active": {
"title": "Lopcomm ORAN TX array carriers (TXA0CC00)",
"description": "Activate or inactivate Lopcomm ORAN TX array carriers (TXA0CC00)",
"type": "string",
"default": "INACTIVE",
"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": "INACTIVE",
"enum": [
"ACTIVE",
"INACTIVE"
]
},
"txa0cc00_center_frequency": {
"title": "Lopcomm ORAN DL Center Frequency in MHz (TXA0CC00)",
"description": "Lopcomm ORAN Center Frequency in MHz (TXA0CC00)",
"type": "number",
"default": 2140
},
"rxa0cc00_center_frequency_earfcn": {
"title": "Lopcomm ORAN UL Center Frequency EARFCN (RXA0CC00)",
"description": "Lopcomm ORAN Center Frequency EARFCN (RXA0CC00)",
"type": "number",
"default": 18300
},
"rxa0cc00_center_frequency": {
"title": "Lopcomm ORAN UL Center Frequency in MHz (RXA0CC00)",
"description": "Lopcomm ORAN Center Frequency in MHz (RXA0CC00)",
"type": "number",
"default": 1950
},
"txa0cc00_gain": {
"title": "ORAN Gain",
"description": "Lopcomm ORAN Gain (TXA0CC00)",
"type": "number",
"default": -20
},
"reset_schedule": {
"title": "Cron schedule for RRH reset",
"description": "Refer https://crontab.guru/ to make a reset schedule for RRH, for example, '0 1 * * *' means the RRH will reset every day at 1 am",
"type": "string"
},
{%- endif %}
"dl_nr_arfcn": { "dl_nr_arfcn": {
"title": "DL NR ARFCN", "title": "DL NR ARFCN",
"description": "Downlink NR Absolute Radio Frequency Channel Number of the cell", "description": "Downlink NR Absolute Radio Frequency Channel Number of the cell",
...@@ -273,7 +166,7 @@ ...@@ -273,7 +166,7 @@
"default": {} "default": {}
}, },
{%- endif %} {%- endif %}
{%- if trx == 'sdr' %} {%- if bbu == 'ors' %}
"tx_gain": { "tx_gain": {
"title": "Tx gain", "title": "Tx gain",
"description": "Tx gain (in dB)", "description": "Tx gain (in dB)",
......
{
"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": 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
}
}
}
{
"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": 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
}
}
}
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
{%- endif %} {%- endif %}
# code of base enb # code of generic enb
{% include 'instance-enb-base.jinja2.cfg' %} {% include 'instance-enb-base.jinja2.cfg' %}
...@@ -68,7 +68,7 @@ depends += ${publish-connection-information-ors-cleanup:recipe} ...@@ -68,7 +68,7 @@ depends += ${publish-connection-information-ors-cleanup:recipe}
recipe = slapos.recipe.build recipe = slapos.recipe.build
init = init =
publish = self.buildout['publish-connection-information'] publish = self.buildout['publish-connection-information']
cell_ref = "default" cell_ref = "CELL"
for k in publish.keys(): for k in publish.keys():
if k.startswith('%s-' % cell_ref): if k.startswith('%s-' % cell_ref):
del publish[k] del publish[k]
...@@ -35,8 +35,6 @@ context = ...@@ -35,8 +35,6 @@ context =
key slapparameter_dict slap-configuration:configuration key slapparameter_dict slap-configuration:configuration
key lan_ipv4 lan-ip:ipv4 key lan_ipv4 lan-ip:ipv4
key my_ipv6 slap-configuration:ipv6-random key my_ipv6 slap-configuration:ipv6-random
raw software_name ${rf-mode:software-name}
raw ru_type ${rf-mode:ru}
$${:extra-context} $${:extra-context}
import-list = import-list =
rawfile slaplte.jinja2 ${slaplte.jinja2:target} rawfile slaplte.jinja2 ${slaplte.jinja2:target}
......
...@@ -12,29 +12,15 @@ global_context = { ...@@ -12,29 +12,15 @@ global_context = {
'generated_file_message': "This file was generated using a jinja2 template and the render-templates script, don't modify directly." 'generated_file_message': "This file was generated using a jinja2 template and the render-templates script, don't modify directly."
} }
software_list = [ ors = {
{
'software_name' : 'ors', 'software_name' : 'ors',
'trx' : 'sdr',
'bbu' : 'ors', 'bbu' : 'ors',
'ru' : 'sdr', }
}, {
'software_name' : 'm2ru', generic = {
'trx' : 'cpri', 'software_name' : 'generic',
'bbu' : 'server',
'ru' : 'm2ru',
}, {
'software_name' : 'lopcomm',
'trx' : 'cpri',
'bbu' : 'server',
'ru' : 'lopcomm',
}, {
'software_name' : 'any',
'trx' : 'sdr',
'bbu' : 'server', 'bbu' : 'server',
'ru' : 'sdr',
} }
]
defaults = { defaults = {
'default_lte_bandwidth' : "20 MHz", 'default_lte_bandwidth' : "20 MHz",
...@@ -47,8 +33,6 @@ defaults = { ...@@ -47,8 +33,6 @@ defaults = {
'default_imsi' : "001010123456789", 'default_imsi' : "001010123456789",
'default_k' : "00112233445566778899aabbccddeeff", 'default_k' : "00112233445566778899aabbccddeeff",
} }
for i in range (len(software_list)):
software_list[i].update(defaults)
with open('software.cfg.json.jinja2', 'r') as f: with open('software.cfg.json.jinja2', 'r') as f:
software_json_template = Template(f.read()) software_json_template = Template(f.read())
...@@ -60,8 +44,6 @@ for software_type in ['enb', 'gnb', 'ue']: ...@@ -60,8 +44,6 @@ for software_type in ['enb', 'gnb', 'ue']:
with open('software.jinja2.cfg', 'r') as f: with open('software.jinja2.cfg', 'r') as f:
software_template = Template(f.read()) software_template = Template(f.read())
with open('test/test.jinja2.py', 'r') as f:
test_template = Template(f.read())
# emit updates file @ path with data on regular run and deletes it on --delete. # emit updates file @ path with data on regular run and deletes it on --delete.
def emit(path, data): def emit(path, data):
...@@ -72,21 +54,25 @@ def emit(path, data): ...@@ -72,21 +54,25 @@ def emit(path, data):
with open(path, 'w+') as f: with open(path, 'w+') as f:
f.write(data) f.write(data)
for software in software_list: for software in (ors, generic):
emit('software-{}.cfg.json'.format(software['software_name']), ctx = software | defaults | global_context
software_json_template.render(**software, **global_context)) if software is generic:
emit('test/test{}.py'.format(software['software_name'].upper()), v = ''
test_template.render(**software, **global_context)) else:
emit('software-{}.cfg'.format(software['software_name']), v = '-'+software['software_name']
software_template.render(**software, **global_context))
emit('software{}.cfg.json'.format(v),
software_json_template.render(**ctx))
emit('software{}.cfg'.format(v),
software_template.render(**ctx))
for software_type in ['enb', 'gnb', 'ue']: for software_type in ['enb', 'gnb', 'ue']:
# no ue for ors # no ue for ors
if software['bbu'] == 'ors' and software_type == 'ue': if software['bbu'] == 'ors' and software_type == 'ue':
continue continue
emit('instance-{}-{}-input-schema.json'.format( emit('instance{}-{}-input-schema.json'.format(
software['software_name'], v,
software_type), software_type),
instance_json_template_map[software_type].render(**software, **global_context)) instance_json_template_map[software_type].render(**ctx))
# render emits file @ path from path.jinja2 # render emits file @ path from path.jinja2
def render(path): def render(path):
......
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Radio Unit. Common properties",
"type": "object",
"required": [
"ru_type",
"ru_link_type",
"n_antenna_dl",
"n_antenna_ul"
],
"properties": {
"ru_type": {
"type": "string",
"options": { "hidden": true }
},
"ru_link_type": {
"type": "string",
"options": { "hidden": true }
},
"n_antenna_dl": {
"title": "Number of DL antennas",
"type": "integer"
},
"n_antenna_ul": {
"title": "Number of UL antennas",
"type": "integer"
},
"cpri_link": {
"title": "CPRI link settings",
"options": {
"dependencies": {
"ru_link_type": "cpri"
}
},
"type": "object",
"required": [
"sdr_dev",
"sfp_port",
"mapping"
],
"properties": {
"sdr_dev": {
"title": "/dev/sdr # of CPRI board",
"type": "integer"
},
"sfp_port": {
"title": "SFP port # on the CPRI board",
"type": "integer"
},
"mapping": {
"title": "Mapping method of AxCs on the CPRI",
"type": "string",
"enum": ["standard", "hw", "spread", "bf1"]
},
"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
},
"rx_delay": {
"title": "CPRI RX Delay",
"description": "Delays between TX and RX position in CPRI frame. This should be set to the value of (T2a + T3a - Toffset) provided by the RU specification.",
"type": "number",
"default": 0
},
"tx_delay": {
"title": "CPRI TX Delay",
"description": "Advances Start of Frame relative to PPS to compensate for delays in transmit line and RU. This should be set to T12 + T2a.",
"type": "number",
"default": 0
},
"tx_dbm": {
"title": "CPRI TX dBm",
"description": "Optional floating points value in dBm (default 0). Needed by ENB/GNB to have a notion of actual output power. Computed from maximum power output of the RRH for a 0dBFS input signal (full scale). ",
"type": "number",
"default": 0
}
}
},
"mac_addr": {
"title": "RU MAC address",
"description": "RU MAC address used for NETCONF",
"type": "string",
"options": {
"dependencies": {
"ru_link_type": "cpri"
}
}
}
}
}
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Radio Unit",
"type": "object",
"oneOf": [
{ "$ref": "sdr/input-schema.json" },
{ "$ref": "lopcomm/input-schema.json" },
{ "$ref": "sunwave/input-schema.json" }
]
}
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Lopcomm ORAN",
"type": "object",
"required": [
"ru_type",
"ru_link_type",
"n_antenna_dl",
"n_antenna_ul",
"cpri_link",
"mac_addr"
],
"properties": {
"$ref": "../../ru/common.json#/properties",
"ru_type": {
"$ref": "#/properties/ru_type",
"const": "lopcomm",
"template": "lopcomm"
},
"ru_link_type": {
"$ref": "#/properties/ru_link_type",
"const": "cpri",
"template": "cpri"
},
"n_antenna_dl": {
"$ref": "#/properties/n_antenna_dl",
"default": 2
},
"n_antenna_ul": {
"$ref": "#/properties/n_antenna_ul",
"default": 2
},
"cpri_link": {
"$ref": "#/properties/cpri_link",
"properties": {
"$ref": "#/properties/cpri_link/properties",
"mapping": {
"$ref": "#/properties/cpri_link/properties/mapping",
"const": "hw",
"enum": ["hw"],
"options": { "hidden": true }
},
"rx_delay": {
"$ref": "#/properties/cpri_link/properties/rx_delay",
"default": 25.11
},
"tx_delay": {
"$ref": "#/properties/cpri_link/properties/tx_delay",
"default": 14.71
},
"tx_dbm": {
"$ref": "#/properties/cpri_link/properties/tx_dbm",
"default": 63
}
}
},
"txa0cc00_active": {
"title": "Lopcomm ORAN TX array carriers (TXA0CC00)",
"description": "Activate or inactivate Lopcomm ORAN TX array carriers (TXA0CC00)",
"type": "string",
"default": "INACTIVE",
"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": "INACTIVE",
"enum": [
"ACTIVE",
"INACTIVE"
]
},
"txa0cc00_center_frequency": {
"title": "Lopcomm ORAN DL Center Frequency in MHz (TXA0CC00)",
"description": "Lopcomm ORAN Center Frequency in MHz (TXA0CC00)",
"type": "number",
"default": 2140
},
"rxa0cc00_center_frequency_earfcn": {
"title": "Lopcomm ORAN UL Center Frequency EARFCN (RXA0CC00)",
"description": "Lopcomm ORAN Center Frequency EARFCN (RXA0CC00)",
"type": "number",
"default": 18300
},
"rxa0cc00_center_frequency": {
"title": "Lopcomm ORAN UL Center Frequency in MHz (RXA0CC00)",
"description": "Lopcomm ORAN Center Frequency in MHz (RXA0CC00)",
"type": "number",
"default": 1950
},
"txa0cc00_gain": {
"title": "ORAN Gain",
"description": "Lopcomm ORAN Gain (TXA0CC00)",
"type": "number",
"default": -20
},
"reset_schedule": {
"title": "Cron schedule for RRH reset",
"description": "Refer https://crontab.guru/ to make a reset schedule for RRH, for example, '0 1 * * *' means the RRH will reset every day at 1 am",
"type": "string"
}
}
}
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SDR transiever",
"description": "Radio Unit constituted of single SDR board",
"type": "object",
"required": [
"ru_type",
"ru_link_type",
"n_antenna_dl",
"n_antenna_ul",
"sdr_dev",
"tx_gain",
"rx_gain"
],
"properties": {
"$ref": "../../ru/common.json#/properties",
"ru_type": {
"$ref": "#/properties/ru_type",
"const": "sdr",
"template": "sdr"
},
"ru_link_type": {
"$ref": "#/properties/ru_link_type",
"const": "sdr",
"template": "sdr"
},
"sdr_dev": {
"title": "SDR board",
"description": "/dev/sdr # of SDR board",
"type": "integer"
},
"tx_gain": {
"title": "Tx gain",
"description": "Tx gain (in dB)",
"type": "number"
},
"rx_gain": {
"title": "Rx gain",
"description": "Rx gain (in dB)",
"type": "number"
}
}
}
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Sunwave M2RU",
"type": "object",
"required": [
"ru_type",
"ru_link_type",
"n_antenna_dl",
"n_antenna_ul",
"cpri_link",
"mac_addr"
],
"properties": {
"$ref": "../../ru/common.json#/properties",
"ru_type": {
"$ref": "#/properties/ru_type",
"const": "sunwave",
"template": "sunwave"
},
"ru_link_type": {
"$ref": "#/properties/ru_link_type",
"const": "cpri",
"template": "cpri"
},
"n_antenna_dl": {
"$ref": "#/properties/n_antenna_dl",
"default": 2
},
"n_antenna_ul": {
"$ref": "#/properties/n_antenna_ul",
"default": 1
},
"cpri_link": {
"$ref": "#/properties/cpri_link",
"properties": {
"$ref": "#/properties/cpri_link/properties",
"mapping": {
"$ref": "#/properties/cpri_link/properties/mapping",
"const": "bf1",
"enum": ["bf1"],
"options": { "hidden": true }
},
"rx_delay": {
"$ref": "#/properties/cpri_link/properties/rx_delay",
"default": 11.0
},
"tx_dbm": {
"$ref": "#/properties/cpri_link/properties/tx_dbm",
"default": 42.0
}
}
}
}
}
...@@ -12,8 +12,6 @@ ...@@ -12,8 +12,6 @@
{#- defaults provide default values for lte parameters. #} {#- defaults provide default values for lte parameters. #}
{%- set defaults = { {%- set defaults = {
'ru': { 'ru': {
'n_antenna_dl': int(default_n_antenna_dl),
'n_antenna_ul': int(default_n_antenna_ul),
}, },
'ru/cpri_link': { 'ru/cpri_link': {
'mult': 16, 'mult': 16,
...@@ -23,6 +21,8 @@ ...@@ -23,6 +21,8 @@
}, },
'ru/lopcomm': { 'ru/lopcomm': {
'n_antenna_dl': 2,
'n_antenna_ul': 2,
}, },
'ru/lopcomm/cpri_link': { 'ru/lopcomm/cpri_link': {
'mapping': 'hw', 'mapping': 'hw',
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
}, },
'ru/sunwave': { 'ru/sunwave': {
'n_antenna_dl': 2,
'n_antenna_ul': 1, 'n_antenna_ul': 1,
}, },
'ru/sunwave/cpri_link': { 'ru/sunwave/cpri_link': {
...@@ -88,53 +89,37 @@ ...@@ -88,53 +89,37 @@
ru_dict keeps configured RU: {} RU reference -> RU parameters ru_dict keeps configured RU: {} RU reference -> RU parameters
#} #}
{%- macro load_ru_and_cell(ru_dict, cell_dict) %} {%- macro load_ru_and_cell(ru_dict, cell_dict) %}
{%- do cell_dict.update( slapparameter_dict.get('cell_list', {'default': {}}) ) %} {%- set cell_list = slapparameter_dict.get('cell_list', {}) %}
{%- if ors %}
{%- if len(cell_list) > 0 %}
{%- do error('ORS mode does not support cell_list parameter') %}
{%- endif %}
{%- do cell_list.update({'CELL': {
'ru': {
'ru_type': 'sdr',
'ru_link_type': 'sdr',
'sdr_dev': 0,
'n_antenna_dl': int(slapparameter_dict.get('n_antenna_dl', default_n_antenna_dl)),
'n_antenna_ul': int(slapparameter_dict.get('n_antenna_ul', default_n_antenna_ul)),
'tx_gain': RF.tx_gain,
'rx_gain': RF.rx_gain,
}
}}) %}
{%- endif %}
{%- do cell_dict.update(cell_list) %}
{%- for i, (cell_ref, cell) in enumerate(cell_dict|dictsort) %} {%- for i, (cell_ref, cell) in enumerate(cell_dict|dictsort) %}
{%- set ru_ref = '%s-RU' % cell_ref %} {%- set ru_ref = '%s-RU' % cell_ref %}
{%- set ru = {'ru_type': ru_type, 'cell_ref': cell_ref} %} {%- set ru = cell.ru %}
{%- if ru.ru_type == 'm2ru' %} {%- do ru.update({'cell_ref': cell_ref}) %}
{%- do ru.update({'ru_type': 'sunwave'}) %}
{%- endif %}
{%- do cell.update({'ru_ref': ru_ref}) %} {%- do cell.update({'ru_ref': ru_ref}) %}
{%- macro ru_set(name) %} {%- if ru.ru_link_type == 'cpri' %}
{%- if name in slapparameter_dict %}
{%- do ru.update({name: slapparameter_dict[name]}) %}
{%- endif %}
{%- endmacro %}
{%- do ru_set('n_antenna_dl') %}
{%- do ru_set('n_antenna_ul') %}
{%- do ru.update({'ru_link_type': 'cpri' if ru.ru_type in ('lopcomm', 'sunwave') else 'sdr'}) %}
{%- if ru.ru_link_type == 'sdr' %}
{%- do ru.update({'sdr_dev': i,
'tx_gain': RF.tx_gain,
'rx_gain': RF.rx_gain,
}) %}
{%- elif ru.ru_link_type == 'cpri' %}
{#- set 0 tx/rx gain to emit 0 in enb.cfg. {#- set 0 tx/rx gain to emit 0 in enb.cfg.
This will be changed later: .tx_gain and .rx_gain will be carrying real RU tx/rx gain #} This will be changed later: .tx_gain and .rx_gain will be carrying real RU tx/rx gain #}
{%- do ru.update({'tx_gain': 0, {%- do ru.update({'tx_gain': 0,
'rx_gain': 0, 'rx_gain': 0,
}) %} }) %}
{%- set link = {
'sdr_dev': cell.get('sdr_number', 0),
'sfp_port': cell.get('cpri_port_number', i),
} %}
{%- macro link_set(name) %}
{%- set cname = 'cpri_'+name %}
{%- if cname in cell %}
{%- do link.update({name: cell[cname]}) %}
{%- endif %}
{%- endmacro %}
{%- do link_set('mult') %}
{%- do link_set('rx_delay') %}
{%- do link_set('tx_delay') %}
{%- do link_set('tx_dbm') %}
{%- do ru.update({'cpri_link': link}) %}
{%- do ru.update({'mac_addr': cell.ru_mac_addr}) %}
{%- else %}
{%- do bug('unreachable') %}
{%- endif %} {%- endif %}
{%- do _ru_set_defaults(ru) %} {%- do _ru_set_defaults(ru) %}
......
...@@ -64,7 +64,6 @@ def do(src, out, rat, slapparameter_dict): ...@@ -64,7 +64,6 @@ def do(src, out, rat, slapparameter_dict):
json_params = """{ json_params = """{
"do_lte": %(jdo_lte)s, "do_lte": %(jdo_lte)s,
"do_nr": %(jdo_nr)s, "do_nr": %(jdo_nr)s,
"ru_type": "ors",
"ors": {"one-watt": true}, "ors": {"one-watt": true},
"RF": { "RF": {
"dl_earfcn": 36100, "dl_earfcn": 36100,
......
# 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-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
[rf-mode]
software-name = lopcomm
ru = lopcomm
{
"name": "ORS Amarisoft",
"description": "4G and 5G amarisoft stack for ORS",
"serialisation": "json-in-xml",
"software-type": {
"ue": {
"title": "UE",
"description": "UE Configuration",
"software-type": "ue",
"request": "instance-lopcomm-ue-input-schema.json",
"response": "instance-lopcomm-ue-schema.json",
"index": 4
},
"enb": {
"title": "eNB",
"software-type": "enb",
"description": "eNodeB Configuration",
"request": "instance-lopcomm-enb-input-schema.json",
"response": "instance-lopcomm-enb-schema.json",
"index": 0
},
"gnb": {
"title": "gNB",
"software-type": "gnb",
"description": "gNodeB Configuration",
"request": "instance-lopcomm-gnb-input-schema.json",
"response": "instance-lopcomm-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": "sim/input-schema.json",
"response": "sim/schema.json",
"shared": true,
"index": 3
}
}
}
# 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-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
[rf-mode]
software-name = m2ru
ru = m2ru
{
"name": "ORS Amarisoft",
"description": "4G and 5G amarisoft stack for ORS",
"serialisation": "json-in-xml",
"software-type": {
"ue": {
"title": "UE",
"description": "UE Configuration",
"software-type": "ue",
"request": "instance-m2ru-ue-input-schema.json",
"response": "instance-m2ru-ue-schema.json",
"index": 4
},
"enb": {
"title": "eNB",
"software-type": "enb",
"description": "eNodeB Configuration",
"request": "instance-m2ru-enb-input-schema.json",
"response": "instance-m2ru-enb-schema.json",
"index": 0
},
"gnb": {
"title": "gNB",
"software-type": "gnb",
"description": "gNodeB Configuration",
"request": "instance-m2ru-gnb-input-schema.json",
"response": "instance-m2ru-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": "sim/input-schema.json",
"response": "sim/schema.json",
"shared": true,
"index": 3
}
}
}
...@@ -16,7 +16,3 @@ default-k = 00112233445566778899aabbccddeeff ...@@ -16,7 +16,3 @@ default-k = 00112233445566778899aabbccddeeff
default-n-antenna-dl = 2 default-n-antenna-dl = 2
default-n-antenna-ul = 2 default-n-antenna-ul = 2
[rf-mode]
software-name = ors
ru = sdr
...@@ -16,7 +16,3 @@ default-k = 00112233445566778899aabbccddeeff ...@@ -16,7 +16,3 @@ default-k = 00112233445566778899aabbccddeeff
default-n-antenna-dl = 2 default-n-antenna-dl = 2
default-n-antenna-ul = 2 default-n-antenna-ul = 2
[rf-mode]
software-name = any
ru = sdr
...@@ -8,8 +8,8 @@ ...@@ -8,8 +8,8 @@
"title": "UE", "title": "UE",
"description": "UE Configuration", "description": "UE Configuration",
"software-type": "ue", "software-type": "ue",
"request": "instance-any-ue-input-schema.json", "request": "instance-ue-input-schema.json",
"response": "instance-any-ue-schema.json", "response": "instance-ue-schema.json",
"index": 4 "index": 4
}, },
...@@ -17,16 +17,16 @@ ...@@ -17,16 +17,16 @@
"title": "eNB", "title": "eNB",
"software-type": "enb", "software-type": "enb",
"description": "eNodeB Configuration", "description": "eNodeB Configuration",
"request": "instance-any-enb-input-schema.json", "request": "instance-enb-input-schema.json",
"response": "instance-any-enb-schema.json", "response": "instance-enb-schema.json",
"index": 0 "index": 0
}, },
"gnb": { "gnb": {
"title": "gNB", "title": "gNB",
"software-type": "gnb", "software-type": "gnb",
"description": "gNodeB Configuration", "description": "gNodeB Configuration",
"request": "instance-any-gnb-input-schema.json", "request": "instance-gnb-input-schema.json",
"response": "instance-any-gnb-schema.json", "response": "instance-gnb-schema.json",
"index": 1 "index": 1
}, },
"core-network": { "core-network": {
......
{%- set v = '' if software_name == 'generic' else '-'+software_name -%}
{ {
"name": "ORS Amarisoft", "name": "ORS Amarisoft",
"description": "4G and 5G amarisoft stack for ORS", "description": "4G and 5G amarisoft stack for ORS",
...@@ -8,8 +9,8 @@ ...@@ -8,8 +9,8 @@
"title": "UE", "title": "UE",
"description": "UE Configuration", "description": "UE Configuration",
"software-type": "ue", "software-type": "ue",
"request": "instance-{{ software_name }}-ue-input-schema.json", "request": "instance{{ v }}-ue-input-schema.json",
"response": "instance-{{ software_name }}-ue-schema.json", "response": "instance{{ v }}-ue-schema.json",
"index": 4 "index": 4
}, },
{% endif %} {% endif %}
...@@ -17,16 +18,16 @@ ...@@ -17,16 +18,16 @@
"title": "eNB", "title": "eNB",
"software-type": "enb", "software-type": "enb",
"description": "eNodeB Configuration", "description": "eNodeB Configuration",
"request": "instance-{{ software_name }}-enb-input-schema.json", "request": "instance{{ v }}-enb-input-schema.json",
"response": "instance-{{ software_name }}-enb-schema.json", "response": "instance{{ v }}-enb-schema.json",
"index": 0 "index": 0
}, },
"gnb": { "gnb": {
"title": "gNB", "title": "gNB",
"software-type": "gnb", "software-type": "gnb",
"description": "gNodeB Configuration", "description": "gNodeB Configuration",
"request": "instance-{{ software_name }}-gnb-input-schema.json", "request": "instance{{ v }}-gnb-input-schema.json",
"response": "instance-{{ software_name }}-gnb-schema.json", "response": "instance{{ v }}-gnb-schema.json",
"index": 1 "index": 1
}, },
"core-network": { "core-network": {
......
...@@ -20,7 +20,3 @@ default-k = {{ default_k }} ...@@ -20,7 +20,3 @@ default-k = {{ default_k }}
default-n-antenna-dl = {{ default_n_antenna_dl }} default-n-antenna-dl = {{ default_n_antenna_dl }}
default-n-antenna-ul = {{ default_n_antenna_ul }} default-n-antenna-ul = {{ default_n_antenna_ul }}
[rf-mode]
software-name = {{ software_name }}
ru = {{ ru }}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -350,8 +350,6 @@ class TestCoreNetworkMonitorGadgetUrl(ORSTestCase): ...@@ -350,8 +350,6 @@ class TestCoreNetworkMonitorGadgetUrl(ORSTestCase):
def test_monitor_gadget_url(self): def test_monitor_gadget_url(self):
test_monitor_gadget_url(self) test_monitor_gadget_url(self)
class TestSimCard(ORSTestCase): class TestSimCard(ORSTestCase):
@classmethod @classmethod
def requestDefaultInstance(cls, state='started'): def requestDefaultInstance(cls, state='started'):
...@@ -370,5 +368,3 @@ class TestSimCard(ORSTestCase): ...@@ -370,5 +368,3 @@ class TestSimCard(ORSTestCase):
return "core-network" return "core-network"
def test_sim_card(self): def test_sim_card(self):
test_sim_card(self) test_sim_card(self)
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