enb: add QAM64 support for UL
* add new UE feature
* enable in srsue.conf.templ
* add new table for maximum rates
* add config scenario to enable SIB option for QAM64
Change-Id: I6ac2c9989a761e91b93d76c2507f55f0140b202d
diff --git a/src/osmo_gsm_tester/core/schema.py b/src/osmo_gsm_tester/core/schema.py
index 9d26b0f..d56d6ec 100644
--- a/src/osmo_gsm_tester/core/schema.py
+++ b/src/osmo_gsm_tester/core/schema.py
@@ -111,7 +111,7 @@
raise ValueError('Unknown Cipher value: %r' % val)
def modem_feature(val):
- if val in ('sms', 'gprs', 'voice', 'ussd', 'sim', '2g', '3g', '4g', 'dl_qam256'):
+ if val in ('sms', 'gprs', 'voice', 'ussd', 'sim', '2g', '3g', '4g', 'dl_qam256', 'ul_qam64'):
return True
raise ValueError('Unknown Modem Feature: %r' % val)
diff --git a/src/osmo_gsm_tester/obj/enb_srs.py b/src/osmo_gsm_tester/obj/enb_srs.py
index 8319ba4..7fde719 100644
--- a/src/osmo_gsm_tester/obj/enb_srs.py
+++ b/src/osmo_gsm_tester/obj/enb_srs.py
@@ -31,6 +31,7 @@
def on_register_schemas():
config_schema = {
'enable_pcap': schema.BOOL_STR,
+ 'enable_ul_qam64': schema.BOOL_STR,
'log_all_level': schema.STR,
}
schema.register_config_schema('enb', config_schema)
@@ -191,6 +192,7 @@
self.enable_pcap = util.str2bool(values['enb'].get('enable_pcap', 'false'))
config.overlay(values, dict(enb={'enable_pcap': self.enable_pcap}))
+ config.overlay(values, dict(enb={'enable_ul_qam64': util.str2bool(values['enb'].get('enable_ul_qam64', 'false'))}))
config.overlay(values, dict(enb={'enable_dl_awgn': util.str2bool(values['enb'].get('enable_dl_awgn', 'false'))}))
config.overlay(values, dict(enb={'rf_dev_sync': values['enb'].get('rf_dev_sync', None)}))
@@ -269,8 +271,6 @@
return rfemu_obj
def ue_max_rate(self, downlink=True, num_carriers=1):
-
-
# The max rate for a single UE per PRB configuration in TM1 with MCS 28
if 'dl_qam256' in self.ue.features():
max_phy_rate_tm1_dl = {6: 5.9e6,
@@ -286,12 +286,21 @@
50: 36e6,
75: 55e6,
100: 75e6}
- max_phy_rate_tm1_ul = { 6 : 1.7e6,
- 15 : 4.7e6,
- 25 : 10e6,
- 50 : 23e6,
- 75 : 34e6,
- 100 : 51e6 }
+
+ if 'ul_qam64' in self.ue.features():
+ max_phy_rate_tm1_ul = { 6 : 2.7e6,
+ 15 : 6.5e6,
+ 25 : 14e6,
+ 50 : 32e6,
+ 75 : 34e6,
+ 100 : 70e6 }
+ else:
+ max_phy_rate_tm1_ul = { 6 : 1.7e6,
+ 15 : 4.7e6,
+ 25 : 10e6,
+ 50 : 23e6,
+ 75 : 34e6,
+ 100 : 51e6 }
if downlink:
max_rate = max_phy_rate_tm1_dl[self.num_prb()]
diff --git a/src/osmo_gsm_tester/templates/srsenb_sib.conf.tmpl b/src/osmo_gsm_tester/templates/srsenb_sib.conf.tmpl
index 6d178c6..c738480 100644
--- a/src/osmo_gsm_tester/templates/srsenb_sib.conf.tmpl
+++ b/src/osmo_gsm_tester/templates/srsenb_sib.conf.tmpl
@@ -66,7 +66,7 @@
n_sb = 1;
hopping_mode = "inter-subframe";
pusch_hopping_offset = 2;
- enable_64_qam = false; // 64QAM PUSCH is not currently enabled
+ enable_64_qam = ${enb.enable_ul_qam64};
ul_rs =
{
cyclic_shift = 0;
diff --git a/src/osmo_gsm_tester/templates/srsue.conf.tmpl b/src/osmo_gsm_tester/templates/srsue.conf.tmpl
index 31642cd..120b938 100644
--- a/src/osmo_gsm_tester/templates/srsue.conf.tmpl
+++ b/src/osmo_gsm_tester/templates/srsue.conf.tmpl
@@ -150,10 +150,11 @@
% if int(ue.num_carriers) > 1:
ue_category = 7
release = 10
-% elif "dl_qam256" in ue.features:
-ue_category = 7
+% elif "dl_qam256" in ue.features or "ul_qam64" in ue.features:
+ue_category = 8
release = 13
ue_category_dl = 14
+ue_category_ul = 5
% else:
#ue_category = 4
#release = 8
diff --git a/sysmocom/scenarios/cfg-enb-enable-ul-qam64.conf b/sysmocom/scenarios/cfg-enb-enable-ul-qam64.conf
new file mode 100644
index 0000000..446c966
--- /dev/null
+++ b/sysmocom/scenarios/cfg-enb-enable-ul-qam64.conf
@@ -0,0 +1,3 @@
+config:
+ enb:
+ enable_ul_qam64: true
\ No newline at end of file