<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-sgsn/+/23747">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Iu: Drop timer X3314<br><br>This Iu timer is Osmocom specific, but is made to resemble T3314<br>timer from GERAN (also named READY timer).<br><br>The idea of this activity timer was to arm it whenever PMM state<br>transitions to CONNECTED, and then rearm it every time there's some<br>sort of activity, until there's none for some time, then we send a<br>Release Command to close the conn with the HNGBW/RNC. That's the<br>same principle as per spec-defined READY timer T3314.<br><br>However, there's still a fundamental problem with it: GTP-U in<br>GERAN passes through the SGSN, but in UTRAN, the GTP-U stream<br>goes directly from the HnodeB to the GGSN. Hence, there's no proper<br>way to re-arm this timer upon activity in UTRAN, basically because<br>the SGSN will never see (userplane data) activity. That explains why<br>the E_MM_PDU_RECEPTION event exists for mm_state_gb_fsm, but doesn't<br>exist for mm_state_iu_fsm.<br>As a result, the timer is currently never rearmed, which means it<br>will transition to IDLE always after 44 seconds (default value) once<br>it went into CONNECTED state.<br><br>In UTRAN, there is a SCCP connection for each subscriber between<br>RNC/hNB and SGSN. If the subscriber is no longer in the respective<br>state, the RNC/hNB should release that IuPS SCCP connection, whcih<br>in turn means the SGSN cleans up its state.<br>Furthermore, SCCP has a built-in IT (inactivity timer). So should<br>the RNC/hNB die, that timer would time out, and the SGSN-side local<br>SCCP stack (provider) wold send a RELEASE.ind for that connection<br>to the user (SGSN).<br><br>TLDR; this timer is not really needed and cannot be implemented<br>properly in UTRAN, so let's remove it.<br><br>Related: OS#5116<br>Change-Id: Ibc71829e417bf2dd0c27deb842369dd4f17010d6<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/osmo-sgsn_test-nodes.vty<br>4 files changed, 5 insertions(+), 28 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-sgsn refs/changes/47/23747/1</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 05342f9..7f02bcc 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,7 +19,6 @@</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(0, 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 7f2d3b4..91c9790 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,8 +12,7 @@</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%);">-        /* non-spec -T3314 (User inactivity timer) */</span><br><span style="color: hsl(0, 100%, 40%);">-   [ST_PMM_CONNECTED] = { .T=-3314 },</span><br><span style="color: hsl(120, 100%, 40%);">+    [ST_PMM_CONNECTED] = { },</span><br><span>    [ST_PMM_IDLE] = { },</span><br><span> };</span><br><span> </span><br><span>@@ -48,10 +47,6 @@</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(0, 100%, 40%);">-  const struct RANAP_Cause user_inactive_cause = {</span><br><span style="color: hsl(0, 100%, 40%);">-                .present = RANAP_Cause_PR_radioNetwork,</span><br><span style="color: hsl(0, 100%, 40%);">-         .choice.radioNetwork = RANAP_CauseRadioNetwork_user_inactivity,</span><br><span style="color: hsl(0, 100%, 40%);">- };</span><br><span> </span><br><span>       switch(event) {</span><br><span>      case E_PMM_PS_CONN_RELEASE:</span><br><span>@@ -62,9 +57,6 @@</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(0, 100%, 40%);">-  case E_PMM_USER_INACTIVITY:</span><br><span style="color: hsl(0, 100%, 40%);">-             sgsn_ranap_iu_release_free(ctx, &user_inactive_cause);</span><br><span style="color: hsl(0, 100%, 40%);">-              break;</span><br><span>       case E_PMM_RA_UPDATE:</span><br><span>                break;</span><br><span>       }</span><br><span>@@ -90,18 +82,6 @@</span><br><span>       }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int pmm_state_fsm_timer_cb(struct osmo_fsm_inst *fi)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-  switch(fi->state) {</span><br><span style="color: hsl(0, 100%, 40%);">-  case ST_PMM_CONNECTED:</span><br><span style="color: hsl(0, 100%, 40%);">-          /* timer for pmm state. state=CONNECTED: -T3314 (User inactivity timer) */</span><br><span style="color: hsl(0, 100%, 40%);">-              osmo_fsm_inst_dispatch(fi, E_PMM_USER_INACTIVITY, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-                break;</span><br><span style="color: hsl(0, 100%, 40%);">-  }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 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>@@ -110,8 +90,10 @@</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)</span><br><span style="color: hsl(0, 100%, 40%);">-                  | X(E_PMM_IMPLICIT_DETACH) | X(E_PMM_USER_INACTIVITY),</span><br><span style="color: hsl(120, 100%, 40%);">+                .in_event_mask =</span><br><span style="color: hsl(120, 100%, 40%);">+                      X(E_PMM_PS_CONN_RELEASE) |</span><br><span style="color: hsl(120, 100%, 40%);">+                    X(E_PMM_RA_UPDATE) |</span><br><span style="color: hsl(120, 100%, 40%);">+                  X(E_PMM_IMPLICIT_DETACH),</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>@@ -134,7 +116,6 @@</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(0, 100%, 40%);">-     OSMO_VALUE_STRING(E_PMM_USER_INACTIVITY),</span><br><span>    { 0, NULL }</span><br><span> };</span><br><span> </span><br><span>@@ -143,7 +124,6 @@</span><br><span>  .states = mm_state_iu_fsm_states,</span><br><span>    .num_states = ARRAY_SIZE(mm_state_iu_fsm_states),</span><br><span>    .event_names = mm_state_iu_fsm_event_names,</span><br><span style="color: hsl(0, 100%, 40%);">-     .timer_cb = pmm_state_fsm_timer_cb,</span><br><span>  .log_subsys = DMM,</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 d7584bc..042bad5 100644</span><br><span>--- a/src/sgsn/sgsn_vty.c</span><br><span>+++ b/src/sgsn/sgsn_vty.c</span><br><span>@@ -110,7 +110,6 @@</span><br><span>  /* non spec timers */</span><br><span>        { .T=-1001, .default_val=NONSPEC_X1001_SECS, .desc="RANAP Release timeout. Wait for RANAP Release Complete."</span><br><span>                                                          "On expiry release Iu connection (s)" },</span><br><span style="color: hsl(0, 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/osmo-sgsn_test-nodes.vty b/tests/osmo-sgsn_test-nodes.vty</span><br><span>index 109e2ec..953a30e 100644</span><br><span>--- a/tests/osmo-sgsn_test-nodes.vty</span><br><span>+++ b/tests/osmo-sgsn_test-nodes.vty</span><br><span>@@ -13,7 +13,6 @@</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> X1001 = 5 s   RANAP Release timeout. Wait for RANAP Release Complete.On expiry release Iu connection (s) (default: 5 s)</span><br><span style="color: hsl(0, 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/+/23747">change 23747</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/+/23747"/><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: Ibc71829e417bf2dd0c27deb842369dd4f17010d6 </div>
<div style="display:none"> Gerrit-Change-Number: 23747 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>