OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgo/] [go/] [net/] [sockoptip_linux.go] - Blame information for rev 747

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 747 jeremybenn
// Copyright 2011 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
// IP-level socket options for Linux
6
 
7
package net
8
 
9
import (
10
        "os"
11
        "syscall"
12
)
13
 
14
func ipv4MulticastInterface(fd *netFD) (*Interface, error) {
15
        fd.incref()
16
        defer fd.decref()
17
        mreq, err := syscall.GetsockoptIPMreqn(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_IF)
18
        if err != nil {
19
                return nil, os.NewSyscallError("getsockopt", err)
20
        }
21
        if int(mreq.Ifindex) == 0 {
22
                return nil, nil
23
        }
24
        return InterfaceByIndex(int(mreq.Ifindex))
25
}
26
 
27
func setIPv4MulticastInterface(fd *netFD, ifi *Interface) error {
28
        var v int32
29
        if ifi != nil {
30
                v = int32(ifi.Index)
31
        }
32
        mreq := &syscall.IPMreqn{Ifindex: v}
33
        fd.incref()
34
        defer fd.decref()
35
        err := syscall.SetsockoptIPMreqn(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_IF, mreq)
36
        if err != nil {
37
                return os.NewSyscallError("setsockopt", err)
38
        }
39
        return nil
40
}
41
 
42
func ipv4MulticastTTL(fd *netFD) (int, error) {
43
        fd.incref()
44
        defer fd.decref()
45
        v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_TTL)
46
        if err != nil {
47
                return -1, os.NewSyscallError("getsockopt", err)
48
        }
49
        return v, nil
50
}
51
 
52
func setIPv4MulticastTTL(fd *netFD, v int) error {
53
        fd.incref()
54
        defer fd.decref()
55
        err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_TTL, v)
56
        if err != nil {
57
                return os.NewSyscallError("setsockopt", err)
58
        }
59
        return nil
60
}
61
 
62
func ipv4MulticastLoopback(fd *netFD) (bool, error) {
63
        fd.incref()
64
        defer fd.decref()
65
        v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_LOOP)
66
        if err != nil {
67
                return false, os.NewSyscallError("getsockopt", err)
68
        }
69
        return v == 1, nil
70
}
71
 
72
func setIPv4MulticastLoopback(fd *netFD, v bool) error {
73
        fd.incref()
74
        defer fd.decref()
75
        err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_LOOP, boolint(v))
76
        if err != nil {
77
                return os.NewSyscallError("setsockopt", err)
78
        }
79
        return nil
80
}
81
 
82
func ipv4ReceiveInterface(fd *netFD) (bool, error) {
83
        fd.incref()
84
        defer fd.decref()
85
        v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_PKTINFO)
86
        if err != nil {
87
                return false, os.NewSyscallError("getsockopt", err)
88
        }
89
        return v == 1, nil
90
}
91
 
92
func setIPv4ReceiveInterface(fd *netFD, v bool) error {
93
        fd.incref()
94
        defer fd.decref()
95
        err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_PKTINFO, boolint(v))
96
        if err != nil {
97
                return os.NewSyscallError("setsockopt", err)
98
        }
99
        return nil
100
}
101
 
102
func ipv6TrafficClass(fd *netFD) (int, error) {
103
        fd.incref()
104
        defer fd.decref()
105
        v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IPV6, syscall.IPV6_TCLASS)
106
        if err != nil {
107
                return -1, os.NewSyscallError("getsockopt", err)
108
        }
109
        return v, nil
110
}
111
 
112
func setIPv6TrafficClass(fd *netFD, v int) error {
113
        fd.incref()
114
        defer fd.decref()
115
        err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IPV6, syscall.IPV6_TCLASS, v)
116
        if err != nil {
117
                return os.NewSyscallError("setsockopt", err)
118
        }
119
        return nil
120
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.