github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/net/ipv6/sockopt_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 "os" 10 "syscall" 11 "unsafe" 12 ) 13 14 func getInt(fd syscall.Handle, opt *sockOpt) (int, error) { 15 if opt.name < 1 || opt.typ != ssoTypeInt { 16 return 0, errOpNoSupport 17 } 18 var i int32 19 l := int32(4) 20 if err := syscall.Getsockopt(fd, int32(opt.level), int32(opt.name), (*byte)(unsafe.Pointer(&i)), &l); err != nil { 21 return 0, os.NewSyscallError("getsockopt", err) 22 } 23 return int(i), nil 24 } 25 26 func setInt(fd syscall.Handle, opt *sockOpt, v int) error { 27 if opt.name < 1 || opt.typ != ssoTypeInt { 28 return errOpNoSupport 29 } 30 i := int32(v) 31 return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, int32(opt.level), int32(opt.name), (*byte)(unsafe.Pointer(&i)), 4)) 32 } 33 34 func getInterface(fd syscall.Handle, opt *sockOpt) (*net.Interface, error) { 35 if opt.name < 1 || opt.typ != ssoTypeInterface { 36 return nil, errOpNoSupport 37 } 38 var i int32 39 l := int32(4) 40 if err := syscall.Getsockopt(fd, int32(opt.level), int32(opt.name), (*byte)(unsafe.Pointer(&i)), &l); err != nil { 41 return nil, os.NewSyscallError("getsockopt", err) 42 } 43 if i == 0 { 44 return nil, nil 45 } 46 ifi, err := net.InterfaceByIndex(int(i)) 47 if err != nil { 48 return nil, err 49 } 50 return ifi, nil 51 } 52 53 func setInterface(fd syscall.Handle, opt *sockOpt, ifi *net.Interface) error { 54 if opt.name < 1 || opt.typ != ssoTypeInterface { 55 return errOpNoSupport 56 } 57 var i int32 58 if ifi != nil { 59 i = int32(ifi.Index) 60 } 61 return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, int32(opt.level), int32(opt.name), (*byte)(unsafe.Pointer(&i)), 4)) 62 } 63 64 func getICMPFilter(fd syscall.Handle, opt *sockOpt) (*ICMPFilter, error) { 65 return nil, errOpNoSupport 66 } 67 68 func setICMPFilter(fd syscall.Handle, opt *sockOpt, f *ICMPFilter) error { 69 return errOpNoSupport 70 } 71 72 func getMTUInfo(fd syscall.Handle, opt *sockOpt) (*net.Interface, int, error) { 73 return nil, 0, errOpNoSupport 74 } 75 76 func setGroup(fd syscall.Handle, opt *sockOpt, ifi *net.Interface, grp net.IP) error { 77 if opt.name < 1 || opt.typ != ssoTypeIPMreq { 78 return errOpNoSupport 79 } 80 return setsockoptIPMreq(fd, opt, ifi, grp) 81 } 82 83 func setSourceGroup(fd syscall.Handle, opt *sockOpt, ifi *net.Interface, grp, src net.IP) error { 84 // TODO(mikio): implement this 85 return errOpNoSupport 86 }