]> Cypherpunks repositories - gostls13.git/commitdiff
net, syscall: remove BindToDevice API from UDPConn, IPConn
authorMikio Hara <mikioh.mikioh@gmail.com>
Fri, 2 Dec 2011 14:18:16 +0000 (23:18 +0900)
committerMikio Hara <mikioh.mikioh@gmail.com>
Fri, 2 Dec 2011 14:18:16 +0000 (23:18 +0900)
For now a pair of socket options SOL_SOCKET and SO_BINDTODEVICE
is supported on Linux only. I'd like to demote BindToDevice API
to syscall level because it's Linux dependent one.

In the near future, probably we may have a bit more portable
API that using IPROTO_IP/IPV6 level socket options to specify,
identify an inbound, outbound IP interface on incoming, outgoing
UDP and raw IP packets.

R=cw, golang-dev
CC=golang-dev
https://golang.org/cl/5447071

src/pkg/net/iprawsock_posix.go
src/pkg/net/sock.go
src/pkg/net/udpsock_posix.go
src/pkg/syscall/syscall_bsd.go
src/pkg/syscall/syscall_windows.go

index 3bb99f9a5772d7284c8fc6f3a197425f5e042633..d3cb38a6517bd784e6962fb8fbcdd9c27b7998b5 100644 (file)
@@ -267,16 +267,6 @@ func ListenIP(netProto string, laddr *IPAddr) (c *IPConn, err error) {
        return newIPConn(fd), nil
 }
 
-// BindToDevice binds an IPConn to a network interface.
-func (c *IPConn) BindToDevice(device string) error {
-       if !c.ok() {
-               return os.EINVAL
-       }
-       c.fd.incref()
-       defer c.fd.decref()
-       return os.NewSyscallError("setsockopt", syscall.BindToDevice(c.fd.sysfd, device))
-}
-
 // File returns a copy of the underlying os.File, set to blocking mode.
 // It is the caller's responsibility to close f when finished.
 // Closing c does not affect f, and closing f does not affect c.
index 33f11f219c9f2a8ca2d79f15ff0844be571f4c77..777f204b18601005bf621ca3872953ce758e8dfe 100644 (file)
@@ -111,11 +111,6 @@ func setReuseAddr(fd *netFD, reuse bool) error {
        return setsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, boolint(reuse))
 }
 
-func bindToDevice(fd *netFD, dev string) error {
-       // TODO(rsc): call setsockopt with null-terminated string pointer
-       return os.EINVAL
-}
-
 func setDontRoute(fd *netFD, dontroute bool) error {
        fd.incref()
        defer fd.decref()
index 2cfcc609d435c85a6f60c5610c85b0e9cb6c7bef..c25ec9c506ac3fc3374482a9045a518d2636abc8 100644 (file)
@@ -240,16 +240,6 @@ func ListenUDP(net string, laddr *UDPAddr) (c *UDPConn, err error) {
        return newUDPConn(fd), nil
 }
 
-// BindToDevice binds a UDPConn to a network interface.
-func (c *UDPConn) BindToDevice(device string) error {
-       if !c.ok() {
-               return os.EINVAL
-       }
-       c.fd.incref()
-       defer c.fd.decref()
-       return os.NewSyscallError("setsockopt", syscall.BindToDevice(c.fd.sysfd, device))
-}
-
 // File returns a copy of the underlying os.File, set to blocking mode.
 // It is the caller's responsibility to close f when finished.
 // Closing c does not affect f, and closing f does not affect c.
index 8969c5d67233e9f45e3939111ba06e044318d435..cf1752b6fd345604dc0a2979f84dcdc0beaad3c4 100644 (file)
@@ -522,15 +522,6 @@ func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {
        return
 }
 
-// TODO:
-// FreeBSD has IP_SENDIF.  Darwin probably needs BSDLLCTest, see:
-// http://developer.apple.com/mac/library/samplecode/BSDLLCTest/index.html
-
-// BindToDevice binds the socket associated with fd to device.
-func BindToDevice(fd int, device string) (err error) {
-       return ENOSYS
-}
-
 //sys  kevent(kq int, change uintptr, nchange int, event uintptr, nevent int, timeout *Timespec) (n int, err error)
 
 func Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, err error) {
index 305e7a4b4a945aea4c3389c0ba6ff701fd92eccb..8ee208a5c407ff75f5f916b902dad574f15fc818 100644 (file)
@@ -650,7 +650,6 @@ func SetsockoptIPMreq(fd Handle, level, opt int, mreq *IPMreq) (err error) {
        return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(mreq)), int32(unsafe.Sizeof(*mreq)))
 }
 func SetsockoptIPv6Mreq(fd Handle, level, opt int, mreq *IPv6Mreq) (err error) { return EWINDOWS }
-func BindToDevice(fd Handle, device string) (err error)                        { return EWINDOWS }
 
 // TODO(brainman): fix all needed for os