case AF_INET:
-#if defined(NGX_HAVE_FSTACK)
- /****
- FreeBSD define IP_BINDANY in freebsd/netinet/in.h
- Fstack should only support IP_BINDANY.
- ****/
- if(is_fstack_fd(s)){
- optname = IP_BINDANY;
- } else {
- optname = IP_TRANSPARENT;
- }
-
- if (setsockopt(s, IPPROTO_IP, optname,
+#if defined(IP_TRANSPARENT)
+ if (setsockopt(s, IPPROTO_IP, IP_TRANSPARENT,
(const void *) &value, sizeof(int)) == -1)
{
ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
- "setsockopt(IP_BINDANY/IP_TRANSPARENT) failed");
+ "setsockopt(IP_TRANSPARENT) failed");
return NGX_ERROR;
}
-#elif defined(IP_TRANSPARENT)
- if (setsockopt(s, IPPROTO_IP, IP_TRANSPARENT,
+#elif defined(IP_BINDANY)
+
+ if (setsockopt(s, IPPROTO_IP, IP_BINDANY,
(const void *) &value, sizeof(int)) == -1)
{
ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
- "setsockopt(IP_TRANSPARENT) failed");
+ "setsockopt(IP_BINDANY) failed");
return NGX_ERROR;
}
case AF_INET:
-#if defined(NGX_HAVE_FSTACK)
- /****
- FreeBSD define IP_BINDANY in freebsd/netinet/in.h
- Fstack should only support IP_BINDANY.
- ****/
- if(is_fstack_fd(s)){
- optname = IP_BINDANY;
- } else {
- optname = IP_TRANSPARENT;
- }
-
- if (setsockopt(s, IPPROTO_IP, optname,
+#if defined(IP_TRANSPARENT)
+ if (setsockopt(s, IPPROTO_IP, IP_TRANSPARENT,
(const void *) &value, sizeof(int)) == -1)
{
ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
- "setsockopt(IP_BINDANY/IP_TRANSPARENT) failed");
+ "setsockopt(IP_TRANSPARENT) failed");
return NGX_ERROR;
}
-#elif defined(IP_TRANSPARENT)
- if (setsockopt(s, IPPROTO_IP, IP_TRANSPARENT,
+#elif defined(IP_BINDANY)
+
+ if (setsockopt(s, IPPROTO_IP, IP_BINDANY,
(const void *) &value, sizeof(int)) == -1)
{
ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
- "setsockopt(IP_TRANSPARENT) failed");
+ "setsockopt(IP_BINDANY) failed");
return NGX_ERROR;
}
#define LINUX_IPV6_V6ONLY 26
#define LINUX_IPV6_RECVPKTINFO 49
+#define LINUX_IPV6_PKTINFO 50
#define LINUX_IPV6_TRANSPARENT 75
#define LINUX_TCP_NODELAY 1
break;
}
+ break;
+ case IPPROTO_IPV6:
+ switch (linux_cmsg->cmsg_type) {
+ case LINUX_IPV6_PKTINFO:
+ freebsd_cmsg->cmsg_type = IPV6_PKTINFO;
+ *freebsd_optval = *(struct in6_pktinfo *)linux_optval;
+ break;
+ default:
+ memcpy(freebsd_optval, linux_optval, linux_cmsg->cmsg_len - sizeof(struct linux_cmsghdr));
+ break;
+ }
break;
default:
memcpy(freebsd_optval, linux_optval, linux_cmsg->cmsg_len - sizeof(struct linux_cmsghdr));