]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: tproxy: add support for OpenBSD
authorPieter Baauw <piba.nl.dev@gmail.com>
Wed, 8 May 2013 21:30:23 +0000 (23:30 +0200)
committerWilly Tarreau <w@1wt.eu>
Sat, 11 May 2013 06:03:50 +0000 (08:03 +0200)
OpenBSD uses (SOL_SOCKET, SO_BINDANY) to enable transparent
proxy on a socket.

This patch adds support for the relevant setsockopt() calls.

include/common/compat.h
src/haproxy.c
src/proto_tcp.c

index efc2a6e043bf05960b76cefd0322bd093a6e4c7e..0085a3aa1bc0f8f6c6f34768c647a4fccad3a98a 100644 (file)
@@ -96,6 +96,7 @@
 #if defined(IP_FREEBIND)       \
  || defined(IP_BINDANY)        \
  || defined(IPV6_BINDANY)      \
+ || defined(SO_BINDANY)        \
  || defined(IP_TRANSPARENT)    \
  || defined(IPV6_TRANSPARENT)
 #define CONFIG_HAP_TRANSPARENT
index ee0bd6581571aea1f2c703333723cd45100c7f78..5b5bea4c64b47d266f6bb474bd042c67f689e675 100644 (file)
@@ -332,6 +332,9 @@ void display_build_opts()
 #endif
 #if defined(IPV6_BINDANY)
               " IPV6_BINDANY"
+#endif
+#if defined(SO_BINDANY)
+              " SO_BINDANY"
 #endif
               "\n");
 #endif
index 0ae359a767dbb69baad8c6760a58fa193819d0c9..5638257c4aef61db6702872bb557e6310c4c2516 100644 (file)
@@ -141,6 +141,9 @@ int tcp_bind_socket(int fd, int flags, struct sockaddr_storage *local, struct so
 #endif
 #if defined(IP_BINDANY)
                            || (setsockopt(fd, IPPROTO_IP, IP_BINDANY, &one, sizeof(one)) == 0)
+#endif
+#if defined(SO_BINDANY)
+                           || (setsockopt(fd, SOL_SOCKET, SO_BINDANY, &one, sizeof(one)) == 0)
 #endif
                            )
                                foreign_ok = 1;
@@ -156,6 +159,9 @@ int tcp_bind_socket(int fd, int flags, struct sockaddr_storage *local, struct so
 #endif
 #if defined(IPV6_BINDANY)
                            || (setsockopt(fd, IPPROTO_IPV6, IPV6_BINDANY, &one, sizeof(one)) == 0)
+#endif
+#if defined(SO_BINDANY)
+                           || (setsockopt(fd, SOL_SOCKET, SO_BINDANY, &one, sizeof(one)) == 0)
 #endif
                            )
                                foreign_ok = 1;
@@ -653,6 +659,9 @@ int tcp_bind_listener(struct listener *listener, char *errmsg, int errlen)
 #endif
 #if defined(IP_BINDANY)
                            && (setsockopt(fd, IPPROTO_IP, IP_BINDANY, &one, sizeof(one)) == -1)
+#endif
+#if defined(SO_BINDANY)
+                           && (setsockopt(fd, SOL_SOCKET, SO_BINDANY, &one, sizeof(one)) == -1)
 #endif
                            ) {
                                msg = "cannot make listening socket transparent";
@@ -666,6 +675,9 @@ int tcp_bind_listener(struct listener *listener, char *errmsg, int errlen)
 #endif
 #if defined(IPV6_BINDANY)
                            && (setsockopt(fd, IPPROTO_IPV6, IPV6_BINDANY, &one, sizeof(one)) == -1)
+#endif
+#if defined(SO_BINDANY)
+                           && (setsockopt(fd, SOL_SOCKET, SO_BINDANY, &one, sizeof(one)) == -1)
 #endif
                            ) {
                                msg = "cannot make listening socket transparent";