in cmd/core_plugin/network/ethernet/ethernet.go [179:220]
func NewVlanInterface(vlan *metadata.VlanInterface, parent *Interface) (*VlanInterface, error) {
mac := vlan.MAC()
_, err := net.ParseMAC(mac)
if err != nil {
return nil, fmt.Errorf("failed to parse VLAN interface MAC %s: %w", mac, err)
}
ipAddr, err := address.ParseIP(vlan.IPAddress())
if err != nil && !errors.Is(err, address.ErrEmptyAddress) {
return nil, fmt.Errorf("failed to parse VLAN interface IP address %s: %w", vlan.IPAddress(), err)
}
var ipv6Address []*address.IPAddr
for _, ip := range vlan.IPv6Addresses() {
ipAddr, err := address.ParseIP(ip)
if err != nil && !errors.Is(err, address.ErrEmptyAddress) {
return nil, fmt.Errorf("failed to parse VLAN interface IPv6 address %s: %w", ip, err)
}
ipv6Address = append(ipv6Address, ipAddr)
}
gateway, err := address.ParseIP(vlan.Gateway())
if err != nil && !errors.Is(err, address.ErrEmptyAddress) {
return nil, fmt.Errorf("failed to parse VLAN interface gateway %s: %w", vlan.Gateway(), err)
}
gatewayIPv6, err := address.ParseIP(vlan.GatewayIPv6())
if err != nil && !errors.Is(err, address.ErrEmptyAddress) {
return nil, fmt.Errorf("failed to parse VLAN interface gateway IPv6 %s: %w", vlan.GatewayIPv6(), err)
}
return &VlanInterface{
Parent: parent,
MacAddr: mac,
Vlan: vlan.Vlan(),
MTU: vlan.MTU(),
IPAddress: ipAddr,
IPv6Addresses: ipv6Address,
Gateway: gateway,
GatewayIPv6: gatewayIPv6,
}, nil
}