[PATCH] osmo-pcu[master]: Forward GPRS SUSPEND REQ from BTS to SGSN using BSSGP

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
Sat Jul 29 08:21:51 UTC 2017


Review at  https://gerrit.osmocom.org/3384

Forward GPRS SUSPEND REQ from BTS to SGSN using BSSGP

As specified in 3GPP TS 03.60 Section 16.2.1 and 44.018 Section 3.4.15,
a Class B MS is sending a "RR GPRS SUSPEND REQ" via a DCCH to the BTS if
it wants to suspend GPRS services.  As of
Change-Id I3c1af662c8f0d3d22da200638480f6ef05c3ed1f, OsmoBTS forwards
this via the PCU socket, so we need to pick it up and send it via BSSGP
to the SGSN.

Change-Id: I7b4beb413a6f974373a404b5a11c44d86ba695d3
Closes: OS#2249
---
M include/osmocom/pcu/pcuif_proto.h
M src/pcu_l1_if.cpp
2 files changed, 27 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/84/3384/1

diff --git a/include/osmocom/pcu/pcuif_proto.h b/include/osmocom/pcu/pcuif_proto.h
index 88dc09e..d6c7556 100644
--- a/include/osmocom/pcu/pcuif_proto.h
+++ b/include/osmocom/pcu/pcuif_proto.h
@@ -10,6 +10,7 @@
 #define PCU_IF_MSG_DATA_REQ	0x00	/* send data to given channel */
 #define PCU_IF_MSG_DATA_CNF	0x01	/* confirm (e.g. transmission on PCH) */
 #define PCU_IF_MSG_DATA_IND	0x02	/* receive data from given channel */	
+#define PCU_IF_MSG_SUSP_REQ	0x03	/* BTS forwards GPRS SUSP REQ to PCU */
 #define PCU_IF_MSG_RTS_REQ	0x10	/* ready to send request */
 #define PCU_IF_MSG_RACH_IND	0x22	/* receive RACH */
 #define PCU_IF_MSG_INFO_IND	0x32	/* retrieve BTS info */
@@ -150,6 +151,13 @@
 	uint8_t		identity_lv[9];
 } __attribute__ ((packed));
 
+/* BTS tells PCU about a GPRS SUSPENSION REQUEST received on DCCH */
+struct gsm_pcu_if_susp_req {
+	uint32_t	tlli;
+	uint8_t		ra_id[6];
+	uint8_t		cause;
+} __attribute__ ((packed));
+
 struct gsm_pcu_if {
 	/* context based information */
 	uint8_t		msg_type;	/* message type */
@@ -160,6 +168,7 @@
 		struct gsm_pcu_if_data		data_req;
 		struct gsm_pcu_if_data		data_cnf;
 		struct gsm_pcu_if_data		data_ind;
+		struct gsm_pcu_if_susp_req	susp_req;
 		struct gsm_pcu_if_rts_req	rts_req;
 		struct gsm_pcu_if_rach_ind	rach_ind;
 		struct gsm_pcu_if_txt_ind	txt_ind;
diff --git a/src/pcu_l1_if.cpp b/src/pcu_l1_if.cpp
index 420bca0..9d05539 100644
--- a/src/pcu_l1_if.cpp
+++ b/src/pcu_l1_if.cpp
@@ -563,6 +563,21 @@
 						pag_req->identity_lv);
 }
 
+static int pcu_rx_susp_req(struct gsm_pcu_if_susp_req *susp_req)
+{
+	struct bssgp_bvc_ctx *bctx = gprs_bssgp_pcu_current_bctx();
+	struct gprs_ra_id ra_id;
+
+	gsm48_parse_ra(&ra_id, susp_req->ra_id);
+
+	LOGP(DL1IF, LOGL_DEBUG, "GPRS Suspent request received: tlli=0x%08x\n", susp_req->tlli);
+
+	if (!bctx)
+		return -1;
+
+	return bssgp_tx_suspend(bctx->nsei, susp_req->tlli, &ra_id);
+}
+
 int pcu_rx(uint8_t msg_type, struct gsm_pcu_if *pcu_prim)
 {
 	int rc = 0;
@@ -589,6 +604,9 @@
 	case PCU_IF_MSG_PAG_REQ:
 		rc = pcu_rx_pag_req(&pcu_prim->u.pag_req);
 		break;
+	case PCU_IF_MSG_SUSP_REQ:
+		rc = pcu_rx_susp_req(&pcu_prim->u.susp_req);
+		break;
 	default:
 		LOGP(DL1IF, LOGL_ERROR, "Received unknwon PCU msg type %d\n",
 			msg_type);

-- 
To view, visit https://gerrit.osmocom.org/3384
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7b4beb413a6f974373a404b5a11c44d86ba695d3
Gerrit-PatchSet: 1
Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <laforge at gnumonks.org>



More information about the gerrit-log mailing list