| # Copyright 2017 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 <sys/types.h> |
| include <sys/param.h> |
| include <sys/socket.h> |
| include <netinet/in.h> |
| include <net/route.h> |
| include <netinet6/ip6_mroute.h> |
| include <compat/linux/common/linux_socket.h> |
| include <sys/sockio.h> |
| |
| # IPv6 sockets |
| |
| resource sock_in6[sock] |
| |
| sock_in6_pair { |
| f0 sock_in6 |
| f1 sock_in6 |
| } |
| |
| sockaddr_in6 { |
| family const[AF_INET6, int16] |
| port proc[20000, 4, int16be] |
| flow int32 |
| scope int32 |
| } |
| |
| sockaddr_storage_in6 { |
| addr sockaddr_in6 |
| pad array[const[0, int64], 12] |
| } |
| |
| socket$inet6(domain const[AF_INET6], type flags[socket_type], proto int8) sock_in6 |
| socketpair$inet6(domain const[AF_INET6], type flags[socket_type], proto int8, fds ptr[out, sock_in6_pair]) |
| accept$inet6(fd sock_in6, peer ptr[out, sockaddr_in6, opt], peerlen ptr[inout, len[peer, int32]]) sock_in6 |
| bind$inet6(fd sock_in6, addr ptr[in, sockaddr_in6], addrlen len[addr]) |
| connect$inet6(fd sock_in6, addr ptr[in, sockaddr_in6], addrlen len[addr]) |
| sendto$inet6(fd sock_in6, buf buffer[in], len len[buf], f flags[send_flags], addr ptr[in, sockaddr_in6, opt], addrlen len[addr]) |
| recvfrom$inet6(fd sock_in6, buf buffer[out], len len[buf], f flags[recv_flags], addr ptr[in, sockaddr_in6, opt], addrlen len[addr]) |
| getsockname$inet6(fd sock_in6, addr ptr[out, sockaddr_in6], addrlen ptr[inout, len[addr, int32]]) |
| getpeername$inet6(fd sock_in6, peer ptr[out, sockaddr_in6], peerlen ptr[inout, len[peer, int32]]) |
| |
| # Generic IPv6 options |
| |
| # Specific IPv6 options |
| |
| # TODO: IPV6_HOPOPTS, IPV6_RTHDRDSTOPTS, IPV6_RTHDR, IPV6_DSTOPTS |
| # 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]) |
| |
| 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] |
| } |
| |
| group_req_in6 { |
| gr_interface int32 |
| gr_group sockaddr_storage_in6 |
| } |
| |
| group_source_req_in6 { |
| gsr_interface int32 |
| gsr_group sockaddr_storage_in6 |
| gsr_source sockaddr_storage_in6 |
| } |
| |
| group_filter_in6 { |
| gf_interface int32 |
| gf_group sockaddr_storage_in6 |
| gf_numsrc len[gf_slist, int32] |
| gf_slist array[sockaddr_storage_in6] |
| } |
| |
| in6_ifreq { |
| ifr6_prefixlen int32 |
| } |