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  }