func NewVlanInterface()

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
}