<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/9426">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  Harald Welte: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">LCLS: add VTY config to enable/disable LCLS on per-MSC basis<br><br>The user might not want to enable LCLS support for administrative<br>reasons.  So let's keep it disabled by default, until somebody<br>explicitly enables it with "lcls-mode mgw-loop".<br><br>In the future, we may want to introduce a "lcls-mode bts-loop" where we<br>don't loop at the BSC-colocated MGW, but where we instruct the BTSs to<br>feed the RTP directly to each other.  This would require a<br>falt/transparent IP routing between the BTSs in the RAN.<br><br>Change-Id: Ied7985056c8cd182bf16119007a08cc5be14459b<br>Related: OS#1602<br>---<br>M include/osmocom/bsc/bsc_msc_data.h<br>M src/libbsc/osmo_bsc_lcls.c<br>M src/osmo-bsc/osmo_bsc_vty.c<br>3 files changed, 34 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/bsc/bsc_msc_data.h b/include/osmocom/bsc/bsc_msc_data.h</span><br><span>index baa58e7..7235fba 100644</span><br><span>--- a/include/osmocom/bsc/bsc_msc_data.h</span><br><span>+++ b/include/osmocom/bsc/bsc_msc_data.h</span><br><span>@@ -58,6 +58,12 @@</span><br><span>     MSC_CON_TYPE_LOCAL,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+enum bsc_lcls_mode {</span><br><span style="color: hsl(120, 100%, 40%);">+   BSC_LCLS_MODE_DISABLED,</span><br><span style="color: hsl(120, 100%, 40%);">+       BSC_LCLS_MODE_MGW_LOOP,</span><br><span style="color: hsl(120, 100%, 40%);">+       /* we may later introduce BTS_LOOP here: direct RTP between BTSs */</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! /brief Information on a remote MSC for libbsc.</span><br><span>  */</span><br><span> struct bsc_msc_data {</span><br><span>@@ -85,6 +91,7 @@</span><br><span>  struct gsm48_multi_rate_conf amr_conf;</span><br><span>       struct gsm_audio_support **audio_support;</span><br><span>    int audio_length;</span><br><span style="color: hsl(120, 100%, 40%);">+     enum bsc_lcls_mode lcls_mode;</span><br><span> </span><br><span>    /* ussd welcome text */</span><br><span>      char *ussd_welcome_txt;</span><br><span>diff --git a/src/libbsc/osmo_bsc_lcls.c b/src/libbsc/osmo_bsc_lcls.c</span><br><span>index e32376d..c2b0760 100644</span><br><span>--- a/src/libbsc/osmo_bsc_lcls.c</span><br><span>+++ b/src/libbsc/osmo_bsc_lcls.c</span><br><span>@@ -286,6 +286,12 @@</span><br><span>  /* we're just starting and cannot yet have a correlated call */</span><br><span>  OSMO_ASSERT(conn->lcls.other == NULL);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (conn->sccp.msc->lcls_mode == BSC_LCLS_MODE_DISABLED) {</span><br><span style="color: hsl(120, 100%, 40%);">+              LOGPFSML(fi, LOGL_DEBUG, "LCLS disabled for this MSC, ignoring %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                        osmo_fsm_event_name(fi->fsm, event));</span><br><span style="color: hsl(120, 100%, 40%);">+             return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  /* If there's no GCR set, we can never leave this state */</span><br><span>       if (conn->lcls.global_call_ref_len == 0) {</span><br><span>                LOGPFSML(fi, LOGL_NOTICE, "No GCR set, ignoring %s\n",</span><br><span>diff --git a/src/osmo-bsc/osmo_bsc_vty.c b/src/osmo-bsc/osmo_bsc_vty.c</span><br><span>index 34080c0..e6df7b3 100644</span><br><span>--- a/src/osmo-bsc/osmo_bsc_vty.c</span><br><span>+++ b/src/osmo-bsc/osmo_bsc_vty.c</span><br><span>@@ -38,6 +38,12 @@</span><br><span> </span><br><span> #define IPA_STR "IP.ACCESS specific\n"</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static const struct value_string bsc_lcls_mode_names[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+        { BSC_LCLS_MODE_DISABLED,       "disabled" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { BSC_LCLS_MODE_MGW_LOOP,       "mgw-loop" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 0, NULL }</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static struct osmo_bsc_data *osmo_bsc_data(struct vty *vty)</span><br><span> {</span><br><span>        return bsc_gsmnet->bsc_data;</span><br><span>@@ -175,6 +181,8 @@</span><br><span>                        msc->a.msc_addr_name, VTY_NEWLINE);</span><br><span>       }</span><br><span>    vty_out(vty, " asp-protocol %s%s", osmo_ss7_asp_protocol_name(msc->a.asp_proto), VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+   vty_out(vty, " lcls-mode %s%s", get_value_string(bsc_lcls_mode_names, msc->lcls_mode),</span><br><span style="color: hsl(120, 100%, 40%);">+           VTY_NEWLINE);</span><br><span> </span><br><span>    /* write MGW configuration */</span><br><span>        mgcp_client_config_write(vty, " ");</span><br><span>@@ -628,6 +636,18 @@</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_net_msc_lcls_mode,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_net_msc_lcls_mode_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "lcls-mode (disabled|mgw-loop)",</span><br><span style="color: hsl(120, 100%, 40%);">+      "Configure 3GPP LCLS (Local Call, Local Switch)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      "Disable LCLS for all calls of this MSC\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      "Enable LCLS with loopping traffic in MGW\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      struct bsc_msc_data *data = bsc_msc_data(vty);</span><br><span style="color: hsl(120, 100%, 40%);">+        data->lcls_mode = get_string_value(bsc_lcls_mode_names, argv[0]);</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(cfg_net_bsc_mid_call_text,</span><br><span>       cfg_net_bsc_mid_call_text_cmd,</span><br><span>       "mid-call-text .TEXT",</span><br><span>@@ -903,6 +923,7 @@</span><br><span>         install_element(MSC_NODE, &cfg_net_msc_amr_5_90_cmd);</span><br><span>    install_element(MSC_NODE, &cfg_net_msc_amr_5_15_cmd);</span><br><span>    install_element(MSC_NODE, &cfg_net_msc_amr_4_75_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+     install_element(MSC_NODE, &cfg_net_msc_lcls_mode_cmd);</span><br><span>   install_element(MSC_NODE, &cfg_msc_acc_lst_name_cmd);</span><br><span>    install_element(MSC_NODE, &cfg_msc_no_acc_lst_name_cmd);</span><br><span>         install_element(MSC_NODE, &cfg_msc_cs7_bsc_addr_cmd);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/9426">change 9426</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/9426"/><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-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: Ied7985056c8cd182bf16119007a08cc5be14459b </div>
<div style="display:none"> Gerrit-Change-Number: 9426 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>