Home | History | Annotate | Download | only in netbsd
      1 # Copyright 2017 syzkaller project authors. All rights reserved.
      2 # Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
      3 
      4 # AF_UNIX support.
      5 
      6 include <sys/types.h>
      7 include <sys/socket.h>
      8 include <netinet/in.h>
      9 include <compat/linux/common/linux_socket.h>
     10 
     11 resource sock_unix[sock]
     12 
     13 socket$unix(domain const[AF_UNIX], type flags[unix_socket_type], proto const[0]) sock_unix
     14 socketpair$unix(domain const[AF_UNIX], type flags[unix_socket_type], proto const[0], fds ptr[out, unix_pair])
     15 bind$unix(fd sock_unix, addr ptr[in, sockaddr_un], addrlen len[addr])
     16 connect$unix(fd sock_unix, addr ptr[in, sockaddr_un], addrlen len[addr])
     17 accept$unix(fd sock_unix, peer ptr[out, sockaddr_un, opt], peerlen ptr[inout, len[peer, int32]]) sock_unix
     18 
     19 sendto$unix(fd sock_unix, buf buffer[in], len len[buf], f flags[send_flags], addr ptr[in, sockaddr_un, opt], addrlen len[addr])
     20 sendmsg$unix(fd sock_unix, msg ptr[in, msghdr_un], f flags[send_flags])
     21 recvfrom$unix(fd sock_unix, buf buffer[out], len len[buf], f flags[recv_flags], addr ptr[in, sockaddr_un, opt], addrlen len[addr])
     22 getsockname$unix(fd sock_unix, addr ptr[out, sockaddr_un], addrlen ptr[inout, len[addr, int32]])
     23 getpeername$unix(fd sock_unix, peer ptr[out, sockaddr_un], peerlen ptr[inout, len[peer, int32]])
     24 
     25 unix_socket_type = SOCK_STREAM, SOCK_DGRAM, SOCK_SEQPACKET
     26 unix_socket_family = AF_UNIX, AF_UNSPEC
     27 
     28 unix_pair {
     29 	fd0	sock_unix
     30 	fd1	sock_unix
     31 }
     32 
     33 sockaddr_un [
     34 	file	sockaddr_un_file
     35 	abs	sockaddr_un_abstract
     36 ] [varlen]
     37 
     38 sockaddr_un_file {
     39 	family	flags[unix_socket_family, int16]
     40 	path	filename
     41 } [packed]
     42 
     43 sockaddr_un_abstract {
     44 	family	flags[unix_socket_family, int16]
     45 	ind	const[0, int8]
     46 	id	proc[20000, 4, int32]
     47 }
     48 
     49 msghdr_un {
     50 	addr	ptr[in, sockaddr_un]
     51 	addrlen	len[addr, int32]
     52 	vec	ptr[in, array[iovec_in]]
     53 	vlen	len[vec, intptr]
     54 	ctrl	ptr[in, array[cmsghdr_un], opt]
     55 	ctrllen	bytesize[ctrl, intptr]
     56 	f	flags[send_flags, int32]
     57 }
     58 
     59 cmsghdr_un [
     60 	rights	cmsghdr_un_rights
     61 	cred	cmsghdr_un_cred
     62 ] [varlen]
     63 
     64 cmsghdr_un_rights {
     65 	len	len[parent, intptr]
     66 	level	const[SOL_SOCKET, int32]
     67 	type	const[SCM_RIGHTS, int32]
     68 	fds	array[fd]
     69 } [align_ptr]
     70 
     71 cmsghdr_un_cred {
     72 	len	len[parent, intptr]
     73 	level	const[SOL_SOCKET, int32]
     74 	type	const[LINUX_SCM_CREDENTIALS, int32]
     75 	pid	pid
     76 	uid	uid
     77 	gid	gid
     78 } [align_ptr]
     79