pespin has uploaded this change for review. (
https://gerrit.osmocom.org/c/libosmocore/+/41931?usp=email )
Change subject: socket_compat.h improvements to always have struct
osmo_sockaddr available
......................................................................
socket_compat.h improvements to always have struct osmo_sockaddr available
Having a #if (!EMBEDDED) based on compiler defined variable is not a
good idea. Instead, add minimal sys/socket.h and netient/in.h to always
have the definition of struct osmo_sockaddr available.
Change-Id: I5b10e09770727c72812af15360ab3385b957509b
---
M configure.ac
M include/osmocom/core/Makefile.am
M include/osmocom/core/socket.h
M include/osmocom/core/socket_compat.h.tpl
4 files changed, 69 insertions(+), 14 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/31/41931/1
diff --git a/configure.ac b/configure.ac
index c30876c..966751f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -75,6 +75,7 @@
dnl checks for header files
AC_HEADER_STDC
AC_CHECK_HEADERS(arpa/inet.h execinfo.h poll.h sys/select.h sys/socket.h
sys/signalfd.h sys/eventfd.h sys/timerfd.h ctype.h netinet/tcp.h netinet/in.h)
+AC_CHECK_DECL(HAVE_NETINET_IN_H, AC_SUBST(HAVE_NETINET_IN_H, 1),
AC_SUBST(HAVE_NETINET_IN_H, 0))
AC_CHECK_DECL(HAVE_SYS_SOCKET_H, AC_SUBST(HAVE_SYS_SOCKET_H, 1),
AC_SUBST(HAVE_SYS_SOCKET_H, 0))
# for src/conv.c
AC_FUNC_ALLOCA
diff --git a/include/osmocom/core/Makefile.am b/include/osmocom/core/Makefile.am
index 9a949ae..18ee283 100644
--- a/include/osmocom/core/Makefile.am
+++ b/include/osmocom/core/Makefile.am
@@ -100,7 +100,9 @@
socket_compat.h: socket_compat.h.tpl
$(AM_V_GEN)$(MKDIR_P) $(dir $@)
- $(AM_V_GEN)sed -e's/XX/$(HAVE_SYS_SOCKET_H)/g' $< > $@
+ $(AM_V_GEN)sed -e's/__LIBOSMOCORE_HAVE_SYS_SOCKET_H
XX/__LIBOSMOCORE_HAVE_SYS_SOCKET_H $(HAVE_SYS_SOCKET_H)/g' \
+ -e's/__LIBOSMOCORE_HAVE_NETINET_IN_H
XX/__LIBOSMOCORE_HAVE_NETINET_IN_H $(HAVE_NETINET_IN_H)/g' \
+ $< > $@
version.h: version.h.tpl
$(AM_V_GEN)$(MKDIR_P) $(dir $@)
diff --git a/include/osmocom/core/socket.h b/include/osmocom/core/socket.h
index 845efd7..7498e35 100644
--- a/include/osmocom/core/socket.h
+++ b/include/osmocom/core/socket.h
@@ -2,7 +2,6 @@
* Osmocom socket convenience functions. */
#pragma once
-#if (!EMBEDDED)
/*! \defgroup socket Socket convenience functions
* @{
@@ -12,9 +11,8 @@
#include <stdbool.h>
#include <stddef.h>
-#include <netinet/in.h>
-
#include <osmocom/core/defs.h>
+#include <osmocom/core/socket_compat.h>
/*! maximum number of local or remote addresses supported by an osmo_sock
instance */
#define OSMO_SOCK_MAX_ADDRS 32
@@ -29,9 +27,6 @@
/*! maximum length of a multia-address socket name
("r=(::2|1.2.3.4):123<->l=(5.6.7.8|::9):987") */
#define OSMO_SOCK_MULTIADDR_NAME_MAXLEN (OSMO_SOCK_MULTIADDR_PEER_STR_MAXLEN +
7)
-
-struct sockaddr_in;
-struct sockaddr;
struct osmo_fd;
struct sctp_paddrinfo;
@@ -224,5 +219,4 @@
int osmo_sock_sctp_get_peer_addr_info(int fd, struct sctp_paddrinfo *pinfo,
size_t *pinfo_cnt);
-#endif /* (!EMBEDDED) */
/*! @} */
diff --git a/include/osmocom/core/socket_compat.h.tpl
b/include/osmocom/core/socket_compat.h.tpl
index 43bee9e..4254d68 100644
--- a/include/osmocom/core/socket_compat.h.tpl
+++ b/include/osmocom/core/socket_compat.h.tpl
@@ -1,10 +1,68 @@
-#define HAVE_STRUCT_SOCKADDR_STORAGE XX
+#define __LIBOSMOCORE_HAVE_SYS_SOCKET_H XX
+#define __LIBOSMOCORE_HAVE_NETINET_IN_H XX
-#if HAVE_STRUCT_SOCKADDR_STORAGE
+#if __LIBOSMOCORE_HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#else
-struct sockaddr_storage {
- unsigned short ss_family;
- char __data[128 - sizeof(unsigned short)];
+/* Minimal netinet/in.h as per POSIX
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_socket.h.html */
+#include <stdint.h>
+typedef uint32_t socklen_t;
+typedef unsigned short sa_family_t;
+
+struct sockaddr {
+ sa_family_t sa_family;
+ char sa_data[14];
};
-#endif
+
+struct sockaddr_storage {
+ sa_family_t ss_family;
+ char __data[128 - sizeof(sa_family_t)];
+};
+#endif /* if __LIBOSMOCORE_HAVE_SYS_SOCKET_H */
+
+#if __LIBOSMOCORE_HAVE_NETINET_IN_H
+ #include <netinet/in.h>
+#else
+/* Minimal netinet/in.h as per POSIX
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/netinet_in.h.html */
+#include <stdint.h>
+
+typedef uint32_t in_addr_t;
+struct in_addr {
+ in_addr_t s_addr;
+};
+
+typedef uint16_t in_port_t;
+
+struct in6_addr {
+ union {
+ uint8_t __u6_addr8[16];
+ uint16_t __u6_addr16[8];
+ uint32_t __u6_addr32[4];
+ } __in6_u;
+ #define s6_addr __in6_u.__u6_addr8
+ #define s6_addr16 __in6_u.__u6_addr16
+ #define s6_addr32 __in6_u.__u6_addr32
+};
+
+#define INET_ADDRSTRLEN 16
+#define INET6_ADDRSTRLEN 46
+
+struct sockaddr_in {
+ sa_family_t sin_family;
+ in_port_t sin_port;
+ struct in_addr sin_addr;
+ unsigned char sin_zero[sizeof (struct sockaddr)
+ - sizeof (sa_family_t)
+ - sizeof (in_port_t)
+ - sizeof (struct in_addr)];
+};
+
+struct sockaddr_in6 {
+ sa_family_t sin6_family;
+ in_port_t sin6_port;
+ uint32_t sin6_flowinfo;
+ struct in6_addr sin6_addr;
+ uint32_t sin6_scope_id;
+};
+
+#endif /* if __LIBOSMOCORE_HAVE_NETINET_IN_H */
--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/41931?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I5b10e09770727c72812af15360ab3385b957509b
Gerrit-Change-Number: 41931
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>