summaryrefslogtreecommitdiff
path: root/contrib/ports/unix/posixlib
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ports/unix/posixlib')
-rw-r--r--contrib/ports/unix/posixlib/CMakeLists.txt94
-rw-r--r--contrib/ports/unix/posixlib/Uninstall.cmake22
-rw-r--r--contrib/ports/unix/posixlib/include/posix/inet.h76
-rw-r--r--contrib/ports/unix/posixlib/include/posix/sockets.h150
-rw-r--r--contrib/ports/unix/posixlib/lwipopts.h180
5 files changed, 522 insertions, 0 deletions
diff --git a/contrib/ports/unix/posixlib/CMakeLists.txt b/contrib/ports/unix/posixlib/CMakeLists.txt
new file mode 100644
index 00000000000..cf35f7e7210
--- /dev/null
+++ b/contrib/ports/unix/posixlib/CMakeLists.txt
@@ -0,0 +1,94 @@
+cmake_minimum_required(VERSION 3.8)
+project(liblwip
+ VERSION 2.2.0
+ DESCRIPTION "lwip library for linux"
+ HOMEPAGE_URL "http://wiki.virtualsquare.org"
+ LANGUAGES C)
+
+include(GNUInstallDirs)
+include(CheckIncludeFile)
+
+set (BUILD_SHARED_LIBS ON)
+
+if (NOT CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ message(FATAL_ERROR "Lwip shared library is only working on Linux or the Hurd")
+endif()
+
+set(LWIP_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../..)
+
+find_library(LIB_VDEPLUGOK vdeplug)
+check_include_file(libvdeplug.h INCLUDE_VDEPLUGOK)
+if (LIB_VDEPLUGOK AND INCLUDE_VDEPLUGOK)
+ message(STATUS "Found libvdeplug: vde support added")
+else()
+ message(STATUS "Libvdeplug needs to be installed to add vde support")
+endif()
+
+include(${LWIP_DIR}/contrib/ports/CMakeCommon.cmake)
+
+set (LWIP_DEFINITIONS -DLWIP_DEBUG)
+set (LWIP_INCLUDE_DIRS
+ "include"
+ "${LWIP_DIR}/src/include"
+ "${LWIP_CONTRIB_DIR}/"
+ "${LWIP_CONTRIB_DIR}/ports/unix/port/include"
+ "${CMAKE_CURRENT_SOURCE_DIR}/"
+)
+
+set (LWIP_EXCLUDE_SLIPIF TRUE)
+include(${LWIP_CONTRIB_DIR}/ports/unix/Filelists.cmake)
+include(${LWIP_DIR}/src/Filelists.cmake)
+if (LIB_VDEPLUGOK AND INCLUDE_VDEPLUGOK)
+set(lwipnoapps_SRCS ${lwipnoapps_SRCS}
+ ${LWIP_DIR}/contrib/ports/unix/port/netif/vdeif.c)
+endif()
+
+add_library(lwip ${lwipnoapps_SRCS} ${lwipcontribportunix_SRCS} ${lwipcontribportunixnetifs_SRCS})
+target_compile_options(lwip PRIVATE ${LWIP_COMPILER_FLAGS})
+target_compile_definitions(lwip PRIVATE ${LWIP_DEFINITIONS} ${LWIP_MBEDTLS_DEFINITIONS})
+target_include_directories(lwip PRIVATE ${LWIP_INCLUDE_DIRS} ${LWIP_MBEDTLS_INCLUDE_DIRS})
+if (LIB_VDEPLUGOK AND INCLUDE_VDEPLUGOK)
+ target_link_libraries(lwip ${LWIP_SANITIZER_LIBS} vdeplug)
+else()
+ target_link_libraries(lwip ${LWIP_SANITIZER_LIBS})
+endif()
+
+find_library(LIBPTHREAD pthread)
+target_link_libraries(lwip ${LIBPTHREAD})
+
+install(TARGETS lwip
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+
+set_target_properties(lwip PROPERTIES VERSION ${PROJECT_VERSION}
+ SOVERSION ${PROJECT_VERSION_MAJOR})
+
+install(DIRECTORY "${LWIP_DIR}/src/include/lwip"
+ DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/lwip"
+ FILES_MATCHING PATTERN "*.h"
+)
+
+install(DIRECTORY "${LWIP_DIR}/src/include/netif"
+ DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/lwip"
+ FILES_MATCHING PATTERN "*.h"
+)
+
+install(FILES lwipopts.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/lwip")
+
+install(DIRECTORY "${LWIP_DIR}/contrib/ports/unix/port/include/arch"
+ DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/lwip"
+ FILES_MATCHING PATTERN "*.h"
+)
+
+install(DIRECTORY "${LWIP_DIR}/contrib/ports/unix/port/include/netif"
+ DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/lwip"
+ FILES_MATCHING PATTERN "*.h"
+)
+
+install(DIRECTORY "${LWIP_DIR}/contrib/ports/unix/linuxlib/include/posix"
+ DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/lwip"
+ FILES_MATCHING PATTERN "*.h"
+)
+
+add_custom_target(uninstall
+ "${CMAKE_COMMAND}" -P "${PROJECT_SOURCE_DIR}/Uninstall.cmake")
+
diff --git a/contrib/ports/unix/posixlib/Uninstall.cmake b/contrib/ports/unix/posixlib/Uninstall.cmake
new file mode 100644
index 00000000000..466ee4ea86f
--- /dev/null
+++ b/contrib/ports/unix/posixlib/Uninstall.cmake
@@ -0,0 +1,22 @@
+cmake_minimum_required(VERSION 3.13)
+set(MANIFEST "${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt")
+
+if(NOT EXISTS ${MANIFEST})
+ message(FATAL_ERROR "Cannot find install manifest: '${MANIFEST}'")
+endif()
+
+file(STRINGS ${MANIFEST} files)
+foreach(file ${files})
+ if(EXISTS ${file} OR IS_SYMLINK ${file})
+ message(STATUS "Removing: ${file}")
+
+ execute_process(
+ COMMAND rm -f ${file}
+ RESULT_VARIABLE retcode
+ )
+
+ if(NOT "${retcode}" STREQUAL "0")
+ message(WARNING "Failed to remove: ${file}")
+ endif()
+ endif()
+endforeach(file)
diff --git a/contrib/ports/unix/posixlib/include/posix/inet.h b/contrib/ports/unix/posixlib/include/posix/inet.h
new file mode 100644
index 00000000000..c7bc124916d
--- /dev/null
+++ b/contrib/ports/unix/posixlib/include/posix/inet.h
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2023 Joan Lledó <jlledom@member.fsf.org>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ */
+
+#ifndef HURD_LWIP_POSIX_INET_H
+#define HURD_LWIP_POSIX_INET_H
+
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+#include <netinet/udp.h>
+#include <sys/ioctl.h>
+#include <fcntl.h>
+#include <net/if.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if LWIP_IPV4
+
+#define inet_addr_from_ip4addr(target_inaddr, source_ipaddr) ((target_inaddr)->s_addr = ip4_addr_get_u32(source_ipaddr))
+#define inet_addr_to_ip4addr(target_ipaddr, source_inaddr) (ip4_addr_set_u32(target_ipaddr, (source_inaddr)->s_addr))
+
+#ifdef LWIP_UNIX_HURD
+#define IP_PKTINFO 8
+
+struct in_pktinfo {
+ unsigned int ipi_ifindex; /* Interface index */
+ struct in_addr ipi_addr; /* Destination (from header) address */
+};
+#endif /* LWIP_UNIX_HURD */
+
+#endif /* LWIP_IPV4 */
+
+#if LWIP_IPV6
+#define inet6_addr_from_ip6addr(target_in6addr, source_ip6addr) {(target_in6addr)->s6_addr32[0] = (source_ip6addr)->addr[0]; \
+ (target_in6addr)->s6_addr32[1] = (source_ip6addr)->addr[1]; \
+ (target_in6addr)->s6_addr32[2] = (source_ip6addr)->addr[2]; \
+ (target_in6addr)->s6_addr32[3] = (source_ip6addr)->addr[3];}
+#define inet6_addr_to_ip6addr(target_ip6addr, source_in6addr) {(target_ip6addr)->addr[0] = (source_in6addr)->s6_addr32[0]; \
+ (target_ip6addr)->addr[1] = (source_in6addr)->s6_addr32[1]; \
+ (target_ip6addr)->addr[2] = (source_in6addr)->s6_addr32[2]; \
+ (target_ip6addr)->addr[3] = (source_in6addr)->s6_addr32[3]; \
+ ip6_addr_clear_zone(target_ip6addr);}
+/* ATTENTION: the next define only works because both in6_addr and ip6_addr_t are an u32_t[4] effectively! */
+#define inet6_addr_to_ip6addr_p(target_ip6addr_p, source_in6addr) ((target_ip6addr_p) = (ip6_addr_t*)(source_in6addr))
+#endif /* LWIP_IPV6 */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* HURD_LWIP_POSIX_INET_H */
diff --git a/contrib/ports/unix/posixlib/include/posix/sockets.h b/contrib/ports/unix/posixlib/include/posix/sockets.h
new file mode 100644
index 00000000000..f390066616a
--- /dev/null
+++ b/contrib/ports/unix/posixlib/include/posix/sockets.h
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2023 Joan Lledó <jlledom@member.fsf.org>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ */
+
+#ifndef HURD_LWIP_POSIX_SOCKET_H
+#define HURD_LWIP_POSIX_SOCKET_H
+
+#include <sys/socket.h>
+#include <poll.h>
+#include <errno.h>
+#include LWIP_SOCKET_EXTERNAL_HEADER_INET_H
+typedef size_t msg_iovlen_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _HAVE_SA_LEN
+#define HAVE_SA_LEN _HAVE_SA_LEN
+#else
+#define HAVE_SA_LEN 0
+#endif /* _HAVE_SA_LEN */
+
+/* Address length safe read and write */
+#if HAVE_SA_LEN
+#define IP4ADDR_SOCKADDR_SET_LEN(sin) \
+ (sin)->sin_len = sizeof(struct sockaddr_in)
+#define IP6ADDR_SOCKADDR_SET_LEN(sin6) \
+ (sin6)->sin6_len = sizeof(struct sockaddr_in6)
+#define IPADDR_SOCKADDR_GET_LEN(addr) \
+ (addr)->sa.sa_len
+#else
+#define IP4ADDR_SOCKADDR_SET_LEN(addr)
+#define IP6ADDR_SOCKADDR_SET_LEN(addr)
+#define IPADDR_SOCKADDR_GET_LEN(addr) \
+ ((addr)->sa.sa_family == AF_INET ? sizeof(struct sockaddr_in) \
+ : ((addr)->sa.sa_family == AF_INET6 ? sizeof(struct sockaddr_in6) : 0))
+#endif /* HAVE_SA_LEN */
+
+#define SIN_ZERO_LEN sizeof (struct sockaddr) - \
+ __SOCKADDR_COMMON_SIZE - \
+ sizeof (in_port_t) - \
+ sizeof (struct in_addr)
+
+#if !defined IOV_MAX
+#define IOV_MAX 0xFFFF
+#elif IOV_MAX > 0xFFFF
+#error "IOV_MAX larger than supported by LwIP"
+#endif /* IOV_MAX */
+
+#define LWIP_SELECT_MAXNFDS (FD_SETSIZE + LWIP_SOCKET_OFFSET)
+
+#if LWIP_UDP && LWIP_UDPLITE
+/*
+ * Options for level IPPROTO_UDPLITE
+ */
+#define UDPLITE_SEND_CSCOV 0x01 /* sender checksum coverage */
+#define UDPLITE_RECV_CSCOV 0x02 /* minimal receiver checksum coverage */
+#endif /* LWIP_UDP && LWIP_UDPLITE*/
+
+#if 0
+void lwip_socket_thread_init(void); /* LWIP_NETCONN_SEM_PER_THREAD==1: initialize thread-local semaphore */
+void lwip_socket_thread_cleanup(void); /* LWIP_NETCONN_SEM_PER_THREAD==1: destroy thread-local semaphore */
+
+int lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen);
+int lwip_bind(int s, const struct sockaddr *name, socklen_t namelen);
+int lwip_shutdown(int s, int how);
+int lwip_getpeername (int s, struct sockaddr *name, socklen_t *namelen);
+int lwip_getsockname (int s, struct sockaddr *name, socklen_t *namelen);
+int lwip_getsockopt (int s, int level, int optname, void *optval, socklen_t *optlen);
+int lwip_setsockopt (int s, int level, int optname, const void *optval, socklen_t optlen);
+ int lwip_close(int s);
+int lwip_connect(int s, const struct sockaddr *name, socklen_t namelen);
+int lwip_listen(int s, int backlog);
+ssize_t lwip_recv(int s, void *mem, size_t len, int flags);
+ssize_t lwip_read(int s, void *mem, size_t len);
+ssize_t lwip_readv(int s, const struct iovec *iov, int iovcnt);
+ssize_t lwip_recvfrom(int s, void *mem, size_t len, int flags,
+ struct sockaddr *from, socklen_t *fromlen);
+ssize_t lwip_recvmsg(int s, struct msghdr *message, int flags);
+ssize_t lwip_send(int s, const void *dataptr, size_t size, int flags);
+ssize_t lwip_sendmsg(int s, const struct msghdr *message, int flags);
+ssize_t lwip_sendto(int s, const void *dataptr, size_t size, int flags,
+ const struct sockaddr *to, socklen_t tolen);
+int lwip_socket(int domain, int type, int protocol);
+ssize_t lwip_write(int s, const void *dataptr, size_t size);
+ssize_t lwip_writev(int s, const struct iovec *iov, int iovcnt);
+#if LWIP_SOCKET_SELECT
+int lwip_select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset,
+ struct timeval *timeout);
+#endif
+#if LWIP_SOCKET_POLL
+int lwip_poll(struct pollfd *fds, nfds_t nfds, int timeout);
+#endif
+int lwip_ioctl(int s, long cmd, void *argp);
+int lwip_fcntl(int s, int cmd, int val);
+const char *lwip_inet_ntop(int af, const void *src, char *dst, socklen_t size);
+int lwip_inet_pton(int af, const char *src, void *dst);
+#endif
+
+/* Unsuported indetifiers */
+#ifndef SO_NO_CHECK
+#define SO_NO_CHECK 0xFF
+#endif
+#ifndef SO_BINDTODEVICE
+#define SO_BINDTODEVICE 0xFE
+#endif
+#ifndef MSG_MORE
+#define MSG_MORE 0x0
+#endif
+#ifndef TCP_KEEPALIVE
+#define TCP_KEEPALIVE 0xFF
+#endif
+#ifndef TCP_KEEPIDLE
+#define TCP_KEEPIDLE 0xFE
+#endif
+#ifndef TCP_KEEPINTVL
+#define TCP_KEEPINTVL 0xFD
+#endif
+#ifndef TCP_KEEPCNT
+#define TCP_KEEPCNT 0xFC
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* HURD_LWIP_POSIX_SOCKET_H */
diff --git a/contrib/ports/unix/posixlib/lwipopts.h b/contrib/ports/unix/posixlib/lwipopts.h
new file mode 100644
index 00000000000..1b38aa3aef1
--- /dev/null
+++ b/contrib/ports/unix/posixlib/lwipopts.h
@@ -0,0 +1,180 @@
+/*
+ * Copyright (C) 2023 Joan Lledó <jlledom@member.fsf.org>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ */
+
+#ifndef UNIX_LWIP_LWIPOPTS_H
+#define UNIX_LWIP_LWIPOPTS_H
+
+/* An OS is present */
+#define NO_SYS 0
+
+/* Sockets API config */
+#define LWIP_COMPAT_SOCKETS 0
+#define LWIP_SOCKET_OFFSET 1
+#define LWIP_POLL 1
+
+/* User posix socket headers */
+#define LWIP_SOCKET_EXTERNAL_HEADERS 1
+#define LWIP_SOCKET_EXTERNAL_HEADER_SOCKETS_H "posix/sockets.h"
+#define LWIP_SOCKET_EXTERNAL_HEADER_INET_H "posix/inet.h"
+#define LWIP_DONT_PROVIDE_BYTEORDER_FUNCTIONS 1
+
+/* Use Glibc malloc()/free() */
+#define MEM_LIBC_MALLOC 1
+#define MEMP_MEM_MALLOC 1
+#define MEM_USE_POOLS 0
+
+/* Only send complete packets to the device */
+#define LWIP_NETIF_TX_SINGLE_PBUF 1
+
+/* Randomize local ports */
+#define LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS 1
+
+/* Glibc sends more than one packet in a row during an ARP resolution */
+#define ARP_QUEUEING 1
+#define ARP_QUEUE_LEN 10
+
+/*
+ * Activate loopback, but don't use lwip's default loopback interface,
+ * we provide our own.
+ */
+#define LWIP_NETIF_LOOPBACK 1
+#define LWIP_HAVE_LOOPIF 0
+
+/* IPv4 stuff */
+#define IP_FORWARD 1
+
+/* SLAAC support and other IPv6 stuff */
+#define LWIP_IPV6_DUP_DETECT_ATTEMPTS 1
+#define LWIP_IPV6_SEND_ROUTER_SOLICIT 1
+#define LWIP_IPV6_AUTOCONFIG 1
+#define LWIP_IPV6_FORWARD 1
+#define MEMP_NUM_MLD6_GROUP 16
+#define LWIP_IPV6_NUM_ADDRESSES 6
+#define IPV6_FRAG_COPYHEADER 1
+
+/* TCP tuning */
+#define TCP_MSS 1460
+#define TCP_WND 0xFFFF
+#define LWIP_WND_SCALE 1
+#define TCP_RCV_SCALE 0x1
+#define TCP_SND_BUF TCP_WND
+
+/* Throughput settings */
+#define LWIP_CHECKSUM_ON_COPY 1
+
+/* Disable stats */
+#define LWIP_STATS 0
+#define LWIP_STATS_DISPLAY 0
+
+/* Enable all socket operations */
+#define LWIP_TCP_KEEPALIVE 1
+#define LWIP_SO_SNDTIMEO 1
+#define LWIP_SO_RCVTIMEO 1
+#define LWIP_SO_RCVBUF 1
+#define LWIP_SO_LINGER 1
+#define SO_REUSE 1
+#define LWIP_MULTICAST_TX_OPTIONS 1
+
+/* Enable modules */
+#define LWIP_ARP 1
+#define LWIP_ETHERNET 1
+#define LWIP_IPV4 1
+#define LWIP_ICMP 1
+#define LWIP_IGMP 1
+#define LWIP_RAW 1
+#define LWIP_UDP 1
+#define LWIP_UDPLITE 1
+#define LWIP_TCP 1
+#define LWIP_IPV6 1
+#define LWIP_ICMP6 1
+#define LWIP_IPV6_MLD 1
+
+/* Don't abort the whole stack when an error is detected */
+#define LWIP_NOASSERT_ON_ERROR 1
+
+/* Threading options */
+#define LWIP_TCPIP_CORE_LOCKING 1
+
+/* If the system is 64 bit */
+#if defined __LP64__
+#define MEM_ALIGNMENT 8
+#else
+#define MEM_ALIGNMENT 4
+#endif
+
+#if !NO_SYS
+void sys_check_core_locking(void);
+#define LWIP_ASSERT_CORE_LOCKED() sys_check_core_locking()
+#if 0
+void sys_mark_tcpip_thread(void);
+#define LWIP_MARK_TCPIP_THREAD() sys_mark_tcpip_thread()
+
+#if LWIP_TCPIP_CORE_LOCKING
+void sys_lock_tcpip_core(void);
+#define LOCK_TCPIP_CORE() sys_lock_tcpip_core()
+void sys_unlock_tcpip_core(void);
+#define UNLOCK_TCPIP_CORE() sys_unlock_tcpip_core()
+#endif
+#endif
+#endif
+
+/* Debug mode */
+#ifdef LWIP_DEBUG
+#define ETHARP_DEBUG LWIP_DBG_OFF
+#define NETIF_DEBUG LWIP_DBG_OFF
+#define PBUF_DEBUG LWIP_DBG_OFF
+#define API_LIB_DEBUG LWIP_DBG_OFF
+#define API_MSG_DEBUG LWIP_DBG_OFF
+#define SOCKETS_DEBUG LWIP_DBG_OFF
+#define ICMP_DEBUG LWIP_DBG_OFF
+#define IGMP_DEBUG LWIP_DBG_OFF
+#define INET_DEBUG LWIP_DBG_OFF
+#define IP_DEBUG LWIP_DBG_OFF
+#define IP_REASS_DEBUG LWIP_DBG_OFF
+#define RAW_DEBUG LWIP_DBG_OFF
+#define MEM_DEBUG LWIP_DBG_OFF
+#define MEMP_DEBUG LWIP_DBG_OFF
+#define SYS_DEBUG LWIP_DBG_OFF
+#define TIMERS_DEBUG LWIP_DBG_OFF
+#define TCP_DEBUG LWIP_DBG_OFF
+#define TCP_INPUT_DEBUG LWIP_DBG_OFF
+#define TCP_FR_DEBUG LWIP_DBG_OFF
+#define TCP_RTO_DEBUG LWIP_DBG_OFF
+#define TCP_CWND_DEBUG LWIP_DBG_OFF
+#define TCP_WND_DEBUG LWIP_DBG_OFF
+#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF
+#define TCP_RST_DEBUG LWIP_DBG_OFF
+#define TCP_QLEN_DEBUG LWIP_DBG_OFF
+#define UDP_DEBUG LWIP_DBG_OFF
+#define TCPIP_DEBUG LWIP_DBG_OFF
+#define SLIP_DEBUG LWIP_DBG_OFF
+#define DHCP_DEBUG LWIP_DBG_OFF
+#define AUTOIP_DEBUG LWIP_DBG_OFF
+#define DNS_DEBUG LWIP_DBG_OFF
+#define IP6_DEBUG LWIP_DBG_OFF
+#endif
+
+#endif /* UNIX_LWIP_LWIPOPTS_H */