Skip site navigation (1)Skip section navigation (2)
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>