FreeBSD kernel kern code
uipc_syscalls.c File Reference
#include <sys/cdefs.h>
#include "opt_capsicum.h"
#include "opt_inet.h"
#include "opt_inet6.h"
#include "opt_sctp.h"
#include "opt_compat.h"
#include "opt_ktrace.h"
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/capability.h>
#include <sys/kernel.h>
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/sysproto.h>
#include <sys/malloc.h>
#include <sys/filedesc.h>
#include <sys/event.h>
#include <sys/proc.h>
#include <sys/fcntl.h>
#include <sys/file.h>
#include <sys/filio.h>
#include <sys/jail.h>
#include <sys/mount.h>
#include <sys/mbuf.h>
#include <sys/protosw.h>
#include <sys/sf_buf.h>
#include <sys/sysent.h>
#include <sys/socket.h>
#include <sys/socketvar.h>
#include <sys/signalvar.h>
#include <sys/syscallsubr.h>
#include <sys/sysctl.h>
#include <sys/uio.h>
#include <sys/vnode.h>
#include <net/vnet.h>
#include <security/audit/audit.h>
#include <security/mac/mac_framework.h>
#include <vm/vm.h>
#include <vm/vm_param.h>
#include <vm/vm_object.h>
#include <vm/vm_page.h>
#include <vm/vm_pageout.h>
#include <vm/vm_kern.h>
#include <vm/vm_extern.h>
#include <sys/condvar.h>
Include dependency graph for uipc_syscalls.c:

Go to the source code of this file.

Data Structures

struct  sendfile_sync
 

Macros

#define SOCK_CLOEXEC   0x10000000
 
#define SOCK_NONBLOCK   0x20000000
 

Functions

 __FBSDID ("$BSDSUniX$")
 
static int sendit (struct thread *td, int s, struct msghdr *mp, int flags)
 
static int recvit (struct thread *td, int s, struct msghdr *mp, void *namelenp)
 
static int accept1 (struct thread *td, struct accept_args *uap, int compat)
 
static int do_sendfile (struct thread *td, struct sendfile_args *uap, int compat)
 
static int getsockname1 (struct thread *td, struct getsockname_args *uap, int compat)
 
static int getpeername1 (struct thread *td, struct getpeername_args *uap, int compat)
 
 SYSCTL_INT (_kern_ipc, OID_AUTO, nsfbufs, CTLFLAG_RDTUN,&nsfbufs, 0,"Maximum number of sendfile(2) sf_bufs available")
 
 SYSCTL_INT (_kern_ipc, OID_AUTO, nsfbufspeak, CTLFLAG_RD,&nsfbufspeak, 0,"Number of sendfile(2) sf_bufs at peak usage")
 
 SYSCTL_INT (_kern_ipc, OID_AUTO, nsfbufsused, CTLFLAG_RD,&nsfbufsused, 0,"Number of sendfile(2) sf_bufs in use")
 
static int getsock_cap (struct filedesc *fdp, int fd, cap_rights_t rights, struct file **fpp, u_int *fflagp)
 
int sys_socket (struct thread *td, struct socket_args *uap)
 
int sys_bind (struct thread *td, struct bind_args *uap)
 
int kern_bind (struct thread *td, int fd, struct sockaddr *sa)
 
int sys_listen (struct thread *td, struct listen_args *uap)
 
int kern_accept (struct thread *td, int s, struct sockaddr **name, socklen_t *namelen, struct file **fp)
 
int sys_accept (struct thread *td, struct accept_args *uap)
 
int sys_connect (struct thread *td, struct connect_args *uap)
 
int kern_connect (struct thread *td, int fd, struct sockaddr *sa)
 
int kern_socketpair (struct thread *td, int domain, int type, int protocol, int *rsv)
 
int sys_socketpair (struct thread *td, struct socketpair_args *uap)
 
int kern_sendit (struct thread *td, int s, struct msghdr *mp, int flags, struct mbuf *control, enum uio_seg segflg)
 
int sys_sendto (struct thread *td, struct sendto_args *uap)
 
int sys_sendmsg (struct thread *td, struct sendmsg_args *uap)
 
int kern_recvit (struct thread *td, int s, struct msghdr *mp, enum uio_seg fromseg, struct mbuf **controlp)
 
int sys_recvfrom (struct thread *td, struct recvfrom_args *uap)
 
int sys_recvmsg (struct thread *td, struct recvmsg_args *uap)
 
int sys_shutdown (struct thread *td, struct shutdown_args *uap)
 
int sys_setsockopt (struct thread *td, struct setsockopt_args *uap)
 
int kern_setsockopt (struct thread *td, int s, int level, int name, void *val, enum uio_seg valseg, socklen_t valsize)
 
int sys_getsockopt (struct thread *td, struct getsockopt_args *uap)
 
int kern_getsockopt (struct thread *td, int s, int level, int name, void *val, enum uio_seg valseg, socklen_t *valsize)
 
int kern_getsockname (struct thread *td, int fd, struct sockaddr **sa, socklen_t *alen)
 
int sys_getsockname (struct thread *td, struct getsockname_args *uap)
 
int kern_getpeername (struct thread *td, int fd, struct sockaddr **sa, socklen_t *alen)
 
int sys_getpeername (struct thread *td, struct getpeername_args *uap)
 
int sockargs (struct mbuf **mp, caddr_t buf, int buflen, int type)
 
int getsockaddr (struct sockaddr **namp, caddr_t uaddr, size_t len)
 
void sf_buf_mext (void *addr, void *args)
 
int sys_sendfile (struct thread *td, struct sendfile_args *uap)
 
int kern_sendfile (struct thread *td, struct sendfile_args *uap, struct uio *hdr_uio, struct uio *trl_uio, int compat)
 
int sys_sctp_peeloff (struct thread *td, struct sctp_peeloff_args *uap)
 
int sys_sctp_generic_sendmsg (struct thread *td, struct sctp_generic_sendmsg_args *uap)
 
int sys_sctp_generic_sendmsg_iov (struct thread *td, struct sctp_generic_sendmsg_iov_args *uap)
 
int sys_sctp_generic_recvmsg (struct thread *td, struct sctp_generic_recvmsg_args *uap)
 

Variables

int nsfbufs
 
int nsfbufspeak
 
int nsfbufsused
 

Macro Definition Documentation

#define SOCK_CLOEXEC   0x10000000

Definition at line 103 of file uipc_syscalls.c.

Referenced by kern_socketpair(), and sys_socket().

#define SOCK_NONBLOCK   0x20000000

Definition at line 104 of file uipc_syscalls.c.

Referenced by kern_socketpair(), and sys_socket().

Function Documentation

__FBSDID ( "$BSDSUniX$"  )
static int accept1 ( struct thread *  td,
struct accept_args *  uap,
int  compat 
)
static

Definition at line 314 of file uipc_syscalls.c.

References fdclose(), free(), kern_accept(), and name.

Referenced by sys_accept().

Here is the call graph for this function:

Here is the caller graph for this function:

static int do_sendfile ( struct thread *  td,
struct sendfile_args *  uap,
int  compat 
)
static

Definition at line 1814 of file uipc_syscalls.c.

References copyinuio(), free(), and kern_sendfile().

Referenced by sys_sendfile().

Here is the call graph for this function:

Here is the caller graph for this function:

static int getpeername1 ( struct thread *  td,
struct getpeername_args *  uap,
int  compat 
)
static

Definition at line 1586 of file uipc_syscalls.c.

References free(), and kern_getpeername().

Referenced by sys_getpeername().

Here is the call graph for this function:

Here is the caller graph for this function:

static int getsock_cap ( struct filedesc *  fdp,
int  fd,
cap_rights_t  rights,
struct file **  fpp,
u_int *  fflagp 
)
static
int getsockaddr ( struct sockaddr **  namp,
caddr_t  uaddr,
size_t  len 
)

Definition at line 1729 of file uipc_syscalls.c.

References free(), and malloc().

Referenced by sendit(), sys_bind(), sys_connect(), sys_sctp_generic_sendmsg(), and sys_sctp_generic_sendmsg_iov().

Here is the call graph for this function:

Here is the caller graph for this function:

static int getsockname1 ( struct thread *  td,
struct getsockname_args *  uap,
int  compat 
)
static

Definition at line 1486 of file uipc_syscalls.c.

References free(), and kern_getsockname().

Referenced by sys_getsockname().

Here is the call graph for this function:

Here is the caller graph for this function:

int kern_accept ( struct thread *  td,
int  s,
struct sockaddr **  name,
socklen_t *  namelen,
struct file **  fp 
)

Definition at line 366 of file uipc_syscalls.c.

References accept_mtx, falloc(), fd, fdclose(), fgetown(), finit(), free(), fsetown(), getsock_cap(), soaccept(), and socketops.

Referenced by accept1().

Here is the call graph for this function:

Here is the caller graph for this function:

int kern_bind ( struct thread *  td,
int  fd,
struct sockaddr *  sa 
)

Definition at line 256 of file uipc_syscalls.c.

References getsock_cap(), and sobind().

Referenced by sys_bind().

Here is the call graph for this function:

Here is the caller graph for this function:

int kern_connect ( struct thread *  td,
int  fd,
struct sockaddr *  sa 
)

Definition at line 564 of file uipc_syscalls.c.

References getsock_cap(), and soconnect().

Referenced by sys_connect().

Here is the call graph for this function:

Here is the caller graph for this function:

int kern_getpeername ( struct thread *  td,
int  fd,
struct sockaddr **  sa,
socklen_t *  alen 
)

Definition at line 1621 of file uipc_syscalls.c.

References free(), and getsock_cap().

Referenced by getpeername1().

Here is the call graph for this function:

Here is the caller graph for this function:

int kern_getsockname ( struct thread *  td,
int  fd,
struct sockaddr **  sa,
socklen_t *  alen 
)

Definition at line 1521 of file uipc_syscalls.c.

References free(), and getsock_cap().

Referenced by getsockname1().

Here is the call graph for this function:

Here is the caller graph for this function:

int kern_getsockopt ( struct thread *  td,
int  s,
int  level,
int  name,
void *  val,
enum uio_seg  valseg,
socklen_t *  valsize 
)

Definition at line 1435 of file uipc_syscalls.c.

References getsock_cap(), level, name, panic(), and sogetopt().

Referenced by sys_getsockopt().

Here is the call graph for this function:

Here is the caller graph for this function:

int kern_recvit ( struct thread *  td,
int  s,
struct msghdr *  mp,
enum uio_seg  fromseg,
struct mbuf **  controlp 
)

Definition at line 989 of file uipc_syscalls.c.

References cloneuio(), free(), getsock_cap(), m_freem(), and soreceive().

Referenced by recvit().

Here is the call graph for this function:

Here is the caller graph for this function:

int kern_sendfile ( struct thread *  td,
struct sendfile_args *  uap,
struct uio *  hdr_uio,
struct uio *  trl_uio,
int  compat 
)

Definition at line 1867 of file uipc_syscalls.c.

References sendfile_sync::count, sendfile_sync::cv, cv_destroy(), cv_init(), fgetvp_read(), free(), getsock_cap(), kern_writev(), m_freem(), m_length(), m_uiotombuf(), malloc(), mbstat, sendfile_sync::mtx, mtx_destroy(), mtx_init(), sblock(), sbunlock(), sbwait(), sf_buf_mext(), vn_rdwr(), and vrele().

Referenced by do_sendfile().

Here is the call graph for this function:

Here is the caller graph for this function:

int kern_sendit ( struct thread *  td,
int  s,
struct msghdr *  mp,
int  flags,
struct mbuf *  control,
enum uio_seg  segflg 
)

Definition at line 787 of file uipc_syscalls.c.

References cloneuio(), getsock_cap(), sosend(), and tdsignal().

Referenced by sendit().

Here is the call graph for this function:

Here is the caller graph for this function:

int kern_setsockopt ( struct thread *  td,
int  s,
int  level,
int  name,
void *  val,
enum uio_seg  valseg,
socklen_t  valsize 
)

Definition at line 1356 of file uipc_syscalls.c.

References getsock_cap(), level, name, panic(), and sosetopt().

Referenced by sys_setsockopt().

Here is the call graph for this function:

Here is the caller graph for this function:

int kern_socketpair ( struct thread *  td,
int  domain,
int  type,
int  protocol,
int *  rsv 
)

Definition at line 625 of file uipc_syscalls.c.

References falloc(), fd, fdclose(), finit(), SOCK_CLOEXEC, SOCK_NONBLOCK, socketops, soclose(), soconnect2(), and socreate().

Referenced by sys_socketpair().

Here is the call graph for this function:

Here is the caller graph for this function:

static int recvit ( struct thread *  td,
int  s,
struct msghdr *  mp,
void *  namelenp 
)
static

Definition at line 1149 of file uipc_syscalls.c.

References kern_recvit().

Referenced by sys_recvfrom(), and sys_recvmsg().

Here is the call graph for this function:

Here is the caller graph for this function:

static int sendit ( struct thread *  td,
int  s,
struct msghdr *  mp,
int  flags 
)
static

Definition at line 724 of file uipc_syscalls.c.

References free(), getsockaddr(), kern_sendit(), and sockargs().

Referenced by sys_sendmsg(), and sys_sendto().

Here is the call graph for this function:

Here is the caller graph for this function:

void sf_buf_mext ( void *  addr,
void *  args 
)

Definition at line 1768 of file uipc_syscalls.c.

References sendfile_sync::count, sendfile_sync::cv, cv_signal(), and sendfile_sync::mtx.

Referenced by kern_sendfile().

Here is the call graph for this function:

Here is the caller graph for this function:

int sockargs ( struct mbuf **  mp,
caddr_t  buf,
int  buflen,
int  type 
)

Definition at line 1688 of file uipc_syscalls.c.

Referenced by sendit().

Here is the caller graph for this function:

int sys_accept ( struct thread *  td,
struct accept_args *  uap 
)

Definition at line 521 of file uipc_syscalls.c.

References accept1().

Here is the call graph for this function:

int sys_bind ( struct thread *  td,
struct bind_args *  uap 
)

Definition at line 236 of file uipc_syscalls.c.

References free(), getsockaddr(), and kern_bind().

Here is the call graph for this function:

int sys_connect ( struct thread *  td,
struct connect_args *  uap 
)

Definition at line 542 of file uipc_syscalls.c.

References free(), getsockaddr(), and kern_connect().

Here is the call graph for this function:

int sys_getpeername ( struct thread *  td,
struct getpeername_args *  uap 
)

Definition at line 1667 of file uipc_syscalls.c.

References getpeername1().

Here is the call graph for this function:

int sys_getsockname ( struct thread *  td,
struct getsockname_args *  uap 
)

Definition at line 1562 of file uipc_syscalls.c.

References getsockname1().

Here is the call graph for this function:

int sys_getsockopt ( struct thread *  td,
struct getsockopt_args *  uap 
)

Definition at line 1403 of file uipc_syscalls.c.

References kern_getsockopt().

Here is the call graph for this function:

int sys_listen ( struct thread *  td,
struct listen_args *  uap 
)

Definition at line 285 of file uipc_syscalls.c.

References getsock_cap(), and solisten().

Here is the call graph for this function:

int sys_recvfrom ( struct thread *  td,
struct recvfrom_args *  uap 
)

Definition at line 1171 of file uipc_syscalls.c.

References recvit().

Here is the call graph for this function:

int sys_recvmsg ( struct thread *  td,
struct recvmsg_args *  uap 
)

Definition at line 1281 of file uipc_syscalls.c.

References copyiniov(), free(), and recvit().

Here is the call graph for this function:

int sys_sctp_generic_recvmsg ( struct thread *  td,
struct sctp_generic_recvmsg_args *  uap 
)

Definition at line 2697 of file uipc_syscalls.c.

References cloneuio(), copyiniov(), free(), and getsock_cap().

Here is the call graph for this function:

int sys_sctp_generic_sendmsg ( struct thread *  td,
struct sctp_generic_sendmsg_args *  uap 
)

Definition at line 2459 of file uipc_syscalls.c.

References free(), getsock_cap(), getsockaddr(), and tdsignal().

Here is the call graph for this function:

int sys_sctp_generic_sendmsg_iov ( struct thread *  td,
struct sctp_generic_sendmsg_iov_args *  uap 
)

Definition at line 2570 of file uipc_syscalls.c.

References copyiniov(), free(), getsock_cap(), getsockaddr(), and tdsignal().

Here is the call graph for this function:

int sys_sctp_peeloff ( struct thread *  td,
struct sctp_peeloff_args *  uap 
)

Definition at line 2366 of file uipc_syscalls.c.

References falloc(), fd, fdclose(), fgetown(), fgetsock(), finit(), fputsock(), fsetown(), socketops, and sonewconn().

Here is the call graph for this function:

int sys_sendfile ( struct thread *  td,
struct sendfile_args *  uap 
)

Definition at line 1807 of file uipc_syscalls.c.

References do_sendfile().

Here is the call graph for this function:

int sys_sendmsg ( struct thread *  td,
struct sendmsg_args *  uap 
)

Definition at line 961 of file uipc_syscalls.c.

References copyiniov(), free(), and sendit().

Here is the call graph for this function:

int sys_sendto ( struct thread *  td,
struct sendto_args *  uap 
)

Definition at line 877 of file uipc_syscalls.c.

References sendit().

Here is the call graph for this function:

int sys_setsockopt ( struct thread *  td,
struct setsockopt_args *  uap 
)

Definition at line 1340 of file uipc_syscalls.c.

References kern_setsockopt().

Here is the call graph for this function:

int sys_shutdown ( struct thread *  td,
struct shutdown_args *  uap 
)

Definition at line 1316 of file uipc_syscalls.c.

References getsock_cap(), and soshutdown().

Here is the call graph for this function:

int sys_socket ( struct thread *  td,
struct socket_args *  uap 
)

Definition at line 182 of file uipc_syscalls.c.

References falloc(), fd, fdclose(), finit(), SOCK_CLOEXEC, SOCK_NONBLOCK, socketops, socreate(), and type.

Here is the call graph for this function:

int sys_socketpair ( struct thread *  td,
struct socketpair_args *  uap 
)

Definition at line 707 of file uipc_syscalls.c.

References kern_close(), and kern_socketpair().

Here is the call graph for this function:

SYSCTL_INT ( _kern_ipc  ,
OID_AUTO  ,
nsfbufs  ,
CTLFLAG_RDTUN  ,
nsfbufs,
,
"Maximum number of sendfile(2) sf_bufs available"   
)
SYSCTL_INT ( _kern_ipc  ,
OID_AUTO  ,
nsfbufspeak  ,
CTLFLAG_RD  ,
nsfbufspeak,
,
"Number of sendfile(2) sf_bufs at peak usage"   
)
SYSCTL_INT ( _kern_ipc  ,
OID_AUTO  ,
nsfbufsused  ,
CTLFLAG_RD  ,
nsfbufsused,
,
"Number of sendfile(2) sf_bufs in use"   
)

Variable Documentation

int nsfbufs

Definition at line 119 of file uipc_syscalls.c.

int nsfbufspeak

Definition at line 120 of file uipc_syscalls.c.

int nsfbufsused

Definition at line 121 of file uipc_syscalls.c.