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

Change subject: Forward GPRS SUSPEND REQ from BTS to SGSN using BSSGP
......................................................................

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, 28 insertions(+), 0 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Vadim Yanitskiy: Looks good to me, but someone else must approve
  osmith: Looks good to me, but someone else must approve
  Jenkins Builder: Verified



diff --git a/include/osmocom/pcu/pcuif_proto.h 
b/include/osmocom/pcu/pcuif_proto.h
index b06077c..144fba6 100644
--- a/include/osmocom/pcu/pcuif_proto.h
+++ b/include/osmocom/pcu/pcuif_proto.h
@@ -12,6 +12,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_DATA_CNF_DT 0x11    /* confirm (with direct tlli) */
 #define PCU_IF_MSG_RACH_IND    0x22    /* receive RACH */
@@ -171,6 +172,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 */
@@ -182,6 +190,7 @@
                struct gsm_pcu_if_data          data_cnf;
                struct gsm_pcu_if_data_cnf_dt   data_cnf_dt;
                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 b59f198..5cabe4f 100644
--- a/src/pcu_l1_if.cpp
+++ b/src/pcu_l1_if.cpp
@@ -604,6 +604,22 @@
                                                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_INFO, "GPRS Suspend request received: TLLI=0x%08x 
RAI=%s\n",
+               susp_req->tlli, osmo_rai_name(&ra_id));
+
+       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;
@@ -630,6 +646,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, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: I7b4beb413a6f974373a404b5a11c44d86ba695d3
Gerrit-Change-Number: 3384
Gerrit-PatchSet: 14
Gerrit-Owner: Harald Welte <[email protected]>
Gerrit-Reviewer: Harald Welte <[email protected]>
Gerrit-Reviewer: Jenkins Builder (1000002)
Gerrit-Reviewer: Max <[email protected]>
Gerrit-Reviewer: Vadim Yanitskiy <[email protected]>
Gerrit-Reviewer: osmith <[email protected]>

Reply via email to