24
24
func ipv6HopLimit(fd syscall.Handle) (int, error) {
27
if err := syscall.Getsockopt(fd, ianaProtocolIPv6, syscall.IPV6_UNICAST_HOPS, (*byte)(unsafe.Pointer(&v)), &l); err != nil {
27
if err := syscall.Getsockopt(fd, ianaProtocolIPv6, sysSockoptUnicastHopLimit, (*byte)(unsafe.Pointer(&v)), &l); err != nil {
28
28
return 0, os.NewSyscallError("getsockopt", err)
33
33
func setIPv6HopLimit(fd syscall.Handle, v int) error {
35
return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, syscall.IPV6_UNICAST_HOPS, (*byte)(unsafe.Pointer(&vv)), 4))
35
return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, sysSockoptUnicastHopLimit, (*byte)(unsafe.Pointer(&vv)), 4))
38
38
func ipv6Checksum(fd syscall.Handle) (bool, int, error) {
43
43
func ipv6MulticastHopLimit(fd syscall.Handle) (int, error) {
46
if err := syscall.Getsockopt(fd, ianaProtocolIPv6, syscall.IPV6_MULTICAST_HOPS, (*byte)(unsafe.Pointer(&v)), &l); err != nil {
46
if err := syscall.Getsockopt(fd, ianaProtocolIPv6, sysSockoptMulticastHopLimit, (*byte)(unsafe.Pointer(&v)), &l); err != nil {
47
47
return 0, os.NewSyscallError("getsockopt", err)
52
52
func setIPv6MulticastHopLimit(fd syscall.Handle, v int) error {
54
return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, syscall.IPV6_MULTICAST_HOPS, (*byte)(unsafe.Pointer(&vv)), 4))
54
return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, sysSockoptMulticastHopLimit, (*byte)(unsafe.Pointer(&vv)), 4))
57
57
func ipv6MulticastInterface(fd syscall.Handle) (*net.Interface, error) {
60
if err := syscall.Getsockopt(fd, ianaProtocolIPv6, syscall.IPV6_MULTICAST_IF, (*byte)(unsafe.Pointer(&v)), &l); err != nil {
60
if err := syscall.Getsockopt(fd, ianaProtocolIPv6, sysSockoptMulticastInterface, (*byte)(unsafe.Pointer(&v)), &l); err != nil {
61
61
return nil, os.NewSyscallError("getsockopt", err)
76
76
v = int32(ifi.Index)
78
return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, syscall.IPV6_MULTICAST_IF, (*byte)(unsafe.Pointer(&v)), 4))
78
return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, sysSockoptMulticastInterface, (*byte)(unsafe.Pointer(&v)), 4))
81
81
func ipv6MulticastLoopback(fd syscall.Handle) (bool, error) {
84
if err := syscall.Getsockopt(fd, ianaProtocolIPv6, syscall.IPV6_MULTICAST_LOOP, (*byte)(unsafe.Pointer(&v)), &l); err != nil {
84
if err := syscall.Getsockopt(fd, ianaProtocolIPv6, sysSockoptMulticastLoopback, (*byte)(unsafe.Pointer(&v)), &l); err != nil {
85
85
return false, os.NewSyscallError("getsockopt", err)
90
90
func setIPv6MulticastLoopback(fd syscall.Handle, v bool) error {
91
91
vv := int32(boolint(v))
92
return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, syscall.IPV6_MULTICAST_LOOP, (*byte)(unsafe.Pointer(&vv)), 4))
92
return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, sysSockoptMulticastLoopback, (*byte)(unsafe.Pointer(&vv)), 4))
95
95
func joinIPv6Group(fd syscall.Handle, ifi *net.Interface, grp net.IP) error {
96
mreq := syscall.IPv6Mreq{}
97
copy(mreq.Multiaddr[:], grp)
96
mreq := sysMulticastReq{}
99
mreq.Interface = uint32(ifi.Index)
99
mreq.IfIndex = uint32(ifi.Index)
101
return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, syscall.IPV6_JOIN_GROUP, (*byte)(unsafe.Pointer(&mreq)), int32(unsafe.Sizeof(mreq))))
101
return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, sysSockoptJoinGroup, (*byte)(unsafe.Pointer(&mreq)), int32(sysSizeofMulticastReq)))
104
104
func leaveIPv6Group(fd syscall.Handle, ifi *net.Interface, grp net.IP) error {
105
mreq := syscall.IPv6Mreq{}
106
copy(mreq.Multiaddr[:], grp)
105
mreq := sysMulticastReq{}
106
copy(mreq.IP[:], grp)
108
mreq.Interface = uint32(ifi.Index)
108
mreq.IfIndex = uint32(ifi.Index)
110
return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, syscall.IPV6_LEAVE_GROUP, (*byte)(unsafe.Pointer(&mreq)), int32(unsafe.Sizeof(mreq))))
110
return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, sysSockoptLeaveGroup, (*byte)(unsafe.Pointer(&mreq)), int32(sysSizeofMulticastReq)))
113
113
func setIPv6Checksum(fd syscall.Handle, on bool, offset int) error {