<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/25397">View Change</a></p><div style="white-space:pre-wrap">Approvals:
laforge: Looks good to me, approved
pespin: Looks good to me, but someone else must approve
Jenkins Builder: Verified
</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">fixup for Early IMM ASS: use proper TSC<br><br>Testing has shown that the Training Sequence Code in pre-chan-ack mode<br>is inaccurate (only worked with a BSIC that incidentally yielded the<br>same TSC value as the wrong TSC value sent in the IMM ASS msg).<br><br>Move the code setting the correct TSC and TSC-Set to the first stage of<br>channel activation (lchan_fsm_wait_ts_ready_onenter()) so that it is<br>available for both pre-chan-ack and pre-ts-ack Early-IA modes.<br><br>Have a separate function for setting the preliminary values requested in<br>Channel Activation (lchan->activate.*) into the accepted operative<br>places (lchan->*). Call this early for early-IA modes.<br><br>Hence the TSC and TSC-Set used in the early IMM ASS message is now the<br>correct one, and the same as sent during Channel Activation.<br>There shouldn't be any, but if there are other values besides TSC<br>suffering from the same problem, they are now also set to the right<br>values before sending IMM ASS early.<br><br>Related: SYS#5559<br>Related: I4479244b0c53648e62e84e1ebf986f51d659484f (osmo-ttcn3-hacks)<br>Change-Id: I9f26074154600d854a0b3baee2f38a6666f4cb56<br>---<br>M src/osmo-bsc/lchan_fsm.c<br>1 file changed, 40 insertions(+), 16 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo-bsc/lchan_fsm.c b/src/osmo-bsc/lchan_fsm.c</span><br><span>index c390662..1b59b45 100644</span><br><span>--- a/src/osmo-bsc/lchan_fsm.c</span><br><span>+++ b/src/osmo-bsc/lchan_fsm.c</span><br><span>@@ -672,6 +672,8 @@</span><br><span> return rc;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void post_activ_ack_accept_preliminary_settings(struct gsm_lchan *lchan);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static void lchan_fsm_wait_ts_ready_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state)</span><br><span> {</span><br><span> struct gsm_lchan *lchan = lchan_fi_lchan(fi);</span><br><span>@@ -717,6 +719,17 @@</span><br><span> if (lchan_activate_set_ch_mode_rate_and_mr_config(lchan))</span><br><span> return;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* If enabling VAMOS mode and no specific TSC Set was selected, make sure to select a sane TSC Set by</span><br><span style="color: hsl(120, 100%, 40%);">+ * default: Set 1 for the primary and Set 2 for the shadow lchan. For non-VAMOS lchans, TSC Set 1. */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (lchan->activate.info.tsc_set > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+ lchan->activate.tsc_set = lchan->activate.info.tsc_set;</span><br><span style="color: hsl(120, 100%, 40%);">+ else</span><br><span style="color: hsl(120, 100%, 40%);">+ lchan->activate.tsc_set = lchan->vamos.is_secondary ? 2 : 1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Use the TSC provided in the modification request, if any. Otherwise use the timeslot's configured</span><br><span style="color: hsl(120, 100%, 40%);">+ * TSC. */</span><br><span style="color: hsl(120, 100%, 40%);">+ lchan->activate.tsc = (lchan->activate.info.tsc >= 0) ? lchan->activate.info.tsc : gsm_ts_tsc(lchan->ts);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> use_mgwep_ci = lchan_use_mgw_endpoint_ci_bts(lchan);</span><br><span> </span><br><span> LOG_LCHAN(lchan, LOGL_INFO,</span><br><span>@@ -742,7 +755,13 @@</span><br><span> </span><br><span> if (lchan->activate.info.imm_ass_time == IMM_ASS_TIME_PRE_TS_ACK) {</span><br><span> /* Send the Immediate Assignment even before the timeslot is ready, saving a dyn TS timeslot roundtrip</span><br><span style="color: hsl(0, 100%, 40%);">- * on Abis (experimental). */</span><br><span style="color: hsl(120, 100%, 40%);">+ * on Abis (experimental).</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Until the Channel Activation ACK is received, various values still are preliminary and hence live in</span><br><span style="color: hsl(120, 100%, 40%);">+ * lchan->activate.*. We're doing things early here and need e.g. an accurate lchan->tsc, so already</span><br><span style="color: hsl(120, 100%, 40%);">+ * copy the preliminary values from lchan->activate.* into the operative places in lchan->* prematurely.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+ post_activ_ack_accept_preliminary_settings(lchan);</span><br><span> lchan_send_imm_ass(fi);</span><br><span> }</span><br><span> }</span><br><span>@@ -801,19 +820,13 @@</span><br><span> break;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* rsl_tx_chan_activ() and build_encr_info() access lchan->encr, make sure it reflects the values requested for</span><br><span style="color: hsl(120, 100%, 40%);">+ * activation.</span><br><span style="color: hsl(120, 100%, 40%);">+ * TODO: rather leave it in lchan->activate.info.encr until the ACK is received, which means that</span><br><span style="color: hsl(120, 100%, 40%);">+ * rsl_tx_chan_activ() should use lchan->activate.info.encr and build_encr_info() should be passed encr as an</span><br><span style="color: hsl(120, 100%, 40%);">+ * explicit argument. */</span><br><span> lchan->encr = lchan->activate.info.encr;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* If enabling VAMOS mode and no specific TSC Set was selected, make sure to select a sane TSC Set by</span><br><span style="color: hsl(0, 100%, 40%);">- * default: Set 1 for the primary and Set 2 for the shadow lchan. For non-VAMOS lchans, TSC Set 1. */</span><br><span style="color: hsl(0, 100%, 40%);">- if (lchan->activate.info.tsc_set > 0)</span><br><span style="color: hsl(0, 100%, 40%);">- lchan->activate.tsc_set = lchan->activate.info.tsc_set;</span><br><span style="color: hsl(0, 100%, 40%);">- else</span><br><span style="color: hsl(0, 100%, 40%);">- lchan->activate.tsc_set = lchan->vamos.is_secondary ? 2 : 1;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- /* Use the TSC provided in the modification request, if any. Otherwise use the timeslot's configured</span><br><span style="color: hsl(0, 100%, 40%);">- * TSC. */</span><br><span style="color: hsl(0, 100%, 40%);">- lchan->activate.tsc = (lchan->activate.info.tsc >= 0) ? lchan->activate.info.tsc : gsm_ts_tsc(lchan->ts);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> rc = rsl_tx_chan_activ(lchan, act_type, ho_ref);</span><br><span> if (rc) {</span><br><span> lchan_fail_to(LCHAN_ST_UNUSED, "Tx Chan Activ failed: %s (%d)", strerror(-rc), rc);</span><br><span>@@ -825,7 +838,13 @@</span><br><span> </span><br><span> if (lchan->activate.info.imm_ass_time == IMM_ASS_TIME_PRE_CHAN_ACK) {</span><br><span> /* Send the Immediate Assignment directly after the Channel Activation request, saving one Abis</span><br><span style="color: hsl(0, 100%, 40%);">- * roundtrip between ChanRqd and Imm Ass. */</span><br><span style="color: hsl(120, 100%, 40%);">+ * roundtrip between ChanRqd and Imm Ass.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Until the Channel Activation ACK is received, various values still are preliminary and hence live in</span><br><span style="color: hsl(120, 100%, 40%);">+ * lchan->activate.*. We're doing things early here and need e.g. an accurate lchan->tsc, so already</span><br><span style="color: hsl(120, 100%, 40%);">+ * copy the preliminary values from lchan->activate.* into the operative places in lchan->* prematurely.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+ post_activ_ack_accept_preliminary_settings(lchan);</span><br><span> lchan_send_imm_ass(fi);</span><br><span> }</span><br><span> }</span><br><span>@@ -886,15 +905,20 @@</span><br><span> }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void lchan_fsm_post_activ_ack(struct osmo_fsm_inst *fi)</span><br><span style="color: hsl(120, 100%, 40%);">+static void post_activ_ack_accept_preliminary_settings(struct gsm_lchan *lchan)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- struct gsm_lchan *lchan = lchan_fi_lchan(fi);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> lchan->current_ch_mode_rate = lchan->activate.ch_mode_rate;</span><br><span> lchan->current_mr_conf = lchan->activate.mr_conf_filtered;</span><br><span> lchan->vamos.enabled = lchan->activate.info.vamos;</span><br><span> lchan->tsc_set = lchan->activate.tsc_set;</span><br><span> lchan->tsc = lchan->activate.tsc;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void lchan_fsm_post_activ_ack(struct osmo_fsm_inst *fi)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_lchan *lchan = lchan_fi_lchan(fi);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ post_activ_ack_accept_preliminary_settings(lchan);</span><br><span> LOG_LCHAN(lchan, LOGL_INFO, "Rx Activ ACK %s\n",</span><br><span> gsm48_chan_mode_name(lchan->current_ch_mode_rate.chan_mode));</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/25397">change 25397</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/+/25397"/><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: I9f26074154600d854a0b3baee2f38a6666f4cb56 </div>
<div style="display:none"> Gerrit-Change-Number: 25397 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-CC: iedemam <michael@kapsulate.com> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>