Date: Thu, 3 Mar 2016 18:51:59 +0300 From: "Andrey V. Elsukov" <ae@FreeBSD.org> To: Joe Love <joe@getsomewhere.net>, freebsd-emulation@freebsd.org Subject: Re: linux(64)-compat and ipv6 setsockopt Message-ID: <56D85D9F.7000400@FreeBSD.org> In-Reply-To: <7B0DAB1F-3C71-4E20-BC50-8EF4541B8D91@getsomewhere.net> References: <7B0DAB1F-3C71-4E20-BC50-8EF4541B8D91@getsomewhere.net>
next in thread | previous in thread | raw e-mail | index | archive | help
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--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?56D85D9F.7000400>