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  }