<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/20630">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">LCS: disable Lb interface by default, add vty 'smlc' / 'enable'<br><br>To not modify previous SCCP behavior of OsmoBSC, keep the Lb interface disabled<br>by default. The following configuration enables the Lb interface:<br><br>  smlc<br>   enable<br><br>Change-Id: I01314a29a2cad6f325d9f4687a9dedca6b90a3ce<br>---<br>M include/osmocom/bsc/lb.h<br>M src/osmo-bsc/lb.c<br>M src/osmo-bsc/osmo_bsc_main.c<br>3 files changed, 108 insertions(+), 8 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/30/20630/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/bsc/lb.h b/include/osmocom/bsc/lb.h</span><br><span>index 0649986..db191ba 100644</span><br><span>--- a/include/osmocom/bsc/lb.h</span><br><span>+++ b/include/osmocom/bsc/lb.h</span><br><span>@@ -35,6 +35,8 @@</span><br><span> };</span><br><span> </span><br><span> struct smlc_config {</span><br><span style="color: hsl(120, 100%, 40%);">+      bool enable;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       uint32_t cs7_instance;</span><br><span>       bool cs7_instance_valid;</span><br><span>     struct osmo_sccp_instance *sccp;</span><br><span>@@ -56,5 +58,6 @@</span><br><span> extern const struct rate_ctr_group_desc smlc_ctrg_desc;</span><br><span> </span><br><span> int lb_init();</span><br><span style="color: hsl(120, 100%, 40%);">+int lb_start_or_stop();</span><br><span> int lb_send(struct gsm_subscriber_connection *conn, const struct bssap_le_pdu *bssap_le);</span><br><span> void lb_close_conn(struct gsm_subscriber_connection *conn);</span><br><span>diff --git a/src/osmo-bsc/lb.c b/src/osmo-bsc/lb.c</span><br><span>index 6ab131f..f70a930 100644</span><br><span>--- a/src/osmo-bsc/lb.c</span><br><span>+++ b/src/osmo-bsc/lb.c</span><br><span>@@ -357,8 +357,14 @@</span><br><span> #define DEFAULT_ASP_LOCAL_IP "localhost"</span><br><span> #define DEFAULT_ASP_REMOTE_IP "localhost"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* Initialize Lb interface to SMLC */</span><br><span style="color: hsl(0, 100%, 40%);">-int lb_init()</span><br><span style="color: hsl(120, 100%, 40%);">+void lb_cancel_all()</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        struct gsm_subscriber_connection *conn;</span><br><span style="color: hsl(120, 100%, 40%);">+       llist_for_each_entry(conn, &bsc_gsmnet->subscr_conns, entry)</span><br><span style="color: hsl(120, 100%, 40%);">+           lcs_loc_req_reset(conn);</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 int lb_start()</span><br><span> {</span><br><span>   uint32_t default_pc;</span><br><span>         struct osmo_ss7_instance *cs7_inst = NULL;</span><br><span>@@ -367,11 +373,11 @@</span><br><span>   char inst_name[32];</span><br><span>  const char *smlc_name = "smlc";</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (!bsc_gsmnet->smlc) {</span><br><span style="color: hsl(0, 100%, 40%);">-             bsc_gsmnet->smlc = talloc_zero(bsc_gsmnet, struct smlc_config);</span><br><span style="color: hsl(0, 100%, 40%);">-              bsc_gsmnet->smlc->ctrs = rate_ctr_group_alloc(bsc_gsmnet, &smlc_ctrg_desc, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_ASSERT(bsc_gsmnet->smlc);</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Already set up? */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (bsc_gsmnet->smlc->sccp_user)</span><br><span style="color: hsl(120, 100%, 40%);">+                return -EAGAIN;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     LOGP(DLCS, LOGL_INFO, "Starting Lb link\n");</span><br><span> </span><br><span>   if (!bsc_gsmnet->smlc->cs7_instance_valid) {</span><br><span>           bsc_gsmnet->smlc->cs7_instance = 0;</span><br><span>@@ -436,6 +442,60 @@</span><br><span>     return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static int lb_stop()</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Not set up? */</span><br><span style="color: hsl(120, 100%, 40%);">+     if (!bsc_gsmnet->smlc->sccp_user)</span><br><span style="color: hsl(120, 100%, 40%);">+               return -EAGAIN;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     LOGP(DLCS, LOGL_INFO, "Shutting down Lb link\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ lb_cancel_all();</span><br><span style="color: hsl(120, 100%, 40%);">+      osmo_sccp_user_unbind(bsc_gsmnet->smlc->sccp_user);</span><br><span style="color: hsl(120, 100%, 40%);">+     bsc_gsmnet->smlc->sccp_user = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+     return 0;</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%);">+int lb_start_or_stop()</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+       if (bsc_gsmnet->smlc->enable) {</span><br><span style="color: hsl(120, 100%, 40%);">+         rc = lb_start();</span><br><span style="color: hsl(120, 100%, 40%);">+              switch (rc) {</span><br><span style="color: hsl(120, 100%, 40%);">+         case -EAGAIN:</span><br><span style="color: hsl(120, 100%, 40%);">+                 /* no need to log about anything */</span><br><span style="color: hsl(120, 100%, 40%);">+                   break;</span><br><span style="color: hsl(120, 100%, 40%);">+                default:</span><br><span style="color: hsl(120, 100%, 40%);">+                      LOGP(DLCS, LOGL_ERROR, "Failed to start Lb interface");</span><br><span style="color: hsl(120, 100%, 40%);">+                     break;</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              rc = lb_stop();</span><br><span style="color: hsl(120, 100%, 40%);">+               switch (rc) {</span><br><span style="color: hsl(120, 100%, 40%);">+         case -EAGAIN:</span><br><span style="color: hsl(120, 100%, 40%);">+                 /* no need to log about anything */</span><br><span style="color: hsl(120, 100%, 40%);">+                   break;</span><br><span style="color: hsl(120, 100%, 40%);">+                default:</span><br><span style="color: hsl(120, 100%, 40%);">+                      LOGP(DLCS, LOGL_ERROR, "Failed to stop Lb interface");</span><br><span style="color: hsl(120, 100%, 40%);">+                      break;</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%);">+     return rc;</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 smlc_vty_init(void);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int lb_init()</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(!bsc_gsmnet->smlc);</span><br><span style="color: hsl(120, 100%, 40%);">+    bsc_gsmnet->smlc = talloc_zero(bsc_gsmnet, struct smlc_config);</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_ASSERT(bsc_gsmnet->smlc);</span><br><span style="color: hsl(120, 100%, 40%);">+     bsc_gsmnet->smlc->ctrs = rate_ctr_group_alloc(bsc_gsmnet, &smlc_ctrg_desc, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    smlc_vty_init();</span><br><span style="color: hsl(120, 100%, 40%);">+      return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*********************************************************************************</span><br><span>  * VTY Interface (Configuration + Introspection)</span><br><span>  *********************************************************************************/</span><br><span>@@ -453,6 +513,30 @@</span><br><span>       1,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_smlc_enable, cfg_smlc_enable_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+     "enable",</span><br><span style="color: hsl(120, 100%, 40%);">+   "Start up Lb interface connection to the remote SMLC\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ bsc_gsmnet->smlc->enable = true;</span><br><span style="color: hsl(120, 100%, 40%);">+        if (vty->type != VTY_FILE) {</span><br><span style="color: hsl(120, 100%, 40%);">+               if (lb_start_or_stop())</span><br><span style="color: hsl(120, 100%, 40%);">+                       vty_out(vty, "%% Error: failed to enable Lb interface%s", VTY_NEWLINE);</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 style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_smlc_no_enable, cfg_smlc_no_enable_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+   "no enable",</span><br><span style="color: hsl(120, 100%, 40%);">+        NO_STR "Stop Lb interface connection to the remote SMLC\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      bsc_gsmnet->smlc->enable = false;</span><br><span style="color: hsl(120, 100%, 40%);">+       if (vty->type != VTY_FILE) {</span><br><span style="color: hsl(120, 100%, 40%);">+               if (lb_start_or_stop())</span><br><span style="color: hsl(120, 100%, 40%);">+                       vty_out(vty, "%% Error: failed to disable Lb interface%s", VTY_NEWLINE);</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> static void enforce_ssn(struct vty *vty, struct osmo_sccp_addr *addr, enum osmo_sccp_ssn want_ssn)</span><br><span> {</span><br><span>  if (addr->presence & OSMO_SCCP_ADDR_T_SSN) {</span><br><span>@@ -529,7 +613,17 @@</span><br><span> </span><br><span> static int config_write_smlc(struct vty *vty)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Nothing to write? */</span><br><span style="color: hsl(120, 100%, 40%);">+       if (!(bsc_gsmnet->smlc->enable</span><br><span style="color: hsl(120, 100%, 40%);">+        || bsc_gsmnet->smlc->bsc_addr_name</span><br><span style="color: hsl(120, 100%, 40%);">+              || bsc_gsmnet->smlc->smlc_addr_name))</span><br><span style="color: hsl(120, 100%, 40%);">+             return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  vty_out(vty, "smlc%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      if (bsc_gsmnet->smlc->enable)</span><br><span style="color: hsl(120, 100%, 40%);">+           vty_out(vty, " enable%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  if (bsc_gsmnet->smlc->bsc_addr_name) {</span><br><span>                 vty_out(vty, " bsc-addr %s%s",</span><br><span>                     bsc_gsmnet->smlc->bsc_addr_name, VTY_NEWLINE);</span><br><span>@@ -556,6 +650,8 @@</span><br><span> </span><br><span>       install_element(CONFIG_NODE, &cfg_smlc_cmd);</span><br><span>     install_node(&smlc_node, config_write_smlc);</span><br><span style="color: hsl(120, 100%, 40%);">+      install_element(SMLC_NODE, &cfg_smlc_enable_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+ install_element(SMLC_NODE, &cfg_smlc_no_enable_cmd);</span><br><span>     install_element(SMLC_NODE, &cfg_smlc_cs7_bsc_addr_cmd);</span><br><span>  install_element(SMLC_NODE, &cfg_smlc_cs7_smlc_addr_cmd);</span><br><span> }</span><br><span>diff --git a/src/osmo-bsc/osmo_bsc_main.c b/src/osmo-bsc/osmo_bsc_main.c</span><br><span>index 35ddbbf..7eaa18f 100644</span><br><span>--- a/src/osmo-bsc/osmo_bsc_main.c</span><br><span>+++ b/src/osmo-bsc/osmo_bsc_main.c</span><br><span>@@ -888,6 +888,7 @@</span><br><span>         bsc_subscr_conn_fsm_init();</span><br><span>  assignment_fsm_init();</span><br><span>       handover_fsm_init();</span><br><span style="color: hsl(120, 100%, 40%);">+  lb_init();</span><br><span> </span><br><span>       /* Read the config */</span><br><span>        rc = bsc_network_configure(config_file);</span><br><span>@@ -957,7 +958,7 @@</span><br><span>       handover_decision_1_init();</span><br><span>  hodec2_init(bsc_gsmnet);</span><br><span>     bsc_cbc_link_restart();</span><br><span style="color: hsl(0, 100%, 40%);">- lb_init();</span><br><span style="color: hsl(120, 100%, 40%);">+    lb_start_or_stop();</span><br><span> </span><br><span>      signal(SIGINT, &signal_handler);</span><br><span>         signal(SIGTERM, &signal_handler);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/20630">change 20630</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/+/20630"/><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: I01314a29a2cad6f325d9f4687a9dedca6b90a3ce </div>
<div style="display:none"> Gerrit-Change-Number: 20630 </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>