github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/net/ipv4/sys_windows.go (about)

     1  // Copyright 2014 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 ipv4
     6  
     7  const (
     8  	// See ws2tcpip.h.
     9  	sysIP_OPTIONS                = 0x1
    10  	sysIP_HDRINCL                = 0x2
    11  	sysIP_TOS                    = 0x3
    12  	sysIP_TTL                    = 0x4
    13  	sysIP_MULTICAST_IF           = 0x9
    14  	sysIP_MULTICAST_TTL          = 0xa
    15  	sysIP_MULTICAST_LOOP         = 0xb
    16  	sysIP_ADD_MEMBERSHIP         = 0xc
    17  	sysIP_DROP_MEMBERSHIP        = 0xd
    18  	sysIP_DONTFRAGMENT           = 0xe
    19  	sysIP_ADD_SOURCE_MEMBERSHIP  = 0xf
    20  	sysIP_DROP_SOURCE_MEMBERSHIP = 0x10
    21  	sysIP_PKTINFO                = 0x13
    22  
    23  	sysSizeofInetPktinfo  = 0x8
    24  	sysSizeofIPMreq       = 0x8
    25  	sysSizeofIPMreqSource = 0xc
    26  )
    27  
    28  type sysInetPktinfo struct {
    29  	Addr    [4]byte
    30  	Ifindex int32
    31  }
    32  
    33  type sysIPMreq struct {
    34  	Multiaddr [4]byte
    35  	Interface [4]byte
    36  }
    37  
    38  type sysIPMreqSource struct {
    39  	Multiaddr  [4]byte
    40  	Sourceaddr [4]byte
    41  	Interface  [4]byte
    42  }
    43  
    44  // See http://msdn.microsoft.com/en-us/library/windows/desktop/ms738586(v=vs.85).aspx
    45  var (
    46  	ctlOpts = [ctlMax]ctlOpt{}
    47  
    48  	sockOpts = [ssoMax]sockOpt{
    49  		ssoTOS:                {sysIP_TOS, ssoTypeInt},
    50  		ssoTTL:                {sysIP_TTL, ssoTypeInt},
    51  		ssoMulticastTTL:       {sysIP_MULTICAST_TTL, ssoTypeInt},
    52  		ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeInterface},
    53  		ssoMulticastLoopback:  {sysIP_MULTICAST_LOOP, ssoTypeInt},
    54  		ssoJoinGroup:          {sysIP_ADD_MEMBERSHIP, ssoTypeIPMreq},
    55  		ssoLeaveGroup:         {sysIP_DROP_MEMBERSHIP, ssoTypeIPMreq},
    56  	}
    57  )
    58  
    59  func (pi *sysInetPktinfo) setIfindex(i int) {
    60  	pi.Ifindex = int32(i)
    61  }