On 03.03.16 02:27, Joe Love wrote:
> int ipv6only = 1; setsockopt(this->fd6, IPPROTO_IPV6, IPV6_V6ONLY,
> &ipv6only, sizeof(ipv6only));
> 
> 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ā€

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.

-- 
WBR, Andrey V. Elsukov
Index: head/sys/compat/linux/linux_socket.c
===================================================================
--- 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)
 }
 
 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)
 {
 
@@ -1515,6 +1573,9 @@ linux_setsockopt(struct thread *td, struct linux_s
 	case IPPROTO_IP:
 		name = linux_to_bsd_ip_sockopt(args->optname);
 		break;
+	case IPPROTO_IPV6:
+		name = linux_to_bsd_ip6_sockopt(args->optname);
+		break;
 	case IPPROTO_TCP:
 		name = linux_to_bsd_tcp_sockopt(args->optname);
 		break;
@@ -1601,6 +1662,9 @@ linux_getsockopt(struct thread *td, struct linux_g
 	case IPPROTO_IP:
 		name = linux_to_bsd_ip_sockopt(args->optname);
 		break;
+	case IPPROTO_IPV6:
+		name = linux_to_bsd_ip6_sockopt(args->optname);
+		break;
 	case IPPROTO_TCP:
 		name = linux_to_bsd_tcp_sockopt(args->optname);
 		break;
Index: head/sys/compat/linux/linux_socket.h
===================================================================
--- 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
 
+#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

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to