gtp/gtp_internal.h: new file

While at it, move internal functions of gtp.h to a separate file too.

The following APIs are unexpectedly public:
* imsi_gtp2str gets used by pdp.h
* gsna2in_addr, gtp_echo_req gets used by osmo-sgsn

Change-Id: I72c40cbdec33449ca8104fb3cad8df1a9e07dfd7
diff --git a/ggsn/ggsn.c b/ggsn/ggsn.c
index 2e9010e..8d1524c 100644
--- a/ggsn/ggsn.c
+++ b/ggsn/ggsn.c
@@ -58,6 +58,7 @@
 #include "../lib/icmpv6.h"
 #include "pco.h"
 #include "ggsn.h"
+#include "../gtp/gtp_internal.h"
 
 static int ggsn_tun_fd_cb(struct osmo_fd *fd, unsigned int what);
 static int cb_tun_ind(struct tun_t *tun, void *pack, unsigned len);
diff --git a/ggsn/ggsn_vty.c b/ggsn/ggsn_vty.c
index a661869..f70daf1 100644
--- a/ggsn/ggsn_vty.c
+++ b/ggsn/ggsn_vty.c
@@ -42,6 +42,7 @@
 
 #include "ggsn.h"
 #include "sgsn.h"
+#include "../gtp/gtp_internal.h"
 
 #define PREFIX_STR	"Prefix (Network/Netmask)\n"
 #define IFCONFIG_STR	"GGSN-based interface configuration\n"
diff --git a/ggsn/sgsn.c b/ggsn/sgsn.c
index 15548ef..b324fd7 100644
--- a/ggsn/sgsn.c
+++ b/ggsn/sgsn.c
@@ -1,6 +1,6 @@
 #include "sgsn.h"
 #include "ggsn.h"
-
+#include "../gtp/gtp_internal.h"
 
 static bool sgsn_peer_attempt_free(struct sgsn_peer *sgsn)
 {
diff --git a/gtp/Makefile.am b/gtp/Makefile.am
index 11426a4..a140cee 100644
--- a/gtp/Makefile.am
+++ b/gtp/Makefile.am
@@ -18,6 +18,7 @@
 		    gsn.c \
 		    gsn_internal.h \
 		    gtp.c \
+		    gtp_internal.h \
 		    gtpie.c \
 		    lookupa.c \
 		    lookupa.h \
diff --git a/gtp/gsn_internal.h b/gtp/gsn_internal.h
index deb60c3..732cb17 100644
--- a/gtp/gsn_internal.h
+++ b/gtp/gsn_internal.h
@@ -1,3 +1,4 @@
 #pragma once
+#include <osmocom/core/in46_addr.h>
 
 void gtp_queue_timer_start(struct gsn_t *gsn);
diff --git a/gtp/gtp.c b/gtp/gtp.c
index bdf7e7d..f426e6d 100644
--- a/gtp/gtp.c
+++ b/gtp/gtp.c
@@ -61,6 +61,7 @@
 
 #include "queue.h"
 #include "gsn_internal.h"
+#include "gtp_internal.h"
 
 /* Error reporting functions */
 
diff --git a/gtp/gtp_internal.h b/gtp/gtp_internal.h
new file mode 100644
index 0000000..826ea59
--- /dev/null
+++ b/gtp/gtp_internal.h
@@ -0,0 +1,52 @@
+#pragma once
+
+int gtp_echo_resp(struct gsn_t *gsn, int version,
+		  struct sockaddr_in *peer, int fd,
+		  void *pack, unsigned len);
+int gtp_echo_ind(struct gsn_t *gsn, int version,
+		 struct sockaddr_in *peer, int fd,
+		 void *pack, unsigned len);
+int gtp_echo_conf(struct gsn_t *gsn, int version,
+		  struct sockaddr_in *peer, void *pack, unsigned len);
+
+int gtp_unsup_req(struct gsn_t *gsn, int version,
+		  struct sockaddr_in *peer,
+		  int fd, void *pack, unsigned len);
+int gtp_unsup_ind(struct gsn_t *gsn, struct sockaddr_in *peer,
+		  void *pack, unsigned len);
+
+int gtp_create_pdp_resp(struct gsn_t *gsn, int version,
+			struct pdp_t *pdp, uint8_t cause);
+
+int gtp_create_pdp_ind(struct gsn_t *gsn, int version,
+		       struct sockaddr_in *peer, int fd,
+		       void *pack, unsigned len);
+
+int gtp_create_pdp_conf(struct gsn_t *gsn, int version,
+			struct sockaddr_in *peer,
+			void *pack, unsigned len);
+
+int gtp_update_pdp_req(struct gsn_t *gsn, int version, void *cbp,
+		       struct in_addr *inetaddr, struct pdp_t *pdp);
+
+int gtp_delete_pdp_req(struct gsn_t *gsn, int version, void *cbp,
+		       struct pdp_t *pdp);
+
+int gtp_delete_pdp_resp(struct gsn_t *gsn, int version,
+			struct sockaddr_in *peer, int fd,
+			void *pack, unsigned len,
+			struct pdp_t *pdp, struct pdp_t *linked_pdp,
+			uint8_t cause, int teardown);
+
+int gtp_delete_pdp_ind(struct gsn_t *gsn, int version,
+		       struct sockaddr_in *peer, int fd,
+		       void *pack, unsigned len);
+
+int gtp_delete_pdp_conf(struct gsn_t *gsn, int version,
+			struct sockaddr_in *peer,
+			void *pack, unsigned len);
+
+int ipv42eua(struct ul66_t *eua, struct in_addr *src);
+int eua2ipv4(struct in_addr *dst, struct ul66_t *eua);
+int in_addr2gsna(struct ul16_t *gsna, struct in_addr *src);
+uint64_t gtp_imsi_str2gtp(const char *str);
diff --git a/include/osmocom/gtp/gtp.h b/include/osmocom/gtp/gtp.h
index 7465cf1..e3c66c9 100644
--- a/include/osmocom/gtp/gtp.h
+++ b/include/osmocom/gtp/gtp.h
@@ -265,61 +265,12 @@
 extern int gtp_decaps0(struct gsn_t *gsn);
 extern int gtp_decaps1c(struct gsn_t *gsn);
 extern int gtp_decaps1u(struct gsn_t *gsn);
-/* Internal functions (not part of the API) */
 
 extern int gtp_echo_req(struct gsn_t *gsn, int version, void *cbp,
 			struct in_addr *inetaddrs);
-extern int gtp_echo_resp(struct gsn_t *gsn, int version,
-			 struct sockaddr_in *peer, int fd,
-			 void *pack, unsigned len);
-extern int gtp_echo_ind(struct gsn_t *gsn, int version,
-			struct sockaddr_in *peer, int fd,
-			void *pack, unsigned len);
-extern int gtp_echo_conf(struct gsn_t *gsn, int version,
-			 struct sockaddr_in *peer, void *pack, unsigned len);
 
-extern int gtp_unsup_req(struct gsn_t *gsn, int version,
-			 struct sockaddr_in *peer,
-			 int fd, void *pack, unsigned len);
-extern int gtp_unsup_ind(struct gsn_t *gsn, struct sockaddr_in *peer,
-			 void *pack, unsigned len);
-
-extern int gtp_create_pdp_resp(struct gsn_t *gsn, int version,
-			       struct pdp_t *pdp, uint8_t cause);
-
-extern int gtp_create_pdp_ind(struct gsn_t *gsn, int version,
-			      struct sockaddr_in *peer, int fd,
-			      void *pack, unsigned len);
-
-extern int gtp_create_pdp_conf(struct gsn_t *gsn, int version,
-			       struct sockaddr_in *peer,
-			       void *pack, unsigned len);
-
-extern int gtp_update_pdp_req(struct gsn_t *gsn, int version, void *cbp,
-			      struct in_addr *inetaddr, struct pdp_t *pdp);
-
-extern int gtp_delete_pdp_req(struct gsn_t *gsn, int version, void *cbp,
-			      struct pdp_t *pdp);
-
-extern int gtp_delete_pdp_resp(struct gsn_t *gsn, int version,
-			       struct sockaddr_in *peer, int fd,
-			       void *pack, unsigned len,
-			       struct pdp_t *pdp, struct pdp_t *linked_pdp,
-			       uint8_t cause, int teardown);
-
-extern int gtp_delete_pdp_ind(struct gsn_t *gsn, int version,
-			      struct sockaddr_in *peer, int fd,
-			      void *pack, unsigned len);
-
-extern int gtp_delete_pdp_conf(struct gsn_t *gsn, int version,
-			       struct sockaddr_in *peer,
-			       void *pack, unsigned len);
-
-extern int ipv42eua(struct ul66_t *eua, struct in_addr *src);
-extern int eua2ipv4(struct in_addr *dst, struct ul66_t *eua);
 extern int gsna2in_addr(struct in_addr *dst, struct ul16_t *gsna);
-extern int in_addr2gsna(struct ul16_t *gsna, struct in_addr *src);
+
 extern const char *imsi_gtp2str(const uint64_t *imsi);
-extern uint64_t gtp_imsi_str2gtp(const char *str);
 
 #endif /* !_GTP_H */
diff --git a/sgsnemu/sgsnemu.c b/sgsnemu/sgsnemu.c
index de7af4a..152b05b 100644
--- a/sgsnemu/sgsnemu.c
+++ b/sgsnemu/sgsnemu.c
@@ -62,6 +62,7 @@
 #include "../lib/syserr.h"
 #include "../lib/netns.h"
 #include "../lib/icmpv6.h"
+#include "../gtp/gtp_internal.h"
 #include "cmdline.h"
 
 #define IPADDRLEN 256		/* Character length of addresses */