// 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.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.InterfaceState_AdminStatusType" json:"admin_status,omitempty"`
	OperStatus           InterfaceState_OperStatusType  `protobuf:"varint,4,opt,name=oper_status,json=operStatus,proto3,enum=ietf.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.Interface_LinkUpDownTrapEnableType", Interface_LinkUpDownTrapEnableType_name, Interface_LinkUpDownTrapEnableType_value)
	proto.RegisterEnum("ietf.InterfaceState_AdminStatusType", InterfaceState_AdminStatusType_name, InterfaceState_AdminStatusType_value)
	proto.RegisterEnum("ietf.InterfaceState_OperStatusType", InterfaceState_OperStatusType_name, InterfaceState_OperStatusType_value)
	proto.RegisterType((*Interfaces)(nil), "ietf.Interfaces")
	proto.RegisterType((*Interface)(nil), "ietf.Interface")
	proto.RegisterType((*InterfacesState)(nil), "ietf.InterfacesState")
	proto.RegisterType((*InterfaceState)(nil), "ietf.InterfaceState")
}

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

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