48 lines
875 B
Go
48 lines
875 B
Go
// Copyright (C) 2020 Marius Schellenberger
|
|
|
|
package pve
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
type NetworkDevices []*NetworkDevice
|
|
|
|
func (c NetworkDevice) 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
|
|
}
|