summaryrefslogtreecommitdiff
path: root/sys/compat/linux/linux_socket.c
diff options
context:
space:
mode:
authormycroft <mycroft@NetBSD.org>1995-05-28 08:50:17 +0000
committermycroft <mycroft@NetBSD.org>1995-05-28 08:50:17 +0000
commite89504670f2a92368d969be077782cd49ee627d6 (patch)
tree9d760bbb55593bd86a8aa743d0c385a6d0f77866 /sys/compat/linux/linux_socket.c
parentfbc3ef234b37194727541b9129a77579f2425f04 (diff)
Convert IP socket options.
Diffstat (limited to 'sys/compat/linux/linux_socket.c')
-rw-r--r--sys/compat/linux/linux_socket.c91
1 files changed, 72 insertions, 19 deletions
diff --git a/sys/compat/linux/linux_socket.c b/sys/compat/linux/linux_socket.c
index 8688d1f536d..d90ed7071e5 100644
--- a/sys/compat/linux/linux_socket.c
+++ b/sys/compat/linux/linux_socket.c
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_socket.c,v 1.2 1995/05/28 08:09:51 mycroft Exp $ */
+/* $NetBSD: linux_socket.c,v 1.3 1995/05/28 08:50:17 mycroft Exp $ */
/*
* Copyright (c) 1995 Frank van der Linden
@@ -428,24 +428,12 @@ linux_to_bsd_sopt_level(llevel)
switch (llevel) {
case LINUX_SOL_SOCKET:
return SOL_SOCKET;
- default:
- return llevel;
- }
-}
-
-/*
- * Convert Linux IP level socket option number to NetBSD values.
- * Linux only implements IP_TOS and IP_TTL
- */
-int
-linux_to_bsd_ip_sockopt(lopt)
- int lopt;
-{
- switch (lopt) {
- case LINUX_IP_TOS:
- return IP_TOS;
- case LINUX_IP_TTL:
- return IP_TTL;
+ case LINUX_SOL_IP:
+ return IPPROTO_IP;
+ case LINUX_SOL_TCP:
+ return IPPROTO_TCP;
+ case LINUX_SOL_UDP:
+ return IPPROTO_UDP;
default:
return -1;
}
@@ -489,6 +477,59 @@ linux_to_bsd_so_sockopt(lopt)
}
/*
+ * Convert Linux IP level socket option number to NetBSD values.
+ */
+int
+linux_to_bsd_ip_sockopt(lopt)
+ int lopt;
+{
+ switch (lopt) {
+ case LINUX_IP_TOS:
+ return IP_TOS;
+ case LINUX_IP_TTL:
+ return IP_TTL;
+ case LINUX_IP_MULTICAST_TTL:
+ return IP_MULTICAST_TTL;
+ case LINUX_IP_MULTICAST_LOOP:
+ return IP_MULTICAST_LOOP;
+ case LINUX_IP_MULTICAST_IF:
+ return IP_MULTICAST_IF;
+ case LINUX_IP_ADD_MEMBERSHIP:
+ return IP_ADD_MEMBERSHIP;
+ case LINUX_IP_DROP_MEMBERSHIP:
+ return IP_DROP_MEMBERSHIP;
+ default:
+ return -1;
+ }
+}
+
+/*
+ * Convert Linux TCP level socket option number to NetBSD values.
+ */
+int
+linux_to_bsd_tcp_sockopt(lopt)
+ int lopt;
+{
+ switch (lopt) {
+ default:
+ return linux_to_bsd_ip_sockopt(lopt);
+ }
+}
+
+/*
+ * Convert Linux UDP level socket option number to NetBSD values.
+ */
+int
+linux_to_bsd_udp_sockopt(lopt)
+ int lopt;
+{
+ switch (lopt) {
+ default:
+ return linux_to_bsd_ip_sockopt(lopt);
+ }
+}
+
+/*
* Another reasonably straightforward function: setsockopt(2). Only
* the SOL_SOCKET and IPPROTO_IP levels are implemented here.
* The level and option numbers are converted; the values passed
@@ -525,6 +566,12 @@ linux_setsockopt(p, args, retval)
case IPPROTO_IP:
name = linux_to_bsd_ip_sockopt(lsa.optname);
break;
+ case IPPROTO_TCP:
+ name = linux_to_bsd_tcp_sockopt(lsa.optname);
+ break;
+ case IPPROTO_UDP:
+ name = linux_to_bsd_udp_sockopt(lsa.optname);
+ break;
default:
return EINVAL;
}
@@ -571,6 +618,12 @@ linux_getsockopt(p, args, retval)
case IPPROTO_IP:
name = linux_to_bsd_ip_sockopt(lga.optname);
break;
+ case IPPROTO_TCP:
+ name = linux_to_bsd_tcp_sockopt(lsa.optname);
+ break;
+ case IPPROTO_UDP:
+ name = linux_to_bsd_udp_sockopt(lsa.optname);
+ break;
default:
return EINVAL;
}