<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-remsim/+/16586">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">rspro_client_fsm: Make RSPRO transmit use FSM event<br><br>This way we can easily guarantee that RSPRO transmit will only happen<br>in the fully established state, and that violations of that rule will<br>generate error logs by means of osmo_fsm core logging code.<br><br>Change-Id: I3c403507fa11c068d7503107857fbd5676ce135f<br>---<br>M src/rspro_client_fsm.c<br>M src/rspro_client_fsm.h<br>2 files changed, 22 insertions(+), 4 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/rspro_client_fsm.c b/src/rspro_client_fsm.c</span><br><span>index 9f2d7c0..91e91eb 100644</span><br><span>--- a/src/rspro_client_fsm.c</span><br><span>+++ b/src/rspro_client_fsm.c</span><br><span>@@ -77,6 +77,12 @@</span><br><span>      return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static int _server_conn_send_rspro(struct rspro_server_conn *srvc, RsproPDU_t *rspro)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  LOGPFSM(srvc->fi, "Tx RSPRO %s\n", rspro_msgt_name(rspro));</span><br><span style="color: hsl(120, 100%, 40%);">+      return ipa_client_conn_send_rspro(srvc->conn, rspro);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int server_conn_send_rspro(struct rspro_server_conn *srvc, RsproPDU_t *rspro)</span><br><span> {</span><br><span>  if (!rspro) {</span><br><span>@@ -84,8 +90,11 @@</span><br><span>           osmo_log_backtrace(DMAIN, LOGL_ERROR);</span><br><span>               return -EINVAL;</span><br><span>      }</span><br><span style="color: hsl(0, 100%, 40%);">-       LOGPFSM(srvc->fi, "Tx RSPRO %s\n", rspro_msgt_name(rspro));</span><br><span style="color: hsl(0, 100%, 40%);">-        return ipa_client_conn_send_rspro(srvc->conn, rspro);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (osmo_fsm_inst_dispatch(srvc->fi, SRVC_E_RSPRO_TX, rspro) < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+             ASN_STRUCT_FREE(asn_DEF_RsproPDU, rspro);</span><br><span style="color: hsl(120, 100%, 40%);">+             return -EPERM;</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+     return 0;</span><br><span> }</span><br><span> </span><br><span> enum server_conn_fsm_state {</span><br><span>@@ -105,6 +114,7 @@</span><br><span>     OSMO_VALUE_STRING(SRVC_E_TCP_DOWN),</span><br><span>  OSMO_VALUE_STRING(SRVC_E_KA_TIMEOUT),</span><br><span>        OSMO_VALUE_STRING(SRVC_E_CLIENT_CONN_RES),</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_VALUE_STRING(SRVC_E_RSPRO_TX),</span><br><span>  { 0, NULL }</span><br><span> };</span><br><span> </span><br><span>@@ -202,7 +212,7 @@</span><br><span>  else</span><br><span>                 pdu = rspro_gen_ConnectBankReq(&srvc->own_comp_id, srvc->bankd.bank_id,</span><br><span>                                           srvc->bankd.num_slots);</span><br><span style="color: hsl(0, 100%, 40%);">-       server_conn_send_rspro(srvc, pdu);</span><br><span style="color: hsl(120, 100%, 40%);">+    _server_conn_send_rspro(srvc, pdu);</span><br><span> }</span><br><span> </span><br><span> static void srvc_st_established(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span>@@ -234,11 +244,18 @@</span><br><span> </span><br><span> static void srvc_st_connected(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+ struct rspro_server_conn *srvc = (struct rspro_server_conn *) fi->priv;</span><br><span style="color: hsl(120, 100%, 40%);">+    RsproPDU_t *pdu = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    switch (event) {</span><br><span>     case SRVC_E_TCP_DOWN:</span><br><span>        case SRVC_E_KA_TIMEOUT:</span><br><span>              osmo_fsm_inst_state_chg(fi, SRVC_ST_REESTABLISH, T2_RECONNECT, 2);</span><br><span>           break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case SRVC_E_RSPRO_TX:</span><br><span style="color: hsl(120, 100%, 40%);">+         pdu = data;</span><br><span style="color: hsl(120, 100%, 40%);">+           _server_conn_send_rspro(srvc, pdu);</span><br><span style="color: hsl(120, 100%, 40%);">+           break;</span><br><span>       default:</span><br><span>             OSMO_ASSERT(0);</span><br><span>      }</span><br><span>@@ -350,7 +367,7 @@</span><br><span>      },</span><br><span>   [SRVC_ST_CONNECTED] = {</span><br><span>              .name = "CONNECTED",</span><br><span style="color: hsl(0, 100%, 40%);">-          .in_event_mask = S(SRVC_E_TCP_DOWN) | S(SRVC_E_KA_TIMEOUT),</span><br><span style="color: hsl(120, 100%, 40%);">+           .in_event_mask = S(SRVC_E_TCP_DOWN) | S(SRVC_E_KA_TIMEOUT) | S(SRVC_E_RSPRO_TX),</span><br><span>             .out_state_mask = S(SRVC_ST_REESTABLISH),</span><br><span>            .action = srvc_st_connected,</span><br><span>         },</span><br><span>diff --git a/src/rspro_client_fsm.h b/src/rspro_client_fsm.h</span><br><span>index c11e260..7a998dc 100644</span><br><span>--- a/src/rspro_client_fsm.h</span><br><span>+++ b/src/rspro_client_fsm.h</span><br><span>@@ -10,6 +10,7 @@</span><br><span>  SRVC_E_TCP_DOWN,</span><br><span>     SRVC_E_KA_TIMEOUT,</span><br><span>   SRVC_E_CLIENT_CONN_RES,</span><br><span style="color: hsl(120, 100%, 40%);">+       SRVC_E_RSPRO_TX         /* transmit a RSPRO PDU to the peer */</span><br><span> };</span><br><span> </span><br><span> struct rspro_server_conn;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-remsim/+/16586">change 16586</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-remsim/+/16586"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-remsim </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I3c403507fa11c068d7503107857fbd5676ce135f </div>
<div style="display:none"> Gerrit-Change-Number: 16586 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>