svn commit: r247558 - in stable/9/sys: amd64/linux32 compat/linux i386/linux
John Baldwin
jhb at FreeBSD.org
Fri Mar 1 18:39:48 UTC 2013
Author: jhb
Date: Fri Mar 1 18:39:46 2013
New Revision: 247558
URL: http://svnweb.freebsd.org/changeset/base/247558
Log:
MFC 245849:
Don't assume that all Linux TCP-level socket options are identical to
FreeBSD TCP-level socket options (only the first two are). Instead,
using a mapping function and fail unsupported options as we do for other
socket option levels.
Modified:
stable/9/sys/amd64/linux32/linux.h
stable/9/sys/compat/linux/linux_socket.c
stable/9/sys/i386/linux/linux.h
Directory Properties:
stable/9/sys/ (props changed)
Modified: stable/9/sys/amd64/linux32/linux.h
==============================================================================
--- stable/9/sys/amd64/linux32/linux.h Fri Mar 1 17:37:57 2013 (r247557)
+++ stable/9/sys/amd64/linux32/linux.h Fri Mar 1 18:39:46 2013 (r247558)
@@ -725,6 +725,13 @@ union l_semun {
#define LINUX_IP_ADD_MEMBERSHIP 35
#define LINUX_IP_DROP_MEMBERSHIP 36
+#define LINUX_TCP_NODELAY 1
+#define LINUX_TCP_MAXSEG 2
+#define LINUX_TCP_KEEPIDLE 4
+#define LINUX_TCP_KEEPINTVL 5
+#define LINUX_TCP_KEEPCNT 6
+#define LINUX_TCP_MD5SIG 14
+
struct l_sockaddr {
l_ushort sa_family;
char sa_data[14];
Modified: stable/9/sys/compat/linux/linux_socket.c
==============================================================================
--- stable/9/sys/compat/linux/linux_socket.c Fri Mar 1 17:37:57 2013 (r247557)
+++ stable/9/sys/compat/linux/linux_socket.c Fri Mar 1 18:39:46 2013 (r247558)
@@ -56,6 +56,7 @@ __FBSDID("$FreeBSD$");
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
+#include <netinet/tcp.h>
#ifdef INET6
#include <netinet/ip6.h>
#include <netinet6/ip6_var.h>
@@ -326,6 +327,27 @@ linux_to_bsd_so_sockopt(int opt)
}
static int
+linux_to_bsd_tcp_sockopt(int opt)
+{
+
+ switch (opt) {
+ case LINUX_TCP_NODELAY:
+ return (TCP_NODELAY);
+ case LINUX_TCP_MAXSEG:
+ return (TCP_MAXSEG);
+ case LINUX_TCP_KEEPIDLE:
+ return (TCP_KEEPIDLE);
+ case LINUX_TCP_KEEPINTVL:
+ return (TCP_KEEPINTVL);
+ case LINUX_TCP_KEEPCNT:
+ return (TCP_KEEPCNT);
+ case LINUX_TCP_MD5SIG:
+ return (TCP_MD5SIG);
+ }
+ return (-1);
+}
+
+static int
linux_to_bsd_msg_flags(int flags)
{
int ret_flags = 0;
@@ -1496,8 +1518,7 @@ linux_setsockopt(struct thread *td, stru
name = linux_to_bsd_ip_sockopt(args->optname);
break;
case IPPROTO_TCP:
- /* Linux TCP option values match BSD's */
- name = args->optname;
+ name = linux_to_bsd_tcp_sockopt(args->optname);
break;
default:
name = -1;
@@ -1591,8 +1612,7 @@ linux_getsockopt(struct thread *td, stru
name = linux_to_bsd_ip_sockopt(args->optname);
break;
case IPPROTO_TCP:
- /* Linux TCP option values match BSD's */
- name = args->optname;
+ name = linux_to_bsd_tcp_sockopt(args->optname);
break;
default:
name = -1;
Modified: stable/9/sys/i386/linux/linux.h
==============================================================================
--- stable/9/sys/i386/linux/linux.h Fri Mar 1 17:37:57 2013 (r247557)
+++ stable/9/sys/i386/linux/linux.h Fri Mar 1 18:39:46 2013 (r247558)
@@ -701,6 +701,13 @@ union l_semun {
#define LINUX_IP_ADD_MEMBERSHIP 35
#define LINUX_IP_DROP_MEMBERSHIP 36
+#define LINUX_TCP_NODELAY 1
+#define LINUX_TCP_MAXSEG 2
+#define LINUX_TCP_KEEPIDLE 4
+#define LINUX_TCP_KEEPINTVL 5
+#define LINUX_TCP_KEEPCNT 6
+#define LINUX_TCP_MD5SIG 14
+
struct l_sockaddr {
l_ushort sa_family;
char sa_data[14];
More information about the svn-src-stable-9
mailing list