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. MFC after: 2 weeks
This commit is contained in:
parent
44e54f208a
commit
fb709557a3
@ -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];
|
||||
|
@ -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>
|
||||
@ -325,6 +326,27 @@ linux_to_bsd_so_sockopt(int opt)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
@ -1496,8 +1518,7 @@ linux_setsockopt(struct thread *td, struct linux_setsockopt_args *args)
|
||||
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, struct linux_getsockopt_args *args)
|
||||
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;
|
||||
|
@ -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];
|
||||
|
Loading…
Reference in New Issue
Block a user