aboutsummaryrefslogtreecommitdiffstats
path: root/sys/linux
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2022-06-13 18:14:13 +0200
committerDmitry Vyukov <dvyukov@google.com>2022-06-14 10:19:28 +0200
commita3bc5d68bc6cf57c55d4370027c295e367205c86 (patch)
treeec09926b4d12594f2d00a2f328a938b0d3685350 /sys/linux
parent0f08704067fce8a2a7ef7c508247aad6d48ed1f3 (diff)
sys/linux: add IGMP (SOCK_RAW/IPPROTO_IGMP) descriptions
Add descriptions for: https://elixir.bootlin.com/linux/v5.19-rc1/source/include/uapi/linux/mroute.h https://elixir.bootlin.com/linux/v5.19-rc1/source/include/uapi/linux/mroute6.h
Diffstat (limited to 'sys/linux')
-rw-r--r--sys/linux/socket.txt2
-rw-r--r--sys/linux/socket_inet6.txt23
-rw-r--r--sys/linux/socket_inet6.txt.const1
-rw-r--r--sys/linux/socket_inet_igmp.txt138
-rw-r--r--sys/linux/socket_inet_igmp.txt.const60
5 files changed, 199 insertions, 25 deletions
diff --git a/sys/linux/socket.txt b/sys/linux/socket.txt
index 9f76895c8..4bf50c270 100644
--- a/sys/linux/socket.txt
+++ b/sys/linux/socket.txt
@@ -383,7 +383,7 @@ rtentry {
# Note: lapb0, bpq0 and hwsim0 are only present in init namespace.
# Note: for roseN and nrN we should use proc type, but for simplicity we currently use N=0.
# Note: netdevsim0 and netpci0 are renamed in initialize_devlink_ports()
-devnames = "", "lo", "tunl0", "gre0", "gretap0", "ip_vti0", "ip6_vti0", "sit0", "ip6tnl0", "ip6gre0", "ip6gretap0", "bond0", "dummy0", "nr0", "rose0", "erspan0", "vlan0", "bridge0", "vcan0", "team0", "syz_tun", "veth0", "veth1", "veth0_to_bridge", "veth1_to_bridge", "veth0_to_bond", "veth1_to_bond", "veth0_to_team", "veth1_to_team", "bridge_slave_0", "bridge_slave_1", "bond_slave_0", "bond_slave_1", "team_slave_0", "team_slave_1", "syzkaller0", "syzkaller1", "veth0_to_hsr", "veth1_to_hsr", "hsr0", "ip6erspan0", "vxcan1", "caif0", "batadv0", "veth0_to_batadv", "veth1_to_batadv", "batadv_slave_0", "batadv_slave_1", "netdevsim0", "netpci0", "xfrm0", "veth0_virt_wifi", "veth1_virt_wifi", "virt_wifi0", "veth0_vlan", "veth1_vlan", "vlan0", "vlan1", "macvlan0", "macvlan1", "ipvlan0", "ipvlan1", "veth0_macvtap", "veth1_macvtap", "macvtap0", "macsec0", "geneve0", "geneve1", "wg0", "wg1", "wg2", "wlan0", "wlan1"
+devnames = "", "lo", "tunl0", "gre0", "gretap0", "ip_vti0", "ip6_vti0", "sit0", "ip6tnl0", "ip6gre0", "ip6gretap0", "bond0", "dummy0", "nr0", "rose0", "erspan0", "vlan0", "bridge0", "vcan0", "team0", "syz_tun", "veth0", "veth1", "veth0_to_bridge", "veth1_to_bridge", "veth0_to_bond", "veth1_to_bond", "veth0_to_team", "veth1_to_team", "bridge_slave_0", "bridge_slave_1", "bond_slave_0", "bond_slave_1", "team_slave_0", "team_slave_1", "syzkaller0", "syzkaller1", "veth0_to_hsr", "veth1_to_hsr", "hsr0", "ip6erspan0", "vxcan1", "caif0", "batadv0", "veth0_to_batadv", "veth1_to_batadv", "batadv_slave_0", "batadv_slave_1", "netdevsim0", "netpci0", "xfrm0", "veth0_virt_wifi", "veth1_virt_wifi", "virt_wifi0", "veth0_vlan", "veth1_vlan", "vlan0", "vlan1", "macvlan0", "macvlan1", "ipvlan0", "ipvlan1", "veth0_macvtap", "veth1_macvtap", "macvtap0", "macsec0", "geneve0", "geneve1", "wg0", "wg1", "wg2", "wlan0", "wlan1", "dvmrp0", "dvmrp1", "pimreg", "pimreg0", "pimreg1", "pim6reg", "pim6reg0", "pim6reg1"
type devname string[devnames, IFNAMSIZ]
diff --git a/sys/linux/socket_inet6.txt b/sys/linux/socket_inet6.txt
index 62ae28889..28a2ef269 100644
--- a/sys/linux/socket_inet6.txt
+++ b/sys/linux/socket_inet6.txt
@@ -89,32 +89,9 @@ setsockopt$inet6_IPV6_DSTOPTS(fd sock_in6, level const[IPPROTO_IPV6], optname co
# TODO: IPV6_PATHMTU
# TODO: IP6T_SO_GET_REVISION_MATCH, IP6T_SO_GET_REVISION_TARGET
-setsockopt$inet6_MRT6_ADD_MIF(fd sock_in6, level const[IPPROTO_IPV6], optname const[MRT6_ADD_MIF], optval ptr[in, mif6ctl], optlen len[optval])
-setsockopt$inet6_MRT6_ADD_MFC(fd sock_in6, level const[IPPROTO_IPV6], optname const[MRT6_ADD_MFC], optval ptr[in, mf6cctl], optlen len[optval])
-setsockopt$inet6_MRT6_DEL_MFC(fd sock_in6, level const[IPPROTO_IPV6], optname const[MRT6_DEL_MFC], optval ptr[in, mf6cctl], optlen len[optval])
-setsockopt$inet6_MRT6_ADD_MFC_PROXY(fd sock_in6, level const[IPPROTO_IPV6], optname const[MRT6_ADD_MFC_PROXY], optval ptr[in, mf6cctl], optlen len[optval])
-setsockopt$inet6_MRT6_DEL_MFC_PROXY(fd sock_in6, level const[IPPROTO_IPV6], optname const[MRT6_DEL_MFC_PROXY], optval ptr[in, mf6cctl], optlen len[optval])
-
getsockopt$inet6_mtu(fd sock_in6, level const[IPPROTO_IPV6], optname const[IPV6_MTU_DISCOVER], optval ptr[out, flags[ip_mtu_discover, int32]], optlen ptr[inout, len[optval, int32]])
setsockopt$inet6_mtu(fd sock_in6, level const[IPPROTO_IPV6], optname const[IPV6_MTU_DISCOVER], optval ptr[in, flags[ip_mtu_discover, int32]], optlen len[optval])
-mif6ctl {
- mif6c_mifi int16
- mif6c_flags flags[mif6c_flags, int8]
- vifc_threshold int8
- mif6c_pifi int16
- vifc_rate_limit int32
-}
-
-mif6c_flags = MIFF_REGISTER
-
-mf6cctl {
- mf6cc_origin sockaddr_in6
- mf6cc_mcastgrp sockaddr_in6
- mf6cc_parent int16
- mf6cc_ifset array[int32, 8]
-}
-
ipv6_mreq {
multi ipv6_addr
ifindex ifindex
diff --git a/sys/linux/socket_inet6.txt.const b/sys/linux/socket_inet6.txt.const
index 32c31d9c9..58dd244d4 100644
--- a/sys/linux/socket_inet6.txt.const
+++ b/sys/linux/socket_inet6.txt.const
@@ -79,7 +79,6 @@ MCAST_LEAVE_GROUP = 45
MCAST_LEAVE_SOURCE_GROUP = 47
MCAST_MSFILTER = 48
MCAST_UNBLOCK_SOURCE = 44
-MIFF_REGISTER = 1
MRT6_ADD_MFC = 204
MRT6_ADD_MFC_PROXY = 210
MRT6_ADD_MIF = 202
diff --git a/sys/linux/socket_inet_igmp.txt b/sys/linux/socket_inet_igmp.txt
new file mode 100644
index 000000000..3889a9634
--- /dev/null
+++ b/sys/linux/socket_inet_igmp.txt
@@ -0,0 +1,138 @@
+# Copyright 2022 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/ip.h>
+include <linux/ipv6.h>
+include <uapi/linux/mroute.h>
+include <uapi/linux/mroute6.h>
+
+resource sock_igmp[sock_in]
+resource sock_igmp6[sock_in6]
+
+socket$igmp(domain const[AF_INET], type const[SOCK_RAW], proto const[IPPROTO_IGMP]) sock_igmp
+socket$igmp6(domain const[AF_INET6], type const[SOCK_RAW], proto const[IPPROTO_IGMP]) sock_igmp6
+
+setsockopt$MRT_INIT(fd sock_igmp, level const[SOL_IP], opt const[MRT_INIT], val ptr[in, const[0, int32]], len bytesize[val])
+setsockopt$MRT_DONE(fd sock_igmp, level const[SOL_IP], opt const[MRT_DONE], val const[0], len const[0])
+setsockopt$MRT_ADD_VIF(fd sock_igmp, level const[SOL_IP], opt const[MRT_ADD_VIF], val ptr[in, vifctl], len bytesize[val])
+setsockopt$MRT_DEL_VIF(fd sock_igmp, level const[SOL_IP], opt const[MRT_DEL_VIF], val ptr[in, vifctl], len bytesize[val])
+setsockopt$MRT_ADD_MFC(fd sock_igmp, level const[SOL_IP], opt const[MRT_ADD_MFC], val ptr[in, mfcctl], len bytesize[val])
+setsockopt$MRT_DEL_MFC(fd sock_igmp, level const[SOL_IP], opt const[MRT_DEL_MFC], val ptr[in, mfcctl], len bytesize[val])
+setsockopt$MRT_ADD_MFC_PROXY(fd sock_igmp, level const[SOL_IP], opt const[MRT_ADD_MFC_PROXY], val ptr[in, mfcctl], len bytesize[val])
+setsockopt$MRT_DEL_MFC_PROXY(fd sock_igmp, level const[SOL_IP], opt const[MRT_DEL_MFC_PROXY], val ptr[in, mfcctl], len bytesize[val])
+setsockopt$MRT_FLUSH(fd sock_igmp, level const[SOL_IP], opt const[MRT_FLUSH], val ptr[in, flags[mrt_flush_flags, int32]], len bytesize[val])
+setsockopt$MRT_ASSERT(fd sock_igmp, level const[SOL_IP], opt const[MRT_ASSERT], val ptr[in, bool32], len bytesize[val])
+setsockopt$MRT_PIM(fd sock_igmp, level const[SOL_IP], opt const[MRT_ASSERT], val ptr[in, int32[0:IGMPMSG_WRVIFWHOLE]], len bytesize[val])
+setsockopt$MRT_TABLE(fd sock_igmp, level const[SOL_IP], opt const[MRT_ASSERT], val ptr[in, flags[mrt_tables, int32]], len bytesize[val])
+
+getsockopt$MRT(fd sock_igmp, level const[SOL_IP], opt flags[mrt_getsockopts], val ptr[out, int32], len ptr[inout, bytesize[val, int32]])
+
+ioctl$SIOCGETVIFCNT(fd sock_igmp, cmd const[SIOCGETVIFCNT], arg ptr[in, sioc_vif_req])
+ioctl$SIOCGETSGCNT(fd sock_igmp, cmd const[SIOCGETSGCNT], arg ptr[in, sioc_sg_req])
+
+setsockopt$MRT6_INIT(fd sock_igmp6, level const[SOL_IPV6], opt const[MRT6_INIT], val ptr[in, const[0, int32]], len bytesize[val])
+setsockopt$MRT6_DONE(fd sock_igmp6, level const[SOL_IPV6], opt const[MRT6_DONE], val const[0], len const[0])
+setsockopt$MRT6_ADD_MIF(fd sock_igmp6, level const[SOL_IPV6], opt const[MRT6_ADD_MIF], val ptr[in, mif6ctl], len bytesize[val])
+setsockopt$MRT6_DEL_MIF(fd sock_igmp6, level const[SOL_IPV6], opt const[MRT6_DEL_MIF], val ptr[in, mif6ctl], len bytesize[val])
+setsockopt$MRT6_ADD_MFC(fd sock_igmp6, level const[SOL_IPV6], opt const[MRT6_ADD_MFC], val ptr[in, mf6cctl], len bytesize[val])
+setsockopt$MRT6_DEL_MFC(fd sock_igmp6, level const[SOL_IPV6], opt const[MRT6_DEL_MFC], val ptr[in, mf6cctl], len bytesize[val])
+setsockopt$MRT6_ADD_MFC_PROXY(fd sock_igmp6, level const[SOL_IPV6], opt const[MRT6_ADD_MFC_PROXY], val ptr[in, mf6cctl], len bytesize[val])
+setsockopt$MRT6_DEL_MFC_PROXY(fd sock_igmp6, level const[SOL_IPV6], opt const[MRT6_DEL_MFC_PROXY], val ptr[in, mf6cctl], len bytesize[val])
+setsockopt$MRT6_FLUSH(fd sock_igmp6, level const[SOL_IPV6], opt const[MRT6_FLUSH], val ptr[in, flags[mrt6_flush_flags, int32]], len bytesize[val])
+setsockopt$MRT6_ASSERT(fd sock_igmp6, level const[SOL_IPV6], opt const[MRT6_ASSERT], val ptr[in, bool32], len bytesize[val])
+setsockopt$MRT6_PIM(fd sock_igmp6, level const[SOL_IPV6], opt const[MRT6_ASSERT], val ptr[in, int32[0:IGMPMSG_WRVIFWHOLE]], len bytesize[val])
+setsockopt$MRT6_TABLE(fd sock_igmp6, level const[SOL_IPV6], opt const[MRT6_ASSERT], val ptr[in, flags[mrt_tables, int32]], len bytesize[val])
+
+getsockopt$MRT6(fd sock_igmp6, level const[SOL_IPV6], opt flags[mrt6_getsockopts], val ptr[out, int32], len ptr[inout, bytesize[val, int32]])
+
+ioctl$SIOCGETMIFCNT_IN6(fd sock_igmp, cmd const[SIOCGETMIFCNT_IN6], arg ptr[in, sioc_mif_req6])
+ioctl$SIOCGETSGCNT_IN6(fd sock_igmp, cmd const[SIOCGETSGCNT_IN6], arg ptr[in, sioc_sg_req6])
+
+type vifi_t int16[-1:1]
+type mifi_t int16[-1:1]
+mrt_flush_flags = MRT_FLUSH_MFC, MRT_FLUSH_MFC_STATIC, MRT_FLUSH_VIFS, MRT_FLUSH_VIFS_STATIC
+mrt6_flush_flags = MRT6_FLUSH_MFC, MRT6_FLUSH_MFC_STATIC, MRT6_FLUSH_MIFS, MRT6_FLUSH_MIFS_STATIC
+mrt_tables = RT_TABLE_UNSPEC, RT_TABLE_COMPAT, RT_TABLE_DEFAULT, RT_TABLE_MAIN, RT_TABLE_LOCAL, RT_TABLE_MAX, 1
+mrt_getsockopts = MRT_VERSION, MRT_PIM, MRT_ASSERT
+mrt6_getsockopts = MRT6_VERSION, MRT6_PIM, MRT6_ASSERT
+
+vifctl {
+ vifc_vifi vifi_t
+ vifc_flags flags[viff_ctls, int8]
+ vifc_threshold int8
+ vifc_rate_limit int32
+ u vifctl_u
+ vifc_rmt_addr ipv4_addr
+}
+
+vifctl_u [
+ vifc_lcl_addr ipv4_addr
+ vifc_lcl_ifindex ifindex
+]
+
+viff_ctls = 0, VIFF_TUNNEL, VIFF_REGISTER, VIFF_USE_IFINDEX
+
+mfcctl {
+ mfcc_origin ipv4_addr
+ mfcc_mcastgrp ipv4_addr
+ mfcc_parent vifi_t
+ mfcc_ttls array[int8, MAXVIFS]
+ mfcc_pkt_cnt int32
+ mfcc_byte_cnt int32
+ mfcc_wrong_if int32
+ mfcc_expire int32
+}
+
+sioc_vif_req {
+ vifi vifi_t
+ icount intptr (out)
+ ocount intptr (out)
+ ibytes intptr (out)
+ obytes intptr (out)
+}
+
+sioc_sg_req {
+ src ipv4_addr
+ grp ipv4_addr
+ pktcnt intptr (out)
+ bytecnt intptr (out)
+ wrong_if intptr (out)
+}
+
+mif6ctl {
+ mif6c_mifi mifi_t
+ mif6c_flags flags[mif6ctl_flags, int8]
+ vifc_threshold int8
+# TODO: in the kernel this is int16 (WHY?!)
+ mif6c_pifi ifindex
+ vifc_rate_limit int32
+}
+
+mif6ctl_flags = 0, MIFF_REGISTER
+
+mf6cctl {
+ mf6cc_origin sockaddr_in6
+ mf6cc_mcastgrp sockaddr_in6
+ mf6cc_parent mifi_t
+ mf6cc_ifset if_set
+}
+
+if_set {
+ ifs_bits array[int32, 8]
+}
+
+sioc_mif_req6 {
+ mifi mifi_t
+ icount intptr (out)
+ ocount intptr (out)
+ ibytes intptr (out)
+ obytes intptr (out)
+}
+
+sioc_sg_req6 {
+ src ipv6_addr
+ grp ipv6_addr
+ pktcnt intptr (out)
+ bytecnt intptr (out)
+ wrong_if intptr (out)
+}
diff --git a/sys/linux/socket_inet_igmp.txt.const b/sys/linux/socket_inet_igmp.txt.const
new file mode 100644
index 000000000..3cc6c40a0
--- /dev/null
+++ b/sys/linux/socket_inet_igmp.txt.const
@@ -0,0 +1,60 @@
+# Code generated by syz-sysgen. DO NOT EDIT.
+arches = 386, amd64, arm, arm64, mips64le, ppc64le, riscv64, s390x
+AF_INET = 2
+AF_INET6 = 10
+IGMPMSG_WRVIFWHOLE = 4
+IPPROTO_IGMP = 2
+MAXVIFS = 32
+MIFF_REGISTER = 1
+MRT6_ADD_MFC = 204
+MRT6_ADD_MFC_PROXY = 210
+MRT6_ADD_MIF = 202
+MRT6_ASSERT = 207
+MRT6_DEL_MFC = 205
+MRT6_DEL_MFC_PROXY = 211
+MRT6_DEL_MIF = 203
+MRT6_DONE = 201
+MRT6_FLUSH = 212
+MRT6_FLUSH_MFC = 1
+MRT6_FLUSH_MFC_STATIC = 2
+MRT6_FLUSH_MIFS = 4
+MRT6_FLUSH_MIFS_STATIC = 8
+MRT6_INIT = 200
+MRT6_PIM = 208
+MRT6_VERSION = 206
+MRT_ADD_MFC = 204
+MRT_ADD_MFC_PROXY = 210
+MRT_ADD_VIF = 202
+MRT_ASSERT = 207
+MRT_DEL_MFC = 205
+MRT_DEL_MFC_PROXY = 211
+MRT_DEL_VIF = 203
+MRT_DONE = 201
+MRT_FLUSH = 212
+MRT_FLUSH_MFC = 1
+MRT_FLUSH_MFC_STATIC = 2
+MRT_FLUSH_VIFS = 4
+MRT_FLUSH_VIFS_STATIC = 8
+MRT_INIT = 200
+MRT_PIM = 208
+MRT_VERSION = 206
+RT_TABLE_COMPAT = 252
+RT_TABLE_DEFAULT = 253
+RT_TABLE_LOCAL = 255
+RT_TABLE_MAIN = 254
+RT_TABLE_MAX = 4294967295
+RT_TABLE_UNSPEC = 0
+SIOCGETMIFCNT_IN6 = 35296
+SIOCGETSGCNT = 35297
+SIOCGETSGCNT_IN6 = 35297
+SIOCGETVIFCNT = 35296
+SOCK_RAW = 3
+SOL_IP = 0
+SOL_IPV6 = 41
+VIFF_REGISTER = 4
+VIFF_TUNNEL = 1
+VIFF_USE_IFINDEX = 8
+__NR_getsockopt = 209, 386:s390x:365, amd64:55, arm:295, mips64le:5054, ppc64le:340
+__NR_ioctl = 54, amd64:16, arm64:riscv64:29, mips64le:5015
+__NR_setsockopt = 208, 386:s390x:366, amd64:54, arm:294, mips64le:5053, ppc64le:339
+__NR_socket = 198, 386:s390x:359, amd64:41, arm:281, mips64le:5040, ppc64le:326