import gsm48_parse_ra() and gprs_tlli_type() from openbsc
diff --git a/include/osmocore/gsm48.h b/include/osmocore/gsm48.h
index e3a1def..9015c25 100644
--- a/include/osmocore/gsm48.h
+++ b/include/osmocore/gsm48.h
@@ -4,6 +4,14 @@
 #include <osmocore/protocol/gsm_04_08.h>
 #include <osmocore/gsm48_ie.h>
 
+/* A parsed GPRS routing area */
+struct gprs_ra_id {
+	uint16_t	mnc;
+	uint16_t	mcc;
+	uint16_t	lac;
+	uint8_t		rac;
+};
+
 extern const struct tlv_definition gsm48_att_tlvdef;
 const char *gsm48_cc_state_name(uint8_t state);
 const char *gsm48_cc_msg_name(uint8_t msgtype);
@@ -18,4 +26,7 @@
 int gsm48_mi_to_string(char *string, const int str_len,
 			const uint8_t *mi, const int mi_len);
 
+/* Parse Routeing Area Identifier */
+void gsm48_parse_ra(struct gprs_ra_id *raid, const uint8_t *buf);
+
 #endif
diff --git a/include/osmocore/gsm_utils.h b/include/osmocore/gsm_utils.h
index 195e865..51e9f2e 100644
--- a/include/osmocore/gsm_utils.h
+++ b/include/osmocore/gsm_utils.h
@@ -87,5 +87,17 @@
 /* Convert from GSM time to frame number */
 uint32_t gsm_gsmtime2fn(struct gsm_time *time);
 
+/* GSM TS 03.03 Chapter 2.6 */
+enum gprs_tlli_tyoe {
+	TLLI_LOCAL,
+	TLLI_FOREIGN,
+	TLLI_RANDOM,
+	TLLI_AUXILIARY,
+	TLLI_RESERVED,
+};
+
+/* TS 03.03 Chapter 2.6 */
+int gprs_tlli_type(uint32_t tlli);
+
 void generate_backtrace();
 #endif
diff --git a/include/osmocore/protocol/gsm_04_08.h b/include/osmocore/protocol/gsm_04_08.h
index 47b98b2..1a112a0 100644
--- a/include/osmocore/protocol/gsm_04_08.h
+++ b/include/osmocore/protocol/gsm_04_08.h
@@ -735,10 +735,17 @@
 	GSM48_BCAP_RRQ_DUAL_FR	= 3,
 };
 
-
 #define GSM48_TMSI_LEN	5
 #define GSM48_MID_TMSI_LEN	(GSM48_TMSI_LEN + 2)
 #define GSM48_MI_SIZE 32
 
+/* Chapter 10.4.4.15 */
+struct gsm48_ra_id {
+	uint8_t digits[3];	/* MCC + MNC BCD digits */
+	uint16_t lac;		/* Location Area Code */
+	uint8_t rac;		/* Routing Area Code */
+} __attribute__ ((packed));
+
+
 
 #endif /* PROTO_GSM_04_08_H */