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
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);