Skip to content

Commit f506f9f

Browse files
authored
Merge pull request #943 from wenchengji159357/dev
f-stack socket options
2 parents 1855ece + 1a85dfd commit f506f9f

File tree

3 files changed

+26
-32
lines changed

3 files changed

+26
-32
lines changed

app/nginx-1.25.2/src/event/ngx_event_connect.c

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -386,31 +386,22 @@ ngx_event_connect_set_transparent(ngx_peer_connection_t *pc, ngx_socket_t s)
386386

387387
case AF_INET:
388388

389-
#if defined(NGX_HAVE_FSTACK)
390-
/****
391-
FreeBSD define IP_BINDANY in freebsd/netinet/in.h
392-
Fstack should only support IP_BINDANY.
393-
****/
394-
if(is_fstack_fd(s)){
395-
optname = IP_BINDANY;
396-
} else {
397-
optname = IP_TRANSPARENT;
398-
}
399-
400-
if (setsockopt(s, IPPROTO_IP, optname,
389+
#if defined(IP_TRANSPARENT)
390+
if (setsockopt(s, IPPROTO_IP, IP_TRANSPARENT,
401391
(const void *) &value, sizeof(int)) == -1)
402392
{
403393
ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
404-
"setsockopt(IP_BINDANY/IP_TRANSPARENT) failed");
394+
"setsockopt(IP_TRANSPARENT) failed");
405395
return NGX_ERROR;
406396
}
407397

408-
#elif defined(IP_TRANSPARENT)
409-
if (setsockopt(s, IPPROTO_IP, IP_TRANSPARENT,
398+
#elif defined(IP_BINDANY)
399+
400+
if (setsockopt(s, IPPROTO_IP, IP_BINDANY,
410401
(const void *) &value, sizeof(int)) == -1)
411402
{
412403
ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
413-
"setsockopt(IP_TRANSPARENT) failed");
404+
"setsockopt(IP_BINDANY) failed");
414405
return NGX_ERROR;
415406
}
416407

app/nginx-1.28.0/src/event/ngx_event_connect.c

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -386,31 +386,22 @@ ngx_event_connect_set_transparent(ngx_peer_connection_t *pc, ngx_socket_t s)
386386

387387
case AF_INET:
388388

389-
#if defined(NGX_HAVE_FSTACK)
390-
/****
391-
FreeBSD define IP_BINDANY in freebsd/netinet/in.h
392-
Fstack should only support IP_BINDANY.
393-
****/
394-
if(is_fstack_fd(s)){
395-
optname = IP_BINDANY;
396-
} else {
397-
optname = IP_TRANSPARENT;
398-
}
399-
400-
if (setsockopt(s, IPPROTO_IP, optname,
389+
#if defined(IP_TRANSPARENT)
390+
if (setsockopt(s, IPPROTO_IP, IP_TRANSPARENT,
401391
(const void *) &value, sizeof(int)) == -1)
402392
{
403393
ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
404-
"setsockopt(IP_BINDANY/IP_TRANSPARENT) failed");
394+
"setsockopt(IP_TRANSPARENT) failed");
405395
return NGX_ERROR;
406396
}
407397

408-
#elif defined(IP_TRANSPARENT)
409-
if (setsockopt(s, IPPROTO_IP, IP_TRANSPARENT,
398+
#elif defined(IP_BINDANY)
399+
400+
if (setsockopt(s, IPPROTO_IP, IP_BINDANY,
410401
(const void *) &value, sizeof(int)) == -1)
411402
{
412403
ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
413-
"setsockopt(IP_TRANSPARENT) failed");
404+
"setsockopt(IP_BINDANY) failed");
414405
return NGX_ERROR;
415406
}
416407

lib/ff_syscall_wrapper.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@
101101

102102
#define LINUX_IPV6_V6ONLY 26
103103
#define LINUX_IPV6_RECVPKTINFO 49
104+
#define LINUX_IPV6_PKTINFO 50
104105
#define LINUX_IPV6_TRANSPARENT 75
105106

106107
#define LINUX_TCP_NODELAY 1
@@ -807,6 +808,17 @@ linux2freebsd_cmsg(const struct linux_msghdr *linux_msg, struct msghdr *freebsd_
807808
break;
808809
}
809810

811+
break;
812+
case IPPROTO_IPV6:
813+
switch (linux_cmsg->cmsg_type) {
814+
case LINUX_IPV6_PKTINFO:
815+
freebsd_cmsg->cmsg_type = IPV6_PKTINFO;
816+
*freebsd_optval = *(struct in6_pktinfo *)linux_optval;
817+
break;
818+
default:
819+
memcpy(freebsd_optval, linux_optval, linux_cmsg->cmsg_len - sizeof(struct linux_cmsghdr));
820+
break;
821+
}
810822
break;
811823
default:
812824
memcpy(freebsd_optval, linux_optval, linux_cmsg->cmsg_len - sizeof(struct linux_cmsghdr));

0 commit comments

Comments
 (0)