talos

Форк
0
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

5
package nethelpers
6

7
import (
8
	"strings"
9
)
10

11
// LinkFlags is a bitmask of LinkFlags.
12
type LinkFlags uint32
13

14
func (flags LinkFlags) String() string {
15
	var values []string
16

17
	for flag := LinkUp; flag <= LinkEcho; flag <<= 1 {
18
		if (LinkFlag(flags) & flag) == flag {
19
			values = append(values, flag.String())
20
		}
21
	}
22

23
	return strings.Join(values, ",")
24
}
25

26
// LinkFlagsString parses string representation of LinkFlags.
27
func LinkFlagsString(s string) (LinkFlags, error) {
28
	flags := LinkFlags(0)
29

30
	for _, p := range strings.Split(s, ",") {
31
		flag, err := LinkFlagString(p)
32
		if err != nil {
33
			return flags, err
34
		}
35

36
		flags |= LinkFlags(flag)
37
	}
38

39
	return flags, nil
40
}
41

42
// MarshalText implements text.Marshaler.
43
func (flags LinkFlags) MarshalText() ([]byte, error) {
44
	return []byte(flags.String()), nil
45
}
46

47
// UnmarshalText implements text.Unmarshaler.
48
func (flags *LinkFlags) UnmarshalText(b []byte) error {
49
	var err error
50

51
	*flags, err = LinkFlagsString(string(b))
52

53
	return err
54
}
55

56
// LinkFlag wraps IFF_* constants.
57
type LinkFlag uint32
58

59
// LinkFlag constants.
60
const (
61
	LinkUp           LinkFlag = 1 << iota // UP
62
	LinkBroadcast                         // BROADCAST
63
	LinkDebug                             // DEBUG
64
	LinkLoopback                          // LOOPBACK
65
	LinkPointToPoint                      // POINTTOPOINT
66
	LinkNoTrailers                        // NOTRAILERS
67
	LinkRunning                           // RUNNING
68
	LinkNoArp                             // NOARP
69
	LinkPromisc                           // PROMISC
70
	LinkAllMulti                          // ALLMULTI
71
	LinkMaster                            // MASTER
72
	LinkSlave                             // SLAVE
73
	LinkMulticase                         // MULTICAST
74
	LinkPortsel                           // PORTSEL
75
	LinKAutoMedia                         // AUTOMEDIA
76
	LinkDynamic                           // DYNAMIC
77
	LinkLowerUp                           // LOWER_UP
78
	LinkDormant                           // DORMANT
79
	LinkEcho                              // ECHO
80
)
81

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.