blob: b15c6396ba17f2c8674f8579c8462c9466ba9107 [file] [log] [blame]
Brad Fitzpatrick51947442016-03-01 22:57:46 +00001// Copyright 2011 The Go Authors. All rights reserved.
Mikio Haracbdbdc42012-01-11 09:53:32 +09002// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
Mikio Hara484cc672014-09-18 19:17:55 +09005// +build darwin dragonfly freebsd netbsd openbsd
Mikio Haracbdbdc42012-01-11 09:53:32 +09006
Mikio Haracbdbdc42012-01-11 09:53:32 +09007package net
8
9import (
10 "os"
11 "syscall"
12)
13
Mikio Harad5a8c582012-09-11 08:56:28 +090014func setIPv4MulticastInterface(fd *netFD, ifi *Interface) error {
15 ip, err := interfaceToIPv4Addr(ifi)
Mikio Haracbdbdc42012-01-11 09:53:32 +090016 if err != nil {
Mikio Harad5a8c582012-09-11 08:56:28 +090017 return os.NewSyscallError("setsockopt", err)
Mikio Haracbdbdc42012-01-11 09:53:32 +090018 }
Mikio Harad5a8c582012-09-11 08:56:28 +090019 var a [4]byte
20 copy(a[:], ip.To4())
Dmitriy Vyukov23e15f72013-08-09 21:43:00 +040021 if err := fd.incref(); err != nil {
Russ Cox5e4e3d82012-02-14 00:40:37 -050022 return err
23 }
Mikio Haracbdbdc42012-01-11 09:53:32 +090024 defer fd.decref()
Mikio Harabf61a97f2013-07-28 11:18:06 +090025 return os.NewSyscallError("setsockopt", syscall.SetsockoptInet4Addr(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_IF, a))
Mikio Haracbdbdc42012-01-11 09:53:32 +090026}
27
Mikio Harad5a8c582012-09-11 08:56:28 +090028func setIPv4MulticastLoopback(fd *netFD, v bool) error {
Dmitriy Vyukov23e15f72013-08-09 21:43:00 +040029 if err := fd.incref(); err != nil {
Russ Cox5e4e3d82012-02-14 00:40:37 -050030 return err
31 }
Mikio Haracbdbdc42012-01-11 09:53:32 +090032 defer fd.decref()
Mikio Harabf61a97f2013-07-28 11:18:06 +090033 return os.NewSyscallError("setsockopt", syscall.SetsockoptByte(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_LOOP, byte(boolint(v))))
Mikio Haracbdbdc42012-01-11 09:53:32 +090034}