<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-uecups/+/17857">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add support for UeCUPS_ResetAllState<br><br>This allows the controlling entity (testsuite) to reset all<br>state in the daemon.<br><br>Change-Id: I18c952b3874324a9efafb26b5f2c64f8396ff36a<br>---<br>M daemon/main.c<br>M ttcn3/UECUPS_Types.ttcn<br>2 files changed, 48 insertions(+), 6 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-uecups refs/changes/57/17857/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/daemon/main.c b/daemon/main.c</span><br><span>index 155d5d5..a458e16 100644</span><br><span>--- a/daemon/main.c</span><br><span>+++ b/daemon/main.c</span><br><span>@@ -68,6 +68,14 @@</span><br><span>         pid_t pid;</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* kill the specified subprocess and forget about it */</span><br><span style="color: hsl(120, 100%, 40%);">+static void subprocess_destroy(struct subprocess *p, int signal)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    kill(p->pid, signal);</span><br><span style="color: hsl(120, 100%, 40%);">+      llist_del(&p->list);</span><br><span style="color: hsl(120, 100%, 40%);">+   talloc_free(p);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Send JSON to a given client/connection */</span><br><span> static int cups_client_tx_json(struct cups_client *cc, json_t *jtx)</span><br><span> {</span><br><span>@@ -446,6 +454,29 @@</span><br><span>      return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static int cups_client_handle_reset_all_state(struct cups_client *cc, json_t *sprog)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gtp_daemon *d = cc->d;</span><br><span style="color: hsl(120, 100%, 40%);">+      struct gtp_tunnel *t, *t2;</span><br><span style="color: hsl(120, 100%, 40%);">+    struct subprocess *p, *p2;</span><br><span style="color: hsl(120, 100%, 40%);">+    json_t *jres;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       pthread_rwlock_wrlock(&d->rwlock);</span><br><span style="color: hsl(120, 100%, 40%);">+     llist_for_each_entry_safe(t, t2, &d->gtp_tunnels, list) {</span><br><span style="color: hsl(120, 100%, 40%);">+              _gtp_tunnel_destroy(t);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     pthread_rwlock_unlock(&d->rwlock);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* no locking needed as this list is only used by main thread */</span><br><span style="color: hsl(120, 100%, 40%);">+      llist_for_each_entry_safe(p, p2, &d->subprocesses, list) {</span><br><span style="color: hsl(120, 100%, 40%);">+             subprocess_destroy(p, SIGKILL);</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%);">+   jres = gen_uecups_result("reset_all_state_res", "OK");</span><br><span style="color: hsl(120, 100%, 40%);">+    cups_client_tx_json(cc, jres);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span> static int cups_client_handle_json(struct cups_client *cc, json_t *jroot)</span><br><span> {</span><br><span>@@ -469,6 +500,8 @@</span><br><span>             rc = cups_client_handle_destroy_tun(cc, cmd);</span><br><span>        } else if (!strcmp(key, "start_program")) {</span><br><span>                rc = cups_client_handle_start_program(cc, cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+       } else if (!strcmp(key, "reset_all_state")) {</span><br><span style="color: hsl(120, 100%, 40%);">+               rc = cups_client_handle_reset_all_state(cc, cmd);</span><br><span>    } else {</span><br><span>             LOGCC(cc, LOGL_NOTICE, "Unknown command '%s' received\n", key);</span><br><span>            return -EINVAL;</span><br><span>@@ -551,12 +584,10 @@</span><br><span>      struct subprocess *p, *p2;</span><br><span> </span><br><span>       /* kill + forget about all subprocesses of this client */</span><br><span style="color: hsl(120, 100%, 40%);">+     /* We need no locking here as the subprocess list is only used from the main thread */</span><br><span>       llist_for_each_entry_safe(p, p2, &d->subprocesses, list) {</span><br><span style="color: hsl(0, 100%, 40%);">-               if (p->cups_client == cc) {</span><br><span style="color: hsl(0, 100%, 40%);">-                  kill(p->pid, SIGKILL);</span><br><span style="color: hsl(0, 100%, 40%);">-                       llist_del(&p->list);</span><br><span style="color: hsl(0, 100%, 40%);">-                     talloc_free(p);</span><br><span style="color: hsl(0, 100%, 40%);">-         }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (p->cups_client == cc)</span><br><span style="color: hsl(120, 100%, 40%);">+                  subprocess_destroy(p, SIGKILL);</span><br><span>      }</span><br><span> </span><br><span>        LOGCC(cc, LOGL_INFO, "UECUPS connection lost\n");</span><br><span>diff --git a/ttcn3/UECUPS_Types.ttcn b/ttcn3/UECUPS_Types.ttcn</span><br><span>index 8861998..bbd849f 100644</span><br><span>--- a/ttcn3/UECUPS_Types.ttcn</span><br><span>+++ b/ttcn3/UECUPS_Types.ttcn</span><br><span>@@ -80,15 +80,26 @@</span><br><span>   integer         exit_code</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+type record UeCUPS_ResetAllState {</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%);">+type record UeCUPS_ResetAllStateRes {</span><br><span style="color: hsl(120, 100%, 40%);">+  UECUPS_Result   result</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span> </span><br><span> type union PDU_UECUPS {</span><br><span>    UECUPS_CreateTun        create_tun,</span><br><span>  UECUPS_CreateTunRes     create_tun_res,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    UECUPS_DestroyTun       destroy_tun,</span><br><span>         UECUPS_DestroyTunRes    destroy_tun_res,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   UECUPS_StartProgram     start_program,</span><br><span>       UECUPS_StartProgramRes  start_program_res,</span><br><span style="color: hsl(0, 100%, 40%);">-      UECUPS_ProgramTermInd   program_term_ind</span><br><span style="color: hsl(120, 100%, 40%);">+      UECUPS_ProgramTermInd   program_term_ind,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   UeCUPS_ResetAllState    reset_all_state,</span><br><span style="color: hsl(120, 100%, 40%);">+      UeCUPS_ResetAllStateRes reset_all_state_res</span><br><span> };</span><br><span> </span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-uecups/+/17857">change 17857</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-uecups/+/17857"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-uecups </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I18c952b3874324a9efafb26b5f2c64f8396ff36a </div>
<div style="display:none"> Gerrit-Change-Number: 17857 </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-MessageType: newchange </div>