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

Side by Side Diff: ipv4/sockopt_linux.go

Issue 6482044: code review 6482044: go.net/ipv4: new package (Closed)
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:
View unified diff | Download patch
« no previous file with comments | « ipv4/sockopt_freebsd.go ('k') | ipv4/sockopt_plan9.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
6
7 import (
8 "net"
9 "os"
10 "syscall"
11 )
12
13 func ipv4ReceiveTOS(fd int) (bool, error) {
14 v, err := syscall.GetsockoptInt(fd, syscall.IPPROTO_IP, syscall.IP_RECVT OS)
15 if err != nil {
16 return false, os.NewSyscallError("getsockopt", err)
17 }
18 return v == 1, nil
19 }
20
21 func setIPv4ReceiveTOS(fd int, v bool) error {
22 err := syscall.SetsockoptInt(fd, syscall.IPPROTO_IP, syscall.IP_RECVTOS, boolint(v))
23 if err != nil {
24 return os.NewSyscallError("setsockopt", err)
25 }
26 return nil
27 }
28
29 func ipv4MulticastTTL(fd int) (int, error) {
30 v, err := syscall.GetsockoptInt(fd, syscall.IPPROTO_IP, syscall.IP_MULTI CAST_TTL)
31 if err != nil {
32 return 0, os.NewSyscallError("getsockopt", err)
33 }
34 return v, nil
35 }
36
37 func setIPv4MulticastTTL(fd int, v int) error {
38 err := syscall.SetsockoptInt(fd, syscall.IPPROTO_IP, syscall.IP_MULTICAS T_TTL, v)
39 if err != nil {
40 return os.NewSyscallError("setsockopt", err)
41 }
42 return nil
43 }
44
45 func ipv4PacketInfo(fd int) (bool, error) {
46 v, err := syscall.GetsockoptInt(fd, syscall.IPPROTO_IP, syscall.IP_PKTIN FO)
47 if err != nil {
48 return false, os.NewSyscallError("getsockopt", err)
49 }
50 return v == 1, nil
51 }
52
53 func setIPv4PacketInfo(fd int, v bool) error {
54 err := syscall.SetsockoptInt(fd, syscall.IPPROTO_IP, syscall.IP_PKTINFO, boolint(v))
55 if err != nil {
56 return os.NewSyscallError("setsockopt", err)
57 }
58 return nil
59 }
60
61 func ipv4MulticastInterface(fd int) (*net.Interface, error) {
62 mreqn, err := syscall.GetsockoptIPMreqn(fd, syscall.IPPROTO_IP, syscall. IP_MULTICAST_IF)
63 if err != nil {
64 return nil, os.NewSyscallError("getsockopt", err)
65 }
66 if int(mreqn.Ifindex) == 0 {
67 return nil, nil
68 }
69 return net.InterfaceByIndex(int(mreqn.Ifindex))
70 }
71
72 func setIPv4MulticastInterface(fd int, ifi *net.Interface) error {
73 mreqn := &syscall.IPMreqn{}
74 if ifi != nil {
75 mreqn.Ifindex = int32(ifi.Index)
76 }
77 err := syscall.SetsockoptIPMreqn(fd, syscall.IPPROTO_IP, syscall.IP_MULT ICAST_IF, mreqn)
78 if err != nil {
79 return os.NewSyscallError("setsockopt", err)
80 }
81 return nil
82 }
83
84 func ipv4MulticastLoopback(fd int) (bool, error) {
85 v, err := syscall.GetsockoptInt(fd, syscall.IPPROTO_IP, syscall.IP_MULTI CAST_LOOP)
86 if err != nil {
87 return false, os.NewSyscallError("getsockopt", err)
88 }
89 return v == 1, nil
90 }
91
92 func setIPv4MulticastLoopback(fd int, v bool) error {
93 err := syscall.SetsockoptInt(fd, syscall.IPPROTO_IP, syscall.IP_MULTICAS T_LOOP, boolint(v))
94 if err != nil {
95 return os.NewSyscallError("setsockopt", err)
96 }
97 return nil
98 }
99
100 func joinIPv4Group(fd int, ifi *net.Interface, grp net.IP) error {
101 mreqn := &syscall.IPMreqn{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp [3]}}
102 if ifi != nil {
103 mreqn.Ifindex = int32(ifi.Index)
104 }
105 err := syscall.SetsockoptIPMreqn(fd, syscall.IPPROTO_IP, syscall.IP_ADD_ MEMBERSHIP, mreqn)
106 if err != nil {
107 return os.NewSyscallError("setsockopt", err)
108 }
109 return nil
110 }
111
112 func leaveIPv4Group(fd int, ifi *net.Interface, grp net.IP) error {
113 mreqn := &syscall.IPMreqn{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp [3]}}
114 if ifi != nil {
115 mreqn.Ifindex = int32(ifi.Index)
116 }
117 err := syscall.SetsockoptIPMreqn(fd, syscall.IPPROTO_IP, syscall.IP_DROP _MEMBERSHIP, mreqn)
118 if err != nil {
119 return os.NewSyscallError("setsockopt", err)
120 }
121 return nil
122 }
OLDNEW
« no previous file with comments | « ipv4/sockopt_freebsd.go ('k') | ipv4/sockopt_plan9.go » ('j') | no next file with comments »

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