eal/windows: improve compatibility networking headers
authorDmitry Kozlyuk <dmitry.kozliuk@gmail.com>
Mon, 28 Sep 2020 21:50:50 +0000 (00:50 +0300)
committerThomas Monjalon <thomas@monjalon.net>
Wed, 14 Oct 2020 22:39:10 +0000 (00:39 +0200)
Extend compatibility header system to support librte_cmdline.

pthread.h has to include windows.h, which exposes struct in_addr, etc.
conflicting with compatibility headers. WIN32_LEAN_AND_MEAN macro
is required to disable this behavior. Use rte_windows.h to define
WIN32_LEAN_AND_MEAN for pthread library.

Signed-off-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
lib/librte_eal/windows/include/arpa/inet.h [new file with mode: 0644]
lib/librte_eal/windows/include/netinet/in.h
lib/librte_eal/windows/include/sys/socket.h [new file with mode: 0644]

diff --git a/lib/librte_eal/windows/include/arpa/inet.h b/lib/librte_eal/windows/include/arpa/inet.h
new file mode 100644 (file)
index 0000000..96b6984
--- /dev/null
@@ -0,0 +1,30 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (c) 2020 Dmitry Kozlyuk
+ */
+
+#ifndef _ARPA_INET_H_
+#define _ARPA_INET_H_
+
+/**
+ * @file
+ *
+ * Compatibility header
+ *
+ * Although symbols declared here are present on Windows,
+ * including <winsock2.h> would expose too much macros breaking common code.
+ */
+
+#include <netinet/in.h>
+#include <sys/socket.h>
+
+/* defined in ws2_32.dll */
+__attribute__((stdcall))
+int
+inet_pton(int af, const char *src, void *dst);
+
+/* defined in ws2_32.dll */
+__attribute__((stdcall))
+const char *
+inet_ntop(int af, const void *src, char *dst, socklen_t size);
+
+#endif /* _ARPA_INET_H_ */
index 534a2d9..be1469e 100644 (file)
@@ -5,6 +5,8 @@
 #ifndef _IN_H_
 #define _IN_H_
 
+#include <sys/socket.h>
+
 #define IPPROTO_IP         0
 #define IPPROTO_HOPOPTS    0
 #define IPPROTO_ICMP       1
 #define IPPROTO_DSTOPTS   60
 #define IPPROTO_SCTP     132
 
+#define INET6_ADDRSTRLEN 46
+
+struct in_addr {
+       uint32_t s_addr;
+};
+
+struct in6_addr {
+       uint8_t s6_addr[16];
+};
+
 #endif
diff --git a/lib/librte_eal/windows/include/sys/socket.h b/lib/librte_eal/windows/include/sys/socket.h
new file mode 100644 (file)
index 0000000..9536cf8
--- /dev/null
@@ -0,0 +1,24 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (c) 2020 Dmitry Kozlyuk
+ */
+
+#ifndef _SYS_SOCKET_H_
+#define _SYS_SOCKET_H_
+
+/**
+ * @file
+ *
+ * Compatibility header
+ *
+ * Although symbols declared here are present on Windows,
+ * including <winsock2.h> would expose too much macros breaking common code.
+ */
+
+#include <stddef.h>
+
+#define AF_INET  2
+#define AF_INET6 23
+
+typedef size_t socklen_t;
+
+#endif /* _SYS_SOCKET_H_ */