<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/9992">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Pau Espin Pedrol: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add optional TearDownInd IE in PDP DEACT REQ towards PCU<br><br>According to 3GPP TS 24.008 Section 6.1.3.4, the tear down indicator IE<br>maybe included in the DEACTIVATE PDP CONTEXT REQUEST message in order<br>to indicate whether only the PDP context associated with this specific<br>TI or all active PDP contexts sharing the same PDP address and APN as<br>the PDP context associated with this specific TI shall be deactivated.<br><br>As we don't permit/support establishing multiple PDP contexts using<br>the same APN and PDP address, it shouldn't really make any difference.<br>Nevertheless, we want to clear everything, so let's include it.<br><br>Change-Id: Ia9bc2d0e93362a8473eac5cf4c7e8ffa41c79e5b<br>---<br>M include/osmocom/sgsn/gprs_gmm.h<br>M src/gprs/gprs_gmm.c<br>M src/gprs/gprs_sgsn.c<br>3 files changed, 8 insertions(+), 7 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/sgsn/gprs_gmm.h b/include/osmocom/sgsn/gprs_gmm.h</span><br><span>index 28c96ce..d12eaf9 100644</span><br><span>--- a/include/osmocom/sgsn/gprs_gmm.h</span><br><span>+++ b/include/osmocom/sgsn/gprs_gmm.h</span><br><span>@@ -6,7 +6,7 @@</span><br><span> </span><br><span> #include <stdbool.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int gsm48_tx_gsm_deact_pdp_req(struct sgsn_pdp_ctx *pdp, uint8_t sm_cause);</span><br><span style="color: hsl(120, 100%, 40%);">+int gsm48_tx_gsm_deact_pdp_req(struct sgsn_pdp_ctx *pdp, uint8_t sm_cause, bool teardown);</span><br><span> int gsm48_tx_gsm_act_pdp_rej(struct sgsn_mm_ctx *mm, uint8_t tid,</span><br><span>                              uint8_t cause, uint8_t pco_len, uint8_t *pco_v);</span><br><span> int gsm48_tx_gsm_act_pdp_acc(struct sgsn_pdp_ctx *pdp);</span><br><span>diff --git a/src/gprs/gprs_gmm.c b/src/gprs/gprs_gmm.c</span><br><span>index 9d8a869..d06fa6c 100644</span><br><span>--- a/src/gprs/gprs_gmm.c</span><br><span>+++ b/src/gprs/gprs_gmm.c</span><br><span>@@ -2295,11 +2295,12 @@</span><br><span> </span><br><span> /* Section 9.5.8: Deactivate PDP Context Request */</span><br><span> static int _gsm48_tx_gsm_deact_pdp_req(struct sgsn_mm_ctx *mm, uint8_t tid,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   uint8_t sm_cause)</span><br><span style="color: hsl(120, 100%, 40%);">+                                     uint8_t sm_cause, bool teardown)</span><br><span> {</span><br><span>        struct msgb *msg = gsm48_msgb_alloc_name("GSM 04.08 PDP DET REQ");</span><br><span>         struct gsm48_hdr *gh;</span><br><span>        uint8_t transaction_id = tid ^ 0x8; /* flip */</span><br><span style="color: hsl(120, 100%, 40%);">+        uint8_t tear_down_ind = (0x9 << 4) | (!!teardown);</span><br><span> </span><br><span>         LOGMMCTXP(LOGL_INFO, mm, "<- DEACTIVATE PDP CONTEXT REQ\n");</span><br><span>    rate_ctr_inc(&sgsn->rate_ctrs->ctr[CTR_PDP_DL_DEACTIVATE_REQUEST]);</span><br><span>@@ -2311,14 +2312,15 @@</span><br><span>      gh->msg_type = GSM48_MT_GSM_DEACT_PDP_REQ;</span><br><span> </span><br><span>    msgb_v_put(msg, sm_cause);</span><br><span style="color: hsl(120, 100%, 40%);">+    msgb_v_put(msg, tear_down_ind);</span><br><span> </span><br><span>  return gsm48_gmm_sendmsg(msg, 0, mm, true);</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">-int gsm48_tx_gsm_deact_pdp_req(struct sgsn_pdp_ctx *pdp, uint8_t sm_cause)</span><br><span style="color: hsl(120, 100%, 40%);">+int gsm48_tx_gsm_deact_pdp_req(struct sgsn_pdp_ctx *pdp, uint8_t sm_cause, bool teardown)</span><br><span> {</span><br><span>   pdpctx_timer_start(pdp, 3395, sgsn->cfg.timers.T3395);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   return _gsm48_tx_gsm_deact_pdp_req(pdp->mm, pdp->ti, sm_cause);</span><br><span style="color: hsl(120, 100%, 40%);">+ return _gsm48_tx_gsm_deact_pdp_req(pdp->mm, pdp->ti, sm_cause, teardown);</span><br><span> }</span><br><span> </span><br><span> /* Section 9.5.9: Deactivate PDP Context Accept */</span><br><span>@@ -2724,7 +2726,7 @@</span><br><span>                       sgsn_delete_pdp_ctx(pdp);</span><br><span>                    break;</span><br><span>               }</span><br><span style="color: hsl(0, 100%, 40%);">-               gsm48_tx_gsm_deact_pdp_req(pdp, GSM_CAUSE_NET_FAIL);</span><br><span style="color: hsl(120, 100%, 40%);">+          gsm48_tx_gsm_deact_pdp_req(pdp, GSM_CAUSE_NET_FAIL, true);</span><br><span>           break;</span><br><span>       default:</span><br><span>             LOGPDPCTXP(LOGL_ERROR, pdp, "timer expired in unknown mode %u\n",</span><br><span>diff --git a/src/gprs/gprs_sgsn.c b/src/gprs/gprs_sgsn.c</span><br><span>index ab5e79a..35479fb 100644</span><br><span>--- a/src/gprs/gprs_sgsn.c</span><br><span>+++ b/src/gprs/gprs_sgsn.c</span><br><span>@@ -703,7 +703,7 @@</span><br><span> static void drop_one_pdp(struct sgsn_pdp_ctx *pdp)</span><br><span> {</span><br><span>    if (pdp->mm->gmm_state == GMM_REGISTERED_NORMAL)</span><br><span style="color: hsl(0, 100%, 40%);">-          gsm48_tx_gsm_deact_pdp_req(pdp, GSM_CAUSE_NET_FAIL);</span><br><span style="color: hsl(120, 100%, 40%);">+          gsm48_tx_gsm_deact_pdp_req(pdp, GSM_CAUSE_NET_FAIL, true);</span><br><span>   else  {</span><br><span>              /* FIXME: GPRS paging in case MS is SUSPENDED */</span><br><span>             LOGPDPCTXP(LOGL_NOTICE, pdp, "Hard-dropping PDP ctx due to GGSN "</span><br><span>@@ -954,4 +954,3 @@</span><br><span>    osmo_timer_setup(&sgsn->llme_timer, sgsn_llme_check_cb, NULL);</span><br><span>        osmo_timer_schedule(&sgsn->llme_timer, GPRS_LLME_CHECK_TICK, 0);</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/9992">change 9992</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/9992"/><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-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: Ia9bc2d0e93362a8473eac5cf4c7e8ffa41c79e5b </div>
<div style="display:none"> Gerrit-Change-Number: 9992 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: Pau Espin Pedrol <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: Pau Espin Pedrol <pespin@sysmocom.de> </div>