include: Add linux/socket.h
authorTobias Brunner <tobias@strongswan.org>
Mon, 7 Sep 2015 10:04:55 +0000 (12:04 +0200)
committerTobias Brunner <tobias@strongswan.org>
Mon, 7 Sep 2015 12:07:46 +0000 (14:07 +0200)
__kernel_sa_family_t is defined and used since Linux 3.1, so on systems
with older kernels (like CentOS 6.7, which still ships a 2.6.32 kernel) the
build with the current UAPI headers fails.  And using the native headers on
such system does not really work either because we use structs, defines, and
enum values from the newer headers in the kernel-netlink plugin.

__kernel_sa_family_t is defined in linux/socket.h so we ship that too (in
particular the simplified UAPI version from Linux 3.7+).

Fixes #1099.

src/include/Makefile.am
src/include/linux/socket.h [new file with mode: 0644]

index 0284c09..8e6db88 100644 (file)
@@ -1,2 +1,2 @@
 EXTRA_DIST = linux/if_alg.h linux/ipsec.h linux/netlink.h linux/rtnetlink.h \
-             linux/pfkeyv2.h linux/udp.h linux/xfrm.h sys/queue.h
+             linux/pfkeyv2.h linux/udp.h linux/socket.h linux/xfrm.h sys/queue.h
diff --git a/src/include/linux/socket.h b/src/include/linux/socket.h
new file mode 100644 (file)
index 0000000..76ab0c6
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef _UAPI_LINUX_SOCKET_H
+#define _UAPI_LINUX_SOCKET_H
+
+/*
+ * Desired design of maximum size and alignment (see RFC2553)
+ */
+#define _K_SS_MAXSIZE  128     /* Implementation specific max size */
+#define _K_SS_ALIGNSIZE        (__alignof__ (struct sockaddr *))
+                               /* Implementation specific desired alignment */
+
+typedef unsigned short __kernel_sa_family_t;
+
+struct __kernel_sockaddr_storage {
+       __kernel_sa_family_t    ss_family;              /* address family */
+       /* Following field(s) are implementation specific */
+       char            __data[_K_SS_MAXSIZE - sizeof(unsigned short)];
+                               /* space to achieve desired size, */
+                               /* _SS_MAXSIZE value minus size of ss_family */
+} __attribute__ ((aligned(_K_SS_ALIGNSIZE)));  /* force desired alignment */
+
+#endif /* _UAPI_LINUX_SOCKET_H */