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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">NACC: Configure neighbor and SI resolution timeout values<br><br>Upon timeout, we move directly to NACC_ST_TX_CELL_CHG_CONTINUE in order<br>to submit a Cell Change Continue against the MS without providing any<br>Packet Neighbor Cell Data beforehand, as per spec that's probably the<br>best we can do in this scenario (TS 44.060):<br>"""<br>1)  The network responds with a PACKET CELL CHANGE CONTINUE message.<br>If a mobile station as response to a PACKET CELL CHANGE NOTIFICATION<br>message receives a PACKET CELL CHANGE CONTINUE message without receiving<br>any neighbour cell system information, the mobile station shall stop timer<br>T3208, stop timer T3210 if still running, leave CCN mode and continue cell<br>reselection in NC0/NC1 mode.<br>"""<br><br>Related: SYS#4909<br>Change-Id: Ia9932ab082ec095294e85dc4d532046970e17986<br>---<br>M src/gprs_pcu.c<br>M src/gprs_pcu.h<br>M src/nacc_fsm.c<br>3 files changed, 37 insertions(+), 3 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/gprs_pcu.c b/src/gprs_pcu.c</span><br><span>index 31ed8b7..554007e 100644</span><br><span>--- a/src/gprs_pcu.c</span><br><span>+++ b/src/gprs_pcu.c</span><br><span>@@ -33,6 +33,8 @@</span><br><span>  { .T=1,     .default_val=30,  .unit=OSMO_TDEF_S,  .desc="BSSGP (un)blocking procedures timer (s)",  .val=0 },</span><br><span>      { .T=2,     .default_val=30,  .unit=OSMO_TDEF_S,  .desc="BSSGP reset procedure timer (s)",          .val=0 },</span><br><span>      { .T=3190,  .default_val=5,   .unit=OSMO_TDEF_S,  .desc="Return to packet idle mode after Packet DL Assignment on CCCH (s)", .val=0},</span><br><span style="color: hsl(120, 100%, 40%);">+       { .T=PCU_TDEF_NEIGH_RESOLVE_TO,    .default_val=1000,  .unit=OSMO_TDEF_MS,   .desc="[ARFCN+BSIC]->[RAC+CI] resolution timeout (ms)", .val=0 },</span><br><span style="color: hsl(120, 100%, 40%);">+   { .T=PCU_TDEF_SI_RESOLVE_TO,       .default_val=1000,  .unit=OSMO_TDEF_MS,   .desc="RIM RAN-INFO response timeout (ms)",          .val=0 },</span><br><span>        { .T=PCU_TDEF_NEIGH_CACHE_ALIVE,   .default_val=5,  .unit=OSMO_TDEF_S,   .desc="[ARFCN+BSIC]->[RAC+CI] resolution cache entry storage timeout (s)", .val=0 },</span><br><span>   { .T=PCU_TDEF_SI_CACHE_ALIVE,      .default_val=5,  .unit=OSMO_TDEF_S,   .desc="[RAC+CI]->[SI] resolution cache entry storage timeout (s)", .val=0 },</span><br><span>   { .T=-2000, .default_val=2,   .unit=OSMO_TDEF_MS, .desc="Tbf reject for PRR timer (ms)",            .val=0 },</span><br><span>diff --git a/src/gprs_pcu.h b/src/gprs_pcu.h</span><br><span>index 4f22f68..9f75fb8 100644</span><br><span>--- a/src/gprs_pcu.h</span><br><span>+++ b/src/gprs_pcu.h</span><br><span>@@ -37,6 +37,8 @@</span><br><span> #define MAX_EDGE_MCS 9</span><br><span> #define MAX_GPRS_CS 4</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define PCU_TDEF_NEIGH_RESOLVE_TO (-1)</span><br><span style="color: hsl(120, 100%, 40%);">+#define PCU_TDEF_SI_RESOLVE_TO (-2)</span><br><span> #define PCU_TDEF_NEIGH_CACHE_ALIVE (-10)</span><br><span> #define PCU_TDEF_SI_CACHE_ALIVE    (-11)</span><br><span> </span><br><span>diff --git a/src/nacc_fsm.c b/src/nacc_fsm.c</span><br><span>index 5e8d51b..85e29c5 100644</span><br><span>--- a/src/nacc_fsm.c</span><br><span>+++ b/src/nacc_fsm.c</span><br><span>@@ -40,8 +40,24 @@</span><br><span> </span><br><span> #define X(s) (1 << (s))</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static const struct osmo_tdef_state_timeout nacc_fsm_timeouts[32] = {</span><br><span style="color: hsl(120, 100%, 40%);">+    [NACC_ST_INITIAL] = {},</span><br><span style="color: hsl(120, 100%, 40%);">+       [NACC_ST_WAIT_RESOLVE_RAC_CI] = { .T = PCU_TDEF_NEIGH_RESOLVE_TO },</span><br><span style="color: hsl(120, 100%, 40%);">+   [NACC_ST_WAIT_REQUEST_SI] = { .T = PCU_TDEF_SI_RESOLVE_TO },</span><br><span style="color: hsl(120, 100%, 40%);">+  [NACC_ST_TX_NEIGHBOUR_DATA] = {},</span><br><span style="color: hsl(120, 100%, 40%);">+     [NACC_ST_TX_CELL_CHG_CONTINUE] = {},</span><br><span style="color: hsl(120, 100%, 40%);">+  [NACC_ST_DONE] = {},</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%);">+/* Transition to a state, using the T timer defined in assignment_fsm_timeouts.</span><br><span style="color: hsl(120, 100%, 40%);">+ * The actual timeout value is in turn obtained from conn->T_defs.</span><br><span style="color: hsl(120, 100%, 40%);">+ * Assumes local variable fi exists. */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #define nacc_fsm_state_chg(fi, NEXT_STATE) \</span><br><span style="color: hsl(0, 100%, 40%);">-   osmo_fsm_inst_state_chg(fi, NEXT_STATE, 0, 0)</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_tdef_fsm_inst_state_chg(fi, NEXT_STATE, \</span><br><span style="color: hsl(120, 100%, 40%);">+                                     nacc_fsm_timeouts, \</span><br><span style="color: hsl(120, 100%, 40%);">+                                  ((struct nacc_fsm_ctx*)(fi->priv))->ms->bts->pcu->T_defs, \</span><br><span style="color: hsl(120, 100%, 40%);">+                                    -1)</span><br><span> </span><br><span> const struct value_string nacc_fsm_event_names[] = {</span><br><span>         { NACC_EV_RX_CELL_CHG_NOTIFICATION, "RX_CELL_CHG_NOTIFICATION" },</span><br><span>@@ -469,6 +485,17 @@</span><br><span>   talloc_free(ctx);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static int nacc_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->T) {</span><br><span style="color: hsl(120, 100%, 40%);">+   case PCU_TDEF_NEIGH_RESOLVE_TO:</span><br><span style="color: hsl(120, 100%, 40%);">+       case PCU_TDEF_SI_RESOLVE_TO:</span><br><span style="color: hsl(120, 100%, 40%);">+          nacc_fsm_state_chg(fi, NACC_ST_TX_CELL_CHG_CONTINUE);</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%);">+     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 nacc_fsm_states[] = {</span><br><span>         [NACC_ST_INITIAL] = {</span><br><span>                .in_event_mask =</span><br><span>@@ -482,7 +509,8 @@</span><br><span>               .in_event_mask =</span><br><span>                     X(NACC_EV_RX_RAC_CI),</span><br><span>                .out_state_mask =</span><br><span style="color: hsl(0, 100%, 40%);">-                       X(NACC_ST_WAIT_REQUEST_SI),</span><br><span style="color: hsl(120, 100%, 40%);">+                   X(NACC_ST_WAIT_REQUEST_SI) |</span><br><span style="color: hsl(120, 100%, 40%);">+                  X(NACC_ST_TX_CELL_CHG_CONTINUE),</span><br><span>             .name = "WAIT_RESOLVE_RAC_CI",</span><br><span>             .onenter = st_wait_resolve_rac_ci_on_enter,</span><br><span>          .action = st_wait_resolve_rac_ci,</span><br><span>@@ -492,7 +520,8 @@</span><br><span>                      X(NACC_EV_RX_CELL_CHG_NOTIFICATION) |</span><br><span>                        X(NACC_EV_RX_SI),</span><br><span>            .out_state_mask =</span><br><span style="color: hsl(0, 100%, 40%);">-                       X(NACC_ST_TX_NEIGHBOUR_DATA),</span><br><span style="color: hsl(120, 100%, 40%);">+                 X(NACC_ST_TX_NEIGHBOUR_DATA) |</span><br><span style="color: hsl(120, 100%, 40%);">+                        X(NACC_ST_TX_CELL_CHG_CONTINUE),</span><br><span>             .name = "WAIT_REQUEST_SI",</span><br><span>                 .onenter = st_wait_request_si_on_enter,</span><br><span>              .action = st_wait_request_si,</span><br><span>@@ -529,6 +558,7 @@</span><br><span>  .name = "NACC",</span><br><span>    .states = nacc_fsm_states,</span><br><span>   .num_states = ARRAY_SIZE(nacc_fsm_states),</span><br><span style="color: hsl(120, 100%, 40%);">+    .timer_cb = nacc_fsm_timer_cb,</span><br><span>       .cleanup = nacc_fsm_cleanup,</span><br><span>         .log_subsys = DNACC,</span><br><span>         .event_names = nacc_fsm_event_names,</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-pcu/+/22450">change 22450</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-pcu/+/22450"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-pcu </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ia9932ab082ec095294e85dc4d532046970e17986 </div>
<div style="display:none"> Gerrit-Change-Number: 22450 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>