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

package ietf

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 Interface_LinkUpDownTrapEnableType int32

const (
	Interface_TRAP_DISABLED Interface_LinkUpDownTrapEnableType = 0
	Interface_TRAP_ENABLED  Interface_LinkUpDownTrapEnableType = 1
)

var Interface_LinkUpDownTrapEnableType_name = map[int32]string{
	0: "TRAP_DISABLED",
	1: "TRAP_ENABLED",
}

var Interface_LinkUpDownTrapEnableType_value = map[string]int32{
	"TRAP_DISABLED": 0,
	"TRAP_ENABLED":  1,
}

func (x Interface_LinkUpDownTrapEnableType) String() string {
	return proto.EnumName(Interface_LinkUpDownTrapEnableType_name, int32(x))
}

func (Interface_LinkUpDownTrapEnableType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_5a91e49a45099096, []int{1, 0}
}

type InterfaceState_AdminStatusType int32

const (
	InterfaceState_ADMIN_DOWN    InterfaceState_AdminStatusType = 0
	InterfaceState_ADMIN_TESTING InterfaceState_AdminStatusType = 1
	InterfaceState_ADMIN_UP      InterfaceState_AdminStatusType = 2
)

var InterfaceState_AdminStatusType_name = map[int32]string{
	0: "ADMIN_DOWN",
	1: "ADMIN_TESTING",
	2: "ADMIN_UP",
}

var InterfaceState_AdminStatusType_value = map[string]int32{
	"ADMIN_DOWN":    0,
	"ADMIN_TESTING": 1,
	"ADMIN_UP":      2,
}

func (x InterfaceState_AdminStatusType) String() string {
	return proto.EnumName(InterfaceState_AdminStatusType_name, int32(x))
}

func (InterfaceState_AdminStatusType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_5a91e49a45099096, []int{3, 0}
}

type InterfaceState_OperStatusType int32

const (
	InterfaceState_DORMANT          InterfaceState_OperStatusType = 0
	InterfaceState_LOWER_LAYER_DOWN InterfaceState_OperStatusType = 1
	InterfaceState_UNKNOWN          InterfaceState_OperStatusType = 2
	InterfaceState_TESTING          InterfaceState_OperStatusType = 3
	InterfaceState_UP               InterfaceState_OperStatusType = 4
	InterfaceState_DOWN             InterfaceState_OperStatusType = 5
	InterfaceState_NOT_PRESENT      InterfaceState_OperStatusType = 6
)

var InterfaceState_OperStatusType_name = map[int32]string{
	0: "DORMANT",
	1: "LOWER_LAYER_DOWN",
	2: "UNKNOWN",
	3: "TESTING",
	4: "UP",
	5: "DOWN",
	6: "NOT_PRESENT",
}

var InterfaceState_OperStatusType_value = map[string]int32{
	"DORMANT":          0,
	"LOWER_LAYER_DOWN": 1,
	"UNKNOWN":          2,
	"TESTING":          3,
	"UP":               4,
	"DOWN":             5,
	"NOT_PRESENT":      6,
}

func (x InterfaceState_OperStatusType) String() string {
	return proto.EnumName(InterfaceState_OperStatusType_name, int32(x))
}

func (InterfaceState_OperStatusType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_5a91e49a45099096, []int{3, 1}
}

type Interfaces struct {
	AllInterfaces        []*Interface `protobuf:"bytes,1,rep,name=all_interfaces,json=allInterfaces,proto3" json:"all_interfaces,omitempty"`
	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
	XXX_unrecognized     []byte       `json:"-"`
	XXX_sizecache        int32        `json:"-"`
}

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

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

var xxx_messageInfo_Interfaces proto.InternalMessageInfo

func (m *Interfaces) GetAllInterfaces() []*Interface {
	if m != nil {
		return m.AllInterfaces
	}
	return nil
}

type Interface struct {
	Name                 string                             `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	Description          string                             `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
	Type                 string                             `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"`
	Enabled              bool                               `protobuf:"varint,4,opt,name=enabled,proto3" json:"enabled,omitempty"`
	LinkUpDownTrapEnable Interface_LinkUpDownTrapEnableType `protobuf:"varint,5,opt,name=link_up_down_trap_enable,json=linkUpDownTrapEnable,proto3,enum=ietf_interfaces.Interface_LinkUpDownTrapEnableType" json:"link_up_down_trap_enable,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                           `json:"-"`
	XXX_unrecognized     []byte                             `json:"-"`
	XXX_sizecache        int32                              `json:"-"`
}

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

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

var xxx_messageInfo_Interface proto.InternalMessageInfo

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

func (m *Interface) GetDescription() string {
	if m != nil {
		return m.Description
	}
	return ""
}

func (m *Interface) GetType() string {
	if m != nil {
		return m.Type
	}
	return ""
}

func (m *Interface) GetEnabled() bool {
	if m != nil {
		return m.Enabled
	}
	return false
}

func (m *Interface) GetLinkUpDownTrapEnable() Interface_LinkUpDownTrapEnableType {
	if m != nil {
		return m.LinkUpDownTrapEnable
	}
	return Interface_TRAP_DISABLED
}

type InterfacesState struct {
	AllInterfacs         []*InterfaceState `protobuf:"bytes,1,rep,name=all_interfacs,json=allInterfacs,proto3" json:"all_interfacs,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

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

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

var xxx_messageInfo_InterfacesState proto.InternalMessageInfo

func (m *InterfacesState) GetAllInterfacs() []*InterfaceState {
	if m != nil {
		return m.AllInterfacs
	}
	return nil
}

type InterfaceState struct {
	Name                 string                         `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	Type                 string                         `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
	AdminStatus          InterfaceState_AdminStatusType `protobuf:"varint,3,opt,name=admin_status,json=adminStatus,proto3,enum=ietf_interfaces.InterfaceState_AdminStatusType" json:"admin_status,omitempty"`
	OperStatus           InterfaceState_OperStatusType  `protobuf:"varint,4,opt,name=oper_status,json=operStatus,proto3,enum=ietf_interfaces.InterfaceState_OperStatusType" json:"oper_status,omitempty"`
	LastChange           string                         `protobuf:"bytes,5,opt,name=last_change,json=lastChange,proto3" json:"last_change,omitempty"`
	IfIndex              int32                          `protobuf:"varint,6,opt,name=if_index,json=ifIndex,proto3" json:"if_index,omitempty"`
	PhysAddress          string                         `protobuf:"bytes,7,opt,name=phys_address,json=physAddress,proto3" json:"phys_address,omitempty"`
	HigherLayerIf        []string                       `protobuf:"bytes,8,rep,name=higher_layer_if,json=higherLayerIf,proto3" json:"higher_layer_if,omitempty"`
	LowerLayerIf         []string                       `protobuf:"bytes,9,rep,name=lower_layer_if,json=lowerLayerIf,proto3" json:"lower_layer_if,omitempty"`
	Speed                uint64                         `protobuf:"varint,10,opt,name=speed,proto3" json:"speed,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
	XXX_unrecognized     []byte                         `json:"-"`
	XXX_sizecache        int32                          `json:"-"`
}

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

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

var xxx_messageInfo_InterfaceState proto.InternalMessageInfo

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

func (m *InterfaceState) GetType() string {
	if m != nil {
		return m.Type
	}
	return ""
}

func (m *InterfaceState) GetAdminStatus() InterfaceState_AdminStatusType {
	if m != nil {
		return m.AdminStatus
	}
	return InterfaceState_ADMIN_DOWN
}

func (m *InterfaceState) GetOperStatus() InterfaceState_OperStatusType {
	if m != nil {
		return m.OperStatus
	}
	return InterfaceState_DORMANT
}

func (m *InterfaceState) GetLastChange() string {
	if m != nil {
		return m.LastChange
	}
	return ""
}

func (m *InterfaceState) GetIfIndex() int32 {
	if m != nil {
		return m.IfIndex
	}
	return 0
}

func (m *InterfaceState) GetPhysAddress() string {
	if m != nil {
		return m.PhysAddress
	}
	return ""
}

func (m *InterfaceState) GetHigherLayerIf() []string {
	if m != nil {
		return m.HigherLayerIf
	}
	return nil
}

func (m *InterfaceState) GetLowerLayerIf() []string {
	if m != nil {
		return m.LowerLayerIf
	}
	return nil
}

func (m *InterfaceState) GetSpeed() uint64 {
	if m != nil {
		return m.Speed
	}
	return 0
}

func init() {
	proto.RegisterEnum("ietf_interfaces.Interface_LinkUpDownTrapEnableType", Interface_LinkUpDownTrapEnableType_name, Interface_LinkUpDownTrapEnableType_value)
	proto.RegisterEnum("ietf_interfaces.InterfaceState_AdminStatusType", InterfaceState_AdminStatusType_name, InterfaceState_AdminStatusType_value)
	proto.RegisterEnum("ietf_interfaces.InterfaceState_OperStatusType", InterfaceState_OperStatusType_name, InterfaceState_OperStatusType_value)
	proto.RegisterType((*Interfaces)(nil), "ietf_interfaces.Interfaces")
	proto.RegisterType((*Interface)(nil), "ietf_interfaces.Interface")
	proto.RegisterType((*InterfacesState)(nil), "ietf_interfaces.InterfacesState")
	proto.RegisterType((*InterfaceState)(nil), "ietf_interfaces.InterfaceState")
}

func init() {
	proto.RegisterFile("voltha_protos/ietf_interfaces.proto", fileDescriptor_5a91e49a45099096)
}

var fileDescriptor_5a91e49a45099096 = []byte{
	// 614 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x94, 0xdf, 0x6e, 0x9b, 0x30,
	0x18, 0xc5, 0x4b, 0xfe, 0xe7, 0x23, 0x21, 0xcc, 0xea, 0x05, 0xdb, 0x4d, 0x19, 0x9b, 0x26, 0xa6,
	0x69, 0x89, 0xd4, 0x3e, 0xc0, 0x44, 0x07, 0x9a, 0xa2, 0xa5, 0x10, 0x39, 0x44, 0xd5, 0x76, 0x63,
	0xb9, 0xc1, 0x49, 0x50, 0x29, 0x58, 0xe0, 0xae, 0xcb, 0xc3, 0xec, 0xb5, 0xf6, 0x3c, 0x13, 0x66,
	0x49, 0x69, 0xd5, 0xaa, 0x77, 0x9c, 0xdf, 0xf7, 0x9d, 0x13, 0xeb, 0xc4, 0x32, 0xbc, 0xfb, 0x95,
	0x25, 0x62, 0x4b, 0x09, 0xcf, 0x33, 0x91, 0x15, 0x93, 0x98, 0x89, 0x35, 0x89, 0x53, 0xc1, 0xf2,
	0x35, 0x5d, 0xb1, 0x62, 0x2c, 0x31, 0x1a, 0x3d, 0xc2, 0x56, 0x00, 0x30, 0x3d, 0x28, 0xe4, 0x80,
	0x46, 0x93, 0xa4, 0x36, 0x37, 0x14, 0xb3, 0x69, 0xab, 0xa7, 0x6f, 0xc6, 0x8f, 0xe3, 0x0e, 0x26,
	0x3c, 0xa4, 0x49, 0x72, 0x1f, 0x61, 0xfd, 0x69, 0x40, 0xff, 0x20, 0x11, 0x82, 0x56, 0x4a, 0x6f,
	0x98, 0xa1, 0x98, 0x8a, 0xdd, 0xc7, 0xf2, 0x1b, 0x99, 0xa0, 0x46, 0xac, 0x58, 0xe5, 0x31, 0x17,
	0x71, 0x96, 0x1a, 0x0d, 0x39, 0xaa, 0xa3, 0xd2, 0x25, 0x76, 0x9c, 0x19, 0xcd, 0xca, 0x55, 0x7e,
	0x23, 0x03, 0xba, 0x2c, 0xa5, 0x57, 0x09, 0x8b, 0x8c, 0x96, 0xa9, 0xd8, 0x3d, 0xbc, 0x97, 0xe8,
	0x1a, 0x8c, 0x24, 0x4e, 0xaf, 0xc9, 0x2d, 0x27, 0x51, 0x76, 0x97, 0x12, 0x91, 0x53, 0x4e, 0xaa,
	0xa1, 0xd1, 0x36, 0x15, 0x5b, 0x3b, 0x3d, 0x7b, 0xfe, 0xf8, 0xe3, 0x59, 0x9c, 0x5e, 0x2f, 0xb9,
	0x9b, 0xdd, 0xa5, 0x61, 0x4e, 0xb9, 0x27, 0x6d, 0xe1, 0x8e, 0x33, 0x7c, 0x9c, 0x3c, 0x31, 0xb1,
	0xbe, 0x80, 0xf1, 0x9c, 0x03, 0xbd, 0x82, 0x61, 0x88, 0x9d, 0x39, 0x71, 0xa7, 0x0b, 0xe7, 0x7c,
	0xe6, 0xb9, 0xfa, 0x11, 0xd2, 0x61, 0x20, 0x91, 0xe7, 0x57, 0x44, 0xb1, 0x2e, 0x61, 0x74, 0xdf,
	0xd6, 0x42, 0x50, 0xc1, 0x90, 0x0b, 0xc3, 0x7a, 0xeb, 0xfb, 0xd2, 0x4f, 0x9e, 0x3f, 0xb5, 0xf4,
	0xe1, 0x41, 0xad, 0xf9, 0xc2, 0xfa, 0xdb, 0x02, 0xed, 0xe1, 0xc2, 0x93, 0xed, 0xef, 0xbb, 0x6d,
	0xd4, 0xba, 0xc5, 0x30, 0xa0, 0xd1, 0x4d, 0x9c, 0x92, 0x42, 0x50, 0x71, 0x5b, 0xc8, 0xde, 0xb5,
	0xd3, 0xc9, 0x0b, 0xbf, 0x3f, 0x76, 0x4a, 0xcf, 0x42, 0x5a, 0x64, 0x63, 0x2a, 0xbd, 0x07, 0x28,
	0x00, 0x35, 0xe3, 0x2c, 0xdf, 0x47, 0xb6, 0x64, 0xe4, 0xf8, 0xa5, 0xc8, 0x80, 0xb3, 0xbc, 0x96,
	0x08, 0xd9, 0x41, 0xa3, 0x13, 0x50, 0x13, 0x5a, 0x08, 0xb2, 0xda, 0xd2, 0x74, 0x53, 0xfd, 0xb3,
	0x7d, 0x0c, 0x25, 0xfa, 0x2a, 0x09, 0x7a, 0x0d, 0xbd, 0xb8, 0xcc, 0x8e, 0xd8, 0x6f, 0xa3, 0x63,
	0x2a, 0x76, 0x1b, 0x77, 0xe3, 0xf5, 0xb4, 0x94, 0xe8, 0x2d, 0x0c, 0xf8, 0x76, 0x57, 0x10, 0x1a,
	0x45, 0x39, 0x2b, 0x0a, 0xa3, 0x5b, 0xdd, 0xb9, 0x92, 0x39, 0x15, 0x42, 0x1f, 0x60, 0xb4, 0x8d,
	0x37, 0x5b, 0x96, 0x93, 0x84, 0xee, 0x58, 0x4e, 0xe2, 0xb5, 0xd1, 0x33, 0x9b, 0x76, 0x1f, 0x0f,
	0x2b, 0x3c, 0x2b, 0xe9, 0x74, 0x8d, 0xde, 0x83, 0x96, 0x64, 0x77, 0xf5, 0xb5, 0xbe, 0x5c, 0x1b,
	0x48, 0xba, 0xdf, 0x3a, 0x86, 0x76, 0xc1, 0x19, 0x8b, 0x0c, 0x30, 0x15, 0xbb, 0x85, 0x2b, 0x61,
	0x9d, 0xc3, 0xe8, 0x51, 0x67, 0x48, 0x03, 0x70, 0xdc, 0x8b, 0xa9, 0x4f, 0xdc, 0xe0, 0xd2, 0xd7,
	0x8f, 0xca, 0x3b, 0x54, 0xe9, 0xd0, 0x5b, 0x84, 0x53, 0xff, 0x9b, 0xae, 0xa0, 0x01, 0xf4, 0x2a,
	0xb4, 0x9c, 0xeb, 0x0d, 0x8b, 0x83, 0xf6, 0xb0, 0x24, 0xa4, 0x42, 0xd7, 0x0d, 0xf0, 0x85, 0xe3,
	0x87, 0xfa, 0x11, 0x3a, 0x06, 0x7d, 0x16, 0x5c, 0x7a, 0x98, 0xcc, 0x9c, 0x1f, 0x1e, 0xae, 0x52,
	0x95, 0x72, 0x65, 0xe9, 0x7f, 0xf7, 0x4b, 0xd1, 0x28, 0xc5, 0x3e, 0xbc, 0x89, 0x3a, 0xd0, 0x58,
	0xce, 0xf5, 0x16, 0xea, 0x41, 0x4b, 0xee, 0xb6, 0xd1, 0x08, 0x54, 0x3f, 0x08, 0xc9, 0x1c, 0x7b,
	0x0b, 0xcf, 0x0f, 0xf5, 0xce, 0xf9, 0xa7, 0x9f, 0x1f, 0x37, 0xb1, 0xd8, 0xde, 0x5e, 0x8d, 0x57,
	0xd9, 0xcd, 0x24, 0xe3, 0x2c, 0x5d, 0x65, 0x79, 0x34, 0xa9, 0x9e, 0x9b, 0xcf, 0xff, 0x9f, 0x9b,
	0x4d, 0x26, 0x5f, 0x9c, 0xab, 0x8e, 0xd4, 0x67, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x97, 0xf8,
	0x6c, 0xee, 0x8e, 0x04, 0x00, 0x00,
}
