gtp: Support tx/rx RAN Information Relay message

See 3GPP TS 29.060 sec 7.5.14.1 RAN Information Relay.

Related: SYS#5314
Change-Id: Iea3eb032ccd4aed5187baca7f7719349d76039d4
diff --git a/gtp/gtp.h b/gtp/gtp.h
index 45eb285..0583025 100644
--- a/gtp/gtp.h
+++ b/gtp/gtp.h
@@ -16,6 +16,7 @@
 #include <osmocom/core/defs.h>
 #include <osmocom/core/timer.h>
 
+#include "gtpie.h"
 #include "pdp.h"
 
 #define GTP_MODE_GGSN 1
@@ -85,6 +86,7 @@
 #define GTP_FWD_SRNS         58	/* Forward SRNS Context */
 #define GTP_FWD_RELOC_ACK    59	/* Forward Relocation Complete Acknowledge */
 #define GTP_FWD_SRNS_ACK     60	/* Forward SRNS Context Acknowledge */
+#define GTP_RAN_INFO_RELAY   70	/* RAN Information Relay */
 /* 61-239 For future use. */
 #define GTP_DATA_TRAN_REQ   240	/* Data Record Transfer Request */
 #define GTP_DATA_TRAN_RSP   241	/* Data Record Transfer Response */
@@ -276,6 +278,7 @@
 	int (*cb_create_context_ind) (struct pdp_t *);
 	int (*cb_unsup_ind) (struct sockaddr_in * peer);
 	int (*cb_extheader_ind) (struct sockaddr_in * peer);
+	int (*cb_ran_info_relay_ind) (struct sockaddr_in *peer, union gtpie_member **ie);
 	int (*cb_conf) (int type, int cause, struct pdp_t * pdp, void *cbp);
 	int (*cb_data_ind) (struct pdp_t * pdp, void *pack, unsigned len);
 	int (*cb_recovery) (struct sockaddr_in * peer, uint8_t recovery);
@@ -343,6 +346,11 @@
 extern int gtp_data_req(struct gsn_t *gsn, struct pdp_t *pdp,
 			void *pack, unsigned len);
 
+extern int gtp_ran_info_relay_req(struct gsn_t *gsn, const struct sockaddr_in *peer,
+				  const uint8_t *ran_container, size_t ran_container_len,
+				  const uint8_t *rim_route_addr, size_t rim_route_addr_len,
+				  uint8_t rim_route_addr_discr);
+
 extern int gtp_set_cb_data_ind(struct gsn_t *gsn,
 			       int (*cb_data_ind) (struct pdp_t * pdp,
 						   void *pack, unsigned len));
@@ -366,6 +374,9 @@
 extern int gtp_set_cb_extheader_ind(struct gsn_t *gsn,
 				    int (*cb) (struct sockaddr_in * peer));
 
+extern int gtp_set_cb_ran_info_relay_ind(struct gsn_t *gsn,
+				    int (*cb) (struct sockaddr_in * peer, union gtpie_member **ie));
+
 extern int gtp_set_cb_conf(struct gsn_t *gsn,
 			   int (*cb) (int type, int cause, struct pdp_t * pdp,
 				      void *cbp));