osmith has submitted this change. ( 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. Make all functions that are only used inside gtp.c static.
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/gtp.c A gtp/gtp_internal.h M include/osmocom/gtp/gtp.h M sgsnemu/sgsnemu.c 8 files changed, 54 insertions(+), 77 deletions(-)
Approvals: pespin: Looks good to me, but someone else must approve fixeria: Looks good to me, approved Jenkins Builder: Verified
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/gtp.c b/gtp/gtp.c index 482875d..245927b 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 */
@@ -640,8 +641,8 @@ }
/* Send off an echo reply */ -int gtp_echo_resp(struct gsn_t *gsn, int version, - struct sockaddr_in *peer, int fd, void *pack, unsigned len) +static int gtp_echo_resp(struct gsn_t *gsn, int version, + struct sockaddr_in *peer, int fd, void *pack, unsigned len) { union gtp_packet packet; unsigned int length = get_default_gtp(version, GTP_ECHO_RSP, &packet); @@ -652,8 +653,8 @@ }
/* Handle a received echo request */ -int gtp_echo_ind(struct gsn_t *gsn, int version, struct sockaddr_in *peer, - int fd, void *pack, unsigned len) +static int gtp_echo_ind(struct gsn_t *gsn, int version, struct sockaddr_in *peer, + int fd, void *pack, unsigned len) {
/* Check if it was a duplicate request */ @@ -665,8 +666,8 @@ }
/* Handle a received echo reply */ -int gtp_echo_conf(struct gsn_t *gsn, int version, struct sockaddr_in *peer, - void *pack, unsigned len) +static int gtp_echo_conf(struct gsn_t *gsn, int version, struct sockaddr_in *peer, + void *pack, unsigned len) { union gtpie_member *ie[GTPIE_SIZE]; unsigned char recovery; @@ -718,8 +719,8 @@ * only listen to the GTP0 port, and therefore will never receive * anything else than GTP0 */
-int gtp_unsup_req(struct gsn_t *gsn, int version, struct sockaddr_in *peer, - int fd, void *pack, unsigned len) +static int gtp_unsup_req(struct gsn_t *gsn, int version, struct sockaddr_in *peer, + int fd, void *pack, unsigned len) { union gtp_packet packet;
@@ -729,8 +730,8 @@ }
/* Handle a Version Not Supported message */ -int gtp_unsup_ind(struct gsn_t *gsn, struct sockaddr_in *peer, - void *pack, unsigned len) +static int gtp_unsup_ind(struct gsn_t *gsn, struct sockaddr_in *peer, + void *pack, unsigned len) {
if (gsn->cb_unsup_ind) @@ -848,7 +849,7 @@ return 0; }
-int in_addr2gsna(struct ul16_t *gsna, struct in_addr *src) +static int in_addr2gsna(struct ul16_t *gsna, struct in_addr *src) { memset(gsna, 0, sizeof(struct ul16_t)); gsna->l = 4; @@ -1025,8 +1026,8 @@ }
/* Send Create PDP Context Response */ -int gtp_create_pdp_resp(struct gsn_t *gsn, int version, struct pdp_t *pdp, - uint8_t cause) +static int gtp_create_pdp_resp(struct gsn_t *gsn, int version, struct pdp_t *pdp, + uint8_t cause) { union gtp_packet packet; unsigned int length = @@ -1101,9 +1102,9 @@ }
/* Handle Create PDP Context Request */ -int gtp_create_pdp_ind(struct gsn_t *gsn, int version, - struct sockaddr_in *peer, int fd, - void *pack, unsigned len) +static int gtp_create_pdp_ind(struct gsn_t *gsn, int version, + struct sockaddr_in *peer, int fd, + void *pack, unsigned len) { struct pdp_t *pdp, *pdp_old; struct pdp_t pdp_buf; @@ -1426,8 +1427,8 @@ }
/* Handle Create PDP Context Response */ -int gtp_create_pdp_conf(struct gsn_t *gsn, int version, - struct sockaddr_in *peer, void *pack, unsigned len) +static int gtp_create_pdp_conf(struct gsn_t *gsn, int version, + struct sockaddr_in *peer, void *pack, unsigned len) { struct pdp_t *pdp; union gtpie_member *ie[GTPIE_SIZE]; @@ -2193,11 +2194,11 @@ }
/* Send Delete PDP Context Response */ -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) +static 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) { union gtp_packet packet; unsigned int length = @@ -2238,9 +2239,9 @@ }
/* Handle Delete PDP Context Request */ -int gtp_delete_pdp_ind(struct gsn_t *gsn, int version, - struct sockaddr_in *peer, int fd, - void *pack, unsigned len) +static int gtp_delete_pdp_ind(struct gsn_t *gsn, int version, + struct sockaddr_in *peer, int fd, + void *pack, unsigned len) { struct pdp_t *pdp = NULL; struct pdp_t *linked_pdp = NULL; @@ -2337,8 +2338,8 @@ }
/* Handle Delete PDP Context Response */ -int gtp_delete_pdp_conf(struct gsn_t *gsn, int version, - struct sockaddr_in *peer, void *pack, unsigned len) +static int gtp_delete_pdp_conf(struct gsn_t *gsn, int version, + struct sockaddr_in *peer, void *pack, unsigned len) { union gtpie_member *ie[GTPIE_SIZE]; uint8_t cause; diff --git a/gtp/gtp_internal.h b/gtp/gtp_internal.h new file mode 100644 index 0000000..c8f22dc --- /dev/null +++ b/gtp/gtp_internal.h @@ -0,0 +1,3 @@ +#pragma once + +uint64_t gtp_imsi_str2gtp(const char *str); diff --git a/include/osmocom/gtp/gtp.h b/include/osmocom/gtp/gtp.h index 7e6bb55..e3c66c9 100644 --- a/include/osmocom/gtp/gtp.h +++ b/include/osmocom/gtp/gtp.h @@ -265,59 +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 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 */