lynxis lazus has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-iuh/+/15473


Change subject: iu_client: introduce ranap_iu_tx_release_free()
......................................................................

iu_client: introduce ranap_iu_tx_release_free()

ranap_iu_tx_release_free is a fire and forget function to release
gracefully if possible. It first sends a Iu Release Command. After
a certain timeout the connection will be release.

Change-Id: I349e2c61ba0131e233b7ab927dfced0bd461dd8f
---
M include/osmocom/ranap/iu_client.h
M src/iu_client.c
2 files changed, 27 insertions(+), 0 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-iuh refs/changes/73/15473/1

diff --git a/include/osmocom/ranap/iu_client.h 
b/include/osmocom/ranap/iu_client.h
index b388529..9da611b 100644
--- a/include/osmocom/ranap/iu_client.h
+++ b/include/osmocom/ranap/iu_client.h
@@ -31,6 +31,8 @@
        struct gprs_ra_id ra_id;
        enum ranap_nsap_addr_enc rab_assign_addr_enc;
        bool notification; /* send notification to the upstream user */
+       /* Will be set when the Iu Release Command has been sent */
+       struct osmo_timer_list release_timeout;
 };

 enum ranap_iu_event_type {
@@ -71,6 +73,13 @@
 int ranap_iu_tx_common_id(struct ranap_ue_conn_ctx *ue_ctx, const char *imsi);
 int ranap_iu_tx_release(struct ranap_ue_conn_ctx *ctx, const struct 
RANAP_Cause *cause);

+/* transmit a Iu Release Command and free the ctx afterwards.
+ * If a Release Complete is not received within timeout s,
+ * release the SCCP connection. */
+void ranap_iu_tx_release_free(struct ranap_ue_conn_ctx *ctx,
+                            const struct RANAP_Cause *cause,
+                            int timeout);
+
 /* freeing the UE will release all resources
  * This will close the SCCP connection connected to the UE */
 void ranap_iu_free_ue(struct ranap_ue_conn_ctx *ue_ctx);
diff --git a/src/iu_client.c b/src/iu_client.c
index 38c8a1d..fe1b880 100644
--- a/src/iu_client.c
+++ b/src/iu_client.c
@@ -129,6 +129,9 @@
        ctx->rnc = rnc;
        ctx->conn_id = conn_id;
        ctx->notification = true;
+       osmo_timer_setup(&ctx->release_timeout,
+                       (void *)(void *) ranap_iu_free_ue,
+                       ctx);
        llist_add(&ctx->list, &ue_conn_ctx_list);

        return ctx;
@@ -150,6 +153,7 @@
        if (!ue_ctx)
                return;

+       osmo_timer_del(&ue_ctx->release_timeout);
        osmo_sccp_tx_disconn(g_scu, ue_ctx->conn_id, NULL, 0);
        llist_del(&ue_ctx->list);
        talloc_free(ue_ctx);
@@ -491,6 +495,20 @@
        return osmo_sccp_user_sap_down(g_scu, &prim->oph);
 }

+void ranap_iu_tx_release_free(struct ranap_ue_conn_ctx *ctx,
+                            const struct RANAP_Cause *cause,
+                            int timeout)
+{
+       ctx->notification = false;
+       int ret = ranap_iu_tx_release(ctx, cause);
+       if (ret) {
+               ranap_iu_free_ue(ctx);
+               return;
+       }
+
+       osmo_timer_schedule(&ctx->release_timeout, timeout, 0);
+}
+
 static int ranap_handle_co_iu_rel_req(struct ranap_ue_conn_ctx *ctx, 
RANAP_Iu_ReleaseRequestIEs_t *ies)
 {
        LOGPIU(LOGL_INFO, "Received Iu Release Request, Sending Release 
Command\n");

--
To view, visit https://gerrit.osmocom.org/c/osmo-iuh/+/15473
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-iuh
Gerrit-Branch: master
Gerrit-Change-Id: I349e2c61ba0131e233b7ab927dfced0bd461dd8f
Gerrit-Change-Number: 15473
Gerrit-PatchSet: 1
Gerrit-Owner: lynxis lazus <lyn...@fe80.eu>
Gerrit-MessageType: newchange

Reply via email to