<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/24381">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">VTY: add lchan re-assignment command<br><br>Add VTY command to trigger an intra-cell re-assignment, also allowing to<br>re-assign to a secondary VAMOS lchan.<br><br>Related: SYS#5315 OS#4940<br>Change-Id: If006f5caaf83b07675f57e5665cfa79328da55e6<br>---<br>M include/osmocom/bsc/gsm_data.h<br>M src/osmo-bsc/bsc_vty.c<br>M src/osmo-bsc/gsm_data.c<br>3 files changed, 70 insertions(+), 0 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/81/24381/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 4690a2c..1891786 100644</span><br><span>--- a/include/osmocom/bsc/gsm_data.h</span><br><span>+++ b/include/osmocom/bsc/gsm_data.h</span><br><span>@@ -131,6 +131,7 @@</span><br><span>        ASSIGN_FOR_NONE,</span><br><span>     ASSIGN_FOR_BSSMAP_REQ,</span><br><span>       ASSIGN_FOR_CONGESTION_RESOLUTION,</span><br><span style="color: hsl(120, 100%, 40%);">+     ASSIGN_FOR_VTY,</span><br><span> };</span><br><span> </span><br><span> extern const struct value_string assign_for_names[];</span><br><span>diff --git a/src/osmo-bsc/bsc_vty.c b/src/osmo-bsc/bsc_vty.c</span><br><span>index 48f397e..2581b98 100644</span><br><span>--- a/src/osmo-bsc/bsc_vty.c</span><br><span>+++ b/src/osmo-bsc/bsc_vty.c</span><br><span>@@ -6534,6 +6534,73 @@</span><br><span>      return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(lchan_reassign, lchan_reassign_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       "bts <0-255> trx <0-255> timeslot <0-7> (sub-slot|vamos-sub-slot) <0-7> "</span><br><span style="color: hsl(120, 100%, 40%);">+   " reassign-to trx <0-255> timeslot <0-7> (sub-slot|vamos-sub-slot) <0-7> "</span><br><span style="color: hsl(120, 100%, 40%);">+        TSC_ARGS_OPT,</span><br><span style="color: hsl(120, 100%, 40%);">+ "BTS nr\nTRX nr\ntimeslot nr\nnormal lchan\nvamos secondary lchan\nsub-slot nr\n"</span><br><span style="color: hsl(120, 100%, 40%);">+   "TRX nr\ntimeslot nr\nnormal lchan\nvamos secondary lchan\nsub-slot nr\n"</span><br><span style="color: hsl(120, 100%, 40%);">+   TSC_ARGS_DOC)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      const char *bts_str = argv[0];</span><br><span style="color: hsl(120, 100%, 40%);">+        const char *from_trx_str = argv[1];</span><br><span style="color: hsl(120, 100%, 40%);">+   const char *from_ts_str = argv[2];</span><br><span style="color: hsl(120, 100%, 40%);">+    bool from_vamos = (strcmp(argv[3], "vamos-sub-slot") == 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ int from_ss_nr = atoi(argv[4]);</span><br><span style="color: hsl(120, 100%, 40%);">+       const char *to_trx_str = argv[5];</span><br><span style="color: hsl(120, 100%, 40%);">+     const char *to_ts_str = argv[6];</span><br><span style="color: hsl(120, 100%, 40%);">+      bool to_vamos = (strcmp(argv[7], "vamos-sub-slot") == 0);</span><br><span style="color: hsl(120, 100%, 40%);">+   int to_ss_nr = atoi(argv[8]);</span><br><span style="color: hsl(120, 100%, 40%);">+ int tsc_set = (argc > 10) ? atoi(argv[10]) : -1;</span><br><span style="color: hsl(120, 100%, 40%);">+   int tsc = (argc > 11) ? atoi(argv[11]) : -1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     struct gsm_bts_trx_ts *from_ts;</span><br><span style="color: hsl(120, 100%, 40%);">+       struct gsm_bts_trx_ts *to_ts;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_lchan *from_lchan;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_lchan *to_lchan;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGP(DLGLOBAL, LOGL_NOTICE, "hi\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      from_ts = vty_get_ts(vty, bts_str, from_trx_str, from_ts_str);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (!from_ts)</span><br><span style="color: hsl(120, 100%, 40%);">+         return CMD_WARNING;</span><br><span style="color: hsl(120, 100%, 40%);">+   to_ts = vty_get_ts(vty, bts_str, to_trx_str, to_ts_str);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (!to_ts)</span><br><span style="color: hsl(120, 100%, 40%);">+           return CMD_WARNING;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (from_vamos)</span><br><span style="color: hsl(120, 100%, 40%);">+               from_ss_nr += from_ts->max_primary_lchans;</span><br><span style="color: hsl(120, 100%, 40%);">+ from_lchan = &from_ts->lchan[from_ss_nr];</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    if (to_vamos)</span><br><span style="color: hsl(120, 100%, 40%);">+         to_ss_nr += to_ts->max_primary_lchans;</span><br><span style="color: hsl(120, 100%, 40%);">+     to_lchan = &to_ts->lchan[to_ss_nr];</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  if (!lchan_state_is(from_lchan, LCHAN_ST_ESTABLISHED)) {</span><br><span style="color: hsl(120, 100%, 40%);">+              vty_out(vty, "cannot re-assign, source lchan is not in ESTABLISHED state%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+          return CMD_WARNING;</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (!lchan_state_is(to_lchan, LCHAN_ST_UNUSED)) {</span><br><span style="color: hsl(120, 100%, 40%);">+             vty_out(vty, "cannot re-assign, target lchan is already in use%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+            return CMD_WARNING;</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%);">+   /* lchan_select_*() sets the lchan->type, we need to do the same here, so that activation will work out. */</span><br><span style="color: hsl(120, 100%, 40%);">+        to_lchan->type = chan_mode_to_chan_type(from_lchan->current_ch_mode_rate.chan_mode,</span><br><span style="color: hsl(120, 100%, 40%);">+                                             from_lchan->current_ch_mode_rate.chan_rate);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     LOG_LCHAN(from_lchan, LOGL_NOTICE, "VTY requests re-assignment of this lchan to %s%s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+              gsm_lchan_name(to_lchan), to_lchan->vamos.is_secondary ? " (to VAMOS mode)" : "");</span><br><span style="color: hsl(120, 100%, 40%);">+   LOG_LCHAN(to_lchan, LOGL_NOTICE, "VTY requests re-assignment of %s to this lchan%s TSC %d/%d\n",</span><br><span style="color: hsl(120, 100%, 40%);">+              gsm_lchan_name(from_lchan), to_lchan->vamos.is_secondary ? " (to VAMOS mode)" : "",</span><br><span style="color: hsl(120, 100%, 40%);">+            tsc_set, tsc);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (reassignment_request_to_lchan(ASSIGN_FOR_VTY, from_lchan, to_lchan, tsc_set, tsc)) {</span><br><span style="color: hsl(120, 100%, 40%);">+              vty_out(vty, "failed to request re-assignment%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+             return CMD_WARNING;</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+     return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> DEFUN(ctrl_trap, ctrl_trap_cmd,</span><br><span>  "ctrl-interface generate-trap TRAP VALUE",</span><br><span>         "Commands related to the CTRL Interface\n"</span><br><span>@@ -8012,6 +8079,7 @@</span><br><span>         install_element(ENABLE_NODE, &lchan_act_all_trx_cmd);</span><br><span>    install_element(ENABLE_NODE, &lchan_mdcx_cmd);</span><br><span>   install_element(ENABLE_NODE, &lchan_set_borken_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+      install_element(ENABLE_NODE, &lchan_reassign_cmd);</span><br><span> </span><br><span>   install_element(ENABLE_NODE, &handover_subscr_conn_cmd);</span><br><span>         install_element(ENABLE_NODE, &assignment_subscr_conn_cmd);</span><br><span>diff --git a/src/osmo-bsc/gsm_data.c b/src/osmo-bsc/gsm_data.c</span><br><span>index 85ce8bf..e7a461d 100644</span><br><span>--- a/src/osmo-bsc/gsm_data.c</span><br><span>+++ b/src/osmo-bsc/gsm_data.c</span><br><span>@@ -1047,6 +1047,7 @@</span><br><span>      OSMO_VALUE_STRING(ASSIGN_FOR_NONE),</span><br><span>  OSMO_VALUE_STRING(ASSIGN_FOR_BSSMAP_REQ),</span><br><span>    OSMO_VALUE_STRING(ASSIGN_FOR_CONGESTION_RESOLUTION),</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_VALUE_STRING(ASSIGN_FOR_VTY),</span><br><span>   {}</span><br><span> };</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/24381">change 24381</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/+/24381"/><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: If006f5caaf83b07675f57e5665cfa79328da55e6 </div>
<div style="display:none"> Gerrit-Change-Number: 24381 </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>