ipv6: drop the use of syscall package in platform-independent code

Change-Id: I001c4b5ffceb97a599da10b21b8df1b1d6740ccc
Reviewed-on: https://go-review.googlesource.com/121883
Run-TryBot: Mikio Hara <mikioh.mikioh@gmail.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/ipv6/batch.go b/ipv6/batch.go
index 4f5fe68..10d6492 100644
--- a/ipv6/batch.go
+++ b/ipv6/batch.go
@@ -9,7 +9,6 @@
 import (
 	"net"
 	"runtime"
-	"syscall"
 
 	"golang.org/x/net/internal/socket"
 )
@@ -67,7 +66,7 @@
 // On other platforms, this method will read only a single message.
 func (c *payloadHandler) ReadBatch(ms []Message, flags int) (int, error) {
 	if !c.ok() {
-		return 0, syscall.EINVAL
+		return 0, errInvalidConn
 	}
 	switch runtime.GOOS {
 	case "linux":
@@ -98,7 +97,7 @@
 // On other platforms, this method will write only a single message.
 func (c *payloadHandler) WriteBatch(ms []Message, flags int) (int, error) {
 	if !c.ok() {
-		return 0, syscall.EINVAL
+		return 0, errInvalidConn
 	}
 	switch runtime.GOOS {
 	case "linux":
diff --git a/ipv6/dgramopt.go b/ipv6/dgramopt.go
index 703dafe..eea4fde 100644
--- a/ipv6/dgramopt.go
+++ b/ipv6/dgramopt.go
@@ -6,7 +6,6 @@
 
 import (
 	"net"
-	"syscall"
 
 	"golang.org/x/net/bpf"
 )
@@ -15,7 +14,7 @@
 // multicast packets.
 func (c *dgramOpt) MulticastHopLimit() (int, error) {
 	if !c.ok() {
-		return 0, syscall.EINVAL
+		return 0, errInvalidConn
 	}
 	so, ok := sockOpts[ssoMulticastHopLimit]
 	if !ok {
@@ -28,7 +27,7 @@
 // outgoing multicast packets.
 func (c *dgramOpt) SetMulticastHopLimit(hoplim int) error {
 	if !c.ok() {
-		return syscall.EINVAL
+		return errInvalidConn
 	}
 	so, ok := sockOpts[ssoMulticastHopLimit]
 	if !ok {
@@ -41,7 +40,7 @@
 // packet transmissions.
 func (c *dgramOpt) MulticastInterface() (*net.Interface, error) {
 	if !c.ok() {
-		return nil, syscall.EINVAL
+		return nil, errInvalidConn
 	}
 	so, ok := sockOpts[ssoMulticastInterface]
 	if !ok {
@@ -54,7 +53,7 @@
 // multicast packet transmissions.
 func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error {
 	if !c.ok() {
-		return syscall.EINVAL
+		return errInvalidConn
 	}
 	so, ok := sockOpts[ssoMulticastInterface]
 	if !ok {
@@ -67,7 +66,7 @@
 // should be copied and send back to the originator.
 func (c *dgramOpt) MulticastLoopback() (bool, error) {
 	if !c.ok() {
-		return false, syscall.EINVAL
+		return false, errInvalidConn
 	}
 	so, ok := sockOpts[ssoMulticastLoopback]
 	if !ok {
@@ -84,7 +83,7 @@
 // should be copied and send back to the originator.
 func (c *dgramOpt) SetMulticastLoopback(on bool) error {
 	if !c.ok() {
-		return syscall.EINVAL
+		return errInvalidConn
 	}
 	so, ok := sockOpts[ssoMulticastLoopback]
 	if !ok {
@@ -104,7 +103,7 @@
 // configuration.
 func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error {
 	if !c.ok() {
-		return syscall.EINVAL
+		return errInvalidConn
 	}
 	so, ok := sockOpts[ssoJoinGroup]
 	if !ok {
@@ -122,7 +121,7 @@
 // source-specific group.
 func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error {
 	if !c.ok() {
-		return syscall.EINVAL
+		return errInvalidConn
 	}
 	so, ok := sockOpts[ssoLeaveGroup]
 	if !ok {
@@ -143,7 +142,7 @@
 // routing configuration.
 func (c *dgramOpt) JoinSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
 	if !c.ok() {
-		return syscall.EINVAL
+		return errInvalidConn
 	}
 	so, ok := sockOpts[ssoJoinSourceGroup]
 	if !ok {
@@ -164,7 +163,7 @@
 // interface ifi.
 func (c *dgramOpt) LeaveSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
 	if !c.ok() {
-		return syscall.EINVAL
+		return errInvalidConn
 	}
 	so, ok := sockOpts[ssoLeaveSourceGroup]
 	if !ok {
@@ -186,7 +185,7 @@
 // ifi.
 func (c *dgramOpt) ExcludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
 	if !c.ok() {
-		return syscall.EINVAL
+		return errInvalidConn
 	}
 	so, ok := sockOpts[ssoBlockSourceGroup]
 	if !ok {
@@ -207,7 +206,7 @@
 // group by ExcludeSourceSpecificGroup again on the interface ifi.
 func (c *dgramOpt) IncludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
 	if !c.ok() {
-		return syscall.EINVAL
+		return errInvalidConn
 	}
 	so, ok := sockOpts[ssoUnblockSourceGroup]
 	if !ok {
@@ -230,7 +229,7 @@
 // field is located.
 func (c *dgramOpt) Checksum() (on bool, offset int, err error) {
 	if !c.ok() {
-		return false, 0, syscall.EINVAL
+		return false, 0, errInvalidConn
 	}
 	so, ok := sockOpts[ssoChecksum]
 	if !ok {
@@ -251,7 +250,7 @@
 // checksum field is located.
 func (c *dgramOpt) SetChecksum(on bool, offset int) error {
 	if !c.ok() {
-		return syscall.EINVAL
+		return errInvalidConn
 	}
 	so, ok := sockOpts[ssoChecksum]
 	if !ok {
@@ -266,7 +265,7 @@
 // ICMPFilter returns an ICMP filter.
 func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) {
 	if !c.ok() {
-		return nil, syscall.EINVAL
+		return nil, errInvalidConn
 	}
 	so, ok := sockOpts[ssoICMPFilter]
 	if !ok {
@@ -278,7 +277,7 @@
 // SetICMPFilter deploys the ICMP filter.
 func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error {
 	if !c.ok() {
-		return syscall.EINVAL
+		return errInvalidConn
 	}
 	so, ok := sockOpts[ssoICMPFilter]
 	if !ok {
@@ -292,7 +291,7 @@
 // Only supported on Linux.
 func (c *dgramOpt) SetBPF(filter []bpf.RawInstruction) error {
 	if !c.ok() {
-		return syscall.EINVAL
+		return errInvalidConn
 	}
 	so, ok := sockOpts[ssoAttachFilter]
 	if !ok {
diff --git a/ipv6/endpoint.go b/ipv6/endpoint.go
index 0624c17..9325756 100644
--- a/ipv6/endpoint.go
+++ b/ipv6/endpoint.go
@@ -6,7 +6,6 @@
 
 import (
 	"net"
-	"syscall"
 	"time"
 
 	"golang.org/x/net/internal/socket"
@@ -34,7 +33,7 @@
 // with the endpoint.
 func (c *Conn) PathMTU() (int, error) {
 	if !c.ok() {
-		return 0, syscall.EINVAL
+		return 0, errInvalidConn
 	}
 	so, ok := sockOpts[ssoPathMTU]
 	if !ok {
@@ -76,7 +75,7 @@
 // socket options.
 func (c *PacketConn) SetControlMessage(cf ControlFlags, on bool) error {
 	if !c.payloadHandler.ok() {
-		return syscall.EINVAL
+		return errInvalidConn
 	}
 	return setControlMessage(c.dgramOpt.Conn, &c.payloadHandler.rawOpt, cf, on)
 }
@@ -85,7 +84,7 @@
 // endpoint.
 func (c *PacketConn) SetDeadline(t time.Time) error {
 	if !c.payloadHandler.ok() {
-		return syscall.EINVAL
+		return errInvalidConn
 	}
 	return c.payloadHandler.SetDeadline(t)
 }
@@ -94,7 +93,7 @@
 // endpoint.
 func (c *PacketConn) SetReadDeadline(t time.Time) error {
 	if !c.payloadHandler.ok() {
-		return syscall.EINVAL
+		return errInvalidConn
 	}
 	return c.payloadHandler.SetReadDeadline(t)
 }
@@ -103,7 +102,7 @@
 // endpoint.
 func (c *PacketConn) SetWriteDeadline(t time.Time) error {
 	if !c.payloadHandler.ok() {
-		return syscall.EINVAL
+		return errInvalidConn
 	}
 	return c.payloadHandler.SetWriteDeadline(t)
 }
@@ -111,7 +110,7 @@
 // Close closes the endpoint.
 func (c *PacketConn) Close() error {
 	if !c.payloadHandler.ok() {
-		return syscall.EINVAL
+		return errInvalidConn
 	}
 	return c.payloadHandler.Close()
 }
diff --git a/ipv6/genericopt.go b/ipv6/genericopt.go
index e9dbc2e..1a18f75 100644
--- a/ipv6/genericopt.go
+++ b/ipv6/genericopt.go
@@ -4,13 +4,11 @@
 
 package ipv6
 
-import "syscall"
-
 // TrafficClass returns the traffic class field value for outgoing
 // packets.
 func (c *genericOpt) TrafficClass() (int, error) {
 	if !c.ok() {
-		return 0, syscall.EINVAL
+		return 0, errInvalidConn
 	}
 	so, ok := sockOpts[ssoTrafficClass]
 	if !ok {
@@ -23,7 +21,7 @@
 // outgoing packets.
 func (c *genericOpt) SetTrafficClass(tclass int) error {
 	if !c.ok() {
-		return syscall.EINVAL
+		return errInvalidConn
 	}
 	so, ok := sockOpts[ssoTrafficClass]
 	if !ok {
@@ -35,7 +33,7 @@
 // HopLimit returns the hop limit field value for outgoing packets.
 func (c *genericOpt) HopLimit() (int, error) {
 	if !c.ok() {
-		return 0, syscall.EINVAL
+		return 0, errInvalidConn
 	}
 	so, ok := sockOpts[ssoHopLimit]
 	if !ok {
@@ -48,7 +46,7 @@
 // packets.
 func (c *genericOpt) SetHopLimit(hoplim int) error {
 	if !c.ok() {
-		return syscall.EINVAL
+		return errInvalidConn
 	}
 	so, ok := sockOpts[ssoHopLimit]
 	if !ok {
diff --git a/ipv6/helper.go b/ipv6/helper.go
index 2597401..7ac5352 100644
--- a/ipv6/helper.go
+++ b/ipv6/helper.go
@@ -10,6 +10,7 @@
 )
 
 var (
+	errInvalidConn     = errors.New("invalid connection")
 	errMissingAddress  = errors.New("missing address")
 	errHeaderTooShort  = errors.New("header too short")
 	errInvalidConnType = errors.New("invalid conn type")
diff --git a/ipv6/payload_cmsg.go b/ipv6/payload_cmsg.go
index 4ee4b06..b7ccdbd 100644
--- a/ipv6/payload_cmsg.go
+++ b/ipv6/payload_cmsg.go
@@ -6,10 +6,7 @@
 
 package ipv6
 
-import (
-	"net"
-	"syscall"
-)
+import "net"
 
 // ReadFrom reads a payload of the received IPv6 datagram, from the
 // endpoint c, copying the payload into b. It returns the number of
@@ -17,7 +14,7 @@
 // src of the received datagram.
 func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) {
 	if !c.ok() {
-		return 0, nil, nil, syscall.EINVAL
+		return 0, nil, nil, errInvalidConn
 	}
 	return c.readFrom(b)
 }
@@ -29,7 +26,7 @@
 // cm may be nil if control of the outgoing datagram is not required.
 func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) {
 	if !c.ok() {
-		return 0, syscall.EINVAL
+		return 0, errInvalidConn
 	}
 	return c.writeTo(b, cm, dst)
 }
diff --git a/ipv6/payload_nocmsg.go b/ipv6/payload_nocmsg.go
index 99a4354..8358507 100644
--- a/ipv6/payload_nocmsg.go
+++ b/ipv6/payload_nocmsg.go
@@ -6,10 +6,7 @@
 
 package ipv6
 
-import (
-	"net"
-	"syscall"
-)
+import "net"
 
 // ReadFrom reads a payload of the received IPv6 datagram, from the
 // endpoint c, copying the payload into b. It returns the number of
@@ -17,7 +14,7 @@
 // src of the received datagram.
 func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) {
 	if !c.ok() {
-		return 0, nil, nil, syscall.EINVAL
+		return 0, nil, nil, errInvalidConn
 	}
 	if n, src, err = c.PacketConn.ReadFrom(b); err != nil {
 		return 0, nil, nil, err
@@ -32,7 +29,7 @@
 // cm may be nil if control of the outgoing datagram is not required.
 func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) {
 	if !c.ok() {
-		return 0, syscall.EINVAL
+		return 0, errInvalidConn
 	}
 	if dst == nil {
 		return 0, errMissingAddress