<p>lynxis lazus <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-sgsn/+/15483">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, but someone else must approve
  pespin: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Iu: implement a user inactivity timer<br><br>The user inactivity timer is similiar to the Gb READY timer and reduces<br>the resources taken by an idle UE.<br><br>Change-Id: I66c2ac0350cb074aefd9a22c5121acf723f239d3<br>---<br>M include/osmocom/sgsn/gprs_mm_state_iu_fsm.h<br>M src/sgsn/gprs_mm_state_iu_fsm.c<br>M src/sgsn/sgsn_vty.c<br>M tests/test_nodes.vty<br>4 files changed, 29 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/sgsn/gprs_mm_state_iu_fsm.h b/include/osmocom/sgsn/gprs_mm_state_iu_fsm.h</span><br><span>index 7f02bcc..05342f9 100644</span><br><span>--- a/include/osmocom/sgsn/gprs_mm_state_iu_fsm.h</span><br><span>+++ b/include/osmocom/sgsn/gprs_mm_state_iu_fsm.h</span><br><span>@@ -19,6 +19,7 @@</span><br><span>  E_PMM_PS_CONN_ESTABLISH,</span><br><span>     E_PMM_IMPLICIT_DETACH, /* = E_PS_ATTACH_REJECT, E_RAU_REJECT */</span><br><span>      E_PMM_RA_UPDATE, /* = Serving RNC relocation */</span><br><span style="color: hsl(120, 100%, 40%);">+       E_PMM_USER_INACTIVITY, /* when the inactivity timer runs out */</span><br><span> };</span><br><span> </span><br><span> extern struct osmo_fsm mm_state_iu_fsm;</span><br><span>diff --git a/src/sgsn/gprs_mm_state_iu_fsm.c b/src/sgsn/gprs_mm_state_iu_fsm.c</span><br><span>index b098f20..e6b80d7 100644</span><br><span>--- a/src/sgsn/gprs_mm_state_iu_fsm.c</span><br><span>+++ b/src/sgsn/gprs_mm_state_iu_fsm.c</span><br><span>@@ -12,7 +12,8 @@</span><br><span> </span><br><span> static const struct osmo_tdef_state_timeout mm_state_iu_fsm_timeouts[32] = {</span><br><span>        [ST_PMM_DETACHED] = { },</span><br><span style="color: hsl(0, 100%, 40%);">-        [ST_PMM_CONNECTED] = { },</span><br><span style="color: hsl(120, 100%, 40%);">+     /* non-spec -T3314 (User inactivity timer) */</span><br><span style="color: hsl(120, 100%, 40%);">+ [ST_PMM_CONNECTED] = { .T=-3314 },</span><br><span>   [ST_PMM_IDLE] = { },</span><br><span> };</span><br><span> </span><br><span>@@ -47,6 +48,10 @@</span><br><span> static void st_pmm_connected(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span> {</span><br><span>       struct sgsn_mm_ctx *ctx = fi->priv;</span><br><span style="color: hsl(120, 100%, 40%);">+        const struct RANAP_Cause user_inactive_cause = {</span><br><span style="color: hsl(120, 100%, 40%);">+              .present = RANAP_Cause_PR_radioNetwork,</span><br><span style="color: hsl(120, 100%, 40%);">+               .choice.radioNetwork = RANAP_CauseRadioNetwork_user_inactivity,</span><br><span style="color: hsl(120, 100%, 40%);">+       };</span><br><span> </span><br><span>       switch(event) {</span><br><span>      case E_PMM_PS_CONN_RELEASE:</span><br><span>@@ -57,6 +62,10 @@</span><br><span>             sgsn_ranap_iu_release_free(ctx, NULL);</span><br><span>               mm_state_iu_fsm_state_chg(fi, ST_PMM_DETACHED);</span><br><span>              break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case E_PMM_USER_INACTIVITY:</span><br><span style="color: hsl(120, 100%, 40%);">+           sgsn_ranap_iu_release_free(ctx, &user_inactive_cause);</span><br><span style="color: hsl(120, 100%, 40%);">+            mm_state_iu_fsm_state_chg(fi, ST_PMM_DETACHED);</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span>       case E_PMM_RA_UPDATE:</span><br><span>                break;</span><br><span>       }</span><br><span>@@ -81,6 +90,18 @@</span><br><span>       }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static int pmm_state_fsm_timer_cb(struct osmo_fsm_inst *fi)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    switch(fi->state) {</span><br><span style="color: hsl(120, 100%, 40%);">+        case ST_PMM_CONNECTED:</span><br><span style="color: hsl(120, 100%, 40%);">+                /* timer for pmm state. state=CONNECTED: -T3314 (User inactivity timer) */</span><br><span style="color: hsl(120, 100%, 40%);">+            osmo_fsm_inst_dispatch(fi, E_PMM_USER_INACTIVITY, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+              break;</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%);">+   return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static struct osmo_fsm_state mm_state_iu_fsm_states[] = {</span><br><span>  [ST_PMM_DETACHED] = {</span><br><span>                .in_event_mask = X(E_PMM_PS_ATTACH) | X(E_PMM_IMPLICIT_DETACH),</span><br><span>@@ -89,7 +110,8 @@</span><br><span>                 .action = st_pmm_detached,</span><br><span>   },</span><br><span>   [ST_PMM_CONNECTED] = {</span><br><span style="color: hsl(0, 100%, 40%);">-          .in_event_mask = X(E_PMM_PS_CONN_RELEASE) | X(E_PMM_RA_UPDATE) | X(E_PMM_IMPLICIT_DETACH),</span><br><span style="color: hsl(120, 100%, 40%);">+            .in_event_mask = X(E_PMM_PS_CONN_RELEASE) | X(E_PMM_RA_UPDATE)</span><br><span style="color: hsl(120, 100%, 40%);">+                        | X(E_PMM_IMPLICIT_DETACH) | X(E_PMM_USER_INACTIVITY),</span><br><span>               .out_state_mask = X(ST_PMM_DETACHED) | X(ST_PMM_IDLE),</span><br><span>               .name = "Connected",</span><br><span>               .action = st_pmm_connected,</span><br><span>@@ -109,6 +131,7 @@</span><br><span>    OSMO_VALUE_STRING(E_PMM_PS_CONN_ESTABLISH),</span><br><span>  OSMO_VALUE_STRING(E_PMM_IMPLICIT_DETACH),</span><br><span>    OSMO_VALUE_STRING(E_PMM_RA_UPDATE),</span><br><span style="color: hsl(120, 100%, 40%);">+   OSMO_VALUE_STRING(E_PMM_USER_INACTIVITY),</span><br><span>    { 0, NULL }</span><br><span> };</span><br><span> </span><br><span>diff --git a/src/sgsn/sgsn_vty.c b/src/sgsn/sgsn_vty.c</span><br><span>index 9200822..17b64c8 100644</span><br><span>--- a/src/sgsn/sgsn_vty.c</span><br><span>+++ b/src/sgsn/sgsn_vty.c</span><br><span>@@ -104,6 +104,8 @@</span><br><span>         { .T=3386, .default_val=GSM0408_T3386_SECS, .desc="Wait for MODIFY PDP CTX ACK timer (s)" },</span><br><span>       { .T=3395, .default_val=GSM0408_T3395_SECS, .desc="Wait for DEACT PDP CTX ACK timer (s)" },</span><br><span>        { .T=3397, .default_val=GSM0408_T3397_SECS, .desc="Wait for DEACT AA PDP CTX ACK timer (s)" },</span><br><span style="color: hsl(120, 100%, 40%);">+      /* non spec timers */</span><br><span style="color: hsl(120, 100%, 40%);">+ { .T=-3314, .default_val=GSM0408_T3314_SECS, .desc="Iu User inactivity timer. On expiry release Iu connection (s)" },</span><br><span>      {}</span><br><span> };</span><br><span> </span><br><span>diff --git a/tests/test_nodes.vty b/tests/test_nodes.vty</span><br><span>index 2ef926a..b9cf91e 100644</span><br><span>--- a/tests/test_nodes.vty</span><br><span>+++ b/tests/test_nodes.vty</span><br><span>@@ -12,6 +12,7 @@</span><br><span> T3386 = 8 s    Wait for MODIFY PDP CTX ACK timer (s) (default: 8 s)</span><br><span> T3395 = 8 s     Wait for DEACT PDP CTX ACK timer (s) (default: 8 s)</span><br><span> T3397 = 8 s      Wait for DEACT AA PDP CTX ACK timer (s) (default: 8 s)</span><br><span style="color: hsl(120, 100%, 40%);">+X3314 = 44 s    Iu User inactivity timer. On expiry release Iu connection (s) (default: 44 s)</span><br><span> OsmoSGSN# configure terminal</span><br><span> OsmoSGSN(config)# list</span><br><span> ...</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-sgsn/+/15483">change 15483</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-sgsn/+/15483"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-sgsn </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I66c2ac0350cb074aefd9a22c5121acf723f239d3 </div>
<div style="display:none"> Gerrit-Change-Number: 15483 </div>
<div style="display:none"> Gerrit-PatchSet: 10 </div>
<div style="display:none"> Gerrit-Owner: lynxis lazus <lynxis@fe80.eu> </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-Reviewer: lynxis lazus <lynxis@fe80.eu> </div>
<div style="display:none"> Gerrit-Reviewer: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>