// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.27.1
// 	protoc        v3.21.1
// source: virtual_device.proto

package proto

import (
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	reflect "reflect"
	sync "sync"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

// VirtualDevice describes how to run Fuchsia using a vm or emulator.
//
// This message should capture the set of system images necessary to boot the
// device, as well as the hardware characteristics of the device.
//
// Its primary purpose is to carry virtualization options across system
// boundaries. For example, Fuchsia infra may pass a file containing this
// message from the build to a tool that runs Fuchsia in QEMU, without
// inspecting the message itself.
type VirtualDevice struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The name of this virtual device.
	//
	// This is meant to help humans identify this device.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Metadata indicating how to run QEMU.
	Qemu *QEMU `protobuf:"bytes,2,opt,name=qemu,proto3" json:"qemu,omitempty"`
	// The name of the system kernel image in images.json.
	Kernel string `protobuf:"bytes,3,opt,name=kernel,proto3" json:"kernel,omitempty"`
	// The name of the initial ramdisk image in images.json.
	Initrd string `protobuf:"bytes,4,opt,name=initrd,proto3" json:"initrd,omitempty"`
	// Optional. The primary disk drive for this device.
	Drive *Drive `protobuf:"bytes,5,opt,name=drive,proto3" json:"drive,omitempty"`
	// The device characterics.
	Hw *HardwareProfile `protobuf:"bytes,6,opt,name=hw,proto3" json:"hw,omitempty"`
	// Kernel command line arguments.
	KernelArgs []string `protobuf:"bytes,7,rep,name=kernel_args,json=kernelArgs,proto3" json:"kernel_args,omitempty"`
}

func (x *VirtualDevice) Reset() {
	*x = VirtualDevice{}
	if protoimpl.UnsafeEnabled {
		mi := &file_virtual_device_proto_msgTypes[0]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *VirtualDevice) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*VirtualDevice) ProtoMessage() {}

func (x *VirtualDevice) ProtoReflect() protoreflect.Message {
	mi := &file_virtual_device_proto_msgTypes[0]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use VirtualDevice.ProtoReflect.Descriptor instead.
func (*VirtualDevice) Descriptor() ([]byte, []int) {
	return file_virtual_device_proto_rawDescGZIP(), []int{0}
}

func (x *VirtualDevice) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *VirtualDevice) GetQemu() *QEMU {
	if x != nil {
		return x.Qemu
	}
	return nil
}

func (x *VirtualDevice) GetKernel() string {
	if x != nil {
		return x.Kernel
	}
	return ""
}

func (x *VirtualDevice) GetInitrd() string {
	if x != nil {
		return x.Initrd
	}
	return ""
}

func (x *VirtualDevice) GetDrive() *Drive {
	if x != nil {
		return x.Drive
	}
	return nil
}

func (x *VirtualDevice) GetHw() *HardwareProfile {
	if x != nil {
		return x.Hw
	}
	return nil
}

func (x *VirtualDevice) GetKernelArgs() []string {
	if x != nil {
		return x.KernelArgs
	}
	return nil
}

// QEMU describes how to run a VirtualDevice in QEMU.
type QEMU struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The maximum supported QEMU version.
	MaxVersion string `protobuf:"bytes,1,opt,name=max_version,json=maxVersion,proto3" json:"max_version,omitempty"`
	// The minimum supported QEMU version.
	MinVersion string `protobuf:"bytes,2,opt,name=min_version,json=minVersion,proto3" json:"min_version,omitempty"`
}

func (x *QEMU) Reset() {
	*x = QEMU{}
	if protoimpl.UnsafeEnabled {
		mi := &file_virtual_device_proto_msgTypes[1]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *QEMU) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*QEMU) ProtoMessage() {}

func (x *QEMU) ProtoReflect() protoreflect.Message {
	mi := &file_virtual_device_proto_msgTypes[1]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use QEMU.ProtoReflect.Descriptor instead.
func (*QEMU) Descriptor() ([]byte, []int) {
	return file_virtual_device_proto_rawDescGZIP(), []int{1}
}

func (x *QEMU) GetMaxVersion() string {
	if x != nil {
		return x.MaxVersion
	}
	return ""
}

func (x *QEMU) GetMinVersion() string {
	if x != nil {
		return x.MinVersion
	}
	return ""
}

// A PCI disk drive.
type Drive struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The name of the drive.
	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	// A pointer to the image to use as a basis for the drive.
	Image string `protobuf:"bytes,2,opt,name=image,proto3" json:"image,omitempty"`
	// If true, image is the name of a file to use for this drive. This is useful
	// if the drive is, for example, a MinFS image. The path may be relative or
	// absolute, depending on the use case.
	//
	// If false, image is the name of an image in images.json whose path attribute
	// points to the file backing this device.
	//
	// Defaults to false.
	IsFilename bool `protobuf:"varint,3,opt,name=is_filename,json=isFilename,proto3" json:"is_filename,omitempty"`
	// DEPRECATED: Use device instead.
	// TODO(kjharland): Refactor //tools/qemu.go to use device and remove this.
	//
	// The PCI address for the device.
	//
	// Defaults to the empty string.
	PciAddress string  `protobuf:"bytes,4,opt,name=pci_address,json=pciAddress,proto3" json:"pci_address,omitempty"`
	Device     *Device `protobuf:"bytes,5,opt,name=device,proto3" json:"device,omitempty"`
}

func (x *Drive) Reset() {
	*x = Drive{}
	if protoimpl.UnsafeEnabled {
		mi := &file_virtual_device_proto_msgTypes[2]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Drive) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Drive) ProtoMessage() {}

func (x *Drive) ProtoReflect() protoreflect.Message {
	mi := &file_virtual_device_proto_msgTypes[2]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Drive.ProtoReflect.Descriptor instead.
func (*Drive) Descriptor() ([]byte, []int) {
	return file_virtual_device_proto_rawDescGZIP(), []int{2}
}

func (x *Drive) GetId() string {
	if x != nil {
		return x.Id
	}
	return ""
}

func (x *Drive) GetImage() string {
	if x != nil {
		return x.Image
	}
	return ""
}

func (x *Drive) GetIsFilename() bool {
	if x != nil {
		return x.IsFilename
	}
	return false
}

func (x *Drive) GetPciAddress() string {
	if x != nil {
		return x.PciAddress
	}
	return ""
}

func (x *Drive) GetDevice() *Device {
	if x != nil {
		return x.Device
	}
	return nil
}

type HardwareProfile struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The CPU architecture.
	//
	// This must be one of:
	// - arm64
	// - x64
	Arch string `protobuf:"bytes,1,opt,name=arch,proto3" json:"arch,omitempty"`
	// The number of CPUs.
	//
	// Defaults to 1.
	CpuCount uint32 `protobuf:"varint,2,opt,name=cpu_count,json=cpuCount,proto3" json:"cpu_count,omitempty"`
	// The amount of RAM expressed as a string like "5M".
	//
	// The number must be a positive 64-bit integer in base 10.
	// The unit must be any of:
	// - m|M for megabytes
	// - g|G for gigabytes.
	Ram string `protobuf:"bytes,3,opt,name=ram,proto3" json:"ram,omitempty"`
	// The MAC address to use for the device.
	Mac string `protobuf:"bytes,4,opt,name=mac,proto3" json:"mac,omitempty"`
	// Optional networking devices.
	//
	// If unset, networking is disabled.
	NetworkDevices []*Netdev `protobuf:"bytes,5,rep,name=network_devices,json=networkDevices,proto3" json:"network_devices,omitempty"`
	// Optional list of drives to mount.
	//
	// If any drive is a USB, remember to specify a USB host controller.
	Drives []*Drive `protobuf:"bytes,6,rep,name=drives,proto3" json:"drives,omitempty"`
	// Optional USB host controller interface.
	//
	// This must be set if USB drives are specified. The only supported value is
	// 'xhci'.
	Hci string `protobuf:"bytes,7,opt,name=hci,proto3" json:"hci,omitempty"`
	// Whether to enable KVM.
	//
	// Defaults to false.
	EnableKvm bool `protobuf:"varint,8,opt,name=enable_kvm,json=enableKvm,proto3" json:"enable_kvm,omitempty"`
}

func (x *HardwareProfile) Reset() {
	*x = HardwareProfile{}
	if protoimpl.UnsafeEnabled {
		mi := &file_virtual_device_proto_msgTypes[3]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *HardwareProfile) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*HardwareProfile) ProtoMessage() {}

func (x *HardwareProfile) ProtoReflect() protoreflect.Message {
	mi := &file_virtual_device_proto_msgTypes[3]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use HardwareProfile.ProtoReflect.Descriptor instead.
func (*HardwareProfile) Descriptor() ([]byte, []int) {
	return file_virtual_device_proto_rawDescGZIP(), []int{3}
}

func (x *HardwareProfile) GetArch() string {
	if x != nil {
		return x.Arch
	}
	return ""
}

func (x *HardwareProfile) GetCpuCount() uint32 {
	if x != nil {
		return x.CpuCount
	}
	return 0
}

func (x *HardwareProfile) GetRam() string {
	if x != nil {
		return x.Ram
	}
	return ""
}

func (x *HardwareProfile) GetMac() string {
	if x != nil {
		return x.Mac
	}
	return ""
}

func (x *HardwareProfile) GetNetworkDevices() []*Netdev {
	if x != nil {
		return x.NetworkDevices
	}
	return nil
}

func (x *HardwareProfile) GetDrives() []*Drive {
	if x != nil {
		return x.Drives
	}
	return nil
}

func (x *HardwareProfile) GetHci() string {
	if x != nil {
		return x.Hci
	}
	return ""
}

func (x *HardwareProfile) GetEnableKvm() bool {
	if x != nil {
		return x.EnableKvm
	}
	return false
}

type Netdev struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Device *Device `protobuf:"bytes,1,opt,name=device,proto3" json:"device,omitempty"`
	Id     string  `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
	// One of "user" or "tap".
	Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"`
}

func (x *Netdev) Reset() {
	*x = Netdev{}
	if protoimpl.UnsafeEnabled {
		mi := &file_virtual_device_proto_msgTypes[4]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Netdev) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Netdev) ProtoMessage() {}

func (x *Netdev) ProtoReflect() protoreflect.Message {
	mi := &file_virtual_device_proto_msgTypes[4]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Netdev.ProtoReflect.Descriptor instead.
func (*Netdev) Descriptor() ([]byte, []int) {
	return file_virtual_device_proto_rawDescGZIP(), []int{4}
}

func (x *Netdev) GetDevice() *Device {
	if x != nil {
		return x.Device
	}
	return nil
}

func (x *Netdev) GetId() string {
	if x != nil {
		return x.Id
	}
	return ""
}

func (x *Netdev) GetKind() string {
	if x != nil {
		return x.Kind
	}
	return ""
}

type Device struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Model string `protobuf:"bytes,1,opt,name=model,proto3" json:"model,omitempty"`
	// Named fields that and can be added to `-device` options.
	Options []string `protobuf:"bytes,2,rep,name=options,proto3" json:"options,omitempty"`
}

func (x *Device) Reset() {
	*x = Device{}
	if protoimpl.UnsafeEnabled {
		mi := &file_virtual_device_proto_msgTypes[5]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Device) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Device) ProtoMessage() {}

func (x *Device) ProtoReflect() protoreflect.Message {
	mi := &file_virtual_device_proto_msgTypes[5]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Device.ProtoReflect.Descriptor instead.
func (*Device) Descriptor() ([]byte, []int) {
	return file_virtual_device_proto_rawDescGZIP(), []int{5}
}

func (x *Device) GetModel() string {
	if x != nil {
		return x.Model
	}
	return ""
}

func (x *Device) GetOptions() []string {
	if x != nil {
		return x.Options
	}
	return nil
}

var File_virtual_device_proto protoreflect.FileDescriptor

var file_virtual_device_proto_rawDesc = []byte{
	0x0a, 0x14, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f,
	0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0xfc, 0x01, 0x0a, 0x0d, 0x56, 0x69, 0x72, 0x74, 0x75,
	0x61, 0x6c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x04,
	0x71, 0x65, 0x6d, 0x75, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x76, 0x69, 0x72,
	0x74, 0x75, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x51, 0x45, 0x4d, 0x55,
	0x52, 0x04, 0x71, 0x65, 0x6d, 0x75, 0x12, 0x16, 0x0a, 0x06, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c,
	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x12, 0x16,
	0x0a, 0x06, 0x69, 0x6e, 0x69, 0x74, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
	0x69, 0x6e, 0x69, 0x74, 0x72, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x64, 0x72, 0x69, 0x76, 0x65, 0x18,
	0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f,
	0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x72, 0x69, 0x76, 0x65, 0x52, 0x05, 0x64, 0x72,
	0x69, 0x76, 0x65, 0x12, 0x2f, 0x0a, 0x02, 0x68, 0x77, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x1f, 0x2e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
	0x2e, 0x48, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65,
	0x52, 0x02, 0x68, 0x77, 0x12, 0x1f, 0x0a, 0x0b, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x5f, 0x61,
	0x72, 0x67, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6b, 0x65, 0x72, 0x6e, 0x65,
	0x6c, 0x41, 0x72, 0x67, 0x73, 0x22, 0x48, 0x0a, 0x04, 0x51, 0x45, 0x4d, 0x55, 0x12, 0x1f, 0x0a,
	0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f,
	0x0a, 0x0b, 0x6d, 0x69, 0x6e, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x69, 0x6e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22,
	0x9f, 0x01, 0x0a, 0x05, 0x44, 0x72, 0x69, 0x76, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61,
	0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12,
	0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03,
	0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65,
	0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x63, 0x69, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18,
	0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x63, 0x69, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73,
	0x73, 0x12, 0x2e, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x16, 0x2e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x76, 0x69,
	0x63, 0x65, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63,
	0x65, 0x22, 0x87, 0x02, 0x0a, 0x0f, 0x48, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x50, 0x72,
	0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75,
	0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x63, 0x70,
	0x75, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x61, 0x6d, 0x18, 0x03, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x61, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x63, 0x18,
	0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x61, 0x63, 0x12, 0x3f, 0x0a, 0x0f, 0x6e, 0x65,
	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x05, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x64, 0x65,
	0x76, 0x69, 0x63, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x64, 0x65, 0x76, 0x52, 0x0e, 0x6e, 0x65, 0x74,
	0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x06, 0x64,
	0x72, 0x69, 0x76, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x76, 0x69,
	0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x72, 0x69,
	0x76, 0x65, 0x52, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x68, 0x63,
	0x69, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x68, 0x63, 0x69, 0x12, 0x1d, 0x0a, 0x0a,
	0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6b, 0x76, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08,
	0x52, 0x09, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4b, 0x76, 0x6d, 0x22, 0x5c, 0x0a, 0x06, 0x4e,
	0x65, 0x74, 0x64, 0x65, 0x76, 0x12, 0x2e, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f,
	0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x06, 0x64,
	0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x38, 0x0a, 0x06, 0x44, 0x65, 0x76,
	0x69, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x74,
	0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69,
	0x6f, 0x6e, 0x73, 0x42, 0x33, 0x5a, 0x31, 0x67, 0x6f, 0x2e, 0x66, 0x75, 0x63, 0x68, 0x73, 0x69,
	0x61, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x66, 0x75, 0x63, 0x68, 0x73, 0x69, 0x61, 0x2f, 0x74, 0x6f,
	0x6f, 0x6c, 0x73, 0x2f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x76, 0x69,
	0x63, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_virtual_device_proto_rawDescOnce sync.Once
	file_virtual_device_proto_rawDescData = file_virtual_device_proto_rawDesc
)

func file_virtual_device_proto_rawDescGZIP() []byte {
	file_virtual_device_proto_rawDescOnce.Do(func() {
		file_virtual_device_proto_rawDescData = protoimpl.X.CompressGZIP(file_virtual_device_proto_rawDescData)
	})
	return file_virtual_device_proto_rawDescData
}

var file_virtual_device_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
var file_virtual_device_proto_goTypes = []interface{}{
	(*VirtualDevice)(nil),   // 0: virtual_device.VirtualDevice
	(*QEMU)(nil),            // 1: virtual_device.QEMU
	(*Drive)(nil),           // 2: virtual_device.Drive
	(*HardwareProfile)(nil), // 3: virtual_device.HardwareProfile
	(*Netdev)(nil),          // 4: virtual_device.Netdev
	(*Device)(nil),          // 5: virtual_device.Device
}
var file_virtual_device_proto_depIdxs = []int32{
	1, // 0: virtual_device.VirtualDevice.qemu:type_name -> virtual_device.QEMU
	2, // 1: virtual_device.VirtualDevice.drive:type_name -> virtual_device.Drive
	3, // 2: virtual_device.VirtualDevice.hw:type_name -> virtual_device.HardwareProfile
	5, // 3: virtual_device.Drive.device:type_name -> virtual_device.Device
	4, // 4: virtual_device.HardwareProfile.network_devices:type_name -> virtual_device.Netdev
	2, // 5: virtual_device.HardwareProfile.drives:type_name -> virtual_device.Drive
	5, // 6: virtual_device.Netdev.device:type_name -> virtual_device.Device
	7, // [7:7] is the sub-list for method output_type
	7, // [7:7] is the sub-list for method input_type
	7, // [7:7] is the sub-list for extension type_name
	7, // [7:7] is the sub-list for extension extendee
	0, // [0:7] is the sub-list for field type_name
}

func init() { file_virtual_device_proto_init() }
func file_virtual_device_proto_init() {
	if File_virtual_device_proto != nil {
		return
	}
	if !protoimpl.UnsafeEnabled {
		file_virtual_device_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*VirtualDevice); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_virtual_device_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*QEMU); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_virtual_device_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Drive); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_virtual_device_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*HardwareProfile); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_virtual_device_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Netdev); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_virtual_device_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Device); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_virtual_device_proto_rawDesc,
			NumEnums:      0,
			NumMessages:   6,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_virtual_device_proto_goTypes,
		DependencyIndexes: file_virtual_device_proto_depIdxs,
		MessageInfos:      file_virtual_device_proto_msgTypes,
	}.Build()
	File_virtual_device_proto = out.File
	file_virtual_device_proto_rawDesc = nil
	file_virtual_device_proto_goTypes = nil
	file_virtual_device_proto_depIdxs = nil
}
