From owner-freebsd-emulation@freebsd.org Thu Mar 3 15:53:25 2016 Return-Path: Delivered-To: freebsd-emulation@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CD4D6A9368C for ; Thu, 3 Mar 2016 15:53:25 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from mx2.freebsd.org (mx2.freebsd.org [IPv6:2001:1900:2254:206a::19:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mx2.freebsd.org", Issuer "Gandi Standard SSL CA 2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id BD0D36A8; Thu, 3 Mar 2016 15:53:25 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from butcher-nb.yandex.net (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) by mx2.freebsd.org (Postfix) with ESMTP id 853BB6526C; Thu, 3 Mar 2016 15:53:24 +0000 (UTC) (envelope-from ae@FreeBSD.org) Subject: Re: linux(64)-compat and ipv6 setsockopt To: Joe Love , freebsd-emulation@freebsd.org References: <7B0DAB1F-3C71-4E20-BC50-8EF4541B8D91@getsomewhere.net> From: "Andrey V. Elsukov" Message-ID: <56D85D9F.7000400@FreeBSD.org> Date: Thu, 3 Mar 2016 18:51:59 +0300 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 MIME-Version: 1.0 In-Reply-To: <7B0DAB1F-3C71-4E20-BC50-8EF4541B8D91@getsomewhere.net> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="tiJ6aRWR8JXtMKOVhkFeXOpCG3fFqiBiK" X-BeenThere: freebsd-emulation@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Development of Emulators of other operating systems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 03 Mar 2016 15:53:26 -0000 This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --tiJ6aRWR8JXtMKOVhkFeXOpCG3fFqiBiK Content-Type: multipart/mixed; boundary="------------040302070406000507090001" This is a multi-part message in MIME format. --------------040302070406000507090001 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 03.03.16 02:27, Joe Love wrote: > int ipv6only =3D 1; setsockopt(this->fd6, IPPROTO_IPV6, IPV6_V6ONLY, > &ipv6only, sizeof(ipv6only)); >=20 > Both Steamcmd and Factorio would spit out error messages like this > (this one being from Factorio): 1.132 Error > MultiplayerManager.cpp:108: MultiplayerManager failed: "Setsockopt > failed: Protocol not available=E2=80=9D Hi, can you test this patch? I added some socket options for IPPROTO_IPV6 layer that seem simple, the rest needs a bit more attention. The patch is untested. --=20 WBR, Andrey V. Elsukov --------------040302070406000507090001 Content-Type: text/x-patch; name="linux_ip6_sockopt.diff" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="linux_ip6_sockopt.diff" Index: head/sys/compat/linux/linux_socket.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- head/sys/compat/linux/linux_socket.c (revision 296347) +++ head/sys/compat/linux/linux_socket.c (working copy) @@ -289,6 +289,64 @@ linux_to_bsd_ip_sockopt(int opt) } =20 static int +linux_to_bsd_ip6_sockopt(int opt) +{ + + switch (opt) { + case LINUX_IPV6_CHECKSUM: + return (IPV6_CHECKSUM); + case LINUX_IPV6_NEXTHOP: + return (IPV6_NEXTHOP); + case LINUX_IPV6_UNICAST_HOPS: + return (IPV6_UNICAST_HOPS); + case LINUX_IPV6_MULTICAST_IF: + return (IPV6_MULTICAST_IF); + case LINUX_IPV6_MULTICAST_HOPS: + return (IPV6_MULTICAST_HOPS); + case LINUX_IPV6_MULTICAST_LOOP: + return (IPV6_MULTICAST_LOOP); + case LINUX_IPV6_ADD_MEMBERSHIP: + return (IPV6_JOIN_GROUP); + case LINUX_IPV6_DROP_MEMBERSHIP: + return (IPV6_LEAVE_GROUP); + case LINUX_IPV6_V6ONLY: + return (IPV6_V6ONLY); + /* + case LINUX_IPV6_RECVPKTINFO: + return (IPV6_RECVPKTINFO); + case LINUX_IPV6_PKTINFO: + return (IPV6_PKTINFO); + case LINUX_IPV6_RECVHOPLIMIT: + return (IPV6_RECVHOPLIMIT); + case LINUX_IPV6_HOPLIMIT: + return (IPV6_HOPLIMIT); + case LINUX_IPV6_RECVHOPOPTS: + return (IPV6_RECVHOPOPTS); + case LINUX_IPV6_HOPOPTS: + return (IPV6_HOPOPTS); + case LINUX_IPV6_RTHDRDSTOPTS: + return (IPV6_RTHDRDSTOPTS); + case LINUX_IPV6_RECVRTHDR: + return (IPV6_RECVRTHDR); + case LINUX_IPV6_RTHDR: + return (IPV6_RTHDR); + case LINUX_IPV6_RECVDSTOPTS: + return (IPV6_RECVDSTOPTS); + case LINUX_IPV6_DSTOPTS: + return (IPV6_DSTOPTS); + case LINUX_IPV6_RECVPATHMTU: + return (IPV6_RECVPATHMTU); + case LINUX_IPV6_PATHMTU: + return (IPV6_PATHMTU); + */ + case LINUX_IPV6_DONTFRAG: + return (IPV6_DONTFRAG); + } + return (-1); +} + + +static int linux_to_bsd_so_sockopt(int opt) { =20 @@ -1515,6 +1573,9 @@ linux_setsockopt(struct thread *td, struct linux_s case IPPROTO_IP: name =3D linux_to_bsd_ip_sockopt(args->optname); break; + case IPPROTO_IPV6: + name =3D linux_to_bsd_ip6_sockopt(args->optname); + break; case IPPROTO_TCP: name =3D linux_to_bsd_tcp_sockopt(args->optname); break; @@ -1601,6 +1662,9 @@ linux_getsockopt(struct thread *td, struct linux_g case IPPROTO_IP: name =3D linux_to_bsd_ip_sockopt(args->optname); break; + case IPPROTO_IPV6: + name =3D linux_to_bsd_ip6_sockopt(args->optname); + break; case IPPROTO_TCP: name =3D linux_to_bsd_tcp_sockopt(args->optname); break; Index: head/sys/compat/linux/linux_socket.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- head/sys/compat/linux/linux_socket.h (revision 296347) +++ head/sys/compat/linux/linux_socket.h (working copy) @@ -302,6 +302,31 @@ int linux_getsockopt(struct thread *td, struct lin #define LINUX_IP_ADD_MEMBERSHIP 35 #define LINUX_IP_DROP_MEMBERSHIP 36 =20 +#define LINUX_IPV6_CHECKSUM 7 +#define LINUX_IPV6_NEXTHOP 9 +#define LINUX_IPV6_UNICAST_HOPS 16 +#define LINUX_IPV6_MULTICAST_IF 17 +#define LINUX_IPV6_MULTICAST_HOPS 18 +#define LINUX_IPV6_MULTICAST_LOOP 19 +#define LINUX_IPV6_ADD_MEMBERSHIP 20 +#define LINUX_IPV6_DROP_MEMBERSHIP 21 +#define LINUX_IPV6_V6ONLY 26 + +#define LINUX_IPV6_RECVPKTINFO 49 +#define LINUX_IPV6_PKTINFO 50 +#define LINUX_IPV6_RECVHOPLIMIT 51 +#define LINUX_IPV6_HOPLIMIT 52 +#define LINUX_IPV6_RECVHOPOPTS 53 +#define LINUX_IPV6_HOPOPTS 54 +#define LINUX_IPV6_RTHDRDSTOPTS 55 +#define LINUX_IPV6_RECVRTHDR 56 +#define LINUX_IPV6_RTHDR 57 +#define LINUX_IPV6_RECVDSTOPTS 58 +#define LINUX_IPV6_DSTOPTS 59 +#define LINUX_IPV6_RECVPATHMTU 60 +#define LINUX_IPV6_PATHMTU 61 +#define LINUX_IPV6_DONTFRAG 62 + #define LINUX_TCP_NODELAY 1 #define LINUX_TCP_MAXSEG 2 #define LINUX_TCP_KEEPIDLE 4 --------------040302070406000507090001-- --tiJ6aRWR8JXtMKOVhkFeXOpCG3fFqiBiK Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEcBAEBCAAGBQJW2F2fAAoJEAHF6gQQyKF6RVgH/0u4hPrJMEDCL0PTrtds7Vx0 er1guyVTGWyuxMiysElz5kkZ6JzGaOWpOqpM4a2m1MUuf0fIlYNuociayYewi4U1 1MLvqpRxi8SmZdlcF6UspSFiNNtCMmo8L9lcQlG4+kLa3L6uzXNLv5lvShxZEmsT j6FCcAGb3Kbvgd4Ju3VIrIDyW3qcHZoeXzxF5kj99UktpSYQnTb50rPrLrcEf1Jb irM1lKkPviJWAEBpFkDE54lyKFPQWZY33M1NsJS3zwnrdqsbbr08mchfmJZ2u2W5 FLFZQhwCYemZIq6DkOiNIsDiIrBApSVwACrwRXiOPrWWlh4ArtgHxux3S1b35vU= =HMCk -----END PGP SIGNATURE----- --tiJ6aRWR8JXtMKOVhkFeXOpCG3fFqiBiK--