Split the COMPAT_50 socket-timeout stuff out of kern/uipc_socket.c
and into its own source file, which is now included in the compat_50 module. (Not sure how this got missed during the original [pgoyette-compat] work)
This commit is contained in:
parent
a30bc70869
commit
68c01b4b73
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: compat_50_mod.c,v 1.2 2019/01/27 02:08:39 pgoyette Exp $ */
|
/* $NetBSD: compat_50_mod.c,v 1.3 2019/04/15 02:07:11 pgoyette Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2018 The NetBSD Foundation, Inc.
|
* Copyright (c) 2018 The NetBSD Foundation, Inc.
|
||||||
@ -34,7 +34,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: compat_50_mod.c,v 1.2 2019/01/27 02:08:39 pgoyette Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: compat_50_mod.c,v 1.3 2019/04/15 02:07:11 pgoyette Exp $");
|
||||||
|
|
||||||
#if defined(_KERNEL_OPT)
|
#if defined(_KERNEL_OPT)
|
||||||
#include "opt_compat_netbsd.h"
|
#include "opt_compat_netbsd.h"
|
||||||
@ -87,6 +87,7 @@ compat_50_init(void)
|
|||||||
vnd_50_init();
|
vnd_50_init();
|
||||||
rndpseudo_50_init();
|
rndpseudo_50_init();
|
||||||
rtsock_50_init();
|
rtsock_50_init();
|
||||||
|
kern_uipc_socket_50_init();
|
||||||
|
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
@ -107,6 +108,7 @@ compat_50_fini(void)
|
|||||||
{
|
{
|
||||||
int error = 0;
|
int error = 0;
|
||||||
|
|
||||||
|
kern_uipc_socket_50_fini();
|
||||||
rtsock_50_fini();
|
rtsock_50_fini();
|
||||||
rndpseudo_50_fini();
|
rndpseudo_50_fini();
|
||||||
vnd_50_fini();
|
vnd_50_fini();
|
||||||
@ -152,6 +154,7 @@ compat_50_fini(void)
|
|||||||
vnd_50_init();
|
vnd_50_init();
|
||||||
rndpseudo_50_init();
|
rndpseudo_50_init();
|
||||||
rtsock_50_init();
|
rtsock_50_init();
|
||||||
|
kern_uipc_socket_50_init();
|
||||||
|
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: compat_mod.h,v 1.3 2019/01/28 15:46:49 christos Exp $ */
|
/* $NetBSD: compat_mod.h,v 1.4 2019/04/15 02:07:11 pgoyette Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2013 The NetBSD Foundation, Inc.
|
* Copyright (c) 2013 The NetBSD Foundation, Inc.
|
||||||
@ -76,6 +76,8 @@ void rndpseudo_50_init(void);
|
|||||||
void rndpseudo_50_fini(void);
|
void rndpseudo_50_fini(void);
|
||||||
void rtsock_50_init(void);
|
void rtsock_50_init(void);
|
||||||
void rtsock_50_fini(void);
|
void rtsock_50_fini(void);
|
||||||
|
void kern_uipc_socket_50_init(void);
|
||||||
|
void kern_uipc_socket_50_fini(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef COMPAT_40
|
#ifdef COMPAT_40
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $NetBSD: files.common,v 1.2 2019/01/27 02:08:39 pgoyette Exp $
|
# $NetBSD: files.common,v 1.3 2019/04/15 02:07:11 pgoyette Exp $
|
||||||
|
|
||||||
#
|
#
|
||||||
# Generic utility files, used by various compat options.
|
# Generic utility files, used by various compat options.
|
||||||
@ -85,6 +85,7 @@ file compat/common/vnd_50.c compat_50
|
|||||||
file compat/common/clockctl_50.c compat_50
|
file compat/common/clockctl_50.c compat_50
|
||||||
file compat/common/if_spppsubr50.c compat_50
|
file compat/common/if_spppsubr50.c compat_50
|
||||||
file compat/common/uvm_50.c compat_50
|
file compat/common/uvm_50.c compat_50
|
||||||
|
file compat/common/kern_uipc_socket_50.c compat_50
|
||||||
|
|
||||||
# Compatibility code for NetBSD 6.0
|
# Compatibility code for NetBSD 6.0
|
||||||
file compat/common/compat_60_mod.c compat_60
|
file compat/common/compat_60_mod.c compat_60
|
||||||
|
233
sys/compat/common/kern_uipc_socket_50.c
Normal file
233
sys/compat/common/kern_uipc_socket_50.c
Normal file
@ -0,0 +1,233 @@
|
|||||||
|
/* $NetBSD: kern_uipc_socket_50.c,v 1.1 2019/04/15 02:07:11 pgoyette Exp $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2002, 2007, 2008, 2009 The NetBSD Foundation, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This code is derived from software contributed to The NetBSD Foundation
|
||||||
|
* by Jason R. Thorpe of Wasabi Systems, Inc, and by Andrew Doran.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||||
|
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||||
|
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2004 The FreeBSD Foundation
|
||||||
|
* Copyright (c) 2004 Robert Watson
|
||||||
|
* Copyright (c) 1982, 1986, 1988, 1990, 1993
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. Neither the name of the University nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @(#)uipc_socket.c 8.6 (Berkeley) 5/2/95
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1988 University of Utah.
|
||||||
|
* Copyright (c) 1990, 1993
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* This code is derived from software contributed to Berkeley by
|
||||||
|
* the Systems Programming Group of the University of Utah Computer
|
||||||
|
* Science Department.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. Neither the name of the University nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* from: Utah $Hdr: vn.c 1.13 94/04/02$
|
||||||
|
*
|
||||||
|
* @(#)vn.c 8.9 (Berkeley) 5/14/95
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__KERNEL_RCSID(0, "$NetBSD: kern_uipc_socket_50.c,v 1.1 2019/04/15 02:07:11 pgoyette Exp $");
|
||||||
|
|
||||||
|
#if defined(_KERNEL_OPT)
|
||||||
|
#include "opt_compat_netbsd.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/systm.h>
|
||||||
|
#include <sys/kernel.h>
|
||||||
|
#include <sys/proc.h>
|
||||||
|
#include <sys/file.h>
|
||||||
|
#include <sys/compat_stub.h>
|
||||||
|
#include <sys/socketvar.h>
|
||||||
|
|
||||||
|
#include <compat/sys/time.h>
|
||||||
|
#include <compat/sys/socket.h>
|
||||||
|
|
||||||
|
#include <compat/common/compat_mod.h>
|
||||||
|
|
||||||
|
static int
|
||||||
|
uipc_socket_50_getopt1(int opt, struct socket *so, struct sockopt *sopt,
|
||||||
|
struct timeval *tv)
|
||||||
|
{
|
||||||
|
int optval, error;
|
||||||
|
struct timeval50 otv;
|
||||||
|
|
||||||
|
switch (opt) {
|
||||||
|
|
||||||
|
case SO_OSNDTIMEO:
|
||||||
|
case SO_ORCVTIMEO:
|
||||||
|
optval = (opt == SO_OSNDTIMEO ?
|
||||||
|
so->so_snd.sb_timeo : so->so_rcv.sb_timeo);
|
||||||
|
|
||||||
|
otv.tv_sec = optval / hz;
|
||||||
|
otv.tv_usec = (optval % hz) * tick;
|
||||||
|
|
||||||
|
error = sockopt_set(sopt, &otv, sizeof(otv));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SO_OTIMESTAMP:
|
||||||
|
error = sockopt_setint(sopt, (so->so_options & opt) ? 1 : 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
error = EPASSTHROUGH;
|
||||||
|
}
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
uipc_socket_50_setopt1(int opt, struct socket *so, const struct sockopt *sopt,
|
||||||
|
struct timeval *tv)
|
||||||
|
{
|
||||||
|
int optval, error;
|
||||||
|
struct timeval50 otv;
|
||||||
|
|
||||||
|
switch (opt) {
|
||||||
|
|
||||||
|
case SO_OSNDTIMEO:
|
||||||
|
case SO_ORCVTIMEO:
|
||||||
|
error = sockopt_get(sopt, &otv, sizeof(otv));
|
||||||
|
if (error) {
|
||||||
|
solock(so);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
timeval50_to_timeval(&otv, tv);
|
||||||
|
opt = opt == SO_OSNDTIMEO ? SO_SNDTIMEO : SO_RCVTIMEO;
|
||||||
|
/*
|
||||||
|
* Processing will continue as for SO_SNDTIMEO
|
||||||
|
* and SO_RCVTIMEO, using the new-format tv
|
||||||
|
*/
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SO_OTIMESTAMP:
|
||||||
|
error = sockopt_getint(sopt, &optval);
|
||||||
|
solock(so);
|
||||||
|
if (error)
|
||||||
|
break;
|
||||||
|
if (optval)
|
||||||
|
so->so_options |= opt;
|
||||||
|
else
|
||||||
|
so->so_options &= ~opt;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
error = EPASSTHROUGH;
|
||||||
|
}
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
uipc_socket_50_sbts(int opt, struct mbuf **mp)
|
||||||
|
{
|
||||||
|
struct timeval50 tv50;
|
||||||
|
struct timeval tv;
|
||||||
|
|
||||||
|
microtime(&tv);
|
||||||
|
|
||||||
|
if (opt & SO_OTIMESTAMP) {
|
||||||
|
|
||||||
|
timeval_to_timeval50(&tv, &tv50);
|
||||||
|
*mp = sbcreatecontrol(&tv50, sizeof(tv50), SCM_OTIMESTAMP,
|
||||||
|
SOL_SOCKET);
|
||||||
|
if (*mp)
|
||||||
|
mp = &(*mp)->m_next;
|
||||||
|
return 0;
|
||||||
|
} else
|
||||||
|
return EPASSTHROUGH;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
kern_uipc_socket_50_init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
MODULE_HOOK_SET(uipc_socket_50_setopt1_hook, "sockop_50",
|
||||||
|
uipc_socket_50_setopt1);
|
||||||
|
MODULE_HOOK_SET(uipc_socket_50_getopt1_hook, "sockop_50",
|
||||||
|
uipc_socket_50_getopt1);
|
||||||
|
MODULE_HOOK_SET(uipc_socket_50_sbts_hook, "sbts_50",
|
||||||
|
uipc_socket_50_sbts);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
kern_uipc_socket_50_fini(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
MODULE_HOOK_UNSET(uipc_socket_50_setopt1_hook);
|
||||||
|
MODULE_HOOK_UNSET(uipc_socket_50_getopt1_hook);
|
||||||
|
MODULE_HOOK_UNSET(uipc_socket_50_sbts_hook);
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: compat_stub.c,v 1.8 2019/02/05 23:28:02 christos Exp $ */
|
/* $NetBSD: compat_stub.c,v 1.9 2019/04/15 02:07:11 pgoyette Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2018 The NetBSD Foundation, Inc.
|
* Copyright (c) 2018 The NetBSD Foundation, Inc.
|
||||||
@ -173,10 +173,17 @@ struct if43_cvtcmd_20_hook_t if43_cvtcmd_20_hook;
|
|||||||
struct tty_ttioctl_43_hook_t tty_ttioctl_43_hook;
|
struct tty_ttioctl_43_hook_t tty_ttioctl_43_hook;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* uipc_syscalls_40 compatability
|
* uipc_syscalls_40 compatibility
|
||||||
*/
|
*/
|
||||||
struct uipc_syscalls_40_hook_t uipc_syscalls_40_hook;
|
struct uipc_syscalls_40_hook_t uipc_syscalls_40_hook;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* uipc_socket_50 compatibility
|
||||||
|
*/
|
||||||
|
struct uipc_socket_50_setopt1_hook_t uipc_socket_50_setopt1_hook;
|
||||||
|
struct uipc_socket_50_getopt1_hook_t uipc_socket_50_getopt1_hook;
|
||||||
|
struct uipc_socket_50_sbts_hook_t uipc_socket_50_sbts_hook;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* uipc_syscalls_50 compatability
|
* uipc_syscalls_50 compatability
|
||||||
*/
|
*/
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: uipc_socket.c,v 1.274 2019/04/14 09:09:55 maxv Exp $ */
|
/* $NetBSD: uipc_socket.c,v 1.275 2019/04/15 02:07:11 pgoyette Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2007, 2008, 2009 The NetBSD Foundation, Inc.
|
* Copyright (c) 2002, 2007, 2008, 2009 The NetBSD Foundation, Inc.
|
||||||
@ -71,7 +71,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.274 2019/04/14 09:09:55 maxv Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.275 2019/04/15 02:07:11 pgoyette Exp $");
|
||||||
|
|
||||||
#ifdef _KERNEL_OPT
|
#ifdef _KERNEL_OPT
|
||||||
#include "opt_compat_netbsd.h"
|
#include "opt_compat_netbsd.h"
|
||||||
@ -104,11 +104,10 @@ __KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.274 2019/04/14 09:09:55 maxv Exp $
|
|||||||
#include <sys/mutex.h>
|
#include <sys/mutex.h>
|
||||||
#include <sys/condvar.h>
|
#include <sys/condvar.h>
|
||||||
#include <sys/kthread.h>
|
#include <sys/kthread.h>
|
||||||
|
#include <sys/compat_stub.h>
|
||||||
|
|
||||||
#ifdef COMPAT_50
|
|
||||||
#include <compat/sys/time.h>
|
#include <compat/sys/time.h>
|
||||||
#include <compat/sys/socket.h>
|
#include <compat/sys/socket.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <uvm/uvm_extern.h>
|
#include <uvm/uvm_extern.h>
|
||||||
#include <uvm/uvm_loan.h>
|
#include <uvm/uvm_loan.h>
|
||||||
@ -1707,12 +1706,23 @@ sorflush(struct socket *so)
|
|||||||
static int
|
static int
|
||||||
sosetopt1(struct socket *so, const struct sockopt *sopt)
|
sosetopt1(struct socket *so, const struct sockopt *sopt)
|
||||||
{
|
{
|
||||||
int error = EINVAL, opt;
|
int error, opt;
|
||||||
int optval = 0; /* XXX: gcc */
|
int optval = 0; /* XXX: gcc */
|
||||||
struct linger l;
|
struct linger l;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
|
|
||||||
switch ((opt = sopt->sopt_name)) {
|
opt = sopt->sopt_name;
|
||||||
|
|
||||||
|
MODULE_HOOK_CALL(uipc_socket_50_setopt1_hook, (opt, so, sopt, &tv),
|
||||||
|
enosys(), error);
|
||||||
|
if (error == EPASSTHROUGH)
|
||||||
|
error = EINVAL;
|
||||||
|
else if (error && error != ENOSYS) {
|
||||||
|
KASSERT(solocked(so));
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (opt) {
|
||||||
|
|
||||||
case SO_ACCEPTFILTER:
|
case SO_ACCEPTFILTER:
|
||||||
error = accept_filt_setopt(so, sopt);
|
error = accept_filt_setopt(so, sopt);
|
||||||
@ -1747,9 +1757,6 @@ sosetopt1(struct socket *so, const struct sockopt *sopt)
|
|||||||
case SO_TIMESTAMP:
|
case SO_TIMESTAMP:
|
||||||
case SO_NOSIGPIPE:
|
case SO_NOSIGPIPE:
|
||||||
case SO_RERROR:
|
case SO_RERROR:
|
||||||
#ifdef SO_OTIMESTAMP
|
|
||||||
case SO_OTIMESTAMP:
|
|
||||||
#endif
|
|
||||||
error = sockopt_getint(sopt, &optval);
|
error = sockopt_getint(sopt, &optval);
|
||||||
solock(so);
|
solock(so);
|
||||||
if (error)
|
if (error)
|
||||||
@ -1815,25 +1822,15 @@ sosetopt1(struct socket *so, const struct sockopt *sopt)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef COMPAT_50
|
|
||||||
case SO_OSNDTIMEO:
|
case SO_OSNDTIMEO:
|
||||||
case SO_ORCVTIMEO: {
|
case SO_ORCVTIMEO:
|
||||||
struct timeval50 otv;
|
if (error == ENOSYS) {
|
||||||
error = sockopt_get(sopt, &otv, sizeof(otv));
|
error = EINVAL;
|
||||||
if (error) {
|
|
||||||
solock(so);
|
solock(so);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
timeval50_to_timeval(&otv, &tv);
|
/* FALLTHROUGH */
|
||||||
opt = opt == SO_OSNDTIMEO ? SO_SNDTIMEO : SO_RCVTIMEO;
|
|
||||||
error = 0;
|
|
||||||
/*FALLTHROUGH*/
|
|
||||||
}
|
|
||||||
#endif /* COMPAT_50 */
|
|
||||||
|
|
||||||
/*FALLTHROUGH*/
|
|
||||||
case SO_SNDTIMEO:
|
case SO_SNDTIMEO:
|
||||||
/*FALLTHROUGH*/
|
|
||||||
case SO_RCVTIMEO:
|
case SO_RCVTIMEO:
|
||||||
if (error)
|
if (error)
|
||||||
error = sockopt_get(sopt, &tv, sizeof(tv));
|
error = sockopt_get(sopt, &tv, sizeof(tv));
|
||||||
@ -1955,9 +1952,6 @@ sogetopt1(struct socket *so, struct sockopt *sopt)
|
|||||||
case SO_TIMESTAMP:
|
case SO_TIMESTAMP:
|
||||||
case SO_NOSIGPIPE:
|
case SO_NOSIGPIPE:
|
||||||
case SO_RERROR:
|
case SO_RERROR:
|
||||||
#ifdef SO_OTIMESTAMP
|
|
||||||
case SO_OTIMESTAMP:
|
|
||||||
#endif
|
|
||||||
case SO_ACCEPTCONN:
|
case SO_ACCEPTCONN:
|
||||||
error = sockopt_setint(sopt, (so->so_options & opt) ? 1 : 0);
|
error = sockopt_setint(sopt, (so->so_options & opt) ? 1 : 0);
|
||||||
break;
|
break;
|
||||||
@ -1991,22 +1985,6 @@ sogetopt1(struct socket *so, struct sockopt *sopt)
|
|||||||
error = sockopt_setint(sopt, so->so_rcv.sb_lowat);
|
error = sockopt_setint(sopt, so->so_rcv.sb_lowat);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef COMPAT_50
|
|
||||||
case SO_OSNDTIMEO:
|
|
||||||
case SO_ORCVTIMEO: {
|
|
||||||
struct timeval50 otv;
|
|
||||||
|
|
||||||
optval = (opt == SO_OSNDTIMEO ?
|
|
||||||
so->so_snd.sb_timeo : so->so_rcv.sb_timeo);
|
|
||||||
|
|
||||||
otv.tv_sec = optval / hz;
|
|
||||||
otv.tv_usec = (optval % hz) * tick;
|
|
||||||
|
|
||||||
error = sockopt_set(sopt, &otv, sizeof(otv));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif /* COMPAT_50 */
|
|
||||||
|
|
||||||
case SO_SNDTIMEO:
|
case SO_SNDTIMEO:
|
||||||
case SO_RCVTIMEO:
|
case SO_RCVTIMEO:
|
||||||
optval = (opt == SO_SNDTIMEO ?
|
optval = (opt == SO_SNDTIMEO ?
|
||||||
@ -2023,7 +2001,10 @@ sogetopt1(struct socket *so, struct sockopt *sopt)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
error = ENOPROTOOPT;
|
MODULE_HOOK_CALL(uipc_socket_50_getopt1_hook,
|
||||||
|
(opt, so, sopt, &tv), enosys(), error);
|
||||||
|
if (error)
|
||||||
|
error = ENOPROTOOPT;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2441,19 +2422,13 @@ struct mbuf **
|
|||||||
sbsavetimestamp(int opt, struct mbuf **mp)
|
sbsavetimestamp(int opt, struct mbuf **mp)
|
||||||
{
|
{
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
|
int error;
|
||||||
|
|
||||||
microtime(&tv);
|
microtime(&tv);
|
||||||
|
|
||||||
#ifdef SO_OTIMESTAMP
|
MODULE_HOOK_CALL(uipc_socket_50_sbts_hook, (opt, mp), enosys(), error);
|
||||||
if (opt & SO_OTIMESTAMP) {
|
if (error == 0)
|
||||||
struct timeval50 tv50;
|
return mp;
|
||||||
|
|
||||||
timeval_to_timeval50(&tv, &tv50);
|
|
||||||
*mp = sbcreatecontrol(&tv50, sizeof(tv50),
|
|
||||||
SCM_OTIMESTAMP, SOL_SOCKET);
|
|
||||||
if (*mp)
|
|
||||||
mp = &(*mp)->m_next;
|
|
||||||
} else
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (opt & SO_TIMESTAMP) {
|
if (opt & SO_TIMESTAMP) {
|
||||||
*mp = sbcreatecontrol(&tv, sizeof(tv),
|
*mp = sbcreatecontrol(&tv, sizeof(tv),
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $NetBSD: Makefile,v 1.3 2019/02/17 04:05:45 rin Exp $
|
# $NetBSD: Makefile,v 1.4 2019/04/15 02:07:11 pgoyette Exp $
|
||||||
|
|
||||||
.include "../Makefile.inc"
|
.include "../Makefile.inc"
|
||||||
|
|
||||||
@ -12,6 +12,7 @@ SRCS+= compat_50_mod.c
|
|||||||
SRCS+= kern_50.c kern_time_50.c kern_select_50.c
|
SRCS+= kern_50.c kern_time_50.c kern_select_50.c
|
||||||
SRCS+= vfs_syscalls_50.c uipc_syscalls_50.c uvm_50.c
|
SRCS+= vfs_syscalls_50.c uipc_syscalls_50.c uvm_50.c
|
||||||
SRCS+= rndpseudo_50.c clockctl_50.c if_spppsubr50.c
|
SRCS+= rndpseudo_50.c clockctl_50.c if_spppsubr50.c
|
||||||
|
SRCS+= kern_uipc_socket_50.c
|
||||||
|
|
||||||
CPPFLAGS+= -DINET -DINET6
|
CPPFLAGS+= -DINET -DINET6
|
||||||
# XXX someday we'll need to add
|
# XXX someday we'll need to add
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: compat_stub.h,v 1.11 2019/02/05 23:28:02 christos Exp $ */
|
/* $NetBSD: compat_stub.h,v 1.12 2019/04/15 02:07:11 pgoyette Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2018 The NetBSD Foundation, Inc.
|
* Copyright (c) 2018 The NetBSD Foundation, Inc.
|
||||||
@ -220,6 +220,19 @@ MODULE_HOOK(tty_ttioctl_43_hook, int,
|
|||||||
|
|
||||||
MODULE_HOOK(uipc_syscalls_40_hook, int, (u_long, void *));
|
MODULE_HOOK(uipc_syscalls_40_hook, int, (u_long, void *));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* uipc_socket_50 compatibility
|
||||||
|
*/
|
||||||
|
struct sockopt;
|
||||||
|
struct timeval;
|
||||||
|
struct mbuf;
|
||||||
|
|
||||||
|
MODULE_HOOK(uipc_socket_50_setopt1_hook, int,
|
||||||
|
(int, struct socket *, const struct sockopt *, struct timeval *));
|
||||||
|
MODULE_HOOK(uipc_socket_50_getopt1_hook, int,
|
||||||
|
(int, struct socket *, struct sockopt *, struct timeval *));
|
||||||
|
MODULE_HOOK(uipc_socket_50_sbts_hook, int, (int, struct mbuf **));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* uipc_syscalls_50 compatibility
|
* uipc_syscalls_50 compatibility
|
||||||
*/
|
*/
|
||||||
@ -311,7 +324,6 @@ MODULE_HOOK(vfs_openat_10_hook, int, (struct pathbuf **));
|
|||||||
/*
|
/*
|
||||||
* Hook for compat_70_unp_addsockcred
|
* Hook for compat_70_unp_addsockcred
|
||||||
*/
|
*/
|
||||||
struct mbuf;
|
|
||||||
MODULE_HOOK(uipc_unp_70_hook, struct mbuf *,
|
MODULE_HOOK(uipc_unp_70_hook, struct mbuf *,
|
||||||
(struct lwp *, struct mbuf *));
|
(struct lwp *, struct mbuf *));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user