osmith has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ggsn/+/36068?usp=email )
Change subject: gtp/gtp_internal.h: new file ......................................................................
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 --- M ggsn/ggsn.c M ggsn/ggsn_vty.c M ggsn/sgsn.c M gtp/Makefile.am M gtp/gsn_internal.h M gtp/gtp.c A gtp/gtp_internal.h M include/osmocom/gtp/gtp.h M sgsnemu/sgsnemu.c 9 files changed, 75 insertions(+), 51 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ggsn refs/changes/68/36068/1
diff --git a/ggsn/ggsn.c b/ggsn/ggsn.c index 2644ac5..d64e82f 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 13d1e18..32f1414 100644 --- a/gtp/Makefile.am +++ b/gtp/Makefile.am @@ -20,6 +20,7 @@ gsn_internal.h \ gtp.c \ gtp.h \ + gtp_internal.h \ gtpie.c \ gtpie.h \ lookupa.c \ 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 */