<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/24465">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">lchan_fsm: introduce lchan.modify.ch_mode_rate to allow tweaking<br><br>lchan->modify.info.ch_mode_rate should remain unchanged, it is the<br>immutable request data. However, for VAMOS, we will want to<br>automatically see that the chan_mode is chosen correctly.<br><br>As a first step, place a mutable ch_mode_rate copy at<br>lchan->modify.ch_mode_rate, i.e. not in .modify.info, but in<br>.modify. Use that everywhere.<br><br>This is a non-functional change, preparing for a subsequent patch that<br>adds handling of VAMOS shadow lchans.<br><br>Change-Id: I8a3daac0287f15a59d3688388bb13e55facb2cea<br>---<br>M include/osmocom/bsc/gsm_data.h<br>M src/osmo-bsc/abis_rsl.c<br>M src/osmo-bsc/gsm_04_08_rr.c<br>M src/osmo-bsc/lchan_fsm.c<br>4 files changed, 13 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/65/24465/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h</span><br><span>index d128db7..831463a 100644</span><br><span>--- a/include/osmocom/bsc/gsm_data.h</span><br><span>+++ b/include/osmocom/bsc/gsm_data.h</span><br><span>@@ -657,6 +657,7 @@</span><br><span> </span><br><span>  struct {</span><br><span>             struct lchan_modify_info info;</span><br><span style="color: hsl(120, 100%, 40%);">+                struct channel_mode_and_rate ch_mode_rate;</span><br><span>           struct gsm48_multi_rate_conf mr_conf_filtered;</span><br><span>               int tsc_set;</span><br><span>                 uint8_t tsc;</span><br><span>diff --git a/src/osmo-bsc/abis_rsl.c b/src/osmo-bsc/abis_rsl.c</span><br><span>index 7fe961e..9378ecb 100644</span><br><span>--- a/src/osmo-bsc/abis_rsl.c</span><br><span>+++ b/src/osmo-bsc/abis_rsl.c</span><br><span>@@ -634,7 +634,7 @@</span><br><span>  struct rsl_ie_chan_mode cm;</span><br><span>  struct gsm_bts *bts = lchan->ts->trx->bts;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- rc = channel_mode_from_lchan(&cm, lchan, &lchan->modify.info.ch_mode_rate);</span><br><span style="color: hsl(120, 100%, 40%);">+        rc = channel_mode_from_lchan(&cm, lchan, &lchan->modify.ch_mode_rate);</span><br><span>    if (rc < 0)</span><br><span>               return rc;</span><br><span> </span><br><span>@@ -653,7 +653,7 @@</span><br><span>                         msgb_tlv_put(msg, RSL_IE_ENCR_INFO, rc, encr_info);</span><br><span>  }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (gsm48_chan_mode_to_non_vamos(lchan->modify.info.ch_mode_rate.chan_mode) == GSM48_CMODE_SPEECH_AMR) {</span><br><span style="color: hsl(120, 100%, 40%);">+   if (gsm48_chan_mode_to_non_vamos(lchan->modify.ch_mode_rate.chan_mode) == GSM48_CMODE_SPEECH_AMR) {</span><br><span>               rc = put_mr_config_for_bts(msg, &lchan->modify.mr_conf_filtered,</span><br><span>                                         (lchan->type == GSM_LCHAN_TCH_F) ? &bts->mr_full : &bts->mr_half);</span><br><span>               if (rc) {</span><br><span>diff --git a/src/osmo-bsc/gsm_04_08_rr.c b/src/osmo-bsc/gsm_04_08_rr.c</span><br><span>index 6e86c9e..058a107 100644</span><br><span>--- a/src/osmo-bsc/gsm_04_08_rr.c</span><br><span>+++ b/src/osmo-bsc/gsm_04_08_rr.c</span><br><span>@@ -696,7 +696,7 @@</span><br><span>     cmm->mode = mode;</span><br><span> </span><br><span>     /* in case of multi rate we need to attach a config */</span><br><span style="color: hsl(0, 100%, 40%);">-  if (gsm48_chan_mode_to_non_vamos(lchan->modify.info.ch_mode_rate.chan_mode) == GSM48_CMODE_SPEECH_AMR) {</span><br><span style="color: hsl(120, 100%, 40%);">+   if (gsm48_chan_mode_to_non_vamos(lchan->modify.ch_mode_rate.chan_mode) == GSM48_CMODE_SPEECH_AMR) {</span><br><span>               int rc = put_mr_config_for_ms(msg, &lchan->modify.mr_conf_filtered,</span><br><span>                                         (lchan->type == GSM_LCHAN_TCH_F) ? &bts->mr_full : &bts->mr_half);</span><br><span>            if (rc) {</span><br><span>@@ -718,10 +718,10 @@</span><br><span>    LOG_LCHAN(msg->lchan, LOGL_DEBUG, "CHANNEL MODE MODIFY ACK for %s\n",</span><br><span>             gsm48_chan_mode_name(mod->mode));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      if (mod->mode != msg->lchan->modify.info.ch_mode_rate.chan_mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+   if (mod->mode != msg->lchan->modify.ch_mode_rate.chan_mode) {</span><br><span>               LOG_LCHAN(msg->lchan, LOGL_ERROR,</span><br><span>                           "CHANNEL MODE MODIFY ACK has wrong mode: Wanted: %s Got: %s\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                       gsm48_chan_mode_name(msg->lchan->modify.info.ch_mode_rate.chan_mode),</span><br><span style="color: hsl(120, 100%, 40%);">+                   gsm48_chan_mode_name(msg->lchan->modify.ch_mode_rate.chan_mode),</span><br><span>                       gsm48_chan_mode_name(mod->mode));</span><br><span>               return -1;</span><br><span>   }</span><br><span>diff --git a/src/osmo-bsc/lchan_fsm.c b/src/osmo-bsc/lchan_fsm.c</span><br><span>index a28f58d..a29ddae 100644</span><br><span>--- a/src/osmo-bsc/lchan_fsm.c</span><br><span>+++ b/src/osmo-bsc/lchan_fsm.c</span><br><span>@@ -928,7 +928,7 @@</span><br><span> static void lchan_fsm_wait_rr_chan_mode_modify_ack_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 style="color: hsl(0, 100%, 40%);">-   gsm48_lchan_modify(lchan, lchan->modify.info.ch_mode_rate.chan_mode);</span><br><span style="color: hsl(120, 100%, 40%);">+      gsm48_lchan_modify(lchan, lchan->modify.ch_mode_rate.chan_mode);</span><br><span> }</span><br><span> </span><br><span> static void lchan_fsm_wait_rr_chan_mode_modify_ack(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span>@@ -969,7 +969,7 @@</span><br><span> </span><br><span>   case LCHAN_EV_RSL_CHAN_MODE_MODIFY_ACK:</span><br><span>              /* The Channel Mode Modify was ACKed, now the requested values become the accepted and used values. */</span><br><span style="color: hsl(0, 100%, 40%);">-          lchan->current_ch_mode_rate = lchan->modify.info.ch_mode_rate;</span><br><span style="color: hsl(120, 100%, 40%);">+          lchan->current_ch_mode_rate = lchan->modify.ch_mode_rate;</span><br><span>              lchan->current_mr_conf = lchan->modify.mr_conf_filtered;</span><br><span>               lchan->tsc_set = lchan->modify.tsc_set;</span><br><span>                lchan->tsc = lchan->modify.tsc;</span><br><span>@@ -981,7 +981,7 @@</span><br><span>                  lchan->activate.info = (struct lchan_activate_info){</span><br><span>                              .activ_for = ACTIVATE_FOR_MODE_MODIFY_RTP,</span><br><span>                           .for_conn = lchan->conn,</span><br><span style="color: hsl(0, 100%, 40%);">-                             .ch_mode_rate = lchan->modify.info.ch_mode_rate,</span><br><span style="color: hsl(120, 100%, 40%);">+                           .ch_mode_rate = lchan->modify.ch_mode_rate,</span><br><span>                               .requires_voice_stream = true,</span><br><span>                               .msc_assigned_cic = lchan->modify.info.msc_assigned_cic,</span><br><span>                  };</span><br><span>@@ -1124,6 +1124,9 @@</span><br><span> </span><br><span>               use_mgwep_ci = lchan_use_mgw_endpoint_ci_bts(lchan);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+              lchan->modify.ch_mode_rate = lchan->modify.info.ch_mode_rate;</span><br><span style="color: hsl(120, 100%, 40%);">+           /* future: automatically adjust chan_mode in lchan->modify.ch_mode_rate */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>              if (gsm48_chan_mode_to_non_vamos(modif_info->ch_mode_rate.chan_mode) == GSM48_CMODE_SPEECH_AMR) {</span><br><span>                         if (lchan_mr_config(&lchan->modify.mr_conf_filtered, lchan, modif_info->ch_mode_rate.s15_s0)</span><br><span>                           < 0) {</span><br><span>@@ -1149,7 +1152,7 @@</span><br><span>                          (use_mgwep_ci ? osmo_mgcpc_ep_ci_name(use_mgwep_ci) : "new")</span><br><span>                       : "none",</span><br><span>                          gsm_lchant_name(lchan->type),</span><br><span style="color: hsl(0, 100%, 40%);">-                        gsm48_chan_mode_name(lchan->modify.info.ch_mode_rate.chan_mode),</span><br><span style="color: hsl(120, 100%, 40%);">+                   gsm48_chan_mode_name(lchan->modify.ch_mode_rate.chan_mode),</span><br><span>                       lchan->modify.tsc_set, lchan->modify.tsc);</span><br><span> </span><br><span>               lchan_fsm_state_chg(LCHAN_ST_WAIT_RR_CHAN_MODE_MODIFY_ACK);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/24465">change 24465</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/+/24465"/><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: I8a3daac0287f15a59d3688388bb13e55facb2cea </div>
<div style="display:none"> Gerrit-Change-Number: 24465 </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>