pve-go/network.go
2021-04-17 19:56:27 +02:00

70 lines
1.2 KiB
Go

// Copyright (C) 2020 Marius Schellenberger
package pve
import (
"fmt"
"strings"
)
type NetworkDevices []*NetworkDevice
func (c *NetworkDevices) Set(index int, d *NetworkDevice) {
l := len(*c)
if index >= l {
n := make(NetworkDevices, index+1)
copy(n, *c)
n[index] = d
*c = n
return
}
if l == 0 {
*c = append(*c, d)
return
}
(*c)[index] = d
}
func (c *NetworkDevices) Get(index int) *NetworkDevice {
if len(*c)-1 >= index {
return (*c)[index]
}
return nil
}
type NetworkDevice struct {
Type string
MACAddress string
Bridge string
MTU string
}
func (n *NetworkDevice) String() string {
var mtu string
if n.MTU != "" {
mtu = "," + n.MTU
}
return fmt.Sprintf("%s=%s,bridge=%s%s", n.Type, n.MACAddress, n.Bridge, mtu)
}
func parseNetworkDevice(s string) (n *NetworkDevice) {
cfg := strings.Split(s, ",")
if len(cfg) < 2 {
return
}
n = new(NetworkDevice)
for _, dev := range []string{"virtio", "e1000", "rtl8139", "vmxnet3"} {
if strings.HasPrefix(cfg[0], dev) {
n.Type = dev
n.MACAddress = cfg[0][len(dev)+1:]
break
}
}
for _, o := range cfg {
if strings.HasPrefix(o, "bridge=") {
n.Bridge = o[7:]
} else if strings.HasPrefix(o, "mtu=") {
n.MTU = o[4:]
}
}
return
}