# 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 sock_port flow int32 scope int32 } 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] }