Change in osmo-sgsn[master]: Add optional TearDownInd IE in PDP DEACT REQ towards PCU

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Harald Welte gerrit-no-reply at lists.osmocom.org
Mon Jul 16 15:22:48 UTC 2018


Harald Welte has submitted this change and it was merged. ( https://gerrit.osmocom.org/9992 )

Change subject: Add optional TearDownInd IE in PDP DEACT REQ towards PCU
......................................................................

Add optional TearDownInd IE in PDP DEACT REQ towards PCU

According to 3GPP TS 24.008 Section 6.1.3.4, the tear down indicator IE
maybe included in the DEACTIVATE PDP CONTEXT REQUEST message in order
to indicate whether only the PDP context associated with this specific
TI or all active PDP contexts sharing the same PDP address and APN as
the PDP context associated with this specific TI shall be deactivated.

As we don't permit/support establishing multiple PDP contexts using
the same APN and PDP address, it shouldn't really make any difference.
Nevertheless, we want to clear everything, so let's include it.

Change-Id: Ia9bc2d0e93362a8473eac5cf4c7e8ffa41c79e5b
---
M include/osmocom/sgsn/gprs_gmm.h
M src/gprs/gprs_gmm.c
M src/gprs/gprs_sgsn.c
3 files changed, 8 insertions(+), 7 deletions(-)

Approvals:
  Pau Espin Pedrol: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/include/osmocom/sgsn/gprs_gmm.h b/include/osmocom/sgsn/gprs_gmm.h
index 28c96ce..d12eaf9 100644
--- a/include/osmocom/sgsn/gprs_gmm.h
+++ b/include/osmocom/sgsn/gprs_gmm.h
@@ -6,7 +6,7 @@
 
 #include <stdbool.h>
 
-int gsm48_tx_gsm_deact_pdp_req(struct sgsn_pdp_ctx *pdp, uint8_t sm_cause);
+int gsm48_tx_gsm_deact_pdp_req(struct sgsn_pdp_ctx *pdp, uint8_t sm_cause, bool teardown);
 int gsm48_tx_gsm_act_pdp_rej(struct sgsn_mm_ctx *mm, uint8_t tid,
 			     uint8_t cause, uint8_t pco_len, uint8_t *pco_v);
 int gsm48_tx_gsm_act_pdp_acc(struct sgsn_pdp_ctx *pdp);
diff --git a/src/gprs/gprs_gmm.c b/src/gprs/gprs_gmm.c
index 9d8a869..d06fa6c 100644
--- a/src/gprs/gprs_gmm.c
+++ b/src/gprs/gprs_gmm.c
@@ -2295,11 +2295,12 @@
 
 /* Section 9.5.8: Deactivate PDP Context Request */
 static int _gsm48_tx_gsm_deact_pdp_req(struct sgsn_mm_ctx *mm, uint8_t tid,
-					uint8_t sm_cause)
+					uint8_t sm_cause, bool teardown)
 {
 	struct msgb *msg = gsm48_msgb_alloc_name("GSM 04.08 PDP DET REQ");
 	struct gsm48_hdr *gh;
 	uint8_t transaction_id = tid ^ 0x8; /* flip */
+	uint8_t tear_down_ind = (0x9 << 4) | (!!teardown);
 
 	LOGMMCTXP(LOGL_INFO, mm, "<- DEACTIVATE PDP CONTEXT REQ\n");
 	rate_ctr_inc(&sgsn->rate_ctrs->ctr[CTR_PDP_DL_DEACTIVATE_REQUEST]);
@@ -2311,14 +2312,15 @@
 	gh->msg_type = GSM48_MT_GSM_DEACT_PDP_REQ;
 
 	msgb_v_put(msg, sm_cause);
+	msgb_v_put(msg, tear_down_ind);
 
 	return gsm48_gmm_sendmsg(msg, 0, mm, true);
 }
-int gsm48_tx_gsm_deact_pdp_req(struct sgsn_pdp_ctx *pdp, uint8_t sm_cause)
+int gsm48_tx_gsm_deact_pdp_req(struct sgsn_pdp_ctx *pdp, uint8_t sm_cause, bool teardown)
 {
 	pdpctx_timer_start(pdp, 3395, sgsn->cfg.timers.T3395);
 
-	return _gsm48_tx_gsm_deact_pdp_req(pdp->mm, pdp->ti, sm_cause);
+	return _gsm48_tx_gsm_deact_pdp_req(pdp->mm, pdp->ti, sm_cause, teardown);
 }
 
 /* Section 9.5.9: Deactivate PDP Context Accept */
@@ -2724,7 +2726,7 @@
 			sgsn_delete_pdp_ctx(pdp);
 			break;
 		}
-		gsm48_tx_gsm_deact_pdp_req(pdp, GSM_CAUSE_NET_FAIL);
+		gsm48_tx_gsm_deact_pdp_req(pdp, GSM_CAUSE_NET_FAIL, true);
 		break;
 	default:
 		LOGPDPCTXP(LOGL_ERROR, pdp, "timer expired in unknown mode %u\n",
diff --git a/src/gprs/gprs_sgsn.c b/src/gprs/gprs_sgsn.c
index ab5e79a..35479fb 100644
--- a/src/gprs/gprs_sgsn.c
+++ b/src/gprs/gprs_sgsn.c
@@ -703,7 +703,7 @@
 static void drop_one_pdp(struct sgsn_pdp_ctx *pdp)
 {
 	if (pdp->mm->gmm_state == GMM_REGISTERED_NORMAL)
-		gsm48_tx_gsm_deact_pdp_req(pdp, GSM_CAUSE_NET_FAIL);
+		gsm48_tx_gsm_deact_pdp_req(pdp, GSM_CAUSE_NET_FAIL, true);
 	else  {
 		/* FIXME: GPRS paging in case MS is SUSPENDED */
 		LOGPDPCTXP(LOGL_NOTICE, pdp, "Hard-dropping PDP ctx due to GGSN "
@@ -954,4 +954,3 @@
 	osmo_timer_setup(&sgsn->llme_timer, sgsn_llme_check_cb, NULL);
 	osmo_timer_schedule(&sgsn->llme_timer, GPRS_LLME_CHECK_TICK, 0);
 }
-

-- 
To view, visit https://gerrit.osmocom.org/9992
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-sgsn
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: Ia9bc2d0e93362a8473eac5cf4c7e8ffa41c79e5b
Gerrit-Change-Number: 9992
Gerrit-PatchSet: 3
Gerrit-Owner: Pau Espin Pedrol <pespin at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: Pau Espin Pedrol <pespin at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20180716/e020ced1/attachment.htm>


More information about the gerrit-log mailing list