diff --git a/example/defaults.conf b/example/defaults.conf index 0bff86a3..9b92ad05 100644 --- a/example/defaults.conf +++ b/example/defaults.conf @@ -96,8 +96,10 @@ osmo_bts_oc2g: srsepc: mcc: 901 mnc: 70 + rlc_drb_mode: UM srsenb: mcc: 901 mnc: 70 num_prb: 100 + transmission_mode: 1 diff --git a/example/scenarios/cfg-epc-rlcmode@.conf b/example/scenarios/cfg-epc-rlcmode@.conf new file mode 100644 index 00000000..2ddb0444 --- /dev/null +++ b/example/scenarios/cfg-epc-rlcmode@.conf @@ -0,0 +1,3 @@ +config: + epc: + rlc_drb_mode: ${param1} diff --git a/example/scenarios/mod-enb-txmode@.conf b/example/scenarios/mod-enb-txmode@.conf new file mode 100644 index 00000000..e0c8d018 --- /dev/null +++ b/example/scenarios/mod-enb-txmode@.conf @@ -0,0 +1,3 @@ +modifiers: + enb: + - transmission_mode: ${param1} diff --git a/src/osmo_gsm_tester/resource.py b/src/osmo_gsm_tester/resource.py index 31e84632..07d32e26 100644 --- a/src/osmo_gsm_tester/resource.py +++ b/src/osmo_gsm_tester/resource.py @@ -90,6 +90,7 @@ RESOURCES_SCHEMA = { 'enb[].remote_user': schema.STR, 'enb[].addr': schema.IPV4, 'enb[].num_prb': schema.UINT, + 'enb[].transmission_mode': schema.LTE_TRANSMISSION_MODE, 'enb[].rf_dev_type': schema.STR, 'enb[].rf_dev_args': schema.STR, 'arfcn[].arfcn': schema.INT, @@ -115,7 +116,8 @@ WANT_SCHEMA = util.dict_add( CONF_SCHEMA = util.dict_add( { 'defaults.timeout': schema.STR, - 'config.bsc.net.codec_list[]': schema.CODEC }, + 'config.bsc.net.codec_list[]': schema.CODEC, + 'config.epc.rlc_drb_mode': schema.LTE_RLC_DRB_MODE, }, 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 14fe640b..7fe6689b 100644 --- a/src/osmo_gsm_tester/schema.py +++ b/src/osmo_gsm_tester/schema.py @@ -125,6 +125,17 @@ def osmo_trx_clock_ref(val): return raise ValueError('Unknown OsmoTRX clock reference value: %r' % val) +def lte_transmission_mode(val): + n = int(val) + if n <= 4: + return + raise ValueError('LTE Transmission Mode %d not in expected range' % n) + +def lte_rlc_drb_mode(val): + if val.upper() in ('UM', 'AM'): + return + raise ValueError('Unknown LTE RLC DRB Mode value: %r' % val) + INT = 'int' STR = 'str' UINT = 'uint' @@ -144,6 +155,8 @@ CHAN_ALLOCATOR = 'chan_allocator' GPRS_MODE = 'gprs_mode' CODEC = 'codec' OSMO_TRX_CLOCK_REF = 'osmo_trx_clock_ref' +LTE_TRANSMISSION_MODE = 'lte_transmission_mode' +LTE_RLC_DRB_MODE = 'lte_rlc_drb_mode' SCHEMA_TYPES = { INT: int, @@ -165,6 +178,8 @@ SCHEMA_TYPES = { GPRS_MODE: gprs_mode, CODEC: codec, OSMO_TRX_CLOCK_REF: osmo_trx_clock_ref, + LTE_TRANSMISSION_MODE: lte_transmission_mode, + LTE_RLC_DRB_MODE: lte_rlc_drb_mode, } def validate(config, schema): diff --git a/src/osmo_gsm_tester/srs_epc.py b/src/osmo_gsm_tester/srs_epc.py index 0a0036e9..a33a1632 100644 --- a/src/osmo_gsm_tester/srs_epc.py +++ b/src/osmo_gsm_tester/srs_epc.py @@ -22,6 +22,13 @@ import pprint from . import log, util, config, template, process, remote +def rlc_drb_mode2qci(rlc_drb_mode): + if rlc_drb_mode.upper() == "UM": + return 7; + elif rlc_drb_mode.upper() == "AM": + return 9; + raise log.Error('Unexpected rlc_drb_mode', rlc_drb_mode=rlc_drb_mode) + class srsEPC(log.Origin): REMOTE_DIR = '/osmo-gsm-tester-srsepc' @@ -155,10 +162,16 @@ class srsEPC(log.Origin): self.dbg(config_file=self.config_file, db_file=self.db_file) values = dict(epc=config.get_defaults('srsepc')) - config.overlay(values, dict(epc=dict(hss=dict(subscribers=self.subscriber_list)))) config.overlay(values, self.suite_run.config()) config.overlay(values, dict(epc={'run_addr': self.addr()})) + # Set qci for each subscriber: + rlc_drb_mode = values['epc'].get('rlc_drb_mode', None) + assert rlc_drb_mode is not None + for i in range(len(self.subscriber_list)): + self.subscriber_list[i]['qci'] = rlc_drb_mode2qci(rlc_drb_mode) + config.overlay(values, dict(epc=dict(hss=dict(subscribers=self.subscriber_list)))) + self.dbg('SRSEPC CONFIG:\n' + pprint.pformat(values)) with open(self.config_file, 'w') as f: diff --git a/src/osmo_gsm_tester/templates/srsenb.conf.tmpl b/src/osmo_gsm_tester/templates/srsenb.conf.tmpl index f0401563..12b3e189 100644 --- a/src/osmo_gsm_tester/templates/srsenb.conf.tmpl +++ b/src/osmo_gsm_tester/templates/srsenb.conf.tmpl @@ -29,7 +29,7 @@ mme_addr = ${enb.mme_addr} gtp_bind_addr = ${enb.addr} s1c_bind_addr = ${enb.addr} n_prb = ${enb.num_prb} -#tm = 4 +tm = ${enb.transmission_mode} #nof_ports = 2 ##################################################################### diff --git a/src/osmo_gsm_tester/templates/srsepc_user_db.csv.tmpl b/src/osmo_gsm_tester/templates/srsepc_user_db.csv.tmpl index 32df58d0..c213e539 100644 --- a/src/osmo_gsm_tester/templates/srsepc_user_db.csv.tmpl +++ b/src/osmo_gsm_tester/templates/srsepc_user_db.csv.tmpl @@ -20,5 +20,5 @@ #ue2,mil,001010123456780,00112233445566778899aabbccddeeff,opc,63bfa50ee6523365ff14c1f45f88737d,8000,000000001234,7,dynamic #ue1,xor,001010123456789,00112233445566778899aabbccddeeff,opc,63bfa50ee6523365ff14c1f45f88737d,9001,000000001255,7,dynamic %for sub in epc.hss.subscribers: -ogt${sub.id},${sub.auth_algo},${sub.imsi},${sub.ki},opc,63bfa50ee6523365ff14c1f45f88737d,8000,000000001234,7,dynamic +ogt${sub.id},${sub.auth_algo},${sub.imsi},${sub.ki},opc,63bfa50ee6523365ff14c1f45f88737d,8000,000000001234,${sub.qci},dynamic %endfor