Change in osmo-bsc[master]: implement CHANnel ACTIVate to VAMOS mode

neels gerrit-no-reply at lists.osmocom.org
Thu Jun 10 15:21:23 UTC 2021


neels has submitted this change. ( https://gerrit.osmocom.org/c/osmo-bsc/+/24375 )

Change subject: implement CHANnel ACTIVate to VAMOS mode
......................................................................

implement CHANnel ACTIVate to VAMOS mode

Related: SYS#5315 OS#4940
Change-Id: If3ac584e4223ef7656c7fedc3bf11df87e4309ec
---
M include/osmocom/bsc/gsm_data.h
M src/osmo-bsc/abis_rsl.c
M src/osmo-bsc/bsc_vty.c
M src/osmo-bsc/lchan_fsm.c
M tests/osmo-bsc.vty
5 files changed, 54 insertions(+), 17 deletions(-)

Approvals:
  neels: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h
index 61e52f6..fc6ce30 100644
--- a/include/osmocom/bsc/gsm_data.h
+++ b/include/osmocom/bsc/gsm_data.h
@@ -602,6 +602,8 @@
 	/* TSC to use, or -1 for automatically determining the TSC to use. Valid range is 0 to 7, as described in 3GPP
 	 * TS 45.002. */
 	int tsc;
+
+	bool vamos;
 };
 
 enum lchan_modify_for {
diff --git a/src/osmo-bsc/abis_rsl.c b/src/osmo-bsc/abis_rsl.c
index 40bfcec..c206937 100644
--- a/src/osmo-bsc/abis_rsl.c
+++ b/src/osmo-bsc/abis_rsl.c
@@ -534,7 +534,7 @@
 	/* PDCH activation is a job for rsl_tx_dyn_ts_pdch_act_deact(); */
 	OSMO_ASSERT(act_type != RSL_ACT_OSMO_PDCH);
 
-	rc = channel_mode_from_lchan(&cm, lchan, &lchan->activate.ch_mode_rate, false);
+	rc = channel_mode_from_lchan(&cm, lchan, &lchan->activate.ch_mode_rate, lchan->activate.info.vamos);
 	if (rc < 0) {
 		LOGP(DRSL, LOGL_ERROR,
 		     "%s Cannot find channel mode from lchan type\n",
@@ -620,6 +620,10 @@
 
 	rep_acch_cap_for_bts(lchan, msg);
 
+	/* Selecting a specific TSC Set is only applicable to VAMOS mode */
+	if (lchan->activate.info.vamos && lchan->activate.tsc_set >= 1)
+		put_osmo_training_sequence_ie(msg, lchan->activate.tsc_set, lchan->activate.tsc);
+
 	msg->dst = rsl_chan_link(lchan);
 
 	rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CHAN_ACT_TOTAL));
diff --git a/src/osmo-bsc/bsc_vty.c b/src/osmo-bsc/bsc_vty.c
index 79026a1..1f208bc 100644
--- a/src/osmo-bsc/bsc_vty.c
+++ b/src/osmo-bsc/bsc_vty.c
@@ -6215,6 +6215,13 @@
 
 		info.ch_mode_rate.chan_rate = chan_t_to_chan_rate(lchan_t);
 
+		if (activate == 2 || lchan->vamos.is_secondary) {
+			info.vamos = true;
+			info.tsc_set = lchan->vamos.is_secondary ? 1 : 0;
+			info.tsc = 0;
+			info.ch_mode_rate.chan_mode = gsm48_chan_mode_to_vamos(info.ch_mode_rate.chan_mode);
+		}
+
 		vty_out(vty, "%% activating lchan %s as %s%s", gsm_lchan_name(lchan), gsm_chan_t_name(lchan->type),
 			VTY_NEWLINE);
 		lchan_activate(lchan, &info);
@@ -6287,9 +6294,10 @@
  * manually in a given mode/codec.  This is useful for receiver
  * performance testing (FER/RBER/...) */
 DEFUN(lchan_act, lchan_act_cmd,
-	"bts <0-255> trx <0-255> timeslot <0-7> sub-slot <0-7> (activate|deactivate) (hr|fr|efr|amr|sig) [<0-7>]",
+	"bts <0-255> trx <0-255> timeslot <0-7> sub-slot <0-7> (activate|activate-vamos|deactivate) (hr|fr|efr|amr|sig) [<0-7>]",
 	BTS_NR_TRX_TS_SS_STR2
 	"Manual Channel Activation (e.g. for BER test)\n"
+	"Manual Channel Activation, in VAMOS mode\n"
 	"Manual Channel Deactivation (e.g. for BER test)\n"
 	"Half-Rate v1\n" "Full-Rate\n" "Enhanced Full Rate\n" "Adaptive Multi-Rate\n" "Signalling\n" "AMR Mode\n")
 {
@@ -6312,6 +6320,8 @@
 
 	if (!strcmp(act_str, "activate"))
 		activate = 1;
+	else if (!strcmp(act_str, "activate-vamos"))
+		activate = 2;
 	else
 		activate = 0;
 
diff --git a/src/osmo-bsc/lchan_fsm.c b/src/osmo-bsc/lchan_fsm.c
index b772482..c429243 100644
--- a/src/osmo-bsc/lchan_fsm.c
+++ b/src/osmo-bsc/lchan_fsm.c
@@ -311,6 +311,16 @@
 
 	OSMO_ASSERT(lchan && info);
 
+	if ((info->vamos || lchan->vamos.is_secondary)
+	    && !osmo_bts_has_feature(&lchan->ts->trx->bts->features, BTS_FEAT_VAMOS)) {
+		lchan->last_error = talloc_strdup(lchan->ts->trx, "VAMOS related channel activation requested,"
+						  " but BTS does not support VAMOS");
+		LOG_LCHAN(lchan, LOGL_ERROR,
+			  "VAMOS related channel activation requested, but BTS %u does not support VAMOS\n",
+			  lchan->ts->trx->bts->nr);
+		goto abort;
+	}
+
 	if (!lchan_state_is(lchan, LCHAN_ST_UNUSED))
 		goto abort;
 
@@ -608,7 +618,13 @@
 {
 	struct osmo_fsm_inst *fi = lchan->fi;
 	lchan->activate.ch_mode_rate = lchan->activate.info.ch_mode_rate;
-	/* future: automatically adjust chan_mode in lchan->activate.ch_mode_rate */
+	lchan->activate.ch_mode_rate.chan_mode = (lchan->activate.info.vamos
+		? gsm48_chan_mode_to_vamos(lchan->activate.info.ch_mode_rate.chan_mode)
+		: gsm48_chan_mode_to_non_vamos(lchan->activate.info.ch_mode_rate.chan_mode));
+	if (lchan->activate.ch_mode_rate.chan_mode < 0) {
+		lchan_fail("Invalid chan_mode: %s", gsm48_chan_mode_name(lchan->activate.info.ch_mode_rate.chan_mode));
+		return -EINVAL;
+	}
 
 	if (gsm48_chan_mode_to_non_vamos(lchan->activate.ch_mode_rate.chan_mode) == GSM48_CMODE_SPEECH_AMR) {
 		if (lchan_mr_config(&lchan->activate.mr_conf_filtered, lchan, lchan->activate.ch_mode_rate.s15_s0) < 0) {
@@ -737,10 +753,12 @@
 
 	lchan->encr = lchan->activate.info.encr;
 
+	/* If enabling VAMOS mode and no specific TSC Set was selected, make sure to select a sane TSC Set by
+	 * default: Set 1 for the primary and Set 2 for the shadow lchan. For non-VAMOS lchans, TSC Set 1. */
 	if (lchan->activate.info.tsc_set > 0)
 		lchan->activate.tsc_set = lchan->activate.info.tsc_set;
 	else
-		lchan->activate.tsc_set = 1;
+		lchan->activate.tsc_set = lchan->vamos.is_secondary ? 2 : 1;
 
 	/* Use the TSC provided in the modification request, if any. Otherwise use the timeslot's configured
 	 * TSC. */
@@ -819,6 +837,7 @@
 
 	lchan->current_ch_mode_rate = lchan->activate.ch_mode_rate;
 	lchan->current_mr_conf = lchan->activate.mr_conf_filtered;
+	lchan->vamos.enabled = lchan->activate.info.vamos;
 	lchan->tsc_set = lchan->activate.tsc_set;
 	lchan->tsc = lchan->activate.tsc;
 	LOG_LCHAN(lchan, LOGL_INFO, "Rx Activ ACK %s\n",
diff --git a/tests/osmo-bsc.vty b/tests/osmo-bsc.vty
index fba2390..c7e9e6d 100644
--- a/tests/osmo-bsc.vty
+++ b/tests/osmo-bsc.vty
@@ -6,12 +6,13 @@
 ...
 
 OsmoBSC# bts 0 trx 0 timeslot 0 sub-slot 0 ?
-  activate    Manual Channel Activation (e.g. for BER test)
-  deactivate  Manual Channel Deactivation (e.g. for BER test)
-  modify      Manually send Channel Mode Modify (for debugging)
-  mdcx        Modify RTP Connection
-  handover    Manually trigger handover (for debugging)
-  assignment  Manually trigger assignment (for debugging)
+  activate        Manual Channel Activation (e.g. for BER test)
+  activate-vamos  Manual Channel Activation, in VAMOS mode
+  deactivate      Manual Channel Deactivation (e.g. for BER test)
+  modify          Manually send Channel Mode Modify (for debugging)
+  mdcx            Modify RTP Connection
+  handover        Manually trigger handover (for debugging)
+  assignment      Manually trigger assignment (for debugging)
 
 OsmoBSC# bts 0 trx 0 timeslot 0 sub-slot 0 modify ?
   vamos      Enable VAMOS channel mode
@@ -32,7 +33,7 @@
 
 OsmoBSC# list
 ...
-  bts <0-255> trx <0-255> timeslot <0-7> sub-slot <0-7> (activate|deactivate) (hr|fr|efr|amr|sig) [<0-7>]
+  bts <0-255> trx <0-255> timeslot <0-7> sub-slot <0-7> (activate|activate-vamos|deactivate) (hr|fr|efr|amr|sig) [<0-7>]
 ...
 
 OsmoBSC# bts?
@@ -65,12 +66,13 @@
   <0-7>  Sub-slot Number
 
 OsmoBSC# bts 0 trx 0 timeslot 0 sub-slot 0 ?
-  activate    Manual Channel Activation (e.g. for BER test)
-  deactivate  Manual Channel Deactivation (e.g. for BER test)
-  modify      Manually send Channel Mode Modify (for debugging)
-  mdcx        Modify RTP Connection
-  handover    Manually trigger handover (for debugging)
-  assignment  Manually trigger assignment (for debugging)
+  activate        Manual Channel Activation (e.g. for BER test)
+  activate-vamos  Manual Channel Activation, in VAMOS mode
+  deactivate      Manual Channel Deactivation (e.g. for BER test)
+  modify          Manually send Channel Mode Modify (for debugging)
+  mdcx            Modify RTP Connection
+  handover        Manually trigger handover (for debugging)
+  assignment      Manually trigger assignment (for debugging)
 
 OsmoBSC# bts 0 trx 0 timeslot 0 sub-slot 0 activate ?
   hr   Half-Rate v1

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/24375
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: If3ac584e4223ef7656c7fedc3bf11df87e4309ec
Gerrit-Change-Number: 24375
Gerrit-PatchSet: 21
Gerrit-Owner: neels <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: dexter <pmaier at sysmocom.de>
Gerrit-Reviewer: fixeria <vyanitskiy at sysmocom.de>
Gerrit-Reviewer: laforge <laforge at osmocom.org>
Gerrit-Reviewer: neels <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: pespin <pespin at sysmocom.de>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210610/5c991cc2/attachment.htm>


More information about the gerrit-log mailing list