aboutsummaryrefslogtreecommitdiffstats
path: root/sys/linux/socket_netlink_sock_diag.txt
blob: 18d5fa48f82afb7e18e93510e01422bf1b66c422 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# Copyright 2020 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.

include <linux/net.h>
include <uapi/linux/netlink.h>
include <uapi/linux/sock_diag.h>
include <uapi/linux/inet_diag.h>

resource sock_diag[sock_netlink]

socket$nl_sock_diag(domain const[AF_NETLINK], type const[SOCK_RAW], proto const[NETLINK_SOCK_DIAG]) sock_diag

sendmsg$SOCK_DIAG_BY_FAMILY(fd sock_diag, msg ptr[in, msghdr_netlink[netlink_msg[SOCK_DIAG_BY_FAMILY, sock_diag_req, tcpdiag_policy]]], f flags[send_flags])
sendmsg$SOCK_DESTROY(fd sock_diag, msg ptr[in, msghdr_netlink[netlink_msg[SOCK_DESTROY, sock_diag_req, tcpdiag_policy]]], f flags[send_flags])
sendmsg$TCPDIAG_GETSOCK(fd sock_diag, msg ptr[in, msghdr_netlink[netlink_msg[TCPDIAG_GETSOCK, inet_diag_req, tcpdiag_policy]]], f flags[send_flags])
sendmsg$DCCPDIAG_GETSOCK(fd sock_diag, msg ptr[in, msghdr_netlink[netlink_msg[DCCPDIAG_GETSOCK, inet_diag_req, tcpdiag_policy]]], f flags[send_flags])

# TODO: this may actually be inet_diag_req_v2 for inet protocols.
sock_diag_req {
	sdiag_family	flags[socket_domain, int8]
	sdiag_protocol	int8
}

inet_diag_req {
	idiag_family	flags[socket_domain, int8]
	idiag_src_len	int8
	idiag_dst_len	int8
	idiag_ext	int8
	id		inet_diag_sockid
	idiag_states	int32
	idiag_dbs	int32
}

inet_diag_sockid {
	idiag_sport	sock_port
	idiag_dport	sock_port
# TODO: this may be ipv4/ipv6 addr
	idiag_src	array[int32, 4]
	idiag_dst	array[int32, 4]
	idiag_if	ifindex[opt]
	idiag_cookie	array[int32, 2]
}

tcpdiag_policy [
	INET_DIAG_REQ_BYTECODE	nlattr[INET_DIAG_REQ_BYTECODE, array[int8]]
] [varlen]