Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:24
erlang
7718-erts-inet-drv-Fixed-membership-for-FreeBSD...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 7718-erts-inet-drv-Fixed-membership-for-FreeBSD.patch of Package erlang
From 097d67bc4ee1b3b8f05f7a9003e949cebdadb408 Mon Sep 17 00:00:00 2001 From: Micael Karlberg <bmk@erlang.org> Date: Mon, 16 May 2022 16:28:49 +0200 Subject: [PATCH 08/11] [erts|inet-drv] Fixed 'membership' for FreeBSD The options IPV6_[ADD|DROP]_MEMBERSHIP is called IPV6_[JOIN|LEAVE]_GROUP on (at least) FreeBSD. OTP-18091 --- erts/emulator/drivers/common/inet_drv.c | 45 ++++++++++++++++++++----- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/erts/emulator/drivers/common/inet_drv.c b/erts/emulator/drivers/common/inet_drv.c index 850a36be8d..8596b07c88 100644 --- a/erts/emulator/drivers/common/inet_drv.c +++ b/erts/emulator/drivers/common/inet_drv.c @@ -1065,6 +1065,26 @@ typedef union { } inet_address; +/* On some platforms, for instance FreeBSD, this option is instead + * called IPV6_JOIN_GROUP and IPV6_JOIN_GROUP. */ + +#if defined(HAVE_IN6) + +#if defined(IPV6_ADD_MEMBERSHIP) +#define INET_ADD_MEMBERSHIP IPV6_ADD_MEMBERSHIP +#elif defined(IPV6_JOIN_GROUP) +#define INET_ADD_MEMBERSHIP IPV6_JOIN_GROUP +#endif + +#if defined(IPV6_DROP_MEMBERSHIP) +#define INET_DROP_MEMBERSHIP IPV6_DROP_MEMBERSHIP +#elif defined(IPV6_LEAVE_GROUP) +#define INET_DROP_MEMBERSHIP IPV6_LEAVE_GROUP +#endif + +#endif + + #define inet_address_port(x) \ ((((x)->sai.sin_family == AF_INET) || \ ((x)->sai.sin_family == AF_INET6)) ? \ @@ -7171,7 +7191,11 @@ static int inet_set_opts(inet_descriptor* desc, char* ptr, int len) #if defined(HAVE_IN6) && defined(AF_INET6) && defined(IPPROTO_IPV6) else if (ival == INET_AF_INET6) { proto = IPPROTO_IPV6; - type = IPV6_ADD_MEMBERSHIP; +#if defined(INET_ADD_MEMBERSHIP) + type = INET_DROP_MEMBERSHIP; +#else + return -1; +#endif } #endif else { @@ -7191,7 +7215,11 @@ static int inet_set_opts(inet_descriptor* desc, char* ptr, int len) #if defined(HAVE_IN6) && defined(AF_INET6) && defined(IPPROTO_IPV6) else if (ival == INET_AF_INET6) { proto = IPPROTO_IPV6; - type = IPV6_DROP_MEMBERSHIP; +#if defined(INET_DROP_MEMBERSHIP) + type = INET_DROP_MEMBERSHIP; +#else + return -1; +#endif } #endif else { @@ -7213,7 +7241,12 @@ static int inet_set_opts(inet_descriptor* desc, char* ptr, int len) "\r\n if: %d" "\r\n", proto, IPPROTO_IP, IPPROTO_IPV6, - type, IP_ADD_MEMBERSHIP, IPV6_ADD_MEMBERSHIP, + type, IP_ADD_MEMBERSHIP, +#if defined(INET_ADD_MEMBERSHIP) + INET_ADD_MEMBERSHIP, +#else + -1, +#endif domain, ival)); if ((domain == INET_AF_INET) && (desc->sfamily == AF_INET)) { @@ -7248,9 +7281,6 @@ static int inet_set_opts(inet_descriptor* desc, char* ptr, int len) mreq4.imr_interface.s_addr = sock_htonl(ival); #endif - proto = IPPROTO_IP; - type = IP_ADD_MEMBERSHIP; - arg_ptr = (char*)&mreq4; arg_sz = mreqSz; @@ -7282,9 +7312,6 @@ static int inet_set_opts(inet_descriptor* desc, char* ptr, int len) len -= len; mreq6.ipv6mr_interface = ival; - proto = IPPROTO_IPV6; - type = IPV6_ADD_MEMBERSHIP; - arg_ptr = (char*)&mreq6; arg_sz = mreqSz; -- 2.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor