mirror of
https://github.com/siderolabs/talos.git
synced 2025-09-12 09:21:18 +02:00
This will be required to preserve platform network configuration in a cache across boots. Network configuration will be marshaled to YAML and unmarshaled back. Changes are pretty simple and most of the code is auto-generated: replace `stringer` codegen with `enumer` which produces also methods which convert from string back to enum values. Added tests to verify YAML marshaling/unmarshaling. Signed-off-by: Andrey Smirnov <andrey.smirnov@talos-systems.com>
83 lines
2.2 KiB
Go
83 lines
2.2 KiB
Go
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
package nethelpers
|
|
|
|
//go:generate enumer -type=LinkFlag -linecomment -text
|
|
|
|
import (
|
|
"strings"
|
|
)
|
|
|
|
// LinkFlags is a bitmask of LinkFlags.
|
|
type LinkFlags uint32
|
|
|
|
func (flags LinkFlags) String() string {
|
|
var values []string
|
|
|
|
for flag := LinkUp; flag <= LinkEcho; flag <<= 1 {
|
|
if (LinkFlag(flags) & flag) == flag {
|
|
values = append(values, flag.String())
|
|
}
|
|
}
|
|
|
|
return strings.Join(values, ",")
|
|
}
|
|
|
|
// LinkFlagsString parses string representation of LinkFlags.
|
|
func LinkFlagsString(s string) (LinkFlags, error) {
|
|
flags := LinkFlags(0)
|
|
|
|
for _, p := range strings.Split(s, ",") {
|
|
flag, err := LinkFlagString(p)
|
|
if err != nil {
|
|
return flags, err
|
|
}
|
|
|
|
flags |= LinkFlags(flag)
|
|
}
|
|
|
|
return flags, nil
|
|
}
|
|
|
|
// MarshalText implements text.Marshaler.
|
|
func (flags LinkFlags) MarshalText() ([]byte, error) {
|
|
return []byte(flags.String()), nil
|
|
}
|
|
|
|
// UnmarshalText implements text.Unmarshaler.
|
|
func (flags *LinkFlags) UnmarshalText(b []byte) error {
|
|
var err error
|
|
|
|
*flags, err = LinkFlagsString(string(b))
|
|
|
|
return err
|
|
}
|
|
|
|
// LinkFlag wraps IFF_* constants.
|
|
type LinkFlag uint32
|
|
|
|
// LinkFlag constants.
|
|
const (
|
|
LinkUp LinkFlag = 1 << iota // UP
|
|
LinkBroadcast // BROADCAST
|
|
LinkDebug // DEBUG
|
|
LinkLoopback // LOOPBACK
|
|
LinkPointToPoint // POINTTOPOINT
|
|
LinkNoTrailers // NOTRAILERS
|
|
LinkRunning // RUNNING
|
|
LinkNoArp // NOARP
|
|
LinkPromisc // PROMISC
|
|
LinkAllMulti // ALLMULTI
|
|
LinkMaster // MASTER
|
|
LinkSlave // SLAVE
|
|
LinkMulticase // MULTICAST
|
|
LinkPortsel // PORTSEL
|
|
LinKAutoMedia // AUTOMEDIA
|
|
LinkDynamic // DYNAMIC
|
|
LinkLowerUp // LOWER_UP
|
|
LinkDormant // DORMANT
|
|
LinkEcho // ECHO
|
|
)
|