ms_amarisoft: extend AmariUE to support custom frequency bands

this patch adds generic support for custom frequency bands to the ms class.
it then extends the config template for AmariUE to use them.
we set the default values for EARFCNs for DL/UL to the old values.

Change-Id: I7b2250e13fc1161be1a1d73a4348f07b31c0f724
diff --git a/src/osmo_gsm_tester/obj/ms.py b/src/osmo_gsm_tester/obj/ms.py
index cd4a8a1..1ee9ef8 100644
--- a/src/osmo_gsm_tester/obj/ms.py
+++ b/src/osmo_gsm_tester/obj/ms.py
@@ -32,7 +32,9 @@
         'auth_algo': schema.AUTH_ALGO,
         'apn_ipaddr': schema.IPV4,
         'ciphers[]': schema.CIPHER_2G,
-        'features[]': schema.MODEM_FEATURE
+        'features[]': schema.MODEM_FEATURE,
+        'dl_earfcn': schema.UINT,
+        'ul_earfcn': schema.UINT
         }
     schema.register_resource_schema('modem', resource_schema)
 
diff --git a/src/osmo_gsm_tester/obj/ms_amarisoft.py b/src/osmo_gsm_tester/obj/ms_amarisoft.py
index 9b6d64a..7e0cc13 100644
--- a/src/osmo_gsm_tester/obj/ms_amarisoft.py
+++ b/src/osmo_gsm_tester/obj/ms_amarisoft.py
@@ -27,7 +27,16 @@
 from .ms import MS
 
 def on_register_schemas():
-    resource_schema = {}
+    resource_schema = {
+        'use_custom_band255': schema.BOOL_STR,
+        'custom_band_list[].number': schema.UINT,
+        'custom_band_list[].dl_earfcn_min': schema.UINT,
+        'custom_band_list[].dl_earfcn_max': schema.UINT,
+        'custom_band_list[].dl_freq_min': schema.UINT,
+        'custom_band_list[].ul_freq_min': schema.UINT,
+        'custom_band_list[].ul_earfcn_min': schema.UINT,
+        'custom_band_list[].ul_earfcn_max': schema.UINT,        
+        }
     for key, val in RunNode.schema().items():
         resource_schema['run_node.%s' % key] = val
     schema.register_resource_schema('modem', resource_schema)
@@ -245,6 +254,9 @@
         config.overlay(values, dict(ue=dict(log_filename=logfile,
                                             ifup_filename=ifupfile)))
 
+        # Convert to Python bool and overlay config
+        config.overlay(values, dict(ue={'use_custom_band255': util.str2bool(values['ue'].get('use_custom_band255', 'false'))}))
+
         # We need to set some specific variables programatically here to match IP addresses:
         if self._conf.get('rf_dev_type') == 'zmq':
             base_srate = num_prb2base_srate(self.enb.num_prb())
diff --git a/src/osmo_gsm_tester/templates/amarisoft_lteue.cfg.tmpl b/src/osmo_gsm_tester/templates/amarisoft_lteue.cfg.tmpl
index 6f38491..f9b2933 100644
--- a/src/osmo_gsm_tester/templates/amarisoft_lteue.cfg.tmpl
+++ b/src/osmo_gsm_tester/templates/amarisoft_lteue.cfg.tmpl
@@ -30,9 +30,24 @@
      allow dynamic UE creation from remote API */
   multi_ue: true,
 
+  custom_freq_band: [
+%for band in ue.custom_band_list:
+    {
+      band: ${band.number},
+      dl_earfcn_min: ${band.dl_earfcn_min},
+      dl_earfcn_max: ${band.dl_earfcn_max},
+      dl_freq_min: ${band.dl_freq_min},
+      ul_freq_min: ${band.ul_freq_min},
+      ul_earfcn_min: ${band.ul_earfcn_min},
+      ul_earfcn_max: ${band.ul_earfcn_max},
+    },
+%endfor
+  ],
+
   cells: [
     {
-      dl_earfcn: 2850,
+      dl_earfcn: ${ue.dl_earfcn},
+      ul_earfcn: ${ue.ul_earfcn},
       n_antenna_dl: 1,
       n_antenna_ul: 1,