// 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 }