Skip to content

Commit bd58382

Browse files
committed
ipv6: plumb in the standard library of Go 1.9 by using internal/socket package
This change uses the internal/socket package to ensure that the ipv6 package works with all supported versions of the Go standard library. Fixes golang/go#19051. Change-Id: I74911a8c5bba79e082a10d64e621ed415be1c033 Reviewed-on: https://go-review.googlesource.com/37042 Reviewed-by: Ian Lance Taylor <[email protected]>
1 parent c4fa6e0 commit bd58382

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+430
-656
lines changed

ipv6/bpfopt_linux.go

-28
This file was deleted.

ipv6/bpfopt_stub.go

-16
This file was deleted.

ipv6/control_stub.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22
// Use of this source code is governed by a BSD-style
33
// license that can be found in the LICENSE file.
44

5-
// +build nacl plan9
5+
// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows
66

77
package ipv6
88

9-
func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error {
9+
import "golang.org/x/net/internal/socket"
10+
11+
func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error {
1012
return errOpNoSupport
1113
}
1214

ipv6/control_unix.go

+10-9
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@ import (
1111
"syscall"
1212

1313
"golang.org/x/net/internal/iana"
14+
"golang.org/x/net/internal/socket"
1415
)
1516

16-
func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error {
17+
func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error {
1718
opt.Lock()
1819
defer opt.Unlock()
19-
if cf&FlagTrafficClass != 0 && sockOpts[ssoReceiveTrafficClass].name > 0 {
20-
if err := setInt(s, &sockOpts[ssoReceiveTrafficClass], boolint(on)); err != nil {
20+
if so, ok := sockOpts[ssoReceiveTrafficClass]; ok && cf&FlagTrafficClass != 0 {
21+
if err := so.SetInt(c, boolint(on)); err != nil {
2122
return err
2223
}
2324
if on {
@@ -26,8 +27,8 @@ func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error {
2627
opt.clear(FlagTrafficClass)
2728
}
2829
}
29-
if cf&FlagHopLimit != 0 && sockOpts[ssoReceiveHopLimit].name > 0 {
30-
if err := setInt(s, &sockOpts[ssoReceiveHopLimit], boolint(on)); err != nil {
30+
if so, ok := sockOpts[ssoReceiveHopLimit]; ok && cf&FlagHopLimit != 0 {
31+
if err := so.SetInt(c, boolint(on)); err != nil {
3132
return err
3233
}
3334
if on {
@@ -36,8 +37,8 @@ func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error {
3637
opt.clear(FlagHopLimit)
3738
}
3839
}
39-
if cf&flagPacketInfo != 0 && sockOpts[ssoReceivePacketInfo].name > 0 {
40-
if err := setInt(s, &sockOpts[ssoReceivePacketInfo], boolint(on)); err != nil {
40+
if so, ok := sockOpts[ssoReceivePacketInfo]; ok && cf&flagPacketInfo != 0 {
41+
if err := so.SetInt(c, boolint(on)); err != nil {
4142
return err
4243
}
4344
if on {
@@ -46,8 +47,8 @@ func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error {
4647
opt.clear(cf & flagPacketInfo)
4748
}
4849
}
49-
if cf&FlagPathMTU != 0 && sockOpts[ssoReceivePathMTU].name > 0 {
50-
if err := setInt(s, &sockOpts[ssoReceivePathMTU], boolint(on)); err != nil {
50+
if so, ok := sockOpts[ssoReceivePathMTU]; ok && cf&FlagPathMTU != 0 {
51+
if err := so.SetInt(c, boolint(on)); err != nil {
5152
return err
5253
}
5354
if on {

ipv6/control_windows.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,13 @@
44

55
package ipv6
66

7-
import "syscall"
7+
import (
8+
"syscall"
89

9-
func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error {
10+
"golang.org/x/net/internal/socket"
11+
)
12+
13+
func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error {
1014
// TODO(mikio): implement this
1115
return syscall.EWINDOWS
1216
}

ipv6/defs_linux.go

+2
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,8 @@ const (
120120
sizeofGroupSourceReq = C.sizeof_struct_group_source_req
121121

122122
sizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
123+
124+
sizeofSockFprog = C.sizeof_struct_sock_fprog
123125
)
124126

125127
type kernelSockaddrStorage C.struct___kernel_sockaddr_storage

0 commit comments

Comments
 (0)