Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(556)

Delta Between Two Patch Sets: ipv4/sockopt_bsd.go

Issue 6482044: code review 6482044: go.net/ipv4: new package (Closed)
Left Patch Set: diff -r 147c4a6dca9b https://code.google.com/p/go.net Created 12 years, 7 months ago
Right Patch Set: diff -r 2513e9008213 https://code.google.com/p/go.net Created 12 years, 6 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « ipv4/payload.go ('k') | ipv4/sockopt_freebsd.go » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 // Copyright 2012 The Go Authors. All rights reserved. 1 // Copyright 2012 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style 2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file. 3 // license that can be found in the LICENSE file.
4 4
5 // +build darwin freebsd netbsd openbsd 5 // +build darwin freebsd netbsd openbsd
6 6
7 package ipv4 7 package ipv4
8 8
9 import ( 9 import (
10 "net" 10 "net"
11 "os" 11 "os"
12 "syscall" 12 "syscall"
13 ) 13 )
14 14
15 func ipv4MulticastTTL(f *os.File) (int, error) { 15 func ipv4MulticastTTL(fd int) (int, error) {
16 » v, err := syscall.GetsockoptByte(int(f.Fd()), syscall.IPPROTO_IP, syscal l.IP_MULTICAST_TTL) 16 » v, err := syscall.GetsockoptByte(fd, syscall.IPPROTO_IP, syscall.IP_MULT ICAST_TTL)
17 if err != nil { 17 if err != nil {
18 return 0, os.NewSyscallError("getsockopt", err) 18 return 0, os.NewSyscallError("getsockopt", err)
19 } 19 }
20 return int(v), nil 20 return int(v), nil
21 } 21 }
22 22
23 func setIPv4MulticastTTL(f *os.File, v int) error { 23 func setIPv4MulticastTTL(fd int, v int) error {
24 » err := syscall.SetsockoptByte(int(f.Fd()), syscall.IPPROTO_IP, syscall.I P_MULTICAST_TTL, byte(v)) 24 » err := syscall.SetsockoptByte(fd, syscall.IPPROTO_IP, syscall.IP_MULTICA ST_TTL, byte(v))
25 if err != nil { 25 if err != nil {
26 return os.NewSyscallError("setsockopt", err) 26 return os.NewSyscallError("setsockopt", err)
27 } 27 }
28 return nil 28 return nil
29 } 29 }
30 30
31 func ipv4ReceiveDestinationAddress(f *os.File) (bool, error) { 31 func ipv4ReceiveDestinationAddress(fd int) (bool, error) {
32 » v, err := syscall.GetsockoptInt(int(f.Fd()), syscall.IPPROTO_IP, syscall .IP_RECVDSTADDR) 32 » v, err := syscall.GetsockoptInt(fd, syscall.IPPROTO_IP, syscall.IP_RECVD STADDR)
33 if err != nil { 33 if err != nil {
34 return false, os.NewSyscallError("getsockopt", err) 34 return false, os.NewSyscallError("getsockopt", err)
35 } 35 }
36 return v == 1, nil 36 return v == 1, nil
37 } 37 }
38 38
39 func setIPv4ReceiveDestinationAddress(f *os.File, v bool) error { 39 func setIPv4ReceiveDestinationAddress(fd int, v bool) error {
40 » err := syscall.SetsockoptInt(int(f.Fd()), syscall.IPPROTO_IP, syscall.IP _RECVDSTADDR, boolint(v)) 40 » err := syscall.SetsockoptInt(fd, syscall.IPPROTO_IP, syscall.IP_RECVDSTA DDR, boolint(v))
41 if err != nil { 41 if err != nil {
42 return os.NewSyscallError("setsockopt", err) 42 return os.NewSyscallError("setsockopt", err)
43 } 43 }
44 return nil 44 return nil
45 } 45 }
46 46
47 func ipv4ReceiveInterface(f *os.File) (bool, error) { 47 func ipv4ReceiveInterface(fd int) (bool, error) {
48 » v, err := syscall.GetsockoptInt(int(f.Fd()), syscall.IPPROTO_IP, syscall .IP_RECVIF) 48 » v, err := syscall.GetsockoptInt(fd, syscall.IPPROTO_IP, syscall.IP_RECVI F)
49 if err != nil { 49 if err != nil {
50 return false, os.NewSyscallError("getsockopt", err) 50 return false, os.NewSyscallError("getsockopt", err)
51 } 51 }
52 return v == 1, nil 52 return v == 1, nil
53 } 53 }
54 54
55 func setIPv4ReceiveInterface(f *os.File, v bool) error { 55 func setIPv4ReceiveInterface(fd int, v bool) error {
56 » err := syscall.SetsockoptInt(int(f.Fd()), syscall.IPPROTO_IP, syscall.IP _RECVIF, boolint(v)) 56 » err := syscall.SetsockoptInt(fd, syscall.IPPROTO_IP, syscall.IP_RECVIF, boolint(v))
57 if err != nil { 57 if err != nil {
58 return os.NewSyscallError("setsockopt", err) 58 return os.NewSyscallError("setsockopt", err)
59 } 59 }
60 return nil 60 return nil
61 } 61 }
62 62
63 func ipv4MulticastInterface(f *os.File) (*net.Interface, error) { 63 func ipv4MulticastInterface(fd int) (*net.Interface, error) {
64 » a, err := syscall.GetsockoptInet4Addr(int(f.Fd()), syscall.IPPROTO_IP, s yscall.IP_MULTICAST_IF) 64 » a, err := syscall.GetsockoptInet4Addr(fd, syscall.IPPROTO_IP, syscall.IP _MULTICAST_IF)
65 if err != nil { 65 if err != nil {
66 return nil, os.NewSyscallError("getsockopt", err) 66 return nil, os.NewSyscallError("getsockopt", err)
67 } 67 }
68 return netIP4ToInterface(net.IPv4(a[0], a[1], a[2], a[3])) 68 return netIP4ToInterface(net.IPv4(a[0], a[1], a[2], a[3]))
69 } 69 }
70 70
71 func setIPv4MulticastInterface(f *os.File, ifi *net.Interface) error { 71 func setIPv4MulticastInterface(fd int, ifi *net.Interface) error {
72 ip, err := netInterfaceToIP4(ifi) 72 ip, err := netInterfaceToIP4(ifi)
73 if err != nil { 73 if err != nil {
74 return os.NewSyscallError("setsockopt", err) 74 return os.NewSyscallError("setsockopt", err)
75 } 75 }
76 » var x [4]byte 76 » var a [4]byte
77 » copy(x[:], ip.To4()) 77 » copy(a[:], ip.To4())
78 » err = syscall.SetsockoptInet4Addr(int(f.Fd()), syscall.IPPROTO_IP, sysca ll.IP_MULTICAST_IF, x) 78 » err = syscall.SetsockoptInet4Addr(fd, syscall.IPPROTO_IP, syscall.IP_MUL TICAST_IF, a)
79 if err != nil { 79 if err != nil {
80 return os.NewSyscallError("setsockopt", err) 80 return os.NewSyscallError("setsockopt", err)
81 } 81 }
82 return nil 82 return nil
83 } 83 }
dave_cheney.net 2012/09/03 11:04:47 Same as below.
84 84
85 func ipv4MulticastLoopback(f *os.File) (bool, error) { 85 func ipv4MulticastLoopback(fd int) (bool, error) {
86 » v, err := syscall.GetsockoptByte(int(f.Fd()), syscall.IPPROTO_IP, syscal l.IP_MULTICAST_LOOP) 86 » v, err := syscall.GetsockoptByte(fd, syscall.IPPROTO_IP, syscall.IP_MULT ICAST_LOOP)
87 if err != nil { 87 if err != nil {
88 return false, os.NewSyscallError("getsockopt", err) 88 return false, os.NewSyscallError("getsockopt", err)
89 } 89 }
90 return v == 1, nil 90 return v == 1, nil
91 } 91 }
92 92
93 func setIPv4MulticastLoopback(f *os.File, v bool) error { 93 func setIPv4MulticastLoopback(fd int, v bool) error {
94 » err := syscall.SetsockoptByte(int(f.Fd()), syscall.IPPROTO_IP, syscall.I P_MULTICAST_LOOP, byte(boolint(v))) 94 » err := syscall.SetsockoptByte(fd, syscall.IPPROTO_IP, syscall.IP_MULTICA ST_LOOP, byte(boolint(v)))
95 if err != nil { 95 if err != nil {
96 return os.NewSyscallError("setsockopt", err) 96 return os.NewSyscallError("setsockopt", err)
97 } 97 }
98 return nil 98 return nil
dave_cheney.net 2012/09/03 11:04:47 A version of this function exists in http://codere
mikio 2012/09/05 03:50:56 My guess is that both fd.incref/decref are just fo
99 } 99 }
100 100
101 func joinIPv4Group(f *os.File, ifi *net.Interface, grp net.IP) error { 101 func joinIPv4Group(fd int, ifi *net.Interface, grp net.IP) error {
102 mreq := &syscall.IPMreq{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp[3 ]}} 102 mreq := &syscall.IPMreq{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp[3 ]}}
103 if err := setSyscallIPMreq(mreq, ifi); err != nil { 103 if err := setSyscallIPMreq(mreq, ifi); err != nil {
104 return err 104 return err
105 } 105 }
106 » err := syscall.SetsockoptIPMreq(int(f.Fd()), syscall.IPPROTO_IP, syscall .IP_ADD_MEMBERSHIP, mreq) 106 » err := syscall.SetsockoptIPMreq(fd, syscall.IPPROTO_IP, syscall.IP_ADD_M EMBERSHIP, mreq)
107 if err != nil { 107 if err != nil {
108 return os.NewSyscallError("setsockopt", err) 108 return os.NewSyscallError("setsockopt", err)
109 } 109 }
110 return nil 110 return nil
111 } 111 }
112 112
113 func leaveIPv4Group(f *os.File, ifi *net.Interface, grp net.IP) error { 113 func leaveIPv4Group(fd int, ifi *net.Interface, grp net.IP) error {
114 mreq := &syscall.IPMreq{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp[3 ]}} 114 mreq := &syscall.IPMreq{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp[3 ]}}
115 if err := setSyscallIPMreq(mreq, ifi); err != nil { 115 if err := setSyscallIPMreq(mreq, ifi); err != nil {
116 return err 116 return err
117 } 117 }
118 » err := syscall.SetsockoptIPMreq(int(f.Fd()), syscall.IPPROTO_IP, syscall .IP_DROP_MEMBERSHIP, mreq) 118 » err := syscall.SetsockoptIPMreq(fd, syscall.IPPROTO_IP, syscall.IP_DROP_ MEMBERSHIP, mreq)
119 if err != nil { 119 if err != nil {
120 return os.NewSyscallError("setsockopt", err) 120 return os.NewSyscallError("setsockopt", err)
121 } 121 }
122 return nil 122 return nil
123 } 123 }
LEFTRIGHT

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b