/*
 * Copyright 2017-present Open Networking Foundation

 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at

 * http://www.apache.org/licenses/LICENSE-2.0

 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
// Code generated by protoc-gen-go.
// source: common.proto
// DO NOT EDIT!

/*
Package voltha is a generated protocol buffer package.

It is generated from these files:
	common.proto

It has these top-level messages:
	ID
	LogLevel
	AdminState
	OperStatus
	ConnectStatus
*/
package common

import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import 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.ProtoPackageIsVersion2 // please upgrade the proto package

// Logging verbosity level
type LogLevel_LogLevel int32

const (
	LogLevel_DEBUG    LogLevel_LogLevel = 0
	LogLevel_INFO     LogLevel_LogLevel = 1
	LogLevel_WARNING  LogLevel_LogLevel = 2
	LogLevel_ERROR    LogLevel_LogLevel = 3
	LogLevel_CRITICAL LogLevel_LogLevel = 4
)

var LogLevel_LogLevel_name = map[int32]string{
	0: "DEBUG",
	1: "INFO",
	2: "WARNING",
	3: "ERROR",
	4: "CRITICAL",
}
var LogLevel_LogLevel_value = map[string]int32{
	"DEBUG":    0,
	"INFO":     1,
	"WARNING":  2,
	"ERROR":    3,
	"CRITICAL": 4,
}

func (x LogLevel_LogLevel) String() string {
	return proto.EnumName(LogLevel_LogLevel_name, int32(x))
}
func (LogLevel_LogLevel) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1, 0} }

// Administrative State
type AdminState_AdminState int32

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

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

func (x AdminState_AdminState) String() string {
	return proto.EnumName(AdminState_AdminState_name, int32(x))
}
func (AdminState_AdminState) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} }

// Operational Status
type OperStatus_OperStatus int32

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

var OperStatus_OperStatus_name = map[int32]string{
	0: "UNKNOWN",
	1: "DISCOVERED",
	2: "ACTIVATING",
	3: "TESTING",
	4: "ACTIVE",
	5: "FAILED",
}
var OperStatus_OperStatus_value = map[string]int32{
	"UNKNOWN":    0,
	"DISCOVERED": 1,
	"ACTIVATING": 2,
	"TESTING":    3,
	"ACTIVE":     4,
	"FAILED":     5,
}

func (x OperStatus_OperStatus) String() string {
	return proto.EnumName(OperStatus_OperStatus_name, int32(x))
}
func (OperStatus_OperStatus) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3, 0} }

// Connectivity Status
type ConnectStatus_ConnectStatus int32

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

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

func (x ConnectStatus_ConnectStatus) String() string {
	return proto.EnumName(ConnectStatus_ConnectStatus_name, int32(x))
}
func (ConnectStatus_ConnectStatus) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor0, []int{4, 0}
}

// Convey a resource identifier
type ID struct {
	Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
}

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

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

type LogLevel struct {
}

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

type AdminState struct {
}

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

type OperStatus struct {
}

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

type ConnectStatus struct {
}

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

func init() {
	proto.RegisterType((*ID)(nil), "voltha.ID")
	proto.RegisterType((*LogLevel)(nil), "voltha.LogLevel")
	proto.RegisterType((*AdminState)(nil), "voltha.AdminState")
	proto.RegisterType((*OperStatus)(nil), "voltha.OperStatus")
	proto.RegisterType((*ConnectStatus)(nil), "voltha.ConnectStatus")
	proto.RegisterEnum("voltha.LogLevel_LogLevel", LogLevel_LogLevel_name, LogLevel_LogLevel_value)
	proto.RegisterEnum("voltha.AdminState_AdminState", AdminState_AdminState_name, AdminState_AdminState_value)
	proto.RegisterEnum("voltha.OperStatus_OperStatus", OperStatus_OperStatus_name, OperStatus_OperStatus_value)
	proto.RegisterEnum("voltha.ConnectStatus_ConnectStatus", ConnectStatus_ConnectStatus_name, ConnectStatus_ConnectStatus_value)
}

func init() { proto.RegisterFile("common.proto", fileDescriptor0) }

var fileDescriptor0 = []byte{
	// 326 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x91, 0x4f, 0x4f, 0xc2, 0x30,
	0x18, 0xc6, 0xd9, 0xf8, 0xff, 0x02, 0xb3, 0x69, 0x3c, 0x18, 0x13, 0x13, 0xb3, 0x93, 0x27, 0x2f,
	0xde, 0x8c, 0x97, 0xb2, 0x15, 0x68, 0x5c, 0x5a, 0xd2, 0x0d, 0xf0, 0xa2, 0x06, 0x61, 0xc1, 0x25,
	0xd0, 0x12, 0xa8, 0x24, 0x7e, 0x48, 0xbf, 0x8b, 0x27, 0xcf, 0xa6, 0x9b, 0x04, 0xf0, 0xf6, 0x3e,
	0x7d, 0x9b, 0xdf, 0xaf, 0x4f, 0x0a, 0xed, 0x99, 0x5e, 0xad, 0xb4, 0xba, 0x5d, 0x6f, 0xb4, 0xd1,
	0xb8, 0xb6, 0xd3, 0x4b, 0xf3, 0x3e, 0xbd, 0xc4, 0x9f, 0x53, 0xb5, 0x78, 0xd5, 0x6b, 0x93, 0x69,
	0xb5, 0x2d, 0x76, 0xfe, 0x39, 0xb8, 0x2c, 0xc4, 0x1e, 0xb8, 0xd9, 0xfc, 0xc2, 0xb9, 0x76, 0x6e,
	0x9a, 0xd2, 0xcd, 0xe6, 0xfe, 0x13, 0x34, 0x22, 0xbd, 0x88, 0xd2, 0x5d, 0xba, 0xf4, 0xe9, 0x61,
	0xc6, 0x4d, 0xa8, 0x86, 0xb4, 0x3b, 0xea, 0xa3, 0x12, 0x6e, 0x40, 0x85, 0xf1, 0x9e, 0x40, 0x0e,
	0x6e, 0x41, 0x7d, 0x42, 0x24, 0x67, 0xbc, 0x8f, 0x5c, 0x7b, 0x83, 0x4a, 0x29, 0x24, 0x2a, 0xe3,
	0x36, 0x34, 0x02, 0xc9, 0x12, 0x16, 0x90, 0x08, 0x55, 0xee, 0xab, 0xdf, 0x3f, 0x5f, 0x57, 0x25,
	0xff, 0x19, 0x80, 0xcc, 0x57, 0x99, 0x8a, 0xcd, 0xd4, 0xa4, 0xfe, 0xe0, 0x38, 0x59, 0xd0, 0x88,
	0x3f, 0x72, 0x31, 0xe1, 0xa8, 0x84, 0x31, 0x78, 0x43, 0x49, 0x87, 0x52, 0x8c, 0x59, 0xcc, 0x04,
	0xa7, 0x61, 0x61, 0xa2, 0x9c, 0x74, 0x23, 0x1a, 0x16, 0xf8, 0x90, 0xc5, 0x45, 0x72, 0xf7, 0xf8,
	0x2d, 0x80, 0x58, 0xa7, 0x1b, 0xcb, 0xfb, 0xd8, 0xfa, 0x2f, 0xc7, 0xe9, 0x14, 0xef, 0x01, 0x84,
	0x2c, 0x0e, 0xc4, 0x98, 0xca, 0x1c, 0xed, 0x01, 0x90, 0x20, 0x61, 0x63, 0x92, 0x14, 0x3d, 0x5a,
	0x50, 0x4f, 0x68, 0x9c, 0x87, 0x32, 0x06, 0xa8, 0xe5, 0x4b, 0x8a, 0x2a, 0x76, 0xee, 0x11, 0x66,
	0xa5, 0xd5, 0xbd, 0x34, 0x81, 0x4e, 0xa0, 0x95, 0x4a, 0x67, 0xe6, 0xcf, 0xfb, 0xf0, 0xef, 0xe0,
	0x54, 0x7d, 0x06, 0xad, 0x11, 0x97, 0x94, 0x04, 0x03, 0xfb, 0x78, 0xe4, 0xe0, 0x0e, 0x34, 0x0f,
	0x71, 0x5f, 0xe5, 0xad, 0x96, 0x7f, 0xd0, 0xdd, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x49, 0x80,
	0x95, 0xd3, 0xcc, 0x01, 0x00, 0x00,
}
