osmo-bsc: Parametrize codec-list VTY cfg

Change-Id: I1678aba43e8d399ecad192cbc416698373e3c0a0
diff --git a/src/osmo_gsm_tester/resource.py b/src/osmo_gsm_tester/resource.py
index e4e2f9d..15f2711 100644
--- a/src/osmo_gsm_tester/resource.py
+++ b/src/osmo_gsm_tester/resource.py
@@ -87,7 +87,8 @@
     RESOURCES_SCHEMA)
 
 CONF_SCHEMA = util.dict_add(
-    { 'defaults.timeout': schema.STR },
+    { 'defaults.timeout': schema.STR,
+      'config.bsc.net.codec_list[]': schema.CODEC },
     dict([('resources.%s' % key, val) for key, val in WANT_SCHEMA.items()]),
     dict([('modifiers.%s' % key, val) for key, val in WANT_SCHEMA.items()]))
 
diff --git a/src/osmo_gsm_tester/schema.py b/src/osmo_gsm_tester/schema.py
index 4a15bcd..174c28f 100644
--- a/src/osmo_gsm_tester/schema.py
+++ b/src/osmo_gsm_tester/schema.py
@@ -110,6 +110,11 @@
         return
     raise ValueError('Unknown Channel Allocator Policy %r' % val)
 
+def codec(val):
+    if val in ('hr1', 'hr2', 'hr3', 'fr1', 'fr2', 'fr3'):
+        return
+    raise ValueError('Unknown Codec value: %r' % val)
+
 INT = 'int'
 STR = 'str'
 UINT = 'uint'
@@ -126,6 +131,7 @@
 MODEM_FEATURE = 'modem_feature'
 PHY_CHAN = 'chan'
 CHAN_ALLOCATOR = 'chan_allocator'
+CODEC = 'codec'
 
 SCHEMA_TYPES = {
         INT: int,
@@ -144,6 +150,7 @@
         MODEM_FEATURE: modem_feature,
         PHY_CHAN: phy_channel_config,
         CHAN_ALLOCATOR: channel_allocator,
+        CODEC: codec,
     }
 
 def validate(config, schema):
diff --git a/src/osmo_gsm_tester/templates/osmo-bsc.cfg.tmpl b/src/osmo_gsm_tester/templates/osmo-bsc.cfg.tmpl
index edcf33f..95bf5e3 100644
--- a/src/osmo_gsm_tester/templates/osmo-bsc.cfg.tmpl
+++ b/src/osmo_gsm_tester/templates/osmo-bsc.cfg.tmpl
@@ -110,7 +110,7 @@
  mgw remote-port 2427
  mgw local-ip ${bsc.ip_address.addr}
  mgw endpoint-range 1 31
- codec-list hr3
+ codec-list ${' '.join(bsc.net.codec_list)}
  amr-config 12_2k forbidden
  amr-config 10_2k forbidden
  amr-config 7_95k forbidden