mdns: use my fork of hashicorp/mdns
upstream didn't respond to the request to update their dependencies
Henry committed
May 29, 2015 at 01:27 UTC
13a7d27b4c33d8624794f36e1bca6149608a06ec
203 files changed
+7256
-4197
Godeps/Godeps.json
+16
-17
@@ -14,11 +14,6 @@
14
"Comment": "null-15",
15
"Rev": "35bc42037350f0078e3c974c6ea690f1926603ab"
16
},
17
- {
18
- "ImportPath": "code.google.com/p/go.net/internal/iana",
19
- "Comment": "null-240",
20
- "Rev": "937a34c9de13c766c814510f76bca091dee06028"
21
- },
17
{
18
"ImportPath": "github.com/ActiveState/tail",
19
"Rev": "068b72961a6bc5b4a82cf4fc14ccc724c0cfa73a"
@@ -68,6 +63,10 @@
63
"ImportPath": "github.com/crowdmob/goamz/s3",
64
"Rev": "82345796204222aa56be89cf930c316b1297f906"
65
},
66
+ {
67
+ "ImportPath": "github.com/cryptix/mdns",
68
+ "Rev": "04ff72a32679d57d009c0ac0fc5c4cda10350bad"
69
+ },
70
{
71
"ImportPath": "github.com/dustin/go-humanize",
72
"Rev": "00897f070f09f194c26d65afae734ba4c32404e8"
@@ -97,22 +96,10 @@
96
"ImportPath": "github.com/h2so5/utp",
97
"Rev": "6ca83358f5c331028feb9b97c445e9c7354967b0"
98
},
100
- {
101
- "ImportPath": "github.com/hashicorp/go.net/ipv4",
102
- "Rev": "cbad13bf000d0cbdbc71506b26e94bcc72bbe74d"
103
- },
104
- {
105
- "ImportPath": "github.com/hashicorp/go.net/ipv6",
106
- "Rev": "cbad13bf000d0cbdbc71506b26e94bcc72bbe74d"
107
- },
99
{
100
"ImportPath": "github.com/hashicorp/golang-lru",
101
"Rev": "253b2dc1ca8bae42c3b5b6e53dd2eab1a7551116"
102
},
112
- {
113
- "ImportPath": "github.com/hashicorp/mdns",
114
- "Rev": "2b439d37011456df8ff83a70ffd1cd6046410113"
115
- },
103
{
104
"ImportPath": "github.com/hashicorp/yamux",
105
"Rev": "9feabe6854fadca1abec9cd3bd2a613fe9a34000"
@@ -265,6 +252,18 @@
252
"ImportPath": "golang.org/x/net/context",
253
"Rev": "ff8eb9a34a5cbb9941ffc6f84a19a8014c2646ad"
254
},
255
+ {
256
+ "ImportPath": "golang.org/x/net/internal/iana",
257
+ "Rev": "ff8eb9a34a5cbb9941ffc6f84a19a8014c2646ad"
258
+ },
259
+ {
260
+ "ImportPath": "golang.org/x/net/ipv4",
261
+ "Rev": "ff8eb9a34a5cbb9941ffc6f84a19a8014c2646ad"
262
+ },
263
+ {
264
+ "ImportPath": "golang.org/x/net/ipv6",
265
+ "Rev": "ff8eb9a34a5cbb9941ffc6f84a19a8014c2646ad"
266
+ },
267
{
268
"ImportPath": "gopkg.in/fsnotify.v1",
269
"Comment": "v1.2.0",
Godeps/_workspace/src/github.com/cryptix/mdns/.gitignore
renamed
Godeps/_workspace/src/github.com/cryptix/mdns/LICENSE
renamed
Godeps/_workspace/src/github.com/cryptix/mdns/README.md
renamed
Godeps/_workspace/src/github.com/cryptix/mdns/client.go
renamed
+2
-2
@@ -8,9 +8,9 @@ import (
8
"sync"
9
"time"
10
11
- "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/hashicorp/go.net/ipv4"
12
- "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6"
11
"github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/miekg/dns"
12
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/ipv4"
13
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/ipv6"
14
)
15
16
// ServiceEntry is returned after we query for a service
Godeps/_workspace/src/github.com/cryptix/mdns/server.go
renamed
Godeps/_workspace/src/github.com/cryptix/mdns/server_test.go
renamed
Godeps/_workspace/src/github.com/cryptix/mdns/zone.go
renamed
Godeps/_workspace/src/github.com/cryptix/mdns/zone_test.go
renamed
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv4/dgramopt_posix.go
deleted
-129
@@ -1,129 +0,0 @@
1
-// Copyright 2012 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-// +build darwin dragonfly freebsd linux netbsd openbsd windows
6
-
7
-package ipv4
8
-
9
-import (
10
- "net"
11
- "syscall"
12
-)
13
-
14
-// MulticastTTL returns the time-to-live field value for outgoing
15
-// multicast packets.
16
-func (c *dgramOpt) MulticastTTL() (int, error) {
17
- if !c.ok() {
18
- return 0, syscall.EINVAL
19
- }
20
- fd, err := c.sysfd()
21
- if err != nil {
22
- return 0, err
23
- }
24
- return getInt(fd, &sockOpts[ssoMulticastTTL])
25
-}
26
-
27
-// SetMulticastTTL sets the time-to-live field value for future
28
-// outgoing multicast packets.
29
-func (c *dgramOpt) SetMulticastTTL(ttl int) error {
30
- if !c.ok() {
31
- return syscall.EINVAL
32
- }
33
- fd, err := c.sysfd()
34
- if err != nil {
35
- return err
36
- }
37
- return setInt(fd, &sockOpts[ssoMulticastTTL], ttl)
38
-}
39
-
40
-// MulticastInterface returns the default interface for multicast
41
-// packet transmissions.
42
-func (c *dgramOpt) MulticastInterface() (*net.Interface, error) {
43
- if !c.ok() {
44
- return nil, syscall.EINVAL
45
- }
46
- fd, err := c.sysfd()
47
- if err != nil {
48
- return nil, err
49
- }
50
- return getInterface(fd, &sockOpts[ssoMulticastInterface])
51
-}
52
-
53
-// SetMulticastInterface sets the default interface for future
54
-// multicast packet transmissions.
55
-func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error {
56
- if !c.ok() {
57
- return syscall.EINVAL
58
- }
59
- fd, err := c.sysfd()
60
- if err != nil {
61
- return err
62
- }
63
- return setInterface(fd, &sockOpts[ssoMulticastInterface], ifi)
64
-}
65
-
66
-// MulticastLoopback reports whether transmitted multicast packets
67
-// should be copied and send back to the originator.
68
-func (c *dgramOpt) MulticastLoopback() (bool, error) {
69
- if !c.ok() {
70
- return false, syscall.EINVAL
71
- }
72
- fd, err := c.sysfd()
73
- if err != nil {
74
- return false, err
75
- }
76
- on, err := getInt(fd, &sockOpts[ssoMulticastLoopback])
77
- if err != nil {
78
- return false, err
79
- }
80
- return on == 1, nil
81
-}
82
-
83
-// SetMulticastLoopback sets whether transmitted multicast packets
84
-// should be copied and send back to the originator.
85
-func (c *dgramOpt) SetMulticastLoopback(on bool) error {
86
- if !c.ok() {
87
- return syscall.EINVAL
88
- }
89
- fd, err := c.sysfd()
90
- if err != nil {
91
- return err
92
- }
93
- return setInt(fd, &sockOpts[ssoMulticastLoopback], boolint(on))
94
-}
95
-
96
-// JoinGroup joins the group address group on the interface ifi.
97
-// It uses the system assigned multicast interface when ifi is nil,
98
-// although this is not recommended because the assignment depends on
99
-// platforms and sometimes it might require routing configuration.
100
-func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error {
101
- if !c.ok() {
102
- return syscall.EINVAL
103
- }
104
- fd, err := c.sysfd()
105
- if err != nil {
106
- return err
107
- }
108
- grp := netAddrToIP4(group)
109
- if grp == nil {
110
- return errMissingAddress
111
- }
112
- return setGroup(fd, &sockOpts[ssoJoinGroup], ifi, grp)
113
-}
114
-
115
-// LeaveGroup leaves the group address group on the interface ifi.
116
-func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error {
117
- if !c.ok() {
118
- return syscall.EINVAL
119
- }
120
- fd, err := c.sysfd()
121
- if err != nil {
122
- return err
123
- }
124
- grp := netAddrToIP4(group)
125
- if grp == nil {
126
- return errMissingAddress
127
- }
128
- return setGroup(fd, &sockOpts[ssoLeaveGroup], ifi, grp)
129
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv4/dgramopt_stub.go
deleted
-49
@@ -1,49 +0,0 @@
1
-// Copyright 2012 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-// +build nacl plan9 solaris
6
-
7
-package ipv4
8
-
9
-import "net"
10
-
11
-func (c *dgramOpt) MulticastTTL() (int, error) {
12
- // TODO(mikio): Implement this
13
- return 0, errOpNoSupport
14
-}
15
-
16
-func (c *dgramOpt) SetMulticastTTL(ttl int) error {
17
- // TODO(mikio): Implement this
18
- return errOpNoSupport
19
-}
20
-
21
-func (c *dgramOpt) MulticastInterface() (*net.Interface, error) {
22
- // TODO(mikio): Implement this
23
- return nil, errOpNoSupport
24
-}
25
-
26
-func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error {
27
- // TODO(mikio): Implement this
28
- return errOpNoSupport
29
-}
30
-
31
-func (c *dgramOpt) MulticastLoopback() (bool, error) {
32
- // TODO(mikio): Implement this
33
- return false, errOpNoSupport
34
-}
35
-
36
-func (c *dgramOpt) SetMulticastLoopback(on bool) error {
37
- // TODO(mikio): Implement this
38
- return errOpNoSupport
39
-}
40
-
41
-func (c *dgramOpt) JoinGroup(ifi *net.Interface, grp net.Addr) error {
42
- // TODO(mikio): Implement this
43
- return errOpNoSupport
44
-}
45
-
46
-func (c *dgramOpt) LeaveGroup(ifi *net.Interface, grp net.Addr) error {
47
- // TODO(mikio): Implement this
48
- return errOpNoSupport
49
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv4/error_posix_test.go
deleted
-31
@@ -1,31 +0,0 @@
1
-// Copyright 2014 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
6
-
7
-package ipv4_test
8
-
9
-import (
10
- "os"
11
- "syscall"
12
-)
13
-
14
-func protocolNotSupported(err error) bool {
15
- switch err := err.(type) {
16
- case syscall.Errno:
17
- switch err {
18
- case syscall.EPROTONOSUPPORT, syscall.ENOPROTOOPT:
19
- return true
20
- }
21
- case *os.SyscallError:
22
- switch err := err.Err.(type) {
23
- case syscall.Errno:
24
- switch err {
25
- case syscall.EPROTONOSUPPORT, syscall.ENOPROTOOPT:
26
- return true
27
- }
28
- }
29
- }
30
- return false
31
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv4/example_test.go
deleted
-285
@@ -1,285 +0,0 @@
1
-// Copyright 2012 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-package ipv4_test
6
-
7
-import (
8
- "log"
9
- "net"
10
-
11
- "code.google.com/p/go.net/ipv4"
12
- "github.com/ipfs/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/internal/iana"
13
-)
14
-
15
-func ExampleUnicastTCPListener() {
16
- ln, err := net.Listen("tcp4", "0.0.0.0:1024")
17
- if err != nil {
18
- log.Fatal(err)
19
- }
20
- defer ln.Close()
21
- for {
22
- c, err := ln.Accept()
23
- if err != nil {
24
- log.Fatal(err)
25
- }
26
- go func(c net.Conn) {
27
- defer c.Close()
28
- err := ipv4.NewConn(c).SetTOS(iana.DiffServAF11)
29
- if err != nil {
30
- log.Fatal(err)
31
- }
32
- _, err = c.Write([]byte("HELLO-R-U-THERE-ACK"))
33
- if err != nil {
34
- log.Fatal(err)
35
- }
36
- }(c)
37
- }
38
-}
39
-
40
-func ExampleMulticastUDPListener() {
41
- en0, err := net.InterfaceByName("en0")
42
- if err != nil {
43
- log.Fatal(err)
44
- }
45
- en1, err := net.InterfaceByIndex(911)
46
- if err != nil {
47
- log.Fatal(err)
48
- }
49
- group := net.IPv4(224, 0, 0, 250)
50
-
51
- c, err := net.ListenPacket("udp4", "0.0.0.0:1024")
52
- if err != nil {
53
- log.Fatal(err)
54
- }
55
- defer c.Close()
56
-
57
- p := ipv4.NewPacketConn(c)
58
- err = p.JoinGroup(en0, &net.UDPAddr{IP: group})
59
- if err != nil {
60
- log.Fatal(err)
61
- }
62
- err = p.JoinGroup(en1, &net.UDPAddr{IP: group})
63
- if err != nil {
64
- log.Fatal(err)
65
- }
66
-
67
- err = p.SetControlMessage(ipv4.FlagDst, true)
68
- if err != nil {
69
- log.Fatal(err)
70
- }
71
-
72
- b := make([]byte, 1500)
73
- for {
74
- n, cm, src, err := p.ReadFrom(b)
75
- if err != nil {
76
- log.Fatal(err)
77
- }
78
- if cm.Dst.IsMulticast() {
79
- if cm.Dst.Equal(group) {
80
- // joined group, do something
81
- } else {
82
- // unknown group, discard
83
- continue
84
- }
85
- }
86
- p.SetTOS(iana.DiffServCS7)
87
- p.SetTTL(16)
88
- _, err = p.WriteTo(b[:n], nil, src)
89
- if err != nil {
90
- log.Fatal(err)
91
- }
92
- dst := &net.UDPAddr{IP: group, Port: 1024}
93
- for _, ifi := range []*net.Interface{en0, en1} {
94
- err := p.SetMulticastInterface(ifi)
95
- if err != nil {
96
- log.Fatal(err)
97
- }
98
- p.SetMulticastTTL(2)
99
- _, err = p.WriteTo(b[:n], nil, dst)
100
- if err != nil {
101
- log.Fatal(err)
102
- }
103
- }
104
- }
105
-
106
- err = p.LeaveGroup(en1, &net.UDPAddr{IP: group})
107
- if err != nil {
108
- log.Fatal(err)
109
- }
110
- newgroup := net.IPv4(224, 0, 0, 249)
111
- err = p.JoinGroup(en1, &net.UDPAddr{IP: newgroup})
112
- if err != nil {
113
- log.Fatal(err)
114
- }
115
-}
116
-
117
-type OSPFHeader struct {
118
- Version byte
119
- Type byte
120
- Len uint16
121
- RouterID uint32
122
- AreaID uint32
123
- Checksum uint16
124
-}
125
-
126
-const (
127
- OSPFHeaderLen = 14
128
- OSPFHelloHeaderLen = 20
129
- OSPF_VERSION = 2
130
- OSPF_TYPE_HELLO = iota + 1
131
- OSPF_TYPE_DB_DESCRIPTION
132
- OSPF_TYPE_LS_REQUEST
133
- OSPF_TYPE_LS_UPDATE
134
- OSPF_TYPE_LS_ACK
135
-)
136
-
137
-var (
138
- AllSPFRouters = net.IPv4(224, 0, 0, 5)
139
- AllDRouters = net.IPv4(224, 0, 0, 6)
140
-)
141
-
142
-func ExampleIPOSPFListener() {
143
- var ifs []*net.Interface
144
- en0, err := net.InterfaceByName("en0")
145
- if err != nil {
146
- log.Fatal(err)
147
- }
148
- ifs = append(ifs, en0)
149
- en1, err := net.InterfaceByIndex(911)
150
- if err != nil {
151
- log.Fatal(err)
152
- }
153
- ifs = append(ifs, en1)
154
-
155
- c, err := net.ListenPacket("ip4:89", "0.0.0.0") // OSFP for IPv4
156
- if err != nil {
157
- log.Fatal(err)
158
- }
159
- defer c.Close()
160
-
161
- r, err := ipv4.NewRawConn(c)
162
- if err != nil {
163
- log.Fatal(err)
164
- }
165
- for _, ifi := range ifs {
166
- err := r.JoinGroup(ifi, &net.IPAddr{IP: AllSPFRouters})
167
- if err != nil {
168
- log.Fatal(err)
169
- }
170
- err = r.JoinGroup(ifi, &net.IPAddr{IP: AllDRouters})
171
- if err != nil {
172
- log.Fatal(err)
173
- }
174
- }
175
-
176
- err = r.SetControlMessage(ipv4.FlagDst|ipv4.FlagInterface, true)
177
- if err != nil {
178
- log.Fatal(err)
179
- }
180
- r.SetTOS(iana.DiffServCS6)
181
-
182
- parseOSPFHeader := func(b []byte) *OSPFHeader {
183
- if len(b) < OSPFHeaderLen {
184
- return nil
185
- }
186
- return &OSPFHeader{
187
- Version: b[0],
188
- Type: b[1],
189
- Len: uint16(b[2])<<8 | uint16(b[3]),
190
- RouterID: uint32(b[4])<<24 | uint32(b[5])<<16 | uint32(b[6])<<8 | uint32(b[7]),
191
- AreaID: uint32(b[8])<<24 | uint32(b[9])<<16 | uint32(b[10])<<8 | uint32(b[11]),
192
- Checksum: uint16(b[12])<<8 | uint16(b[13]),
193
- }
194
- }
195
-
196
- b := make([]byte, 1500)
197
- for {
198
- iph, p, _, err := r.ReadFrom(b)
199
- if err != nil {
200
- log.Fatal(err)
201
- }
202
- if iph.Version != ipv4.Version {
203
- continue
204
- }
205
- if iph.Dst.IsMulticast() {
206
- if !iph.Dst.Equal(AllSPFRouters) && !iph.Dst.Equal(AllDRouters) {
207
- continue
208
- }
209
- }
210
- ospfh := parseOSPFHeader(p)
211
- if ospfh == nil {
212
- continue
213
- }
214
- if ospfh.Version != OSPF_VERSION {
215
- continue
216
- }
217
- switch ospfh.Type {
218
- case OSPF_TYPE_HELLO:
219
- case OSPF_TYPE_DB_DESCRIPTION:
220
- case OSPF_TYPE_LS_REQUEST:
221
- case OSPF_TYPE_LS_UPDATE:
222
- case OSPF_TYPE_LS_ACK:
223
- }
224
- }
225
-}
226
-
227
-func ExampleWriteIPOSPFHello() {
228
- var ifs []*net.Interface
229
- en0, err := net.InterfaceByName("en0")
230
- if err != nil {
231
- log.Fatal(err)
232
- }
233
- ifs = append(ifs, en0)
234
- en1, err := net.InterfaceByIndex(911)
235
- if err != nil {
236
- log.Fatal(err)
237
- }
238
- ifs = append(ifs, en1)
239
-
240
- c, err := net.ListenPacket("ip4:89", "0.0.0.0") // OSPF for IPv4
241
- if err != nil {
242
- log.Fatal(err)
243
- }
244
- defer c.Close()
245
-
246
- r, err := ipv4.NewRawConn(c)
247
- if err != nil {
248
- log.Fatal(err)
249
- }
250
- for _, ifi := range ifs {
251
- err := r.JoinGroup(ifi, &net.IPAddr{IP: AllSPFRouters})
252
- if err != nil {
253
- log.Fatal(err)
254
- }
255
- err = r.JoinGroup(ifi, &net.IPAddr{IP: AllDRouters})
256
- if err != nil {
257
- log.Fatal(err)
258
- }
259
- }
260
-
261
- hello := make([]byte, OSPFHelloHeaderLen)
262
- ospf := make([]byte, OSPFHeaderLen)
263
- ospf[0] = OSPF_VERSION
264
- ospf[1] = OSPF_TYPE_HELLO
265
- ospf = append(ospf, hello...)
266
- iph := &ipv4.Header{}
267
- iph.Version = ipv4.Version
268
- iph.Len = ipv4.HeaderLen
269
- iph.TOS = iana.DiffServCS6
270
- iph.TotalLen = ipv4.HeaderLen + len(ospf)
271
- iph.TTL = 1
272
- iph.Protocol = 89
273
- iph.Dst = AllSPFRouters
274
-
275
- for _, ifi := range ifs {
276
- err := r.SetMulticastInterface(ifi)
277
- if err != nil {
278
- return
279
- }
280
- err = r.WriteTo(iph, ospf, nil)
281
- if err != nil {
282
- return
283
- }
284
- }
285
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv4/icmp.go
deleted
-16
@@ -1,16 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-package ipv4
6
-
7
-// An ICMPType represents a type of ICMP message.
8
-type ICMPType int
9
-
10
-func (typ ICMPType) String() string {
11
- s, ok := icmpTypes[typ]
12
- if !ok {
13
- return "<nil>"
14
- }
15
- return s
16
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv4/multicast_test.go
deleted
-267
@@ -1,267 +0,0 @@
1
-// Copyright 2012 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-package ipv4_test
6
-
7
-import (
8
- "net"
9
- "os"
10
- "runtime"
11
- "testing"
12
- "time"
13
-
14
- "code.google.com/p/go.net/internal/icmp"
15
- "code.google.com/p/go.net/internal/nettest"
16
- "code.google.com/p/go.net/ipv4"
17
- "github.com/ipfs/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/internal/iana"
18
-)
19
-
20
-func TestPacketConnReadWriteMulticastUDP(t *testing.T) {
21
- switch runtime.GOOS {
22
- case "nacl", "plan9", "solaris", "windows":
23
- t.Skipf("not supported on %q", runtime.GOOS)
24
- }
25
- ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
26
- if ifi == nil {
27
- t.Skipf("not available on %q", runtime.GOOS)
28
- }
29
-
30
- c, err := net.ListenPacket("udp4", "224.0.0.0:0") // see RFC 4727
31
- if err != nil {
32
- t.Fatalf("net.ListenPacket failed: %v", err)
33
- }
34
- defer c.Close()
35
-
36
- _, port, err := net.SplitHostPort(c.LocalAddr().String())
37
- if err != nil {
38
- t.Fatalf("net.SplitHostPort failed: %v", err)
39
- }
40
- dst, err := net.ResolveUDPAddr("udp4", "224.0.0.254:"+port) // see RFC 4727
41
- if err != nil {
42
- t.Fatalf("net.ResolveUDPAddr failed: %v", err)
43
- }
44
-
45
- p := ipv4.NewPacketConn(c)
46
- defer p.Close()
47
- if err := p.JoinGroup(ifi, dst); err != nil {
48
- t.Fatalf("ipv4.PacketConn.JoinGroup on %v failed: %v", ifi, err)
49
- }
50
- if err := p.SetMulticastInterface(ifi); err != nil {
51
- t.Fatalf("ipv4.PacketConn.SetMulticastInterface failed: %v", err)
52
- }
53
- if _, err := p.MulticastInterface(); err != nil {
54
- t.Fatalf("ipv4.PacketConn.MulticastInterface failed: %v", err)
55
- }
56
- if err := p.SetMulticastLoopback(true); err != nil {
57
- t.Fatalf("ipv4.PacketConn.SetMulticastLoopback failed: %v", err)
58
- }
59
- if _, err := p.MulticastLoopback(); err != nil {
60
- t.Fatalf("ipv4.PacketConn.MulticastLoopback failed: %v", err)
61
- }
62
- cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
63
-
64
- for i, toggle := range []bool{true, false, true} {
65
- if err := p.SetControlMessage(cf, toggle); err != nil {
66
- if protocolNotSupported(err) {
67
- t.Skipf("not supported on %q", runtime.GOOS)
68
- }
69
- t.Fatalf("ipv4.PacketConn.SetControlMessage failed: %v", err)
70
- }
71
- if err := p.SetDeadline(time.Now().Add(200 * time.Millisecond)); err != nil {
72
- t.Fatalf("ipv4.PacketConn.SetDeadline failed: %v", err)
73
- }
74
- p.SetMulticastTTL(i + 1)
75
- if _, err := p.WriteTo([]byte("HELLO-R-U-THERE"), nil, dst); err != nil {
76
- t.Fatalf("ipv4.PacketConn.WriteTo failed: %v", err)
77
- }
78
- b := make([]byte, 128)
79
- if _, cm, _, err := p.ReadFrom(b); err != nil {
80
- t.Fatalf("ipv4.PacketConn.ReadFrom failed: %v", err)
81
- } else {
82
- t.Logf("rcvd cmsg: %v", cm)
83
- }
84
- }
85
-}
86
-
87
-func TestPacketConnReadWriteMulticastICMP(t *testing.T) {
88
- switch runtime.GOOS {
89
- case "nacl", "plan9", "solaris", "windows":
90
- t.Skipf("not supported on %q", runtime.GOOS)
91
- }
92
- if os.Getuid() != 0 {
93
- t.Skip("must be root")
94
- }
95
- ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
96
- if ifi == nil {
97
- t.Skipf("not available on %q", runtime.GOOS)
98
- }
99
-
100
- c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
101
- if err != nil {
102
- t.Fatalf("net.ListenPacket failed: %v", err)
103
- }
104
- defer c.Close()
105
-
106
- dst, err := net.ResolveIPAddr("ip4", "224.0.0.254") // see RFC 4727
107
- if err != nil {
108
- t.Fatalf("net.ResolveIPAddr failed: %v", err)
109
- }
110
-
111
- p := ipv4.NewPacketConn(c)
112
- defer p.Close()
113
- if err := p.JoinGroup(ifi, dst); err != nil {
114
- t.Fatalf("ipv4.PacketConn.JoinGroup on %v failed: %v", ifi, err)
115
- }
116
- if err := p.SetMulticastInterface(ifi); err != nil {
117
- t.Fatalf("ipv4.PacketConn.SetMulticastInterface failed: %v", err)
118
- }
119
- if _, err := p.MulticastInterface(); err != nil {
120
- t.Fatalf("ipv4.PacketConn.MulticastInterface failed: %v", err)
121
- }
122
- if err := p.SetMulticastLoopback(true); err != nil {
123
- t.Fatalf("ipv4.PacketConn.SetMulticastLoopback failed: %v", err)
124
- }
125
- if _, err := p.MulticastLoopback(); err != nil {
126
- t.Fatalf("ipv4.PacketConn.MulticastLoopback failed: %v", err)
127
- }
128
- cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
129
-
130
- for i, toggle := range []bool{true, false, true} {
131
- wb, err := (&icmp.Message{
132
- Type: ipv4.ICMPTypeEcho, Code: 0,
133
- Body: &icmp.Echo{
134
- ID: os.Getpid() & 0xffff, Seq: i + 1,
135
- Data: []byte("HELLO-R-U-THERE"),
136
- },
137
- }).Marshal(nil)
138
- if err != nil {
139
- t.Fatalf("icmp.Message.Marshal failed: %v", err)
140
- }
141
- if err := p.SetControlMessage(cf, toggle); err != nil {
142
- if protocolNotSupported(err) {
143
- t.Skipf("not supported on %q", runtime.GOOS)
144
- }
145
- t.Fatalf("ipv4.PacketConn.SetControlMessage failed: %v", err)
146
- }
147
- if err := p.SetDeadline(time.Now().Add(200 * time.Millisecond)); err != nil {
148
- t.Fatalf("ipv4.PacketConn.SetDeadline failed: %v", err)
149
- }
150
- p.SetMulticastTTL(i + 1)
151
- if _, err := p.WriteTo(wb, nil, dst); err != nil {
152
- t.Fatalf("ipv4.PacketConn.WriteTo failed: %v", err)
153
- }
154
- b := make([]byte, 128)
155
- if n, cm, _, err := p.ReadFrom(b); err != nil {
156
- t.Fatalf("ipv4.PacketConn.ReadFrom failed: %v", err)
157
- } else {
158
- t.Logf("rcvd cmsg: %v", cm)
159
- m, err := icmp.ParseMessage(iana.ProtocolICMP, b[:n])
160
- if err != nil {
161
- t.Fatalf("icmp.ParseMessage failed: %v", err)
162
- }
163
- switch {
164
- case m.Type == ipv4.ICMPTypeEchoReply && m.Code == 0: // net.inet.icmp.bmcastecho=1
165
- case m.Type == ipv4.ICMPTypeEcho && m.Code == 0: // net.inet.icmp.bmcastecho=0
166
- default:
167
- t.Fatalf("got type=%v, code=%v; expected type=%v, code=%v", m.Type, m.Code, ipv4.ICMPTypeEchoReply, 0)
168
- }
169
- }
170
- }
171
-}
172
-
173
-func TestRawConnReadWriteMulticastICMP(t *testing.T) {
174
- if testing.Short() {
175
- t.Skip("to avoid external network")
176
- }
177
- if os.Getuid() != 0 {
178
- t.Skip("must be root")
179
- }
180
- ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
181
- if ifi == nil {
182
- t.Skipf("not available on %q", runtime.GOOS)
183
- }
184
-
185
- c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
186
- if err != nil {
187
- t.Fatalf("net.ListenPacket failed: %v", err)
188
- }
189
- defer c.Close()
190
-
191
- dst, err := net.ResolveIPAddr("ip4", "224.0.0.254") // see RFC 4727
192
- if err != nil {
193
- t.Fatalf("ResolveIPAddr failed: %v", err)
194
- }
195
-
196
- r, err := ipv4.NewRawConn(c)
197
- if err != nil {
198
- t.Fatalf("ipv4.NewRawConn failed: %v", err)
199
- }
200
- defer r.Close()
201
- if err := r.JoinGroup(ifi, dst); err != nil {
202
- t.Fatalf("ipv4.RawConn.JoinGroup on %v failed: %v", ifi, err)
203
- }
204
- if err := r.SetMulticastInterface(ifi); err != nil {
205
- t.Fatalf("ipv4.RawConn.SetMulticastInterface failed: %v", err)
206
- }
207
- if _, err := r.MulticastInterface(); err != nil {
208
- t.Fatalf("ipv4.RawConn.MulticastInterface failed: %v", err)
209
- }
210
- if err := r.SetMulticastLoopback(true); err != nil {
211
- t.Fatalf("ipv4.RawConn.SetMulticastLoopback failed: %v", err)
212
- }
213
- if _, err := r.MulticastLoopback(); err != nil {
214
- t.Fatalf("ipv4.RawConn.MulticastLoopback failed: %v", err)
215
- }
216
- cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
217
-
218
- for i, toggle := range []bool{true, false, true} {
219
- wb, err := (&icmp.Message{
220
- Type: ipv4.ICMPTypeEcho, Code: 0,
221
- Body: &icmp.Echo{
222
- ID: os.Getpid() & 0xffff, Seq: i + 1,
223
- Data: []byte("HELLO-R-U-THERE"),
224
- },
225
- }).Marshal(nil)
226
- if err != nil {
227
- t.Fatalf("icmp.Message.Marshal failed: %v", err)
228
- }
229
- wh := &ipv4.Header{
230
- Version: ipv4.Version,
231
- Len: ipv4.HeaderLen,
232
- TOS: i + 1,
233
- TotalLen: ipv4.HeaderLen + len(wb),
234
- Protocol: 1,
235
- Dst: dst.IP,
236
- }
237
- if err := r.SetControlMessage(cf, toggle); err != nil {
238
- if protocolNotSupported(err) {
239
- t.Skipf("not supported on %q", runtime.GOOS)
240
- }
241
- t.Fatalf("ipv4.RawConn.SetControlMessage failed: %v", err)
242
- }
243
- if err := r.SetDeadline(time.Now().Add(200 * time.Millisecond)); err != nil {
244
- t.Fatalf("ipv4.RawConn.SetDeadline failed: %v", err)
245
- }
246
- r.SetMulticastTTL(i + 1)
247
- if err := r.WriteTo(wh, wb, nil); err != nil {
248
- t.Fatalf("ipv4.RawConn.WriteTo failed: %v", err)
249
- }
250
- rb := make([]byte, ipv4.HeaderLen+128)
251
- if rh, b, cm, err := r.ReadFrom(rb); err != nil {
252
- t.Fatalf("ipv4.RawConn.ReadFrom failed: %v", err)
253
- } else {
254
- t.Logf("rcvd cmsg: %v", cm)
255
- m, err := icmp.ParseMessage(iana.ProtocolICMP, b)
256
- if err != nil {
257
- t.Fatalf("icmp.ParseMessage failed: %v", err)
258
- }
259
- switch {
260
- case (rh.Dst.IsLoopback() || rh.Dst.IsLinkLocalUnicast() || rh.Dst.IsGlobalUnicast()) && m.Type == ipv4.ICMPTypeEchoReply && m.Code == 0: // net.inet.icmp.bmcastecho=1
261
- case rh.Dst.IsMulticast() && m.Type == ipv4.ICMPTypeEcho && m.Code == 0: // net.inet.icmp.bmcastecho=0
262
- default:
263
- t.Fatalf("got type=%v, code=%v; expected type=%v, code=%v", m.Type, m.Code, ipv4.ICMPTypeEchoReply, 0)
264
- }
265
- }
266
- }
267
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv4/multicastsockopt_test.go
deleted
-113
@@ -1,113 +0,0 @@
1
-// Copyright 2012 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-package ipv4_test
6
-
7
-import (
8
- "net"
9
- "os"
10
- "runtime"
11
- "testing"
12
-
13
- "code.google.com/p/go.net/internal/nettest"
14
- "code.google.com/p/go.net/ipv4"
15
-)
16
-
17
-var packetConnMulticastSocketOptionTests = []struct {
18
- net, proto, addr string
19
- gaddr net.Addr
20
-}{
21
- {"udp4", "", "224.0.0.0:0", &net.UDPAddr{IP: net.IPv4(224, 0, 0, 249)}}, // see RFC 4727
22
- {"ip4", ":icmp", "0.0.0.0", &net.IPAddr{IP: net.IPv4(224, 0, 0, 250)}}, // see RFC 4727
23
-}
24
-
25
-func TestPacketConnMulticastSocketOptions(t *testing.T) {
26
- switch runtime.GOOS {
27
- case "nacl", "plan9", "solaris":
28
- t.Skipf("not supported on %q", runtime.GOOS)
29
- }
30
- ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
31
- if ifi == nil {
32
- t.Skipf("not available on %q", runtime.GOOS)
33
- }
34
-
35
- for _, tt := range packetConnMulticastSocketOptionTests {
36
- if tt.net == "ip4" && os.Getuid() != 0 {
37
- t.Skip("must be root")
38
- }
39
- c, err := net.ListenPacket(tt.net+tt.proto, tt.addr)
40
- if err != nil {
41
- t.Fatalf("net.ListenPacket failed: %v", err)
42
- }
43
- defer c.Close()
44
-
45
- testMulticastSocketOptions(t, ipv4.NewPacketConn(c), ifi, tt.gaddr)
46
- }
47
-}
48
-
49
-func TestRawConnMulticastSocketOptions(t *testing.T) {
50
- switch runtime.GOOS {
51
- case "nacl", "plan9", "solaris":
52
- t.Skipf("not supported on %q", runtime.GOOS)
53
- }
54
- if os.Getuid() != 0 {
55
- t.Skip("must be root")
56
- }
57
- ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
58
- if ifi == nil {
59
- t.Skipf("not available on %q", runtime.GOOS)
60
- }
61
-
62
- c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
63
- if err != nil {
64
- t.Fatalf("net.ListenPacket failed: %v", err)
65
- }
66
- defer c.Close()
67
-
68
- r, err := ipv4.NewRawConn(c)
69
- if err != nil {
70
- t.Fatalf("ipv4.NewRawConn failed: %v", err)
71
- }
72
-
73
- testMulticastSocketOptions(t, r, ifi, &net.IPAddr{IP: net.IPv4(224, 0, 0, 250)}) /// see RFC 4727
74
-}
75
-
76
-type testIPv4MulticastConn interface {
77
- MulticastTTL() (int, error)
78
- SetMulticastTTL(ttl int) error
79
- MulticastLoopback() (bool, error)
80
- SetMulticastLoopback(bool) error
81
- JoinGroup(*net.Interface, net.Addr) error
82
- LeaveGroup(*net.Interface, net.Addr) error
83
-}
84
-
85
-func testMulticastSocketOptions(t *testing.T, c testIPv4MulticastConn, ifi *net.Interface, gaddr net.Addr) {
86
- const ttl = 255
87
- if err := c.SetMulticastTTL(ttl); err != nil {
88
- t.Fatalf("ipv4.PacketConn.SetMulticastTTL failed: %v", err)
89
- }
90
- if v, err := c.MulticastTTL(); err != nil {
91
- t.Fatalf("ipv4.PacketConn.MulticastTTL failed: %v", err)
92
- } else if v != ttl {
93
- t.Fatalf("got unexpected multicast TTL value %v; expected %v", v, ttl)
94
- }
95
-
96
- for _, toggle := range []bool{true, false} {
97
- if err := c.SetMulticastLoopback(toggle); err != nil {
98
- t.Fatalf("ipv4.PacketConn.SetMulticastLoopback failed: %v", err)
99
- }
100
- if v, err := c.MulticastLoopback(); err != nil {
101
- t.Fatalf("ipv4.PacketConn.MulticastLoopback failed: %v", err)
102
- } else if v != toggle {
103
- t.Fatalf("got unexpected multicast loopback %v; expected %v", v, toggle)
104
- }
105
- }
106
-
107
- if err := c.JoinGroup(ifi, gaddr); err != nil {
108
- t.Fatalf("ipv4.PacketConn.JoinGroup(%v, %v) failed: %v", ifi, gaddr, err)
109
- }
110
- if err := c.LeaveGroup(ifi, gaddr); err != nil {
111
- t.Fatalf("ipv4.PacketConn.LeaveGroup(%v, %v) failed: %v", ifi, gaddr, err)
112
- }
113
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv4/sockopt_stub.go
deleted
-29
@@ -1,29 +0,0 @@
1
-// Copyright 2012 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-// +build nacl plan9 solaris
6
-
7
-package ipv4
8
-
9
-import "net"
10
-
11
-func getInt(fd int, opt *sockOpt) (int, error) {
12
- return 0, errOpNoSupport
13
-}
14
-
15
-func setInt(fd int, opt *sockOpt, v int) error {
16
- return errOpNoSupport
17
-}
18
-
19
-func getInterface(fd int, opt *sockOpt) (*net.Interface, error) {
20
- return nil, errOpNoSupport
21
-}
22
-
23
-func setInterface(fd int, opt *sockOpt, ifi *net.Interface) error {
24
- return errOpNoSupport
25
-}
26
-
27
-func setGroup(fd int, opt *sockOpt, ifi *net.Interface, ip net.IP) error {
28
- return errOpNoSupport
29
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv4/sys_linux.go
deleted
-31
@@ -1,31 +0,0 @@
1
-// Copyright 2014 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-package ipv4
6
-
7
-type sysSockoptLen int32
8
-
9
-var (
10
- ctlOpts = [ctlMax]ctlOpt{
11
- ctlTTL: {sysIP_TTL, 1, marshalTTL, parseTTL},
12
- ctlPacketInfo: {sysIP_PKTINFO, sysSizeofInetPktinfo, marshalPacketInfo, parsePacketInfo},
13
- }
14
-
15
- sockOpts = [ssoMax]sockOpt{
16
- ssoTOS: {sysIP_TOS, ssoTypeInt},
17
- ssoTTL: {sysIP_TTL, ssoTypeInt},
18
- ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeInt},
19
- ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeIPMreqn},
20
- ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeInt},
21
- ssoReceiveTTL: {sysIP_RECVTTL, ssoTypeInt},
22
- ssoPacketInfo: {sysIP_PKTINFO, ssoTypeInt},
23
- ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt},
24
- ssoJoinGroup: {sysIP_ADD_MEMBERSHIP, ssoTypeIPMreqn},
25
- ssoLeaveGroup: {sysIP_DROP_MEMBERSHIP, ssoTypeIPMreqn},
26
- }
27
-)
28
-
29
-func (pi *sysInetPktinfo) setIfindex(i int) {
30
- pi.Ifindex = int32(i)
31
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv4/unicast_test.go
deleted
-300
@@ -1,300 +0,0 @@
1
-// Copyright 2012 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-package ipv4_test
6
-
7
-import (
8
- "net"
9
- "os"
10
- "runtime"
11
- "testing"
12
- "time"
13
-
14
- "code.google.com/p/go.net/internal/icmp"
15
- "code.google.com/p/go.net/internal/nettest"
16
- "code.google.com/p/go.net/ipv4"
17
- "github.com/ipfs/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/internal/iana"
18
-)
19
-
20
-func benchmarkUDPListener() (net.PacketConn, net.Addr, error) {
21
- c, err := net.ListenPacket("udp4", "127.0.0.1:0")
22
- if err != nil {
23
- return nil, nil, err
24
- }
25
- dst, err := net.ResolveUDPAddr("udp4", c.LocalAddr().String())
26
- if err != nil {
27
- c.Close()
28
- return nil, nil, err
29
- }
30
- return c, dst, nil
31
-}
32
-
33
-func BenchmarkReadWriteNetUDP(b *testing.B) {
34
- c, dst, err := benchmarkUDPListener()
35
- if err != nil {
36
- b.Fatalf("benchmarkUDPListener failed: %v", err)
37
- }
38
- defer c.Close()
39
-
40
- wb, rb := []byte("HELLO-R-U-THERE"), make([]byte, 128)
41
- b.ResetTimer()
42
- for i := 0; i < b.N; i++ {
43
- benchmarkReadWriteNetUDP(b, c, wb, rb, dst)
44
- }
45
-}
46
-
47
-func benchmarkReadWriteNetUDP(b *testing.B, c net.PacketConn, wb, rb []byte, dst net.Addr) {
48
- if _, err := c.WriteTo(wb, dst); err != nil {
49
- b.Fatalf("net.PacketConn.WriteTo failed: %v", err)
50
- }
51
- if _, _, err := c.ReadFrom(rb); err != nil {
52
- b.Fatalf("net.PacketConn.ReadFrom failed: %v", err)
53
- }
54
-}
55
-
56
-func BenchmarkReadWriteIPv4UDP(b *testing.B) {
57
- c, dst, err := benchmarkUDPListener()
58
- if err != nil {
59
- b.Fatalf("benchmarkUDPListener failed: %v", err)
60
- }
61
- defer c.Close()
62
-
63
- p := ipv4.NewPacketConn(c)
64
- defer p.Close()
65
- cf := ipv4.FlagTTL | ipv4.FlagInterface
66
- if err := p.SetControlMessage(cf, true); err != nil {
67
- b.Fatalf("ipv4.PacketConn.SetControlMessage failed: %v", err)
68
- }
69
- ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
70
-
71
- wb, rb := []byte("HELLO-R-U-THERE"), make([]byte, 128)
72
- b.ResetTimer()
73
- for i := 0; i < b.N; i++ {
74
- benchmarkReadWriteIPv4UDP(b, p, wb, rb, dst, ifi)
75
- }
76
-}
77
-
78
-func benchmarkReadWriteIPv4UDP(b *testing.B, p *ipv4.PacketConn, wb, rb []byte, dst net.Addr, ifi *net.Interface) {
79
- cm := ipv4.ControlMessage{TTL: 1}
80
- if ifi != nil {
81
- cm.IfIndex = ifi.Index
82
- }
83
- if _, err := p.WriteTo(wb, &cm, dst); err != nil {
84
- b.Fatalf("ipv4.PacketConn.WriteTo failed: %v", err)
85
- }
86
- if _, _, _, err := p.ReadFrom(rb); err != nil {
87
- b.Fatalf("ipv4.PacketConn.ReadFrom failed: %v", err)
88
- }
89
-}
90
-
91
-func TestPacketConnReadWriteUnicastUDP(t *testing.T) {
92
- switch runtime.GOOS {
93
- case "nacl", "plan9", "solaris", "windows":
94
- t.Skipf("not supported on %q", runtime.GOOS)
95
- }
96
- ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
97
- if ifi == nil {
98
- t.Skipf("not available on %q", runtime.GOOS)
99
- }
100
-
101
- c, err := net.ListenPacket("udp4", "127.0.0.1:0")
102
- if err != nil {
103
- t.Fatalf("net.ListenPacket failed: %v", err)
104
- }
105
- defer c.Close()
106
-
107
- dst, err := net.ResolveUDPAddr("udp4", c.LocalAddr().String())
108
- if err != nil {
109
- t.Fatalf("net.ResolveUDPAddr failed: %v", err)
110
- }
111
- p := ipv4.NewPacketConn(c)
112
- defer p.Close()
113
- cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
114
-
115
- for i, toggle := range []bool{true, false, true} {
116
- if err := p.SetControlMessage(cf, toggle); err != nil {
117
- if protocolNotSupported(err) {
118
- t.Skipf("not supported on %q", runtime.GOOS)
119
- }
120
- t.Fatalf("ipv4.PacketConn.SetControlMessage failed: %v", err)
121
- }
122
- p.SetTTL(i + 1)
123
- if err := p.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
124
- t.Fatalf("ipv4.PacketConn.SetWriteDeadline failed: %v", err)
125
- }
126
- if _, err := p.WriteTo([]byte("HELLO-R-U-THERE"), nil, dst); err != nil {
127
- t.Fatalf("ipv4.PacketConn.WriteTo failed: %v", err)
128
- }
129
- rb := make([]byte, 128)
130
- if err := p.SetReadDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
131
- t.Fatalf("ipv4.PacketConn.SetReadDeadline failed: %v", err)
132
- }
133
- if _, cm, _, err := p.ReadFrom(rb); err != nil {
134
- t.Fatalf("ipv4.PacketConn.ReadFrom failed: %v", err)
135
- } else {
136
- t.Logf("rcvd cmsg: %v", cm)
137
- }
138
- }
139
-}
140
-
141
-func TestPacketConnReadWriteUnicastICMP(t *testing.T) {
142
- switch runtime.GOOS {
143
- case "nacl", "plan9", "solaris", "windows":
144
- t.Skipf("not supported on %q", runtime.GOOS)
145
- }
146
- if os.Getuid() != 0 {
147
- t.Skip("must be root")
148
- }
149
- ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
150
- if ifi == nil {
151
- t.Skipf("not available on %q", runtime.GOOS)
152
- }
153
-
154
- c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
155
- if err != nil {
156
- t.Fatalf("net.ListenPacket failed: %v", err)
157
- }
158
- defer c.Close()
159
-
160
- dst, err := net.ResolveIPAddr("ip4", "127.0.0.1")
161
- if err != nil {
162
- t.Fatalf("ResolveIPAddr failed: %v", err)
163
- }
164
- p := ipv4.NewPacketConn(c)
165
- defer p.Close()
166
- cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
167
-
168
- for i, toggle := range []bool{true, false, true} {
169
- wb, err := (&icmp.Message{
170
- Type: ipv4.ICMPTypeEcho, Code: 0,
171
- Body: &icmp.Echo{
172
- ID: os.Getpid() & 0xffff, Seq: i + 1,
173
- Data: []byte("HELLO-R-U-THERE"),
174
- },
175
- }).Marshal(nil)
176
- if err != nil {
177
- t.Fatalf("icmp.Message.Marshal failed: %v", err)
178
- }
179
- if err := p.SetControlMessage(cf, toggle); err != nil {
180
- if protocolNotSupported(err) {
181
- t.Skipf("not supported on %q", runtime.GOOS)
182
- }
183
- t.Fatalf("ipv4.PacketConn.SetControlMessage failed: %v", err)
184
- }
185
- p.SetTTL(i + 1)
186
- if err := p.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
187
- t.Fatalf("ipv4.PacketConn.SetWriteDeadline failed: %v", err)
188
- }
189
- if _, err := p.WriteTo(wb, nil, dst); err != nil {
190
- t.Fatalf("ipv4.PacketConn.WriteTo failed: %v", err)
191
- }
192
- b := make([]byte, 128)
193
- loop:
194
- if err := p.SetReadDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
195
- t.Fatalf("ipv4.PacketConn.SetReadDeadline failed: %v", err)
196
- }
197
- if n, cm, _, err := p.ReadFrom(b); err != nil {
198
- t.Fatalf("ipv4.PacketConn.ReadFrom failed: %v", err)
199
- } else {
200
- t.Logf("rcvd cmsg: %v", cm)
201
- m, err := icmp.ParseMessage(iana.ProtocolICMP, b[:n])
202
- if err != nil {
203
- t.Fatalf("icmp.ParseMessage failed: %v", err)
204
- }
205
- if runtime.GOOS == "linux" && m.Type == ipv4.ICMPTypeEcho {
206
- // On Linux we must handle own sent packets.
207
- goto loop
208
- }
209
- if m.Type != ipv4.ICMPTypeEchoReply || m.Code != 0 {
210
- t.Fatalf("got type=%v, code=%v; expected type=%v, code=%v", m.Type, m.Code, ipv4.ICMPTypeEchoReply, 0)
211
- }
212
- }
213
- }
214
-}
215
-
216
-func TestRawConnReadWriteUnicastICMP(t *testing.T) {
217
- switch runtime.GOOS {
218
- case "nacl", "plan9", "solaris", "windows":
219
- t.Skipf("not supported on %q", runtime.GOOS)
220
- }
221
- if os.Getuid() != 0 {
222
- t.Skip("must be root")
223
- }
224
- ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
225
- if ifi == nil {
226
- t.Skipf("not available on %q", runtime.GOOS)
227
- }
228
-
229
- c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
230
- if err != nil {
231
- t.Fatalf("net.ListenPacket failed: %v", err)
232
- }
233
- defer c.Close()
234
-
235
- dst, err := net.ResolveIPAddr("ip4", "127.0.0.1")
236
- if err != nil {
237
- t.Fatalf("ResolveIPAddr failed: %v", err)
238
- }
239
- r, err := ipv4.NewRawConn(c)
240
- if err != nil {
241
- t.Fatalf("ipv4.NewRawConn failed: %v", err)
242
- }
243
- defer r.Close()
244
- cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
245
-
246
- for i, toggle := range []bool{true, false, true} {
247
- wb, err := (&icmp.Message{
248
- Type: ipv4.ICMPTypeEcho, Code: 0,
249
- Body: &icmp.Echo{
250
- ID: os.Getpid() & 0xffff, Seq: i + 1,
251
- Data: []byte("HELLO-R-U-THERE"),
252
- },
253
- }).Marshal(nil)
254
- if err != nil {
255
- t.Fatalf("icmp.Message.Marshal failed: %v", err)
256
- }
257
- wh := &ipv4.Header{
258
- Version: ipv4.Version,
259
- Len: ipv4.HeaderLen,
260
- TOS: i + 1,
261
- TotalLen: ipv4.HeaderLen + len(wb),
262
- TTL: i + 1,
263
- Protocol: 1,
264
- Dst: dst.IP,
265
- }
266
- if err := r.SetControlMessage(cf, toggle); err != nil {
267
- if protocolNotSupported(err) {
268
- t.Skipf("not supported on %q", runtime.GOOS)
269
- }
270
- t.Fatalf("ipv4.RawConn.SetControlMessage failed: %v", err)
271
- }
272
- if err := r.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
273
- t.Fatalf("ipv4.RawConn.SetWriteDeadline failed: %v", err)
274
- }
275
- if err := r.WriteTo(wh, wb, nil); err != nil {
276
- t.Fatalf("ipv4.RawConn.WriteTo failed: %v", err)
277
- }
278
- rb := make([]byte, ipv4.HeaderLen+128)
279
- loop:
280
- if err := r.SetReadDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
281
- t.Fatalf("ipv4.RawConn.SetReadDeadline failed: %v", err)
282
- }
283
- if _, b, cm, err := r.ReadFrom(rb); err != nil {
284
- t.Fatalf("ipv4.RawConn.ReadFrom failed: %v", err)
285
- } else {
286
- t.Logf("rcvd cmsg: %v", cm)
287
- m, err := icmp.ParseMessage(iana.ProtocolICMP, b)
288
- if err != nil {
289
- t.Fatalf("icmp.ParseMessage failed: %v", err)
290
- }
291
- if runtime.GOOS == "linux" && m.Type == ipv4.ICMPTypeEcho {
292
- // On Linux we must handle own sent packets.
293
- goto loop
294
- }
295
- if m.Type != ipv4.ICMPTypeEchoReply || m.Code != 0 {
296
- t.Fatalf("got type=%v, code=%v; expected type=%v, code=%v", m.Type, m.Code, ipv4.ICMPTypeEchoReply, 0)
297
- }
298
- }
299
- }
300
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/control_rfc2292_unix.go
deleted
-151
@@ -1,151 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-// +build darwin
6
-
7
-package ipv6
8
-
9
-import (
10
- "net"
11
- "os"
12
- "syscall"
13
- "unsafe"
14
-)
15
-
16
-const pktinfo = FlagDst | FlagInterface
17
-
18
-func setControlMessage(fd int, opt *rawOpt, cf ControlFlags, on bool) error {
19
- opt.Lock()
20
- defer opt.Unlock()
21
- if cf&FlagHopLimit != 0 {
22
- if err := setIPv6ReceiveHopLimit(fd, on); err != nil {
23
- return err
24
- }
25
- if on {
26
- opt.set(FlagHopLimit)
27
- } else {
28
- opt.clear(FlagHopLimit)
29
- }
30
- }
31
- if cf&pktinfo != 0 {
32
- if err := setIPv6ReceivePacketInfo(fd, on); err != nil {
33
- return err
34
- }
35
- if on {
36
- opt.set(cf & pktinfo)
37
- } else {
38
- opt.clear(cf & pktinfo)
39
- }
40
- }
41
- return nil
42
-}
43
-
44
-func newControlMessage(opt *rawOpt) (oob []byte) {
45
- opt.Lock()
46
- defer opt.Unlock()
47
- l, off := 0, 0
48
- if opt.isset(FlagHopLimit) {
49
- l += syscall.CmsgSpace(4)
50
- }
51
- if opt.isset(pktinfo) {
52
- l += syscall.CmsgSpace(sysSizeofPacketInfo)
53
- }
54
- if l > 0 {
55
- oob = make([]byte, l)
56
- if opt.isset(FlagHopLimit) {
57
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
58
- m.Level = ianaProtocolIPv6
59
- m.Type = sysSockopt2292HopLimit
60
- m.SetLen(syscall.CmsgLen(4))
61
- off += syscall.CmsgSpace(4)
62
- }
63
- if opt.isset(pktinfo) {
64
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
65
- m.Level = ianaProtocolIPv6
66
- m.Type = sysSockopt2292PacketInfo
67
- m.SetLen(syscall.CmsgLen(sysSizeofPacketInfo))
68
- off += syscall.CmsgSpace(sysSizeofPacketInfo)
69
- }
70
- }
71
- return
72
-}
73
-
74
-func parseControlMessage(b []byte) (*ControlMessage, error) {
75
- if len(b) == 0 {
76
- return nil, nil
77
- }
78
- cmsgs, err := syscall.ParseSocketControlMessage(b)
79
- if err != nil {
80
- return nil, os.NewSyscallError("parse socket control message", err)
81
- }
82
- cm := &ControlMessage{}
83
- for _, m := range cmsgs {
84
- if m.Header.Level != ianaProtocolIPv6 {
85
- continue
86
- }
87
- switch m.Header.Type {
88
- case sysSockopt2292HopLimit:
89
- cm.HopLimit = int(*(*byte)(unsafe.Pointer(&m.Data[:1][0])))
90
- case sysSockopt2292PacketInfo:
91
- pi := (*sysPacketInfo)(unsafe.Pointer(&m.Data[0]))
92
- cm.IfIndex = int(pi.IfIndex)
93
- cm.Dst = pi.IP[:]
94
- }
95
- }
96
- return cm, nil
97
-}
98
-
99
-func marshalControlMessage(cm *ControlMessage) (oob []byte) {
100
- if cm == nil {
101
- return
102
- }
103
- l, off := 0, 0
104
- if cm.HopLimit > 0 {
105
- l += syscall.CmsgSpace(4)
106
- }
107
- pion := false
108
- if cm.Src.To4() == nil && cm.Src.To16() != nil || cm.IfIndex != 0 {
109
- pion = true
110
- l += syscall.CmsgSpace(sysSizeofPacketInfo)
111
- }
112
- if len(cm.NextHop) == net.IPv6len {
113
- l += syscall.CmsgSpace(syscall.SizeofSockaddrInet6)
114
- }
115
- if l > 0 {
116
- oob = make([]byte, l)
117
- if cm.HopLimit > 0 {
118
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
119
- m.Level = ianaProtocolIPv6
120
- m.Type = sysSockopt2292HopLimit
121
- m.SetLen(syscall.CmsgLen(4))
122
- data := oob[off+syscall.CmsgLen(0):]
123
- *(*byte)(unsafe.Pointer(&data[:1][0])) = byte(cm.HopLimit)
124
- off += syscall.CmsgSpace(4)
125
- }
126
- if pion {
127
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
128
- m.Level = ianaProtocolIPv6
129
- m.Type = sysSockopt2292PacketInfo
130
- m.SetLen(syscall.CmsgLen(sysSizeofPacketInfo))
131
- pi := (*sysPacketInfo)(unsafe.Pointer(&oob[off+syscall.CmsgLen(0)]))
132
- if ip := cm.Src.To16(); ip != nil && ip.To4() == nil {
133
- copy(pi.IP[:], ip)
134
- }
135
- if cm.IfIndex != 0 {
136
- pi.IfIndex = uint32(cm.IfIndex)
137
- }
138
- off += syscall.CmsgSpace(sysSizeofPacketInfo)
139
- }
140
- if len(cm.NextHop) == net.IPv6len {
141
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
142
- m.Level = ianaProtocolIPv6
143
- m.Type = sysSockopt2292NextHop
144
- m.SetLen(syscall.CmsgLen(syscall.SizeofSockaddrInet6))
145
- sa := (*syscall.RawSockaddrInet6)(unsafe.Pointer(&oob[off+syscall.CmsgLen(0)]))
146
- setSockaddr(sa, cm.NextHop, cm.IfIndex)
147
- off += syscall.CmsgSpace(syscall.SizeofSockaddrInet6)
148
- }
149
- }
150
- return
151
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/control_rfc3542_unix.go
deleted
-210
@@ -1,210 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-// +build dragonfly freebsd linux netbsd openbsd
6
-
7
-package ipv6
8
-
9
-import (
10
- "net"
11
- "os"
12
- "syscall"
13
- "unsafe"
14
-)
15
-
16
-const pktinfo = FlagDst | FlagInterface
17
-
18
-func setControlMessage(fd int, opt *rawOpt, cf ControlFlags, on bool) error {
19
- opt.Lock()
20
- defer opt.Unlock()
21
- if cf&FlagTrafficClass != 0 {
22
- if err := setIPv6ReceiveTrafficClass(fd, on); err != nil {
23
- return err
24
- }
25
- if on {
26
- opt.set(FlagTrafficClass)
27
- } else {
28
- opt.clear(FlagTrafficClass)
29
- }
30
- }
31
- if cf&FlagHopLimit != 0 {
32
- if err := setIPv6ReceiveHopLimit(fd, on); err != nil {
33
- return err
34
- }
35
- if on {
36
- opt.set(FlagHopLimit)
37
- } else {
38
- opt.clear(FlagHopLimit)
39
- }
40
- }
41
- if cf&pktinfo != 0 {
42
- if err := setIPv6ReceivePacketInfo(fd, on); err != nil {
43
- return err
44
- }
45
- if on {
46
- opt.set(cf & pktinfo)
47
- } else {
48
- opt.clear(cf & pktinfo)
49
- }
50
- }
51
- if cf&FlagPathMTU != 0 {
52
- if err := setIPv6ReceivePathMTU(fd, on); err != nil {
53
- return err
54
- }
55
- if on {
56
- opt.set(FlagPathMTU)
57
- } else {
58
- opt.clear(FlagPathMTU)
59
- }
60
- }
61
- return nil
62
-}
63
-
64
-func newControlMessage(opt *rawOpt) (oob []byte) {
65
- opt.Lock()
66
- defer opt.Unlock()
67
- l, off := 0, 0
68
- if opt.isset(FlagTrafficClass) {
69
- l += syscall.CmsgSpace(4)
70
- }
71
- if opt.isset(FlagHopLimit) {
72
- l += syscall.CmsgSpace(4)
73
- }
74
- if opt.isset(pktinfo) {
75
- l += syscall.CmsgSpace(sysSizeofPacketInfo)
76
- }
77
- if opt.isset(FlagPathMTU) {
78
- l += syscall.CmsgSpace(sysSizeofMTUInfo)
79
- }
80
- if l > 0 {
81
- oob = make([]byte, l)
82
- if opt.isset(FlagTrafficClass) {
83
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
84
- m.Level = ianaProtocolIPv6
85
- m.Type = sysSockoptReceiveTrafficClass
86
- m.SetLen(syscall.CmsgLen(4))
87
- off += syscall.CmsgSpace(4)
88
- }
89
- if opt.isset(FlagHopLimit) {
90
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
91
- m.Level = ianaProtocolIPv6
92
- m.Type = sysSockoptReceiveHopLimit
93
- m.SetLen(syscall.CmsgLen(4))
94
- off += syscall.CmsgSpace(4)
95
- }
96
- if opt.isset(pktinfo) {
97
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
98
- m.Level = ianaProtocolIPv6
99
- m.Type = sysSockoptReceivePacketInfo
100
- m.SetLen(syscall.CmsgLen(sysSizeofPacketInfo))
101
- off += syscall.CmsgSpace(sysSizeofPacketInfo)
102
- }
103
- if opt.isset(FlagPathMTU) {
104
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
105
- m.Level = ianaProtocolIPv6
106
- m.Type = sysSockoptReceivePathMTU
107
- m.SetLen(syscall.CmsgLen(sysSizeofMTUInfo))
108
- off += syscall.CmsgSpace(sysSizeofMTUInfo)
109
- }
110
- }
111
- return
112
-}
113
-
114
-func parseControlMessage(b []byte) (*ControlMessage, error) {
115
- if len(b) == 0 {
116
- return nil, nil
117
- }
118
- cmsgs, err := syscall.ParseSocketControlMessage(b)
119
- if err != nil {
120
- return nil, os.NewSyscallError("parse socket control message", err)
121
- }
122
- cm := &ControlMessage{}
123
- for _, m := range cmsgs {
124
- if m.Header.Level != ianaProtocolIPv6 {
125
- continue
126
- }
127
- switch m.Header.Type {
128
- case sysSockoptTrafficClass:
129
- cm.TrafficClass = int(*(*byte)(unsafe.Pointer(&m.Data[:1][0])))
130
- case sysSockoptHopLimit:
131
- cm.HopLimit = int(*(*byte)(unsafe.Pointer(&m.Data[:1][0])))
132
- case sysSockoptPacketInfo:
133
- pi := (*sysPacketInfo)(unsafe.Pointer(&m.Data[0]))
134
- cm.Dst = pi.IP[:]
135
- cm.IfIndex = int(pi.IfIndex)
136
- case sysSockoptPathMTU:
137
- mi := (*sysMTUInfo)(unsafe.Pointer(&m.Data[0]))
138
- cm.Dst = mi.Addr.Addr[:]
139
- cm.IfIndex = int(mi.Addr.Scope_id)
140
- cm.MTU = int(mi.MTU)
141
- }
142
- }
143
- return cm, nil
144
-}
145
-
146
-func marshalControlMessage(cm *ControlMessage) (oob []byte) {
147
- if cm == nil {
148
- return
149
- }
150
- l, off := 0, 0
151
- if cm.TrafficClass > 0 {
152
- l += syscall.CmsgSpace(4)
153
- }
154
- if cm.HopLimit > 0 {
155
- l += syscall.CmsgSpace(4)
156
- }
157
- pion := false
158
- if cm.Src.To4() == nil && cm.Src.To16() != nil || cm.IfIndex != 0 {
159
- pion = true
160
- l += syscall.CmsgSpace(sysSizeofPacketInfo)
161
- }
162
- if len(cm.NextHop) == net.IPv6len {
163
- l += syscall.CmsgSpace(syscall.SizeofSockaddrInet6)
164
- }
165
- if l > 0 {
166
- oob = make([]byte, l)
167
- if cm.TrafficClass > 0 {
168
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
169
- m.Level = ianaProtocolIPv6
170
- m.Type = sysSockoptTrafficClass
171
- m.SetLen(syscall.CmsgLen(4))
172
- data := oob[off+syscall.CmsgLen(0):]
173
- *(*byte)(unsafe.Pointer(&data[:1][0])) = byte(cm.TrafficClass)
174
- off += syscall.CmsgSpace(4)
175
- }
176
- if cm.HopLimit > 0 {
177
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
178
- m.Level = ianaProtocolIPv6
179
- m.Type = sysSockoptHopLimit
180
- m.SetLen(syscall.CmsgLen(4))
181
- data := oob[off+syscall.CmsgLen(0):]
182
- *(*byte)(unsafe.Pointer(&data[:1][0])) = byte(cm.HopLimit)
183
- off += syscall.CmsgSpace(4)
184
- }
185
- if pion {
186
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
187
- m.Level = ianaProtocolIPv6
188
- m.Type = sysSockoptPacketInfo
189
- m.SetLen(syscall.CmsgLen(sysSizeofPacketInfo))
190
- pi := (*sysPacketInfo)(unsafe.Pointer(&oob[off+syscall.CmsgLen(0)]))
191
- if ip := cm.Src.To16(); ip != nil && ip.To4() == nil {
192
- copy(pi.IP[:], ip)
193
- }
194
- if cm.IfIndex != 0 {
195
- pi.IfIndex = uint32(cm.IfIndex)
196
- }
197
- off += syscall.CmsgSpace(sysSizeofPacketInfo)
198
- }
199
- if len(cm.NextHop) == net.IPv6len {
200
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
201
- m.Level = ianaProtocolIPv6
202
- m.Type = sysSockoptNextHop
203
- m.SetLen(syscall.CmsgLen(syscall.SizeofSockaddrInet6))
204
- sa := (*syscall.RawSockaddrInet6)(unsafe.Pointer(&oob[off+syscall.CmsgLen(0)]))
205
- setSockaddr(sa, cm.NextHop, cm.IfIndex)
206
- off += syscall.CmsgSpace(syscall.SizeofSockaddrInet6)
207
- }
208
- }
209
- return
210
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/dgramopt_posix.go
deleted
-178
@@ -1,178 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-// +build darwin dragonfly freebsd linux netbsd openbsd windows
6
-
7
-package ipv6
8
-
9
-import (
10
- "net"
11
- "syscall"
12
-)
13
-
14
-// MulticastHopLimit returns the hop limit field value for outgoing
15
-// multicast packets.
16
-func (c *dgramOpt) MulticastHopLimit() (int, error) {
17
- if !c.ok() {
18
- return 0, syscall.EINVAL
19
- }
20
- fd, err := c.sysfd()
21
- if err != nil {
22
- return 0, err
23
- }
24
- return ipv6MulticastHopLimit(fd)
25
-}
26
-
27
-// SetMulticastHopLimit sets the hop limit field value for future
28
-// outgoing multicast packets.
29
-func (c *dgramOpt) SetMulticastHopLimit(hoplim int) error {
30
- if !c.ok() {
31
- return syscall.EINVAL
32
- }
33
- fd, err := c.sysfd()
34
- if err != nil {
35
- return err
36
- }
37
- return setIPv6MulticastHopLimit(fd, hoplim)
38
-}
39
-
40
-// MulticastInterface returns the default interface for multicast
41
-// packet transmissions.
42
-func (c *dgramOpt) MulticastInterface() (*net.Interface, error) {
43
- if !c.ok() {
44
- return nil, syscall.EINVAL
45
- }
46
- fd, err := c.sysfd()
47
- if err != nil {
48
- return nil, err
49
- }
50
- return ipv6MulticastInterface(fd)
51
-}
52
-
53
-// SetMulticastInterface sets the default interface for future
54
-// multicast packet transmissions.
55
-func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error {
56
- if !c.ok() {
57
- return syscall.EINVAL
58
- }
59
- fd, err := c.sysfd()
60
- if err != nil {
61
- return err
62
- }
63
- return setIPv6MulticastInterface(fd, ifi)
64
-}
65
-
66
-// MulticastLoopback reports whether transmitted multicast packets
67
-// should be copied and send back to the originator.
68
-func (c *dgramOpt) MulticastLoopback() (bool, error) {
69
- if !c.ok() {
70
- return false, syscall.EINVAL
71
- }
72
- fd, err := c.sysfd()
73
- if err != nil {
74
- return false, err
75
- }
76
- return ipv6MulticastLoopback(fd)
77
-}
78
-
79
-// SetMulticastLoopback sets whether transmitted multicast packets
80
-// should be copied and send back to the originator.
81
-func (c *dgramOpt) SetMulticastLoopback(on bool) error {
82
- if !c.ok() {
83
- return syscall.EINVAL
84
- }
85
- fd, err := c.sysfd()
86
- if err != nil {
87
- return err
88
- }
89
- return setIPv6MulticastLoopback(fd, on)
90
-}
91
-
92
-// JoinGroup joins the group address group on the interface ifi.
93
-// It uses the system assigned multicast interface when ifi is nil,
94
-// although this is not recommended because the assignment depends on
95
-// platforms and sometimes it might require routing configuration.
96
-func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error {
97
- if !c.ok() {
98
- return syscall.EINVAL
99
- }
100
- fd, err := c.sysfd()
101
- if err != nil {
102
- return err
103
- }
104
- grp := netAddrToIP16(group)
105
- if grp == nil {
106
- return errMissingAddress
107
- }
108
- return joinIPv6Group(fd, ifi, grp)
109
-}
110
-
111
-// LeaveGroup leaves the group address group on the interface ifi.
112
-func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error {
113
- if !c.ok() {
114
- return syscall.EINVAL
115
- }
116
- fd, err := c.sysfd()
117
- if err != nil {
118
- return err
119
- }
120
- grp := netAddrToIP16(group)
121
- if grp == nil {
122
- return errMissingAddress
123
- }
124
- return leaveIPv6Group(fd, ifi, grp)
125
-}
126
-
127
-// Checksum reports whether the kernel will compute, store or verify a
128
-// checksum for both incoming and outgoing packets. If on is true, it
129
-// returns an offset in bytes into the data of where the checksum
130
-// field is located.
131
-func (c *dgramOpt) Checksum() (on bool, offset int, err error) {
132
- if !c.ok() {
133
- return false, 0, syscall.EINVAL
134
- }
135
- fd, err := c.sysfd()
136
- if err != nil {
137
- return false, 0, err
138
- }
139
- return ipv6Checksum(fd)
140
-}
141
-
142
-// SetChecksum enables the kernel checksum processing. If on is ture,
143
-// the offset should be an offset in bytes into the data of where the
144
-// checksum field is located.
145
-func (c *dgramOpt) SetChecksum(on bool, offset int) error {
146
- if !c.ok() {
147
- return syscall.EINVAL
148
- }
149
- fd, err := c.sysfd()
150
- if err != nil {
151
- return err
152
- }
153
- return setIPv6Checksum(fd, on, offset)
154
-}
155
-
156
-// ICMPFilter returns an ICMP filter.
157
-func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) {
158
- if !c.ok() {
159
- return nil, syscall.EINVAL
160
- }
161
- fd, err := c.sysfd()
162
- if err != nil {
163
- return nil, err
164
- }
165
- return ipv6ICMPFilter(fd)
166
-}
167
-
168
-// SetICMPFilter deploys the ICMP filter.
169
-func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error {
170
- if !c.ok() {
171
- return syscall.EINVAL
172
- }
173
- fd, err := c.sysfd()
174
- if err != nil {
175
- return err
176
- }
177
- return setIPv6ICMPFilter(fd, f)
178
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/gentest.go
deleted
-195
@@ -1,195 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-// +build ignore
6
-
7
-// This program generates internet protocol constants by reading IANA
8
-// protocol registries.
9
-//
10
-// Usage:
11
-// go run gentest.go > iana_test.go
12
-package main
13
-
14
-import (
15
- "bytes"
16
- "encoding/xml"
17
- "fmt"
18
- "go/format"
19
- "io"
20
- "net/http"
21
- "os"
22
- "strconv"
23
- "strings"
24
-)
25
-
26
-var registries = []struct {
27
- url string
28
- parse func(io.Writer, io.Reader) error
29
-}{
30
- {
31
- "http://www.iana.org/assignments/dscp-registry/dscp-registry.xml",
32
- parseDSCPRegistry,
33
- },
34
- {
35
- "http://www.iana.org/assignments/ipv4-tos-byte/ipv4-tos-byte.xml",
36
- parseTOSTCByte,
37
- },
38
-}
39
-
40
-func main() {
41
- var bb bytes.Buffer
42
- fmt.Fprintf(&bb, "// go run gentest.go\n")
43
- fmt.Fprintf(&bb, "// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n")
44
- fmt.Fprintf(&bb, "package ipv6_test\n\n")
45
- for _, r := range registries {
46
- resp, err := http.Get(r.url)
47
- if err != nil {
48
- fmt.Fprintln(os.Stderr, err)
49
- os.Exit(1)
50
- }
51
- defer resp.Body.Close()
52
- if resp.StatusCode != http.StatusOK {
53
- fmt.Fprintf(os.Stderr, "got HTTP status code %v for %v\n", resp.StatusCode, r.url)
54
- os.Exit(1)
55
- }
56
- if err := r.parse(&bb, resp.Body); err != nil {
57
- fmt.Fprintln(os.Stderr, err)
58
- os.Exit(1)
59
- }
60
- fmt.Fprintf(&bb, "\n")
61
- }
62
- b, err := format.Source(bb.Bytes())
63
- if err != nil {
64
- fmt.Fprintln(os.Stderr, err)
65
- os.Exit(1)
66
- }
67
- os.Stdout.Write(b)
68
-}
69
-
70
-func parseDSCPRegistry(w io.Writer, r io.Reader) error {
71
- dec := xml.NewDecoder(r)
72
- var dr dscpRegistry
73
- if err := dec.Decode(&dr); err != nil {
74
- return err
75
- }
76
- drs := dr.escape()
77
- fmt.Fprintf(w, "// %s, Updated: %s\n", dr.Title, dr.Updated)
78
- fmt.Fprintf(w, "const (\n")
79
- for _, dr := range drs {
80
- fmt.Fprintf(w, "DiffServ%s = %#x", dr.Name, dr.Value)
81
- fmt.Fprintf(w, "// %s\n", dr.OrigName)
82
- }
83
- fmt.Fprintf(w, ")\n")
84
- return nil
85
-}
86
-
87
-type dscpRegistry struct {
88
- XMLName xml.Name `xml:"registry"`
89
- Title string `xml:"title"`
90
- Updated string `xml:"updated"`
91
- Note string `xml:"note"`
92
- RegTitle string `xml:"registry>title"`
93
- PoolRecords []struct {
94
- Name string `xml:"name"`
95
- Space string `xml:"space"`
96
- } `xml:"registry>record"`
97
- Records []struct {
98
- Name string `xml:"name"`
99
- Space string `xml:"space"`
100
- } `xml:"registry>registry>record"`
101
-}
102
-
103
-type canonDSCPRecord struct {
104
- OrigName string
105
- Name string
106
- Value int
107
-}
108
-
109
-func (drr *dscpRegistry) escape() []canonDSCPRecord {
110
- drs := make([]canonDSCPRecord, len(drr.Records))
111
- sr := strings.NewReplacer(
112
- "+", "",
113
- "-", "",
114
- "/", "",
115
- ".", "",
116
- " ", "",
117
- )
118
- for i, dr := range drr.Records {
119
- s := strings.TrimSpace(dr.Name)
120
- drs[i].OrigName = s
121
- drs[i].Name = sr.Replace(s)
122
- n, err := strconv.ParseUint(dr.Space, 2, 8)
123
- if err != nil {
124
- continue
125
- }
126
- drs[i].Value = int(n) << 2
127
- }
128
- return drs
129
-}
130
-
131
-func parseTOSTCByte(w io.Writer, r io.Reader) error {
132
- dec := xml.NewDecoder(r)
133
- var ttb tosTCByte
134
- if err := dec.Decode(&ttb); err != nil {
135
- return err
136
- }
137
- trs := ttb.escape()
138
- fmt.Fprintf(w, "// %s, Updated: %s\n", ttb.Title, ttb.Updated)
139
- fmt.Fprintf(w, "const (\n")
140
- for _, tr := range trs {
141
- fmt.Fprintf(w, "%s = %#x", tr.Keyword, tr.Value)
142
- fmt.Fprintf(w, "// %s\n", tr.OrigKeyword)
143
- }
144
- fmt.Fprintf(w, ")\n")
145
- return nil
146
-}
147
-
148
-type tosTCByte struct {
149
- XMLName xml.Name `xml:"registry"`
150
- Title string `xml:"title"`
151
- Updated string `xml:"updated"`
152
- Note string `xml:"note"`
153
- RegTitle string `xml:"registry>title"`
154
- Records []struct {
155
- Binary string `xml:"binary"`
156
- Keyword string `xml:"keyword"`
157
- } `xml:"registry>record"`
158
-}
159
-
160
-type canonTOSTCByteRecord struct {
161
- OrigKeyword string
162
- Keyword string
163
- Value int
164
-}
165
-
166
-func (ttb *tosTCByte) escape() []canonTOSTCByteRecord {
167
- trs := make([]canonTOSTCByteRecord, len(ttb.Records))
168
- sr := strings.NewReplacer(
169
- "Capable", "",
170
- "(", "",
171
- ")", "",
172
- "+", "",
173
- "-", "",
174
- "/", "",
175
- ".", "",
176
- " ", "",
177
- )
178
- for i, tr := range ttb.Records {
179
- s := strings.TrimSpace(tr.Keyword)
180
- trs[i].OrigKeyword = s
181
- ss := strings.Split(s, " ")
182
- if len(ss) > 1 {
183
- trs[i].Keyword = strings.Join(ss[1:], " ")
184
- } else {
185
- trs[i].Keyword = ss[0]
186
- }
187
- trs[i].Keyword = sr.Replace(trs[i].Keyword)
188
- n, err := strconv.ParseUint(tr.Binary, 2, 8)
189
- if err != nil {
190
- continue
191
- }
192
- trs[i].Value = int(n)
193
- }
194
- return trs
195
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/iana.go
deleted
-224
@@ -1,224 +0,0 @@
1
-// go run gen.go
2
-// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
3
-
4
-package ipv6
5
-
6
-// Internet Control Message Protocol version 6 (ICMPv6) Parameters, Updated: 2013-07-03
7
-const (
8
- ICMPTypeDestinationUnreachable ICMPType = 1 // Destination Unreachable
9
- ICMPTypePacketTooBig ICMPType = 2 // Packet Too Big
10
- ICMPTypeTimeExceeded ICMPType = 3 // Time Exceeded
11
- ICMPTypeParameterProblem ICMPType = 4 // Parameter Problem
12
- ICMPTypeEchoRequest ICMPType = 128 // Echo Request
13
- ICMPTypeEchoReply ICMPType = 129 // Echo Reply
14
- ICMPTypeMulticastListenerQuery ICMPType = 130 // Multicast Listener Query
15
- ICMPTypeMulticastListenerReport ICMPType = 131 // Multicast Listener Report
16
- ICMPTypeMulticastListenerDone ICMPType = 132 // Multicast Listener Done
17
- ICMPTypeRouterSolicitation ICMPType = 133 // Router Solicitation
18
- ICMPTypeRouterAdvertisement ICMPType = 134 // Router Advertisement
19
- ICMPTypeNeighborSolicitation ICMPType = 135 // Neighbor Solicitation
20
- ICMPTypeNeighborAdvertisement ICMPType = 136 // Neighbor Advertisement
21
- ICMPTypeRedirect ICMPType = 137 // Redirect Message
22
- ICMPTypeRouterRenumbering ICMPType = 138 // Router Renumbering
23
- ICMPTypeNodeInformationQuery ICMPType = 139 // ICMP Node Information Query
24
- ICMPTypeNodeInformationResponse ICMPType = 140 // ICMP Node Information Response
25
- ICMPTypeInverseNeighborDiscoverySolicitation ICMPType = 141 // Inverse Neighbor Discovery Solicitation Message
26
- ICMPTypeInverseNeighborDiscoveryAdvertisement ICMPType = 142 // Inverse Neighbor Discovery Advertisement Message
27
- ICMPTypeVersion2MulticastListenerReport ICMPType = 143 // Version 2 Multicast Listener Report
28
- ICMPTypeHomeAgentAddressDiscoveryRequest ICMPType = 144 // Home Agent Address Discovery Request Message
29
- ICMPTypeHomeAgentAddressDiscoveryReply ICMPType = 145 // Home Agent Address Discovery Reply Message
30
- ICMPTypeMobilePrefixSolicitation ICMPType = 146 // Mobile Prefix Solicitation
31
- ICMPTypeMobilePrefixAdvertisement ICMPType = 147 // Mobile Prefix Advertisement
32
- ICMPTypeCertificationPathSolicitation ICMPType = 148 // Certification Path Solicitation Message
33
- ICMPTypeCertificationPathAdvertisement ICMPType = 149 // Certification Path Advertisement Message
34
- ICMPTypeMulticastRouterAdvertisement ICMPType = 151 // Multicast Router Advertisement
35
- ICMPTypeMulticastRouterSolicitation ICMPType = 152 // Multicast Router Solicitation
36
- ICMPTypeMulticastRouterTermination ICMPType = 153 // Multicast Router Termination
37
- ICMPTypeFMIPv6 ICMPType = 154 // FMIPv6 Messages
38
- ICMPTypeRPLControl ICMPType = 155 // RPL Control Message
39
- ICMPTypeILNPv6LocatorUpdate ICMPType = 156 // ILNPv6 Locator Update Message
40
- ICMPTypeDuplicateAddressRequest ICMPType = 157 // Duplicate Address Request
41
- ICMPTypeDuplicateAddressConfirmation ICMPType = 158 // Duplicate Address Confirmation
42
-)
43
-
44
-// Internet Control Message Protocol version 6 (ICMPv6) Parameters, Updated: 2013-07-03
45
-var icmpTypes = map[ICMPType]string{
46
- 1: "destination unreachable",
47
- 2: "packet too big",
48
- 3: "time exceeded",
49
- 4: "parameter problem",
50
- 128: "echo request",
51
- 129: "echo reply",
52
- 130: "multicast listener query",
53
- 131: "multicast listener report",
54
- 132: "multicast listener done",
55
- 133: "router solicitation",
56
- 134: "router advertisement",
57
- 135: "neighbor solicitation",
58
- 136: "neighbor advertisement",
59
- 137: "redirect message",
60
- 138: "router renumbering",
61
- 139: "icmp node information query",
62
- 140: "icmp node information response",
63
- 141: "inverse neighbor discovery solicitation message",
64
- 142: "inverse neighbor discovery advertisement message",
65
- 143: "version 2 multicast listener report",
66
- 144: "home agent address discovery request message",
67
- 145: "home agent address discovery reply message",
68
- 146: "mobile prefix solicitation",
69
- 147: "mobile prefix advertisement",
70
- 148: "certification path solicitation message",
71
- 149: "certification path advertisement message",
72
- 151: "multicast router advertisement",
73
- 152: "multicast router solicitation",
74
- 153: "multicast router termination",
75
- 154: "fmipv6 messages",
76
- 155: "rpl control message",
77
- 156: "ilnpv6 locator update message",
78
- 157: "duplicate address request",
79
- 158: "duplicate address confirmation",
80
-}
81
-
82
-// Protocol Numbers, Updated: 2013-02-17
83
-const (
84
- ianaProtocolHOPOPT = 0 // IPv6 Hop-by-Hop Option
85
- ianaProtocolICMP = 1 // Internet Control Message
86
- ianaProtocolIGMP = 2 // Internet Group Management
87
- ianaProtocolGGP = 3 // Gateway-to-Gateway
88
- ianaProtocolIPv4 = 4 // IPv4 encapsulation
89
- ianaProtocolST = 5 // Stream
90
- ianaProtocolTCP = 6 // Transmission Control
91
- ianaProtocolCBT = 7 // CBT
92
- ianaProtocolEGP = 8 // Exterior Gateway Protocol
93
- ianaProtocolIGP = 9 // any private interior gateway (used by Cisco for their IGRP)
94
- ianaProtocolBBNRCCMON = 10 // BBN RCC Monitoring
95
- ianaProtocolNVPII = 11 // Network Voice Protocol
96
- ianaProtocolPUP = 12 // PUP
97
- ianaProtocolARGUS = 13 // ARGUS
98
- ianaProtocolEMCON = 14 // EMCON
99
- ianaProtocolXNET = 15 // Cross Net Debugger
100
- ianaProtocolCHAOS = 16 // Chaos
101
- ianaProtocolUDP = 17 // User Datagram
102
- ianaProtocolMUX = 18 // Multiplexing
103
- ianaProtocolDCNMEAS = 19 // DCN Measurement Subsystems
104
- ianaProtocolHMP = 20 // Host Monitoring
105
- ianaProtocolPRM = 21 // Packet Radio Measurement
106
- ianaProtocolXNSIDP = 22 // XEROX NS IDP
107
- ianaProtocolTRUNK1 = 23 // Trunk-1
108
- ianaProtocolTRUNK2 = 24 // Trunk-2
109
- ianaProtocolLEAF1 = 25 // Leaf-1
110
- ianaProtocolLEAF2 = 26 // Leaf-2
111
- ianaProtocolRDP = 27 // Reliable Data Protocol
112
- ianaProtocolIRTP = 28 // Internet Reliable Transaction
113
- ianaProtocolISOTP4 = 29 // ISO Transport Protocol Class 4
114
- ianaProtocolNETBLT = 30 // Bulk Data Transfer Protocol
115
- ianaProtocolMFENSP = 31 // MFE Network Services Protocol
116
- ianaProtocolMERITINP = 32 // MERIT Internodal Protocol
117
- ianaProtocolDCCP = 33 // Datagram Congestion Control Protocol
118
- ianaProtocol3PC = 34 // Third Party Connect Protocol
119
- ianaProtocolIDPR = 35 // Inter-Domain Policy Routing Protocol
120
- ianaProtocolXTP = 36 // XTP
121
- ianaProtocolDDP = 37 // Datagram Delivery Protocol
122
- ianaProtocolIDPRCMTP = 38 // IDPR Control Message Transport Proto
123
- ianaProtocolTPPP = 39 // TP++ Transport Protocol
124
- ianaProtocolIL = 40 // IL Transport Protocol
125
- ianaProtocolIPv6 = 41 // IPv6 encapsulation
126
- ianaProtocolSDRP = 42 // Source Demand Routing Protocol
127
- ianaProtocolIPv6Route = 43 // Routing Header for IPv6
128
- ianaProtocolIPv6Frag = 44 // Fragment Header for IPv6
129
- ianaProtocolIDRP = 45 // Inter-Domain Routing Protocol
130
- ianaProtocolRSVP = 46 // Reservation Protocol
131
- ianaProtocolGRE = 47 // Generic Routing Encapsulation
132
- ianaProtocolDSR = 48 // Dynamic Source Routing Protocol
133
- ianaProtocolBNA = 49 // BNA
134
- ianaProtocolESP = 50 // Encap Security Payload
135
- ianaProtocolAH = 51 // Authentication Header
136
- ianaProtocolINLSP = 52 // Integrated Net Layer Security TUBA
137
- ianaProtocolSWIPE = 53 // IP with Encryption
138
- ianaProtocolNARP = 54 // NBMA Address Resolution Protocol
139
- ianaProtocolMOBILE = 55 // IP Mobility
140
- ianaProtocolTLSP = 56 // Transport Layer Security Protocol using Kryptonet key management
141
- ianaProtocolSKIP = 57 // SKIP
142
- ianaProtocolIPv6ICMP = 58 // ICMP for IPv6
143
- ianaProtocolIPv6NoNxt = 59 // No Next Header for IPv6
144
- ianaProtocolIPv6Opts = 60 // Destination Options for IPv6
145
- ianaProtocolCFTP = 62 // CFTP
146
- ianaProtocolSATEXPAK = 64 // SATNET and Backroom EXPAK
147
- ianaProtocolKRYPTOLAN = 65 // Kryptolan
148
- ianaProtocolRVD = 66 // MIT Remote Virtual Disk Protocol
149
- ianaProtocolIPPC = 67 // Internet Pluribus Packet Core
150
- ianaProtocolSATMON = 69 // SATNET Monitoring
151
- ianaProtocolVISA = 70 // VISA Protocol
152
- ianaProtocolIPCV = 71 // Internet Packet Core Utility
153
- ianaProtocolCPNX = 72 // Computer Protocol Network Executive
154
- ianaProtocolCPHB = 73 // Computer Protocol Heart Beat
155
- ianaProtocolWSN = 74 // Wang Span Network
156
- ianaProtocolPVP = 75 // Packet Video Protocol
157
- ianaProtocolBRSATMON = 76 // Backroom SATNET Monitoring
158
- ianaProtocolSUNND = 77 // SUN ND PROTOCOL-Temporary
159
- ianaProtocolWBMON = 78 // WIDEBAND Monitoring
160
- ianaProtocolWBEXPAK = 79 // WIDEBAND EXPAK
161
- ianaProtocolISOIP = 80 // ISO Internet Protocol
162
- ianaProtocolVMTP = 81 // VMTP
163
- ianaProtocolSECUREVMTP = 82 // SECURE-VMTP
164
- ianaProtocolVINES = 83 // VINES
165
- ianaProtocolTTP = 84 // TTP
166
- ianaProtocolIPTM = 84 // Protocol Internet Protocol Traffic Manager
167
- ianaProtocolNSFNETIGP = 85 // NSFNET-IGP
168
- ianaProtocolDGP = 86 // Dissimilar Gateway Protocol
169
- ianaProtocolTCF = 87 // TCF
170
- ianaProtocolEIGRP = 88 // EIGRP
171
- ianaProtocolOSPFIGP = 89 // OSPFIGP
172
- ianaProtocolSpriteRPC = 90 // Sprite RPC Protocol
173
- ianaProtocolLARP = 91 // Locus Address Resolution Protocol
174
- ianaProtocolMTP = 92 // Multicast Transport Protocol
175
- ianaProtocolAX25 = 93 // AX.25 Frames
176
- ianaProtocolIPIP = 94 // IP-within-IP Encapsulation Protocol
177
- ianaProtocolMICP = 95 // Mobile Internetworking Control Pro.
178
- ianaProtocolSCCSP = 96 // Semaphore Communications Sec. Pro.
179
- ianaProtocolETHERIP = 97 // Ethernet-within-IP Encapsulation
180
- ianaProtocolENCAP = 98 // Encapsulation Header
181
- ianaProtocolGMTP = 100 // GMTP
182
- ianaProtocolIFMP = 101 // Ipsilon Flow Management Protocol
183
- ianaProtocolPNNI = 102 // PNNI over IP
184
- ianaProtocolPIM = 103 // Protocol Independent Multicast
185
- ianaProtocolARIS = 104 // ARIS
186
- ianaProtocolSCPS = 105 // SCPS
187
- ianaProtocolQNX = 106 // QNX
188
- ianaProtocolAN = 107 // Active Networks
189
- ianaProtocolIPComp = 108 // IP Payload Compression Protocol
190
- ianaProtocolSNP = 109 // Sitara Networks Protocol
191
- ianaProtocolCompaqPeer = 110 // Compaq Peer Protocol
192
- ianaProtocolIPXinIP = 111 // IPX in IP
193
- ianaProtocolVRRP = 112 // Virtual Router Redundancy Protocol
194
- ianaProtocolPGM = 113 // PGM Reliable Transport Protocol
195
- ianaProtocolL2TP = 115 // Layer Two Tunneling Protocol
196
- ianaProtocolDDX = 116 // D-II Data Exchange (DDX)
197
- ianaProtocolIATP = 117 // Interactive Agent Transfer Protocol
198
- ianaProtocolSTP = 118 // Schedule Transfer Protocol
199
- ianaProtocolSRP = 119 // SpectraLink Radio Protocol
200
- ianaProtocolUTI = 120 // UTI
201
- ianaProtocolSMP = 121 // Simple Message Protocol
202
- ianaProtocolSM = 122 // SM
203
- ianaProtocolPTP = 123 // Performance Transparency Protocol
204
- ianaProtocolISIS = 124 // ISIS over IPv4
205
- ianaProtocolFIRE = 125 // FIRE
206
- ianaProtocolCRTP = 126 // Combat Radio Transport Protocol
207
- ianaProtocolCRUDP = 127 // Combat Radio User Datagram
208
- ianaProtocolSSCOPMCE = 128 // SSCOPMCE
209
- ianaProtocolIPLT = 129 // IPLT
210
- ianaProtocolSPS = 130 // Secure Packet Shield
211
- ianaProtocolPIPE = 131 // Private IP Encapsulation within IP
212
- ianaProtocolSCTP = 132 // Stream Control Transmission Protocol
213
- ianaProtocolFC = 133 // Fibre Channel
214
- ianaProtocolRSVPE2EIGNORE = 134 // RSVP-E2E-IGNORE
215
- ianaProtocolMobilityHeader = 135 // Mobility Header
216
- ianaProtocolUDPLite = 136 // UDPLite
217
- ianaProtocolMPLSinIP = 137 // MPLS-in-IP
218
- ianaProtocolMANET = 138 // MANET Protocols
219
- ianaProtocolHIP = 139 // Host Identity Protocol
220
- ianaProtocolShim6 = 140 // Shim6 Protocol
221
- ianaProtocolWESP = 141 // Wrapped Encapsulating Security Payload
222
- ianaProtocolROHC = 142 // Robust Header Compression
223
- ianaProtocolReserved = 255 // Reserved
224
-)
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/iana_test.go
deleted
-38
@@ -1,38 +0,0 @@
1
-// go run gentest.go
2
-// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
3
-
4
-package ipv6_test
5
-
6
-// Differentiated Services Field Codepoints (DSCP), Updated: 2013-06-25
7
-const (
8
- DiffServCS0 = 0x0 // CS0
9
- DiffServCS1 = 0x20 // CS1
10
- DiffServCS2 = 0x40 // CS2
11
- DiffServCS3 = 0x60 // CS3
12
- DiffServCS4 = 0x80 // CS4
13
- DiffServCS5 = 0xa0 // CS5
14
- DiffServCS6 = 0xc0 // CS6
15
- DiffServCS7 = 0xe0 // CS7
16
- DiffServAF11 = 0x28 // AF11
17
- DiffServAF12 = 0x30 // AF12
18
- DiffServAF13 = 0x38 // AF13
19
- DiffServAF21 = 0x48 // AF21
20
- DiffServAF22 = 0x50 // AF22
21
- DiffServAF23 = 0x58 // AF23
22
- DiffServAF31 = 0x68 // AF31
23
- DiffServAF32 = 0x70 // AF32
24
- DiffServAF33 = 0x78 // AF33
25
- DiffServAF41 = 0x88 // AF41
26
- DiffServAF42 = 0x90 // AF42
27
- DiffServAF43 = 0x98 // AF43
28
- DiffServEFPHB = 0xb8 // EF PHB
29
- DiffServVOICEADMIT = 0xb0 // VOICE-ADMIT
30
-)
31
-
32
-// IPv4 TOS Byte and IPv6 Traffic Class Octet, Updated: 2001-09-06
33
-const (
34
- NotECNTransport = 0x0 // Not-ECT (Not ECN-Capable Transport)
35
- ECNTransport1 = 0x1 // ECT(1) (ECN-Capable Transport(1))
36
- ECNTransport0 = 0x2 // ECT(0) (ECN-Capable Transport(0))
37
- CongestionExperienced = 0x3 // CE (Congestion Experienced)
38
-)
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/icmp.go
deleted
-47
@@ -1,47 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-package ipv6
6
-
7
-import "sync"
8
-
9
-// An ICMPType represents a type of ICMP message.
10
-type ICMPType int
11
-
12
-func (typ ICMPType) String() string {
13
- s, ok := icmpTypes[typ]
14
- if !ok {
15
- return "<nil>"
16
- }
17
- return s
18
-}
19
-
20
-// An ICMPFilter represents an ICMP message filter for incoming
21
-// packets.
22
-type ICMPFilter struct {
23
- mu sync.RWMutex
24
- sysICMPFilter
25
-}
26
-
27
-// Set sets the ICMP type and filter action to the filter.
28
-func (f *ICMPFilter) Set(typ ICMPType, block bool) {
29
- f.mu.Lock()
30
- f.set(typ, block)
31
- f.mu.Unlock()
32
-}
33
-
34
-// SetAll sets the filter action to the filter.
35
-func (f *ICMPFilter) SetAll(block bool) {
36
- f.mu.Lock()
37
- f.setAll(block)
38
- f.mu.Unlock()
39
-}
40
-
41
-// WillBlock reports whether the ICMP type will be blocked.
42
-func (f *ICMPFilter) WillBlock(typ ICMPType) bool {
43
- f.mu.RLock()
44
- ok := f.willBlock(typ)
45
- f.mu.RUnlock()
46
- return ok
47
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/icmp_stub.go
deleted
-24
@@ -1,24 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-// +build nacl plan9 solaris
6
-
7
-package ipv6
8
-
9
-type sysICMPFilter struct {
10
- // TODO(mikio): Implement this
11
-}
12
-
13
-func (f *sysICMPFilter) set(typ ICMPType, block bool) {
14
- // TODO(mikio): Implement this
15
-}
16
-
17
-func (f *sysICMPFilter) setAll(block bool) {
18
- // TODO(mikio): Implement this
19
-}
20
-
21
-func (f *sysICMPFilter) willBlock(typ ICMPType) bool {
22
- // TODO(mikio): Implement this
23
- return false
24
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/mockicmp_test.go
deleted
-130
@@ -1,130 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-package ipv6_test
6
-
7
-import (
8
- "code.google.com/p/go.net/ipv6"
9
- "errors"
10
- "net"
11
-)
12
-
13
-const (
14
- ipv6PseudoHeaderLen = 2*net.IPv6len + 8
15
- ianaProtocolIPv6ICMP = 58
16
-)
17
-
18
-func ipv6PseudoHeader(src, dst net.IP, nextHeader int) []byte {
19
- b := make([]byte, ipv6PseudoHeaderLen)
20
- copy(b[:net.IPv6len], src)
21
- copy(b[net.IPv6len:], dst)
22
- b[len(b)-1] = byte(nextHeader)
23
- return b
24
-}
25
-
26
-// icmpMessage represents an ICMP message.
27
-type icmpMessage struct {
28
- Type ipv6.ICMPType // type
29
- Code int // code
30
- Checksum int // checksum
31
- Body icmpMessageBody // body
32
-}
33
-
34
-// icmpMessageBody represents an ICMP message body.
35
-type icmpMessageBody interface {
36
- Len() int
37
- Marshal() ([]byte, error)
38
-}
39
-
40
-// Marshal returns the binary enconding of the ICMP echo request or
41
-// reply message m.
42
-func (m *icmpMessage) Marshal(psh []byte) ([]byte, error) {
43
- b := []byte{byte(m.Type), byte(m.Code), 0, 0}
44
- if psh != nil {
45
- b = append(psh, b...)
46
- }
47
- if m.Body != nil && m.Body.Len() != 0 {
48
- mb, err := m.Body.Marshal()
49
- if err != nil {
50
- return nil, err
51
- }
52
- b = append(b, mb...)
53
- }
54
- if psh == nil {
55
- return b, nil
56
- }
57
- off, l := 2*net.IPv6len, len(b)-len(psh)
58
- b[off], b[off+1], b[off+2], b[off+3] = byte(l>>24), byte(l>>16), byte(l>>8), byte(l)
59
- csumcv := len(b) - 1 // checksum coverage
60
- s := uint32(0)
61
- for i := 0; i < csumcv; i += 2 {
62
- s += uint32(b[i+1])<<8 | uint32(b[i])
63
- }
64
- if csumcv&1 == 0 {
65
- s += uint32(b[csumcv])
66
- }
67
- s = s>>16 + s&0xffff
68
- s = s + s>>16
69
- // Place checksum back in header; using ^= avoids the
70
- // assumption the checksum bytes are zero.
71
- b[len(psh)+2] ^= byte(^s)
72
- b[len(psh)+3] ^= byte(^s >> 8)
73
- return b[len(psh):], nil
74
-}
75
-
76
-// parseICMPMessage parses b as an ICMP message.
77
-func parseICMPMessage(b []byte) (*icmpMessage, error) {
78
- msglen := len(b)
79
- if msglen < 4 {
80
- return nil, errors.New("message too short")
81
- }
82
- m := &icmpMessage{Type: ipv6.ICMPType(b[0]), Code: int(b[1]), Checksum: int(b[2])<<8 | int(b[3])}
83
- if msglen > 4 {
84
- var err error
85
- switch m.Type {
86
- case ipv6.ICMPTypeEchoRequest, ipv6.ICMPTypeEchoReply:
87
- m.Body, err = parseICMPEcho(b[4:])
88
- if err != nil {
89
- return nil, err
90
- }
91
- }
92
- }
93
- return m, nil
94
-}
95
-
96
-// imcpEcho represenets an ICMP echo request or reply message body.
97
-type icmpEcho struct {
98
- ID int // identifier
99
- Seq int // sequence number
100
- Data []byte // data
101
-}
102
-
103
-func (p *icmpEcho) Len() int {
104
- if p == nil {
105
- return 0
106
- }
107
- return 4 + len(p.Data)
108
-}
109
-
110
-// Marshal returns the binary enconding of the ICMP echo request or
111
-// reply message body p.
112
-func (p *icmpEcho) Marshal() ([]byte, error) {
113
- b := make([]byte, 4+len(p.Data))
114
- b[0], b[1] = byte(p.ID>>8), byte(p.ID)
115
- b[2], b[3] = byte(p.Seq>>8), byte(p.Seq)
116
- copy(b[4:], p.Data)
117
- return b, nil
118
-}
119
-
120
-// parseICMPEcho parses b as an ICMP echo request or reply message
121
-// body.
122
-func parseICMPEcho(b []byte) (*icmpEcho, error) {
123
- bodylen := len(b)
124
- p := &icmpEcho{ID: int(b[0])<<8 | int(b[1]), Seq: int(b[2])<<8 | int(b[3])}
125
- if bodylen > 4 {
126
- p.Data = make([]byte, bodylen-4)
127
- copy(p.Data, b[4:])
128
- }
129
- return p, nil
130
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/mocktransponder_test.go
deleted
-88
@@ -1,88 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-package ipv6_test
6
-
7
-import (
8
- "net"
9
- "testing"
10
-)
11
-
12
-func isLinkLocalUnicast(ip net.IP) bool {
13
- return ip.To4() == nil && ip.To16() != nil && ip.IsLinkLocalUnicast()
14
-}
15
-
16
-func loopbackInterface() *net.Interface {
17
- ift, err := net.Interfaces()
18
- if err != nil {
19
- return nil
20
- }
21
- for _, ifi := range ift {
22
- if ifi.Flags&net.FlagLoopback == 0 || ifi.Flags&net.FlagUp == 0 {
23
- continue
24
- }
25
- ifat, err := ifi.Addrs()
26
- if err != nil {
27
- continue
28
- }
29
- for _, ifa := range ifat {
30
- switch ifa := ifa.(type) {
31
- case *net.IPAddr:
32
- if isLinkLocalUnicast(ifa.IP) {
33
- return &ifi
34
- }
35
- case *net.IPNet:
36
- if isLinkLocalUnicast(ifa.IP) {
37
- return &ifi
38
- }
39
- }
40
- }
41
- }
42
- return nil
43
-}
44
-
45
-func isMulticastAvailable(ifi *net.Interface) (net.IP, bool) {
46
- if ifi == nil || ifi.Flags&net.FlagUp == 0 || ifi.Flags&net.FlagMulticast == 0 {
47
- return nil, false
48
- }
49
- ifat, err := ifi.Addrs()
50
- if err != nil {
51
- return nil, false
52
- }
53
- for _, ifa := range ifat {
54
- switch ifa := ifa.(type) {
55
- case *net.IPAddr:
56
- if isLinkLocalUnicast(ifa.IP) {
57
- return ifa.IP, true
58
- }
59
- case *net.IPNet:
60
- if isLinkLocalUnicast(ifa.IP) {
61
- return ifa.IP, true
62
- }
63
- }
64
- }
65
- return nil, false
66
-}
67
-
68
-func connector(t *testing.T, network, addr string, done chan<- bool) {
69
- defer func() { done <- true }()
70
-
71
- c, err := net.Dial(network, addr)
72
- if err != nil {
73
- t.Errorf("net.Dial failed: %v", err)
74
- return
75
- }
76
- c.Close()
77
-}
78
-
79
-func acceptor(t *testing.T, ln net.Listener, done chan<- bool) {
80
- defer func() { done <- true }()
81
-
82
- c, err := ln.Accept()
83
- if err != nil {
84
- t.Errorf("net.Listener.Accept failed: %v", err)
85
- return
86
- }
87
- c.Close()
88
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/multicast_test.go
deleted
-205
@@ -1,205 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-package ipv6_test
6
-
7
-import (
8
- "bytes"
9
- "code.google.com/p/go.net/ipv6"
10
- "net"
11
- "os"
12
- "runtime"
13
- "testing"
14
- "time"
15
-)
16
-
17
-func TestPacketConnReadWriteMulticastUDP(t *testing.T) {
18
- switch runtime.GOOS {
19
- case "freebsd": // due to a bug on loopback marking
20
- // See http://www.freebsd.org/cgi/query-pr.cgi?pr=180065.
21
- t.Skipf("not supported on %q", runtime.GOOS)
22
- case "plan9", "solaris", "windows":
23
- t.Skipf("not supported on %q", runtime.GOOS)
24
- }
25
- if !supportsIPv6 {
26
- t.Skip("ipv6 is not supported")
27
- }
28
- ifi := loopbackInterface()
29
- if ifi == nil {
30
- t.Skipf("not available on %q", runtime.GOOS)
31
- }
32
-
33
- c, err := net.ListenPacket("udp6", "[ff02::114]:0") // see RFC 4727
34
- if err != nil {
35
- t.Fatalf("net.ListenPacket failed: %v", err)
36
- }
37
- defer c.Close()
38
-
39
- _, port, err := net.SplitHostPort(c.LocalAddr().String())
40
- if err != nil {
41
- t.Fatalf("net.SplitHostPort failed: %v", err)
42
- }
43
- dst, err := net.ResolveUDPAddr("udp6", "[ff02::114]:"+port) // see RFC 4727
44
- if err != nil {
45
- t.Fatalf("net.ResolveUDPAddr failed: %v", err)
46
- }
47
-
48
- p := ipv6.NewPacketConn(c)
49
- defer p.Close()
50
- if err := p.JoinGroup(ifi, dst); err != nil {
51
- t.Fatalf("ipv6.PacketConn.JoinGroup on %v failed: %v", ifi, err)
52
- }
53
- if err := p.SetMulticastInterface(ifi); err != nil {
54
- t.Fatalf("ipv6.PacketConn.SetMulticastInterface failed: %v", err)
55
- }
56
- if _, err := p.MulticastInterface(); err != nil {
57
- t.Fatalf("ipv6.PacketConn.MulticastInterface failed: %v", err)
58
- }
59
- if err := p.SetMulticastLoopback(true); err != nil {
60
- t.Fatalf("ipv6.PacketConn.SetMulticastLoopback failed: %v", err)
61
- }
62
- if _, err := p.MulticastLoopback(); err != nil {
63
- t.Fatalf("ipv6.PacketConn.MulticastLoopback failed: %v", err)
64
- }
65
-
66
- cm := ipv6.ControlMessage{
67
- TrafficClass: DiffServAF11 | CongestionExperienced,
68
- Src: net.IPv6loopback,
69
- IfIndex: ifi.Index,
70
- }
71
- cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU
72
- wb := []byte("HELLO-R-U-THERE")
73
-
74
- for i, toggle := range []bool{true, false, true} {
75
- if err := p.SetControlMessage(cf, toggle); err != nil {
76
- t.Fatalf("ipv6.PacketConn.SetControlMessage failed: %v", err)
77
- }
78
- if err := p.SetDeadline(time.Now().Add(200 * time.Millisecond)); err != nil {
79
- t.Fatalf("ipv6.PacketConn.SetDeadline failed: %v", err)
80
- }
81
- cm.HopLimit = i + 1
82
- if n, err := p.WriteTo(wb, &cm, dst); err != nil {
83
- t.Fatalf("ipv6.PacketConn.WriteTo failed: %v", err)
84
- } else if n != len(wb) {
85
- t.Fatalf("ipv6.PacketConn.WriteTo failed: short write: %v", n)
86
- }
87
- rb := make([]byte, 128)
88
- if n, cm, _, err := p.ReadFrom(rb); err != nil {
89
- t.Fatalf("ipv6.PacketConn.ReadFrom failed: %v", err)
90
- } else if !bytes.Equal(rb[:n], wb) {
91
- t.Fatalf("got %v; expected %v", rb[:n], wb)
92
- } else {
93
- t.Logf("rcvd cmsg: %v", cm)
94
- }
95
- }
96
-}
97
-
98
-func TestPacketConnReadWriteMulticastICMP(t *testing.T) {
99
- switch runtime.GOOS {
100
- case "plan9", "solaris", "windows":
101
- t.Skipf("not supported on %q", runtime.GOOS)
102
- }
103
- if !supportsIPv6 {
104
- t.Skip("ipv6 is not supported")
105
- }
106
- if os.Getuid() != 0 {
107
- t.Skip("must be root")
108
- }
109
- ifi := loopbackInterface()
110
- if ifi == nil {
111
- t.Skipf("not available on %q", runtime.GOOS)
112
- }
113
-
114
- c, err := net.ListenPacket("ip6:ipv6-icmp", "::")
115
- if err != nil {
116
- t.Fatalf("net.ListenPacket failed: %v", err)
117
- }
118
- defer c.Close()
119
-
120
- dst, err := net.ResolveIPAddr("ip6", "ff02::114") // see RFC 4727
121
- if err != nil {
122
- t.Fatalf("net.ResolveIPAddr failed: %v", err)
123
- }
124
-
125
- pshicmp := ipv6PseudoHeader(c.LocalAddr().(*net.IPAddr).IP, dst.IP, ianaProtocolIPv6ICMP)
126
- p := ipv6.NewPacketConn(c)
127
- defer p.Close()
128
- if err := p.JoinGroup(ifi, dst); err != nil {
129
- t.Fatalf("ipv6.PacketConn.JoinGroup on %v failed: %v", ifi, err)
130
- }
131
- if err := p.SetMulticastInterface(ifi); err != nil {
132
- t.Fatalf("ipv6.PacketConn.SetMulticastInterface failed: %v", err)
133
- }
134
- if _, err := p.MulticastInterface(); err != nil {
135
- t.Fatalf("ipv6.PacketConn.MulticastInterface failed: %v", err)
136
- }
137
- if err := p.SetMulticastLoopback(true); err != nil {
138
- t.Fatalf("ipv6.PacketConn.SetMulticastLoopback failed: %v", err)
139
- }
140
- if _, err := p.MulticastLoopback(); err != nil {
141
- t.Fatalf("ipv6.PacketConn.MulticastLoopback failed: %v", err)
142
- }
143
-
144
- cm := ipv6.ControlMessage{
145
- TrafficClass: DiffServAF11 | CongestionExperienced,
146
- Src: net.IPv6loopback,
147
- IfIndex: ifi.Index,
148
- }
149
- cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU
150
-
151
- var f ipv6.ICMPFilter
152
- f.SetAll(true)
153
- f.Set(ipv6.ICMPTypeEchoReply, false)
154
- if err := p.SetICMPFilter(&f); err != nil {
155
- t.Fatalf("ipv6.PacketConn.SetICMPFilter failed: %v", err)
156
- }
157
-
158
- var psh []byte
159
- for i, toggle := range []bool{true, false, true} {
160
- if toggle {
161
- psh = nil
162
- if err := p.SetChecksum(true, 2); err != nil {
163
- t.Fatalf("ipv6.PacketConn.SetChecksum failed: %v", err)
164
- }
165
- } else {
166
- psh = pshicmp
167
- // Some platforms never allow to disable the
168
- // kernel checksum processing.
169
- p.SetChecksum(false, -1)
170
- }
171
- wb, err := (&icmpMessage{
172
- Type: ipv6.ICMPTypeEchoRequest, Code: 0,
173
- Body: &icmpEcho{
174
- ID: os.Getpid() & 0xffff, Seq: i + 1,
175
- Data: []byte("HELLO-R-U-THERE"),
176
- },
177
- }).Marshal(psh)
178
- if err != nil {
179
- t.Fatalf("icmpMessage.Marshal failed: %v", err)
180
- }
181
- if err := p.SetControlMessage(cf, toggle); err != nil {
182
- t.Fatalf("ipv6.PacketConn.SetControlMessage failed: %v", err)
183
- }
184
- if err := p.SetDeadline(time.Now().Add(200 * time.Millisecond)); err != nil {
185
- t.Fatalf("ipv6.PacketConn.SetDeadline failed: %v", err)
186
- }
187
- cm.HopLimit = i + 1
188
- if n, err := p.WriteTo(wb, &cm, dst); err != nil {
189
- t.Fatalf("ipv6.PacketConn.WriteTo failed: %v", err)
190
- } else if n != len(wb) {
191
- t.Fatalf("ipv6.PacketConn.WriteTo failed: short write: %v", n)
192
- }
193
- rb := make([]byte, 128)
194
- if n, cm, _, err := p.ReadFrom(rb); err != nil {
195
- t.Fatalf("ipv6.PacketConn.ReadFrom failed: %v", err)
196
- } else {
197
- t.Logf("rcvd cmsg: %v", cm)
198
- if m, err := parseICMPMessage(rb[:n]); err != nil {
199
- t.Fatalf("parseICMPMessage failed: %v", err)
200
- } else if m.Type != ipv6.ICMPTypeEchoReply || m.Code != 0 {
201
- t.Fatalf("got type=%v, code=%v; expected type=%v, code=%v", m.Type, m.Code, ipv6.ICMPTypeEchoReply, 0)
202
- }
203
- }
204
- }
205
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/multicastsockopt_test.go
deleted
-76
@@ -1,76 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-package ipv6_test
6
-
7
-import (
8
- "code.google.com/p/go.net/ipv6"
9
- "net"
10
- "os"
11
- "runtime"
12
- "testing"
13
-)
14
-
15
-var packetConnMulticastSocketOptionTests = []struct {
16
- net, proto, addr string
17
- gaddr net.Addr
18
-}{
19
- {"udp6", "", "[ff02::]:0", &net.UDPAddr{IP: net.ParseIP("ff02::114")}}, // see RFC 4727
20
- {"ip6", ":ipv6-icmp", "::", &net.IPAddr{IP: net.ParseIP("ff02::114")}}, // see RFC 4727
21
-}
22
-
23
-func TestPacketConnMulticastSocketOptions(t *testing.T) {
24
- switch runtime.GOOS {
25
- case "plan9", "solaris", "windows":
26
- t.Skipf("not supported on %q", runtime.GOOS)
27
- }
28
- if !supportsIPv6 {
29
- t.Skip("ipv6 is not supported")
30
- }
31
- ifi := loopbackInterface()
32
- if ifi == nil {
33
- t.Skipf("not available on %q", runtime.GOOS)
34
- }
35
-
36
- for _, tt := range packetConnMulticastSocketOptionTests {
37
- if tt.net == "ip6" && os.Getuid() != 0 {
38
- t.Skip("must be root")
39
- }
40
- c, err := net.ListenPacket(tt.net+tt.proto, tt.addr)
41
- if err != nil {
42
- t.Fatalf("net.ListenPacket failed: %v", err)
43
- }
44
- defer c.Close()
45
-
46
- p := ipv6.NewPacketConn(c)
47
-
48
- hoplim := 255
49
- if err := p.SetMulticastHopLimit(hoplim); err != nil {
50
- t.Fatalf("ipv6.PacketConn.SetMulticastHopLimit failed: %v", err)
51
- }
52
- if v, err := p.MulticastHopLimit(); err != nil {
53
- t.Fatalf("ipv6.PacketConn.MulticastHopLimit failed: %v", err)
54
- } else if v != hoplim {
55
- t.Fatalf("got unexpected multicast hop limit %v; expected %v", v, hoplim)
56
- }
57
-
58
- for _, toggle := range []bool{true, false} {
59
- if err := p.SetMulticastLoopback(toggle); err != nil {
60
- t.Fatalf("ipv6.PacketConn.SetMulticastLoopback failed: %v", err)
61
- }
62
- if v, err := p.MulticastLoopback(); err != nil {
63
- t.Fatalf("ipv6.PacketConn.MulticastLoopback failed: %v", err)
64
- } else if v != toggle {
65
- t.Fatalf("got unexpected multicast loopback %v; expected %v", v, toggle)
66
- }
67
- }
68
-
69
- if err := p.JoinGroup(ifi, tt.gaddr); err != nil {
70
- t.Fatalf("ipv6.PacketConn.JoinGroup(%v, %v) failed: %v", ifi, tt.gaddr, err)
71
- }
72
- if err := p.LeaveGroup(ifi, tt.gaddr); err != nil {
73
- t.Fatalf("ipv6.PacketConn.LeaveGroup(%v, %v) failed: %v", ifi, tt.gaddr, err)
74
- }
75
- }
76
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/sockopt_rfc2292_unix.go
deleted
-70
@@ -1,70 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-// +build darwin
6
-
7
-package ipv6
8
-
9
-import (
10
- "os"
11
- "syscall"
12
- "unsafe"
13
-)
14
-
15
-func ipv6ReceiveTrafficClass(fd int) (bool, error) {
16
- return false, errOpNoSupport
17
-}
18
-
19
-func setIPv6ReceiveTrafficClass(fd int, v bool) error {
20
- return errOpNoSupport
21
-}
22
-
23
-func ipv6ReceiveHopLimit(fd int) (bool, error) {
24
- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, sysSockopt2292HopLimit)
25
- if err != nil {
26
- return false, os.NewSyscallError("getsockopt", err)
27
- }
28
- return v == 1, nil
29
-}
30
-
31
-func setIPv6ReceiveHopLimit(fd int, v bool) error {
32
- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, sysSockopt2292HopLimit, boolint(v)))
33
-}
34
-
35
-func ipv6ReceivePacketInfo(fd int) (bool, error) {
36
- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, sysSockopt2292PacketInfo)
37
- if err != nil {
38
- return false, os.NewSyscallError("getsockopt", err)
39
- }
40
- return v == 1, nil
41
-}
42
-
43
-func setIPv6ReceivePacketInfo(fd int, v bool) error {
44
- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, sysSockopt2292PacketInfo, boolint(v)))
45
-}
46
-
47
-func ipv6PathMTU(fd int) (int, error) {
48
- return 0, errOpNoSupport
49
-}
50
-
51
-func ipv6ReceivePathMTU(fd int) (bool, error) {
52
- return false, errOpNoSupport
53
-}
54
-
55
-func setIPv6ReceivePathMTU(fd int, v bool) error {
56
- return errOpNoSupport
57
-}
58
-
59
-func ipv6ICMPFilter(fd int) (*ICMPFilter, error) {
60
- var v ICMPFilter
61
- l := sysSockoptLen(sysSizeofICMPFilter)
62
- if err := getsockopt(fd, ianaProtocolIPv6ICMP, sysSockoptICMPFilter, unsafe.Pointer(&v.sysICMPFilter), &l); err != nil {
63
- return nil, os.NewSyscallError("getsockopt", err)
64
- }
65
- return &v, nil
66
-}
67
-
68
-func setIPv6ICMPFilter(fd int, f *ICMPFilter) error {
69
- return os.NewSyscallError("setsockopt", setsockopt(fd, ianaProtocolIPv6ICMP, sysSockoptICMPFilter, unsafe.Pointer(&f.sysICMPFilter), sysSizeofICMPFilter))
70
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/sockopt_rfc3493_bsd.go
deleted
-19
@@ -1,19 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-// +build darwin dragonfly freebsd netbsd openbsd
6
-
7
-package ipv6
8
-
9
-import (
10
- "os"
11
- "syscall"
12
-)
13
-
14
-func setIPv6Checksum(fd int, on bool, offset int) error {
15
- if !on {
16
- offset = -1
17
- }
18
- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, sysSockoptChecksum, offset))
19
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/sockopt_rfc3493_linux.go
deleted
-17
@@ -1,17 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-package ipv6
6
-
7
-import (
8
- "os"
9
- "syscall"
10
-)
11
-
12
-func setIPv6Checksum(fd int, on bool, offset int) error {
13
- if !on {
14
- offset = -1
15
- }
16
- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolReserved, sysSockoptChecksum, offset))
17
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/sockopt_rfc3493_unix.go
deleted
-115
@@ -1,115 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-// +build darwin dragonfly freebsd linux netbsd openbsd
6
-
7
-package ipv6
8
-
9
-import (
10
- "net"
11
- "os"
12
- "syscall"
13
- "unsafe"
14
-)
15
-
16
-func ipv6TrafficClass(fd int) (int, error) {
17
- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, sysSockoptTrafficClass)
18
- if err != nil {
19
- return 0, os.NewSyscallError("getsockopt", err)
20
- }
21
- return v, nil
22
-}
23
-
24
-func setIPv6TrafficClass(fd, v int) error {
25
- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, sysSockoptTrafficClass, v))
26
-}
27
-
28
-func ipv6HopLimit(fd int) (int, error) {
29
- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, sysSockoptUnicastHopLimit)
30
- if err != nil {
31
- return 0, os.NewSyscallError("getsockopt", err)
32
- }
33
- return v, nil
34
-}
35
-
36
-func setIPv6HopLimit(fd, v int) error {
37
- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, sysSockoptUnicastHopLimit, v))
38
-}
39
-
40
-func ipv6Checksum(fd int) (bool, int, error) {
41
- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, sysSockoptChecksum)
42
- if err != nil {
43
- return false, 0, os.NewSyscallError("getsockopt", err)
44
- }
45
- on := true
46
- if v == -1 {
47
- on = false
48
- }
49
- return on, v, nil
50
-}
51
-
52
-func ipv6MulticastHopLimit(fd int) (int, error) {
53
- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, sysSockoptMulticastHopLimit)
54
- if err != nil {
55
- return 0, os.NewSyscallError("getsockopt", err)
56
- }
57
- return v, nil
58
-}
59
-
60
-func setIPv6MulticastHopLimit(fd, v int) error {
61
- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, sysSockoptMulticastHopLimit, v))
62
-}
63
-
64
-func ipv6MulticastInterface(fd int) (*net.Interface, error) {
65
- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, sysSockoptMulticastInterface)
66
- if err != nil {
67
- return nil, os.NewSyscallError("getsockopt", err)
68
- }
69
- if v == 0 {
70
- return nil, nil
71
- }
72
- ifi, err := net.InterfaceByIndex(v)
73
- if err != nil {
74
- return nil, err
75
- }
76
- return ifi, nil
77
-}
78
-
79
-func setIPv6MulticastInterface(fd int, ifi *net.Interface) error {
80
- var v int
81
- if ifi != nil {
82
- v = ifi.Index
83
- }
84
- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, sysSockoptMulticastInterface, v))
85
-}
86
-
87
-func ipv6MulticastLoopback(fd int) (bool, error) {
88
- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, sysSockoptMulticastLoopback)
89
- if err != nil {
90
- return false, os.NewSyscallError("getsockopt", err)
91
- }
92
- return v == 1, nil
93
-}
94
-
95
-func setIPv6MulticastLoopback(fd int, v bool) error {
96
- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, sysSockoptMulticastLoopback, boolint(v)))
97
-}
98
-
99
-func joinIPv6Group(fd int, ifi *net.Interface, grp net.IP) error {
100
- mreq := sysMulticastReq{}
101
- copy(mreq.IP[:], grp)
102
- if ifi != nil {
103
- mreq.IfIndex = uint32(ifi.Index)
104
- }
105
- return os.NewSyscallError("setsockopt", setsockopt(fd, ianaProtocolIPv6, sysSockoptJoinGroup, unsafe.Pointer(&mreq), sysSizeofMulticastReq))
106
-}
107
-
108
-func leaveIPv6Group(fd int, ifi *net.Interface, grp net.IP) error {
109
- mreq := sysMulticastReq{}
110
- copy(mreq.IP[:], grp)
111
- if ifi != nil {
112
- mreq.IfIndex = uint32(ifi.Index)
113
- }
114
- return os.NewSyscallError("setsockopt", setsockopt(fd, ianaProtocolIPv6, sysSockoptLeaveGroup, unsafe.Pointer(&mreq), sysSizeofMulticastReq))
115
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/sockopt_rfc3493_windows.go
deleted
-116
@@ -1,116 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-package ipv6
6
-
7
-import (
8
- "net"
9
- "os"
10
- "syscall"
11
- "unsafe"
12
-)
13
-
14
-func ipv6TrafficClass(fd syscall.Handle) (int, error) {
15
- // TODO(mikio): Implement this
16
- return 0, syscall.EWINDOWS
17
-}
18
-
19
-func setIPv6TrafficClass(fd syscall.Handle, v int) error {
20
- // TODO(mikio): Implement this
21
- return syscall.EWINDOWS
22
-}
23
-
24
-func ipv6HopLimit(fd syscall.Handle) (int, error) {
25
- var v int32
26
- l := int32(4)
27
- if err := syscall.Getsockopt(fd, ianaProtocolIPv6, sysSockoptUnicastHopLimit, (*byte)(unsafe.Pointer(&v)), &l); err != nil {
28
- return 0, os.NewSyscallError("getsockopt", err)
29
- }
30
- return int(v), nil
31
-}
32
-
33
-func setIPv6HopLimit(fd syscall.Handle, v int) error {
34
- vv := int32(v)
35
- return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, sysSockoptUnicastHopLimit, (*byte)(unsafe.Pointer(&vv)), 4))
36
-}
37
-
38
-func ipv6Checksum(fd syscall.Handle) (bool, int, error) {
39
- // TODO(mikio): Implement this
40
- return false, 0, syscall.EWINDOWS
41
-}
42
-
43
-func ipv6MulticastHopLimit(fd syscall.Handle) (int, error) {
44
- var v int32
45
- l := int32(4)
46
- if err := syscall.Getsockopt(fd, ianaProtocolIPv6, sysSockoptMulticastHopLimit, (*byte)(unsafe.Pointer(&v)), &l); err != nil {
47
- return 0, os.NewSyscallError("getsockopt", err)
48
- }
49
- return int(v), nil
50
-}
51
-
52
-func setIPv6MulticastHopLimit(fd syscall.Handle, v int) error {
53
- vv := int32(v)
54
- return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, sysSockoptMulticastHopLimit, (*byte)(unsafe.Pointer(&vv)), 4))
55
-}
56
-
57
-func ipv6MulticastInterface(fd syscall.Handle) (*net.Interface, error) {
58
- var v int32
59
- l := int32(4)
60
- if err := syscall.Getsockopt(fd, ianaProtocolIPv6, sysSockoptMulticastInterface, (*byte)(unsafe.Pointer(&v)), &l); err != nil {
61
- return nil, os.NewSyscallError("getsockopt", err)
62
- }
63
- if v == 0 {
64
- return nil, nil
65
- }
66
- ifi, err := net.InterfaceByIndex(int(v))
67
- if err != nil {
68
- return nil, err
69
- }
70
- return ifi, nil
71
-}
72
-
73
-func setIPv6MulticastInterface(fd syscall.Handle, ifi *net.Interface) error {
74
- var v int32
75
- if ifi != nil {
76
- v = int32(ifi.Index)
77
- }
78
- return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, sysSockoptMulticastInterface, (*byte)(unsafe.Pointer(&v)), 4))
79
-}
80
-
81
-func ipv6MulticastLoopback(fd syscall.Handle) (bool, error) {
82
- var v int32
83
- l := int32(4)
84
- if err := syscall.Getsockopt(fd, ianaProtocolIPv6, sysSockoptMulticastLoopback, (*byte)(unsafe.Pointer(&v)), &l); err != nil {
85
- return false, os.NewSyscallError("getsockopt", err)
86
- }
87
- return v == 1, nil
88
-}
89
-
90
-func setIPv6MulticastLoopback(fd syscall.Handle, v bool) error {
91
- vv := int32(boolint(v))
92
- return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, sysSockoptMulticastLoopback, (*byte)(unsafe.Pointer(&vv)), 4))
93
-}
94
-
95
-func joinIPv6Group(fd syscall.Handle, ifi *net.Interface, grp net.IP) error {
96
- mreq := sysMulticastReq{}
97
- copy(mreq.IP[:], grp)
98
- if ifi != nil {
99
- mreq.IfIndex = uint32(ifi.Index)
100
- }
101
- return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, sysSockoptJoinGroup, (*byte)(unsafe.Pointer(&mreq)), int32(sysSizeofMulticastReq)))
102
-}
103
-
104
-func leaveIPv6Group(fd syscall.Handle, ifi *net.Interface, grp net.IP) error {
105
- mreq := sysMulticastReq{}
106
- copy(mreq.IP[:], grp)
107
- if ifi != nil {
108
- mreq.IfIndex = uint32(ifi.Index)
109
- }
110
- return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, sysSockoptLeaveGroup, (*byte)(unsafe.Pointer(&mreq)), int32(sysSizeofMulticastReq)))
111
-}
112
-
113
-func setIPv6Checksum(fd syscall.Handle, on bool, offset int) error {
114
- // TODO(mikio): Implement this
115
- return syscall.EWINDOWS
116
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/sockopt_rfc3542_unix.go
deleted
-83
@@ -1,83 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-// +build dragonfly freebsd linux netbsd openbsd
6
-
7
-package ipv6
8
-
9
-import (
10
- "os"
11
- "syscall"
12
- "unsafe"
13
-)
14
-
15
-func ipv6ReceiveTrafficClass(fd int) (bool, error) {
16
- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, sysSockoptReceiveTrafficClass)
17
- if err != nil {
18
- return false, os.NewSyscallError("getsockopt", err)
19
- }
20
- return v == 1, nil
21
-}
22
-
23
-func setIPv6ReceiveTrafficClass(fd int, v bool) error {
24
- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, sysSockoptReceiveTrafficClass, boolint(v)))
25
-}
26
-
27
-func ipv6ReceiveHopLimit(fd int) (bool, error) {
28
- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, sysSockoptReceiveHopLimit)
29
- if err != nil {
30
- return false, os.NewSyscallError("getsockopt", err)
31
- }
32
- return v == 1, nil
33
-}
34
-
35
-func setIPv6ReceiveHopLimit(fd int, v bool) error {
36
- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, sysSockoptReceiveHopLimit, boolint(v)))
37
-}
38
-
39
-func ipv6ReceivePacketInfo(fd int) (bool, error) {
40
- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, sysSockoptReceivePacketInfo)
41
- if err != nil {
42
- return false, os.NewSyscallError("getsockopt", err)
43
- }
44
- return v == 1, nil
45
-}
46
-
47
-func setIPv6ReceivePacketInfo(fd int, v bool) error {
48
- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, sysSockoptReceivePacketInfo, boolint(v)))
49
-}
50
-
51
-func ipv6PathMTU(fd int) (int, error) {
52
- var v sysMTUInfo
53
- l := sysSockoptLen(sysSizeofMTUInfo)
54
- if err := getsockopt(fd, ianaProtocolIPv6, sysSockoptPathMTU, unsafe.Pointer(&v), &l); err != nil {
55
- return 0, os.NewSyscallError("getsockopt", err)
56
- }
57
- return int(v.MTU), nil
58
-}
59
-
60
-func ipv6ReceivePathMTU(fd int) (bool, error) {
61
- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, sysSockoptReceivePathMTU)
62
- if err != nil {
63
- return false, os.NewSyscallError("getsockopt", err)
64
- }
65
- return v == 1, nil
66
-}
67
-
68
-func setIPv6ReceivePathMTU(fd int, v bool) error {
69
- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, sysSockoptReceivePathMTU, boolint(v)))
70
-}
71
-
72
-func ipv6ICMPFilter(fd int) (*ICMPFilter, error) {
73
- var v ICMPFilter
74
- l := sysSockoptLen(sysSizeofICMPFilter)
75
- if err := getsockopt(fd, ianaProtocolIPv6ICMP, sysSockoptICMPFilter, unsafe.Pointer(&v.sysICMPFilter), &l); err != nil {
76
- return nil, os.NewSyscallError("getsockopt", err)
77
- }
78
- return &v, nil
79
-}
80
-
81
-func setIPv6ICMPFilter(fd int, f *ICMPFilter) error {
82
- return os.NewSyscallError("setsockopt", setsockopt(fd, ianaProtocolIPv6ICMP, sysSockoptICMPFilter, unsafe.Pointer(&f.sysICMPFilter), sysSizeofICMPFilter))
83
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/sockopt_rfc3542_windows.go
deleted
-62
@@ -1,62 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-package ipv6
6
-
7
-import "syscall"
8
-
9
-func ipv6ReceiveTrafficClass(fd syscall.Handle) (bool, error) {
10
- // TODO(mikio): Implement this
11
- return false, syscall.EWINDOWS
12
-}
13
-
14
-func setIPv6ReceiveTrafficClass(fd syscall.Handle, v bool) error {
15
- // TODO(mikio): Implement this
16
- return syscall.EWINDOWS
17
-}
18
-
19
-func ipv6ReceiveHopLimit(fd syscall.Handle) (bool, error) {
20
- // TODO(mikio): Implement this
21
- return false, syscall.EWINDOWS
22
-}
23
-
24
-func setIPv6ReceiveHopLimit(fd syscall.Handle, v bool) error {
25
- // TODO(mikio): Implement this
26
- return syscall.EWINDOWS
27
-}
28
-
29
-func ipv6ReceivePacketInfo(fd syscall.Handle) (bool, error) {
30
- // TODO(mikio): Implement this
31
- return false, syscall.EWINDOWS
32
-}
33
-
34
-func setIPv6ReceivePacketInfo(fd syscall.Handle, v bool) error {
35
- // TODO(mikio): Implement this
36
- return syscall.EWINDOWS
37
-}
38
-
39
-func ipv6PathMTU(fd syscall.Handle) (int, error) {
40
- // TODO(mikio): Implement this
41
- return 0, syscall.EWINDOWS
42
-}
43
-
44
-func ipv6ReceivePathMTU(fd syscall.Handle) (bool, error) {
45
- // TODO(mikio): Implement this
46
- return false, syscall.EWINDOWS
47
-}
48
-
49
-func setIPv6ReceivePathMTU(fd syscall.Handle, v bool) error {
50
- // TODO(mikio): Implement this
51
- return syscall.EWINDOWS
52
-}
53
-
54
-func ipv6ICMPFilter(fd syscall.Handle) (*ICMPFilter, error) {
55
- // TODO(mikio): Implement this
56
- return nil, syscall.EWINDOWS
57
-}
58
-
59
-func setIPv6ICMPFilter(fd syscall.Handle, f *ICMPFilter) error {
60
- // TODO(mikio): Implement this
61
- return syscall.EWINDOWS
62
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/sys.go
deleted
-23
@@ -1,23 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-package ipv6
6
-
7
-type sysSockoptLen uint32
8
-
9
-const (
10
- sysSizeofPacketInfo = 0x14
11
- sysSizeofMulticastReq = 0x14
12
- sysSizeofICMPFilter = 0x20
13
-)
14
-
15
-type sysPacketInfo struct {
16
- IP [16]byte
17
- IfIndex uint32
18
-}
19
-
20
-type sysMulticastReq struct {
21
- IP [16]byte
22
- IfIndex uint32
23
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/sys_bsd.go
deleted
-37
@@ -1,37 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-// +build dragonfly freebsd netbsd openbsd
6
-
7
-package ipv6
8
-
9
-import (
10
- "net"
11
- "syscall"
12
-)
13
-
14
-// RFC 3542 options
15
-const (
16
- // See /usr/include/netinet6/in6.h.
17
- sysSockoptReceiveTrafficClass = syscall.IPV6_RECVTCLASS
18
- sysSockoptTrafficClass = syscall.IPV6_TCLASS
19
- sysSockoptReceiveHopLimit = syscall.IPV6_RECVHOPLIMIT
20
- sysSockoptHopLimit = syscall.IPV6_HOPLIMIT
21
- sysSockoptReceivePacketInfo = syscall.IPV6_RECVPKTINFO
22
- sysSockoptPacketInfo = syscall.IPV6_PKTINFO
23
- sysSockoptReceivePathMTU = syscall.IPV6_RECVPATHMTU
24
- sysSockoptPathMTU = syscall.IPV6_PATHMTU
25
- sysSockoptNextHop = syscall.IPV6_NEXTHOP
26
- sysSockoptChecksum = syscall.IPV6_CHECKSUM
27
-
28
- // See /usr/include/netinet6/in6.h.
29
- sysSockoptICMPFilter = 0x12 // syscall.ICMP6_FILTER
30
-)
31
-
32
-func setSockaddr(sa *syscall.RawSockaddrInet6, ip net.IP, ifindex int) {
33
- sa.Len = syscall.SizeofSockaddrInet6
34
- sa.Family = syscall.AF_INET6
35
- copy(sa.Addr[:], ip)
36
- sa.Scope_id = uint32(ifindex)
37
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/sys_darwin.go
deleted
-43
@@ -1,43 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-package ipv6
6
-
7
-import (
8
- "net"
9
- "syscall"
10
-)
11
-
12
-// RFC 2292 options
13
-const (
14
- // See /usr/include/netinet6/in6.h.
15
- sysSockopt2292HopLimit = syscall.IPV6_2292HOPLIMIT
16
- sysSockopt2292PacketInfo = syscall.IPV6_2292PKTINFO
17
- sysSockopt2292NextHop = syscall.IPV6_2292NEXTHOP
18
-)
19
-
20
-// RFC 3542 options
21
-const (
22
- // See /usr/include/netinet6/in6.h.
23
- sysSockoptReceiveTrafficClass = 0x23 // IPV6_RECVTCLASS
24
- sysSockoptTrafficClass = 0x24 // IPV6_TCLASS
25
- sysSockoptReceiveHopLimit = 0x25 // IPV6_RECVHOPLIMIT
26
- sysSockoptHopLimit = 0x2f // IPV6_HOPLIMIT
27
- sysSockoptReceivePacketInfo = 0x3d // IPV6_RECVPKTINFO
28
- sysSockoptPacketInfo = 0x2e // IPV6_PKTINFO
29
- sysSockoptReceivePathMTU = 0x2b // IPV6_RECVPATHMTU
30
- sysSockoptPathMTU = 0x2c // IPV6_PATHMTU
31
- sysSockoptNextHop = 0x30 // IPV6_NEXTHOP
32
- sysSockoptChecksum = 0x1a // IPV6_CHECKSUM
33
-
34
- // See /usr/include/netinet6/in6.h.
35
- sysSockoptICMPFilter = 0x12 // ICMP6_FILTER
36
-)
37
-
38
-func setSockaddr(sa *syscall.RawSockaddrInet6, ip net.IP, ifindex int) {
39
- sa.Len = syscall.SizeofSockaddrInet6
40
- sa.Family = syscall.AF_INET6
41
- copy(sa.Addr[:], ip)
42
- sa.Scope_id = uint32(ifindex)
43
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/sys_linux.go
deleted
-34
@@ -1,34 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-package ipv6
6
-
7
-import (
8
- "net"
9
- "syscall"
10
-)
11
-
12
-// RFC 3542 options
13
-const (
14
- // See /usr/include/linux/ipv6.h,in6.h.
15
- sysSockoptReceiveTrafficClass = syscall.IPV6_RECVTCLASS
16
- sysSockoptTrafficClass = syscall.IPV6_TCLASS
17
- sysSockoptReceiveHopLimit = syscall.IPV6_RECVHOPLIMIT
18
- sysSockoptHopLimit = syscall.IPV6_HOPLIMIT
19
- sysSockoptReceivePacketInfo = syscall.IPV6_RECVPKTINFO
20
- sysSockoptPacketInfo = syscall.IPV6_PKTINFO
21
- sysSockoptReceivePathMTU = 0x3c // IPV6_RECVPATHMTU
22
- sysSockoptPathMTU = 0x3d // IPV6_PATHMTU
23
- sysSockoptNextHop = syscall.IPV6_NEXTHOP
24
- sysSockoptChecksum = syscall.IPV6_CHECKSUM
25
-
26
- // See /usr/include/linux/icmpv6.h.
27
- sysSockoptICMPFilter = 0x1 // syscall.ICMPV6_FILTER
28
-)
29
-
30
-func setSockaddr(sa *syscall.RawSockaddrInet6, ip net.IP, ifindex int) {
31
- sa.Family = syscall.AF_INET6
32
- copy(sa.Addr[:], ip)
33
- sa.Scope_id = uint32(ifindex)
34
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/sys_unix.go
deleted
-26
@@ -1,26 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-// +build darwin dragonfly freebsd linux netbsd openbsd
6
-
7
-package ipv6
8
-
9
-import "syscall"
10
-
11
-// RFC 3493 options
12
-const (
13
- sysSockoptUnicastHopLimit = syscall.IPV6_UNICAST_HOPS
14
- sysSockoptMulticastHopLimit = syscall.IPV6_MULTICAST_HOPS
15
- sysSockoptMulticastInterface = syscall.IPV6_MULTICAST_IF
16
- sysSockoptMulticastLoopback = syscall.IPV6_MULTICAST_LOOP
17
- sysSockoptJoinGroup = syscall.IPV6_JOIN_GROUP
18
- sysSockoptLeaveGroup = syscall.IPV6_LEAVE_GROUP
19
-)
20
-
21
-const sysSizeofMTUInfo = 0x20
22
-
23
-type sysMTUInfo struct {
24
- Addr syscall.RawSockaddrInet6
25
- MTU uint32
26
-}
Godeps/_workspace/src/github.com/hashicorp/go.net/ipv6/sys_windows.go
deleted
-33
@@ -1,33 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-package ipv6
6
-
7
-import (
8
- "net"
9
- "syscall"
10
-)
11
-
12
-// RFC 3493 options
13
-const (
14
- // See ws2tcpip.h.
15
- sysSockoptUnicastHopLimit = syscall.IPV6_UNICAST_HOPS
16
- sysSockoptMulticastHopLimit = syscall.IPV6_MULTICAST_HOPS
17
- sysSockoptMulticastInterface = syscall.IPV6_MULTICAST_IF
18
- sysSockoptMulticastLoopback = syscall.IPV6_MULTICAST_LOOP
19
- sysSockoptJoinGroup = syscall.IPV6_JOIN_GROUP
20
- sysSockoptLeaveGroup = syscall.IPV6_LEAVE_GROUP
21
-)
22
-
23
-// RFC 3542 options
24
-const (
25
- // See ws2tcpip.h.
26
- sysSockoptPacketInfo = 0x13 // IPV6_PKTINFO
27
-)
28
-
29
-func setSockaddr(sa *syscall.RawSockaddrInet6, ip net.IP, ifindex int) {
30
- sa.Family = syscall.AF_INET6
31
- copy(sa.Addr[:], ip)
32
- sa.Scope_id = uint32(ifindex)
33
-}
Godeps/_workspace/src/golang.org/x/net/internal/iana/const.go
renamed
+1
-3
@@ -38,7 +38,7 @@ const (
38
CongestionExperienced = 0x3 // CE (Congestion Experienced)
39
)
40
41
-// Protocol Numbers, Updated: 2014-08-12
41
+// Protocol Numbers, Updated: 2015-01-06
42
const (
43
ProtocolIP = 0 // IPv4 encapsulation, pseudo protocol number
44
ProtocolHOPOPT = 0 // IPv6 Hop-by-Hop Option
@@ -94,7 +94,6 @@ const (
94
ProtocolESP = 50 // Encap Security Payload
95
ProtocolAH = 51 // Authentication Header
96
ProtocolINLSP = 52 // Integrated Net Layer Security TUBA
97
- ProtocolSWIPE = 53 // IP with Encryption
97
ProtocolNARP = 54 // NBMA Address Resolution Protocol
98
ProtocolMOBILE = 55 // IP Mobility
99
ProtocolTLSP = 56 // Transport Layer Security Protocol using Kryptonet key management
@@ -134,7 +133,6 @@ const (
133
ProtocolMTP = 92 // Multicast Transport Protocol
134
ProtocolAX25 = 93 // AX.25 Frames
135
ProtocolIPIP = 94 // IP-within-IP Encapsulation Protocol
137
- ProtocolMICP = 95 // Mobile Internetworking Control Pro.
136
ProtocolSCCSP = 96 // Semaphore Communications Sec. Pro.
137
ProtocolETHERIP = 97 // Ethernet-within-IP Encapsulation
138
ProtocolENCAP = 98 // Encapsulation Header
Godeps/_workspace/src/golang.org/x/net/internal/iana/gen.go
renamed
+5
-1
@@ -46,7 +46,7 @@ func main() {
46
fmt.Fprintf(&bb, "// go generate gen.go\n")
47
fmt.Fprintf(&bb, "// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n")
48
fmt.Fprintf(&bb, "// Package iana provides protocol number resources managed by the Internet Assigned Numbers Authority (IANA).\n")
49
- fmt.Fprintf(&bb, "package iana\n\n")
49
+ fmt.Fprintf(&bb, `package iana // import "golang.org/x/net/internal/iana"`+"\n\n")
50
for _, r := range registries {
51
resp, err := http.Get(r.url)
52
if err != nil {
@@ -264,6 +264,10 @@ func (pn *protocolNumbers) escape() []canonProtocolRecord {
264
" ", "",
265
)
266
for i, pr := range pn.Records {
267
+ if strings.Contains(pr.Name, "Deprecated") ||
268
+ strings.Contains(pr.Name, "deprecated") {
269
+ continue
270
+ }
271
prs[i].OrigName = pr.Name
272
s := strings.TrimSpace(pr.Name)
273
switch pr.Name {
Godeps/_workspace/src/golang.org/x/net/ipv4/control.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/control_bsd.go
renamed
+1
-1
@@ -11,7 +11,7 @@ import (
11
"syscall"
12
"unsafe"
13
14
- "github.com/ipfs/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/internal/iana"
14
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
15
)
16
17
func marshalDst(b []byte, cm *ControlMessage) []byte {
Godeps/_workspace/src/golang.org/x/net/ipv4/control_pktinfo.go
renamed
+2
-2
@@ -10,7 +10,7 @@ import (
10
"syscall"
11
"unsafe"
12
13
- "github.com/ipfs/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/internal/iana"
13
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
14
)
15
16
func marshalPacketInfo(b []byte, cm *ControlMessage) []byte {
@@ -23,7 +23,7 @@ func marshalPacketInfo(b []byte, cm *ControlMessage) []byte {
23
if ip := cm.Src.To4(); ip != nil {
24
copy(pi.Spec_dst[:], ip)
25
}
26
- if cm.IfIndex != 0 {
26
+ if cm.IfIndex > 0 {
27
pi.setIfindex(cm.IfIndex)
28
}
29
}
Godeps/_workspace/src/golang.org/x/net/ipv4/control_stub.go
renamed
-4
@@ -7,21 +7,17 @@
7
package ipv4
8
9
func setControlMessage(fd int, opt *rawOpt, cf ControlFlags, on bool) error {
10
- // TODO(mikio): Implement this
10
return errOpNoSupport
11
}
12
13
func newControlMessage(opt *rawOpt) []byte {
15
- // TODO(mikio): Implement this
14
return nil
15
}
16
17
func parseControlMessage(b []byte) (*ControlMessage, error) {
20
- // TODO(mikio): Implement this
18
return nil, errOpNoSupport
19
}
20
21
func marshalControlMessage(cm *ControlMessage) []byte {
25
- // TODO(mikio): Implement this
22
return nil
23
}
Godeps/_workspace/src/golang.org/x/net/ipv4/control_unix.go
renamed
+16
-18
@@ -11,13 +11,13 @@ import (
11
"syscall"
12
"unsafe"
13
14
- "github.com/ipfs/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/internal/iana"
14
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
15
)
16
17
func setControlMessage(fd int, opt *rawOpt, cf ControlFlags, on bool) error {
18
opt.Lock()
19
defer opt.Unlock()
20
- if cf&FlagTTL != 0 {
20
+ if cf&FlagTTL != 0 && sockOpts[ssoReceiveTTL].name > 0 {
21
if err := setInt(fd, &sockOpts[ssoReceiveTTL], boolint(on)); err != nil {
22
return err
23
}
@@ -39,7 +39,7 @@ func setControlMessage(fd int, opt *rawOpt, cf ControlFlags, on bool) error {
39
}
40
}
41
} else {
42
- if cf&FlagDst != 0 {
42
+ if cf&FlagDst != 0 && sockOpts[ssoReceiveDst].name > 0 {
43
if err := setInt(fd, &sockOpts[ssoReceiveDst], boolint(on)); err != nil {
44
return err
45
}
@@ -49,7 +49,7 @@ func setControlMessage(fd int, opt *rawOpt, cf ControlFlags, on bool) error {
49
opt.clear(FlagDst)
50
}
51
}
52
- if cf&FlagInterface != 0 {
52
+ if cf&FlagInterface != 0 && sockOpts[ssoReceiveInterface].name > 0 {
53
if err := setInt(fd, &sockOpts[ssoReceiveInterface], boolint(on)); err != nil {
54
return err
55
}
@@ -66,7 +66,7 @@ func setControlMessage(fd int, opt *rawOpt, cf ControlFlags, on bool) error {
66
func newControlMessage(opt *rawOpt) (oob []byte) {
67
opt.RLock()
68
var l int
69
- if opt.isset(FlagTTL) {
69
+ if opt.isset(FlagTTL) && ctlOpts[ctlTTL].name > 0 {
70
l += syscall.CmsgSpace(ctlOpts[ctlTTL].length)
71
}
72
if ctlOpts[ctlPacketInfo].name > 0 {
@@ -74,17 +74,17 @@ func newControlMessage(opt *rawOpt) (oob []byte) {
74
l += syscall.CmsgSpace(ctlOpts[ctlPacketInfo].length)
75
}
76
} else {
77
- if opt.isset(FlagDst) {
77
+ if opt.isset(FlagDst) && ctlOpts[ctlDst].name > 0 {
78
l += syscall.CmsgSpace(ctlOpts[ctlDst].length)
79
}
80
- if opt.isset(FlagInterface) {
80
+ if opt.isset(FlagInterface) && ctlOpts[ctlInterface].name > 0 {
81
l += syscall.CmsgSpace(ctlOpts[ctlInterface].length)
82
}
83
}
84
if l > 0 {
85
oob = make([]byte, l)
86
b := oob
87
- if opt.isset(FlagTTL) {
87
+ if opt.isset(FlagTTL) && ctlOpts[ctlTTL].name > 0 {
88
b = ctlOpts[ctlTTL].marshal(b, nil)
89
}
90
if ctlOpts[ctlPacketInfo].name > 0 {
@@ -92,10 +92,10 @@ func newControlMessage(opt *rawOpt) (oob []byte) {
92
b = ctlOpts[ctlPacketInfo].marshal(b, nil)
93
}
94
} else {
95
- if opt.isset(FlagDst) {
95
+ if opt.isset(FlagDst) && ctlOpts[ctlDst].name > 0 {
96
b = ctlOpts[ctlDst].marshal(b, nil)
97
}
98
- if opt.isset(FlagInterface) {
98
+ if opt.isset(FlagInterface) && ctlOpts[ctlInterface].name > 0 {
99
b = ctlOpts[ctlInterface].marshal(b, nil)
100
}
101
}
@@ -136,18 +136,16 @@ func marshalControlMessage(cm *ControlMessage) (oob []byte) {
136
return nil
137
}
138
var l int
139
- if ctlOpts[ctlPacketInfo].name > 0 {
140
- if cm.Src.To4() != nil || cm.IfIndex != 0 {
141
- l += syscall.CmsgSpace(ctlOpts[ctlPacketInfo].length)
142
- }
139
+ pktinfo := false
140
+ if ctlOpts[ctlPacketInfo].name > 0 && (cm.Src.To4() != nil || cm.IfIndex > 0) {
141
+ pktinfo = true
142
+ l += syscall.CmsgSpace(ctlOpts[ctlPacketInfo].length)
143
}
144
if l > 0 {
145
oob = make([]byte, l)
146
b := oob
147
- if ctlOpts[ctlPacketInfo].name > 0 {
148
- if cm.Src.To4() != nil || cm.IfIndex != 0 {
149
- b = ctlOpts[ctlPacketInfo].marshal(b, cm)
150
- }
147
+ if pktinfo {
148
+ b = ctlOpts[ctlPacketInfo].marshal(b, cm)
149
}
150
}
151
return
Godeps/_workspace/src/golang.org/x/net/ipv4/control_windows.go
renamed
+4
-4
@@ -7,21 +7,21 @@ package ipv4
7
import "syscall"
8
9
func setControlMessage(fd syscall.Handle, opt *rawOpt, cf ControlFlags, on bool) error {
10
- // TODO(mikio): Implement this
10
+ // TODO(mikio): implement this
11
return syscall.EWINDOWS
12
}
13
14
func newControlMessage(opt *rawOpt) []byte {
15
- // TODO(mikio): Implement this
15
+ // TODO(mikio): implement this
16
return nil
17
}
18
19
func parseControlMessage(b []byte) (*ControlMessage, error) {
20
- // TODO(mikio): Implement this
20
+ // TODO(mikio): implement this
21
return nil, syscall.EWINDOWS
22
}
23
24
func marshalControlMessage(cm *ControlMessage) []byte {
25
- // TODO(mikio): Implement this
25
+ // TODO(mikio): implement this
26
return nil
27
}
Godeps/_workspace/src/golang.org/x/net/ipv4/defs_darwin.go
renamed
+24
-4
@@ -9,6 +9,8 @@
9
package ipv4
10
11
/*
12
+#include <sys/socket.h>
13
+
14
#include <netinet/in.h>
15
*/
16
import "C"
@@ -40,14 +42,28 @@ const (
42
sysIP_DROP_SOURCE_MEMBERSHIP = C.IP_DROP_SOURCE_MEMBERSHIP
43
sysIP_BLOCK_SOURCE = C.IP_BLOCK_SOURCE
44
sysIP_UNBLOCK_SOURCE = C.IP_UNBLOCK_SOURCE
45
+ sysMCAST_JOIN_GROUP = C.MCAST_JOIN_GROUP
46
+ sysMCAST_LEAVE_GROUP = C.MCAST_LEAVE_GROUP
47
+ sysMCAST_JOIN_SOURCE_GROUP = C.MCAST_JOIN_SOURCE_GROUP
48
+ sysMCAST_LEAVE_SOURCE_GROUP = C.MCAST_LEAVE_SOURCE_GROUP
49
+ sysMCAST_BLOCK_SOURCE = C.MCAST_BLOCK_SOURCE
50
+ sysMCAST_UNBLOCK_SOURCE = C.MCAST_UNBLOCK_SOURCE
51
44
- sysSizeofInetPktinfo = C.sizeof_struct_in_pktinfo
52
+ sysSizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
53
+ sysSizeofSockaddrInet = C.sizeof_struct_sockaddr_in
54
+ sysSizeofInetPktinfo = C.sizeof_struct_in_pktinfo
55
46
- sysSizeofIPMreq = C.sizeof_struct_ip_mreq
47
- sysSizeofIPMreqn = C.sizeof_struct_ip_mreqn
48
- sysSizeofIPMreqSource = C.sizeof_struct_ip_mreq_source
56
+ sysSizeofIPMreq = C.sizeof_struct_ip_mreq
57
+ sysSizeofIPMreqn = C.sizeof_struct_ip_mreqn
58
+ sysSizeofIPMreqSource = C.sizeof_struct_ip_mreq_source
59
+ sysSizeofGroupReq = C.sizeof_struct_group_req
60
+ sysSizeofGroupSourceReq = C.sizeof_struct_group_source_req
61
)
62
63
+type sysSockaddrStorage C.struct_sockaddr_storage
64
+
65
+type sysSockaddrInet C.struct_sockaddr_in
66
+
67
type sysInetPktinfo C.struct_in_pktinfo
68
69
type sysIPMreq C.struct_ip_mreq
@@ -55,3 +71,7 @@ type sysIPMreq C.struct_ip_mreq
71
type sysIPMreqn C.struct_ip_mreqn
72
73
type sysIPMreqSource C.struct_ip_mreq_source
74
+
75
+type sysGroupReq C.struct_group_req
76
+
77
+type sysGroupSourceReq C.struct_group_source_req
Godeps/_workspace/src/golang.org/x/net/ipv4/defs_dragonfly.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/defs_freebsd.go
renamed
+24
-3
@@ -9,6 +9,8 @@
9
package ipv4
10
11
/*
12
+#include <sys/socket.h>
13
+
14
#include <netinet/in.h>
15
*/
16
import "C"
@@ -41,14 +43,33 @@ const (
43
sysIP_DROP_SOURCE_MEMBERSHIP = C.IP_DROP_SOURCE_MEMBERSHIP
44
sysIP_BLOCK_SOURCE = C.IP_BLOCK_SOURCE
45
sysIP_UNBLOCK_SOURCE = C.IP_UNBLOCK_SOURCE
46
+ sysMCAST_JOIN_GROUP = C.MCAST_JOIN_GROUP
47
+ sysMCAST_LEAVE_GROUP = C.MCAST_LEAVE_GROUP
48
+ sysMCAST_JOIN_SOURCE_GROUP = C.MCAST_JOIN_SOURCE_GROUP
49
+ sysMCAST_LEAVE_SOURCE_GROUP = C.MCAST_LEAVE_SOURCE_GROUP
50
+ sysMCAST_BLOCK_SOURCE = C.MCAST_BLOCK_SOURCE
51
+ sysMCAST_UNBLOCK_SOURCE = C.MCAST_UNBLOCK_SOURCE
52
+
53
+ sysSizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
54
+ sysSizeofSockaddrInet = C.sizeof_struct_sockaddr_in
55
45
- sysSizeofIPMreq = C.sizeof_struct_ip_mreq
46
- sysSizeofIPMreqn = C.sizeof_struct_ip_mreqn
47
- sysSizeofIPMreqSource = C.sizeof_struct_ip_mreq_source
56
+ sysSizeofIPMreq = C.sizeof_struct_ip_mreq
57
+ sysSizeofIPMreqn = C.sizeof_struct_ip_mreqn
58
+ sysSizeofIPMreqSource = C.sizeof_struct_ip_mreq_source
59
+ sysSizeofGroupReq = C.sizeof_struct_group_req
60
+ sysSizeofGroupSourceReq = C.sizeof_struct_group_source_req
61
)
62
63
+type sysSockaddrStorage C.struct_sockaddr_storage
64
+
65
+type sysSockaddrInet C.struct_sockaddr_in
66
+
67
type sysIPMreq C.struct_ip_mreq
68
69
type sysIPMreqn C.struct_ip_mreqn
70
71
type sysIPMreqSource C.struct_ip_mreq_source
72
+
73
+type sysGroupReq C.struct_group_req
74
+
75
+type sysGroupSourceReq C.struct_group_source_req
Godeps/_workspace/src/golang.org/x/net/ipv4/defs_linux.go
renamed
+40
-11
@@ -9,7 +9,10 @@
9
package ipv4
10
11
/*
12
+#include <time.h>
13
+
14
#include <linux/errqueue.h>
15
+#include <linux/icmp.h>
16
#include <linux/in.h>
17
*/
18
import "C"
@@ -47,14 +50,24 @@ const (
50
sysIP_BLOCK_SOURCE = C.IP_BLOCK_SOURCE
51
sysIP_ADD_SOURCE_MEMBERSHIP = C.IP_ADD_SOURCE_MEMBERSHIP
52
sysIP_DROP_SOURCE_MEMBERSHIP = C.IP_DROP_SOURCE_MEMBERSHIP
53
+ sysIP_MSFILTER = C.IP_MSFILTER
54
+ sysMCAST_JOIN_GROUP = C.MCAST_JOIN_GROUP
55
+ sysMCAST_LEAVE_GROUP = C.MCAST_LEAVE_GROUP
56
+ sysMCAST_JOIN_SOURCE_GROUP = C.MCAST_JOIN_SOURCE_GROUP
57
+ sysMCAST_LEAVE_SOURCE_GROUP = C.MCAST_LEAVE_SOURCE_GROUP
58
+ sysMCAST_BLOCK_SOURCE = C.MCAST_BLOCK_SOURCE
59
+ sysMCAST_UNBLOCK_SOURCE = C.MCAST_UNBLOCK_SOURCE
60
+ sysMCAST_MSFILTER = C.MCAST_MSFILTER
61
sysIP_MULTICAST_ALL = C.IP_MULTICAST_ALL
62
52
- sysIP_PMTUDISC_DONT = C.IP_PMTUDISC_DONT
53
- sysIP_PMTUDISC_WANT = C.IP_PMTUDISC_WANT
54
- sysIP_PMTUDISC_DO = C.IP_PMTUDISC_DO
55
- sysIP_PMTUDISC_PROBE = C.IP_PMTUDISC_PROBE
56
- sysIP_PMTUDISC_INTERFACE = C.IP_PMTUDISC_INTERFACE
57
- sysIP_PMTUDISC_OMIT = C.IP_PMTUDISC_OMIT
63
+ //sysIP_PMTUDISC_DONT = C.IP_PMTUDISC_DONT
64
+ //sysIP_PMTUDISC_WANT = C.IP_PMTUDISC_WANT
65
+ //sysIP_PMTUDISC_DO = C.IP_PMTUDISC_DO
66
+ //sysIP_PMTUDISC_PROBE = C.IP_PMTUDISC_PROBE
67
+ //sysIP_PMTUDISC_INTERFACE = C.IP_PMTUDISC_INTERFACE
68
+ //sysIP_PMTUDISC_OMIT = C.IP_PMTUDISC_OMIT
69
+
70
+ sysICMP_FILTER = C.ICMP_FILTER
71
72
sysSO_EE_ORIGIN_NONE = C.SO_EE_ORIGIN_NONE
73
sysSO_EE_ORIGIN_LOCAL = C.SO_EE_ORIGIN_LOCAL
@@ -63,14 +76,24 @@ const (
76
sysSO_EE_ORIGIN_TXSTATUS = C.SO_EE_ORIGIN_TXSTATUS
77
sysSO_EE_ORIGIN_TIMESTAMPING = C.SO_EE_ORIGIN_TIMESTAMPING
78
66
- sysSizeofInetPktinfo = C.sizeof_struct_in_pktinfo
67
- sysSizeofSockExtendedErr = C.sizeof_struct_sock_extended_err
79
+ sysSizeofKernelSockaddrStorage = C.sizeof_struct___kernel_sockaddr_storage
80
+ sysSizeofSockaddrInet = C.sizeof_struct_sockaddr_in
81
+ sysSizeofInetPktinfo = C.sizeof_struct_in_pktinfo
82
+ sysSizeofSockExtendedErr = C.sizeof_struct_sock_extended_err
83
69
- sysSizeofIPMreq = C.sizeof_struct_ip_mreq
70
- sysSizeofIPMreqn = C.sizeof_struct_ip_mreqn
71
- sysSizeofIPMreqSource = C.sizeof_struct_ip_mreq_source
84
+ sysSizeofIPMreq = C.sizeof_struct_ip_mreq
85
+ sysSizeofIPMreqn = C.sizeof_struct_ip_mreqn
86
+ sysSizeofIPMreqSource = C.sizeof_struct_ip_mreq_source
87
+ sysSizeofGroupReq = C.sizeof_struct_group_req
88
+ sysSizeofGroupSourceReq = C.sizeof_struct_group_source_req
89
+
90
+ sysSizeofICMPFilter = C.sizeof_struct_icmp_filter
91
)
92
93
+type sysKernelSockaddrStorage C.struct___kernel_sockaddr_storage
94
+
95
+type sysSockaddrInet C.struct_sockaddr_in
96
+
97
type sysInetPktinfo C.struct_in_pktinfo
98
99
type sysSockExtendedErr C.struct_sock_extended_err
@@ -80,3 +103,9 @@ type sysIPMreq C.struct_ip_mreq
103
type sysIPMreqn C.struct_ip_mreqn
104
105
type sysIPMreqSource C.struct_ip_mreq_source
106
+
107
+type sysGroupReq C.struct_group_req
108
+
109
+type sysGroupSourceReq C.struct_group_source_req
110
+
111
+type sysICMPFilter C.struct_icmp_filter
Godeps/_workspace/src/golang.org/x/net/ipv4/defs_netbsd.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/defs_openbsd.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/defs_solaris.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/dgramopt_posix.go
new
+251
@@ -0,0 +1,251 @@
1
+// Copyright 2012 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+// +build darwin dragonfly freebsd linux netbsd openbsd windows
6
+
7
+package ipv4
8
+
9
+import (
10
+ "net"
11
+ "syscall"
12
+)
13
+
14
+// MulticastTTL returns the time-to-live field value for outgoing
15
+// multicast packets.
16
+func (c *dgramOpt) MulticastTTL() (int, error) {
17
+ if !c.ok() {
18
+ return 0, syscall.EINVAL
19
+ }
20
+ fd, err := c.sysfd()
21
+ if err != nil {
22
+ return 0, err
23
+ }
24
+ return getInt(fd, &sockOpts[ssoMulticastTTL])
25
+}
26
+
27
+// SetMulticastTTL sets the time-to-live field value for future
28
+// outgoing multicast packets.
29
+func (c *dgramOpt) SetMulticastTTL(ttl int) error {
30
+ if !c.ok() {
31
+ return syscall.EINVAL
32
+ }
33
+ fd, err := c.sysfd()
34
+ if err != nil {
35
+ return err
36
+ }
37
+ return setInt(fd, &sockOpts[ssoMulticastTTL], ttl)
38
+}
39
+
40
+// MulticastInterface returns the default interface for multicast
41
+// packet transmissions.
42
+func (c *dgramOpt) MulticastInterface() (*net.Interface, error) {
43
+ if !c.ok() {
44
+ return nil, syscall.EINVAL
45
+ }
46
+ fd, err := c.sysfd()
47
+ if err != nil {
48
+ return nil, err
49
+ }
50
+ return getInterface(fd, &sockOpts[ssoMulticastInterface])
51
+}
52
+
53
+// SetMulticastInterface sets the default interface for future
54
+// multicast packet transmissions.
55
+func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error {
56
+ if !c.ok() {
57
+ return syscall.EINVAL
58
+ }
59
+ fd, err := c.sysfd()
60
+ if err != nil {
61
+ return err
62
+ }
63
+ return setInterface(fd, &sockOpts[ssoMulticastInterface], ifi)
64
+}
65
+
66
+// MulticastLoopback reports whether transmitted multicast packets
67
+// should be copied and send back to the originator.
68
+func (c *dgramOpt) MulticastLoopback() (bool, error) {
69
+ if !c.ok() {
70
+ return false, syscall.EINVAL
71
+ }
72
+ fd, err := c.sysfd()
73
+ if err != nil {
74
+ return false, err
75
+ }
76
+ on, err := getInt(fd, &sockOpts[ssoMulticastLoopback])
77
+ if err != nil {
78
+ return false, err
79
+ }
80
+ return on == 1, nil
81
+}
82
+
83
+// SetMulticastLoopback sets whether transmitted multicast packets
84
+// should be copied and send back to the originator.
85
+func (c *dgramOpt) SetMulticastLoopback(on bool) error {
86
+ if !c.ok() {
87
+ return syscall.EINVAL
88
+ }
89
+ fd, err := c.sysfd()
90
+ if err != nil {
91
+ return err
92
+ }
93
+ return setInt(fd, &sockOpts[ssoMulticastLoopback], boolint(on))
94
+}
95
+
96
+// JoinGroup joins the group address group on the interface ifi.
97
+// By default all sources that can cast data to group are accepted.
98
+// It's possible to mute and unmute data transmission from a specific
99
+// source by using ExcludeSourceSpecificGroup and
100
+// IncludeSourceSpecificGroup.
101
+// JoinGroup uses the system assigned multicast interface when ifi is
102
+// nil, although this is not recommended because the assignment
103
+// depends on platforms and sometimes it might require routing
104
+// configuration.
105
+func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error {
106
+ if !c.ok() {
107
+ return syscall.EINVAL
108
+ }
109
+ fd, err := c.sysfd()
110
+ if err != nil {
111
+ return err
112
+ }
113
+ grp := netAddrToIP4(group)
114
+ if grp == nil {
115
+ return errMissingAddress
116
+ }
117
+ return setGroup(fd, &sockOpts[ssoJoinGroup], ifi, grp)
118
+}
119
+
120
+// LeaveGroup leaves the group address group on the interface ifi
121
+// regardless of whether the group is any-source group or
122
+// source-specific group.
123
+func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error {
124
+ if !c.ok() {
125
+ return syscall.EINVAL
126
+ }
127
+ fd, err := c.sysfd()
128
+ if err != nil {
129
+ return err
130
+ }
131
+ grp := netAddrToIP4(group)
132
+ if grp == nil {
133
+ return errMissingAddress
134
+ }
135
+ return setGroup(fd, &sockOpts[ssoLeaveGroup], ifi, grp)
136
+}
137
+
138
+// JoinSourceSpecificGroup joins the source-specific group comprising
139
+// group and source on the interface ifi.
140
+// JoinSourceSpecificGroup uses the system assigned multicast
141
+// interface when ifi is nil, although this is not recommended because
142
+// the assignment depends on platforms and sometimes it might require
143
+// routing configuration.
144
+func (c *dgramOpt) JoinSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
145
+ if !c.ok() {
146
+ return syscall.EINVAL
147
+ }
148
+ fd, err := c.sysfd()
149
+ if err != nil {
150
+ return err
151
+ }
152
+ grp := netAddrToIP4(group)
153
+ if grp == nil {
154
+ return errMissingAddress
155
+ }
156
+ src := netAddrToIP4(source)
157
+ if src == nil {
158
+ return errMissingAddress
159
+ }
160
+ return setSourceGroup(fd, &sockOpts[ssoJoinSourceGroup], ifi, grp, src)
161
+}
162
+
163
+// LeaveSourceSpecificGroup leaves the source-specific group on the
164
+// interface ifi.
165
+func (c *dgramOpt) LeaveSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
166
+ if !c.ok() {
167
+ return syscall.EINVAL
168
+ }
169
+ fd, err := c.sysfd()
170
+ if err != nil {
171
+ return err
172
+ }
173
+ grp := netAddrToIP4(group)
174
+ if grp == nil {
175
+ return errMissingAddress
176
+ }
177
+ src := netAddrToIP4(source)
178
+ if src == nil {
179
+ return errMissingAddress
180
+ }
181
+ return setSourceGroup(fd, &sockOpts[ssoLeaveSourceGroup], ifi, grp, src)
182
+}
183
+
184
+// ExcludeSourceSpecificGroup excludes the source-specific group from
185
+// the already joined any-source groups by JoinGroup on the interface
186
+// ifi.
187
+func (c *dgramOpt) ExcludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
188
+ if !c.ok() {
189
+ return syscall.EINVAL
190
+ }
191
+ fd, err := c.sysfd()
192
+ if err != nil {
193
+ return err
194
+ }
195
+ grp := netAddrToIP4(group)
196
+ if grp == nil {
197
+ return errMissingAddress
198
+ }
199
+ src := netAddrToIP4(source)
200
+ if src == nil {
201
+ return errMissingAddress
202
+ }
203
+ return setSourceGroup(fd, &sockOpts[ssoBlockSourceGroup], ifi, grp, src)
204
+}
205
+
206
+// IncludeSourceSpecificGroup includes the excluded source-specific
207
+// group by ExcludeSourceSpecificGroup again on the interface ifi.
208
+func (c *dgramOpt) IncludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
209
+ if !c.ok() {
210
+ return syscall.EINVAL
211
+ }
212
+ fd, err := c.sysfd()
213
+ if err != nil {
214
+ return err
215
+ }
216
+ grp := netAddrToIP4(group)
217
+ if grp == nil {
218
+ return errMissingAddress
219
+ }
220
+ src := netAddrToIP4(source)
221
+ if src == nil {
222
+ return errMissingAddress
223
+ }
224
+ return setSourceGroup(fd, &sockOpts[ssoUnblockSourceGroup], ifi, grp, src)
225
+}
226
+
227
+// ICMPFilter returns an ICMP filter.
228
+// Currently only Linux supports this.
229
+func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) {
230
+ if !c.ok() {
231
+ return nil, syscall.EINVAL
232
+ }
233
+ fd, err := c.sysfd()
234
+ if err != nil {
235
+ return nil, err
236
+ }
237
+ return getICMPFilter(fd, &sockOpts[ssoICMPFilter])
238
+}
239
+
240
+// SetICMPFilter deploys the ICMP filter.
241
+// Currently only Linux supports this.
242
+func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error {
243
+ if !c.ok() {
244
+ return syscall.EINVAL
245
+ }
246
+ fd, err := c.sysfd()
247
+ if err != nil {
248
+ return err
249
+ }
250
+ return setICMPFilter(fd, &sockOpts[ssoICMPFilter], f)
251
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/dgramopt_stub.go
new
+106
@@ -0,0 +1,106 @@
1
+// Copyright 2012 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+// +build nacl plan9 solaris
6
+
7
+package ipv4
8
+
9
+import "net"
10
+
11
+// MulticastTTL returns the time-to-live field value for outgoing
12
+// multicast packets.
13
+func (c *dgramOpt) MulticastTTL() (int, error) {
14
+ return 0, errOpNoSupport
15
+}
16
+
17
+// SetMulticastTTL sets the time-to-live field value for future
18
+// outgoing multicast packets.
19
+func (c *dgramOpt) SetMulticastTTL(ttl int) error {
20
+ return errOpNoSupport
21
+}
22
+
23
+// MulticastInterface returns the default interface for multicast
24
+// packet transmissions.
25
+func (c *dgramOpt) MulticastInterface() (*net.Interface, error) {
26
+ return nil, errOpNoSupport
27
+}
28
+
29
+// SetMulticastInterface sets the default interface for future
30
+// multicast packet transmissions.
31
+func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error {
32
+ return errOpNoSupport
33
+}
34
+
35
+// MulticastLoopback reports whether transmitted multicast packets
36
+// should be copied and send back to the originator.
37
+func (c *dgramOpt) MulticastLoopback() (bool, error) {
38
+ return false, errOpNoSupport
39
+}
40
+
41
+// SetMulticastLoopback sets whether transmitted multicast packets
42
+// should be copied and send back to the originator.
43
+func (c *dgramOpt) SetMulticastLoopback(on bool) error {
44
+ return errOpNoSupport
45
+}
46
+
47
+// JoinGroup joins the group address group on the interface ifi.
48
+// By default all sources that can cast data to group are accepted.
49
+// It's possible to mute and unmute data transmission from a specific
50
+// source by using ExcludeSourceSpecificGroup and
51
+// IncludeSourceSpecificGroup.
52
+// JoinGroup uses the system assigned multicast interface when ifi is
53
+// nil, although this is not recommended because the assignment
54
+// depends on platforms and sometimes it might require routing
55
+// configuration.
56
+func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error {
57
+ return errOpNoSupport
58
+}
59
+
60
+// LeaveGroup leaves the group address group on the interface ifi
61
+// regardless of whether the group is any-source group or
62
+// source-specific group.
63
+func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error {
64
+ return errOpNoSupport
65
+}
66
+
67
+// JoinSourceSpecificGroup joins the source-specific group comprising
68
+// group and source on the interface ifi.
69
+// JoinSourceSpecificGroup uses the system assigned multicast
70
+// interface when ifi is nil, although this is not recommended because
71
+// the assignment depends on platforms and sometimes it might require
72
+// routing configuration.
73
+func (c *dgramOpt) JoinSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
74
+ return errOpNoSupport
75
+}
76
+
77
+// LeaveSourceSpecificGroup leaves the source-specific group on the
78
+// interface ifi.
79
+func (c *dgramOpt) LeaveSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
80
+ return errOpNoSupport
81
+}
82
+
83
+// ExcludeSourceSpecificGroup excludes the source-specific group from
84
+// the already joined any-source groups by JoinGroup on the interface
85
+// ifi.
86
+func (c *dgramOpt) ExcludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
87
+ return errOpNoSupport
88
+}
89
+
90
+// IncludeSourceSpecificGroup includes the excluded source-specific
91
+// group by ExcludeSourceSpecificGroup again on the interface ifi.
92
+func (c *dgramOpt) IncludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
93
+ return errOpNoSupport
94
+}
95
+
96
+// ICMPFilter returns an ICMP filter.
97
+// Currently only Linux supports this.
98
+func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) {
99
+ return nil, errOpNoSupport
100
+}
101
+
102
+// SetICMPFilter deploys the ICMP filter.
103
+// Currently only Linux supports this.
104
+func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error {
105
+ return errOpNoSupport
106
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/doc.go
renamed
+50
-4
@@ -6,9 +6,15 @@
6
// Protocol version 4.
7
//
8
// The package provides IP-level socket options that allow
9
-// manipulation of IPv4 facilities. The IPv4 and basic host
10
-// requirements for IPv4 are defined in RFC 791, RFC 1112 and RFC
11
-// 1122.
9
+// manipulation of IPv4 facilities.
10
+//
11
+// The IPv4 protocol and basic host requirements for IPv4 are defined
12
+// in RFC 791 and RFC 1122.
13
+// Host extensions for multicasting and socket interface extensions
14
+// for multicast source filters are defined in RFC 1112 and RFC 3678.
15
+// IGMPv1, IGMPv2 and IGMPv3 are defined in RFC 1112, RFC 2236 and RFC
16
+// 3376.
17
+// Source-specific multicast is defined in RFC 4607.
18
//
19
//
20
// Unicasting
@@ -34,7 +40,7 @@
40
// defer c.Close()
41
//
42
// The outgoing packets will be labeled DiffServ assured forwarding
37
-// class 1 low drop precedence, as known as AF11 packets.
43
+// class 1 low drop precedence, known as AF11 packets.
44
//
45
// if err := ipv4.NewConn(c).SetTOS(DiffServAF11); err != nil {
46
// // error handling
@@ -193,4 +199,44 @@
199
// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 250)}); err != nil {
200
// // error handling
201
// }
202
+//
203
+//
204
+// Source-specific multicasting
205
+//
206
+// An application that uses PacketConn or RawConn on IGMPv3 supported
207
+// platform is able to join source-specific multicast groups.
208
+// The application may use JoinSourceSpecificGroup and
209
+// LeaveSourceSpecificGroup for the operation known as "include" mode,
210
+//
211
+// ssmgroup := net.UDPAddr{IP: net.IPv4(232, 7, 8, 9)}
212
+// ssmsource := net.UDPAddr{IP: net.IPv4(192, 168, 0, 1)})
213
+// if err := p.JoinSourceSpecificGroup(en0, &ssmgroup, &ssmsource); err != nil {
214
+// // error handling
215
+// }
216
+// if err := p.LeaveSourceSpecificGroup(en0, &ssmgroup, &ssmsource); err != nil {
217
+// // error handling
218
+// }
219
+//
220
+// or JoinGroup, ExcludeSourceSpecificGroup,
221
+// IncludeSourceSpecificGroup and LeaveGroup for the operation known
222
+// as "exclude" mode.
223
+//
224
+// exclsource := net.UDPAddr{IP: net.IPv4(192, 168, 0, 254)}
225
+// if err := p.JoinGroup(en0, &ssmgroup); err != nil {
226
+// // error handling
227
+// }
228
+// if err := p.ExcludeSourceSpecificGroup(en0, &ssmgroup, &exclsource); err != nil {
229
+// // error handling
230
+// }
231
+// if err := p.LeaveGroup(en0, &ssmgroup); err != nil {
232
+// // error handling
233
+// }
234
+//
235
+// Note that it depends on each platform implementation what happens
236
+// when an application which runs on IGMPv3 unsupported platform uses
237
+// JoinSourceSpecificGroup and LeaveSourceSpecificGroup.
238
+// In general the platform tries to fall back to conversations using
239
+// IGMPv1 or IGMPv2 and starts to listen to multicast traffic.
240
+// In the fallback case, ExcludeSourceSpecificGroup and
241
+// IncludeSourceSpecificGroup may return an error.
242
package ipv4
Godeps/_workspace/src/golang.org/x/net/ipv4/endpoint.go
renamed
+7
-1
@@ -97,11 +97,17 @@ func (c *PacketConn) Close() error {
97
// NewPacketConn returns a new PacketConn using c as its underlying
98
// transport.
99
func NewPacketConn(c net.PacketConn) *PacketConn {
100
- return &PacketConn{
100
+ p := &PacketConn{
101
genericOpt: genericOpt{Conn: c.(net.Conn)},
102
dgramOpt: dgramOpt{PacketConn: c},
103
payloadHandler: payloadHandler{PacketConn: c},
104
}
105
+ if _, ok := c.(*net.IPConn); ok && sockOpts[ssoStripHeader].name > 0 {
106
+ if fd, err := p.payloadHandler.sysfd(); err == nil {
107
+ setInt(fd, &sockOpts[ssoStripHeader], boolint(true))
108
+ }
109
+ }
110
+ return p
111
}
112
113
// A RawConn represents a packet network endpoint that uses the IPv4
Godeps/_workspace/src/golang.org/x/net/ipv4/example_test.go
new
+223
@@ -0,0 +1,223 @@
1
+// Copyright 2012 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv4_test
6
+
7
+import (
8
+ "fmt"
9
+ "log"
10
+ "net"
11
+ "os"
12
+ "runtime"
13
+ "time"
14
+
15
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
16
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/ipv4"
17
+ "golang.org/x/net/icmp"
18
+)
19
+
20
+func ExampleConn_markingTCP() {
21
+ ln, err := net.Listen("tcp4", "0.0.0.0:1024")
22
+ if err != nil {
23
+ log.Fatal(err)
24
+ }
25
+ defer ln.Close()
26
+
27
+ for {
28
+ c, err := ln.Accept()
29
+ if err != nil {
30
+ log.Fatal(err)
31
+ }
32
+ go func(c net.Conn) {
33
+ defer c.Close()
34
+ p := ipv4.NewConn(c)
35
+ if err := p.SetTOS(iana.DiffServAF11); err != nil {
36
+ log.Fatal(err)
37
+ }
38
+ if err := p.SetTTL(128); err != nil {
39
+ log.Fatal(err)
40
+ }
41
+ if _, err := c.Write([]byte("HELLO-R-U-THERE-ACK")); err != nil {
42
+ log.Fatal(err)
43
+ }
44
+ }(c)
45
+ }
46
+}
47
+
48
+func ExamplePacketConn_servingOneShotMulticastDNS() {
49
+ c, err := net.ListenPacket("udp4", "0.0.0.0:5353") // mDNS over UDP
50
+ if err != nil {
51
+ log.Fatal(err)
52
+ }
53
+ defer c.Close()
54
+ p := ipv4.NewPacketConn(c)
55
+
56
+ en0, err := net.InterfaceByName("en0")
57
+ if err != nil {
58
+ log.Fatal(err)
59
+ }
60
+ mDNSLinkLocal := net.UDPAddr{IP: net.IPv4(224, 0, 0, 251)}
61
+ if err := p.JoinGroup(en0, &mDNSLinkLocal); err != nil {
62
+ log.Fatal(err)
63
+ }
64
+ defer p.LeaveGroup(en0, &mDNSLinkLocal)
65
+ if err := p.SetControlMessage(ipv4.FlagDst, true); err != nil {
66
+ log.Fatal(err)
67
+ }
68
+
69
+ b := make([]byte, 1500)
70
+ for {
71
+ _, cm, peer, err := p.ReadFrom(b)
72
+ if err != nil {
73
+ log.Fatal(err)
74
+ }
75
+ if !cm.Dst.IsMulticast() || !cm.Dst.Equal(mDNSLinkLocal.IP) {
76
+ continue
77
+ }
78
+ answers := []byte("FAKE-MDNS-ANSWERS") // fake mDNS answers, you need to implement this
79
+ if _, err := p.WriteTo(answers, nil, peer); err != nil {
80
+ log.Fatal(err)
81
+ }
82
+ }
83
+}
84
+
85
+func ExamplePacketConn_tracingIPPacketRoute() {
86
+ // Tracing an IP packet route to www.google.com.
87
+
88
+ const host = "www.google.com"
89
+ ips, err := net.LookupIP(host)
90
+ if err != nil {
91
+ log.Fatal(err)
92
+ }
93
+ var dst net.IPAddr
94
+ for _, ip := range ips {
95
+ if ip.To4() != nil {
96
+ dst.IP = ip
97
+ fmt.Printf("using %v for tracing an IP packet route to %s\n", dst.IP, host)
98
+ break
99
+ }
100
+ }
101
+ if dst.IP == nil {
102
+ log.Fatal("no A record found")
103
+ }
104
+
105
+ c, err := net.ListenPacket(fmt.Sprintf("ip4:%d", iana.ProtocolICMP), "0.0.0.0") // ICMP for IPv4
106
+ if err != nil {
107
+ log.Fatal(err)
108
+ }
109
+ defer c.Close()
110
+ p := ipv4.NewPacketConn(c)
111
+
112
+ if err := p.SetControlMessage(ipv4.FlagTTL|ipv4.FlagSrc|ipv4.FlagDst|ipv4.FlagInterface, true); err != nil {
113
+ log.Fatal(err)
114
+ }
115
+ wm := icmp.Message{
116
+ Type: ipv4.ICMPTypeEcho, Code: 0,
117
+ Body: &icmp.Echo{
118
+ ID: os.Getpid() & 0xffff,
119
+ Data: []byte("HELLO-R-U-THERE"),
120
+ },
121
+ }
122
+
123
+ rb := make([]byte, 1500)
124
+ for i := 1; i <= 64; i++ { // up to 64 hops
125
+ wm.Body.(*icmp.Echo).Seq = i
126
+ wb, err := wm.Marshal(nil)
127
+ if err != nil {
128
+ log.Fatal(err)
129
+ }
130
+ if err := p.SetTTL(i); err != nil {
131
+ log.Fatal(err)
132
+ }
133
+
134
+ // In the real world usually there are several
135
+ // multiple traffic-engineered paths for each hop.
136
+ // You may need to probe a few times to each hop.
137
+ begin := time.Now()
138
+ if _, err := p.WriteTo(wb, nil, &dst); err != nil {
139
+ log.Fatal(err)
140
+ }
141
+ if err := p.SetReadDeadline(time.Now().Add(3 * time.Second)); err != nil {
142
+ log.Fatal(err)
143
+ }
144
+ n, cm, peer, err := p.ReadFrom(rb)
145
+ if err != nil {
146
+ if err, ok := err.(net.Error); ok && err.Timeout() {
147
+ fmt.Printf("%v\t*\n", i)
148
+ continue
149
+ }
150
+ log.Fatal(err)
151
+ }
152
+ rm, err := icmp.ParseMessage(iana.ProtocolICMP, rb[:n])
153
+ if err != nil {
154
+ log.Fatal(err)
155
+ }
156
+ rtt := time.Since(begin)
157
+
158
+ // In the real world you need to determine whether the
159
+ // received message is yours using ControlMessage.Src,
160
+ // ControlMessage.Dst, icmp.Echo.ID and icmp.Echo.Seq.
161
+ switch rm.Type {
162
+ case ipv4.ICMPTypeTimeExceeded:
163
+ names, _ := net.LookupAddr(peer.String())
164
+ fmt.Printf("%d\t%v %+v %v\n\t%+v\n", i, peer, names, rtt, cm)
165
+ case ipv4.ICMPTypeEchoReply:
166
+ names, _ := net.LookupAddr(peer.String())
167
+ fmt.Printf("%d\t%v %+v %v\n\t%+v\n", i, peer, names, rtt, cm)
168
+ return
169
+ default:
170
+ log.Printf("unknown ICMP message: %+v\n", rm)
171
+ }
172
+ }
173
+}
174
+
175
+func ExampleRawConn_advertisingOSPFHello() {
176
+ c, err := net.ListenPacket(fmt.Sprintf("ip4:%d", iana.ProtocolOSPFIGP), "0.0.0.0") // OSPF for IPv4
177
+ if err != nil {
178
+ log.Fatal(err)
179
+ }
180
+ defer c.Close()
181
+ r, err := ipv4.NewRawConn(c)
182
+ if err != nil {
183
+ log.Fatal(err)
184
+ }
185
+
186
+ en0, err := net.InterfaceByName("en0")
187
+ if err != nil {
188
+ log.Fatal(err)
189
+ }
190
+ allSPFRouters := net.IPAddr{IP: net.IPv4(224, 0, 0, 5)}
191
+ if err := r.JoinGroup(en0, &allSPFRouters); err != nil {
192
+ log.Fatal(err)
193
+ }
194
+ defer r.LeaveGroup(en0, &allSPFRouters)
195
+
196
+ hello := make([]byte, 24) // fake hello data, you need to implement this
197
+ ospf := make([]byte, 24) // fake ospf header, you need to implement this
198
+ ospf[0] = 2 // version 2
199
+ ospf[1] = 1 // hello packet
200
+ ospf = append(ospf, hello...)
201
+ iph := &ipv4.Header{
202
+ Version: ipv4.Version,
203
+ Len: ipv4.HeaderLen,
204
+ TOS: iana.DiffServCS6,
205
+ TotalLen: ipv4.HeaderLen + len(ospf),
206
+ TTL: 1,
207
+ Protocol: iana.ProtocolOSPFIGP,
208
+ Dst: allSPFRouters.IP.To4(),
209
+ }
210
+
211
+ var cm *ipv4.ControlMessage
212
+ switch runtime.GOOS {
213
+ case "darwin", "linux":
214
+ cm = &ipv4.ControlMessage{IfIndex: en0.Index}
215
+ default:
216
+ if err := r.SetMulticastInterface(en0); err != nil {
217
+ log.Fatal(err)
218
+ }
219
+ }
220
+ if err := r.WriteTo(iph, ospf, cm); err != nil {
221
+ log.Fatal(err)
222
+ }
223
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/gen.go
renamed
+13
-6
@@ -52,18 +52,25 @@ func genzsys() error {
52
if err != nil {
53
return err
54
}
55
- switch runtime.GOOS {
56
- case "dragonfly", "solaris":
57
- // The ipv4 pacakge still supports go1.2, and so we
58
- // need to take care of additional platforms in go1.3
59
- // and above for working with go1.2.
55
+ // The ipv4 pacakge still supports go1.2, and so we need to
56
+ // take care of additional platforms in go1.3 and above for
57
+ // working with go1.2.
58
+ switch {
59
+ case runtime.GOOS == "dragonfly" || runtime.GOOS == "solaris":
60
b = bytes.Replace(b, []byte("package ipv4\n"), []byte("// +build "+runtime.GOOS+"\n\npackage ipv4\n"), 1)
61
+ case runtime.GOOS == "linux" && (runtime.GOARCH == "arm64" || runtime.GOARCH == "ppc64" || runtime.GOARCH == "ppc64le"):
62
+ b = bytes.Replace(b, []byte("package ipv4\n"), []byte("// +build "+runtime.GOOS+","+runtime.GOARCH+"\n\npackage ipv4\n"), 1)
63
}
64
b, err = format.Source(b)
65
if err != nil {
66
return err
67
}
66
- if err := ioutil.WriteFile("zsys_"+runtime.GOOS+".go", b, 0644); err != nil {
68
+ zsys := "zsys_" + runtime.GOOS + ".go"
69
+ switch runtime.GOOS {
70
+ case "freebsd", "linux":
71
+ zsys = "zsys_" + runtime.GOOS + "_" + runtime.GOARCH + ".go"
72
+ }
73
+ if err := ioutil.WriteFile(zsys, b, 0644); err != nil {
74
return err
75
}
76
return nil
Godeps/_workspace/src/golang.org/x/net/ipv4/genericopt_posix.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/genericopt_stub.go
renamed
+6
-4
@@ -6,22 +6,24 @@
6
7
package ipv4
8
9
+// TOS returns the type-of-service field value for outgoing packets.
10
func (c *genericOpt) TOS() (int, error) {
10
- // TODO(mikio): Implement this
11
return 0, errOpNoSupport
12
}
13
14
+// SetTOS sets the type-of-service field value for future outgoing
15
+// packets.
16
func (c *genericOpt) SetTOS(tos int) error {
15
- // TODO(mikio): Implement this
17
return errOpNoSupport
18
}
19
20
+// TTL returns the time-to-live field value for outgoing packets.
21
func (c *genericOpt) TTL() (int, error) {
20
- // TODO(mikio): Implement this
22
return 0, errOpNoSupport
23
}
24
25
+// SetTTL sets the time-to-live field value for future outgoing
26
+// packets.
27
func (c *genericOpt) SetTTL(ttl int) error {
25
- // TODO(mikio): Implement this
28
return errOpNoSupport
29
}
Godeps/_workspace/src/golang.org/x/net/ipv4/header.go
renamed
+41
-55
@@ -21,33 +21,12 @@ var (
21
errInvalidConnType = errors.New("invalid conn type")
22
)
23
24
-// References:
25
-//
26
-// RFC 791 Internet Protocol
27
-// http://tools.ietf.org/html/rfc791
28
-// RFC 1112 Host Extensions for IP Multicasting
29
-// http://tools.ietf.org/html/rfc1112
30
-// RFC 1122 Requirements for Internet Hosts
31
-// http://tools.ietf.org/html/rfc1122
32
-
24
const (
25
Version = 4 // protocol version
26
HeaderLen = 20 // header length without extension headers
27
maxHeaderLen = 60 // sensible default, revisit if later RFCs define new usage of version and header length fields
28
)
29
39
-const (
40
- posTOS = 1 // type-of-service
41
- posTotalLen = 2 // packet total length
42
- posID = 4 // identification
43
- posFragOff = 6 // fragment offset
44
- posTTL = 8 // time-to-live
45
- posProtocol = 9 // next protocol
46
- posChecksum = 10 // checksum
47
- posSrc = 12 // source address
48
- posDst = 16 // destination address
49
-)
50
-
30
type HeaderFlags int
31
32
const (
@@ -79,10 +58,6 @@ func (h *Header) String() string {
58
return fmt.Sprintf("ver: %v, hdrlen: %v, tos: %#x, totallen: %v, id: %#x, flags: %#x, fragoff: %#x, ttl: %v, proto: %v, cksum: %#x, src: %v, dst: %v", h.Version, h.Len, h.TOS, h.TotalLen, h.ID, h.Flags, h.FragOff, h.TTL, h.Protocol, h.Checksum, h.Src, h.Dst)
59
}
60
82
-// Please refer to the online manual; IP(4) on Darwin, FreeBSD and
83
-// OpenBSD. IP(7) on Linux.
84
-const supportsNewIPInput = runtime.GOOS == "linux" || runtime.GOOS == "openbsd"
85
-
61
// Marshal returns the binary encoding of the IPv4 header h.
62
func (h *Header) Marshal() ([]byte, error) {
63
if h == nil {
@@ -94,24 +69,26 @@ func (h *Header) Marshal() ([]byte, error) {
69
hdrlen := HeaderLen + len(h.Options)
70
b := make([]byte, hdrlen)
71
b[0] = byte(Version<<4 | (hdrlen >> 2 & 0x0f))
97
- b[posTOS] = byte(h.TOS)
72
+ b[1] = byte(h.TOS)
73
flagsAndFragOff := (h.FragOff & 0x1fff) | int(h.Flags<<13)
99
- if supportsNewIPInput {
100
- b[posTotalLen], b[posTotalLen+1] = byte(h.TotalLen>>8), byte(h.TotalLen)
101
- b[posFragOff], b[posFragOff+1] = byte(flagsAndFragOff>>8), byte(flagsAndFragOff)
102
- } else {
103
- *(*uint16)(unsafe.Pointer(&b[posTotalLen : posTotalLen+1][0])) = uint16(h.TotalLen)
104
- *(*uint16)(unsafe.Pointer(&b[posFragOff : posFragOff+1][0])) = uint16(flagsAndFragOff)
74
+ switch runtime.GOOS {
75
+ case "darwin", "dragonfly", "freebsd", "netbsd":
76
+ // TODO(mikio): fix potential misaligned memory access
77
+ *(*uint16)(unsafe.Pointer(&b[2:3][0])) = uint16(h.TotalLen)
78
+ *(*uint16)(unsafe.Pointer(&b[6:7][0])) = uint16(flagsAndFragOff)
79
+ default:
80
+ b[2], b[3] = byte(h.TotalLen>>8), byte(h.TotalLen)
81
+ b[6], b[7] = byte(flagsAndFragOff>>8), byte(flagsAndFragOff)
82
}
106
- b[posID], b[posID+1] = byte(h.ID>>8), byte(h.ID)
107
- b[posTTL] = byte(h.TTL)
108
- b[posProtocol] = byte(h.Protocol)
109
- b[posChecksum], b[posChecksum+1] = byte(h.Checksum>>8), byte(h.Checksum)
83
+ b[4], b[5] = byte(h.ID>>8), byte(h.ID)
84
+ b[8] = byte(h.TTL)
85
+ b[9] = byte(h.Protocol)
86
+ b[10], b[11] = byte(h.Checksum>>8), byte(h.Checksum)
87
if ip := h.Src.To4(); ip != nil {
111
- copy(b[posSrc:posSrc+net.IPv4len], ip[:net.IPv4len])
88
+ copy(b[12:16], ip[:net.IPv4len])
89
}
90
if ip := h.Dst.To4(); ip != nil {
114
- copy(b[posDst:posDst+net.IPv4len], ip[:net.IPv4len])
91
+ copy(b[16:20], ip[:net.IPv4len])
92
} else {
93
return nil, errMissingAddress
94
}
@@ -133,28 +110,37 @@ func ParseHeader(b []byte) (*Header, error) {
110
if hdrlen > len(b) {
111
return nil, errBufferTooShort
112
}
136
- h := &Header{}
137
- h.Version = int(b[0] >> 4)
138
- h.Len = hdrlen
139
- h.TOS = int(b[posTOS])
140
- if supportsNewIPInput {
141
- h.TotalLen = int(b[posTotalLen])<<8 | int(b[posTotalLen+1])
142
- h.FragOff = int(b[posFragOff])<<8 | int(b[posFragOff+1])
143
- } else {
144
- h.TotalLen = int(*(*uint16)(unsafe.Pointer(&b[posTotalLen : posTotalLen+1][0])))
145
- if runtime.GOOS != "freebsd" || freebsdVersion < 1000000 {
113
+ h := &Header{
114
+ Version: int(b[0] >> 4),
115
+ Len: hdrlen,
116
+ TOS: int(b[1]),
117
+ ID: int(b[4])<<8 | int(b[5]),
118
+ TTL: int(b[8]),
119
+ Protocol: int(b[9]),
120
+ Checksum: int(b[10])<<8 | int(b[11]),
121
+ Src: net.IPv4(b[12], b[13], b[14], b[15]),
122
+ Dst: net.IPv4(b[16], b[17], b[18], b[19]),
123
+ }
124
+ switch runtime.GOOS {
125
+ case "darwin", "dragonfly", "netbsd":
126
+ // TODO(mikio): fix potential misaligned memory access
127
+ h.TotalLen = int(*(*uint16)(unsafe.Pointer(&b[2:3][0]))) + hdrlen
128
+ // TODO(mikio): fix potential misaligned memory access
129
+ h.FragOff = int(*(*uint16)(unsafe.Pointer(&b[6:7][0])))
130
+ case "freebsd":
131
+ // TODO(mikio): fix potential misaligned memory access
132
+ h.TotalLen = int(*(*uint16)(unsafe.Pointer(&b[2:3][0])))
133
+ if freebsdVersion < 1000000 {
134
h.TotalLen += hdrlen
135
}
148
- h.FragOff = int(*(*uint16)(unsafe.Pointer(&b[posFragOff : posFragOff+1][0])))
136
+ // TODO(mikio): fix potential misaligned memory access
137
+ h.FragOff = int(*(*uint16)(unsafe.Pointer(&b[6:7][0])))
138
+ default:
139
+ h.TotalLen = int(b[2])<<8 | int(b[3])
140
+ h.FragOff = int(b[6])<<8 | int(b[7])
141
}
142
h.Flags = HeaderFlags(h.FragOff&0xe000) >> 13
143
h.FragOff = h.FragOff & 0x1fff
152
- h.ID = int(b[posID])<<8 | int(b[posID+1])
153
- h.TTL = int(b[posTTL])
154
- h.Protocol = int(b[posProtocol])
155
- h.Checksum = int(b[posChecksum])<<8 | int(b[posChecksum+1])
156
- h.Src = net.IPv4(b[posSrc], b[posSrc+1], b[posSrc+2], b[posSrc+3])
157
- h.Dst = net.IPv4(b[posDst], b[posDst+1], b[posDst+2], b[posDst+3])
144
if hdrlen-HeaderLen > 0 {
145
h.Options = make([]byte, hdrlen-HeaderLen)
146
copy(h.Options, b[HeaderLen:])
Godeps/_workspace/src/golang.org/x/net/ipv4/header_test.go
renamed
+23
-13
@@ -70,35 +70,45 @@ var (
70
func TestMarshalHeader(t *testing.T) {
71
b, err := testHeader.Marshal()
72
if err != nil {
73
- t.Fatalf("ipv4.Header.Marshal failed: %v", err)
73
+ t.Fatal(err)
74
}
75
var wh []byte
76
- if supportsNewIPInput {
77
- wh = wireHeaderToKernel[:]
78
- } else {
76
+ switch runtime.GOOS {
77
+ case "darwin", "dragonfly", "netbsd":
78
wh = wireHeaderToTradBSDKernel[:]
79
+ case "freebsd":
80
+ if freebsdVersion < 1000000 {
81
+ wh = wireHeaderToTradBSDKernel[:]
82
+ } else {
83
+ wh = wireHeaderFromFreeBSD10Kernel[:]
84
+ }
85
+ default:
86
+ wh = wireHeaderToKernel[:]
87
}
88
if !bytes.Equal(b, wh) {
82
- t.Fatalf("ipv4.Header.Marshal failed: %#v not equal %#v", b, wh)
89
+ t.Fatalf("got %#v; want %#v", b, wh)
90
}
91
}
92
93
func TestParseHeader(t *testing.T) {
94
var wh []byte
88
- if supportsNewIPInput {
89
- wh = wireHeaderFromKernel[:]
90
- } else {
91
- if runtime.GOOS == "freebsd" && freebsdVersion >= 1000000 {
92
- wh = wireHeaderFromFreeBSD10Kernel[:]
93
- } else {
95
+ switch runtime.GOOS {
96
+ case "darwin", "dragonfly", "netbsd":
97
+ wh = wireHeaderFromTradBSDKernel[:]
98
+ case "freebsd":
99
+ if freebsdVersion < 1000000 {
100
wh = wireHeaderFromTradBSDKernel[:]
101
+ } else {
102
+ wh = wireHeaderFromFreeBSD10Kernel[:]
103
}
104
+ default:
105
+ wh = wireHeaderFromKernel[:]
106
}
107
h, err := ParseHeader(wh)
108
if err != nil {
99
- t.Fatalf("ipv4.ParseHeader failed: %v", err)
109
+ t.Fatal(err)
110
}
111
if !reflect.DeepEqual(h, testHeader) {
102
- t.Fatalf("ipv4.ParseHeader failed: %#v not equal %#v", h, testHeader)
112
+ t.Fatalf("got %#v; want %#v", h, testHeader)
113
}
114
}
Godeps/_workspace/src/golang.org/x/net/ipv4/helper.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/helper_stub.go
renamed
-4
@@ -7,21 +7,17 @@
7
package ipv4
8
9
func (c *genericOpt) sysfd() (int, error) {
10
- // TODO(mikio): Implement this
10
return 0, errOpNoSupport
11
}
12
13
func (c *dgramOpt) sysfd() (int, error) {
15
- // TODO(mikio): Implement this
14
return 0, errOpNoSupport
15
}
16
17
func (c *payloadHandler) sysfd() (int, error) {
20
- // TODO(mikio): Implement this
18
return 0, errOpNoSupport
19
}
20
21
func (c *packetHandler) sysfd() (int, error) {
25
- // TODO(mikio): Implement this
22
return 0, errOpNoSupport
23
}
Godeps/_workspace/src/golang.org/x/net/ipv4/helper_unix.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/helper_windows.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/iana.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/icmp.go
new
+57
@@ -0,0 +1,57 @@
1
+// Copyright 2013 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv4
6
+
7
+import "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
8
+
9
+// An ICMPType represents a type of ICMP message.
10
+type ICMPType int
11
+
12
+func (typ ICMPType) String() string {
13
+ s, ok := icmpTypes[typ]
14
+ if !ok {
15
+ return "<nil>"
16
+ }
17
+ return s
18
+}
19
+
20
+// Protocol returns the ICMPv4 protocol number.
21
+func (typ ICMPType) Protocol() int {
22
+ return iana.ProtocolICMP
23
+}
24
+
25
+// An ICMPFilter represents an ICMP message filter for incoming
26
+// packets. The filter belongs to a packet delivery path on a host and
27
+// it cannot interact with forwarding packets or tunnel-outer packets.
28
+//
29
+// Note: RFC 2460 defines a reasonable role model and it works not
30
+// only for IPv6 but IPv4. A node means a device that implements IP.
31
+// A router means a node that forwards IP packets not explicitly
32
+// addressed to itself, and a host means a node that is not a router.
33
+type ICMPFilter struct {
34
+ sysICMPFilter
35
+}
36
+
37
+// Accept accepts incoming ICMP packets including the type field value
38
+// typ.
39
+func (f *ICMPFilter) Accept(typ ICMPType) {
40
+ f.accept(typ)
41
+}
42
+
43
+// Block blocks incoming ICMP packets including the type field value
44
+// typ.
45
+func (f *ICMPFilter) Block(typ ICMPType) {
46
+ f.block(typ)
47
+}
48
+
49
+// SetAll sets the filter action to the filter.
50
+func (f *ICMPFilter) SetAll(block bool) {
51
+ f.setAll(block)
52
+}
53
+
54
+// WillBlock reports whether the ICMP type will be blocked.
55
+func (f *ICMPFilter) WillBlock(typ ICMPType) bool {
56
+ return f.willBlock(typ)
57
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/icmp_linux.go
new
+25
@@ -0,0 +1,25 @@
1
+// Copyright 2014 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv4
6
+
7
+func (f *sysICMPFilter) accept(typ ICMPType) {
8
+ f.Data &^= 1 << (uint32(typ) & 31)
9
+}
10
+
11
+func (f *sysICMPFilter) block(typ ICMPType) {
12
+ f.Data |= 1 << (uint32(typ) & 31)
13
+}
14
+
15
+func (f *sysICMPFilter) setAll(block bool) {
16
+ if block {
17
+ f.Data = 1<<32 - 1
18
+ } else {
19
+ f.Data = 0
20
+ }
21
+}
22
+
23
+func (f *sysICMPFilter) willBlock(typ ICMPType) bool {
24
+ return f.Data&(1<<(uint32(typ)&31)) != 0
25
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/icmp_stub.go
renamed
+10
-7
@@ -1,22 +1,25 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
1
+// Copyright 2014 The Go Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style
3
// license that can be found in the LICENSE file.
4
5
-package ipv6
5
+// +build !linux
6
+
7
+package ipv4
8
+
9
+const sysSizeofICMPFilter = 0x0
10
11
type sysICMPFilter struct {
8
- // TODO(mikio): Implement this
12
}
13
11
-func (f *sysICMPFilter) set(typ ICMPType, block bool) {
12
- // TODO(mikio): Implement this
14
+func (f *sysICMPFilter) accept(typ ICMPType) {
15
+}
16
+
17
+func (f *sysICMPFilter) block(typ ICMPType) {
18
}
19
20
func (f *sysICMPFilter) setAll(block bool) {
16
- // TODO(mikio): Implement this
21
}
22
23
func (f *sysICMPFilter) willBlock(typ ICMPType) bool {
20
- // TODO(mikio): Implement this
24
return false
25
}
Godeps/_workspace/src/golang.org/x/net/ipv4/icmp_test.go
new
+95
@@ -0,0 +1,95 @@
1
+// Copyright 2014 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv4_test
6
+
7
+import (
8
+ "net"
9
+ "reflect"
10
+ "runtime"
11
+ "testing"
12
+
13
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/ipv4"
14
+ "golang.org/x/net/internal/nettest"
15
+)
16
+
17
+var icmpStringTests = []struct {
18
+ in ipv4.ICMPType
19
+ out string
20
+}{
21
+ {ipv4.ICMPTypeDestinationUnreachable, "destination unreachable"},
22
+
23
+ {256, "<nil>"},
24
+}
25
+
26
+func TestICMPString(t *testing.T) {
27
+ for _, tt := range icmpStringTests {
28
+ s := tt.in.String()
29
+ if s != tt.out {
30
+ t.Errorf("got %s; want %s", s, tt.out)
31
+ }
32
+ }
33
+}
34
+
35
+func TestICMPFilter(t *testing.T) {
36
+ switch runtime.GOOS {
37
+ case "linux":
38
+ default:
39
+ t.Skipf("not supported on %s", runtime.GOOS)
40
+ }
41
+
42
+ var f ipv4.ICMPFilter
43
+ for _, toggle := range []bool{false, true} {
44
+ f.SetAll(toggle)
45
+ for _, typ := range []ipv4.ICMPType{
46
+ ipv4.ICMPTypeDestinationUnreachable,
47
+ ipv4.ICMPTypeEchoReply,
48
+ ipv4.ICMPTypeTimeExceeded,
49
+ ipv4.ICMPTypeParameterProblem,
50
+ } {
51
+ f.Accept(typ)
52
+ if f.WillBlock(typ) {
53
+ t.Errorf("ipv4.ICMPFilter.Set(%v, false) failed", typ)
54
+ }
55
+ f.Block(typ)
56
+ if !f.WillBlock(typ) {
57
+ t.Errorf("ipv4.ICMPFilter.Set(%v, true) failed", typ)
58
+ }
59
+ }
60
+ }
61
+}
62
+
63
+func TestSetICMPFilter(t *testing.T) {
64
+ switch runtime.GOOS {
65
+ case "linux":
66
+ default:
67
+ t.Skipf("not supported on %s", runtime.GOOS)
68
+ }
69
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
70
+ t.Skip(m)
71
+ }
72
+
73
+ c, err := net.ListenPacket("ip4:icmp", "127.0.0.1")
74
+ if err != nil {
75
+ t.Fatal(err)
76
+ }
77
+ defer c.Close()
78
+
79
+ p := ipv4.NewPacketConn(c)
80
+
81
+ var f ipv4.ICMPFilter
82
+ f.SetAll(true)
83
+ f.Accept(ipv4.ICMPTypeEcho)
84
+ f.Accept(ipv4.ICMPTypeEchoReply)
85
+ if err := p.SetICMPFilter(&f); err != nil {
86
+ t.Fatal(err)
87
+ }
88
+ kf, err := p.ICMPFilter()
89
+ if err != nil {
90
+ t.Fatal(err)
91
+ }
92
+ if !reflect.DeepEqual(kf, &f) {
93
+ t.Fatalf("got %#v; want %#v", kf, f)
94
+ }
95
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/mocktransponder_test.go
renamed
+1
-1
@@ -14,7 +14,7 @@ func acceptor(t *testing.T, ln net.Listener, done chan<- bool) {
14
15
c, err := ln.Accept()
16
if err != nil {
17
- t.Errorf("net.Listener.Accept failed: %v", err)
17
+ t.Error(err)
18
return
19
}
20
c.Close()
Godeps/_workspace/src/golang.org/x/net/ipv4/multicast_test.go
new
+334
@@ -0,0 +1,334 @@
1
+// Copyright 2012 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv4_test
6
+
7
+import (
8
+ "bytes"
9
+ "net"
10
+ "os"
11
+ "runtime"
12
+ "testing"
13
+ "time"
14
+
15
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
16
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/ipv4"
17
+ "golang.org/x/net/icmp"
18
+ "golang.org/x/net/internal/nettest"
19
+)
20
+
21
+var packetConnReadWriteMulticastUDPTests = []struct {
22
+ addr string
23
+ grp, src *net.UDPAddr
24
+}{
25
+ {"224.0.0.0:0", &net.UDPAddr{IP: net.IPv4(224, 0, 0, 254)}, nil}, // see RFC 4727
26
+
27
+ {"232.0.1.0:0", &net.UDPAddr{IP: net.IPv4(232, 0, 1, 254)}, &net.UDPAddr{IP: net.IPv4(127, 0, 0, 1)}}, // see RFC 5771
28
+}
29
+
30
+func TestPacketConnReadWriteMulticastUDP(t *testing.T) {
31
+ switch runtime.GOOS {
32
+ case "nacl", "plan9", "solaris", "windows":
33
+ t.Skipf("not supported on %s", runtime.GOOS)
34
+ }
35
+ ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
36
+ if ifi == nil {
37
+ t.Skipf("not available on %s", runtime.GOOS)
38
+ }
39
+
40
+ for _, tt := range packetConnReadWriteMulticastUDPTests {
41
+ c, err := net.ListenPacket("udp4", tt.addr)
42
+ if err != nil {
43
+ t.Fatal(err)
44
+ }
45
+ defer c.Close()
46
+
47
+ grp := *tt.grp
48
+ grp.Port = c.LocalAddr().(*net.UDPAddr).Port
49
+ p := ipv4.NewPacketConn(c)
50
+ defer p.Close()
51
+ if tt.src == nil {
52
+ if err := p.JoinGroup(ifi, &grp); err != nil {
53
+ t.Fatal(err)
54
+ }
55
+ defer p.LeaveGroup(ifi, &grp)
56
+ } else {
57
+ if err := p.JoinSourceSpecificGroup(ifi, &grp, tt.src); err != nil {
58
+ switch runtime.GOOS {
59
+ case "freebsd", "linux":
60
+ default: // platforms that don't support IGMPv2/3 fail here
61
+ t.Logf("not supported on %s", runtime.GOOS)
62
+ continue
63
+ }
64
+ t.Fatal(err)
65
+ }
66
+ defer p.LeaveSourceSpecificGroup(ifi, &grp, tt.src)
67
+ }
68
+ if err := p.SetMulticastInterface(ifi); err != nil {
69
+ t.Fatal(err)
70
+ }
71
+ if _, err := p.MulticastInterface(); err != nil {
72
+ t.Fatal(err)
73
+ }
74
+ if err := p.SetMulticastLoopback(true); err != nil {
75
+ t.Fatal(err)
76
+ }
77
+ if _, err := p.MulticastLoopback(); err != nil {
78
+ t.Fatal(err)
79
+ }
80
+ cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
81
+ wb := []byte("HELLO-R-U-THERE")
82
+
83
+ for i, toggle := range []bool{true, false, true} {
84
+ if err := p.SetControlMessage(cf, toggle); err != nil {
85
+ if nettest.ProtocolNotSupported(err) {
86
+ t.Logf("not supported on %s", runtime.GOOS)
87
+ continue
88
+ }
89
+ t.Fatal(err)
90
+ }
91
+ if err := p.SetDeadline(time.Now().Add(200 * time.Millisecond)); err != nil {
92
+ t.Fatal(err)
93
+ }
94
+ p.SetMulticastTTL(i + 1)
95
+ if n, err := p.WriteTo(wb, nil, &grp); err != nil {
96
+ t.Fatal(err)
97
+ } else if n != len(wb) {
98
+ t.Fatalf("got %v; want %v", n, len(wb))
99
+ }
100
+ rb := make([]byte, 128)
101
+ if n, cm, _, err := p.ReadFrom(rb); err != nil {
102
+ t.Fatal(err)
103
+ } else if !bytes.Equal(rb[:n], wb) {
104
+ t.Fatalf("got %v; want %v", rb[:n], wb)
105
+ } else {
106
+ t.Logf("rcvd cmsg: %v", cm)
107
+ }
108
+ }
109
+ }
110
+}
111
+
112
+var packetConnReadWriteMulticastICMPTests = []struct {
113
+ grp, src *net.IPAddr
114
+}{
115
+ {&net.IPAddr{IP: net.IPv4(224, 0, 0, 254)}, nil}, // see RFC 4727
116
+
117
+ {&net.IPAddr{IP: net.IPv4(232, 0, 1, 254)}, &net.IPAddr{IP: net.IPv4(127, 0, 0, 1)}}, // see RFC 5771
118
+}
119
+
120
+func TestPacketConnReadWriteMulticastICMP(t *testing.T) {
121
+ switch runtime.GOOS {
122
+ case "nacl", "plan9", "solaris", "windows":
123
+ t.Skipf("not supported on %s", runtime.GOOS)
124
+ }
125
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
126
+ t.Skip(m)
127
+ }
128
+ ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
129
+ if ifi == nil {
130
+ t.Skipf("not available on %s", runtime.GOOS)
131
+ }
132
+
133
+ for _, tt := range packetConnReadWriteMulticastICMPTests {
134
+ c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
135
+ if err != nil {
136
+ t.Fatal(err)
137
+ }
138
+ defer c.Close()
139
+
140
+ p := ipv4.NewPacketConn(c)
141
+ defer p.Close()
142
+ if tt.src == nil {
143
+ if err := p.JoinGroup(ifi, tt.grp); err != nil {
144
+ t.Fatal(err)
145
+ }
146
+ defer p.LeaveGroup(ifi, tt.grp)
147
+ } else {
148
+ if err := p.JoinSourceSpecificGroup(ifi, tt.grp, tt.src); err != nil {
149
+ switch runtime.GOOS {
150
+ case "freebsd", "linux":
151
+ default: // platforms that don't support IGMPv2/3 fail here
152
+ t.Logf("not supported on %s", runtime.GOOS)
153
+ continue
154
+ }
155
+ t.Fatal(err)
156
+ }
157
+ defer p.LeaveSourceSpecificGroup(ifi, tt.grp, tt.src)
158
+ }
159
+ if err := p.SetMulticastInterface(ifi); err != nil {
160
+ t.Fatal(err)
161
+ }
162
+ if _, err := p.MulticastInterface(); err != nil {
163
+ t.Fatal(err)
164
+ }
165
+ if err := p.SetMulticastLoopback(true); err != nil {
166
+ t.Fatal(err)
167
+ }
168
+ if _, err := p.MulticastLoopback(); err != nil {
169
+ t.Fatal(err)
170
+ }
171
+ cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
172
+
173
+ for i, toggle := range []bool{true, false, true} {
174
+ wb, err := (&icmp.Message{
175
+ Type: ipv4.ICMPTypeEcho, Code: 0,
176
+ Body: &icmp.Echo{
177
+ ID: os.Getpid() & 0xffff, Seq: i + 1,
178
+ Data: []byte("HELLO-R-U-THERE"),
179
+ },
180
+ }).Marshal(nil)
181
+ if err != nil {
182
+ t.Fatal(err)
183
+ }
184
+ if err := p.SetControlMessage(cf, toggle); err != nil {
185
+ if nettest.ProtocolNotSupported(err) {
186
+ t.Logf("not supported on %s", runtime.GOOS)
187
+ continue
188
+ }
189
+ t.Fatal(err)
190
+ }
191
+ if err := p.SetDeadline(time.Now().Add(200 * time.Millisecond)); err != nil {
192
+ t.Fatal(err)
193
+ }
194
+ p.SetMulticastTTL(i + 1)
195
+ if n, err := p.WriteTo(wb, nil, tt.grp); err != nil {
196
+ t.Fatal(err)
197
+ } else if n != len(wb) {
198
+ t.Fatalf("got %v; want %v", n, len(wb))
199
+ }
200
+ rb := make([]byte, 128)
201
+ if n, cm, _, err := p.ReadFrom(rb); err != nil {
202
+ t.Fatal(err)
203
+ } else {
204
+ t.Logf("rcvd cmsg: %v", cm)
205
+ m, err := icmp.ParseMessage(iana.ProtocolICMP, rb[:n])
206
+ if err != nil {
207
+ t.Fatal(err)
208
+ }
209
+ switch {
210
+ case m.Type == ipv4.ICMPTypeEchoReply && m.Code == 0: // net.inet.icmp.bmcastecho=1
211
+ case m.Type == ipv4.ICMPTypeEcho && m.Code == 0: // net.inet.icmp.bmcastecho=0
212
+ default:
213
+ t.Fatalf("got type=%v, code=%v; want type=%v, code=%v", m.Type, m.Code, ipv4.ICMPTypeEchoReply, 0)
214
+ }
215
+ }
216
+ }
217
+ }
218
+}
219
+
220
+var rawConnReadWriteMulticastICMPTests = []struct {
221
+ grp, src *net.IPAddr
222
+}{
223
+ {&net.IPAddr{IP: net.IPv4(224, 0, 0, 254)}, nil}, // see RFC 4727
224
+
225
+ {&net.IPAddr{IP: net.IPv4(232, 0, 1, 254)}, &net.IPAddr{IP: net.IPv4(127, 0, 0, 1)}}, // see RFC 5771
226
+}
227
+
228
+func TestRawConnReadWriteMulticastICMP(t *testing.T) {
229
+ if testing.Short() {
230
+ t.Skip("to avoid external network")
231
+ }
232
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
233
+ t.Skip(m)
234
+ }
235
+ ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
236
+ if ifi == nil {
237
+ t.Skipf("not available on %s", runtime.GOOS)
238
+ }
239
+
240
+ for _, tt := range rawConnReadWriteMulticastICMPTests {
241
+ c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
242
+ if err != nil {
243
+ t.Fatal(err)
244
+ }
245
+ defer c.Close()
246
+
247
+ r, err := ipv4.NewRawConn(c)
248
+ if err != nil {
249
+ t.Fatal(err)
250
+ }
251
+ defer r.Close()
252
+ if tt.src == nil {
253
+ if err := r.JoinGroup(ifi, tt.grp); err != nil {
254
+ t.Fatal(err)
255
+ }
256
+ defer r.LeaveGroup(ifi, tt.grp)
257
+ } else {
258
+ if err := r.JoinSourceSpecificGroup(ifi, tt.grp, tt.src); err != nil {
259
+ switch runtime.GOOS {
260
+ case "freebsd", "linux":
261
+ default: // platforms that don't support IGMPv2/3 fail here
262
+ t.Logf("not supported on %s", runtime.GOOS)
263
+ continue
264
+ }
265
+ t.Fatal(err)
266
+ }
267
+ defer r.LeaveSourceSpecificGroup(ifi, tt.grp, tt.src)
268
+ }
269
+ if err := r.SetMulticastInterface(ifi); err != nil {
270
+ t.Fatal(err)
271
+ }
272
+ if _, err := r.MulticastInterface(); err != nil {
273
+ t.Fatal(err)
274
+ }
275
+ if err := r.SetMulticastLoopback(true); err != nil {
276
+ t.Fatal(err)
277
+ }
278
+ if _, err := r.MulticastLoopback(); err != nil {
279
+ t.Fatal(err)
280
+ }
281
+ cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
282
+
283
+ for i, toggle := range []bool{true, false, true} {
284
+ wb, err := (&icmp.Message{
285
+ Type: ipv4.ICMPTypeEcho, Code: 0,
286
+ Body: &icmp.Echo{
287
+ ID: os.Getpid() & 0xffff, Seq: i + 1,
288
+ Data: []byte("HELLO-R-U-THERE"),
289
+ },
290
+ }).Marshal(nil)
291
+ if err != nil {
292
+ t.Fatal(err)
293
+ }
294
+ wh := &ipv4.Header{
295
+ Version: ipv4.Version,
296
+ Len: ipv4.HeaderLen,
297
+ TOS: i + 1,
298
+ TotalLen: ipv4.HeaderLen + len(wb),
299
+ Protocol: 1,
300
+ Dst: tt.grp.IP,
301
+ }
302
+ if err := r.SetControlMessage(cf, toggle); err != nil {
303
+ if nettest.ProtocolNotSupported(err) {
304
+ t.Logf("not supported on %s", runtime.GOOS)
305
+ continue
306
+ }
307
+ t.Fatal(err)
308
+ }
309
+ if err := r.SetDeadline(time.Now().Add(200 * time.Millisecond)); err != nil {
310
+ t.Fatal(err)
311
+ }
312
+ r.SetMulticastTTL(i + 1)
313
+ if err := r.WriteTo(wh, wb, nil); err != nil {
314
+ t.Fatal(err)
315
+ }
316
+ rb := make([]byte, ipv4.HeaderLen+128)
317
+ if rh, b, cm, err := r.ReadFrom(rb); err != nil {
318
+ t.Fatal(err)
319
+ } else {
320
+ t.Logf("rcvd cmsg: %v", cm)
321
+ m, err := icmp.ParseMessage(iana.ProtocolICMP, b)
322
+ if err != nil {
323
+ t.Fatal(err)
324
+ }
325
+ switch {
326
+ case (rh.Dst.IsLoopback() || rh.Dst.IsLinkLocalUnicast() || rh.Dst.IsGlobalUnicast()) && m.Type == ipv4.ICMPTypeEchoReply && m.Code == 0: // net.inet.icmp.bmcastecho=1
327
+ case rh.Dst.IsMulticast() && m.Type == ipv4.ICMPTypeEcho && m.Code == 0: // net.inet.icmp.bmcastecho=0
328
+ default:
329
+ t.Fatalf("got type=%v, code=%v; want type=%v, code=%v", m.Type, m.Code, ipv4.ICMPTypeEchoReply, 0)
330
+ }
331
+ }
332
+ }
333
+ }
334
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/multicastlistener_test.go
renamed
+34
-35
@@ -6,12 +6,11 @@ package ipv4_test
6
7
import (
8
"net"
9
- "os"
9
"runtime"
10
"testing"
11
13
- "code.google.com/p/go.net/internal/nettest"
14
- "code.google.com/p/go.net/ipv4"
12
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/ipv4"
13
+ "golang.org/x/net/internal/nettest"
14
)
15
16
var udpMultipleGroupListenerTests = []net.Addr{
@@ -23,7 +22,7 @@ var udpMultipleGroupListenerTests = []net.Addr{
22
func TestUDPSinglePacketConnWithMultipleGroupListeners(t *testing.T) {
23
switch runtime.GOOS {
24
case "nacl", "plan9", "solaris", "windows":
26
- t.Skipf("not supported on %q", runtime.GOOS)
25
+ t.Skipf("not supported on %s", runtime.GOOS)
26
}
27
if testing.Short() {
28
t.Skip("to avoid external network")
@@ -32,7 +31,7 @@ func TestUDPSinglePacketConnWithMultipleGroupListeners(t *testing.T) {
31
for _, gaddr := range udpMultipleGroupListenerTests {
32
c, err := net.ListenPacket("udp4", "0.0.0.0:0") // wildcard address with no reusable port
33
if err != nil {
35
- t.Fatalf("net.ListenPacket failed: %v", err)
34
+ t.Fatal(err)
35
}
36
defer c.Close()
37
@@ -41,20 +40,20 @@ func TestUDPSinglePacketConnWithMultipleGroupListeners(t *testing.T) {
40
41
ift, err := net.Interfaces()
42
if err != nil {
44
- t.Fatalf("net.Interfaces failed: %v", err)
43
+ t.Fatal(err)
44
}
45
for i, ifi := range ift {
46
if _, ok := nettest.IsMulticastCapable("ip4", &ifi); !ok {
47
continue
48
}
49
if err := p.JoinGroup(&ifi, gaddr); err != nil {
51
- t.Fatalf("ipv4.PacketConn.JoinGroup %v on %v failed: %v", gaddr, ifi, err)
50
+ t.Fatal(err)
51
}
52
mift = append(mift, &ift[i])
53
}
54
for _, ifi := range mift {
55
if err := p.LeaveGroup(ifi, gaddr); err != nil {
57
- t.Fatalf("ipv4.PacketConn.LeaveGroup %v on %v failed: %v", gaddr, ifi, err)
56
+ t.Fatal(err)
57
}
58
}
59
}
@@ -63,7 +62,7 @@ func TestUDPSinglePacketConnWithMultipleGroupListeners(t *testing.T) {
62
func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) {
63
switch runtime.GOOS {
64
case "nacl", "plan9", "solaris", "windows":
66
- t.Skipf("not supported on %q", runtime.GOOS)
65
+ t.Skipf("not supported on %s", runtime.GOOS)
66
}
67
if testing.Short() {
68
t.Skip("to avoid external network")
@@ -72,13 +71,13 @@ func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) {
71
for _, gaddr := range udpMultipleGroupListenerTests {
72
c1, err := net.ListenPacket("udp4", "224.0.0.0:1024") // wildcard address with reusable port
73
if err != nil {
75
- t.Fatalf("net.ListenPacket failed: %v", err)
74
+ t.Fatal(err)
75
}
76
defer c1.Close()
77
78
c2, err := net.ListenPacket("udp4", "224.0.0.0:1024") // wildcard address with reusable port
79
if err != nil {
81
- t.Fatalf("net.ListenPacket failed: %v", err)
80
+ t.Fatal(err)
81
}
82
defer c2.Close()
83
@@ -89,7 +88,7 @@ func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) {
88
89
ift, err := net.Interfaces()
90
if err != nil {
92
- t.Fatalf("net.Interfaces failed: %v", err)
91
+ t.Fatal(err)
92
}
93
for i, ifi := range ift {
94
if _, ok := nettest.IsMulticastCapable("ip4", &ifi); !ok {
@@ -97,7 +96,7 @@ func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) {
96
}
97
for _, p := range ps {
98
if err := p.JoinGroup(&ifi, gaddr); err != nil {
100
- t.Fatalf("ipv4.PacketConn.JoinGroup %v on %v failed: %v", gaddr, ifi, err)
99
+ t.Fatal(err)
100
}
101
}
102
mift = append(mift, &ift[i])
@@ -105,7 +104,7 @@ func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) {
104
for _, ifi := range mift {
105
for _, p := range ps {
106
if err := p.LeaveGroup(ifi, gaddr); err != nil {
108
- t.Fatalf("ipv4.PacketConn.LeaveGroup %v on %v failed: %v", gaddr, ifi, err)
107
+ t.Fatal(err)
108
}
109
}
110
}
@@ -115,7 +114,7 @@ func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) {
114
func TestUDPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) {
115
switch runtime.GOOS {
116
case "nacl", "plan9", "solaris", "windows":
118
- t.Skipf("not supported on %q", runtime.GOOS)
117
+ t.Skipf("not supported on %s", runtime.GOOS)
118
}
119
if testing.Short() {
120
t.Skip("to avoid external network")
@@ -130,7 +129,7 @@ func TestUDPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) {
129
130
ift, err := net.Interfaces()
131
if err != nil {
133
- t.Fatalf("net.Interfaces failed: %v", err)
132
+ t.Fatal(err)
133
}
134
for i, ifi := range ift {
135
ip, ok := nettest.IsMulticastCapable("ip4", &ifi)
@@ -139,18 +138,18 @@ func TestUDPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) {
138
}
139
c, err := net.ListenPacket("udp4", ip.String()+":"+"1024") // unicast address with non-reusable port
140
if err != nil {
142
- t.Fatalf("net.ListenPacket with %v failed: %v", ip, err)
141
+ t.Fatal(err)
142
}
143
defer c.Close()
144
p := ipv4.NewPacketConn(c)
145
if err := p.JoinGroup(&ifi, &gaddr); err != nil {
147
- t.Fatalf("ipv4.PacketConn.JoinGroup on %v failed: %v", ifi, err)
146
+ t.Fatal(err)
147
}
148
mlt = append(mlt, &ml{p, &ift[i]})
149
}
150
for _, m := range mlt {
151
if err := m.c.LeaveGroup(m.ifi, &gaddr); err != nil {
153
- t.Fatalf("ipv4.PacketConn.LeaveGroup on %v failed: %v", m.ifi, err)
152
+ t.Fatal(err)
153
}
154
}
155
}
@@ -158,44 +157,44 @@ func TestUDPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) {
157
func TestIPSingleRawConnWithSingleGroupListener(t *testing.T) {
158
switch runtime.GOOS {
159
case "nacl", "plan9", "solaris", "windows":
161
- t.Skipf("not supported on %q", runtime.GOOS)
160
+ t.Skipf("not supported on %s", runtime.GOOS)
161
}
162
if testing.Short() {
163
t.Skip("to avoid external network")
164
}
166
- if os.Getuid() != 0 {
167
- t.Skip("must be root")
165
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
166
+ t.Skip(m)
167
}
168
169
c, err := net.ListenPacket("ip4:icmp", "0.0.0.0") // wildcard address
170
if err != nil {
172
- t.Fatalf("net.ListenPacket failed: %v", err)
171
+ t.Fatal(err)
172
}
173
defer c.Close()
174
175
r, err := ipv4.NewRawConn(c)
176
if err != nil {
178
- t.Fatalf("ipv4.RawConn failed: %v", err)
177
+ t.Fatal(err)
178
}
179
gaddr := net.IPAddr{IP: net.IPv4(224, 0, 0, 254)} // see RFC 4727
180
var mift []*net.Interface
181
182
ift, err := net.Interfaces()
183
if err != nil {
185
- t.Fatalf("net.Interfaces failed: %v", err)
184
+ t.Fatal(err)
185
}
186
for i, ifi := range ift {
187
if _, ok := nettest.IsMulticastCapable("ip4", &ifi); !ok {
188
continue
189
}
190
if err := r.JoinGroup(&ifi, &gaddr); err != nil {
192
- t.Fatalf("ipv4.RawConn.JoinGroup on %v failed: %v", ifi, err)
191
+ t.Fatal(err)
192
}
193
mift = append(mift, &ift[i])
194
}
195
for _, ifi := range mift {
196
if err := r.LeaveGroup(ifi, &gaddr); err != nil {
198
- t.Fatalf("ipv4.RawConn.LeaveGroup on %v failed: %v", ifi, err)
197
+ t.Fatal(err)
198
}
199
}
200
}
@@ -203,13 +202,13 @@ func TestIPSingleRawConnWithSingleGroupListener(t *testing.T) {
202
func TestIPPerInterfaceSingleRawConnWithSingleGroupListener(t *testing.T) {
203
switch runtime.GOOS {
204
case "nacl", "plan9", "solaris", "windows":
206
- t.Skipf("not supported on %q", runtime.GOOS)
205
+ t.Skipf("not supported on %s", runtime.GOOS)
206
}
207
if testing.Short() {
208
t.Skip("to avoid external network")
209
}
211
- if os.Getuid() != 0 {
212
- t.Skip("must be root")
210
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
211
+ t.Skip(m)
212
}
213
214
gaddr := net.IPAddr{IP: net.IPv4(224, 0, 0, 254)} // see RFC 4727
@@ -221,7 +220,7 @@ func TestIPPerInterfaceSingleRawConnWithSingleGroupListener(t *testing.T) {
220
221
ift, err := net.Interfaces()
222
if err != nil {
224
- t.Fatalf("net.Interfaces failed: %v", err)
223
+ t.Fatal(err)
224
}
225
for i, ifi := range ift {
226
ip, ok := nettest.IsMulticastCapable("ip4", &ifi)
@@ -230,21 +229,21 @@ func TestIPPerInterfaceSingleRawConnWithSingleGroupListener(t *testing.T) {
229
}
230
c, err := net.ListenPacket("ip4:253", ip.String()) // unicast address
231
if err != nil {
233
- t.Fatalf("net.ListenPacket with %v failed: %v", ip, err)
232
+ t.Fatal(err)
233
}
234
defer c.Close()
235
r, err := ipv4.NewRawConn(c)
236
if err != nil {
238
- t.Fatalf("ipv4.NewRawConn failed: %v", err)
237
+ t.Fatal(err)
238
}
239
if err := r.JoinGroup(&ifi, &gaddr); err != nil {
241
- t.Fatalf("ipv4.RawConn.JoinGroup on %v failed: %v", ifi, err)
240
+ t.Fatal(err)
241
}
242
mlt = append(mlt, &ml{r, &ift[i]})
243
}
244
for _, m := range mlt {
245
if err := m.c.LeaveGroup(m.ifi, &gaddr); err != nil {
247
- t.Fatalf("ipv4.RawConn.LeaveGroup on %v failed: %v", m.ifi, err)
246
+ t.Fatal(err)
247
}
248
}
249
}
Godeps/_workspace/src/golang.org/x/net/ipv4/multicastsockopt_test.go
new
+195
@@ -0,0 +1,195 @@
1
+// Copyright 2012 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv4_test
6
+
7
+import (
8
+ "net"
9
+ "runtime"
10
+ "testing"
11
+
12
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/ipv4"
13
+ "golang.org/x/net/internal/nettest"
14
+)
15
+
16
+var packetConnMulticastSocketOptionTests = []struct {
17
+ net, proto, addr string
18
+ grp, src net.Addr
19
+}{
20
+ {"udp4", "", "224.0.0.0:0", &net.UDPAddr{IP: net.IPv4(224, 0, 0, 249)}, nil}, // see RFC 4727
21
+ {"ip4", ":icmp", "0.0.0.0", &net.IPAddr{IP: net.IPv4(224, 0, 0, 250)}, nil}, // see RFC 4727
22
+
23
+ {"udp4", "", "232.0.0.0:0", &net.UDPAddr{IP: net.IPv4(232, 0, 1, 249)}, &net.UDPAddr{IP: net.IPv4(127, 0, 0, 1)}}, // see RFC 5771
24
+ {"ip4", ":icmp", "0.0.0.0", &net.IPAddr{IP: net.IPv4(232, 0, 1, 250)}, &net.UDPAddr{IP: net.IPv4(127, 0, 0, 1)}}, // see RFC 5771
25
+}
26
+
27
+func TestPacketConnMulticastSocketOptions(t *testing.T) {
28
+ switch runtime.GOOS {
29
+ case "nacl", "plan9", "solaris":
30
+ t.Skipf("not supported on %s", runtime.GOOS)
31
+ }
32
+ ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
33
+ if ifi == nil {
34
+ t.Skipf("not available on %s", runtime.GOOS)
35
+ }
36
+
37
+ m, ok := nettest.SupportsRawIPSocket()
38
+ for _, tt := range packetConnMulticastSocketOptionTests {
39
+ if tt.net == "ip4" && !ok {
40
+ t.Log(m)
41
+ continue
42
+ }
43
+ c, err := net.ListenPacket(tt.net+tt.proto, tt.addr)
44
+ if err != nil {
45
+ t.Fatal(err)
46
+ }
47
+ defer c.Close()
48
+ p := ipv4.NewPacketConn(c)
49
+ defer p.Close()
50
+
51
+ if tt.src == nil {
52
+ testMulticastSocketOptions(t, p, ifi, tt.grp)
53
+ } else {
54
+ testSourceSpecificMulticastSocketOptions(t, p, ifi, tt.grp, tt.src)
55
+ }
56
+ }
57
+}
58
+
59
+var rawConnMulticastSocketOptionTests = []struct {
60
+ grp, src net.Addr
61
+}{
62
+ {&net.IPAddr{IP: net.IPv4(224, 0, 0, 250)}, nil}, // see RFC 4727
63
+
64
+ {&net.IPAddr{IP: net.IPv4(232, 0, 1, 250)}, &net.IPAddr{IP: net.IPv4(127, 0, 0, 1)}}, // see RFC 5771
65
+}
66
+
67
+func TestRawConnMulticastSocketOptions(t *testing.T) {
68
+ switch runtime.GOOS {
69
+ case "nacl", "plan9", "solaris":
70
+ t.Skipf("not supported on %s", runtime.GOOS)
71
+ }
72
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
73
+ t.Skip(m)
74
+ }
75
+ ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
76
+ if ifi == nil {
77
+ t.Skipf("not available on %s", runtime.GOOS)
78
+ }
79
+
80
+ for _, tt := range rawConnMulticastSocketOptionTests {
81
+ c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
82
+ if err != nil {
83
+ t.Fatal(err)
84
+ }
85
+ defer c.Close()
86
+ r, err := ipv4.NewRawConn(c)
87
+ if err != nil {
88
+ t.Fatal(err)
89
+ }
90
+ defer r.Close()
91
+
92
+ if tt.src == nil {
93
+ testMulticastSocketOptions(t, r, ifi, tt.grp)
94
+ } else {
95
+ testSourceSpecificMulticastSocketOptions(t, r, ifi, tt.grp, tt.src)
96
+ }
97
+ }
98
+}
99
+
100
+type testIPv4MulticastConn interface {
101
+ MulticastTTL() (int, error)
102
+ SetMulticastTTL(ttl int) error
103
+ MulticastLoopback() (bool, error)
104
+ SetMulticastLoopback(bool) error
105
+ JoinGroup(*net.Interface, net.Addr) error
106
+ LeaveGroup(*net.Interface, net.Addr) error
107
+ JoinSourceSpecificGroup(*net.Interface, net.Addr, net.Addr) error
108
+ LeaveSourceSpecificGroup(*net.Interface, net.Addr, net.Addr) error
109
+ ExcludeSourceSpecificGroup(*net.Interface, net.Addr, net.Addr) error
110
+ IncludeSourceSpecificGroup(*net.Interface, net.Addr, net.Addr) error
111
+}
112
+
113
+func testMulticastSocketOptions(t *testing.T, c testIPv4MulticastConn, ifi *net.Interface, grp net.Addr) {
114
+ const ttl = 255
115
+ if err := c.SetMulticastTTL(ttl); err != nil {
116
+ t.Error(err)
117
+ return
118
+ }
119
+ if v, err := c.MulticastTTL(); err != nil {
120
+ t.Error(err)
121
+ return
122
+ } else if v != ttl {
123
+ t.Errorf("got %v; want %v", v, ttl)
124
+ return
125
+ }
126
+
127
+ for _, toggle := range []bool{true, false} {
128
+ if err := c.SetMulticastLoopback(toggle); err != nil {
129
+ t.Error(err)
130
+ return
131
+ }
132
+ if v, err := c.MulticastLoopback(); err != nil {
133
+ t.Error(err)
134
+ return
135
+ } else if v != toggle {
136
+ t.Errorf("got %v; want %v", v, toggle)
137
+ return
138
+ }
139
+ }
140
+
141
+ if err := c.JoinGroup(ifi, grp); err != nil {
142
+ t.Error(err)
143
+ return
144
+ }
145
+ if err := c.LeaveGroup(ifi, grp); err != nil {
146
+ t.Error(err)
147
+ return
148
+ }
149
+}
150
+
151
+func testSourceSpecificMulticastSocketOptions(t *testing.T, c testIPv4MulticastConn, ifi *net.Interface, grp, src net.Addr) {
152
+ // MCAST_JOIN_GROUP -> MCAST_BLOCK_SOURCE -> MCAST_UNBLOCK_SOURCE -> MCAST_LEAVE_GROUP
153
+ if err := c.JoinGroup(ifi, grp); err != nil {
154
+ t.Error(err)
155
+ return
156
+ }
157
+ if err := c.ExcludeSourceSpecificGroup(ifi, grp, src); err != nil {
158
+ switch runtime.GOOS {
159
+ case "freebsd", "linux":
160
+ default: // platforms that don't support IGMPv2/3 fail here
161
+ t.Logf("not supported on %s", runtime.GOOS)
162
+ return
163
+ }
164
+ t.Error(err)
165
+ return
166
+ }
167
+ if err := c.IncludeSourceSpecificGroup(ifi, grp, src); err != nil {
168
+ t.Error(err)
169
+ return
170
+ }
171
+ if err := c.LeaveGroup(ifi, grp); err != nil {
172
+ t.Error(err)
173
+ return
174
+ }
175
+
176
+ // MCAST_JOIN_SOURCE_GROUP -> MCAST_LEAVE_SOURCE_GROUP
177
+ if err := c.JoinSourceSpecificGroup(ifi, grp, src); err != nil {
178
+ t.Error(err)
179
+ return
180
+ }
181
+ if err := c.LeaveSourceSpecificGroup(ifi, grp, src); err != nil {
182
+ t.Error(err)
183
+ return
184
+ }
185
+
186
+ // MCAST_JOIN_SOURCE_GROUP -> MCAST_LEAVE_GROUP
187
+ if err := c.JoinSourceSpecificGroup(ifi, grp, src); err != nil {
188
+ t.Error(err)
189
+ return
190
+ }
191
+ if err := c.LeaveGroup(ifi, grp); err != nil {
192
+ t.Error(err)
193
+ return
194
+ }
195
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/packet.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/payload.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/payload_cmsg.go
renamed
+13
-7
@@ -27,13 +27,19 @@ func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.
27
return 0, nil, nil, err
28
}
29
case *net.IPConn:
30
- nb := make([]byte, maxHeaderLen+len(b))
31
- if n, oobn, _, src, err = c.ReadMsgIP(nb, oob); err != nil {
32
- return 0, nil, nil, err
30
+ if sockOpts[ssoStripHeader].name > 0 {
31
+ if n, oobn, _, src, err = c.ReadMsgIP(b, oob); err != nil {
32
+ return 0, nil, nil, err
33
+ }
34
+ } else {
35
+ nb := make([]byte, maxHeaderLen+len(b))
36
+ if n, oobn, _, src, err = c.ReadMsgIP(nb, oob); err != nil {
37
+ return 0, nil, nil, err
38
+ }
39
+ hdrlen := int(nb[0]&0x0f) << 2
40
+ copy(b, nb[hdrlen:])
41
+ n -= hdrlen
42
}
34
- hdrlen := int(nb[0]&0x0f) << 2
35
- copy(b, nb[hdrlen:])
36
- n -= hdrlen
43
default:
44
return 0, nil, nil, errInvalidConnType
45
}
@@ -50,7 +56,7 @@ func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.
56
// address dst through the endpoint c, copying the payload from b. It
57
// returns the number of bytes written. The control message cm allows
58
// the datagram path and the outgoing interface to be specified.
53
-// Currently only Darwin and Darwin support this. The cm may be nil if
59
+// Currently only Darwin and Linux support this. The cm may be nil if
60
// control of the outgoing datagram is not required.
61
func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) {
62
if !c.ok() {
Godeps/_workspace/src/golang.org/x/net/ipv4/payload_nocmsg.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/readwrite_test.go
new
+170
@@ -0,0 +1,170 @@
1
+// Copyright 2012 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv4_test
6
+
7
+import (
8
+ "bytes"
9
+ "net"
10
+ "runtime"
11
+ "sync"
12
+ "testing"
13
+
14
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/ipv4"
15
+ "golang.org/x/net/internal/nettest"
16
+)
17
+
18
+func benchmarkUDPListener() (net.PacketConn, net.Addr, error) {
19
+ c, err := net.ListenPacket("udp4", "127.0.0.1:0")
20
+ if err != nil {
21
+ return nil, nil, err
22
+ }
23
+ dst, err := net.ResolveUDPAddr("udp4", c.LocalAddr().String())
24
+ if err != nil {
25
+ c.Close()
26
+ return nil, nil, err
27
+ }
28
+ return c, dst, nil
29
+}
30
+
31
+func BenchmarkReadWriteNetUDP(b *testing.B) {
32
+ c, dst, err := benchmarkUDPListener()
33
+ if err != nil {
34
+ b.Fatal(err)
35
+ }
36
+ defer c.Close()
37
+
38
+ wb, rb := []byte("HELLO-R-U-THERE"), make([]byte, 128)
39
+ b.ResetTimer()
40
+ for i := 0; i < b.N; i++ {
41
+ benchmarkReadWriteNetUDP(b, c, wb, rb, dst)
42
+ }
43
+}
44
+
45
+func benchmarkReadWriteNetUDP(b *testing.B, c net.PacketConn, wb, rb []byte, dst net.Addr) {
46
+ if _, err := c.WriteTo(wb, dst); err != nil {
47
+ b.Fatal(err)
48
+ }
49
+ if _, _, err := c.ReadFrom(rb); err != nil {
50
+ b.Fatal(err)
51
+ }
52
+}
53
+
54
+func BenchmarkReadWriteIPv4UDP(b *testing.B) {
55
+ c, dst, err := benchmarkUDPListener()
56
+ if err != nil {
57
+ b.Fatal(err)
58
+ }
59
+ defer c.Close()
60
+
61
+ p := ipv4.NewPacketConn(c)
62
+ defer p.Close()
63
+ cf := ipv4.FlagTTL | ipv4.FlagInterface
64
+ if err := p.SetControlMessage(cf, true); err != nil {
65
+ b.Fatal(err)
66
+ }
67
+ ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
68
+
69
+ wb, rb := []byte("HELLO-R-U-THERE"), make([]byte, 128)
70
+ b.ResetTimer()
71
+ for i := 0; i < b.N; i++ {
72
+ benchmarkReadWriteIPv4UDP(b, p, wb, rb, dst, ifi)
73
+ }
74
+}
75
+
76
+func benchmarkReadWriteIPv4UDP(b *testing.B, p *ipv4.PacketConn, wb, rb []byte, dst net.Addr, ifi *net.Interface) {
77
+ cm := ipv4.ControlMessage{TTL: 1}
78
+ if ifi != nil {
79
+ cm.IfIndex = ifi.Index
80
+ }
81
+ if n, err := p.WriteTo(wb, &cm, dst); err != nil {
82
+ b.Fatal(err)
83
+ } else if n != len(wb) {
84
+ b.Fatalf("got %v; want %v", n, len(wb))
85
+ }
86
+ if _, _, _, err := p.ReadFrom(rb); err != nil {
87
+ b.Fatal(err)
88
+ }
89
+}
90
+
91
+func TestPacketConnConcurrentReadWriteUnicastUDP(t *testing.T) {
92
+ switch runtime.GOOS {
93
+ case "nacl", "plan9", "solaris", "windows":
94
+ t.Skipf("not supported on %s", runtime.GOOS)
95
+ }
96
+
97
+ c, err := net.ListenPacket("udp4", "127.0.0.1:0")
98
+ if err != nil {
99
+ t.Fatal(err)
100
+ }
101
+ defer c.Close()
102
+ p := ipv4.NewPacketConn(c)
103
+ defer p.Close()
104
+
105
+ dst, err := net.ResolveUDPAddr("udp4", c.LocalAddr().String())
106
+ if err != nil {
107
+ t.Fatal(err)
108
+ }
109
+
110
+ ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
111
+ cf := ipv4.FlagTTL | ipv4.FlagSrc | ipv4.FlagDst | ipv4.FlagInterface
112
+ wb := []byte("HELLO-R-U-THERE")
113
+
114
+ if err := p.SetControlMessage(cf, true); err != nil { // probe before test
115
+ if nettest.ProtocolNotSupported(err) {
116
+ t.Skipf("not supported on %s", runtime.GOOS)
117
+ }
118
+ t.Fatal(err)
119
+ }
120
+
121
+ var wg sync.WaitGroup
122
+ reader := func() {
123
+ defer wg.Done()
124
+ rb := make([]byte, 128)
125
+ if n, cm, _, err := p.ReadFrom(rb); err != nil {
126
+ t.Error(err)
127
+ return
128
+ } else if !bytes.Equal(rb[:n], wb) {
129
+ t.Errorf("got %v; want %v", rb[:n], wb)
130
+ return
131
+ } else {
132
+ t.Logf("rcvd cmsg: %v", cm)
133
+ }
134
+ }
135
+ writer := func(toggle bool) {
136
+ defer wg.Done()
137
+ cm := ipv4.ControlMessage{
138
+ Src: net.IPv4(127, 0, 0, 1),
139
+ }
140
+ if ifi != nil {
141
+ cm.IfIndex = ifi.Index
142
+ }
143
+ if err := p.SetControlMessage(cf, toggle); err != nil {
144
+ t.Error(err)
145
+ return
146
+ }
147
+ if n, err := p.WriteTo(wb, &cm, dst); err != nil {
148
+ t.Error(err)
149
+ return
150
+ } else if n != len(wb) {
151
+ t.Errorf("short write: %v", n)
152
+ return
153
+ }
154
+ }
155
+
156
+ const N = 10
157
+ wg.Add(N)
158
+ for i := 0; i < N; i++ {
159
+ go reader()
160
+ }
161
+ wg.Add(2 * N)
162
+ for i := 0; i < 2*N; i++ {
163
+ go writer(i%2 != 0)
164
+ }
165
+ wg.Add(N)
166
+ for i := 0; i < N; i++ {
167
+ go reader()
168
+ }
169
+ wg.Wait()
170
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/sockopt.go
renamed
+10
-1
@@ -15,9 +15,15 @@ const (
15
ssoReceiveDst // header field on received packet
16
ssoReceiveInterface // inbound interface on received packet
17
ssoPacketInfo // incbound or outbound packet path
18
- ssoHeaderPrepend // ipv4 header
18
+ ssoHeaderPrepend // ipv4 header prepend
19
+ ssoStripHeader // strip ipv4 header
20
+ ssoICMPFilter // icmp filter
21
ssoJoinGroup // any-source multicast
22
ssoLeaveGroup // any-source multicast
23
+ ssoJoinSourceGroup // source-specific multicast
24
+ ssoLeaveSourceGroup // source-specific multicast
25
+ ssoBlockSourceGroup // any-source or source-specific multicast
26
+ ssoUnblockSourceGroup // any-source or source-specific multicast
27
ssoMax
28
)
29
@@ -26,8 +32,11 @@ const (
32
ssoTypeByte = iota + 1
33
ssoTypeInt
34
ssoTypeInterface
35
+ ssoTypeICMPFilter
36
ssoTypeIPMreq
37
ssoTypeIPMreqn
38
+ ssoTypeGroupReq
39
+ ssoTypeGroupSourceReq
40
)
41
42
// A sockOpt represents a binding for sticky socket option.
Godeps/_workspace/src/golang.org/x/net/ipv4/sockopt_asmreq.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/sockopt_asmreq_stub.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/sockopt_asmreq_unix.go
renamed
+1
-1
@@ -11,7 +11,7 @@ import (
11
"os"
12
"unsafe"
13
14
- "github.com/ipfs/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/internal/iana"
14
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
15
)
16
17
func setsockoptIPMreq(fd, name int, ifi *net.Interface, grp net.IP) error {
Godeps/_workspace/src/golang.org/x/net/ipv4/sockopt_asmreq_windows.go
renamed
+1
-1
@@ -10,7 +10,7 @@ import (
10
"syscall"
11
"unsafe"
12
13
- "github.com/ipfs/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/internal/iana"
13
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
14
)
15
16
func setsockoptIPMreq(fd syscall.Handle, name int, ifi *net.Interface, grp net.IP) error {
Godeps/_workspace/src/golang.org/x/net/ipv4/sockopt_asmreqn_stub.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/sockopt_asmreqn_unix.go
renamed
+1
-1
@@ -11,7 +11,7 @@ import (
11
"os"
12
"unsafe"
13
14
- "github.com/ipfs/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/internal/iana"
14
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
15
)
16
17
func getsockoptIPMreqn(fd, name int) (*net.Interface, error) {
Godeps/_workspace/src/golang.org/x/net/ipv4/sockopt_ssmreq_stub.go
new
+17
@@ -0,0 +1,17 @@
1
+// Copyright 2014 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+// +build !darwin,!freebsd,!linux
6
+
7
+package ipv4
8
+
9
+import "net"
10
+
11
+func setsockoptGroupReq(fd, name int, ifi *net.Interface, grp net.IP) error {
12
+ return errOpNoSupport
13
+}
14
+
15
+func setsockoptGroupSourceReq(fd, name int, ifi *net.Interface, grp, src net.IP) error {
16
+ return errOpNoSupport
17
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/sockopt_ssmreq_unix.go
new
+33
@@ -0,0 +1,33 @@
1
+// Copyright 2014 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+// +build darwin freebsd linux
6
+
7
+package ipv4
8
+
9
+import (
10
+ "net"
11
+ "os"
12
+ "unsafe"
13
+
14
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
15
+)
16
+
17
+func setsockoptGroupReq(fd, name int, ifi *net.Interface, grp net.IP) error {
18
+ var gr sysGroupReq
19
+ if ifi != nil {
20
+ gr.Interface = uint32(ifi.Index)
21
+ }
22
+ gr.setGroup(grp)
23
+ return os.NewSyscallError("setsockopt", setsockopt(fd, iana.ProtocolIP, name, unsafe.Pointer(&gr), sysSizeofGroupReq))
24
+}
25
+
26
+func setsockoptGroupSourceReq(fd, name int, ifi *net.Interface, grp, src net.IP) error {
27
+ var gsr sysGroupSourceReq
28
+ if ifi != nil {
29
+ gsr.Interface = uint32(ifi.Index)
30
+ }
31
+ gsr.setSourceGroup(grp, src)
32
+ return os.NewSyscallError("setsockopt", setsockopt(fd, iana.ProtocolIP, name, unsafe.Pointer(&gsr), sysSizeofGroupSourceReq))
33
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/sockopt_stub.go
new
+11
@@ -0,0 +1,11 @@
1
+// Copyright 2012 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+// +build nacl plan9 solaris
6
+
7
+package ipv4
8
+
9
+func setInt(fd int, opt *sockOpt, v int) error {
10
+ return errOpNoSupport
11
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/sockopt_unix.go
renamed
+29
-1
@@ -11,7 +11,7 @@ import (
11
"os"
12
"unsafe"
13
14
- "github.com/ipfs/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/internal/iana"
14
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
15
)
16
17
func getInt(fd int, opt *sockOpt) (int, error) {
@@ -79,6 +79,25 @@ func setInterface(fd int, opt *sockOpt, ifi *net.Interface) error {
79
}
80
}
81
82
+func getICMPFilter(fd int, opt *sockOpt) (*ICMPFilter, error) {
83
+ if opt.name < 1 || opt.typ != ssoTypeICMPFilter {
84
+ return nil, errOpNoSupport
85
+ }
86
+ var f ICMPFilter
87
+ l := sysSockoptLen(sysSizeofICMPFilter)
88
+ if err := getsockopt(fd, iana.ProtocolReserved, opt.name, unsafe.Pointer(&f.sysICMPFilter), &l); err != nil {
89
+ return nil, os.NewSyscallError("getsockopt", err)
90
+ }
91
+ return &f, nil
92
+}
93
+
94
+func setICMPFilter(fd int, opt *sockOpt, f *ICMPFilter) error {
95
+ if opt.name < 1 || opt.typ != ssoTypeICMPFilter {
96
+ return errOpNoSupport
97
+ }
98
+ return os.NewSyscallError("setsockopt", setsockopt(fd, iana.ProtocolReserved, opt.name, unsafe.Pointer(&f.sysICMPFilter), sysSizeofICMPFilter))
99
+}
100
+
101
func setGroup(fd int, opt *sockOpt, ifi *net.Interface, grp net.IP) error {
102
if opt.name < 1 {
103
return errOpNoSupport
@@ -88,7 +107,16 @@ func setGroup(fd int, opt *sockOpt, ifi *net.Interface, grp net.IP) error {
107
return setsockoptIPMreq(fd, opt.name, ifi, grp)
108
case ssoTypeIPMreqn:
109
return setsockoptIPMreqn(fd, opt.name, ifi, grp)
110
+ case ssoTypeGroupReq:
111
+ return setsockoptGroupReq(fd, opt.name, ifi, grp)
112
default:
113
return errOpNoSupport
114
}
115
}
116
+
117
+func setSourceGroup(fd int, opt *sockOpt, ifi *net.Interface, grp, src net.IP) error {
118
+ if opt.name < 1 || opt.typ != ssoTypeGroupSourceReq {
119
+ return errOpNoSupport
120
+ }
121
+ return setsockoptGroupSourceReq(fd, opt.name, ifi, grp, src)
122
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/sockopt_windows.go
renamed
+14
-1
@@ -10,7 +10,7 @@ import (
10
"syscall"
11
"unsafe"
12
13
- "github.com/ipfs/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/internal/iana"
13
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
14
)
15
16
func getInt(fd syscall.Handle, opt *sockOpt) (int, error) {
@@ -47,9 +47,22 @@ func setInterface(fd syscall.Handle, opt *sockOpt, ifi *net.Interface) error {
47
return setsockoptInterface(fd, opt.name, ifi)
48
}
49
50
+func getICMPFilter(fd syscall.Handle, opt *sockOpt) (*ICMPFilter, error) {
51
+ return nil, errOpNoSupport
52
+}
53
+
54
+func setICMPFilter(fd syscall.Handle, opt *sockOpt, f *ICMPFilter) error {
55
+ return errOpNoSupport
56
+}
57
+
58
func setGroup(fd syscall.Handle, opt *sockOpt, ifi *net.Interface, grp net.IP) error {
59
if opt.name < 1 || opt.typ != ssoTypeIPMreq {
60
return errOpNoSupport
61
}
62
return setsockoptIPMreq(fd, opt.name, ifi, grp)
63
}
64
+
65
+func setSourceGroup(fd syscall.Handle, opt *sockOpt, ifi *net.Interface, grp, src net.IP) error {
66
+ // TODO(mikio): implement this
67
+ return errOpNoSupport
68
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/sys_bsd.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/sys_darwin.go
renamed
+39
-5
@@ -7,6 +7,7 @@ package ipv4
7
import (
8
"net"
9
"syscall"
10
+ "unsafe"
11
)
12
13
type sysSockoptLen int32
@@ -28,6 +29,7 @@ var (
29
ssoReceiveDst: {sysIP_RECVDSTADDR, ssoTypeInt},
30
ssoReceiveInterface: {sysIP_RECVIF, ssoTypeInt},
31
ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt},
32
+ ssoStripHeader: {sysIP_STRIPHDR, ssoTypeInt},
33
ssoJoinGroup: {sysIP_ADD_MEMBERSHIP, ssoTypeIPMreq},
34
ssoLeaveGroup: {sysIP_DROP_MEMBERSHIP, ssoTypeIPMreq},
35
}
@@ -42,13 +44,15 @@ func init() {
44
}
45
var i int
46
for i = range osver {
45
- if osver[i] != '.' {
46
- continue
47
+ if osver[i] == '.' {
48
+ break
49
}
50
}
49
- // The IP_PKTINFO was introduced in OS X 10.7 (Darwin
50
- // 11.0.0). See http://support.apple.com/kb/HT1633.
51
- if i > 2 || i == 2 && osver[0] >= '1' && osver[1] >= '1' {
51
+ // The IP_PKTINFO and protocol-independent multicast API were
52
+ // introduced in OS X 10.7 (Darwin 11.0.0). But it looks like
53
+ // those features require OS X 10.8 (Darwin 12.0.0) and above.
54
+ // See http://support.apple.com/kb/HT1633.
55
+ if i > 2 || i == 2 && osver[0] >= '1' && osver[1] >= '2' {
56
ctlOpts[ctlPacketInfo].name = sysIP_PKTINFO
57
ctlOpts[ctlPacketInfo].length = sysSizeofInetPktinfo
58
ctlOpts[ctlPacketInfo].marshal = marshalPacketInfo
@@ -56,9 +60,39 @@ func init() {
60
sockOpts[ssoPacketInfo].name = sysIP_RECVPKTINFO
61
sockOpts[ssoPacketInfo].typ = ssoTypeInt
62
sockOpts[ssoMulticastInterface].typ = ssoTypeIPMreqn
63
+ sockOpts[ssoJoinGroup].name = sysMCAST_JOIN_GROUP
64
+ sockOpts[ssoJoinGroup].typ = ssoTypeGroupReq
65
+ sockOpts[ssoLeaveGroup].name = sysMCAST_LEAVE_GROUP
66
+ sockOpts[ssoLeaveGroup].typ = ssoTypeGroupReq
67
+ sockOpts[ssoJoinSourceGroup].name = sysMCAST_JOIN_SOURCE_GROUP
68
+ sockOpts[ssoJoinSourceGroup].typ = ssoTypeGroupSourceReq
69
+ sockOpts[ssoLeaveSourceGroup].name = sysMCAST_LEAVE_SOURCE_GROUP
70
+ sockOpts[ssoLeaveSourceGroup].typ = ssoTypeGroupSourceReq
71
+ sockOpts[ssoBlockSourceGroup].name = sysMCAST_BLOCK_SOURCE
72
+ sockOpts[ssoBlockSourceGroup].typ = ssoTypeGroupSourceReq
73
+ sockOpts[ssoUnblockSourceGroup].name = sysMCAST_UNBLOCK_SOURCE
74
+ sockOpts[ssoUnblockSourceGroup].typ = ssoTypeGroupSourceReq
75
}
76
}
77
78
func (pi *sysInetPktinfo) setIfindex(i int) {
79
pi.Ifindex = uint32(i)
80
}
81
+
82
+func (gr *sysGroupReq) setGroup(grp net.IP) {
83
+ sa := (*sysSockaddrInet)(unsafe.Pointer(&gr.Pad_cgo_0[0]))
84
+ sa.Len = sysSizeofSockaddrInet
85
+ sa.Family = syscall.AF_INET
86
+ copy(sa.Addr[:], grp)
87
+}
88
+
89
+func (gsr *sysGroupSourceReq) setSourceGroup(grp, src net.IP) {
90
+ sa := (*sysSockaddrInet)(unsafe.Pointer(&gsr.Pad_cgo_0[0]))
91
+ sa.Len = sysSizeofSockaddrInet
92
+ sa.Family = syscall.AF_INET
93
+ copy(sa.Addr[:], grp)
94
+ sa = (*sysSockaddrInet)(unsafe.Pointer(&gsr.Pad_cgo_1[0]))
95
+ sa.Len = sysSizeofSockaddrInet
96
+ sa.Family = syscall.AF_INET
97
+ copy(sa.Addr[:], src)
98
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/sys_freebsd.go
renamed
+25
-2
@@ -7,6 +7,7 @@ package ipv4
7
import (
8
"net"
9
"syscall"
10
+ "unsafe"
11
)
12
13
type sysSockoptLen int32
@@ -28,8 +29,12 @@ var (
29
ssoReceiveDst: {sysIP_RECVDSTADDR, ssoTypeInt},
30
ssoReceiveInterface: {sysIP_RECVIF, ssoTypeInt},
31
ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt},
31
- ssoJoinGroup: {sysIP_ADD_MEMBERSHIP, ssoTypeIPMreq},
32
- ssoLeaveGroup: {sysIP_DROP_MEMBERSHIP, ssoTypeIPMreq},
32
+ ssoJoinGroup: {sysMCAST_JOIN_GROUP, ssoTypeGroupReq},
33
+ ssoLeaveGroup: {sysMCAST_LEAVE_GROUP, ssoTypeGroupReq},
34
+ ssoJoinSourceGroup: {sysMCAST_JOIN_SOURCE_GROUP, ssoTypeGroupSourceReq},
35
+ ssoLeaveSourceGroup: {sysMCAST_LEAVE_SOURCE_GROUP, ssoTypeGroupSourceReq},
36
+ ssoBlockSourceGroup: {sysMCAST_BLOCK_SOURCE, ssoTypeGroupSourceReq},
37
+ ssoUnblockSourceGroup: {sysMCAST_UNBLOCK_SOURCE, ssoTypeGroupSourceReq},
38
}
39
)
40
@@ -39,3 +44,21 @@ func init() {
44
sockOpts[ssoMulticastInterface].typ = ssoTypeIPMreqn
45
}
46
}
47
+
48
+func (gr *sysGroupReq) setGroup(grp net.IP) {
49
+ sa := (*sysSockaddrInet)(unsafe.Pointer(&gr.Group))
50
+ sa.Len = sysSizeofSockaddrInet
51
+ sa.Family = syscall.AF_INET
52
+ copy(sa.Addr[:], grp)
53
+}
54
+
55
+func (gsr *sysGroupSourceReq) setSourceGroup(grp, src net.IP) {
56
+ sa := (*sysSockaddrInet)(unsafe.Pointer(&gsr.Group))
57
+ sa.Len = sysSizeofSockaddrInet
58
+ sa.Family = syscall.AF_INET
59
+ copy(sa.Addr[:], grp)
60
+ sa = (*sysSockaddrInet)(unsafe.Pointer(&gsr.Source))
61
+ sa.Len = sysSizeofSockaddrInet
62
+ sa.Family = syscall.AF_INET
63
+ copy(sa.Addr[:], src)
64
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/sys_linux.go
new
+57
@@ -0,0 +1,57 @@
1
+// Copyright 2014 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv4
6
+
7
+import (
8
+ "net"
9
+ "syscall"
10
+ "unsafe"
11
+)
12
+
13
+type sysSockoptLen int32
14
+
15
+var (
16
+ ctlOpts = [ctlMax]ctlOpt{
17
+ ctlTTL: {sysIP_TTL, 1, marshalTTL, parseTTL},
18
+ ctlPacketInfo: {sysIP_PKTINFO, sysSizeofInetPktinfo, marshalPacketInfo, parsePacketInfo},
19
+ }
20
+
21
+ sockOpts = [ssoMax]sockOpt{
22
+ ssoTOS: {sysIP_TOS, ssoTypeInt},
23
+ ssoTTL: {sysIP_TTL, ssoTypeInt},
24
+ ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeInt},
25
+ ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeIPMreqn},
26
+ ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeInt},
27
+ ssoReceiveTTL: {sysIP_RECVTTL, ssoTypeInt},
28
+ ssoPacketInfo: {sysIP_PKTINFO, ssoTypeInt},
29
+ ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt},
30
+ ssoICMPFilter: {sysICMP_FILTER, ssoTypeICMPFilter},
31
+ ssoJoinGroup: {sysMCAST_JOIN_GROUP, ssoTypeGroupReq},
32
+ ssoLeaveGroup: {sysMCAST_LEAVE_GROUP, ssoTypeGroupReq},
33
+ ssoJoinSourceGroup: {sysMCAST_JOIN_SOURCE_GROUP, ssoTypeGroupSourceReq},
34
+ ssoLeaveSourceGroup: {sysMCAST_LEAVE_SOURCE_GROUP, ssoTypeGroupSourceReq},
35
+ ssoBlockSourceGroup: {sysMCAST_BLOCK_SOURCE, ssoTypeGroupSourceReq},
36
+ ssoUnblockSourceGroup: {sysMCAST_UNBLOCK_SOURCE, ssoTypeGroupSourceReq},
37
+ }
38
+)
39
+
40
+func (pi *sysInetPktinfo) setIfindex(i int) {
41
+ pi.Ifindex = int32(i)
42
+}
43
+
44
+func (gr *sysGroupReq) setGroup(grp net.IP) {
45
+ sa := (*sysSockaddrInet)(unsafe.Pointer(&gr.Group))
46
+ sa.Family = syscall.AF_INET
47
+ copy(sa.Addr[:], grp)
48
+}
49
+
50
+func (gsr *sysGroupSourceReq) setSourceGroup(grp, src net.IP) {
51
+ sa := (*sysSockaddrInet)(unsafe.Pointer(&gsr.Group))
52
+ sa.Family = syscall.AF_INET
53
+ copy(sa.Addr[:], grp)
54
+ sa = (*sysSockaddrInet)(unsafe.Pointer(&gsr.Source))
55
+ sa.Family = syscall.AF_INET
56
+ copy(sa.Addr[:], src)
57
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/sys_openbsd.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/sys_stub.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/sys_windows.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/syscall_linux_386.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/syscall_unix.go
renamed
+1
-1
@@ -2,7 +2,7 @@
2
// Use of this source code is governed by a BSD-style
3
// license that can be found in the LICENSE file.
4
5
-// +build darwin dragonfly freebsd linux,amd64 linux,arm netbsd openbsd
5
+// +build darwin dragonfly freebsd linux,amd64 linux,arm linux,ppc64 linux,ppc64le netbsd openbsd
6
7
package ipv4
8
Godeps/_workspace/src/golang.org/x/net/ipv4/thunk_linux_386.s
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/unicast_test.go
new
+250
@@ -0,0 +1,250 @@
1
+// Copyright 2012 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv4_test
6
+
7
+import (
8
+ "bytes"
9
+ "net"
10
+ "os"
11
+ "runtime"
12
+ "testing"
13
+ "time"
14
+
15
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
16
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/ipv4"
17
+ "golang.org/x/net/icmp"
18
+ "golang.org/x/net/internal/nettest"
19
+)
20
+
21
+func TestPacketConnReadWriteUnicastUDP(t *testing.T) {
22
+ switch runtime.GOOS {
23
+ case "nacl", "plan9", "solaris", "windows":
24
+ t.Skipf("not supported on %s", runtime.GOOS)
25
+ }
26
+ ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
27
+ if ifi == nil {
28
+ t.Skipf("not available on %s", runtime.GOOS)
29
+ }
30
+
31
+ c, err := net.ListenPacket("udp4", "127.0.0.1:0")
32
+ if err != nil {
33
+ t.Fatal(err)
34
+ }
35
+ defer c.Close()
36
+
37
+ dst, err := net.ResolveUDPAddr("udp4", c.LocalAddr().String())
38
+ if err != nil {
39
+ t.Fatal(err)
40
+ }
41
+ p := ipv4.NewPacketConn(c)
42
+ defer p.Close()
43
+ cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
44
+ wb := []byte("HELLO-R-U-THERE")
45
+
46
+ for i, toggle := range []bool{true, false, true} {
47
+ if err := p.SetControlMessage(cf, toggle); err != nil {
48
+ if nettest.ProtocolNotSupported(err) {
49
+ t.Logf("not supported on %s", runtime.GOOS)
50
+ continue
51
+ }
52
+ t.Fatal(err)
53
+ }
54
+ p.SetTTL(i + 1)
55
+ if err := p.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
56
+ t.Fatal(err)
57
+ }
58
+ if n, err := p.WriteTo(wb, nil, dst); err != nil {
59
+ t.Fatal(err)
60
+ } else if n != len(wb) {
61
+ t.Fatalf("got %v; want %v", n, len(wb))
62
+ }
63
+ rb := make([]byte, 128)
64
+ if err := p.SetReadDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
65
+ t.Fatal(err)
66
+ }
67
+ if n, cm, _, err := p.ReadFrom(rb); err != nil {
68
+ t.Fatal(err)
69
+ } else if !bytes.Equal(rb[:n], wb) {
70
+ t.Fatalf("got %v; want %v", rb[:n], wb)
71
+ } else {
72
+ t.Logf("rcvd cmsg: %v", cm)
73
+ }
74
+ }
75
+}
76
+
77
+func TestPacketConnReadWriteUnicastICMP(t *testing.T) {
78
+ switch runtime.GOOS {
79
+ case "nacl", "plan9", "solaris", "windows":
80
+ t.Skipf("not supported on %s", runtime.GOOS)
81
+ }
82
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
83
+ t.Skip(m)
84
+ }
85
+ ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
86
+ if ifi == nil {
87
+ t.Skipf("not available on %s", runtime.GOOS)
88
+ }
89
+
90
+ c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
91
+ if err != nil {
92
+ t.Fatal(err)
93
+ }
94
+ defer c.Close()
95
+
96
+ dst, err := net.ResolveIPAddr("ip4", "127.0.0.1")
97
+ if err != nil {
98
+ t.Fatal(err)
99
+ }
100
+ p := ipv4.NewPacketConn(c)
101
+ defer p.Close()
102
+ cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
103
+
104
+ for i, toggle := range []bool{true, false, true} {
105
+ wb, err := (&icmp.Message{
106
+ Type: ipv4.ICMPTypeEcho, Code: 0,
107
+ Body: &icmp.Echo{
108
+ ID: os.Getpid() & 0xffff, Seq: i + 1,
109
+ Data: []byte("HELLO-R-U-THERE"),
110
+ },
111
+ }).Marshal(nil)
112
+ if err != nil {
113
+ t.Fatal(err)
114
+ }
115
+ if err := p.SetControlMessage(cf, toggle); err != nil {
116
+ if nettest.ProtocolNotSupported(err) {
117
+ t.Logf("not supported on %s", runtime.GOOS)
118
+ continue
119
+ }
120
+ t.Fatal(err)
121
+ }
122
+ p.SetTTL(i + 1)
123
+ if err := p.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
124
+ t.Fatal(err)
125
+ }
126
+ if n, err := p.WriteTo(wb, nil, dst); err != nil {
127
+ t.Fatal(err)
128
+ } else if n != len(wb) {
129
+ t.Fatalf("got %v; want %v", n, len(wb))
130
+ }
131
+ rb := make([]byte, 128)
132
+ loop:
133
+ if err := p.SetReadDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
134
+ t.Fatal(err)
135
+ }
136
+ if n, cm, _, err := p.ReadFrom(rb); err != nil {
137
+ switch runtime.GOOS {
138
+ case "darwin": // older darwin kernels have some limitation on receiving icmp packet through raw socket
139
+ t.Logf("not supported on %s", runtime.GOOS)
140
+ continue
141
+ }
142
+ t.Fatal(err)
143
+ } else {
144
+ t.Logf("rcvd cmsg: %v", cm)
145
+ m, err := icmp.ParseMessage(iana.ProtocolICMP, rb[:n])
146
+ if err != nil {
147
+ t.Fatal(err)
148
+ }
149
+ if runtime.GOOS == "linux" && m.Type == ipv4.ICMPTypeEcho {
150
+ // On Linux we must handle own sent packets.
151
+ goto loop
152
+ }
153
+ if m.Type != ipv4.ICMPTypeEchoReply || m.Code != 0 {
154
+ t.Fatalf("got type=%v, code=%v; want type=%v, code=%v", m.Type, m.Code, ipv4.ICMPTypeEchoReply, 0)
155
+ }
156
+ }
157
+ }
158
+}
159
+
160
+func TestRawConnReadWriteUnicastICMP(t *testing.T) {
161
+ switch runtime.GOOS {
162
+ case "nacl", "plan9", "solaris", "windows":
163
+ t.Skipf("not supported on %s", runtime.GOOS)
164
+ }
165
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
166
+ t.Skip(m)
167
+ }
168
+ ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
169
+ if ifi == nil {
170
+ t.Skipf("not available on %s", runtime.GOOS)
171
+ }
172
+
173
+ c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
174
+ if err != nil {
175
+ t.Fatal(err)
176
+ }
177
+ defer c.Close()
178
+
179
+ dst, err := net.ResolveIPAddr("ip4", "127.0.0.1")
180
+ if err != nil {
181
+ t.Fatal(err)
182
+ }
183
+ r, err := ipv4.NewRawConn(c)
184
+ if err != nil {
185
+ t.Fatal(err)
186
+ }
187
+ defer r.Close()
188
+ cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
189
+
190
+ for i, toggle := range []bool{true, false, true} {
191
+ wb, err := (&icmp.Message{
192
+ Type: ipv4.ICMPTypeEcho, Code: 0,
193
+ Body: &icmp.Echo{
194
+ ID: os.Getpid() & 0xffff, Seq: i + 1,
195
+ Data: []byte("HELLO-R-U-THERE"),
196
+ },
197
+ }).Marshal(nil)
198
+ if err != nil {
199
+ t.Fatal(err)
200
+ }
201
+ wh := &ipv4.Header{
202
+ Version: ipv4.Version,
203
+ Len: ipv4.HeaderLen,
204
+ TOS: i + 1,
205
+ TotalLen: ipv4.HeaderLen + len(wb),
206
+ TTL: i + 1,
207
+ Protocol: 1,
208
+ Dst: dst.IP,
209
+ }
210
+ if err := r.SetControlMessage(cf, toggle); err != nil {
211
+ if nettest.ProtocolNotSupported(err) {
212
+ t.Logf("not supported on %s", runtime.GOOS)
213
+ continue
214
+ }
215
+ t.Fatal(err)
216
+ }
217
+ if err := r.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
218
+ t.Fatal(err)
219
+ }
220
+ if err := r.WriteTo(wh, wb, nil); err != nil {
221
+ t.Fatal(err)
222
+ }
223
+ rb := make([]byte, ipv4.HeaderLen+128)
224
+ loop:
225
+ if err := r.SetReadDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
226
+ t.Fatal(err)
227
+ }
228
+ if _, b, cm, err := r.ReadFrom(rb); err != nil {
229
+ switch runtime.GOOS {
230
+ case "darwin": // older darwin kernels have some limitation on receiving icmp packet through raw socket
231
+ t.Logf("not supported on %s", runtime.GOOS)
232
+ continue
233
+ }
234
+ t.Fatal(err)
235
+ } else {
236
+ t.Logf("rcvd cmsg: %v", cm)
237
+ m, err := icmp.ParseMessage(iana.ProtocolICMP, b)
238
+ if err != nil {
239
+ t.Fatal(err)
240
+ }
241
+ if runtime.GOOS == "linux" && m.Type == ipv4.ICMPTypeEcho {
242
+ // On Linux we must handle own sent packets.
243
+ goto loop
244
+ }
245
+ if m.Type != ipv4.ICMPTypeEchoReply || m.Code != 0 {
246
+ t.Fatalf("got type=%v, code=%v; want type=%v, code=%v", m.Type, m.Code, ipv4.ICMPTypeEchoReply, 0)
247
+ }
248
+ }
249
+ }
250
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/unicastsockopt_test.go
renamed
+27
-26
@@ -6,28 +6,27 @@ package ipv4_test
6
7
import (
8
"net"
9
- "os"
9
"runtime"
10
"testing"
11
13
- "code.google.com/p/go.net/internal/nettest"
14
- "code.google.com/p/go.net/ipv4"
15
- "github.com/ipfs/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/internal/iana"
12
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
13
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/ipv4"
14
+ "golang.org/x/net/internal/nettest"
15
)
16
17
func TestConnUnicastSocketOptions(t *testing.T) {
18
switch runtime.GOOS {
19
case "nacl", "plan9", "solaris":
21
- t.Skipf("not supported on %q", runtime.GOOS)
20
+ t.Skipf("not supported on %s", runtime.GOOS)
21
}
22
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
23
if ifi == nil {
25
- t.Skipf("not available on %q", runtime.GOOS)
24
+ t.Skipf("not available on %s", runtime.GOOS)
25
}
26
27
ln, err := net.Listen("tcp4", "127.0.0.1:0")
28
if err != nil {
30
- t.Fatalf("net.Listen failed: %v", err)
29
+ t.Fatal(err)
30
}
31
defer ln.Close()
32
@@ -36,7 +35,7 @@ func TestConnUnicastSocketOptions(t *testing.T) {
35
36
c, err := net.Dial("tcp4", ln.Addr().String())
37
if err != nil {
39
- t.Fatalf("net.Dial failed: %v", err)
38
+ t.Fatal(err)
39
}
40
defer c.Close()
41
@@ -55,20 +54,22 @@ var packetConnUnicastSocketOptionTests = []struct {
54
func TestPacketConnUnicastSocketOptions(t *testing.T) {
55
switch runtime.GOOS {
56
case "nacl", "plan9", "solaris":
58
- t.Skipf("not supported on %q", runtime.GOOS)
57
+ t.Skipf("not supported on %s", runtime.GOOS)
58
}
59
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
60
if ifi == nil {
62
- t.Skipf("not available on %q", runtime.GOOS)
61
+ t.Skipf("not available on %s", runtime.GOOS)
62
}
63
64
+ m, ok := nettest.SupportsRawIPSocket()
65
for _, tt := range packetConnUnicastSocketOptionTests {
66
- if tt.net == "ip4" && os.Getuid() != 0 {
67
- t.Skip("must be root")
66
+ if tt.net == "ip4" && !ok {
67
+ t.Log(m)
68
+ continue
69
}
70
c, err := net.ListenPacket(tt.net+tt.proto, tt.addr)
71
if err != nil {
71
- t.Fatalf("net.ListenPacket(%q, %q) failed: %v", tt.net+tt.proto, tt.addr, err)
72
+ t.Fatal(err)
73
}
74
defer c.Close()
75
@@ -79,25 +80,25 @@ func TestPacketConnUnicastSocketOptions(t *testing.T) {
80
func TestRawConnUnicastSocketOptions(t *testing.T) {
81
switch runtime.GOOS {
82
case "nacl", "plan9", "solaris":
82
- t.Skipf("not supported on %q", runtime.GOOS)
83
+ t.Skipf("not supported on %s", runtime.GOOS)
84
}
84
- if os.Getuid() != 0 {
85
- t.Skip("must be root")
85
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
86
+ t.Skip(m)
87
}
88
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
89
if ifi == nil {
89
- t.Skipf("not available on %q", runtime.GOOS)
90
+ t.Skipf("not available on %s", runtime.GOOS)
91
}
92
93
c, err := net.ListenPacket("ip4:icmp", "127.0.0.1")
94
if err != nil {
94
- t.Fatalf("net.ListenPacket failed: %v", err)
95
+ t.Fatal(err)
96
}
97
defer c.Close()
98
99
r, err := ipv4.NewRawConn(c)
100
if err != nil {
100
- t.Fatalf("ipv4.NewRawConn failed: %v", err)
101
+ t.Fatal(err)
102
}
103
104
testUnicastSocketOptions(t, r)
@@ -115,24 +116,24 @@ func testUnicastSocketOptions(t *testing.T, c testIPv4UnicastConn) {
116
switch runtime.GOOS {
117
case "windows":
118
// IP_TOS option is supported on Windows 8 and beyond.
118
- t.Skipf("skipping IP_TOS test on %q", runtime.GOOS)
119
+ t.Skipf("not supported on %s", runtime.GOOS)
120
}
121
122
if err := c.SetTOS(tos); err != nil {
122
- t.Fatalf("ipv4.Conn.SetTOS failed: %v", err)
123
+ t.Fatal(err)
124
}
125
if v, err := c.TOS(); err != nil {
125
- t.Fatalf("ipv4.Conn.TOS failed: %v", err)
126
+ t.Fatal(err)
127
} else if v != tos {
127
- t.Fatalf("got unexpected TOS value %v; expected %v", v, tos)
128
+ t.Fatalf("got %v; want %v", v, tos)
129
}
130
const ttl = 255
131
if err := c.SetTTL(ttl); err != nil {
131
- t.Fatalf("ipv4.Conn.SetTTL failed: %v", err)
132
+ t.Fatal(err)
133
}
134
if v, err := c.TTL(); err != nil {
134
- t.Fatalf("ipv4.Conn.TTL failed: %v", err)
135
+ t.Fatal(err)
136
} else if v != ttl {
136
- t.Fatalf("got unexpected TTL value %v; expected %v", v, ttl)
137
+ t.Fatalf("got %v; want %v", v, ttl)
138
}
139
}
Godeps/_workspace/src/golang.org/x/net/ipv4/zsys_darwin.go
renamed
+41
-4
@@ -30,14 +30,40 @@ const (
30
sysIP_DROP_SOURCE_MEMBERSHIP = 0x47
31
sysIP_BLOCK_SOURCE = 0x48
32
sysIP_UNBLOCK_SOURCE = 0x49
33
+ sysMCAST_JOIN_GROUP = 0x50
34
+ sysMCAST_LEAVE_GROUP = 0x51
35
+ sysMCAST_JOIN_SOURCE_GROUP = 0x52
36
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x53
37
+ sysMCAST_BLOCK_SOURCE = 0x54
38
+ sysMCAST_UNBLOCK_SOURCE = 0x55
39
34
- sysSizeofInetPktinfo = 0xc
40
+ sysSizeofSockaddrStorage = 0x80
41
+ sysSizeofSockaddrInet = 0x10
42
+ sysSizeofInetPktinfo = 0xc
43
36
- sysSizeofIPMreq = 0x8
37
- sysSizeofIPMreqn = 0xc
38
- sysSizeofIPMreqSource = 0xc
44
+ sysSizeofIPMreq = 0x8
45
+ sysSizeofIPMreqn = 0xc
46
+ sysSizeofIPMreqSource = 0xc
47
+ sysSizeofGroupReq = 0x84
48
+ sysSizeofGroupSourceReq = 0x104
49
)
50
51
+type sysSockaddrStorage struct {
52
+ Len uint8
53
+ Family uint8
54
+ X__ss_pad1 [6]int8
55
+ X__ss_align int64
56
+ X__ss_pad2 [112]int8
57
+}
58
+
59
+type sysSockaddrInet struct {
60
+ Len uint8
61
+ Family uint8
62
+ Port uint16
63
+ Addr [4]byte /* in_addr */
64
+ Zero [8]int8
65
+}
66
+
67
type sysInetPktinfo struct {
68
Ifindex uint32
69
Spec_dst [4]byte /* in_addr */
@@ -60,3 +86,14 @@ type sysIPMreqSource struct {
86
Sourceaddr [4]byte /* in_addr */
87
Interface [4]byte /* in_addr */
88
}
89
+
90
+type sysGroupReq struct {
91
+ Interface uint32
92
+ Pad_cgo_0 [128]byte
93
+}
94
+
95
+type sysGroupSourceReq struct {
96
+ Interface uint32
97
+ Pad_cgo_0 [128]byte
98
+ Pad_cgo_1 [128]byte
99
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/zsys_dragonfly.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/zsys_freebsd_386.go
renamed
+41
-3
@@ -31,12 +31,39 @@ const (
31
sysIP_DROP_SOURCE_MEMBERSHIP = 0x47
32
sysIP_BLOCK_SOURCE = 0x48
33
sysIP_UNBLOCK_SOURCE = 0x49
34
+ sysMCAST_JOIN_GROUP = 0x50
35
+ sysMCAST_LEAVE_GROUP = 0x51
36
+ sysMCAST_JOIN_SOURCE_GROUP = 0x52
37
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x53
38
+ sysMCAST_BLOCK_SOURCE = 0x54
39
+ sysMCAST_UNBLOCK_SOURCE = 0x55
40
35
- sysSizeofIPMreq = 0x8
36
- sysSizeofIPMreqn = 0xc
37
- sysSizeofIPMreqSource = 0xc
41
+ sysSizeofSockaddrStorage = 0x80
42
+ sysSizeofSockaddrInet = 0x10
43
+
44
+ sysSizeofIPMreq = 0x8
45
+ sysSizeofIPMreqn = 0xc
46
+ sysSizeofIPMreqSource = 0xc
47
+ sysSizeofGroupReq = 0x84
48
+ sysSizeofGroupSourceReq = 0x104
49
)
50
51
+type sysSockaddrStorage struct {
52
+ Len uint8
53
+ Family uint8
54
+ X__ss_pad1 [6]int8
55
+ X__ss_align int64
56
+ X__ss_pad2 [112]int8
57
+}
58
+
59
+type sysSockaddrInet struct {
60
+ Len uint8
61
+ Family uint8
62
+ Port uint16
63
+ Addr [4]byte /* in_addr */
64
+ Zero [8]int8
65
+}
66
+
67
type sysIPMreq struct {
68
Multiaddr [4]byte /* in_addr */
69
Interface [4]byte /* in_addr */
@@ -53,3 +80,14 @@ type sysIPMreqSource struct {
80
Sourceaddr [4]byte /* in_addr */
81
Interface [4]byte /* in_addr */
82
}
83
+
84
+type sysGroupReq struct {
85
+ Interface uint32
86
+ Group sysSockaddrStorage
87
+}
88
+
89
+type sysGroupSourceReq struct {
90
+ Interface uint32
91
+ Group sysSockaddrStorage
92
+ Source sysSockaddrStorage
93
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/zsys_freebsd_amd64.go
new
+95
@@ -0,0 +1,95 @@
1
+// Created by cgo -godefs - DO NOT EDIT
2
+// cgo -godefs defs_freebsd.go
3
+
4
+package ipv4
5
+
6
+const (
7
+ sysIP_OPTIONS = 0x1
8
+ sysIP_HDRINCL = 0x2
9
+ sysIP_TOS = 0x3
10
+ sysIP_TTL = 0x4
11
+ sysIP_RECVOPTS = 0x5
12
+ sysIP_RECVRETOPTS = 0x6
13
+ sysIP_RECVDSTADDR = 0x7
14
+ sysIP_SENDSRCADDR = 0x7
15
+ sysIP_RETOPTS = 0x8
16
+ sysIP_RECVIF = 0x14
17
+ sysIP_ONESBCAST = 0x17
18
+ sysIP_BINDANY = 0x18
19
+ sysIP_RECVTTL = 0x41
20
+ sysIP_MINTTL = 0x42
21
+ sysIP_DONTFRAG = 0x43
22
+ sysIP_RECVTOS = 0x44
23
+
24
+ sysIP_MULTICAST_IF = 0x9
25
+ sysIP_MULTICAST_TTL = 0xa
26
+ sysIP_MULTICAST_LOOP = 0xb
27
+ sysIP_ADD_MEMBERSHIP = 0xc
28
+ sysIP_DROP_MEMBERSHIP = 0xd
29
+ sysIP_MULTICAST_VIF = 0xe
30
+ sysIP_ADD_SOURCE_MEMBERSHIP = 0x46
31
+ sysIP_DROP_SOURCE_MEMBERSHIP = 0x47
32
+ sysIP_BLOCK_SOURCE = 0x48
33
+ sysIP_UNBLOCK_SOURCE = 0x49
34
+ sysMCAST_JOIN_GROUP = 0x50
35
+ sysMCAST_LEAVE_GROUP = 0x51
36
+ sysMCAST_JOIN_SOURCE_GROUP = 0x52
37
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x53
38
+ sysMCAST_BLOCK_SOURCE = 0x54
39
+ sysMCAST_UNBLOCK_SOURCE = 0x55
40
+
41
+ sysSizeofSockaddrStorage = 0x80
42
+ sysSizeofSockaddrInet = 0x10
43
+
44
+ sysSizeofIPMreq = 0x8
45
+ sysSizeofIPMreqn = 0xc
46
+ sysSizeofIPMreqSource = 0xc
47
+ sysSizeofGroupReq = 0x88
48
+ sysSizeofGroupSourceReq = 0x108
49
+)
50
+
51
+type sysSockaddrStorage struct {
52
+ Len uint8
53
+ Family uint8
54
+ X__ss_pad1 [6]int8
55
+ X__ss_align int64
56
+ X__ss_pad2 [112]int8
57
+}
58
+
59
+type sysSockaddrInet struct {
60
+ Len uint8
61
+ Family uint8
62
+ Port uint16
63
+ Addr [4]byte /* in_addr */
64
+ Zero [8]int8
65
+}
66
+
67
+type sysIPMreq struct {
68
+ Multiaddr [4]byte /* in_addr */
69
+ Interface [4]byte /* in_addr */
70
+}
71
+
72
+type sysIPMreqn struct {
73
+ Multiaddr [4]byte /* in_addr */
74
+ Address [4]byte /* in_addr */
75
+ Ifindex int32
76
+}
77
+
78
+type sysIPMreqSource struct {
79
+ Multiaddr [4]byte /* in_addr */
80
+ Sourceaddr [4]byte /* in_addr */
81
+ Interface [4]byte /* in_addr */
82
+}
83
+
84
+type sysGroupReq struct {
85
+ Interface uint32
86
+ Pad_cgo_0 [4]byte
87
+ Group sysSockaddrStorage
88
+}
89
+
90
+type sysGroupSourceReq struct {
91
+ Interface uint32
92
+ Pad_cgo_0 [4]byte
93
+ Group sysSockaddrStorage
94
+ Source sysSockaddrStorage
95
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/zsys_freebsd_arm.go
new
+93
@@ -0,0 +1,93 @@
1
+// Created by cgo -godefs - DO NOT EDIT
2
+// cgo -godefs defs_freebsd.go
3
+
4
+package ipv4
5
+
6
+const (
7
+ sysIP_OPTIONS = 0x1
8
+ sysIP_HDRINCL = 0x2
9
+ sysIP_TOS = 0x3
10
+ sysIP_TTL = 0x4
11
+ sysIP_RECVOPTS = 0x5
12
+ sysIP_RECVRETOPTS = 0x6
13
+ sysIP_RECVDSTADDR = 0x7
14
+ sysIP_SENDSRCADDR = 0x7
15
+ sysIP_RETOPTS = 0x8
16
+ sysIP_RECVIF = 0x14
17
+ sysIP_ONESBCAST = 0x17
18
+ sysIP_BINDANY = 0x18
19
+ sysIP_RECVTTL = 0x41
20
+ sysIP_MINTTL = 0x42
21
+ sysIP_DONTFRAG = 0x43
22
+ sysIP_RECVTOS = 0x44
23
+
24
+ sysIP_MULTICAST_IF = 0x9
25
+ sysIP_MULTICAST_TTL = 0xa
26
+ sysIP_MULTICAST_LOOP = 0xb
27
+ sysIP_ADD_MEMBERSHIP = 0xc
28
+ sysIP_DROP_MEMBERSHIP = 0xd
29
+ sysIP_MULTICAST_VIF = 0xe
30
+ sysIP_ADD_SOURCE_MEMBERSHIP = 0x46
31
+ sysIP_DROP_SOURCE_MEMBERSHIP = 0x47
32
+ sysIP_BLOCK_SOURCE = 0x48
33
+ sysIP_UNBLOCK_SOURCE = 0x49
34
+ sysMCAST_JOIN_GROUP = 0x50
35
+ sysMCAST_LEAVE_GROUP = 0x51
36
+ sysMCAST_JOIN_SOURCE_GROUP = 0x52
37
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x53
38
+ sysMCAST_BLOCK_SOURCE = 0x54
39
+ sysMCAST_UNBLOCK_SOURCE = 0x55
40
+
41
+ sysSizeofSockaddrStorage = 0x80
42
+ sysSizeofSockaddrInet = 0x10
43
+
44
+ sysSizeofIPMreq = 0x8
45
+ sysSizeofIPMreqn = 0xc
46
+ sysSizeofIPMreqSource = 0xc
47
+ sysSizeofGroupReq = 0x84
48
+ sysSizeofGroupSourceReq = 0x104
49
+)
50
+
51
+type sysSockaddrStorage struct {
52
+ Len uint8
53
+ Family uint8
54
+ X__ss_pad1 [6]int8
55
+ X__ss_align int64
56
+ X__ss_pad2 [112]int8
57
+}
58
+
59
+type sysSockaddrInet struct {
60
+ Len uint8
61
+ Family uint8
62
+ Port uint16
63
+ Addr [4]byte /* in_addr */
64
+ Zero [8]int8
65
+}
66
+
67
+type sysIPMreq struct {
68
+ Multiaddr [4]byte /* in_addr */
69
+ Interface [4]byte /* in_addr */
70
+}
71
+
72
+type sysIPMreqn struct {
73
+ Multiaddr [4]byte /* in_addr */
74
+ Address [4]byte /* in_addr */
75
+ Ifindex int32
76
+}
77
+
78
+type sysIPMreqSource struct {
79
+ Multiaddr [4]byte /* in_addr */
80
+ Sourceaddr [4]byte /* in_addr */
81
+ Interface [4]byte /* in_addr */
82
+}
83
+
84
+type sysGroupReq struct {
85
+ Interface uint32
86
+ Group sysSockaddrStorage
87
+}
88
+
89
+type sysGroupSourceReq struct {
90
+ Interface uint32
91
+ Group sysSockaddrStorage
92
+ Source sysSockaddrStorage
93
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/zsys_linux_386.go
renamed
+47
-11
@@ -36,14 +36,17 @@ const (
36
sysIP_BLOCK_SOURCE = 0x26
37
sysIP_ADD_SOURCE_MEMBERSHIP = 0x27
38
sysIP_DROP_SOURCE_MEMBERSHIP = 0x28
39
+ sysIP_MSFILTER = 0x29
40
+ sysMCAST_JOIN_GROUP = 0x2a
41
+ sysMCAST_LEAVE_GROUP = 0x2d
42
+ sysMCAST_JOIN_SOURCE_GROUP = 0x2e
43
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x2f
44
+ sysMCAST_BLOCK_SOURCE = 0x2b
45
+ sysMCAST_UNBLOCK_SOURCE = 0x2c
46
+ sysMCAST_MSFILTER = 0x30
47
sysIP_MULTICAST_ALL = 0x31
48
41
- sysIP_PMTUDISC_DONT = 0x0
42
- sysIP_PMTUDISC_WANT = 0x1
43
- sysIP_PMTUDISC_DO = 0x2
44
- sysIP_PMTUDISC_PROBE = 0x3
45
- sysIP_PMTUDISC_INTERFACE = 0x4
46
- sysIP_PMTUDISC_OMIT = 0x5
49
+ sysICMP_FILTER = 0x1
50
51
sysSO_EE_ORIGIN_NONE = 0x0
52
sysSO_EE_ORIGIN_LOCAL = 0x1
@@ -52,14 +55,32 @@ const (
55
sysSO_EE_ORIGIN_TXSTATUS = 0x4
56
sysSO_EE_ORIGIN_TIMESTAMPING = 0x4
57
55
- sysSizeofInetPktinfo = 0xc
56
- sysSizeofSockExtendedErr = 0x10
58
+ sysSizeofKernelSockaddrStorage = 0x80
59
+ sysSizeofSockaddrInet = 0x10
60
+ sysSizeofInetPktinfo = 0xc
61
+ sysSizeofSockExtendedErr = 0x10
62
58
- sysSizeofIPMreq = 0x8
59
- sysSizeofIPMreqn = 0xc
60
- sysSizeofIPMreqSource = 0xc
63
+ sysSizeofIPMreq = 0x8
64
+ sysSizeofIPMreqn = 0xc
65
+ sysSizeofIPMreqSource = 0xc
66
+ sysSizeofGroupReq = 0x84
67
+ sysSizeofGroupSourceReq = 0x104
68
+
69
+ sysSizeofICMPFilter = 0x4
70
)
71
72
+type sysKernelSockaddrStorage struct {
73
+ Family uint16
74
+ X__data [126]int8
75
+}
76
+
77
+type sysSockaddrInet struct {
78
+ Family uint16
79
+ Port uint16
80
+ Addr [4]byte /* in_addr */
81
+ X__pad [8]uint8
82
+}
83
+
84
type sysInetPktinfo struct {
85
Ifindex int32
86
Spec_dst [4]byte /* in_addr */
@@ -92,3 +113,18 @@ type sysIPMreqSource struct {
113
Interface uint32
114
Sourceaddr uint32
115
}
116
+
117
+type sysGroupReq struct {
118
+ Interface uint32
119
+ Group sysKernelSockaddrStorage
120
+}
121
+
122
+type sysGroupSourceReq struct {
123
+ Interface uint32
124
+ Group sysKernelSockaddrStorage
125
+ Source sysKernelSockaddrStorage
126
+}
127
+
128
+type sysICMPFilter struct {
129
+ Data uint32
130
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/zsys_linux_amd64.go
new
+132
@@ -0,0 +1,132 @@
1
+// Created by cgo -godefs - DO NOT EDIT
2
+// cgo -godefs defs_linux.go
3
+
4
+package ipv4
5
+
6
+const (
7
+ sysIP_TOS = 0x1
8
+ sysIP_TTL = 0x2
9
+ sysIP_HDRINCL = 0x3
10
+ sysIP_OPTIONS = 0x4
11
+ sysIP_ROUTER_ALERT = 0x5
12
+ sysIP_RECVOPTS = 0x6
13
+ sysIP_RETOPTS = 0x7
14
+ sysIP_PKTINFO = 0x8
15
+ sysIP_PKTOPTIONS = 0x9
16
+ sysIP_MTU_DISCOVER = 0xa
17
+ sysIP_RECVERR = 0xb
18
+ sysIP_RECVTTL = 0xc
19
+ sysIP_RECVTOS = 0xd
20
+ sysIP_MTU = 0xe
21
+ sysIP_FREEBIND = 0xf
22
+ sysIP_TRANSPARENT = 0x13
23
+ sysIP_RECVRETOPTS = 0x7
24
+ sysIP_ORIGDSTADDR = 0x14
25
+ sysIP_RECVORIGDSTADDR = 0x14
26
+ sysIP_MINTTL = 0x15
27
+ sysIP_NODEFRAG = 0x16
28
+ sysIP_UNICAST_IF = 0x32
29
+
30
+ sysIP_MULTICAST_IF = 0x20
31
+ sysIP_MULTICAST_TTL = 0x21
32
+ sysIP_MULTICAST_LOOP = 0x22
33
+ sysIP_ADD_MEMBERSHIP = 0x23
34
+ sysIP_DROP_MEMBERSHIP = 0x24
35
+ sysIP_UNBLOCK_SOURCE = 0x25
36
+ sysIP_BLOCK_SOURCE = 0x26
37
+ sysIP_ADD_SOURCE_MEMBERSHIP = 0x27
38
+ sysIP_DROP_SOURCE_MEMBERSHIP = 0x28
39
+ sysIP_MSFILTER = 0x29
40
+ sysMCAST_JOIN_GROUP = 0x2a
41
+ sysMCAST_LEAVE_GROUP = 0x2d
42
+ sysMCAST_JOIN_SOURCE_GROUP = 0x2e
43
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x2f
44
+ sysMCAST_BLOCK_SOURCE = 0x2b
45
+ sysMCAST_UNBLOCK_SOURCE = 0x2c
46
+ sysMCAST_MSFILTER = 0x30
47
+ sysIP_MULTICAST_ALL = 0x31
48
+
49
+ sysICMP_FILTER = 0x1
50
+
51
+ sysSO_EE_ORIGIN_NONE = 0x0
52
+ sysSO_EE_ORIGIN_LOCAL = 0x1
53
+ sysSO_EE_ORIGIN_ICMP = 0x2
54
+ sysSO_EE_ORIGIN_ICMP6 = 0x3
55
+ sysSO_EE_ORIGIN_TXSTATUS = 0x4
56
+ sysSO_EE_ORIGIN_TIMESTAMPING = 0x4
57
+
58
+ sysSizeofKernelSockaddrStorage = 0x80
59
+ sysSizeofSockaddrInet = 0x10
60
+ sysSizeofInetPktinfo = 0xc
61
+ sysSizeofSockExtendedErr = 0x10
62
+
63
+ sysSizeofIPMreq = 0x8
64
+ sysSizeofIPMreqn = 0xc
65
+ sysSizeofIPMreqSource = 0xc
66
+ sysSizeofGroupReq = 0x88
67
+ sysSizeofGroupSourceReq = 0x108
68
+
69
+ sysSizeofICMPFilter = 0x4
70
+)
71
+
72
+type sysKernelSockaddrStorage struct {
73
+ Family uint16
74
+ X__data [126]int8
75
+}
76
+
77
+type sysSockaddrInet struct {
78
+ Family uint16
79
+ Port uint16
80
+ Addr [4]byte /* in_addr */
81
+ X__pad [8]uint8
82
+}
83
+
84
+type sysInetPktinfo struct {
85
+ Ifindex int32
86
+ Spec_dst [4]byte /* in_addr */
87
+ Addr [4]byte /* in_addr */
88
+}
89
+
90
+type sysSockExtendedErr struct {
91
+ Errno uint32
92
+ Origin uint8
93
+ Type uint8
94
+ Code uint8
95
+ Pad uint8
96
+ Info uint32
97
+ Data uint32
98
+}
99
+
100
+type sysIPMreq struct {
101
+ Multiaddr [4]byte /* in_addr */
102
+ Interface [4]byte /* in_addr */
103
+}
104
+
105
+type sysIPMreqn struct {
106
+ Multiaddr [4]byte /* in_addr */
107
+ Address [4]byte /* in_addr */
108
+ Ifindex int32
109
+}
110
+
111
+type sysIPMreqSource struct {
112
+ Multiaddr uint32
113
+ Interface uint32
114
+ Sourceaddr uint32
115
+}
116
+
117
+type sysGroupReq struct {
118
+ Interface uint32
119
+ Pad_cgo_0 [4]byte
120
+ Group sysKernelSockaddrStorage
121
+}
122
+
123
+type sysGroupSourceReq struct {
124
+ Interface uint32
125
+ Pad_cgo_0 [4]byte
126
+ Group sysKernelSockaddrStorage
127
+ Source sysKernelSockaddrStorage
128
+}
129
+
130
+type sysICMPFilter struct {
131
+ Data uint32
132
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/zsys_linux_arm.go
new
+130
@@ -0,0 +1,130 @@
1
+// Created by cgo -godefs - DO NOT EDIT
2
+// cgo -godefs defs_linux.go
3
+
4
+package ipv4
5
+
6
+const (
7
+ sysIP_TOS = 0x1
8
+ sysIP_TTL = 0x2
9
+ sysIP_HDRINCL = 0x3
10
+ sysIP_OPTIONS = 0x4
11
+ sysIP_ROUTER_ALERT = 0x5
12
+ sysIP_RECVOPTS = 0x6
13
+ sysIP_RETOPTS = 0x7
14
+ sysIP_PKTINFO = 0x8
15
+ sysIP_PKTOPTIONS = 0x9
16
+ sysIP_MTU_DISCOVER = 0xa
17
+ sysIP_RECVERR = 0xb
18
+ sysIP_RECVTTL = 0xc
19
+ sysIP_RECVTOS = 0xd
20
+ sysIP_MTU = 0xe
21
+ sysIP_FREEBIND = 0xf
22
+ sysIP_TRANSPARENT = 0x13
23
+ sysIP_RECVRETOPTS = 0x7
24
+ sysIP_ORIGDSTADDR = 0x14
25
+ sysIP_RECVORIGDSTADDR = 0x14
26
+ sysIP_MINTTL = 0x15
27
+ sysIP_NODEFRAG = 0x16
28
+ sysIP_UNICAST_IF = 0x32
29
+
30
+ sysIP_MULTICAST_IF = 0x20
31
+ sysIP_MULTICAST_TTL = 0x21
32
+ sysIP_MULTICAST_LOOP = 0x22
33
+ sysIP_ADD_MEMBERSHIP = 0x23
34
+ sysIP_DROP_MEMBERSHIP = 0x24
35
+ sysIP_UNBLOCK_SOURCE = 0x25
36
+ sysIP_BLOCK_SOURCE = 0x26
37
+ sysIP_ADD_SOURCE_MEMBERSHIP = 0x27
38
+ sysIP_DROP_SOURCE_MEMBERSHIP = 0x28
39
+ sysIP_MSFILTER = 0x29
40
+ sysMCAST_JOIN_GROUP = 0x2a
41
+ sysMCAST_LEAVE_GROUP = 0x2d
42
+ sysMCAST_JOIN_SOURCE_GROUP = 0x2e
43
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x2f
44
+ sysMCAST_BLOCK_SOURCE = 0x2b
45
+ sysMCAST_UNBLOCK_SOURCE = 0x2c
46
+ sysMCAST_MSFILTER = 0x30
47
+ sysIP_MULTICAST_ALL = 0x31
48
+
49
+ sysICMP_FILTER = 0x1
50
+
51
+ sysSO_EE_ORIGIN_NONE = 0x0
52
+ sysSO_EE_ORIGIN_LOCAL = 0x1
53
+ sysSO_EE_ORIGIN_ICMP = 0x2
54
+ sysSO_EE_ORIGIN_ICMP6 = 0x3
55
+ sysSO_EE_ORIGIN_TXSTATUS = 0x4
56
+ sysSO_EE_ORIGIN_TIMESTAMPING = 0x4
57
+
58
+ sysSizeofKernelSockaddrStorage = 0x80
59
+ sysSizeofSockaddrInet = 0x10
60
+ sysSizeofInetPktinfo = 0xc
61
+ sysSizeofSockExtendedErr = 0x10
62
+
63
+ sysSizeofIPMreq = 0x8
64
+ sysSizeofIPMreqn = 0xc
65
+ sysSizeofIPMreqSource = 0xc
66
+ sysSizeofGroupReq = 0x84
67
+ sysSizeofGroupSourceReq = 0x104
68
+
69
+ sysSizeofICMPFilter = 0x4
70
+)
71
+
72
+type sysKernelSockaddrStorage struct {
73
+ Family uint16
74
+ X__data [126]int8
75
+}
76
+
77
+type sysSockaddrInet struct {
78
+ Family uint16
79
+ Port uint16
80
+ Addr [4]byte /* in_addr */
81
+ X__pad [8]uint8
82
+}
83
+
84
+type sysInetPktinfo struct {
85
+ Ifindex int32
86
+ Spec_dst [4]byte /* in_addr */
87
+ Addr [4]byte /* in_addr */
88
+}
89
+
90
+type sysSockExtendedErr struct {
91
+ Errno uint32
92
+ Origin uint8
93
+ Type uint8
94
+ Code uint8
95
+ Pad uint8
96
+ Info uint32
97
+ Data uint32
98
+}
99
+
100
+type sysIPMreq struct {
101
+ Multiaddr [4]byte /* in_addr */
102
+ Interface [4]byte /* in_addr */
103
+}
104
+
105
+type sysIPMreqn struct {
106
+ Multiaddr [4]byte /* in_addr */
107
+ Address [4]byte /* in_addr */
108
+ Ifindex int32
109
+}
110
+
111
+type sysIPMreqSource struct {
112
+ Multiaddr uint32
113
+ Interface uint32
114
+ Sourceaddr uint32
115
+}
116
+
117
+type sysGroupReq struct {
118
+ Interface uint32
119
+ Group sysKernelSockaddrStorage
120
+}
121
+
122
+type sysGroupSourceReq struct {
123
+ Interface uint32
124
+ Group sysKernelSockaddrStorage
125
+ Source sysKernelSockaddrStorage
126
+}
127
+
128
+type sysICMPFilter struct {
129
+ Data uint32
130
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/zsys_linux_arm64.go
new
+134
@@ -0,0 +1,134 @@
1
+// Created by cgo -godefs - DO NOT EDIT
2
+// cgo -godefs defs_linux.go
3
+
4
+// +build linux,arm64
5
+
6
+package ipv4
7
+
8
+const (
9
+ sysIP_TOS = 0x1
10
+ sysIP_TTL = 0x2
11
+ sysIP_HDRINCL = 0x3
12
+ sysIP_OPTIONS = 0x4
13
+ sysIP_ROUTER_ALERT = 0x5
14
+ sysIP_RECVOPTS = 0x6
15
+ sysIP_RETOPTS = 0x7
16
+ sysIP_PKTINFO = 0x8
17
+ sysIP_PKTOPTIONS = 0x9
18
+ sysIP_MTU_DISCOVER = 0xa
19
+ sysIP_RECVERR = 0xb
20
+ sysIP_RECVTTL = 0xc
21
+ sysIP_RECVTOS = 0xd
22
+ sysIP_MTU = 0xe
23
+ sysIP_FREEBIND = 0xf
24
+ sysIP_TRANSPARENT = 0x13
25
+ sysIP_RECVRETOPTS = 0x7
26
+ sysIP_ORIGDSTADDR = 0x14
27
+ sysIP_RECVORIGDSTADDR = 0x14
28
+ sysIP_MINTTL = 0x15
29
+ sysIP_NODEFRAG = 0x16
30
+ sysIP_UNICAST_IF = 0x32
31
+
32
+ sysIP_MULTICAST_IF = 0x20
33
+ sysIP_MULTICAST_TTL = 0x21
34
+ sysIP_MULTICAST_LOOP = 0x22
35
+ sysIP_ADD_MEMBERSHIP = 0x23
36
+ sysIP_DROP_MEMBERSHIP = 0x24
37
+ sysIP_UNBLOCK_SOURCE = 0x25
38
+ sysIP_BLOCK_SOURCE = 0x26
39
+ sysIP_ADD_SOURCE_MEMBERSHIP = 0x27
40
+ sysIP_DROP_SOURCE_MEMBERSHIP = 0x28
41
+ sysIP_MSFILTER = 0x29
42
+ sysMCAST_JOIN_GROUP = 0x2a
43
+ sysMCAST_LEAVE_GROUP = 0x2d
44
+ sysMCAST_JOIN_SOURCE_GROUP = 0x2e
45
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x2f
46
+ sysMCAST_BLOCK_SOURCE = 0x2b
47
+ sysMCAST_UNBLOCK_SOURCE = 0x2c
48
+ sysMCAST_MSFILTER = 0x30
49
+ sysIP_MULTICAST_ALL = 0x31
50
+
51
+ sysICMP_FILTER = 0x1
52
+
53
+ sysSO_EE_ORIGIN_NONE = 0x0
54
+ sysSO_EE_ORIGIN_LOCAL = 0x1
55
+ sysSO_EE_ORIGIN_ICMP = 0x2
56
+ sysSO_EE_ORIGIN_ICMP6 = 0x3
57
+ sysSO_EE_ORIGIN_TXSTATUS = 0x4
58
+ sysSO_EE_ORIGIN_TIMESTAMPING = 0x4
59
+
60
+ sysSizeofKernelSockaddrStorage = 0x80
61
+ sysSizeofSockaddrInet = 0x10
62
+ sysSizeofInetPktinfo = 0xc
63
+ sysSizeofSockExtendedErr = 0x10
64
+
65
+ sysSizeofIPMreq = 0x8
66
+ sysSizeofIPMreqn = 0xc
67
+ sysSizeofIPMreqSource = 0xc
68
+ sysSizeofGroupReq = 0x88
69
+ sysSizeofGroupSourceReq = 0x108
70
+
71
+ sysSizeofICMPFilter = 0x4
72
+)
73
+
74
+type sysKernelSockaddrStorage struct {
75
+ Family uint16
76
+ X__data [126]int8
77
+}
78
+
79
+type sysSockaddrInet struct {
80
+ Family uint16
81
+ Port uint16
82
+ Addr [4]byte /* in_addr */
83
+ X__pad [8]uint8
84
+}
85
+
86
+type sysInetPktinfo struct {
87
+ Ifindex int32
88
+ Spec_dst [4]byte /* in_addr */
89
+ Addr [4]byte /* in_addr */
90
+}
91
+
92
+type sysSockExtendedErr struct {
93
+ Errno uint32
94
+ Origin uint8
95
+ Type uint8
96
+ Code uint8
97
+ Pad uint8
98
+ Info uint32
99
+ Data uint32
100
+}
101
+
102
+type sysIPMreq struct {
103
+ Multiaddr [4]byte /* in_addr */
104
+ Interface [4]byte /* in_addr */
105
+}
106
+
107
+type sysIPMreqn struct {
108
+ Multiaddr [4]byte /* in_addr */
109
+ Address [4]byte /* in_addr */
110
+ Ifindex int32
111
+}
112
+
113
+type sysIPMreqSource struct {
114
+ Multiaddr uint32
115
+ Interface uint32
116
+ Sourceaddr uint32
117
+}
118
+
119
+type sysGroupReq struct {
120
+ Interface uint32
121
+ Pad_cgo_0 [4]byte
122
+ Group sysKernelSockaddrStorage
123
+}
124
+
125
+type sysGroupSourceReq struct {
126
+ Interface uint32
127
+ Pad_cgo_0 [4]byte
128
+ Group sysKernelSockaddrStorage
129
+ Source sysKernelSockaddrStorage
130
+}
131
+
132
+type sysICMPFilter struct {
133
+ Data uint32
134
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/zsys_linux_ppc64.go
new
+134
@@ -0,0 +1,134 @@
1
+// Created by cgo -godefs - DO NOT EDIT
2
+// cgo -godefs defs_linux.go
3
+
4
+// +build linux,ppc64
5
+
6
+package ipv4
7
+
8
+const (
9
+ sysIP_TOS = 0x1
10
+ sysIP_TTL = 0x2
11
+ sysIP_HDRINCL = 0x3
12
+ sysIP_OPTIONS = 0x4
13
+ sysIP_ROUTER_ALERT = 0x5
14
+ sysIP_RECVOPTS = 0x6
15
+ sysIP_RETOPTS = 0x7
16
+ sysIP_PKTINFO = 0x8
17
+ sysIP_PKTOPTIONS = 0x9
18
+ sysIP_MTU_DISCOVER = 0xa
19
+ sysIP_RECVERR = 0xb
20
+ sysIP_RECVTTL = 0xc
21
+ sysIP_RECVTOS = 0xd
22
+ sysIP_MTU = 0xe
23
+ sysIP_FREEBIND = 0xf
24
+ sysIP_TRANSPARENT = 0x13
25
+ sysIP_RECVRETOPTS = 0x7
26
+ sysIP_ORIGDSTADDR = 0x14
27
+ sysIP_RECVORIGDSTADDR = 0x14
28
+ sysIP_MINTTL = 0x15
29
+ sysIP_NODEFRAG = 0x16
30
+ sysIP_UNICAST_IF = 0x32
31
+
32
+ sysIP_MULTICAST_IF = 0x20
33
+ sysIP_MULTICAST_TTL = 0x21
34
+ sysIP_MULTICAST_LOOP = 0x22
35
+ sysIP_ADD_MEMBERSHIP = 0x23
36
+ sysIP_DROP_MEMBERSHIP = 0x24
37
+ sysIP_UNBLOCK_SOURCE = 0x25
38
+ sysIP_BLOCK_SOURCE = 0x26
39
+ sysIP_ADD_SOURCE_MEMBERSHIP = 0x27
40
+ sysIP_DROP_SOURCE_MEMBERSHIP = 0x28
41
+ sysIP_MSFILTER = 0x29
42
+ sysMCAST_JOIN_GROUP = 0x2a
43
+ sysMCAST_LEAVE_GROUP = 0x2d
44
+ sysMCAST_JOIN_SOURCE_GROUP = 0x2e
45
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x2f
46
+ sysMCAST_BLOCK_SOURCE = 0x2b
47
+ sysMCAST_UNBLOCK_SOURCE = 0x2c
48
+ sysMCAST_MSFILTER = 0x30
49
+ sysIP_MULTICAST_ALL = 0x31
50
+
51
+ sysICMP_FILTER = 0x1
52
+
53
+ sysSO_EE_ORIGIN_NONE = 0x0
54
+ sysSO_EE_ORIGIN_LOCAL = 0x1
55
+ sysSO_EE_ORIGIN_ICMP = 0x2
56
+ sysSO_EE_ORIGIN_ICMP6 = 0x3
57
+ sysSO_EE_ORIGIN_TXSTATUS = 0x4
58
+ sysSO_EE_ORIGIN_TIMESTAMPING = 0x4
59
+
60
+ sysSizeofKernelSockaddrStorage = 0x80
61
+ sysSizeofSockaddrInet = 0x10
62
+ sysSizeofInetPktinfo = 0xc
63
+ sysSizeofSockExtendedErr = 0x10
64
+
65
+ sysSizeofIPMreq = 0x8
66
+ sysSizeofIPMreqn = 0xc
67
+ sysSizeofIPMreqSource = 0xc
68
+ sysSizeofGroupReq = 0x88
69
+ sysSizeofGroupSourceReq = 0x108
70
+
71
+ sysSizeofICMPFilter = 0x4
72
+)
73
+
74
+type sysKernelSockaddrStorage struct {
75
+ Family uint16
76
+ X__data [126]int8
77
+}
78
+
79
+type sysSockaddrInet struct {
80
+ Family uint16
81
+ Port uint16
82
+ Addr [4]byte /* in_addr */
83
+ X__pad [8]uint8
84
+}
85
+
86
+type sysInetPktinfo struct {
87
+ Ifindex int32
88
+ Spec_dst [4]byte /* in_addr */
89
+ Addr [4]byte /* in_addr */
90
+}
91
+
92
+type sysSockExtendedErr struct {
93
+ Errno uint32
94
+ Origin uint8
95
+ Type uint8
96
+ Code uint8
97
+ Pad uint8
98
+ Info uint32
99
+ Data uint32
100
+}
101
+
102
+type sysIPMreq struct {
103
+ Multiaddr [4]byte /* in_addr */
104
+ Interface [4]byte /* in_addr */
105
+}
106
+
107
+type sysIPMreqn struct {
108
+ Multiaddr [4]byte /* in_addr */
109
+ Address [4]byte /* in_addr */
110
+ Ifindex int32
111
+}
112
+
113
+type sysIPMreqSource struct {
114
+ Multiaddr uint32
115
+ Interface uint32
116
+ Sourceaddr uint32
117
+}
118
+
119
+type sysGroupReq struct {
120
+ Interface uint32
121
+ Pad_cgo_0 [4]byte
122
+ Group sysKernelSockaddrStorage
123
+}
124
+
125
+type sysGroupSourceReq struct {
126
+ Interface uint32
127
+ Pad_cgo_0 [4]byte
128
+ Group sysKernelSockaddrStorage
129
+ Source sysKernelSockaddrStorage
130
+}
131
+
132
+type sysICMPFilter struct {
133
+ Data uint32
134
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/zsys_linux_ppc64le.go
new
+134
@@ -0,0 +1,134 @@
1
+// Created by cgo -godefs - DO NOT EDIT
2
+// cgo -godefs defs_linux.go
3
+
4
+// +build linux,ppc64le
5
+
6
+package ipv4
7
+
8
+const (
9
+ sysIP_TOS = 0x1
10
+ sysIP_TTL = 0x2
11
+ sysIP_HDRINCL = 0x3
12
+ sysIP_OPTIONS = 0x4
13
+ sysIP_ROUTER_ALERT = 0x5
14
+ sysIP_RECVOPTS = 0x6
15
+ sysIP_RETOPTS = 0x7
16
+ sysIP_PKTINFO = 0x8
17
+ sysIP_PKTOPTIONS = 0x9
18
+ sysIP_MTU_DISCOVER = 0xa
19
+ sysIP_RECVERR = 0xb
20
+ sysIP_RECVTTL = 0xc
21
+ sysIP_RECVTOS = 0xd
22
+ sysIP_MTU = 0xe
23
+ sysIP_FREEBIND = 0xf
24
+ sysIP_TRANSPARENT = 0x13
25
+ sysIP_RECVRETOPTS = 0x7
26
+ sysIP_ORIGDSTADDR = 0x14
27
+ sysIP_RECVORIGDSTADDR = 0x14
28
+ sysIP_MINTTL = 0x15
29
+ sysIP_NODEFRAG = 0x16
30
+ sysIP_UNICAST_IF = 0x32
31
+
32
+ sysIP_MULTICAST_IF = 0x20
33
+ sysIP_MULTICAST_TTL = 0x21
34
+ sysIP_MULTICAST_LOOP = 0x22
35
+ sysIP_ADD_MEMBERSHIP = 0x23
36
+ sysIP_DROP_MEMBERSHIP = 0x24
37
+ sysIP_UNBLOCK_SOURCE = 0x25
38
+ sysIP_BLOCK_SOURCE = 0x26
39
+ sysIP_ADD_SOURCE_MEMBERSHIP = 0x27
40
+ sysIP_DROP_SOURCE_MEMBERSHIP = 0x28
41
+ sysIP_MSFILTER = 0x29
42
+ sysMCAST_JOIN_GROUP = 0x2a
43
+ sysMCAST_LEAVE_GROUP = 0x2d
44
+ sysMCAST_JOIN_SOURCE_GROUP = 0x2e
45
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x2f
46
+ sysMCAST_BLOCK_SOURCE = 0x2b
47
+ sysMCAST_UNBLOCK_SOURCE = 0x2c
48
+ sysMCAST_MSFILTER = 0x30
49
+ sysIP_MULTICAST_ALL = 0x31
50
+
51
+ sysICMP_FILTER = 0x1
52
+
53
+ sysSO_EE_ORIGIN_NONE = 0x0
54
+ sysSO_EE_ORIGIN_LOCAL = 0x1
55
+ sysSO_EE_ORIGIN_ICMP = 0x2
56
+ sysSO_EE_ORIGIN_ICMP6 = 0x3
57
+ sysSO_EE_ORIGIN_TXSTATUS = 0x4
58
+ sysSO_EE_ORIGIN_TIMESTAMPING = 0x4
59
+
60
+ sysSizeofKernelSockaddrStorage = 0x80
61
+ sysSizeofSockaddrInet = 0x10
62
+ sysSizeofInetPktinfo = 0xc
63
+ sysSizeofSockExtendedErr = 0x10
64
+
65
+ sysSizeofIPMreq = 0x8
66
+ sysSizeofIPMreqn = 0xc
67
+ sysSizeofIPMreqSource = 0xc
68
+ sysSizeofGroupReq = 0x88
69
+ sysSizeofGroupSourceReq = 0x108
70
+
71
+ sysSizeofICMPFilter = 0x4
72
+)
73
+
74
+type sysKernelSockaddrStorage struct {
75
+ Family uint16
76
+ X__data [126]int8
77
+}
78
+
79
+type sysSockaddrInet struct {
80
+ Family uint16
81
+ Port uint16
82
+ Addr [4]byte /* in_addr */
83
+ X__pad [8]uint8
84
+}
85
+
86
+type sysInetPktinfo struct {
87
+ Ifindex int32
88
+ Spec_dst [4]byte /* in_addr */
89
+ Addr [4]byte /* in_addr */
90
+}
91
+
92
+type sysSockExtendedErr struct {
93
+ Errno uint32
94
+ Origin uint8
95
+ Type uint8
96
+ Code uint8
97
+ Pad uint8
98
+ Info uint32
99
+ Data uint32
100
+}
101
+
102
+type sysIPMreq struct {
103
+ Multiaddr [4]byte /* in_addr */
104
+ Interface [4]byte /* in_addr */
105
+}
106
+
107
+type sysIPMreqn struct {
108
+ Multiaddr [4]byte /* in_addr */
109
+ Address [4]byte /* in_addr */
110
+ Ifindex int32
111
+}
112
+
113
+type sysIPMreqSource struct {
114
+ Multiaddr uint32
115
+ Interface uint32
116
+ Sourceaddr uint32
117
+}
118
+
119
+type sysGroupReq struct {
120
+ Interface uint32
121
+ Pad_cgo_0 [4]byte
122
+ Group sysKernelSockaddrStorage
123
+}
124
+
125
+type sysGroupSourceReq struct {
126
+ Interface uint32
127
+ Pad_cgo_0 [4]byte
128
+ Group sysKernelSockaddrStorage
129
+ Source sysKernelSockaddrStorage
130
+}
131
+
132
+type sysICMPFilter struct {
133
+ Data uint32
134
+}
Godeps/_workspace/src/golang.org/x/net/ipv4/zsys_netbsd.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/zsys_openbsd.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv4/zsys_solaris.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv6/control.go
renamed
+21
-12
@@ -17,24 +17,13 @@ var (
17
errNoSuchInterface = errors.New("no such interface")
18
)
19
20
-// References:
21
-//
22
-// RFC 2292 Advanced Sockets API for IPv6
23
-// http://tools.ietf.org/html/rfc2292
24
-// RFC 2460 Internet Protocol, Version 6 (IPv6) Specification
25
-// http://tools.ietf.org/html/rfc2460
26
-// RFC 3493 Basic Socket Interface Extensions for IPv6
27
-// http://tools.ietf.org/html/rfc3493.html
28
-// RFC 3542 Advanced Sockets Application Program Interface (API) for IPv6
29
-// http://tools.ietf.org/html/rfc3542
30
-//
20
// Note that RFC 3542 obsoletes RFC 2292 but OS X Snow Leopard and the
21
// former still support RFC 2292 only. Please be aware that almost
22
// all protocol implementations prohibit using a combination of RFC
23
// 2292 and RFC 3542 for some practical reasons.
24
25
type rawOpt struct {
37
- sync.Mutex
26
+ sync.RWMutex
27
cflags ControlFlags
28
}
29
@@ -55,6 +44,8 @@ const (
44
FlagPathMTU // pass the path MTU on the received packet path
45
)
46
47
+const flagPacketInfo = FlagDst | FlagInterface
48
+
49
// A ControlMessage represents per packet basis IP-level socket
50
// options.
51
type ControlMessage struct {
@@ -81,3 +72,21 @@ func (cm *ControlMessage) String() string {
72
}
73
return fmt.Sprintf("tclass: %#x, hoplim: %v, src: %v, dst: %v, ifindex: %v, nexthop: %v, mtu: %v", cm.TrafficClass, cm.HopLimit, cm.Src, cm.Dst, cm.IfIndex, cm.NextHop, cm.MTU)
74
}
75
+
76
+// Ancillary data socket options
77
+const (
78
+ ctlTrafficClass = iota // header field
79
+ ctlHopLimit // header field
80
+ ctlPacketInfo // inbound or outbound packet path
81
+ ctlNextHop // nexthop
82
+ ctlPathMTU // path mtu
83
+ ctlMax
84
+)
85
+
86
+// A ctlOpt represents a binding for ancillary data socket option.
87
+type ctlOpt struct {
88
+ name int // option name, must be equal or greater than 1
89
+ length int // option length
90
+ marshal func([]byte, *ControlMessage) []byte
91
+ parse func(*ControlMessage, []byte)
92
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/control_rfc2292_unix.go
new
+56
@@ -0,0 +1,56 @@
1
+// Copyright 2013 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+// +build darwin
6
+
7
+package ipv6
8
+
9
+import (
10
+ "syscall"
11
+ "unsafe"
12
+
13
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
14
+)
15
+
16
+func marshal2292HopLimit(b []byte, cm *ControlMessage) []byte {
17
+ m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
18
+ m.Level = iana.ProtocolIPv6
19
+ m.Type = sysIPV6_2292HOPLIMIT
20
+ m.SetLen(syscall.CmsgLen(4))
21
+ if cm != nil {
22
+ data := b[syscall.CmsgLen(0):]
23
+ // TODO(mikio): fix potential misaligned memory access
24
+ *(*int32)(unsafe.Pointer(&data[:4][0])) = int32(cm.HopLimit)
25
+ }
26
+ return b[syscall.CmsgSpace(4):]
27
+}
28
+
29
+func marshal2292PacketInfo(b []byte, cm *ControlMessage) []byte {
30
+ m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
31
+ m.Level = iana.ProtocolIPv6
32
+ m.Type = sysIPV6_2292PKTINFO
33
+ m.SetLen(syscall.CmsgLen(sysSizeofInet6Pktinfo))
34
+ if cm != nil {
35
+ pi := (*sysInet6Pktinfo)(unsafe.Pointer(&b[syscall.CmsgLen(0)]))
36
+ if ip := cm.Src.To16(); ip != nil && ip.To4() == nil {
37
+ copy(pi.Addr[:], ip)
38
+ }
39
+ if cm.IfIndex > 0 {
40
+ pi.setIfindex(cm.IfIndex)
41
+ }
42
+ }
43
+ return b[syscall.CmsgSpace(sysSizeofInet6Pktinfo):]
44
+}
45
+
46
+func marshal2292NextHop(b []byte, cm *ControlMessage) []byte {
47
+ m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
48
+ m.Level = iana.ProtocolIPv6
49
+ m.Type = sysIPV6_2292NEXTHOP
50
+ m.SetLen(syscall.CmsgLen(sysSizeofSockaddrInet6))
51
+ if cm != nil {
52
+ sa := (*sysSockaddrInet6)(unsafe.Pointer(&b[syscall.CmsgLen(0)]))
53
+ sa.setSockaddr(cm.NextHop, cm.IfIndex)
54
+ }
55
+ return b[syscall.CmsgSpace(sysSizeofSockaddrInet6):]
56
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/control_rfc3542_unix.go
new
+103
@@ -0,0 +1,103 @@
1
+// Copyright 2013 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+// +build darwin dragonfly freebsd linux netbsd openbsd
6
+
7
+package ipv6
8
+
9
+import (
10
+ "syscall"
11
+ "unsafe"
12
+
13
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
14
+)
15
+
16
+func marshalTrafficClass(b []byte, cm *ControlMessage) []byte {
17
+ m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
18
+ m.Level = iana.ProtocolIPv6
19
+ m.Type = sysIPV6_TCLASS
20
+ m.SetLen(syscall.CmsgLen(4))
21
+ if cm != nil {
22
+ data := b[syscall.CmsgLen(0):]
23
+ // TODO(mikio): fix potential misaligned memory access
24
+ *(*int32)(unsafe.Pointer(&data[:4][0])) = int32(cm.TrafficClass)
25
+ }
26
+ return b[syscall.CmsgSpace(4):]
27
+}
28
+
29
+func parseTrafficClass(cm *ControlMessage, b []byte) {
30
+ // TODO(mikio): fix potential misaligned memory access
31
+ cm.TrafficClass = int(*(*int32)(unsafe.Pointer(&b[:4][0])))
32
+}
33
+
34
+func marshalHopLimit(b []byte, cm *ControlMessage) []byte {
35
+ m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
36
+ m.Level = iana.ProtocolIPv6
37
+ m.Type = sysIPV6_HOPLIMIT
38
+ m.SetLen(syscall.CmsgLen(4))
39
+ if cm != nil {
40
+ data := b[syscall.CmsgLen(0):]
41
+ // TODO(mikio): fix potential misaligned memory access
42
+ *(*int32)(unsafe.Pointer(&data[:4][0])) = int32(cm.HopLimit)
43
+ }
44
+ return b[syscall.CmsgSpace(4):]
45
+}
46
+
47
+func parseHopLimit(cm *ControlMessage, b []byte) {
48
+ // TODO(mikio): fix potential misaligned memory access
49
+ cm.HopLimit = int(*(*int32)(unsafe.Pointer(&b[:4][0])))
50
+}
51
+
52
+func marshalPacketInfo(b []byte, cm *ControlMessage) []byte {
53
+ m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
54
+ m.Level = iana.ProtocolIPv6
55
+ m.Type = sysIPV6_PKTINFO
56
+ m.SetLen(syscall.CmsgLen(sysSizeofInet6Pktinfo))
57
+ if cm != nil {
58
+ pi := (*sysInet6Pktinfo)(unsafe.Pointer(&b[syscall.CmsgLen(0)]))
59
+ if ip := cm.Src.To16(); ip != nil && ip.To4() == nil {
60
+ copy(pi.Addr[:], ip)
61
+ }
62
+ if cm.IfIndex > 0 {
63
+ pi.setIfindex(cm.IfIndex)
64
+ }
65
+ }
66
+ return b[syscall.CmsgSpace(sysSizeofInet6Pktinfo):]
67
+}
68
+
69
+func parsePacketInfo(cm *ControlMessage, b []byte) {
70
+ pi := (*sysInet6Pktinfo)(unsafe.Pointer(&b[0]))
71
+ cm.Dst = pi.Addr[:]
72
+ cm.IfIndex = int(pi.Ifindex)
73
+}
74
+
75
+func marshalNextHop(b []byte, cm *ControlMessage) []byte {
76
+ m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
77
+ m.Level = iana.ProtocolIPv6
78
+ m.Type = sysIPV6_NEXTHOP
79
+ m.SetLen(syscall.CmsgLen(sysSizeofSockaddrInet6))
80
+ if cm != nil {
81
+ sa := (*sysSockaddrInet6)(unsafe.Pointer(&b[syscall.CmsgLen(0)]))
82
+ sa.setSockaddr(cm.NextHop, cm.IfIndex)
83
+ }
84
+ return b[syscall.CmsgSpace(sysSizeofSockaddrInet6):]
85
+}
86
+
87
+func parseNextHop(cm *ControlMessage, b []byte) {
88
+}
89
+
90
+func marshalPathMTU(b []byte, cm *ControlMessage) []byte {
91
+ m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
92
+ m.Level = iana.ProtocolIPv6
93
+ m.Type = sysIPV6_PATHMTU
94
+ m.SetLen(syscall.CmsgLen(sysSizeofIPv6Mtuinfo))
95
+ return b[syscall.CmsgSpace(sysSizeofIPv6Mtuinfo):]
96
+}
97
+
98
+func parsePathMTU(cm *ControlMessage, b []byte) {
99
+ mi := (*sysIPv6Mtuinfo)(unsafe.Pointer(&b[0]))
100
+ cm.Dst = mi.Addr.Addr[:]
101
+ cm.IfIndex = int(mi.Addr.Scope_id)
102
+ cm.MTU = int(mi.Mtu)
103
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/control_stub.go
renamed
-4
@@ -7,21 +7,17 @@
7
package ipv6
8
9
func setControlMessage(fd int, opt *rawOpt, cf ControlFlags, on bool) error {
10
- // TODO(mikio): Implement this
10
return errOpNoSupport
11
}
12
13
func newControlMessage(opt *rawOpt) (oob []byte) {
15
- // TODO(mikio): Implement this
14
return nil
15
}
16
17
func parseControlMessage(b []byte) (*ControlMessage, error) {
20
- // TODO(mikio): Implement this
18
return nil, errOpNoSupport
19
}
20
21
func marshalControlMessage(cm *ControlMessage) (oob []byte) {
25
- // TODO(mikio): Implement this
22
return nil
23
}
Godeps/_workspace/src/golang.org/x/net/ipv6/control_unix.go
new
+166
@@ -0,0 +1,166 @@
1
+// Copyright 2013 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+// +build darwin dragonfly freebsd linux netbsd openbsd
6
+
7
+package ipv6
8
+
9
+import (
10
+ "os"
11
+ "syscall"
12
+
13
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
14
+)
15
+
16
+func setControlMessage(fd int, opt *rawOpt, cf ControlFlags, on bool) error {
17
+ opt.Lock()
18
+ defer opt.Unlock()
19
+ if cf&FlagTrafficClass != 0 && sockOpts[ssoReceiveTrafficClass].name > 0 {
20
+ if err := setInt(fd, &sockOpts[ssoReceiveTrafficClass], boolint(on)); err != nil {
21
+ return err
22
+ }
23
+ if on {
24
+ opt.set(FlagTrafficClass)
25
+ } else {
26
+ opt.clear(FlagTrafficClass)
27
+ }
28
+ }
29
+ if cf&FlagHopLimit != 0 && sockOpts[ssoReceiveHopLimit].name > 0 {
30
+ if err := setInt(fd, &sockOpts[ssoReceiveHopLimit], boolint(on)); err != nil {
31
+ return err
32
+ }
33
+ if on {
34
+ opt.set(FlagHopLimit)
35
+ } else {
36
+ opt.clear(FlagHopLimit)
37
+ }
38
+ }
39
+ if cf&flagPacketInfo != 0 && sockOpts[ssoReceivePacketInfo].name > 0 {
40
+ if err := setInt(fd, &sockOpts[ssoReceivePacketInfo], boolint(on)); err != nil {
41
+ return err
42
+ }
43
+ if on {
44
+ opt.set(cf & flagPacketInfo)
45
+ } else {
46
+ opt.clear(cf & flagPacketInfo)
47
+ }
48
+ }
49
+ if cf&FlagPathMTU != 0 && sockOpts[ssoReceivePathMTU].name > 0 {
50
+ if err := setInt(fd, &sockOpts[ssoReceivePathMTU], boolint(on)); err != nil {
51
+ return err
52
+ }
53
+ if on {
54
+ opt.set(FlagPathMTU)
55
+ } else {
56
+ opt.clear(FlagPathMTU)
57
+ }
58
+ }
59
+ return nil
60
+}
61
+
62
+func newControlMessage(opt *rawOpt) (oob []byte) {
63
+ opt.RLock()
64
+ var l int
65
+ if opt.isset(FlagTrafficClass) && ctlOpts[ctlTrafficClass].name > 0 {
66
+ l += syscall.CmsgSpace(ctlOpts[ctlTrafficClass].length)
67
+ }
68
+ if opt.isset(FlagHopLimit) && ctlOpts[ctlHopLimit].name > 0 {
69
+ l += syscall.CmsgSpace(ctlOpts[ctlHopLimit].length)
70
+ }
71
+ if opt.isset(flagPacketInfo) && ctlOpts[ctlPacketInfo].name > 0 {
72
+ l += syscall.CmsgSpace(ctlOpts[ctlPacketInfo].length)
73
+ }
74
+ if opt.isset(FlagPathMTU) && ctlOpts[ctlPathMTU].name > 0 {
75
+ l += syscall.CmsgSpace(ctlOpts[ctlPathMTU].length)
76
+ }
77
+ if l > 0 {
78
+ oob = make([]byte, l)
79
+ b := oob
80
+ if opt.isset(FlagTrafficClass) && ctlOpts[ctlTrafficClass].name > 0 {
81
+ b = ctlOpts[ctlTrafficClass].marshal(b, nil)
82
+ }
83
+ if opt.isset(FlagHopLimit) && ctlOpts[ctlHopLimit].name > 0 {
84
+ b = ctlOpts[ctlHopLimit].marshal(b, nil)
85
+ }
86
+ if opt.isset(flagPacketInfo) && ctlOpts[ctlPacketInfo].name > 0 {
87
+ b = ctlOpts[ctlPacketInfo].marshal(b, nil)
88
+ }
89
+ if opt.isset(FlagPathMTU) && ctlOpts[ctlPathMTU].name > 0 {
90
+ b = ctlOpts[ctlPathMTU].marshal(b, nil)
91
+ }
92
+ }
93
+ opt.RUnlock()
94
+ return
95
+}
96
+
97
+func parseControlMessage(b []byte) (*ControlMessage, error) {
98
+ if len(b) == 0 {
99
+ return nil, nil
100
+ }
101
+ cmsgs, err := syscall.ParseSocketControlMessage(b)
102
+ if err != nil {
103
+ return nil, os.NewSyscallError("parse socket control message", err)
104
+ }
105
+ cm := &ControlMessage{}
106
+ for _, m := range cmsgs {
107
+ if m.Header.Level != iana.ProtocolIPv6 {
108
+ continue
109
+ }
110
+ switch int(m.Header.Type) {
111
+ case ctlOpts[ctlTrafficClass].name:
112
+ ctlOpts[ctlTrafficClass].parse(cm, m.Data[:])
113
+ case ctlOpts[ctlHopLimit].name:
114
+ ctlOpts[ctlHopLimit].parse(cm, m.Data[:])
115
+ case ctlOpts[ctlPacketInfo].name:
116
+ ctlOpts[ctlPacketInfo].parse(cm, m.Data[:])
117
+ case ctlOpts[ctlPathMTU].name:
118
+ ctlOpts[ctlPathMTU].parse(cm, m.Data[:])
119
+ }
120
+ }
121
+ return cm, nil
122
+}
123
+
124
+func marshalControlMessage(cm *ControlMessage) (oob []byte) {
125
+ if cm == nil {
126
+ return
127
+ }
128
+ var l int
129
+ tclass := false
130
+ if ctlOpts[ctlTrafficClass].name > 0 && cm.TrafficClass > 0 {
131
+ tclass = true
132
+ l += syscall.CmsgSpace(ctlOpts[ctlTrafficClass].length)
133
+ }
134
+ hoplimit := false
135
+ if ctlOpts[ctlHopLimit].name > 0 && cm.HopLimit > 0 {
136
+ hoplimit = true
137
+ l += syscall.CmsgSpace(ctlOpts[ctlHopLimit].length)
138
+ }
139
+ pktinfo := false
140
+ if ctlOpts[ctlPacketInfo].name > 0 && (cm.Src.To16() != nil && cm.Src.To4() == nil || cm.IfIndex > 0) {
141
+ pktinfo = true
142
+ l += syscall.CmsgSpace(ctlOpts[ctlPacketInfo].length)
143
+ }
144
+ nexthop := false
145
+ if ctlOpts[ctlNextHop].name > 0 && cm.NextHop.To16() != nil && cm.NextHop.To4() == nil {
146
+ nexthop = true
147
+ l += syscall.CmsgSpace(ctlOpts[ctlNextHop].length)
148
+ }
149
+ if l > 0 {
150
+ oob = make([]byte, l)
151
+ b := oob
152
+ if tclass {
153
+ b = ctlOpts[ctlTrafficClass].marshal(b, cm)
154
+ }
155
+ if hoplimit {
156
+ b = ctlOpts[ctlHopLimit].marshal(b, cm)
157
+ }
158
+ if pktinfo {
159
+ b = ctlOpts[ctlPacketInfo].marshal(b, cm)
160
+ }
161
+ if nexthop {
162
+ b = ctlOpts[ctlNextHop].marshal(b, cm)
163
+ }
164
+ }
165
+ return
166
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/control_windows.go
renamed
+4
-4
@@ -7,21 +7,21 @@ package ipv6
7
import "syscall"
8
9
func setControlMessage(fd syscall.Handle, opt *rawOpt, cf ControlFlags, on bool) error {
10
- // TODO(mikio): Implement this
10
+ // TODO(mikio): implement this
11
return syscall.EWINDOWS
12
}
13
14
func newControlMessage(opt *rawOpt) (oob []byte) {
15
- // TODO(mikio): Implement this
15
+ // TODO(mikio): implement this
16
return nil
17
}
18
19
func parseControlMessage(b []byte) (*ControlMessage, error) {
20
- // TODO(mikio): Implement this
20
+ // TODO(mikio): implement this
21
return nil, syscall.EWINDOWS
22
}
23
24
func marshalControlMessage(cm *ControlMessage) (oob []byte) {
25
- // TODO(mikio): Implement this
25
+ // TODO(mikio): implement this
26
return nil
27
}
Godeps/_workspace/src/golang.org/x/net/ipv6/defs_darwin.go
renamed
+21
-4
@@ -69,21 +69,34 @@ const (
69
70
sysIPV6_PREFER_TEMPADDR = C.IPV6_PREFER_TEMPADDR
71
72
+ sysIPV6_MSFILTER = C.IPV6_MSFILTER
73
+ sysMCAST_JOIN_GROUP = C.MCAST_JOIN_GROUP
74
+ sysMCAST_LEAVE_GROUP = C.MCAST_LEAVE_GROUP
75
+ sysMCAST_JOIN_SOURCE_GROUP = C.MCAST_JOIN_SOURCE_GROUP
76
+ sysMCAST_LEAVE_SOURCE_GROUP = C.MCAST_LEAVE_SOURCE_GROUP
77
+ sysMCAST_BLOCK_SOURCE = C.MCAST_BLOCK_SOURCE
78
+ sysMCAST_UNBLOCK_SOURCE = C.MCAST_UNBLOCK_SOURCE
79
+
80
sysIPV6_BOUND_IF = C.IPV6_BOUND_IF
81
82
sysIPV6_PORTRANGE_DEFAULT = C.IPV6_PORTRANGE_DEFAULT
83
sysIPV6_PORTRANGE_HIGH = C.IPV6_PORTRANGE_HIGH
84
sysIPV6_PORTRANGE_LOW = C.IPV6_PORTRANGE_LOW
85
78
- sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
79
- sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
80
- sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
86
+ sysSizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
87
+ sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
88
+ sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
89
+ sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
90
82
- sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
91
+ sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
92
+ sysSizeofGroupReq = C.sizeof_struct_group_req
93
+ sysSizeofGroupSourceReq = C.sizeof_struct_group_source_req
94
95
sysSizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
96
)
97
98
+type sysSockaddrStorage C.struct_sockaddr_storage
99
+
100
type sysSockaddrInet6 C.struct_sockaddr_in6
101
102
type sysInet6Pktinfo C.struct_in6_pktinfo
@@ -93,3 +106,7 @@ type sysIPv6Mtuinfo C.struct_ip6_mtuinfo
106
type sysIPv6Mreq C.struct_ipv6_mreq
107
108
type sysICMPv6Filter C.struct_icmp6_filter
109
+
110
+type sysGroupReq C.struct_group_req
111
+
112
+type sysGroupSourceReq C.struct_group_source_req
Godeps/_workspace/src/golang.org/x/net/ipv6/defs_dragonfly.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv6/defs_freebsd.go
renamed
+22
-4
@@ -63,19 +63,33 @@ const (
63
64
sysIPV6_BINDANY = C.IPV6_BINDANY
65
66
+ sysIPV6_MSFILTER = C.IPV6_MSFILTER
67
+
68
+ sysMCAST_JOIN_GROUP = C.MCAST_JOIN_GROUP
69
+ sysMCAST_LEAVE_GROUP = C.MCAST_LEAVE_GROUP
70
+ sysMCAST_JOIN_SOURCE_GROUP = C.MCAST_JOIN_SOURCE_GROUP
71
+ sysMCAST_LEAVE_SOURCE_GROUP = C.MCAST_LEAVE_SOURCE_GROUP
72
+ sysMCAST_BLOCK_SOURCE = C.MCAST_BLOCK_SOURCE
73
+ sysMCAST_UNBLOCK_SOURCE = C.MCAST_UNBLOCK_SOURCE
74
+
75
sysIPV6_PORTRANGE_DEFAULT = C.IPV6_PORTRANGE_DEFAULT
76
sysIPV6_PORTRANGE_HIGH = C.IPV6_PORTRANGE_HIGH
77
sysIPV6_PORTRANGE_LOW = C.IPV6_PORTRANGE_LOW
78
70
- sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
71
- sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
72
- sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
79
+ sysSizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
80
+ sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
81
+ sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
82
+ sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
83
74
- sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
84
+ sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
85
+ sysSizeofGroupReq = C.sizeof_struct_group_req
86
+ sysSizeofGroupSourceReq = C.sizeof_struct_group_source_req
87
88
sysSizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
89
)
90
91
+type sysSockaddrStorage C.struct_sockaddr_storage
92
+
93
type sysSockaddrInet6 C.struct_sockaddr_in6
94
95
type sysInet6Pktinfo C.struct_in6_pktinfo
@@ -84,4 +98,8 @@ type sysIPv6Mtuinfo C.struct_ip6_mtuinfo
98
99
type sysIPv6Mreq C.struct_ipv6_mreq
100
101
+type sysGroupReq C.struct_group_req
102
+
103
+type sysGroupSourceReq C.struct_group_source_req
104
+
105
type sysICMPv6Filter C.struct_icmp6_filter
Godeps/_workspace/src/golang.org/x/net/ipv6/defs_linux.go
renamed
+42
-25
@@ -9,6 +9,7 @@
9
package ipv6
10
11
/*
12
+#include <linux/in.h>
13
#include <linux/in6.h>
14
#include <linux/ipv6.h>
15
#include <linux/icmpv6.h>
@@ -27,26 +28,33 @@ const (
28
sysIPV6_NEXTHOP = C.IPV6_NEXTHOP
29
sysIPV6_FLOWINFO = C.IPV6_FLOWINFO
30
30
- sysIPV6_UNICAST_HOPS = C.IPV6_UNICAST_HOPS
31
- sysIPV6_MULTICAST_IF = C.IPV6_MULTICAST_IF
32
- sysIPV6_MULTICAST_HOPS = C.IPV6_MULTICAST_HOPS
33
- sysIPV6_MULTICAST_LOOP = C.IPV6_MULTICAST_LOOP
34
- sysIPV6_ADD_MEMBERSHIP = C.IPV6_ADD_MEMBERSHIP
35
- sysIPV6_DROP_MEMBERSHIP = C.IPV6_DROP_MEMBERSHIP
36
- sysIPV6_ROUTER_ALERT = C.IPV6_ROUTER_ALERT
37
- sysIPV6_MTU_DISCOVER = C.IPV6_MTU_DISCOVER
38
- sysIPV6_MTU = C.IPV6_MTU
39
- sysIPV6_RECVERR = C.IPV6_RECVERR
40
- sysIPV6_V6ONLY = C.IPV6_V6ONLY
41
- sysIPV6_JOIN_ANYCAST = C.IPV6_JOIN_ANYCAST
42
- sysIPV6_LEAVE_ANYCAST = C.IPV6_LEAVE_ANYCAST
43
-
44
- sysIPV6_PMTUDISC_DONT = C.IPV6_PMTUDISC_DONT
45
- sysIPV6_PMTUDISC_WANT = C.IPV6_PMTUDISC_WANT
46
- sysIPV6_PMTUDISC_DO = C.IPV6_PMTUDISC_DO
47
- sysIPV6_PMTUDISC_PROBE = C.IPV6_PMTUDISC_PROBE
48
- sysIPV6_PMTUDISC_INTERFACE = C.IPV6_PMTUDISC_INTERFACE
49
- sysIPV6_PMTUDISC_OMIT = C.IPV6_PMTUDISC_OMIT
31
+ sysIPV6_UNICAST_HOPS = C.IPV6_UNICAST_HOPS
32
+ sysIPV6_MULTICAST_IF = C.IPV6_MULTICAST_IF
33
+ sysIPV6_MULTICAST_HOPS = C.IPV6_MULTICAST_HOPS
34
+ sysIPV6_MULTICAST_LOOP = C.IPV6_MULTICAST_LOOP
35
+ sysIPV6_ADD_MEMBERSHIP = C.IPV6_ADD_MEMBERSHIP
36
+ sysIPV6_DROP_MEMBERSHIP = C.IPV6_DROP_MEMBERSHIP
37
+ sysMCAST_JOIN_GROUP = C.MCAST_JOIN_GROUP
38
+ sysMCAST_LEAVE_GROUP = C.MCAST_LEAVE_GROUP
39
+ sysMCAST_JOIN_SOURCE_GROUP = C.MCAST_JOIN_SOURCE_GROUP
40
+ sysMCAST_LEAVE_SOURCE_GROUP = C.MCAST_LEAVE_SOURCE_GROUP
41
+ sysMCAST_BLOCK_SOURCE = C.MCAST_BLOCK_SOURCE
42
+ sysMCAST_UNBLOCK_SOURCE = C.MCAST_UNBLOCK_SOURCE
43
+ sysMCAST_MSFILTER = C.MCAST_MSFILTER
44
+ sysIPV6_ROUTER_ALERT = C.IPV6_ROUTER_ALERT
45
+ sysIPV6_MTU_DISCOVER = C.IPV6_MTU_DISCOVER
46
+ sysIPV6_MTU = C.IPV6_MTU
47
+ sysIPV6_RECVERR = C.IPV6_RECVERR
48
+ sysIPV6_V6ONLY = C.IPV6_V6ONLY
49
+ sysIPV6_JOIN_ANYCAST = C.IPV6_JOIN_ANYCAST
50
+ sysIPV6_LEAVE_ANYCAST = C.IPV6_LEAVE_ANYCAST
51
+
52
+ //sysIPV6_PMTUDISC_DONT = C.IPV6_PMTUDISC_DONT
53
+ //sysIPV6_PMTUDISC_WANT = C.IPV6_PMTUDISC_WANT
54
+ //sysIPV6_PMTUDISC_DO = C.IPV6_PMTUDISC_DO
55
+ //sysIPV6_PMTUDISC_PROBE = C.IPV6_PMTUDISC_PROBE
56
+ //sysIPV6_PMTUDISC_INTERFACE = C.IPV6_PMTUDISC_INTERFACE
57
+ //sysIPV6_PMTUDISC_OMIT = C.IPV6_PMTUDISC_OMIT
58
59
sysIPV6_FLOWLABEL_MGR = C.IPV6_FLOWLABEL_MGR
60
sysIPV6_FLOWINFO_SEND = C.IPV6_FLOWINFO_SEND
@@ -96,16 +104,21 @@ const (
104
sysICMPV6_FILTER_BLOCKOTHERS = C.ICMPV6_FILTER_BLOCKOTHERS
105
sysICMPV6_FILTER_PASSONLY = C.ICMPV6_FILTER_PASSONLY
106
99
- sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
100
- sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
101
- sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
102
- sysSizeofIPv6FlowlabelReq = C.sizeof_struct_in6_flowlabel_req
107
+ sysSizeofKernelSockaddrStorage = C.sizeof_struct___kernel_sockaddr_storage
108
+ sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
109
+ sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
110
+ sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
111
+ sysSizeofIPv6FlowlabelReq = C.sizeof_struct_in6_flowlabel_req
112
104
- sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
113
+ sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
114
+ sysSizeofGroupReq = C.sizeof_struct_group_req
115
+ sysSizeofGroupSourceReq = C.sizeof_struct_group_source_req
116
117
sysSizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
118
)
119
120
+type sysKernelSockaddrStorage C.struct___kernel_sockaddr_storage
121
+
122
type sysSockaddrInet6 C.struct_sockaddr_in6
123
124
type sysInet6Pktinfo C.struct_in6_pktinfo
@@ -116,4 +129,8 @@ type sysIPv6FlowlabelReq C.struct_in6_flowlabel_req
129
130
type sysIPv6Mreq C.struct_ipv6_mreq
131
132
+type sysGroupReq C.struct_group_req
133
+
134
+type sysGroupSourceReq C.struct_group_source_req
135
+
136
type sysICMPv6Filter C.struct_icmp6_filter
Godeps/_workspace/src/golang.org/x/net/ipv6/defs_netbsd.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv6/defs_openbsd.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv6/defs_solaris.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv6/dgramopt_posix.go
new
+288
@@ -0,0 +1,288 @@
1
+// Copyright 2013 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+// +build darwin dragonfly freebsd linux netbsd openbsd windows
6
+
7
+package ipv6
8
+
9
+import (
10
+ "net"
11
+ "syscall"
12
+)
13
+
14
+// MulticastHopLimit returns the hop limit field value for outgoing
15
+// multicast packets.
16
+func (c *dgramOpt) MulticastHopLimit() (int, error) {
17
+ if !c.ok() {
18
+ return 0, syscall.EINVAL
19
+ }
20
+ fd, err := c.sysfd()
21
+ if err != nil {
22
+ return 0, err
23
+ }
24
+ return getInt(fd, &sockOpts[ssoMulticastHopLimit])
25
+}
26
+
27
+// SetMulticastHopLimit sets the hop limit field value for future
28
+// outgoing multicast packets.
29
+func (c *dgramOpt) SetMulticastHopLimit(hoplim int) error {
30
+ if !c.ok() {
31
+ return syscall.EINVAL
32
+ }
33
+ fd, err := c.sysfd()
34
+ if err != nil {
35
+ return err
36
+ }
37
+ return setInt(fd, &sockOpts[ssoMulticastHopLimit], hoplim)
38
+}
39
+
40
+// MulticastInterface returns the default interface for multicast
41
+// packet transmissions.
42
+func (c *dgramOpt) MulticastInterface() (*net.Interface, error) {
43
+ if !c.ok() {
44
+ return nil, syscall.EINVAL
45
+ }
46
+ fd, err := c.sysfd()
47
+ if err != nil {
48
+ return nil, err
49
+ }
50
+ return getInterface(fd, &sockOpts[ssoMulticastInterface])
51
+}
52
+
53
+// SetMulticastInterface sets the default interface for future
54
+// multicast packet transmissions.
55
+func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error {
56
+ if !c.ok() {
57
+ return syscall.EINVAL
58
+ }
59
+ fd, err := c.sysfd()
60
+ if err != nil {
61
+ return err
62
+ }
63
+ return setInterface(fd, &sockOpts[ssoMulticastInterface], ifi)
64
+}
65
+
66
+// MulticastLoopback reports whether transmitted multicast packets
67
+// should be copied and send back to the originator.
68
+func (c *dgramOpt) MulticastLoopback() (bool, error) {
69
+ if !c.ok() {
70
+ return false, syscall.EINVAL
71
+ }
72
+ fd, err := c.sysfd()
73
+ if err != nil {
74
+ return false, err
75
+ }
76
+ on, err := getInt(fd, &sockOpts[ssoMulticastLoopback])
77
+ if err != nil {
78
+ return false, err
79
+ }
80
+ return on == 1, nil
81
+}
82
+
83
+// SetMulticastLoopback sets whether transmitted multicast packets
84
+// should be copied and send back to the originator.
85
+func (c *dgramOpt) SetMulticastLoopback(on bool) error {
86
+ if !c.ok() {
87
+ return syscall.EINVAL
88
+ }
89
+ fd, err := c.sysfd()
90
+ if err != nil {
91
+ return err
92
+ }
93
+ return setInt(fd, &sockOpts[ssoMulticastLoopback], boolint(on))
94
+}
95
+
96
+// JoinGroup joins the group address group on the interface ifi.
97
+// By default all sources that can cast data to group are accepted.
98
+// It's possible to mute and unmute data transmission from a specific
99
+// source by using ExcludeSourceSpecificGroup and
100
+// IncludeSourceSpecificGroup.
101
+// JoinGroup uses the system assigned multicast interface when ifi is
102
+// nil, although this is not recommended because the assignment
103
+// depends on platforms and sometimes it might require routing
104
+// configuration.
105
+func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error {
106
+ if !c.ok() {
107
+ return syscall.EINVAL
108
+ }
109
+ fd, err := c.sysfd()
110
+ if err != nil {
111
+ return err
112
+ }
113
+ grp := netAddrToIP16(group)
114
+ if grp == nil {
115
+ return errMissingAddress
116
+ }
117
+ return setGroup(fd, &sockOpts[ssoJoinGroup], ifi, grp)
118
+}
119
+
120
+// LeaveGroup leaves the group address group on the interface ifi
121
+// regardless of whether the group is any-source group or
122
+// source-specific group.
123
+func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error {
124
+ if !c.ok() {
125
+ return syscall.EINVAL
126
+ }
127
+ fd, err := c.sysfd()
128
+ if err != nil {
129
+ return err
130
+ }
131
+ grp := netAddrToIP16(group)
132
+ if grp == nil {
133
+ return errMissingAddress
134
+ }
135
+ return setGroup(fd, &sockOpts[ssoLeaveGroup], ifi, grp)
136
+}
137
+
138
+// JoinSourceSpecificGroup joins the source-specific group comprising
139
+// group and source on the interface ifi.
140
+// JoinSourceSpecificGroup uses the system assigned multicast
141
+// interface when ifi is nil, although this is not recommended because
142
+// the assignment depends on platforms and sometimes it might require
143
+// routing configuration.
144
+func (c *dgramOpt) JoinSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
145
+ if !c.ok() {
146
+ return syscall.EINVAL
147
+ }
148
+ fd, err := c.sysfd()
149
+ if err != nil {
150
+ return err
151
+ }
152
+ grp := netAddrToIP16(group)
153
+ if grp == nil {
154
+ return errMissingAddress
155
+ }
156
+ src := netAddrToIP16(source)
157
+ if src == nil {
158
+ return errMissingAddress
159
+ }
160
+ return setSourceGroup(fd, &sockOpts[ssoJoinSourceGroup], ifi, grp, src)
161
+}
162
+
163
+// LeaveSourceSpecificGroup leaves the source-specific group on the
164
+// interface ifi.
165
+func (c *dgramOpt) LeaveSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
166
+ if !c.ok() {
167
+ return syscall.EINVAL
168
+ }
169
+ fd, err := c.sysfd()
170
+ if err != nil {
171
+ return err
172
+ }
173
+ grp := netAddrToIP16(group)
174
+ if grp == nil {
175
+ return errMissingAddress
176
+ }
177
+ src := netAddrToIP16(source)
178
+ if src == nil {
179
+ return errMissingAddress
180
+ }
181
+ return setSourceGroup(fd, &sockOpts[ssoLeaveSourceGroup], ifi, grp, src)
182
+}
183
+
184
+// ExcludeSourceSpecificGroup excludes the source-specific group from
185
+// the already joined any-source groups by JoinGroup on the interface
186
+// ifi.
187
+func (c *dgramOpt) ExcludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
188
+ if !c.ok() {
189
+ return syscall.EINVAL
190
+ }
191
+ fd, err := c.sysfd()
192
+ if err != nil {
193
+ return err
194
+ }
195
+ grp := netAddrToIP16(group)
196
+ if grp == nil {
197
+ return errMissingAddress
198
+ }
199
+ src := netAddrToIP16(source)
200
+ if src == nil {
201
+ return errMissingAddress
202
+ }
203
+ return setSourceGroup(fd, &sockOpts[ssoBlockSourceGroup], ifi, grp, src)
204
+}
205
+
206
+// IncludeSourceSpecificGroup includes the excluded source-specific
207
+// group by ExcludeSourceSpecificGroup again on the interface ifi.
208
+func (c *dgramOpt) IncludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
209
+ if !c.ok() {
210
+ return syscall.EINVAL
211
+ }
212
+ fd, err := c.sysfd()
213
+ if err != nil {
214
+ return err
215
+ }
216
+ grp := netAddrToIP16(group)
217
+ if grp == nil {
218
+ return errMissingAddress
219
+ }
220
+ src := netAddrToIP16(source)
221
+ if src == nil {
222
+ return errMissingAddress
223
+ }
224
+ return setSourceGroup(fd, &sockOpts[ssoUnblockSourceGroup], ifi, grp, src)
225
+}
226
+
227
+// Checksum reports whether the kernel will compute, store or verify a
228
+// checksum for both incoming and outgoing packets. If on is true, it
229
+// returns an offset in bytes into the data of where the checksum
230
+// field is located.
231
+func (c *dgramOpt) Checksum() (on bool, offset int, err error) {
232
+ if !c.ok() {
233
+ return false, 0, syscall.EINVAL
234
+ }
235
+ fd, err := c.sysfd()
236
+ if err != nil {
237
+ return false, 0, err
238
+ }
239
+ offset, err = getInt(fd, &sockOpts[ssoChecksum])
240
+ if err != nil {
241
+ return false, 0, err
242
+ }
243
+ if offset < 0 {
244
+ return false, 0, nil
245
+ }
246
+ return true, offset, nil
247
+}
248
+
249
+// SetChecksum enables the kernel checksum processing. If on is ture,
250
+// the offset should be an offset in bytes into the data of where the
251
+// checksum field is located.
252
+func (c *dgramOpt) SetChecksum(on bool, offset int) error {
253
+ if !c.ok() {
254
+ return syscall.EINVAL
255
+ }
256
+ fd, err := c.sysfd()
257
+ if err != nil {
258
+ return err
259
+ }
260
+ if !on {
261
+ offset = -1
262
+ }
263
+ return setInt(fd, &sockOpts[ssoChecksum], offset)
264
+}
265
+
266
+// ICMPFilter returns an ICMP filter.
267
+func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) {
268
+ if !c.ok() {
269
+ return nil, syscall.EINVAL
270
+ }
271
+ fd, err := c.sysfd()
272
+ if err != nil {
273
+ return nil, err
274
+ }
275
+ return getICMPFilter(fd, &sockOpts[ssoICMPFilter])
276
+}
277
+
278
+// SetICMPFilter deploys the ICMP filter.
279
+func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error {
280
+ if !c.ok() {
281
+ return syscall.EINVAL
282
+ }
283
+ fd, err := c.sysfd()
284
+ if err != nil {
285
+ return err
286
+ }
287
+ return setICMPFilter(fd, &sockOpts[ssoICMPFilter], f)
288
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/dgramopt_stub.go
renamed
+40
-16
@@ -11,57 +11,85 @@ import "net"
11
// MulticastHopLimit returns the hop limit field value for outgoing
12
// multicast packets.
13
func (c *dgramOpt) MulticastHopLimit() (int, error) {
14
- // TODO(mikio): Implement this
14
return 0, errOpNoSupport
15
}
16
17
// SetMulticastHopLimit sets the hop limit field value for future
18
// outgoing multicast packets.
19
func (c *dgramOpt) SetMulticastHopLimit(hoplim int) error {
21
- // TODO(mikio): Implement this
20
return errOpNoSupport
21
}
22
23
// MulticastInterface returns the default interface for multicast
24
// packet transmissions.
25
func (c *dgramOpt) MulticastInterface() (*net.Interface, error) {
28
- // TODO(mikio): Implement this
26
return nil, errOpNoSupport
27
}
28
29
// SetMulticastInterface sets the default interface for future
30
// multicast packet transmissions.
31
func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error {
35
- // TODO(mikio): Implement this
32
return errOpNoSupport
33
}
34
35
// MulticastLoopback reports whether transmitted multicast packets
36
// should be copied and send back to the originator.
37
func (c *dgramOpt) MulticastLoopback() (bool, error) {
42
- // TODO(mikio): Implement this
38
return false, errOpNoSupport
39
}
40
41
// SetMulticastLoopback sets whether transmitted multicast packets
42
// should be copied and send back to the originator.
43
func (c *dgramOpt) SetMulticastLoopback(on bool) error {
49
- // TODO(mikio): Implement this
44
return errOpNoSupport
45
}
46
47
// JoinGroup joins the group address group on the interface ifi.
54
-// It uses the system assigned multicast interface when ifi is nil,
55
-// although this is not recommended because the assignment depends on
56
-// platforms and sometimes it might require routing configuration.
48
+// By default all sources that can cast data to group are accepted.
49
+// It's possible to mute and unmute data transmission from a specific
50
+// source by using ExcludeSourceSpecificGroup and
51
+// IncludeSourceSpecificGroup.
52
+// JoinGroup uses the system assigned multicast interface when ifi is
53
+// nil, although this is not recommended because the assignment
54
+// depends on platforms and sometimes it might require routing
55
+// configuration.
56
func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error {
58
- // TODO(mikio): Implement this
57
return errOpNoSupport
58
}
59
62
-// LeaveGroup leaves the group address group on the interface ifi.
60
+// LeaveGroup leaves the group address group on the interface ifi
61
+// regardless of whether the group is any-source group or
62
+// source-specific group.
63
func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error {
64
- // TODO(mikio): Implement this
64
+ return errOpNoSupport
65
+}
66
+
67
+// JoinSourceSpecificGroup joins the source-specific group comprising
68
+// group and source on the interface ifi.
69
+// JoinSourceSpecificGroup uses the system assigned multicast
70
+// interface when ifi is nil, although this is not recommended because
71
+// the assignment depends on platforms and sometimes it might require
72
+// routing configuration.
73
+func (c *dgramOpt) JoinSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
74
+ return errOpNoSupport
75
+}
76
+
77
+// LeaveSourceSpecificGroup leaves the source-specific group on the
78
+// interface ifi.
79
+func (c *dgramOpt) LeaveSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
80
+ return errOpNoSupport
81
+}
82
+
83
+// ExcludeSourceSpecificGroup excludes the source-specific group from
84
+// the already joined any-source groups by JoinGroup on the interface
85
+// ifi.
86
+func (c *dgramOpt) ExcludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
87
+ return errOpNoSupport
88
+}
89
+
90
+// IncludeSourceSpecificGroup includes the excluded source-specific
91
+// group by ExcludeSourceSpecificGroup again on the interface ifi.
92
+func (c *dgramOpt) IncludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
93
return errOpNoSupport
94
}
95
@@ -70,7 +98,6 @@ func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error {
98
// returns an offset in bytes into the data of where the checksum
99
// field is located.
100
func (c *dgramOpt) Checksum() (on bool, offset int, err error) {
73
- // TODO(mikio): Implement this
101
return false, 0, errOpNoSupport
102
}
103
@@ -78,18 +105,15 @@ func (c *dgramOpt) Checksum() (on bool, offset int, err error) {
105
// the offset should be an offset in bytes into the data of where the
106
// checksum field is located.
107
func (c *dgramOpt) SetChecksum(on bool, offset int) error {
81
- // TODO(mikio): Implement this
108
return errOpNoSupport
109
}
110
111
// ICMPFilter returns an ICMP filter.
112
func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) {
87
- // TODO(mikio): Implement this
113
return nil, errOpNoSupport
114
}
115
116
// SetICMPFilter deploys the ICMP filter.
117
func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error {
93
- // TODO(mikio): Implement this
118
return errOpNoSupport
119
}
Godeps/_workspace/src/golang.org/x/net/ipv6/doc.go
renamed
+50
-3
@@ -6,8 +6,15 @@
6
// Protocol version 6.
7
//
8
// The package provides IP-level socket options that allow
9
-// manipulation of IPv6 facilities. The IPv6 and socket options for
10
-// IPv6 are defined in RFC 2460, RFC 3493 and RFC 3542.
9
+// manipulation of IPv6 facilities.
10
+//
11
+// The IPv6 protocol is defined in RFC 2460.
12
+// Basic and advanced socket interface extensions are defined in RFC
13
+// 3493 and RFC 3542.
14
+// Socket interface extensions for multicast source filters are
15
+// defined in RFC 3678.
16
+// MLDv1 and MLDv2 are defined in RFC 2710 and RFC 3810.
17
+// Source-specific multicast is defined in RFC 4607.
18
//
19
//
20
// Unicasting
@@ -33,7 +40,7 @@
40
// defer c.Close()
41
//
42
// The outgoing packets will be labeled DiffServ assured forwarding
36
-// class 1 low drop precedence, as known as AF11 packets.
43
+// class 1 low drop precedence, known as AF11 packets.
44
//
45
// if err := ipv6.NewConn(c).SetTrafficClass(DiffServAF11); err != nil {
46
// // error handling
@@ -190,4 +197,44 @@
197
// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff01::114")}); err != nil {
198
// // error handling
199
// }
200
+//
201
+//
202
+// Source-specific multicasting
203
+//
204
+// An application that uses PacketConn on MLDv2 supported platform is
205
+// able to join source-specific multicast groups.
206
+// The application may use JoinSourceSpecificGroup and
207
+// LeaveSourceSpecificGroup for the operation known as "include" mode,
208
+//
209
+// ssmgroup := net.UDPAddr{IP: net.ParseIP("ff32::8000:9")}
210
+// ssmsource := net.UDPAddr{IP: net.ParseIP("fe80::cafe")}
211
+// if err := p.JoinSourceSpecificGroup(en0, &ssmgroup, &ssmsource); err != nil {
212
+// // error handling
213
+// }
214
+// if err := p.LeaveSourceSpecificGroup(en0, &ssmgroup, &ssmsource); err != nil {
215
+// // error handling
216
+// }
217
+//
218
+// or JoinGroup, ExcludeSourceSpecificGroup,
219
+// IncludeSourceSpecificGroup and LeaveGroup for the operation known
220
+// as "exclude" mode.
221
+//
222
+// exclsource := net.UDPAddr{IP: net.ParseIP("fe80::dead")}
223
+// if err := p.JoinGroup(en0, &ssmgroup); err != nil {
224
+// // error handling
225
+// }
226
+// if err := p.ExcludeSourceSpecificGroup(en0, &ssmgroup, &exclsource); err != nil {
227
+// // error handling
228
+// }
229
+// if err := p.LeaveGroup(en0, &ssmgroup); err != nil {
230
+// // error handling
231
+// }
232
+//
233
+// Note that it depends on each platform implementation what happens
234
+// when an application which runs on MLDv2 unsupported platform uses
235
+// JoinSourceSpecificGroup and LeaveSourceSpecificGroup.
236
+// In general the platform tries to fall back to conversations using
237
+// MLDv1 and starts to listen to multicast traffic.
238
+// In the fallback case, ExcludeSourceSpecificGroup and
239
+// IncludeSourceSpecificGroup may return an error.
240
package ipv6
Godeps/_workspace/src/golang.org/x/net/ipv6/endpoint.go
renamed
+5
-1
@@ -33,7 +33,11 @@ func (c *Conn) PathMTU() (int, error) {
33
if err != nil {
34
return 0, err
35
}
36
- return ipv6PathMTU(fd)
36
+ _, mtu, err := getMTUInfo(fd, &sockOpts[ssoPathMTU])
37
+ if err != nil {
38
+ return 0, err
39
+ }
40
+ return mtu, nil
41
}
42
43
// NewConn returns a new Conn.
Godeps/_workspace/src/golang.org/x/net/ipv6/example_test.go
new
+215
@@ -0,0 +1,215 @@
1
+// Copyright 2014 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv6_test
6
+
7
+import (
8
+ "fmt"
9
+ "log"
10
+ "net"
11
+ "os"
12
+ "time"
13
+
14
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
15
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/ipv6"
16
+ "golang.org/x/net/icmp"
17
+)
18
+
19
+func ExampleConn_markingTCP() {
20
+ ln, err := net.Listen("tcp6", "[::]:1024")
21
+ if err != nil {
22
+ log.Fatal(err)
23
+ }
24
+ defer ln.Close()
25
+
26
+ for {
27
+ c, err := ln.Accept()
28
+ if err != nil {
29
+ log.Fatal(err)
30
+ }
31
+ go func(c net.Conn) {
32
+ defer c.Close()
33
+ p := ipv6.NewConn(c)
34
+ if err := p.SetTrafficClass(iana.DiffServAF11); err != nil {
35
+ log.Fatal(err)
36
+ }
37
+ if err := p.SetHopLimit(128); err != nil {
38
+ log.Fatal(err)
39
+ }
40
+ if _, err := c.Write([]byte("HELLO-R-U-THERE-ACK")); err != nil {
41
+ log.Fatal(err)
42
+ }
43
+ }(c)
44
+ }
45
+}
46
+
47
+func ExamplePacketConn_servingOneShotMulticastDNS() {
48
+ c, err := net.ListenPacket("udp6", "[::]:5353") // mDNS over UDP
49
+ if err != nil {
50
+ log.Fatal(err)
51
+ }
52
+ defer c.Close()
53
+ p := ipv6.NewPacketConn(c)
54
+
55
+ en0, err := net.InterfaceByName("en0")
56
+ if err != nil {
57
+ log.Fatal(err)
58
+ }
59
+ mDNSLinkLocal := net.UDPAddr{IP: net.ParseIP("ff02::fb")}
60
+ if err := p.JoinGroup(en0, &mDNSLinkLocal); err != nil {
61
+ log.Fatal(err)
62
+ }
63
+ defer p.LeaveGroup(en0, &mDNSLinkLocal)
64
+ if err := p.SetControlMessage(ipv6.FlagDst|ipv6.FlagInterface, true); err != nil {
65
+ log.Fatal(err)
66
+ }
67
+
68
+ var wcm ipv6.ControlMessage
69
+ b := make([]byte, 1500)
70
+ for {
71
+ _, rcm, peer, err := p.ReadFrom(b)
72
+ if err != nil {
73
+ log.Fatal(err)
74
+ }
75
+ if !rcm.Dst.IsMulticast() || !rcm.Dst.Equal(mDNSLinkLocal.IP) {
76
+ continue
77
+ }
78
+ wcm.IfIndex = rcm.IfIndex
79
+ answers := []byte("FAKE-MDNS-ANSWERS") // fake mDNS answers, you need to implement this
80
+ if _, err := p.WriteTo(answers, &wcm, peer); err != nil {
81
+ log.Fatal(err)
82
+ }
83
+ }
84
+}
85
+
86
+func ExamplePacketConn_tracingIPPacketRoute() {
87
+ // Tracing an IP packet route to www.google.com.
88
+
89
+ const host = "www.google.com"
90
+ ips, err := net.LookupIP(host)
91
+ if err != nil {
92
+ log.Fatal(err)
93
+ }
94
+ var dst net.IPAddr
95
+ for _, ip := range ips {
96
+ if ip.To16() != nil && ip.To4() == nil {
97
+ dst.IP = ip
98
+ fmt.Printf("using %v for tracing an IP packet route to %s\n", dst.IP, host)
99
+ break
100
+ }
101
+ }
102
+ if dst.IP == nil {
103
+ log.Fatal("no AAAA record found")
104
+ }
105
+
106
+ c, err := net.ListenPacket(fmt.Sprintf("ip6:%d", iana.ProtocolIPv6ICMP), "::") // ICMP for IPv6
107
+ if err != nil {
108
+ log.Fatal(err)
109
+ }
110
+ defer c.Close()
111
+ p := ipv6.NewPacketConn(c)
112
+
113
+ if err := p.SetControlMessage(ipv6.FlagHopLimit|ipv6.FlagSrc|ipv6.FlagDst|ipv6.FlagInterface, true); err != nil {
114
+ log.Fatal(err)
115
+ }
116
+ wm := icmp.Message{
117
+ Type: ipv6.ICMPTypeEchoRequest, Code: 0,
118
+ Body: &icmp.Echo{
119
+ ID: os.Getpid() & 0xffff,
120
+ Data: []byte("HELLO-R-U-THERE"),
121
+ },
122
+ }
123
+ var f ipv6.ICMPFilter
124
+ f.SetAll(true)
125
+ f.Accept(ipv6.ICMPTypeTimeExceeded)
126
+ f.Accept(ipv6.ICMPTypeEchoReply)
127
+ if err := p.SetICMPFilter(&f); err != nil {
128
+ log.Fatal(err)
129
+ }
130
+
131
+ var wcm ipv6.ControlMessage
132
+ rb := make([]byte, 1500)
133
+ for i := 1; i <= 64; i++ { // up to 64 hops
134
+ wm.Body.(*icmp.Echo).Seq = i
135
+ wb, err := wm.Marshal(nil)
136
+ if err != nil {
137
+ log.Fatal(err)
138
+ }
139
+
140
+ // In the real world usually there are several
141
+ // multiple traffic-engineered paths for each hop.
142
+ // You may need to probe a few times to each hop.
143
+ begin := time.Now()
144
+ wcm.HopLimit = i
145
+ if _, err := p.WriteTo(wb, &wcm, &dst); err != nil {
146
+ log.Fatal(err)
147
+ }
148
+ if err := p.SetReadDeadline(time.Now().Add(3 * time.Second)); err != nil {
149
+ log.Fatal(err)
150
+ }
151
+ n, rcm, peer, err := p.ReadFrom(rb)
152
+ if err != nil {
153
+ if err, ok := err.(net.Error); ok && err.Timeout() {
154
+ fmt.Printf("%v\t*\n", i)
155
+ continue
156
+ }
157
+ log.Fatal(err)
158
+ }
159
+ rm, err := icmp.ParseMessage(iana.ProtocolIPv6ICMP, rb[:n])
160
+ if err != nil {
161
+ log.Fatal(err)
162
+ }
163
+ rtt := time.Since(begin)
164
+
165
+ // In the real world you need to determine whether the
166
+ // received message is yours using ControlMessage.Src,
167
+ // ControlMesage.Dst, icmp.Echo.ID and icmp.Echo.Seq.
168
+ switch rm.Type {
169
+ case ipv6.ICMPTypeTimeExceeded:
170
+ names, _ := net.LookupAddr(peer.String())
171
+ fmt.Printf("%d\t%v %+v %v\n\t%+v\n", i, peer, names, rtt, rcm)
172
+ case ipv6.ICMPTypeEchoReply:
173
+ names, _ := net.LookupAddr(peer.String())
174
+ fmt.Printf("%d\t%v %+v %v\n\t%+v\n", i, peer, names, rtt, rcm)
175
+ return
176
+ }
177
+ }
178
+}
179
+
180
+func ExamplePacketConn_advertisingOSPFHello() {
181
+ c, err := net.ListenPacket(fmt.Sprintf("ip6:%d", iana.ProtocolOSPFIGP), "::") // OSPF for IPv6
182
+ if err != nil {
183
+ log.Fatal(err)
184
+ }
185
+ defer c.Close()
186
+ p := ipv6.NewPacketConn(c)
187
+
188
+ en0, err := net.InterfaceByName("en0")
189
+ if err != nil {
190
+ log.Fatal(err)
191
+ }
192
+ allSPFRouters := net.IPAddr{IP: net.ParseIP("ff02::5")}
193
+ if err := p.JoinGroup(en0, &allSPFRouters); err != nil {
194
+ log.Fatal(err)
195
+ }
196
+ defer p.LeaveGroup(en0, &allSPFRouters)
197
+
198
+ hello := make([]byte, 24) // fake hello data, you need to implement this
199
+ ospf := make([]byte, 16) // fake ospf header, you need to implement this
200
+ ospf[0] = 3 // version 3
201
+ ospf[1] = 1 // hello packet
202
+ ospf = append(ospf, hello...)
203
+ if err := p.SetChecksum(true, 12); err != nil {
204
+ log.Fatal(err)
205
+ }
206
+
207
+ cm := ipv6.ControlMessage{
208
+ TrafficClass: iana.DiffServCS6,
209
+ HopLimit: 1,
210
+ IfIndex: en0.Index,
211
+ }
212
+ if _, err := p.WriteTo(ospf, &cm, &allSPFRouters); err != nil {
213
+ log.Fatal(err)
214
+ }
215
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/gen.go
renamed
+68
-101
@@ -4,11 +4,11 @@
4
5
// +build ignore
6
7
-// This program generates internet protocol constants and tables by
8
-// reading IANA protocol registries.
9
-//
10
-// Usage:
11
-// go run gen.go > iana.go
7
+//go:generate go run gen.go
8
+
9
+// This program generates system adaptation constants and types,
10
+// internet protocol constants and tables by reading template files
11
+// and IANA protocol registries.
12
package main
13
14
import (
@@ -17,12 +17,65 @@ import (
17
"fmt"
18
"go/format"
19
"io"
20
+ "io/ioutil"
21
"net/http"
22
"os"
23
+ "os/exec"
24
+ "runtime"
25
"strconv"
26
"strings"
27
)
28
29
+func main() {
30
+ if err := genzsys(); err != nil {
31
+ fmt.Fprintln(os.Stderr, err)
32
+ os.Exit(1)
33
+ }
34
+ if err := geniana(); err != nil {
35
+ fmt.Fprintln(os.Stderr, err)
36
+ os.Exit(1)
37
+ }
38
+}
39
+
40
+func genzsys() error {
41
+ defs := "defs_" + runtime.GOOS + ".go"
42
+ f, err := os.Open(defs)
43
+ if err != nil {
44
+ if os.IsNotExist(err) {
45
+ return nil
46
+ }
47
+ return err
48
+ }
49
+ f.Close()
50
+ cmd := exec.Command("go", "tool", "cgo", "-godefs", defs)
51
+ b, err := cmd.Output()
52
+ if err != nil {
53
+ return err
54
+ }
55
+ // The ipv6 pacakge still supports go1.2, and so we need to
56
+ // take care of additional platforms in go1.3 and above for
57
+ // working with go1.2.
58
+ switch {
59
+ case runtime.GOOS == "dragonfly" || runtime.GOOS == "solaris":
60
+ b = bytes.Replace(b, []byte("package ipv6\n"), []byte("// +build "+runtime.GOOS+"\n\npackage ipv6\n"), 1)
61
+ case runtime.GOOS == "linux" && (runtime.GOARCH == "arm64" || runtime.GOARCH == "ppc64" || runtime.GOARCH == "ppc64le"):
62
+ b = bytes.Replace(b, []byte("package ipv6\n"), []byte("// +build "+runtime.GOOS+","+runtime.GOARCH+"\n\npackage ipv6\n"), 1)
63
+ }
64
+ b, err = format.Source(b)
65
+ if err != nil {
66
+ return err
67
+ }
68
+ zsys := "zsys_" + runtime.GOOS + ".go"
69
+ switch runtime.GOOS {
70
+ case "freebsd", "linux":
71
+ zsys = "zsys_" + runtime.GOOS + "_" + runtime.GOARCH + ".go"
72
+ }
73
+ if err := ioutil.WriteFile(zsys, b, 0644); err != nil {
74
+ return err
75
+ }
76
+ return nil
77
+}
78
+
79
var registries = []struct {
80
url string
81
parse func(io.Writer, io.Reader) error
@@ -31,40 +84,35 @@ var registries = []struct {
84
"http://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xml",
85
parseICMPv6Parameters,
86
},
34
- {
35
- "http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml",
36
- parseProtocolNumbers,
37
- },
87
}
88
40
-func main() {
89
+func geniana() error {
90
var bb bytes.Buffer
42
- fmt.Fprintf(&bb, "// go run gen.go\n")
91
+ fmt.Fprintf(&bb, "// go generate gen.go\n")
92
fmt.Fprintf(&bb, "// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n")
93
fmt.Fprintf(&bb, "package ipv6\n\n")
94
for _, r := range registries {
95
resp, err := http.Get(r.url)
96
if err != nil {
48
- fmt.Fprintln(os.Stderr, err)
49
- os.Exit(1)
97
+ return err
98
}
99
defer resp.Body.Close()
100
if resp.StatusCode != http.StatusOK {
53
- fmt.Fprintf(os.Stderr, "got HTTP status code %v for %v\n", resp.StatusCode, r.url)
54
- os.Exit(1)
101
+ return fmt.Errorf("got HTTP status code %v for %v\n", resp.StatusCode, r.url)
102
}
103
if err := r.parse(&bb, resp.Body); err != nil {
57
- fmt.Fprintln(os.Stderr, err)
58
- os.Exit(1)
104
+ return err
105
}
106
fmt.Fprintf(&bb, "\n")
107
}
108
b, err := format.Source(bb.Bytes())
109
if err != nil {
64
- fmt.Fprintln(os.Stderr, err)
65
- os.Exit(1)
110
+ return err
111
}
67
- os.Stdout.Write(b)
112
+ if err := ioutil.WriteFile("iana.go", b, 0644); err != nil {
113
+ return err
114
+ }
115
+ return nil
116
}
117
118
func parseICMPv6Parameters(w io.Writer, r io.Reader) error {
@@ -158,84 +206,3 @@ func (icp *icmpv6Parameters) escape() []canonICMPv6ParamRecord {
206
}
207
return prs
208
}
161
-
162
-func parseProtocolNumbers(w io.Writer, r io.Reader) error {
163
- dec := xml.NewDecoder(r)
164
- var pn protocolNumbers
165
- if err := dec.Decode(&pn); err != nil {
166
- return err
167
- }
168
- prs := pn.escape()
169
- fmt.Fprintf(w, "// %s, Updated: %s\n", pn.Title, pn.Updated)
170
- fmt.Fprintf(w, "const (\n")
171
- for _, pr := range prs {
172
- if pr.Name == "" {
173
- continue
174
- }
175
- fmt.Fprintf(w, "ianaProtocol%s = %d", pr.Name, pr.Value)
176
- s := pr.Descr
177
- if s == "" {
178
- s = pr.OrigName
179
- }
180
- fmt.Fprintf(w, "// %s\n", s)
181
- }
182
- fmt.Fprintf(w, ")\n")
183
- return nil
184
-}
185
-
186
-type protocolNumbers struct {
187
- XMLName xml.Name `xml:"registry"`
188
- Title string `xml:"title"`
189
- Updated string `xml:"updated"`
190
- RegTitle string `xml:"registry>title"`
191
- Note string `xml:"registry>note"`
192
- Records []struct {
193
- Value string `xml:"value"`
194
- Name string `xml:"name"`
195
- Descr string `xml:"description"`
196
- } `xml:"registry>record"`
197
-}
198
-
199
-type canonProtocolRecord struct {
200
- OrigName string
201
- Name string
202
- Descr string
203
- Value int
204
-}
205
-
206
-func (pn *protocolNumbers) escape() []canonProtocolRecord {
207
- prs := make([]canonProtocolRecord, len(pn.Records))
208
- sr := strings.NewReplacer(
209
- "-in-", "in",
210
- "-within-", "within",
211
- "-over-", "over",
212
- "+", "P",
213
- "-", "",
214
- "/", "",
215
- ".", "",
216
- " ", "",
217
- )
218
- for i, pr := range pn.Records {
219
- prs[i].OrigName = pr.Name
220
- s := strings.TrimSpace(pr.Name)
221
- switch pr.Name {
222
- case "ISIS over IPv4":
223
- prs[i].Name = "ISIS"
224
- case "manet":
225
- prs[i].Name = "MANET"
226
- default:
227
- prs[i].Name = sr.Replace(s)
228
- }
229
- ss := strings.Split(pr.Descr, "\n")
230
- for i := range ss {
231
- ss[i] = strings.TrimSpace(ss[i])
232
- }
233
- if len(ss) > 1 {
234
- prs[i].Descr = strings.Join(ss, " ")
235
- } else {
236
- prs[i].Descr = ss[0]
237
- }
238
- prs[i].Value, _ = strconv.Atoi(pr.Value)
239
- }
240
- return prs
241
-}
Godeps/_workspace/src/golang.org/x/net/ipv6/genericopt_posix.go
renamed
+4
-4
@@ -18,7 +18,7 @@ func (c *genericOpt) TrafficClass() (int, error) {
18
if err != nil {
19
return 0, err
20
}
21
- return ipv6TrafficClass(fd)
21
+ return getInt(fd, &sockOpts[ssoTrafficClass])
22
}
23
24
// SetTrafficClass sets the traffic class field value for future
@@ -31,7 +31,7 @@ func (c *genericOpt) SetTrafficClass(tclass int) error {
31
if err != nil {
32
return err
33
}
34
- return setIPv6TrafficClass(fd, tclass)
34
+ return setInt(fd, &sockOpts[ssoTrafficClass], tclass)
35
}
36
37
// HopLimit returns the hop limit field value for outgoing packets.
@@ -43,7 +43,7 @@ func (c *genericOpt) HopLimit() (int, error) {
43
if err != nil {
44
return 0, err
45
}
46
- return ipv6HopLimit(fd)
46
+ return getInt(fd, &sockOpts[ssoHopLimit])
47
}
48
49
// SetHopLimit sets the hop limit field value for future outgoing
@@ -56,5 +56,5 @@ func (c *genericOpt) SetHopLimit(hoplim int) error {
56
if err != nil {
57
return err
58
}
59
- return setIPv6HopLimit(fd, hoplim)
59
+ return setInt(fd, &sockOpts[ssoHopLimit], hoplim)
60
}
Godeps/_workspace/src/golang.org/x/net/ipv6/genericopt_stub.go
renamed
-4
@@ -9,26 +9,22 @@ package ipv6
9
// TrafficClass returns the traffic class field value for outgoing
10
// packets.
11
func (c *genericOpt) TrafficClass() (int, error) {
12
- // TODO(mikio): Implement this
12
return 0, errOpNoSupport
13
}
14
15
// SetTrafficClass sets the traffic class field value for future
16
// outgoing packets.
17
func (c *genericOpt) SetTrafficClass(tclass int) error {
19
- // TODO(mikio): Implement this
18
return errOpNoSupport
19
}
20
21
// HopLimit returns the hop limit field value for outgoing packets.
22
func (c *genericOpt) HopLimit() (int, error) {
25
- // TODO(mikio): Implement this
23
return 0, errOpNoSupport
24
}
25
26
// SetHopLimit sets the hop limit field value for future outgoing
27
// packets.
28
func (c *genericOpt) SetHopLimit(hoplim int) error {
32
- // TODO(mikio): Implement this
29
return errOpNoSupport
30
}
Godeps/_workspace/src/golang.org/x/net/ipv6/header.go
new
+55
@@ -0,0 +1,55 @@
1
+// Copyright 2014 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv6
6
+
7
+import (
8
+ "errors"
9
+ "fmt"
10
+ "net"
11
+)
12
+
13
+const (
14
+ Version = 6 // protocol version
15
+ HeaderLen = 40 // header length
16
+)
17
+
18
+// A Header represents an IPv6 base header.
19
+type Header struct {
20
+ Version int // protocol version
21
+ TrafficClass int // traffic class
22
+ FlowLabel int // flow label
23
+ PayloadLen int // payload length
24
+ NextHeader int // next header
25
+ HopLimit int // hop limit
26
+ Src net.IP // source address
27
+ Dst net.IP // destination address
28
+}
29
+
30
+func (h *Header) String() string {
31
+ if h == nil {
32
+ return "<nil>"
33
+ }
34
+ return fmt.Sprintf("ver: %v, tclass: %#x, flowlbl: %#x, payloadlen: %v, nxthdr: %v, hoplim: %v, src: %v, dst: %v", h.Version, h.TrafficClass, h.FlowLabel, h.PayloadLen, h.NextHeader, h.HopLimit, h.Src, h.Dst)
35
+}
36
+
37
+// ParseHeader parses b as an IPv6 base header.
38
+func ParseHeader(b []byte) (*Header, error) {
39
+ if len(b) < HeaderLen {
40
+ return nil, errors.New("header too short")
41
+ }
42
+ h := &Header{
43
+ Version: int(b[0]) >> 4,
44
+ TrafficClass: int(b[0]&0x0f)<<4 | int(b[1])>>4,
45
+ FlowLabel: int(b[1]&0x0f)<<16 | int(b[2])<<8 | int(b[3]),
46
+ PayloadLen: int(b[4])<<8 | int(b[5]),
47
+ NextHeader: int(b[6]),
48
+ HopLimit: int(b[7]),
49
+ }
50
+ h.Src = make(net.IP, net.IPv6len)
51
+ copy(h.Src, b[8:24])
52
+ h.Dst = make(net.IP, net.IPv6len)
53
+ copy(h.Dst, b[24:40])
54
+ return h, nil
55
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/header_test.go
new
+50
@@ -0,0 +1,50 @@
1
+// Copyright 2014 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv6_test
6
+
7
+import (
8
+ "net"
9
+ "reflect"
10
+ "testing"
11
+
12
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
13
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/ipv6"
14
+)
15
+
16
+var (
17
+ wireHeaderFromKernel = [ipv6.HeaderLen]byte{
18
+ 0x69, 0x8b, 0xee, 0xf1,
19
+ 0xca, 0xfe, 0x2c, 0x01,
20
+ 0x20, 0x01, 0x0d, 0xb8,
21
+ 0x00, 0x01, 0x00, 0x00,
22
+ 0x00, 0x00, 0x00, 0x00,
23
+ 0x00, 0x00, 0x00, 0x01,
24
+ 0x20, 0x01, 0x0d, 0xb8,
25
+ 0x00, 0x02, 0x00, 0x00,
26
+ 0x00, 0x00, 0x00, 0x00,
27
+ 0x00, 0x00, 0x00, 0x01,
28
+ }
29
+
30
+ testHeader = &ipv6.Header{
31
+ Version: ipv6.Version,
32
+ TrafficClass: iana.DiffServAF43,
33
+ FlowLabel: 0xbeef1,
34
+ PayloadLen: 0xcafe,
35
+ NextHeader: iana.ProtocolIPv6Frag,
36
+ HopLimit: 1,
37
+ Src: net.ParseIP("2001:db8:1::1"),
38
+ Dst: net.ParseIP("2001:db8:2::1"),
39
+ }
40
+)
41
+
42
+func TestParseHeader(t *testing.T) {
43
+ h, err := ipv6.ParseHeader(wireHeaderFromKernel[:])
44
+ if err != nil {
45
+ t.Fatal(err)
46
+ }
47
+ if !reflect.DeepEqual(h, testHeader) {
48
+ t.Fatalf("got %#v; want %#v", h, testHeader)
49
+ }
50
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/helper.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv6/helper_stub.go
renamed
-3
@@ -7,16 +7,13 @@
7
package ipv6
8
9
func (c *genericOpt) sysfd() (int, error) {
10
- // TODO(mikio): Implement this
10
return 0, errOpNoSupport
11
}
12
13
func (c *dgramOpt) sysfd() (int, error) {
15
- // TODO(mikio): Implement this
14
return 0, errOpNoSupport
15
}
16
17
func (c *payloadHandler) sysfd() (int, error) {
20
- // TODO(mikio): Implement this
18
return 0, errOpNoSupport
19
}
Godeps/_workspace/src/golang.org/x/net/ipv6/helper_unix.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv6/helper_windows.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv6/iana.go
new
+80
@@ -0,0 +1,80 @@
1
+// go generate gen.go
2
+// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
3
+
4
+package ipv6
5
+
6
+// Internet Control Message Protocol version 6 (ICMPv6) Parameters, Updated: 2014-09-22
7
+const (
8
+ ICMPTypeDestinationUnreachable ICMPType = 1 // Destination Unreachable
9
+ ICMPTypePacketTooBig ICMPType = 2 // Packet Too Big
10
+ ICMPTypeTimeExceeded ICMPType = 3 // Time Exceeded
11
+ ICMPTypeParameterProblem ICMPType = 4 // Parameter Problem
12
+ ICMPTypeEchoRequest ICMPType = 128 // Echo Request
13
+ ICMPTypeEchoReply ICMPType = 129 // Echo Reply
14
+ ICMPTypeMulticastListenerQuery ICMPType = 130 // Multicast Listener Query
15
+ ICMPTypeMulticastListenerReport ICMPType = 131 // Multicast Listener Report
16
+ ICMPTypeMulticastListenerDone ICMPType = 132 // Multicast Listener Done
17
+ ICMPTypeRouterSolicitation ICMPType = 133 // Router Solicitation
18
+ ICMPTypeRouterAdvertisement ICMPType = 134 // Router Advertisement
19
+ ICMPTypeNeighborSolicitation ICMPType = 135 // Neighbor Solicitation
20
+ ICMPTypeNeighborAdvertisement ICMPType = 136 // Neighbor Advertisement
21
+ ICMPTypeRedirect ICMPType = 137 // Redirect Message
22
+ ICMPTypeRouterRenumbering ICMPType = 138 // Router Renumbering
23
+ ICMPTypeNodeInformationQuery ICMPType = 139 // ICMP Node Information Query
24
+ ICMPTypeNodeInformationResponse ICMPType = 140 // ICMP Node Information Response
25
+ ICMPTypeInverseNeighborDiscoverySolicitation ICMPType = 141 // Inverse Neighbor Discovery Solicitation Message
26
+ ICMPTypeInverseNeighborDiscoveryAdvertisement ICMPType = 142 // Inverse Neighbor Discovery Advertisement Message
27
+ ICMPTypeVersion2MulticastListenerReport ICMPType = 143 // Version 2 Multicast Listener Report
28
+ ICMPTypeHomeAgentAddressDiscoveryRequest ICMPType = 144 // Home Agent Address Discovery Request Message
29
+ ICMPTypeHomeAgentAddressDiscoveryReply ICMPType = 145 // Home Agent Address Discovery Reply Message
30
+ ICMPTypeMobilePrefixSolicitation ICMPType = 146 // Mobile Prefix Solicitation
31
+ ICMPTypeMobilePrefixAdvertisement ICMPType = 147 // Mobile Prefix Advertisement
32
+ ICMPTypeCertificationPathSolicitation ICMPType = 148 // Certification Path Solicitation Message
33
+ ICMPTypeCertificationPathAdvertisement ICMPType = 149 // Certification Path Advertisement Message
34
+ ICMPTypeMulticastRouterAdvertisement ICMPType = 151 // Multicast Router Advertisement
35
+ ICMPTypeMulticastRouterSolicitation ICMPType = 152 // Multicast Router Solicitation
36
+ ICMPTypeMulticastRouterTermination ICMPType = 153 // Multicast Router Termination
37
+ ICMPTypeFMIPv6 ICMPType = 154 // FMIPv6 Messages
38
+ ICMPTypeRPLControl ICMPType = 155 // RPL Control Message
39
+ ICMPTypeILNPv6LocatorUpdate ICMPType = 156 // ILNPv6 Locator Update Message
40
+ ICMPTypeDuplicateAddressRequest ICMPType = 157 // Duplicate Address Request
41
+ ICMPTypeDuplicateAddressConfirmation ICMPType = 158 // Duplicate Address Confirmation
42
+)
43
+
44
+// Internet Control Message Protocol version 6 (ICMPv6) Parameters, Updated: 2014-09-22
45
+var icmpTypes = map[ICMPType]string{
46
+ 1: "destination unreachable",
47
+ 2: "packet too big",
48
+ 3: "time exceeded",
49
+ 4: "parameter problem",
50
+ 128: "echo request",
51
+ 129: "echo reply",
52
+ 130: "multicast listener query",
53
+ 131: "multicast listener report",
54
+ 132: "multicast listener done",
55
+ 133: "router solicitation",
56
+ 134: "router advertisement",
57
+ 135: "neighbor solicitation",
58
+ 136: "neighbor advertisement",
59
+ 137: "redirect message",
60
+ 138: "router renumbering",
61
+ 139: "icmp node information query",
62
+ 140: "icmp node information response",
63
+ 141: "inverse neighbor discovery solicitation message",
64
+ 142: "inverse neighbor discovery advertisement message",
65
+ 143: "version 2 multicast listener report",
66
+ 144: "home agent address discovery request message",
67
+ 145: "home agent address discovery reply message",
68
+ 146: "mobile prefix solicitation",
69
+ 147: "mobile prefix advertisement",
70
+ 148: "certification path solicitation message",
71
+ 149: "certification path advertisement message",
72
+ 151: "multicast router advertisement",
73
+ 152: "multicast router solicitation",
74
+ 153: "multicast router termination",
75
+ 154: "fmipv6 messages",
76
+ 155: "rpl control message",
77
+ 156: "ilnpv6 locator update message",
78
+ 157: "duplicate address request",
79
+ 158: "duplicate address confirmation",
80
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/icmp.go
new
+57
@@ -0,0 +1,57 @@
1
+// Copyright 2013 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv6
6
+
7
+import "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
8
+
9
+// An ICMPType represents a type of ICMP message.
10
+type ICMPType int
11
+
12
+func (typ ICMPType) String() string {
13
+ s, ok := icmpTypes[typ]
14
+ if !ok {
15
+ return "<nil>"
16
+ }
17
+ return s
18
+}
19
+
20
+// Protocol returns the ICMPv6 protocol number.
21
+func (typ ICMPType) Protocol() int {
22
+ return iana.ProtocolIPv6ICMP
23
+}
24
+
25
+// An ICMPFilter represents an ICMP message filter for incoming
26
+// packets. The filter belongs to a packet delivery path on a host and
27
+// it cannot interact with forwarding packets or tunnel-outer packets.
28
+//
29
+// Note: RFC 2460 defines a reasonable role model. A node means a
30
+// device that implements IP. A router means a node that forwards IP
31
+// packets not explicitly addressed to itself, and a host means a node
32
+// that is not a router.
33
+type ICMPFilter struct {
34
+ sysICMPv6Filter
35
+}
36
+
37
+// Accept accepts incoming ICMP packets including the type field value
38
+// typ.
39
+func (f *ICMPFilter) Accept(typ ICMPType) {
40
+ f.accept(typ)
41
+}
42
+
43
+// Block blocks incoming ICMP packets including the type field value
44
+// typ.
45
+func (f *ICMPFilter) Block(typ ICMPType) {
46
+ f.block(typ)
47
+}
48
+
49
+// SetAll sets the filter action to the filter.
50
+func (f *ICMPFilter) SetAll(block bool) {
51
+ f.setAll(block)
52
+}
53
+
54
+// WillBlock reports whether the ICMP type will be blocked.
55
+func (f *ICMPFilter) WillBlock(typ ICMPType) bool {
56
+ return f.willBlock(typ)
57
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/icmp_bsd.go
renamed
+6
-10
@@ -6,19 +6,15 @@
6
7
package ipv6
8
9
-type sysICMPFilter struct {
10
- Filt [8]uint32
9
+func (f *sysICMPv6Filter) accept(typ ICMPType) {
10
+ f.Filt[typ>>5] |= 1 << (uint32(typ) & 31)
11
}
12
13
-func (f *sysICMPFilter) set(typ ICMPType, block bool) {
14
- if block {
15
- f.Filt[typ>>5] &^= 1 << (uint32(typ) & 31)
16
- } else {
17
- f.Filt[typ>>5] |= 1 << (uint32(typ) & 31)
18
- }
13
+func (f *sysICMPv6Filter) block(typ ICMPType) {
14
+ f.Filt[typ>>5] &^= 1 << (uint32(typ) & 31)
15
}
16
21
-func (f *sysICMPFilter) setAll(block bool) {
17
+func (f *sysICMPv6Filter) setAll(block bool) {
18
for i := range f.Filt {
19
if block {
20
f.Filt[i] = 0
@@ -28,6 +24,6 @@ func (f *sysICMPFilter) setAll(block bool) {
24
}
25
}
26
31
-func (f *sysICMPFilter) willBlock(typ ICMPType) bool {
27
+func (f *sysICMPv6Filter) willBlock(typ ICMPType) bool {
28
return f.Filt[typ>>5]&(1<<(uint32(typ)&31)) == 0
29
}
Godeps/_workspace/src/golang.org/x/net/ipv6/icmp_linux.go
renamed
+6
-10
@@ -4,19 +4,15 @@
4
5
package ipv6
6
7
-type sysICMPFilter struct {
8
- Data [8]uint32
7
+func (f *sysICMPv6Filter) accept(typ ICMPType) {
8
+ f.Data[typ>>5] &^= 1 << (uint32(typ) & 31)
9
}
10
11
-func (f *sysICMPFilter) set(typ ICMPType, block bool) {
12
- if block {
13
- f.Data[typ>>5] |= 1 << (uint32(typ) & 31)
14
- } else {
15
- f.Data[typ>>5] &^= 1 << (uint32(typ) & 31)
16
- }
11
+func (f *sysICMPv6Filter) block(typ ICMPType) {
12
+ f.Data[typ>>5] |= 1 << (uint32(typ) & 31)
13
}
14
19
-func (f *sysICMPFilter) setAll(block bool) {
15
+func (f *sysICMPv6Filter) setAll(block bool) {
16
for i := range f.Data {
17
if block {
18
f.Data[i] = 1<<32 - 1
@@ -26,6 +22,6 @@ func (f *sysICMPFilter) setAll(block bool) {
22
}
23
}
24
29
-func (f *sysICMPFilter) willBlock(typ ICMPType) bool {
25
+func (f *sysICMPv6Filter) willBlock(typ ICMPType) bool {
26
return f.Data[typ>>5]&(1<<(uint32(typ)&31)) != 0
27
}
Godeps/_workspace/src/golang.org/x/net/ipv6/icmp_solaris.go
new
+24
@@ -0,0 +1,24 @@
1
+// Copyright 2013 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+// +build solaris
6
+
7
+package ipv6
8
+
9
+func (f *sysICMPv6Filter) accept(typ ICMPType) {
10
+ // TODO(mikio): implement this
11
+}
12
+
13
+func (f *sysICMPv6Filter) block(typ ICMPType) {
14
+ // TODO(mikio): implement this
15
+}
16
+
17
+func (f *sysICMPv6Filter) setAll(block bool) {
18
+ // TODO(mikio): implement this
19
+}
20
+
21
+func (f *sysICMPv6Filter) willBlock(typ ICMPType) bool {
22
+ // TODO(mikio): implement this
23
+ return false
24
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/icmp_stub.go
new
+23
@@ -0,0 +1,23 @@
1
+// Copyright 2013 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+// +build nacl plan9
6
+
7
+package ipv6
8
+
9
+type sysICMPv6Filter struct {
10
+}
11
+
12
+func (f *sysICMPv6Filter) accept(typ ICMPType) {
13
+}
14
+
15
+func (f *sysICMPv6Filter) block(typ ICMPType) {
16
+}
17
+
18
+func (f *sysICMPv6Filter) setAll(block bool) {
19
+}
20
+
21
+func (f *sysICMPv6Filter) willBlock(typ ICMPType) bool {
22
+ return false
23
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/icmp_test.go
renamed
+24
-30
@@ -5,13 +5,13 @@
5
package ipv6_test
6
7
import (
8
- "code.google.com/p/go.net/ipv6"
8
"net"
10
- "os"
9
"reflect"
10
"runtime"
13
- "sync"
11
"testing"
12
+
13
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/ipv6"
14
+ "golang.org/x/net/internal/nettest"
15
)
16
17
var icmpStringTests = []struct {
@@ -27,59 +27,53 @@ func TestICMPString(t *testing.T) {
27
for _, tt := range icmpStringTests {
28
s := tt.in.String()
29
if s != tt.out {
30
- t.Errorf("got %s; expected %s", s, tt.out)
30
+ t.Errorf("got %s; want %s", s, tt.out)
31
}
32
}
33
}
34
35
func TestICMPFilter(t *testing.T) {
36
switch runtime.GOOS {
37
- case "plan9", "solaris", "windows":
38
- t.Skipf("not supported on %q", runtime.GOOS)
37
+ case "nacl", "plan9", "solaris", "windows":
38
+ t.Skipf("not supported on %s", runtime.GOOS)
39
}
40
41
var f ipv6.ICMPFilter
42
for _, toggle := range []bool{false, true} {
43
f.SetAll(toggle)
44
- var wg sync.WaitGroup
44
for _, typ := range []ipv6.ICMPType{
45
ipv6.ICMPTypeDestinationUnreachable,
46
ipv6.ICMPTypeEchoReply,
47
ipv6.ICMPTypeNeighborSolicitation,
48
ipv6.ICMPTypeDuplicateAddressConfirmation,
49
} {
51
- wg.Add(1)
52
- go func(typ ipv6.ICMPType) {
53
- defer wg.Done()
54
- f.Set(typ, false)
55
- if f.WillBlock(typ) {
56
- t.Errorf("ipv6.ICMPFilter.Set(%v, false) failed", typ)
57
- }
58
- f.Set(typ, true)
59
- if !f.WillBlock(typ) {
60
- t.Errorf("ipv6.ICMPFilter.Set(%v, true) failed", typ)
61
- }
62
- }(typ)
50
+ f.Accept(typ)
51
+ if f.WillBlock(typ) {
52
+ t.Errorf("ipv6.ICMPFilter.Set(%v, false) failed", typ)
53
+ }
54
+ f.Block(typ)
55
+ if !f.WillBlock(typ) {
56
+ t.Errorf("ipv6.ICMPFilter.Set(%v, true) failed", typ)
57
+ }
58
}
64
- wg.Wait()
59
}
60
}
61
62
func TestSetICMPFilter(t *testing.T) {
63
switch runtime.GOOS {
70
- case "plan9", "solaris", "windows":
71
- t.Skipf("not supported on %q", runtime.GOOS)
64
+ case "nacl", "plan9", "solaris", "windows":
65
+ t.Skipf("not supported on %s", runtime.GOOS)
66
}
67
if !supportsIPv6 {
68
t.Skip("ipv6 is not supported")
69
}
76
- if os.Getuid() != 0 {
77
- t.Skip("must be root")
70
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
71
+ t.Skip(m)
72
}
73
74
c, err := net.ListenPacket("ip6:ipv6-icmp", "::1")
75
if err != nil {
82
- t.Fatalf("net.ListenPacket failed: %v", err)
76
+ t.Fatal(err)
77
}
78
defer c.Close()
79
@@ -87,16 +81,16 @@ func TestSetICMPFilter(t *testing.T) {
81
82
var f ipv6.ICMPFilter
83
f.SetAll(true)
90
- f.Set(ipv6.ICMPTypeEchoRequest, false)
91
- f.Set(ipv6.ICMPTypeEchoReply, false)
84
+ f.Accept(ipv6.ICMPTypeEchoRequest)
85
+ f.Accept(ipv6.ICMPTypeEchoReply)
86
if err := p.SetICMPFilter(&f); err != nil {
93
- t.Fatalf("ipv6.PacketConn.SetICMPFilter failed: %v", err)
87
+ t.Fatal(err)
88
}
89
kf, err := p.ICMPFilter()
90
if err != nil {
97
- t.Fatalf("ipv6.PacketConn.ICMPFilter failed: %v", err)
91
+ t.Fatal(err)
92
}
93
if !reflect.DeepEqual(kf, &f) {
100
- t.Fatalf("got unexpected filter %#v; expected %#v", kf, f)
94
+ t.Fatalf("got %#v; want %#v", kf, f)
95
}
96
}
Godeps/_workspace/src/golang.org/x/net/ipv6/icmp_windows.go
new
+26
@@ -0,0 +1,26 @@
1
+// Copyright 2013 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv6
6
+
7
+type sysICMPv6Filter struct {
8
+ // TODO(mikio): implement this
9
+}
10
+
11
+func (f *sysICMPv6Filter) accept(typ ICMPType) {
12
+ // TODO(mikio): implement this
13
+}
14
+
15
+func (f *sysICMPv6Filter) block(typ ICMPType) {
16
+ // TODO(mikio): implement this
17
+}
18
+
19
+func (f *sysICMPv6Filter) setAll(block bool) {
20
+ // TODO(mikio): implement this
21
+}
22
+
23
+func (f *sysICMPv6Filter) willBlock(typ ICMPType) bool {
24
+ // TODO(mikio): implement this
25
+ return false
26
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/mocktransponder_test.go
new
+32
@@ -0,0 +1,32 @@
1
+// Copyright 2013 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv6_test
6
+
7
+import (
8
+ "net"
9
+ "testing"
10
+)
11
+
12
+func connector(t *testing.T, network, addr string, done chan<- bool) {
13
+ defer func() { done <- true }()
14
+
15
+ c, err := net.Dial(network, addr)
16
+ if err != nil {
17
+ t.Error(err)
18
+ return
19
+ }
20
+ c.Close()
21
+}
22
+
23
+func acceptor(t *testing.T, ln net.Listener, done chan<- bool) {
24
+ defer func() { done <- true }()
25
+
26
+ c, err := ln.Accept()
27
+ if err != nil {
28
+ t.Error(err)
29
+ return
30
+ }
31
+ c.Close()
32
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/multicast_test.go
new
+263
@@ -0,0 +1,263 @@
1
+// Copyright 2013 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv6_test
6
+
7
+import (
8
+ "bytes"
9
+ "net"
10
+ "os"
11
+ "runtime"
12
+ "testing"
13
+ "time"
14
+
15
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
16
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/ipv6"
17
+ "golang.org/x/net/icmp"
18
+ "golang.org/x/net/internal/nettest"
19
+)
20
+
21
+var packetConnReadWriteMulticastUDPTests = []struct {
22
+ addr string
23
+ grp, src *net.UDPAddr
24
+}{
25
+ {"[ff02::]:0", &net.UDPAddr{IP: net.ParseIP("ff02::114")}, nil}, // see RFC 4727
26
+
27
+ {"[ff30::8000:0]:0", &net.UDPAddr{IP: net.ParseIP("ff30::8000:1")}, &net.UDPAddr{IP: net.IPv6loopback}}, // see RFC 5771
28
+}
29
+
30
+func TestPacketConnReadWriteMulticastUDP(t *testing.T) {
31
+ switch runtime.GOOS {
32
+ case "freebsd": // due to a bug on loopback marking
33
+ // See http://www.freebsd.org/cgi/query-pr.cgi?pr=180065.
34
+ t.Skipf("not supported on %s", runtime.GOOS)
35
+ case "nacl", "plan9", "solaris", "windows":
36
+ t.Skipf("not supported on %s", runtime.GOOS)
37
+ }
38
+ if !supportsIPv6 {
39
+ t.Skip("ipv6 is not supported")
40
+ }
41
+ ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
42
+ if ifi == nil {
43
+ t.Skipf("not available on %s", runtime.GOOS)
44
+ }
45
+
46
+ for _, tt := range packetConnReadWriteMulticastUDPTests {
47
+ c, err := net.ListenPacket("udp6", tt.addr)
48
+ if err != nil {
49
+ t.Fatal(err)
50
+ }
51
+ defer c.Close()
52
+
53
+ grp := *tt.grp
54
+ grp.Port = c.LocalAddr().(*net.UDPAddr).Port
55
+ p := ipv6.NewPacketConn(c)
56
+ defer p.Close()
57
+ if tt.src == nil {
58
+ if err := p.JoinGroup(ifi, &grp); err != nil {
59
+ t.Fatal(err)
60
+ }
61
+ defer p.LeaveGroup(ifi, &grp)
62
+ } else {
63
+ if err := p.JoinSourceSpecificGroup(ifi, &grp, tt.src); err != nil {
64
+ switch runtime.GOOS {
65
+ case "freebsd", "linux":
66
+ default: // platforms that don't support MLDv2 fail here
67
+ t.Logf("not supported on %s", runtime.GOOS)
68
+ continue
69
+ }
70
+ t.Fatal(err)
71
+ }
72
+ defer p.LeaveSourceSpecificGroup(ifi, &grp, tt.src)
73
+ }
74
+ if err := p.SetMulticastInterface(ifi); err != nil {
75
+ t.Fatal(err)
76
+ }
77
+ if _, err := p.MulticastInterface(); err != nil {
78
+ t.Fatal(err)
79
+ }
80
+ if err := p.SetMulticastLoopback(true); err != nil {
81
+ t.Fatal(err)
82
+ }
83
+ if _, err := p.MulticastLoopback(); err != nil {
84
+ t.Fatal(err)
85
+ }
86
+
87
+ cm := ipv6.ControlMessage{
88
+ TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced,
89
+ Src: net.IPv6loopback,
90
+ IfIndex: ifi.Index,
91
+ }
92
+ cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU
93
+ wb := []byte("HELLO-R-U-THERE")
94
+
95
+ for i, toggle := range []bool{true, false, true} {
96
+ if err := p.SetControlMessage(cf, toggle); err != nil {
97
+ if nettest.ProtocolNotSupported(err) {
98
+ t.Logf("not supported on %s", runtime.GOOS)
99
+ continue
100
+ }
101
+ t.Fatal(err)
102
+ }
103
+ if err := p.SetDeadline(time.Now().Add(200 * time.Millisecond)); err != nil {
104
+ t.Fatal(err)
105
+ }
106
+ cm.HopLimit = i + 1
107
+ if n, err := p.WriteTo(wb, &cm, &grp); err != nil {
108
+ t.Fatal(err)
109
+ } else if n != len(wb) {
110
+ t.Fatal(err)
111
+ }
112
+ rb := make([]byte, 128)
113
+ if n, cm, _, err := p.ReadFrom(rb); err != nil {
114
+ t.Fatal(err)
115
+ } else if !bytes.Equal(rb[:n], wb) {
116
+ t.Fatalf("got %v; want %v", rb[:n], wb)
117
+ } else {
118
+ t.Logf("rcvd cmsg: %v", cm)
119
+ }
120
+ }
121
+ }
122
+}
123
+
124
+var packetConnReadWriteMulticastICMPTests = []struct {
125
+ grp, src *net.IPAddr
126
+}{
127
+ {&net.IPAddr{IP: net.ParseIP("ff02::114")}, nil}, // see RFC 4727
128
+
129
+ {&net.IPAddr{IP: net.ParseIP("ff30::8000:1")}, &net.IPAddr{IP: net.IPv6loopback}}, // see RFC 5771
130
+}
131
+
132
+func TestPacketConnReadWriteMulticastICMP(t *testing.T) {
133
+ switch runtime.GOOS {
134
+ case "freebsd": // due to a bug on loopback marking
135
+ // See http://www.freebsd.org/cgi/query-pr.cgi?pr=180065.
136
+ t.Skipf("not supported on %s", runtime.GOOS)
137
+ case "nacl", "plan9", "solaris", "windows":
138
+ t.Skipf("not supported on %s", runtime.GOOS)
139
+ }
140
+ if !supportsIPv6 {
141
+ t.Skip("ipv6 is not supported")
142
+ }
143
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
144
+ t.Skip(m)
145
+ }
146
+ ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
147
+ if ifi == nil {
148
+ t.Skipf("not available on %s", runtime.GOOS)
149
+ }
150
+
151
+ for _, tt := range packetConnReadWriteMulticastICMPTests {
152
+ c, err := net.ListenPacket("ip6:ipv6-icmp", "::")
153
+ if err != nil {
154
+ t.Fatal(err)
155
+ }
156
+ defer c.Close()
157
+
158
+ pshicmp := icmp.IPv6PseudoHeader(c.LocalAddr().(*net.IPAddr).IP, tt.grp.IP)
159
+ p := ipv6.NewPacketConn(c)
160
+ defer p.Close()
161
+ if tt.src == nil {
162
+ if err := p.JoinGroup(ifi, tt.grp); err != nil {
163
+ t.Fatal(err)
164
+ }
165
+ defer p.LeaveGroup(ifi, tt.grp)
166
+ } else {
167
+ if err := p.JoinSourceSpecificGroup(ifi, tt.grp, tt.src); err != nil {
168
+ switch runtime.GOOS {
169
+ case "freebsd", "linux":
170
+ default: // platforms that don't support MLDv2 fail here
171
+ t.Logf("not supported on %s", runtime.GOOS)
172
+ continue
173
+ }
174
+ t.Fatal(err)
175
+ }
176
+ defer p.LeaveSourceSpecificGroup(ifi, tt.grp, tt.src)
177
+ }
178
+ if err := p.SetMulticastInterface(ifi); err != nil {
179
+ t.Fatal(err)
180
+ }
181
+ if _, err := p.MulticastInterface(); err != nil {
182
+ t.Fatal(err)
183
+ }
184
+ if err := p.SetMulticastLoopback(true); err != nil {
185
+ t.Fatal(err)
186
+ }
187
+ if _, err := p.MulticastLoopback(); err != nil {
188
+ t.Fatal(err)
189
+ }
190
+
191
+ cm := ipv6.ControlMessage{
192
+ TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced,
193
+ Src: net.IPv6loopback,
194
+ IfIndex: ifi.Index,
195
+ }
196
+ cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU
197
+
198
+ var f ipv6.ICMPFilter
199
+ f.SetAll(true)
200
+ f.Accept(ipv6.ICMPTypeEchoReply)
201
+ if err := p.SetICMPFilter(&f); err != nil {
202
+ t.Fatal(err)
203
+ }
204
+
205
+ var psh []byte
206
+ for i, toggle := range []bool{true, false, true} {
207
+ if toggle {
208
+ psh = nil
209
+ if err := p.SetChecksum(true, 2); err != nil {
210
+ t.Fatal(err)
211
+ }
212
+ } else {
213
+ psh = pshicmp
214
+ // Some platforms never allow to
215
+ // disable the kernel checksum
216
+ // processing.
217
+ p.SetChecksum(false, -1)
218
+ }
219
+ wb, err := (&icmp.Message{
220
+ Type: ipv6.ICMPTypeEchoRequest, Code: 0,
221
+ Body: &icmp.Echo{
222
+ ID: os.Getpid() & 0xffff, Seq: i + 1,
223
+ Data: []byte("HELLO-R-U-THERE"),
224
+ },
225
+ }).Marshal(psh)
226
+ if err != nil {
227
+ t.Fatal(err)
228
+ }
229
+ if err := p.SetControlMessage(cf, toggle); err != nil {
230
+ if nettest.ProtocolNotSupported(err) {
231
+ t.Logf("not supported on %s", runtime.GOOS)
232
+ continue
233
+ }
234
+ t.Fatal(err)
235
+ }
236
+ if err := p.SetDeadline(time.Now().Add(200 * time.Millisecond)); err != nil {
237
+ t.Fatal(err)
238
+ }
239
+ cm.HopLimit = i + 1
240
+ if n, err := p.WriteTo(wb, &cm, tt.grp); err != nil {
241
+ t.Fatal(err)
242
+ } else if n != len(wb) {
243
+ t.Fatalf("got %v; want %v", n, len(wb))
244
+ }
245
+ rb := make([]byte, 128)
246
+ if n, cm, _, err := p.ReadFrom(rb); err != nil {
247
+ switch runtime.GOOS {
248
+ case "darwin": // older darwin kernels have some limitation on receiving icmp packet through raw socket
249
+ t.Logf("not supported on %s", runtime.GOOS)
250
+ continue
251
+ }
252
+ t.Fatal(err)
253
+ } else {
254
+ t.Logf("rcvd cmsg: %v", cm)
255
+ if m, err := icmp.ParseMessage(iana.ProtocolIPv6ICMP, rb[:n]); err != nil {
256
+ t.Fatal(err)
257
+ } else if m.Type != ipv6.ICMPTypeEchoReply || m.Code != 0 {
258
+ t.Fatalf("got type=%v, code=%v; want type=%v, code=%v", m.Type, m.Code, ipv6.ICMPTypeEchoReply, 0)
259
+ }
260
+ }
261
+ }
262
+ }
263
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/multicastlistener_test.go
renamed
+45
-42
@@ -5,12 +5,13 @@
5
package ipv6_test
6
7
import (
8
- "code.google.com/p/go.net/ipv6"
8
"fmt"
9
"net"
11
- "os"
10
"runtime"
11
"testing"
12
+
13
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/ipv6"
14
+ "golang.org/x/net/internal/nettest"
15
)
16
17
var udpMultipleGroupListenerTests = []net.Addr{
@@ -21,8 +22,8 @@ var udpMultipleGroupListenerTests = []net.Addr{
22
23
func TestUDPSinglePacketConnWithMultipleGroupListeners(t *testing.T) {
24
switch runtime.GOOS {
24
- case "plan9", "solaris", "windows":
25
- t.Skipf("not supported on %q", runtime.GOOS)
25
+ case "nacl", "plan9", "solaris", "windows":
26
+ t.Skipf("not supported on %s", runtime.GOOS)
27
}
28
if !supportsIPv6 {
29
t.Skip("ipv6 is not supported")
@@ -31,7 +32,7 @@ func TestUDPSinglePacketConnWithMultipleGroupListeners(t *testing.T) {
32
for _, gaddr := range udpMultipleGroupListenerTests {
33
c, err := net.ListenPacket("udp6", "[::]:0") // wildcard address with non-reusable port
34
if err != nil {
34
- t.Fatalf("net.ListenPacket failed: %v", err)
35
+ t.Fatal(err)
36
}
37
defer c.Close()
38
@@ -40,20 +41,20 @@ func TestUDPSinglePacketConnWithMultipleGroupListeners(t *testing.T) {
41
42
ift, err := net.Interfaces()
43
if err != nil {
43
- t.Fatalf("net.Interfaces failed: %v", err)
44
+ t.Fatal(err)
45
}
46
for i, ifi := range ift {
46
- if _, ok := isMulticastAvailable(&ifi); !ok {
47
+ if _, ok := nettest.IsMulticastCapable("ip6", &ifi); !ok {
48
continue
49
}
50
if err := p.JoinGroup(&ifi, gaddr); err != nil {
50
- t.Fatalf("ipv6.PacketConn.JoinGroup %v on %v failed: %v", gaddr, ifi, err)
51
+ t.Fatal(err)
52
}
53
mift = append(mift, &ift[i])
54
}
55
for _, ifi := range mift {
56
if err := p.LeaveGroup(ifi, gaddr); err != nil {
56
- t.Fatalf("ipv6.PacketConn.LeaveGroup %v on %v failed: %v", gaddr, ifi, err)
57
+ t.Fatal(err)
58
}
59
}
60
}
@@ -61,8 +62,8 @@ func TestUDPSinglePacketConnWithMultipleGroupListeners(t *testing.T) {
62
63
func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) {
64
switch runtime.GOOS {
64
- case "plan9", "solaris", "windows":
65
- t.Skipf("not supported on %q", runtime.GOOS)
65
+ case "nacl", "plan9", "solaris", "windows":
66
+ t.Skipf("not supported on %s", runtime.GOOS)
67
}
68
if !supportsIPv6 {
69
t.Skip("ipv6 is not supported")
@@ -71,13 +72,13 @@ func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) {
72
for _, gaddr := range udpMultipleGroupListenerTests {
73
c1, err := net.ListenPacket("udp6", "[ff02::]:1024") // wildcard address with reusable port
74
if err != nil {
74
- t.Fatalf("net.ListenPacket failed: %v", err)
75
+ t.Fatal(err)
76
}
77
defer c1.Close()
78
79
c2, err := net.ListenPacket("udp6", "[ff02::]:1024") // wildcard address with reusable port
80
if err != nil {
80
- t.Fatalf("net.ListenPacket failed: %v", err)
81
+ t.Fatal(err)
82
}
83
defer c2.Close()
84
@@ -88,15 +89,15 @@ func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) {
89
90
ift, err := net.Interfaces()
91
if err != nil {
91
- t.Fatalf("net.Interfaces failed: %v", err)
92
+ t.Fatal(err)
93
}
94
for i, ifi := range ift {
94
- if _, ok := isMulticastAvailable(&ifi); !ok {
95
+ if _, ok := nettest.IsMulticastCapable("ip6", &ifi); !ok {
96
continue
97
}
98
for _, p := range ps {
99
if err := p.JoinGroup(&ifi, gaddr); err != nil {
99
- t.Fatalf("ipv6.PacketConn.JoinGroup %v on %v failed: %v", gaddr, ifi, err)
100
+ t.Fatal(err)
101
}
102
}
103
mift = append(mift, &ift[i])
@@ -104,7 +105,7 @@ func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) {
105
for _, ifi := range mift {
106
for _, p := range ps {
107
if err := p.LeaveGroup(ifi, gaddr); err != nil {
107
- t.Fatalf("ipv6.PacketConn.LeaveGroup %v on %v failed: %v", gaddr, ifi, err)
108
+ t.Fatal(err)
109
}
110
}
111
}
@@ -113,8 +114,8 @@ func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) {
114
115
func TestUDPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) {
116
switch runtime.GOOS {
116
- case "plan9", "solaris", "windows":
117
- t.Skipf("not supported on %q", runtime.GOOS)
117
+ case "nacl", "plan9", "solaris", "windows":
118
+ t.Skipf("not supported on %s", runtime.GOOS)
119
}
120
if !supportsIPv6 {
121
t.Skip("ipv6 is not supported")
@@ -129,46 +130,46 @@ func TestUDPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) {
130
131
ift, err := net.Interfaces()
132
if err != nil {
132
- t.Fatalf("net.Interfaces failed: %v", err)
133
+ t.Fatal(err)
134
}
135
for i, ifi := range ift {
135
- ip, ok := isMulticastAvailable(&ifi)
136
+ ip, ok := nettest.IsMulticastCapable("ip6", &ifi)
137
if !ok {
138
continue
139
}
140
c, err := net.ListenPacket("udp6", fmt.Sprintf("[%s%%%s]:1024", ip.String(), ifi.Name)) // unicast address with non-reusable port
141
if err != nil {
141
- t.Fatalf("net.ListenPacket with %v failed: %v", ip, err)
142
+ t.Fatal(err)
143
}
144
defer c.Close()
145
p := ipv6.NewPacketConn(c)
146
if err := p.JoinGroup(&ifi, &gaddr); err != nil {
146
- t.Fatalf("ipv6.PacketConn.JoinGroup on %v failed: %v", ifi, err)
147
+ t.Fatal(err)
148
}
149
mlt = append(mlt, &ml{p, &ift[i]})
150
}
151
for _, m := range mlt {
152
if err := m.c.LeaveGroup(m.ifi, &gaddr); err != nil {
152
- t.Fatalf("ipv6.PacketConn.LeaveGroup on %v failed: %v", m.ifi, err)
153
+ t.Fatal(err)
154
}
155
}
156
}
157
158
func TestIPSinglePacketConnWithSingleGroupListener(t *testing.T) {
159
switch runtime.GOOS {
159
- case "plan9", "solaris", "windows":
160
- t.Skipf("not supported on %q", runtime.GOOS)
160
+ case "nacl", "plan9", "solaris", "windows":
161
+ t.Skipf("not supported on %s", runtime.GOOS)
162
}
163
if !supportsIPv6 {
164
t.Skip("ipv6 is not supported")
165
}
165
- if os.Getuid() != 0 {
166
- t.Skip("must be root")
166
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
167
+ t.Skip(m)
168
}
169
170
c, err := net.ListenPacket("ip6:ipv6-icmp", "::") // wildcard address
171
if err != nil {
171
- t.Fatalf("net.ListenPacket failed: %v", err)
172
+ t.Fatal(err)
173
}
174
defer c.Close()
175
@@ -178,34 +179,36 @@ func TestIPSinglePacketConnWithSingleGroupListener(t *testing.T) {
179
180
ift, err := net.Interfaces()
181
if err != nil {
181
- t.Fatalf("net.Interfaces failed: %v", err)
182
+ t.Fatal(err)
183
}
184
for i, ifi := range ift {
184
- if _, ok := isMulticastAvailable(&ifi); !ok {
185
+ if _, ok := nettest.IsMulticastCapable("ip6", &ifi); !ok {
186
continue
187
}
188
if err := p.JoinGroup(&ifi, &gaddr); err != nil {
188
- t.Fatalf("ipv6.PacketConn.JoinGroup on %v failed: %v", ifi, err)
189
+ t.Fatal(err)
190
}
191
mift = append(mift, &ift[i])
192
}
193
for _, ifi := range mift {
194
if err := p.LeaveGroup(ifi, &gaddr); err != nil {
194
- t.Fatalf("ipv6.PacketConn.LeaveGroup on %v failed: %v", ifi, err)
195
+ t.Fatal(err)
196
}
197
}
198
}
199
200
func TestIPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) {
201
switch runtime.GOOS {
201
- case "darwin", "dragonfly", "plan9", "solaris", "windows":
202
- t.Skipf("not supported on %q", runtime.GOOS)
202
+ case "darwin", "dragonfly", "openbsd": // platforms that return fe80::1%lo0: bind: can't assign requested address
203
+ t.Skipf("not supported on %s", runtime.GOOS)
204
+ case "nacl", "plan9", "solaris", "windows":
205
+ t.Skipf("not supported on %s", runtime.GOOS)
206
}
207
if !supportsIPv6 {
208
t.Skip("ipv6 is not supported")
209
}
207
- if os.Getuid() != 0 {
208
- t.Skip("must be root")
210
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
211
+ t.Skip(m)
212
}
213
214
gaddr := net.IPAddr{IP: net.ParseIP("ff02::114")} // see RFC 4727
@@ -217,27 +220,27 @@ func TestIPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) {
220
221
ift, err := net.Interfaces()
222
if err != nil {
220
- t.Fatalf("net.Interfaces failed: %v", err)
223
+ t.Fatal(err)
224
}
225
for i, ifi := range ift {
223
- ip, ok := isMulticastAvailable(&ifi)
226
+ ip, ok := nettest.IsMulticastCapable("ip6", &ifi)
227
if !ok {
228
continue
229
}
230
c, err := net.ListenPacket("ip6:ipv6-icmp", fmt.Sprintf("%s%%%s", ip.String(), ifi.Name)) // unicast address
231
if err != nil {
229
- t.Fatalf("net.ListenPacket failed: %v", err)
232
+ t.Fatal(err)
233
}
234
defer c.Close()
235
p := ipv6.NewPacketConn(c)
236
if err := p.JoinGroup(&ifi, &gaddr); err != nil {
234
- t.Fatalf("ipv6.PacketConn.JoinGroup on %v failed: %v", ifi, err)
237
+ t.Fatal(err)
238
}
239
mlt = append(mlt, &ml{p, &ift[i]})
240
}
241
for _, m := range mlt {
242
if err := m.c.LeaveGroup(m.ifi, &gaddr); err != nil {
240
- t.Fatalf("ipv6.PacketConn.LeaveGroup on %v failed: %v", m.ifi, err)
243
+ t.Fatal(err)
244
}
245
}
246
}
Godeps/_workspace/src/golang.org/x/net/ipv6/multicastsockopt_test.go
new
+157
@@ -0,0 +1,157 @@
1
+// Copyright 2013 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv6_test
6
+
7
+import (
8
+ "net"
9
+ "runtime"
10
+ "testing"
11
+
12
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/ipv6"
13
+ "golang.org/x/net/internal/nettest"
14
+)
15
+
16
+var packetConnMulticastSocketOptionTests = []struct {
17
+ net, proto, addr string
18
+ grp, src net.Addr
19
+}{
20
+ {"udp6", "", "[ff02::]:0", &net.UDPAddr{IP: net.ParseIP("ff02::114")}, nil}, // see RFC 4727
21
+ {"ip6", ":ipv6-icmp", "::", &net.IPAddr{IP: net.ParseIP("ff02::115")}, nil}, // see RFC 4727
22
+
23
+ {"udp6", "", "[ff30::8000:0]:0", &net.UDPAddr{IP: net.ParseIP("ff30::8000:1")}, &net.UDPAddr{IP: net.IPv6loopback}}, // see RFC 5771
24
+ {"ip6", ":ipv6-icmp", "::", &net.IPAddr{IP: net.ParseIP("ff30::8000:2")}, &net.IPAddr{IP: net.IPv6loopback}}, // see RFC 5771
25
+}
26
+
27
+func TestPacketConnMulticastSocketOptions(t *testing.T) {
28
+ switch runtime.GOOS {
29
+ case "nacl", "plan9", "solaris", "windows":
30
+ t.Skipf("not supported on %s", runtime.GOOS)
31
+ }
32
+ if !supportsIPv6 {
33
+ t.Skip("ipv6 is not supported")
34
+ }
35
+ ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
36
+ if ifi == nil {
37
+ t.Skipf("not available on %s", runtime.GOOS)
38
+ }
39
+
40
+ m, ok := nettest.SupportsRawIPSocket()
41
+ for _, tt := range packetConnMulticastSocketOptionTests {
42
+ if tt.net == "ip6" && !ok {
43
+ t.Log(m)
44
+ continue
45
+ }
46
+ c, err := net.ListenPacket(tt.net+tt.proto, tt.addr)
47
+ if err != nil {
48
+ t.Fatal(err)
49
+ }
50
+ defer c.Close()
51
+ p := ipv6.NewPacketConn(c)
52
+ defer p.Close()
53
+
54
+ if tt.src == nil {
55
+ testMulticastSocketOptions(t, p, ifi, tt.grp)
56
+ } else {
57
+ testSourceSpecificMulticastSocketOptions(t, p, ifi, tt.grp, tt.src)
58
+ }
59
+ }
60
+}
61
+
62
+type testIPv6MulticastConn interface {
63
+ MulticastHopLimit() (int, error)
64
+ SetMulticastHopLimit(ttl int) error
65
+ MulticastLoopback() (bool, error)
66
+ SetMulticastLoopback(bool) error
67
+ JoinGroup(*net.Interface, net.Addr) error
68
+ LeaveGroup(*net.Interface, net.Addr) error
69
+ JoinSourceSpecificGroup(*net.Interface, net.Addr, net.Addr) error
70
+ LeaveSourceSpecificGroup(*net.Interface, net.Addr, net.Addr) error
71
+ ExcludeSourceSpecificGroup(*net.Interface, net.Addr, net.Addr) error
72
+ IncludeSourceSpecificGroup(*net.Interface, net.Addr, net.Addr) error
73
+}
74
+
75
+func testMulticastSocketOptions(t *testing.T, c testIPv6MulticastConn, ifi *net.Interface, grp net.Addr) {
76
+ const hoplim = 255
77
+ if err := c.SetMulticastHopLimit(hoplim); err != nil {
78
+ t.Error(err)
79
+ return
80
+ }
81
+ if v, err := c.MulticastHopLimit(); err != nil {
82
+ t.Error(err)
83
+ return
84
+ } else if v != hoplim {
85
+ t.Errorf("got %v; want %v", v, hoplim)
86
+ return
87
+ }
88
+
89
+ for _, toggle := range []bool{true, false} {
90
+ if err := c.SetMulticastLoopback(toggle); err != nil {
91
+ t.Error(err)
92
+ return
93
+ }
94
+ if v, err := c.MulticastLoopback(); err != nil {
95
+ t.Error(err)
96
+ return
97
+ } else if v != toggle {
98
+ t.Errorf("got %v; want %v", v, toggle)
99
+ return
100
+ }
101
+ }
102
+
103
+ if err := c.JoinGroup(ifi, grp); err != nil {
104
+ t.Error(err)
105
+ return
106
+ }
107
+ if err := c.LeaveGroup(ifi, grp); err != nil {
108
+ t.Error(err)
109
+ return
110
+ }
111
+}
112
+
113
+func testSourceSpecificMulticastSocketOptions(t *testing.T, c testIPv6MulticastConn, ifi *net.Interface, grp, src net.Addr) {
114
+ // MCAST_JOIN_GROUP -> MCAST_BLOCK_SOURCE -> MCAST_UNBLOCK_SOURCE -> MCAST_LEAVE_GROUP
115
+ if err := c.JoinGroup(ifi, grp); err != nil {
116
+ t.Error(err)
117
+ return
118
+ }
119
+ if err := c.ExcludeSourceSpecificGroup(ifi, grp, src); err != nil {
120
+ switch runtime.GOOS {
121
+ case "freebsd", "linux":
122
+ default: // platforms that don't support MLDv2 fail here
123
+ t.Logf("not supported on %s", runtime.GOOS)
124
+ return
125
+ }
126
+ t.Error(err)
127
+ return
128
+ }
129
+ if err := c.IncludeSourceSpecificGroup(ifi, grp, src); err != nil {
130
+ t.Error(err)
131
+ return
132
+ }
133
+ if err := c.LeaveGroup(ifi, grp); err != nil {
134
+ t.Error(err)
135
+ return
136
+ }
137
+
138
+ // MCAST_JOIN_SOURCE_GROUP -> MCAST_LEAVE_SOURCE_GROUP
139
+ if err := c.JoinSourceSpecificGroup(ifi, grp, src); err != nil {
140
+ t.Error(err)
141
+ return
142
+ }
143
+ if err := c.LeaveSourceSpecificGroup(ifi, grp, src); err != nil {
144
+ t.Error(err)
145
+ return
146
+ }
147
+
148
+ // MCAST_JOIN_SOURCE_GROUP -> MCAST_LEAVE_GROUP
149
+ if err := c.JoinSourceSpecificGroup(ifi, grp, src); err != nil {
150
+ t.Error(err)
151
+ return
152
+ }
153
+ if err := c.LeaveGroup(ifi, grp); err != nil {
154
+ t.Error(err)
155
+ return
156
+ }
157
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/payload.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv6/payload_cmsg.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv6/payload_nocmsg.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv6/readwrite_test.go
renamed
+41
-24
@@ -6,11 +6,14 @@ package ipv6_test
6
7
import (
8
"bytes"
9
- "code.google.com/p/go.net/ipv6"
9
"net"
10
"runtime"
11
"sync"
12
"testing"
13
+
14
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
15
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/ipv6"
16
+ "golang.org/x/net/internal/nettest"
17
)
18
19
func benchmarkUDPListener() (net.PacketConn, net.Addr, error) {
@@ -27,9 +30,13 @@ func benchmarkUDPListener() (net.PacketConn, net.Addr, error) {
30
}
31
32
func BenchmarkReadWriteNetUDP(b *testing.B) {
33
+ if !supportsIPv6 {
34
+ b.Skip("ipv6 is not supported")
35
+ }
36
+
37
c, dst, err := benchmarkUDPListener()
38
if err != nil {
32
- b.Fatalf("benchmarkUDPListener failed: %v", err)
39
+ b.Fatal(err)
40
}
41
defer c.Close()
42
@@ -42,26 +49,30 @@ func BenchmarkReadWriteNetUDP(b *testing.B) {
49
50
func benchmarkReadWriteNetUDP(b *testing.B, c net.PacketConn, wb, rb []byte, dst net.Addr) {
51
if _, err := c.WriteTo(wb, dst); err != nil {
45
- b.Fatalf("net.PacketConn.WriteTo failed: %v", err)
52
+ b.Fatal(err)
53
}
54
if _, _, err := c.ReadFrom(rb); err != nil {
48
- b.Fatalf("net.PacketConn.ReadFrom failed: %v", err)
55
+ b.Fatal(err)
56
}
57
}
58
59
func BenchmarkReadWriteIPv6UDP(b *testing.B) {
60
+ if !supportsIPv6 {
61
+ b.Skip("ipv6 is not supported")
62
+ }
63
+
64
c, dst, err := benchmarkUDPListener()
65
if err != nil {
55
- b.Fatalf("benchmarkUDPListener failed: %v", err)
66
+ b.Fatal(err)
67
}
68
defer c.Close()
69
70
p := ipv6.NewPacketConn(c)
60
- cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagInterface | ipv6.FlagPathMTU
71
+ cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU
72
if err := p.SetControlMessage(cf, true); err != nil {
62
- b.Fatalf("ipv6.PacketConn.SetControlMessage failed: %v", err)
73
+ b.Fatal(err)
74
}
64
- ifi := loopbackInterface()
75
+ ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagLoopback)
76
77
wb, rb := []byte("HELLO-R-U-THERE"), make([]byte, 128)
78
b.ResetTimer()
@@ -72,26 +83,26 @@ func BenchmarkReadWriteIPv6UDP(b *testing.B) {
83
84
func benchmarkReadWriteIPv6UDP(b *testing.B, p *ipv6.PacketConn, wb, rb []byte, dst net.Addr, ifi *net.Interface) {
85
cm := ipv6.ControlMessage{
75
- TrafficClass: DiffServAF11 | CongestionExperienced,
86
+ TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced,
87
HopLimit: 1,
88
}
89
if ifi != nil {
90
cm.IfIndex = ifi.Index
91
}
92
if n, err := p.WriteTo(wb, &cm, dst); err != nil {
82
- b.Fatalf("ipv6.PacketConn.WriteTo failed: %v", err)
93
+ b.Fatal(err)
94
} else if n != len(wb) {
84
- b.Fatalf("ipv6.PacketConn.WriteTo failed: short write: %v", n)
95
+ b.Fatalf("got %v; want %v", n, len(wb))
96
}
97
if _, _, _, err := p.ReadFrom(rb); err != nil {
87
- b.Fatalf("ipv6.PacketConn.ReadFrom failed: %v", err)
98
+ b.Fatal(err)
99
}
100
}
101
102
func TestPacketConnConcurrentReadWriteUnicastUDP(t *testing.T) {
103
switch runtime.GOOS {
93
- case "plan9", "solaris", "windows":
94
- t.Skipf("not supported on %q", runtime.GOOS)
104
+ case "nacl", "plan9", "solaris", "windows":
105
+ t.Skipf("not supported on %s", runtime.GOOS)
106
}
107
if !supportsIPv6 {
108
t.Skip("ipv6 is not supported")
@@ -99,7 +110,7 @@ func TestPacketConnConcurrentReadWriteUnicastUDP(t *testing.T) {
110
111
c, err := net.ListenPacket("udp6", "[::1]:0")
112
if err != nil {
102
- t.Fatalf("net.ListenPacket failed: %v", err)
113
+ t.Fatal(err)
114
}
115
defer c.Close()
116
p := ipv6.NewPacketConn(c)
@@ -107,22 +118,29 @@ func TestPacketConnConcurrentReadWriteUnicastUDP(t *testing.T) {
118
119
dst, err := net.ResolveUDPAddr("udp6", c.LocalAddr().String())
120
if err != nil {
110
- t.Fatalf("net.ResolveUDPAddr failed: %v", err)
121
+ t.Fatal(err)
122
}
123
113
- ifi := loopbackInterface()
124
+ ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagLoopback)
125
cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU
126
wb := []byte("HELLO-R-U-THERE")
127
128
+ if err := p.SetControlMessage(cf, true); err != nil { // probe before test
129
+ if nettest.ProtocolNotSupported(err) {
130
+ t.Skipf("not supported on %s", runtime.GOOS)
131
+ }
132
+ t.Fatal(err)
133
+ }
134
+
135
var wg sync.WaitGroup
136
reader := func() {
137
defer wg.Done()
138
rb := make([]byte, 128)
139
if n, cm, _, err := p.ReadFrom(rb); err != nil {
122
- t.Errorf("ipv6.PacketConn.ReadFrom failed: %v", err)
140
+ t.Error(err)
141
return
142
} else if !bytes.Equal(rb[:n], wb) {
125
- t.Errorf("got %v; expected %v", rb[:n], wb)
143
+ t.Errorf("got %v; want %v", rb[:n], wb)
144
return
145
} else {
146
t.Logf("rcvd cmsg: %v", cm)
@@ -131,22 +149,21 @@ func TestPacketConnConcurrentReadWriteUnicastUDP(t *testing.T) {
149
writer := func(toggle bool) {
150
defer wg.Done()
151
cm := ipv6.ControlMessage{
134
- TrafficClass: DiffServAF11 | CongestionExperienced,
152
+ TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced,
153
Src: net.IPv6loopback,
136
- Dst: net.IPv6loopback,
154
}
155
if ifi != nil {
156
cm.IfIndex = ifi.Index
157
}
158
if err := p.SetControlMessage(cf, toggle); err != nil {
142
- t.Errorf("ipv6.PacketConn.SetControlMessage failed: %v", err)
159
+ t.Error(err)
160
return
161
}
162
if n, err := p.WriteTo(wb, &cm, dst); err != nil {
146
- t.Errorf("ipv6.PacketConn.WriteTo failed: %v", err)
163
+ t.Error(err)
164
return
165
} else if n != len(wb) {
149
- t.Errorf("ipv6.PacketConn.WriteTo failed: short write: %v", n)
166
+ t.Errorf("got %v; want %v", n, len(wb))
167
return
168
}
169
}
Godeps/_workspace/src/golang.org/x/net/ipv6/sockopt.go
renamed
+6
@@ -20,6 +20,10 @@ const (
20
ssoICMPFilter // icmp filter, RFC 2292 or 3542
21
ssoJoinGroup // any-source multicast, RFC 3493
22
ssoLeaveGroup // any-source multicast, RFC 3493
23
+ ssoJoinSourceGroup // source-specific multicast
24
+ ssoLeaveSourceGroup // source-specific multicast
25
+ ssoBlockSourceGroup // any-source or source-specific multicast
26
+ ssoUnblockSourceGroup // any-source or source-specific multicast
27
ssoMax
28
)
29
@@ -30,6 +34,8 @@ const (
34
ssoTypeICMPFilter
35
ssoTypeMTUInfo
36
ssoTypeIPMreq
37
+ ssoTypeGroupReq
38
+ ssoTypeGroupSourceReq
39
)
40
41
// A sockOpt represents a binding for sticky socket option.
Godeps/_workspace/src/golang.org/x/net/ipv6/sockopt_asmreq_unix.go
new
+22
@@ -0,0 +1,22 @@
1
+// Copyright 2013 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+// +build darwin dragonfly freebsd linux netbsd openbsd
6
+
7
+package ipv6
8
+
9
+import (
10
+ "net"
11
+ "os"
12
+ "unsafe"
13
+)
14
+
15
+func setsockoptIPMreq(fd int, opt *sockOpt, ifi *net.Interface, grp net.IP) error {
16
+ var mreq sysIPv6Mreq
17
+ copy(mreq.Multiaddr[:], grp)
18
+ if ifi != nil {
19
+ mreq.setIfindex(ifi.Index)
20
+ }
21
+ return os.NewSyscallError("setsockopt", setsockopt(fd, opt.level, opt.name, unsafe.Pointer(&mreq), sysSizeofIPv6Mreq))
22
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/sockopt_asmreq_windows.go
new
+21
@@ -0,0 +1,21 @@
1
+// Copyright 2013 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv6
6
+
7
+import (
8
+ "net"
9
+ "os"
10
+ "syscall"
11
+ "unsafe"
12
+)
13
+
14
+func setsockoptIPMreq(fd syscall.Handle, opt *sockOpt, ifi *net.Interface, grp net.IP) error {
15
+ var mreq sysIPv6Mreq
16
+ copy(mreq.Multiaddr[:], grp)
17
+ if ifi != nil {
18
+ mreq.setIfindex(ifi.Index)
19
+ }
20
+ return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, int32(opt.level), int32(opt.name), (*byte)(unsafe.Pointer(&mreq)), sysSizeofIPv6Mreq))
21
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/sockopt_ssmreq_stub.go
new
+17
@@ -0,0 +1,17 @@
1
+// Copyright 2014 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+// +build !darwin,!freebsd,!linux
6
+
7
+package ipv6
8
+
9
+import "net"
10
+
11
+func setsockoptGroupReq(fd int, opt *sockOpt, ifi *net.Interface, grp net.IP) error {
12
+ return errOpNoSupport
13
+}
14
+
15
+func setsockoptGroupSourceReq(fd int, opt *sockOpt, ifi *net.Interface, grp, src net.IP) error {
16
+ return errOpNoSupport
17
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/sockopt_ssmreq_unix.go
new
+31
@@ -0,0 +1,31 @@
1
+// Copyright 2014 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+// +build darwin freebsd linux
6
+
7
+package ipv6
8
+
9
+import (
10
+ "net"
11
+ "os"
12
+ "unsafe"
13
+)
14
+
15
+func setsockoptGroupReq(fd int, opt *sockOpt, ifi *net.Interface, grp net.IP) error {
16
+ var gr sysGroupReq
17
+ if ifi != nil {
18
+ gr.Interface = uint32(ifi.Index)
19
+ }
20
+ gr.setGroup(grp)
21
+ return os.NewSyscallError("setsockopt", setsockopt(fd, opt.level, opt.name, unsafe.Pointer(&gr), sysSizeofGroupReq))
22
+}
23
+
24
+func setsockoptGroupSourceReq(fd int, opt *sockOpt, ifi *net.Interface, grp, src net.IP) error {
25
+ var gsr sysGroupSourceReq
26
+ if ifi != nil {
27
+ gsr.Interface = uint32(ifi.Index)
28
+ }
29
+ gsr.setSourceGroup(grp, src)
30
+ return os.NewSyscallError("setsockopt", setsockopt(fd, opt.level, opt.name, unsafe.Pointer(&gsr), sysSizeofGroupSourceReq))
31
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/sockopt_stub.go
renamed
+4
-3
@@ -6,7 +6,8 @@
6
7
package ipv6
8
9
-func ipv6PathMTU(fd int) (int, error) {
10
- // TODO(mikio): Implement this
11
- return 0, errOpNoSupport
9
+import "net"
10
+
11
+func getMTUInfo(fd int, opt *sockOpt) (*net.Interface, int, error) {
12
+ return nil, 0, errOpNoSupport
13
}
Godeps/_workspace/src/golang.org/x/net/ipv6/sockopt_test.go
renamed
+33
-36
@@ -5,35 +5,22 @@
5
package ipv6_test
6
7
import (
8
- "code.google.com/p/go.net/ipv6"
8
+ "fmt"
9
"net"
10
- "os"
10
"runtime"
11
"testing"
12
+
13
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
14
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/ipv6"
15
+ "golang.org/x/net/internal/nettest"
16
)
17
15
-var supportsIPv6 bool
16
-
17
-func init() {
18
- if ln, err := net.Listen("tcp6", "[::1]:0"); err == nil {
19
- ln.Close()
20
- supportsIPv6 = true
21
- }
22
-}
23
-
24
-var condFatalf = func() func(*testing.T, string, ...interface{}) {
25
- // A few APIs are not implemented yet on some platforms.
26
- switch runtime.GOOS {
27
- case "darwin", "plan9", "solaris", "windows":
28
- return (*testing.T).Logf
29
- }
30
- return (*testing.T).Fatalf
31
-}()
18
+var supportsIPv6 bool = nettest.SupportsIPv6()
19
20
func TestConnInitiatorPathMTU(t *testing.T) {
21
switch runtime.GOOS {
35
- case "plan9", "solaris", "windows":
36
- t.Skipf("not supported on %q", runtime.GOOS)
22
+ case "nacl", "plan9", "solaris", "windows":
23
+ t.Skipf("not supported on %s", runtime.GOOS)
24
}
25
if !supportsIPv6 {
26
t.Skip("ipv6 is not supported")
@@ -41,7 +28,7 @@ func TestConnInitiatorPathMTU(t *testing.T) {
28
29
ln, err := net.Listen("tcp6", "[::1]:0")
30
if err != nil {
44
- t.Fatalf("net.Listen failed: %v", err)
31
+ t.Fatal(err)
32
}
33
defer ln.Close()
34
@@ -50,12 +37,17 @@ func TestConnInitiatorPathMTU(t *testing.T) {
37
38
c, err := net.Dial("tcp6", ln.Addr().String())
39
if err != nil {
53
- t.Fatalf("net.Dial failed: %v", err)
40
+ t.Fatal(err)
41
}
42
defer c.Close()
43
44
if pmtu, err := ipv6.NewConn(c).PathMTU(); err != nil {
58
- condFatalf(t, "ipv6.Conn.PathMTU failed: %v", err)
45
+ switch runtime.GOOS {
46
+ case "darwin": // older darwin kernels don't support IPV6_PATHMTU option
47
+ t.Logf("not supported on %s", runtime.GOOS)
48
+ default:
49
+ t.Fatal(err)
50
+ }
51
} else {
52
t.Logf("path mtu for %v: %v", c.RemoteAddr(), pmtu)
53
}
@@ -65,8 +57,8 @@ func TestConnInitiatorPathMTU(t *testing.T) {
57
58
func TestConnResponderPathMTU(t *testing.T) {
59
switch runtime.GOOS {
68
- case "plan9", "solaris", "windows":
69
- t.Skipf("not supported on %q", runtime.GOOS)
60
+ case "nacl", "plan9", "solaris", "windows":
61
+ t.Skipf("not supported on %s", runtime.GOOS)
62
}
63
if !supportsIPv6 {
64
t.Skip("ipv6 is not supported")
@@ -74,7 +66,7 @@ func TestConnResponderPathMTU(t *testing.T) {
66
67
ln, err := net.Listen("tcp6", "[::1]:0")
68
if err != nil {
77
- t.Fatalf("net.Listen failed: %v", err)
69
+ t.Fatal(err)
70
}
71
defer ln.Close()
72
@@ -83,12 +75,17 @@ func TestConnResponderPathMTU(t *testing.T) {
75
76
c, err := ln.Accept()
77
if err != nil {
86
- t.Fatalf("net.Accept failed: %v", err)
78
+ t.Fatal(err)
79
}
80
defer c.Close()
81
82
if pmtu, err := ipv6.NewConn(c).PathMTU(); err != nil {
91
- condFatalf(t, "ipv6.Conn.PathMTU failed: %v", err)
83
+ switch runtime.GOOS {
84
+ case "darwin": // older darwin kernels don't support IPV6_PATHMTU option
85
+ t.Logf("not supported on %s", runtime.GOOS)
86
+ default:
87
+ t.Fatal(err)
88
+ }
89
} else {
90
t.Logf("path mtu for %v: %v", c.RemoteAddr(), pmtu)
91
}
@@ -98,19 +95,19 @@ func TestConnResponderPathMTU(t *testing.T) {
95
96
func TestPacketConnChecksum(t *testing.T) {
97
switch runtime.GOOS {
101
- case "plan9", "solaris", "windows":
102
- t.Skipf("not supported on %q", runtime.GOOS)
98
+ case "nacl", "plan9", "solaris", "windows":
99
+ t.Skipf("not supported on %s", runtime.GOOS)
100
}
101
if !supportsIPv6 {
102
t.Skip("ipv6 is not supported")
103
}
107
- if os.Getuid() != 0 {
108
- t.Skip("must be root")
104
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
105
+ t.Skip(m)
106
}
107
111
- c, err := net.ListenPacket("ip6:89", "::") // OSPF for IPv6
108
+ c, err := net.ListenPacket(fmt.Sprintf("ip6:%d", iana.ProtocolOSPFIGP), "::") // OSPF for IPv6
109
if err != nil {
113
- t.Fatalf("net.ListenPacket failed: %v", err)
110
+ t.Fatal(err)
111
}
112
defer c.Close()
113
@@ -128,7 +125,7 @@ func TestPacketConnChecksum(t *testing.T) {
125
}
126
}
127
if on, offset, err := p.Checksum(); err != nil {
131
- t.Fatalf("ipv6.PacketConn.Checksum failed: %v", err)
128
+ t.Fatal(err)
129
} else {
130
t.Logf("kernel checksum processing enabled=%v, offset=%v", on, offset)
131
}
Godeps/_workspace/src/golang.org/x/net/ipv6/sockopt_unix.go
new
+122
@@ -0,0 +1,122 @@
1
+// Copyright 2013 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+// +build darwin dragonfly freebsd linux netbsd openbsd
6
+
7
+package ipv6
8
+
9
+import (
10
+ "net"
11
+ "os"
12
+ "unsafe"
13
+)
14
+
15
+func getInt(fd int, opt *sockOpt) (int, error) {
16
+ if opt.name < 1 || opt.typ != ssoTypeInt {
17
+ return 0, errOpNoSupport
18
+ }
19
+ var i int32
20
+ l := sysSockoptLen(4)
21
+ if err := getsockopt(fd, opt.level, opt.name, unsafe.Pointer(&i), &l); err != nil {
22
+ return 0, os.NewSyscallError("getsockopt", err)
23
+ }
24
+ return int(i), nil
25
+}
26
+
27
+func setInt(fd int, opt *sockOpt, v int) error {
28
+ if opt.name < 1 || opt.typ != ssoTypeInt {
29
+ return errOpNoSupport
30
+ }
31
+ i := int32(v)
32
+ return os.NewSyscallError("setsockopt", setsockopt(fd, opt.level, opt.name, unsafe.Pointer(&i), sysSockoptLen(4)))
33
+}
34
+
35
+func getInterface(fd int, opt *sockOpt) (*net.Interface, error) {
36
+ if opt.name < 1 || opt.typ != ssoTypeInterface {
37
+ return nil, errOpNoSupport
38
+ }
39
+ var i int32
40
+ l := sysSockoptLen(4)
41
+ if err := getsockopt(fd, opt.level, opt.name, unsafe.Pointer(&i), &l); err != nil {
42
+ return nil, os.NewSyscallError("getsockopt", err)
43
+ }
44
+ if i == 0 {
45
+ return nil, nil
46
+ }
47
+ ifi, err := net.InterfaceByIndex(int(i))
48
+ if err != nil {
49
+ return nil, err
50
+ }
51
+ return ifi, nil
52
+}
53
+
54
+func setInterface(fd int, opt *sockOpt, ifi *net.Interface) error {
55
+ if opt.name < 1 || opt.typ != ssoTypeInterface {
56
+ return errOpNoSupport
57
+ }
58
+ var i int32
59
+ if ifi != nil {
60
+ i = int32(ifi.Index)
61
+ }
62
+ return os.NewSyscallError("setsockopt", setsockopt(fd, opt.level, opt.name, unsafe.Pointer(&i), sysSockoptLen(4)))
63
+}
64
+
65
+func getICMPFilter(fd int, opt *sockOpt) (*ICMPFilter, error) {
66
+ if opt.name < 1 || opt.typ != ssoTypeICMPFilter {
67
+ return nil, errOpNoSupport
68
+ }
69
+ var f ICMPFilter
70
+ l := sysSockoptLen(sysSizeofICMPv6Filter)
71
+ if err := getsockopt(fd, opt.level, opt.name, unsafe.Pointer(&f.sysICMPv6Filter), &l); err != nil {
72
+ return nil, os.NewSyscallError("getsockopt", err)
73
+ }
74
+ return &f, nil
75
+}
76
+
77
+func setICMPFilter(fd int, opt *sockOpt, f *ICMPFilter) error {
78
+ if opt.name < 1 || opt.typ != ssoTypeICMPFilter {
79
+ return errOpNoSupport
80
+ }
81
+ return os.NewSyscallError("setsockopt", setsockopt(fd, opt.level, opt.name, unsafe.Pointer(&f.sysICMPv6Filter), sysSizeofICMPv6Filter))
82
+}
83
+
84
+func getMTUInfo(fd int, opt *sockOpt) (*net.Interface, int, error) {
85
+ if opt.name < 1 || opt.typ != ssoTypeMTUInfo {
86
+ return nil, 0, errOpNoSupport
87
+ }
88
+ var mi sysIPv6Mtuinfo
89
+ l := sysSockoptLen(sysSizeofIPv6Mtuinfo)
90
+ if err := getsockopt(fd, opt.level, opt.name, unsafe.Pointer(&mi), &l); err != nil {
91
+ return nil, 0, os.NewSyscallError("getsockopt", err)
92
+ }
93
+ if mi.Addr.Scope_id == 0 {
94
+ return nil, int(mi.Mtu), nil
95
+ }
96
+ ifi, err := net.InterfaceByIndex(int(mi.Addr.Scope_id))
97
+ if err != nil {
98
+ return nil, 0, err
99
+ }
100
+ return ifi, int(mi.Mtu), nil
101
+}
102
+
103
+func setGroup(fd int, opt *sockOpt, ifi *net.Interface, grp net.IP) error {
104
+ if opt.name < 1 {
105
+ return errOpNoSupport
106
+ }
107
+ switch opt.typ {
108
+ case ssoTypeIPMreq:
109
+ return setsockoptIPMreq(fd, opt, ifi, grp)
110
+ case ssoTypeGroupReq:
111
+ return setsockoptGroupReq(fd, opt, ifi, grp)
112
+ default:
113
+ return errOpNoSupport
114
+ }
115
+}
116
+
117
+func setSourceGroup(fd int, opt *sockOpt, ifi *net.Interface, grp, src net.IP) error {
118
+ if opt.name < 1 || opt.typ != ssoTypeGroupSourceReq {
119
+ return errOpNoSupport
120
+ }
121
+ return setsockoptGroupSourceReq(fd, opt, ifi, grp, src)
122
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/sockopt_windows.go
new
+86
@@ -0,0 +1,86 @@
1
+// Copyright 2013 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv6
6
+
7
+import (
8
+ "net"
9
+ "os"
10
+ "syscall"
11
+ "unsafe"
12
+)
13
+
14
+func getInt(fd syscall.Handle, opt *sockOpt) (int, error) {
15
+ if opt.name < 1 || opt.typ != ssoTypeInt {
16
+ return 0, errOpNoSupport
17
+ }
18
+ var i int32
19
+ l := int32(4)
20
+ if err := syscall.Getsockopt(fd, int32(opt.level), int32(opt.name), (*byte)(unsafe.Pointer(&i)), &l); err != nil {
21
+ return 0, os.NewSyscallError("getsockopt", err)
22
+ }
23
+ return int(i), nil
24
+}
25
+
26
+func setInt(fd syscall.Handle, opt *sockOpt, v int) error {
27
+ if opt.name < 1 || opt.typ != ssoTypeInt {
28
+ return errOpNoSupport
29
+ }
30
+ i := int32(v)
31
+ return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, int32(opt.level), int32(opt.name), (*byte)(unsafe.Pointer(&i)), 4))
32
+}
33
+
34
+func getInterface(fd syscall.Handle, opt *sockOpt) (*net.Interface, error) {
35
+ if opt.name < 1 || opt.typ != ssoTypeInterface {
36
+ return nil, errOpNoSupport
37
+ }
38
+ var i int32
39
+ l := int32(4)
40
+ if err := syscall.Getsockopt(fd, int32(opt.level), int32(opt.name), (*byte)(unsafe.Pointer(&i)), &l); err != nil {
41
+ return nil, os.NewSyscallError("getsockopt", err)
42
+ }
43
+ if i == 0 {
44
+ return nil, nil
45
+ }
46
+ ifi, err := net.InterfaceByIndex(int(i))
47
+ if err != nil {
48
+ return nil, err
49
+ }
50
+ return ifi, nil
51
+}
52
+
53
+func setInterface(fd syscall.Handle, opt *sockOpt, ifi *net.Interface) error {
54
+ if opt.name < 1 || opt.typ != ssoTypeInterface {
55
+ return errOpNoSupport
56
+ }
57
+ var i int32
58
+ if ifi != nil {
59
+ i = int32(ifi.Index)
60
+ }
61
+ return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, int32(opt.level), int32(opt.name), (*byte)(unsafe.Pointer(&i)), 4))
62
+}
63
+
64
+func getICMPFilter(fd syscall.Handle, opt *sockOpt) (*ICMPFilter, error) {
65
+ return nil, errOpNoSupport
66
+}
67
+
68
+func setICMPFilter(fd syscall.Handle, opt *sockOpt, f *ICMPFilter) error {
69
+ return errOpNoSupport
70
+}
71
+
72
+func getMTUInfo(fd syscall.Handle, opt *sockOpt) (*net.Interface, int, error) {
73
+ return nil, 0, errOpNoSupport
74
+}
75
+
76
+func setGroup(fd syscall.Handle, opt *sockOpt, ifi *net.Interface, grp net.IP) error {
77
+ if opt.name < 1 || opt.typ != ssoTypeIPMreq {
78
+ return errOpNoSupport
79
+ }
80
+ return setsockoptIPMreq(fd, opt, ifi, grp)
81
+}
82
+
83
+func setSourceGroup(fd syscall.Handle, opt *sockOpt, ifi *net.Interface, grp, src net.IP) error {
84
+ // TODO(mikio): implement this
85
+ return errOpNoSupport
86
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/sys_bsd.go
new
+58
@@ -0,0 +1,58 @@
1
+// Copyright 2013 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+// +build dragonfly netbsd openbsd
6
+
7
+package ipv6
8
+
9
+import (
10
+ "net"
11
+ "syscall"
12
+
13
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
14
+)
15
+
16
+type sysSockoptLen int32
17
+
18
+var (
19
+ ctlOpts = [ctlMax]ctlOpt{
20
+ ctlTrafficClass: {sysIPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass},
21
+ ctlHopLimit: {sysIPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit},
22
+ ctlPacketInfo: {sysIPV6_PKTINFO, sysSizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo},
23
+ ctlNextHop: {sysIPV6_NEXTHOP, sysSizeofSockaddrInet6, marshalNextHop, parseNextHop},
24
+ ctlPathMTU: {sysIPV6_PATHMTU, sysSizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU},
25
+ }
26
+
27
+ sockOpts = [ssoMax]sockOpt{
28
+ ssoTrafficClass: {iana.ProtocolIPv6, sysIPV6_TCLASS, ssoTypeInt},
29
+ ssoHopLimit: {iana.ProtocolIPv6, sysIPV6_UNICAST_HOPS, ssoTypeInt},
30
+ ssoMulticastInterface: {iana.ProtocolIPv6, sysIPV6_MULTICAST_IF, ssoTypeInterface},
31
+ ssoMulticastHopLimit: {iana.ProtocolIPv6, sysIPV6_MULTICAST_HOPS, ssoTypeInt},
32
+ ssoMulticastLoopback: {iana.ProtocolIPv6, sysIPV6_MULTICAST_LOOP, ssoTypeInt},
33
+ ssoReceiveTrafficClass: {iana.ProtocolIPv6, sysIPV6_RECVTCLASS, ssoTypeInt},
34
+ ssoReceiveHopLimit: {iana.ProtocolIPv6, sysIPV6_RECVHOPLIMIT, ssoTypeInt},
35
+ ssoReceivePacketInfo: {iana.ProtocolIPv6, sysIPV6_RECVPKTINFO, ssoTypeInt},
36
+ ssoReceivePathMTU: {iana.ProtocolIPv6, sysIPV6_RECVPATHMTU, ssoTypeInt},
37
+ ssoPathMTU: {iana.ProtocolIPv6, sysIPV6_PATHMTU, ssoTypeMTUInfo},
38
+ ssoChecksum: {iana.ProtocolIPv6, sysIPV6_CHECKSUM, ssoTypeInt},
39
+ ssoICMPFilter: {iana.ProtocolIPv6ICMP, sysICMP6_FILTER, ssoTypeICMPFilter},
40
+ ssoJoinGroup: {iana.ProtocolIPv6, sysIPV6_JOIN_GROUP, ssoTypeIPMreq},
41
+ ssoLeaveGroup: {iana.ProtocolIPv6, sysIPV6_LEAVE_GROUP, ssoTypeIPMreq},
42
+ }
43
+)
44
+
45
+func (sa *sysSockaddrInet6) setSockaddr(ip net.IP, i int) {
46
+ sa.Len = sysSizeofSockaddrInet6
47
+ sa.Family = syscall.AF_INET6
48
+ copy(sa.Addr[:], ip)
49
+ sa.Scope_id = uint32(i)
50
+}
51
+
52
+func (pi *sysInet6Pktinfo) setIfindex(i int) {
53
+ pi.Ifindex = uint32(i)
54
+}
55
+
56
+func (mreq *sysIPv6Mreq) setIfindex(i int) {
57
+ mreq.Interface = uint32(i)
58
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/sys_darwin.go
new
+135
@@ -0,0 +1,135 @@
1
+// Copyright 2013 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv6
6
+
7
+import (
8
+ "net"
9
+ "syscall"
10
+ "unsafe"
11
+
12
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
13
+)
14
+
15
+type sysSockoptLen int32
16
+
17
+var (
18
+ ctlOpts = [ctlMax]ctlOpt{
19
+ ctlHopLimit: {sysIPV6_2292HOPLIMIT, 4, marshal2292HopLimit, parseHopLimit},
20
+ ctlPacketInfo: {sysIPV6_2292PKTINFO, sysSizeofInet6Pktinfo, marshal2292PacketInfo, parsePacketInfo},
21
+ }
22
+
23
+ sockOpts = [ssoMax]sockOpt{
24
+ ssoHopLimit: {iana.ProtocolIPv6, sysIPV6_UNICAST_HOPS, ssoTypeInt},
25
+ ssoMulticastInterface: {iana.ProtocolIPv6, sysIPV6_MULTICAST_IF, ssoTypeInterface},
26
+ ssoMulticastHopLimit: {iana.ProtocolIPv6, sysIPV6_MULTICAST_HOPS, ssoTypeInt},
27
+ ssoMulticastLoopback: {iana.ProtocolIPv6, sysIPV6_MULTICAST_LOOP, ssoTypeInt},
28
+ ssoReceiveHopLimit: {iana.ProtocolIPv6, sysIPV6_2292HOPLIMIT, ssoTypeInt},
29
+ ssoReceivePacketInfo: {iana.ProtocolIPv6, sysIPV6_2292PKTINFO, ssoTypeInt},
30
+ ssoChecksum: {iana.ProtocolIPv6, sysIPV6_CHECKSUM, ssoTypeInt},
31
+ ssoICMPFilter: {iana.ProtocolIPv6ICMP, sysICMP6_FILTER, ssoTypeICMPFilter},
32
+ ssoJoinGroup: {iana.ProtocolIPv6, sysIPV6_JOIN_GROUP, ssoTypeIPMreq},
33
+ ssoLeaveGroup: {iana.ProtocolIPv6, sysIPV6_LEAVE_GROUP, ssoTypeIPMreq},
34
+ }
35
+)
36
+
37
+func init() {
38
+ // Seems like kern.osreldate is veiled on latest OS X. We use
39
+ // kern.osrelease instead.
40
+ osver, err := syscall.Sysctl("kern.osrelease")
41
+ if err != nil {
42
+ return
43
+ }
44
+ var i int
45
+ for i = range osver {
46
+ if osver[i] == '.' {
47
+ break
48
+ }
49
+ }
50
+ // The IP_PKTINFO and protocol-independent multicast API were
51
+ // introduced in OS X 10.7 (Darwin 11.0.0). But it looks like
52
+ // those features require OS X 10.8 (Darwin 12.0.0) and above.
53
+ // See http://support.apple.com/kb/HT1633.
54
+ if i > 2 || i == 2 && osver[0] >= '1' && osver[1] >= '2' {
55
+ ctlOpts[ctlTrafficClass].name = sysIPV6_TCLASS
56
+ ctlOpts[ctlTrafficClass].length = 4
57
+ ctlOpts[ctlTrafficClass].marshal = marshalTrafficClass
58
+ ctlOpts[ctlTrafficClass].parse = parseTrafficClass
59
+ ctlOpts[ctlHopLimit].name = sysIPV6_HOPLIMIT
60
+ ctlOpts[ctlHopLimit].marshal = marshalHopLimit
61
+ ctlOpts[ctlPacketInfo].name = sysIPV6_PKTINFO
62
+ ctlOpts[ctlPacketInfo].marshal = marshalPacketInfo
63
+ ctlOpts[ctlNextHop].name = sysIPV6_NEXTHOP
64
+ ctlOpts[ctlNextHop].length = sysSizeofSockaddrInet6
65
+ ctlOpts[ctlNextHop].marshal = marshalNextHop
66
+ ctlOpts[ctlNextHop].parse = parseNextHop
67
+ ctlOpts[ctlPathMTU].name = sysIPV6_PATHMTU
68
+ ctlOpts[ctlPathMTU].length = sysSizeofIPv6Mtuinfo
69
+ ctlOpts[ctlPathMTU].marshal = marshalPathMTU
70
+ ctlOpts[ctlPathMTU].parse = parsePathMTU
71
+ sockOpts[ssoTrafficClass].level = iana.ProtocolIPv6
72
+ sockOpts[ssoTrafficClass].name = sysIPV6_TCLASS
73
+ sockOpts[ssoTrafficClass].typ = ssoTypeInt
74
+ sockOpts[ssoReceiveTrafficClass].level = iana.ProtocolIPv6
75
+ sockOpts[ssoReceiveTrafficClass].name = sysIPV6_RECVTCLASS
76
+ sockOpts[ssoReceiveTrafficClass].typ = ssoTypeInt
77
+ sockOpts[ssoReceiveHopLimit].name = sysIPV6_RECVHOPLIMIT
78
+ sockOpts[ssoReceivePacketInfo].name = sysIPV6_RECVPKTINFO
79
+ sockOpts[ssoReceivePathMTU].level = iana.ProtocolIPv6
80
+ sockOpts[ssoReceivePathMTU].name = sysIPV6_RECVPATHMTU
81
+ sockOpts[ssoReceivePathMTU].typ = ssoTypeInt
82
+ sockOpts[ssoPathMTU].level = iana.ProtocolIPv6
83
+ sockOpts[ssoPathMTU].name = sysIPV6_PATHMTU
84
+ sockOpts[ssoPathMTU].typ = ssoTypeMTUInfo
85
+ sockOpts[ssoJoinGroup].name = sysMCAST_JOIN_GROUP
86
+ sockOpts[ssoJoinGroup].typ = ssoTypeGroupReq
87
+ sockOpts[ssoLeaveGroup].name = sysMCAST_LEAVE_GROUP
88
+ sockOpts[ssoLeaveGroup].typ = ssoTypeGroupReq
89
+ sockOpts[ssoJoinSourceGroup].level = iana.ProtocolIPv6
90
+ sockOpts[ssoJoinSourceGroup].name = sysMCAST_JOIN_SOURCE_GROUP
91
+ sockOpts[ssoJoinSourceGroup].typ = ssoTypeGroupSourceReq
92
+ sockOpts[ssoLeaveSourceGroup].level = iana.ProtocolIPv6
93
+ sockOpts[ssoLeaveSourceGroup].name = sysMCAST_LEAVE_SOURCE_GROUP
94
+ sockOpts[ssoLeaveSourceGroup].typ = ssoTypeGroupSourceReq
95
+ sockOpts[ssoBlockSourceGroup].level = iana.ProtocolIPv6
96
+ sockOpts[ssoBlockSourceGroup].name = sysMCAST_BLOCK_SOURCE
97
+ sockOpts[ssoBlockSourceGroup].typ = ssoTypeGroupSourceReq
98
+ sockOpts[ssoUnblockSourceGroup].level = iana.ProtocolIPv6
99
+ sockOpts[ssoUnblockSourceGroup].name = sysMCAST_UNBLOCK_SOURCE
100
+ sockOpts[ssoUnblockSourceGroup].typ = ssoTypeGroupSourceReq
101
+ }
102
+}
103
+
104
+func (sa *sysSockaddrInet6) setSockaddr(ip net.IP, i int) {
105
+ sa.Len = sysSizeofSockaddrInet6
106
+ sa.Family = syscall.AF_INET6
107
+ copy(sa.Addr[:], ip)
108
+ sa.Scope_id = uint32(i)
109
+}
110
+
111
+func (pi *sysInet6Pktinfo) setIfindex(i int) {
112
+ pi.Ifindex = uint32(i)
113
+}
114
+
115
+func (mreq *sysIPv6Mreq) setIfindex(i int) {
116
+ mreq.Interface = uint32(i)
117
+}
118
+
119
+func (gr *sysGroupReq) setGroup(grp net.IP) {
120
+ sa := (*sysSockaddrInet6)(unsafe.Pointer(&gr.Pad_cgo_0[0]))
121
+ sa.Len = sysSizeofSockaddrInet6
122
+ sa.Family = syscall.AF_INET6
123
+ copy(sa.Addr[:], grp)
124
+}
125
+
126
+func (gsr *sysGroupSourceReq) setSourceGroup(grp, src net.IP) {
127
+ sa := (*sysSockaddrInet6)(unsafe.Pointer(&gsr.Pad_cgo_0[0]))
128
+ sa.Len = sysSizeofSockaddrInet6
129
+ sa.Family = syscall.AF_INET6
130
+ copy(sa.Addr[:], grp)
131
+ sa = (*sysSockaddrInet6)(unsafe.Pointer(&gsr.Pad_cgo_1[0]))
132
+ sa.Len = sysSizeofSockaddrInet6
133
+ sa.Family = syscall.AF_INET6
134
+ copy(sa.Addr[:], src)
135
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/sys_freebsd.go
new
+79
@@ -0,0 +1,79 @@
1
+// Copyright 2013 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv6
6
+
7
+import (
8
+ "net"
9
+ "syscall"
10
+ "unsafe"
11
+
12
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
13
+)
14
+
15
+type sysSockoptLen int32
16
+
17
+var (
18
+ ctlOpts = [ctlMax]ctlOpt{
19
+ ctlTrafficClass: {sysIPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass},
20
+ ctlHopLimit: {sysIPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit},
21
+ ctlPacketInfo: {sysIPV6_PKTINFO, sysSizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo},
22
+ ctlNextHop: {sysIPV6_NEXTHOP, sysSizeofSockaddrInet6, marshalNextHop, parseNextHop},
23
+ ctlPathMTU: {sysIPV6_PATHMTU, sysSizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU},
24
+ }
25
+
26
+ sockOpts = [ssoMax]sockOpt{
27
+ ssoTrafficClass: {iana.ProtocolIPv6, sysIPV6_TCLASS, ssoTypeInt},
28
+ ssoHopLimit: {iana.ProtocolIPv6, sysIPV6_UNICAST_HOPS, ssoTypeInt},
29
+ ssoMulticastInterface: {iana.ProtocolIPv6, sysIPV6_MULTICAST_IF, ssoTypeInterface},
30
+ ssoMulticastHopLimit: {iana.ProtocolIPv6, sysIPV6_MULTICAST_HOPS, ssoTypeInt},
31
+ ssoMulticastLoopback: {iana.ProtocolIPv6, sysIPV6_MULTICAST_LOOP, ssoTypeInt},
32
+ ssoReceiveTrafficClass: {iana.ProtocolIPv6, sysIPV6_RECVTCLASS, ssoTypeInt},
33
+ ssoReceiveHopLimit: {iana.ProtocolIPv6, sysIPV6_RECVHOPLIMIT, ssoTypeInt},
34
+ ssoReceivePacketInfo: {iana.ProtocolIPv6, sysIPV6_RECVPKTINFO, ssoTypeInt},
35
+ ssoReceivePathMTU: {iana.ProtocolIPv6, sysIPV6_RECVPATHMTU, ssoTypeInt},
36
+ ssoPathMTU: {iana.ProtocolIPv6, sysIPV6_PATHMTU, ssoTypeMTUInfo},
37
+ ssoChecksum: {iana.ProtocolIPv6, sysIPV6_CHECKSUM, ssoTypeInt},
38
+ ssoICMPFilter: {iana.ProtocolIPv6ICMP, sysICMP6_FILTER, ssoTypeICMPFilter},
39
+ ssoJoinGroup: {iana.ProtocolIPv6, sysMCAST_JOIN_GROUP, ssoTypeGroupReq},
40
+ ssoLeaveGroup: {iana.ProtocolIPv6, sysMCAST_LEAVE_GROUP, ssoTypeGroupReq},
41
+ ssoJoinSourceGroup: {iana.ProtocolIPv6, sysMCAST_JOIN_SOURCE_GROUP, ssoTypeGroupSourceReq},
42
+ ssoLeaveSourceGroup: {iana.ProtocolIPv6, sysMCAST_LEAVE_SOURCE_GROUP, ssoTypeGroupSourceReq},
43
+ ssoBlockSourceGroup: {iana.ProtocolIPv6, sysMCAST_BLOCK_SOURCE, ssoTypeGroupSourceReq},
44
+ ssoUnblockSourceGroup: {iana.ProtocolIPv6, sysMCAST_UNBLOCK_SOURCE, ssoTypeGroupSourceReq},
45
+ }
46
+)
47
+
48
+func (sa *sysSockaddrInet6) setSockaddr(ip net.IP, i int) {
49
+ sa.Len = sysSizeofSockaddrInet6
50
+ sa.Family = syscall.AF_INET6
51
+ copy(sa.Addr[:], ip)
52
+ sa.Scope_id = uint32(i)
53
+}
54
+
55
+func (pi *sysInet6Pktinfo) setIfindex(i int) {
56
+ pi.Ifindex = uint32(i)
57
+}
58
+
59
+func (mreq *sysIPv6Mreq) setIfindex(i int) {
60
+ mreq.Interface = uint32(i)
61
+}
62
+
63
+func (gr *sysGroupReq) setGroup(grp net.IP) {
64
+ sa := (*sysSockaddrInet6)(unsafe.Pointer(&gr.Group))
65
+ sa.Len = sysSizeofSockaddrInet6
66
+ sa.Family = syscall.AF_INET6
67
+ copy(sa.Addr[:], grp)
68
+}
69
+
70
+func (gsr *sysGroupSourceReq) setSourceGroup(grp, src net.IP) {
71
+ sa := (*sysSockaddrInet6)(unsafe.Pointer(&gsr.Group))
72
+ sa.Len = sysSizeofSockaddrInet6
73
+ sa.Family = syscall.AF_INET6
74
+ copy(sa.Addr[:], grp)
75
+ sa = (*sysSockaddrInet6)(unsafe.Pointer(&gsr.Source))
76
+ sa.Len = sysSizeofSockaddrInet6
77
+ sa.Family = syscall.AF_INET6
78
+ copy(sa.Addr[:], src)
79
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/sys_linux.go
new
+74
@@ -0,0 +1,74 @@
1
+// Copyright 2013 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv6
6
+
7
+import (
8
+ "net"
9
+ "syscall"
10
+ "unsafe"
11
+
12
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
13
+)
14
+
15
+type sysSockoptLen int32
16
+
17
+var (
18
+ ctlOpts = [ctlMax]ctlOpt{
19
+ ctlTrafficClass: {sysIPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass},
20
+ ctlHopLimit: {sysIPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit},
21
+ ctlPacketInfo: {sysIPV6_PKTINFO, sysSizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo},
22
+ ctlPathMTU: {sysIPV6_PATHMTU, sysSizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU},
23
+ }
24
+
25
+ sockOpts = [ssoMax]sockOpt{
26
+ ssoTrafficClass: {iana.ProtocolIPv6, sysIPV6_TCLASS, ssoTypeInt},
27
+ ssoHopLimit: {iana.ProtocolIPv6, sysIPV6_UNICAST_HOPS, ssoTypeInt},
28
+ ssoMulticastInterface: {iana.ProtocolIPv6, sysIPV6_MULTICAST_IF, ssoTypeInterface},
29
+ ssoMulticastHopLimit: {iana.ProtocolIPv6, sysIPV6_MULTICAST_HOPS, ssoTypeInt},
30
+ ssoMulticastLoopback: {iana.ProtocolIPv6, sysIPV6_MULTICAST_LOOP, ssoTypeInt},
31
+ ssoReceiveTrafficClass: {iana.ProtocolIPv6, sysIPV6_RECVTCLASS, ssoTypeInt},
32
+ ssoReceiveHopLimit: {iana.ProtocolIPv6, sysIPV6_RECVHOPLIMIT, ssoTypeInt},
33
+ ssoReceivePacketInfo: {iana.ProtocolIPv6, sysIPV6_RECVPKTINFO, ssoTypeInt},
34
+ ssoReceivePathMTU: {iana.ProtocolIPv6, sysIPV6_RECVPATHMTU, ssoTypeInt},
35
+ ssoPathMTU: {iana.ProtocolIPv6, sysIPV6_PATHMTU, ssoTypeMTUInfo},
36
+ ssoChecksum: {iana.ProtocolReserved, sysIPV6_CHECKSUM, ssoTypeInt},
37
+ ssoICMPFilter: {iana.ProtocolIPv6ICMP, sysICMPV6_FILTER, ssoTypeICMPFilter},
38
+ ssoJoinGroup: {iana.ProtocolIPv6, sysMCAST_JOIN_GROUP, ssoTypeGroupReq},
39
+ ssoLeaveGroup: {iana.ProtocolIPv6, sysMCAST_LEAVE_GROUP, ssoTypeGroupReq},
40
+ ssoJoinSourceGroup: {iana.ProtocolIPv6, sysMCAST_JOIN_SOURCE_GROUP, ssoTypeGroupSourceReq},
41
+ ssoLeaveSourceGroup: {iana.ProtocolIPv6, sysMCAST_LEAVE_SOURCE_GROUP, ssoTypeGroupSourceReq},
42
+ ssoBlockSourceGroup: {iana.ProtocolIPv6, sysMCAST_BLOCK_SOURCE, ssoTypeGroupSourceReq},
43
+ ssoUnblockSourceGroup: {iana.ProtocolIPv6, sysMCAST_UNBLOCK_SOURCE, ssoTypeGroupSourceReq},
44
+ }
45
+)
46
+
47
+func (sa *sysSockaddrInet6) setSockaddr(ip net.IP, i int) {
48
+ sa.Family = syscall.AF_INET6
49
+ copy(sa.Addr[:], ip)
50
+ sa.Scope_id = uint32(i)
51
+}
52
+
53
+func (pi *sysInet6Pktinfo) setIfindex(i int) {
54
+ pi.Ifindex = int32(i)
55
+}
56
+
57
+func (mreq *sysIPv6Mreq) setIfindex(i int) {
58
+ mreq.Ifindex = int32(i)
59
+}
60
+
61
+func (gr *sysGroupReq) setGroup(grp net.IP) {
62
+ sa := (*sysSockaddrInet6)(unsafe.Pointer(&gr.Group))
63
+ sa.Family = syscall.AF_INET6
64
+ copy(sa.Addr[:], grp)
65
+}
66
+
67
+func (gsr *sysGroupSourceReq) setSourceGroup(grp, src net.IP) {
68
+ sa := (*sysSockaddrInet6)(unsafe.Pointer(&gsr.Group))
69
+ sa.Family = syscall.AF_INET6
70
+ copy(sa.Addr[:], grp)
71
+ sa = (*sysSockaddrInet6)(unsafe.Pointer(&gsr.Source))
72
+ sa.Family = syscall.AF_INET6
73
+ copy(sa.Addr[:], src)
74
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/sys_stub.go
renamed
+9
-5
@@ -2,10 +2,14 @@
2
// Use of this source code is governed by a BSD-style
3
// license that can be found in the LICENSE file.
4
5
-// +build nacl plan9
5
+// +build nacl plan9 solaris
6
7
-package ipv4_test
7
+package ipv6
8
9
-func protocolNotSupported(err error) bool {
10
- return false
11
-}
9
+type sysSockoptLen int32
10
+
11
+var (
12
+ ctlOpts = [ctlMax]ctlOpt{}
13
+
14
+ sockOpts = [ssoMax]sockOpt{}
15
+)
Godeps/_workspace/src/golang.org/x/net/ipv6/sys_windows.go
new
+63
@@ -0,0 +1,63 @@
1
+// Copyright 2013 The Go Authors. All rights reserved.
2
+// Use of this source code is governed by a BSD-style
3
+// license that can be found in the LICENSE file.
4
+
5
+package ipv6
6
+
7
+import (
8
+ "net"
9
+ "syscall"
10
+
11
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
12
+)
13
+
14
+const (
15
+ // See ws2tcpip.h.
16
+ sysIPV6_UNICAST_HOPS = 0x4
17
+ sysIPV6_MULTICAST_IF = 0x9
18
+ sysIPV6_MULTICAST_HOPS = 0xa
19
+ sysIPV6_MULTICAST_LOOP = 0xb
20
+ sysIPV6_JOIN_GROUP = 0xc
21
+ sysIPV6_LEAVE_GROUP = 0xd
22
+ sysIPV6_PKTINFO = 0x13
23
+
24
+ sysSizeofSockaddrInet6 = 0x1c
25
+
26
+ sysSizeofIPv6Mreq = 0x14
27
+)
28
+
29
+type sysSockaddrInet6 struct {
30
+ Family uint16
31
+ Port uint16
32
+ Flowinfo uint32
33
+ Addr [16]byte /* in6_addr */
34
+ Scope_id uint32
35
+}
36
+
37
+type sysIPv6Mreq struct {
38
+ Multiaddr [16]byte /* in6_addr */
39
+ Interface uint32
40
+}
41
+
42
+var (
43
+ ctlOpts = [ctlMax]ctlOpt{}
44
+
45
+ sockOpts = [ssoMax]sockOpt{
46
+ ssoHopLimit: {iana.ProtocolIPv6, sysIPV6_UNICAST_HOPS, ssoTypeInt},
47
+ ssoMulticastInterface: {iana.ProtocolIPv6, sysIPV6_MULTICAST_IF, ssoTypeInterface},
48
+ ssoMulticastHopLimit: {iana.ProtocolIPv6, sysIPV6_MULTICAST_HOPS, ssoTypeInt},
49
+ ssoMulticastLoopback: {iana.ProtocolIPv6, sysIPV6_MULTICAST_LOOP, ssoTypeInt},
50
+ ssoJoinGroup: {iana.ProtocolIPv6, sysIPV6_JOIN_GROUP, ssoTypeIPMreq},
51
+ ssoLeaveGroup: {iana.ProtocolIPv6, sysIPV6_LEAVE_GROUP, ssoTypeIPMreq},
52
+ }
53
+)
54
+
55
+func (sa *sysSockaddrInet6) setSockaddr(ip net.IP, i int) {
56
+ sa.Family = syscall.AF_INET6
57
+ copy(sa.Addr[:], ip)
58
+ sa.Scope_id = uint32(i)
59
+}
60
+
61
+func (mreq *sysIPv6Mreq) setIfindex(i int) {
62
+ mreq.Interface = uint32(i)
63
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/syscall_linux_386.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv6/syscall_unix.go
renamed
+1
-1
@@ -2,7 +2,7 @@
2
// Use of this source code is governed by a BSD-style
3
// license that can be found in the LICENSE file.
4
5
-// +build darwin dragonfly freebsd linux,amd64 linux,arm netbsd openbsd
5
+// +build darwin dragonfly freebsd linux,amd64 linux,arm linux,ppc64 linux,ppc64le netbsd openbsd
6
7
package ipv6
8
Godeps/_workspace/src/golang.org/x/net/ipv6/thunk_linux_386.s
renamed
Godeps/_workspace/src/golang.org/x/net/ipv6/unicast_test.go
renamed
+53
-40
@@ -6,18 +6,22 @@ package ipv6_test
6
7
import (
8
"bytes"
9
- "code.google.com/p/go.net/ipv6"
9
"net"
10
"os"
11
"runtime"
12
"testing"
13
"time"
14
+
15
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
16
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/ipv6"
17
+ "golang.org/x/net/icmp"
18
+ "golang.org/x/net/internal/nettest"
19
)
20
21
func TestPacketConnReadWriteUnicastUDP(t *testing.T) {
22
switch runtime.GOOS {
19
- case "plan9", "solaris", "windows":
20
- t.Skipf("not supported on %q", runtime.GOOS)
23
+ case "nacl", "plan9", "solaris", "windows":
24
+ t.Skipf("not supported on %s", runtime.GOOS)
25
}
26
if !supportsIPv6 {
27
t.Skip("ipv6 is not supported")
@@ -25,7 +29,7 @@ func TestPacketConnReadWriteUnicastUDP(t *testing.T) {
29
30
c, err := net.ListenPacket("udp6", "[::1]:0")
31
if err != nil {
28
- t.Fatalf("net.ListenPacket failed: %v", err)
32
+ t.Fatal(err)
33
}
34
defer c.Close()
35
p := ipv6.NewPacketConn(c)
@@ -33,16 +37,15 @@ func TestPacketConnReadWriteUnicastUDP(t *testing.T) {
37
38
dst, err := net.ResolveUDPAddr("udp6", c.LocalAddr().String())
39
if err != nil {
36
- t.Fatalf("net.ResolveUDPAddr failed: %v", err)
40
+ t.Fatal(err)
41
}
42
43
cm := ipv6.ControlMessage{
40
- TrafficClass: DiffServAF11 | CongestionExperienced,
44
+ TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced,
45
Src: net.IPv6loopback,
42
- Dst: net.IPv6loopback,
46
}
47
cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU
45
- ifi := loopbackInterface()
48
+ ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagLoopback)
49
if ifi != nil {
50
cm.IfIndex = ifi.Index
51
}
@@ -50,25 +53,28 @@ func TestPacketConnReadWriteUnicastUDP(t *testing.T) {
53
54
for i, toggle := range []bool{true, false, true} {
55
if err := p.SetControlMessage(cf, toggle); err != nil {
53
- t.Fatalf("ipv6.PacketConn.SetControlMessage failed: %v", err)
56
+ if nettest.ProtocolNotSupported(err) {
57
+ t.Skipf("not supported on %s", runtime.GOOS)
58
+ }
59
+ t.Fatal(err)
60
}
61
cm.HopLimit = i + 1
62
if err := p.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
57
- t.Fatalf("ipv6.PacketConn.SetWriteDeadline failed: %v", err)
63
+ t.Fatal(err)
64
}
65
if n, err := p.WriteTo(wb, &cm, dst); err != nil {
60
- t.Fatalf("ipv6.PacketConn.WriteTo failed: %v", err)
66
+ t.Fatal(err)
67
} else if n != len(wb) {
62
- t.Fatalf("ipv6.PacketConn.WriteTo failed: short write: %v", n)
68
+ t.Fatalf("got %v; want %v", n, len(wb))
69
}
70
rb := make([]byte, 128)
71
if err := p.SetReadDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
66
- t.Fatalf("ipv6.PacketConn.SetReadDeadline failed: %v", err)
72
+ t.Fatal(err)
73
}
74
if n, cm, _, err := p.ReadFrom(rb); err != nil {
69
- t.Fatalf("ipv6.PacketConn.ReadFrom failed: %v", err)
75
+ t.Fatal(err)
76
} else if !bytes.Equal(rb[:n], wb) {
71
- t.Fatalf("got %v; expected %v", rb[:n], wb)
77
+ t.Fatalf("got %v; want %v", rb[:n], wb)
78
} else {
79
t.Logf("rcvd cmsg: %v", cm)
80
}
@@ -77,19 +83,19 @@ func TestPacketConnReadWriteUnicastUDP(t *testing.T) {
83
84
func TestPacketConnReadWriteUnicastICMP(t *testing.T) {
85
switch runtime.GOOS {
80
- case "plan9", "solaris", "windows":
81
- t.Skipf("not supported on %q", runtime.GOOS)
86
+ case "nacl", "plan9", "solaris", "windows":
87
+ t.Skipf("not supported on %s", runtime.GOOS)
88
}
89
if !supportsIPv6 {
90
t.Skip("ipv6 is not supported")
91
}
86
- if os.Getuid() != 0 {
87
- t.Skip("must be root")
92
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
93
+ t.Skip(m)
94
}
95
96
c, err := net.ListenPacket("ip6:ipv6-icmp", "::1")
97
if err != nil {
92
- t.Fatalf("net.ListenPacket failed: %v", err)
98
+ t.Fatal(err)
99
}
100
defer c.Close()
101
p := ipv6.NewPacketConn(c)
@@ -97,26 +103,25 @@ func TestPacketConnReadWriteUnicastICMP(t *testing.T) {
103
104
dst, err := net.ResolveIPAddr("ip6", "::1")
105
if err != nil {
100
- t.Fatalf("net.ResolveIPAddr failed: %v", err)
106
+ t.Fatal(err)
107
}
108
103
- pshicmp := ipv6PseudoHeader(c.LocalAddr().(*net.IPAddr).IP, dst.IP, ianaProtocolIPv6ICMP)
109
+ pshicmp := icmp.IPv6PseudoHeader(c.LocalAddr().(*net.IPAddr).IP, dst.IP)
110
cm := ipv6.ControlMessage{
105
- TrafficClass: DiffServAF11 | CongestionExperienced,
111
+ TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced,
112
Src: net.IPv6loopback,
107
- Dst: net.IPv6loopback,
113
}
114
cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU
110
- ifi := loopbackInterface()
115
+ ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagLoopback)
116
if ifi != nil {
117
cm.IfIndex = ifi.Index
118
}
119
120
var f ipv6.ICMPFilter
121
f.SetAll(true)
117
- f.Set(ipv6.ICMPTypeEchoReply, false)
122
+ f.Accept(ipv6.ICMPTypeEchoReply)
123
if err := p.SetICMPFilter(&f); err != nil {
119
- t.Fatalf("ipv6.PacketConn.SetICMPFilter failed: %v", err)
124
+ t.Fatal(err)
125
}
126
127
var psh []byte
@@ -124,7 +129,7 @@ func TestPacketConnReadWriteUnicastICMP(t *testing.T) {
129
if toggle {
130
psh = nil
131
if err := p.SetChecksum(true, 2); err != nil {
127
- t.Fatalf("ipv6.PacketConn.SetChecksum failed: %v", err)
132
+ t.Fatal(err)
133
}
134
} else {
135
psh = pshicmp
@@ -132,40 +137,48 @@ func TestPacketConnReadWriteUnicastICMP(t *testing.T) {
137
// kernel checksum processing.
138
p.SetChecksum(false, -1)
139
}
135
- wb, err := (&icmpMessage{
140
+ wb, err := (&icmp.Message{
141
Type: ipv6.ICMPTypeEchoRequest, Code: 0,
137
- Body: &icmpEcho{
142
+ Body: &icmp.Echo{
143
ID: os.Getpid() & 0xffff, Seq: i + 1,
144
Data: []byte("HELLO-R-U-THERE"),
145
},
146
}).Marshal(psh)
147
if err != nil {
143
- t.Fatalf("icmpMessage.Marshal failed: %v", err)
148
+ t.Fatal(err)
149
}
150
if err := p.SetControlMessage(cf, toggle); err != nil {
146
- t.Fatalf("ipv6.PacketConn.SetControlMessage failed: %v", err)
151
+ if nettest.ProtocolNotSupported(err) {
152
+ t.Skipf("not supported on %s", runtime.GOOS)
153
+ }
154
+ t.Fatal(err)
155
}
156
cm.HopLimit = i + 1
157
if err := p.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
150
- t.Fatalf("ipv6.PacketConn.SetWriteDeadline failed: %v", err)
158
+ t.Fatal(err)
159
}
160
if n, err := p.WriteTo(wb, &cm, dst); err != nil {
153
- t.Fatalf("ipv6.PacketConn.WriteTo failed: %v", err)
161
+ t.Fatal(err)
162
} else if n != len(wb) {
155
- t.Fatalf("ipv6.PacketConn.WriteTo failed: short write: %v", n)
163
+ t.Fatalf("got %v; want %v", n, len(wb))
164
}
165
rb := make([]byte, 128)
166
if err := p.SetReadDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
159
- t.Fatalf("ipv6.PacketConn.SetReadDeadline failed: %v", err)
167
+ t.Fatal(err)
168
}
169
if n, cm, _, err := p.ReadFrom(rb); err != nil {
162
- t.Fatalf("ipv6.PacketConn.ReadFrom failed: %v", err)
170
+ switch runtime.GOOS {
171
+ case "darwin": // older darwin kernels have some limitation on receiving icmp packet through raw socket
172
+ t.Logf("not supported on %s", runtime.GOOS)
173
+ continue
174
+ }
175
+ t.Fatal(err)
176
} else {
177
t.Logf("rcvd cmsg: %v", cm)
165
- if m, err := parseICMPMessage(rb[:n]); err != nil {
166
- t.Fatalf("parseICMPMessage failed: %v", err)
178
+ if m, err := icmp.ParseMessage(iana.ProtocolIPv6ICMP, rb[:n]); err != nil {
179
+ t.Fatal(err)
180
} else if m.Type != ipv6.ICMPTypeEchoReply || m.Code != 0 {
168
- t.Fatalf("got type=%v, code=%v; expected type=%v, code=%v", m.Type, m.Code, ipv6.ICMPTypeEchoReply, 0)
181
+ t.Fatalf("got type=%v, code=%v; want type=%v, code=%v", m.Type, m.Code, ipv6.ICMPTypeEchoReply, 0)
182
}
183
}
184
}
Godeps/_workspace/src/golang.org/x/net/ipv6/unicastsockopt_test.go
renamed
+28
-18
@@ -5,17 +5,19 @@
5
package ipv6_test
6
7
import (
8
- "code.google.com/p/go.net/ipv6"
8
"net"
10
- "os"
9
"runtime"
10
"testing"
11
+
12
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/internal/iana"
13
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/ipv6"
14
+ "golang.org/x/net/internal/nettest"
15
)
16
17
func TestConnUnicastSocketOptions(t *testing.T) {
18
switch runtime.GOOS {
17
- case "plan9", "solaris", "windows":
18
- t.Skipf("not supported on %q", runtime.GOOS)
19
+ case "nacl", "plan9", "solaris", "windows":
20
+ t.Skipf("not supported on %s", runtime.GOOS)
21
}
22
if !supportsIPv6 {
23
t.Skip("ipv6 is not supported")
@@ -23,7 +25,7 @@ func TestConnUnicastSocketOptions(t *testing.T) {
25
26
ln, err := net.Listen("tcp6", "[::1]:0")
27
if err != nil {
26
- t.Fatalf("net.Listen failed: %v", err)
28
+ t.Fatal(err)
29
}
30
defer ln.Close()
31
@@ -32,7 +34,7 @@ func TestConnUnicastSocketOptions(t *testing.T) {
34
35
c, err := net.Dial("tcp6", ln.Addr().String())
36
if err != nil {
35
- t.Fatalf("net.Dial failed: %v", err)
37
+ t.Fatal(err)
38
}
39
defer c.Close()
40
@@ -50,20 +52,22 @@ var packetConnUnicastSocketOptionTests = []struct {
52
53
func TestPacketConnUnicastSocketOptions(t *testing.T) {
54
switch runtime.GOOS {
53
- case "plan9", "solaris", "windows":
54
- t.Skipf("not supported on %q", runtime.GOOS)
55
+ case "nacl", "plan9", "solaris", "windows":
56
+ t.Skipf("not supported on %s", runtime.GOOS)
57
}
58
if !supportsIPv6 {
59
t.Skip("ipv6 is not supported")
60
}
61
62
+ m, ok := nettest.SupportsRawIPSocket()
63
for _, tt := range packetConnUnicastSocketOptionTests {
61
- if tt.net == "ip6" && os.Getuid() != 0 {
62
- t.Skip("must be root")
64
+ if tt.net == "ip6" && !ok {
65
+ t.Log(m)
66
+ continue
67
}
68
c, err := net.ListenPacket(tt.net+tt.proto, tt.addr)
69
if err != nil {
66
- t.Fatalf("net.ListenPacket(%q, %q) failed: %v", tt.net+tt.proto, tt.addr, err)
70
+ t.Fatal(err)
71
}
72
defer c.Close()
73
@@ -79,23 +83,29 @@ type testIPv6UnicastConn interface {
83
}
84
85
func testUnicastSocketOptions(t *testing.T, c testIPv6UnicastConn) {
82
- tclass := DiffServCS0 | NotECNTransport
86
+ tclass := iana.DiffServCS0 | iana.NotECNTransport
87
if err := c.SetTrafficClass(tclass); err != nil {
84
- t.Fatalf("ipv6.Conn.SetTrafficClass failed: %v", err)
88
+ switch runtime.GOOS {
89
+ case "darwin": // older darwin kernels don't support IPV6_TCLASS option
90
+ t.Logf("not supported on %s", runtime.GOOS)
91
+ goto next
92
+ }
93
+ t.Fatal(err)
94
}
95
if v, err := c.TrafficClass(); err != nil {
87
- t.Fatalf("ipv6.Conn.TrafficClass failed: %v", err)
96
+ t.Fatal(err)
97
} else if v != tclass {
89
- t.Fatalf("got unexpected traffic class %v; expected %v", v, tclass)
98
+ t.Fatalf("got %v; want %v", v, tclass)
99
}
100
101
+next:
102
hoplim := 255
103
if err := c.SetHopLimit(hoplim); err != nil {
94
- t.Fatalf("ipv6.Conn.SetHopLimit failed: %v", err)
104
+ t.Fatal(err)
105
}
106
if v, err := c.HopLimit(); err != nil {
97
- t.Fatalf("ipv6.Conn.HopLimit failed: %v", err)
107
+ t.Fatal(err)
108
} else if v != hoplim {
99
- t.Fatalf("got unexpected hop limit %v; expected %v", v, hoplim)
109
+ t.Fatalf("got %v; want %v", v, hoplim)
110
}
111
}
Godeps/_workspace/src/golang.org/x/net/ipv6/zsys_darwin.go
renamed
+34
-4
@@ -57,21 +57,40 @@ const (
57
58
sysIPV6_PREFER_TEMPADDR = 0x3f
59
60
+ sysIPV6_MSFILTER = 0x4a
61
+ sysMCAST_JOIN_GROUP = 0x50
62
+ sysMCAST_LEAVE_GROUP = 0x51
63
+ sysMCAST_JOIN_SOURCE_GROUP = 0x52
64
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x53
65
+ sysMCAST_BLOCK_SOURCE = 0x54
66
+ sysMCAST_UNBLOCK_SOURCE = 0x55
67
+
68
sysIPV6_BOUND_IF = 0x7d
69
70
sysIPV6_PORTRANGE_DEFAULT = 0x0
71
sysIPV6_PORTRANGE_HIGH = 0x1
72
sysIPV6_PORTRANGE_LOW = 0x2
73
66
- sysSizeofSockaddrInet6 = 0x1c
67
- sysSizeofInet6Pktinfo = 0x14
68
- sysSizeofIPv6Mtuinfo = 0x20
74
+ sysSizeofSockaddrStorage = 0x80
75
+ sysSizeofSockaddrInet6 = 0x1c
76
+ sysSizeofInet6Pktinfo = 0x14
77
+ sysSizeofIPv6Mtuinfo = 0x20
78
70
- sysSizeofIPv6Mreq = 0x14
79
+ sysSizeofIPv6Mreq = 0x14
80
+ sysSizeofGroupReq = 0x84
81
+ sysSizeofGroupSourceReq = 0x104
82
83
sysSizeofICMPv6Filter = 0x20
84
)
85
86
+type sysSockaddrStorage struct {
87
+ Len uint8
88
+ Family uint8
89
+ X__ss_pad1 [6]int8
90
+ X__ss_align int64
91
+ X__ss_pad2 [112]int8
92
+}
93
+
94
type sysSockaddrInet6 struct {
95
Len uint8
96
Family uint8
@@ -99,3 +118,14 @@ type sysIPv6Mreq struct {
118
type sysICMPv6Filter struct {
119
Filt [8]uint32
120
}
121
+
122
+type sysGroupReq struct {
123
+ Interface uint32
124
+ Pad_cgo_0 [128]byte
125
+}
126
+
127
+type sysGroupSourceReq struct {
128
+ Interface uint32
129
+ Pad_cgo_0 [128]byte
130
+ Pad_cgo_1 [128]byte
131
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/zsys_dragonfly.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv6/zsys_freebsd_386.go
renamed
+35
-4
@@ -49,19 +49,39 @@ const (
49
50
sysIPV6_BINDANY = 0x40
51
52
+ sysIPV6_MSFILTER = 0x4a
53
+
54
+ sysMCAST_JOIN_GROUP = 0x50
55
+ sysMCAST_LEAVE_GROUP = 0x51
56
+ sysMCAST_JOIN_SOURCE_GROUP = 0x52
57
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x53
58
+ sysMCAST_BLOCK_SOURCE = 0x54
59
+ sysMCAST_UNBLOCK_SOURCE = 0x55
60
+
61
sysIPV6_PORTRANGE_DEFAULT = 0x0
62
sysIPV6_PORTRANGE_HIGH = 0x1
63
sysIPV6_PORTRANGE_LOW = 0x2
64
56
- sysSizeofSockaddrInet6 = 0x1c
57
- sysSizeofInet6Pktinfo = 0x14
58
- sysSizeofIPv6Mtuinfo = 0x20
65
+ sysSizeofSockaddrStorage = 0x80
66
+ sysSizeofSockaddrInet6 = 0x1c
67
+ sysSizeofInet6Pktinfo = 0x14
68
+ sysSizeofIPv6Mtuinfo = 0x20
69
60
- sysSizeofIPv6Mreq = 0x14
70
+ sysSizeofIPv6Mreq = 0x14
71
+ sysSizeofGroupReq = 0x84
72
+ sysSizeofGroupSourceReq = 0x104
73
74
sysSizeofICMPv6Filter = 0x20
75
)
76
77
+type sysSockaddrStorage struct {
78
+ Len uint8
79
+ Family uint8
80
+ X__ss_pad1 [6]int8
81
+ X__ss_align int64
82
+ X__ss_pad2 [112]int8
83
+}
84
+
85
type sysSockaddrInet6 struct {
86
Len uint8
87
Family uint8
@@ -86,6 +106,17 @@ type sysIPv6Mreq struct {
106
Interface uint32
107
}
108
109
+type sysGroupReq struct {
110
+ Interface uint32
111
+ Group sysSockaddrStorage
112
+}
113
+
114
+type sysGroupSourceReq struct {
115
+ Interface uint32
116
+ Group sysSockaddrStorage
117
+ Source sysSockaddrStorage
118
+}
119
+
120
type sysICMPv6Filter struct {
121
Filt [8]uint32
122
}
Godeps/_workspace/src/golang.org/x/net/ipv6/zsys_freebsd_amd64.go
new
+124
@@ -0,0 +1,124 @@
1
+// Created by cgo -godefs - DO NOT EDIT
2
+// cgo -godefs defs_freebsd.go
3
+
4
+package ipv6
5
+
6
+const (
7
+ sysIPV6_UNICAST_HOPS = 0x4
8
+ sysIPV6_MULTICAST_IF = 0x9
9
+ sysIPV6_MULTICAST_HOPS = 0xa
10
+ sysIPV6_MULTICAST_LOOP = 0xb
11
+ sysIPV6_JOIN_GROUP = 0xc
12
+ sysIPV6_LEAVE_GROUP = 0xd
13
+ sysIPV6_PORTRANGE = 0xe
14
+ sysICMP6_FILTER = 0x12
15
+
16
+ sysIPV6_CHECKSUM = 0x1a
17
+ sysIPV6_V6ONLY = 0x1b
18
+
19
+ sysIPV6_IPSEC_POLICY = 0x1c
20
+
21
+ sysIPV6_RTHDRDSTOPTS = 0x23
22
+
23
+ sysIPV6_RECVPKTINFO = 0x24
24
+ sysIPV6_RECVHOPLIMIT = 0x25
25
+ sysIPV6_RECVRTHDR = 0x26
26
+ sysIPV6_RECVHOPOPTS = 0x27
27
+ sysIPV6_RECVDSTOPTS = 0x28
28
+
29
+ sysIPV6_USE_MIN_MTU = 0x2a
30
+ sysIPV6_RECVPATHMTU = 0x2b
31
+
32
+ sysIPV6_PATHMTU = 0x2c
33
+
34
+ sysIPV6_PKTINFO = 0x2e
35
+ sysIPV6_HOPLIMIT = 0x2f
36
+ sysIPV6_NEXTHOP = 0x30
37
+ sysIPV6_HOPOPTS = 0x31
38
+ sysIPV6_DSTOPTS = 0x32
39
+ sysIPV6_RTHDR = 0x33
40
+
41
+ sysIPV6_RECVTCLASS = 0x39
42
+
43
+ sysIPV6_AUTOFLOWLABEL = 0x3b
44
+
45
+ sysIPV6_TCLASS = 0x3d
46
+ sysIPV6_DONTFRAG = 0x3e
47
+
48
+ sysIPV6_PREFER_TEMPADDR = 0x3f
49
+
50
+ sysIPV6_BINDANY = 0x40
51
+
52
+ sysIPV6_MSFILTER = 0x4a
53
+
54
+ sysMCAST_JOIN_GROUP = 0x50
55
+ sysMCAST_LEAVE_GROUP = 0x51
56
+ sysMCAST_JOIN_SOURCE_GROUP = 0x52
57
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x53
58
+ sysMCAST_BLOCK_SOURCE = 0x54
59
+ sysMCAST_UNBLOCK_SOURCE = 0x55
60
+
61
+ sysIPV6_PORTRANGE_DEFAULT = 0x0
62
+ sysIPV6_PORTRANGE_HIGH = 0x1
63
+ sysIPV6_PORTRANGE_LOW = 0x2
64
+
65
+ sysSizeofSockaddrStorage = 0x80
66
+ sysSizeofSockaddrInet6 = 0x1c
67
+ sysSizeofInet6Pktinfo = 0x14
68
+ sysSizeofIPv6Mtuinfo = 0x20
69
+
70
+ sysSizeofIPv6Mreq = 0x14
71
+ sysSizeofGroupReq = 0x88
72
+ sysSizeofGroupSourceReq = 0x108
73
+
74
+ sysSizeofICMPv6Filter = 0x20
75
+)
76
+
77
+type sysSockaddrStorage struct {
78
+ Len uint8
79
+ Family uint8
80
+ X__ss_pad1 [6]int8
81
+ X__ss_align int64
82
+ X__ss_pad2 [112]int8
83
+}
84
+
85
+type sysSockaddrInet6 struct {
86
+ Len uint8
87
+ Family uint8
88
+ Port uint16
89
+ Flowinfo uint32
90
+ Addr [16]byte /* in6_addr */
91
+ Scope_id uint32
92
+}
93
+
94
+type sysInet6Pktinfo struct {
95
+ Addr [16]byte /* in6_addr */
96
+ Ifindex uint32
97
+}
98
+
99
+type sysIPv6Mtuinfo struct {
100
+ Addr sysSockaddrInet6
101
+ Mtu uint32
102
+}
103
+
104
+type sysIPv6Mreq struct {
105
+ Multiaddr [16]byte /* in6_addr */
106
+ Interface uint32
107
+}
108
+
109
+type sysGroupReq struct {
110
+ Interface uint32
111
+ Pad_cgo_0 [4]byte
112
+ Group sysSockaddrStorage
113
+}
114
+
115
+type sysGroupSourceReq struct {
116
+ Interface uint32
117
+ Pad_cgo_0 [4]byte
118
+ Group sysSockaddrStorage
119
+ Source sysSockaddrStorage
120
+}
121
+
122
+type sysICMPv6Filter struct {
123
+ Filt [8]uint32
124
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/zsys_freebsd_arm.go
new
+122
@@ -0,0 +1,122 @@
1
+// Created by cgo -godefs - DO NOT EDIT
2
+// cgo -godefs defs_freebsd.go
3
+
4
+package ipv6
5
+
6
+const (
7
+ sysIPV6_UNICAST_HOPS = 0x4
8
+ sysIPV6_MULTICAST_IF = 0x9
9
+ sysIPV6_MULTICAST_HOPS = 0xa
10
+ sysIPV6_MULTICAST_LOOP = 0xb
11
+ sysIPV6_JOIN_GROUP = 0xc
12
+ sysIPV6_LEAVE_GROUP = 0xd
13
+ sysIPV6_PORTRANGE = 0xe
14
+ sysICMP6_FILTER = 0x12
15
+
16
+ sysIPV6_CHECKSUM = 0x1a
17
+ sysIPV6_V6ONLY = 0x1b
18
+
19
+ sysIPV6_IPSEC_POLICY = 0x1c
20
+
21
+ sysIPV6_RTHDRDSTOPTS = 0x23
22
+
23
+ sysIPV6_RECVPKTINFO = 0x24
24
+ sysIPV6_RECVHOPLIMIT = 0x25
25
+ sysIPV6_RECVRTHDR = 0x26
26
+ sysIPV6_RECVHOPOPTS = 0x27
27
+ sysIPV6_RECVDSTOPTS = 0x28
28
+
29
+ sysIPV6_USE_MIN_MTU = 0x2a
30
+ sysIPV6_RECVPATHMTU = 0x2b
31
+
32
+ sysIPV6_PATHMTU = 0x2c
33
+
34
+ sysIPV6_PKTINFO = 0x2e
35
+ sysIPV6_HOPLIMIT = 0x2f
36
+ sysIPV6_NEXTHOP = 0x30
37
+ sysIPV6_HOPOPTS = 0x31
38
+ sysIPV6_DSTOPTS = 0x32
39
+ sysIPV6_RTHDR = 0x33
40
+
41
+ sysIPV6_RECVTCLASS = 0x39
42
+
43
+ sysIPV6_AUTOFLOWLABEL = 0x3b
44
+
45
+ sysIPV6_TCLASS = 0x3d
46
+ sysIPV6_DONTFRAG = 0x3e
47
+
48
+ sysIPV6_PREFER_TEMPADDR = 0x3f
49
+
50
+ sysIPV6_BINDANY = 0x40
51
+
52
+ sysIPV6_MSFILTER = 0x4a
53
+
54
+ sysMCAST_JOIN_GROUP = 0x50
55
+ sysMCAST_LEAVE_GROUP = 0x51
56
+ sysMCAST_JOIN_SOURCE_GROUP = 0x52
57
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x53
58
+ sysMCAST_BLOCK_SOURCE = 0x54
59
+ sysMCAST_UNBLOCK_SOURCE = 0x55
60
+
61
+ sysIPV6_PORTRANGE_DEFAULT = 0x0
62
+ sysIPV6_PORTRANGE_HIGH = 0x1
63
+ sysIPV6_PORTRANGE_LOW = 0x2
64
+
65
+ sysSizeofSockaddrStorage = 0x80
66
+ sysSizeofSockaddrInet6 = 0x1c
67
+ sysSizeofInet6Pktinfo = 0x14
68
+ sysSizeofIPv6Mtuinfo = 0x20
69
+
70
+ sysSizeofIPv6Mreq = 0x14
71
+ sysSizeofGroupReq = 0x84
72
+ sysSizeofGroupSourceReq = 0x104
73
+
74
+ sysSizeofICMPv6Filter = 0x20
75
+)
76
+
77
+type sysSockaddrStorage struct {
78
+ Len uint8
79
+ Family uint8
80
+ X__ss_pad1 [6]int8
81
+ X__ss_align int64
82
+ X__ss_pad2 [112]int8
83
+}
84
+
85
+type sysSockaddrInet6 struct {
86
+ Len uint8
87
+ Family uint8
88
+ Port uint16
89
+ Flowinfo uint32
90
+ Addr [16]byte /* in6_addr */
91
+ Scope_id uint32
92
+}
93
+
94
+type sysInet6Pktinfo struct {
95
+ Addr [16]byte /* in6_addr */
96
+ Ifindex uint32
97
+}
98
+
99
+type sysIPv6Mtuinfo struct {
100
+ Addr sysSockaddrInet6
101
+ Mtu uint32
102
+}
103
+
104
+type sysIPv6Mreq struct {
105
+ Multiaddr [16]byte /* in6_addr */
106
+ Interface uint32
107
+}
108
+
109
+type sysGroupReq struct {
110
+ Interface uint32
111
+ Group sysSockaddrStorage
112
+}
113
+
114
+type sysGroupSourceReq struct {
115
+ Interface uint32
116
+ Group sysSockaddrStorage
117
+ Source sysSockaddrStorage
118
+}
119
+
120
+type sysICMPv6Filter struct {
121
+ Filt [8]uint32
122
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/zsys_linux_386.go
renamed
+44
-25
@@ -15,26 +15,26 @@ const (
15
sysIPV6_NEXTHOP = 0x9
16
sysIPV6_FLOWINFO = 0xb
17
18
- sysIPV6_UNICAST_HOPS = 0x10
19
- sysIPV6_MULTICAST_IF = 0x11
20
- sysIPV6_MULTICAST_HOPS = 0x12
21
- sysIPV6_MULTICAST_LOOP = 0x13
22
- sysIPV6_ADD_MEMBERSHIP = 0x14
23
- sysIPV6_DROP_MEMBERSHIP = 0x15
24
- sysIPV6_ROUTER_ALERT = 0x16
25
- sysIPV6_MTU_DISCOVER = 0x17
26
- sysIPV6_MTU = 0x18
27
- sysIPV6_RECVERR = 0x19
28
- sysIPV6_V6ONLY = 0x1a
29
- sysIPV6_JOIN_ANYCAST = 0x1b
30
- sysIPV6_LEAVE_ANYCAST = 0x1c
31
-
32
- sysIPV6_PMTUDISC_DONT = 0x0
33
- sysIPV6_PMTUDISC_WANT = 0x1
34
- sysIPV6_PMTUDISC_DO = 0x2
35
- sysIPV6_PMTUDISC_PROBE = 0x3
36
- sysIPV6_PMTUDISC_INTERFACE = 0x4
37
- sysIPV6_PMTUDISC_OMIT = 0x5
18
+ sysIPV6_UNICAST_HOPS = 0x10
19
+ sysIPV6_MULTICAST_IF = 0x11
20
+ sysIPV6_MULTICAST_HOPS = 0x12
21
+ sysIPV6_MULTICAST_LOOP = 0x13
22
+ sysIPV6_ADD_MEMBERSHIP = 0x14
23
+ sysIPV6_DROP_MEMBERSHIP = 0x15
24
+ sysMCAST_JOIN_GROUP = 0x2a
25
+ sysMCAST_LEAVE_GROUP = 0x2d
26
+ sysMCAST_JOIN_SOURCE_GROUP = 0x2e
27
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x2f
28
+ sysMCAST_BLOCK_SOURCE = 0x2b
29
+ sysMCAST_UNBLOCK_SOURCE = 0x2c
30
+ sysMCAST_MSFILTER = 0x30
31
+ sysIPV6_ROUTER_ALERT = 0x16
32
+ sysIPV6_MTU_DISCOVER = 0x17
33
+ sysIPV6_MTU = 0x18
34
+ sysIPV6_RECVERR = 0x19
35
+ sysIPV6_V6ONLY = 0x1a
36
+ sysIPV6_JOIN_ANYCAST = 0x1b
37
+ sysIPV6_LEAVE_ANYCAST = 0x1c
38
39
sysIPV6_FLOWLABEL_MGR = 0x20
40
sysIPV6_FLOWINFO_SEND = 0x21
@@ -84,16 +84,24 @@ const (
84
sysICMPV6_FILTER_BLOCKOTHERS = 0x3
85
sysICMPV6_FILTER_PASSONLY = 0x4
86
87
- sysSizeofSockaddrInet6 = 0x1c
88
- sysSizeofInet6Pktinfo = 0x14
89
- sysSizeofIPv6Mtuinfo = 0x20
90
- sysSizeofIPv6FlowlabelReq = 0x20
87
+ sysSizeofKernelSockaddrStorage = 0x80
88
+ sysSizeofSockaddrInet6 = 0x1c
89
+ sysSizeofInet6Pktinfo = 0x14
90
+ sysSizeofIPv6Mtuinfo = 0x20
91
+ sysSizeofIPv6FlowlabelReq = 0x20
92
92
- sysSizeofIPv6Mreq = 0x14
93
+ sysSizeofIPv6Mreq = 0x14
94
+ sysSizeofGroupReq = 0x84
95
+ sysSizeofGroupSourceReq = 0x104
96
97
sysSizeofICMPv6Filter = 0x20
98
)
99
100
+type sysKernelSockaddrStorage struct {
101
+ Family uint16
102
+ X__data [126]int8
103
+}
104
+
105
type sysSockaddrInet6 struct {
106
Family uint16
107
Port uint16
@@ -128,6 +136,17 @@ type sysIPv6Mreq struct {
136
Ifindex int32
137
}
138
139
+type sysGroupReq struct {
140
+ Interface uint32
141
+ Group sysKernelSockaddrStorage
142
+}
143
+
144
+type sysGroupSourceReq struct {
145
+ Interface uint32
146
+ Group sysKernelSockaddrStorage
147
+ Source sysKernelSockaddrStorage
148
+}
149
+
150
type sysICMPv6Filter struct {
151
Data [8]uint32
152
}
Godeps/_workspace/src/golang.org/x/net/ipv6/zsys_linux_amd64.go
new
+154
@@ -0,0 +1,154 @@
1
+// Created by cgo -godefs - DO NOT EDIT
2
+// cgo -godefs defs_linux.go
3
+
4
+package ipv6
5
+
6
+const (
7
+ sysIPV6_ADDRFORM = 0x1
8
+ sysIPV6_2292PKTINFO = 0x2
9
+ sysIPV6_2292HOPOPTS = 0x3
10
+ sysIPV6_2292DSTOPTS = 0x4
11
+ sysIPV6_2292RTHDR = 0x5
12
+ sysIPV6_2292PKTOPTIONS = 0x6
13
+ sysIPV6_CHECKSUM = 0x7
14
+ sysIPV6_2292HOPLIMIT = 0x8
15
+ sysIPV6_NEXTHOP = 0x9
16
+ sysIPV6_FLOWINFO = 0xb
17
+
18
+ sysIPV6_UNICAST_HOPS = 0x10
19
+ sysIPV6_MULTICAST_IF = 0x11
20
+ sysIPV6_MULTICAST_HOPS = 0x12
21
+ sysIPV6_MULTICAST_LOOP = 0x13
22
+ sysIPV6_ADD_MEMBERSHIP = 0x14
23
+ sysIPV6_DROP_MEMBERSHIP = 0x15
24
+ sysMCAST_JOIN_GROUP = 0x2a
25
+ sysMCAST_LEAVE_GROUP = 0x2d
26
+ sysMCAST_JOIN_SOURCE_GROUP = 0x2e
27
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x2f
28
+ sysMCAST_BLOCK_SOURCE = 0x2b
29
+ sysMCAST_UNBLOCK_SOURCE = 0x2c
30
+ sysMCAST_MSFILTER = 0x30
31
+ sysIPV6_ROUTER_ALERT = 0x16
32
+ sysIPV6_MTU_DISCOVER = 0x17
33
+ sysIPV6_MTU = 0x18
34
+ sysIPV6_RECVERR = 0x19
35
+ sysIPV6_V6ONLY = 0x1a
36
+ sysIPV6_JOIN_ANYCAST = 0x1b
37
+ sysIPV6_LEAVE_ANYCAST = 0x1c
38
+
39
+ sysIPV6_FLOWLABEL_MGR = 0x20
40
+ sysIPV6_FLOWINFO_SEND = 0x21
41
+
42
+ sysIPV6_IPSEC_POLICY = 0x22
43
+ sysIPV6_XFRM_POLICY = 0x23
44
+
45
+ sysIPV6_RECVPKTINFO = 0x31
46
+ sysIPV6_PKTINFO = 0x32
47
+ sysIPV6_RECVHOPLIMIT = 0x33
48
+ sysIPV6_HOPLIMIT = 0x34
49
+ sysIPV6_RECVHOPOPTS = 0x35
50
+ sysIPV6_HOPOPTS = 0x36
51
+ sysIPV6_RTHDRDSTOPTS = 0x37
52
+ sysIPV6_RECVRTHDR = 0x38
53
+ sysIPV6_RTHDR = 0x39
54
+ sysIPV6_RECVDSTOPTS = 0x3a
55
+ sysIPV6_DSTOPTS = 0x3b
56
+ sysIPV6_RECVPATHMTU = 0x3c
57
+ sysIPV6_PATHMTU = 0x3d
58
+ sysIPV6_DONTFRAG = 0x3e
59
+
60
+ sysIPV6_RECVTCLASS = 0x42
61
+ sysIPV6_TCLASS = 0x43
62
+
63
+ sysIPV6_ADDR_PREFERENCES = 0x48
64
+
65
+ sysIPV6_PREFER_SRC_TMP = 0x1
66
+ sysIPV6_PREFER_SRC_PUBLIC = 0x2
67
+ sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100
68
+ sysIPV6_PREFER_SRC_COA = 0x4
69
+ sysIPV6_PREFER_SRC_HOME = 0x400
70
+ sysIPV6_PREFER_SRC_CGA = 0x8
71
+ sysIPV6_PREFER_SRC_NONCGA = 0x800
72
+
73
+ sysIPV6_MINHOPCOUNT = 0x49
74
+
75
+ sysIPV6_ORIGDSTADDR = 0x4a
76
+ sysIPV6_RECVORIGDSTADDR = 0x4a
77
+ sysIPV6_TRANSPARENT = 0x4b
78
+ sysIPV6_UNICAST_IF = 0x4c
79
+
80
+ sysICMPV6_FILTER = 0x1
81
+
82
+ sysICMPV6_FILTER_BLOCK = 0x1
83
+ sysICMPV6_FILTER_PASS = 0x2
84
+ sysICMPV6_FILTER_BLOCKOTHERS = 0x3
85
+ sysICMPV6_FILTER_PASSONLY = 0x4
86
+
87
+ sysSizeofKernelSockaddrStorage = 0x80
88
+ sysSizeofSockaddrInet6 = 0x1c
89
+ sysSizeofInet6Pktinfo = 0x14
90
+ sysSizeofIPv6Mtuinfo = 0x20
91
+ sysSizeofIPv6FlowlabelReq = 0x20
92
+
93
+ sysSizeofIPv6Mreq = 0x14
94
+ sysSizeofGroupReq = 0x88
95
+ sysSizeofGroupSourceReq = 0x108
96
+
97
+ sysSizeofICMPv6Filter = 0x20
98
+)
99
+
100
+type sysKernelSockaddrStorage struct {
101
+ Family uint16
102
+ X__data [126]int8
103
+}
104
+
105
+type sysSockaddrInet6 struct {
106
+ Family uint16
107
+ Port uint16
108
+ Flowinfo uint32
109
+ Addr [16]byte /* in6_addr */
110
+ Scope_id uint32
111
+}
112
+
113
+type sysInet6Pktinfo struct {
114
+ Addr [16]byte /* in6_addr */
115
+ Ifindex int32
116
+}
117
+
118
+type sysIPv6Mtuinfo struct {
119
+ Addr sysSockaddrInet6
120
+ Mtu uint32
121
+}
122
+
123
+type sysIPv6FlowlabelReq struct {
124
+ Dst [16]byte /* in6_addr */
125
+ Label uint32
126
+ Action uint8
127
+ Share uint8
128
+ Flags uint16
129
+ Expires uint16
130
+ Linger uint16
131
+ X__flr_pad uint32
132
+}
133
+
134
+type sysIPv6Mreq struct {
135
+ Multiaddr [16]byte /* in6_addr */
136
+ Ifindex int32
137
+}
138
+
139
+type sysGroupReq struct {
140
+ Interface uint32
141
+ Pad_cgo_0 [4]byte
142
+ Group sysKernelSockaddrStorage
143
+}
144
+
145
+type sysGroupSourceReq struct {
146
+ Interface uint32
147
+ Pad_cgo_0 [4]byte
148
+ Group sysKernelSockaddrStorage
149
+ Source sysKernelSockaddrStorage
150
+}
151
+
152
+type sysICMPv6Filter struct {
153
+ Data [8]uint32
154
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/zsys_linux_arm.go
new
+152
@@ -0,0 +1,152 @@
1
+// Created by cgo -godefs - DO NOT EDIT
2
+// cgo -godefs defs_linux.go
3
+
4
+package ipv6
5
+
6
+const (
7
+ sysIPV6_ADDRFORM = 0x1
8
+ sysIPV6_2292PKTINFO = 0x2
9
+ sysIPV6_2292HOPOPTS = 0x3
10
+ sysIPV6_2292DSTOPTS = 0x4
11
+ sysIPV6_2292RTHDR = 0x5
12
+ sysIPV6_2292PKTOPTIONS = 0x6
13
+ sysIPV6_CHECKSUM = 0x7
14
+ sysIPV6_2292HOPLIMIT = 0x8
15
+ sysIPV6_NEXTHOP = 0x9
16
+ sysIPV6_FLOWINFO = 0xb
17
+
18
+ sysIPV6_UNICAST_HOPS = 0x10
19
+ sysIPV6_MULTICAST_IF = 0x11
20
+ sysIPV6_MULTICAST_HOPS = 0x12
21
+ sysIPV6_MULTICAST_LOOP = 0x13
22
+ sysIPV6_ADD_MEMBERSHIP = 0x14
23
+ sysIPV6_DROP_MEMBERSHIP = 0x15
24
+ sysMCAST_JOIN_GROUP = 0x2a
25
+ sysMCAST_LEAVE_GROUP = 0x2d
26
+ sysMCAST_JOIN_SOURCE_GROUP = 0x2e
27
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x2f
28
+ sysMCAST_BLOCK_SOURCE = 0x2b
29
+ sysMCAST_UNBLOCK_SOURCE = 0x2c
30
+ sysMCAST_MSFILTER = 0x30
31
+ sysIPV6_ROUTER_ALERT = 0x16
32
+ sysIPV6_MTU_DISCOVER = 0x17
33
+ sysIPV6_MTU = 0x18
34
+ sysIPV6_RECVERR = 0x19
35
+ sysIPV6_V6ONLY = 0x1a
36
+ sysIPV6_JOIN_ANYCAST = 0x1b
37
+ sysIPV6_LEAVE_ANYCAST = 0x1c
38
+
39
+ sysIPV6_FLOWLABEL_MGR = 0x20
40
+ sysIPV6_FLOWINFO_SEND = 0x21
41
+
42
+ sysIPV6_IPSEC_POLICY = 0x22
43
+ sysIPV6_XFRM_POLICY = 0x23
44
+
45
+ sysIPV6_RECVPKTINFO = 0x31
46
+ sysIPV6_PKTINFO = 0x32
47
+ sysIPV6_RECVHOPLIMIT = 0x33
48
+ sysIPV6_HOPLIMIT = 0x34
49
+ sysIPV6_RECVHOPOPTS = 0x35
50
+ sysIPV6_HOPOPTS = 0x36
51
+ sysIPV6_RTHDRDSTOPTS = 0x37
52
+ sysIPV6_RECVRTHDR = 0x38
53
+ sysIPV6_RTHDR = 0x39
54
+ sysIPV6_RECVDSTOPTS = 0x3a
55
+ sysIPV6_DSTOPTS = 0x3b
56
+ sysIPV6_RECVPATHMTU = 0x3c
57
+ sysIPV6_PATHMTU = 0x3d
58
+ sysIPV6_DONTFRAG = 0x3e
59
+
60
+ sysIPV6_RECVTCLASS = 0x42
61
+ sysIPV6_TCLASS = 0x43
62
+
63
+ sysIPV6_ADDR_PREFERENCES = 0x48
64
+
65
+ sysIPV6_PREFER_SRC_TMP = 0x1
66
+ sysIPV6_PREFER_SRC_PUBLIC = 0x2
67
+ sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100
68
+ sysIPV6_PREFER_SRC_COA = 0x4
69
+ sysIPV6_PREFER_SRC_HOME = 0x400
70
+ sysIPV6_PREFER_SRC_CGA = 0x8
71
+ sysIPV6_PREFER_SRC_NONCGA = 0x800
72
+
73
+ sysIPV6_MINHOPCOUNT = 0x49
74
+
75
+ sysIPV6_ORIGDSTADDR = 0x4a
76
+ sysIPV6_RECVORIGDSTADDR = 0x4a
77
+ sysIPV6_TRANSPARENT = 0x4b
78
+ sysIPV6_UNICAST_IF = 0x4c
79
+
80
+ sysICMPV6_FILTER = 0x1
81
+
82
+ sysICMPV6_FILTER_BLOCK = 0x1
83
+ sysICMPV6_FILTER_PASS = 0x2
84
+ sysICMPV6_FILTER_BLOCKOTHERS = 0x3
85
+ sysICMPV6_FILTER_PASSONLY = 0x4
86
+
87
+ sysSizeofKernelSockaddrStorage = 0x80
88
+ sysSizeofSockaddrInet6 = 0x1c
89
+ sysSizeofInet6Pktinfo = 0x14
90
+ sysSizeofIPv6Mtuinfo = 0x20
91
+ sysSizeofIPv6FlowlabelReq = 0x20
92
+
93
+ sysSizeofIPv6Mreq = 0x14
94
+ sysSizeofGroupReq = 0x84
95
+ sysSizeofGroupSourceReq = 0x104
96
+
97
+ sysSizeofICMPv6Filter = 0x20
98
+)
99
+
100
+type sysKernelSockaddrStorage struct {
101
+ Family uint16
102
+ X__data [126]int8
103
+}
104
+
105
+type sysSockaddrInet6 struct {
106
+ Family uint16
107
+ Port uint16
108
+ Flowinfo uint32
109
+ Addr [16]byte /* in6_addr */
110
+ Scope_id uint32
111
+}
112
+
113
+type sysInet6Pktinfo struct {
114
+ Addr [16]byte /* in6_addr */
115
+ Ifindex int32
116
+}
117
+
118
+type sysIPv6Mtuinfo struct {
119
+ Addr sysSockaddrInet6
120
+ Mtu uint32
121
+}
122
+
123
+type sysIPv6FlowlabelReq struct {
124
+ Dst [16]byte /* in6_addr */
125
+ Label uint32
126
+ Action uint8
127
+ Share uint8
128
+ Flags uint16
129
+ Expires uint16
130
+ Linger uint16
131
+ X__flr_pad uint32
132
+}
133
+
134
+type sysIPv6Mreq struct {
135
+ Multiaddr [16]byte /* in6_addr */
136
+ Ifindex int32
137
+}
138
+
139
+type sysGroupReq struct {
140
+ Interface uint32
141
+ Group sysKernelSockaddrStorage
142
+}
143
+
144
+type sysGroupSourceReq struct {
145
+ Interface uint32
146
+ Group sysKernelSockaddrStorage
147
+ Source sysKernelSockaddrStorage
148
+}
149
+
150
+type sysICMPv6Filter struct {
151
+ Data [8]uint32
152
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/zsys_linux_arm64.go
new
+156
@@ -0,0 +1,156 @@
1
+// Created by cgo -godefs - DO NOT EDIT
2
+// cgo -godefs defs_linux.go
3
+
4
+// +build linux,arm64
5
+
6
+package ipv6
7
+
8
+const (
9
+ sysIPV6_ADDRFORM = 0x1
10
+ sysIPV6_2292PKTINFO = 0x2
11
+ sysIPV6_2292HOPOPTS = 0x3
12
+ sysIPV6_2292DSTOPTS = 0x4
13
+ sysIPV6_2292RTHDR = 0x5
14
+ sysIPV6_2292PKTOPTIONS = 0x6
15
+ sysIPV6_CHECKSUM = 0x7
16
+ sysIPV6_2292HOPLIMIT = 0x8
17
+ sysIPV6_NEXTHOP = 0x9
18
+ sysIPV6_FLOWINFO = 0xb
19
+
20
+ sysIPV6_UNICAST_HOPS = 0x10
21
+ sysIPV6_MULTICAST_IF = 0x11
22
+ sysIPV6_MULTICAST_HOPS = 0x12
23
+ sysIPV6_MULTICAST_LOOP = 0x13
24
+ sysIPV6_ADD_MEMBERSHIP = 0x14
25
+ sysIPV6_DROP_MEMBERSHIP = 0x15
26
+ sysMCAST_JOIN_GROUP = 0x2a
27
+ sysMCAST_LEAVE_GROUP = 0x2d
28
+ sysMCAST_JOIN_SOURCE_GROUP = 0x2e
29
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x2f
30
+ sysMCAST_BLOCK_SOURCE = 0x2b
31
+ sysMCAST_UNBLOCK_SOURCE = 0x2c
32
+ sysMCAST_MSFILTER = 0x30
33
+ sysIPV6_ROUTER_ALERT = 0x16
34
+ sysIPV6_MTU_DISCOVER = 0x17
35
+ sysIPV6_MTU = 0x18
36
+ sysIPV6_RECVERR = 0x19
37
+ sysIPV6_V6ONLY = 0x1a
38
+ sysIPV6_JOIN_ANYCAST = 0x1b
39
+ sysIPV6_LEAVE_ANYCAST = 0x1c
40
+
41
+ sysIPV6_FLOWLABEL_MGR = 0x20
42
+ sysIPV6_FLOWINFO_SEND = 0x21
43
+
44
+ sysIPV6_IPSEC_POLICY = 0x22
45
+ sysIPV6_XFRM_POLICY = 0x23
46
+
47
+ sysIPV6_RECVPKTINFO = 0x31
48
+ sysIPV6_PKTINFO = 0x32
49
+ sysIPV6_RECVHOPLIMIT = 0x33
50
+ sysIPV6_HOPLIMIT = 0x34
51
+ sysIPV6_RECVHOPOPTS = 0x35
52
+ sysIPV6_HOPOPTS = 0x36
53
+ sysIPV6_RTHDRDSTOPTS = 0x37
54
+ sysIPV6_RECVRTHDR = 0x38
55
+ sysIPV6_RTHDR = 0x39
56
+ sysIPV6_RECVDSTOPTS = 0x3a
57
+ sysIPV6_DSTOPTS = 0x3b
58
+ sysIPV6_RECVPATHMTU = 0x3c
59
+ sysIPV6_PATHMTU = 0x3d
60
+ sysIPV6_DONTFRAG = 0x3e
61
+
62
+ sysIPV6_RECVTCLASS = 0x42
63
+ sysIPV6_TCLASS = 0x43
64
+
65
+ sysIPV6_ADDR_PREFERENCES = 0x48
66
+
67
+ sysIPV6_PREFER_SRC_TMP = 0x1
68
+ sysIPV6_PREFER_SRC_PUBLIC = 0x2
69
+ sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100
70
+ sysIPV6_PREFER_SRC_COA = 0x4
71
+ sysIPV6_PREFER_SRC_HOME = 0x400
72
+ sysIPV6_PREFER_SRC_CGA = 0x8
73
+ sysIPV6_PREFER_SRC_NONCGA = 0x800
74
+
75
+ sysIPV6_MINHOPCOUNT = 0x49
76
+
77
+ sysIPV6_ORIGDSTADDR = 0x4a
78
+ sysIPV6_RECVORIGDSTADDR = 0x4a
79
+ sysIPV6_TRANSPARENT = 0x4b
80
+ sysIPV6_UNICAST_IF = 0x4c
81
+
82
+ sysICMPV6_FILTER = 0x1
83
+
84
+ sysICMPV6_FILTER_BLOCK = 0x1
85
+ sysICMPV6_FILTER_PASS = 0x2
86
+ sysICMPV6_FILTER_BLOCKOTHERS = 0x3
87
+ sysICMPV6_FILTER_PASSONLY = 0x4
88
+
89
+ sysSizeofKernelSockaddrStorage = 0x80
90
+ sysSizeofSockaddrInet6 = 0x1c
91
+ sysSizeofInet6Pktinfo = 0x14
92
+ sysSizeofIPv6Mtuinfo = 0x20
93
+ sysSizeofIPv6FlowlabelReq = 0x20
94
+
95
+ sysSizeofIPv6Mreq = 0x14
96
+ sysSizeofGroupReq = 0x88
97
+ sysSizeofGroupSourceReq = 0x108
98
+
99
+ sysSizeofICMPv6Filter = 0x20
100
+)
101
+
102
+type sysKernelSockaddrStorage struct {
103
+ Family uint16
104
+ X__data [126]int8
105
+}
106
+
107
+type sysSockaddrInet6 struct {
108
+ Family uint16
109
+ Port uint16
110
+ Flowinfo uint32
111
+ Addr [16]byte /* in6_addr */
112
+ Scope_id uint32
113
+}
114
+
115
+type sysInet6Pktinfo struct {
116
+ Addr [16]byte /* in6_addr */
117
+ Ifindex int32
118
+}
119
+
120
+type sysIPv6Mtuinfo struct {
121
+ Addr sysSockaddrInet6
122
+ Mtu uint32
123
+}
124
+
125
+type sysIPv6FlowlabelReq struct {
126
+ Dst [16]byte /* in6_addr */
127
+ Label uint32
128
+ Action uint8
129
+ Share uint8
130
+ Flags uint16
131
+ Expires uint16
132
+ Linger uint16
133
+ X__flr_pad uint32
134
+}
135
+
136
+type sysIPv6Mreq struct {
137
+ Multiaddr [16]byte /* in6_addr */
138
+ Ifindex int32
139
+}
140
+
141
+type sysGroupReq struct {
142
+ Interface uint32
143
+ Pad_cgo_0 [4]byte
144
+ Group sysKernelSockaddrStorage
145
+}
146
+
147
+type sysGroupSourceReq struct {
148
+ Interface uint32
149
+ Pad_cgo_0 [4]byte
150
+ Group sysKernelSockaddrStorage
151
+ Source sysKernelSockaddrStorage
152
+}
153
+
154
+type sysICMPv6Filter struct {
155
+ Data [8]uint32
156
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/zsys_linux_ppc64.go
new
+156
@@ -0,0 +1,156 @@
1
+// Created by cgo -godefs - DO NOT EDIT
2
+// cgo -godefs defs_linux.go
3
+
4
+// +build linux,ppc64
5
+
6
+package ipv6
7
+
8
+const (
9
+ sysIPV6_ADDRFORM = 0x1
10
+ sysIPV6_2292PKTINFO = 0x2
11
+ sysIPV6_2292HOPOPTS = 0x3
12
+ sysIPV6_2292DSTOPTS = 0x4
13
+ sysIPV6_2292RTHDR = 0x5
14
+ sysIPV6_2292PKTOPTIONS = 0x6
15
+ sysIPV6_CHECKSUM = 0x7
16
+ sysIPV6_2292HOPLIMIT = 0x8
17
+ sysIPV6_NEXTHOP = 0x9
18
+ sysIPV6_FLOWINFO = 0xb
19
+
20
+ sysIPV6_UNICAST_HOPS = 0x10
21
+ sysIPV6_MULTICAST_IF = 0x11
22
+ sysIPV6_MULTICAST_HOPS = 0x12
23
+ sysIPV6_MULTICAST_LOOP = 0x13
24
+ sysIPV6_ADD_MEMBERSHIP = 0x14
25
+ sysIPV6_DROP_MEMBERSHIP = 0x15
26
+ sysMCAST_JOIN_GROUP = 0x2a
27
+ sysMCAST_LEAVE_GROUP = 0x2d
28
+ sysMCAST_JOIN_SOURCE_GROUP = 0x2e
29
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x2f
30
+ sysMCAST_BLOCK_SOURCE = 0x2b
31
+ sysMCAST_UNBLOCK_SOURCE = 0x2c
32
+ sysMCAST_MSFILTER = 0x30
33
+ sysIPV6_ROUTER_ALERT = 0x16
34
+ sysIPV6_MTU_DISCOVER = 0x17
35
+ sysIPV6_MTU = 0x18
36
+ sysIPV6_RECVERR = 0x19
37
+ sysIPV6_V6ONLY = 0x1a
38
+ sysIPV6_JOIN_ANYCAST = 0x1b
39
+ sysIPV6_LEAVE_ANYCAST = 0x1c
40
+
41
+ sysIPV6_FLOWLABEL_MGR = 0x20
42
+ sysIPV6_FLOWINFO_SEND = 0x21
43
+
44
+ sysIPV6_IPSEC_POLICY = 0x22
45
+ sysIPV6_XFRM_POLICY = 0x23
46
+
47
+ sysIPV6_RECVPKTINFO = 0x31
48
+ sysIPV6_PKTINFO = 0x32
49
+ sysIPV6_RECVHOPLIMIT = 0x33
50
+ sysIPV6_HOPLIMIT = 0x34
51
+ sysIPV6_RECVHOPOPTS = 0x35
52
+ sysIPV6_HOPOPTS = 0x36
53
+ sysIPV6_RTHDRDSTOPTS = 0x37
54
+ sysIPV6_RECVRTHDR = 0x38
55
+ sysIPV6_RTHDR = 0x39
56
+ sysIPV6_RECVDSTOPTS = 0x3a
57
+ sysIPV6_DSTOPTS = 0x3b
58
+ sysIPV6_RECVPATHMTU = 0x3c
59
+ sysIPV6_PATHMTU = 0x3d
60
+ sysIPV6_DONTFRAG = 0x3e
61
+
62
+ sysIPV6_RECVTCLASS = 0x42
63
+ sysIPV6_TCLASS = 0x43
64
+
65
+ sysIPV6_ADDR_PREFERENCES = 0x48
66
+
67
+ sysIPV6_PREFER_SRC_TMP = 0x1
68
+ sysIPV6_PREFER_SRC_PUBLIC = 0x2
69
+ sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100
70
+ sysIPV6_PREFER_SRC_COA = 0x4
71
+ sysIPV6_PREFER_SRC_HOME = 0x400
72
+ sysIPV6_PREFER_SRC_CGA = 0x8
73
+ sysIPV6_PREFER_SRC_NONCGA = 0x800
74
+
75
+ sysIPV6_MINHOPCOUNT = 0x49
76
+
77
+ sysIPV6_ORIGDSTADDR = 0x4a
78
+ sysIPV6_RECVORIGDSTADDR = 0x4a
79
+ sysIPV6_TRANSPARENT = 0x4b
80
+ sysIPV6_UNICAST_IF = 0x4c
81
+
82
+ sysICMPV6_FILTER = 0x1
83
+
84
+ sysICMPV6_FILTER_BLOCK = 0x1
85
+ sysICMPV6_FILTER_PASS = 0x2
86
+ sysICMPV6_FILTER_BLOCKOTHERS = 0x3
87
+ sysICMPV6_FILTER_PASSONLY = 0x4
88
+
89
+ sysSizeofKernelSockaddrStorage = 0x80
90
+ sysSizeofSockaddrInet6 = 0x1c
91
+ sysSizeofInet6Pktinfo = 0x14
92
+ sysSizeofIPv6Mtuinfo = 0x20
93
+ sysSizeofIPv6FlowlabelReq = 0x20
94
+
95
+ sysSizeofIPv6Mreq = 0x14
96
+ sysSizeofGroupReq = 0x88
97
+ sysSizeofGroupSourceReq = 0x108
98
+
99
+ sysSizeofICMPv6Filter = 0x20
100
+)
101
+
102
+type sysKernelSockaddrStorage struct {
103
+ Family uint16
104
+ X__data [126]int8
105
+}
106
+
107
+type sysSockaddrInet6 struct {
108
+ Family uint16
109
+ Port uint16
110
+ Flowinfo uint32
111
+ Addr [16]byte /* in6_addr */
112
+ Scope_id uint32
113
+}
114
+
115
+type sysInet6Pktinfo struct {
116
+ Addr [16]byte /* in6_addr */
117
+ Ifindex int32
118
+}
119
+
120
+type sysIPv6Mtuinfo struct {
121
+ Addr sysSockaddrInet6
122
+ Mtu uint32
123
+}
124
+
125
+type sysIPv6FlowlabelReq struct {
126
+ Dst [16]byte /* in6_addr */
127
+ Label uint32
128
+ Action uint8
129
+ Share uint8
130
+ Flags uint16
131
+ Expires uint16
132
+ Linger uint16
133
+ X__flr_pad uint32
134
+}
135
+
136
+type sysIPv6Mreq struct {
137
+ Multiaddr [16]byte /* in6_addr */
138
+ Ifindex int32
139
+}
140
+
141
+type sysGroupReq struct {
142
+ Interface uint32
143
+ Pad_cgo_0 [4]byte
144
+ Group sysKernelSockaddrStorage
145
+}
146
+
147
+type sysGroupSourceReq struct {
148
+ Interface uint32
149
+ Pad_cgo_0 [4]byte
150
+ Group sysKernelSockaddrStorage
151
+ Source sysKernelSockaddrStorage
152
+}
153
+
154
+type sysICMPv6Filter struct {
155
+ Data [8]uint32
156
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/zsys_linux_ppc64le.go
new
+156
@@ -0,0 +1,156 @@
1
+// Created by cgo -godefs - DO NOT EDIT
2
+// cgo -godefs defs_linux.go
3
+
4
+// +build linux,ppc64le
5
+
6
+package ipv6
7
+
8
+const (
9
+ sysIPV6_ADDRFORM = 0x1
10
+ sysIPV6_2292PKTINFO = 0x2
11
+ sysIPV6_2292HOPOPTS = 0x3
12
+ sysIPV6_2292DSTOPTS = 0x4
13
+ sysIPV6_2292RTHDR = 0x5
14
+ sysIPV6_2292PKTOPTIONS = 0x6
15
+ sysIPV6_CHECKSUM = 0x7
16
+ sysIPV6_2292HOPLIMIT = 0x8
17
+ sysIPV6_NEXTHOP = 0x9
18
+ sysIPV6_FLOWINFO = 0xb
19
+
20
+ sysIPV6_UNICAST_HOPS = 0x10
21
+ sysIPV6_MULTICAST_IF = 0x11
22
+ sysIPV6_MULTICAST_HOPS = 0x12
23
+ sysIPV6_MULTICAST_LOOP = 0x13
24
+ sysIPV6_ADD_MEMBERSHIP = 0x14
25
+ sysIPV6_DROP_MEMBERSHIP = 0x15
26
+ sysMCAST_JOIN_GROUP = 0x2a
27
+ sysMCAST_LEAVE_GROUP = 0x2d
28
+ sysMCAST_JOIN_SOURCE_GROUP = 0x2e
29
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x2f
30
+ sysMCAST_BLOCK_SOURCE = 0x2b
31
+ sysMCAST_UNBLOCK_SOURCE = 0x2c
32
+ sysMCAST_MSFILTER = 0x30
33
+ sysIPV6_ROUTER_ALERT = 0x16
34
+ sysIPV6_MTU_DISCOVER = 0x17
35
+ sysIPV6_MTU = 0x18
36
+ sysIPV6_RECVERR = 0x19
37
+ sysIPV6_V6ONLY = 0x1a
38
+ sysIPV6_JOIN_ANYCAST = 0x1b
39
+ sysIPV6_LEAVE_ANYCAST = 0x1c
40
+
41
+ sysIPV6_FLOWLABEL_MGR = 0x20
42
+ sysIPV6_FLOWINFO_SEND = 0x21
43
+
44
+ sysIPV6_IPSEC_POLICY = 0x22
45
+ sysIPV6_XFRM_POLICY = 0x23
46
+
47
+ sysIPV6_RECVPKTINFO = 0x31
48
+ sysIPV6_PKTINFO = 0x32
49
+ sysIPV6_RECVHOPLIMIT = 0x33
50
+ sysIPV6_HOPLIMIT = 0x34
51
+ sysIPV6_RECVHOPOPTS = 0x35
52
+ sysIPV6_HOPOPTS = 0x36
53
+ sysIPV6_RTHDRDSTOPTS = 0x37
54
+ sysIPV6_RECVRTHDR = 0x38
55
+ sysIPV6_RTHDR = 0x39
56
+ sysIPV6_RECVDSTOPTS = 0x3a
57
+ sysIPV6_DSTOPTS = 0x3b
58
+ sysIPV6_RECVPATHMTU = 0x3c
59
+ sysIPV6_PATHMTU = 0x3d
60
+ sysIPV6_DONTFRAG = 0x3e
61
+
62
+ sysIPV6_RECVTCLASS = 0x42
63
+ sysIPV6_TCLASS = 0x43
64
+
65
+ sysIPV6_ADDR_PREFERENCES = 0x48
66
+
67
+ sysIPV6_PREFER_SRC_TMP = 0x1
68
+ sysIPV6_PREFER_SRC_PUBLIC = 0x2
69
+ sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100
70
+ sysIPV6_PREFER_SRC_COA = 0x4
71
+ sysIPV6_PREFER_SRC_HOME = 0x400
72
+ sysIPV6_PREFER_SRC_CGA = 0x8
73
+ sysIPV6_PREFER_SRC_NONCGA = 0x800
74
+
75
+ sysIPV6_MINHOPCOUNT = 0x49
76
+
77
+ sysIPV6_ORIGDSTADDR = 0x4a
78
+ sysIPV6_RECVORIGDSTADDR = 0x4a
79
+ sysIPV6_TRANSPARENT = 0x4b
80
+ sysIPV6_UNICAST_IF = 0x4c
81
+
82
+ sysICMPV6_FILTER = 0x1
83
+
84
+ sysICMPV6_FILTER_BLOCK = 0x1
85
+ sysICMPV6_FILTER_PASS = 0x2
86
+ sysICMPV6_FILTER_BLOCKOTHERS = 0x3
87
+ sysICMPV6_FILTER_PASSONLY = 0x4
88
+
89
+ sysSizeofKernelSockaddrStorage = 0x80
90
+ sysSizeofSockaddrInet6 = 0x1c
91
+ sysSizeofInet6Pktinfo = 0x14
92
+ sysSizeofIPv6Mtuinfo = 0x20
93
+ sysSizeofIPv6FlowlabelReq = 0x20
94
+
95
+ sysSizeofIPv6Mreq = 0x14
96
+ sysSizeofGroupReq = 0x88
97
+ sysSizeofGroupSourceReq = 0x108
98
+
99
+ sysSizeofICMPv6Filter = 0x20
100
+)
101
+
102
+type sysKernelSockaddrStorage struct {
103
+ Family uint16
104
+ X__data [126]int8
105
+}
106
+
107
+type sysSockaddrInet6 struct {
108
+ Family uint16
109
+ Port uint16
110
+ Flowinfo uint32
111
+ Addr [16]byte /* in6_addr */
112
+ Scope_id uint32
113
+}
114
+
115
+type sysInet6Pktinfo struct {
116
+ Addr [16]byte /* in6_addr */
117
+ Ifindex int32
118
+}
119
+
120
+type sysIPv6Mtuinfo struct {
121
+ Addr sysSockaddrInet6
122
+ Mtu uint32
123
+}
124
+
125
+type sysIPv6FlowlabelReq struct {
126
+ Dst [16]byte /* in6_addr */
127
+ Label uint32
128
+ Action uint8
129
+ Share uint8
130
+ Flags uint16
131
+ Expires uint16
132
+ Linger uint16
133
+ X__flr_pad uint32
134
+}
135
+
136
+type sysIPv6Mreq struct {
137
+ Multiaddr [16]byte /* in6_addr */
138
+ Ifindex int32
139
+}
140
+
141
+type sysGroupReq struct {
142
+ Interface uint32
143
+ Pad_cgo_0 [4]byte
144
+ Group sysKernelSockaddrStorage
145
+}
146
+
147
+type sysGroupSourceReq struct {
148
+ Interface uint32
149
+ Pad_cgo_0 [4]byte
150
+ Group sysKernelSockaddrStorage
151
+ Source sysKernelSockaddrStorage
152
+}
153
+
154
+type sysICMPv6Filter struct {
155
+ Data [8]uint32
156
+}
Godeps/_workspace/src/golang.org/x/net/ipv6/zsys_netbsd.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv6/zsys_openbsd.go
renamed
Godeps/_workspace/src/golang.org/x/net/ipv6/zsys_solaris.go
renamed
p2p/discovery/mdns.go
+1
-1
@@ -9,7 +9,7 @@ import (
9
"sync"
10
"time"
11
12
- "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/hashicorp/mdns"
12
+ "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/cryptix/mdns"
13
ma "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr"
14
manet "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr-net"
15