github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/net/ipv4/sys_linux.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  import (
     8  	"net"
     9  	"syscall"
    10  	"unsafe"
    11  )
    12  
    13  type sysSockoptLen int32
    14  
    15  var (
    16  	ctlOpts = [ctlMax]ctlOpt{
    17  		ctlTTL:        {sysIP_TTL, 1, marshalTTL, parseTTL},
    18  		ctlPacketInfo: {sysIP_PKTINFO, sysSizeofInetPktinfo, marshalPacketInfo, parsePacketInfo},
    19  	}
    20  
    21  	sockOpts = [ssoMax]sockOpt{
    22  		ssoTOS:                {sysIP_TOS, ssoTypeInt},
    23  		ssoTTL:                {sysIP_TTL, ssoTypeInt},
    24  		ssoMulticastTTL:       {sysIP_MULTICAST_TTL, ssoTypeInt},
    25  		ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeIPMreqn},
    26  		ssoMulticastLoopback:  {sysIP_MULTICAST_LOOP, ssoTypeInt},
    27  		ssoReceiveTTL:         {sysIP_RECVTTL, ssoTypeInt},
    28  		ssoPacketInfo:         {sysIP_PKTINFO, ssoTypeInt},
    29  		ssoHeaderPrepend:      {sysIP_HDRINCL, ssoTypeInt},
    30  		ssoICMPFilter:         {sysICMP_FILTER, ssoTypeICMPFilter},
    31  		ssoJoinGroup:          {sysMCAST_JOIN_GROUP, ssoTypeGroupReq},
    32  		ssoLeaveGroup:         {sysMCAST_LEAVE_GROUP, ssoTypeGroupReq},
    33  		ssoJoinSourceGroup:    {sysMCAST_JOIN_SOURCE_GROUP, ssoTypeGroupSourceReq},
    34  		ssoLeaveSourceGroup:   {sysMCAST_LEAVE_SOURCE_GROUP, ssoTypeGroupSourceReq},
    35  		ssoBlockSourceGroup:   {sysMCAST_BLOCK_SOURCE, ssoTypeGroupSourceReq},
    36  		ssoUnblockSourceGroup: {sysMCAST_UNBLOCK_SOURCE, ssoTypeGroupSourceReq},
    37  	}
    38  )
    39  
    40  func (pi *sysInetPktinfo) setIfindex(i int) {
    41  	pi.Ifindex = int32(i)
    42  }
    43  
    44  func (gr *sysGroupReq) setGroup(grp net.IP) {
    45  	sa := (*sysSockaddrInet)(unsafe.Pointer(&gr.Group))
    46  	sa.Family = syscall.AF_INET
    47  	copy(sa.Addr[:], grp)
    48  }
    49  
    50  func (gsr *sysGroupSourceReq) setSourceGroup(grp, src net.IP) {
    51  	sa := (*sysSockaddrInet)(unsafe.Pointer(&gsr.Group))
    52  	sa.Family = syscall.AF_INET
    53  	copy(sa.Addr[:], grp)
    54  	sa = (*sysSockaddrInet)(unsafe.Pointer(&gsr.Source))
    55  	sa.Family = syscall.AF_INET
    56  	copy(sa.Addr[:], src)
    57  }