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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">a_reset: cleanup + remove dead code<br><br>The function a_reset_free() is not used anywhere at the code. The<br>reason for this is that a BSC instance is never cleared once it<br>is started up. Also the timer number is not according to the spec.<br><br>- Remove a_reset_free()<br>- Fix timer identification number (T4)<br>- use fi->priv to hold context info<br>- Fix sourcecode formatting<br><br>Change-Id: I72095d52304c520e383755eee6c889bce492cbd4<br>Related: OS#3102<br>---<br>M include/osmocom/bsc/a_reset.h<br>M include/osmocom/bsc/bsc_msc_data.h<br>M src/libbsc/a_reset.c<br>M src/libbsc/bsc_subscr_conn_fsm.c<br>M src/osmo-bsc/osmo_bsc_api.c<br>M src/osmo-bsc/osmo_bsc_bssap.c<br>M src/osmo-bsc/osmo_bsc_sigtran.c<br>7 files changed, 77 insertions(+), 105 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/bsc/a_reset.h b/include/osmocom/bsc/a_reset.h</span><br><span>index c01a8b0..6b6ce81 100644</span><br><span>--- a/include/osmocom/bsc/a_reset.h</span><br><span>+++ b/include/osmocom/bsc/a_reset.h</span><br><span>@@ -20,41 +20,17 @@</span><br><span> </span><br><span> #pragma once</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* Reset context data (callbacks, state machine etc...) */</span><br><span style="color: hsl(0, 100%, 40%);">-struct a_reset_ctx {</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   /* FSM instance, which handles the reset procedure */</span><br><span style="color: hsl(0, 100%, 40%);">-   struct osmo_fsm_inst *fsm;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      /* Connection failure counter. When this counter</span><br><span style="color: hsl(0, 100%, 40%);">-         * reaches a certain threshold, the reset procedure</span><br><span style="color: hsl(0, 100%, 40%);">-      * will be triggered */</span><br><span style="color: hsl(0, 100%, 40%);">- int conn_loss_counter;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  /* Callback function to be called when a connection</span><br><span style="color: hsl(0, 100%, 40%);">-      * failure is detected and a rest must occur */</span><br><span style="color: hsl(0, 100%, 40%);">- void (*cb)(void *priv);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- /* Privated data for the callback function */</span><br><span style="color: hsl(0, 100%, 40%);">-   void *priv;</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /* Create and start state machine which handles the reset/reset-ack procedure */</span><br><span style="color: hsl(0, 100%, 40%);">-struct a_reset_ctx *a_reset_alloc(const void *ctx, const char *name, void *cb, void *priv);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* Tear down state machine */</span><br><span style="color: hsl(0, 100%, 40%);">-void a_reset_free(struct a_reset_ctx *reset);</span><br><span style="color: hsl(120, 100%, 40%);">+struct osmo_fsm_inst *a_reset_alloc(void *ctx, const char *name, void *cb, void *priv);</span><br><span> </span><br><span> /* Confirm that we sucessfully received a reset acknowlege message */</span><br><span style="color: hsl(0, 100%, 40%);">-void a_reset_ack_confirm(struct a_reset_ctx *reset);</span><br><span style="color: hsl(120, 100%, 40%);">+void a_reset_ack_confirm(struct osmo_fsm_inst *reset_fsm);</span><br><span> </span><br><span> /* Report a failed connection */</span><br><span style="color: hsl(0, 100%, 40%);">-void a_reset_conn_fail(struct a_reset_ctx *reset);</span><br><span style="color: hsl(120, 100%, 40%);">+void a_reset_conn_fail(struct osmo_fsm_inst *reset_fsm);</span><br><span> </span><br><span> /* Report a successful connection */</span><br><span style="color: hsl(0, 100%, 40%);">-void a_reset_conn_success(struct a_reset_ctx *reset);</span><br><span style="color: hsl(120, 100%, 40%);">+void a_reset_conn_success(struct osmo_fsm_inst *reset_fsm);</span><br><span> </span><br><span> /* Check if we have a connection to a specified msc */</span><br><span style="color: hsl(0, 100%, 40%);">-bool a_reset_conn_ready(struct a_reset_ctx *reset);</span><br><span style="color: hsl(120, 100%, 40%);">+bool a_reset_conn_ready(struct osmo_fsm_inst *reset_fsm);</span><br><span>diff --git a/include/osmocom/bsc/bsc_msc_data.h b/include/osmocom/bsc/bsc_msc_data.h</span><br><span>index bedf412..345724d 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>@@ -124,7 +124,9 @@</span><br><span>                struct osmo_sccp_addr msc_addr;</span><br><span>              char *msc_addr_name;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                struct a_reset_ctx *reset;</span><br><span style="color: hsl(120, 100%, 40%);">+            /* Pointer to the osmo-fsm that controls the</span><br><span style="color: hsl(120, 100%, 40%);">+           * BSSMAP RESET procedure */</span><br><span style="color: hsl(120, 100%, 40%);">+          struct osmo_fsm_inst *reset_fsm;</span><br><span>     } a;</span><br><span> };</span><br><span> </span><br><span>diff --git a/src/libbsc/a_reset.c b/src/libbsc/a_reset.c</span><br><span>index 1fccc5f..b8f8c8c 100644</span><br><span>--- a/src/libbsc/a_reset.c</span><br><span>+++ b/src/libbsc/a_reset.c</span><br><span>@@ -29,16 +29,31 @@</span><br><span> #include <osmocom/bsc/bsc_msc_data.h></span><br><span> #include <osmocom/bsc/osmo_bsc_sigtran.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#define RESET_RESEND_INTERVAL 2  /* sec */</span><br><span style="color: hsl(0, 100%, 40%);">-#define RESET_RESEND_TIMER_NO 1234     /* FIXME: dig out the real timer number */</span><br><span style="color: hsl(120, 100%, 40%);">+#define RESET_RESEND_INTERVAL 2             /* sec */</span><br><span style="color: hsl(120, 100%, 40%);">+#define RESET_RESEND_TIMER_NO 4              /* See also 3GPP TS 48.008 Chapter 3.1.4.1.3.1 */</span><br><span> #define BAD_CONNECTION_THRESOLD 3  /* connection failures */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-enum fsm_states {</span><br><span style="color: hsl(120, 100%, 40%);">+/* Reset context data (callbacks, state machine etc...) */</span><br><span style="color: hsl(120, 100%, 40%);">+struct reset_ctx {</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Connection failure counter. When this counter</span><br><span style="color: hsl(120, 100%, 40%);">+       * reaches a certain threshold, the reset procedure</span><br><span style="color: hsl(120, 100%, 40%);">+    * will be triggered */</span><br><span style="color: hsl(120, 100%, 40%);">+       int conn_loss_counter;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Callback function to be called when a connection</span><br><span style="color: hsl(120, 100%, 40%);">+    * failure is detected and a rest must occur */</span><br><span style="color: hsl(120, 100%, 40%);">+       void (*cb)(void *priv);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Privated data for the callback function */</span><br><span style="color: hsl(120, 100%, 40%);">+ void *priv;</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%);">+enum reset_fsm_states {</span><br><span>   ST_DISC,                /* Disconnected from remote end */</span><br><span>   ST_CONN,                /* We have a confirmed connection */</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-enum fsm_evt {</span><br><span style="color: hsl(120, 100%, 40%);">+enum reset_fsm_evt {</span><br><span>   EV_RESET_ACK,           /* got reset acknowlegement from remote end */</span><br><span>       EV_N_DISCONNECT,        /* lost a connection */</span><br><span>      EV_N_CONNECT,           /* made a successful connection */</span><br><span>@@ -54,31 +69,30 @@</span><br><span> /* Disconnected state */</span><br><span> static void fsm_disc_cb(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-      struct a_reset_ctx *reset = (struct a_reset_ctx *)data;</span><br><span style="color: hsl(0, 100%, 40%);">- OSMO_ASSERT(reset);</span><br><span style="color: hsl(0, 100%, 40%);">-     OSMO_ASSERT(reset->fsm);</span><br><span style="color: hsl(0, 100%, 40%);">-     LOGPFSML(reset->fsm, LOGL_NOTICE, "SIGTRAN connection succeded.\n");</span><br><span style="color: hsl(120, 100%, 40%);">+     struct reset_ctx *reset_ctx = (struct reset_ctx *)fi->priv;</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_ASSERT(reset_ctx);</span><br><span style="color: hsl(120, 100%, 40%);">+       LOGPFSML(fi, LOGL_NOTICE, "SIGTRAN connection succeded.\n");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      reset->conn_loss_counter = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+      reset_ctx->conn_loss_counter = 0;</span><br><span>         osmo_fsm_inst_state_chg(fi, ST_CONN, 0, 0);</span><br><span> }</span><br><span> </span><br><span> /* Connected state */</span><br><span> static void fsm_conn_cb(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-     struct a_reset_ctx *reset = (struct a_reset_ctx *)data;</span><br><span style="color: hsl(0, 100%, 40%);">- OSMO_ASSERT(reset);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct reset_ctx *reset_ctx = (struct reset_ctx *)fi->priv;</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_ASSERT(reset_ctx);</span><br><span> </span><br><span>  switch (event) {</span><br><span>     case EV_N_DISCONNECT:</span><br><span style="color: hsl(0, 100%, 40%);">-           if (reset->conn_loss_counter >= BAD_CONNECTION_THRESOLD) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        LOGPFSML(reset->fsm, LOGL_NOTICE, "SIGTRAN connection down, reconnecting...\n");</span><br><span style="color: hsl(120, 100%, 40%);">+         if (reset_ctx->conn_loss_counter >= BAD_CONNECTION_THRESOLD) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  LOGPFSML(fi, LOGL_NOTICE, "SIGTRAN connection down, reconnecting...\n");</span><br><span>                   osmo_fsm_inst_state_chg(fi, ST_DISC, RESET_RESEND_INTERVAL, RESET_RESEND_TIMER_NO);</span><br><span>          } else</span><br><span style="color: hsl(0, 100%, 40%);">-                  reset->conn_loss_counter++;</span><br><span style="color: hsl(120, 100%, 40%);">+                        reset_ctx->conn_loss_counter++;</span><br><span>           break;</span><br><span>       case EV_N_CONNECT:</span><br><span style="color: hsl(0, 100%, 40%);">-              reset->conn_loss_counter = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+              reset_ctx->conn_loss_counter = 0;</span><br><span>                 break;</span><br><span>       }</span><br><span> }</span><br><span>@@ -86,18 +100,18 @@</span><br><span> /* Timer callback to retransmit the reset signal */</span><br><span> static int fsm_reset_ack_timeout_cb(struct osmo_fsm_inst *fi)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-      struct a_reset_ctx *reset = (struct a_reset_ctx *)fi->priv;</span><br><span style="color: hsl(0, 100%, 40%);">-  OSMO_ASSERT(reset->fsm);</span><br><span style="color: hsl(120, 100%, 40%);">+   struct reset_ctx *reset_ctx = (struct reset_ctx *)fi->priv;</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_ASSERT(reset_ctx);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     LOGPFSML(reset->fsm, LOGL_NOTICE, "(re)sending BSSMAP RESET message...\n");</span><br><span style="color: hsl(120, 100%, 40%);">+      LOGPFSML(fi, LOGL_NOTICE, "(re)sending BSSMAP RESET message...\n");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       reset->cb(reset->priv);</span><br><span style="color: hsl(120, 100%, 40%);">+ reset_ctx->cb(reset_ctx->priv);</span><br><span> </span><br><span>    osmo_fsm_inst_state_chg(fi, ST_DISC, RESET_RESEND_INTERVAL, RESET_RESEND_TIMER_NO);</span><br><span>  return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static struct osmo_fsm_state fsm_states[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+static struct osmo_fsm_state reset_fsm_states[] = {</span><br><span>         [ST_DISC] = {</span><br><span>                     .in_event_mask = (1 << EV_RESET_ACK),</span><br><span>                  .out_state_mask = (1 << ST_DISC) | (1 << ST_CONN),</span><br><span>@@ -115,96 +129,76 @@</span><br><span> /* State machine definition */</span><br><span> static struct osmo_fsm fsm = {</span><br><span>      .name = "A-RESET",</span><br><span style="color: hsl(0, 100%, 40%);">-    .states = fsm_states,</span><br><span style="color: hsl(0, 100%, 40%);">-   .num_states = ARRAY_SIZE(fsm_states),</span><br><span style="color: hsl(120, 100%, 40%);">+ .states = reset_fsm_states,</span><br><span style="color: hsl(120, 100%, 40%);">+   .num_states = ARRAY_SIZE(reset_fsm_states),</span><br><span>  .log_subsys = DMSC,</span><br><span>  .timer_cb = fsm_reset_ack_timeout_cb,</span><br><span>        .event_names = fsm_event_names,</span><br><span> };</span><br><span> </span><br><span> /* Create and start state machine which handles the reset/reset-ack procedure */</span><br><span style="color: hsl(0, 100%, 40%);">-struct a_reset_ctx *a_reset_alloc(const void *ctx, const char *name, void *cb, void *priv)</span><br><span style="color: hsl(120, 100%, 40%);">+struct osmo_fsm_inst *a_reset_alloc(void *ctx, const char *name, void *cb, void *priv)</span><br><span> {</span><br><span>         OSMO_ASSERT(name);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  struct a_reset_ctx *reset;</span><br><span style="color: hsl(120, 100%, 40%);">+    struct reset_ctx *reset_ctx;</span><br><span style="color: hsl(120, 100%, 40%);">+  struct osmo_fsm_inst *reset_fsm;</span><br><span> </span><br><span>         /* Register the fsm description (if not already done) */</span><br><span>     if (osmo_fsm_find_by_name(fsm.name) != &fsm)</span><br><span>             osmo_fsm_register(&fsm);</span><br><span> </span><br><span>     /* Allocate and configure a new fsm instance */</span><br><span style="color: hsl(0, 100%, 40%);">- reset = talloc_zero(ctx, struct a_reset_ctx);</span><br><span style="color: hsl(0, 100%, 40%);">-   OSMO_ASSERT(reset);</span><br><span style="color: hsl(0, 100%, 40%);">-     reset->priv = priv;</span><br><span style="color: hsl(0, 100%, 40%);">-  reset->cb = cb;</span><br><span style="color: hsl(0, 100%, 40%);">-      reset->conn_loss_counter = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        reset->fsm = osmo_fsm_inst_alloc(&fsm, NULL, NULL, LOGL_DEBUG, name);</span><br><span style="color: hsl(0, 100%, 40%);">-    OSMO_ASSERT(reset->fsm);</span><br><span style="color: hsl(0, 100%, 40%);">-     reset->fsm->priv = reset;</span><br><span style="color: hsl(120, 100%, 40%);">+       reset_ctx = talloc_zero(ctx, struct reset_ctx);</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_ASSERT(reset_ctx);</span><br><span style="color: hsl(120, 100%, 40%);">+       reset_ctx->priv = priv;</span><br><span style="color: hsl(120, 100%, 40%);">+    reset_ctx->cb = cb;</span><br><span style="color: hsl(120, 100%, 40%);">+        reset_ctx->conn_loss_counter = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+  reset_fsm = osmo_fsm_inst_alloc(&fsm, ctx, reset_ctx, LOGL_DEBUG, name);</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_ASSERT(reset_fsm);</span><br><span> </span><br><span>  /* kick off reset-ack sending mechanism */</span><br><span style="color: hsl(0, 100%, 40%);">-      osmo_fsm_inst_state_chg(reset->fsm, ST_DISC, RESET_RESEND_INTERVAL, RESET_RESEND_TIMER_NO);</span><br><span style="color: hsl(120, 100%, 40%);">+        osmo_fsm_inst_state_chg(reset_fsm, ST_DISC, RESET_RESEND_INTERVAL, RESET_RESEND_TIMER_NO);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  return reset;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* Tear down state machine */</span><br><span style="color: hsl(0, 100%, 40%);">-void a_reset_free(struct a_reset_ctx *reset)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-        OSMO_ASSERT(reset);</span><br><span style="color: hsl(0, 100%, 40%);">-     OSMO_ASSERT(reset->fsm);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     osmo_fsm_inst_free(reset->fsm);</span><br><span style="color: hsl(0, 100%, 40%);">-      reset->fsm = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   memset(reset, 0, sizeof(*reset));</span><br><span style="color: hsl(0, 100%, 40%);">-       talloc_free(reset);</span><br><span style="color: hsl(120, 100%, 40%);">+   return reset_fsm;</span><br><span> }</span><br><span> </span><br><span> /* Confirm that we sucessfully received a reset acknowlege message */</span><br><span style="color: hsl(0, 100%, 40%);">-void a_reset_ack_confirm(struct a_reset_ctx *reset)</span><br><span style="color: hsl(120, 100%, 40%);">+void a_reset_ack_confirm(struct osmo_fsm_inst *reset_fsm)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  OSMO_ASSERT(reset);</span><br><span style="color: hsl(0, 100%, 40%);">-     OSMO_ASSERT(reset->fsm);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     osmo_fsm_inst_dispatch(reset->fsm, EV_RESET_ACK, reset);</span><br><span style="color: hsl(120, 100%, 40%);">+   OSMO_ASSERT(reset_fsm);</span><br><span style="color: hsl(120, 100%, 40%);">+       osmo_fsm_inst_dispatch(reset_fsm, EV_RESET_ACK, NULL);</span><br><span> }</span><br><span> </span><br><span> /* Report a failed connection */</span><br><span style="color: hsl(0, 100%, 40%);">-void a_reset_conn_fail(struct a_reset_ctx *reset)</span><br><span style="color: hsl(120, 100%, 40%);">+void a_reset_conn_fail(struct osmo_fsm_inst *reset_fsm)</span><br><span> {</span><br><span>   /* If no reset context is supplied, just drop the info */</span><br><span style="color: hsl(0, 100%, 40%);">-       if (!reset)</span><br><span style="color: hsl(120, 100%, 40%);">+   if (!reset_fsm)</span><br><span>              return;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     OSMO_ASSERT(reset->fsm);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     osmo_fsm_inst_dispatch(reset->fsm, EV_N_DISCONNECT, reset);</span><br><span style="color: hsl(120, 100%, 40%);">+        osmo_fsm_inst_dispatch(reset_fsm, EV_N_DISCONNECT, NULL);</span><br><span> }</span><br><span> </span><br><span> /* Report a successful connection */</span><br><span style="color: hsl(0, 100%, 40%);">-void a_reset_conn_success(struct a_reset_ctx *reset)</span><br><span style="color: hsl(120, 100%, 40%);">+void a_reset_conn_success(struct osmo_fsm_inst *reset_fsm)</span><br><span> {</span><br><span>      /* If no reset context is supplied, just drop the info */</span><br><span style="color: hsl(0, 100%, 40%);">-       if (!reset)</span><br><span style="color: hsl(120, 100%, 40%);">+   if (!reset_fsm)</span><br><span>              return;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     OSMO_ASSERT(reset->fsm);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     osmo_fsm_inst_dispatch(reset->fsm, EV_N_CONNECT, reset);</span><br><span style="color: hsl(120, 100%, 40%);">+   osmo_fsm_inst_dispatch(reset_fsm, EV_N_CONNECT, NULL);</span><br><span> }</span><br><span> </span><br><span> /* Check if we have a connection to a specified msc */</span><br><span style="color: hsl(0, 100%, 40%);">-bool a_reset_conn_ready(struct a_reset_ctx *reset)</span><br><span style="color: hsl(120, 100%, 40%);">+bool a_reset_conn_ready(struct osmo_fsm_inst *reset_fsm)</span><br><span> {</span><br><span>   /* If no reset context is supplied, we assume that</span><br><span>    * the connection can't be ready! */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (!reset)</span><br><span style="color: hsl(120, 100%, 40%);">+   if (!reset_fsm)</span><br><span>              return false;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_ASSERT(reset->fsm);</span><br><span style="color: hsl(0, 100%, 40%);">-     if (reset->fsm->state == ST_CONN)</span><br><span style="color: hsl(120, 100%, 40%);">+       if (reset_fsm->state == ST_CONN)</span><br><span>          return true;</span><br><span> </span><br><span>     return false;</span><br><span>diff --git a/src/libbsc/bsc_subscr_conn_fsm.c b/src/libbsc/bsc_subscr_conn_fsm.c</span><br><span>index 7f53f1b..3e0ccc0 100644</span><br><span>--- a/src/libbsc/bsc_subscr_conn_fsm.c</span><br><span>+++ b/src/libbsc/bsc_subscr_conn_fsm.c</span><br><span>@@ -1075,7 +1075,7 @@</span><br><span>            * could indicate a bad SCCP connection. We now inform the the</span><br><span>                * FSM that controls the BSSMAP reset about the event. Maybe</span><br><span>                  * a BSSMAP reset is necessary. */</span><br><span style="color: hsl(0, 100%, 40%);">-              a_reset_conn_fail(conn->sccp.msc->a.reset);</span><br><span style="color: hsl(120, 100%, 40%);">+             a_reset_conn_fail(conn->sccp.msc->a.reset_fsm);</span><br><span> </span><br><span>            /* Since we could not reach the MSC, we give up and terminate</span><br><span>                 * the FSM instance now (N-DISCONNET.req is sent in</span><br><span>diff --git a/src/osmo-bsc/osmo_bsc_api.c b/src/osmo-bsc/osmo_bsc_api.c</span><br><span>index 239bb54..8c16bde 100644</span><br><span>--- a/src/osmo-bsc/osmo_bsc_api.c</span><br><span>+++ b/src/osmo-bsc/osmo_bsc_api.c</span><br><span>@@ -44,7 +44,7 @@</span><br><span>             return false;</span><br><span> </span><br><span>    /* Reset procedure not (yet) executed */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (a_reset_conn_ready(conn->sccp.msc->a.reset) == false)</span><br><span style="color: hsl(120, 100%, 40%);">+       if (a_reset_conn_ready(conn->sccp.msc->a.reset_fsm) == false)</span><br><span>          return false;</span><br><span> </span><br><span>    return true;</span><br><span>diff --git a/src/osmo-bsc/osmo_bsc_bssap.c b/src/osmo-bsc/osmo_bsc_bssap.c</span><br><span>index bfa4091..24dbc95 100644</span><br><span>--- a/src/osmo-bsc/osmo_bsc_bssap.c</span><br><span>+++ b/src/osmo-bsc/osmo_bsc_bssap.c</span><br><span>@@ -208,7 +208,7 @@</span><br><span> </span><br><span>      /* Inform the FSM that controls the RESET/RESET-ACK procedure</span><br><span>         * that we have successfully received the reset-ack message */</span><br><span style="color: hsl(0, 100%, 40%);">-  a_reset_ack_confirm(msc->a.reset);</span><br><span style="color: hsl(120, 100%, 40%);">+ a_reset_ack_confirm(msc->a.reset_fsm);</span><br><span> </span><br><span>        return 0;</span><br><span> }</span><br><span>diff --git a/src/osmo-bsc/osmo_bsc_sigtran.c b/src/osmo-bsc/osmo_bsc_sigtran.c</span><br><span>index 1a31a7c..e3d4829 100644</span><br><span>--- a/src/osmo-bsc/osmo_bsc_sigtran.c</span><br><span>+++ b/src/osmo-bsc/osmo_bsc_sigtran.c</span><br><span>@@ -205,7 +205,7 @@</span><br><span>                /* Incoming data is a sign of a vital connection */</span><br><span>          conn = get_bsc_conn_by_conn_id(scu_prim->u.data.conn_id);</span><br><span>                 if (conn) {</span><br><span style="color: hsl(0, 100%, 40%);">-                     a_reset_conn_success(conn->sccp.msc->a.reset);</span><br><span style="color: hsl(120, 100%, 40%);">+                  a_reset_conn_success(conn->sccp.msc->a.reset_fsm);</span><br><span>                     handle_data_from_msc(conn, oph->msg);</span><br><span>             }</span><br><span>            break;</span><br><span>@@ -249,7 +249,7 @@</span><br><span>         LOGP(DMSC, LOGL_NOTICE, "Initializing resources for new SIGTRAN connection to MSC: %s...\n",</span><br><span>            osmo_sccp_addr_name(ss7, &msc->a.msc_addr));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (a_reset_conn_ready(msc->a.reset) == false) {</span><br><span style="color: hsl(120, 100%, 40%);">+   if (a_reset_conn_ready(msc->a.reset_fsm) == false) {</span><br><span>              LOGP(DMSC, LOGL_ERROR, "MSC is not connected. Dropping.\n");</span><br><span>               return BSC_CON_REJECT_NO_LINK;</span><br><span>       }</span><br><span>@@ -279,7 +279,7 @@</span><br><span> </span><br><span>  msc = conn->sccp.msc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (a_reset_conn_ready(msc->a.reset) == false) {</span><br><span style="color: hsl(120, 100%, 40%);">+   if (a_reset_conn_ready(msc->a.reset_fsm) == false) {</span><br><span>              LOGP(DMSC, LOGL_ERROR, "MSC is not connected. Dropping.\n");</span><br><span>               return -EINVAL;</span><br><span>      }</span><br><span>@@ -333,7 +333,7 @@</span><br><span>      } else</span><br><span>               LOGP(DMSC, LOGL_ERROR, "Tx MSC (message too short)\n");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (a_reset_conn_ready(msc->a.reset) == false) {</span><br><span style="color: hsl(120, 100%, 40%);">+   if (a_reset_conn_ready(msc->a.reset_fsm) == false) {</span><br><span>              LOGP(DMSC, LOGL_ERROR, "MSC is not connected. Dropping.\n");</span><br><span>               return -EINVAL;</span><br><span>      }</span><br><span>@@ -487,8 +487,8 @@</span><br><span>                      return -EINVAL;</span><br><span> </span><br><span>          /* Start MSC-Reset procedure */</span><br><span style="color: hsl(0, 100%, 40%);">-         msc->a.reset = a_reset_alloc(msc, msc_name, osmo_bsc_sigtran_reset_cb, msc);</span><br><span style="color: hsl(0, 100%, 40%);">-         if (!msc->a.reset)</span><br><span style="color: hsl(120, 100%, 40%);">+         msc->a.reset_fsm = a_reset_alloc(msc, msc_name, osmo_bsc_sigtran_reset_cb, msc);</span><br><span style="color: hsl(120, 100%, 40%);">+           if (!msc->a.reset_fsm)</span><br><span>                    return -EINVAL;</span><br><span> </span><br><span>          /* If we have detected that the SS7 configuration of the MSC we have just initalized</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/8055">change 8055</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/8055"/><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: I72095d52304c520e383755eee6c889bce492cbd4 </div>
<div style="display:none"> Gerrit-Change-Number: 8055 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr@sysmocom.de> </div>