Change in osmo-bsc[master]: RSL: look up lchan by sign_link, not trx, for VAMOS

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

neels gerrit-no-reply at lists.osmocom.org
Sun May 23 23:02:37 UTC 2021


neels has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bsc/+/24378 )


Change subject: RSL: look up lchan by sign_link, not trx, for VAMOS
......................................................................

RSL: look up lchan by sign_link, not trx, for VAMOS

So far we pass the gsm_bts_trx to the lchan lookup functions to
determine the lchan that a specific RSL message is received for. But for
VAMOS secondary lchans, we introduced a second sign_link for each TRX,
so passing the TRX loses information on which TEI the RSL message was
received from. Pass the sign_link instead of the trx.

If the sign_link is the secondary VAMOS link, return the VAMOS shadow
lchan instead of the primary one for that lchan number.

Related: SYS#5315 OS#4940
Change-Id: I872a3ed9ce0cdbd9fbe41a750081f54008eece8d
---
M include/osmocom/bsc/bts_trx.h
M src/osmo-bsc/abis_rsl.c
M src/osmo-bsc/bts_trx.c
M tests/handover/handover_test.c
4 files changed, 20 insertions(+), 9 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/78/24378/1

diff --git a/include/osmocom/bsc/bts_trx.h b/include/osmocom/bsc/bts_trx.h
index 94f4021..09afd99 100644
--- a/include/osmocom/bsc/bts_trx.h
+++ b/include/osmocom/bsc/bts_trx.h
@@ -90,7 +90,7 @@
 struct gsm_bts_trx *gsm_bts_trx_alloc(struct gsm_bts *bts);
 char *gsm_trx_name(const struct gsm_bts_trx *trx);
 
-struct gsm_lchan *rsl_lchan_lookup(struct gsm_bts_trx *trx, uint8_t chan_nr,
+struct gsm_lchan *rsl_lchan_lookup(struct gsm_bts_trx *trx, uint8_t chan_nr, bool vamos,
 				   int *rc);
 
 void gsm_trx_lock_rf(struct gsm_bts_trx *trx, bool locked, const char *reason);
diff --git a/src/osmo-bsc/abis_rsl.c b/src/osmo-bsc/abis_rsl.c
index e1d8a41..c0d9e4d 100644
--- a/src/osmo-bsc/abis_rsl.c
+++ b/src/osmo-bsc/abis_rsl.c
@@ -125,11 +125,15 @@
 }
 
 /* call rsl_lchan_lookup and set the log context */
-static struct gsm_lchan *lchan_lookup(struct gsm_bts_trx *trx, uint8_t chan_nr,
+static struct gsm_lchan *lchan_lookup(struct e1inp_sign_link *sign_link, uint8_t chan_nr,
 				      const char *log_name)
 {
 	int rc;
-	struct gsm_lchan *lchan = rsl_lchan_lookup(trx, chan_nr, &rc);
+	/* If no VAMOS link was set up, rsl_tei_vamos may reflect the same as rsl_tei_primary. Make sure that the
+	 * primary tei matches stronger. */
+	bool vamos = (sign_link->tei != sign_link->trx->rsl_tei_primary)
+		     && (sign_link->tei == sign_link->trx->rsl_tei_vamos);
+	struct gsm_lchan *lchan = rsl_lchan_lookup(sign_link->trx, chan_nr, vamos, &rc);
 
 	if (!lchan) {
 		LOGP(DRSL, LOGL_ERROR, "%sunknown chan_nr=0x%02x\n",
@@ -1257,7 +1261,7 @@
 		return -EINVAL;
 	}
 
-	msg->lchan = lchan_lookup(sign_link->trx, rslh->chan_nr,
+	msg->lchan = lchan_lookup(sign_link, rslh->chan_nr,
 				  "Abis RSL rx DCHAN: ");
 	if (!msg->lchan) {
 		LOGP(DRSL, LOGL_ERROR,
@@ -1977,7 +1981,7 @@
 	struct rate_ctr_group *bts_ctrs = sign_link->trx->bts->bts_ctrs;
 	int rc = 0;
 
-	msg->lchan = lchan_lookup(sign_link->trx, rslh->chan_nr,
+	msg->lchan = lchan_lookup(sign_link, rslh->chan_nr,
 				  "Abis RSL rx CCHAN: ");
 
 	switch (rslh->c.msg_type) {
@@ -2048,7 +2052,7 @@
 	int rc = 0;
 	uint8_t sapi = rllh->link_id & 0x7;
 
-	msg->lchan = lchan_lookup(sign_link->trx, rllh->chan_nr, "Abis RSL rx RLL: ");
+	msg->lchan = lchan_lookup(sign_link, rllh->chan_nr, "Abis RSL rx RLL: ");
 
 	switch (rllh->c.msg_type) {
 	case RSL_MT_DATA_IND:
@@ -2454,7 +2458,7 @@
 	struct abis_rsl_rll_hdr *rllh = msgb_l2(msg);
 	int rc = 0;
 
-	msg->lchan = lchan_lookup(sign_link->trx, rllh->chan_nr,
+	msg->lchan = lchan_lookup(sign_link, rllh->chan_nr,
 				  "Abis RSL rx IPACC: ");
 
 	if (!msg->lchan) {
diff --git a/src/osmo-bsc/bts_trx.c b/src/osmo-bsc/bts_trx.c
index 64c7985..81af898 100644
--- a/src/osmo-bsc/bts_trx.c
+++ b/src/osmo-bsc/bts_trx.c
@@ -144,7 +144,7 @@
 }
 
 /* determine logical channel based on TRX and channel number IE */
-struct gsm_lchan *rsl_lchan_lookup(struct gsm_bts_trx *trx, uint8_t chan_nr,
+struct gsm_lchan *rsl_lchan_lookup(struct gsm_bts_trx *trx, uint8_t chan_nr, bool vamos,
 				   int *rc)
 {
 	uint8_t ts_nr = chan_nr & 0x07;
@@ -179,6 +179,12 @@
 	} else
 		return NULL;
 
+	if (vamos) {
+		if (!osmo_bts_has_feature(&trx->bts->features, BTS_FEAT_VAMOS))
+			return NULL;
+		lch_idx += ts->max_primary_lchans;
+	}
+
 	if (rc && ok)
 		*rc = 0;
 
diff --git a/tests/handover/handover_test.c b/tests/handover/handover_test.c
index e00294c..9913956 100644
--- a/tests/handover/handover_test.c
+++ b/tests/handover/handover_test.c
@@ -698,7 +698,8 @@
 	struct abis_rsl_dchan_hdr *dh = (struct abis_rsl_dchan_hdr *) msg->data;
 	struct e1inp_sign_link *sign_link = msg->dst;
 	int rc;
-	struct gsm_lchan *lchan = rsl_lchan_lookup(sign_link->trx, dh->chan_nr, &rc);
+	struct gsm_lchan *lchan = rsl_lchan_lookup(sign_link->trx, dh->chan_nr,
+						   false && (sign_link->tei == sign_link->trx->rsl_tei_vamos), &rc);
 	struct gsm_lchan *other_lchan;
 	struct gsm48_hdr *gh;
 

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

Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: I872a3ed9ce0cdbd9fbe41a750081f54008eece8d
Gerrit-Change-Number: 24378
Gerrit-PatchSet: 1
Gerrit-Owner: neels <nhofmeyr at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210523/15536d28/attachment.htm>


More information about the gerrit-log mailing list