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>
