1// Copyright 2013 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
5package ipv6
6
7// TrafficClass returns the traffic class field value for outgoing
8// packets.
9func (c *genericOpt) TrafficClass() (int, error) {
10	if !c.ok() {
11		return 0, errInvalidConn
12	}
13	so, ok := sockOpts[ssoTrafficClass]
14	if !ok {
15		return 0, errNotImplemented
16	}
17	return so.GetInt(c.Conn)
18}
19
20// SetTrafficClass sets the traffic class field value for future
21// outgoing packets.
22func (c *genericOpt) SetTrafficClass(tclass int) error {
23	if !c.ok() {
24		return errInvalidConn
25	}
26	so, ok := sockOpts[ssoTrafficClass]
27	if !ok {
28		return errNotImplemented
29	}
30	return so.SetInt(c.Conn, tclass)
31}
32
33// HopLimit returns the hop limit field value for outgoing packets.
34func (c *genericOpt) HopLimit() (int, error) {
35	if !c.ok() {
36		return 0, errInvalidConn
37	}
38	so, ok := sockOpts[ssoHopLimit]
39	if !ok {
40		return 0, errNotImplemented
41	}
42	return so.GetInt(c.Conn)
43}
44
45// SetHopLimit sets the hop limit field value for future outgoing
46// packets.
47func (c *genericOpt) SetHopLimit(hoplim int) error {
48	if !c.ok() {
49		return errInvalidConn
50	}
51	so, ok := sockOpts[ssoHopLimit]
52	if !ok {
53		return errNotImplemented
54	}
55	return so.SetInt(c.Conn, hoplim)
56}
57