[gprs] pass BSSGP UL-UNITDATA Cell ID up into GMM layer

BSSGP stores a pointer to the Cell Identifier IE in msgb->cb, which
is later used by the GMM layer to identify the cell that has sent a
given message.

This now also means that the gsm_04_08_gprs.c code is free of any
legacy references to msg->trx or struct gsm_bts.
diff --git a/openbsc/include/openbsc/gprs_bssgp.h b/openbsc/include/openbsc/gprs_bssgp.h
index c70868a..c1094b3 100644
--- a/openbsc/include/openbsc/gprs_bssgp.h
+++ b/openbsc/include/openbsc/gprs_bssgp.h
@@ -140,6 +140,7 @@
 #include <osmocore/tlv.h>
 
 extern int gprs_bssgp_rcvmsg(struct msgb *msg);
+uint16_t bssgp_parse_cell_id(struct gprs_ra_id *raid, const uint8_t *buf);
 
 /* Wrapper around TLV parser to parse BSSGP IEs */
 static inline int bssgp_tlv_parse(struct tlv_parsed *tp, uint8_t *buf, int len)
diff --git a/openbsc/include/openbsc/gsm_data.h b/openbsc/include/openbsc/gsm_data.h
index 3dd7a18..ac04265 100644
--- a/openbsc/include/openbsc/gsm_data.h
+++ b/openbsc/include/openbsc/gsm_data.h
@@ -84,6 +84,9 @@
 	unsigned char *bssgph;
 	unsigned char *llch;
 
+	/* Cell Identifier */
+	unsigned char *bssgp_cell_id;
+
 	/* Identifiers of a BTS, equal to 'struct bssgp_bts_ctx' */
 	u_int16_t nsei;
 	u_int16_t bvci;
@@ -97,6 +100,7 @@
 #define msgb_bvci(__x)		OBSC_MSGB_CB(__x)->bvci
 #define msgb_gmmh(__x)		(__x)->l3h
 #define msgb_bssgph(__x)	OBSC_MSGB_CB(__x)->bssgph
+#define msgb_bcid(__x)		OBSC_MSGB_CB(__x)->bssgp_cell_id
 #define msgb_llch(__x)		OBSC_MSGB_CB(__x)->llch
 
 struct msgb;