github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/net/ipv6/sys_windows.go (about) 1 // Copyright 2013 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package ipv6 6 7 import ( 8 "net" 9 "syscall" 10 11 "golang.org/x/net/internal/iana" 12 ) 13 14 const ( 15 // See ws2tcpip.h. 16 sysIPV6_UNICAST_HOPS = 0x4 17 sysIPV6_MULTICAST_IF = 0x9 18 sysIPV6_MULTICAST_HOPS = 0xa 19 sysIPV6_MULTICAST_LOOP = 0xb 20 sysIPV6_JOIN_GROUP = 0xc 21 sysIPV6_LEAVE_GROUP = 0xd 22 sysIPV6_PKTINFO = 0x13 23 24 sysSizeofSockaddrInet6 = 0x1c 25 26 sysSizeofIPv6Mreq = 0x14 27 ) 28 29 type sysSockaddrInet6 struct { 30 Family uint16 31 Port uint16 32 Flowinfo uint32 33 Addr [16]byte /* in6_addr */ 34 Scope_id uint32 35 } 36 37 type sysIPv6Mreq struct { 38 Multiaddr [16]byte /* in6_addr */ 39 Interface uint32 40 } 41 42 var ( 43 ctlOpts = [ctlMax]ctlOpt{} 44 45 sockOpts = [ssoMax]sockOpt{ 46 ssoHopLimit: {iana.ProtocolIPv6, sysIPV6_UNICAST_HOPS, ssoTypeInt}, 47 ssoMulticastInterface: {iana.ProtocolIPv6, sysIPV6_MULTICAST_IF, ssoTypeInterface}, 48 ssoMulticastHopLimit: {iana.ProtocolIPv6, sysIPV6_MULTICAST_HOPS, ssoTypeInt}, 49 ssoMulticastLoopback: {iana.ProtocolIPv6, sysIPV6_MULTICAST_LOOP, ssoTypeInt}, 50 ssoJoinGroup: {iana.ProtocolIPv6, sysIPV6_JOIN_GROUP, ssoTypeIPMreq}, 51 ssoLeaveGroup: {iana.ProtocolIPv6, sysIPV6_LEAVE_GROUP, ssoTypeIPMreq}, 52 } 53 ) 54 55 func (sa *sysSockaddrInet6) setSockaddr(ip net.IP, i int) { 56 sa.Family = syscall.AF_INET6 57 copy(sa.Addr[:], ip) 58 sa.Scope_id = uint32(i) 59 } 60 61 func (mreq *sysIPv6Mreq) setIfindex(i int) { 62 mreq.Interface = uint32(i) 63 }