// Code generated by protoc-gen-go. DO NOT EDIT.
// source: voltha_protos/common.proto

package common

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type TestModeKeys int32

const (
	TestModeKeys_api_test TestModeKeys = 0
)

var TestModeKeys_name = map[int32]string{
	0: "api_test",
}

var TestModeKeys_value = map[string]int32{
	"api_test": 0,
}

func (x TestModeKeys) String() string {
	return proto.EnumName(TestModeKeys_name, int32(x))
}

func (TestModeKeys) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_c2e3fd231961e826, []int{0}
}

// Administrative State
type AdminState_Types int32

const (
	// The administrative state of the device is unknown
	AdminState_UNKNOWN AdminState_Types = 0
	// The device is pre-provisioned into Voltha, but not contacted by it
	AdminState_PREPROVISIONED AdminState_Types = 1
	// The device is enabled for activation and operation
	AdminState_ENABLED AdminState_Types = 2
	// The device is disabled and shall not perform its intended forwarding
	// functions other than being available for re-activation.
	AdminState_DISABLED AdminState_Types = 3
	// The device is in the state of image download
	AdminState_DOWNLOADING_IMAGE AdminState_Types = 4
)

var AdminState_Types_name = map[int32]string{
	0: "UNKNOWN",
	1: "PREPROVISIONED",
	2: "ENABLED",
	3: "DISABLED",
	4: "DOWNLOADING_IMAGE",
}

var AdminState_Types_value = map[string]int32{
	"UNKNOWN":           0,
	"PREPROVISIONED":    1,
	"ENABLED":           2,
	"DISABLED":          3,
	"DOWNLOADING_IMAGE": 4,
}

func (x AdminState_Types) String() string {
	return proto.EnumName(AdminState_Types_name, int32(x))
}

func (AdminState_Types) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_c2e3fd231961e826, []int{2, 0}
}

// Operational Status
type OperStatus_Types int32

const (
	// The status of the device is unknown at this point
	OperStatus_UNKNOWN OperStatus_Types = 0
	// The device has been discovered, but not yet activated
	OperStatus_DISCOVERED OperStatus_Types = 1
	// The device is being activated (booted, rebooted, upgraded, etc.)
	OperStatus_ACTIVATING OperStatus_Types = 2
	// Service impacting tests are being conducted
	OperStatus_TESTING OperStatus_Types = 3
	// The device is up and active
	OperStatus_ACTIVE OperStatus_Types = 4
	// The device has failed and cannot fulfill its intended role
	OperStatus_FAILED OperStatus_Types = 5
	// The device is reconciling
	OperStatus_RECONCILING OperStatus_Types = 6
	// The device is in reconciling failed
	OperStatus_RECONCILING_FAILED OperStatus_Types = 7
)

var OperStatus_Types_name = map[int32]string{
	0: "UNKNOWN",
	1: "DISCOVERED",
	2: "ACTIVATING",
	3: "TESTING",
	4: "ACTIVE",
	5: "FAILED",
	6: "RECONCILING",
	7: "RECONCILING_FAILED",
}

var OperStatus_Types_value = map[string]int32{
	"UNKNOWN":            0,
	"DISCOVERED":         1,
	"ACTIVATING":         2,
	"TESTING":            3,
	"ACTIVE":             4,
	"FAILED":             5,
	"RECONCILING":        6,
	"RECONCILING_FAILED": 7,
}

func (x OperStatus_Types) String() string {
	return proto.EnumName(OperStatus_Types_name, int32(x))
}

func (OperStatus_Types) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_c2e3fd231961e826, []int{3, 0}
}

// Connectivity Status
type ConnectStatus_Types int32

const (
	// The device connectivity status is unknown
	ConnectStatus_UNKNOWN ConnectStatus_Types = 0
	// The device cannot be reached by Voltha
	ConnectStatus_UNREACHABLE ConnectStatus_Types = 1
	// There is live communication between device and Voltha
	ConnectStatus_REACHABLE ConnectStatus_Types = 2
)

var ConnectStatus_Types_name = map[int32]string{
	0: "UNKNOWN",
	1: "UNREACHABLE",
	2: "REACHABLE",
}

var ConnectStatus_Types_value = map[string]int32{
	"UNKNOWN":     0,
	"UNREACHABLE": 1,
	"REACHABLE":   2,
}

func (x ConnectStatus_Types) String() string {
	return proto.EnumName(ConnectStatus_Types_name, int32(x))
}

func (ConnectStatus_Types) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_c2e3fd231961e826, []int{4, 0}
}

type OperationResp_OperationReturnCode int32

const (
	OperationResp_OPERATION_SUCCESS     OperationResp_OperationReturnCode = 0
	OperationResp_OPERATION_FAILURE     OperationResp_OperationReturnCode = 1
	OperationResp_OPERATION_UNSUPPORTED OperationResp_OperationReturnCode = 2
	OperationResp_OPERATION_IN_PROGRESS OperationResp_OperationReturnCode = 3
)

var OperationResp_OperationReturnCode_name = map[int32]string{
	0: "OPERATION_SUCCESS",
	1: "OPERATION_FAILURE",
	2: "OPERATION_UNSUPPORTED",
	3: "OPERATION_IN_PROGRESS",
}

var OperationResp_OperationReturnCode_value = map[string]int32{
	"OPERATION_SUCCESS":     0,
	"OPERATION_FAILURE":     1,
	"OPERATION_UNSUPPORTED": 2,
	"OPERATION_IN_PROGRESS": 3,
}

func (x OperationResp_OperationReturnCode) String() string {
	return proto.EnumName(OperationResp_OperationReturnCode_name, int32(x))
}

func (OperationResp_OperationReturnCode) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_c2e3fd231961e826, []int{5, 0}
}

// Convey a resource identifier
type ID struct {
	Id                   string   `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ID) Reset()         { *m = ID{} }
func (m *ID) String() string { return proto.CompactTextString(m) }
func (*ID) ProtoMessage()    {}
func (*ID) Descriptor() ([]byte, []int) {
	return fileDescriptor_c2e3fd231961e826, []int{0}
}

func (m *ID) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ID.Unmarshal(m, b)
}
func (m *ID) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ID.Marshal(b, m, deterministic)
}
func (m *ID) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ID.Merge(m, src)
}
func (m *ID) XXX_Size() int {
	return xxx_messageInfo_ID.Size(m)
}
func (m *ID) XXX_DiscardUnknown() {
	xxx_messageInfo_ID.DiscardUnknown(m)
}

var xxx_messageInfo_ID proto.InternalMessageInfo

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

// Represents a list of IDs
type IDs struct {
	Items                []*ID    `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *IDs) Reset()         { *m = IDs{} }
func (m *IDs) String() string { return proto.CompactTextString(m) }
func (*IDs) ProtoMessage()    {}
func (*IDs) Descriptor() ([]byte, []int) {
	return fileDescriptor_c2e3fd231961e826, []int{1}
}

func (m *IDs) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_IDs.Unmarshal(m, b)
}
func (m *IDs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_IDs.Marshal(b, m, deterministic)
}
func (m *IDs) XXX_Merge(src proto.Message) {
	xxx_messageInfo_IDs.Merge(m, src)
}
func (m *IDs) XXX_Size() int {
	return xxx_messageInfo_IDs.Size(m)
}
func (m *IDs) XXX_DiscardUnknown() {
	xxx_messageInfo_IDs.DiscardUnknown(m)
}

var xxx_messageInfo_IDs proto.InternalMessageInfo

func (m *IDs) GetItems() []*ID {
	if m != nil {
		return m.Items
	}
	return nil
}

type AdminState struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *AdminState) Reset()         { *m = AdminState{} }
func (m *AdminState) String() string { return proto.CompactTextString(m) }
func (*AdminState) ProtoMessage()    {}
func (*AdminState) Descriptor() ([]byte, []int) {
	return fileDescriptor_c2e3fd231961e826, []int{2}
}

func (m *AdminState) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_AdminState.Unmarshal(m, b)
}
func (m *AdminState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_AdminState.Marshal(b, m, deterministic)
}
func (m *AdminState) XXX_Merge(src proto.Message) {
	xxx_messageInfo_AdminState.Merge(m, src)
}
func (m *AdminState) XXX_Size() int {
	return xxx_messageInfo_AdminState.Size(m)
}
func (m *AdminState) XXX_DiscardUnknown() {
	xxx_messageInfo_AdminState.DiscardUnknown(m)
}

var xxx_messageInfo_AdminState proto.InternalMessageInfo

type OperStatus struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *OperStatus) Reset()         { *m = OperStatus{} }
func (m *OperStatus) String() string { return proto.CompactTextString(m) }
func (*OperStatus) ProtoMessage()    {}
func (*OperStatus) Descriptor() ([]byte, []int) {
	return fileDescriptor_c2e3fd231961e826, []int{3}
}

func (m *OperStatus) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_OperStatus.Unmarshal(m, b)
}
func (m *OperStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_OperStatus.Marshal(b, m, deterministic)
}
func (m *OperStatus) XXX_Merge(src proto.Message) {
	xxx_messageInfo_OperStatus.Merge(m, src)
}
func (m *OperStatus) XXX_Size() int {
	return xxx_messageInfo_OperStatus.Size(m)
}
func (m *OperStatus) XXX_DiscardUnknown() {
	xxx_messageInfo_OperStatus.DiscardUnknown(m)
}

var xxx_messageInfo_OperStatus proto.InternalMessageInfo

type ConnectStatus struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ConnectStatus) Reset()         { *m = ConnectStatus{} }
func (m *ConnectStatus) String() string { return proto.CompactTextString(m) }
func (*ConnectStatus) ProtoMessage()    {}
func (*ConnectStatus) Descriptor() ([]byte, []int) {
	return fileDescriptor_c2e3fd231961e826, []int{4}
}

func (m *ConnectStatus) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ConnectStatus.Unmarshal(m, b)
}
func (m *ConnectStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ConnectStatus.Marshal(b, m, deterministic)
}
func (m *ConnectStatus) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ConnectStatus.Merge(m, src)
}
func (m *ConnectStatus) XXX_Size() int {
	return xxx_messageInfo_ConnectStatus.Size(m)
}
func (m *ConnectStatus) XXX_DiscardUnknown() {
	xxx_messageInfo_ConnectStatus.DiscardUnknown(m)
}

var xxx_messageInfo_ConnectStatus proto.InternalMessageInfo

type OperationResp struct {
	// Return code
	Code OperationResp_OperationReturnCode `protobuf:"varint,1,opt,name=code,proto3,enum=common.OperationResp_OperationReturnCode" json:"code,omitempty"`
	// Additional Info
	AdditionalInfo       string   `protobuf:"bytes,2,opt,name=additional_info,json=additionalInfo,proto3" json:"additional_info,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *OperationResp) Reset()         { *m = OperationResp{} }
func (m *OperationResp) String() string { return proto.CompactTextString(m) }
func (*OperationResp) ProtoMessage()    {}
func (*OperationResp) Descriptor() ([]byte, []int) {
	return fileDescriptor_c2e3fd231961e826, []int{5}
}

func (m *OperationResp) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_OperationResp.Unmarshal(m, b)
}
func (m *OperationResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_OperationResp.Marshal(b, m, deterministic)
}
func (m *OperationResp) XXX_Merge(src proto.Message) {
	xxx_messageInfo_OperationResp.Merge(m, src)
}
func (m *OperationResp) XXX_Size() int {
	return xxx_messageInfo_OperationResp.Size(m)
}
func (m *OperationResp) XXX_DiscardUnknown() {
	xxx_messageInfo_OperationResp.DiscardUnknown(m)
}

var xxx_messageInfo_OperationResp proto.InternalMessageInfo

func (m *OperationResp) GetCode() OperationResp_OperationReturnCode {
	if m != nil {
		return m.Code
	}
	return OperationResp_OPERATION_SUCCESS
}

func (m *OperationResp) GetAdditionalInfo() string {
	if m != nil {
		return m.AdditionalInfo
	}
	return ""
}

func init() {
	proto.RegisterEnum("common.TestModeKeys", TestModeKeys_name, TestModeKeys_value)
	proto.RegisterEnum("common.AdminState_Types", AdminState_Types_name, AdminState_Types_value)
	proto.RegisterEnum("common.OperStatus_Types", OperStatus_Types_name, OperStatus_Types_value)
	proto.RegisterEnum("common.ConnectStatus_Types", ConnectStatus_Types_name, ConnectStatus_Types_value)
	proto.RegisterEnum("common.OperationResp_OperationReturnCode", OperationResp_OperationReturnCode_name, OperationResp_OperationReturnCode_value)
	proto.RegisterType((*ID)(nil), "common.ID")
	proto.RegisterType((*IDs)(nil), "common.IDs")
	proto.RegisterType((*AdminState)(nil), "common.AdminState")
	proto.RegisterType((*OperStatus)(nil), "common.OperStatus")
	proto.RegisterType((*ConnectStatus)(nil), "common.ConnectStatus")
	proto.RegisterType((*OperationResp)(nil), "common.OperationResp")
}

func init() { proto.RegisterFile("voltha_protos/common.proto", fileDescriptor_c2e3fd231961e826) }

var fileDescriptor_c2e3fd231961e826 = []byte{
	// 506 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x52, 0xcd, 0x6e, 0xda, 0x30,
	0x1c, 0x6f, 0x42, 0x4b, 0xd7, 0x3f, 0x25, 0x64, 0xee, 0x3a, 0xb1, 0x69, 0x07, 0x94, 0x4b, 0xbb,
	0x49, 0x03, 0xa9, 0xdb, 0x8e, 0x3b, 0xa4, 0x89, 0xc7, 0xac, 0x52, 0x3b, 0x72, 0x12, 0x2a, 0xf5,
	0x12, 0xa5, 0xc4, 0x85, 0x48, 0x25, 0x8e, 0x88, 0xa9, 0xc4, 0x75, 0x6f, 0xb0, 0x57, 0xdd, 0x13,
	0x4c, 0x0e, 0x54, 0x14, 0x89, 0x9b, 0x7f, 0x1f, 0xfe, 0x7f, 0xc3, 0xc7, 0x67, 0xf9, 0xa4, 0x66,
	0x69, 0x52, 0x2e, 0xa4, 0x92, 0xd5, 0x60, 0x22, 0xe7, 0x73, 0x59, 0xf4, 0x6b, 0x84, 0x9a, 0x6b,
	0xe4, 0xbc, 0x03, 0x93, 0xf8, 0xc8, 0x02, 0x33, 0xcf, 0xba, 0x46, 0xcf, 0xb8, 0x3c, 0xe1, 0x66,
	0x9e, 0x39, 0x17, 0xd0, 0x20, 0x7e, 0x85, 0x7a, 0x70, 0x94, 0x2b, 0x31, 0xaf, 0xba, 0x46, 0xaf,
	0x71, 0xd9, 0xba, 0x82, 0xfe, 0x26, 0x04, 0xf1, 0xf9, 0x5a, 0x70, 0x66, 0x00, 0x6e, 0x36, 0xcf,
	0x8b, 0x50, 0xa5, 0x4a, 0x38, 0xf7, 0x70, 0x14, 0xad, 0x4a, 0x51, 0xa1, 0x16, 0x1c, 0xc7, 0xf4,
	0x86, 0xb2, 0x3b, 0x6a, 0x1f, 0x20, 0x04, 0x56, 0xc0, 0x71, 0xc0, 0xd9, 0x98, 0x84, 0x84, 0x51,
	0xec, 0xdb, 0x86, 0x36, 0x60, 0xea, 0x5e, 0x8f, 0xb0, 0x6f, 0x9b, 0xe8, 0x14, 0xde, 0xf8, 0x24,
	0x5c, 0xa3, 0x06, 0x3a, 0x87, 0xb7, 0x3e, 0xbb, 0xa3, 0x23, 0xe6, 0xfa, 0x84, 0x0e, 0x13, 0x72,
	0xeb, 0x0e, 0xb1, 0x7d, 0xe8, 0xfc, 0x35, 0x00, 0x58, 0x29, 0x16, 0x3a, 0xd3, 0xb2, 0x72, 0xfe,
	0x18, 0x7b, 0x73, 0x59, 0x00, 0x3e, 0x09, 0x3d, 0x36, 0xc6, 0xbc, 0xce, 0x63, 0x01, 0xb8, 0x5e,
	0x44, 0xc6, 0x6e, 0x44, 0xe8, 0xd0, 0x36, 0xb5, 0x39, 0xc2, 0x61, 0x0d, 0x1a, 0x08, 0xa0, 0x59,
	0x8b, 0xd8, 0x3e, 0xd4, 0xef, 0x5f, 0x2e, 0xd1, 0x15, 0x1c, 0xa1, 0x0e, 0xb4, 0x38, 0xf6, 0x18,
	0xf5, 0xc8, 0x48, 0x1b, 0x9b, 0xe8, 0x3d, 0xa0, 0x57, 0x44, 0xb2, 0x31, 0x1e, 0x3b, 0x18, 0xda,
	0x9e, 0x2c, 0x0a, 0x31, 0x51, 0x9b, 0xaa, 0xbe, 0xef, 0x2d, 0xaa, 0x03, 0xad, 0x98, 0x72, 0xec,
	0x7a, 0xbf, 0x75, 0x8f, 0xb6, 0x81, 0xda, 0x70, 0xb2, 0x85, 0xa6, 0xf3, 0xcf, 0x80, 0xb6, 0x6e,
	0x2d, 0x55, 0xb9, 0x2c, 0xb8, 0xa8, 0x4a, 0xf4, 0x13, 0x0e, 0x27, 0x32, 0x13, 0xf5, 0x46, 0xac,
	0xab, 0xcf, 0x2f, 0x73, 0xdf, 0x31, 0xbd, 0x46, 0x6a, 0xb9, 0x28, 0x3c, 0x99, 0x09, 0x5e, 0x7f,
	0x43, 0x17, 0xd0, 0x49, 0xb3, 0x2c, 0xd7, 0x5a, 0xfa, 0x94, 0xe4, 0xc5, 0xa3, 0xec, 0x9a, 0xf5,
	0x6e, 0xad, 0x2d, 0x4d, 0x8a, 0x47, 0xe9, 0xac, 0xe0, 0x6c, 0x4f, 0x14, 0xbd, 0x02, 0x16, 0x60,
	0xee, 0x46, 0x84, 0xd1, 0x24, 0x8c, 0x3d, 0x0f, 0x87, 0xa1, 0x7d, 0xb0, 0x4b, 0xeb, 0x21, 0xc4,
	0x5c, 0x77, 0xf3, 0x01, 0xce, 0xb7, 0x74, 0x4c, 0xc3, 0x38, 0x08, 0x18, 0x8f, 0xea, 0xcd, 0xee,
	0x48, 0x84, 0x26, 0x01, 0x67, 0x43, 0xae, 0x83, 0x35, 0xbe, 0x7c, 0x82, 0xd3, 0x48, 0x54, 0xea,
	0x56, 0x66, 0xe2, 0x46, 0xac, 0x2a, 0x7d, 0x04, 0x69, 0x99, 0x27, 0x4a, 0x54, 0xca, 0x3e, 0xb8,
	0xc6, 0x70, 0x26, 0x17, 0xd3, 0xbe, 0x2c, 0x45, 0x31, 0x91, 0x8b, 0xac, 0xbf, 0xbe, 0xe4, 0xfb,
	0xfe, 0x34, 0x57, 0xb3, 0xe5, 0x83, 0x9e, 0xc7, 0xe0, 0x45, 0x1b, 0xac, 0xb5, 0xaf, 0x9b, 0x2b,
	0x7f, 0xfe, 0x31, 0x98, 0xca, 0xcd, 0xad, 0x3f, 0x34, 0x6b, 0xf2, 0xdb, 0xff, 0x00, 0x00, 0x00,
	0xff, 0xff, 0x6b, 0x71, 0x98, 0xbd, 0x0a, 0x03, 0x00, 0x00,
}
