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 }