14
func ipv4MulticastInterface(fd *netFD) (*Interface, error) {
15
if err := fd.incref(false); err != nil {
19
mreq, err := syscall.GetsockoptIPMreqn(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_IF)
21
return nil, os.NewSyscallError("getsockopt", err)
23
if int(mreq.Ifindex) == 0 {
26
return InterfaceByIndex(int(mreq.Ifindex))
29
12
func setIPv4MulticastInterface(fd *netFD, ifi *Interface) error {
46
func ipv4MulticastTTL(fd *netFD) (int, error) {
47
if err := fd.incref(false); err != nil {
51
v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_TTL)
53
return -1, os.NewSyscallError("getsockopt", err)
58
func setIPv4MulticastTTL(fd *netFD, v int) error {
59
if err := fd.incref(false); err != nil {
63
err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_TTL, v)
65
return os.NewSyscallError("setsockopt", err)
70
func ipv4MulticastLoopback(fd *netFD) (bool, error) {
71
if err := fd.incref(false); err != nil {
75
v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_LOOP)
77
return false, os.NewSyscallError("getsockopt", err)
82
29
func setIPv4MulticastLoopback(fd *netFD, v bool) error {
83
30
if err := fd.incref(false); err != nil {
94
func ipv4ReceiveInterface(fd *netFD) (bool, error) {
95
if err := fd.incref(false); err != nil {
99
v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_PKTINFO)
101
return false, os.NewSyscallError("getsockopt", err)
106
func setIPv4ReceiveInterface(fd *netFD, v bool) error {
107
if err := fd.incref(false); err != nil {
111
err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_PKTINFO, boolint(v))
113
return os.NewSyscallError("setsockopt", err)
118
func ipv6TrafficClass(fd *netFD) (int, error) {
119
if err := fd.incref(false); err != nil {
123
v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IPV6, syscall.IPV6_TCLASS)
125
return 0, os.NewSyscallError("getsockopt", err)
130
func setIPv6TrafficClass(fd *netFD, v int) error {
131
if err := fd.incref(false); err != nil {
135
err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IPV6, syscall.IPV6_TCLASS, v)
137
return os.NewSyscallError("setsockopt", err)