<p>lynxis lazus has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-iuh/+/15473">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">iu_client: introduce ranap_iu_tx_release_free()<br><br>ranap_iu_tx_release_free is a fire and forget function to release<br>gracefully if possible. It first sends a Iu Release Command. After<br>a certain timeout the connection will be release.<br><br>Change-Id: I349e2c61ba0131e233b7ab927dfced0bd461dd8f<br>---<br>M include/osmocom/ranap/iu_client.h<br>M src/iu_client.c<br>2 files changed, 27 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-iuh refs/changes/73/15473/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/ranap/iu_client.h b/include/osmocom/ranap/iu_client.h</span><br><span>index b388529..9da611b 100644</span><br><span>--- a/include/osmocom/ranap/iu_client.h</span><br><span>+++ b/include/osmocom/ranap/iu_client.h</span><br><span>@@ -31,6 +31,8 @@</span><br><span>     struct gprs_ra_id ra_id;</span><br><span>     enum ranap_nsap_addr_enc rab_assign_addr_enc;</span><br><span>        bool notification; /* send notification to the upstream user */</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Will be set when the Iu Release Command has been sent */</span><br><span style="color: hsl(120, 100%, 40%);">+   struct osmo_timer_list release_timeout;</span><br><span> };</span><br><span> </span><br><span> enum ranap_iu_event_type {</span><br><span>@@ -71,6 +73,13 @@</span><br><span> int ranap_iu_tx_common_id(struct ranap_ue_conn_ctx *ue_ctx, const char *imsi);</span><br><span> int ranap_iu_tx_release(struct ranap_ue_conn_ctx *ctx, const struct RANAP_Cause *cause);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* transmit a Iu Release Command and free the ctx afterwards.</span><br><span style="color: hsl(120, 100%, 40%);">+ * If a Release Complete is not received within timeout s,</span><br><span style="color: hsl(120, 100%, 40%);">+ * release the SCCP connection. */</span><br><span style="color: hsl(120, 100%, 40%);">+void ranap_iu_tx_release_free(struct ranap_ue_conn_ctx *ctx,</span><br><span style="color: hsl(120, 100%, 40%);">+                        const struct RANAP_Cause *cause,</span><br><span style="color: hsl(120, 100%, 40%);">+                      int timeout);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* freeing the UE will release all resources</span><br><span>  * This will close the SCCP connection connected to the UE */</span><br><span> void ranap_iu_free_ue(struct ranap_ue_conn_ctx *ue_ctx);</span><br><span>diff --git a/src/iu_client.c b/src/iu_client.c</span><br><span>index 38c8a1d..fe1b880 100644</span><br><span>--- a/src/iu_client.c</span><br><span>+++ b/src/iu_client.c</span><br><span>@@ -129,6 +129,9 @@</span><br><span>     ctx->rnc = rnc;</span><br><span>   ctx->conn_id = conn_id;</span><br><span>   ctx->notification = true;</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_timer_setup(&ctx->release_timeout,</span><br><span style="color: hsl(120, 100%, 40%);">+                        (void *)(void *) ranap_iu_free_ue,</span><br><span style="color: hsl(120, 100%, 40%);">+                    ctx);</span><br><span>        llist_add(&ctx->list, &ue_conn_ctx_list);</span><br><span> </span><br><span>     return ctx;</span><br><span>@@ -150,6 +153,7 @@</span><br><span>    if (!ue_ctx)</span><br><span>                 return;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+   osmo_timer_del(&ue_ctx->release_timeout);</span><br><span>     osmo_sccp_tx_disconn(g_scu, ue_ctx->conn_id, NULL, 0);</span><br><span>    llist_del(&ue_ctx->list);</span><br><span>     talloc_free(ue_ctx);</span><br><span>@@ -491,6 +495,20 @@</span><br><span>  return osmo_sccp_user_sap_down(g_scu, &prim->oph);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+void ranap_iu_tx_release_free(struct ranap_ue_conn_ctx *ctx,</span><br><span style="color: hsl(120, 100%, 40%);">+                           const struct RANAP_Cause *cause,</span><br><span style="color: hsl(120, 100%, 40%);">+                      int timeout)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  ctx->notification = false;</span><br><span style="color: hsl(120, 100%, 40%);">+ int ret = ranap_iu_tx_release(ctx, cause);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (ret) {</span><br><span style="color: hsl(120, 100%, 40%);">+            ranap_iu_free_ue(ctx);</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 style="color: hsl(120, 100%, 40%);">+   osmo_timer_schedule(&ctx->release_timeout, timeout, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static int ranap_handle_co_iu_rel_req(struct ranap_ue_conn_ctx *ctx, RANAP_Iu_ReleaseRequestIEs_t *ies)</span><br><span> {</span><br><span>  LOGPIU(LOGL_INFO, "Received Iu Release Request, Sending Release Command\n");</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-iuh/+/15473">change 15473</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-iuh/+/15473"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-iuh </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I349e2c61ba0131e233b7ab927dfced0bd461dd8f </div>
<div style="display:none"> Gerrit-Change-Number: 15473 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: lynxis lazus <lynxis@fe80.eu> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>