<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/24378">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">RSL: look up lchan by sign_link, not trx, for VAMOS<br><br>So far we pass the gsm_bts_trx to the lchan lookup functions to<br>determine the lchan that a specific RSL message is received for. But for<br>VAMOS secondary lchans, we introduced a second sign_link for each TRX,<br>so passing the TRX loses information on which TEI the RSL message was<br>received from. Pass the sign_link instead of the trx.<br><br>If the sign_link is the secondary VAMOS link, return the VAMOS shadow<br>lchan instead of the primary one for that lchan number.<br><br>Related: SYS#5315 OS#4940<br>Change-Id: I872a3ed9ce0cdbd9fbe41a750081f54008eece8d<br>---<br>M include/osmocom/bsc/bts_trx.h<br>M src/osmo-bsc/abis_rsl.c<br>M src/osmo-bsc/bts_trx.c<br>M tests/handover/handover_test.c<br>4 files changed, 20 insertions(+), 9 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/78/24378/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/bsc/bts_trx.h b/include/osmocom/bsc/bts_trx.h</span><br><span>index 94f4021..09afd99 100644</span><br><span>--- a/include/osmocom/bsc/bts_trx.h</span><br><span>+++ b/include/osmocom/bsc/bts_trx.h</span><br><span>@@ -90,7 +90,7 @@</span><br><span> struct gsm_bts_trx *gsm_bts_trx_alloc(struct gsm_bts *bts);</span><br><span> char *gsm_trx_name(const struct gsm_bts_trx *trx);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-struct gsm_lchan *rsl_lchan_lookup(struct gsm_bts_trx *trx, uint8_t chan_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+struct gsm_lchan *rsl_lchan_lookup(struct gsm_bts_trx *trx, uint8_t chan_nr, bool vamos,</span><br><span> int *rc);</span><br><span> </span><br><span> void gsm_trx_lock_rf(struct gsm_bts_trx *trx, bool locked, const char *reason);</span><br><span>diff --git a/src/osmo-bsc/abis_rsl.c b/src/osmo-bsc/abis_rsl.c</span><br><span>index e1d8a41..c0d9e4d 100644</span><br><span>--- a/src/osmo-bsc/abis_rsl.c</span><br><span>+++ b/src/osmo-bsc/abis_rsl.c</span><br><span>@@ -125,11 +125,15 @@</span><br><span> }</span><br><span> </span><br><span> /* call rsl_lchan_lookup and set the log context */</span><br><span style="color: hsl(0, 100%, 40%);">-static struct gsm_lchan *lchan_lookup(struct gsm_bts_trx *trx, uint8_t chan_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+static struct gsm_lchan *lchan_lookup(struct e1inp_sign_link *sign_link, uint8_t chan_nr,</span><br><span> const char *log_name)</span><br><span> {</span><br><span> int rc;</span><br><span style="color: hsl(0, 100%, 40%);">- struct gsm_lchan *lchan = rsl_lchan_lookup(trx, chan_nr, &rc);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* If no VAMOS link was set up, rsl_tei_vamos may reflect the same as rsl_tei_primary. Make sure that the</span><br><span style="color: hsl(120, 100%, 40%);">+ * primary tei matches stronger. */</span><br><span style="color: hsl(120, 100%, 40%);">+ bool vamos = (sign_link->tei != sign_link->trx->rsl_tei_primary)</span><br><span style="color: hsl(120, 100%, 40%);">+ && (sign_link->tei == sign_link->trx->rsl_tei_vamos);</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_lchan *lchan = rsl_lchan_lookup(sign_link->trx, chan_nr, vamos, &rc);</span><br><span> </span><br><span> if (!lchan) {</span><br><span> LOGP(DRSL, LOGL_ERROR, "%sunknown chan_nr=0x%02x\n",</span><br><span>@@ -1257,7 +1261,7 @@</span><br><span> return -EINVAL;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- msg->lchan = lchan_lookup(sign_link->trx, rslh->chan_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ msg->lchan = lchan_lookup(sign_link, rslh->chan_nr,</span><br><span> "Abis RSL rx DCHAN: ");</span><br><span> if (!msg->lchan) {</span><br><span> LOGP(DRSL, LOGL_ERROR,</span><br><span>@@ -1977,7 +1981,7 @@</span><br><span> struct rate_ctr_group *bts_ctrs = sign_link->trx->bts->bts_ctrs;</span><br><span> int rc = 0;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- msg->lchan = lchan_lookup(sign_link->trx, rslh->chan_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ msg->lchan = lchan_lookup(sign_link, rslh->chan_nr,</span><br><span> "Abis RSL rx CCHAN: ");</span><br><span> </span><br><span> switch (rslh->c.msg_type) {</span><br><span>@@ -2048,7 +2052,7 @@</span><br><span> int rc = 0;</span><br><span> uint8_t sapi = rllh->link_id & 0x7;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- msg->lchan = lchan_lookup(sign_link->trx, rllh->chan_nr, "Abis RSL rx RLL: ");</span><br><span style="color: hsl(120, 100%, 40%);">+ msg->lchan = lchan_lookup(sign_link, rllh->chan_nr, "Abis RSL rx RLL: ");</span><br><span> </span><br><span> switch (rllh->c.msg_type) {</span><br><span> case RSL_MT_DATA_IND:</span><br><span>@@ -2454,7 +2458,7 @@</span><br><span> struct abis_rsl_rll_hdr *rllh = msgb_l2(msg);</span><br><span> int rc = 0;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- msg->lchan = lchan_lookup(sign_link->trx, rllh->chan_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ msg->lchan = lchan_lookup(sign_link, rllh->chan_nr,</span><br><span> "Abis RSL rx IPACC: ");</span><br><span> </span><br><span> if (!msg->lchan) {</span><br><span>diff --git a/src/osmo-bsc/bts_trx.c b/src/osmo-bsc/bts_trx.c</span><br><span>index 64c7985..81af898 100644</span><br><span>--- a/src/osmo-bsc/bts_trx.c</span><br><span>+++ b/src/osmo-bsc/bts_trx.c</span><br><span>@@ -144,7 +144,7 @@</span><br><span> }</span><br><span> </span><br><span> /* determine logical channel based on TRX and channel number IE */</span><br><span style="color: hsl(0, 100%, 40%);">-struct gsm_lchan *rsl_lchan_lookup(struct gsm_bts_trx *trx, uint8_t chan_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+struct gsm_lchan *rsl_lchan_lookup(struct gsm_bts_trx *trx, uint8_t chan_nr, bool vamos,</span><br><span> int *rc)</span><br><span> {</span><br><span> uint8_t ts_nr = chan_nr & 0x07;</span><br><span>@@ -179,6 +179,12 @@</span><br><span> } else</span><br><span> return NULL;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (vamos) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!osmo_bts_has_feature(&trx->bts->features, BTS_FEAT_VAMOS))</span><br><span style="color: hsl(120, 100%, 40%);">+ return NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+ lch_idx += ts->max_primary_lchans;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> if (rc && ok)</span><br><span> *rc = 0;</span><br><span> </span><br><span>diff --git a/tests/handover/handover_test.c b/tests/handover/handover_test.c</span><br><span>index e00294c..9913956 100644</span><br><span>--- a/tests/handover/handover_test.c</span><br><span>+++ b/tests/handover/handover_test.c</span><br><span>@@ -698,7 +698,8 @@</span><br><span> struct abis_rsl_dchan_hdr *dh = (struct abis_rsl_dchan_hdr *) msg->data;</span><br><span> struct e1inp_sign_link *sign_link = msg->dst;</span><br><span> int rc;</span><br><span style="color: hsl(0, 100%, 40%);">- struct gsm_lchan *lchan = rsl_lchan_lookup(sign_link->trx, dh->chan_nr, &rc);</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_lchan *lchan = rsl_lchan_lookup(sign_link->trx, dh->chan_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ false && (sign_link->tei == sign_link->trx->rsl_tei_vamos), &rc);</span><br><span> struct gsm_lchan *other_lchan;</span><br><span> struct gsm48_hdr *gh;</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/24378">change 24378</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-bsc/+/24378"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I872a3ed9ce0cdbd9fbe41a750081f54008eece8d </div>
<div style="display:none"> Gerrit-Change-Number: 24378 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>