func ipv6MulticastLoopback(fd syscall.Handle) (bool, error) { var v int32 l := int32(4) if err := syscall.Getsockopt(fd, int32(ianaProtocolIPv6), int32(syscall.IPV6_MULTICAST_LOOP), (*byte)(unsafe.Pointer(&v)), &l); err != nil { return false, os.NewSyscallError("getsockopt", err) } return v == 1, nil }
func ipv6MulticastHopLimit(fd syscall.Handle) (int, error) { var v int32 l := int32(4) if err := syscall.Getsockopt(fd, int32(ianaProtocolIPv6), int32(syscall.IPV6_MULTICAST_HOPS), (*byte)(unsafe.Pointer(&v)), &l); err != nil { return 0, os.NewSyscallError("getsockopt", err) } return int(v), nil }
func ipv6HopLimit(fd syscall.Handle) (int, error) { var v int32 l := int32(4) if err := syscall.Getsockopt(fd, ianaProtocolIPv6, sysSockoptUnicastHopLimit, (*byte)(unsafe.Pointer(&v)), &l); err != nil { return 0, os.NewSyscallError("getsockopt", err) } return int(v), nil }
func ipv4MulticastInterface(fd syscall.Handle) (*net.Interface, error) { var v [4]byte l := int32(4) if err := syscall.Getsockopt(fd, ianaProtocolIP, syscall.IP_MULTICAST_IF, (*byte)(unsafe.Pointer(&v[0])), &l); err != nil { return nil, os.NewSyscallError("getsockopt", err) } return netIP4ToInterface(net.IPv4(v[0], v[1], v[2], v[3])) }
func ipv4MulticastTTL(fd syscall.Handle) (int, error) { var v int32 l := int32(4) if err := syscall.Getsockopt(fd, ianaProtocolIP, syscall.IP_MULTICAST_TTL, (*byte)(unsafe.Pointer(&v)), &l); err != nil { return 0, os.NewSyscallError("getsockopt", err) } return int(v), nil }
func ipv4MulticastLoopback(fd syscall.Handle) (bool, error) { var v int32 l := int32(4) if err := syscall.Getsockopt(fd, ianaProtocolIP, sysSockoptMulticastLoopback, (*byte)(unsafe.Pointer(&v)), &l); err != nil { return false, os.NewSyscallError("getsockopt", err) } return v == 1, nil }
func ipv4TOS(fd syscall.Handle) (int, error) { var v int32 l := int32(4) err := syscall.Getsockopt(fd, ianaProtocolIP, syscall.IP_TOS, (*byte)(unsafe.Pointer(&v)), &l) if err != nil { return 0, os.NewSyscallError("getsockopt", err) } return int(v), nil }
func ipv4TTL(fd syscall.Handle) (int, error) { var v int32 l := int32(4) err := syscall.Getsockopt(fd, int32(syscall.IPPROTO_IP), int32(syscall.IP_TTL), (*byte)(unsafe.Pointer(&v)), &l) if err != nil { return 0, os.NewSyscallError("getsockopt", err) } return int(v), nil }
func ipv4MulticastInterface(fd syscall.Handle) (*net.Interface, error) { var a [4]byte l := int32(4) err := syscall.Getsockopt(fd, int32(syscall.IPPROTO_IP), int32(syscall.IP_MULTICAST_IF), (*byte)(unsafe.Pointer(&a[0])), &l) if err != nil { return nil, os.NewSyscallError("getsockopt", err) } return netIP4ToInterface(net.IPv4(a[0], a[1], a[2], a[3])) }
func getInt(fd syscall.Handle, opt *sockOpt) (int, error) { if opt.name < 1 || opt.typ != ssoTypeInt { return 0, errOpNoSupport } var i int32 l := int32(4) if err := syscall.Getsockopt(fd, iana.ProtocolIP, int32(opt.name), (*byte)(unsafe.Pointer(&i)), &l); err != nil { return 0, os.NewSyscallError("getsockopt", err) } return int(i), nil }
func getsockoptInterface(fd syscall.Handle, name int) (*net.Interface, error) { var b [4]byte l := int32(4) if err := syscall.Getsockopt(fd, iana.ProtocolIP, int32(name), (*byte)(unsafe.Pointer(&b[0])), &l); err != nil { return nil, os.NewSyscallError("getsockopt", err) } ifi, err := netIP4ToInterface(net.IPv4(b[0], b[1], b[2], b[3])) if err != nil { return nil, err } return ifi, nil }
func ipv6MulticastInterface(fd syscall.Handle) (*net.Interface, error) { var v int32 l := int32(4) if err := syscall.Getsockopt(fd, int32(ianaProtocolIPv6), int32(syscall.IPV6_MULTICAST_IF), (*byte)(unsafe.Pointer(&v)), &l); err != nil { return nil, os.NewSyscallError("getsockopt", err) } if v == 0 { return nil, nil } ifi, err := net.InterfaceByIndex(int(v)) if err != nil { return nil, err } return ifi, nil }
func getInterface(fd syscall.Handle, opt *sockOpt) (*net.Interface, error) { if opt.name < 1 || opt.typ != ssoTypeInterface { return nil, errOpNoSupport } var i int32 l := int32(4) if err := syscall.Getsockopt(fd, int32(opt.level), int32(opt.name), (*byte)(unsafe.Pointer(&i)), &l); err != nil { return nil, os.NewSyscallError("getsockopt", err) } if i == 0 { return nil, nil } ifi, err := net.InterfaceByIndex(int(i)) if err != nil { return nil, err } return ifi, nil }
func getsockopt(s uintptr, level, name int, v unsafe.Pointer, l *uint32) error { return syscall.Getsockopt(syscall.Handle(s), int32(level), int32(name), (*byte)(v), (*int32)(unsafe.Pointer(l))) }