aboutsummaryrefslogtreecommitdiffstats
path: root/sys/socket.txt
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2015-12-28 16:11:15 +0100
committerDmitry Vyukov <dvyukov@google.com>2015-12-28 16:11:15 +0100
commitbd768c8f40f84598cf2c92a7b0f5a54ff7b53153 (patch)
treeaeaa10bfd08bd852077baad32ccf401183665dfe /sys/socket.txt
parent0451ffa50aaf44ea28bfe729c6080b6ec97f7bb5 (diff)
sys: move more subsystems into separate files
Diffstat (limited to 'sys/socket.txt')
-rw-r--r--sys/socket.txt586
1 files changed, 586 insertions, 0 deletions
diff --git a/sys/socket.txt b/sys/socket.txt
new file mode 100644
index 000000000..a33531b98
--- /dev/null
+++ b/sys/socket.txt
@@ -0,0 +1,586 @@
+# Copyright 2015 syzkaller project authors. All rights reserved.
+# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
+
+socket(domain flags[socket_domain], type flags[socket_type], proto int8) fd[sock]
+socketpair(domain flags[socket_domain], type flags[socket_type], proto int8, fds ptr[out, pipefd])
+accept(fd fd[sock], peer ptr[out, sockaddr, opt], peerlen ptr[inout, len[peer, int32]]) fd[sock]
+accept4(fd fd[sock], peer ptr[out, sockaddr, opt], peerlen ptr[inout, len[peer, int32]], flags flags[accept_flags]) fd[sock]
+# TODO: must not bind to port 0, that will result in a random port which is not reproducible
+bind(fd fd[sock], addr ptr[in, sockaddr], addrlen len[addr])
+listen(fd fd[sock], backlog int32)
+connect(fd fd[sock], addr ptr[in, sockaddr], addrlen len[addr])
+shutdown(fd fd[sock], how flags[shutdown_flags])
+sendto(fd fd[sock], buf buffer[in], len len[buf], f flags[send_flags], addr ptr[in, sockaddr, opt], addrlen len[addr])
+sendmsg(fd fd[sock], msg ptr[in, send_msghdr], f flags[send_flags])
+sendmmsg(fd fd[sock], mmsg ptr[in, array[send_msghdr]], vlen len[mmsg], f flags[send_flags])
+recvfrom(fd fd[sock], buf buffer[out], len len[buf], f flags[recv_flags], addr ptr[in, sockaddr, opt], addrlen len[addr])
+recvmsg(fd fd[sock], msg ptr[in, recv_msghdr], f flags[recv_flags])
+recvmmsg(fd fd[sock], mmsg ptr[in, array[recv_msghdr]], vlen len[mmsg], f flags[recv_flags])
+getsockname(fd fd[sock], addr ptr[out, sockaddr], addrlen ptr[inout, len[addr, int32]])
+getpeername(fd fd[sock], peer ptr[out, sockaddr], peerlen ptr[inout, len[peer, int32]])
+getsockopt(fd fd[sock], level int32, optname int32, optval ptr[out, ioctl_arg], optlen ptr[inout, len[optval, int32]])
+setsockopt(fd fd[sock], level int32, optname int32, optval ptr[in, ioctl_arg], optlen len[optval])
+getsockopt$sock_int(fd fd[sock], level const[SOL_SOCKET], optname flags[sockopt_opt_sock_int], optval ptr[out, int32], optlen ptr[inout, len[optval, int32]])
+setsockopt$sock_int(fd fd[sock], level const[SOL_SOCKET], optname flags[sockopt_opt_sock_int], optval ptr[in, int32], optlen len[optval])
+getsockopt$sock_str(fd fd[sock], level const[SOL_SOCKET], optname const[SO_BINDTODEVICE], optval buffer[out], optlen ptr[inout, len[optval, int32]])
+setsockopt$sock_str(fd fd[sock], level const[SOL_SOCKET], optname const[SO_BINDTODEVICE], optval string, optlen len[optval])
+getsockopt$sock_linger(fd fd[sock], level const[SOL_SOCKET], optname const[SO_LINGER], optval ptr[out, linger], optlen ptr[inout, len[optval, int32]])
+setsockopt$sock_linger(fd fd[sock], level const[SOL_SOCKET], optname const[SO_LINGER], optval ptr[in, linger], optlen len[optval])
+getsockopt$sock_cred(fd fd[sock], level const[SOL_SOCKET], optname const[SO_PEERCRED], optval ptr[out, ucred], optlen ptr[inout, len[optval, int32]])
+setsockopt$sock_cred(fd fd[sock], level const[SOL_SOCKET], optname const[SO_PEERCRED], optval ptr[in, ucred], optlen len[optval])
+getsockopt$sock_timeval(fd fd[sock], level const[SOL_SOCKET], optname flags[sockopt_opt_sock_timeval], optval ptr[out, timeval], optlen ptr[inout, len[optval, int32]])
+setsockopt$sock_timeval(fd fd[sock], level const[SOL_SOCKET], optname flags[sockopt_opt_sock_timeval], optval ptr[in, timeval], optlen len[optval])
+setsockopt$sock_attach_bpf(fd fd[sock], level const[SOL_SOCKET], optname const[SO_ATTACH_BPF], optval ptr[in, fd[bpf_prog]], optlen len[optval])
+getsockopt$tcp_int(fd fd[sock], level const[IPPROTO_TCP], optname flags[sockopt_opt_tcp_int], optval ptr[out, int32], optlen ptr[inout, len[optval, int32]])
+setsockopt$tcp_int(fd fd[sock], level const[IPPROTO_TCP], optname flags[sockopt_opt_tcp_int], optval ptr[in, int32], optlen len[optval])
+getsockopt$tcp_buf(fd fd[sock], level const[IPPROTO_TCP], optname const[TCP_INFO], optval buffer[out], optlen ptr[inout, len[optval, int32]])
+setsockopt$tcp_buf(fd fd[sock], level const[IPPROTO_TCP], optname const[TCP_INFO], optval buffer[in], optlen len[optval])
+getsockopt$udp_int(fd fd[sock], level const[IPPROTO_UDP], optname const[UDP_CORK], optval ptr[out, int32], optlen ptr[inout, len[optval, int32]])
+setsockopt$udp_int(fd fd[sock], level const[IPPROTO_UDP], optname const[UDP_CORK], optval ptr[in, int32], optlen len[optval])
+getsockopt$ip_int(fd fd[sock], level const[IPPROTO_IP], optname flags[sockopt_opt_ip_int], optval ptr[out, int32], optlen ptr[inout, len[optval, int32]])
+setsockopt$ip_int(fd fd[sock], level const[IPPROTO_IP], optname flags[sockopt_opt_ip_int], optval ptr[in, int32], optlen len[optval])
+getsockopt$ip_mreq(fd fd[sock], level const[IPPROTO_IP], optname flags[sockopt_opt_ip_mreq], optval ptr[out, ip_mreq], optlen ptr[inout, len[optval, int32]])
+setsockopt$ip_mreq(fd fd[sock], level const[IPPROTO_IP], optname flags[sockopt_opt_ip_mreq], optval ptr[in, ip_mreq], optlen len[optval])
+getsockopt$ip_mreqn(fd fd[sock], level const[IPPROTO_IP], optname flags[sockopt_opt_ip_mreq], optval ptr[out, ip_mreqn], optlen ptr[inout, len[optval, int32]])
+setsockopt$ip_mreqn(fd fd[sock], level const[IPPROTO_IP], optname flags[sockopt_opt_ip_mreq], optval ptr[in, ip_mreqn], optlen len[optval])
+getsockopt$ip_mreqsrc(fd fd[sock], level const[IPPROTO_IP], optname flags[sockopt_opt_ip_mreqsrc], optval ptr[out, ip_mreq_source], optlen ptr[inout, len[optval, int32]])
+setsockopt$ip_mreqsrc(fd fd[sock], level const[IPPROTO_IP], optname flags[sockopt_opt_ip_mreqsrc], optval ptr[in, ip_mreq_source], optlen len[optval])
+getsockopt$ip_msfilter(fd fd[sock], level const[IPPROTO_IP], optname const[IP_MSFILTER], optval ptr[out, ip_msfilter], optlen ptr[inout, len[optval, int32]])
+setsockopt$ip_msfilter(fd fd[sock], level const[IPPROTO_IP], optname const[IP_MSFILTER], optval ptr[in, ip_msfilter], optlen len[optval])
+getsockopt$ip_mtu(fd fd[sock], level const[IPPROTO_IP], optname const[IP_MTU_DISCOVER], optval ptr[out, flags[ip_mtu_discover, int32]], optlen ptr[inout, len[optval, int32]])
+setsockopt$ip_mtu(fd fd[sock], level const[IPPROTO_IP], optname const[IP_MTU_DISCOVER], optval ptr[in, flags[ip_mtu_discover, int32]], optlen len[optval])
+getsockopt$ip_opts(fd fd[sock], level const[IPPROTO_IP], optname flags[sockopt_opt_ip_opts], optval buffer[out], optlen ptr[inout, len[optval, int32]])
+setsockopt$ip_opts(fd fd[sock], level const[IPPROTO_IP], optname flags[sockopt_opt_ip_opts], optval buffer[in], optlen len[optval])
+getsockopt$ip_pktinfo(fd fd[sock], level const[IPPROTO_IP], optname const[IP_PKTINFO], optval ptr[out, in_pktinfo], optlen ptr[inout, len[optval, int32]])
+setsockopt$ip_pktinfo(fd fd[sock], level const[IPPROTO_IP], optname const[IP_PKTINFO], optval ptr[in, in_pktinfo], optlen len[optval])
+getsockopt$ip_ipsec(fd fd[sock], level const[IPPROTO_IP], optname const[IP_IPSEC_POLICY], optval ptr[out, xfrm_filer], optlen ptr[inout, len[optval, int32]])
+setsockopt$ip_ipsec(fd fd[sock], level const[IPPROTO_IP], optname const[IP_IPSEC_POLICY], optval ptr[in, xfrm_filer], optlen len[optval])
+getsockopt$ipv6_int(fd fd[sock], level const[IPPROTO_IPV6], optname flags[sockopt_opt_ipv6_int], optval ptr[out, int32], optlen ptr[inout, len[optval, int32]])
+setsockopt$ipv6_int(fd fd[sock], level const[IPPROTO_IPV6], optname flags[sockopt_opt_ipv6_int], optval ptr[in, int32], optlen len[optval])
+getsockopt$ipv6_mreq(fd fd[sock], level const[IPPROTO_IPV6], optname flags[sockopt_opt_ipv6_mreq], optval ptr[out, ipv6_mreq], optlen ptr[inout, len[optval, int32]])
+setsockopt$ipv6_mreq(fd fd[sock], level const[IPPROTO_IPV6], optname flags[sockopt_opt_ipv6_mreq], optval ptr[in, ipv6_mreq], optlen len[optval])
+getsockopt$ipv6_mtu(fd fd[sock], level const[IPPROTO_IPV6], optname const[IPV6_MTU_DISCOVER], optval ptr[out, flags[ip_mtu_discover, int32]], optlen ptr[inout, len[optval, int32]])
+setsockopt$ipv6_mtu(fd fd[sock], level const[IPPROTO_IPV6], optname const[IPV6_MTU_DISCOVER], optval ptr[in, flags[ip_mtu_discover, int32]], optlen len[optval])
+getsockopt$ipv6_opts(fd fd[sock], level const[IPPROTO_IPV6], optname const[IPV6_2292PKTOPTIONS], optval buffer[out], optlen ptr[inout, len[optval, int32]])
+setsockopt$ipv6_opts(fd fd[sock], level const[IPPROTO_IPV6], optname const[IPV6_2292PKTOPTIONS], optval buffer[in], optlen len[optval])
+
+socket_domain = AF_LOCAL, AF_INET, AF_INET6, AF_IPX, AF_NETLINK, AF_X25, AF_AX25, AF_ATMPVC, AF_APPLETALK, AF_PACKET
+socket_type = SOCK_STREAM, SOCK_DGRAM, SOCK_SEQPACKET, SOCK_RAW, SOCK_RDM, SOCK_PACKET, SOCK_NONBLOCK, SOCK_CLOEXEC
+accept_flags = SOCK_NONBLOCK, SOCK_CLOEXEC
+shutdown_flags = SHUT_RD, SHUT_WR
+send_flags = MSG_CONFIRM, MSG_DONTROUTE, MSG_DONTWAIT, MSG_EOR, MSG_MORE, MSG_NOSIGNAL, MSG_OOB
+recv_flags = MSG_CMSG_CLOEXEC, MSG_DONTWAIT, MSG_ERRQUEUE, MSG_OOB, MSG_PEEK, MSG_TRUNC, MSG_WAITALL, MSG_WAITFORONE
+
+
+
+
+# PF_ALG support.
+
+socket$alg(domain const[AF_ALG], type const[SOCK_SEQPACKET], proto const[0]) fd[alg]
+bind$alg(fd fd[alg], addr ptr[in, sockaddr_alg], addrlen len[addr])
+setsockopt$ALG_SET_KEY(fd fd[alg], level const[SOL_ALG], opt const[ALG_SET_KEY], key buffer[in], keylen len[key])
+setsockopt$ALG_SET_AEAD_AUTHSIZE(fd fd[alg], level const[SOL_ALG], opt const[ALG_SET_AEAD_AUTHSIZE], val const[0], size intptr)
+accept$alg(fd fd[alg], peer ptr[out, sockaddr_alg, opt], peerlen ptr[inout, len[peer, int32]]) fd[algconn]
+sendmsg$alg(fd fd[algconn], msg ptr[in, alg_send_msghdr], f flags[send_flags])
+sendmmsg$alg(fd fd[algconn], mmsg ptr[in, array[alg_send_msghdr]], vlen len[mmsg], f flags[send_flags])
+recvmsg$alg(fd fd[algconn], msg ptr[in, alg_recv_msghdr], f flags[recv_flags])
+recvmmsg$alg(fd fd[algconn], mmsg ptr[in, array[alg_recv_msghdr]], vlen len[mmsg], f flags[recv_flags])
+
+sockaddr_alg {
+ family const[AF_ALG, int16]
+ type salg_type
+ feat flags[af_alg_type, int32]
+ mask flags[af_alg_type, int32]
+ name salg_name
+}
+
+alg_send_msghdr {
+ addr const[0, intptr]
+ addrlen const[0, int32]
+ vec ptr[in, array[iovec_in]]
+ vlen len[vec, intptr]
+ ctrl ptr[in, alg_cmsghdr, opt]
+ ctrllen len[ctrl, intptr]
+ f flags[send_flags, int32]
+}
+
+alg_recv_msghdr {
+ addr const[0, intptr]
+ addrlen const[0, int32]
+ vec ptr[in, array[iovec_out]]
+ vlen len[vec, intptr]
+ ctrl buffer[out]
+ ctrllen len[ctrl, intptr]
+ f int32
+}
+
+alg_cmsghdr {
+ iv alg_cmsghdr_iv
+ op alg_cmsghdr_op
+ assoc alg_cmsghdr_assoc
+}
+
+alg_cmsghdr_iv {
+ len len[parent, intptr]
+ level const[SOL_ALG, int32]
+ type const[ALG_SET_IV, int32]
+ ivlen len[iv, int32]
+ iv array[int8]
+}
+
+alg_cmsghdr_op {
+ len len[parent, intptr]
+ level const[SOL_ALG, int32]
+ type const[ALG_SET_OP, int32]
+ op int32
+}
+
+alg_cmsghdr_assoc {
+ len len[parent, intptr]
+ level const[SOL_ALG, int32]
+ type const[ALG_SET_AEAD_ASSOCLEN, int32]
+ assoc int32
+}
+
+af_alg_type = CRYPTO_ALG_TYPE_MASK, CRYPTO_ALG_TYPE_CIPHER, CRYPTO_ALG_TYPE_COMPRESS, CRYPTO_ALG_TYPE_AEAD, CRYPTO_ALG_TYPE_BLKCIPHER, CRYPTO_ALG_TYPE_ABLKCIPHER, CRYPTO_ALG_TYPE_GIVCIPHER, CRYPTO_ALG_TYPE_DIGEST, CRYPTO_ALG_TYPE_HASH, CRYPTO_ALG_TYPE_SHASH, CRYPTO_ALG_TYPE_AHASH, CRYPTO_ALG_TYPE_RNG, CRYPTO_ALG_TYPE_AKCIPHER, CRYPTO_ALG_TYPE_PCOMPRESS, CRYPTO_ALG_LARVAL, CRYPTO_ALG_DEAD, CRYPTO_ALG_DYING, CRYPTO_ALG_ASYNC, CRYPTO_ALG_NEED_FALLBACK, CRYPTO_ALG_GENIV, CRYPTO_ALG_TESTED, CRYPTO_ALG_INSTANCE, CRYPTO_ALG_KERN_DRIVER_ONLY, CRYPTO_ALG_INTERNAL
+
+define CRYPTO_ALG_TYPE_MASK 0x0000000f
+define CRYPTO_ALG_TYPE_CIPHER 0x00000001
+define CRYPTO_ALG_TYPE_COMPRESS 0x00000002
+define CRYPTO_ALG_TYPE_AEAD 0x00000003
+define CRYPTO_ALG_TYPE_BLKCIPHER 0x00000004
+define CRYPTO_ALG_TYPE_ABLKCIPHER 0x00000005
+define CRYPTO_ALG_TYPE_GIVCIPHER 0x00000006
+define CRYPTO_ALG_TYPE_DIGEST 0x00000008
+define CRYPTO_ALG_TYPE_HASH 0x00000008
+define CRYPTO_ALG_TYPE_SHASH 0x00000009
+define CRYPTO_ALG_TYPE_AHASH 0x0000000a
+define CRYPTO_ALG_TYPE_RNG 0x0000000c
+define CRYPTO_ALG_TYPE_AKCIPHER 0x0000000d
+define CRYPTO_ALG_TYPE_PCOMPRESS 0x0000000f
+define CRYPTO_ALG_LARVAL 0x00000010
+define CRYPTO_ALG_DEAD 0x00000020
+define CRYPTO_ALG_DYING 0x00000040
+define CRYPTO_ALG_ASYNC 0x00000080
+define CRYPTO_ALG_NEED_FALLBACK 0x00000100
+define CRYPTO_ALG_GENIV 0x00000200
+define CRYPTO_ALG_TESTED 0x00000400
+define CRYPTO_ALG_INSTANCE 0x00000800
+define CRYPTO_ALG_KERN_DRIVER_ONLY 0x00001000
+define CRYPTO_ALG_INTERNAL 0x00002000
+define ALG_SET_KEY 1
+define ALG_SET_IV 2
+define ALG_SET_OP 3
+define ALG_SET_AEAD_ASSOCLEN 4
+define ALG_SET_AEAD_AUTHSIZE 5
+#define AF_ALG 38
+define SOL_ALG 279
+
+
+
+
+# PF_KEY support.
+
+# See net/key/af_key.c, requires root.
+# socket$key(domain const[AF_KEY], type const[SOCK_RAW], proto const[PF_KEY_V2]) fd[key]
+
+
+
+
+# PF_NFC support.
+
+socket$nfc_llcp(domain const[AF_NFC], type flags[nfc_llcp_type], proto const[NFC_SOCKPROTO_LLCP]) fd[nfc_llcp]
+bind$nfc_llcp(fd fd[nfc_llcp], addr ptr[in, sockaddr_nfc_llcp], addrlen len[addr])
+connect$nfc_llcp(fd fd[nfc_llcp], addr ptr[in, sockaddr_nfc_llcp], addrlen len[addr])
+accept$nfc_llcp(fd fd[nfc_llcp], peer ptr[out, sockaddr_nfc_llcp, opt], peerlen ptr[inout, len[peer, int32]]) fd[nfc_llcp]
+setsockopt$NFC_LLCP_RW(fd fd[nfc_llcp], level const[SOL_NFC], opt const[NFC_LLCP_RW], arg ptr[in, int32], arglen len[arg])
+setsockopt$NFC_LLCP_MIUX(fd fd[nfc_llcp], level const[SOL_NFC], opt const[NFC_LLCP_MIUX], arg ptr[in, int32], arglen len[arg])
+getsockopt$nfc_llcp(fd fd[nfc_llcp], level const[SOL_NFC], opt flags[nfc_llcp_opts], arg buffer[out], arglen len[arg])
+sendmsg$nfc_llcp(fd fd[nfc_llcp], msg ptr[in, nfc_llcp_send_msghdr], f flags[send_flags])
+sendmmsg$nfc_llcp(fd fd[nfc_llcp], mmsg ptr[in, array[nfc_llcp_send_msghdr]], vlen len[mmsg], f flags[send_flags])
+
+socket$nfc_raw(domain const[AF_NFC], type flags[nfc_raw_type], proto const[NFC_SOCKPROTO_RAW]) fd[nfc_raw]
+connect$nfc_raw(fd fd[nfc_raw], addr ptr[in, sockaddr_nfc], addrlen len[addr])
+
+nfc_llcp_type = SOCK_STREAM, SOCK_DGRAM, SOCK_RAW
+nfc_raw_type = SOCK_STREAM, SOCK_RAW
+nfc_proto = NFC_PROTO_JEWEL, NFC_PROTO_MIFARE, NFC_PROTO_FELICA, NFC_PROTO_ISO14443, NFC_PROTO_NFC_DEP, NFC_PROTO_ISO14443_B, NFC_PROTO_ISO15693
+nfc_llcp_opts = NFC_LLCP_RW, NFC_LLCP_MIUX, NFC_LLCP_REMOTE_MIU, NFC_LLCP_REMOTE_LTO, NFC_LLCP_REMOTE_RW
+
+sockaddr_nfc_llcp {
+ family const[AF_NFC, int16]
+ devidx int32
+ target int32
+ proto flags[nfc_proto, int32]
+ dsap int8
+ ssap int8
+# TODO: need fixed-length arrays
+# char service_name[63]
+ serv0 int8
+ serv1 int8
+ serv2 int32
+ serv3 int32
+ serv4 int32
+ serv5 int32
+ serv6 int32
+ serv7 int32
+ serv8 int32
+ serv9 int32
+ serv10 int32
+ serv11 int32
+ serv12 int32
+ serv13 int32
+ serv14 int32
+ serv15 int32
+ serv16 int32
+ serv17 int8
+ servlen intptr
+}
+
+sockaddr_nfc {
+ family const[AF_NFC, int16]
+ dev int32
+ targ int32
+ proto flags[nfc_proto, int32]
+}
+
+nfc_llcp_send_msghdr {
+ addr ptr[in, sockaddr_nfc_llcp]
+ addrlen len[addr, int32]
+ vec ptr[in, array[iovec_in]]
+ vlen len[vec, intptr]
+ ctrl ptr[in, cmsghdr]
+ ctrllen len[ctrl, intptr]
+ f flags[send_flags, int32]
+}
+
+define SOL_NFC 280
+define NFC_PROTO_ISO15693 7
+
+
+
+
+# PF_BLUETOOTH support.
+
+socket$bt_hci(fam const[PF_BLUETOOTH], type const[SOCK_RAW], proto const[BTPROTO_HCI]) fd[bt_hci]
+bind$bt_hci(fd fd[bt_hci], addr ptr[in, sockaddr_hci], addrlen len[addr])
+ioctl$bt_hci(fd fd[bt_hci], cmd flags[bt_hci_ioctl], arg buffer[inout])
+setsockopt$HCI_DATA_DIR(fd fd[bt_hci], level const[0], opt const[HCI_DATA_DIR], arg ptr[in, int32], arglen len[arg])
+setsockopt$HCI_TIME_STAMP(fd fd[bt_hci], level const[0], opt const[HCI_TIME_STAMP], arg ptr[in, int32], arglen len[arg])
+setsockopt$HCI_FILTER(fd fd[bt_hci], level const[0], opt const[HCI_FILTER], arg ptr[in, hci_ufilter], arglen len[arg])
+getsockopt$bt_hci(fd fd[sock], level const[0], opt flags[bt_hci_sockopt], arg buffer[out], arglen ptr[inout, len[arg, int32]])
+
+socket$bt_sco(fam const[PF_BLUETOOTH], type const[SOCK_SEQPACKET], proto const[BTPROTO_SCO]) fd[bt_sco]
+bind$bt_sco(fd fd[bt_sco], addr ptr[in, sockaddr_sco], addrlen len[addr])
+connect$bt_sco(fd fd[bt_sco], addr ptr[in, sockaddr_sco], addrlen len[addr])
+getsockopt$SCO_OPTIONS(fd fd[bt_sco], level const[SOL_SCO], opt const[SCO_OPTIONS], arg buffer[out], arglen ptr[inout, len[arg, int32]])
+getsockopt$SCO_CONNINFO(fd fd[bt_sco], level const[SOL_SCO], opt const[SCO_CONNINFO], arg buffer[out], arglen ptr[inout, len[arg, int32]])
+
+socket$bt_l2cap(fam const[PF_BLUETOOTH], type flags[bt_l2cap_type], proto const[BTPROTO_L2CAP]) fd[bt_l2cap]
+bind$bt_l2cap(fd fd[bt_l2cap], addr ptr[in, sockaddr_l2], addrlen len[addr])
+connect$bt_l2cap(fd fd[bt_l2cap], addr ptr[in, sockaddr_l2], addrlen len[addr])
+setsockopt$L2CAP_OPTIONS(fd fd[bt_l2cap], level const[SOL_L2CAP], opt const[L2CAP_OPTIONS], arg ptr[in, l2cap_options], arglen len[arg])
+getsockopt$L2CAP_OPTIONS(fd fd[bt_l2cap], level const[SOL_L2CAP], opt const[L2CAP_OPTIONS], arg ptr[out, l2cap_options], arglen ptr[inout, len[arg, int32]])
+setsockopt$L2CAP_LM(fd fd[bt_l2cap], level const[SOL_L2CAP], opt const[L2CAP_LM], arg ptr[in, flags[bt_l2cap_lm, int32]], arglen len[arg])
+getsockopt$L2CAP_LM(fd fd[bt_l2cap], level const[SOL_L2CAP], opt const[L2CAP_LM], arg ptr[out, int32], arglen ptr[inout, len[arg, int32]])
+setsockopt$L2CAP_CONNINFO(fd fd[bt_l2cap], level const[SOL_L2CAP], opt const[L2CAP_CONNINFO], arg ptr[in, l2cap_conninfo], arglen len[arg])
+getsockopt$L2CAP_CONNINFO(fd fd[bt_l2cap], level const[SOL_L2CAP], opt const[L2CAP_CONNINFO], arg ptr[out, l2cap_conninfo], arglen ptr[inout, len[arg, int32]])
+
+socket$bt_rfcomm(fam const[PF_BLUETOOTH], type flags[bt_rfcomm_type], proto const[BTPROTO_RFCOMM]) fd[bt_rfcomm]
+bind$bt_rfcomm(fd fd[bt_rfcomm], addr ptr[in, sockaddr_rc], addrlen len[addr])
+connect$bt_rfcomm(fd fd[bt_rfcomm], addr ptr[in, sockaddr_rc], addrlen len[addr])
+setsockopt$RFCOMM_LM(fd fd[bt_rfcomm], level const[SOL_RFCOMM], opt const[RFCOMM_LM], arg ptr[in, flags[bt_l2cap_lm, int32]], arglen len[arg])
+getsockopt$RFCOMM_LM(fd fd[bt_rfcomm], level const[SOL_RFCOMM], opt const[RFCOMM_LM], arg ptr[out, int32], arglen ptr[inout, len[arg, int32]])
+getsockopt$RFCOMM_CONNINFO(fd fd[bt_rfcomm], level const[SOL_RFCOMM], opt const[RFCOMM_CONNINFO], arg buffer[out], arglen ptr[inout, len[arg, int32]])
+
+socket$bt_hidp(fam const[PF_BLUETOOTH], type const[SOCK_RAW], proto const[BTPROTO_HIDP]) fd[bt_hidp]
+ioctl$HIDPCONNADD(fd fd[bt_hidp], cmd const[HIDPCONNADD], arg ptr[in, hidp_connadd_req])
+ioctl$HIDPCONNDEL(fd fd[bt_hidp], cmd const[HIDPCONNDEL], arg ptr[in, hidp_conndel_req])
+ioctl$HIDPGETCONNLIST(fd fd[bt_hidp], cmd const[HIDPGETCONNLIST], arg ptr[in, hidp_connlist_req])
+ioctl$HIDPGETCONNINFO(fd fd[bt_hidp], cmd const[HIDPGETCONNINFO], arg ptr[in, hidp_conninfo])
+
+socket$bt_cmtp(fam const[PF_BLUETOOTH], type const[SOCK_RAW], proto const[BTPROTO_CMTP]) fd[bt_cmtp]
+ioctl$CMTPCONNADD(fd fd[bt_cmtp], cmd const[CMTPCONNADD], arg ptr[in, cmtp_connadd_req])
+ioctl$CMTPCONNDEL(fd fd[bt_cmtp], cmd const[CMTPCONNDEL], arg ptr[in, cmtp_conndel_req])
+ioctl$CMTPGETCONNLIST(fd fd[bt_cmtp], cmd const[CMTPGETCONNLIST], arg ptr[in, cmtp_connlist_req])
+ioctl$CMTPGETCONNINFO(fd fd[bt_cmtp], cmd const[CMTPGETCONNINFO], arg ptr[in, cmtp_conninfo])
+
+socket$bt_bnep(fam const[PF_BLUETOOTH], type const[SOCK_RAW], proto const[BTPROTO_BNEP]) fd[bt_bnep]
+ioctl$BNEPCONNADD(fd fd[bt_bnep], cmd const[BNEPCONNADD], arg ptr[in, bnep_connadd_req])
+ioctl$BNEPCONNDEL(fd fd[bt_bnep], cmd const[BNEPCONNDEL], arg ptr[in, bnep_conndel_req])
+ioctl$BNEPGETCONNLIST(fd fd[bt_bnep], cmd const[BNEPGETCONNLIST], arg ptr[in, bnep_connlist_req])
+ioctl$BNEPGETCONNINFO(fd fd[bt_bnep], cmd const[BNEPGETCONNINFO], arg ptr[in, bnep_conninfo])
+ioctl$BNEPGETSUPPFEAT(fd fd[bt_bnep], cmd const[BNEPGETSUPPFEAT], arg ptr[in, int32])
+
+# These are common for several bluetooth sockets (sco, l2cap, rfcomm).
+ioctl$bt(fd fd, cmd flags[bt_ioctl], arg buffer[inout])
+setsockopt$BT_SECURITY(fd fd, level const[SOL_BLUETOOTH], opt const[BT_SECURITY], arg ptr[in, bt_security], arglen len[arg])
+getsockopt$BT_SECURITY(fd fd, level const[SOL_BLUETOOTH], opt const[BT_SECURITY], arg ptr[out, bt_security], arglen len[arg])
+setsockopt$BT_DEFER_SETUP(fd fd, level const[SOL_BLUETOOTH], opt const[BT_DEFER_SETUP], arg ptr[in, int32], arglen len[arg])
+getsockopt$BT_DEFER_SETUP(fd fd, level const[SOL_BLUETOOTH], opt const[BT_DEFER_SETUP], arg ptr[in, int32], arglen ptr[in, len[arg, intptr]])
+setsockopt$BT_VOICE(fd fd, level const[SOL_BLUETOOTH], opt const[BT_VOICE], arg ptr[in, int16], arglen len[arg])
+getsockopt$BT_VOICE(fd fd, level const[SOL_BLUETOOTH], opt const[BT_VOICE], arg ptr[in, int16], arglen ptr[in, len[arg, intptr]])
+setsockopt$BT_FLUSHABLE(fd fd, level const[SOL_BLUETOOTH], opt const[BT_FLUSHABLE], arg ptr[in, int32], arglen len[arg])
+getsockopt$BT_FLUSHABLE(fd fd, level const[SOL_BLUETOOTH], opt const[BT_FLUSHABLE], arg ptr[in, int32], arglen ptr[in, len[arg, intptr]])
+setsockopt$BT_POWER(fd fd, level const[SOL_BLUETOOTH], opt const[BT_POWER], arg ptr[in, int8], arglen len[arg])
+getsockopt$BT_POWER(fd fd, level const[SOL_BLUETOOTH], opt const[BT_POWER], arg ptr[in, int8], arglen ptr[in, len[arg, intptr]])
+setsockopt$BT_CHANNEL_POLICY(fd fd, level const[SOL_BLUETOOTH], opt const[BT_CHANNEL_POLICY], arg ptr[in, int32], arglen len[arg])
+getsockopt$BT_CHANNEL_POLICY(fd fd, level const[SOL_BLUETOOTH], opt const[BT_CHANNEL_POLICY], arg ptr[in, int32], arglen ptr[in, len[arg, intptr]])
+setsockopt$BT_SNDMTU(fd fd, level const[SOL_BLUETOOTH], opt const[BT_SNDMTU], arg ptr[in, int16], arglen len[arg])
+getsockopt$BT_SNDMTU(fd fd, level const[SOL_BLUETOOTH], opt const[BT_SNDMTU], arg ptr[in, int16], arglen ptr[in, len[arg, intptr]])
+setsockopt$BT_RCVMTU(fd fd, level const[SOL_BLUETOOTH], opt const[BT_RCVMTU], arg ptr[in, int16], arglen len[arg])
+getsockopt$BT_RCVMTU(fd fd, level const[SOL_BLUETOOTH], opt const[BT_RCVMTU], arg ptr[in, int16], arglen ptr[in, len[arg, intptr]])
+
+sockaddr_hci {
+ fam const[PF_BLUETOOTH, int16]
+ dev int16
+ chan flags[bt_chi_chan, int16]
+}
+
+hci_inquiry_req {
+ dev int16
+ flags int16
+ lap0 int8
+ lap1 int8
+ lap2 int8
+ len int8
+ rsp int8
+}
+
+hci_ufilter {
+ type int32
+ event0 int32
+ event1 int32
+ opcode int16
+}
+
+sockaddr_sco {
+ fam const[PF_BLUETOOTH, int16]
+ addr bdaddr
+}
+
+sockaddr_l2 {
+ fam const[PF_BLUETOOTH, int16]
+ psm int16
+ addr bdaddr
+ cid int16
+ typ int8
+}
+
+bdaddr {
+ addr0 int8
+ addr1 int8
+ addr2 int8
+ addr3 int8
+ addr4 int8
+ addr5 int8
+}
+
+bt_security {
+ lev int8
+ keysize int8
+}
+
+l2cap_options {
+ omtu int16
+ imtu int16
+ flushto int16
+ mode int8
+ fcs int8
+ maxtx int8
+ txwin int16
+}
+
+l2cap_conninfo {
+ handle int16
+ devcls0 int8
+ devcls1 int8
+ devcls2 int8
+}
+
+sockaddr_rc {
+ fam const[PF_BLUETOOTH, int16]
+ addr bdaddr
+ chan int8
+}
+
+hidp_connadd_req {
+ ctrlsk fd
+ intrsk fd
+ parser int16
+ rdsize int16
+ rddata buffer[in]
+ country int8
+ subclas int8
+ vendor int16
+ product int16
+ version int16
+ flags int32
+ idleto int32
+ name array[int8]
+}
+
+hidp_conndel_req {
+ addr bdaddr
+ flags int32
+}
+
+hidp_conninfo {
+ addr bdaddr
+ flags int32
+ state int16
+ vendor int16
+ product int16
+ ver int16
+ name array[int8]
+}
+
+hidp_connlist_req {
+ cnum len[ci, int32]
+ ci ptr[out, array[hidp_conninfo]]
+}
+
+cmtp_connadd_req {
+ sock fd
+ flags int32
+}
+
+cmtp_conndel_req {
+ addr bdaddr
+ flags int32
+}
+
+cmtp_conninfo {
+ addr bdaddr
+ flags int32
+ state int16
+ num int32
+}
+
+cmtp_connlist_req {
+ cnum len[ci, int32]
+ ci ptr[out, array[cmtp_conninfo]]
+}
+
+bnep_connadd_req {
+ sock fd
+ flags int32
+ role int16
+ device array[int8]
+}
+
+bnep_conndel_req {
+ flags int32
+ dst array[int8, 6]
+}
+
+bnep_conninfo {
+ flags int32
+ role int16
+ state int16
+ dst array[int8, 6]
+ device array[int8, 16]
+}
+
+bnep_connlist_req {
+ cnum len[ci, int32]
+ ci ptr[out, array[bnep_conninfo]]
+}
+
+bt_chi_chan = HCI_CHANNEL_RAW, HCI_CHANNEL_USER, HCI_CHANNEL_MONITOR, HCI_CHANNEL_CONTROL
+bt_hci_ioctl = HCIDEVUP, HCIDEVDOWN, HCIDEVRESET, HCIDEVRESTAT, HCIGETDEVLIST, HCIGETDEVINFO, HCIGETCONNLIST, HCIGETCONNINFO, HCIGETAUTHINFO, HCISETRAW, HCISETSCAN, HCISETAUTH, HCISETENCRYPT, HCISETPTYPE, HCISETLINKPOL, HCISETLINKMODE, HCISETACLMTU, HCISETSCOMTU, HCIBLOCKADDR, HCIUNBLOCKADDR, HCIINQUIRY
+bt_hci_sockopt = HCI_DATA_DIR, HCI_TIME_STAMP, HCI_FILTER
+bt_ioctl = TIOCOUTQ, TIOCINQ, SIOCGSTAMP, SIOCGSTAMPNS
+bt_l2cap_type = SOCK_SEQPACKET, SOCK_STREAM, SOCK_DGRAM, SOCK_RAW
+bt_l2cap_lm = L2CAP_LM_MASTER, L2CAP_LM_AUTH, L2CAP_LM_ENCRYPT, L2CAP_LM_TRUSTED, L2CAP_LM_RELIABLE, L2CAP_LM_SECURE, L2CAP_LM_FIPS
+bt_rfcomm_type = SOCK_STREAM, SOCK_RAW
+
+define BTPROTO_L2CAP 0
+define BTPROTO_HCI 1
+define BTPROTO_SCO 2
+define BTPROTO_RFCOMM 3
+define BTPROTO_BNEP 4
+define BTPROTO_CMTP 5
+define BTPROTO_HIDP 6
+define BTPROTO_AVDTP 7
+
+define SOL_BLUETOOTH 274
+define SOL_HCI 0
+define SOL_L2CAP 6
+define SOL_SCO 17
+define SOL_RFCOMM 18
+
+define HCI_DATA_DIR 1
+define HCI_FILTER 2
+define HCI_TIME_STAMP 3
+
+define HCI_CHANNEL_RAW 0
+define HCI_CHANNEL_USER 1
+define HCI_CHANNEL_MONITOR 2
+define HCI_CHANNEL_CONTROL 3
+
+define HCIDEVUP _IOW('H', 201, int)
+define HCIDEVDOWN _IOW('H', 202, int)
+define HCIDEVRESET _IOW('H', 203, int)
+define HCIDEVRESTAT _IOW('H', 204, int)
+define HCIGETDEVLIST _IOR('H', 210, int)
+define HCIGETDEVINFO _IOR('H', 211, int)
+define HCIGETCONNLIST _IOR('H', 212, int)
+define HCIGETCONNINFO _IOR('H', 213, int)
+define HCIGETAUTHINFO _IOR('H', 215, int)
+define HCISETRAW _IOW('H', 220, int)
+define HCISETSCAN _IOW('H', 221, int)
+define HCISETAUTH _IOW('H', 222, int)
+define HCISETENCRYPT _IOW('H', 223, int)
+define HCISETPTYPE _IOW('H', 224, int)
+define HCISETLINKPOL _IOW('H', 225, int)
+define HCISETLINKMODE _IOW('H', 226, int)
+define HCISETACLMTU _IOW('H', 227, int)
+define HCISETSCOMTU _IOW('H', 228, int)
+define HCIBLOCKADDR _IOW('H', 230, int)
+define HCIUNBLOCKADDR _IOW('H', 231, int)
+define HCIINQUIRY _IOR('H', 240, int)
+
+define BT_SECURITY 4
+define BT_DEFER_SETUP 7
+define BT_VOICE 11
+define BT_SNDMTU 12
+define BT_RCVMTU 13
+define BT_CHANNEL_POLICY 10
+define BT_FLUSHABLE 8
+define BT_POWER 9
+
+define SCO_OPTIONS 0x01
+define SCO_CONNINFO 0x02
+
+define L2CAP_OPTIONS 0x01
+define L2CAP_CONNINFO 0x02
+define L2CAP_LM 0x03
+
+define L2CAP_LM_MASTER 0x0001
+define L2CAP_LM_AUTH 0x0002
+define L2CAP_LM_ENCRYPT 0x0004
+define L2CAP_LM_TRUSTED 0x0008
+define L2CAP_LM_RELIABLE 0x0010
+define L2CAP_LM_SECURE 0x0020
+define L2CAP_LM_FIPS 0x0040
+
+define RFCOMM_CONNINFO 0x02
+define RFCOMM_LM 0x03
+
+define HIDPCONNADD _IOW('H', 200, int)
+define HIDPCONNDEL _IOW('H', 201, int)
+define HIDPGETCONNLIST _IOR('H', 210, int)
+define HIDPGETCONNINFO _IOR('H', 211, int)
+
+define CMTPCONNADD _IOW('C', 200, int)
+define CMTPCONNDEL _IOW('C', 201, int)
+define CMTPGETCONNLIST _IOR('C', 210, int)
+define CMTPGETCONNINFO _IOR('C', 211, int)
+
+define BNEPCONNADD _IOW('B', 200, int)
+define BNEPCONNDEL _IOW('B', 201, int)
+define BNEPGETCONNLIST _IOR('B', 210, int)
+define BNEPGETCONNINFO _IOR('B', 211, int)
+define BNEPGETSUPPFEAT _IOR('B', 212, int)
+