<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/19818">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  fixeria: Looks good to me, but someone else must approve
  laforge: Looks good to me, but someone else must approve
  pespin: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ctrl: Fix CTRL TRAP for {msc.X,msc_)connection_status not sent<br><br>The tx TRAP callback is triggered through a signal which is never sent in<br>osmo-bsc code, and never was as far as I can tell going quite far in the<br>logs.<br>In the meanwhile, the msc_connection_status was left in favour of<br>multi-msc msc.X.connection_status CTRL variable, so let's prepre the cb<br>function to work for that onei too, dropping global variables which may lead<br>to wrong output in multi-msc environments, and simply use msc->nr==0 for<br>the old variable "msc_connection_status".<br><br>The signal is now triggered in a_reset when the A conn becomes connected<br>or disconnected. As a result, a user waiting for the disconnect event<br>may notice that the status may be changed with a noticeable delay, since<br>the A conn may be reset only due to high layer timeouts after several<br>repeated failures (T4, BAD_CONNECTION_THRESOLD).<br><br>Related: OS#2623<br>Related: OS#4701<br>Related: SYS#5046<br>Change-Id: I645d198e8e1acd0aba09d05cb3ae90443946acf8<br>---<br>M src/osmo-bsc/a_reset.c<br>M src/osmo-bsc/osmo_bsc_ctrl.c<br>2 files changed, 20 insertions(+), 9 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo-bsc/a_reset.c b/src/osmo-bsc/a_reset.c</span><br><span>index 713be86..9446d13 100644</span><br><span>--- a/src/osmo-bsc/a_reset.c</span><br><span>+++ b/src/osmo-bsc/a_reset.c</span><br><span>@@ -22,12 +22,14 @@</span><br><span> #include <osmocom/core/utils.h></span><br><span> #include <osmocom/core/timer.h></span><br><span> #include <osmocom/core/fsm.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/signal.h></span><br><span> #include <unistd.h></span><br><span> #include <errno.h></span><br><span> #include <string.h></span><br><span> #include <osmocom/bsc/debug.h></span><br><span> #include <osmocom/bsc/bsc_msc_data.h></span><br><span> #include <osmocom/bsc/osmo_bsc_sigtran.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/bsc/signal.h></span><br><span> </span><br><span> #define RESET_RESEND_INTERVAL 2          /* sec */</span><br><span> #define RESET_RESEND_TIMER_NO 4            /* See also 3GPP TS 48.008 Chapter 3.1.4.1.3.1 */</span><br><span>@@ -83,8 +85,10 @@</span><br><span>       struct bsc_msc_data *msc = reset_ctx->priv;</span><br><span> </span><br><span>   LOGPFSML(fi, LOGL_NOTICE, "BSSMAP MSC assocation is down, reconnecting...\n");</span><br><span style="color: hsl(0, 100%, 40%);">-        if (prev_state != ST_DISC)</span><br><span style="color: hsl(120, 100%, 40%);">+    if (prev_state != ST_DISC) {</span><br><span>                 osmo_stat_item_dec(msc->msc_statg->items[MSC_STAT_MSC_LINKS_ACTIVE], 1);</span><br><span style="color: hsl(120, 100%, 40%);">+                osmo_signal_dispatch(SS_MSC, S_MSC_LOST, msc);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> }</span><br><span> </span><br><span> /* Connected state event handler */</span><br><span>@@ -116,8 +120,10 @@</span><br><span>     struct bsc_msc_data *msc = reset_ctx->priv;</span><br><span> </span><br><span>   LOGPFSML(fi, LOGL_NOTICE, "BSSMAP MSC assocation is up.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-  if (prev_state != ST_CONN)</span><br><span style="color: hsl(120, 100%, 40%);">+    if (prev_state != ST_CONN) {</span><br><span>                 osmo_stat_item_inc(msc->msc_statg->items[MSC_STAT_MSC_LINKS_ACTIVE], 1);</span><br><span style="color: hsl(120, 100%, 40%);">+                osmo_signal_dispatch(SS_MSC, S_MSC_CONNECTED, msc);</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span> }</span><br><span> </span><br><span> /* Timer callback to retransmit the reset signal */</span><br><span>diff --git a/src/osmo-bsc/osmo_bsc_ctrl.c b/src/osmo-bsc/osmo_bsc_ctrl.c</span><br><span>index 5ebe597..05bc86c 100644</span><br><span>--- a/src/osmo-bsc/osmo_bsc_ctrl.c</span><br><span>+++ b/src/osmo-bsc/osmo_bsc_ctrl.c</span><br><span>@@ -195,7 +195,6 @@</span><br><span> </span><br><span> /* Backwards compat. */</span><br><span> CTRL_CMD_DEFINE_RO(msc0_connection_status, "msc_connection_status");</span><br><span style="color: hsl(0, 100%, 40%);">-static int msc_connection_status = 0; /* XXX unused */</span><br><span> </span><br><span> static int get_msc0_connection_status(struct ctrl_cmd *cmd, void *data)</span><br><span> {</span><br><span>@@ -214,13 +213,12 @@</span><br><span> {</span><br><span>         struct ctrl_cmd *cmd;</span><br><span>        struct gsm_network *gsmnet = (struct gsm_network *)handler_data;</span><br><span style="color: hsl(120, 100%, 40%);">+      struct bsc_msc_data *msc = (struct bsc_msc_data *)signal_data;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      if (signal == S_MSC_LOST && msc_connection_status == 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+     if (signal == S_MSC_LOST) {</span><br><span>          LOGP(DCTRL, LOGL_DEBUG, "MSC connection lost, sending TRAP.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-              msc_connection_status = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-      } else if (signal == S_MSC_CONNECTED && msc_connection_status == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+ } else if (signal == S_MSC_CONNECTED) {</span><br><span>              LOGP(DCTRL, LOGL_DEBUG, "MSC connection (re)established, sending TRAP.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-           msc_connection_status = 1;</span><br><span>   } else {</span><br><span>             return 0;</span><br><span>    }</span><br><span>@@ -232,12 +230,19 @@</span><br><span>    }</span><br><span> </span><br><span>        cmd->id = "0";</span><br><span style="color: hsl(0, 100%, 40%);">-     cmd->variable = "msc_connection_status";</span><br><span style="color: hsl(120, 100%, 40%);">+ cmd->variable = talloc_asprintf(cmd, "msc.%d.connection_status", msc->nr);</span><br><span style="color: hsl(120, 100%, 40%);">+    cmd->node = msc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- get_msc0_connection_status(cmd, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+        get_msc_connection_status(cmd, NULL);</span><br><span> </span><br><span>    ctrl_cmd_send_to_all(gsmnet->ctrl, cmd);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+       if (msc->nr == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                /* Backwards compat. */</span><br><span style="color: hsl(120, 100%, 40%);">+               cmd->variable = "msc_connection_status";</span><br><span style="color: hsl(120, 100%, 40%);">+         ctrl_cmd_send_to_all(gsmnet->ctrl, cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  talloc_free(cmd);</span><br><span> </span><br><span>        return 0;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/19818">change 19818</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/+/19818"/><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: I645d198e8e1acd0aba09d05cb3ae90443946acf8 </div>
<div style="display:none"> Gerrit-Change-Number: 19818 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </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-MessageType: merged </div>