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

Delta Between Two Patch Sets: ipv4/sockopt_linux.go

Issue 97800043: code review 97800043: go.net/ipv4: add support for dragonfly (Closed)
Left Patch Set: diff -r 424a15ce8b2f https://code.google.com/p/go.net Created 9 years, 11 months ago
Right Patch Set: diff -r 9c33002573cb https://code.google.com/p/go.net Created 9 years, 10 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/sockopt_freebsd.go ('k') | ipv4/sockopt_mreq.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 package ipv4 5 package ipv4
6 6
7 import ( 7 import (
8 "net" 8 "net"
9 "os" 9 "os"
10 » "unsafe" 10 » "syscall"
11 ) 11 )
12 12
13 func ipv4ReceiveTOS(fd int) (bool, error) { 13 func ipv4ReceiveTOS(fd int) (bool, error) {
14 » var v int32 14 » v, err := syscall.GetsockoptInt(fd, ianaProtocolIP, sysSockoptReceiveTOS )
15 » l := sysSockoptLen(4) 15 » if err != nil {
16 » if err := getsockopt(fd, ianaProtocolIP, sysSockoptReceiveTOS, unsafe.Po inter(&v), &l); err != nil {
17 return false, os.NewSyscallError("getsockopt", err) 16 return false, os.NewSyscallError("getsockopt", err)
18 } 17 }
19 return v == 1, nil 18 return v == 1, nil
20 } 19 }
21 20
22 func setIPv4ReceiveTOS(fd int, v bool) error { 21 func setIPv4ReceiveTOS(fd int, v bool) error {
23 » vv := int32(boolint(v)) 22 » return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaPr otocolIP, sysSockoptReceiveTOS, boolint(v)))
24 » return os.NewSyscallError("setsockopt", setsockopt(fd, ianaProtocolIP, s ysSockoptReceiveTOS, unsafe.Pointer(&vv), 4))
25 } 23 }
26 24
27 func ipv4MulticastTTL(fd int) (int, error) { 25 func ipv4MulticastTTL(fd int) (int, error) {
28 » var v int32 26 » v, err := syscall.GetsockoptInt(fd, ianaProtocolIP, sysSockoptMulticastT TL)
29 » l := sysSockoptLen(4) 27 » if err != nil {
30 » if err := getsockopt(fd, ianaProtocolIP, sysSockoptMulticastTTL, unsafe. Pointer(&v), &l); err != nil {
31 return 0, os.NewSyscallError("getsockopt", err) 28 return 0, os.NewSyscallError("getsockopt", err)
32 } 29 }
33 » return int(v), nil 30 » return v, nil
34 } 31 }
35 32
36 func setIPv4MulticastTTL(fd int, v int) error { 33 func setIPv4MulticastTTL(fd int, v int) error {
37 » vv := int32(v) 34 » return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaPr otocolIP, sysSockoptMulticastTTL, v))
38 » return os.NewSyscallError("setsockopt", setsockopt(fd, ianaProtocolIP, s ysSockoptMulticastTTL, unsafe.Pointer(&vv), 4))
39 }
40
41 func ipv4PacketInfo(fd int) (bool, error) {
42 » var v int32
43 » l := sysSockoptLen(4)
44 » if err := getsockopt(fd, ianaProtocolIP, sysSockoptPacketInfo, unsafe.Po inter(&v), &l); err != nil {
45 » » return false, os.NewSyscallError("getsockopt", err)
46 » }
47 » return v == 1, nil
48 }
49
50 func setIPv4PacketInfo(fd int, v bool) error {
51 » vv := int32(boolint(v))
52 » return os.NewSyscallError("setsockopt", setsockopt(fd, ianaProtocolIP, s ysSockoptPacketInfo, unsafe.Pointer(&vv), 4))
53 } 35 }
54 36
55 func ipv4MulticastInterface(fd int) (*net.Interface, error) { 37 func ipv4MulticastInterface(fd int) (*net.Interface, error) {
56 » var mreq sysNewMulticastReq 38 » mreqn, err := syscall.GetsockoptIPMreqn(fd, ianaProtocolIP, sysSockoptMu lticastInterface)
57 » l := sysSockoptLen(sysSizeofNewMulticastReq) 39 » if err != nil {
58 » if err := getsockopt(fd, ianaProtocolIP, sysSockoptMulticastInterface, u nsafe.Pointer(&mreq), &l); err != nil {
59 return nil, os.NewSyscallError("getsockopt", err) 40 return nil, os.NewSyscallError("getsockopt", err)
60 } 41 }
61 » if mreq.IfIndex == 0 { 42 » if mreqn.Ifindex == 0 {
62 return nil, nil 43 return nil, nil
63 } 44 }
64 » return net.InterfaceByIndex(int(mreq.IfIndex)) 45 » return net.InterfaceByIndex(int(mreqn.Ifindex))
65 } 46 }
66 47
67 func setIPv4MulticastInterface(fd int, ifi *net.Interface) error { 48 func setIPv4MulticastInterface(fd int, ifi *net.Interface) error {
68 » var mreq sysNewMulticastReq 49 » var mreqn syscall.IPMreqn
69 if ifi != nil { 50 if ifi != nil {
70 » » mreq.IfIndex = int32(ifi.Index) 51 » » mreqn.Ifindex = int32(ifi.Index)
71 } 52 }
72 » return os.NewSyscallError("setsockopt", setsockopt(fd, ianaProtocolIP, s ysSockoptMulticastInterface, unsafe.Pointer(&mreq), sysSizeofNewMulticastReq)) 53 » return os.NewSyscallError("setsockopt", syscall.SetsockoptIPMreqn(fd, ia naProtocolIP, sysSockoptMulticastInterface, &mreqn))
73 } 54 }
74 55
75 func ipv4MulticastLoopback(fd int) (bool, error) { 56 func ipv4MulticastLoopback(fd int) (bool, error) {
76 » var v int32 57 » v, err := syscall.GetsockoptInt(fd, ianaProtocolIP, sysSockoptMulticastL oopback)
77 » l := sysSockoptLen(4) 58 » if err != nil {
78 » if err := getsockopt(fd, ianaProtocolIP, sysSockoptMulticastLoopback, un safe.Pointer(&v), &l); err != nil {
79 return false, os.NewSyscallError("getsockopt", err) 59 return false, os.NewSyscallError("getsockopt", err)
80 } 60 }
81 return v == 1, nil 61 return v == 1, nil
82 } 62 }
83 63
84 func setIPv4MulticastLoopback(fd int, v bool) error { 64 func setIPv4MulticastLoopback(fd int, v bool) error {
85 » vv := int32(boolint(v)) 65 » return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaPr otocolIP, sysSockoptMulticastLoopback, boolint(v)))
86 » return os.NewSyscallError("setsockopt", setsockopt(fd, ianaProtocolIP, s ysSockoptMulticastLoopback, unsafe.Pointer(&vv), 4))
87 } 66 }
88
89 func joinIPv4Group(fd int, ifi *net.Interface, grp net.IP) error {
90 mreq := sysNewMulticastReq{IP: [4]byte{grp[0], grp[1], grp[2], grp[3]}}
91 if ifi != nil {
92 mreq.IfIndex = int32(ifi.Index)
93 }
94 return os.NewSyscallError("setsockopt", setsockopt(fd, ianaProtocolIP, s ysSockoptJoinGroup, unsafe.Pointer(&mreq), sysSizeofNewMulticastReq))
95 }
96
97 func leaveIPv4Group(fd int, ifi *net.Interface, grp net.IP) error {
98 mreq := sysNewMulticastReq{IP: [4]byte{grp[0], grp[1], grp[2], grp[3]}}
99 if ifi != nil {
100 mreq.IfIndex = int32(ifi.Index)
101 }
102 return os.NewSyscallError("setsockopt", setsockopt(fd, ianaProtocolIP, s ysSockoptLeaveGroup, unsafe.Pointer(&mreq), sysSizeofNewMulticastReq))
103 }
LEFTRIGHT

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