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