@cryptotaxi247 / kubo / commits / 13a7d27b4

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