Explorar o código

go.net/ipv6: make use of new socket option binding tables

Also fixes build.

LGTM=iant
R=iant
CC=golang-codereviews
https://golang.org/cl/171880043
Mikio Hara %!s(int64=11) %!d(string=hai) anos
pai
achega
5b3148527f
Modificáronse 3 ficheiros con 35 adicións e 17 borrados
  1. 26 12
      ipv6/dgramopt_posix.go
  2. 5 1
      ipv6/endpoint.go
  3. 4 4
      ipv6/genericopt_posix.go

+ 26 - 12
ipv6/dgramopt_posix.go

@@ -21,7 +21,7 @@ func (c *dgramOpt) MulticastHopLimit() (int, error) {
 	if err != nil {
 		return 0, err
 	}
-	return ipv6MulticastHopLimit(fd)
+	return getInt(fd, &sockOpts[ssoMulticastHopLimit])
 }
 
 // SetMulticastHopLimit sets the hop limit field value for future
@@ -34,7 +34,7 @@ func (c *dgramOpt) SetMulticastHopLimit(hoplim int) error {
 	if err != nil {
 		return err
 	}
-	return setIPv6MulticastHopLimit(fd, hoplim)
+	return setInt(fd, &sockOpts[ssoMulticastHopLimit], hoplim)
 }
 
 // MulticastInterface returns the default interface for multicast
@@ -47,7 +47,7 @@ func (c *dgramOpt) MulticastInterface() (*net.Interface, error) {
 	if err != nil {
 		return nil, err
 	}
-	return ipv6MulticastInterface(fd)
+	return getInterface(fd, &sockOpts[ssoMulticastInterface])
 }
 
 // SetMulticastInterface sets the default interface for future
@@ -60,7 +60,7 @@ func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error {
 	if err != nil {
 		return err
 	}
-	return setIPv6MulticastInterface(fd, ifi)
+	return setInterface(fd, &sockOpts[ssoMulticastInterface], ifi)
 }
 
 // MulticastLoopback reports whether transmitted multicast packets
@@ -73,7 +73,11 @@ func (c *dgramOpt) MulticastLoopback() (bool, error) {
 	if err != nil {
 		return false, err
 	}
-	return ipv6MulticastLoopback(fd)
+	on, err := getInt(fd, &sockOpts[ssoMulticastLoopback])
+	if err != nil {
+		return false, err
+	}
+	return on == 1, nil
 }
 
 // SetMulticastLoopback sets whether transmitted multicast packets
@@ -86,7 +90,7 @@ func (c *dgramOpt) SetMulticastLoopback(on bool) error {
 	if err != nil {
 		return err
 	}
-	return setIPv6MulticastLoopback(fd, on)
+	return setInt(fd, &sockOpts[ssoMulticastLoopback], boolint(on))
 }
 
 // JoinGroup joins the group address group on the interface ifi.
@@ -105,7 +109,7 @@ func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error {
 	if grp == nil {
 		return errMissingAddress
 	}
-	return joinIPv6Group(fd, ifi, grp)
+	return setGroup(fd, &sockOpts[ssoJoinGroup], ifi, grp)
 }
 
 // LeaveGroup leaves the group address group on the interface ifi.
@@ -121,7 +125,7 @@ func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error {
 	if grp == nil {
 		return errMissingAddress
 	}
-	return leaveIPv6Group(fd, ifi, grp)
+	return setGroup(fd, &sockOpts[ssoLeaveGroup], ifi, grp)
 }
 
 // Checksum reports whether the kernel will compute, store or verify a
@@ -136,7 +140,14 @@ func (c *dgramOpt) Checksum() (on bool, offset int, err error) {
 	if err != nil {
 		return false, 0, err
 	}
-	return ipv6Checksum(fd)
+	offset, err = getInt(fd, &sockOpts[ssoChecksum])
+	if err != nil {
+		return false, 0, err
+	}
+	if offset < 0 {
+		return false, 0, nil
+	}
+	return true, offset, nil
 }
 
 // SetChecksum enables the kernel checksum processing.  If on is ture,
@@ -150,7 +161,10 @@ func (c *dgramOpt) SetChecksum(on bool, offset int) error {
 	if err != nil {
 		return err
 	}
-	return setIPv6Checksum(fd, on, offset)
+	if !on {
+		offset = -1
+	}
+	return setInt(fd, &sockOpts[ssoChecksum], offset)
 }
 
 // ICMPFilter returns an ICMP filter.
@@ -162,7 +176,7 @@ func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) {
 	if err != nil {
 		return nil, err
 	}
-	return ipv6ICMPFilter(fd)
+	return getICMPFilter(fd, &sockOpts[ssoICMPFilter])
 }
 
 // SetICMPFilter deploys the ICMP filter.
@@ -174,5 +188,5 @@ func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error {
 	if err != nil {
 		return err
 	}
-	return setIPv6ICMPFilter(fd, f)
+	return setICMPFilter(fd, &sockOpts[ssoICMPFilter], f)
 }

+ 5 - 1
ipv6/endpoint.go

@@ -33,7 +33,11 @@ func (c *Conn) PathMTU() (int, error) {
 	if err != nil {
 		return 0, err
 	}
-	return ipv6PathMTU(fd)
+	_, mtu, err := getMTUInfo(fd, &sockOpts[ssoPathMTU])
+	if err != nil {
+		return 0, err
+	}
+	return mtu, nil
 }
 
 // NewConn returns a new Conn.

+ 4 - 4
ipv6/genericopt_posix.go

@@ -18,7 +18,7 @@ func (c *genericOpt) TrafficClass() (int, error) {
 	if err != nil {
 		return 0, err
 	}
-	return ipv6TrafficClass(fd)
+	return getInt(fd, &sockOpts[ssoTrafficClass])
 }
 
 // SetTrafficClass sets the traffic class field value for future
@@ -31,7 +31,7 @@ func (c *genericOpt) SetTrafficClass(tclass int) error {
 	if err != nil {
 		return err
 	}
-	return setIPv6TrafficClass(fd, tclass)
+	return setInt(fd, &sockOpts[ssoTrafficClass], tclass)
 }
 
 // HopLimit returns the hop limit field value for outgoing packets.
@@ -43,7 +43,7 @@ func (c *genericOpt) HopLimit() (int, error) {
 	if err != nil {
 		return 0, err
 	}
-	return ipv6HopLimit(fd)
+	return getInt(fd, &sockOpts[ssoHopLimit])
 }
 
 // SetHopLimit sets the hop limit field value for future outgoing
@@ -56,5 +56,5 @@ func (c *genericOpt) SetHopLimit(hoplim int) error {
 	if err != nil {
 		return err
 	}
-	return setIPv6HopLimit(fd, hoplim)
+	return setInt(fd, &sockOpts[ssoHopLimit], hoplim)
 }