talos
80 строк · 2.2 Кб
1// This Source Code Form is subject to the terms of the Mozilla Public
2// License, v. 2.0. If a copy of the MPL was not distributed with this
3// file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
5package nethelpers
6
7import (
8"strings"
9)
10
11// LinkFlags is a bitmask of LinkFlags.
12type LinkFlags uint32
13
14func (flags LinkFlags) String() string {
15var values []string
16
17for flag := LinkUp; flag <= LinkEcho; flag <<= 1 {
18if (LinkFlag(flags) & flag) == flag {
19values = append(values, flag.String())
20}
21}
22
23return strings.Join(values, ",")
24}
25
26// LinkFlagsString parses string representation of LinkFlags.
27func LinkFlagsString(s string) (LinkFlags, error) {
28flags := LinkFlags(0)
29
30for _, p := range strings.Split(s, ",") {
31flag, err := LinkFlagString(p)
32if err != nil {
33return flags, err
34}
35
36flags |= LinkFlags(flag)
37}
38
39return flags, nil
40}
41
42// MarshalText implements text.Marshaler.
43func (flags LinkFlags) MarshalText() ([]byte, error) {
44return []byte(flags.String()), nil
45}
46
47// UnmarshalText implements text.Unmarshaler.
48func (flags *LinkFlags) UnmarshalText(b []byte) error {
49var err error
50
51*flags, err = LinkFlagsString(string(b))
52
53return err
54}
55
56// LinkFlag wraps IFF_* constants.
57type LinkFlag uint32
58
59// LinkFlag constants.
60const (
61LinkUp LinkFlag = 1 << iota // UP
62LinkBroadcast // BROADCAST
63LinkDebug // DEBUG
64LinkLoopback // LOOPBACK
65LinkPointToPoint // POINTTOPOINT
66LinkNoTrailers // NOTRAILERS
67LinkRunning // RUNNING
68LinkNoArp // NOARP
69LinkPromisc // PROMISC
70LinkAllMulti // ALLMULTI
71LinkMaster // MASTER
72LinkSlave // SLAVE
73LinkMulticase // MULTICAST
74LinkPortsel // PORTSEL
75LinKAutoMedia // AUTOMEDIA
76LinkDynamic // DYNAMIC
77LinkLowerUp // LOWER_UP
78LinkDormant // DORMANT
79LinkEcho // ECHO
80)
81