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]>

Reply via email to