// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.36.11
// 	protoc        v4.25.8
// source: voltha_protos/adapter_service.proto

package adapter_service

import (
	common "github.com/opencord/voltha-protos/v5/go/common"
	core_adapter "github.com/opencord/voltha-protos/v5/go/core_adapter"
	extension "github.com/opencord/voltha-protos/v5/go/extension"
	health "github.com/opencord/voltha-protos/v5/go/health"
	omci "github.com/opencord/voltha-protos/v5/go/omci"
	voltha "github.com/opencord/voltha-protos/v5/go/voltha"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	emptypb "google.golang.org/protobuf/types/known/emptypb"
	reflect "reflect"
	unsafe "unsafe"
)

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)
)

var File_voltha_protos_adapter_service_proto protoreflect.FileDescriptor

const file_voltha_protos_adapter_service_proto_rawDesc = "" +
	"\n" +
	"#voltha_protos/adapter_service.proto\x12\x0fadapter_service\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1avoltha_protos/common.proto\x1a voltha_protos/core_adapter.proto\x1a\x1avoltha_protos/device.proto\x1a\x1evoltha_protos/extensions.proto\x1a\x1avoltha_protos/health.proto\x1a\x1avoltha_protos/voltha.proto\x1a\x1dvoltha_protos/omci_test.proto\x1a\x1avoltha_protos/events.proto2\xf2\x15\n" +
	"\x0eAdapterService\x12?\n" +
	"\x0fGetHealthStatus\x12\x12.common.Connection\x1a\x14.health.HealthStatus(\x010\x01\x125\n" +
	"\vAdoptDevice\x12\x0e.device.Device\x1a\x16.google.protobuf.Empty\x129\n" +
	"\x0fReconcileDevice\x12\x0e.device.Device\x1a\x16.google.protobuf.Empty\x126\n" +
	"\fDeleteDevice\x12\x0e.device.Device\x1a\x16.google.protobuf.Empty\x127\n" +
	"\rDisableDevice\x12\x0e.device.Device\x1a\x16.google.protobuf.Empty\x128\n" +
	"\x0eReEnableDevice\x12\x0e.device.Device\x1a\x16.google.protobuf.Empty\x126\n" +
	"\fRebootDevice\x12\x0e.device.Device\x1a\x16.google.protobuf.Empty\x128\n" +
	"\x0eSelfTestDevice\x12\x0e.device.Device\x1a\x16.google.protobuf.Empty\x12B\n" +
	"\x10GetOfpDeviceInfo\x12\x0e.device.Device\x1a\x1e.core_adapter.SwitchCapability\x129\n" +
	"\x0fChildDeviceLost\x12\x0e.device.Device\x1a\x16.google.protobuf.Empty\x122\n" +
	"\n" +
	"EnablePort\x12\f.device.Port\x1a\x16.google.protobuf.Empty\x123\n" +
	"\vDisablePort\x12\f.device.Port\x1a\x16.google.protobuf.Empty\x12B\n" +
	"\x0fUpdateFlowsBulk\x12\x17.core_adapter.BulkFlows\x1a\x16.google.protobuf.Empty\x12R\n" +
	"\x18UpdateFlowsIncrementally\x12\x1e.core_adapter.IncrementalFlows\x1a\x16.google.protobuf.Empty\x12@\n" +
	"\rSendPacketOut\x12\x17.core_adapter.PacketOut\x1a\x16.google.protobuf.Empty\x12E\n" +
	"\x0eUpdatePmConfig\x12\x1b.core_adapter.PmConfigsInfo\x1a\x16.google.protobuf.Empty\x12S\n" +
	"\x10DownloadOnuImage\x12\".device.DeviceImageDownloadRequest\x1a\x1b.device.DeviceImageResponse\x12L\n" +
	"\x11GetOnuImageStatus\x12\x1a.device.DeviceImageRequest\x1a\x1b.device.DeviceImageResponse\x12O\n" +
	"\x14AbortOnuImageUpgrade\x12\x1a.device.DeviceImageRequest\x1a\x1b.device.DeviceImageResponse\x12-\n" +
	"\fGetOnuImages\x12\n" +
	".common.ID\x1a\x11.device.OnuImages\x12K\n" +
	"\x10ActivateOnuImage\x12\x1a.device.DeviceImageRequest\x1a\x1b.device.DeviceImageResponse\x12I\n" +
	"\x0eCommitOnuImage\x12\x1a.device.DeviceImageRequest\x1a\x1b.device.DeviceImageResponse\x12O\n" +
	"\rDownloadImage\x12\".core_adapter.ImageDownloadMessage\x1a\x15.device.ImageDownload\"\x03\x88\x02\x01\x12X\n" +
	"\x16GetImageDownloadStatus\x12\".core_adapter.ImageDownloadMessage\x1a\x15.device.ImageDownload\"\x03\x88\x02\x01\x12U\n" +
	"\x13CancelImageDownload\x12\".core_adapter.ImageDownloadMessage\x1a\x15.device.ImageDownload\"\x03\x88\x02\x01\x12U\n" +
	"\x13ActivateImageUpdate\x12\".core_adapter.ImageDownloadMessage\x1a\x15.device.ImageDownload\"\x03\x88\x02\x01\x12S\n" +
	"\x11RevertImageUpdate\x12\".core_adapter.ImageDownloadMessage\x1a\x15.device.ImageDownload\"\x03\x88\x02\x01\x12;\n" +
	"\rStartOmciTest\x12\x16.core_adapter.OMCITest\x1a\x12.omci.TestResponse\x12J\n" +
	"\rSimulateAlarm\x12\".core_adapter.SimulateAlarmMessage\x1a\x15.common.OperationResp\x12;\n" +
	"\rSuppressEvent\x12\x12.event.EventFilter\x1a\x16.google.protobuf.Empty\x12=\n" +
	"\x0fUnSuppressEvent\x12\x12.event.EventFilter\x1a\x16.google.protobuf.Empty\x12H\n" +
	"\vGetExtValue\x12 .core_adapter.GetExtValueMessage\x1a\x17.extension.ReturnValues\x12G\n" +
	"\vSetExtValue\x12 .core_adapter.SetExtValueMessage\x1a\x16.google.protobuf.Empty\x12U\n" +
	"\x0eGetSingleValue\x12 .extension.SingleGetValueRequest\x1a!.extension.SingleGetValueResponse\x12U\n" +
	"\x0eSetSingleValue\x12 .extension.SingleSetValueRequest\x1a!.extension.SingleSetValueResponse\x12:\n" +
	"\x10DisableOnuDevice\x12\x0e.device.Device\x1a\x16.google.protobuf.Empty\x129\n" +
	"\x0fEnableOnuDevice\x12\x0e.device.Device\x1a\x16.google.protobuf.Empty\x12Q\n" +
	"\x16DisableOnuSerialNumber\x12\x1f.device.OnuSerialNumberOnOLTPon\x1a\x16.google.protobuf.Empty\x12P\n" +
	"\x15EnableOnuSerialNumber\x12\x1f.device.OnuSerialNumberOnOLTPon\x1a\x16.google.protobuf.Empty\x12<\n" +
	"\fUpdateDevice\x12\x14.device.UpdateDevice\x1a\x16.google.protobuf.EmptyBt\n" +
	"#org.opencord.voltha.adapter_serviceB\x14VolthaAdapterServiceZ7github.com/opencord/voltha-protos/v5/go/adapter_serviceb\x06proto3"

var file_voltha_protos_adapter_service_proto_goTypes = []any{
	(*common.Connection)(nil),                 // 0: common.Connection
	(*voltha.Device)(nil),                     // 1: device.Device
	(*voltha.Port)(nil),                       // 2: device.Port
	(*core_adapter.BulkFlows)(nil),            // 3: core_adapter.BulkFlows
	(*core_adapter.IncrementalFlows)(nil),     // 4: core_adapter.IncrementalFlows
	(*core_adapter.PacketOut)(nil),            // 5: core_adapter.PacketOut
	(*core_adapter.PmConfigsInfo)(nil),        // 6: core_adapter.PmConfigsInfo
	(*voltha.DeviceImageDownloadRequest)(nil), // 7: device.DeviceImageDownloadRequest
	(*voltha.DeviceImageRequest)(nil),         // 8: device.DeviceImageRequest
	(*common.ID)(nil),                         // 9: common.ID
	(*core_adapter.ImageDownloadMessage)(nil), // 10: core_adapter.ImageDownloadMessage
	(*core_adapter.OMCITest)(nil),             // 11: core_adapter.OMCITest
	(*core_adapter.SimulateAlarmMessage)(nil), // 12: core_adapter.SimulateAlarmMessage
	(*voltha.EventFilter)(nil),                // 13: event.EventFilter
	(*core_adapter.GetExtValueMessage)(nil),   // 14: core_adapter.GetExtValueMessage
	(*core_adapter.SetExtValueMessage)(nil),   // 15: core_adapter.SetExtValueMessage
	(*extension.SingleGetValueRequest)(nil),   // 16: extension.SingleGetValueRequest
	(*extension.SingleSetValueRequest)(nil),   // 17: extension.SingleSetValueRequest
	(*voltha.OnuSerialNumberOnOLTPon)(nil),    // 18: device.OnuSerialNumberOnOLTPon
	(*voltha.UpdateDevice)(nil),               // 19: device.UpdateDevice
	(*health.HealthStatus)(nil),               // 20: health.HealthStatus
	(*emptypb.Empty)(nil),                     // 21: google.protobuf.Empty
	(*core_adapter.SwitchCapability)(nil),     // 22: core_adapter.SwitchCapability
	(*voltha.DeviceImageResponse)(nil),        // 23: device.DeviceImageResponse
	(*voltha.OnuImages)(nil),                  // 24: device.OnuImages
	(*voltha.ImageDownload)(nil),              // 25: device.ImageDownload
	(*omci.TestResponse)(nil),                 // 26: omci.TestResponse
	(*common.OperationResp)(nil),              // 27: common.OperationResp
	(*extension.ReturnValues)(nil),            // 28: extension.ReturnValues
	(*extension.SingleGetValueResponse)(nil),  // 29: extension.SingleGetValueResponse
	(*extension.SingleSetValueResponse)(nil),  // 30: extension.SingleSetValueResponse
}
var file_voltha_protos_adapter_service_proto_depIdxs = []int32{
	0,  // 0: adapter_service.AdapterService.GetHealthStatus:input_type -> common.Connection
	1,  // 1: adapter_service.AdapterService.AdoptDevice:input_type -> device.Device
	1,  // 2: adapter_service.AdapterService.ReconcileDevice:input_type -> device.Device
	1,  // 3: adapter_service.AdapterService.DeleteDevice:input_type -> device.Device
	1,  // 4: adapter_service.AdapterService.DisableDevice:input_type -> device.Device
	1,  // 5: adapter_service.AdapterService.ReEnableDevice:input_type -> device.Device
	1,  // 6: adapter_service.AdapterService.RebootDevice:input_type -> device.Device
	1,  // 7: adapter_service.AdapterService.SelfTestDevice:input_type -> device.Device
	1,  // 8: adapter_service.AdapterService.GetOfpDeviceInfo:input_type -> device.Device
	1,  // 9: adapter_service.AdapterService.ChildDeviceLost:input_type -> device.Device
	2,  // 10: adapter_service.AdapterService.EnablePort:input_type -> device.Port
	2,  // 11: adapter_service.AdapterService.DisablePort:input_type -> device.Port
	3,  // 12: adapter_service.AdapterService.UpdateFlowsBulk:input_type -> core_adapter.BulkFlows
	4,  // 13: adapter_service.AdapterService.UpdateFlowsIncrementally:input_type -> core_adapter.IncrementalFlows
	5,  // 14: adapter_service.AdapterService.SendPacketOut:input_type -> core_adapter.PacketOut
	6,  // 15: adapter_service.AdapterService.UpdatePmConfig:input_type -> core_adapter.PmConfigsInfo
	7,  // 16: adapter_service.AdapterService.DownloadOnuImage:input_type -> device.DeviceImageDownloadRequest
	8,  // 17: adapter_service.AdapterService.GetOnuImageStatus:input_type -> device.DeviceImageRequest
	8,  // 18: adapter_service.AdapterService.AbortOnuImageUpgrade:input_type -> device.DeviceImageRequest
	9,  // 19: adapter_service.AdapterService.GetOnuImages:input_type -> common.ID
	8,  // 20: adapter_service.AdapterService.ActivateOnuImage:input_type -> device.DeviceImageRequest
	8,  // 21: adapter_service.AdapterService.CommitOnuImage:input_type -> device.DeviceImageRequest
	10, // 22: adapter_service.AdapterService.DownloadImage:input_type -> core_adapter.ImageDownloadMessage
	10, // 23: adapter_service.AdapterService.GetImageDownloadStatus:input_type -> core_adapter.ImageDownloadMessage
	10, // 24: adapter_service.AdapterService.CancelImageDownload:input_type -> core_adapter.ImageDownloadMessage
	10, // 25: adapter_service.AdapterService.ActivateImageUpdate:input_type -> core_adapter.ImageDownloadMessage
	10, // 26: adapter_service.AdapterService.RevertImageUpdate:input_type -> core_adapter.ImageDownloadMessage
	11, // 27: adapter_service.AdapterService.StartOmciTest:input_type -> core_adapter.OMCITest
	12, // 28: adapter_service.AdapterService.SimulateAlarm:input_type -> core_adapter.SimulateAlarmMessage
	13, // 29: adapter_service.AdapterService.SuppressEvent:input_type -> event.EventFilter
	13, // 30: adapter_service.AdapterService.UnSuppressEvent:input_type -> event.EventFilter
	14, // 31: adapter_service.AdapterService.GetExtValue:input_type -> core_adapter.GetExtValueMessage
	15, // 32: adapter_service.AdapterService.SetExtValue:input_type -> core_adapter.SetExtValueMessage
	16, // 33: adapter_service.AdapterService.GetSingleValue:input_type -> extension.SingleGetValueRequest
	17, // 34: adapter_service.AdapterService.SetSingleValue:input_type -> extension.SingleSetValueRequest
	1,  // 35: adapter_service.AdapterService.DisableOnuDevice:input_type -> device.Device
	1,  // 36: adapter_service.AdapterService.EnableOnuDevice:input_type -> device.Device
	18, // 37: adapter_service.AdapterService.DisableOnuSerialNumber:input_type -> device.OnuSerialNumberOnOLTPon
	18, // 38: adapter_service.AdapterService.EnableOnuSerialNumber:input_type -> device.OnuSerialNumberOnOLTPon
	19, // 39: adapter_service.AdapterService.UpdateDevice:input_type -> device.UpdateDevice
	20, // 40: adapter_service.AdapterService.GetHealthStatus:output_type -> health.HealthStatus
	21, // 41: adapter_service.AdapterService.AdoptDevice:output_type -> google.protobuf.Empty
	21, // 42: adapter_service.AdapterService.ReconcileDevice:output_type -> google.protobuf.Empty
	21, // 43: adapter_service.AdapterService.DeleteDevice:output_type -> google.protobuf.Empty
	21, // 44: adapter_service.AdapterService.DisableDevice:output_type -> google.protobuf.Empty
	21, // 45: adapter_service.AdapterService.ReEnableDevice:output_type -> google.protobuf.Empty
	21, // 46: adapter_service.AdapterService.RebootDevice:output_type -> google.protobuf.Empty
	21, // 47: adapter_service.AdapterService.SelfTestDevice:output_type -> google.protobuf.Empty
	22, // 48: adapter_service.AdapterService.GetOfpDeviceInfo:output_type -> core_adapter.SwitchCapability
	21, // 49: adapter_service.AdapterService.ChildDeviceLost:output_type -> google.protobuf.Empty
	21, // 50: adapter_service.AdapterService.EnablePort:output_type -> google.protobuf.Empty
	21, // 51: adapter_service.AdapterService.DisablePort:output_type -> google.protobuf.Empty
	21, // 52: adapter_service.AdapterService.UpdateFlowsBulk:output_type -> google.protobuf.Empty
	21, // 53: adapter_service.AdapterService.UpdateFlowsIncrementally:output_type -> google.protobuf.Empty
	21, // 54: adapter_service.AdapterService.SendPacketOut:output_type -> google.protobuf.Empty
	21, // 55: adapter_service.AdapterService.UpdatePmConfig:output_type -> google.protobuf.Empty
	23, // 56: adapter_service.AdapterService.DownloadOnuImage:output_type -> device.DeviceImageResponse
	23, // 57: adapter_service.AdapterService.GetOnuImageStatus:output_type -> device.DeviceImageResponse
	23, // 58: adapter_service.AdapterService.AbortOnuImageUpgrade:output_type -> device.DeviceImageResponse
	24, // 59: adapter_service.AdapterService.GetOnuImages:output_type -> device.OnuImages
	23, // 60: adapter_service.AdapterService.ActivateOnuImage:output_type -> device.DeviceImageResponse
	23, // 61: adapter_service.AdapterService.CommitOnuImage:output_type -> device.DeviceImageResponse
	25, // 62: adapter_service.AdapterService.DownloadImage:output_type -> device.ImageDownload
	25, // 63: adapter_service.AdapterService.GetImageDownloadStatus:output_type -> device.ImageDownload
	25, // 64: adapter_service.AdapterService.CancelImageDownload:output_type -> device.ImageDownload
	25, // 65: adapter_service.AdapterService.ActivateImageUpdate:output_type -> device.ImageDownload
	25, // 66: adapter_service.AdapterService.RevertImageUpdate:output_type -> device.ImageDownload
	26, // 67: adapter_service.AdapterService.StartOmciTest:output_type -> omci.TestResponse
	27, // 68: adapter_service.AdapterService.SimulateAlarm:output_type -> common.OperationResp
	21, // 69: adapter_service.AdapterService.SuppressEvent:output_type -> google.protobuf.Empty
	21, // 70: adapter_service.AdapterService.UnSuppressEvent:output_type -> google.protobuf.Empty
	28, // 71: adapter_service.AdapterService.GetExtValue:output_type -> extension.ReturnValues
	21, // 72: adapter_service.AdapterService.SetExtValue:output_type -> google.protobuf.Empty
	29, // 73: adapter_service.AdapterService.GetSingleValue:output_type -> extension.SingleGetValueResponse
	30, // 74: adapter_service.AdapterService.SetSingleValue:output_type -> extension.SingleSetValueResponse
	21, // 75: adapter_service.AdapterService.DisableOnuDevice:output_type -> google.protobuf.Empty
	21, // 76: adapter_service.AdapterService.EnableOnuDevice:output_type -> google.protobuf.Empty
	21, // 77: adapter_service.AdapterService.DisableOnuSerialNumber:output_type -> google.protobuf.Empty
	21, // 78: adapter_service.AdapterService.EnableOnuSerialNumber:output_type -> google.protobuf.Empty
	21, // 79: adapter_service.AdapterService.UpdateDevice:output_type -> google.protobuf.Empty
	40, // [40:80] is the sub-list for method output_type
	0,  // [0:40] is the sub-list for method input_type
	0,  // [0:0] is the sub-list for extension type_name
	0,  // [0:0] is the sub-list for extension extendee
	0,  // [0:0] is the sub-list for field type_name
}

func init() { file_voltha_protos_adapter_service_proto_init() }
func file_voltha_protos_adapter_service_proto_init() {
	if File_voltha_protos_adapter_service_proto != nil {
		return
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: unsafe.Slice(unsafe.StringData(file_voltha_protos_adapter_service_proto_rawDesc), len(file_voltha_protos_adapter_service_proto_rawDesc)),
			NumEnums:      0,
			NumMessages:   0,
			NumExtensions: 0,
			NumServices:   1,
		},
		GoTypes:           file_voltha_protos_adapter_service_proto_goTypes,
		DependencyIndexes: file_voltha_protos_adapter_service_proto_depIdxs,
	}.Build()
	File_voltha_protos_adapter_service_proto = out.File
	file_voltha_protos_adapter_service_proto_goTypes = nil
	file_voltha_protos_adapter_service_proto_depIdxs = nil
}
