blob: cf9d52636a5f50f155683d522acdb16f89127648 [file] [log] [blame]
Mikio Haracdfc4ce2013-06-04 17:42:58 +09001// 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
Mikio Hara9704df92014-04-27 22:30:08 +09005// +build dragonfly freebsd linux netbsd openbsd
Mikio Haracdfc4ce2013-06-04 17:42:58 +09006
7package ipv6
8
9import (
10 "os"
Mikio Hara0c924582014-05-19 12:20:39 +090011 "syscall"
Mikio Harab27e68b2013-11-06 21:33:49 +090012 "unsafe"
Mikio Haracdfc4ce2013-06-04 17:42:58 +090013)
14
15func ipv6ReceiveTrafficClass(fd int) (bool, error) {
Mikio Hara0c924582014-05-19 12:20:39 +090016 v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, sysSockoptReceiveTrafficClass)
17 if err != nil {
Mikio Haracdfc4ce2013-06-04 17:42:58 +090018 return false, os.NewSyscallError("getsockopt", err)
19 }
20 return v == 1, nil
21}
22
23func setIPv6ReceiveTrafficClass(fd int, v bool) error {
Mikio Hara0c924582014-05-19 12:20:39 +090024 return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, sysSockoptReceiveTrafficClass, boolint(v)))
Mikio Haracdfc4ce2013-06-04 17:42:58 +090025}
26
27func ipv6ReceiveHopLimit(fd int) (bool, error) {
Mikio Hara0c924582014-05-19 12:20:39 +090028 v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, sysSockoptReceiveHopLimit)
29 if err != nil {
Mikio Haracdfc4ce2013-06-04 17:42:58 +090030 return false, os.NewSyscallError("getsockopt", err)
31 }
32 return v == 1, nil
33}
34
35func setIPv6ReceiveHopLimit(fd int, v bool) error {
Mikio Hara0c924582014-05-19 12:20:39 +090036 return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, sysSockoptReceiveHopLimit, boolint(v)))
Mikio Haracdfc4ce2013-06-04 17:42:58 +090037}
38
39func ipv6ReceivePacketInfo(fd int) (bool, error) {
Mikio Hara0c924582014-05-19 12:20:39 +090040 v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, sysSockoptReceivePacketInfo)
41 if err != nil {
Mikio Haracdfc4ce2013-06-04 17:42:58 +090042 return false, os.NewSyscallError("getsockopt", err)
43 }
44 return v == 1, nil
45}
46
47func setIPv6ReceivePacketInfo(fd int, v bool) error {
Mikio Hara0c924582014-05-19 12:20:39 +090048 return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, sysSockoptReceivePacketInfo, boolint(v)))
Mikio Harab27e68b2013-11-06 21:33:49 +090049}
50
51func ipv6PathMTU(fd int) (int, error) {
52 var v sysMTUInfo
53 l := sysSockoptLen(sysSizeofMTUInfo)
Mikio Harad5874402014-04-28 11:32:27 +090054 if err := getsockopt(fd, ianaProtocolIPv6, sysSockoptPathMTU, unsafe.Pointer(&v), &l); err != nil {
Mikio Harab27e68b2013-11-06 21:33:49 +090055 return 0, os.NewSyscallError("getsockopt", err)
56 }
57 return int(v.MTU), nil
58}
59
60func ipv6ReceivePathMTU(fd int) (bool, error) {
Mikio Hara0c924582014-05-19 12:20:39 +090061 v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, sysSockoptReceivePathMTU)
62 if err != nil {
Mikio Harab27e68b2013-11-06 21:33:49 +090063 return false, os.NewSyscallError("getsockopt", err)
64 }
65 return v == 1, nil
66}
67
68func setIPv6ReceivePathMTU(fd int, v bool) error {
Mikio Hara0c924582014-05-19 12:20:39 +090069 return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, sysSockoptReceivePathMTU, boolint(v)))
Mikio Harab27e68b2013-11-06 21:33:49 +090070}
71
72func ipv6ICMPFilter(fd int) (*ICMPFilter, error) {
73 var v ICMPFilter
74 l := sysSockoptLen(sysSizeofICMPFilter)
Mikio Harad5874402014-04-28 11:32:27 +090075 if err := getsockopt(fd, ianaProtocolIPv6ICMP, sysSockoptICMPFilter, unsafe.Pointer(&v.sysICMPFilter), &l); err != nil {
Mikio Harab27e68b2013-11-06 21:33:49 +090076 return nil, os.NewSyscallError("getsockopt", err)
77 }
78 return &v, nil
79}
80
81func setIPv6ICMPFilter(fd int, f *ICMPFilter) error {
Mikio Harad5874402014-04-28 11:32:27 +090082 return os.NewSyscallError("setsockopt", setsockopt(fd, ianaProtocolIPv6ICMP, sysSockoptICMPFilter, unsafe.Pointer(&f.sysICMPFilter), sysSizeofICMPFilter))
Mikio Haracdfc4ce2013-06-04 17:42:58 +090083}