pve-go/network.go
2020-06-01 16:37:50 +02:00

64 lines
1.1 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
}
func (n *NetworkDevice) String() string {
return fmt.Sprintf("%s=%s,bridge=%s", n.Type, n.MACAddress, n.Bridge)
}
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:]
break
}
}
return
}