diff --git a/config.h.in b/config.h.in index 9f03ce4a..02e63fdf 100644 --- a/config.h.in +++ b/config.h.in @@ -79,6 +79,16 @@ /* Define to 1 if you have the `socket' library (-lsocket). */ #undef HAVE_LIBSOCKET +/* Define to 1 if you have the header file. */ +#undef HAVE_LINUX_IF_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_LINUX_NETFILTER_IPV4_H + +/* Define to 1 if you have the header + file. */ +#undef HAVE_LINUX_NETFILTER_IPV6_IP6_TABLES_H + /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H diff --git a/configure b/configure index 27274018..073b13cd 100755 --- a/configure +++ b/configure @@ -13290,6 +13290,35 @@ else as_fn_error $? "Missing MinGW headers" "$LINENO" 5 fi +done + + ;; + *-linux*) + for ac_header in linux/if.h linux/netfilter_ipv4.h linux/netfilter_ipv6/ip6_tables.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" " + #if HAVE_LIMITS_H + #include + #endif + /* Netfilter ip(6)tables v1.4.0 has broken headers */ + #if HAVE_NETINET_IN_H + #include + #endif + #if HAVE_LINUX_IF_H + #include + #endif + +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +else + as_fn_error $? "Missing netfilter headers" "$LINENO" 5 +fi + done ;; diff --git a/configure.ac b/configure.ac index 08cf0bd7..d8525f87 100755 --- a/configure.ac +++ b/configure.ac @@ -119,6 +119,23 @@ case $host in *-mingw*) AC_CHECK_HEADERS([windows.h winsock2.h ws2tcpip.h], [], [AC_MSG_ERROR([Missing MinGW headers])], []) ;; + *-linux*) + dnl Checks for netfilter headers + AC_CHECK_HEADERS([linux/if.h linux/netfilter_ipv4.h linux/netfilter_ipv6/ip6_tables.h], + [], [AC_MSG_ERROR([Missing netfilter headers])], + [[ + #if HAVE_LIMITS_H + #include + #endif + /* Netfilter ip(6)tables v1.4.0 has broken headers */ + #if HAVE_NETINET_IN_H + #include + #endif + #if HAVE_LINUX_IF_H + #include + #endif + ]]) + ;; *) # These are POSIX-like systems using BSD-like sockets API. ;; diff --git a/src/redir.c b/src/redir.c index 5f2c7c5e..7e445193 100644 --- a/src/redir.c +++ b/src/redir.c @@ -60,6 +60,10 @@ #define BUF_SIZE 2048 #endif +#ifndef IP6T_SO_ORIGINAL_DST +#define IP6T_SO_ORIGINAL_DST 80 +#endif + int getdestaddr(int fd, struct sockaddr_storage *destaddr) { socklen_t socklen = sizeof(*destaddr);