laforge submitted this change.

View Change

Approvals: Jenkins Builder: Verified laforge: Looks good to me, approved pespin: Looks good to me, but someone else must approve
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(-)

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);

To view, visit change 37929. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: merged
Gerrit-Project: libgtpnl
Gerrit-Branch: master
Gerrit-Change-Id: I345579a8ea989c5a21797a17f34629472fbd3525
Gerrit-Change-Number: 37929
Gerrit-PatchSet: 1
Gerrit-Owner: Hoernchen <ewild@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge@osmocom.org>
Gerrit-Reviewer: pespin <pespin@sysmocom.de>