blob: 58168b737df0ce5758d08ad766620f4cdb0819b9 [file] [log] [blame]
Dmitri Shuralyov5d997792016-11-07 15:05:57 -08001// Copyright 2012 The Go Authors. All rights reserved.
Mikio Harad2e5a122012-09-26 21:03:09 +09002// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
Mikio Harac8c327c2016-10-03 18:44:56 +09005// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
Mikio Harad2e5a122012-09-26 21:03:09 +09006
7package ipv4
8
Mikio Hara76252772016-08-25 06:13:12 +09009import (
10 "syscall"
11
12 "golang.org/x/net/internal/netreflect"
13)
Mikio Harad2e5a122012-09-26 21:03:09 +090014
15// TOS returns the type-of-service field value for outgoing packets.
16func (c *genericOpt) TOS() (int, error) {
17 if !c.ok() {
18 return 0, syscall.EINVAL
19 }
Mikio Hara76252772016-08-25 06:13:12 +090020 s, err := netreflect.SocketOf(c.Conn)
Mikio Harad2e5a122012-09-26 21:03:09 +090021 if err != nil {
22 return 0, err
23 }
Mikio Hara76252772016-08-25 06:13:12 +090024 return getInt(s, &sockOpts[ssoTOS])
Mikio Harad2e5a122012-09-26 21:03:09 +090025}
26
27// SetTOS sets the type-of-service field value for future outgoing
28// packets.
29func (c *genericOpt) SetTOS(tos int) error {
30 if !c.ok() {
31 return syscall.EINVAL
32 }
Mikio Hara76252772016-08-25 06:13:12 +090033 s, err := netreflect.SocketOf(c.Conn)
Mikio Harad2e5a122012-09-26 21:03:09 +090034 if err != nil {
35 return err
36 }
Mikio Hara76252772016-08-25 06:13:12 +090037 return setInt(s, &sockOpts[ssoTOS], tos)
Mikio Harad2e5a122012-09-26 21:03:09 +090038}
39
40// TTL returns the time-to-live field value for outgoing packets.
41func (c *genericOpt) TTL() (int, error) {
42 if !c.ok() {
43 return 0, syscall.EINVAL
44 }
Mikio Hara76252772016-08-25 06:13:12 +090045 s, err := netreflect.SocketOf(c.Conn)
Mikio Harad2e5a122012-09-26 21:03:09 +090046 if err != nil {
47 return 0, err
48 }
Mikio Hara76252772016-08-25 06:13:12 +090049 return getInt(s, &sockOpts[ssoTTL])
Mikio Harad2e5a122012-09-26 21:03:09 +090050}
51
52// SetTTL sets the time-to-live field value for future outgoing
53// packets.
54func (c *genericOpt) SetTTL(ttl int) error {
55 if !c.ok() {
56 return syscall.EINVAL
57 }
Mikio Hara76252772016-08-25 06:13:12 +090058 s, err := netreflect.SocketOf(c.Conn)
Mikio Harad2e5a122012-09-26 21:03:09 +090059 if err != nil {
60 return err
61 }
Mikio Hara76252772016-08-25 06:13:12 +090062 return setInt(s, &sockOpts[ssoTTL], ttl)
Mikio Harad2e5a122012-09-26 21:03:09 +090063}