laforge has submitted this change. ( https://gerrit.osmocom.org/c/libgtpnl/+/37929?usp=email )
Change subject: fix clang build ......................................................................
fix clang build
Clang needs the configure patch that exists in most of our repos + visibility, because clang says warning: attribute declaration must precede definition [-Wignored-attributes] and the .so has no exports.
Change-Id: I345579a8ea989c5a21797a17f34629472fbd3525 --- M configure.ac M src/genl.c M src/gtp-genl.c M src/gtp-rtnl.c M src/gtp.c 5 files changed, 41 insertions(+), 35 deletions(-)
Approvals: Jenkins Builder: Verified laforge: Looks good to me, approved pespin: Looks good to me, but someone else must approve
diff --git a/configure.ac b/configure.ac index 1628bc8..90e4dce 100644 --- a/configure.ac +++ b/configure.ac @@ -35,6 +35,12 @@ AC_EXEEXT AC_DISABLE_STATIC LT_INIT + +dnl patching ${archive_cmds} to affect generation of file "libtool" to fix linking with clang +AS_CASE(["$LD"],[*clang*], + [AS_CASE(["${host_os}"], + [*linux*],[archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'])]) + CHECK_GCC_FVISIBILITY case "$host" in *-*-linux* | *-*-uclinux*) ;; diff --git a/src/genl.c b/src/genl.c index 5d8b9af..572bed9 100644 --- a/src/genl.c +++ b/src/genl.c @@ -32,6 +32,7 @@
#include "internal.h"
+EXPORT_SYMBOL(genl_nlmsg_build_hdr); struct nlmsghdr * genl_nlmsg_build_hdr(char *buf, uint16_t type, uint16_t flags, uint32_t seq, uint8_t cmd) @@ -50,7 +51,6 @@
return nlh; } -EXPORT_SYMBOL(genl_nlmsg_build_hdr);
static int genl_ctrl_validate_cb(const struct nlattr *attr, void *data) { @@ -87,6 +87,7 @@ return MNL_CB_OK; }
+EXPORT_SYMBOL(genl_socket_open); struct mnl_socket *genl_socket_open(void) { struct mnl_socket *nl; @@ -104,14 +105,14 @@
return nl; } -EXPORT_SYMBOL(genl_socket_open);
+EXPORT_SYMBOL(genl_socket_close); void genl_socket_close(struct mnl_socket *nl) { mnl_socket_close(nl); } -EXPORT_SYMBOL(genl_socket_close);
+EXPORT_SYMBOL(genl_socket_talk); int genl_socket_talk(struct mnl_socket *nl, struct nlmsghdr *nlh, uint32_t seq, int (*cb)(const struct nlmsghdr *nlh, void *data), void *data) @@ -135,7 +136,6 @@
return ret; } -EXPORT_SYMBOL(genl_socket_talk);
static struct nlmsghdr * genl_nlmsg_build_lookup(char *buf, const char *subsys_name) @@ -158,6 +158,7 @@ return nlh; }
+EXPORT_SYMBOL(genl_lookup_family); int genl_lookup_family(struct mnl_socket *nl, const char *family) { int32_t genl_id; @@ -171,4 +172,3 @@
return genl_id; } -EXPORT_SYMBOL(genl_lookup_family); diff --git a/src/gtp-genl.c b/src/gtp-genl.c index 33a78d8..ef8dfc0 100644 --- a/src/gtp-genl.c +++ b/src/gtp-genl.c @@ -96,6 +96,7 @@ } }
+EXPORT_SYMBOL(gtp_add_tunnel); int gtp_add_tunnel(int genl_id, struct mnl_socket *nl, struct gtp_tunnel *t) { struct nlmsghdr *nlh; @@ -119,8 +120,8 @@
return 0; } -EXPORT_SYMBOL(gtp_add_tunnel);
+EXPORT_SYMBOL(gtp_del_tunnel); int gtp_del_tunnel(int genl_id, struct mnl_socket *nl, struct gtp_tunnel *t) { char buf[MNL_SOCKET_BUFFER_SIZE]; @@ -138,7 +139,6 @@
return 0; } -EXPORT_SYMBOL(gtp_del_tunnel);
struct gtp_pdp { uint32_t ifidx; @@ -270,6 +270,7 @@ return MNL_CB_OK; }
+EXPORT_SYMBOL(gtp_list_tunnel); int gtp_list_tunnel(int genl_id, struct mnl_socket *nl) { char buf[MNL_SOCKET_BUFFER_SIZE]; @@ -286,4 +287,3 @@
return 0; } -EXPORT_SYMBOL(gtp_list_tunnel); diff --git a/src/gtp-rtnl.c b/src/gtp-rtnl.c index 1dfd125..6baa5a6 100644 --- a/src/gtp-rtnl.c +++ b/src/gtp-rtnl.c @@ -138,18 +138,19 @@ return gtp_dev_talk(nlh, seq); }
+EXPORT_SYMBOL(gtp_dev_create); int gtp_dev_create(int dest_ns, const char *gtp_ifname, int fd0, int fd1) { return _gtp_dev_create(dest_ns, gtp_ifname, fd0, fd1, GTP_ROLE_GGSN); } -EXPORT_SYMBOL(gtp_dev_create);
+EXPORT_SYMBOL(gtp_dev_create_sgsn); int gtp_dev_create_sgsn(int dest_ns, const char *gtp_ifname, int fd0, int fd1) { return _gtp_dev_create(dest_ns, gtp_ifname, fd0, fd1, GTP_ROLE_SGSN); } -EXPORT_SYMBOL(gtp_dev_create_sgsn);
+EXPORT_SYMBOL(gtp_dev_destroy); int gtp_dev_destroy(const char *gtp_ifname) { char buf[MNL_SOCKET_BUFFER_SIZE]; @@ -166,8 +167,8 @@
return gtp_dev_talk(nlh, seq); } -EXPORT_SYMBOL(gtp_dev_destroy);
+EXPORT_SYMBOL(gtp_dev_config); int gtp_dev_config(const char *ifname, struct in_addr *dst, uint32_t prefix) { struct mnl_socket *nl; @@ -211,4 +212,3 @@
return ret; } -EXPORT_SYMBOL(gtp_dev_config); diff --git a/src/gtp.c b/src/gtp.c index af216f7..8f12b5d 100644 --- a/src/gtp.c +++ b/src/gtp.c @@ -27,6 +27,7 @@
#include "internal.h"
+EXPORT_SYMBOL(gtp_tunnel_alloc); struct gtp_tunnel *gtp_tunnel_alloc(void) { struct gtp_tunnel *t; @@ -38,152 +39,151 @@ t->ifns = -1; return t; } -EXPORT_SYMBOL(gtp_tunnel_alloc);
+EXPORT_SYMBOL(gtp_tunnel_free); void gtp_tunnel_free(struct gtp_tunnel *t) { free(t); } -EXPORT_SYMBOL(gtp_tunnel_free);
+EXPORT_SYMBOL(gtp_tunnel_set_ifns); void gtp_tunnel_set_ifns(struct gtp_tunnel *t, int ifns) { t->ifns = ifns; t->flags |= GTP_TUN_IFNS; } -EXPORT_SYMBOL(gtp_tunnel_set_ifns);
+EXPORT_SYMBOL(gtp_tunnel_set_ifidx); void gtp_tunnel_set_ifidx(struct gtp_tunnel *t, uint32_t ifidx) { t->ifidx = ifidx; t->flags |= GTP_TUN_IFIDX; } -EXPORT_SYMBOL(gtp_tunnel_set_ifidx);
+EXPORT_SYMBOL(gtp_tunnel_set_family); void gtp_tunnel_set_family(struct gtp_tunnel *t, uint16_t family) { t->ms_addr.family = family; t->flags |= GTP_TUN_FAMILY; } -EXPORT_SYMBOL(gtp_tunnel_set_family);
+EXPORT_SYMBOL(gtp_tunnel_set_ms_ip4); void gtp_tunnel_set_ms_ip4(struct gtp_tunnel *t, struct in_addr *ms_addr) { t->ms_addr.family = AF_INET; t->ms_addr.ip4 = *ms_addr; t->flags |= GTP_TUN_FAMILY | GTP_TUN_MS_ADDR; } -EXPORT_SYMBOL(gtp_tunnel_set_ms_ip4);
+EXPORT_SYMBOL(gtp_tunnel_set_sgsn_ip4); void gtp_tunnel_set_sgsn_ip4(struct gtp_tunnel *t, struct in_addr *sgsn_addr) { t->sgsn_addr.family = AF_INET; t->sgsn_addr.ip4 = *sgsn_addr; t->flags |= GTP_TUN_SGSN_ADDR; } -EXPORT_SYMBOL(gtp_tunnel_set_sgsn_ip4);
+EXPORT_SYMBOL(gtp_tunnel_set_ms_ip6); void gtp_tunnel_set_ms_ip6(struct gtp_tunnel *t, const struct in6_addr *ms_addr) { t->ms_addr.family = AF_INET6; t->ms_addr.ip6 = *ms_addr; t->flags |= GTP_TUN_FAMILY | GTP_TUN_MS_ADDR; } -EXPORT_SYMBOL(gtp_tunnel_set_ms_ip6);
+EXPORT_SYMBOL(gtp_tunnel_set_sgsn_ip6); void gtp_tunnel_set_sgsn_ip6(struct gtp_tunnel *t, const struct in6_addr *sgsn_addr) { t->sgsn_addr.family = AF_INET6; t->sgsn_addr.ip6 = *sgsn_addr; t->flags |= GTP_TUN_SGSN_ADDR; } -EXPORT_SYMBOL(gtp_tunnel_set_sgsn_ip6);
+EXPORT_SYMBOL(gtp_tunnel_set_version); void gtp_tunnel_set_version(struct gtp_tunnel *t, uint32_t version) { t->gtp_version = version; t->flags |= GTP_TUN_VERSION; } -EXPORT_SYMBOL(gtp_tunnel_set_version);
+EXPORT_SYMBOL(gtp_tunnel_set_tid); void gtp_tunnel_set_tid(struct gtp_tunnel *t, uint64_t tid) { t->u.v0.tid = tid; t->flags |= GTP_TUN_V0_TID; } -EXPORT_SYMBOL(gtp_tunnel_set_tid);
+EXPORT_SYMBOL(gtp_tunnel_set_flowid); void gtp_tunnel_set_flowid(struct gtp_tunnel *t, uint16_t flowid) { t->u.v0.flowid = flowid; t->flags |= GTP_TUN_V0_FLOWID; } -EXPORT_SYMBOL(gtp_tunnel_set_flowid);
+EXPORT_SYMBOL(gtp_tunnel_set_i_tei); void gtp_tunnel_set_i_tei(struct gtp_tunnel *t, uint32_t i_tei) { t->u.v1.i_tei = i_tei; t->flags |= GTP_TUN_V1_I_TEI; } -EXPORT_SYMBOL(gtp_tunnel_set_i_tei);
+EXPORT_SYMBOL(gtp_tunnel_set_o_tei); void gtp_tunnel_set_o_tei(struct gtp_tunnel *t, uint32_t o_tei) { t->u.v1.o_tei = o_tei; t->flags |= GTP_TUN_V1_O_TEI; } -EXPORT_SYMBOL(gtp_tunnel_set_o_tei);
+EXPORT_SYMBOL(gtp_tunnel_get_ifns); const int gtp_tunnel_get_ifns(struct gtp_tunnel *t) { return t->ifns; } -EXPORT_SYMBOL(gtp_tunnel_get_ifns);
+EXPORT_SYMBOL(gtp_tunnel_get_ifidx); const uint32_t gtp_tunnel_get_ifidx(struct gtp_tunnel *t) { return t->ifidx; } -EXPORT_SYMBOL(gtp_tunnel_get_ifidx);
+EXPORT_SYMBOL(gtp_tunnel_get_ms_ip4); const struct in_addr *gtp_tunnel_get_ms_ip4(struct gtp_tunnel *t) { return &t->ms_addr.ip4; } -EXPORT_SYMBOL(gtp_tunnel_get_ms_ip4);
+EXPORT_SYMBOL(gtp_tunnel_get_sgsn_ip4); const struct in_addr *gtp_tunnel_get_sgsn_ip4(struct gtp_tunnel *t) { return &t->sgsn_addr.ip4; } -EXPORT_SYMBOL(gtp_tunnel_get_sgsn_ip4);
+EXPORT_SYMBOL(gtp_tunnel_get_version); int gtp_tunnel_get_version(struct gtp_tunnel *t) { return t->gtp_version; } -EXPORT_SYMBOL(gtp_tunnel_get_version);
+EXPORT_SYMBOL(gtp_tunnel_get_tid); uint64_t gtp_tunnel_get_tid(struct gtp_tunnel *t) { return t->u.v0.tid; } -EXPORT_SYMBOL(gtp_tunnel_get_tid);
+EXPORT_SYMBOL(gtp_tunnel_get_flowid); uint16_t gtp_tunnel_get_flowid(struct gtp_tunnel *t) { return t->u.v0.flowid; } -EXPORT_SYMBOL(gtp_tunnel_get_flowid);
+EXPORT_SYMBOL(gtp_tunnel_get_i_tei); uint32_t gtp_tunnel_get_i_tei(struct gtp_tunnel *t) { return t->u.v1.i_tei; } -EXPORT_SYMBOL(gtp_tunnel_get_i_tei);
+EXPORT_SYMBOL(gtp_tunnel_get_o_tei); uint32_t gtp_tunnel_get_o_tei(struct gtp_tunnel *t) { return t->u.v1.o_tei; } -EXPORT_SYMBOL(gtp_tunnel_get_o_tei);