aboutsummaryrefslogtreecommitdiffstats
path: root/sys/linux/socket_tipc.txt
blob: 2a72665824510d9ebf31d8abe4fee57b93fdbfbe (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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# Copyright 2018 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/tipc.h>
include <net/tipc/core.h>

resource sock_tipc[sock]

type tipc_instance int32[0:4]
type tipc_node_addr int32[0:4]
type tipc_port int32[20000:20004]

socket$tipc(domain const[AF_TIPC], type flags[tipc_socket_types], proto const[0]) sock_tipc
socketpair$tipc(domain const[AF_TIPC], type flags[tipc_socket_types], proto const[0], fds ptr[out, tipc_pair])
bind$tipc(fd sock_tipc, addr ptr[in, sockaddr_tipc, opt], addrlen len[addr])
connect$tipc(fd sock_tipc, addr ptr[in, sockaddr_tipc], addrlen len[addr])
accept4$tipc(fd sock_tipc, peer ptr[out, sockaddr_tipc, opt], peerlen ptr[inout, len[peer, int32]], flags flags[accept_flags]) sock_tipc
getsockname$tipc(fd sock_tipc, addr ptr[out, sockaddr_tipc], addrlen ptr[inout, len[addr, int32]])
getpeername$tipc(fd sock_tipc, peer ptr[out, sockaddr_tipc], peerlen ptr[inout, len[peer, int32]])
sendmsg$tipc(fd sock_tipc, msg ptr[in, msghdr_tipc], f flags[send_flags])

ioctl$SIOCGETLINKNAME(fd sock_tipc, cmd const[SIOCGETLINKNAME], arg ptr[in, tipc_sioc_ln_req])
ioctl$SIOCGETNODEID(fd sock_tipc, cmd const[SIOCGETNODEID], arg ptr[in, tipc_sioc_nodeid_req])

setsockopt$TIPC_IMPORTANCE(fd sock_tipc, level const[SOL_TIPC], opt const[TIPC_IMPORTANCE], val ptr[in, int32], len bytesize[val])
setsockopt$TIPC_SRC_DROPPABLE(fd sock_tipc, level const[SOL_TIPC], opt const[TIPC_SRC_DROPPABLE], val ptr[in, int32], len bytesize[val])
setsockopt$TIPC_DEST_DROPPABLE(fd sock_tipc, level const[SOL_TIPC], opt const[TIPC_DEST_DROPPABLE], val ptr[in, int32], len bytesize[val])
setsockopt$TIPC_CONN_TIMEOUT(fd sock_tipc, level const[SOL_TIPC], opt const[TIPC_CONN_TIMEOUT], val ptr[in, int32], len bytesize[val])
setsockopt$TIPC_MCAST_BROADCAST(fd sock_tipc, level const[SOL_TIPC], opt const[TIPC_MCAST_BROADCAST])
setsockopt$TIPC_MCAST_REPLICAST(fd sock_tipc, level const[SOL_TIPC], opt const[TIPC_MCAST_REPLICAST])
setsockopt$TIPC_GROUP_LEAVE(fd sock_tipc, level const[SOL_TIPC], opt const[TIPC_GROUP_LEAVE])
setsockopt$TIPC_GROUP_JOIN(fd sock_tipc, level const[SOL_TIPC], opt const[TIPC_GROUP_JOIN], val ptr[in, tipc_group_req], len bytesize[val])

getsockopt$TIPC_IMPORTANCE(fd sock_tipc, level const[SOL_TIPC], opt const[TIPC_IMPORTANCE], val ptr[out, int32], len ptr[inout, bytesize[val, int32]])
getsockopt$TIPC_SRC_DROPPABLE(fd sock_tipc, level const[SOL_TIPC], opt const[TIPC_SRC_DROPPABLE], val ptr[out, int32], len ptr[inout, bytesize[val, int32]])
getsockopt$TIPC_DEST_DROPPABLE(fd sock_tipc, level const[SOL_TIPC], opt const[TIPC_DEST_DROPPABLE], val ptr[out, int32], len ptr[inout, bytesize[val, int32]])
getsockopt$TIPC_CONN_TIMEOUT(fd sock_tipc, level const[SOL_TIPC], opt const[TIPC_CONN_TIMEOUT], val ptr[out, int32], len ptr[inout, bytesize[val, int32]])
getsockopt$TIPC_NODE_RECVQ_DEPTH(fd sock_tipc, level const[SOL_TIPC], opt const[TIPC_NODE_RECVQ_DEPTH], val ptr[out, int32], len ptr[inout, bytesize[val, int32]])
getsockopt$TIPC_SOCK_RECVQ_DEPTH(fd sock_tipc, level const[SOL_TIPC], opt const[TIPC_SOCK_RECVQ_DEPTH], val ptr[out, int32], len ptr[inout, bytesize[val, int32]])
getsockopt$TIPC_GROUP_JOIN(fd sock_tipc, level const[SOL_TIPC], opt const[TIPC_GROUP_JOIN], val ptr[out, int32], len ptr[inout, bytesize[val, int32]])

tipc_socket_types = SOCK_DGRAM, SOCK_SEQPACKET, SOCK_DGRAM
tipc_service_type = TIPC_NODE_STATE, TIPC_TOP_SRV, TIPC_LINK_STATE, TIPC_SERVICE_TYPE0, TIPC_SERVICE_TYPE1, TIPC_SERVICE_TYPE2, TIPC_SERVICE_TYPE3
define TIPC_SERVICE_TYPE0	TIPC_RESERVED_TYPES + 0
define TIPC_SERVICE_TYPE1	TIPC_RESERVED_TYPES + 1
define TIPC_SERVICE_TYPE2	TIPC_RESERVED_TYPES + 2
define TIPC_SERVICE_TYPE3	TIPC_RESERVED_TYPES + 3

tipc_pair {
	fd0	sock_tipc
	fd1	sock_tipc
}

sockaddr_tipc [
	nameseq	sockaddr_tipc_t[TIPC_ADDR_NAMESEQ, tipc_service_range]
	name	sockaddr_tipc_t[TIPC_ADDR_NAME, tipc_address_name]
	id	sockaddr_tipc_t[TIPC_ADDR_ID, tipc_socket_addr]
]

type sockaddr_tipc_t[TYP, DATA] {
	family		const[AF_TIPC, int16]
	addrtype	const[TYP, int8]
	scope		flags[tipc_scope, int8]
	addr		DATA
}

msghdr_tipc {
	msg_name	ptr[in, sockaddr_tipc, opt]
	msg_namelen	len[msg_name, int32]
	msg_iov		ptr[in, array[iovec_in]]
	msg_iovlen	len[msg_iov, intptr]
	msg_control	ptr[in, array[int8], opt]
	msg_controllen	bytesize[msg_control, intptr]
	msg_flags	flags[send_flags, int32]
}

tipc_address_name {
	name	tipc_service_addr
	domain	tipc_node_addr
}

tipc_socket_addr {
	ref	tipc_port
	node	tipc_node_addr
}

tipc_service_addr {
	type		flags[tipc_service_type, int32]
	instance	tipc_instance
}

tipc_service_range {
	type	flags[tipc_service_type, int32]
	lower	tipc_instance
	upper	tipc_instance
}

tipc_sioc_ln_req {
	peer		tipc_node_addr
	bearer_id	int32[0:MAX_BEARERS]
	linkname	array[const[0, int8], TIPC_MAX_LINK_NAME]
}

tipc_sioc_nodeid_req {
	peer		tipc_node_addr
	linkname	array[const[0, int8], TIPC_NODEID_LEN]
}

tipc_group_req {
	type		int32[TIPC_SERVICE_TYPE0:TIPC_SERVICE_TYPE3]
	instance	tipc_instance
	scope		flags[tipc_scope, int32]
	flags		const[0, int32]
}