// 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.26.0
// 	protoc        v3.8.0
// 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:
	// - b|B for bytes
	// - k|K for kilobytes
	// - 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
}
