From 1b4e5203e47e16fe5574c4eb59a0556d3b9a3c14 Mon Sep 17 00:00:00 2001 From: Tuetuopay Date: Fri, 22 Nov 2024 18:10:51 +0100 Subject: [PATCH 1/4] api: nuke google.protobuf.Any from orbit --- api/attribute.pb.go | 10225 ++++++++++++++--------------------------- api/attribute.proto | 659 +-- api/capability.pb.go | 718 ++- api/capability.proto | 20 +- api/common.pb.go | 685 +++ api/common.proto | 55 + api/extcom.pb.go | 2328 ++++++++++ api/extcom.proto | 137 + api/gobgp.pb.go | 4592 +++++++++--------- api/gobgp.proto | 84 +- api/nlri.pb.go | 4056 ++++++++++++++++ api/nlri.proto | 334 ++ 12 files changed, 13756 insertions(+), 10137 deletions(-) create mode 100644 api/common.pb.go create mode 100644 api/common.proto create mode 100644 api/extcom.pb.go create mode 100644 api/extcom.proto create mode 100644 api/nlri.pb.go create mode 100644 api/nlri.proto diff --git a/api/attribute.pb.go b/api/attribute.pb.go index c31f0626d..0b5af4fdb 100644 --- a/api/attribute.pb.go +++ b/api/attribute.pb.go @@ -22,7 +22,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.21.12 +// protoc v5.29.2 // source: attribute.proto package apipb @@ -30,7 +30,6 @@ package apipb import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - anypb "google.golang.org/protobuf/types/known/anypb" reflect "reflect" sync "sync" ) @@ -42,184 +41,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -type LsOspfRouteType int32 - -const ( - LsOspfRouteType_LS_OSPF_ROUTE_TYPE_UNKNOWN LsOspfRouteType = 0 - LsOspfRouteType_LS_OSPF_ROUTE_TYPE_INTRA_AREA LsOspfRouteType = 1 - LsOspfRouteType_LS_OSPF_ROUTE_TYPE_INTER_AREA LsOspfRouteType = 2 - LsOspfRouteType_LS_OSPF_ROUTE_TYPE_EXTERNAL1 LsOspfRouteType = 3 - LsOspfRouteType_LS_OSPF_ROUTE_TYPE_EXTERNAL2 LsOspfRouteType = 4 - LsOspfRouteType_LS_OSPF_ROUTE_TYPE_NSSA1 LsOspfRouteType = 5 - LsOspfRouteType_LS_OSPF_ROUTE_TYPE_NSSA2 LsOspfRouteType = 6 -) - -// Enum value maps for LsOspfRouteType. -var ( - LsOspfRouteType_name = map[int32]string{ - 0: "LS_OSPF_ROUTE_TYPE_UNKNOWN", - 1: "LS_OSPF_ROUTE_TYPE_INTRA_AREA", - 2: "LS_OSPF_ROUTE_TYPE_INTER_AREA", - 3: "LS_OSPF_ROUTE_TYPE_EXTERNAL1", - 4: "LS_OSPF_ROUTE_TYPE_EXTERNAL2", - 5: "LS_OSPF_ROUTE_TYPE_NSSA1", - 6: "LS_OSPF_ROUTE_TYPE_NSSA2", - } - LsOspfRouteType_value = map[string]int32{ - "LS_OSPF_ROUTE_TYPE_UNKNOWN": 0, - "LS_OSPF_ROUTE_TYPE_INTRA_AREA": 1, - "LS_OSPF_ROUTE_TYPE_INTER_AREA": 2, - "LS_OSPF_ROUTE_TYPE_EXTERNAL1": 3, - "LS_OSPF_ROUTE_TYPE_EXTERNAL2": 4, - "LS_OSPF_ROUTE_TYPE_NSSA1": 5, - "LS_OSPF_ROUTE_TYPE_NSSA2": 6, - } -) - -func (x LsOspfRouteType) Enum() *LsOspfRouteType { - p := new(LsOspfRouteType) - *p = x - return p -} - -func (x LsOspfRouteType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (LsOspfRouteType) Descriptor() protoreflect.EnumDescriptor { - return file_attribute_proto_enumTypes[0].Descriptor() -} - -func (LsOspfRouteType) Type() protoreflect.EnumType { - return &file_attribute_proto_enumTypes[0] -} - -func (x LsOspfRouteType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use LsOspfRouteType.Descriptor instead. -func (LsOspfRouteType) EnumDescriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{0} -} - -// Based om RFC 7752, Table 1. -type LsNLRIType int32 - -const ( - LsNLRIType_LS_NLRI_UNKNOWN LsNLRIType = 0 - LsNLRIType_LS_NLRI_NODE LsNLRIType = 1 - LsNLRIType_LS_NLRI_LINK LsNLRIType = 2 - LsNLRIType_LS_NLRI_PREFIX_V4 LsNLRIType = 3 - LsNLRIType_LS_NLRI_PREFIX_V6 LsNLRIType = 4 -) - -// Enum value maps for LsNLRIType. -var ( - LsNLRIType_name = map[int32]string{ - 0: "LS_NLRI_UNKNOWN", - 1: "LS_NLRI_NODE", - 2: "LS_NLRI_LINK", - 3: "LS_NLRI_PREFIX_V4", - 4: "LS_NLRI_PREFIX_V6", - } - LsNLRIType_value = map[string]int32{ - "LS_NLRI_UNKNOWN": 0, - "LS_NLRI_NODE": 1, - "LS_NLRI_LINK": 2, - "LS_NLRI_PREFIX_V4": 3, - "LS_NLRI_PREFIX_V6": 4, - } -) - -func (x LsNLRIType) Enum() *LsNLRIType { - p := new(LsNLRIType) - *p = x - return p -} - -func (x LsNLRIType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (LsNLRIType) Descriptor() protoreflect.EnumDescriptor { - return file_attribute_proto_enumTypes[1].Descriptor() -} - -func (LsNLRIType) Type() protoreflect.EnumType { - return &file_attribute_proto_enumTypes[1] -} - -func (x LsNLRIType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use LsNLRIType.Descriptor instead. -func (LsNLRIType) EnumDescriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{1} -} - -type LsProtocolID int32 - -const ( - LsProtocolID_LS_PROTOCOL_UNKNOWN LsProtocolID = 0 - LsProtocolID_LS_PROTOCOL_ISIS_L1 LsProtocolID = 1 - LsProtocolID_LS_PROTOCOL_ISIS_L2 LsProtocolID = 2 - LsProtocolID_LS_PROTOCOL_OSPF_V2 LsProtocolID = 3 - LsProtocolID_LS_PROTOCOL_DIRECT LsProtocolID = 4 - LsProtocolID_LS_PROTOCOL_STATIC LsProtocolID = 5 - LsProtocolID_LS_PROTOCOL_OSPF_V3 LsProtocolID = 6 -) - -// Enum value maps for LsProtocolID. -var ( - LsProtocolID_name = map[int32]string{ - 0: "LS_PROTOCOL_UNKNOWN", - 1: "LS_PROTOCOL_ISIS_L1", - 2: "LS_PROTOCOL_ISIS_L2", - 3: "LS_PROTOCOL_OSPF_V2", - 4: "LS_PROTOCOL_DIRECT", - 5: "LS_PROTOCOL_STATIC", - 6: "LS_PROTOCOL_OSPF_V3", - } - LsProtocolID_value = map[string]int32{ - "LS_PROTOCOL_UNKNOWN": 0, - "LS_PROTOCOL_ISIS_L1": 1, - "LS_PROTOCOL_ISIS_L2": 2, - "LS_PROTOCOL_OSPF_V2": 3, - "LS_PROTOCOL_DIRECT": 4, - "LS_PROTOCOL_STATIC": 5, - "LS_PROTOCOL_OSPF_V3": 6, - } -) - -func (x LsProtocolID) Enum() *LsProtocolID { - p := new(LsProtocolID) - *p = x - return p -} - -func (x LsProtocolID) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (LsProtocolID) Descriptor() protoreflect.EnumDescriptor { - return file_attribute_proto_enumTypes[2].Descriptor() -} - -func (LsProtocolID) Type() protoreflect.EnumType { - return &file_attribute_proto_enumTypes[2] -} - -func (x LsProtocolID) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use LsProtocolID.Descriptor instead. -func (LsProtocolID) EnumDescriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{2} -} - type SRv6Behavior int32 const ( @@ -367,11 +188,11 @@ func (x SRv6Behavior) String() string { } func (SRv6Behavior) Descriptor() protoreflect.EnumDescriptor { - return file_attribute_proto_enumTypes[3].Descriptor() + return file_attribute_proto_enumTypes[0].Descriptor() } func (SRv6Behavior) Type() protoreflect.EnumType { - return &file_attribute_proto_enumTypes[3] + return &file_attribute_proto_enumTypes[0] } func (x SRv6Behavior) Number() protoreflect.EnumNumber { @@ -380,7 +201,7 @@ func (x SRv6Behavior) Number() protoreflect.EnumNumber { // Deprecated: Use SRv6Behavior.Descriptor instead. func (SRv6Behavior) EnumDescriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{3} + return file_attribute_proto_rawDescGZIP(), []int{0} } type ENLPType int32 @@ -422,11 +243,11 @@ func (x ENLPType) String() string { } func (ENLPType) Descriptor() protoreflect.EnumDescriptor { - return file_attribute_proto_enumTypes[4].Descriptor() + return file_attribute_proto_enumTypes[1].Descriptor() } func (ENLPType) Type() protoreflect.EnumType { - return &file_attribute_proto_enumTypes[4] + return &file_attribute_proto_enumTypes[1] } func (x ENLPType) Number() protoreflect.EnumNumber { @@ -435,7 +256,7 @@ func (x ENLPType) Number() protoreflect.EnumNumber { // Deprecated: Use ENLPType.Descriptor instead. func (ENLPType) EnumDescriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{4} + return file_attribute_proto_rawDescGZIP(), []int{1} } type AsSegment_Type int32 @@ -477,11 +298,11 @@ func (x AsSegment_Type) String() string { } func (AsSegment_Type) Descriptor() protoreflect.EnumDescriptor { - return file_attribute_proto_enumTypes[5].Descriptor() + return file_attribute_proto_enumTypes[2].Descriptor() } func (AsSegment_Type) Type() protoreflect.EnumType { - return &file_attribute_proto_enumTypes[5] + return &file_attribute_proto_enumTypes[2] } func (x AsSegment_Type) Number() protoreflect.EnumNumber { @@ -490,19 +311,44 @@ func (x AsSegment_Type) Number() protoreflect.EnumNumber { // Deprecated: Use AsSegment_Type.Descriptor instead. func (AsSegment_Type) EnumDescriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{1, 0} + return file_attribute_proto_rawDescGZIP(), []int{2, 0} } -type OriginAttribute struct { +type Attribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Origin uint32 `protobuf:"varint,1,opt,name=origin,proto3" json:"origin,omitempty"` -} - -func (x *OriginAttribute) Reset() { - *x = OriginAttribute{} + // Types that are assignable to Attr: + // + // *Attribute_Unknown + // *Attribute_Origin + // *Attribute_AsPath + // *Attribute_NextHop + // *Attribute_MultiExitDisc + // *Attribute_LocalPref + // *Attribute_AtomicAggregate + // *Attribute_Aggregator + // *Attribute_Communities + // *Attribute_OriginatorId + // *Attribute_ClusterList + // *Attribute_MpReach + // *Attribute_MpUnreach + // *Attribute_ExtendedCommunities + // *Attribute_As4Path + // *Attribute_As4Aggregator + // *Attribute_PmsiTunnel + // *Attribute_TunnelEncap + // *Attribute_Ip6ExtendedCommunities + // *Attribute_Aigp + // *Attribute_LargeCommunities + // *Attribute_Ls + // *Attribute_PrefixSid + Attr isAttribute_Attr `protobuf_oneof:"attr"` +} + +func (x *Attribute) Reset() { + *x = Attribute{} if protoimpl.UnsafeEnabled { mi := &file_attribute_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -510,13 +356,13 @@ func (x *OriginAttribute) Reset() { } } -func (x *OriginAttribute) String() string { +func (x *Attribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*OriginAttribute) ProtoMessage() {} +func (*Attribute) ProtoMessage() {} -func (x *OriginAttribute) ProtoReflect() protoreflect.Message { +func (x *Attribute) ProtoReflect() protoreflect.Message { mi := &file_attribute_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -528,284 +374,346 @@ func (x *OriginAttribute) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use OriginAttribute.ProtoReflect.Descriptor instead. -func (*OriginAttribute) Descriptor() ([]byte, []int) { +// Deprecated: Use Attribute.ProtoReflect.Descriptor instead. +func (*Attribute) Descriptor() ([]byte, []int) { return file_attribute_proto_rawDescGZIP(), []int{0} } -func (x *OriginAttribute) GetOrigin() uint32 { - if x != nil { - return x.Origin +func (m *Attribute) GetAttr() isAttribute_Attr { + if m != nil { + return m.Attr } - return 0 + return nil } -type AsSegment struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *Attribute) GetUnknown() *UnknownAttribute { + if x, ok := x.GetAttr().(*Attribute_Unknown); ok { + return x.Unknown + } + return nil +} - Type AsSegment_Type `protobuf:"varint,1,opt,name=type,proto3,enum=apipb.AsSegment_Type" json:"type,omitempty"` - Numbers []uint32 `protobuf:"varint,2,rep,packed,name=numbers,proto3" json:"numbers,omitempty"` +func (x *Attribute) GetOrigin() *OriginAttribute { + if x, ok := x.GetAttr().(*Attribute_Origin); ok { + return x.Origin + } + return nil } -func (x *AsSegment) Reset() { - *x = AsSegment{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *Attribute) GetAsPath() *AsPathAttribute { + if x, ok := x.GetAttr().(*Attribute_AsPath); ok { + return x.AsPath } + return nil } -func (x *AsSegment) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *Attribute) GetNextHop() *NextHopAttribute { + if x, ok := x.GetAttr().(*Attribute_NextHop); ok { + return x.NextHop + } + return nil } -func (*AsSegment) ProtoMessage() {} +func (x *Attribute) GetMultiExitDisc() *MultiExitDiscAttribute { + if x, ok := x.GetAttr().(*Attribute_MultiExitDisc); ok { + return x.MultiExitDisc + } + return nil +} -func (x *AsSegment) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *Attribute) GetLocalPref() *LocalPrefAttribute { + if x, ok := x.GetAttr().(*Attribute_LocalPref); ok { + return x.LocalPref } - return mi.MessageOf(x) + return nil } -// Deprecated: Use AsSegment.ProtoReflect.Descriptor instead. -func (*AsSegment) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{1} +func (x *Attribute) GetAtomicAggregate() *AtomicAggregateAttribute { + if x, ok := x.GetAttr().(*Attribute_AtomicAggregate); ok { + return x.AtomicAggregate + } + return nil } -func (x *AsSegment) GetType() AsSegment_Type { - if x != nil { - return x.Type +func (x *Attribute) GetAggregator() *AggregatorAttribute { + if x, ok := x.GetAttr().(*Attribute_Aggregator); ok { + return x.Aggregator } - return AsSegment_UNKNOWN + return nil } -func (x *AsSegment) GetNumbers() []uint32 { - if x != nil { - return x.Numbers +func (x *Attribute) GetCommunities() *CommunitiesAttribute { + if x, ok := x.GetAttr().(*Attribute_Communities); ok { + return x.Communities } return nil } -type AsPathAttribute struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *Attribute) GetOriginatorId() *OriginatorIdAttribute { + if x, ok := x.GetAttr().(*Attribute_OriginatorId); ok { + return x.OriginatorId + } + return nil +} - Segments []*AsSegment `protobuf:"bytes,1,rep,name=segments,proto3" json:"segments,omitempty"` +func (x *Attribute) GetClusterList() *ClusterListAttribute { + if x, ok := x.GetAttr().(*Attribute_ClusterList); ok { + return x.ClusterList + } + return nil } -func (x *AsPathAttribute) Reset() { - *x = AsPathAttribute{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *Attribute) GetMpReach() *MpReachNLRIAttribute { + if x, ok := x.GetAttr().(*Attribute_MpReach); ok { + return x.MpReach } + return nil } -func (x *AsPathAttribute) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *Attribute) GetMpUnreach() *MpUnreachNLRIAttribute { + if x, ok := x.GetAttr().(*Attribute_MpUnreach); ok { + return x.MpUnreach + } + return nil } -func (*AsPathAttribute) ProtoMessage() {} +func (x *Attribute) GetExtendedCommunities() *ExtendedCommunitiesAttribute { + if x, ok := x.GetAttr().(*Attribute_ExtendedCommunities); ok { + return x.ExtendedCommunities + } + return nil +} -func (x *AsPathAttribute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *Attribute) GetAs4Path() *As4PathAttribute { + if x, ok := x.GetAttr().(*Attribute_As4Path); ok { + return x.As4Path } - return mi.MessageOf(x) + return nil } -// Deprecated: Use AsPathAttribute.ProtoReflect.Descriptor instead. -func (*AsPathAttribute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{2} +func (x *Attribute) GetAs4Aggregator() *As4AggregatorAttribute { + if x, ok := x.GetAttr().(*Attribute_As4Aggregator); ok { + return x.As4Aggregator + } + return nil } -func (x *AsPathAttribute) GetSegments() []*AsSegment { - if x != nil { - return x.Segments +func (x *Attribute) GetPmsiTunnel() *PmsiTunnelAttribute { + if x, ok := x.GetAttr().(*Attribute_PmsiTunnel); ok { + return x.PmsiTunnel } return nil } -type NextHopAttribute struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *Attribute) GetTunnelEncap() *TunnelEncapAttribute { + if x, ok := x.GetAttr().(*Attribute_TunnelEncap); ok { + return x.TunnelEncap + } + return nil +} - NextHop string `protobuf:"bytes,1,opt,name=next_hop,json=nextHop,proto3" json:"next_hop,omitempty"` +func (x *Attribute) GetIp6ExtendedCommunities() *IP6ExtendedCommunitiesAttribute { + if x, ok := x.GetAttr().(*Attribute_Ip6ExtendedCommunities); ok { + return x.Ip6ExtendedCommunities + } + return nil } -func (x *NextHopAttribute) Reset() { - *x = NextHopAttribute{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *Attribute) GetAigp() *AigpAttribute { + if x, ok := x.GetAttr().(*Attribute_Aigp); ok { + return x.Aigp } + return nil } -func (x *NextHopAttribute) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *Attribute) GetLargeCommunities() *LargeCommunitiesAttribute { + if x, ok := x.GetAttr().(*Attribute_LargeCommunities); ok { + return x.LargeCommunities + } + return nil } -func (*NextHopAttribute) ProtoMessage() {} +func (x *Attribute) GetLs() *LsAttribute { + if x, ok := x.GetAttr().(*Attribute_Ls); ok { + return x.Ls + } + return nil +} -func (x *NextHopAttribute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *Attribute) GetPrefixSid() *PrefixSID { + if x, ok := x.GetAttr().(*Attribute_PrefixSid); ok { + return x.PrefixSid } - return mi.MessageOf(x) + return nil } -// Deprecated: Use NextHopAttribute.ProtoReflect.Descriptor instead. -func (*NextHopAttribute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{3} +type isAttribute_Attr interface { + isAttribute_Attr() } -func (x *NextHopAttribute) GetNextHop() string { - if x != nil { - return x.NextHop - } - return "" +type Attribute_Unknown struct { + Unknown *UnknownAttribute `protobuf:"bytes,1,opt,name=unknown,proto3,oneof"` } -type MultiExitDiscAttribute struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +type Attribute_Origin struct { + Origin *OriginAttribute `protobuf:"bytes,2,opt,name=origin,proto3,oneof"` +} - Med uint32 `protobuf:"varint,1,opt,name=med,proto3" json:"med,omitempty"` +type Attribute_AsPath struct { + AsPath *AsPathAttribute `protobuf:"bytes,3,opt,name=as_path,json=asPath,proto3,oneof"` } -func (x *MultiExitDiscAttribute) Reset() { - *x = MultiExitDiscAttribute{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +type Attribute_NextHop struct { + NextHop *NextHopAttribute `protobuf:"bytes,4,opt,name=next_hop,json=nextHop,proto3,oneof"` } -func (x *MultiExitDiscAttribute) String() string { - return protoimpl.X.MessageStringOf(x) +type Attribute_MultiExitDisc struct { + MultiExitDisc *MultiExitDiscAttribute `protobuf:"bytes,5,opt,name=multi_exit_disc,json=multiExitDisc,proto3,oneof"` } -func (*MultiExitDiscAttribute) ProtoMessage() {} +type Attribute_LocalPref struct { + LocalPref *LocalPrefAttribute `protobuf:"bytes,6,opt,name=local_pref,json=localPref,proto3,oneof"` +} -func (x *MultiExitDiscAttribute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) +type Attribute_AtomicAggregate struct { + AtomicAggregate *AtomicAggregateAttribute `protobuf:"bytes,7,opt,name=atomic_aggregate,json=atomicAggregate,proto3,oneof"` } -// Deprecated: Use MultiExitDiscAttribute.ProtoReflect.Descriptor instead. -func (*MultiExitDiscAttribute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{4} +type Attribute_Aggregator struct { + Aggregator *AggregatorAttribute `protobuf:"bytes,8,opt,name=aggregator,proto3,oneof"` } -func (x *MultiExitDiscAttribute) GetMed() uint32 { - if x != nil { - return x.Med - } - return 0 +type Attribute_Communities struct { + Communities *CommunitiesAttribute `protobuf:"bytes,9,opt,name=communities,proto3,oneof"` } -type LocalPrefAttribute struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +type Attribute_OriginatorId struct { + OriginatorId *OriginatorIdAttribute `protobuf:"bytes,10,opt,name=originator_id,json=originatorId,proto3,oneof"` +} - LocalPref uint32 `protobuf:"varint,1,opt,name=local_pref,json=localPref,proto3" json:"local_pref,omitempty"` +type Attribute_ClusterList struct { + ClusterList *ClusterListAttribute `protobuf:"bytes,11,opt,name=cluster_list,json=clusterList,proto3,oneof"` } -func (x *LocalPrefAttribute) Reset() { - *x = LocalPrefAttribute{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +type Attribute_MpReach struct { + MpReach *MpReachNLRIAttribute `protobuf:"bytes,12,opt,name=mp_reach,json=mpReach,proto3,oneof"` } -func (x *LocalPrefAttribute) String() string { - return protoimpl.X.MessageStringOf(x) +type Attribute_MpUnreach struct { + MpUnreach *MpUnreachNLRIAttribute `protobuf:"bytes,13,opt,name=mp_unreach,json=mpUnreach,proto3,oneof"` } -func (*LocalPrefAttribute) ProtoMessage() {} +type Attribute_ExtendedCommunities struct { + ExtendedCommunities *ExtendedCommunitiesAttribute `protobuf:"bytes,14,opt,name=extended_communities,json=extendedCommunities,proto3,oneof"` +} -func (x *LocalPrefAttribute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) +type Attribute_As4Path struct { + As4Path *As4PathAttribute `protobuf:"bytes,15,opt,name=as4_path,json=as4Path,proto3,oneof"` } -// Deprecated: Use LocalPrefAttribute.ProtoReflect.Descriptor instead. -func (*LocalPrefAttribute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{5} +type Attribute_As4Aggregator struct { + As4Aggregator *As4AggregatorAttribute `protobuf:"bytes,16,opt,name=as4_aggregator,json=as4Aggregator,proto3,oneof"` } -func (x *LocalPrefAttribute) GetLocalPref() uint32 { - if x != nil { - return x.LocalPref - } - return 0 +type Attribute_PmsiTunnel struct { + PmsiTunnel *PmsiTunnelAttribute `protobuf:"bytes,17,opt,name=pmsi_tunnel,json=pmsiTunnel,proto3,oneof"` } -type AtomicAggregateAttribute struct { +type Attribute_TunnelEncap struct { + TunnelEncap *TunnelEncapAttribute `protobuf:"bytes,18,opt,name=tunnel_encap,json=tunnelEncap,proto3,oneof"` +} + +type Attribute_Ip6ExtendedCommunities struct { + Ip6ExtendedCommunities *IP6ExtendedCommunitiesAttribute `protobuf:"bytes,19,opt,name=ip6_extended_communities,json=ip6ExtendedCommunities,proto3,oneof"` +} + +type Attribute_Aigp struct { + Aigp *AigpAttribute `protobuf:"bytes,20,opt,name=aigp,proto3,oneof"` +} + +type Attribute_LargeCommunities struct { + LargeCommunities *LargeCommunitiesAttribute `protobuf:"bytes,21,opt,name=large_communities,json=largeCommunities,proto3,oneof"` +} + +type Attribute_Ls struct { + Ls *LsAttribute `protobuf:"bytes,22,opt,name=ls,proto3,oneof"` +} + +type Attribute_PrefixSid struct { + PrefixSid *PrefixSID `protobuf:"bytes,23,opt,name=prefix_sid,json=prefixSid,proto3,oneof"` +} + +func (*Attribute_Unknown) isAttribute_Attr() {} + +func (*Attribute_Origin) isAttribute_Attr() {} + +func (*Attribute_AsPath) isAttribute_Attr() {} + +func (*Attribute_NextHop) isAttribute_Attr() {} + +func (*Attribute_MultiExitDisc) isAttribute_Attr() {} + +func (*Attribute_LocalPref) isAttribute_Attr() {} + +func (*Attribute_AtomicAggregate) isAttribute_Attr() {} + +func (*Attribute_Aggregator) isAttribute_Attr() {} + +func (*Attribute_Communities) isAttribute_Attr() {} + +func (*Attribute_OriginatorId) isAttribute_Attr() {} + +func (*Attribute_ClusterList) isAttribute_Attr() {} + +func (*Attribute_MpReach) isAttribute_Attr() {} + +func (*Attribute_MpUnreach) isAttribute_Attr() {} + +func (*Attribute_ExtendedCommunities) isAttribute_Attr() {} + +func (*Attribute_As4Path) isAttribute_Attr() {} + +func (*Attribute_As4Aggregator) isAttribute_Attr() {} + +func (*Attribute_PmsiTunnel) isAttribute_Attr() {} + +func (*Attribute_TunnelEncap) isAttribute_Attr() {} + +func (*Attribute_Ip6ExtendedCommunities) isAttribute_Attr() {} + +func (*Attribute_Aigp) isAttribute_Attr() {} + +func (*Attribute_LargeCommunities) isAttribute_Attr() {} + +func (*Attribute_Ls) isAttribute_Attr() {} + +func (*Attribute_PrefixSid) isAttribute_Attr() {} + +type OriginAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + Origin uint32 `protobuf:"varint,1,opt,name=origin,proto3" json:"origin,omitempty"` } -func (x *AtomicAggregateAttribute) Reset() { - *x = AtomicAggregateAttribute{} +func (x *OriginAttribute) Reset() { + *x = OriginAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[6] + mi := &file_attribute_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *AtomicAggregateAttribute) String() string { +func (x *OriginAttribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AtomicAggregateAttribute) ProtoMessage() {} +func (*OriginAttribute) ProtoMessage() {} -func (x *AtomicAggregateAttribute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[6] +func (x *OriginAttribute) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -816,37 +724,44 @@ func (x *AtomicAggregateAttribute) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AtomicAggregateAttribute.ProtoReflect.Descriptor instead. -func (*AtomicAggregateAttribute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{6} +// Deprecated: Use OriginAttribute.ProtoReflect.Descriptor instead. +func (*OriginAttribute) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{1} } -type AggregatorAttribute struct { +func (x *OriginAttribute) GetOrigin() uint32 { + if x != nil { + return x.Origin + } + return 0 +} + +type AsSegment struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Asn uint32 `protobuf:"varint,1,opt,name=asn,proto3" json:"asn,omitempty"` - Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + Type AsSegment_Type `protobuf:"varint,1,opt,name=type,proto3,enum=apipb.AsSegment_Type" json:"type,omitempty"` + Numbers []uint32 `protobuf:"varint,2,rep,packed,name=numbers,proto3" json:"numbers,omitempty"` } -func (x *AggregatorAttribute) Reset() { - *x = AggregatorAttribute{} +func (x *AsSegment) Reset() { + *x = AsSegment{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[7] + mi := &file_attribute_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *AggregatorAttribute) String() string { +func (x *AsSegment) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AggregatorAttribute) ProtoMessage() {} +func (*AsSegment) ProtoMessage() {} -func (x *AggregatorAttribute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[7] +func (x *AsSegment) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -857,50 +772,50 @@ func (x *AggregatorAttribute) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AggregatorAttribute.ProtoReflect.Descriptor instead. -func (*AggregatorAttribute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{7} +// Deprecated: Use AsSegment.ProtoReflect.Descriptor instead. +func (*AsSegment) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{2} } -func (x *AggregatorAttribute) GetAsn() uint32 { +func (x *AsSegment) GetType() AsSegment_Type { if x != nil { - return x.Asn + return x.Type } - return 0 + return AsSegment_UNKNOWN } -func (x *AggregatorAttribute) GetAddress() string { +func (x *AsSegment) GetNumbers() []uint32 { if x != nil { - return x.Address + return x.Numbers } - return "" + return nil } -type CommunitiesAttribute struct { +type AsPathAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Communities []uint32 `protobuf:"varint,1,rep,packed,name=communities,proto3" json:"communities,omitempty"` + Segments []*AsSegment `protobuf:"bytes,1,rep,name=segments,proto3" json:"segments,omitempty"` } -func (x *CommunitiesAttribute) Reset() { - *x = CommunitiesAttribute{} +func (x *AsPathAttribute) Reset() { + *x = AsPathAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[8] + mi := &file_attribute_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *CommunitiesAttribute) String() string { +func (x *AsPathAttribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CommunitiesAttribute) ProtoMessage() {} +func (*AsPathAttribute) ProtoMessage() {} -func (x *CommunitiesAttribute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[8] +func (x *AsPathAttribute) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -911,43 +826,43 @@ func (x *CommunitiesAttribute) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CommunitiesAttribute.ProtoReflect.Descriptor instead. -func (*CommunitiesAttribute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{8} +// Deprecated: Use AsPathAttribute.ProtoReflect.Descriptor instead. +func (*AsPathAttribute) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{3} } -func (x *CommunitiesAttribute) GetCommunities() []uint32 { +func (x *AsPathAttribute) GetSegments() []*AsSegment { if x != nil { - return x.Communities + return x.Segments } return nil } -type OriginatorIdAttribute struct { +type NextHopAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + NextHop string `protobuf:"bytes,1,opt,name=next_hop,json=nextHop,proto3" json:"next_hop,omitempty"` } -func (x *OriginatorIdAttribute) Reset() { - *x = OriginatorIdAttribute{} +func (x *NextHopAttribute) Reset() { + *x = NextHopAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[9] + mi := &file_attribute_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *OriginatorIdAttribute) String() string { +func (x *NextHopAttribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*OriginatorIdAttribute) ProtoMessage() {} +func (*NextHopAttribute) ProtoMessage() {} -func (x *OriginatorIdAttribute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[9] +func (x *NextHopAttribute) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -958,43 +873,43 @@ func (x *OriginatorIdAttribute) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use OriginatorIdAttribute.ProtoReflect.Descriptor instead. -func (*OriginatorIdAttribute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{9} +// Deprecated: Use NextHopAttribute.ProtoReflect.Descriptor instead. +func (*NextHopAttribute) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{4} } -func (x *OriginatorIdAttribute) GetId() string { +func (x *NextHopAttribute) GetNextHop() string { if x != nil { - return x.Id + return x.NextHop } return "" } -type ClusterListAttribute struct { +type MultiExitDiscAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` + Med uint32 `protobuf:"varint,1,opt,name=med,proto3" json:"med,omitempty"` } -func (x *ClusterListAttribute) Reset() { - *x = ClusterListAttribute{} +func (x *MultiExitDiscAttribute) Reset() { + *x = MultiExitDiscAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[10] + mi := &file_attribute_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ClusterListAttribute) String() string { +func (x *MultiExitDiscAttribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ClusterListAttribute) ProtoMessage() {} +func (*MultiExitDiscAttribute) ProtoMessage() {} -func (x *ClusterListAttribute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[10] +func (x *MultiExitDiscAttribute) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1005,47 +920,43 @@ func (x *ClusterListAttribute) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ClusterListAttribute.ProtoReflect.Descriptor instead. -func (*ClusterListAttribute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{10} +// Deprecated: Use MultiExitDiscAttribute.ProtoReflect.Descriptor instead. +func (*MultiExitDiscAttribute) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{5} } -func (x *ClusterListAttribute) GetIds() []string { +func (x *MultiExitDiscAttribute) GetMed() uint32 { if x != nil { - return x.Ids + return x.Med } - return nil + return 0 } -// IPAddressPrefix represents the NLRI for: -// - AFI=1, SAFI=1 -// - AFI=2, SAFI=1 -type IPAddressPrefix struct { +type LocalPrefAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - PrefixLen uint32 `protobuf:"varint,1,opt,name=prefix_len,json=prefixLen,proto3" json:"prefix_len,omitempty"` - Prefix string `protobuf:"bytes,2,opt,name=prefix,proto3" json:"prefix,omitempty"` + LocalPref uint32 `protobuf:"varint,1,opt,name=local_pref,json=localPref,proto3" json:"local_pref,omitempty"` } -func (x *IPAddressPrefix) Reset() { - *x = IPAddressPrefix{} +func (x *LocalPrefAttribute) Reset() { + *x = LocalPrefAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[11] + mi := &file_attribute_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *IPAddressPrefix) String() string { +func (x *LocalPrefAttribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*IPAddressPrefix) ProtoMessage() {} +func (*LocalPrefAttribute) ProtoMessage() {} -func (x *IPAddressPrefix) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[11] +func (x *LocalPrefAttribute) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1056,55 +967,41 @@ func (x *IPAddressPrefix) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use IPAddressPrefix.ProtoReflect.Descriptor instead. -func (*IPAddressPrefix) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{11} +// Deprecated: Use LocalPrefAttribute.ProtoReflect.Descriptor instead. +func (*LocalPrefAttribute) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{6} } -func (x *IPAddressPrefix) GetPrefixLen() uint32 { +func (x *LocalPrefAttribute) GetLocalPref() uint32 { if x != nil { - return x.PrefixLen + return x.LocalPref } return 0 } -func (x *IPAddressPrefix) GetPrefix() string { - if x != nil { - return x.Prefix - } - return "" -} - -// LabeledIPAddressPrefix represents the NLRI for: -// - AFI=1, SAFI=4 -// - AFI=2, SAFI=4 -type LabeledIPAddressPrefix struct { +type AtomicAggregateAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - Labels []uint32 `protobuf:"varint,1,rep,packed,name=labels,proto3" json:"labels,omitempty"` - PrefixLen uint32 `protobuf:"varint,2,opt,name=prefix_len,json=prefixLen,proto3" json:"prefix_len,omitempty"` - Prefix string `protobuf:"bytes,3,opt,name=prefix,proto3" json:"prefix,omitempty"` } -func (x *LabeledIPAddressPrefix) Reset() { - *x = LabeledIPAddressPrefix{} +func (x *AtomicAggregateAttribute) Reset() { + *x = AtomicAggregateAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[12] + mi := &file_attribute_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *LabeledIPAddressPrefix) String() string { +func (x *AtomicAggregateAttribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LabeledIPAddressPrefix) ProtoMessage() {} +func (*AtomicAggregateAttribute) ProtoMessage() {} -func (x *LabeledIPAddressPrefix) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[12] +func (x *AtomicAggregateAttribute) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1115,60 +1012,37 @@ func (x *LabeledIPAddressPrefix) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LabeledIPAddressPrefix.ProtoReflect.Descriptor instead. -func (*LabeledIPAddressPrefix) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{12} -} - -func (x *LabeledIPAddressPrefix) GetLabels() []uint32 { - if x != nil { - return x.Labels - } - return nil -} - -func (x *LabeledIPAddressPrefix) GetPrefixLen() uint32 { - if x != nil { - return x.PrefixLen - } - return 0 -} - -func (x *LabeledIPAddressPrefix) GetPrefix() string { - if x != nil { - return x.Prefix - } - return "" +// Deprecated: Use AtomicAggregateAttribute.ProtoReflect.Descriptor instead. +func (*AtomicAggregateAttribute) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{7} } -// EncapsulationNLRI represents the NLRI for: -// - AFI=1, SAFI=7 -// - AFI=2, SAFI=7 -type EncapsulationNLRI struct { +type AggregatorAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Asn uint32 `protobuf:"varint,1,opt,name=asn,proto3" json:"asn,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` } -func (x *EncapsulationNLRI) Reset() { - *x = EncapsulationNLRI{} +func (x *AggregatorAttribute) Reset() { + *x = AggregatorAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[13] + mi := &file_attribute_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *EncapsulationNLRI) String() string { +func (x *AggregatorAttribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EncapsulationNLRI) ProtoMessage() {} +func (*AggregatorAttribute) ProtoMessage() {} -func (x *EncapsulationNLRI) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[13] +func (x *AggregatorAttribute) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1179,44 +1053,50 @@ func (x *EncapsulationNLRI) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EncapsulationNLRI.ProtoReflect.Descriptor instead. -func (*EncapsulationNLRI) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{13} +// Deprecated: Use AggregatorAttribute.ProtoReflect.Descriptor instead. +func (*AggregatorAttribute) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{8} +} + +func (x *AggregatorAttribute) GetAsn() uint32 { + if x != nil { + return x.Asn + } + return 0 } -func (x *EncapsulationNLRI) GetAddress() string { +func (x *AggregatorAttribute) GetAddress() string { if x != nil { return x.Address } return "" } -type RouteDistinguisherTwoOctetASN struct { +type CommunitiesAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Admin uint32 `protobuf:"varint,1,opt,name=admin,proto3" json:"admin,omitempty"` - Assigned uint32 `protobuf:"varint,2,opt,name=assigned,proto3" json:"assigned,omitempty"` + Communities []uint32 `protobuf:"varint,1,rep,packed,name=communities,proto3" json:"communities,omitempty"` } -func (x *RouteDistinguisherTwoOctetASN) Reset() { - *x = RouteDistinguisherTwoOctetASN{} +func (x *CommunitiesAttribute) Reset() { + *x = CommunitiesAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[14] + mi := &file_attribute_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *RouteDistinguisherTwoOctetASN) String() string { +func (x *CommunitiesAttribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RouteDistinguisherTwoOctetASN) ProtoMessage() {} +func (*CommunitiesAttribute) ProtoMessage() {} -func (x *RouteDistinguisherTwoOctetASN) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[14] +func (x *CommunitiesAttribute) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1227,51 +1107,43 @@ func (x *RouteDistinguisherTwoOctetASN) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RouteDistinguisherTwoOctetASN.ProtoReflect.Descriptor instead. -func (*RouteDistinguisherTwoOctetASN) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{14} -} - -func (x *RouteDistinguisherTwoOctetASN) GetAdmin() uint32 { - if x != nil { - return x.Admin - } - return 0 +// Deprecated: Use CommunitiesAttribute.ProtoReflect.Descriptor instead. +func (*CommunitiesAttribute) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{9} } -func (x *RouteDistinguisherTwoOctetASN) GetAssigned() uint32 { +func (x *CommunitiesAttribute) GetCommunities() []uint32 { if x != nil { - return x.Assigned + return x.Communities } - return 0 + return nil } -type RouteDistinguisherIPAddress struct { +type OriginatorIdAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Admin string `protobuf:"bytes,1,opt,name=admin,proto3" json:"admin,omitempty"` - Assigned uint32 `protobuf:"varint,2,opt,name=assigned,proto3" json:"assigned,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (x *RouteDistinguisherIPAddress) Reset() { - *x = RouteDistinguisherIPAddress{} +func (x *OriginatorIdAttribute) Reset() { + *x = OriginatorIdAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[15] + mi := &file_attribute_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *RouteDistinguisherIPAddress) String() string { +func (x *OriginatorIdAttribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RouteDistinguisherIPAddress) ProtoMessage() {} +func (*OriginatorIdAttribute) ProtoMessage() {} -func (x *RouteDistinguisherIPAddress) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[15] +func (x *OriginatorIdAttribute) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1282,51 +1154,43 @@ func (x *RouteDistinguisherIPAddress) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RouteDistinguisherIPAddress.ProtoReflect.Descriptor instead. -func (*RouteDistinguisherIPAddress) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{15} +// Deprecated: Use OriginatorIdAttribute.ProtoReflect.Descriptor instead. +func (*OriginatorIdAttribute) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{10} } -func (x *RouteDistinguisherIPAddress) GetAdmin() string { +func (x *OriginatorIdAttribute) GetId() string { if x != nil { - return x.Admin + return x.Id } return "" } -func (x *RouteDistinguisherIPAddress) GetAssigned() uint32 { - if x != nil { - return x.Assigned - } - return 0 -} - -type RouteDistinguisherFourOctetASN struct { +type ClusterListAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Admin uint32 `protobuf:"varint,1,opt,name=admin,proto3" json:"admin,omitempty"` - Assigned uint32 `protobuf:"varint,2,opt,name=assigned,proto3" json:"assigned,omitempty"` + Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` } -func (x *RouteDistinguisherFourOctetASN) Reset() { - *x = RouteDistinguisherFourOctetASN{} +func (x *ClusterListAttribute) Reset() { + *x = ClusterListAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[16] + mi := &file_attribute_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *RouteDistinguisherFourOctetASN) String() string { +func (x *ClusterListAttribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RouteDistinguisherFourOctetASN) ProtoMessage() {} +func (*ClusterListAttribute) ProtoMessage() {} -func (x *RouteDistinguisherFourOctetASN) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[16] +func (x *ClusterListAttribute) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1337,51 +1201,45 @@ func (x *RouteDistinguisherFourOctetASN) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RouteDistinguisherFourOctetASN.ProtoReflect.Descriptor instead. -func (*RouteDistinguisherFourOctetASN) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{16} -} - -func (x *RouteDistinguisherFourOctetASN) GetAdmin() uint32 { - if x != nil { - return x.Admin - } - return 0 +// Deprecated: Use ClusterListAttribute.ProtoReflect.Descriptor instead. +func (*ClusterListAttribute) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{11} } -func (x *RouteDistinguisherFourOctetASN) GetAssigned() uint32 { +func (x *ClusterListAttribute) GetIds() []string { if x != nil { - return x.Assigned + return x.Ids } - return 0 + return nil } -type EthernetSegmentIdentifier struct { +type MpReachNLRIAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Type uint32 `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"` - Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + Family *Family `protobuf:"bytes,1,opt,name=family,proto3" json:"family,omitempty"` + NextHops []string `protobuf:"bytes,2,rep,name=next_hops,json=nextHops,proto3" json:"next_hops,omitempty"` + Nlris []*NLRI `protobuf:"bytes,3,rep,name=nlris,proto3" json:"nlris,omitempty"` } -func (x *EthernetSegmentIdentifier) Reset() { - *x = EthernetSegmentIdentifier{} +func (x *MpReachNLRIAttribute) Reset() { + *x = MpReachNLRIAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[17] + mi := &file_attribute_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *EthernetSegmentIdentifier) String() string { +func (x *MpReachNLRIAttribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EthernetSegmentIdentifier) ProtoMessage() {} +func (*MpReachNLRIAttribute) ProtoMessage() {} -func (x *EthernetSegmentIdentifier) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[17] +func (x *MpReachNLRIAttribute) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1392,60 +1250,59 @@ func (x *EthernetSegmentIdentifier) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EthernetSegmentIdentifier.ProtoReflect.Descriptor instead. -func (*EthernetSegmentIdentifier) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{17} +// Deprecated: Use MpReachNLRIAttribute.ProtoReflect.Descriptor instead. +func (*MpReachNLRIAttribute) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{12} } -func (x *EthernetSegmentIdentifier) GetType() uint32 { +func (x *MpReachNLRIAttribute) GetFamily() *Family { if x != nil { - return x.Type + return x.Family } - return 0 + return nil } -func (x *EthernetSegmentIdentifier) GetValue() []byte { +func (x *MpReachNLRIAttribute) GetNextHops() []string { if x != nil { - return x.Value + return x.NextHops + } + return nil +} + +func (x *MpReachNLRIAttribute) GetNlris() []*NLRI { + if x != nil { + return x.Nlris } return nil } -// VPLSNLRI represents the NLRI for: -// - AFI=25, SAFI=65 -type VPLSNLRI struct { +type MpUnreachNLRIAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // One of: - // - RouteDistinguisherTwoOctetASN - // - RouteDistinguisherIPAddress - // - RouteDistinguisherFourOctetASN - Rd *anypb.Any `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` - VeId uint32 `protobuf:"varint,2,opt,name=ve_id,json=veId,proto3" json:"ve_id,omitempty"` - VeBlockOffset uint32 `protobuf:"varint,3,opt,name=ve_block_offset,json=veBlockOffset,proto3" json:"ve_block_offset,omitempty"` - VeBlockSize uint32 `protobuf:"varint,4,opt,name=ve_block_size,json=veBlockSize,proto3" json:"ve_block_size,omitempty"` - LabelBlockBase uint32 `protobuf:"varint,5,opt,name=label_block_base,json=labelBlockBase,proto3" json:"label_block_base,omitempty"` + Family *Family `protobuf:"bytes,1,opt,name=family,proto3" json:"family,omitempty"` + // The same as NLRI field of MpReachNLRIAttribute + Nlris []*NLRI `protobuf:"bytes,3,rep,name=nlris,proto3" json:"nlris,omitempty"` } -func (x *VPLSNLRI) Reset() { - *x = VPLSNLRI{} +func (x *MpUnreachNLRIAttribute) Reset() { + *x = MpUnreachNLRIAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[18] + mi := &file_attribute_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *VPLSNLRI) String() string { +func (x *MpUnreachNLRIAttribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*VPLSNLRI) ProtoMessage() {} +func (*MpUnreachNLRIAttribute) ProtoMessage() {} -func (x *VPLSNLRI) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[18] +func (x *MpUnreachNLRIAttribute) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1456,80 +1313,50 @@ func (x *VPLSNLRI) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use VPLSNLRI.ProtoReflect.Descriptor instead. -func (*VPLSNLRI) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{18} +// Deprecated: Use MpUnreachNLRIAttribute.ProtoReflect.Descriptor instead. +func (*MpUnreachNLRIAttribute) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{13} } -func (x *VPLSNLRI) GetRd() *anypb.Any { +func (x *MpUnreachNLRIAttribute) GetFamily() *Family { if x != nil { - return x.Rd + return x.Family } return nil } -func (x *VPLSNLRI) GetVeId() uint32 { - if x != nil { - return x.VeId - } - return 0 -} - -func (x *VPLSNLRI) GetVeBlockOffset() uint32 { - if x != nil { - return x.VeBlockOffset - } - return 0 -} - -func (x *VPLSNLRI) GetVeBlockSize() uint32 { - if x != nil { - return x.VeBlockSize - } - return 0 -} - -func (x *VPLSNLRI) GetLabelBlockBase() uint32 { +func (x *MpUnreachNLRIAttribute) GetNlris() []*NLRI { if x != nil { - return x.LabelBlockBase + return x.Nlris } - return 0 + return nil } -// EVPNEthernetAutoDiscoveryRoute represents the NLRI for: -// - AFI=25, SAFI=70, RouteType=1 -type EVPNEthernetAutoDiscoveryRoute struct { +type ExtendedCommunitiesAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // One of: - // - RouteDistinguisherTwoOctetASN - // - RouteDistinguisherIPAddress - // - RouteDistinguisherFourOctetASN - Rd *anypb.Any `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` - Esi *EthernetSegmentIdentifier `protobuf:"bytes,2,opt,name=esi,proto3" json:"esi,omitempty"` - EthernetTag uint32 `protobuf:"varint,3,opt,name=ethernet_tag,json=ethernetTag,proto3" json:"ethernet_tag,omitempty"` - Label uint32 `protobuf:"varint,4,opt,name=label,proto3" json:"label,omitempty"` + Communities []*ExtendedCommunity `protobuf:"bytes,1,rep,name=communities,proto3" json:"communities,omitempty"` } -func (x *EVPNEthernetAutoDiscoveryRoute) Reset() { - *x = EVPNEthernetAutoDiscoveryRoute{} +func (x *ExtendedCommunitiesAttribute) Reset() { + *x = ExtendedCommunitiesAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[19] + mi := &file_attribute_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *EVPNEthernetAutoDiscoveryRoute) String() string { +func (x *ExtendedCommunitiesAttribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EVPNEthernetAutoDiscoveryRoute) ProtoMessage() {} +func (*ExtendedCommunitiesAttribute) ProtoMessage() {} -func (x *EVPNEthernetAutoDiscoveryRoute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[19] +func (x *ExtendedCommunitiesAttribute) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1540,75 +1367,43 @@ func (x *EVPNEthernetAutoDiscoveryRoute) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EVPNEthernetAutoDiscoveryRoute.ProtoReflect.Descriptor instead. -func (*EVPNEthernetAutoDiscoveryRoute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{19} -} - -func (x *EVPNEthernetAutoDiscoveryRoute) GetRd() *anypb.Any { - if x != nil { - return x.Rd - } - return nil +// Deprecated: Use ExtendedCommunitiesAttribute.ProtoReflect.Descriptor instead. +func (*ExtendedCommunitiesAttribute) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{14} } -func (x *EVPNEthernetAutoDiscoveryRoute) GetEsi() *EthernetSegmentIdentifier { +func (x *ExtendedCommunitiesAttribute) GetCommunities() []*ExtendedCommunity { if x != nil { - return x.Esi + return x.Communities } return nil } -func (x *EVPNEthernetAutoDiscoveryRoute) GetEthernetTag() uint32 { - if x != nil { - return x.EthernetTag - } - return 0 -} - -func (x *EVPNEthernetAutoDiscoveryRoute) GetLabel() uint32 { - if x != nil { - return x.Label - } - return 0 -} - -// EVPNMACIPAdvertisementRoute represents the NLRI for: -// - AFI=25, SAFI=70, RouteType=2 -type EVPNMACIPAdvertisementRoute struct { +type As4PathAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // One of: - // - RouteDistinguisherTwoOctetASN - // - RouteDistinguisherIPAddress - // - RouteDistinguisherFourOctetASN - Rd *anypb.Any `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` - Esi *EthernetSegmentIdentifier `protobuf:"bytes,2,opt,name=esi,proto3" json:"esi,omitempty"` - EthernetTag uint32 `protobuf:"varint,3,opt,name=ethernet_tag,json=ethernetTag,proto3" json:"ethernet_tag,omitempty"` - MacAddress string `protobuf:"bytes,4,opt,name=mac_address,json=macAddress,proto3" json:"mac_address,omitempty"` - IpAddress string `protobuf:"bytes,5,opt,name=ip_address,json=ipAddress,proto3" json:"ip_address,omitempty"` - Labels []uint32 `protobuf:"varint,6,rep,packed,name=labels,proto3" json:"labels,omitempty"` + Segments []*AsSegment `protobuf:"bytes,1,rep,name=segments,proto3" json:"segments,omitempty"` } -func (x *EVPNMACIPAdvertisementRoute) Reset() { - *x = EVPNMACIPAdvertisementRoute{} +func (x *As4PathAttribute) Reset() { + *x = As4PathAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[20] + mi := &file_attribute_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *EVPNMACIPAdvertisementRoute) String() string { +func (x *As4PathAttribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EVPNMACIPAdvertisementRoute) ProtoMessage() {} +func (*As4PathAttribute) ProtoMessage() {} -func (x *EVPNMACIPAdvertisementRoute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[20] +func (x *As4PathAttribute) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1619,86 +1414,44 @@ func (x *EVPNMACIPAdvertisementRoute) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EVPNMACIPAdvertisementRoute.ProtoReflect.Descriptor instead. -func (*EVPNMACIPAdvertisementRoute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{20} -} - -func (x *EVPNMACIPAdvertisementRoute) GetRd() *anypb.Any { - if x != nil { - return x.Rd - } - return nil -} - -func (x *EVPNMACIPAdvertisementRoute) GetEsi() *EthernetSegmentIdentifier { - if x != nil { - return x.Esi - } - return nil -} - -func (x *EVPNMACIPAdvertisementRoute) GetEthernetTag() uint32 { - if x != nil { - return x.EthernetTag - } - return 0 -} - -func (x *EVPNMACIPAdvertisementRoute) GetMacAddress() string { - if x != nil { - return x.MacAddress - } - return "" -} - -func (x *EVPNMACIPAdvertisementRoute) GetIpAddress() string { - if x != nil { - return x.IpAddress - } - return "" +// Deprecated: Use As4PathAttribute.ProtoReflect.Descriptor instead. +func (*As4PathAttribute) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{15} } -func (x *EVPNMACIPAdvertisementRoute) GetLabels() []uint32 { +func (x *As4PathAttribute) GetSegments() []*AsSegment { if x != nil { - return x.Labels + return x.Segments } return nil } -// EVPNInclusiveMulticastEthernetTagRoute represents the NLRI for: -// - AFI=25, SAFI=70, RouteType=3 -type EVPNInclusiveMulticastEthernetTagRoute struct { +type As4AggregatorAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // One of: - // - RouteDistinguisherTwoOctetASN - // - RouteDistinguisherIPAddress - // - RouteDistinguisherFourOctetASN - Rd *anypb.Any `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` - EthernetTag uint32 `protobuf:"varint,2,opt,name=ethernet_tag,json=ethernetTag,proto3" json:"ethernet_tag,omitempty"` - IpAddress string `protobuf:"bytes,3,opt,name=ip_address,json=ipAddress,proto3" json:"ip_address,omitempty"` + Asn uint32 `protobuf:"varint,2,opt,name=asn,proto3" json:"asn,omitempty"` + Address string `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` } -func (x *EVPNInclusiveMulticastEthernetTagRoute) Reset() { - *x = EVPNInclusiveMulticastEthernetTagRoute{} +func (x *As4AggregatorAttribute) Reset() { + *x = As4AggregatorAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[21] + mi := &file_attribute_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *EVPNInclusiveMulticastEthernetTagRoute) String() string { +func (x *As4AggregatorAttribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EVPNInclusiveMulticastEthernetTagRoute) ProtoMessage() {} +func (*As4AggregatorAttribute) ProtoMessage() {} -func (x *EVPNInclusiveMulticastEthernetTagRoute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[21] +func (x *As4AggregatorAttribute) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1709,65 +1462,53 @@ func (x *EVPNInclusiveMulticastEthernetTagRoute) ProtoReflect() protoreflect.Mes return mi.MessageOf(x) } -// Deprecated: Use EVPNInclusiveMulticastEthernetTagRoute.ProtoReflect.Descriptor instead. -func (*EVPNInclusiveMulticastEthernetTagRoute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{21} -} - -func (x *EVPNInclusiveMulticastEthernetTagRoute) GetRd() *anypb.Any { - if x != nil { - return x.Rd - } - return nil +// Deprecated: Use As4AggregatorAttribute.ProtoReflect.Descriptor instead. +func (*As4AggregatorAttribute) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{16} } -func (x *EVPNInclusiveMulticastEthernetTagRoute) GetEthernetTag() uint32 { +func (x *As4AggregatorAttribute) GetAsn() uint32 { if x != nil { - return x.EthernetTag + return x.Asn } return 0 } -func (x *EVPNInclusiveMulticastEthernetTagRoute) GetIpAddress() string { +func (x *As4AggregatorAttribute) GetAddress() string { if x != nil { - return x.IpAddress + return x.Address } return "" } -// EVPNEthernetSegmentRoute represents the NLRI for: -// - AFI=25, SAFI=70, RouteType=4 -type EVPNEthernetSegmentRoute struct { +type PmsiTunnelAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // One of: - // - RouteDistinguisherTwoOctetASN - // - RouteDistinguisherIPAddress - // - RouteDistinguisherFourOctetASN - Rd *anypb.Any `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` - Esi *EthernetSegmentIdentifier `protobuf:"bytes,2,opt,name=esi,proto3" json:"esi,omitempty"` - IpAddress string `protobuf:"bytes,3,opt,name=ip_address,json=ipAddress,proto3" json:"ip_address,omitempty"` + Flags uint32 `protobuf:"varint,1,opt,name=flags,proto3" json:"flags,omitempty"` + Type uint32 `protobuf:"varint,2,opt,name=type,proto3" json:"type,omitempty"` + Label uint32 `protobuf:"varint,3,opt,name=label,proto3" json:"label,omitempty"` + Id []byte `protobuf:"bytes,4,opt,name=id,proto3" json:"id,omitempty"` } -func (x *EVPNEthernetSegmentRoute) Reset() { - *x = EVPNEthernetSegmentRoute{} +func (x *PmsiTunnelAttribute) Reset() { + *x = PmsiTunnelAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[22] + mi := &file_attribute_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *EVPNEthernetSegmentRoute) String() string { +func (x *PmsiTunnelAttribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EVPNEthernetSegmentRoute) ProtoMessage() {} +func (*PmsiTunnelAttribute) ProtoMessage() {} -func (x *EVPNEthernetSegmentRoute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[22] +func (x *PmsiTunnelAttribute) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1778,69 +1519,65 @@ func (x *EVPNEthernetSegmentRoute) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EVPNEthernetSegmentRoute.ProtoReflect.Descriptor instead. -func (*EVPNEthernetSegmentRoute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{22} +// Deprecated: Use PmsiTunnelAttribute.ProtoReflect.Descriptor instead. +func (*PmsiTunnelAttribute) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{17} } -func (x *EVPNEthernetSegmentRoute) GetRd() *anypb.Any { +func (x *PmsiTunnelAttribute) GetFlags() uint32 { if x != nil { - return x.Rd + return x.Flags } - return nil + return 0 } -func (x *EVPNEthernetSegmentRoute) GetEsi() *EthernetSegmentIdentifier { +func (x *PmsiTunnelAttribute) GetType() uint32 { if x != nil { - return x.Esi + return x.Type } - return nil + return 0 +} + +func (x *PmsiTunnelAttribute) GetLabel() uint32 { + if x != nil { + return x.Label + } + return 0 } -func (x *EVPNEthernetSegmentRoute) GetIpAddress() string { +func (x *PmsiTunnelAttribute) GetId() []byte { if x != nil { - return x.IpAddress + return x.Id } - return "" + return nil } -// EVPNIPPrefixRoute represents the NLRI for: -// - AFI=25, SAFI=70, RouteType=5 -type EVPNIPPrefixRoute struct { +type TunnelEncapSubTLVEncapsulation struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // One of: - // - RouteDistinguisherTwoOctetASN - // - RouteDistinguisherIPAddress - // - RouteDistinguisherFourOctetASN - Rd *anypb.Any `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` - Esi *EthernetSegmentIdentifier `protobuf:"bytes,2,opt,name=esi,proto3" json:"esi,omitempty"` - EthernetTag uint32 `protobuf:"varint,3,opt,name=ethernet_tag,json=ethernetTag,proto3" json:"ethernet_tag,omitempty"` - IpPrefix string `protobuf:"bytes,4,opt,name=ip_prefix,json=ipPrefix,proto3" json:"ip_prefix,omitempty"` - IpPrefixLen uint32 `protobuf:"varint,5,opt,name=ip_prefix_len,json=ipPrefixLen,proto3" json:"ip_prefix_len,omitempty"` - GwAddress string `protobuf:"bytes,6,opt,name=gw_address,json=gwAddress,proto3" json:"gw_address,omitempty"` - Label uint32 `protobuf:"varint,7,opt,name=label,proto3" json:"label,omitempty"` -} - -func (x *EVPNIPPrefixRoute) Reset() { - *x = EVPNIPPrefixRoute{} + Key uint32 `protobuf:"varint,1,opt,name=key,proto3" json:"key,omitempty"` + Cookie []byte `protobuf:"bytes,2,opt,name=cookie,proto3" json:"cookie,omitempty"` +} + +func (x *TunnelEncapSubTLVEncapsulation) Reset() { + *x = TunnelEncapSubTLVEncapsulation{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[23] + mi := &file_attribute_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *EVPNIPPrefixRoute) String() string { +func (x *TunnelEncapSubTLVEncapsulation) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EVPNIPPrefixRoute) ProtoMessage() {} +func (*TunnelEncapSubTLVEncapsulation) ProtoMessage() {} -func (x *EVPNIPPrefixRoute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[23] +func (x *TunnelEncapSubTLVEncapsulation) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1851,93 +1588,50 @@ func (x *EVPNIPPrefixRoute) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EVPNIPPrefixRoute.ProtoReflect.Descriptor instead. -func (*EVPNIPPrefixRoute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{23} -} - -func (x *EVPNIPPrefixRoute) GetRd() *anypb.Any { - if x != nil { - return x.Rd - } - return nil -} - -func (x *EVPNIPPrefixRoute) GetEsi() *EthernetSegmentIdentifier { - if x != nil { - return x.Esi - } - return nil -} - -func (x *EVPNIPPrefixRoute) GetEthernetTag() uint32 { - if x != nil { - return x.EthernetTag - } - return 0 -} - -func (x *EVPNIPPrefixRoute) GetIpPrefix() string { - if x != nil { - return x.IpPrefix - } - return "" +// Deprecated: Use TunnelEncapSubTLVEncapsulation.ProtoReflect.Descriptor instead. +func (*TunnelEncapSubTLVEncapsulation) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{18} } -func (x *EVPNIPPrefixRoute) GetIpPrefixLen() uint32 { +func (x *TunnelEncapSubTLVEncapsulation) GetKey() uint32 { if x != nil { - return x.IpPrefixLen + return x.Key } return 0 } -func (x *EVPNIPPrefixRoute) GetGwAddress() string { - if x != nil { - return x.GwAddress - } - return "" -} - -func (x *EVPNIPPrefixRoute) GetLabel() uint32 { +func (x *TunnelEncapSubTLVEncapsulation) GetCookie() []byte { if x != nil { - return x.Label + return x.Cookie } - return 0 + return nil } -// EVPNIPMSIRoute represents the NLRI for: -// - AFI=25, SAFI=70, RouteType=9 -type EVPNIPMSIRoute struct { +type TunnelEncapSubTLVProtocol struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // One of: - // - RouteDistinguisherTwoOctetASN - // - RouteDistinguisherIPAddress - // - RouteDistinguisherFourOctetASN - Rd *anypb.Any `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` - EthernetTag uint32 `protobuf:"varint,2,opt,name=ethernet_tag,json=ethernetTag,proto3" json:"ethernet_tag,omitempty"` - Rt *anypb.Any `protobuf:"bytes,3,opt,name=rt,proto3" json:"rt,omitempty"` + Protocol uint32 `protobuf:"varint,1,opt,name=protocol,proto3" json:"protocol,omitempty"` } -func (x *EVPNIPMSIRoute) Reset() { - *x = EVPNIPMSIRoute{} +func (x *TunnelEncapSubTLVProtocol) Reset() { + *x = TunnelEncapSubTLVProtocol{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[24] + mi := &file_attribute_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *EVPNIPMSIRoute) String() string { +func (x *TunnelEncapSubTLVProtocol) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EVPNIPMSIRoute) ProtoMessage() {} +func (*TunnelEncapSubTLVProtocol) ProtoMessage() {} -func (x *EVPNIPMSIRoute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[24] +func (x *TunnelEncapSubTLVProtocol) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1948,73 +1642,43 @@ func (x *EVPNIPMSIRoute) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EVPNIPMSIRoute.ProtoReflect.Descriptor instead. -func (*EVPNIPMSIRoute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{24} -} - -func (x *EVPNIPMSIRoute) GetRd() *anypb.Any { - if x != nil { - return x.Rd - } - return nil +// Deprecated: Use TunnelEncapSubTLVProtocol.ProtoReflect.Descriptor instead. +func (*TunnelEncapSubTLVProtocol) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{19} } -func (x *EVPNIPMSIRoute) GetEthernetTag() uint32 { +func (x *TunnelEncapSubTLVProtocol) GetProtocol() uint32 { if x != nil { - return x.EthernetTag + return x.Protocol } return 0 } -func (x *EVPNIPMSIRoute) GetRt() *anypb.Any { - if x != nil { - return x.Rt - } - return nil -} - -// SRPolicyNLRI represents the NLRI for: -// - AFI=1, SAFI=73 -// - AFI=2, SAFI=73 -type SRPolicyNLRI struct { +type TunnelEncapSubTLVColor struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // length field carries the length of NLRI portion expressed in bits - Length uint32 `protobuf:"varint,1,opt,name=length,proto3" json:"length,omitempty"` - // distinguisher field carries 4-octet value uniquely identifying the policy - // in the context of tuple. - Distinguisher uint32 `protobuf:"varint,2,opt,name=distinguisher,proto3" json:"distinguisher,omitempty"` - // color field carries 4-octet value identifying (with the endpoint) the - // policy. The color is used to match the color of the destination - // prefixes to steer traffic into the SR Policy - Color uint32 `protobuf:"varint,3,opt,name=color,proto3" json:"color,omitempty"` - // endpoint field identifies the endpoint of a policy. The Endpoint may - // represent a single node or a set of nodes (e.g., an anycast - // address). The Endpoint is an IPv4 (4-octet) address or an IPv6 - // (16-octet) address according to the AFI of the NLRI. - Endpoint []byte `protobuf:"bytes,4,opt,name=endpoint,proto3" json:"endpoint,omitempty"` -} - -func (x *SRPolicyNLRI) Reset() { - *x = SRPolicyNLRI{} + Color uint32 `protobuf:"varint,1,opt,name=color,proto3" json:"color,omitempty"` +} + +func (x *TunnelEncapSubTLVColor) Reset() { + *x = TunnelEncapSubTLVColor{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[25] + mi := &file_attribute_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *SRPolicyNLRI) String() string { +func (x *TunnelEncapSubTLVColor) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SRPolicyNLRI) ProtoMessage() {} +func (*TunnelEncapSubTLVColor) ProtoMessage() {} -func (x *SRPolicyNLRI) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[25] +func (x *TunnelEncapSubTLVColor) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2025,74 +1689,44 @@ func (x *SRPolicyNLRI) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SRPolicyNLRI.ProtoReflect.Descriptor instead. -func (*SRPolicyNLRI) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{25} -} - -func (x *SRPolicyNLRI) GetLength() uint32 { - if x != nil { - return x.Length - } - return 0 -} - -func (x *SRPolicyNLRI) GetDistinguisher() uint32 { - if x != nil { - return x.Distinguisher - } - return 0 +// Deprecated: Use TunnelEncapSubTLVColor.ProtoReflect.Descriptor instead. +func (*TunnelEncapSubTLVColor) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{20} } -func (x *SRPolicyNLRI) GetColor() uint32 { +func (x *TunnelEncapSubTLVColor) GetColor() uint32 { if x != nil { return x.Color } return 0 } -func (x *SRPolicyNLRI) GetEndpoint() []byte { - if x != nil { - return x.Endpoint - } - return nil -} - -// LabeledVPNIPAddressPrefix represents the NLRI for: -// - AFI=1, SAFI=128 -// - AFI=2, SAFI=128 -type LabeledVPNIPAddressPrefix struct { +type TunnelEncapSubTLVSRPreference struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Labels []uint32 `protobuf:"varint,1,rep,packed,name=labels,proto3" json:"labels,omitempty"` - // One of: - // - TwoOctetAsSpecificExtended - // - IPv4AddressSpecificExtended - // - FourOctetAsSpecificExtended - Rd *anypb.Any `protobuf:"bytes,2,opt,name=rd,proto3" json:"rd,omitempty"` - PrefixLen uint32 `protobuf:"varint,3,opt,name=prefix_len,json=prefixLen,proto3" json:"prefix_len,omitempty"` - Prefix string `protobuf:"bytes,4,opt,name=prefix,proto3" json:"prefix,omitempty"` + Flags uint32 `protobuf:"varint,1,opt,name=flags,proto3" json:"flags,omitempty"` + Preference uint32 `protobuf:"varint,2,opt,name=preference,proto3" json:"preference,omitempty"` } -func (x *LabeledVPNIPAddressPrefix) Reset() { - *x = LabeledVPNIPAddressPrefix{} +func (x *TunnelEncapSubTLVSRPreference) Reset() { + *x = TunnelEncapSubTLVSRPreference{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[26] + mi := &file_attribute_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *LabeledVPNIPAddressPrefix) String() string { +func (x *TunnelEncapSubTLVSRPreference) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LabeledVPNIPAddressPrefix) ProtoMessage() {} +func (*TunnelEncapSubTLVSRPreference) ProtoMessage() {} -func (x *LabeledVPNIPAddressPrefix) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[26] +func (x *TunnelEncapSubTLVSRPreference) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2103,71 +1737,50 @@ func (x *LabeledVPNIPAddressPrefix) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LabeledVPNIPAddressPrefix.ProtoReflect.Descriptor instead. -func (*LabeledVPNIPAddressPrefix) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{26} -} - -func (x *LabeledVPNIPAddressPrefix) GetLabels() []uint32 { - if x != nil { - return x.Labels - } - return nil -} - -func (x *LabeledVPNIPAddressPrefix) GetRd() *anypb.Any { - if x != nil { - return x.Rd - } - return nil +// Deprecated: Use TunnelEncapSubTLVSRPreference.ProtoReflect.Descriptor instead. +func (*TunnelEncapSubTLVSRPreference) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{21} } -func (x *LabeledVPNIPAddressPrefix) GetPrefixLen() uint32 { +func (x *TunnelEncapSubTLVSRPreference) GetFlags() uint32 { if x != nil { - return x.PrefixLen + return x.Flags } return 0 } -func (x *LabeledVPNIPAddressPrefix) GetPrefix() string { +func (x *TunnelEncapSubTLVSRPreference) GetPreference() uint32 { if x != nil { - return x.Prefix + return x.Preference } - return "" + return 0 } -// RouteTargetMembershipNLRI represents the NLRI for: -// - AFI=1, SAFI=132 -type RouteTargetMembershipNLRI struct { +type TunnelEncapSubTLVSRCandidatePathName struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Asn uint32 `protobuf:"varint,1,opt,name=asn,proto3" json:"asn,omitempty"` - // One of: - // - TwoOctetAsSpecificExtended - // - IPv4AddressSpecificExtended - // - FourOctetAsSpecificExtended - Rt *anypb.Any `protobuf:"bytes,2,opt,name=rt,proto3" json:"rt,omitempty"` + CandidatePathName string `protobuf:"bytes,1,opt,name=candidate_path_name,json=candidatePathName,proto3" json:"candidate_path_name,omitempty"` } -func (x *RouteTargetMembershipNLRI) Reset() { - *x = RouteTargetMembershipNLRI{} +func (x *TunnelEncapSubTLVSRCandidatePathName) Reset() { + *x = TunnelEncapSubTLVSRCandidatePathName{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[27] + mi := &file_attribute_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *RouteTargetMembershipNLRI) String() string { +func (x *TunnelEncapSubTLVSRCandidatePathName) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RouteTargetMembershipNLRI) ProtoMessage() {} +func (*TunnelEncapSubTLVSRCandidatePathName) ProtoMessage() {} -func (x *RouteTargetMembershipNLRI) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[27] +func (x *TunnelEncapSubTLVSRCandidatePathName) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2178,54 +1791,43 @@ func (x *RouteTargetMembershipNLRI) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RouteTargetMembershipNLRI.ProtoReflect.Descriptor instead. -func (*RouteTargetMembershipNLRI) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{27} +// Deprecated: Use TunnelEncapSubTLVSRCandidatePathName.ProtoReflect.Descriptor instead. +func (*TunnelEncapSubTLVSRCandidatePathName) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{22} } -func (x *RouteTargetMembershipNLRI) GetAsn() uint32 { +func (x *TunnelEncapSubTLVSRCandidatePathName) GetCandidatePathName() string { if x != nil { - return x.Asn + return x.CandidatePathName } - return 0 + return "" } -func (x *RouteTargetMembershipNLRI) GetRt() *anypb.Any { - if x != nil { - return x.Rt - } - return nil -} - -type FlowSpecIPPrefix struct { +type TunnelEncapSubTLVSRPriority struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Type uint32 `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"` - PrefixLen uint32 `protobuf:"varint,2,opt,name=prefix_len,json=prefixLen,proto3" json:"prefix_len,omitempty"` - Prefix string `protobuf:"bytes,3,opt,name=prefix,proto3" json:"prefix,omitempty"` - // IPv6 only - Offset uint32 `protobuf:"varint,4,opt,name=offset,proto3" json:"offset,omitempty"` + Priority uint32 `protobuf:"varint,1,opt,name=priority,proto3" json:"priority,omitempty"` } -func (x *FlowSpecIPPrefix) Reset() { - *x = FlowSpecIPPrefix{} +func (x *TunnelEncapSubTLVSRPriority) Reset() { + *x = TunnelEncapSubTLVSRPriority{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[28] + mi := &file_attribute_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *FlowSpecIPPrefix) String() string { +func (x *TunnelEncapSubTLVSRPriority) String() string { return protoimpl.X.MessageStringOf(x) } -func (*FlowSpecIPPrefix) ProtoMessage() {} +func (*TunnelEncapSubTLVSRPriority) ProtoMessage() {} -func (x *FlowSpecIPPrefix) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[28] +func (x *TunnelEncapSubTLVSRPriority) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2236,65 +1838,47 @@ func (x *FlowSpecIPPrefix) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use FlowSpecIPPrefix.ProtoReflect.Descriptor instead. -func (*FlowSpecIPPrefix) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{28} -} - -func (x *FlowSpecIPPrefix) GetType() uint32 { - if x != nil { - return x.Type - } - return 0 -} - -func (x *FlowSpecIPPrefix) GetPrefixLen() uint32 { - if x != nil { - return x.PrefixLen - } - return 0 -} - -func (x *FlowSpecIPPrefix) GetPrefix() string { - if x != nil { - return x.Prefix - } - return "" +// Deprecated: Use TunnelEncapSubTLVSRPriority.ProtoReflect.Descriptor instead. +func (*TunnelEncapSubTLVSRPriority) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{23} } -func (x *FlowSpecIPPrefix) GetOffset() uint32 { +func (x *TunnelEncapSubTLVSRPriority) GetPriority() uint32 { if x != nil { - return x.Offset + return x.Priority } return 0 } -type FlowSpecMAC struct { +type TunnelEncapSubTLVSRBindingSID struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Type uint32 `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"` - Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + // Types that are assignable to Bsid: + // + // *TunnelEncapSubTLVSRBindingSID_SrBindingSid + // *TunnelEncapSubTLVSRBindingSID_Srv6BindingSid + Bsid isTunnelEncapSubTLVSRBindingSID_Bsid `protobuf_oneof:"bsid"` } -func (x *FlowSpecMAC) Reset() { - *x = FlowSpecMAC{} +func (x *TunnelEncapSubTLVSRBindingSID) Reset() { + *x = TunnelEncapSubTLVSRBindingSID{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[29] + mi := &file_attribute_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *FlowSpecMAC) String() string { +func (x *TunnelEncapSubTLVSRBindingSID) String() string { return protoimpl.X.MessageStringOf(x) } -func (*FlowSpecMAC) ProtoMessage() {} +func (*TunnelEncapSubTLVSRBindingSID) ProtoMessage() {} -func (x *FlowSpecMAC) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[29] +func (x *TunnelEncapSubTLVSRBindingSID) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2305,52 +1889,75 @@ func (x *FlowSpecMAC) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use FlowSpecMAC.ProtoReflect.Descriptor instead. -func (*FlowSpecMAC) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{29} +// Deprecated: Use TunnelEncapSubTLVSRBindingSID.ProtoReflect.Descriptor instead. +func (*TunnelEncapSubTLVSRBindingSID) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{24} } -func (x *FlowSpecMAC) GetType() uint32 { - if x != nil { - return x.Type +func (m *TunnelEncapSubTLVSRBindingSID) GetBsid() isTunnelEncapSubTLVSRBindingSID_Bsid { + if m != nil { + return m.Bsid } - return 0 + return nil } -func (x *FlowSpecMAC) GetAddress() string { - if x != nil { - return x.Address +func (x *TunnelEncapSubTLVSRBindingSID) GetSrBindingSid() *SRBindingSID { + if x, ok := x.GetBsid().(*TunnelEncapSubTLVSRBindingSID_SrBindingSid); ok { + return x.SrBindingSid } - return "" + return nil +} + +func (x *TunnelEncapSubTLVSRBindingSID) GetSrv6BindingSid() *SRv6BindingSID { + if x, ok := x.GetBsid().(*TunnelEncapSubTLVSRBindingSID_Srv6BindingSid); ok { + return x.Srv6BindingSid + } + return nil +} + +type isTunnelEncapSubTLVSRBindingSID_Bsid interface { + isTunnelEncapSubTLVSRBindingSID_Bsid() +} + +type TunnelEncapSubTLVSRBindingSID_SrBindingSid struct { + SrBindingSid *SRBindingSID `protobuf:"bytes,1,opt,name=sr_binding_sid,json=srBindingSid,proto3,oneof"` +} + +type TunnelEncapSubTLVSRBindingSID_Srv6BindingSid struct { + Srv6BindingSid *SRv6BindingSID `protobuf:"bytes,2,opt,name=srv6_binding_sid,json=srv6BindingSid,proto3,oneof"` } -type FlowSpecComponentItem struct { +func (*TunnelEncapSubTLVSRBindingSID_SrBindingSid) isTunnelEncapSubTLVSRBindingSID_Bsid() {} + +func (*TunnelEncapSubTLVSRBindingSID_Srv6BindingSid) isTunnelEncapSubTLVSRBindingSID_Bsid() {} + +type SRBindingSID struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Operator for Numeric type, Operand for Bitmask type - Op uint32 `protobuf:"varint,1,opt,name=op,proto3" json:"op,omitempty"` - Value uint64 `protobuf:"varint,2,opt,name=value,proto3" json:"value,omitempty"` + SFlag bool `protobuf:"varint,1,opt,name=s_flag,json=sFlag,proto3" json:"s_flag,omitempty"` + IFlag bool `protobuf:"varint,2,opt,name=i_flag,json=iFlag,proto3" json:"i_flag,omitempty"` + Sid []byte `protobuf:"bytes,3,opt,name=sid,proto3" json:"sid,omitempty"` } -func (x *FlowSpecComponentItem) Reset() { - *x = FlowSpecComponentItem{} +func (x *SRBindingSID) Reset() { + *x = SRBindingSID{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[30] + mi := &file_attribute_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *FlowSpecComponentItem) String() string { +func (x *SRBindingSID) String() string { return protoimpl.X.MessageStringOf(x) } -func (*FlowSpecComponentItem) ProtoMessage() {} +func (*SRBindingSID) ProtoMessage() {} -func (x *FlowSpecComponentItem) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[30] +func (x *SRBindingSID) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2361,51 +1968,61 @@ func (x *FlowSpecComponentItem) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use FlowSpecComponentItem.ProtoReflect.Descriptor instead. -func (*FlowSpecComponentItem) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{30} +// Deprecated: Use SRBindingSID.ProtoReflect.Descriptor instead. +func (*SRBindingSID) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{25} } -func (x *FlowSpecComponentItem) GetOp() uint32 { +func (x *SRBindingSID) GetSFlag() bool { if x != nil { - return x.Op + return x.SFlag } - return 0 + return false } -func (x *FlowSpecComponentItem) GetValue() uint64 { +func (x *SRBindingSID) GetIFlag() bool { if x != nil { - return x.Value + return x.IFlag } - return 0 + return false +} + +func (x *SRBindingSID) GetSid() []byte { + if x != nil { + return x.Sid + } + return nil } -type FlowSpecComponent struct { +type SRv6EndPointBehavior struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Type uint32 `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"` - Items []*FlowSpecComponentItem `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` + Behavior SRv6Behavior `protobuf:"varint,1,opt,name=behavior,proto3,enum=apipb.SRv6Behavior" json:"behavior,omitempty"` + BlockLen uint32 `protobuf:"varint,2,opt,name=block_len,json=blockLen,proto3" json:"block_len,omitempty"` + NodeLen uint32 `protobuf:"varint,3,opt,name=node_len,json=nodeLen,proto3" json:"node_len,omitempty"` + FuncLen uint32 `protobuf:"varint,4,opt,name=func_len,json=funcLen,proto3" json:"func_len,omitempty"` + ArgLen uint32 `protobuf:"varint,5,opt,name=arg_len,json=argLen,proto3" json:"arg_len,omitempty"` } -func (x *FlowSpecComponent) Reset() { - *x = FlowSpecComponent{} +func (x *SRv6EndPointBehavior) Reset() { + *x = SRv6EndPointBehavior{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[31] + mi := &file_attribute_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *FlowSpecComponent) String() string { +func (x *SRv6EndPointBehavior) String() string { return protoimpl.X.MessageStringOf(x) } -func (*FlowSpecComponent) ProtoMessage() {} +func (*SRv6EndPointBehavior) ProtoMessage() {} -func (x *FlowSpecComponent) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[31] +func (x *SRv6EndPointBehavior) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2416,57 +2033,75 @@ func (x *FlowSpecComponent) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use FlowSpecComponent.ProtoReflect.Descriptor instead. -func (*FlowSpecComponent) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{31} +// Deprecated: Use SRv6EndPointBehavior.ProtoReflect.Descriptor instead. +func (*SRv6EndPointBehavior) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{26} } -func (x *FlowSpecComponent) GetType() uint32 { +func (x *SRv6EndPointBehavior) GetBehavior() SRv6Behavior { if x != nil { - return x.Type + return x.Behavior + } + return SRv6Behavior_RESERVED +} + +func (x *SRv6EndPointBehavior) GetBlockLen() uint32 { + if x != nil { + return x.BlockLen } return 0 } -func (x *FlowSpecComponent) GetItems() []*FlowSpecComponentItem { +func (x *SRv6EndPointBehavior) GetNodeLen() uint32 { if x != nil { - return x.Items + return x.NodeLen } - return nil + return 0 +} + +func (x *SRv6EndPointBehavior) GetFuncLen() uint32 { + if x != nil { + return x.FuncLen + } + return 0 } -// FlowSpecNLRI represents the NLRI for: -// - AFI=1, SAFI=133 -// - AFI=2, SAFI=133 -type FlowSpecNLRI struct { +func (x *SRv6EndPointBehavior) GetArgLen() uint32 { + if x != nil { + return x.ArgLen + } + return 0 +} + +type SRv6BindingSID struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // One of: - // - FlowSpecIPPrefix - // - FlowSpecMAC - // - FlowSpecComponent - Rules []*anypb.Any `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"` + SFlag bool `protobuf:"varint,1,opt,name=s_flag,json=sFlag,proto3" json:"s_flag,omitempty"` + IFlag bool `protobuf:"varint,2,opt,name=i_flag,json=iFlag,proto3" json:"i_flag,omitempty"` + BFlag bool `protobuf:"varint,3,opt,name=b_flag,json=bFlag,proto3" json:"b_flag,omitempty"` + Sid []byte `protobuf:"bytes,4,opt,name=sid,proto3" json:"sid,omitempty"` + EndpointBehaviorStructure *SRv6EndPointBehavior `protobuf:"bytes,5,opt,name=endpoint_behavior_structure,json=endpointBehaviorStructure,proto3" json:"endpoint_behavior_structure,omitempty"` } -func (x *FlowSpecNLRI) Reset() { - *x = FlowSpecNLRI{} +func (x *SRv6BindingSID) Reset() { + *x = SRv6BindingSID{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[32] + mi := &file_attribute_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *FlowSpecNLRI) String() string { +func (x *SRv6BindingSID) String() string { return protoimpl.X.MessageStringOf(x) } -func (*FlowSpecNLRI) ProtoMessage() {} +func (*SRv6BindingSID) ProtoMessage() {} -func (x *FlowSpecNLRI) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[32] +func (x *SRv6BindingSID) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2477,113 +2112,72 @@ func (x *FlowSpecNLRI) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use FlowSpecNLRI.ProtoReflect.Descriptor instead. -func (*FlowSpecNLRI) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{32} +// Deprecated: Use SRv6BindingSID.ProtoReflect.Descriptor instead. +func (*SRv6BindingSID) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{27} } -func (x *FlowSpecNLRI) GetRules() []*anypb.Any { +func (x *SRv6BindingSID) GetSFlag() bool { if x != nil { - return x.Rules + return x.SFlag } - return nil -} - -// VPNFlowSpecNLRI represents the NLRI for: -// - AFI=1, SAFI=134 -// - AFI=2, SAFI=134 -// - AFI=25, SAFI=134 -type VPNFlowSpecNLRI struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // One of: - // - RouteDistinguisherTwoOctetAS - // - RouteDistinguisherIPAddressAS - // - RouteDistinguisherFourOctetAS - Rd *anypb.Any `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` - // One of: - // - FlowSpecIPPrefix - // - FlowSpecMAC - // - FlowSpecComponent - Rules []*anypb.Any `protobuf:"bytes,2,rep,name=rules,proto3" json:"rules,omitempty"` + return false } -func (x *VPNFlowSpecNLRI) Reset() { - *x = VPNFlowSpecNLRI{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *SRv6BindingSID) GetIFlag() bool { + if x != nil { + return x.IFlag } + return false } -func (x *VPNFlowSpecNLRI) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VPNFlowSpecNLRI) ProtoMessage() {} - -func (x *VPNFlowSpecNLRI) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[33] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *SRv6BindingSID) GetBFlag() bool { + if x != nil { + return x.BFlag } - return mi.MessageOf(x) -} - -// Deprecated: Use VPNFlowSpecNLRI.ProtoReflect.Descriptor instead. -func (*VPNFlowSpecNLRI) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{33} + return false } -func (x *VPNFlowSpecNLRI) GetRd() *anypb.Any { +func (x *SRv6BindingSID) GetSid() []byte { if x != nil { - return x.Rd + return x.Sid } return nil } -func (x *VPNFlowSpecNLRI) GetRules() []*anypb.Any { +func (x *SRv6BindingSID) GetEndpointBehaviorStructure() *SRv6EndPointBehavior { if x != nil { - return x.Rules + return x.EndpointBehaviorStructure } return nil } -// OpaqueNLRI represents the NLRI for: -// - AFI=16397, SAFI=241 -type OpaqueNLRI struct { +type TunnelEncapSubTLVSRENLP struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + Flags uint32 `protobuf:"varint,1,opt,name=flags,proto3" json:"flags,omitempty"` + Enlp ENLPType `protobuf:"varint,2,opt,name=enlp,proto3,enum=apipb.ENLPType" json:"enlp,omitempty"` } -func (x *OpaqueNLRI) Reset() { - *x = OpaqueNLRI{} +func (x *TunnelEncapSubTLVSRENLP) Reset() { + *x = TunnelEncapSubTLVSRENLP{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[34] + mi := &file_attribute_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *OpaqueNLRI) String() string { +func (x *TunnelEncapSubTLVSRENLP) String() string { return protoimpl.X.MessageStringOf(x) } -func (*OpaqueNLRI) ProtoMessage() {} +func (*TunnelEncapSubTLVSRENLP) ProtoMessage() {} -func (x *OpaqueNLRI) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[34] +func (x *TunnelEncapSubTLVSRENLP) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2594,56 +2188,51 @@ func (x *OpaqueNLRI) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use OpaqueNLRI.ProtoReflect.Descriptor instead. -func (*OpaqueNLRI) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{34} +// Deprecated: Use TunnelEncapSubTLVSRENLP.ProtoReflect.Descriptor instead. +func (*TunnelEncapSubTLVSRENLP) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{28} } -func (x *OpaqueNLRI) GetKey() []byte { +func (x *TunnelEncapSubTLVSRENLP) GetFlags() uint32 { if x != nil { - return x.Key + return x.Flags } - return nil + return 0 } -func (x *OpaqueNLRI) GetValue() []byte { +func (x *TunnelEncapSubTLVSRENLP) GetEnlp() ENLPType { if x != nil { - return x.Value + return x.Enlp } - return nil + return ENLPType_Reserved } -type LsNodeDescriptor struct { +type SRWeight struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Asn uint32 `protobuf:"varint,1,opt,name=asn,proto3" json:"asn,omitempty"` - BgpLsId uint32 `protobuf:"varint,2,opt,name=bgp_ls_id,json=bgpLsId,proto3" json:"bgp_ls_id,omitempty"` - OspfAreaId uint32 `protobuf:"varint,3,opt,name=ospf_area_id,json=ospfAreaId,proto3" json:"ospf_area_id,omitempty"` - Pseudonode bool `protobuf:"varint,4,opt,name=pseudonode,proto3" json:"pseudonode,omitempty"` - IgpRouterId string `protobuf:"bytes,5,opt,name=igp_router_id,json=igpRouterId,proto3" json:"igp_router_id,omitempty"` - BgpRouterId string `protobuf:"bytes,6,opt,name=bgp_router_id,json=bgpRouterId,proto3" json:"bgp_router_id,omitempty"` - BgpConfederationMember uint32 `protobuf:"varint,7,opt,name=bgp_confederation_member,json=bgpConfederationMember,proto3" json:"bgp_confederation_member,omitempty"` + Flags uint32 `protobuf:"varint,1,opt,name=flags,proto3" json:"flags,omitempty"` + Weight uint32 `protobuf:"varint,2,opt,name=weight,proto3" json:"weight,omitempty"` } -func (x *LsNodeDescriptor) Reset() { - *x = LsNodeDescriptor{} +func (x *SRWeight) Reset() { + *x = SRWeight{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[35] + mi := &file_attribute_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *LsNodeDescriptor) String() string { +func (x *SRWeight) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LsNodeDescriptor) ProtoMessage() {} +func (*SRWeight) ProtoMessage() {} -func (x *LsNodeDescriptor) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[35] +func (x *SRWeight) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2654,90 +2243,53 @@ func (x *LsNodeDescriptor) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LsNodeDescriptor.ProtoReflect.Descriptor instead. -func (*LsNodeDescriptor) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{35} +// Deprecated: Use SRWeight.ProtoReflect.Descriptor instead. +func (*SRWeight) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{29} } -func (x *LsNodeDescriptor) GetAsn() uint32 { +func (x *SRWeight) GetFlags() uint32 { if x != nil { - return x.Asn - } - return 0 -} - -func (x *LsNodeDescriptor) GetBgpLsId() uint32 { - if x != nil { - return x.BgpLsId - } - return 0 -} - -func (x *LsNodeDescriptor) GetOspfAreaId() uint32 { - if x != nil { - return x.OspfAreaId + return x.Flags } return 0 } -func (x *LsNodeDescriptor) GetPseudonode() bool { - if x != nil { - return x.Pseudonode - } - return false -} - -func (x *LsNodeDescriptor) GetIgpRouterId() string { - if x != nil { - return x.IgpRouterId - } - return "" -} - -func (x *LsNodeDescriptor) GetBgpRouterId() string { - if x != nil { - return x.BgpRouterId - } - return "" -} - -func (x *LsNodeDescriptor) GetBgpConfederationMember() uint32 { +func (x *SRWeight) GetWeight() uint32 { if x != nil { - return x.BgpConfederationMember + return x.Weight } return 0 } -type LsLinkDescriptor struct { +type SegmentFlags struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - LinkLocalId uint32 `protobuf:"varint,1,opt,name=link_local_id,json=linkLocalId,proto3" json:"link_local_id,omitempty"` - LinkRemoteId uint32 `protobuf:"varint,2,opt,name=link_remote_id,json=linkRemoteId,proto3" json:"link_remote_id,omitempty"` - InterfaceAddrIpv4 string `protobuf:"bytes,3,opt,name=interface_addr_ipv4,json=interfaceAddrIpv4,proto3" json:"interface_addr_ipv4,omitempty"` - NeighborAddrIpv4 string `protobuf:"bytes,4,opt,name=neighbor_addr_ipv4,json=neighborAddrIpv4,proto3" json:"neighbor_addr_ipv4,omitempty"` - InterfaceAddrIpv6 string `protobuf:"bytes,5,opt,name=interface_addr_ipv6,json=interfaceAddrIpv6,proto3" json:"interface_addr_ipv6,omitempty"` - NeighborAddrIpv6 string `protobuf:"bytes,6,opt,name=neighbor_addr_ipv6,json=neighborAddrIpv6,proto3" json:"neighbor_addr_ipv6,omitempty"` + VFlag bool `protobuf:"varint,1,opt,name=v_flag,json=vFlag,proto3" json:"v_flag,omitempty"` + AFlag bool `protobuf:"varint,2,opt,name=a_flag,json=aFlag,proto3" json:"a_flag,omitempty"` + SFlag bool `protobuf:"varint,3,opt,name=s_flag,json=sFlag,proto3" json:"s_flag,omitempty"` + BFlag bool `protobuf:"varint,4,opt,name=b_flag,json=bFlag,proto3" json:"b_flag,omitempty"` } -func (x *LsLinkDescriptor) Reset() { - *x = LsLinkDescriptor{} +func (x *SegmentFlags) Reset() { + *x = SegmentFlags{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[36] + mi := &file_attribute_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *LsLinkDescriptor) String() string { +func (x *SegmentFlags) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LsLinkDescriptor) ProtoMessage() {} +func (*SegmentFlags) ProtoMessage() {} -func (x *LsLinkDescriptor) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[36] +func (x *SegmentFlags) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2748,79 +2300,65 @@ func (x *LsLinkDescriptor) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LsLinkDescriptor.ProtoReflect.Descriptor instead. -func (*LsLinkDescriptor) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{36} -} - -func (x *LsLinkDescriptor) GetLinkLocalId() uint32 { - if x != nil { - return x.LinkLocalId - } - return 0 -} - -func (x *LsLinkDescriptor) GetLinkRemoteId() uint32 { - if x != nil { - return x.LinkRemoteId - } - return 0 +// Deprecated: Use SegmentFlags.ProtoReflect.Descriptor instead. +func (*SegmentFlags) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{30} } -func (x *LsLinkDescriptor) GetInterfaceAddrIpv4() string { +func (x *SegmentFlags) GetVFlag() bool { if x != nil { - return x.InterfaceAddrIpv4 + return x.VFlag } - return "" + return false } -func (x *LsLinkDescriptor) GetNeighborAddrIpv4() string { +func (x *SegmentFlags) GetAFlag() bool { if x != nil { - return x.NeighborAddrIpv4 + return x.AFlag } - return "" + return false } -func (x *LsLinkDescriptor) GetInterfaceAddrIpv6() string { +func (x *SegmentFlags) GetSFlag() bool { if x != nil { - return x.InterfaceAddrIpv6 + return x.SFlag } - return "" + return false } -func (x *LsLinkDescriptor) GetNeighborAddrIpv6() string { +func (x *SegmentFlags) GetBFlag() bool { if x != nil { - return x.NeighborAddrIpv6 + return x.BFlag } - return "" + return false } -type LsPrefixDescriptor struct { +type SegmentTypeA struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IpReachability []string `protobuf:"bytes,1,rep,name=ip_reachability,json=ipReachability,proto3" json:"ip_reachability,omitempty"` - OspfRouteType LsOspfRouteType `protobuf:"varint,2,opt,name=ospf_route_type,json=ospfRouteType,proto3,enum=apipb.LsOspfRouteType" json:"ospf_route_type,omitempty"` + Flags *SegmentFlags `protobuf:"bytes,1,opt,name=flags,proto3" json:"flags,omitempty"` + Label uint32 `protobuf:"varint,2,opt,name=label,proto3" json:"label,omitempty"` } -func (x *LsPrefixDescriptor) Reset() { - *x = LsPrefixDescriptor{} +func (x *SegmentTypeA) Reset() { + *x = SegmentTypeA{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[37] + mi := &file_attribute_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *LsPrefixDescriptor) String() string { +func (x *SegmentTypeA) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LsPrefixDescriptor) ProtoMessage() {} +func (*SegmentTypeA) ProtoMessage() {} -func (x *LsPrefixDescriptor) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[37] +func (x *SegmentTypeA) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2831,50 +2369,52 @@ func (x *LsPrefixDescriptor) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LsPrefixDescriptor.ProtoReflect.Descriptor instead. -func (*LsPrefixDescriptor) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{37} +// Deprecated: Use SegmentTypeA.ProtoReflect.Descriptor instead. +func (*SegmentTypeA) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{31} } -func (x *LsPrefixDescriptor) GetIpReachability() []string { +func (x *SegmentTypeA) GetFlags() *SegmentFlags { if x != nil { - return x.IpReachability + return x.Flags } return nil } -func (x *LsPrefixDescriptor) GetOspfRouteType() LsOspfRouteType { +func (x *SegmentTypeA) GetLabel() uint32 { if x != nil { - return x.OspfRouteType + return x.Label } - return LsOspfRouteType_LS_OSPF_ROUTE_TYPE_UNKNOWN + return 0 } -type LsNodeNLRI struct { +type SegmentTypeB struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - LocalNode *LsNodeDescriptor `protobuf:"bytes,1,opt,name=local_node,json=localNode,proto3" json:"local_node,omitempty"` + Flags *SegmentFlags `protobuf:"bytes,1,opt,name=flags,proto3" json:"flags,omitempty"` + Sid []byte `protobuf:"bytes,2,opt,name=sid,proto3" json:"sid,omitempty"` + EndpointBehaviorStructure *SRv6EndPointBehavior `protobuf:"bytes,3,opt,name=endpoint_behavior_structure,json=endpointBehaviorStructure,proto3" json:"endpoint_behavior_structure,omitempty"` } -func (x *LsNodeNLRI) Reset() { - *x = LsNodeNLRI{} +func (x *SegmentTypeB) Reset() { + *x = SegmentTypeB{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[38] + mi := &file_attribute_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *LsNodeNLRI) String() string { +func (x *SegmentTypeB) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LsNodeNLRI) ProtoMessage() {} +func (*SegmentTypeB) ProtoMessage() {} -func (x *LsNodeNLRI) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[38] +func (x *SegmentTypeB) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2885,45 +2425,58 @@ func (x *LsNodeNLRI) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LsNodeNLRI.ProtoReflect.Descriptor instead. -func (*LsNodeNLRI) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{38} +// Deprecated: Use SegmentTypeB.ProtoReflect.Descriptor instead. +func (*SegmentTypeB) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{32} +} + +func (x *SegmentTypeB) GetFlags() *SegmentFlags { + if x != nil { + return x.Flags + } + return nil +} + +func (x *SegmentTypeB) GetSid() []byte { + if x != nil { + return x.Sid + } + return nil } -func (x *LsNodeNLRI) GetLocalNode() *LsNodeDescriptor { +func (x *SegmentTypeB) GetEndpointBehaviorStructure() *SRv6EndPointBehavior { if x != nil { - return x.LocalNode + return x.EndpointBehaviorStructure } return nil } -type LsLinkNLRI struct { +type TunnelEncapSubTLVSRSegmentList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - LocalNode *LsNodeDescriptor `protobuf:"bytes,1,opt,name=local_node,json=localNode,proto3" json:"local_node,omitempty"` - RemoteNode *LsNodeDescriptor `protobuf:"bytes,2,opt,name=remote_node,json=remoteNode,proto3" json:"remote_node,omitempty"` - LinkDescriptor *LsLinkDescriptor `protobuf:"bytes,3,opt,name=link_descriptor,json=linkDescriptor,proto3" json:"link_descriptor,omitempty"` + Weight *SRWeight `protobuf:"bytes,1,opt,name=weight,proto3" json:"weight,omitempty"` + Segments []*TunnelEncapSubTLVSRSegmentList_Segment `protobuf:"bytes,2,rep,name=segments,proto3" json:"segments,omitempty"` } -func (x *LsLinkNLRI) Reset() { - *x = LsLinkNLRI{} +func (x *TunnelEncapSubTLVSRSegmentList) Reset() { + *x = TunnelEncapSubTLVSRSegmentList{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[39] + mi := &file_attribute_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *LsLinkNLRI) String() string { +func (x *TunnelEncapSubTLVSRSegmentList) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LsLinkNLRI) ProtoMessage() {} +func (*TunnelEncapSubTLVSRSegmentList) ProtoMessage() {} -func (x *LsLinkNLRI) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[39] +func (x *TunnelEncapSubTLVSRSegmentList) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2934,58 +2487,50 @@ func (x *LsLinkNLRI) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LsLinkNLRI.ProtoReflect.Descriptor instead. -func (*LsLinkNLRI) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{39} -} - -func (x *LsLinkNLRI) GetLocalNode() *LsNodeDescriptor { - if x != nil { - return x.LocalNode - } - return nil +// Deprecated: Use TunnelEncapSubTLVSRSegmentList.ProtoReflect.Descriptor instead. +func (*TunnelEncapSubTLVSRSegmentList) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{33} } -func (x *LsLinkNLRI) GetRemoteNode() *LsNodeDescriptor { +func (x *TunnelEncapSubTLVSRSegmentList) GetWeight() *SRWeight { if x != nil { - return x.RemoteNode + return x.Weight } return nil } -func (x *LsLinkNLRI) GetLinkDescriptor() *LsLinkDescriptor { +func (x *TunnelEncapSubTLVSRSegmentList) GetSegments() []*TunnelEncapSubTLVSRSegmentList_Segment { if x != nil { - return x.LinkDescriptor + return x.Segments } return nil } -type LsPrefixV4NLRI struct { +type TunnelEncapSubTLVEgressEndpoint struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - LocalNode *LsNodeDescriptor `protobuf:"bytes,1,opt,name=local_node,json=localNode,proto3" json:"local_node,omitempty"` - PrefixDescriptor *LsPrefixDescriptor `protobuf:"bytes,2,opt,name=prefix_descriptor,json=prefixDescriptor,proto3" json:"prefix_descriptor,omitempty"` + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } -func (x *LsPrefixV4NLRI) Reset() { - *x = LsPrefixV4NLRI{} +func (x *TunnelEncapSubTLVEgressEndpoint) Reset() { + *x = TunnelEncapSubTLVEgressEndpoint{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[40] + mi := &file_attribute_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *LsPrefixV4NLRI) String() string { +func (x *TunnelEncapSubTLVEgressEndpoint) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LsPrefixV4NLRI) ProtoMessage() {} +func (*TunnelEncapSubTLVEgressEndpoint) ProtoMessage() {} -func (x *LsPrefixV4NLRI) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[40] +func (x *TunnelEncapSubTLVEgressEndpoint) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2996,51 +2541,43 @@ func (x *LsPrefixV4NLRI) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LsPrefixV4NLRI.ProtoReflect.Descriptor instead. -func (*LsPrefixV4NLRI) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{40} -} - -func (x *LsPrefixV4NLRI) GetLocalNode() *LsNodeDescriptor { - if x != nil { - return x.LocalNode - } - return nil +// Deprecated: Use TunnelEncapSubTLVEgressEndpoint.ProtoReflect.Descriptor instead. +func (*TunnelEncapSubTLVEgressEndpoint) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{34} } -func (x *LsPrefixV4NLRI) GetPrefixDescriptor() *LsPrefixDescriptor { +func (x *TunnelEncapSubTLVEgressEndpoint) GetAddress() string { if x != nil { - return x.PrefixDescriptor + return x.Address } - return nil + return "" } -type LsPrefixV6NLRI struct { +type TunnelEncapSubTLVUDPDestPort struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - LocalNode *LsNodeDescriptor `protobuf:"bytes,1,opt,name=local_node,json=localNode,proto3" json:"local_node,omitempty"` - PrefixDescriptor *LsPrefixDescriptor `protobuf:"bytes,2,opt,name=prefix_descriptor,json=prefixDescriptor,proto3" json:"prefix_descriptor,omitempty"` + Port uint32 `protobuf:"varint,1,opt,name=port,proto3" json:"port,omitempty"` } -func (x *LsPrefixV6NLRI) Reset() { - *x = LsPrefixV6NLRI{} +func (x *TunnelEncapSubTLVUDPDestPort) Reset() { + *x = TunnelEncapSubTLVUDPDestPort{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[41] + mi := &file_attribute_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *LsPrefixV6NLRI) String() string { +func (x *TunnelEncapSubTLVUDPDestPort) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LsPrefixV6NLRI) ProtoMessage() {} +func (*TunnelEncapSubTLVUDPDestPort) ProtoMessage() {} -func (x *LsPrefixV6NLRI) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[41] +func (x *TunnelEncapSubTLVUDPDestPort) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3051,61 +2588,44 @@ func (x *LsPrefixV6NLRI) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LsPrefixV6NLRI.ProtoReflect.Descriptor instead. -func (*LsPrefixV6NLRI) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{41} -} - -func (x *LsPrefixV6NLRI) GetLocalNode() *LsNodeDescriptor { - if x != nil { - return x.LocalNode - } - return nil +// Deprecated: Use TunnelEncapSubTLVUDPDestPort.ProtoReflect.Descriptor instead. +func (*TunnelEncapSubTLVUDPDestPort) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{35} } -func (x *LsPrefixV6NLRI) GetPrefixDescriptor() *LsPrefixDescriptor { +func (x *TunnelEncapSubTLVUDPDestPort) GetPort() uint32 { if x != nil { - return x.PrefixDescriptor + return x.Port } - return nil + return 0 } -// LsAddrPrefix represents the NLRI for: -// - AFI=16388, SAFI=71 -type LsAddrPrefix struct { +type TunnelEncapSubTLVUnknown struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Type LsNLRIType `protobuf:"varint,1,opt,name=type,proto3,enum=apipb.LsNLRIType" json:"type,omitempty"` - // One of: - // - LsNodeNLRI - // - LsLinkNLRI - // - LsPrefixV4NLRI - // - LsPrefixV6NLRI - Nlri *anypb.Any `protobuf:"bytes,2,opt,name=nlri,proto3" json:"nlri,omitempty"` - Length uint32 `protobuf:"varint,3,opt,name=length,proto3" json:"length,omitempty"` - ProtocolId LsProtocolID `protobuf:"varint,4,opt,name=protocol_id,json=protocolId,proto3,enum=apipb.LsProtocolID" json:"protocol_id,omitempty"` - Identifier uint64 `protobuf:"varint,5,opt,name=identifier,proto3" json:"identifier,omitempty"` + Type uint32 `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"` + Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` } -func (x *LsAddrPrefix) Reset() { - *x = LsAddrPrefix{} +func (x *TunnelEncapSubTLVUnknown) Reset() { + *x = TunnelEncapSubTLVUnknown{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[42] + mi := &file_attribute_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *LsAddrPrefix) String() string { +func (x *TunnelEncapSubTLVUnknown) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LsAddrPrefix) ProtoMessage() {} +func (*TunnelEncapSubTLVUnknown) ProtoMessage() {} -func (x *LsAddrPrefix) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[42] +func (x *TunnelEncapSubTLVUnknown) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3116,76 +2636,51 @@ func (x *LsAddrPrefix) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LsAddrPrefix.ProtoReflect.Descriptor instead. -func (*LsAddrPrefix) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{42} +// Deprecated: Use TunnelEncapSubTLVUnknown.ProtoReflect.Descriptor instead. +func (*TunnelEncapSubTLVUnknown) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{36} } -func (x *LsAddrPrefix) GetType() LsNLRIType { +func (x *TunnelEncapSubTLVUnknown) GetType() uint32 { if x != nil { return x.Type } - return LsNLRIType_LS_NLRI_UNKNOWN -} - -func (x *LsAddrPrefix) GetNlri() *anypb.Any { - if x != nil { - return x.Nlri - } - return nil -} - -func (x *LsAddrPrefix) GetLength() uint32 { - if x != nil { - return x.Length - } return 0 } -func (x *LsAddrPrefix) GetProtocolId() LsProtocolID { - if x != nil { - return x.ProtocolId - } - return LsProtocolID_LS_PROTOCOL_UNKNOWN -} - -func (x *LsAddrPrefix) GetIdentifier() uint64 { +func (x *TunnelEncapSubTLVUnknown) GetValue() []byte { if x != nil { - return x.Identifier + return x.Value } - return 0 + return nil } -type MUPInterworkSegmentDiscoveryRoute struct { +type TunnelEncapTLV struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // One of: - // - RouteDistinguisherTwoOctetASN - // - RouteDistinguisherIPAddress - // - RouteDistinguisherFourOctetASN - Rd *anypb.Any `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` - Prefix string `protobuf:"bytes,2,opt,name=prefix,proto3" json:"prefix,omitempty"` + Type uint32 `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"` + Tlvs []*TunnelEncapTLV_TLV `protobuf:"bytes,2,rep,name=tlvs,proto3" json:"tlvs,omitempty"` } -func (x *MUPInterworkSegmentDiscoveryRoute) Reset() { - *x = MUPInterworkSegmentDiscoveryRoute{} +func (x *TunnelEncapTLV) Reset() { + *x = TunnelEncapTLV{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[43] + mi := &file_attribute_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MUPInterworkSegmentDiscoveryRoute) String() string { +func (x *TunnelEncapTLV) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MUPInterworkSegmentDiscoveryRoute) ProtoMessage() {} +func (*TunnelEncapTLV) ProtoMessage() {} -func (x *MUPInterworkSegmentDiscoveryRoute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[43] +func (x *TunnelEncapTLV) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3196,55 +2691,50 @@ func (x *MUPInterworkSegmentDiscoveryRoute) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use MUPInterworkSegmentDiscoveryRoute.ProtoReflect.Descriptor instead. -func (*MUPInterworkSegmentDiscoveryRoute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{43} +// Deprecated: Use TunnelEncapTLV.ProtoReflect.Descriptor instead. +func (*TunnelEncapTLV) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{37} } -func (x *MUPInterworkSegmentDiscoveryRoute) GetRd() *anypb.Any { +func (x *TunnelEncapTLV) GetType() uint32 { if x != nil { - return x.Rd + return x.Type } - return nil + return 0 } -func (x *MUPInterworkSegmentDiscoveryRoute) GetPrefix() string { +func (x *TunnelEncapTLV) GetTlvs() []*TunnelEncapTLV_TLV { if x != nil { - return x.Prefix + return x.Tlvs } - return "" + return nil } -type MUPDirectSegmentDiscoveryRoute struct { +type TunnelEncapAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // One of: - // - RouteDistinguisherTwoOctetASN - // - RouteDistinguisherIPAddress - // - RouteDistinguisherFourOctetASN - Rd *anypb.Any `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` - Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + Tlvs []*TunnelEncapTLV `protobuf:"bytes,1,rep,name=tlvs,proto3" json:"tlvs,omitempty"` } -func (x *MUPDirectSegmentDiscoveryRoute) Reset() { - *x = MUPDirectSegmentDiscoveryRoute{} +func (x *TunnelEncapAttribute) Reset() { + *x = TunnelEncapAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[44] + mi := &file_attribute_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MUPDirectSegmentDiscoveryRoute) String() string { +func (x *TunnelEncapAttribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MUPDirectSegmentDiscoveryRoute) ProtoMessage() {} +func (*TunnelEncapAttribute) ProtoMessage() {} -func (x *MUPDirectSegmentDiscoveryRoute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[44] +func (x *TunnelEncapAttribute) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3255,63 +2745,46 @@ func (x *MUPDirectSegmentDiscoveryRoute) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use MUPDirectSegmentDiscoveryRoute.ProtoReflect.Descriptor instead. -func (*MUPDirectSegmentDiscoveryRoute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{44} +// Deprecated: Use TunnelEncapAttribute.ProtoReflect.Descriptor instead. +func (*TunnelEncapAttribute) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{38} } -func (x *MUPDirectSegmentDiscoveryRoute) GetRd() *anypb.Any { +func (x *TunnelEncapAttribute) GetTlvs() []*TunnelEncapTLV { if x != nil { - return x.Rd + return x.Tlvs } return nil } -func (x *MUPDirectSegmentDiscoveryRoute) GetAddress() string { - if x != nil { - return x.Address - } - return "" -} - -type MUPType1SessionTransformedRoute struct { +type IPv6AddressSpecificExtended struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // One of: - // - RouteDistinguisherTwoOctetASN - // - RouteDistinguisherIPAddress - // - RouteDistinguisherFourOctetASN - Rd *anypb.Any `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` - // Deprecated: Do not use. - PrefixLength uint32 `protobuf:"varint,2,opt,name=prefix_length,json=prefixLength,proto3" json:"prefix_length,omitempty"` - Prefix string `protobuf:"bytes,3,opt,name=prefix,proto3" json:"prefix,omitempty"` - Teid uint32 `protobuf:"varint,4,opt,name=teid,proto3" json:"teid,omitempty"` - Qfi uint32 `protobuf:"varint,5,opt,name=qfi,proto3" json:"qfi,omitempty"` - EndpointAddressLength uint32 `protobuf:"varint,6,opt,name=endpoint_address_length,json=endpointAddressLength,proto3" json:"endpoint_address_length,omitempty"` - EndpointAddress string `protobuf:"bytes,7,opt,name=endpoint_address,json=endpointAddress,proto3" json:"endpoint_address,omitempty"` - SourceAddressLength uint32 `protobuf:"varint,8,opt,name=source_address_length,json=sourceAddressLength,proto3" json:"source_address_length,omitempty"` - SourceAddress string `protobuf:"bytes,9,opt,name=source_address,json=sourceAddress,proto3" json:"source_address,omitempty"` -} - -func (x *MUPType1SessionTransformedRoute) Reset() { - *x = MUPType1SessionTransformedRoute{} + IsTransitive bool `protobuf:"varint,1,opt,name=is_transitive,json=isTransitive,proto3" json:"is_transitive,omitempty"` + SubType uint32 `protobuf:"varint,2,opt,name=sub_type,json=subType,proto3" json:"sub_type,omitempty"` + Address string `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` + LocalAdmin uint32 `protobuf:"varint,4,opt,name=local_admin,json=localAdmin,proto3" json:"local_admin,omitempty"` +} + +func (x *IPv6AddressSpecificExtended) Reset() { + *x = IPv6AddressSpecificExtended{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[45] + mi := &file_attribute_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MUPType1SessionTransformedRoute) String() string { +func (x *IPv6AddressSpecificExtended) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MUPType1SessionTransformedRoute) ProtoMessage() {} +func (*IPv6AddressSpecificExtended) ProtoMessage() {} -func (x *MUPType1SessionTransformedRoute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[45] +func (x *IPv6AddressSpecificExtended) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3322,107 +2795,65 @@ func (x *MUPType1SessionTransformedRoute) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use MUPType1SessionTransformedRoute.ProtoReflect.Descriptor instead. -func (*MUPType1SessionTransformedRoute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{45} -} - -func (x *MUPType1SessionTransformedRoute) GetRd() *anypb.Any { - if x != nil { - return x.Rd - } - return nil -} - -// Deprecated: Do not use. -func (x *MUPType1SessionTransformedRoute) GetPrefixLength() uint32 { - if x != nil { - return x.PrefixLength - } - return 0 -} - -func (x *MUPType1SessionTransformedRoute) GetPrefix() string { - if x != nil { - return x.Prefix - } - return "" -} - -func (x *MUPType1SessionTransformedRoute) GetTeid() uint32 { - if x != nil { - return x.Teid - } - return 0 +// Deprecated: Use IPv6AddressSpecificExtended.ProtoReflect.Descriptor instead. +func (*IPv6AddressSpecificExtended) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{39} } -func (x *MUPType1SessionTransformedRoute) GetQfi() uint32 { +func (x *IPv6AddressSpecificExtended) GetIsTransitive() bool { if x != nil { - return x.Qfi + return x.IsTransitive } - return 0 + return false } -func (x *MUPType1SessionTransformedRoute) GetEndpointAddressLength() uint32 { +func (x *IPv6AddressSpecificExtended) GetSubType() uint32 { if x != nil { - return x.EndpointAddressLength + return x.SubType } return 0 } -func (x *MUPType1SessionTransformedRoute) GetEndpointAddress() string { +func (x *IPv6AddressSpecificExtended) GetAddress() string { if x != nil { - return x.EndpointAddress + return x.Address } return "" } -func (x *MUPType1SessionTransformedRoute) GetSourceAddressLength() uint32 { +func (x *IPv6AddressSpecificExtended) GetLocalAdmin() uint32 { if x != nil { - return x.SourceAddressLength + return x.LocalAdmin } return 0 } -func (x *MUPType1SessionTransformedRoute) GetSourceAddress() string { - if x != nil { - return x.SourceAddress - } - return "" -} - -type MUPType2SessionTransformedRoute struct { +type RedirectIPv6AddressSpecificExtended struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // One of: - // - RouteDistinguisherTwoOctetASN - // - RouteDistinguisherIPAddress - // - RouteDistinguisherFourOctetASN - Rd *anypb.Any `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` - EndpointAddressLength uint32 `protobuf:"varint,2,opt,name=endpoint_address_length,json=endpointAddressLength,proto3" json:"endpoint_address_length,omitempty"` - EndpointAddress string `protobuf:"bytes,3,opt,name=endpoint_address,json=endpointAddress,proto3" json:"endpoint_address,omitempty"` - Teid uint32 `protobuf:"varint,4,opt,name=teid,proto3" json:"teid,omitempty"` + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + LocalAdmin uint32 `protobuf:"varint,2,opt,name=local_admin,json=localAdmin,proto3" json:"local_admin,omitempty"` } -func (x *MUPType2SessionTransformedRoute) Reset() { - *x = MUPType2SessionTransformedRoute{} +func (x *RedirectIPv6AddressSpecificExtended) Reset() { + *x = RedirectIPv6AddressSpecificExtended{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[46] + mi := &file_attribute_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MUPType2SessionTransformedRoute) String() string { +func (x *RedirectIPv6AddressSpecificExtended) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MUPType2SessionTransformedRoute) ProtoMessage() {} +func (*RedirectIPv6AddressSpecificExtended) ProtoMessage() {} -func (x *MUPType2SessionTransformedRoute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[46] +func (x *RedirectIPv6AddressSpecificExtended) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3433,87 +2864,50 @@ func (x *MUPType2SessionTransformedRoute) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use MUPType2SessionTransformedRoute.ProtoReflect.Descriptor instead. -func (*MUPType2SessionTransformedRoute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{46} -} - -func (x *MUPType2SessionTransformedRoute) GetRd() *anypb.Any { - if x != nil { - return x.Rd - } - return nil -} - -func (x *MUPType2SessionTransformedRoute) GetEndpointAddressLength() uint32 { - if x != nil { - return x.EndpointAddressLength - } - return 0 +// Deprecated: Use RedirectIPv6AddressSpecificExtended.ProtoReflect.Descriptor instead. +func (*RedirectIPv6AddressSpecificExtended) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{40} } -func (x *MUPType2SessionTransformedRoute) GetEndpointAddress() string { +func (x *RedirectIPv6AddressSpecificExtended) GetAddress() string { if x != nil { - return x.EndpointAddress + return x.Address } return "" } -func (x *MUPType2SessionTransformedRoute) GetTeid() uint32 { +func (x *RedirectIPv6AddressSpecificExtended) GetLocalAdmin() uint32 { if x != nil { - return x.Teid + return x.LocalAdmin } return 0 } -type MpReachNLRIAttribute struct { +type IP6ExtendedCommunitiesAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Family *Family `protobuf:"bytes,1,opt,name=family,proto3" json:"family,omitempty"` - NextHops []string `protobuf:"bytes,2,rep,name=next_hops,json=nextHops,proto3" json:"next_hops,omitempty"` - // Each NLRI must be one of: - // - IPAddressPrefix - // - LabeledIPAddressPrefix - // - EncapsulationNLRI - // - EVPNEthernetAutoDiscoveryRoute - // - EVPNMACIPAdvertisementRoute - // - EVPNInclusiveMulticastEthernetTagRoute - // - EVPNEthernetSegmentRoute - // - EVPNIPPrefixRoute - // - EVPNIPMSIRoute - // - LabeledVPNIPAddressPrefix - // - RouteTargetMembershipNLRI - // - FlowSpecNLRI - // - VPNFlowSpecNLRI - // - OpaqueNLRI - // - LsAddrPrefix - // - SR Policy NLRI - // - MUPInterworkSegmentDiscoveryRoute - // - MUPDirectSegmentDiscoveryRoute - // - MUPType1SessionTransformedRoute - // - MUPType2SessionTransformedRoute - Nlris []*anypb.Any `protobuf:"bytes,3,rep,name=nlris,proto3" json:"nlris,omitempty"` + Communities []*IP6ExtendedCommunitiesAttribute_Community `protobuf:"bytes,1,rep,name=communities,proto3" json:"communities,omitempty"` } -func (x *MpReachNLRIAttribute) Reset() { - *x = MpReachNLRIAttribute{} +func (x *IP6ExtendedCommunitiesAttribute) Reset() { + *x = IP6ExtendedCommunitiesAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[47] + mi := &file_attribute_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MpReachNLRIAttribute) String() string { +func (x *IP6ExtendedCommunitiesAttribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MpReachNLRIAttribute) ProtoMessage() {} +func (*IP6ExtendedCommunitiesAttribute) ProtoMessage() {} -func (x *MpReachNLRIAttribute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[47] +func (x *IP6ExtendedCommunitiesAttribute) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3524,59 +2918,43 @@ func (x *MpReachNLRIAttribute) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use MpReachNLRIAttribute.ProtoReflect.Descriptor instead. -func (*MpReachNLRIAttribute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{47} -} - -func (x *MpReachNLRIAttribute) GetFamily() *Family { - if x != nil { - return x.Family - } - return nil -} - -func (x *MpReachNLRIAttribute) GetNextHops() []string { - if x != nil { - return x.NextHops - } - return nil +// Deprecated: Use IP6ExtendedCommunitiesAttribute.ProtoReflect.Descriptor instead. +func (*IP6ExtendedCommunitiesAttribute) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{41} } -func (x *MpReachNLRIAttribute) GetNlris() []*anypb.Any { +func (x *IP6ExtendedCommunitiesAttribute) GetCommunities() []*IP6ExtendedCommunitiesAttribute_Community { if x != nil { - return x.Nlris + return x.Communities } return nil } -type MpUnreachNLRIAttribute struct { +type AigpTLVIGPMetric struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Family *Family `protobuf:"bytes,1,opt,name=family,proto3" json:"family,omitempty"` - // The same as NLRI field of MpReachNLRIAttribute - Nlris []*anypb.Any `protobuf:"bytes,3,rep,name=nlris,proto3" json:"nlris,omitempty"` + Metric uint64 `protobuf:"varint,1,opt,name=metric,proto3" json:"metric,omitempty"` } -func (x *MpUnreachNLRIAttribute) Reset() { - *x = MpUnreachNLRIAttribute{} +func (x *AigpTLVIGPMetric) Reset() { + *x = AigpTLVIGPMetric{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[48] + mi := &file_attribute_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MpUnreachNLRIAttribute) String() string { +func (x *AigpTLVIGPMetric) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MpUnreachNLRIAttribute) ProtoMessage() {} +func (*AigpTLVIGPMetric) ProtoMessage() {} -func (x *MpUnreachNLRIAttribute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[48] +func (x *AigpTLVIGPMetric) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3587,53 +2965,44 @@ func (x *MpUnreachNLRIAttribute) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use MpUnreachNLRIAttribute.ProtoReflect.Descriptor instead. -func (*MpUnreachNLRIAttribute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{48} -} - -func (x *MpUnreachNLRIAttribute) GetFamily() *Family { - if x != nil { - return x.Family - } - return nil +// Deprecated: Use AigpTLVIGPMetric.ProtoReflect.Descriptor instead. +func (*AigpTLVIGPMetric) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{42} } -func (x *MpUnreachNLRIAttribute) GetNlris() []*anypb.Any { +func (x *AigpTLVIGPMetric) GetMetric() uint64 { if x != nil { - return x.Nlris + return x.Metric } - return nil + return 0 } -type TwoOctetAsSpecificExtended struct { +type AigpTLVUnknown struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IsTransitive bool `protobuf:"varint,1,opt,name=is_transitive,json=isTransitive,proto3" json:"is_transitive,omitempty"` - SubType uint32 `protobuf:"varint,2,opt,name=sub_type,json=subType,proto3" json:"sub_type,omitempty"` - Asn uint32 `protobuf:"varint,3,opt,name=asn,proto3" json:"asn,omitempty"` - LocalAdmin uint32 `protobuf:"varint,4,opt,name=local_admin,json=localAdmin,proto3" json:"local_admin,omitempty"` + Type uint32 `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"` + Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` } -func (x *TwoOctetAsSpecificExtended) Reset() { - *x = TwoOctetAsSpecificExtended{} +func (x *AigpTLVUnknown) Reset() { + *x = AigpTLVUnknown{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[49] + mi := &file_attribute_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *TwoOctetAsSpecificExtended) String() string { +func (x *AigpTLVUnknown) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TwoOctetAsSpecificExtended) ProtoMessage() {} +func (*AigpTLVUnknown) ProtoMessage() {} -func (x *TwoOctetAsSpecificExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[49] +func (x *AigpTLVUnknown) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3644,67 +3013,50 @@ func (x *TwoOctetAsSpecificExtended) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TwoOctetAsSpecificExtended.ProtoReflect.Descriptor instead. -func (*TwoOctetAsSpecificExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{49} -} - -func (x *TwoOctetAsSpecificExtended) GetIsTransitive() bool { - if x != nil { - return x.IsTransitive - } - return false -} - -func (x *TwoOctetAsSpecificExtended) GetSubType() uint32 { - if x != nil { - return x.SubType - } - return 0 +// Deprecated: Use AigpTLVUnknown.ProtoReflect.Descriptor instead. +func (*AigpTLVUnknown) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{43} } -func (x *TwoOctetAsSpecificExtended) GetAsn() uint32 { +func (x *AigpTLVUnknown) GetType() uint32 { if x != nil { - return x.Asn + return x.Type } return 0 } -func (x *TwoOctetAsSpecificExtended) GetLocalAdmin() uint32 { +func (x *AigpTLVUnknown) GetValue() []byte { if x != nil { - return x.LocalAdmin + return x.Value } - return 0 + return nil } -type IPv4AddressSpecificExtended struct { +type AigpAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IsTransitive bool `protobuf:"varint,1,opt,name=is_transitive,json=isTransitive,proto3" json:"is_transitive,omitempty"` - SubType uint32 `protobuf:"varint,2,opt,name=sub_type,json=subType,proto3" json:"sub_type,omitempty"` - Address string `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` - LocalAdmin uint32 `protobuf:"varint,4,opt,name=local_admin,json=localAdmin,proto3" json:"local_admin,omitempty"` + Tlvs []*AigpAttribute_TLV `protobuf:"bytes,1,rep,name=tlvs,proto3" json:"tlvs,omitempty"` } -func (x *IPv4AddressSpecificExtended) Reset() { - *x = IPv4AddressSpecificExtended{} +func (x *AigpAttribute) Reset() { + *x = AigpAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[50] + mi := &file_attribute_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *IPv4AddressSpecificExtended) String() string { +func (x *AigpAttribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*IPv4AddressSpecificExtended) ProtoMessage() {} +func (*AigpAttribute) ProtoMessage() {} -func (x *IPv4AddressSpecificExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[50] +func (x *AigpAttribute) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3715,67 +3067,45 @@ func (x *IPv4AddressSpecificExtended) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use IPv4AddressSpecificExtended.ProtoReflect.Descriptor instead. -func (*IPv4AddressSpecificExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{50} +// Deprecated: Use AigpAttribute.ProtoReflect.Descriptor instead. +func (*AigpAttribute) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{44} } -func (x *IPv4AddressSpecificExtended) GetIsTransitive() bool { +func (x *AigpAttribute) GetTlvs() []*AigpAttribute_TLV { if x != nil { - return x.IsTransitive + return x.Tlvs } - return false + return nil } -func (x *IPv4AddressSpecificExtended) GetSubType() uint32 { - if x != nil { - return x.SubType - } - return 0 +type LargeCommunity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GlobalAdmin uint32 `protobuf:"varint,1,opt,name=global_admin,json=globalAdmin,proto3" json:"global_admin,omitempty"` + LocalData1 uint32 `protobuf:"varint,2,opt,name=local_data1,json=localData1,proto3" json:"local_data1,omitempty"` + LocalData2 uint32 `protobuf:"varint,3,opt,name=local_data2,json=localData2,proto3" json:"local_data2,omitempty"` } -func (x *IPv4AddressSpecificExtended) GetAddress() string { - if x != nil { - return x.Address - } - return "" -} - -func (x *IPv4AddressSpecificExtended) GetLocalAdmin() uint32 { - if x != nil { - return x.LocalAdmin - } - return 0 -} - -type FourOctetAsSpecificExtended struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - IsTransitive bool `protobuf:"varint,1,opt,name=is_transitive,json=isTransitive,proto3" json:"is_transitive,omitempty"` - SubType uint32 `protobuf:"varint,2,opt,name=sub_type,json=subType,proto3" json:"sub_type,omitempty"` - Asn uint32 `protobuf:"varint,3,opt,name=asn,proto3" json:"asn,omitempty"` - LocalAdmin uint32 `protobuf:"varint,4,opt,name=local_admin,json=localAdmin,proto3" json:"local_admin,omitempty"` -} - -func (x *FourOctetAsSpecificExtended) Reset() { - *x = FourOctetAsSpecificExtended{} +func (x *LargeCommunity) Reset() { + *x = LargeCommunity{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[51] + mi := &file_attribute_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *FourOctetAsSpecificExtended) String() string { +func (x *LargeCommunity) String() string { return protoimpl.X.MessageStringOf(x) } -func (*FourOctetAsSpecificExtended) ProtoMessage() {} +func (*LargeCommunity) ProtoMessage() {} -func (x *FourOctetAsSpecificExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[51] +func (x *LargeCommunity) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3786,65 +3116,57 @@ func (x *FourOctetAsSpecificExtended) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use FourOctetAsSpecificExtended.ProtoReflect.Descriptor instead. -func (*FourOctetAsSpecificExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{51} -} - -func (x *FourOctetAsSpecificExtended) GetIsTransitive() bool { - if x != nil { - return x.IsTransitive - } - return false +// Deprecated: Use LargeCommunity.ProtoReflect.Descriptor instead. +func (*LargeCommunity) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{45} } -func (x *FourOctetAsSpecificExtended) GetSubType() uint32 { +func (x *LargeCommunity) GetGlobalAdmin() uint32 { if x != nil { - return x.SubType + return x.GlobalAdmin } return 0 } -func (x *FourOctetAsSpecificExtended) GetAsn() uint32 { +func (x *LargeCommunity) GetLocalData1() uint32 { if x != nil { - return x.Asn + return x.LocalData1 } return 0 } -func (x *FourOctetAsSpecificExtended) GetLocalAdmin() uint32 { +func (x *LargeCommunity) GetLocalData2() uint32 { if x != nil { - return x.LocalAdmin + return x.LocalData2 } return 0 } -type LinkBandwidthExtended struct { +type LargeCommunitiesAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Asn uint32 `protobuf:"varint,1,opt,name=asn,proto3" json:"asn,omitempty"` - Bandwidth float32 `protobuf:"fixed32,2,opt,name=bandwidth,proto3" json:"bandwidth,omitempty"` + Communities []*LargeCommunity `protobuf:"bytes,1,rep,name=communities,proto3" json:"communities,omitempty"` } -func (x *LinkBandwidthExtended) Reset() { - *x = LinkBandwidthExtended{} +func (x *LargeCommunitiesAttribute) Reset() { + *x = LargeCommunitiesAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[52] + mi := &file_attribute_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *LinkBandwidthExtended) String() string { +func (x *LargeCommunitiesAttribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LinkBandwidthExtended) ProtoMessage() {} +func (*LargeCommunitiesAttribute) ProtoMessage() {} -func (x *LinkBandwidthExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[52] +func (x *LargeCommunitiesAttribute) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3855,50 +3177,48 @@ func (x *LinkBandwidthExtended) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LinkBandwidthExtended.ProtoReflect.Descriptor instead. -func (*LinkBandwidthExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{52} -} - -func (x *LinkBandwidthExtended) GetAsn() uint32 { - if x != nil { - return x.Asn - } - return 0 +// Deprecated: Use LargeCommunitiesAttribute.ProtoReflect.Descriptor instead. +func (*LargeCommunitiesAttribute) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{46} } -func (x *LinkBandwidthExtended) GetBandwidth() float32 { +func (x *LargeCommunitiesAttribute) GetCommunities() []*LargeCommunity { if x != nil { - return x.Bandwidth + return x.Communities } - return 0 + return nil } -type ValidationExtended struct { +type LsNodeFlags struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - State uint32 `protobuf:"varint,1,opt,name=state,proto3" json:"state,omitempty"` + Overload bool `protobuf:"varint,1,opt,name=overload,proto3" json:"overload,omitempty"` + Attached bool `protobuf:"varint,2,opt,name=attached,proto3" json:"attached,omitempty"` + External bool `protobuf:"varint,3,opt,name=external,proto3" json:"external,omitempty"` + Abr bool `protobuf:"varint,4,opt,name=abr,proto3" json:"abr,omitempty"` + Router bool `protobuf:"varint,5,opt,name=router,proto3" json:"router,omitempty"` + V6 bool `protobuf:"varint,6,opt,name=v6,proto3" json:"v6,omitempty"` } -func (x *ValidationExtended) Reset() { - *x = ValidationExtended{} +func (x *LsNodeFlags) Reset() { + *x = LsNodeFlags{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[53] + mi := &file_attribute_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ValidationExtended) String() string { +func (x *LsNodeFlags) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ValidationExtended) ProtoMessage() {} +func (*LsNodeFlags) ProtoMessage() {} -func (x *ValidationExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[53] +func (x *LsNodeFlags) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3909,90 +3229,81 @@ func (x *ValidationExtended) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ValidationExtended.ProtoReflect.Descriptor instead. -func (*ValidationExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{53} +// Deprecated: Use LsNodeFlags.ProtoReflect.Descriptor instead. +func (*LsNodeFlags) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{47} } -func (x *ValidationExtended) GetState() uint32 { +func (x *LsNodeFlags) GetOverload() bool { if x != nil { - return x.State + return x.Overload } - return 0 -} - -type ColorExtended struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Color uint32 `protobuf:"varint,1,opt,name=color,proto3" json:"color,omitempty"` + return false } -func (x *ColorExtended) Reset() { - *x = ColorExtended{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[54] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *LsNodeFlags) GetAttached() bool { + if x != nil { + return x.Attached } + return false } -func (x *ColorExtended) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *LsNodeFlags) GetExternal() bool { + if x != nil { + return x.External + } + return false } -func (*ColorExtended) ProtoMessage() {} - -func (x *ColorExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[54] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *LsNodeFlags) GetAbr() bool { + if x != nil { + return x.Abr } - return mi.MessageOf(x) + return false } -// Deprecated: Use ColorExtended.ProtoReflect.Descriptor instead. -func (*ColorExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{54} +func (x *LsNodeFlags) GetRouter() bool { + if x != nil { + return x.Router + } + return false } -func (x *ColorExtended) GetColor() uint32 { +func (x *LsNodeFlags) GetV6() bool { if x != nil { - return x.Color + return x.V6 } - return 0 + return false } -type EncapExtended struct { +type LsIGPFlags struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TunnelType uint32 `protobuf:"varint,1,opt,name=tunnel_type,json=tunnelType,proto3" json:"tunnel_type,omitempty"` + Down bool `protobuf:"varint,1,opt,name=down,proto3" json:"down,omitempty"` + NoUnicast bool `protobuf:"varint,2,opt,name=no_unicast,json=noUnicast,proto3" json:"no_unicast,omitempty"` + LocalAddress bool `protobuf:"varint,3,opt,name=local_address,json=localAddress,proto3" json:"local_address,omitempty"` + PropagateNssa bool `protobuf:"varint,4,opt,name=propagate_nssa,json=propagateNssa,proto3" json:"propagate_nssa,omitempty"` } -func (x *EncapExtended) Reset() { - *x = EncapExtended{} +func (x *LsIGPFlags) Reset() { + *x = LsIGPFlags{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[55] + mi := &file_attribute_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *EncapExtended) String() string { +func (x *LsIGPFlags) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EncapExtended) ProtoMessage() {} +func (*LsIGPFlags) ProtoMessage() {} -func (x *EncapExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[55] +func (x *LsIGPFlags) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4003,82 +3314,65 @@ func (x *EncapExtended) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EncapExtended.ProtoReflect.Descriptor instead. -func (*EncapExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{55} +// Deprecated: Use LsIGPFlags.ProtoReflect.Descriptor instead. +func (*LsIGPFlags) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{48} } -func (x *EncapExtended) GetTunnelType() uint32 { +func (x *LsIGPFlags) GetDown() bool { if x != nil { - return x.TunnelType + return x.Down } - return 0 -} - -type DefaultGatewayExtended struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields + return false } -func (x *DefaultGatewayExtended) Reset() { - *x = DefaultGatewayExtended{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[56] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *LsIGPFlags) GetNoUnicast() bool { + if x != nil { + return x.NoUnicast } + return false } -func (x *DefaultGatewayExtended) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DefaultGatewayExtended) ProtoMessage() {} - -func (x *DefaultGatewayExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[56] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *LsIGPFlags) GetLocalAddress() bool { + if x != nil { + return x.LocalAddress } - return mi.MessageOf(x) + return false } -// Deprecated: Use DefaultGatewayExtended.ProtoReflect.Descriptor instead. -func (*DefaultGatewayExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{56} +func (x *LsIGPFlags) GetPropagateNssa() bool { + if x != nil { + return x.PropagateNssa + } + return false } -type OpaqueExtended struct { +type LsSrRange struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IsTransitive bool `protobuf:"varint,1,opt,name=is_transitive,json=isTransitive,proto3" json:"is_transitive,omitempty"` - Value []byte `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + Begin uint32 `protobuf:"varint,1,opt,name=begin,proto3" json:"begin,omitempty"` + End uint32 `protobuf:"varint,2,opt,name=end,proto3" json:"end,omitempty"` } -func (x *OpaqueExtended) Reset() { - *x = OpaqueExtended{} +func (x *LsSrRange) Reset() { + *x = LsSrRange{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[57] + mi := &file_attribute_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *OpaqueExtended) String() string { +func (x *LsSrRange) String() string { return protoimpl.X.MessageStringOf(x) } -func (*OpaqueExtended) ProtoMessage() {} +func (*LsSrRange) ProtoMessage() {} -func (x *OpaqueExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[57] +func (x *LsSrRange) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4089,51 +3383,52 @@ func (x *OpaqueExtended) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use OpaqueExtended.ProtoReflect.Descriptor instead. -func (*OpaqueExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{57} +// Deprecated: Use LsSrRange.ProtoReflect.Descriptor instead. +func (*LsSrRange) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{49} } -func (x *OpaqueExtended) GetIsTransitive() bool { +func (x *LsSrRange) GetBegin() uint32 { if x != nil { - return x.IsTransitive + return x.Begin } - return false + return 0 } -func (x *OpaqueExtended) GetValue() []byte { +func (x *LsSrRange) GetEnd() uint32 { if x != nil { - return x.Value + return x.End } - return nil + return 0 } -type ESILabelExtended struct { +type LsSrCapabilities struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IsSingleActive bool `protobuf:"varint,1,opt,name=is_single_active,json=isSingleActive,proto3" json:"is_single_active,omitempty"` - Label uint32 `protobuf:"varint,2,opt,name=label,proto3" json:"label,omitempty"` + Ipv4Supported bool `protobuf:"varint,1,opt,name=ipv4_supported,json=ipv4Supported,proto3" json:"ipv4_supported,omitempty"` + Ipv6Supported bool `protobuf:"varint,2,opt,name=ipv6_supported,json=ipv6Supported,proto3" json:"ipv6_supported,omitempty"` + Ranges []*LsSrRange `protobuf:"bytes,3,rep,name=ranges,proto3" json:"ranges,omitempty"` } -func (x *ESILabelExtended) Reset() { - *x = ESILabelExtended{} +func (x *LsSrCapabilities) Reset() { + *x = LsSrCapabilities{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[58] + mi := &file_attribute_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ESILabelExtended) String() string { +func (x *LsSrCapabilities) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ESILabelExtended) ProtoMessage() {} +func (*LsSrCapabilities) ProtoMessage() {} -func (x *ESILabelExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[58] +func (x *LsSrCapabilities) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4144,50 +3439,57 @@ func (x *ESILabelExtended) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ESILabelExtended.ProtoReflect.Descriptor instead. -func (*ESILabelExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{58} +// Deprecated: Use LsSrCapabilities.ProtoReflect.Descriptor instead. +func (*LsSrCapabilities) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{50} } -func (x *ESILabelExtended) GetIsSingleActive() bool { +func (x *LsSrCapabilities) GetIpv4Supported() bool { if x != nil { - return x.IsSingleActive + return x.Ipv4Supported } return false } -func (x *ESILabelExtended) GetLabel() uint32 { +func (x *LsSrCapabilities) GetIpv6Supported() bool { if x != nil { - return x.Label + return x.Ipv6Supported } - return 0 + return false } -type ESImportRouteTarget struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EsImport string `protobuf:"bytes,1,opt,name=es_import,json=esImport,proto3" json:"es_import,omitempty"` -} +func (x *LsSrCapabilities) GetRanges() []*LsSrRange { + if x != nil { + return x.Ranges + } + return nil +} + +type LsSrLocalBlock struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Ranges []*LsSrRange `protobuf:"bytes,1,rep,name=ranges,proto3" json:"ranges,omitempty"` +} -func (x *ESImportRouteTarget) Reset() { - *x = ESImportRouteTarget{} +func (x *LsSrLocalBlock) Reset() { + *x = LsSrLocalBlock{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[59] + mi := &file_attribute_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ESImportRouteTarget) String() string { +func (x *LsSrLocalBlock) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ESImportRouteTarget) ProtoMessage() {} +func (*LsSrLocalBlock) ProtoMessage() {} -func (x *ESImportRouteTarget) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[59] +func (x *LsSrLocalBlock) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4198,44 +3500,51 @@ func (x *ESImportRouteTarget) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ESImportRouteTarget.ProtoReflect.Descriptor instead. -func (*ESImportRouteTarget) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{59} +// Deprecated: Use LsSrLocalBlock.ProtoReflect.Descriptor instead. +func (*LsSrLocalBlock) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{51} } -func (x *ESImportRouteTarget) GetEsImport() string { +func (x *LsSrLocalBlock) GetRanges() []*LsSrRange { if x != nil { - return x.EsImport + return x.Ranges } - return "" + return nil } -type MacMobilityExtended struct { +type LsAttributeNode struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IsSticky bool `protobuf:"varint,1,opt,name=is_sticky,json=isSticky,proto3" json:"is_sticky,omitempty"` - SequenceNum uint32 `protobuf:"varint,2,opt,name=sequence_num,json=sequenceNum,proto3" json:"sequence_num,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Flags *LsNodeFlags `protobuf:"bytes,2,opt,name=flags,proto3" json:"flags,omitempty"` + LocalRouterId string `protobuf:"bytes,3,opt,name=local_router_id,json=localRouterId,proto3" json:"local_router_id,omitempty"` + LocalRouterIdV6 string `protobuf:"bytes,4,opt,name=local_router_id_v6,json=localRouterIdV6,proto3" json:"local_router_id_v6,omitempty"` + IsisArea []byte `protobuf:"bytes,5,opt,name=isis_area,json=isisArea,proto3" json:"isis_area,omitempty"` + Opaque []byte `protobuf:"bytes,6,opt,name=opaque,proto3" json:"opaque,omitempty"` + SrCapabilities *LsSrCapabilities `protobuf:"bytes,7,opt,name=sr_capabilities,json=srCapabilities,proto3" json:"sr_capabilities,omitempty"` + SrAlgorithms []byte `protobuf:"bytes,8,opt,name=sr_algorithms,json=srAlgorithms,proto3" json:"sr_algorithms,omitempty"` + SrLocalBlock *LsSrLocalBlock `protobuf:"bytes,9,opt,name=sr_local_block,json=srLocalBlock,proto3" json:"sr_local_block,omitempty"` } -func (x *MacMobilityExtended) Reset() { - *x = MacMobilityExtended{} +func (x *LsAttributeNode) Reset() { + *x = LsAttributeNode{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[60] + mi := &file_attribute_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MacMobilityExtended) String() string { +func (x *LsAttributeNode) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MacMobilityExtended) ProtoMessage() {} +func (*LsAttributeNode) ProtoMessage() {} -func (x *MacMobilityExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[60] +func (x *LsAttributeNode) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4246,98 +3555,112 @@ func (x *MacMobilityExtended) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use MacMobilityExtended.ProtoReflect.Descriptor instead. -func (*MacMobilityExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{60} +// Deprecated: Use LsAttributeNode.ProtoReflect.Descriptor instead. +func (*LsAttributeNode) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{52} } -func (x *MacMobilityExtended) GetIsSticky() bool { +func (x *LsAttributeNode) GetName() string { if x != nil { - return x.IsSticky + return x.Name } - return false + return "" } -func (x *MacMobilityExtended) GetSequenceNum() uint32 { +func (x *LsAttributeNode) GetFlags() *LsNodeFlags { if x != nil { - return x.SequenceNum + return x.Flags } - return 0 + return nil } -type RouterMacExtended struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Mac string `protobuf:"bytes,1,opt,name=mac,proto3" json:"mac,omitempty"` +func (x *LsAttributeNode) GetLocalRouterId() string { + if x != nil { + return x.LocalRouterId + } + return "" } -func (x *RouterMacExtended) Reset() { - *x = RouterMacExtended{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[61] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *LsAttributeNode) GetLocalRouterIdV6() string { + if x != nil { + return x.LocalRouterIdV6 } + return "" } -func (x *RouterMacExtended) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *LsAttributeNode) GetIsisArea() []byte { + if x != nil { + return x.IsisArea + } + return nil } -func (*RouterMacExtended) ProtoMessage() {} +func (x *LsAttributeNode) GetOpaque() []byte { + if x != nil { + return x.Opaque + } + return nil +} -func (x *RouterMacExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[61] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *LsAttributeNode) GetSrCapabilities() *LsSrCapabilities { + if x != nil { + return x.SrCapabilities } - return mi.MessageOf(x) + return nil } -// Deprecated: Use RouterMacExtended.ProtoReflect.Descriptor instead. -func (*RouterMacExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{61} +func (x *LsAttributeNode) GetSrAlgorithms() []byte { + if x != nil { + return x.SrAlgorithms + } + return nil } -func (x *RouterMacExtended) GetMac() string { +func (x *LsAttributeNode) GetSrLocalBlock() *LsSrLocalBlock { if x != nil { - return x.Mac + return x.SrLocalBlock } - return "" + return nil } -type TrafficRateExtended struct { +type LsAttributeLink struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Asn uint32 `protobuf:"varint,1,opt,name=asn,proto3" json:"asn,omitempty"` - Rate float32 `protobuf:"fixed32,2,opt,name=rate,proto3" json:"rate,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + LocalRouterId string `protobuf:"bytes,2,opt,name=local_router_id,json=localRouterId,proto3" json:"local_router_id,omitempty"` + LocalRouterIdV6 string `protobuf:"bytes,3,opt,name=local_router_id_v6,json=localRouterIdV6,proto3" json:"local_router_id_v6,omitempty"` + RemoteRouterId string `protobuf:"bytes,4,opt,name=remote_router_id,json=remoteRouterId,proto3" json:"remote_router_id,omitempty"` + RemoteRouterIdV6 string `protobuf:"bytes,5,opt,name=remote_router_id_v6,json=remoteRouterIdV6,proto3" json:"remote_router_id_v6,omitempty"` + AdminGroup uint32 `protobuf:"varint,6,opt,name=admin_group,json=adminGroup,proto3" json:"admin_group,omitempty"` + DefaultTeMetric uint32 `protobuf:"varint,7,opt,name=default_te_metric,json=defaultTeMetric,proto3" json:"default_te_metric,omitempty"` + IgpMetric uint32 `protobuf:"varint,8,opt,name=igp_metric,json=igpMetric,proto3" json:"igp_metric,omitempty"` + Opaque []byte `protobuf:"bytes,9,opt,name=opaque,proto3" json:"opaque,omitempty"` + Bandwidth float32 `protobuf:"fixed32,10,opt,name=bandwidth,proto3" json:"bandwidth,omitempty"` + ReservableBandwidth float32 `protobuf:"fixed32,11,opt,name=reservable_bandwidth,json=reservableBandwidth,proto3" json:"reservable_bandwidth,omitempty"` + UnreservedBandwidth []float32 `protobuf:"fixed32,12,rep,packed,name=unreserved_bandwidth,json=unreservedBandwidth,proto3" json:"unreserved_bandwidth,omitempty"` + SrAdjacencySid uint32 `protobuf:"varint,13,opt,name=sr_adjacency_sid,json=srAdjacencySid,proto3" json:"sr_adjacency_sid,omitempty"` + Srlgs []uint32 `protobuf:"varint,14,rep,packed,name=srlgs,proto3" json:"srlgs,omitempty"` } -func (x *TrafficRateExtended) Reset() { - *x = TrafficRateExtended{} +func (x *LsAttributeLink) Reset() { + *x = LsAttributeLink{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[62] + mi := &file_attribute_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *TrafficRateExtended) String() string { +func (x *LsAttributeLink) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TrafficRateExtended) ProtoMessage() {} +func (*LsAttributeLink) ProtoMessage() {} -func (x *TrafficRateExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[62] +func (x *LsAttributeLink) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4348,106 +3671,136 @@ func (x *TrafficRateExtended) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TrafficRateExtended.ProtoReflect.Descriptor instead. -func (*TrafficRateExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{62} +// Deprecated: Use LsAttributeLink.ProtoReflect.Descriptor instead. +func (*LsAttributeLink) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{53} } -func (x *TrafficRateExtended) GetAsn() uint32 { +func (x *LsAttributeLink) GetName() string { if x != nil { - return x.Asn + return x.Name } - return 0 + return "" } -func (x *TrafficRateExtended) GetRate() float32 { +func (x *LsAttributeLink) GetLocalRouterId() string { if x != nil { - return x.Rate + return x.LocalRouterId } - return 0 + return "" } -type TrafficActionExtended struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *LsAttributeLink) GetLocalRouterIdV6() string { + if x != nil { + return x.LocalRouterIdV6 + } + return "" +} - Terminal bool `protobuf:"varint,1,opt,name=terminal,proto3" json:"terminal,omitempty"` - Sample bool `protobuf:"varint,2,opt,name=sample,proto3" json:"sample,omitempty"` +func (x *LsAttributeLink) GetRemoteRouterId() string { + if x != nil { + return x.RemoteRouterId + } + return "" } -func (x *TrafficActionExtended) Reset() { - *x = TrafficActionExtended{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[63] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *LsAttributeLink) GetRemoteRouterIdV6() string { + if x != nil { + return x.RemoteRouterIdV6 } + return "" } -func (x *TrafficActionExtended) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *LsAttributeLink) GetAdminGroup() uint32 { + if x != nil { + return x.AdminGroup + } + return 0 } -func (*TrafficActionExtended) ProtoMessage() {} +func (x *LsAttributeLink) GetDefaultTeMetric() uint32 { + if x != nil { + return x.DefaultTeMetric + } + return 0 +} -func (x *TrafficActionExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[63] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *LsAttributeLink) GetIgpMetric() uint32 { + if x != nil { + return x.IgpMetric } - return mi.MessageOf(x) + return 0 } -// Deprecated: Use TrafficActionExtended.ProtoReflect.Descriptor instead. -func (*TrafficActionExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{63} +func (x *LsAttributeLink) GetOpaque() []byte { + if x != nil { + return x.Opaque + } + return nil } -func (x *TrafficActionExtended) GetTerminal() bool { +func (x *LsAttributeLink) GetBandwidth() float32 { if x != nil { - return x.Terminal + return x.Bandwidth } - return false + return 0 +} + +func (x *LsAttributeLink) GetReservableBandwidth() float32 { + if x != nil { + return x.ReservableBandwidth + } + return 0 } -func (x *TrafficActionExtended) GetSample() bool { +func (x *LsAttributeLink) GetUnreservedBandwidth() []float32 { if x != nil { - return x.Sample + return x.UnreservedBandwidth } - return false + return nil +} + +func (x *LsAttributeLink) GetSrAdjacencySid() uint32 { + if x != nil { + return x.SrAdjacencySid + } + return 0 } -type RedirectTwoOctetAsSpecificExtended struct { +func (x *LsAttributeLink) GetSrlgs() []uint32 { + if x != nil { + return x.Srlgs + } + return nil +} + +type LsAttributePrefix struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Asn uint32 `protobuf:"varint,1,opt,name=asn,proto3" json:"asn,omitempty"` - LocalAdmin uint32 `protobuf:"varint,2,opt,name=local_admin,json=localAdmin,proto3" json:"local_admin,omitempty"` + IgpFlags *LsIGPFlags `protobuf:"bytes,1,opt,name=igp_flags,json=igpFlags,proto3" json:"igp_flags,omitempty"` + Opaque []byte `protobuf:"bytes,2,opt,name=opaque,proto3" json:"opaque,omitempty"` + SrPrefixSid uint32 `protobuf:"varint,3,opt,name=sr_prefix_sid,json=srPrefixSid,proto3" json:"sr_prefix_sid,omitempty"` } -func (x *RedirectTwoOctetAsSpecificExtended) Reset() { - *x = RedirectTwoOctetAsSpecificExtended{} +func (x *LsAttributePrefix) Reset() { + *x = LsAttributePrefix{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[64] + mi := &file_attribute_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *RedirectTwoOctetAsSpecificExtended) String() string { +func (x *LsAttributePrefix) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RedirectTwoOctetAsSpecificExtended) ProtoMessage() {} +func (*LsAttributePrefix) ProtoMessage() {} -func (x *RedirectTwoOctetAsSpecificExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[64] +func (x *LsAttributePrefix) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4458,51 +3811,60 @@ func (x *RedirectTwoOctetAsSpecificExtended) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use RedirectTwoOctetAsSpecificExtended.ProtoReflect.Descriptor instead. -func (*RedirectTwoOctetAsSpecificExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{64} +// Deprecated: Use LsAttributePrefix.ProtoReflect.Descriptor instead. +func (*LsAttributePrefix) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{54} } -func (x *RedirectTwoOctetAsSpecificExtended) GetAsn() uint32 { +func (x *LsAttributePrefix) GetIgpFlags() *LsIGPFlags { if x != nil { - return x.Asn + return x.IgpFlags } - return 0 + return nil } -func (x *RedirectTwoOctetAsSpecificExtended) GetLocalAdmin() uint32 { +func (x *LsAttributePrefix) GetOpaque() []byte { if x != nil { - return x.LocalAdmin + return x.Opaque + } + return nil +} + +func (x *LsAttributePrefix) GetSrPrefixSid() uint32 { + if x != nil { + return x.SrPrefixSid } return 0 } -type RedirectIPv4AddressSpecificExtended struct { +type LsBgpPeerSegmentSIDFlags struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - LocalAdmin uint32 `protobuf:"varint,2,opt,name=local_admin,json=localAdmin,proto3" json:"local_admin,omitempty"` + Value bool `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` + Local bool `protobuf:"varint,2,opt,name=local,proto3" json:"local,omitempty"` + Backup bool `protobuf:"varint,3,opt,name=backup,proto3" json:"backup,omitempty"` + Persistent bool `protobuf:"varint,4,opt,name=persistent,proto3" json:"persistent,omitempty"` } -func (x *RedirectIPv4AddressSpecificExtended) Reset() { - *x = RedirectIPv4AddressSpecificExtended{} +func (x *LsBgpPeerSegmentSIDFlags) Reset() { + *x = LsBgpPeerSegmentSIDFlags{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[65] + mi := &file_attribute_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *RedirectIPv4AddressSpecificExtended) String() string { +func (x *LsBgpPeerSegmentSIDFlags) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RedirectIPv4AddressSpecificExtended) ProtoMessage() {} +func (*LsBgpPeerSegmentSIDFlags) ProtoMessage() {} -func (x *RedirectIPv4AddressSpecificExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[65] +func (x *LsBgpPeerSegmentSIDFlags) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4513,51 +3875,66 @@ func (x *RedirectIPv4AddressSpecificExtended) ProtoReflect() protoreflect.Messag return mi.MessageOf(x) } -// Deprecated: Use RedirectIPv4AddressSpecificExtended.ProtoReflect.Descriptor instead. -func (*RedirectIPv4AddressSpecificExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{65} +// Deprecated: Use LsBgpPeerSegmentSIDFlags.ProtoReflect.Descriptor instead. +func (*LsBgpPeerSegmentSIDFlags) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{55} } -func (x *RedirectIPv4AddressSpecificExtended) GetAddress() string { +func (x *LsBgpPeerSegmentSIDFlags) GetValue() bool { if x != nil { - return x.Address + return x.Value } - return "" + return false } -func (x *RedirectIPv4AddressSpecificExtended) GetLocalAdmin() uint32 { +func (x *LsBgpPeerSegmentSIDFlags) GetLocal() bool { if x != nil { - return x.LocalAdmin + return x.Local } - return 0 + return false +} + +func (x *LsBgpPeerSegmentSIDFlags) GetBackup() bool { + if x != nil { + return x.Backup + } + return false +} + +func (x *LsBgpPeerSegmentSIDFlags) GetPersistent() bool { + if x != nil { + return x.Persistent + } + return false } -type RedirectFourOctetAsSpecificExtended struct { +type LsBgpPeerSegmentSID struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Asn uint32 `protobuf:"varint,1,opt,name=asn,proto3" json:"asn,omitempty"` - LocalAdmin uint32 `protobuf:"varint,2,opt,name=local_admin,json=localAdmin,proto3" json:"local_admin,omitempty"` + Flags *LsBgpPeerSegmentSIDFlags `protobuf:"bytes,1,opt,name=flags,proto3" json:"flags,omitempty"` + Weight uint32 `protobuf:"varint,2,opt,name=weight,proto3" json:"weight,omitempty"` + Sid uint32 `protobuf:"varint,3,opt,name=sid,proto3" json:"sid,omitempty"` } -func (x *RedirectFourOctetAsSpecificExtended) Reset() { - *x = RedirectFourOctetAsSpecificExtended{} +func (x *LsBgpPeerSegmentSID) Reset() { + *x = LsBgpPeerSegmentSID{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[66] + mi := &file_attribute_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *RedirectFourOctetAsSpecificExtended) String() string { +func (x *LsBgpPeerSegmentSID) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RedirectFourOctetAsSpecificExtended) ProtoMessage() {} +func (*LsBgpPeerSegmentSID) ProtoMessage() {} -func (x *RedirectFourOctetAsSpecificExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[66] +func (x *LsBgpPeerSegmentSID) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4568,50 +3945,59 @@ func (x *RedirectFourOctetAsSpecificExtended) ProtoReflect() protoreflect.Messag return mi.MessageOf(x) } -// Deprecated: Use RedirectFourOctetAsSpecificExtended.ProtoReflect.Descriptor instead. -func (*RedirectFourOctetAsSpecificExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{66} +// Deprecated: Use LsBgpPeerSegmentSID.ProtoReflect.Descriptor instead. +func (*LsBgpPeerSegmentSID) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{56} } -func (x *RedirectFourOctetAsSpecificExtended) GetAsn() uint32 { +func (x *LsBgpPeerSegmentSID) GetFlags() *LsBgpPeerSegmentSIDFlags { if x != nil { - return x.Asn + return x.Flags + } + return nil +} + +func (x *LsBgpPeerSegmentSID) GetWeight() uint32 { + if x != nil { + return x.Weight } return 0 } -func (x *RedirectFourOctetAsSpecificExtended) GetLocalAdmin() uint32 { +func (x *LsBgpPeerSegmentSID) GetSid() uint32 { if x != nil { - return x.LocalAdmin + return x.Sid } return 0 } -type TrafficRemarkExtended struct { +type LsAttributeBgpPeerSegment struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Dscp uint32 `protobuf:"varint,1,opt,name=dscp,proto3" json:"dscp,omitempty"` + BgpPeerNodeSid *LsBgpPeerSegmentSID `protobuf:"bytes,1,opt,name=bgp_peer_node_sid,json=bgpPeerNodeSid,proto3" json:"bgp_peer_node_sid,omitempty"` + BgpPeerAdjacencySid *LsBgpPeerSegmentSID `protobuf:"bytes,2,opt,name=bgp_peer_adjacency_sid,json=bgpPeerAdjacencySid,proto3" json:"bgp_peer_adjacency_sid,omitempty"` + BgpPeerSetSid *LsBgpPeerSegmentSID `protobuf:"bytes,3,opt,name=bgp_peer_set_sid,json=bgpPeerSetSid,proto3" json:"bgp_peer_set_sid,omitempty"` } -func (x *TrafficRemarkExtended) Reset() { - *x = TrafficRemarkExtended{} +func (x *LsAttributeBgpPeerSegment) Reset() { + *x = LsAttributeBgpPeerSegment{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[67] + mi := &file_attribute_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *TrafficRemarkExtended) String() string { +func (x *LsAttributeBgpPeerSegment) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TrafficRemarkExtended) ProtoMessage() {} +func (*LsAttributeBgpPeerSegment) ProtoMessage() {} -func (x *TrafficRemarkExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[67] +func (x *LsAttributeBgpPeerSegment) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4622,45 +4008,60 @@ func (x *TrafficRemarkExtended) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TrafficRemarkExtended.ProtoReflect.Descriptor instead. -func (*TrafficRemarkExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{67} +// Deprecated: Use LsAttributeBgpPeerSegment.ProtoReflect.Descriptor instead. +func (*LsAttributeBgpPeerSegment) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{57} } -func (x *TrafficRemarkExtended) GetDscp() uint32 { +func (x *LsAttributeBgpPeerSegment) GetBgpPeerNodeSid() *LsBgpPeerSegmentSID { if x != nil { - return x.Dscp + return x.BgpPeerNodeSid } - return 0 + return nil +} + +func (x *LsAttributeBgpPeerSegment) GetBgpPeerAdjacencySid() *LsBgpPeerSegmentSID { + if x != nil { + return x.BgpPeerAdjacencySid + } + return nil +} + +func (x *LsAttributeBgpPeerSegment) GetBgpPeerSetSid() *LsBgpPeerSegmentSID { + if x != nil { + return x.BgpPeerSetSid + } + return nil } -type MUPExtended struct { +type LsAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SubType uint32 `protobuf:"varint,1,opt,name=sub_type,json=subType,proto3" json:"sub_type,omitempty"` - SegmentId2 uint32 `protobuf:"varint,2,opt,name=segment_id2,json=segmentId2,proto3" json:"segment_id2,omitempty"` - SegmentId4 uint32 `protobuf:"varint,3,opt,name=segment_id4,json=segmentId4,proto3" json:"segment_id4,omitempty"` + Node *LsAttributeNode `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"` + Link *LsAttributeLink `protobuf:"bytes,2,opt,name=link,proto3" json:"link,omitempty"` + Prefix *LsAttributePrefix `protobuf:"bytes,3,opt,name=prefix,proto3" json:"prefix,omitempty"` + BgpPeerSegment *LsAttributeBgpPeerSegment `protobuf:"bytes,4,opt,name=bgp_peer_segment,json=bgpPeerSegment,proto3" json:"bgp_peer_segment,omitempty"` } -func (x *MUPExtended) Reset() { - *x = MUPExtended{} +func (x *LsAttribute) Reset() { + *x = LsAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[68] + mi := &file_attribute_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MUPExtended) String() string { +func (x *LsAttribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MUPExtended) ProtoMessage() {} +func (*LsAttribute) ProtoMessage() {} -func (x *MUPExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[68] +func (x *LsAttribute) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4671,58 +4072,66 @@ func (x *MUPExtended) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use MUPExtended.ProtoReflect.Descriptor instead. -func (*MUPExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{68} +// Deprecated: Use LsAttribute.ProtoReflect.Descriptor instead. +func (*LsAttribute) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{58} } -func (x *MUPExtended) GetSubType() uint32 { +func (x *LsAttribute) GetNode() *LsAttributeNode { if x != nil { - return x.SubType + return x.Node } - return 0 + return nil } -func (x *MUPExtended) GetSegmentId2() uint32 { +func (x *LsAttribute) GetLink() *LsAttributeLink { if x != nil { - return x.SegmentId2 + return x.Link } - return 0 + return nil } -func (x *MUPExtended) GetSegmentId4() uint32 { +func (x *LsAttribute) GetPrefix() *LsAttributePrefix { if x != nil { - return x.SegmentId4 + return x.Prefix } - return 0 + return nil +} + +func (x *LsAttribute) GetBgpPeerSegment() *LsAttributeBgpPeerSegment { + if x != nil { + return x.BgpPeerSegment + } + return nil } -type VPLSExtended struct { +type UnknownAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ControlFlags uint32 `protobuf:"varint,1,opt,name=control_flags,json=controlFlags,proto3" json:"control_flags,omitempty"` - Mtu uint32 `protobuf:"varint,2,opt,name=mtu,proto3" json:"mtu,omitempty"` + Flags uint32 `protobuf:"varint,1,opt,name=flags,proto3" json:"flags,omitempty"` + Type uint32 `protobuf:"varint,2,opt,name=type,proto3" json:"type,omitempty"` + Value []byte `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` } -func (x *VPLSExtended) Reset() { - *x = VPLSExtended{} +func (x *UnknownAttribute) Reset() { + *x = UnknownAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[69] + mi := &file_attribute_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *VPLSExtended) String() string { +func (x *UnknownAttribute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*VPLSExtended) ProtoMessage() {} +func (*UnknownAttribute) ProtoMessage() {} -func (x *VPLSExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[69] +func (x *UnknownAttribute) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4733,51 +4142,63 @@ func (x *VPLSExtended) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use VPLSExtended.ProtoReflect.Descriptor instead. -func (*VPLSExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{69} +// Deprecated: Use UnknownAttribute.ProtoReflect.Descriptor instead. +func (*UnknownAttribute) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{59} } -func (x *VPLSExtended) GetControlFlags() uint32 { +func (x *UnknownAttribute) GetFlags() uint32 { if x != nil { - return x.ControlFlags + return x.Flags } return 0 } -func (x *VPLSExtended) GetMtu() uint32 { +func (x *UnknownAttribute) GetType() uint32 { if x != nil { - return x.Mtu + return x.Type } return 0 } -type UnknownExtended struct { +func (x *UnknownAttribute) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +// https://www.rfc-editor.org/rfc/rfc9252.html#section-3.2.1 +type SRv6StructureSubSubTLV struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Type uint32 `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"` - Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + LocatorBlockLength uint32 `protobuf:"varint,1,opt,name=locator_block_length,json=locatorBlockLength,proto3" json:"locator_block_length,omitempty"` + LocatorNodeLength uint32 `protobuf:"varint,2,opt,name=locator_node_length,json=locatorNodeLength,proto3" json:"locator_node_length,omitempty"` + FunctionLength uint32 `protobuf:"varint,3,opt,name=function_length,json=functionLength,proto3" json:"function_length,omitempty"` + ArgumentLength uint32 `protobuf:"varint,4,opt,name=argument_length,json=argumentLength,proto3" json:"argument_length,omitempty"` + TranspositionLength uint32 `protobuf:"varint,5,opt,name=transposition_length,json=transpositionLength,proto3" json:"transposition_length,omitempty"` + TranspositionOffset uint32 `protobuf:"varint,6,opt,name=transposition_offset,json=transpositionOffset,proto3" json:"transposition_offset,omitempty"` } -func (x *UnknownExtended) Reset() { - *x = UnknownExtended{} +func (x *SRv6StructureSubSubTLV) Reset() { + *x = SRv6StructureSubSubTLV{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[70] + mi := &file_attribute_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *UnknownExtended) String() string { +func (x *SRv6StructureSubSubTLV) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UnknownExtended) ProtoMessage() {} +func (*SRv6StructureSubSubTLV) ProtoMessage() {} -func (x *UnknownExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[70] +func (x *SRv6StructureSubSubTLV) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4788,67 +4209,81 @@ func (x *UnknownExtended) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UnknownExtended.ProtoReflect.Descriptor instead. -func (*UnknownExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{70} +// Deprecated: Use SRv6StructureSubSubTLV.ProtoReflect.Descriptor instead. +func (*SRv6StructureSubSubTLV) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{60} } -func (x *UnknownExtended) GetType() uint32 { +func (x *SRv6StructureSubSubTLV) GetLocatorBlockLength() uint32 { if x != nil { - return x.Type + return x.LocatorBlockLength } return 0 } -func (x *UnknownExtended) GetValue() []byte { +func (x *SRv6StructureSubSubTLV) GetLocatorNodeLength() uint32 { if x != nil { - return x.Value + return x.LocatorNodeLength } - return nil + return 0 } -type ExtendedCommunitiesAttribute struct { +func (x *SRv6StructureSubSubTLV) GetFunctionLength() uint32 { + if x != nil { + return x.FunctionLength + } + return 0 +} + +func (x *SRv6StructureSubSubTLV) GetArgumentLength() uint32 { + if x != nil { + return x.ArgumentLength + } + return 0 +} + +func (x *SRv6StructureSubSubTLV) GetTranspositionLength() uint32 { + if x != nil { + return x.TranspositionLength + } + return 0 +} + +func (x *SRv6StructureSubSubTLV) GetTranspositionOffset() uint32 { + if x != nil { + return x.TranspositionOffset + } + return 0 +} + +type SRv6SubSubTLV struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Each Community must be one of: - // - TwoOctetAsSpecificExtended - // - IPv4AddressSpecificExtended - // - FourOctetAsSpecificExtended - // - OpaqueExtended - // - ESILabelExtended - // - MacMobilityExtended - // - RouterMacExtended - // - TrafficRateExtended - // - TrafficActionExtended - // - RedirectTwoOctetAsSpecificExtended - // - RedirectIPv4AddressSpecificExtended - // - RedirectFourOctetAsSpecificExtended - // - TrafficRemarkExtended - // - MUPExtended - // - VPLSExtended - // - UnknownExtended - Communities []*anypb.Any `protobuf:"bytes,1,rep,name=communities,proto3" json:"communities,omitempty"` + // Types that are assignable to Tlv: + // + // *SRv6SubSubTLV_Structure + Tlv isSRv6SubSubTLV_Tlv `protobuf_oneof:"tlv"` } -func (x *ExtendedCommunitiesAttribute) Reset() { - *x = ExtendedCommunitiesAttribute{} +func (x *SRv6SubSubTLV) Reset() { + *x = SRv6SubSubTLV{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[71] + mi := &file_attribute_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ExtendedCommunitiesAttribute) String() string { +func (x *SRv6SubSubTLV) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ExtendedCommunitiesAttribute) ProtoMessage() {} +func (*SRv6SubSubTLV) ProtoMessage() {} -func (x *ExtendedCommunitiesAttribute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[71] +func (x *SRv6SubSubTLV) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4859,43 +4294,60 @@ func (x *ExtendedCommunitiesAttribute) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ExtendedCommunitiesAttribute.ProtoReflect.Descriptor instead. -func (*ExtendedCommunitiesAttribute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{71} +// Deprecated: Use SRv6SubSubTLV.ProtoReflect.Descriptor instead. +func (*SRv6SubSubTLV) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{61} } -func (x *ExtendedCommunitiesAttribute) GetCommunities() []*anypb.Any { - if x != nil { - return x.Communities +func (m *SRv6SubSubTLV) GetTlv() isSRv6SubSubTLV_Tlv { + if m != nil { + return m.Tlv } return nil } -type As4PathAttribute struct { +func (x *SRv6SubSubTLV) GetStructure() *SRv6StructureSubSubTLV { + if x, ok := x.GetTlv().(*SRv6SubSubTLV_Structure); ok { + return x.Structure + } + return nil +} + +type isSRv6SubSubTLV_Tlv interface { + isSRv6SubSubTLV_Tlv() +} + +type SRv6SubSubTLV_Structure struct { + Structure *SRv6StructureSubSubTLV `protobuf:"bytes,1,opt,name=structure,proto3,oneof"` +} + +func (*SRv6SubSubTLV_Structure) isSRv6SubSubTLV_Tlv() {} + +type SRv6SubSubTLVs struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Segments []*AsSegment `protobuf:"bytes,1,rep,name=segments,proto3" json:"segments,omitempty"` + Tlvs []*SRv6SubSubTLV `protobuf:"bytes,1,rep,name=tlvs,proto3" json:"tlvs,omitempty"` } -func (x *As4PathAttribute) Reset() { - *x = As4PathAttribute{} +func (x *SRv6SubSubTLVs) Reset() { + *x = SRv6SubSubTLVs{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[72] + mi := &file_attribute_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *As4PathAttribute) String() string { +func (x *SRv6SubSubTLVs) String() string { return protoimpl.X.MessageStringOf(x) } -func (*As4PathAttribute) ProtoMessage() {} +func (*SRv6SubSubTLVs) ProtoMessage() {} -func (x *As4PathAttribute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[72] +func (x *SRv6SubSubTLVs) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4906,44 +4358,44 @@ func (x *As4PathAttribute) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use As4PathAttribute.ProtoReflect.Descriptor instead. -func (*As4PathAttribute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{72} +// Deprecated: Use SRv6SubSubTLVs.ProtoReflect.Descriptor instead. +func (*SRv6SubSubTLVs) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{62} } -func (x *As4PathAttribute) GetSegments() []*AsSegment { +func (x *SRv6SubSubTLVs) GetTlvs() []*SRv6SubSubTLV { if x != nil { - return x.Segments + return x.Tlvs } return nil } -type As4AggregatorAttribute struct { +type SRv6SIDFlags struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Asn uint32 `protobuf:"varint,2,opt,name=asn,proto3" json:"asn,omitempty"` - Address string `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` + // Placeholder for future sid flags + Flag_1 bool `protobuf:"varint,1,opt,name=flag_1,json=flag1,proto3" json:"flag_1,omitempty"` } -func (x *As4AggregatorAttribute) Reset() { - *x = As4AggregatorAttribute{} +func (x *SRv6SIDFlags) Reset() { + *x = SRv6SIDFlags{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[73] + mi := &file_attribute_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *As4AggregatorAttribute) String() string { +func (x *SRv6SIDFlags) String() string { return protoimpl.X.MessageStringOf(x) } -func (*As4AggregatorAttribute) ProtoMessage() {} +func (*SRv6SIDFlags) ProtoMessage() {} -func (x *As4AggregatorAttribute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[73] +func (x *SRv6SIDFlags) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4954,53 +4406,47 @@ func (x *As4AggregatorAttribute) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use As4AggregatorAttribute.ProtoReflect.Descriptor instead. -func (*As4AggregatorAttribute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{73} -} - -func (x *As4AggregatorAttribute) GetAsn() uint32 { - if x != nil { - return x.Asn - } - return 0 +// Deprecated: Use SRv6SIDFlags.ProtoReflect.Descriptor instead. +func (*SRv6SIDFlags) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{63} } -func (x *As4AggregatorAttribute) GetAddress() string { +func (x *SRv6SIDFlags) GetFlag_1() bool { if x != nil { - return x.Address + return x.Flag_1 } - return "" + return false } -type PmsiTunnelAttribute struct { +// https://tools.ietf.org/html/draft-dawra-bess-srv6-services-02#section-2.1.1 +type SRv6InformationSubTLV struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flags uint32 `protobuf:"varint,1,opt,name=flags,proto3" json:"flags,omitempty"` - Type uint32 `protobuf:"varint,2,opt,name=type,proto3" json:"type,omitempty"` - Label uint32 `protobuf:"varint,3,opt,name=label,proto3" json:"label,omitempty"` - Id []byte `protobuf:"bytes,4,opt,name=id,proto3" json:"id,omitempty"` + Sid []byte `protobuf:"bytes,1,opt,name=sid,proto3" json:"sid,omitempty"` + Flags *SRv6SIDFlags `protobuf:"bytes,2,opt,name=flags,proto3" json:"flags,omitempty"` + EndpointBehavior uint32 `protobuf:"varint,3,opt,name=endpoint_behavior,json=endpointBehavior,proto3" json:"endpoint_behavior,omitempty"` + SubSubTlvs map[uint32]*SRv6SubSubTLVs `protobuf:"bytes,4,rep,name=sub_sub_tlvs,json=subSubTlvs,proto3" json:"sub_sub_tlvs,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } -func (x *PmsiTunnelAttribute) Reset() { - *x = PmsiTunnelAttribute{} +func (x *SRv6InformationSubTLV) Reset() { + *x = SRv6InformationSubTLV{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[74] + mi := &file_attribute_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *PmsiTunnelAttribute) String() string { +func (x *SRv6InformationSubTLV) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PmsiTunnelAttribute) ProtoMessage() {} +func (*SRv6InformationSubTLV) ProtoMessage() {} -func (x *PmsiTunnelAttribute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[74] +func (x *SRv6InformationSubTLV) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5011,65 +4457,67 @@ func (x *PmsiTunnelAttribute) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use PmsiTunnelAttribute.ProtoReflect.Descriptor instead. -func (*PmsiTunnelAttribute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{74} +// Deprecated: Use SRv6InformationSubTLV.ProtoReflect.Descriptor instead. +func (*SRv6InformationSubTLV) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{64} } -func (x *PmsiTunnelAttribute) GetFlags() uint32 { +func (x *SRv6InformationSubTLV) GetSid() []byte { if x != nil { - return x.Flags + return x.Sid } - return 0 + return nil } -func (x *PmsiTunnelAttribute) GetType() uint32 { +func (x *SRv6InformationSubTLV) GetFlags() *SRv6SIDFlags { if x != nil { - return x.Type + return x.Flags } - return 0 + return nil } -func (x *PmsiTunnelAttribute) GetLabel() uint32 { +func (x *SRv6InformationSubTLV) GetEndpointBehavior() uint32 { if x != nil { - return x.Label + return x.EndpointBehavior } return 0 } -func (x *PmsiTunnelAttribute) GetId() []byte { +func (x *SRv6InformationSubTLV) GetSubSubTlvs() map[uint32]*SRv6SubSubTLVs { if x != nil { - return x.Id + return x.SubSubTlvs } return nil } -type TunnelEncapSubTLVEncapsulation struct { +type SRv6SubTLV struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Key uint32 `protobuf:"varint,1,opt,name=key,proto3" json:"key,omitempty"` - Cookie []byte `protobuf:"bytes,2,opt,name=cookie,proto3" json:"cookie,omitempty"` + // Types that are assignable to Tlv: + // + // *SRv6SubTLV_Information + Tlv isSRv6SubTLV_Tlv `protobuf_oneof:"tlv"` } -func (x *TunnelEncapSubTLVEncapsulation) Reset() { - *x = TunnelEncapSubTLVEncapsulation{} +func (x *SRv6SubTLV) Reset() { + *x = SRv6SubTLV{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[75] + mi := &file_attribute_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *TunnelEncapSubTLVEncapsulation) String() string { +func (x *SRv6SubTLV) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TunnelEncapSubTLVEncapsulation) ProtoMessage() {} +func (*SRv6SubTLV) ProtoMessage() {} -func (x *TunnelEncapSubTLVEncapsulation) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[75] +func (x *SRv6SubTLV) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5080,50 +4528,60 @@ func (x *TunnelEncapSubTLVEncapsulation) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TunnelEncapSubTLVEncapsulation.ProtoReflect.Descriptor instead. -func (*TunnelEncapSubTLVEncapsulation) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{75} +// Deprecated: Use SRv6SubTLV.ProtoReflect.Descriptor instead. +func (*SRv6SubTLV) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{65} } -func (x *TunnelEncapSubTLVEncapsulation) GetKey() uint32 { - if x != nil { - return x.Key +func (m *SRv6SubTLV) GetTlv() isSRv6SubTLV_Tlv { + if m != nil { + return m.Tlv } - return 0 + return nil } -func (x *TunnelEncapSubTLVEncapsulation) GetCookie() []byte { - if x != nil { - return x.Cookie +func (x *SRv6SubTLV) GetInformation() *SRv6InformationSubTLV { + if x, ok := x.GetTlv().(*SRv6SubTLV_Information); ok { + return x.Information } return nil } -type TunnelEncapSubTLVProtocol struct { +type isSRv6SubTLV_Tlv interface { + isSRv6SubTLV_Tlv() +} + +type SRv6SubTLV_Information struct { + Information *SRv6InformationSubTLV `protobuf:"bytes,1,opt,name=information,proto3,oneof"` +} + +func (*SRv6SubTLV_Information) isSRv6SubTLV_Tlv() {} + +type SRv6SubTLVs struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Protocol uint32 `protobuf:"varint,1,opt,name=protocol,proto3" json:"protocol,omitempty"` + Tlvs []*SRv6SubTLV `protobuf:"bytes,1,rep,name=tlvs,proto3" json:"tlvs,omitempty"` } -func (x *TunnelEncapSubTLVProtocol) Reset() { - *x = TunnelEncapSubTLVProtocol{} +func (x *SRv6SubTLVs) Reset() { + *x = SRv6SubTLVs{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[76] + mi := &file_attribute_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *TunnelEncapSubTLVProtocol) String() string { +func (x *SRv6SubTLVs) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TunnelEncapSubTLVProtocol) ProtoMessage() {} +func (*SRv6SubTLVs) ProtoMessage() {} -func (x *TunnelEncapSubTLVProtocol) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[76] +func (x *SRv6SubTLVs) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5134,43 +4592,44 @@ func (x *TunnelEncapSubTLVProtocol) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TunnelEncapSubTLVProtocol.ProtoReflect.Descriptor instead. -func (*TunnelEncapSubTLVProtocol) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{76} +// Deprecated: Use SRv6SubTLVs.ProtoReflect.Descriptor instead. +func (*SRv6SubTLVs) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{66} } -func (x *TunnelEncapSubTLVProtocol) GetProtocol() uint32 { +func (x *SRv6SubTLVs) GetTlvs() []*SRv6SubTLV { if x != nil { - return x.Protocol + return x.Tlvs } - return 0 + return nil } -type TunnelEncapSubTLVColor struct { +// https://www.rfc-editor.org/rfc/rfc9252.html#section-2 +type SRv6L3ServiceTLV struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Color uint32 `protobuf:"varint,1,opt,name=color,proto3" json:"color,omitempty"` + SubTlvs map[uint32]*SRv6SubTLVs `protobuf:"bytes,1,rep,name=sub_tlvs,json=subTlvs,proto3" json:"sub_tlvs,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } -func (x *TunnelEncapSubTLVColor) Reset() { - *x = TunnelEncapSubTLVColor{} +func (x *SRv6L3ServiceTLV) Reset() { + *x = SRv6L3ServiceTLV{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[77] + mi := &file_attribute_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *TunnelEncapSubTLVColor) String() string { +func (x *SRv6L3ServiceTLV) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TunnelEncapSubTLVColor) ProtoMessage() {} +func (*SRv6L3ServiceTLV) ProtoMessage() {} -func (x *TunnelEncapSubTLVColor) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[77] +func (x *SRv6L3ServiceTLV) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5181,44 +4640,44 @@ func (x *TunnelEncapSubTLVColor) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TunnelEncapSubTLVColor.ProtoReflect.Descriptor instead. -func (*TunnelEncapSubTLVColor) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{77} +// Deprecated: Use SRv6L3ServiceTLV.ProtoReflect.Descriptor instead. +func (*SRv6L3ServiceTLV) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{67} } -func (x *TunnelEncapSubTLVColor) GetColor() uint32 { +func (x *SRv6L3ServiceTLV) GetSubTlvs() map[uint32]*SRv6SubTLVs { if x != nil { - return x.Color + return x.SubTlvs } - return 0 + return nil } -type TunnelEncapSubTLVSRPreference struct { +// https://www.rfc-editor.org/rfc/rfc9252.html#section-2 +type SRv6L2ServiceTLV struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flags uint32 `protobuf:"varint,1,opt,name=flags,proto3" json:"flags,omitempty"` - Preference uint32 `protobuf:"varint,2,opt,name=preference,proto3" json:"preference,omitempty"` + SubTlvs map[uint32]*SRv6SubTLVs `protobuf:"bytes,1,rep,name=sub_tlvs,json=subTlvs,proto3" json:"sub_tlvs,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } -func (x *TunnelEncapSubTLVSRPreference) Reset() { - *x = TunnelEncapSubTLVSRPreference{} +func (x *SRv6L2ServiceTLV) Reset() { + *x = SRv6L2ServiceTLV{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[78] + mi := &file_attribute_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *TunnelEncapSubTLVSRPreference) String() string { +func (x *SRv6L2ServiceTLV) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TunnelEncapSubTLVSRPreference) ProtoMessage() {} +func (*SRv6L2ServiceTLV) ProtoMessage() {} -func (x *TunnelEncapSubTLVSRPreference) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[78] +func (x *SRv6L2ServiceTLV) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5229,50 +4688,44 @@ func (x *TunnelEncapSubTLVSRPreference) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TunnelEncapSubTLVSRPreference.ProtoReflect.Descriptor instead. -func (*TunnelEncapSubTLVSRPreference) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{78} -} - -func (x *TunnelEncapSubTLVSRPreference) GetFlags() uint32 { - if x != nil { - return x.Flags - } - return 0 +// Deprecated: Use SRv6L2ServiceTLV.ProtoReflect.Descriptor instead. +func (*SRv6L2ServiceTLV) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{68} } -func (x *TunnelEncapSubTLVSRPreference) GetPreference() uint32 { +func (x *SRv6L2ServiceTLV) GetSubTlvs() map[uint32]*SRv6SubTLVs { if x != nil { - return x.Preference + return x.SubTlvs } - return 0 + return nil } -type TunnelEncapSubTLVSRCandidatePathName struct { +// https://tools.ietf.org/html/rfc8669 +type PrefixSID struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - CandidatePathName string `protobuf:"bytes,1,opt,name=candidate_path_name,json=candidatePathName,proto3" json:"candidate_path_name,omitempty"` + Tlvs []*PrefixSID_TLV `protobuf:"bytes,1,rep,name=tlvs,proto3" json:"tlvs,omitempty"` } -func (x *TunnelEncapSubTLVSRCandidatePathName) Reset() { - *x = TunnelEncapSubTLVSRCandidatePathName{} +func (x *PrefixSID) Reset() { + *x = PrefixSID{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[79] + mi := &file_attribute_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *TunnelEncapSubTLVSRCandidatePathName) String() string { +func (x *PrefixSID) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TunnelEncapSubTLVSRCandidatePathName) ProtoMessage() {} +func (*PrefixSID) ProtoMessage() {} -func (x *TunnelEncapSubTLVSRCandidatePathName) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[79] +func (x *PrefixSID) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5283,43 +4736,47 @@ func (x *TunnelEncapSubTLVSRCandidatePathName) ProtoReflect() protoreflect.Messa return mi.MessageOf(x) } -// Deprecated: Use TunnelEncapSubTLVSRCandidatePathName.ProtoReflect.Descriptor instead. -func (*TunnelEncapSubTLVSRCandidatePathName) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{79} +// Deprecated: Use PrefixSID.ProtoReflect.Descriptor instead. +func (*PrefixSID) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{69} } -func (x *TunnelEncapSubTLVSRCandidatePathName) GetCandidatePathName() string { +func (x *PrefixSID) GetTlvs() []*PrefixSID_TLV { if x != nil { - return x.CandidatePathName + return x.Tlvs } - return "" + return nil } -type TunnelEncapSubTLVSRPriority struct { +type TunnelEncapSubTLVSRSegmentList_Segment struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Priority uint32 `protobuf:"varint,1,opt,name=priority,proto3" json:"priority,omitempty"` + // Types that are assignable to Segment: + // + // *TunnelEncapSubTLVSRSegmentList_Segment_A + // *TunnelEncapSubTLVSRSegmentList_Segment_B + Segment isTunnelEncapSubTLVSRSegmentList_Segment_Segment `protobuf_oneof:"segment"` } -func (x *TunnelEncapSubTLVSRPriority) Reset() { - *x = TunnelEncapSubTLVSRPriority{} +func (x *TunnelEncapSubTLVSRSegmentList_Segment) Reset() { + *x = TunnelEncapSubTLVSRSegmentList_Segment{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[80] + mi := &file_attribute_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *TunnelEncapSubTLVSRPriority) String() string { +func (x *TunnelEncapSubTLVSRSegmentList_Segment) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TunnelEncapSubTLVSRPriority) ProtoMessage() {} +func (*TunnelEncapSubTLVSRSegmentList_Segment) ProtoMessage() {} -func (x *TunnelEncapSubTLVSRPriority) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[80] +func (x *TunnelEncapSubTLVSRSegmentList_Segment) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5330,46 +4787,87 @@ func (x *TunnelEncapSubTLVSRPriority) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TunnelEncapSubTLVSRPriority.ProtoReflect.Descriptor instead. -func (*TunnelEncapSubTLVSRPriority) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{80} +// Deprecated: Use TunnelEncapSubTLVSRSegmentList_Segment.ProtoReflect.Descriptor instead. +func (*TunnelEncapSubTLVSRSegmentList_Segment) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{33, 0} } -func (x *TunnelEncapSubTLVSRPriority) GetPriority() uint32 { - if x != nil { - return x.Priority +func (m *TunnelEncapSubTLVSRSegmentList_Segment) GetSegment() isTunnelEncapSubTLVSRSegmentList_Segment_Segment { + if m != nil { + return m.Segment } - return 0 + return nil } -type TunnelEncapSubTLVSRBindingSID struct { +func (x *TunnelEncapSubTLVSRSegmentList_Segment) GetA() *SegmentTypeA { + if x, ok := x.GetSegment().(*TunnelEncapSubTLVSRSegmentList_Segment_A); ok { + return x.A + } + return nil +} + +func (x *TunnelEncapSubTLVSRSegmentList_Segment) GetB() *SegmentTypeB { + if x, ok := x.GetSegment().(*TunnelEncapSubTLVSRSegmentList_Segment_B); ok { + return x.B + } + return nil +} + +type isTunnelEncapSubTLVSRSegmentList_Segment_Segment interface { + isTunnelEncapSubTLVSRSegmentList_Segment_Segment() +} + +type TunnelEncapSubTLVSRSegmentList_Segment_A struct { + A *SegmentTypeA `protobuf:"bytes,1,opt,name=a,proto3,oneof"` +} + +type TunnelEncapSubTLVSRSegmentList_Segment_B struct { + B *SegmentTypeB `protobuf:"bytes,2,opt,name=b,proto3,oneof"` +} + +func (*TunnelEncapSubTLVSRSegmentList_Segment_A) isTunnelEncapSubTLVSRSegmentList_Segment_Segment() {} + +func (*TunnelEncapSubTLVSRSegmentList_Segment_B) isTunnelEncapSubTLVSRSegmentList_Segment_Segment() {} + +type TunnelEncapTLV_TLV struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // bsid must be one of: - // - SRBindingSID - // - SRv6BindingSID - Bsid *anypb.Any `protobuf:"bytes,1,opt,name=bsid,proto3" json:"bsid,omitempty"` -} - -func (x *TunnelEncapSubTLVSRBindingSID) Reset() { - *x = TunnelEncapSubTLVSRBindingSID{} + // Types that are assignable to Tlv: + // + // *TunnelEncapTLV_TLV_Unknown + // *TunnelEncapTLV_TLV_Encapsulation + // *TunnelEncapTLV_TLV_Protocol + // *TunnelEncapTLV_TLV_Color + // *TunnelEncapTLV_TLV_EgressEndpoint + // *TunnelEncapTLV_TLV_UdpDestPort + // *TunnelEncapTLV_TLV_SrPreference + // *TunnelEncapTLV_TLV_SrPriority + // *TunnelEncapTLV_TLV_SrCandidatePathName + // *TunnelEncapTLV_TLV_SrEnlp + // *TunnelEncapTLV_TLV_SrBindingSid + // *TunnelEncapTLV_TLV_SrSegmentList + Tlv isTunnelEncapTLV_TLV_Tlv `protobuf_oneof:"tlv"` +} + +func (x *TunnelEncapTLV_TLV) Reset() { + *x = TunnelEncapTLV_TLV{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[81] + mi := &file_attribute_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *TunnelEncapSubTLVSRBindingSID) String() string { +func (x *TunnelEncapTLV_TLV) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TunnelEncapSubTLVSRBindingSID) ProtoMessage() {} +func (*TunnelEncapTLV_TLV) ProtoMessage() {} -func (x *TunnelEncapSubTLVSRBindingSID) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[81] +func (x *TunnelEncapTLV_TLV) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5380,189 +4878,207 @@ func (x *TunnelEncapSubTLVSRBindingSID) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TunnelEncapSubTLVSRBindingSID.ProtoReflect.Descriptor instead. -func (*TunnelEncapSubTLVSRBindingSID) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{81} +// Deprecated: Use TunnelEncapTLV_TLV.ProtoReflect.Descriptor instead. +func (*TunnelEncapTLV_TLV) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{37, 0} } -func (x *TunnelEncapSubTLVSRBindingSID) GetBsid() *anypb.Any { - if x != nil { - return x.Bsid +func (m *TunnelEncapTLV_TLV) GetTlv() isTunnelEncapTLV_TLV_Tlv { + if m != nil { + return m.Tlv } return nil } -type SRBindingSID struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SFlag bool `protobuf:"varint,1,opt,name=s_flag,json=sFlag,proto3" json:"s_flag,omitempty"` - IFlag bool `protobuf:"varint,2,opt,name=i_flag,json=iFlag,proto3" json:"i_flag,omitempty"` - Sid []byte `protobuf:"bytes,3,opt,name=sid,proto3" json:"sid,omitempty"` +func (x *TunnelEncapTLV_TLV) GetUnknown() *TunnelEncapSubTLVUnknown { + if x, ok := x.GetTlv().(*TunnelEncapTLV_TLV_Unknown); ok { + return x.Unknown + } + return nil } -func (x *SRBindingSID) Reset() { - *x = SRBindingSID{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[82] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *TunnelEncapTLV_TLV) GetEncapsulation() *TunnelEncapSubTLVEncapsulation { + if x, ok := x.GetTlv().(*TunnelEncapTLV_TLV_Encapsulation); ok { + return x.Encapsulation } + return nil } -func (x *SRBindingSID) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *TunnelEncapTLV_TLV) GetProtocol() *TunnelEncapSubTLVProtocol { + if x, ok := x.GetTlv().(*TunnelEncapTLV_TLV_Protocol); ok { + return x.Protocol + } + return nil } -func (*SRBindingSID) ProtoMessage() {} +func (x *TunnelEncapTLV_TLV) GetColor() *TunnelEncapSubTLVColor { + if x, ok := x.GetTlv().(*TunnelEncapTLV_TLV_Color); ok { + return x.Color + } + return nil +} -func (x *SRBindingSID) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[82] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *TunnelEncapTLV_TLV) GetEgressEndpoint() *TunnelEncapSubTLVEgressEndpoint { + if x, ok := x.GetTlv().(*TunnelEncapTLV_TLV_EgressEndpoint); ok { + return x.EgressEndpoint } - return mi.MessageOf(x) + return nil } -// Deprecated: Use SRBindingSID.ProtoReflect.Descriptor instead. -func (*SRBindingSID) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{82} +func (x *TunnelEncapTLV_TLV) GetUdpDestPort() *TunnelEncapSubTLVUDPDestPort { + if x, ok := x.GetTlv().(*TunnelEncapTLV_TLV_UdpDestPort); ok { + return x.UdpDestPort + } + return nil } -func (x *SRBindingSID) GetSFlag() bool { - if x != nil { - return x.SFlag +func (x *TunnelEncapTLV_TLV) GetSrPreference() *TunnelEncapSubTLVSRPreference { + if x, ok := x.GetTlv().(*TunnelEncapTLV_TLV_SrPreference); ok { + return x.SrPreference } - return false + return nil } -func (x *SRBindingSID) GetIFlag() bool { - if x != nil { - return x.IFlag +func (x *TunnelEncapTLV_TLV) GetSrPriority() *TunnelEncapSubTLVSRPriority { + if x, ok := x.GetTlv().(*TunnelEncapTLV_TLV_SrPriority); ok { + return x.SrPriority } - return false + return nil } -func (x *SRBindingSID) GetSid() []byte { - if x != nil { - return x.Sid +func (x *TunnelEncapTLV_TLV) GetSrCandidatePathName() *TunnelEncapSubTLVSRCandidatePathName { + if x, ok := x.GetTlv().(*TunnelEncapTLV_TLV_SrCandidatePathName); ok { + return x.SrCandidatePathName } return nil } -type SRv6EndPointBehavior struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *TunnelEncapTLV_TLV) GetSrEnlp() *TunnelEncapSubTLVSRENLP { + if x, ok := x.GetTlv().(*TunnelEncapTLV_TLV_SrEnlp); ok { + return x.SrEnlp + } + return nil +} - Behavior SRv6Behavior `protobuf:"varint,1,opt,name=behavior,proto3,enum=apipb.SRv6Behavior" json:"behavior,omitempty"` - BlockLen uint32 `protobuf:"varint,2,opt,name=block_len,json=blockLen,proto3" json:"block_len,omitempty"` - NodeLen uint32 `protobuf:"varint,3,opt,name=node_len,json=nodeLen,proto3" json:"node_len,omitempty"` - FuncLen uint32 `protobuf:"varint,4,opt,name=func_len,json=funcLen,proto3" json:"func_len,omitempty"` - ArgLen uint32 `protobuf:"varint,5,opt,name=arg_len,json=argLen,proto3" json:"arg_len,omitempty"` +func (x *TunnelEncapTLV_TLV) GetSrBindingSid() *TunnelEncapSubTLVSRBindingSID { + if x, ok := x.GetTlv().(*TunnelEncapTLV_TLV_SrBindingSid); ok { + return x.SrBindingSid + } + return nil } -func (x *SRv6EndPointBehavior) Reset() { - *x = SRv6EndPointBehavior{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[83] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *TunnelEncapTLV_TLV) GetSrSegmentList() *TunnelEncapSubTLVSRSegmentList { + if x, ok := x.GetTlv().(*TunnelEncapTLV_TLV_SrSegmentList); ok { + return x.SrSegmentList } + return nil } -func (x *SRv6EndPointBehavior) String() string { - return protoimpl.X.MessageStringOf(x) +type isTunnelEncapTLV_TLV_Tlv interface { + isTunnelEncapTLV_TLV_Tlv() } -func (*SRv6EndPointBehavior) ProtoMessage() {} +type TunnelEncapTLV_TLV_Unknown struct { + Unknown *TunnelEncapSubTLVUnknown `protobuf:"bytes,1,opt,name=unknown,proto3,oneof"` +} -func (x *SRv6EndPointBehavior) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[83] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) +type TunnelEncapTLV_TLV_Encapsulation struct { + Encapsulation *TunnelEncapSubTLVEncapsulation `protobuf:"bytes,2,opt,name=encapsulation,proto3,oneof"` } -// Deprecated: Use SRv6EndPointBehavior.ProtoReflect.Descriptor instead. -func (*SRv6EndPointBehavior) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{83} +type TunnelEncapTLV_TLV_Protocol struct { + Protocol *TunnelEncapSubTLVProtocol `protobuf:"bytes,3,opt,name=protocol,proto3,oneof"` } -func (x *SRv6EndPointBehavior) GetBehavior() SRv6Behavior { - if x != nil { - return x.Behavior - } - return SRv6Behavior_RESERVED +type TunnelEncapTLV_TLV_Color struct { + Color *TunnelEncapSubTLVColor `protobuf:"bytes,4,opt,name=color,proto3,oneof"` } -func (x *SRv6EndPointBehavior) GetBlockLen() uint32 { - if x != nil { - return x.BlockLen - } - return 0 +type TunnelEncapTLV_TLV_EgressEndpoint struct { + EgressEndpoint *TunnelEncapSubTLVEgressEndpoint `protobuf:"bytes,5,opt,name=egress_endpoint,json=egressEndpoint,proto3,oneof"` } -func (x *SRv6EndPointBehavior) GetNodeLen() uint32 { - if x != nil { - return x.NodeLen - } - return 0 +type TunnelEncapTLV_TLV_UdpDestPort struct { + UdpDestPort *TunnelEncapSubTLVUDPDestPort `protobuf:"bytes,6,opt,name=udp_dest_port,json=udpDestPort,proto3,oneof"` } -func (x *SRv6EndPointBehavior) GetFuncLen() uint32 { - if x != nil { - return x.FuncLen - } - return 0 +type TunnelEncapTLV_TLV_SrPreference struct { + SrPreference *TunnelEncapSubTLVSRPreference `protobuf:"bytes,7,opt,name=sr_preference,json=srPreference,proto3,oneof"` } -func (x *SRv6EndPointBehavior) GetArgLen() uint32 { - if x != nil { - return x.ArgLen - } - return 0 +type TunnelEncapTLV_TLV_SrPriority struct { + SrPriority *TunnelEncapSubTLVSRPriority `protobuf:"bytes,8,opt,name=sr_priority,json=srPriority,proto3,oneof"` } -type SRv6BindingSID struct { +type TunnelEncapTLV_TLV_SrCandidatePathName struct { + SrCandidatePathName *TunnelEncapSubTLVSRCandidatePathName `protobuf:"bytes,9,opt,name=sr_candidate_path_name,json=srCandidatePathName,proto3,oneof"` +} + +type TunnelEncapTLV_TLV_SrEnlp struct { + SrEnlp *TunnelEncapSubTLVSRENLP `protobuf:"bytes,10,opt,name=sr_enlp,json=srEnlp,proto3,oneof"` +} + +type TunnelEncapTLV_TLV_SrBindingSid struct { + SrBindingSid *TunnelEncapSubTLVSRBindingSID `protobuf:"bytes,11,opt,name=sr_binding_sid,json=srBindingSid,proto3,oneof"` +} + +type TunnelEncapTLV_TLV_SrSegmentList struct { + SrSegmentList *TunnelEncapSubTLVSRSegmentList `protobuf:"bytes,12,opt,name=sr_segment_list,json=srSegmentList,proto3,oneof"` +} + +func (*TunnelEncapTLV_TLV_Unknown) isTunnelEncapTLV_TLV_Tlv() {} + +func (*TunnelEncapTLV_TLV_Encapsulation) isTunnelEncapTLV_TLV_Tlv() {} + +func (*TunnelEncapTLV_TLV_Protocol) isTunnelEncapTLV_TLV_Tlv() {} + +func (*TunnelEncapTLV_TLV_Color) isTunnelEncapTLV_TLV_Tlv() {} + +func (*TunnelEncapTLV_TLV_EgressEndpoint) isTunnelEncapTLV_TLV_Tlv() {} + +func (*TunnelEncapTLV_TLV_UdpDestPort) isTunnelEncapTLV_TLV_Tlv() {} + +func (*TunnelEncapTLV_TLV_SrPreference) isTunnelEncapTLV_TLV_Tlv() {} + +func (*TunnelEncapTLV_TLV_SrPriority) isTunnelEncapTLV_TLV_Tlv() {} + +func (*TunnelEncapTLV_TLV_SrCandidatePathName) isTunnelEncapTLV_TLV_Tlv() {} + +func (*TunnelEncapTLV_TLV_SrEnlp) isTunnelEncapTLV_TLV_Tlv() {} + +func (*TunnelEncapTLV_TLV_SrBindingSid) isTunnelEncapTLV_TLV_Tlv() {} + +func (*TunnelEncapTLV_TLV_SrSegmentList) isTunnelEncapTLV_TLV_Tlv() {} + +type IP6ExtendedCommunitiesAttribute_Community struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SFlag bool `protobuf:"varint,1,opt,name=s_flag,json=sFlag,proto3" json:"s_flag,omitempty"` - IFlag bool `protobuf:"varint,2,opt,name=i_flag,json=iFlag,proto3" json:"i_flag,omitempty"` - BFlag bool `protobuf:"varint,3,opt,name=b_flag,json=bFlag,proto3" json:"b_flag,omitempty"` - Sid []byte `protobuf:"bytes,4,opt,name=sid,proto3" json:"sid,omitempty"` - EndpointBehaviorStructure *SRv6EndPointBehavior `protobuf:"bytes,5,opt,name=endpoint_behavior_structure,json=endpointBehaviorStructure,proto3" json:"endpoint_behavior_structure,omitempty"` + // Types that are assignable to Extcom: + // + // *IP6ExtendedCommunitiesAttribute_Community_Ipv6AddressSpecific + // *IP6ExtendedCommunitiesAttribute_Community_RedirectIpv6AddressSpecific + Extcom isIP6ExtendedCommunitiesAttribute_Community_Extcom `protobuf_oneof:"extcom"` } -func (x *SRv6BindingSID) Reset() { - *x = SRv6BindingSID{} +func (x *IP6ExtendedCommunitiesAttribute_Community) Reset() { + *x = IP6ExtendedCommunitiesAttribute_Community{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[84] + mi := &file_attribute_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *SRv6BindingSID) String() string { +func (x *IP6ExtendedCommunitiesAttribute_Community) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SRv6BindingSID) ProtoMessage() {} +func (*IP6ExtendedCommunitiesAttribute_Community) ProtoMessage() {} -func (x *SRv6BindingSID) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[84] +func (x *IP6ExtendedCommunitiesAttribute_Community) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5573,72 +5089,79 @@ func (x *SRv6BindingSID) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SRv6BindingSID.ProtoReflect.Descriptor instead. -func (*SRv6BindingSID) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{84} +// Deprecated: Use IP6ExtendedCommunitiesAttribute_Community.ProtoReflect.Descriptor instead. +func (*IP6ExtendedCommunitiesAttribute_Community) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{41, 0} } -func (x *SRv6BindingSID) GetSFlag() bool { - if x != nil { - return x.SFlag +func (m *IP6ExtendedCommunitiesAttribute_Community) GetExtcom() isIP6ExtendedCommunitiesAttribute_Community_Extcom { + if m != nil { + return m.Extcom } - return false + return nil } -func (x *SRv6BindingSID) GetIFlag() bool { - if x != nil { - return x.IFlag +func (x *IP6ExtendedCommunitiesAttribute_Community) GetIpv6AddressSpecific() *IPv6AddressSpecificExtended { + if x, ok := x.GetExtcom().(*IP6ExtendedCommunitiesAttribute_Community_Ipv6AddressSpecific); ok { + return x.Ipv6AddressSpecific } - return false + return nil } -func (x *SRv6BindingSID) GetBFlag() bool { - if x != nil { - return x.BFlag +func (x *IP6ExtendedCommunitiesAttribute_Community) GetRedirectIpv6AddressSpecific() *RedirectIPv6AddressSpecificExtended { + if x, ok := x.GetExtcom().(*IP6ExtendedCommunitiesAttribute_Community_RedirectIpv6AddressSpecific); ok { + return x.RedirectIpv6AddressSpecific } - return false + return nil } -func (x *SRv6BindingSID) GetSid() []byte { - if x != nil { - return x.Sid - } - return nil +type isIP6ExtendedCommunitiesAttribute_Community_Extcom interface { + isIP6ExtendedCommunitiesAttribute_Community_Extcom() } -func (x *SRv6BindingSID) GetEndpointBehaviorStructure() *SRv6EndPointBehavior { - if x != nil { - return x.EndpointBehaviorStructure - } - return nil +type IP6ExtendedCommunitiesAttribute_Community_Ipv6AddressSpecific struct { + Ipv6AddressSpecific *IPv6AddressSpecificExtended `protobuf:"bytes,1,opt,name=ipv6_address_specific,json=ipv6AddressSpecific,proto3,oneof"` } -type TunnelEncapSubTLVSRENLP struct { +type IP6ExtendedCommunitiesAttribute_Community_RedirectIpv6AddressSpecific struct { + RedirectIpv6AddressSpecific *RedirectIPv6AddressSpecificExtended `protobuf:"bytes,2,opt,name=redirect_ipv6_address_specific,json=redirectIpv6AddressSpecific,proto3,oneof"` +} + +func (*IP6ExtendedCommunitiesAttribute_Community_Ipv6AddressSpecific) isIP6ExtendedCommunitiesAttribute_Community_Extcom() { +} + +func (*IP6ExtendedCommunitiesAttribute_Community_RedirectIpv6AddressSpecific) isIP6ExtendedCommunitiesAttribute_Community_Extcom() { +} + +type AigpAttribute_TLV struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flags uint32 `protobuf:"varint,1,opt,name=flags,proto3" json:"flags,omitempty"` - Enlp ENLPType `protobuf:"varint,2,opt,name=enlp,proto3,enum=apipb.ENLPType" json:"enlp,omitempty"` + // Types that are assignable to Tlv: + // + // *AigpAttribute_TLV_Unknown + // *AigpAttribute_TLV_IgpMetric + Tlv isAigpAttribute_TLV_Tlv `protobuf_oneof:"tlv"` } -func (x *TunnelEncapSubTLVSRENLP) Reset() { - *x = TunnelEncapSubTLVSRENLP{} +func (x *AigpAttribute_TLV) Reset() { + *x = AigpAttribute_TLV{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[85] + mi := &file_attribute_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *TunnelEncapSubTLVSRENLP) String() string { +func (x *AigpAttribute_TLV) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TunnelEncapSubTLVSRENLP) ProtoMessage() {} +func (*AigpAttribute_TLV) ProtoMessage() {} -func (x *TunnelEncapSubTLVSRENLP) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[85] +func (x *AigpAttribute_TLV) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5649,51 +5172,78 @@ func (x *TunnelEncapSubTLVSRENLP) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TunnelEncapSubTLVSRENLP.ProtoReflect.Descriptor instead. -func (*TunnelEncapSubTLVSRENLP) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{85} +// Deprecated: Use AigpAttribute_TLV.ProtoReflect.Descriptor instead. +func (*AigpAttribute_TLV) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{44, 0} } -func (x *TunnelEncapSubTLVSRENLP) GetFlags() uint32 { - if x != nil { - return x.Flags +func (m *AigpAttribute_TLV) GetTlv() isAigpAttribute_TLV_Tlv { + if m != nil { + return m.Tlv } - return 0 + return nil } -func (x *TunnelEncapSubTLVSRENLP) GetEnlp() ENLPType { - if x != nil { - return x.Enlp +func (x *AigpAttribute_TLV) GetUnknown() *AigpTLVUnknown { + if x, ok := x.GetTlv().(*AigpAttribute_TLV_Unknown); ok { + return x.Unknown } - return ENLPType_Reserved + return nil } -type SRWeight struct { +func (x *AigpAttribute_TLV) GetIgpMetric() *AigpTLVIGPMetric { + if x, ok := x.GetTlv().(*AigpAttribute_TLV_IgpMetric); ok { + return x.IgpMetric + } + return nil +} + +type isAigpAttribute_TLV_Tlv interface { + isAigpAttribute_TLV_Tlv() +} + +type AigpAttribute_TLV_Unknown struct { + Unknown *AigpTLVUnknown `protobuf:"bytes,1,opt,name=unknown,proto3,oneof"` +} + +type AigpAttribute_TLV_IgpMetric struct { + IgpMetric *AigpTLVIGPMetric `protobuf:"bytes,2,opt,name=igp_metric,json=igpMetric,proto3,oneof"` +} + +func (*AigpAttribute_TLV_Unknown) isAigpAttribute_TLV_Tlv() {} + +func (*AigpAttribute_TLV_IgpMetric) isAigpAttribute_TLV_Tlv() {} + +// tlv is one of: +type PrefixSID_TLV struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flags uint32 `protobuf:"varint,1,opt,name=flags,proto3" json:"flags,omitempty"` - Weight uint32 `protobuf:"varint,2,opt,name=weight,proto3" json:"weight,omitempty"` + // Types that are assignable to Tlv: + // + // *PrefixSID_TLV_L3Service + // *PrefixSID_TLV_L2Service + Tlv isPrefixSID_TLV_Tlv `protobuf_oneof:"tlv"` } -func (x *SRWeight) Reset() { - *x = SRWeight{} +func (x *PrefixSID_TLV) Reset() { + *x = PrefixSID_TLV{} if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[86] + mi := &file_attribute_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *SRWeight) String() string { +func (x *PrefixSID_TLV) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SRWeight) ProtoMessage() {} +func (*PrefixSID_TLV) ProtoMessage() {} -func (x *SRWeight) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[86] +func (x *PrefixSID_TLV) ProtoReflect() protoreflect.Message { + mi := &file_attribute_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5704,4166 +5254,994 @@ func (x *SRWeight) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SRWeight.ProtoReflect.Descriptor instead. -func (*SRWeight) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{86} +// Deprecated: Use PrefixSID_TLV.ProtoReflect.Descriptor instead. +func (*PrefixSID_TLV) Descriptor() ([]byte, []int) { + return file_attribute_proto_rawDescGZIP(), []int{69, 0} } -func (x *SRWeight) GetFlags() uint32 { - if x != nil { - return x.Flags - } - return 0 -} - -func (x *SRWeight) GetWeight() uint32 { - if x != nil { - return x.Weight - } - return 0 -} - -type SegmentFlags struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - VFlag bool `protobuf:"varint,1,opt,name=v_flag,json=vFlag,proto3" json:"v_flag,omitempty"` - AFlag bool `protobuf:"varint,2,opt,name=a_flag,json=aFlag,proto3" json:"a_flag,omitempty"` - SFlag bool `protobuf:"varint,3,opt,name=s_flag,json=sFlag,proto3" json:"s_flag,omitempty"` - BFlag bool `protobuf:"varint,4,opt,name=b_flag,json=bFlag,proto3" json:"b_flag,omitempty"` -} - -func (x *SegmentFlags) Reset() { - *x = SegmentFlags{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[87] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SegmentFlags) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SegmentFlags) ProtoMessage() {} - -func (x *SegmentFlags) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[87] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SegmentFlags.ProtoReflect.Descriptor instead. -func (*SegmentFlags) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{87} -} - -func (x *SegmentFlags) GetVFlag() bool { - if x != nil { - return x.VFlag - } - return false -} - -func (x *SegmentFlags) GetAFlag() bool { - if x != nil { - return x.AFlag - } - return false -} - -func (x *SegmentFlags) GetSFlag() bool { - if x != nil { - return x.SFlag - } - return false -} - -func (x *SegmentFlags) GetBFlag() bool { - if x != nil { - return x.BFlag - } - return false -} - -type SegmentTypeA struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Flags *SegmentFlags `protobuf:"bytes,1,opt,name=flags,proto3" json:"flags,omitempty"` - Label uint32 `protobuf:"varint,2,opt,name=label,proto3" json:"label,omitempty"` -} - -func (x *SegmentTypeA) Reset() { - *x = SegmentTypeA{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[88] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SegmentTypeA) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SegmentTypeA) ProtoMessage() {} - -func (x *SegmentTypeA) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[88] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SegmentTypeA.ProtoReflect.Descriptor instead. -func (*SegmentTypeA) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{88} -} - -func (x *SegmentTypeA) GetFlags() *SegmentFlags { - if x != nil { - return x.Flags - } - return nil -} - -func (x *SegmentTypeA) GetLabel() uint32 { - if x != nil { - return x.Label - } - return 0 -} - -type SegmentTypeB struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Flags *SegmentFlags `protobuf:"bytes,1,opt,name=flags,proto3" json:"flags,omitempty"` - Sid []byte `protobuf:"bytes,2,opt,name=sid,proto3" json:"sid,omitempty"` - EndpointBehaviorStructure *SRv6EndPointBehavior `protobuf:"bytes,3,opt,name=endpoint_behavior_structure,json=endpointBehaviorStructure,proto3" json:"endpoint_behavior_structure,omitempty"` -} - -func (x *SegmentTypeB) Reset() { - *x = SegmentTypeB{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[89] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SegmentTypeB) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SegmentTypeB) ProtoMessage() {} - -func (x *SegmentTypeB) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[89] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SegmentTypeB.ProtoReflect.Descriptor instead. -func (*SegmentTypeB) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{89} -} - -func (x *SegmentTypeB) GetFlags() *SegmentFlags { - if x != nil { - return x.Flags - } - return nil -} - -func (x *SegmentTypeB) GetSid() []byte { - if x != nil { - return x.Sid +func (m *PrefixSID_TLV) GetTlv() isPrefixSID_TLV_Tlv { + if m != nil { + return m.Tlv } return nil } -func (x *SegmentTypeB) GetEndpointBehaviorStructure() *SRv6EndPointBehavior { - if x != nil { - return x.EndpointBehaviorStructure +func (x *PrefixSID_TLV) GetL3Service() *SRv6L3ServiceTLV { + if x, ok := x.GetTlv().(*PrefixSID_TLV_L3Service); ok { + return x.L3Service } return nil } -type TunnelEncapSubTLVSRSegmentList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Weight *SRWeight `protobuf:"bytes,1,opt,name=weight,proto3" json:"weight,omitempty"` - // segments must be one of: - // - SegmentTypeA - // - SegmentTypeB - Segments []*anypb.Any `protobuf:"bytes,2,rep,name=segments,proto3" json:"segments,omitempty"` -} - -func (x *TunnelEncapSubTLVSRSegmentList) Reset() { - *x = TunnelEncapSubTLVSRSegmentList{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[90] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TunnelEncapSubTLVSRSegmentList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TunnelEncapSubTLVSRSegmentList) ProtoMessage() {} - -func (x *TunnelEncapSubTLVSRSegmentList) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[90] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TunnelEncapSubTLVSRSegmentList.ProtoReflect.Descriptor instead. -func (*TunnelEncapSubTLVSRSegmentList) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{90} -} - -func (x *TunnelEncapSubTLVSRSegmentList) GetWeight() *SRWeight { - if x != nil { - return x.Weight +func (x *PrefixSID_TLV) GetL2Service() *SRv6L2ServiceTLV { + if x, ok := x.GetTlv().(*PrefixSID_TLV_L2Service); ok { + return x.L2Service } return nil } -func (x *TunnelEncapSubTLVSRSegmentList) GetSegments() []*anypb.Any { - if x != nil { - return x.Segments - } - return nil +type isPrefixSID_TLV_Tlv interface { + isPrefixSID_TLV_Tlv() } -type TunnelEncapSubTLVEgressEndpoint struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +type PrefixSID_TLV_L3Service struct { + // IndexLabelTLV Type 1 (not yet implemented) + // OriginatorSRGBTLV Type 3 (not yet implemented) + L3Service *SRv6L3ServiceTLV `protobuf:"bytes,3,opt,name=l3_service,json=l3Service,proto3,oneof"` } -func (x *TunnelEncapSubTLVEgressEndpoint) Reset() { - *x = TunnelEncapSubTLVEgressEndpoint{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[91] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +type PrefixSID_TLV_L2Service struct { + L2Service *SRv6L2ServiceTLV `protobuf:"bytes,4,opt,name=l2_service,json=l2Service,proto3,oneof"` } -func (x *TunnelEncapSubTLVEgressEndpoint) String() string { - return protoimpl.X.MessageStringOf(x) -} +func (*PrefixSID_TLV_L3Service) isPrefixSID_TLV_Tlv() {} -func (*TunnelEncapSubTLVEgressEndpoint) ProtoMessage() {} +func (*PrefixSID_TLV_L2Service) isPrefixSID_TLV_Tlv() {} -func (x *TunnelEncapSubTLVEgressEndpoint) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[91] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} +var File_attribute_proto protoreflect.FileDescriptor -// Deprecated: Use TunnelEncapSubTLVEgressEndpoint.ProtoReflect.Descriptor instead. -func (*TunnelEncapSubTLVEgressEndpoint) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{91} -} - -func (x *TunnelEncapSubTLVEgressEndpoint) GetAddress() string { - if x != nil { - return x.Address - } - return "" -} - -type TunnelEncapSubTLVUDPDestPort struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Port uint32 `protobuf:"varint,1,opt,name=port,proto3" json:"port,omitempty"` -} - -func (x *TunnelEncapSubTLVUDPDestPort) Reset() { - *x = TunnelEncapSubTLVUDPDestPort{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[92] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TunnelEncapSubTLVUDPDestPort) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TunnelEncapSubTLVUDPDestPort) ProtoMessage() {} - -func (x *TunnelEncapSubTLVUDPDestPort) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[92] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TunnelEncapSubTLVUDPDestPort.ProtoReflect.Descriptor instead. -func (*TunnelEncapSubTLVUDPDestPort) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{92} -} - -func (x *TunnelEncapSubTLVUDPDestPort) GetPort() uint32 { - if x != nil { - return x.Port - } - return 0 -} - -type TunnelEncapSubTLVUnknown struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type uint32 `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"` - Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *TunnelEncapSubTLVUnknown) Reset() { - *x = TunnelEncapSubTLVUnknown{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[93] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TunnelEncapSubTLVUnknown) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TunnelEncapSubTLVUnknown) ProtoMessage() {} - -func (x *TunnelEncapSubTLVUnknown) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[93] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TunnelEncapSubTLVUnknown.ProtoReflect.Descriptor instead. -func (*TunnelEncapSubTLVUnknown) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{93} -} - -func (x *TunnelEncapSubTLVUnknown) GetType() uint32 { - if x != nil { - return x.Type - } - return 0 -} - -func (x *TunnelEncapSubTLVUnknown) GetValue() []byte { - if x != nil { - return x.Value - } - return nil -} - -type TunnelEncapTLV struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type uint32 `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"` - // Each TLV must be one of: - // - TunnelEncapSubTLVEncapsulation - // - TunnelEncapSubTLVProtocol - // - TunnelEncapSubTLVColor - // - TunnelEncapSubTLVSRPolicy - // - TunnelEncapSubTLVUnknown - Tlvs []*anypb.Any `protobuf:"bytes,2,rep,name=tlvs,proto3" json:"tlvs,omitempty"` -} - -func (x *TunnelEncapTLV) Reset() { - *x = TunnelEncapTLV{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[94] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TunnelEncapTLV) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TunnelEncapTLV) ProtoMessage() {} - -func (x *TunnelEncapTLV) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[94] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TunnelEncapTLV.ProtoReflect.Descriptor instead. -func (*TunnelEncapTLV) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{94} -} - -func (x *TunnelEncapTLV) GetType() uint32 { - if x != nil { - return x.Type - } - return 0 -} - -func (x *TunnelEncapTLV) GetTlvs() []*anypb.Any { - if x != nil { - return x.Tlvs - } - return nil -} - -type TunnelEncapAttribute struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Tlvs []*TunnelEncapTLV `protobuf:"bytes,1,rep,name=tlvs,proto3" json:"tlvs,omitempty"` -} - -func (x *TunnelEncapAttribute) Reset() { - *x = TunnelEncapAttribute{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[95] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TunnelEncapAttribute) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TunnelEncapAttribute) ProtoMessage() {} - -func (x *TunnelEncapAttribute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[95] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TunnelEncapAttribute.ProtoReflect.Descriptor instead. -func (*TunnelEncapAttribute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{95} -} - -func (x *TunnelEncapAttribute) GetTlvs() []*TunnelEncapTLV { - if x != nil { - return x.Tlvs - } - return nil -} - -type IPv6AddressSpecificExtended struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - IsTransitive bool `protobuf:"varint,1,opt,name=is_transitive,json=isTransitive,proto3" json:"is_transitive,omitempty"` - SubType uint32 `protobuf:"varint,2,opt,name=sub_type,json=subType,proto3" json:"sub_type,omitempty"` - Address string `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` - LocalAdmin uint32 `protobuf:"varint,4,opt,name=local_admin,json=localAdmin,proto3" json:"local_admin,omitempty"` -} - -func (x *IPv6AddressSpecificExtended) Reset() { - *x = IPv6AddressSpecificExtended{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[96] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *IPv6AddressSpecificExtended) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*IPv6AddressSpecificExtended) ProtoMessage() {} - -func (x *IPv6AddressSpecificExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[96] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use IPv6AddressSpecificExtended.ProtoReflect.Descriptor instead. -func (*IPv6AddressSpecificExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{96} -} - -func (x *IPv6AddressSpecificExtended) GetIsTransitive() bool { - if x != nil { - return x.IsTransitive - } - return false -} - -func (x *IPv6AddressSpecificExtended) GetSubType() uint32 { - if x != nil { - return x.SubType - } - return 0 -} - -func (x *IPv6AddressSpecificExtended) GetAddress() string { - if x != nil { - return x.Address - } - return "" -} - -func (x *IPv6AddressSpecificExtended) GetLocalAdmin() uint32 { - if x != nil { - return x.LocalAdmin - } - return 0 -} - -type RedirectIPv6AddressSpecificExtended struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - LocalAdmin uint32 `protobuf:"varint,2,opt,name=local_admin,json=localAdmin,proto3" json:"local_admin,omitempty"` -} - -func (x *RedirectIPv6AddressSpecificExtended) Reset() { - *x = RedirectIPv6AddressSpecificExtended{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[97] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RedirectIPv6AddressSpecificExtended) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RedirectIPv6AddressSpecificExtended) ProtoMessage() {} - -func (x *RedirectIPv6AddressSpecificExtended) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[97] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RedirectIPv6AddressSpecificExtended.ProtoReflect.Descriptor instead. -func (*RedirectIPv6AddressSpecificExtended) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{97} -} - -func (x *RedirectIPv6AddressSpecificExtended) GetAddress() string { - if x != nil { - return x.Address - } - return "" -} - -func (x *RedirectIPv6AddressSpecificExtended) GetLocalAdmin() uint32 { - if x != nil { - return x.LocalAdmin - } - return 0 -} - -type IP6ExtendedCommunitiesAttribute struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Each Community must be one of: - // - IPv6AddressSpecificExtended - // - RedirectIPv6AddressSpecificExtended - Communities []*anypb.Any `protobuf:"bytes,1,rep,name=communities,proto3" json:"communities,omitempty"` -} - -func (x *IP6ExtendedCommunitiesAttribute) Reset() { - *x = IP6ExtendedCommunitiesAttribute{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[98] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *IP6ExtendedCommunitiesAttribute) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*IP6ExtendedCommunitiesAttribute) ProtoMessage() {} - -func (x *IP6ExtendedCommunitiesAttribute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[98] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use IP6ExtendedCommunitiesAttribute.ProtoReflect.Descriptor instead. -func (*IP6ExtendedCommunitiesAttribute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{98} -} - -func (x *IP6ExtendedCommunitiesAttribute) GetCommunities() []*anypb.Any { - if x != nil { - return x.Communities - } - return nil -} - -type AigpTLVIGPMetric struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Metric uint64 `protobuf:"varint,1,opt,name=metric,proto3" json:"metric,omitempty"` -} - -func (x *AigpTLVIGPMetric) Reset() { - *x = AigpTLVIGPMetric{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[99] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AigpTLVIGPMetric) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AigpTLVIGPMetric) ProtoMessage() {} - -func (x *AigpTLVIGPMetric) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[99] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AigpTLVIGPMetric.ProtoReflect.Descriptor instead. -func (*AigpTLVIGPMetric) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{99} -} - -func (x *AigpTLVIGPMetric) GetMetric() uint64 { - if x != nil { - return x.Metric - } - return 0 -} - -type AigpTLVUnknown struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type uint32 `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"` - Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *AigpTLVUnknown) Reset() { - *x = AigpTLVUnknown{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[100] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AigpTLVUnknown) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AigpTLVUnknown) ProtoMessage() {} - -func (x *AigpTLVUnknown) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[100] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AigpTLVUnknown.ProtoReflect.Descriptor instead. -func (*AigpTLVUnknown) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{100} -} - -func (x *AigpTLVUnknown) GetType() uint32 { - if x != nil { - return x.Type - } - return 0 -} - -func (x *AigpTLVUnknown) GetValue() []byte { - if x != nil { - return x.Value - } - return nil -} - -type AigpAttribute struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Each TLV must be one of: - // - AigpTLVIGPMetric - // - AigpTLVUnknown - Tlvs []*anypb.Any `protobuf:"bytes,1,rep,name=tlvs,proto3" json:"tlvs,omitempty"` -} - -func (x *AigpAttribute) Reset() { - *x = AigpAttribute{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[101] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AigpAttribute) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AigpAttribute) ProtoMessage() {} - -func (x *AigpAttribute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[101] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AigpAttribute.ProtoReflect.Descriptor instead. -func (*AigpAttribute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{101} -} - -func (x *AigpAttribute) GetTlvs() []*anypb.Any { - if x != nil { - return x.Tlvs - } - return nil -} - -type LargeCommunity struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GlobalAdmin uint32 `protobuf:"varint,1,opt,name=global_admin,json=globalAdmin,proto3" json:"global_admin,omitempty"` - LocalData1 uint32 `protobuf:"varint,2,opt,name=local_data1,json=localData1,proto3" json:"local_data1,omitempty"` - LocalData2 uint32 `protobuf:"varint,3,opt,name=local_data2,json=localData2,proto3" json:"local_data2,omitempty"` -} - -func (x *LargeCommunity) Reset() { - *x = LargeCommunity{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[102] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LargeCommunity) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LargeCommunity) ProtoMessage() {} - -func (x *LargeCommunity) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[102] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LargeCommunity.ProtoReflect.Descriptor instead. -func (*LargeCommunity) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{102} -} - -func (x *LargeCommunity) GetGlobalAdmin() uint32 { - if x != nil { - return x.GlobalAdmin - } - return 0 -} - -func (x *LargeCommunity) GetLocalData1() uint32 { - if x != nil { - return x.LocalData1 - } - return 0 -} - -func (x *LargeCommunity) GetLocalData2() uint32 { - if x != nil { - return x.LocalData2 - } - return 0 -} - -type LargeCommunitiesAttribute struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Communities []*LargeCommunity `protobuf:"bytes,1,rep,name=communities,proto3" json:"communities,omitempty"` -} - -func (x *LargeCommunitiesAttribute) Reset() { - *x = LargeCommunitiesAttribute{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[103] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LargeCommunitiesAttribute) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LargeCommunitiesAttribute) ProtoMessage() {} - -func (x *LargeCommunitiesAttribute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[103] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LargeCommunitiesAttribute.ProtoReflect.Descriptor instead. -func (*LargeCommunitiesAttribute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{103} -} - -func (x *LargeCommunitiesAttribute) GetCommunities() []*LargeCommunity { - if x != nil { - return x.Communities - } - return nil -} - -type LsNodeFlags struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Overload bool `protobuf:"varint,1,opt,name=overload,proto3" json:"overload,omitempty"` - Attached bool `protobuf:"varint,2,opt,name=attached,proto3" json:"attached,omitempty"` - External bool `protobuf:"varint,3,opt,name=external,proto3" json:"external,omitempty"` - Abr bool `protobuf:"varint,4,opt,name=abr,proto3" json:"abr,omitempty"` - Router bool `protobuf:"varint,5,opt,name=router,proto3" json:"router,omitempty"` - V6 bool `protobuf:"varint,6,opt,name=v6,proto3" json:"v6,omitempty"` -} - -func (x *LsNodeFlags) Reset() { - *x = LsNodeFlags{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[104] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LsNodeFlags) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LsNodeFlags) ProtoMessage() {} - -func (x *LsNodeFlags) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[104] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LsNodeFlags.ProtoReflect.Descriptor instead. -func (*LsNodeFlags) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{104} -} - -func (x *LsNodeFlags) GetOverload() bool { - if x != nil { - return x.Overload - } - return false -} - -func (x *LsNodeFlags) GetAttached() bool { - if x != nil { - return x.Attached - } - return false -} - -func (x *LsNodeFlags) GetExternal() bool { - if x != nil { - return x.External - } - return false -} - -func (x *LsNodeFlags) GetAbr() bool { - if x != nil { - return x.Abr - } - return false -} - -func (x *LsNodeFlags) GetRouter() bool { - if x != nil { - return x.Router - } - return false -} - -func (x *LsNodeFlags) GetV6() bool { - if x != nil { - return x.V6 - } - return false -} - -type LsIGPFlags struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Down bool `protobuf:"varint,1,opt,name=down,proto3" json:"down,omitempty"` - NoUnicast bool `protobuf:"varint,2,opt,name=no_unicast,json=noUnicast,proto3" json:"no_unicast,omitempty"` - LocalAddress bool `protobuf:"varint,3,opt,name=local_address,json=localAddress,proto3" json:"local_address,omitempty"` - PropagateNssa bool `protobuf:"varint,4,opt,name=propagate_nssa,json=propagateNssa,proto3" json:"propagate_nssa,omitempty"` -} - -func (x *LsIGPFlags) Reset() { - *x = LsIGPFlags{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[105] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LsIGPFlags) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LsIGPFlags) ProtoMessage() {} - -func (x *LsIGPFlags) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[105] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LsIGPFlags.ProtoReflect.Descriptor instead. -func (*LsIGPFlags) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{105} -} - -func (x *LsIGPFlags) GetDown() bool { - if x != nil { - return x.Down - } - return false -} - -func (x *LsIGPFlags) GetNoUnicast() bool { - if x != nil { - return x.NoUnicast - } - return false -} - -func (x *LsIGPFlags) GetLocalAddress() bool { - if x != nil { - return x.LocalAddress - } - return false -} - -func (x *LsIGPFlags) GetPropagateNssa() bool { - if x != nil { - return x.PropagateNssa - } - return false -} - -type LsSrRange struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Begin uint32 `protobuf:"varint,1,opt,name=begin,proto3" json:"begin,omitempty"` - End uint32 `protobuf:"varint,2,opt,name=end,proto3" json:"end,omitempty"` -} - -func (x *LsSrRange) Reset() { - *x = LsSrRange{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[106] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LsSrRange) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LsSrRange) ProtoMessage() {} - -func (x *LsSrRange) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[106] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LsSrRange.ProtoReflect.Descriptor instead. -func (*LsSrRange) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{106} -} - -func (x *LsSrRange) GetBegin() uint32 { - if x != nil { - return x.Begin - } - return 0 -} - -func (x *LsSrRange) GetEnd() uint32 { - if x != nil { - return x.End - } - return 0 -} - -type LsSrCapabilities struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Ipv4Supported bool `protobuf:"varint,1,opt,name=ipv4_supported,json=ipv4Supported,proto3" json:"ipv4_supported,omitempty"` - Ipv6Supported bool `protobuf:"varint,2,opt,name=ipv6_supported,json=ipv6Supported,proto3" json:"ipv6_supported,omitempty"` - Ranges []*LsSrRange `protobuf:"bytes,3,rep,name=ranges,proto3" json:"ranges,omitempty"` -} - -func (x *LsSrCapabilities) Reset() { - *x = LsSrCapabilities{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[107] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LsSrCapabilities) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LsSrCapabilities) ProtoMessage() {} - -func (x *LsSrCapabilities) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[107] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LsSrCapabilities.ProtoReflect.Descriptor instead. -func (*LsSrCapabilities) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{107} -} - -func (x *LsSrCapabilities) GetIpv4Supported() bool { - if x != nil { - return x.Ipv4Supported - } - return false -} - -func (x *LsSrCapabilities) GetIpv6Supported() bool { - if x != nil { - return x.Ipv6Supported - } - return false -} - -func (x *LsSrCapabilities) GetRanges() []*LsSrRange { - if x != nil { - return x.Ranges - } - return nil -} - -type LsSrLocalBlock struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Ranges []*LsSrRange `protobuf:"bytes,1,rep,name=ranges,proto3" json:"ranges,omitempty"` -} - -func (x *LsSrLocalBlock) Reset() { - *x = LsSrLocalBlock{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[108] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LsSrLocalBlock) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LsSrLocalBlock) ProtoMessage() {} - -func (x *LsSrLocalBlock) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[108] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LsSrLocalBlock.ProtoReflect.Descriptor instead. -func (*LsSrLocalBlock) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{108} -} - -func (x *LsSrLocalBlock) GetRanges() []*LsSrRange { - if x != nil { - return x.Ranges - } - return nil -} - -type LsAttributeNode struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Flags *LsNodeFlags `protobuf:"bytes,2,opt,name=flags,proto3" json:"flags,omitempty"` - LocalRouterId string `protobuf:"bytes,3,opt,name=local_router_id,json=localRouterId,proto3" json:"local_router_id,omitempty"` - LocalRouterIdV6 string `protobuf:"bytes,4,opt,name=local_router_id_v6,json=localRouterIdV6,proto3" json:"local_router_id_v6,omitempty"` - IsisArea []byte `protobuf:"bytes,5,opt,name=isis_area,json=isisArea,proto3" json:"isis_area,omitempty"` - Opaque []byte `protobuf:"bytes,6,opt,name=opaque,proto3" json:"opaque,omitempty"` - SrCapabilities *LsSrCapabilities `protobuf:"bytes,7,opt,name=sr_capabilities,json=srCapabilities,proto3" json:"sr_capabilities,omitempty"` - SrAlgorithms []byte `protobuf:"bytes,8,opt,name=sr_algorithms,json=srAlgorithms,proto3" json:"sr_algorithms,omitempty"` - SrLocalBlock *LsSrLocalBlock `protobuf:"bytes,9,opt,name=sr_local_block,json=srLocalBlock,proto3" json:"sr_local_block,omitempty"` -} - -func (x *LsAttributeNode) Reset() { - *x = LsAttributeNode{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[109] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LsAttributeNode) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LsAttributeNode) ProtoMessage() {} - -func (x *LsAttributeNode) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[109] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LsAttributeNode.ProtoReflect.Descriptor instead. -func (*LsAttributeNode) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{109} -} - -func (x *LsAttributeNode) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *LsAttributeNode) GetFlags() *LsNodeFlags { - if x != nil { - return x.Flags - } - return nil -} - -func (x *LsAttributeNode) GetLocalRouterId() string { - if x != nil { - return x.LocalRouterId - } - return "" -} - -func (x *LsAttributeNode) GetLocalRouterIdV6() string { - if x != nil { - return x.LocalRouterIdV6 - } - return "" -} - -func (x *LsAttributeNode) GetIsisArea() []byte { - if x != nil { - return x.IsisArea - } - return nil -} - -func (x *LsAttributeNode) GetOpaque() []byte { - if x != nil { - return x.Opaque - } - return nil -} - -func (x *LsAttributeNode) GetSrCapabilities() *LsSrCapabilities { - if x != nil { - return x.SrCapabilities - } - return nil -} - -func (x *LsAttributeNode) GetSrAlgorithms() []byte { - if x != nil { - return x.SrAlgorithms - } - return nil -} - -func (x *LsAttributeNode) GetSrLocalBlock() *LsSrLocalBlock { - if x != nil { - return x.SrLocalBlock - } - return nil -} - -type LsAttributeLink struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - LocalRouterId string `protobuf:"bytes,2,opt,name=local_router_id,json=localRouterId,proto3" json:"local_router_id,omitempty"` - LocalRouterIdV6 string `protobuf:"bytes,3,opt,name=local_router_id_v6,json=localRouterIdV6,proto3" json:"local_router_id_v6,omitempty"` - RemoteRouterId string `protobuf:"bytes,4,opt,name=remote_router_id,json=remoteRouterId,proto3" json:"remote_router_id,omitempty"` - RemoteRouterIdV6 string `protobuf:"bytes,5,opt,name=remote_router_id_v6,json=remoteRouterIdV6,proto3" json:"remote_router_id_v6,omitempty"` - AdminGroup uint32 `protobuf:"varint,6,opt,name=admin_group,json=adminGroup,proto3" json:"admin_group,omitempty"` - DefaultTeMetric uint32 `protobuf:"varint,7,opt,name=default_te_metric,json=defaultTeMetric,proto3" json:"default_te_metric,omitempty"` - IgpMetric uint32 `protobuf:"varint,8,opt,name=igp_metric,json=igpMetric,proto3" json:"igp_metric,omitempty"` - Opaque []byte `protobuf:"bytes,9,opt,name=opaque,proto3" json:"opaque,omitempty"` - Bandwidth float32 `protobuf:"fixed32,10,opt,name=bandwidth,proto3" json:"bandwidth,omitempty"` - ReservableBandwidth float32 `protobuf:"fixed32,11,opt,name=reservable_bandwidth,json=reservableBandwidth,proto3" json:"reservable_bandwidth,omitempty"` - UnreservedBandwidth []float32 `protobuf:"fixed32,12,rep,packed,name=unreserved_bandwidth,json=unreservedBandwidth,proto3" json:"unreserved_bandwidth,omitempty"` - SrAdjacencySid uint32 `protobuf:"varint,13,opt,name=sr_adjacency_sid,json=srAdjacencySid,proto3" json:"sr_adjacency_sid,omitempty"` - Srlgs []uint32 `protobuf:"varint,14,rep,packed,name=srlgs,proto3" json:"srlgs,omitempty"` -} - -func (x *LsAttributeLink) Reset() { - *x = LsAttributeLink{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[110] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LsAttributeLink) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LsAttributeLink) ProtoMessage() {} - -func (x *LsAttributeLink) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[110] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LsAttributeLink.ProtoReflect.Descriptor instead. -func (*LsAttributeLink) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{110} -} - -func (x *LsAttributeLink) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *LsAttributeLink) GetLocalRouterId() string { - if x != nil { - return x.LocalRouterId - } - return "" -} - -func (x *LsAttributeLink) GetLocalRouterIdV6() string { - if x != nil { - return x.LocalRouterIdV6 - } - return "" -} - -func (x *LsAttributeLink) GetRemoteRouterId() string { - if x != nil { - return x.RemoteRouterId - } - return "" -} - -func (x *LsAttributeLink) GetRemoteRouterIdV6() string { - if x != nil { - return x.RemoteRouterIdV6 - } - return "" -} - -func (x *LsAttributeLink) GetAdminGroup() uint32 { - if x != nil { - return x.AdminGroup - } - return 0 -} - -func (x *LsAttributeLink) GetDefaultTeMetric() uint32 { - if x != nil { - return x.DefaultTeMetric - } - return 0 -} - -func (x *LsAttributeLink) GetIgpMetric() uint32 { - if x != nil { - return x.IgpMetric - } - return 0 -} - -func (x *LsAttributeLink) GetOpaque() []byte { - if x != nil { - return x.Opaque - } - return nil -} - -func (x *LsAttributeLink) GetBandwidth() float32 { - if x != nil { - return x.Bandwidth - } - return 0 -} - -func (x *LsAttributeLink) GetReservableBandwidth() float32 { - if x != nil { - return x.ReservableBandwidth - } - return 0 -} - -func (x *LsAttributeLink) GetUnreservedBandwidth() []float32 { - if x != nil { - return x.UnreservedBandwidth - } - return nil -} - -func (x *LsAttributeLink) GetSrAdjacencySid() uint32 { - if x != nil { - return x.SrAdjacencySid - } - return 0 -} - -func (x *LsAttributeLink) GetSrlgs() []uint32 { - if x != nil { - return x.Srlgs - } - return nil -} - -type LsAttributePrefix struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - IgpFlags *LsIGPFlags `protobuf:"bytes,1,opt,name=igp_flags,json=igpFlags,proto3" json:"igp_flags,omitempty"` - Opaque []byte `protobuf:"bytes,2,opt,name=opaque,proto3" json:"opaque,omitempty"` - SrPrefixSid uint32 `protobuf:"varint,3,opt,name=sr_prefix_sid,json=srPrefixSid,proto3" json:"sr_prefix_sid,omitempty"` -} - -func (x *LsAttributePrefix) Reset() { - *x = LsAttributePrefix{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[111] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LsAttributePrefix) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LsAttributePrefix) ProtoMessage() {} - -func (x *LsAttributePrefix) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[111] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LsAttributePrefix.ProtoReflect.Descriptor instead. -func (*LsAttributePrefix) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{111} -} - -func (x *LsAttributePrefix) GetIgpFlags() *LsIGPFlags { - if x != nil { - return x.IgpFlags - } - return nil -} - -func (x *LsAttributePrefix) GetOpaque() []byte { - if x != nil { - return x.Opaque - } - return nil -} - -func (x *LsAttributePrefix) GetSrPrefixSid() uint32 { - if x != nil { - return x.SrPrefixSid - } - return 0 -} - -type LsBgpPeerSegmentSIDFlags struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value bool `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` - Local bool `protobuf:"varint,2,opt,name=local,proto3" json:"local,omitempty"` - Backup bool `protobuf:"varint,3,opt,name=backup,proto3" json:"backup,omitempty"` - Persistent bool `protobuf:"varint,4,opt,name=persistent,proto3" json:"persistent,omitempty"` -} - -func (x *LsBgpPeerSegmentSIDFlags) Reset() { - *x = LsBgpPeerSegmentSIDFlags{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[112] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LsBgpPeerSegmentSIDFlags) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LsBgpPeerSegmentSIDFlags) ProtoMessage() {} - -func (x *LsBgpPeerSegmentSIDFlags) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[112] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LsBgpPeerSegmentSIDFlags.ProtoReflect.Descriptor instead. -func (*LsBgpPeerSegmentSIDFlags) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{112} -} - -func (x *LsBgpPeerSegmentSIDFlags) GetValue() bool { - if x != nil { - return x.Value - } - return false -} - -func (x *LsBgpPeerSegmentSIDFlags) GetLocal() bool { - if x != nil { - return x.Local - } - return false -} - -func (x *LsBgpPeerSegmentSIDFlags) GetBackup() bool { - if x != nil { - return x.Backup - } - return false -} - -func (x *LsBgpPeerSegmentSIDFlags) GetPersistent() bool { - if x != nil { - return x.Persistent - } - return false -} - -type LsBgpPeerSegmentSID struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Flags *LsBgpPeerSegmentSIDFlags `protobuf:"bytes,1,opt,name=flags,proto3" json:"flags,omitempty"` - Weight uint32 `protobuf:"varint,2,opt,name=weight,proto3" json:"weight,omitempty"` - Sid uint32 `protobuf:"varint,3,opt,name=sid,proto3" json:"sid,omitempty"` -} - -func (x *LsBgpPeerSegmentSID) Reset() { - *x = LsBgpPeerSegmentSID{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[113] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LsBgpPeerSegmentSID) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LsBgpPeerSegmentSID) ProtoMessage() {} - -func (x *LsBgpPeerSegmentSID) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[113] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LsBgpPeerSegmentSID.ProtoReflect.Descriptor instead. -func (*LsBgpPeerSegmentSID) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{113} -} - -func (x *LsBgpPeerSegmentSID) GetFlags() *LsBgpPeerSegmentSIDFlags { - if x != nil { - return x.Flags - } - return nil -} - -func (x *LsBgpPeerSegmentSID) GetWeight() uint32 { - if x != nil { - return x.Weight - } - return 0 -} - -func (x *LsBgpPeerSegmentSID) GetSid() uint32 { - if x != nil { - return x.Sid - } - return 0 -} - -type LsAttributeBgpPeerSegment struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - BgpPeerNodeSid *LsBgpPeerSegmentSID `protobuf:"bytes,1,opt,name=bgp_peer_node_sid,json=bgpPeerNodeSid,proto3" json:"bgp_peer_node_sid,omitempty"` - BgpPeerAdjacencySid *LsBgpPeerSegmentSID `protobuf:"bytes,2,opt,name=bgp_peer_adjacency_sid,json=bgpPeerAdjacencySid,proto3" json:"bgp_peer_adjacency_sid,omitempty"` - BgpPeerSetSid *LsBgpPeerSegmentSID `protobuf:"bytes,3,opt,name=bgp_peer_set_sid,json=bgpPeerSetSid,proto3" json:"bgp_peer_set_sid,omitempty"` -} - -func (x *LsAttributeBgpPeerSegment) Reset() { - *x = LsAttributeBgpPeerSegment{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[114] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LsAttributeBgpPeerSegment) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LsAttributeBgpPeerSegment) ProtoMessage() {} - -func (x *LsAttributeBgpPeerSegment) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[114] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LsAttributeBgpPeerSegment.ProtoReflect.Descriptor instead. -func (*LsAttributeBgpPeerSegment) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{114} -} - -func (x *LsAttributeBgpPeerSegment) GetBgpPeerNodeSid() *LsBgpPeerSegmentSID { - if x != nil { - return x.BgpPeerNodeSid - } - return nil -} - -func (x *LsAttributeBgpPeerSegment) GetBgpPeerAdjacencySid() *LsBgpPeerSegmentSID { - if x != nil { - return x.BgpPeerAdjacencySid - } - return nil -} - -func (x *LsAttributeBgpPeerSegment) GetBgpPeerSetSid() *LsBgpPeerSegmentSID { - if x != nil { - return x.BgpPeerSetSid - } - return nil -} - -type LsAttribute struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Node *LsAttributeNode `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"` - Link *LsAttributeLink `protobuf:"bytes,2,opt,name=link,proto3" json:"link,omitempty"` - Prefix *LsAttributePrefix `protobuf:"bytes,3,opt,name=prefix,proto3" json:"prefix,omitempty"` - BgpPeerSegment *LsAttributeBgpPeerSegment `protobuf:"bytes,4,opt,name=bgp_peer_segment,json=bgpPeerSegment,proto3" json:"bgp_peer_segment,omitempty"` -} - -func (x *LsAttribute) Reset() { - *x = LsAttribute{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[115] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LsAttribute) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LsAttribute) ProtoMessage() {} - -func (x *LsAttribute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[115] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LsAttribute.ProtoReflect.Descriptor instead. -func (*LsAttribute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{115} -} - -func (x *LsAttribute) GetNode() *LsAttributeNode { - if x != nil { - return x.Node - } - return nil -} - -func (x *LsAttribute) GetLink() *LsAttributeLink { - if x != nil { - return x.Link - } - return nil -} - -func (x *LsAttribute) GetPrefix() *LsAttributePrefix { - if x != nil { - return x.Prefix - } - return nil -} - -func (x *LsAttribute) GetBgpPeerSegment() *LsAttributeBgpPeerSegment { - if x != nil { - return x.BgpPeerSegment - } - return nil -} - -type UnknownAttribute struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Flags uint32 `protobuf:"varint,1,opt,name=flags,proto3" json:"flags,omitempty"` - Type uint32 `protobuf:"varint,2,opt,name=type,proto3" json:"type,omitempty"` - Value []byte `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *UnknownAttribute) Reset() { - *x = UnknownAttribute{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[116] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UnknownAttribute) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UnknownAttribute) ProtoMessage() {} - -func (x *UnknownAttribute) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[116] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UnknownAttribute.ProtoReflect.Descriptor instead. -func (*UnknownAttribute) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{116} -} - -func (x *UnknownAttribute) GetFlags() uint32 { - if x != nil { - return x.Flags - } - return 0 -} - -func (x *UnknownAttribute) GetType() uint32 { - if x != nil { - return x.Type - } - return 0 -} - -func (x *UnknownAttribute) GetValue() []byte { - if x != nil { - return x.Value - } - return nil -} - -// https://www.rfc-editor.org/rfc/rfc9252.html#section-3.2.1 -type SRv6StructureSubSubTLV struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - LocatorBlockLength uint32 `protobuf:"varint,1,opt,name=locator_block_length,json=locatorBlockLength,proto3" json:"locator_block_length,omitempty"` - LocatorNodeLength uint32 `protobuf:"varint,2,opt,name=locator_node_length,json=locatorNodeLength,proto3" json:"locator_node_length,omitempty"` - FunctionLength uint32 `protobuf:"varint,3,opt,name=function_length,json=functionLength,proto3" json:"function_length,omitempty"` - ArgumentLength uint32 `protobuf:"varint,4,opt,name=argument_length,json=argumentLength,proto3" json:"argument_length,omitempty"` - TranspositionLength uint32 `protobuf:"varint,5,opt,name=transposition_length,json=transpositionLength,proto3" json:"transposition_length,omitempty"` - TranspositionOffset uint32 `protobuf:"varint,6,opt,name=transposition_offset,json=transpositionOffset,proto3" json:"transposition_offset,omitempty"` -} - -func (x *SRv6StructureSubSubTLV) Reset() { - *x = SRv6StructureSubSubTLV{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[117] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SRv6StructureSubSubTLV) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SRv6StructureSubSubTLV) ProtoMessage() {} - -func (x *SRv6StructureSubSubTLV) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[117] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SRv6StructureSubSubTLV.ProtoReflect.Descriptor instead. -func (*SRv6StructureSubSubTLV) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{117} -} - -func (x *SRv6StructureSubSubTLV) GetLocatorBlockLength() uint32 { - if x != nil { - return x.LocatorBlockLength - } - return 0 -} - -func (x *SRv6StructureSubSubTLV) GetLocatorNodeLength() uint32 { - if x != nil { - return x.LocatorNodeLength - } - return 0 -} - -func (x *SRv6StructureSubSubTLV) GetFunctionLength() uint32 { - if x != nil { - return x.FunctionLength - } - return 0 -} - -func (x *SRv6StructureSubSubTLV) GetArgumentLength() uint32 { - if x != nil { - return x.ArgumentLength - } - return 0 -} - -func (x *SRv6StructureSubSubTLV) GetTranspositionLength() uint32 { - if x != nil { - return x.TranspositionLength - } - return 0 -} - -func (x *SRv6StructureSubSubTLV) GetTranspositionOffset() uint32 { - if x != nil { - return x.TranspositionOffset - } - return 0 -} - -type SRv6SIDFlags struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Placeholder for future sid flags - Flag_1 bool `protobuf:"varint,1,opt,name=flag_1,json=flag1,proto3" json:"flag_1,omitempty"` -} - -func (x *SRv6SIDFlags) Reset() { - *x = SRv6SIDFlags{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[118] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SRv6SIDFlags) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SRv6SIDFlags) ProtoMessage() {} - -func (x *SRv6SIDFlags) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[118] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SRv6SIDFlags.ProtoReflect.Descriptor instead. -func (*SRv6SIDFlags) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{118} -} - -func (x *SRv6SIDFlags) GetFlag_1() bool { - if x != nil { - return x.Flag_1 - } - return false -} - -type SRv6TLV struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Tlv []*anypb.Any `protobuf:"bytes,1,rep,name=tlv,proto3" json:"tlv,omitempty"` -} - -func (x *SRv6TLV) Reset() { - *x = SRv6TLV{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[119] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SRv6TLV) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SRv6TLV) ProtoMessage() {} - -func (x *SRv6TLV) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[119] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SRv6TLV.ProtoReflect.Descriptor instead. -func (*SRv6TLV) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{119} -} - -func (x *SRv6TLV) GetTlv() []*anypb.Any { - if x != nil { - return x.Tlv - } - return nil -} - -// https://tools.ietf.org/html/draft-dawra-bess-srv6-services-02#section-2.1.1 -type SRv6InformationSubTLV struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Sid []byte `protobuf:"bytes,1,opt,name=sid,proto3" json:"sid,omitempty"` - Flags *SRv6SIDFlags `protobuf:"bytes,2,opt,name=flags,proto3" json:"flags,omitempty"` - EndpointBehavior uint32 `protobuf:"varint,3,opt,name=endpoint_behavior,json=endpointBehavior,proto3" json:"endpoint_behavior,omitempty"` - // SRv6TLV is one of: - // - SRv6StructureSubSubTLV - SubSubTlvs map[uint32]*SRv6TLV `protobuf:"bytes,4,rep,name=sub_sub_tlvs,json=subSubTlvs,proto3" json:"sub_sub_tlvs,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *SRv6InformationSubTLV) Reset() { - *x = SRv6InformationSubTLV{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[120] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SRv6InformationSubTLV) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SRv6InformationSubTLV) ProtoMessage() {} - -func (x *SRv6InformationSubTLV) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[120] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SRv6InformationSubTLV.ProtoReflect.Descriptor instead. -func (*SRv6InformationSubTLV) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{120} -} - -func (x *SRv6InformationSubTLV) GetSid() []byte { - if x != nil { - return x.Sid - } - return nil -} - -func (x *SRv6InformationSubTLV) GetFlags() *SRv6SIDFlags { - if x != nil { - return x.Flags - } - return nil -} - -func (x *SRv6InformationSubTLV) GetEndpointBehavior() uint32 { - if x != nil { - return x.EndpointBehavior - } - return 0 -} - -func (x *SRv6InformationSubTLV) GetSubSubTlvs() map[uint32]*SRv6TLV { - if x != nil { - return x.SubSubTlvs - } - return nil -} - -// https://www.rfc-editor.org/rfc/rfc9252.html#section-2 -type SRv6L3ServiceTLV struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // SRv6TLV is one of: - // - SRv6InformationSubTLV - SubTlvs map[uint32]*SRv6TLV `protobuf:"bytes,1,rep,name=sub_tlvs,json=subTlvs,proto3" json:"sub_tlvs,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *SRv6L3ServiceTLV) Reset() { - *x = SRv6L3ServiceTLV{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[121] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SRv6L3ServiceTLV) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SRv6L3ServiceTLV) ProtoMessage() {} - -func (x *SRv6L3ServiceTLV) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[121] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SRv6L3ServiceTLV.ProtoReflect.Descriptor instead. -func (*SRv6L3ServiceTLV) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{121} -} - -func (x *SRv6L3ServiceTLV) GetSubTlvs() map[uint32]*SRv6TLV { - if x != nil { - return x.SubTlvs - } - return nil -} - -// https://www.rfc-editor.org/rfc/rfc9252.html#section-2 -type SRv6L2ServiceTLV struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // SRv6TLV is one of: - // - SRv6InformationSubTLV - SubTlvs map[uint32]*SRv6TLV `protobuf:"bytes,1,rep,name=sub_tlvs,json=subTlvs,proto3" json:"sub_tlvs,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *SRv6L2ServiceTLV) Reset() { - *x = SRv6L2ServiceTLV{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[122] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SRv6L2ServiceTLV) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SRv6L2ServiceTLV) ProtoMessage() {} - -func (x *SRv6L2ServiceTLV) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[122] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SRv6L2ServiceTLV.ProtoReflect.Descriptor instead. -func (*SRv6L2ServiceTLV) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{122} -} - -func (x *SRv6L2ServiceTLV) GetSubTlvs() map[uint32]*SRv6TLV { - if x != nil { - return x.SubTlvs - } - return nil -} - -// https://tools.ietf.org/html/rfc8669 -type PrefixSID struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // tlv is one of: - // - IndexLabelTLV Type 1 (not yet implemented) - // - OriginatorSRGBTLV Type 3 (not yet implemented) - // - SRv6L3ServiceTLV Type 5 - // - SRv6L2ServiceTLV Type 6 - Tlvs []*anypb.Any `protobuf:"bytes,1,rep,name=tlvs,proto3" json:"tlvs,omitempty"` -} - -func (x *PrefixSID) Reset() { - *x = PrefixSID{} - if protoimpl.UnsafeEnabled { - mi := &file_attribute_proto_msgTypes[123] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PrefixSID) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PrefixSID) ProtoMessage() {} - -func (x *PrefixSID) ProtoReflect() protoreflect.Message { - mi := &file_attribute_proto_msgTypes[123] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PrefixSID.ProtoReflect.Descriptor instead. -func (*PrefixSID) Descriptor() ([]byte, []int) { - return file_attribute_proto_rawDescGZIP(), []int{123} -} - -func (x *PrefixSID) GetTlvs() []*anypb.Any { - if x != nil { - return x.Tlvs - } - return nil -} - -var File_attribute_proto protoreflect.FileDescriptor - -var file_attribute_proto_rawDesc = []byte{ - 0x0a, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x05, 0x61, 0x70, 0x69, 0x70, 0x62, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x0b, 0x67, 0x6f, 0x62, 0x67, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x29, 0x0a, 0x0f, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x22, 0xad, 0x01, 0x0a, 0x09, - 0x41, 0x73, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, - 0x41, 0x73, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x5b, - 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x53, 0x5f, 0x53, 0x45, 0x54, 0x10, 0x01, 0x12, - 0x0f, 0x0a, 0x0b, 0x41, 0x53, 0x5f, 0x53, 0x45, 0x51, 0x55, 0x45, 0x4e, 0x43, 0x45, 0x10, 0x02, - 0x12, 0x16, 0x0a, 0x12, 0x41, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x45, 0x44, 0x5f, 0x53, 0x45, - 0x51, 0x55, 0x45, 0x4e, 0x43, 0x45, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x41, 0x53, 0x5f, 0x43, - 0x4f, 0x4e, 0x46, 0x45, 0x44, 0x5f, 0x53, 0x45, 0x54, 0x10, 0x04, 0x22, 0x3f, 0x0a, 0x0f, 0x41, - 0x73, 0x50, 0x61, 0x74, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x2c, - 0x0a, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x73, 0x53, 0x65, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x2d, 0x0a, 0x10, - 0x4e, 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x68, 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x22, 0x2a, 0x0a, 0x16, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x45, 0x78, 0x69, 0x74, 0x44, 0x69, 0x73, 0x63, 0x41, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x03, 0x6d, 0x65, 0x64, 0x22, 0x33, 0x0a, 0x12, 0x4c, 0x6f, 0x63, 0x61, 0x6c, - 0x50, 0x72, 0x65, 0x66, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x1d, 0x0a, - 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x72, 0x65, 0x66, 0x22, 0x1a, 0x0a, 0x18, - 0x41, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0x41, 0x0a, 0x13, 0x41, 0x67, 0x67, 0x72, - 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, - 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, - 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x38, 0x0a, 0x14, 0x43, - 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x27, 0x0a, 0x15, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, - 0x74, 0x6f, 0x72, 0x49, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x28, - 0x0a, 0x14, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x0f, 0x49, 0x50, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x70, - 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x09, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4c, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, - 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, - 0x69, 0x78, 0x22, 0x67, 0x0a, 0x16, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x49, 0x50, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x16, 0x0a, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x6c, - 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, - 0x4c, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x2d, 0x0a, 0x11, 0x45, - 0x6e, 0x63, 0x61, 0x70, 0x73, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x4c, 0x52, 0x49, - 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x51, 0x0a, 0x1d, 0x52, 0x6f, - 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x72, - 0x54, 0x77, 0x6f, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x41, 0x53, 0x4e, 0x12, 0x14, 0x0a, 0x05, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x22, 0x4f, 0x0a, - 0x1b, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, - 0x68, 0x65, 0x72, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x22, 0x52, - 0x0a, 0x1e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, - 0x73, 0x68, 0x65, 0x72, 0x46, 0x6f, 0x75, 0x72, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x41, 0x53, 0x4e, - 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, - 0x65, 0x64, 0x22, 0x45, 0x0a, 0x19, 0x45, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x53, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, - 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xbb, 0x01, 0x0a, 0x08, 0x56, 0x50, - 0x4c, 0x53, 0x4e, 0x4c, 0x52, 0x49, 0x12, 0x24, 0x0a, 0x02, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x02, 0x72, 0x64, 0x12, 0x13, 0x0a, 0x05, - 0x76, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x76, 0x65, 0x49, - 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x76, 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x76, 0x65, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x76, 0x65, 0x5f, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0b, 0x76, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x28, 0x0a, - 0x10, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x62, 0x61, 0x73, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x42, 0x61, 0x73, 0x65, 0x22, 0xb3, 0x01, 0x0a, 0x1e, 0x45, 0x56, 0x50, 0x4e, - 0x45, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x41, 0x75, 0x74, 0x6f, 0x44, 0x69, 0x73, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x02, 0x72, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x02, 0x72, 0x64, - 0x12, 0x32, 0x0a, 0x03, 0x65, 0x73, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x53, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, - 0x03, 0x65, 0x73, 0x69, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, - 0x5f, 0x74, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x65, 0x74, 0x68, 0x65, - 0x72, 0x6e, 0x65, 0x74, 0x54, 0x61, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0xf2, 0x01, - 0x0a, 0x1b, 0x45, 0x56, 0x50, 0x4e, 0x4d, 0x41, 0x43, 0x49, 0x50, 0x41, 0x64, 0x76, 0x65, 0x72, - 0x74, 0x69, 0x73, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x24, 0x0a, - 0x02, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, - 0x02, 0x72, 0x64, 0x12, 0x32, 0x0a, 0x03, 0x65, 0x73, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, - 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, - 0x65, 0x72, 0x52, 0x03, 0x65, 0x73, 0x69, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x74, 0x68, 0x65, 0x72, - 0x6e, 0x65, 0x74, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x65, - 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x54, 0x61, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, - 0x63, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x6d, 0x61, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x69, - 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x22, 0x90, 0x01, 0x0a, 0x26, 0x45, 0x56, 0x50, 0x4e, 0x49, 0x6e, 0x63, 0x6c, 0x75, - 0x73, 0x69, 0x76, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x45, 0x74, 0x68, - 0x65, 0x72, 0x6e, 0x65, 0x74, 0x54, 0x61, 0x67, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x24, 0x0a, - 0x02, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, - 0x02, 0x72, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x5f, - 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x65, 0x74, 0x68, 0x65, 0x72, - 0x6e, 0x65, 0x74, 0x54, 0x61, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x70, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x93, 0x01, 0x0a, 0x18, 0x45, 0x56, 0x50, 0x4e, 0x45, 0x74, - 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, - 0x74, 0x65, 0x12, 0x24, 0x0a, 0x02, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x02, 0x72, 0x64, 0x12, 0x32, 0x0a, 0x03, 0x65, 0x73, 0x69, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x74, - 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x03, 0x65, 0x73, 0x69, 0x12, 0x1d, 0x0a, 0x0a, - 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x86, 0x02, 0x0a, 0x11, - 0x45, 0x56, 0x50, 0x4e, 0x49, 0x50, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x12, 0x24, 0x0a, 0x02, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x41, 0x6e, 0x79, 0x52, 0x02, 0x72, 0x64, 0x12, 0x32, 0x0a, 0x03, 0x65, 0x73, 0x69, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x74, 0x68, - 0x65, 0x72, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x03, 0x65, 0x73, 0x69, 0x12, 0x21, 0x0a, 0x0c, 0x65, - 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0b, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x54, 0x61, 0x67, 0x12, 0x1b, - 0x0a, 0x09, 0x69, 0x70, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x69, 0x70, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x22, 0x0a, 0x0d, 0x69, - 0x70, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0b, 0x69, 0x70, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4c, 0x65, 0x6e, 0x12, - 0x1d, 0x0a, 0x0a, 0x67, 0x77, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x77, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, - 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x22, 0x7f, 0x0a, 0x0e, 0x45, 0x56, 0x50, 0x4e, 0x49, 0x50, 0x4d, 0x53, - 0x49, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x02, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x02, 0x72, 0x64, 0x12, 0x21, 0x0a, 0x0c, - 0x65, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0b, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x54, 0x61, 0x67, 0x12, - 0x24, 0x0a, 0x02, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, - 0x79, 0x52, 0x02, 0x72, 0x74, 0x22, 0x7e, 0x0a, 0x0c, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x4e, 0x4c, 0x52, 0x49, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x24, 0x0a, - 0x0d, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, - 0x68, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x65, 0x6e, 0x64, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x90, 0x01, 0x0a, 0x19, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x65, - 0x64, 0x56, 0x50, 0x4e, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x50, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x24, 0x0a, 0x02, 0x72, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x02, 0x72, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4c, 0x65, 0x6e, - 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x53, 0x0a, 0x19, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, - 0x70, 0x4e, 0x4c, 0x52, 0x49, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, 0x6e, 0x12, 0x24, 0x0a, 0x02, 0x72, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x02, 0x72, 0x74, 0x22, 0x75, 0x0a, - 0x10, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x65, 0x63, 0x49, 0x50, 0x50, 0x72, 0x65, 0x66, 0x69, - 0x78, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, - 0x6c, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x69, - 0x78, 0x4c, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x16, 0x0a, 0x06, - 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x22, 0x3b, 0x0a, 0x0b, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x65, 0x63, - 0x4d, 0x41, 0x43, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x22, 0x3d, 0x0a, 0x15, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x65, 0x63, 0x43, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x70, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x5b, 0x0a, 0x11, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x65, 0x63, 0x43, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x32, 0x0a, 0x05, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, - 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x65, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x3a, 0x0a, - 0x0c, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x65, 0x63, 0x4e, 0x4c, 0x52, 0x49, 0x12, 0x2a, 0x0a, - 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, - 0x6e, 0x79, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x63, 0x0a, 0x0f, 0x56, 0x50, 0x4e, - 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x65, 0x63, 0x4e, 0x4c, 0x52, 0x49, 0x12, 0x24, 0x0a, 0x02, - 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x02, - 0x72, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x34, - 0x0a, 0x0a, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x4e, 0x4c, 0x52, 0x49, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x84, 0x02, 0x0a, 0x10, 0x4c, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, 0x6e, 0x12, 0x1a, 0x0a, 0x09, 0x62, - 0x67, 0x70, 0x5f, 0x6c, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, - 0x62, 0x67, 0x70, 0x4c, 0x73, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x6f, 0x73, 0x70, 0x66, 0x5f, - 0x61, 0x72, 0x65, 0x61, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6f, - 0x73, 0x70, 0x66, 0x41, 0x72, 0x65, 0x61, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x73, 0x65, - 0x75, 0x64, 0x6f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, - 0x73, 0x65, 0x75, 0x64, 0x6f, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x67, 0x70, - 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x69, 0x67, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, - 0x0d, 0x62, 0x67, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x67, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x38, 0x0a, 0x18, 0x62, 0x67, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x65, 0x64, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x16, 0x62, 0x67, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x65, 0x64, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x98, 0x02, 0x0a, 0x10, - 0x4c, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, - 0x12, 0x22, 0x0a, 0x0d, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6c, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x63, - 0x61, 0x6c, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x72, 0x65, 0x6d, - 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6c, 0x69, - 0x6e, 0x6b, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x5f, 0x69, 0x70, 0x76, - 0x34, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x49, 0x70, 0x76, 0x34, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, - 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x5f, 0x69, 0x70, 0x76, 0x34, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, - 0x41, 0x64, 0x64, 0x72, 0x49, 0x70, 0x76, 0x34, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x5f, 0x69, 0x70, 0x76, 0x36, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x41, 0x64, 0x64, 0x72, 0x49, 0x70, 0x76, 0x36, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, 0x69, 0x67, - 0x68, 0x62, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x5f, 0x69, 0x70, 0x76, 0x36, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x41, 0x64, - 0x64, 0x72, 0x49, 0x70, 0x76, 0x36, 0x22, 0x7d, 0x0a, 0x12, 0x4c, 0x73, 0x50, 0x72, 0x65, 0x66, - 0x69, 0x78, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x27, 0x0a, 0x0f, - 0x69, 0x70, 0x5f, 0x72, 0x65, 0x61, 0x63, 0x68, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x70, 0x52, 0x65, 0x61, 0x63, 0x68, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x0f, 0x6f, 0x73, 0x70, 0x66, 0x5f, 0x72, 0x6f, - 0x75, 0x74, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, - 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x4f, 0x73, 0x70, 0x66, 0x52, 0x6f, 0x75, - 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x6f, 0x73, 0x70, 0x66, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x44, 0x0a, 0x0a, 0x4c, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x4e, - 0x4c, 0x52, 0x49, 0x12, 0x36, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x6e, 0x6f, 0x64, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, - 0x4c, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, - 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0xc0, 0x01, 0x0a, 0x0a, - 0x4c, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x4c, 0x52, 0x49, 0x12, 0x36, 0x0a, 0x0a, 0x6c, 0x6f, - 0x63, 0x61, 0x6c, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x4e, 0x6f, - 0x64, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x6e, 0x6f, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, - 0x4c, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, - 0x52, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x40, 0x0a, 0x0f, - 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, - 0x4c, 0x69, 0x6e, 0x6b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x0e, - 0x6c, 0x69, 0x6e, 0x6b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x22, 0x90, - 0x01, 0x0a, 0x0e, 0x4c, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x56, 0x34, 0x4e, 0x4c, 0x52, - 0x49, 0x12, 0x36, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, - 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x09, - 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x46, 0x0a, 0x11, 0x70, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x50, - 0x72, 0x65, 0x66, 0x69, 0x78, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, - 0x10, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, - 0x72, 0x22, 0x90, 0x01, 0x0a, 0x0e, 0x4c, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x56, 0x36, - 0x4e, 0x4c, 0x52, 0x49, 0x12, 0x36, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x6e, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, - 0x2e, 0x4c, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, - 0x72, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x46, 0x0a, 0x11, - 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, - 0x4c, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x6f, 0x72, 0x52, 0x10, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x6f, 0x72, 0x22, 0xcd, 0x01, 0x0a, 0x0c, 0x4c, 0x73, 0x41, 0x64, 0x64, 0x72, 0x50, - 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x25, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x4e, 0x4c, - 0x52, 0x49, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x04, - 0x6e, 0x6c, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, - 0x52, 0x04, 0x6e, 0x6c, 0x72, 0x69, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x34, - 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x49, 0x44, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, - 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x22, 0x61, 0x0a, 0x21, 0x4d, 0x55, 0x50, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x02, 0x72, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x02, 0x72, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x60, 0x0a, 0x1e, 0x4d, 0x55, 0x50, 0x44, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x02, 0x72, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x02, 0x72, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xec, 0x02, 0x0a, 0x1f, 0x4d, 0x55, - 0x50, 0x54, 0x79, 0x70, 0x65, 0x31, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x24, 0x0a, - 0x02, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, - 0x02, 0x72, 0x64, 0x12, 0x27, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x6c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0c, - 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, - 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, - 0x65, 0x66, 0x69, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x04, 0x74, 0x65, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x71, 0x66, 0x69, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x71, 0x66, 0x69, 0x12, 0x36, 0x0a, 0x17, 0x65, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x6c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x65, 0x6e, 0x64, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x4c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x65, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x32, 0x0a, - 0x15, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, - 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x4c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xbe, 0x01, 0x0a, 0x1f, 0x4d, 0x55, 0x50, - 0x54, 0x79, 0x70, 0x65, 0x32, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x02, - 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x02, - 0x72, 0x64, 0x12, 0x36, 0x0a, 0x17, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x15, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x65, 0x69, 0x64, 0x22, 0x86, 0x01, 0x0a, 0x14, 0x4d, 0x70, - 0x52, 0x65, 0x61, 0x63, 0x68, 0x4e, 0x4c, 0x52, 0x49, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x12, 0x25, 0x0a, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x6d, 0x69, 0x6c, - 0x79, 0x52, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x65, 0x78, - 0x74, 0x5f, 0x68, 0x6f, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x65, - 0x78, 0x74, 0x48, 0x6f, 0x70, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x6e, 0x6c, 0x72, 0x69, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x6e, 0x6c, 0x72, - 0x69, 0x73, 0x22, 0x6b, 0x0a, 0x16, 0x4d, 0x70, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x63, 0x68, 0x4e, - 0x4c, 0x52, 0x49, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x25, 0x0a, 0x06, - 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x06, 0x66, 0x61, 0x6d, - 0x69, 0x6c, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x6e, 0x6c, 0x72, 0x69, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x6e, 0x6c, 0x72, 0x69, 0x73, 0x22, - 0x8f, 0x01, 0x0a, 0x1a, 0x54, 0x77, 0x6f, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x41, 0x73, 0x53, 0x70, - 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x23, - 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, - 0x69, 0x76, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x61, 0x73, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, 0x6e, - 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x22, 0x98, 0x01, 0x0a, 0x1b, 0x49, 0x50, 0x76, 0x34, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, - 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, - 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x75, 0x62, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x22, 0x90, 0x01, 0x0a, - 0x1b, 0x46, 0x6f, 0x75, 0x72, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x41, 0x73, 0x53, 0x70, 0x65, 0x63, - 0x69, 0x66, 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, - 0x69, 0x73, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, - 0x65, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, - 0x61, 0x73, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, 0x6e, 0x12, 0x1f, - 0x0a, 0x0b, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x22, - 0x47, 0x0a, 0x15, 0x4c, 0x69, 0x6e, 0x6b, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, - 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x61, - 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x62, - 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x2a, 0x0a, 0x12, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x14, - 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x22, 0x25, 0x0a, 0x0d, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x45, 0x78, 0x74, - 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x30, 0x0a, 0x0d, 0x45, - 0x6e, 0x63, 0x61, 0x70, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, - 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0a, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x22, 0x18, 0x0a, - 0x16, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x45, - 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x22, 0x4b, 0x0a, 0x0e, 0x4f, 0x70, 0x61, 0x71, 0x75, - 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0c, 0x69, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x52, 0x0a, 0x10, 0x45, 0x53, 0x49, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x73, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x32, 0x0a, 0x13, 0x45, 0x53, 0x49, 0x6d, - 0x70, 0x6f, 0x72, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, - 0x1b, 0x0a, 0x09, 0x65, 0x73, 0x5f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x65, 0x73, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x55, 0x0a, 0x13, - 0x4d, 0x61, 0x63, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x45, 0x78, 0x74, 0x65, 0x6e, - 0x64, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x73, 0x74, 0x69, 0x63, 0x6b, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x53, 0x74, 0x69, 0x63, 0x6b, 0x79, - 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, - 0x4e, 0x75, 0x6d, 0x22, 0x25, 0x0a, 0x11, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x4d, 0x61, 0x63, - 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x63, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x61, 0x63, 0x22, 0x3b, 0x0a, 0x13, 0x54, 0x72, - 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, - 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, - 0x61, 0x73, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x04, 0x72, 0x61, 0x74, 0x65, 0x22, 0x4b, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x66, 0x66, - 0x69, 0x63, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x22, 0x57, 0x0a, 0x22, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x54, 0x77, 0x6f, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x41, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, - 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, - 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x22, 0x60, 0x0a, - 0x23, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x49, 0x50, 0x76, 0x34, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, - 0x6e, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1f, - 0x0a, 0x0b, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x22, - 0x58, 0x0a, 0x23, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x46, 0x6f, 0x75, 0x72, 0x4f, - 0x63, 0x74, 0x65, 0x74, 0x41, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x45, 0x78, - 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x63, 0x61, - 0x6c, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x22, 0x2b, 0x0a, 0x15, 0x54, 0x72, 0x61, - 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, - 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x73, 0x63, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x04, 0x64, 0x73, 0x63, 0x70, 0x22, 0x6a, 0x0a, 0x0b, 0x4d, 0x55, 0x50, 0x45, 0x78, 0x74, - 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x32, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x32, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x34, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, - 0x64, 0x34, 0x22, 0x45, 0x0a, 0x0c, 0x56, 0x50, 0x4c, 0x53, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, - 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x66, 0x6c, - 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x22, 0x3b, 0x0a, 0x0f, 0x55, 0x6e, 0x6b, - 0x6e, 0x6f, 0x77, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x56, 0x0a, 0x1c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, - 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x41, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x36, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, - 0x79, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x40, - 0x0a, 0x10, 0x41, 0x73, 0x34, 0x50, 0x61, 0x74, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x73, 0x53, - 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x22, 0x44, 0x0a, 0x16, 0x41, 0x73, 0x34, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, - 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, 0x6e, 0x12, 0x18, 0x0a, 0x07, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x65, 0x0a, 0x13, 0x50, 0x6d, 0x73, 0x69, 0x54, 0x75, - 0x6e, 0x6e, 0x65, 0x6c, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, - 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4a, 0x0a, - 0x1e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, - 0x4c, 0x56, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x73, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x06, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x22, 0x37, 0x0a, 0x19, 0x54, 0x75, 0x6e, - 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x22, 0x2e, 0x0a, 0x16, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, - 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, - 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x6c, - 0x6f, 0x72, 0x22, 0x55, 0x0a, 0x1d, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, - 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x53, 0x52, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x56, 0x0a, 0x24, 0x54, 0x75, 0x6e, - 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x53, 0x52, - 0x43, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x74, 0x68, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, - 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x74, 0x68, 0x4e, 0x61, 0x6d, - 0x65, 0x22, 0x39, 0x0a, 0x1b, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, - 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x53, 0x52, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x49, 0x0a, 0x1d, - 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, - 0x56, 0x53, 0x52, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x49, 0x44, 0x12, 0x28, 0x0a, - 0x04, 0x62, 0x73, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, - 0x79, 0x52, 0x04, 0x62, 0x73, 0x69, 0x64, 0x22, 0x4e, 0x0a, 0x0c, 0x53, 0x52, 0x42, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x53, 0x49, 0x44, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x5f, 0x66, 0x6c, 0x61, - 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x15, - 0x0a, 0x06, 0x69, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, - 0x69, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x03, 0x73, 0x69, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x14, 0x53, 0x52, 0x76, 0x36, - 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, - 0x12, 0x2f, 0x0a, 0x08, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x52, 0x76, 0x36, 0x42, - 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x52, 0x08, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, - 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x65, 0x6e, 0x12, 0x19, - 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x66, 0x75, 0x6e, - 0x63, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x66, 0x75, 0x6e, - 0x63, 0x4c, 0x65, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x72, 0x67, 0x5f, 0x6c, 0x65, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x72, 0x67, 0x4c, 0x65, 0x6e, 0x22, 0xc4, 0x01, - 0x0a, 0x0e, 0x53, 0x52, 0x76, 0x36, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x49, 0x44, - 0x12, 0x15, 0x0a, 0x06, 0x73, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x05, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x15, 0x0a, 0x06, 0x69, 0x5f, 0x66, 0x6c, 0x61, - 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x15, - 0x0a, 0x06, 0x62, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, - 0x62, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x03, 0x73, 0x69, 0x64, 0x12, 0x5b, 0x0a, 0x1b, 0x65, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x52, 0x76, 0x36, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x52, 0x19, 0x65, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x53, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x75, 0x72, 0x65, 0x22, 0x54, 0x0a, 0x17, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, - 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x53, 0x52, 0x45, 0x4e, 0x4c, 0x50, 0x12, - 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x23, 0x0a, 0x04, 0x65, 0x6e, 0x6c, 0x70, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x4e, 0x4c, 0x50, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x65, 0x6e, 0x6c, 0x70, 0x22, 0x38, 0x0a, 0x08, 0x53, 0x52, - 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, - 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x77, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x22, 0x6a, 0x0a, 0x0c, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x46, - 0x6c, 0x61, 0x67, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x76, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x15, 0x0a, 0x06, 0x61, - 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x61, 0x46, 0x6c, - 0x61, 0x67, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x05, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x5f, 0x66, - 0x6c, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x62, 0x46, 0x6c, 0x61, 0x67, - 0x22, 0x4f, 0x0a, 0x0c, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x41, - 0x12, 0x29, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x46, - 0x6c, 0x61, 0x67, 0x73, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x22, 0xa8, 0x01, 0x0a, 0x0c, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x42, 0x12, 0x29, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x10, 0x0a, - 0x03, 0x73, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x73, 0x69, 0x64, 0x12, - 0x5b, 0x0a, 0x1b, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x62, 0x65, 0x68, 0x61, - 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x52, 0x76, - 0x36, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, - 0x72, 0x52, 0x19, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x65, 0x68, 0x61, 0x76, - 0x69, 0x6f, 0x72, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x22, 0x7b, 0x0a, 0x1e, - 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, - 0x56, 0x53, 0x52, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x27, - 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, - 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x52, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, - 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x30, 0x0a, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, - 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3b, 0x0a, 0x1f, 0x54, 0x75, 0x6e, - 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x45, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x32, 0x0a, 0x1c, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, - 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x55, 0x44, 0x50, 0x44, 0x65, - 0x73, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x44, 0x0a, 0x18, 0x54, 0x75, - 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x55, - 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x4e, 0x0a, 0x0e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x54, - 0x4c, 0x56, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x74, 0x6c, 0x76, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x74, 0x6c, 0x76, 0x73, - 0x22, 0x41, 0x0a, 0x14, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x41, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x29, 0x0a, 0x04, 0x74, 0x6c, 0x76, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, - 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x54, 0x4c, 0x56, 0x52, 0x04, 0x74, - 0x6c, 0x76, 0x73, 0x22, 0x98, 0x01, 0x0a, 0x1b, 0x49, 0x50, 0x76, 0x36, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, - 0x64, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, - 0x74, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x75, 0x62, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1f, 0x0a, - 0x0b, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x22, 0x60, - 0x0a, 0x23, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x49, 0x50, 0x76, 0x36, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x45, 0x78, 0x74, - 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x22, 0x59, 0x0a, 0x1f, 0x49, 0x50, 0x36, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x43, - 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x12, 0x36, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x0b, - 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x2a, 0x0a, 0x10, 0x41, - 0x69, 0x67, 0x70, 0x54, 0x4c, 0x56, 0x49, 0x47, 0x50, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, - 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x22, 0x3a, 0x0a, 0x0e, 0x41, 0x69, 0x67, 0x70, 0x54, - 0x4c, 0x56, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x39, 0x0a, 0x0d, 0x41, 0x69, 0x67, 0x70, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x74, 0x6c, 0x76, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x74, 0x6c, 0x76, 0x73, 0x22, 0x75, - 0x0a, 0x0e, 0x4c, 0x61, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, - 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x64, 0x61, 0x74, - 0x61, 0x31, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x44, - 0x61, 0x74, 0x61, 0x31, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x64, 0x61, - 0x74, 0x61, 0x32, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, - 0x44, 0x61, 0x74, 0x61, 0x32, 0x22, 0x54, 0x0a, 0x19, 0x4c, 0x61, 0x72, 0x67, 0x65, 0x43, 0x6f, - 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, - 0x4c, 0x61, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x52, 0x0b, - 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x9b, 0x01, 0x0a, 0x0b, - 0x4c, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6f, - 0x76, 0x65, 0x72, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6f, - 0x76, 0x65, 0x72, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, - 0x10, 0x0a, 0x03, 0x61, 0x62, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x62, - 0x72, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x76, 0x36, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x76, 0x36, 0x22, 0x8b, 0x01, 0x0a, 0x0a, 0x4c, 0x73, - 0x49, 0x47, 0x50, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x77, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, - 0x6e, 0x6f, 0x5f, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x09, 0x6e, 0x6f, 0x55, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x73, - 0x73, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, - 0x61, 0x74, 0x65, 0x4e, 0x73, 0x73, 0x61, 0x22, 0x33, 0x0a, 0x09, 0x4c, 0x73, 0x53, 0x72, 0x52, - 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x8a, 0x01, 0x0a, - 0x10, 0x4c, 0x73, 0x53, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x70, 0x76, 0x34, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, - 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x70, 0x76, 0x34, 0x53, - 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x70, 0x76, 0x36, - 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0d, 0x69, 0x70, 0x76, 0x36, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, - 0x28, 0x0a, 0x06, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x53, 0x72, 0x52, 0x61, 0x6e, 0x67, - 0x65, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x0a, 0x0e, 0x4c, 0x73, 0x53, - 0x72, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x28, 0x0a, 0x06, 0x72, - 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, - 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x53, 0x72, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, 0x72, - 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0xfd, 0x02, 0x0a, 0x0f, 0x4c, 0x73, 0x41, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, - 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, - 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, - 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x2b, 0x0a, 0x12, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x5f, 0x76, 0x36, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x6f, 0x63, - 0x61, 0x6c, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x56, 0x36, 0x12, 0x1b, 0x0a, 0x09, - 0x69, 0x73, 0x69, 0x73, 0x5f, 0x61, 0x72, 0x65, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x08, 0x69, 0x73, 0x69, 0x73, 0x41, 0x72, 0x65, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x70, 0x61, - 0x71, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, - 0x65, 0x12, 0x40, 0x0a, 0x0f, 0x73, 0x72, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x53, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x52, 0x0e, 0x73, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x72, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, - 0x74, 0x68, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x73, 0x72, 0x41, 0x6c, - 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x73, 0x12, 0x3b, 0x0a, 0x0e, 0x73, 0x72, 0x5f, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x53, 0x72, 0x4c, 0x6f, 0x63, - 0x61, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0c, 0x73, 0x72, 0x4c, 0x6f, 0x63, 0x61, 0x6c, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x9b, 0x04, 0x0a, 0x0f, 0x4c, 0x73, 0x41, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, - 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x52, 0x6f, 0x75, - 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x12, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x72, - 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x76, 0x36, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, - 0x56, 0x36, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x72, 0x6f, 0x75, - 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x13, - 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x5f, 0x76, 0x36, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x72, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x56, 0x36, 0x12, 0x1f, 0x0a, 0x0b, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0a, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2a, 0x0a, 0x11, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x74, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x54, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x67, 0x70, 0x5f, - 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x69, 0x67, - 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, - 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x09, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x31, 0x0a, - 0x14, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x61, 0x6e, 0x64, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x72, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, - 0x12, 0x31, 0x0a, 0x14, 0x75, 0x6e, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x62, - 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x02, 0x52, 0x13, - 0x75, 0x6e, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x72, 0x5f, 0x61, 0x64, 0x6a, 0x61, 0x63, 0x65, - 0x6e, 0x63, 0x79, 0x5f, 0x73, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x73, - 0x72, 0x41, 0x64, 0x6a, 0x61, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x69, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x73, 0x72, 0x6c, 0x67, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x72, - 0x6c, 0x67, 0x73, 0x22, 0x7f, 0x0a, 0x11, 0x4c, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x2e, 0x0a, 0x09, 0x69, 0x67, 0x70, 0x5f, - 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, - 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x49, 0x47, 0x50, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x08, - 0x69, 0x67, 0x70, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, - 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x73, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x73, 0x72, 0x50, 0x72, 0x65, 0x66, 0x69, - 0x78, 0x53, 0x69, 0x64, 0x22, 0x7e, 0x0a, 0x18, 0x4c, 0x73, 0x42, 0x67, 0x70, 0x50, 0x65, 0x65, - 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x49, 0x44, 0x46, 0x6c, 0x61, 0x67, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, - 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x62, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x74, 0x22, 0x76, 0x0a, 0x13, 0x4c, 0x73, 0x42, 0x67, 0x70, 0x50, 0x65, 0x65, - 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x49, 0x44, 0x12, 0x35, 0x0a, 0x05, 0x66, - 0x6c, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x42, 0x67, 0x70, 0x50, 0x65, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x53, 0x49, 0x44, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x05, 0x66, 0x6c, 0x61, - 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x73, 0x69, 0x64, 0x22, 0xf8, 0x01, 0x0a, - 0x19, 0x4c, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x42, 0x67, 0x70, 0x50, - 0x65, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x11, 0x62, 0x67, - 0x70, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x73, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, - 0x42, 0x67, 0x70, 0x50, 0x65, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x49, - 0x44, 0x52, 0x0e, 0x62, 0x67, 0x70, 0x50, 0x65, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x69, - 0x64, 0x12, 0x4f, 0x0a, 0x16, 0x62, 0x67, 0x70, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x61, 0x64, - 0x6a, 0x61, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x73, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x42, 0x67, 0x70, 0x50, - 0x65, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x49, 0x44, 0x52, 0x13, 0x62, - 0x67, 0x70, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x6a, 0x61, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x53, - 0x69, 0x64, 0x12, 0x43, 0x0a, 0x10, 0x62, 0x67, 0x70, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x73, - 0x65, 0x74, 0x5f, 0x73, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x42, 0x67, 0x70, 0x50, 0x65, 0x65, 0x72, 0x53, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x49, 0x44, 0x52, 0x0d, 0x62, 0x67, 0x70, 0x50, 0x65, 0x65, - 0x72, 0x53, 0x65, 0x74, 0x53, 0x69, 0x64, 0x22, 0xe3, 0x01, 0x0a, 0x0b, 0x4c, 0x73, 0x41, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6e, - 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x41, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x12, - 0x30, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, - 0x78, 0x12, 0x4a, 0x0a, 0x10, 0x62, 0x67, 0x70, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x73, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x70, - 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x42, - 0x67, 0x70, 0x50, 0x65, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x62, - 0x67, 0x70, 0x50, 0x65, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x52, 0x0a, - 0x10, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0xb2, 0x02, 0x0a, 0x16, 0x53, 0x52, 0x76, 0x36, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x53, 0x75, 0x62, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x12, 0x30, 0x0a, 0x14, - 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x6c, 0x6f, 0x63, 0x61, - 0x74, 0x6f, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x2e, - 0x0a, 0x13, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x6f, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x27, - 0x0a, 0x0f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x72, 0x67, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0e, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x12, 0x31, 0x0a, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x12, 0x31, 0x0a, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x13, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x25, 0x0a, 0x0c, 0x53, 0x52, 0x76, 0x36, 0x53, 0x49, - 0x44, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x66, 0x6c, 0x61, 0x67, 0x5f, 0x31, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x31, 0x22, 0x31, 0x0a, - 0x07, 0x53, 0x52, 0x76, 0x36, 0x54, 0x4c, 0x56, 0x12, 0x26, 0x0a, 0x03, 0x74, 0x6c, 0x76, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x03, 0x74, 0x6c, 0x76, - 0x22, 0xa0, 0x02, 0x0a, 0x15, 0x53, 0x52, 0x76, 0x36, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x73, 0x69, 0x64, 0x12, 0x29, 0x0a, 0x05, - 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, - 0x69, 0x70, 0x62, 0x2e, 0x53, 0x52, 0x76, 0x36, 0x53, 0x49, 0x44, 0x46, 0x6c, 0x61, 0x67, 0x73, - 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x10, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x65, 0x68, 0x61, - 0x76, 0x69, 0x6f, 0x72, 0x12, 0x4e, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x5f, 0x73, 0x75, 0x62, 0x5f, - 0x74, 0x6c, 0x76, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x53, 0x52, 0x76, 0x36, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x2e, 0x53, 0x75, 0x62, 0x53, 0x75, 0x62, 0x54, - 0x6c, 0x76, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x73, 0x75, 0x62, 0x53, 0x75, 0x62, - 0x54, 0x6c, 0x76, 0x73, 0x1a, 0x4d, 0x0a, 0x0f, 0x53, 0x75, 0x62, 0x53, 0x75, 0x62, 0x54, 0x6c, - 0x76, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, - 0x2e, 0x53, 0x52, 0x76, 0x36, 0x54, 0x4c, 0x56, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0x9f, 0x01, 0x0a, 0x10, 0x53, 0x52, 0x76, 0x36, 0x4c, 0x33, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x4c, 0x56, 0x12, 0x3f, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x5f, - 0x74, 0x6c, 0x76, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x53, 0x52, 0x76, 0x36, 0x4c, 0x33, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x54, 0x4c, 0x56, 0x2e, 0x53, 0x75, 0x62, 0x54, 0x6c, 0x76, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x07, 0x73, 0x75, 0x62, 0x54, 0x6c, 0x76, 0x73, 0x1a, 0x4a, 0x0a, 0x0c, 0x53, 0x75, 0x62, - 0x54, 0x6c, 0x76, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x53, 0x52, 0x76, 0x36, 0x54, 0x4c, 0x56, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x9f, 0x01, 0x0a, 0x10, 0x53, 0x52, 0x76, 0x36, 0x4c, 0x32, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x4c, 0x56, 0x12, 0x3f, 0x0a, 0x08, 0x73, 0x75, - 0x62, 0x5f, 0x74, 0x6c, 0x76, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x52, 0x76, 0x36, 0x4c, 0x32, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x54, 0x4c, 0x56, 0x2e, 0x53, 0x75, 0x62, 0x54, 0x6c, 0x76, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x07, 0x73, 0x75, 0x62, 0x54, 0x6c, 0x76, 0x73, 0x1a, 0x4a, 0x0a, 0x0c, 0x53, - 0x75, 0x62, 0x54, 0x6c, 0x76, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x24, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x52, 0x76, 0x36, 0x54, 0x4c, 0x56, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x35, 0x0a, 0x09, 0x50, 0x72, 0x65, 0x66, 0x69, - 0x78, 0x53, 0x49, 0x44, 0x12, 0x28, 0x0a, 0x04, 0x74, 0x6c, 0x76, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x74, 0x6c, 0x76, 0x73, 0x2a, 0xf7, - 0x01, 0x0a, 0x0f, 0x4c, 0x73, 0x4f, 0x73, 0x70, 0x66, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x4c, 0x53, 0x5f, 0x4f, 0x53, 0x50, 0x46, 0x5f, 0x52, 0x4f, - 0x55, 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, - 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x4c, 0x53, 0x5f, 0x4f, 0x53, 0x50, 0x46, 0x5f, 0x52, 0x4f, - 0x55, 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x52, 0x41, 0x5f, 0x41, - 0x52, 0x45, 0x41, 0x10, 0x01, 0x12, 0x21, 0x0a, 0x1d, 0x4c, 0x53, 0x5f, 0x4f, 0x53, 0x50, 0x46, - 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x45, - 0x52, 0x5f, 0x41, 0x52, 0x45, 0x41, 0x10, 0x02, 0x12, 0x20, 0x0a, 0x1c, 0x4c, 0x53, 0x5f, 0x4f, - 0x53, 0x50, 0x46, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, - 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x31, 0x10, 0x03, 0x12, 0x20, 0x0a, 0x1c, 0x4c, 0x53, - 0x5f, 0x4f, 0x53, 0x50, 0x46, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x32, 0x10, 0x04, 0x12, 0x1c, 0x0a, 0x18, - 0x4c, 0x53, 0x5f, 0x4f, 0x53, 0x50, 0x46, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x4e, 0x53, 0x53, 0x41, 0x31, 0x10, 0x05, 0x12, 0x1c, 0x0a, 0x18, 0x4c, 0x53, - 0x5f, 0x4f, 0x53, 0x50, 0x46, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x4e, 0x53, 0x53, 0x41, 0x32, 0x10, 0x06, 0x2a, 0x73, 0x0a, 0x0a, 0x4c, 0x73, 0x4e, 0x4c, - 0x52, 0x49, 0x54, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x53, 0x5f, 0x4e, 0x4c, 0x52, - 0x49, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4c, - 0x53, 0x5f, 0x4e, 0x4c, 0x52, 0x49, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x01, 0x12, 0x10, 0x0a, - 0x0c, 0x4c, 0x53, 0x5f, 0x4e, 0x4c, 0x52, 0x49, 0x5f, 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0x02, 0x12, - 0x15, 0x0a, 0x11, 0x4c, 0x53, 0x5f, 0x4e, 0x4c, 0x52, 0x49, 0x5f, 0x50, 0x52, 0x45, 0x46, 0x49, - 0x58, 0x5f, 0x56, 0x34, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x53, 0x5f, 0x4e, 0x4c, 0x52, - 0x49, 0x5f, 0x50, 0x52, 0x45, 0x46, 0x49, 0x58, 0x5f, 0x56, 0x36, 0x10, 0x04, 0x2a, 0xbb, 0x01, - 0x0a, 0x0c, 0x4c, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x49, 0x44, 0x12, 0x17, - 0x0a, 0x13, 0x4c, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x55, 0x4e, - 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x4c, 0x53, 0x5f, 0x50, 0x52, - 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x49, 0x53, 0x49, 0x53, 0x5f, 0x4c, 0x31, 0x10, 0x01, - 0x12, 0x17, 0x0a, 0x13, 0x4c, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, - 0x49, 0x53, 0x49, 0x53, 0x5f, 0x4c, 0x32, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x4c, 0x53, 0x5f, - 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x4f, 0x53, 0x50, 0x46, 0x5f, 0x56, 0x32, - 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x4c, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, - 0x4c, 0x5f, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x4c, 0x53, - 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, - 0x10, 0x05, 0x12, 0x17, 0x0a, 0x13, 0x4c, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, - 0x4c, 0x5f, 0x4f, 0x53, 0x50, 0x46, 0x5f, 0x56, 0x33, 0x10, 0x06, 0x2a, 0xed, 0x05, 0x0a, 0x0c, - 0x53, 0x52, 0x76, 0x36, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x0c, 0x0a, 0x08, - 0x52, 0x45, 0x53, 0x45, 0x52, 0x56, 0x45, 0x44, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x45, 0x4e, - 0x44, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x45, 0x4e, 0x44, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, - 0x50, 0x53, 0x50, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x45, 0x4e, 0x44, 0x5f, 0x57, 0x49, 0x54, - 0x48, 0x5f, 0x55, 0x53, 0x50, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x45, 0x4e, 0x44, 0x5f, 0x57, - 0x49, 0x54, 0x48, 0x5f, 0x50, 0x53, 0x50, 0x5f, 0x55, 0x53, 0x50, 0x10, 0x04, 0x12, 0x08, 0x0a, - 0x04, 0x45, 0x4e, 0x44, 0x58, 0x10, 0x05, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x4e, 0x44, 0x58, 0x5f, - 0x57, 0x49, 0x54, 0x48, 0x5f, 0x50, 0x53, 0x50, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x4e, - 0x44, 0x58, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x55, 0x53, 0x50, 0x10, 0x07, 0x12, 0x15, 0x0a, - 0x11, 0x45, 0x4e, 0x44, 0x58, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x50, 0x53, 0x50, 0x5f, 0x55, - 0x53, 0x50, 0x10, 0x08, 0x12, 0x08, 0x0a, 0x04, 0x45, 0x4e, 0x44, 0x54, 0x10, 0x09, 0x12, 0x11, - 0x0a, 0x0d, 0x45, 0x4e, 0x44, 0x54, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x50, 0x53, 0x50, 0x10, - 0x0a, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x4e, 0x44, 0x54, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x55, - 0x53, 0x50, 0x10, 0x0b, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x4e, 0x44, 0x54, 0x5f, 0x57, 0x49, 0x54, - 0x48, 0x5f, 0x50, 0x53, 0x50, 0x5f, 0x55, 0x53, 0x50, 0x10, 0x0c, 0x12, 0x11, 0x0a, 0x0d, 0x45, - 0x4e, 0x44, 0x5f, 0x42, 0x36, 0x5f, 0x45, 0x4e, 0x43, 0x41, 0x50, 0x53, 0x10, 0x0e, 0x12, 0x0a, - 0x0a, 0x06, 0x45, 0x4e, 0x44, 0x5f, 0x42, 0x4d, 0x10, 0x0f, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x4e, - 0x44, 0x5f, 0x44, 0x58, 0x36, 0x10, 0x10, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x4e, 0x44, 0x5f, 0x44, - 0x58, 0x34, 0x10, 0x11, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x4e, 0x44, 0x5f, 0x44, 0x54, 0x36, 0x10, - 0x12, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x4e, 0x44, 0x5f, 0x44, 0x54, 0x34, 0x10, 0x13, 0x12, 0x0c, - 0x0a, 0x08, 0x45, 0x4e, 0x44, 0x5f, 0x44, 0x54, 0x34, 0x36, 0x10, 0x14, 0x12, 0x0b, 0x0a, 0x07, - 0x45, 0x4e, 0x44, 0x5f, 0x44, 0x58, 0x32, 0x10, 0x15, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x4e, 0x44, - 0x5f, 0x44, 0x58, 0x32, 0x56, 0x10, 0x16, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x4e, 0x44, 0x5f, 0x44, - 0x54, 0x32, 0x55, 0x10, 0x17, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x4e, 0x44, 0x5f, 0x44, 0x54, 0x32, - 0x4d, 0x10, 0x18, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x4e, 0x44, 0x5f, 0x42, 0x36, 0x5f, 0x45, 0x4e, - 0x43, 0x41, 0x50, 0x53, 0x5f, 0x52, 0x65, 0x64, 0x10, 0x1b, 0x12, 0x10, 0x0a, 0x0c, 0x45, 0x4e, - 0x44, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x55, 0x53, 0x44, 0x10, 0x1c, 0x12, 0x14, 0x0a, 0x10, - 0x45, 0x4e, 0x44, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x50, 0x53, 0x50, 0x5f, 0x55, 0x53, 0x44, - 0x10, 0x1d, 0x12, 0x14, 0x0a, 0x10, 0x45, 0x4e, 0x44, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x55, - 0x53, 0x50, 0x5f, 0x55, 0x53, 0x44, 0x10, 0x1e, 0x12, 0x18, 0x0a, 0x14, 0x45, 0x4e, 0x44, 0x5f, - 0x57, 0x49, 0x54, 0x48, 0x5f, 0x50, 0x53, 0x50, 0x5f, 0x55, 0x53, 0x50, 0x5f, 0x55, 0x53, 0x44, - 0x10, 0x1f, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x4e, 0x44, 0x58, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, - 0x55, 0x53, 0x44, 0x10, 0x20, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x4e, 0x44, 0x58, 0x5f, 0x57, 0x49, - 0x54, 0x48, 0x5f, 0x50, 0x53, 0x50, 0x5f, 0x55, 0x53, 0x44, 0x10, 0x21, 0x12, 0x15, 0x0a, 0x11, - 0x45, 0x4e, 0x44, 0x58, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x55, 0x53, 0x50, 0x5f, 0x55, 0x53, - 0x44, 0x10, 0x22, 0x12, 0x19, 0x0a, 0x15, 0x45, 0x4e, 0x44, 0x58, 0x5f, 0x57, 0x49, 0x54, 0x48, - 0x5f, 0x50, 0x53, 0x50, 0x5f, 0x55, 0x53, 0x50, 0x5f, 0x55, 0x53, 0x44, 0x10, 0x23, 0x12, 0x11, - 0x0a, 0x0d, 0x45, 0x4e, 0x44, 0x54, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x55, 0x53, 0x44, 0x10, - 0x24, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x4e, 0x44, 0x54, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x50, - 0x53, 0x50, 0x5f, 0x55, 0x53, 0x44, 0x10, 0x25, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x4e, 0x44, 0x54, - 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x55, 0x53, 0x50, 0x5f, 0x55, 0x53, 0x44, 0x10, 0x26, 0x12, - 0x19, 0x0a, 0x15, 0x45, 0x4e, 0x44, 0x54, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x50, 0x53, 0x50, - 0x5f, 0x55, 0x53, 0x50, 0x5f, 0x55, 0x53, 0x44, 0x10, 0x27, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x4e, - 0x44, 0x4d, 0x5f, 0x47, 0x54, 0x50, 0x36, 0x44, 0x10, 0x45, 0x12, 0x0f, 0x0a, 0x0b, 0x45, 0x4e, - 0x44, 0x4d, 0x5f, 0x47, 0x54, 0x50, 0x36, 0x44, 0x49, 0x10, 0x46, 0x12, 0x0e, 0x0a, 0x0a, 0x45, - 0x4e, 0x44, 0x4d, 0x5f, 0x47, 0x54, 0x50, 0x36, 0x45, 0x10, 0x47, 0x12, 0x0e, 0x0a, 0x0a, 0x45, - 0x4e, 0x44, 0x4d, 0x5f, 0x47, 0x54, 0x50, 0x34, 0x45, 0x10, 0x48, 0x2a, 0x44, 0x0a, 0x08, 0x45, - 0x4e, 0x4c, 0x50, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x64, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x79, 0x70, 0x65, 0x31, 0x10, 0x01, - 0x12, 0x09, 0x0a, 0x05, 0x54, 0x79, 0x70, 0x65, 0x32, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x54, - 0x79, 0x70, 0x65, 0x33, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x79, 0x70, 0x65, 0x34, 0x10, - 0x04, 0x42, 0x24, 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x6f, 0x73, 0x72, 0x67, 0x2f, 0x67, 0x6f, 0x62, 0x67, 0x70, 0x2f, 0x76, 0x33, 0x2f, 0x61, 0x70, - 0x69, 0x3b, 0x61, 0x70, 0x69, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_attribute_proto_rawDescOnce sync.Once - file_attribute_proto_rawDescData = file_attribute_proto_rawDesc -) - -func file_attribute_proto_rawDescGZIP() []byte { - file_attribute_proto_rawDescOnce.Do(func() { - file_attribute_proto_rawDescData = protoimpl.X.CompressGZIP(file_attribute_proto_rawDescData) - }) - return file_attribute_proto_rawDescData -} - -var file_attribute_proto_enumTypes = make([]protoimpl.EnumInfo, 6) -var file_attribute_proto_msgTypes = make([]protoimpl.MessageInfo, 127) -var file_attribute_proto_goTypes = []interface{}{ - (LsOspfRouteType)(0), // 0: apipb.LsOspfRouteType - (LsNLRIType)(0), // 1: apipb.LsNLRIType - (LsProtocolID)(0), // 2: apipb.LsProtocolID - (SRv6Behavior)(0), // 3: apipb.SRv6Behavior - (ENLPType)(0), // 4: apipb.ENLPType - (AsSegment_Type)(0), // 5: apipb.AsSegment.Type - (*OriginAttribute)(nil), // 6: apipb.OriginAttribute - (*AsSegment)(nil), // 7: apipb.AsSegment - (*AsPathAttribute)(nil), // 8: apipb.AsPathAttribute - (*NextHopAttribute)(nil), // 9: apipb.NextHopAttribute - (*MultiExitDiscAttribute)(nil), // 10: apipb.MultiExitDiscAttribute - (*LocalPrefAttribute)(nil), // 11: apipb.LocalPrefAttribute - (*AtomicAggregateAttribute)(nil), // 12: apipb.AtomicAggregateAttribute - (*AggregatorAttribute)(nil), // 13: apipb.AggregatorAttribute - (*CommunitiesAttribute)(nil), // 14: apipb.CommunitiesAttribute - (*OriginatorIdAttribute)(nil), // 15: apipb.OriginatorIdAttribute - (*ClusterListAttribute)(nil), // 16: apipb.ClusterListAttribute - (*IPAddressPrefix)(nil), // 17: apipb.IPAddressPrefix - (*LabeledIPAddressPrefix)(nil), // 18: apipb.LabeledIPAddressPrefix - (*EncapsulationNLRI)(nil), // 19: apipb.EncapsulationNLRI - (*RouteDistinguisherTwoOctetASN)(nil), // 20: apipb.RouteDistinguisherTwoOctetASN - (*RouteDistinguisherIPAddress)(nil), // 21: apipb.RouteDistinguisherIPAddress - (*RouteDistinguisherFourOctetASN)(nil), // 22: apipb.RouteDistinguisherFourOctetASN - (*EthernetSegmentIdentifier)(nil), // 23: apipb.EthernetSegmentIdentifier - (*VPLSNLRI)(nil), // 24: apipb.VPLSNLRI - (*EVPNEthernetAutoDiscoveryRoute)(nil), // 25: apipb.EVPNEthernetAutoDiscoveryRoute - (*EVPNMACIPAdvertisementRoute)(nil), // 26: apipb.EVPNMACIPAdvertisementRoute - (*EVPNInclusiveMulticastEthernetTagRoute)(nil), // 27: apipb.EVPNInclusiveMulticastEthernetTagRoute - (*EVPNEthernetSegmentRoute)(nil), // 28: apipb.EVPNEthernetSegmentRoute - (*EVPNIPPrefixRoute)(nil), // 29: apipb.EVPNIPPrefixRoute - (*EVPNIPMSIRoute)(nil), // 30: apipb.EVPNIPMSIRoute - (*SRPolicyNLRI)(nil), // 31: apipb.SRPolicyNLRI - (*LabeledVPNIPAddressPrefix)(nil), // 32: apipb.LabeledVPNIPAddressPrefix - (*RouteTargetMembershipNLRI)(nil), // 33: apipb.RouteTargetMembershipNLRI - (*FlowSpecIPPrefix)(nil), // 34: apipb.FlowSpecIPPrefix - (*FlowSpecMAC)(nil), // 35: apipb.FlowSpecMAC - (*FlowSpecComponentItem)(nil), // 36: apipb.FlowSpecComponentItem - (*FlowSpecComponent)(nil), // 37: apipb.FlowSpecComponent - (*FlowSpecNLRI)(nil), // 38: apipb.FlowSpecNLRI - (*VPNFlowSpecNLRI)(nil), // 39: apipb.VPNFlowSpecNLRI - (*OpaqueNLRI)(nil), // 40: apipb.OpaqueNLRI - (*LsNodeDescriptor)(nil), // 41: apipb.LsNodeDescriptor - (*LsLinkDescriptor)(nil), // 42: apipb.LsLinkDescriptor - (*LsPrefixDescriptor)(nil), // 43: apipb.LsPrefixDescriptor - (*LsNodeNLRI)(nil), // 44: apipb.LsNodeNLRI - (*LsLinkNLRI)(nil), // 45: apipb.LsLinkNLRI - (*LsPrefixV4NLRI)(nil), // 46: apipb.LsPrefixV4NLRI - (*LsPrefixV6NLRI)(nil), // 47: apipb.LsPrefixV6NLRI - (*LsAddrPrefix)(nil), // 48: apipb.LsAddrPrefix - (*MUPInterworkSegmentDiscoveryRoute)(nil), // 49: apipb.MUPInterworkSegmentDiscoveryRoute - (*MUPDirectSegmentDiscoveryRoute)(nil), // 50: apipb.MUPDirectSegmentDiscoveryRoute - (*MUPType1SessionTransformedRoute)(nil), // 51: apipb.MUPType1SessionTransformedRoute - (*MUPType2SessionTransformedRoute)(nil), // 52: apipb.MUPType2SessionTransformedRoute - (*MpReachNLRIAttribute)(nil), // 53: apipb.MpReachNLRIAttribute - (*MpUnreachNLRIAttribute)(nil), // 54: apipb.MpUnreachNLRIAttribute - (*TwoOctetAsSpecificExtended)(nil), // 55: apipb.TwoOctetAsSpecificExtended - (*IPv4AddressSpecificExtended)(nil), // 56: apipb.IPv4AddressSpecificExtended - (*FourOctetAsSpecificExtended)(nil), // 57: apipb.FourOctetAsSpecificExtended - (*LinkBandwidthExtended)(nil), // 58: apipb.LinkBandwidthExtended - (*ValidationExtended)(nil), // 59: apipb.ValidationExtended - (*ColorExtended)(nil), // 60: apipb.ColorExtended - (*EncapExtended)(nil), // 61: apipb.EncapExtended - (*DefaultGatewayExtended)(nil), // 62: apipb.DefaultGatewayExtended - (*OpaqueExtended)(nil), // 63: apipb.OpaqueExtended - (*ESILabelExtended)(nil), // 64: apipb.ESILabelExtended - (*ESImportRouteTarget)(nil), // 65: apipb.ESImportRouteTarget - (*MacMobilityExtended)(nil), // 66: apipb.MacMobilityExtended - (*RouterMacExtended)(nil), // 67: apipb.RouterMacExtended - (*TrafficRateExtended)(nil), // 68: apipb.TrafficRateExtended - (*TrafficActionExtended)(nil), // 69: apipb.TrafficActionExtended - (*RedirectTwoOctetAsSpecificExtended)(nil), // 70: apipb.RedirectTwoOctetAsSpecificExtended - (*RedirectIPv4AddressSpecificExtended)(nil), // 71: apipb.RedirectIPv4AddressSpecificExtended - (*RedirectFourOctetAsSpecificExtended)(nil), // 72: apipb.RedirectFourOctetAsSpecificExtended - (*TrafficRemarkExtended)(nil), // 73: apipb.TrafficRemarkExtended - (*MUPExtended)(nil), // 74: apipb.MUPExtended - (*VPLSExtended)(nil), // 75: apipb.VPLSExtended - (*UnknownExtended)(nil), // 76: apipb.UnknownExtended - (*ExtendedCommunitiesAttribute)(nil), // 77: apipb.ExtendedCommunitiesAttribute - (*As4PathAttribute)(nil), // 78: apipb.As4PathAttribute - (*As4AggregatorAttribute)(nil), // 79: apipb.As4AggregatorAttribute - (*PmsiTunnelAttribute)(nil), // 80: apipb.PmsiTunnelAttribute - (*TunnelEncapSubTLVEncapsulation)(nil), // 81: apipb.TunnelEncapSubTLVEncapsulation - (*TunnelEncapSubTLVProtocol)(nil), // 82: apipb.TunnelEncapSubTLVProtocol - (*TunnelEncapSubTLVColor)(nil), // 83: apipb.TunnelEncapSubTLVColor - (*TunnelEncapSubTLVSRPreference)(nil), // 84: apipb.TunnelEncapSubTLVSRPreference - (*TunnelEncapSubTLVSRCandidatePathName)(nil), // 85: apipb.TunnelEncapSubTLVSRCandidatePathName - (*TunnelEncapSubTLVSRPriority)(nil), // 86: apipb.TunnelEncapSubTLVSRPriority - (*TunnelEncapSubTLVSRBindingSID)(nil), // 87: apipb.TunnelEncapSubTLVSRBindingSID - (*SRBindingSID)(nil), // 88: apipb.SRBindingSID - (*SRv6EndPointBehavior)(nil), // 89: apipb.SRv6EndPointBehavior - (*SRv6BindingSID)(nil), // 90: apipb.SRv6BindingSID - (*TunnelEncapSubTLVSRENLP)(nil), // 91: apipb.TunnelEncapSubTLVSRENLP - (*SRWeight)(nil), // 92: apipb.SRWeight - (*SegmentFlags)(nil), // 93: apipb.SegmentFlags - (*SegmentTypeA)(nil), // 94: apipb.SegmentTypeA - (*SegmentTypeB)(nil), // 95: apipb.SegmentTypeB - (*TunnelEncapSubTLVSRSegmentList)(nil), // 96: apipb.TunnelEncapSubTLVSRSegmentList - (*TunnelEncapSubTLVEgressEndpoint)(nil), // 97: apipb.TunnelEncapSubTLVEgressEndpoint - (*TunnelEncapSubTLVUDPDestPort)(nil), // 98: apipb.TunnelEncapSubTLVUDPDestPort - (*TunnelEncapSubTLVUnknown)(nil), // 99: apipb.TunnelEncapSubTLVUnknown - (*TunnelEncapTLV)(nil), // 100: apipb.TunnelEncapTLV - (*TunnelEncapAttribute)(nil), // 101: apipb.TunnelEncapAttribute - (*IPv6AddressSpecificExtended)(nil), // 102: apipb.IPv6AddressSpecificExtended - (*RedirectIPv6AddressSpecificExtended)(nil), // 103: apipb.RedirectIPv6AddressSpecificExtended - (*IP6ExtendedCommunitiesAttribute)(nil), // 104: apipb.IP6ExtendedCommunitiesAttribute - (*AigpTLVIGPMetric)(nil), // 105: apipb.AigpTLVIGPMetric - (*AigpTLVUnknown)(nil), // 106: apipb.AigpTLVUnknown - (*AigpAttribute)(nil), // 107: apipb.AigpAttribute - (*LargeCommunity)(nil), // 108: apipb.LargeCommunity - (*LargeCommunitiesAttribute)(nil), // 109: apipb.LargeCommunitiesAttribute - (*LsNodeFlags)(nil), // 110: apipb.LsNodeFlags - (*LsIGPFlags)(nil), // 111: apipb.LsIGPFlags - (*LsSrRange)(nil), // 112: apipb.LsSrRange - (*LsSrCapabilities)(nil), // 113: apipb.LsSrCapabilities - (*LsSrLocalBlock)(nil), // 114: apipb.LsSrLocalBlock - (*LsAttributeNode)(nil), // 115: apipb.LsAttributeNode - (*LsAttributeLink)(nil), // 116: apipb.LsAttributeLink - (*LsAttributePrefix)(nil), // 117: apipb.LsAttributePrefix - (*LsBgpPeerSegmentSIDFlags)(nil), // 118: apipb.LsBgpPeerSegmentSIDFlags - (*LsBgpPeerSegmentSID)(nil), // 119: apipb.LsBgpPeerSegmentSID - (*LsAttributeBgpPeerSegment)(nil), // 120: apipb.LsAttributeBgpPeerSegment - (*LsAttribute)(nil), // 121: apipb.LsAttribute - (*UnknownAttribute)(nil), // 122: apipb.UnknownAttribute - (*SRv6StructureSubSubTLV)(nil), // 123: apipb.SRv6StructureSubSubTLV - (*SRv6SIDFlags)(nil), // 124: apipb.SRv6SIDFlags - (*SRv6TLV)(nil), // 125: apipb.SRv6TLV - (*SRv6InformationSubTLV)(nil), // 126: apipb.SRv6InformationSubTLV - (*SRv6L3ServiceTLV)(nil), // 127: apipb.SRv6L3ServiceTLV - (*SRv6L2ServiceTLV)(nil), // 128: apipb.SRv6L2ServiceTLV - (*PrefixSID)(nil), // 129: apipb.PrefixSID - nil, // 130: apipb.SRv6InformationSubTLV.SubSubTlvsEntry - nil, // 131: apipb.SRv6L3ServiceTLV.SubTlvsEntry - nil, // 132: apipb.SRv6L2ServiceTLV.SubTlvsEntry - (*anypb.Any)(nil), // 133: google.protobuf.Any - (*Family)(nil), // 134: apipb.Family -} -var file_attribute_proto_depIdxs = []int32{ - 5, // 0: apipb.AsSegment.type:type_name -> apipb.AsSegment.Type - 7, // 1: apipb.AsPathAttribute.segments:type_name -> apipb.AsSegment - 133, // 2: apipb.VPLSNLRI.rd:type_name -> google.protobuf.Any - 133, // 3: apipb.EVPNEthernetAutoDiscoveryRoute.rd:type_name -> google.protobuf.Any - 23, // 4: apipb.EVPNEthernetAutoDiscoveryRoute.esi:type_name -> apipb.EthernetSegmentIdentifier - 133, // 5: apipb.EVPNMACIPAdvertisementRoute.rd:type_name -> google.protobuf.Any - 23, // 6: apipb.EVPNMACIPAdvertisementRoute.esi:type_name -> apipb.EthernetSegmentIdentifier - 133, // 7: apipb.EVPNInclusiveMulticastEthernetTagRoute.rd:type_name -> google.protobuf.Any - 133, // 8: apipb.EVPNEthernetSegmentRoute.rd:type_name -> google.protobuf.Any - 23, // 9: apipb.EVPNEthernetSegmentRoute.esi:type_name -> apipb.EthernetSegmentIdentifier - 133, // 10: apipb.EVPNIPPrefixRoute.rd:type_name -> google.protobuf.Any - 23, // 11: apipb.EVPNIPPrefixRoute.esi:type_name -> apipb.EthernetSegmentIdentifier - 133, // 12: apipb.EVPNIPMSIRoute.rd:type_name -> google.protobuf.Any - 133, // 13: apipb.EVPNIPMSIRoute.rt:type_name -> google.protobuf.Any - 133, // 14: apipb.LabeledVPNIPAddressPrefix.rd:type_name -> google.protobuf.Any - 133, // 15: apipb.RouteTargetMembershipNLRI.rt:type_name -> google.protobuf.Any - 36, // 16: apipb.FlowSpecComponent.items:type_name -> apipb.FlowSpecComponentItem - 133, // 17: apipb.FlowSpecNLRI.rules:type_name -> google.protobuf.Any - 133, // 18: apipb.VPNFlowSpecNLRI.rd:type_name -> google.protobuf.Any - 133, // 19: apipb.VPNFlowSpecNLRI.rules:type_name -> google.protobuf.Any - 0, // 20: apipb.LsPrefixDescriptor.ospf_route_type:type_name -> apipb.LsOspfRouteType - 41, // 21: apipb.LsNodeNLRI.local_node:type_name -> apipb.LsNodeDescriptor - 41, // 22: apipb.LsLinkNLRI.local_node:type_name -> apipb.LsNodeDescriptor - 41, // 23: apipb.LsLinkNLRI.remote_node:type_name -> apipb.LsNodeDescriptor - 42, // 24: apipb.LsLinkNLRI.link_descriptor:type_name -> apipb.LsLinkDescriptor - 41, // 25: apipb.LsPrefixV4NLRI.local_node:type_name -> apipb.LsNodeDescriptor - 43, // 26: apipb.LsPrefixV4NLRI.prefix_descriptor:type_name -> apipb.LsPrefixDescriptor - 41, // 27: apipb.LsPrefixV6NLRI.local_node:type_name -> apipb.LsNodeDescriptor - 43, // 28: apipb.LsPrefixV6NLRI.prefix_descriptor:type_name -> apipb.LsPrefixDescriptor - 1, // 29: apipb.LsAddrPrefix.type:type_name -> apipb.LsNLRIType - 133, // 30: apipb.LsAddrPrefix.nlri:type_name -> google.protobuf.Any - 2, // 31: apipb.LsAddrPrefix.protocol_id:type_name -> apipb.LsProtocolID - 133, // 32: apipb.MUPInterworkSegmentDiscoveryRoute.rd:type_name -> google.protobuf.Any - 133, // 33: apipb.MUPDirectSegmentDiscoveryRoute.rd:type_name -> google.protobuf.Any - 133, // 34: apipb.MUPType1SessionTransformedRoute.rd:type_name -> google.protobuf.Any - 133, // 35: apipb.MUPType2SessionTransformedRoute.rd:type_name -> google.protobuf.Any - 134, // 36: apipb.MpReachNLRIAttribute.family:type_name -> apipb.Family - 133, // 37: apipb.MpReachNLRIAttribute.nlris:type_name -> google.protobuf.Any - 134, // 38: apipb.MpUnreachNLRIAttribute.family:type_name -> apipb.Family - 133, // 39: apipb.MpUnreachNLRIAttribute.nlris:type_name -> google.protobuf.Any - 133, // 40: apipb.ExtendedCommunitiesAttribute.communities:type_name -> google.protobuf.Any - 7, // 41: apipb.As4PathAttribute.segments:type_name -> apipb.AsSegment - 133, // 42: apipb.TunnelEncapSubTLVSRBindingSID.bsid:type_name -> google.protobuf.Any - 3, // 43: apipb.SRv6EndPointBehavior.behavior:type_name -> apipb.SRv6Behavior - 89, // 44: apipb.SRv6BindingSID.endpoint_behavior_structure:type_name -> apipb.SRv6EndPointBehavior - 4, // 45: apipb.TunnelEncapSubTLVSRENLP.enlp:type_name -> apipb.ENLPType - 93, // 46: apipb.SegmentTypeA.flags:type_name -> apipb.SegmentFlags - 93, // 47: apipb.SegmentTypeB.flags:type_name -> apipb.SegmentFlags - 89, // 48: apipb.SegmentTypeB.endpoint_behavior_structure:type_name -> apipb.SRv6EndPointBehavior - 92, // 49: apipb.TunnelEncapSubTLVSRSegmentList.weight:type_name -> apipb.SRWeight - 133, // 50: apipb.TunnelEncapSubTLVSRSegmentList.segments:type_name -> google.protobuf.Any - 133, // 51: apipb.TunnelEncapTLV.tlvs:type_name -> google.protobuf.Any - 100, // 52: apipb.TunnelEncapAttribute.tlvs:type_name -> apipb.TunnelEncapTLV - 133, // 53: apipb.IP6ExtendedCommunitiesAttribute.communities:type_name -> google.protobuf.Any - 133, // 54: apipb.AigpAttribute.tlvs:type_name -> google.protobuf.Any - 108, // 55: apipb.LargeCommunitiesAttribute.communities:type_name -> apipb.LargeCommunity - 112, // 56: apipb.LsSrCapabilities.ranges:type_name -> apipb.LsSrRange - 112, // 57: apipb.LsSrLocalBlock.ranges:type_name -> apipb.LsSrRange - 110, // 58: apipb.LsAttributeNode.flags:type_name -> apipb.LsNodeFlags - 113, // 59: apipb.LsAttributeNode.sr_capabilities:type_name -> apipb.LsSrCapabilities - 114, // 60: apipb.LsAttributeNode.sr_local_block:type_name -> apipb.LsSrLocalBlock - 111, // 61: apipb.LsAttributePrefix.igp_flags:type_name -> apipb.LsIGPFlags - 118, // 62: apipb.LsBgpPeerSegmentSID.flags:type_name -> apipb.LsBgpPeerSegmentSIDFlags - 119, // 63: apipb.LsAttributeBgpPeerSegment.bgp_peer_node_sid:type_name -> apipb.LsBgpPeerSegmentSID - 119, // 64: apipb.LsAttributeBgpPeerSegment.bgp_peer_adjacency_sid:type_name -> apipb.LsBgpPeerSegmentSID - 119, // 65: apipb.LsAttributeBgpPeerSegment.bgp_peer_set_sid:type_name -> apipb.LsBgpPeerSegmentSID - 115, // 66: apipb.LsAttribute.node:type_name -> apipb.LsAttributeNode - 116, // 67: apipb.LsAttribute.link:type_name -> apipb.LsAttributeLink - 117, // 68: apipb.LsAttribute.prefix:type_name -> apipb.LsAttributePrefix - 120, // 69: apipb.LsAttribute.bgp_peer_segment:type_name -> apipb.LsAttributeBgpPeerSegment - 133, // 70: apipb.SRv6TLV.tlv:type_name -> google.protobuf.Any - 124, // 71: apipb.SRv6InformationSubTLV.flags:type_name -> apipb.SRv6SIDFlags - 130, // 72: apipb.SRv6InformationSubTLV.sub_sub_tlvs:type_name -> apipb.SRv6InformationSubTLV.SubSubTlvsEntry - 131, // 73: apipb.SRv6L3ServiceTLV.sub_tlvs:type_name -> apipb.SRv6L3ServiceTLV.SubTlvsEntry - 132, // 74: apipb.SRv6L2ServiceTLV.sub_tlvs:type_name -> apipb.SRv6L2ServiceTLV.SubTlvsEntry - 133, // 75: apipb.PrefixSID.tlvs:type_name -> google.protobuf.Any - 125, // 76: apipb.SRv6InformationSubTLV.SubSubTlvsEntry.value:type_name -> apipb.SRv6TLV - 125, // 77: apipb.SRv6L3ServiceTLV.SubTlvsEntry.value:type_name -> apipb.SRv6TLV - 125, // 78: apipb.SRv6L2ServiceTLV.SubTlvsEntry.value:type_name -> apipb.SRv6TLV - 79, // [79:79] is the sub-list for method output_type - 79, // [79:79] is the sub-list for method input_type - 79, // [79:79] is the sub-list for extension type_name - 79, // [79:79] is the sub-list for extension extendee - 0, // [0:79] is the sub-list for field type_name -} - -func init() { file_attribute_proto_init() } -func file_attribute_proto_init() { - if File_attribute_proto != nil { - return - } - file_gobgp_proto_init() - if !protoimpl.UnsafeEnabled { - file_attribute_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OriginAttribute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AsSegment); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AsPathAttribute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NextHopAttribute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MultiExitDiscAttribute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LocalPrefAttribute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AtomicAggregateAttribute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggregatorAttribute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommunitiesAttribute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OriginatorIdAttribute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterListAttribute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IPAddressPrefix); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LabeledIPAddressPrefix); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EncapsulationNLRI); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RouteDistinguisherTwoOctetASN); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RouteDistinguisherIPAddress); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RouteDistinguisherFourOctetASN); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EthernetSegmentIdentifier); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VPLSNLRI); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EVPNEthernetAutoDiscoveryRoute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EVPNMACIPAdvertisementRoute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EVPNInclusiveMulticastEthernetTagRoute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EVPNEthernetSegmentRoute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EVPNIPPrefixRoute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EVPNIPMSIRoute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SRPolicyNLRI); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LabeledVPNIPAddressPrefix); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RouteTargetMembershipNLRI); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FlowSpecIPPrefix); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FlowSpecMAC); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FlowSpecComponentItem); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FlowSpecComponent); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FlowSpecNLRI); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VPNFlowSpecNLRI); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OpaqueNLRI); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsNodeDescriptor); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsLinkDescriptor); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsPrefixDescriptor); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsNodeNLRI); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsLinkNLRI); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsPrefixV4NLRI); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsPrefixV6NLRI); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsAddrPrefix); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MUPInterworkSegmentDiscoveryRoute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MUPDirectSegmentDiscoveryRoute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MUPType1SessionTransformedRoute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MUPType2SessionTransformedRoute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MpReachNLRIAttribute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MpUnreachNLRIAttribute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attribute_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TwoOctetAsSpecificExtended); i { +var file_attribute_proto_rawDesc = []byte{ + 0x0a, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x05, 0x61, 0x70, 0x69, 0x70, 0x62, 0x1a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0c, 0x65, 0x78, 0x74, 0x63, 0x6f, 0x6d, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0a, 0x6e, 0x6c, 0x72, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0xc9, 0x0b, 0x0a, 0x09, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x33, + 0x0a, 0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x75, 0x6e, 0x6b, 0x6e, + 0x6f, 0x77, 0x6e, 0x12, 0x30, 0x0a, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4f, 0x72, 0x69, 0x67, + 0x69, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, + 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x31, 0x0a, 0x07, 0x61, 0x73, 0x5f, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, + 0x73, 0x50, 0x61, 0x74, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, + 0x52, 0x06, 0x61, 0x73, 0x50, 0x61, 0x74, 0x68, 0x12, 0x34, 0x0a, 0x08, 0x6e, 0x65, 0x78, 0x74, + 0x5f, 0x68, 0x6f, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, + 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x12, 0x47, + 0x0a, 0x0f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x64, 0x69, 0x73, + 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x45, 0x78, 0x69, 0x74, 0x44, 0x69, 0x73, 0x63, 0x41, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x45, + 0x78, 0x69, 0x74, 0x44, 0x69, 0x73, 0x63, 0x12, 0x3a, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x5f, 0x70, 0x72, 0x65, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x72, 0x65, 0x66, 0x41, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x50, + 0x72, 0x65, 0x66, 0x12, 0x4c, 0x0a, 0x10, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x61, 0x67, + 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x41, 0x67, 0x67, 0x72, + 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, + 0x52, 0x0f, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, + 0x65, 0x12, 0x3c, 0x0a, 0x0a, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x67, + 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x48, 0x00, 0x52, 0x0a, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x12, + 0x3f, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x12, 0x43, 0x0a, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, + 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x41, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, + 0x74, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x70, 0x5f, 0x72, 0x65, + 0x61, 0x63, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x4d, 0x70, 0x52, 0x65, 0x61, 0x63, 0x68, 0x4e, 0x4c, 0x52, 0x49, 0x41, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x70, 0x52, 0x65, 0x61, 0x63, + 0x68, 0x12, 0x3e, 0x0a, 0x0a, 0x6d, 0x70, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x63, 0x68, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x70, + 0x55, 0x6e, 0x72, 0x65, 0x61, 0x63, 0x68, 0x4e, 0x4c, 0x52, 0x49, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x09, 0x6d, 0x70, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x63, + 0x68, 0x12, 0x58, 0x0a, 0x14, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x63, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x23, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, + 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x13, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, + 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x08, 0x61, + 0x73, 0x34, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x73, 0x34, 0x50, 0x61, 0x74, 0x68, 0x41, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x61, 0x73, 0x34, 0x50, 0x61, 0x74, + 0x68, 0x12, 0x46, 0x0a, 0x0e, 0x61, 0x73, 0x34, 0x5f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, + 0x74, 0x6f, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x41, 0x73, 0x34, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x61, 0x73, 0x34, 0x41, + 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x3d, 0x0a, 0x0b, 0x70, 0x6d, 0x73, + 0x69, 0x5f, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x6d, 0x73, 0x69, 0x54, 0x75, 0x6e, 0x6e, 0x65, + 0x6c, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x70, 0x6d, + 0x73, 0x69, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x40, 0x0a, 0x0c, 0x74, 0x75, 0x6e, 0x6e, + 0x65, 0x6c, 0x5f, 0x65, 0x6e, 0x63, 0x61, 0x70, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, + 0x61, 0x70, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x74, + 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x12, 0x62, 0x0a, 0x18, 0x69, 0x70, + 0x36, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, + 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x49, 0x50, 0x36, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, + 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x16, 0x69, 0x70, 0x36, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x64, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x2a, + 0x0a, 0x04, 0x61, 0x69, 0x67, 0x70, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x69, 0x67, 0x70, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x48, 0x00, 0x52, 0x04, 0x61, 0x69, 0x67, 0x70, 0x12, 0x4f, 0x0a, 0x11, 0x6c, 0x61, + 0x72, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, + 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x61, + 0x72, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x10, 0x6c, 0x61, 0x72, 0x67, 0x65, + 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x02, 0x6c, + 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x4c, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x02, 0x6c, + 0x73, 0x12, 0x31, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x73, 0x69, 0x64, 0x18, + 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x72, + 0x65, 0x66, 0x69, 0x78, 0x53, 0x49, 0x44, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x53, 0x69, 0x64, 0x42, 0x06, 0x0a, 0x04, 0x61, 0x74, 0x74, 0x72, 0x22, 0x29, 0x0a, 0x0f, + 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x22, 0xad, 0x01, 0x0a, 0x09, 0x41, 0x73, 0x53, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x73, 0x53, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0d, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x5b, 0x0a, 0x04, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, + 0x0a, 0x0a, 0x06, 0x41, 0x53, 0x5f, 0x53, 0x45, 0x54, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x41, + 0x53, 0x5f, 0x53, 0x45, 0x51, 0x55, 0x45, 0x4e, 0x43, 0x45, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, + 0x41, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x45, 0x44, 0x5f, 0x53, 0x45, 0x51, 0x55, 0x45, 0x4e, + 0x43, 0x45, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x41, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x45, + 0x44, 0x5f, 0x53, 0x45, 0x54, 0x10, 0x04, 0x22, 0x3f, 0x0a, 0x0f, 0x41, 0x73, 0x50, 0x61, 0x74, + 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x73, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x73, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, + 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x2d, 0x0a, 0x10, 0x4e, 0x65, 0x78, 0x74, + 0x48, 0x6f, 0x70, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x19, 0x0a, 0x08, + 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x68, 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x6e, 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x22, 0x2a, 0x0a, 0x16, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x45, 0x78, 0x69, 0x74, 0x44, 0x69, 0x73, 0x63, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, + 0x6d, 0x65, 0x64, 0x22, 0x33, 0x0a, 0x12, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x72, 0x65, 0x66, + 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x72, 0x65, 0x66, 0x22, 0x1a, 0x0a, 0x18, 0x41, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x22, 0x41, 0x0a, 0x13, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, + 0x6f, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, + 0x73, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, 0x6e, 0x12, 0x18, 0x0a, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x38, 0x0a, 0x14, 0x43, 0x6f, 0x6d, 0x6d, 0x75, + 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, + 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x22, 0x27, 0x0a, 0x15, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x49, + 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x28, 0x0a, 0x14, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x03, 0x69, 0x64, 0x73, 0x22, 0x7d, 0x0a, 0x14, 0x4d, 0x70, 0x52, 0x65, 0x61, 0x63, 0x68, 0x4e, + 0x4c, 0x52, 0x49, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x25, 0x0a, 0x06, + 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x06, 0x66, 0x61, 0x6d, + 0x69, 0x6c, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x68, 0x6f, 0x70, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x73, + 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6c, 0x72, 0x69, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4e, 0x4c, 0x52, 0x49, 0x52, 0x05, 0x6e, 0x6c, + 0x72, 0x69, 0x73, 0x22, 0x62, 0x0a, 0x16, 0x4d, 0x70, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x63, 0x68, + 0x4e, 0x4c, 0x52, 0x49, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x25, 0x0a, + 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x06, 0x66, 0x61, + 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6c, 0x72, 0x69, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4e, 0x4c, 0x52, 0x49, + 0x52, 0x05, 0x6e, 0x6c, 0x72, 0x69, 0x73, 0x22, 0x5a, 0x0a, 0x1c, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x64, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x3a, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, + 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x43, 0x6f, 0x6d, + 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x22, 0x40, 0x0a, 0x10, 0x41, 0x73, 0x34, 0x50, 0x61, 0x74, 0x68, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x41, 0x73, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x73, 0x65, 0x67, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x44, 0x0a, 0x16, 0x41, 0x73, 0x34, 0x41, 0x67, 0x67, 0x72, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, + 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x65, 0x0a, 0x13, 0x50, + 0x6d, 0x73, 0x69, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, + 0x69, 0x64, 0x22, 0x4a, 0x0a, 0x1e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, + 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x73, 0x75, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x22, 0x37, + 0x0a, 0x19, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, + 0x54, 0x4c, 0x56, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x22, 0x2e, 0x0a, 0x16, 0x54, 0x75, 0x6e, 0x6e, 0x65, + 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x43, 0x6f, 0x6c, 0x6f, + 0x72, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x55, 0x0a, 0x1d, 0x54, 0x75, 0x6e, 0x6e, 0x65, + 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x53, 0x52, 0x50, 0x72, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1e, + 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x56, + 0x0a, 0x24, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, + 0x54, 0x4c, 0x56, 0x53, 0x52, 0x43, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, + 0x74, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, + 0x74, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x39, 0x0a, 0x1b, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, + 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x53, 0x52, 0x50, 0x72, 0x69, + 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, + 0x79, 0x22, 0xa7, 0x01, 0x0a, 0x1d, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, + 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x53, 0x52, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x53, 0x49, 0x44, 0x12, 0x3b, 0x0a, 0x0e, 0x73, 0x72, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x5f, 0x73, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x53, 0x52, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x49, 0x44, + 0x48, 0x00, 0x52, 0x0c, 0x73, 0x72, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x64, + 0x12, 0x41, 0x0a, 0x10, 0x73, 0x72, 0x76, 0x36, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x5f, 0x73, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, + 0x70, 0x62, 0x2e, 0x53, 0x52, 0x76, 0x36, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x49, + 0x44, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x72, 0x76, 0x36, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x53, 0x69, 0x64, 0x42, 0x06, 0x0a, 0x04, 0x62, 0x73, 0x69, 0x64, 0x22, 0x4e, 0x0a, 0x0c, 0x53, + 0x52, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x49, 0x44, 0x12, 0x15, 0x0a, 0x06, 0x73, + 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x46, 0x6c, + 0x61, 0x67, 0x12, 0x15, 0x0a, 0x06, 0x69, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x05, 0x69, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x73, 0x69, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x14, + 0x53, 0x52, 0x76, 0x36, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x65, 0x68, 0x61, + 0x76, 0x69, 0x6f, 0x72, 0x12, 0x2f, 0x0a, 0x08, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, + 0x52, 0x76, 0x36, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x52, 0x08, 0x62, 0x65, 0x68, + 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6c, + 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, + 0x65, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x12, 0x19, 0x0a, + 0x08, 0x66, 0x75, 0x6e, 0x63, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x07, 0x66, 0x75, 0x6e, 0x63, 0x4c, 0x65, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x72, 0x67, 0x5f, + 0x6c, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x72, 0x67, 0x4c, 0x65, + 0x6e, 0x22, 0xc4, 0x01, 0x0a, 0x0e, 0x53, 0x52, 0x76, 0x36, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x53, 0x49, 0x44, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x15, 0x0a, 0x06, 0x69, + 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x46, 0x6c, + 0x61, 0x67, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x05, 0x62, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x73, 0x69, 0x64, 0x12, 0x5b, 0x0a, 0x1b, 0x65, + 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, + 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x52, 0x76, 0x36, 0x45, 0x6e, 0x64, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x52, 0x19, 0x65, + 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x53, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x22, 0x54, 0x0a, 0x17, 0x54, 0x75, 0x6e, 0x6e, + 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x53, 0x52, 0x45, + 0x4e, 0x4c, 0x50, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x23, 0x0a, 0x04, 0x65, 0x6e, 0x6c, + 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x45, 0x4e, 0x4c, 0x50, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x65, 0x6e, 0x6c, 0x70, 0x22, 0x38, + 0x0a, 0x08, 0x53, 0x52, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, + 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x6a, 0x0a, 0x0c, 0x53, 0x65, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x76, 0x5f, 0x66, 0x6c, + 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x46, 0x6c, 0x61, 0x67, 0x12, + 0x15, 0x0a, 0x06, 0x61, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x05, 0x61, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x5f, 0x66, 0x6c, 0x61, 0x67, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x15, 0x0a, + 0x06, 0x62, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x62, + 0x46, 0x6c, 0x61, 0x67, 0x22, 0x4f, 0x0a, 0x0c, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x41, 0x12, 0x29, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, + 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0xa8, 0x01, 0x0a, 0x0c, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, 0x12, 0x29, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, + 0x73, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, + 0x73, 0x69, 0x64, 0x12, 0x5b, 0x0a, 0x1b, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, + 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, + 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x53, 0x52, 0x76, 0x36, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x65, 0x68, + 0x61, 0x76, 0x69, 0x6f, 0x72, 0x52, 0x19, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, + 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, + 0x22, 0xf4, 0x01, 0x0a, 0x1e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, + 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x53, 0x52, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x52, 0x57, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x49, 0x0a, 0x08, + 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, + 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, + 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x53, 0x52, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x73, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x5e, 0x0a, 0x07, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x01, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x41, 0x48, 0x00, 0x52, 0x01, 0x61, 0x12, 0x23, 0x0a, 0x01, 0x62, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, 0x48, 0x00, 0x52, 0x01, 0x62, 0x42, 0x09, 0x0a, 0x07, + 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3b, 0x0a, 0x1f, 0x54, 0x75, 0x6e, 0x6e, 0x65, + 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x45, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x22, 0x32, 0x0a, 0x1c, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, + 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x55, 0x44, 0x50, 0x44, 0x65, 0x73, 0x74, + 0x50, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x44, 0x0a, 0x18, 0x54, 0x75, 0x6e, 0x6e, + 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x55, 0x6e, 0x6b, + 0x6e, 0x6f, 0x77, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd5, + 0x07, 0x0a, 0x0e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x54, 0x4c, + 0x56, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x6c, 0x76, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, + 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x54, 0x4c, 0x56, 0x2e, 0x54, 0x4c, 0x56, 0x52, 0x04, + 0x74, 0x6c, 0x76, 0x73, 0x1a, 0xff, 0x06, 0x0a, 0x03, 0x54, 0x4c, 0x56, 0x12, 0x3b, 0x0a, 0x07, + 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, + 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x48, 0x00, + 0x52, 0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x12, 0x4d, 0x0a, 0x0d, 0x65, 0x6e, 0x63, + 0x61, 0x70, 0x73, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, + 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x73, + 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0d, 0x65, 0x6e, 0x63, 0x61, 0x70, + 0x73, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x70, 0x69, + 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, + 0x62, 0x54, 0x4c, 0x56, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x48, 0x00, 0x52, 0x08, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x35, 0x0a, 0x05, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, + 0x56, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, + 0x51, 0x0a, 0x0f, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, + 0x4c, 0x56, 0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x0e, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x12, 0x49, 0x0a, 0x0d, 0x75, 0x64, 0x70, 0x5f, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x70, + 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, + 0x54, 0x4c, 0x56, 0x55, 0x44, 0x50, 0x44, 0x65, 0x73, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x48, 0x00, + 0x52, 0x0b, 0x75, 0x64, 0x70, 0x44, 0x65, 0x73, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x4b, 0x0a, + 0x0d, 0x73, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, + 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x53, 0x52, + 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x72, + 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x45, 0x0a, 0x0b, 0x73, 0x72, + 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, + 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x53, 0x52, 0x50, 0x72, 0x69, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x73, 0x72, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, + 0x79, 0x12, 0x62, 0x0a, 0x16, 0x73, 0x72, 0x5f, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, + 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, + 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x53, 0x52, 0x43, 0x61, 0x6e, + 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x74, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x48, 0x00, + 0x52, 0x13, 0x73, 0x72, 0x43, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x74, + 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x07, 0x73, 0x72, 0x5f, 0x65, 0x6e, 0x6c, 0x70, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, + 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, + 0x53, 0x52, 0x45, 0x4e, 0x4c, 0x50, 0x48, 0x00, 0x52, 0x06, 0x73, 0x72, 0x45, 0x6e, 0x6c, 0x70, + 0x12, 0x4c, 0x0a, 0x0e, 0x73, 0x72, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, + 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, + 0x4c, 0x56, 0x53, 0x52, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x49, 0x44, 0x48, 0x00, + 0x52, 0x0c, 0x73, 0x72, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x64, 0x12, 0x4f, + 0x0a, 0x0f, 0x73, 0x72, 0x5f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x69, 0x73, + 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x53, 0x75, 0x62, 0x54, 0x4c, + 0x56, 0x53, 0x52, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, + 0x52, 0x0d, 0x73, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x42, + 0x05, 0x0a, 0x03, 0x74, 0x6c, 0x76, 0x22, 0x41, 0x0a, 0x14, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, + 0x45, 0x6e, 0x63, 0x61, 0x70, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x29, + 0x0a, 0x04, 0x74, 0x6c, 0x76, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x63, 0x61, 0x70, + 0x54, 0x4c, 0x56, 0x52, 0x04, 0x74, 0x6c, 0x76, 0x73, 0x22, 0x98, 0x01, 0x0a, 0x1b, 0x49, 0x50, + 0x76, 0x36, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, + 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0c, 0x69, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x12, 0x19, + 0x0a, 0x08, 0x73, 0x75, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x07, 0x73, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x6d, + 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, + 0x64, 0x6d, 0x69, 0x6e, 0x22, 0x60, 0x0a, 0x23, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x49, 0x50, 0x76, 0x36, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, + 0x66, 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, + 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x22, 0xda, 0x02, 0x0a, 0x1f, 0x49, 0x50, 0x36, 0x45, 0x78, + 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x63, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x30, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x49, 0x50, 0x36, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x64, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, + 0x79, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x1a, 0xe2, + 0x01, 0x0a, 0x09, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x12, 0x58, 0x0a, 0x15, + 0x69, 0x70, 0x76, 0x36, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x70, 0x65, + 0x63, 0x69, 0x66, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x49, 0x50, 0x76, 0x36, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, + 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x48, + 0x00, 0x52, 0x13, 0x69, 0x70, 0x76, 0x36, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, + 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x12, 0x71, 0x0a, 0x1e, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x5f, 0x69, 0x70, 0x76, 0x36, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, + 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, + 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x49, + 0x50, 0x76, 0x36, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, + 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x1b, 0x72, 0x65, + 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x49, 0x70, 0x76, 0x36, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x42, 0x08, 0x0a, 0x06, 0x65, 0x78, 0x74, + 0x63, 0x6f, 0x6d, 0x22, 0x2a, 0x0a, 0x10, 0x41, 0x69, 0x67, 0x70, 0x54, 0x4c, 0x56, 0x49, 0x47, + 0x50, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x22, + 0x3a, 0x0a, 0x0e, 0x41, 0x69, 0x67, 0x70, 0x54, 0x4c, 0x56, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, + 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb8, 0x01, 0x0a, 0x0d, + 0x41, 0x69, 0x67, 0x70, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x2c, 0x0a, + 0x04, 0x74, 0x6c, 0x76, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x41, 0x69, 0x67, 0x70, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x2e, 0x54, 0x4c, 0x56, 0x52, 0x04, 0x74, 0x6c, 0x76, 0x73, 0x1a, 0x79, 0x0a, 0x03, 0x54, + 0x4c, 0x56, 0x12, 0x31, 0x0a, 0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x69, 0x67, 0x70, + 0x54, 0x4c, 0x56, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x48, 0x00, 0x52, 0x07, 0x75, 0x6e, + 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x12, 0x38, 0x0a, 0x0a, 0x69, 0x67, 0x70, 0x5f, 0x6d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x41, 0x69, 0x67, 0x70, 0x54, 0x4c, 0x56, 0x49, 0x47, 0x50, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x48, 0x00, 0x52, 0x09, 0x69, 0x67, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x42, + 0x05, 0x0a, 0x03, 0x74, 0x6c, 0x76, 0x22, 0x75, 0x0a, 0x0e, 0x4c, 0x61, 0x72, 0x67, 0x65, 0x43, + 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x6c, 0x6f, 0x62, + 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, + 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x31, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x31, 0x12, 0x1f, 0x0a, 0x0b, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x32, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x32, 0x22, 0x54, 0x0a, + 0x19, 0x4c, 0x61, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x63, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x61, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x6d, + 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x22, 0x9b, 0x01, 0x0a, 0x0b, 0x4c, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x46, 0x6c, + 0x61, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x6f, 0x61, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x6f, 0x61, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x65, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x65, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x62, 0x72, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x62, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x6f, 0x75, + 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, + 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x76, 0x36, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x76, + 0x36, 0x22, 0x8b, 0x01, 0x0a, 0x0a, 0x4c, 0x73, 0x49, 0x47, 0x50, 0x46, 0x6c, 0x61, 0x67, 0x73, + 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, + 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x6f, 0x5f, 0x75, 0x6e, 0x69, 0x63, 0x61, + 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6e, 0x6f, 0x55, 0x6e, 0x69, 0x63, + 0x61, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x70, + 0x61, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x73, 0x73, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x4e, 0x73, 0x73, 0x61, 0x22, + 0x33, 0x0a, 0x09, 0x4c, 0x73, 0x53, 0x72, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x62, 0x65, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x65, 0x67, + 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x03, 0x65, 0x6e, 0x64, 0x22, 0x8a, 0x01, 0x0a, 0x10, 0x4c, 0x73, 0x53, 0x72, 0x43, 0x61, 0x70, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x70, 0x76, + 0x34, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0d, 0x69, 0x70, 0x76, 0x34, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, + 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x70, 0x76, 0x36, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x70, 0x76, 0x36, 0x53, 0x75, + 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x06, 0x72, 0x61, 0x6e, 0x67, 0x65, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x4c, 0x73, 0x53, 0x72, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x67, 0x65, + 0x73, 0x22, 0x3a, 0x0a, 0x0e, 0x4c, 0x73, 0x53, 0x72, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x12, 0x28, 0x0a, 0x06, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x53, 0x72, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0xfd, 0x02, + 0x0a, 0x0f, 0x4c, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4e, 0x6f, 0x64, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x4e, + 0x6f, 0x64, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, + 0x26, 0x0a, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x52, + 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x12, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x76, 0x36, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, + 0x49, 0x64, 0x56, 0x36, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x69, 0x73, 0x5f, 0x61, 0x72, 0x65, + 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x69, 0x73, 0x69, 0x73, 0x41, 0x72, 0x65, + 0x61, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x40, 0x0a, 0x0f, 0x73, 0x72, 0x5f, + 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x53, 0x72, 0x43, + 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x0e, 0x73, 0x72, 0x43, + 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x73, + 0x72, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0c, 0x73, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x73, + 0x12, 0x3b, 0x0a, 0x0e, 0x73, 0x72, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x4c, 0x73, 0x53, 0x72, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, + 0x0c, 0x73, 0x72, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x9b, 0x04, + 0x0a, 0x0f, 0x4c, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4c, 0x69, 0x6e, + 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x72, + 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2b, 0x0a, + 0x12, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x5f, 0x76, 0x36, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x56, 0x36, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, + 0x65, 0x72, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x13, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x72, + 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x76, 0x36, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x10, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, + 0x64, 0x56, 0x36, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2a, 0x0a, 0x11, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, + 0x74, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x67, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x69, 0x67, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, + 0x16, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x61, 0x6e, 0x64, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x62, 0x61, 0x6e, 0x64, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x31, 0x0a, 0x14, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x13, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, 0x6c, 0x65, 0x42, + 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x31, 0x0a, 0x14, 0x75, 0x6e, 0x72, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, + 0x18, 0x0c, 0x20, 0x03, 0x28, 0x02, 0x52, 0x13, 0x75, 0x6e, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x64, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x28, 0x0a, 0x10, 0x73, + 0x72, 0x5f, 0x61, 0x64, 0x6a, 0x61, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x73, 0x69, 0x64, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x73, 0x72, 0x41, 0x64, 0x6a, 0x61, 0x63, 0x65, 0x6e, + 0x63, 0x79, 0x53, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x72, 0x6c, 0x67, 0x73, 0x18, 0x0e, + 0x20, 0x03, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x72, 0x6c, 0x67, 0x73, 0x22, 0x7f, 0x0a, 0x11, 0x4c, + 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, + 0x12, 0x2e, 0x0a, 0x09, 0x69, 0x67, 0x70, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x49, 0x47, + 0x50, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x08, 0x69, 0x67, 0x70, 0x46, 0x6c, 0x61, 0x67, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x72, 0x5f, 0x70, + 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x73, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0b, 0x73, 0x72, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x53, 0x69, 0x64, 0x22, 0x7e, 0x0a, 0x18, + 0x4c, 0x73, 0x42, 0x67, 0x70, 0x50, 0x65, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x53, 0x49, 0x44, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x1e, 0x0a, 0x0a, + 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x76, 0x0a, 0x13, + 0x4c, 0x73, 0x42, 0x67, 0x70, 0x50, 0x65, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x53, 0x49, 0x44, 0x12, 0x35, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x42, 0x67, 0x70, + 0x50, 0x65, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x49, 0x44, 0x46, 0x6c, + 0x61, 0x67, 0x73, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x03, 0x73, 0x69, 0x64, 0x22, 0xf8, 0x01, 0x0a, 0x19, 0x4c, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x42, 0x67, 0x70, 0x50, 0x65, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x11, 0x62, 0x67, 0x70, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x73, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x42, 0x67, 0x70, 0x50, 0x65, 0x65, 0x72, 0x53, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x49, 0x44, 0x52, 0x0e, 0x62, 0x67, 0x70, 0x50, 0x65, + 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x64, 0x12, 0x4f, 0x0a, 0x16, 0x62, 0x67, 0x70, + 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x6a, 0x61, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x5f, + 0x73, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x4c, 0x73, 0x42, 0x67, 0x70, 0x50, 0x65, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x53, 0x49, 0x44, 0x52, 0x13, 0x62, 0x67, 0x70, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, + 0x6a, 0x61, 0x63, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x69, 0x64, 0x12, 0x43, 0x0a, 0x10, 0x62, 0x67, + 0x70, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x69, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x42, + 0x67, 0x70, 0x50, 0x65, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x49, 0x44, + 0x52, 0x0d, 0x62, 0x67, 0x70, 0x50, 0x65, 0x65, 0x72, 0x53, 0x65, 0x74, 0x53, 0x69, 0x64, 0x22, + 0xe3, 0x01, 0x0a, 0x0b, 0x4c, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, + 0x2a, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x04, 0x6c, + 0x69, 0x6e, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x4c, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4c, 0x69, 0x6e, + 0x6b, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x30, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x4c, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x4a, 0x0a, 0x10, 0x62, 0x67, 0x70, + 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x42, 0x67, 0x70, 0x50, 0x65, 0x65, 0x72, 0x53, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x62, 0x67, 0x70, 0x50, 0x65, 0x65, 0x72, 0x53, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x52, 0x0a, 0x10, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, + 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, + 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb2, 0x02, 0x0a, 0x16, 0x53, 0x52, + 0x76, 0x36, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x53, 0x75, 0x62, 0x53, 0x75, + 0x62, 0x54, 0x4c, 0x56, 0x12, 0x30, 0x0a, 0x14, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x5f, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x12, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x2e, 0x0a, 0x13, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, + 0x72, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x11, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x4e, 0x6f, 0x64, 0x65, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, + 0x27, 0x0a, 0x0f, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, + 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x31, 0x0a, 0x14, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x31, 0x0a, 0x14, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x55, + 0x0a, 0x0d, 0x53, 0x52, 0x76, 0x36, 0x53, 0x75, 0x62, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x12, + 0x3d, 0x0a, 0x09, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x52, 0x76, 0x36, 0x53, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x53, 0x75, 0x62, 0x53, 0x75, 0x62, 0x54, 0x4c, + 0x56, 0x48, 0x00, 0x52, 0x09, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x42, 0x05, + 0x0a, 0x03, 0x74, 0x6c, 0x76, 0x22, 0x3a, 0x0a, 0x0e, 0x53, 0x52, 0x76, 0x36, 0x53, 0x75, 0x62, + 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x73, 0x12, 0x28, 0x0a, 0x04, 0x74, 0x6c, 0x76, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x52, + 0x76, 0x36, 0x53, 0x75, 0x62, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x52, 0x04, 0x74, 0x6c, 0x76, + 0x73, 0x22, 0x25, 0x0a, 0x0c, 0x53, 0x52, 0x76, 0x36, 0x53, 0x49, 0x44, 0x46, 0x6c, 0x61, 0x67, + 0x73, 0x12, 0x15, 0x0a, 0x06, 0x66, 0x6c, 0x61, 0x67, 0x5f, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x31, 0x22, 0xa7, 0x02, 0x0a, 0x15, 0x53, 0x52, 0x76, + 0x36, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x75, 0x62, 0x54, + 0x4c, 0x56, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x03, 0x73, 0x69, 0x64, 0x12, 0x29, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x52, 0x76, 0x36, + 0x53, 0x49, 0x44, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, + 0x2b, 0x0a, 0x11, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x62, 0x65, 0x68, 0x61, + 0x76, 0x69, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x65, 0x6e, 0x64, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x4e, 0x0a, 0x0c, + 0x73, 0x75, 0x62, 0x5f, 0x73, 0x75, 0x62, 0x5f, 0x74, 0x6c, 0x76, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x52, 0x76, 0x36, 0x49, + 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, + 0x2e, 0x53, 0x75, 0x62, 0x53, 0x75, 0x62, 0x54, 0x6c, 0x76, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0a, 0x73, 0x75, 0x62, 0x53, 0x75, 0x62, 0x54, 0x6c, 0x76, 0x73, 0x1a, 0x54, 0x0a, 0x0f, + 0x53, 0x75, 0x62, 0x53, 0x75, 0x62, 0x54, 0x6c, 0x76, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x2b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x52, 0x76, 0x36, 0x53, 0x75, 0x62, + 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0x55, 0x0a, 0x0a, 0x53, 0x52, 0x76, 0x36, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, + 0x12, 0x40, 0x0a, 0x0b, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x52, + 0x76, 0x36, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x75, 0x62, + 0x54, 0x4c, 0x56, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x42, 0x05, 0x0a, 0x03, 0x74, 0x6c, 0x76, 0x22, 0x34, 0x0a, 0x0b, 0x53, 0x52, 0x76, + 0x36, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x73, 0x12, 0x25, 0x0a, 0x04, 0x74, 0x6c, 0x76, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, + 0x52, 0x76, 0x36, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x52, 0x04, 0x74, 0x6c, 0x76, 0x73, 0x22, + 0xa3, 0x01, 0x0a, 0x10, 0x53, 0x52, 0x76, 0x36, 0x4c, 0x33, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x54, 0x4c, 0x56, 0x12, 0x3f, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x5f, 0x74, 0x6c, 0x76, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, + 0x52, 0x76, 0x36, 0x4c, 0x33, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x4c, 0x56, 0x2e, + 0x53, 0x75, 0x62, 0x54, 0x6c, 0x76, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x73, 0x75, + 0x62, 0x54, 0x6c, 0x76, 0x73, 0x1a, 0x4e, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x54, 0x6c, 0x76, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x28, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, + 0x52, 0x76, 0x36, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa3, 0x01, 0x0a, 0x10, 0x53, 0x52, 0x76, 0x36, 0x4c, 0x32, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x4c, 0x56, 0x12, 0x3f, 0x0a, 0x08, 0x73, 0x75, + 0x62, 0x5f, 0x74, 0x6c, 0x76, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x52, 0x76, 0x36, 0x4c, 0x32, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x54, 0x4c, 0x56, 0x2e, 0x53, 0x75, 0x62, 0x54, 0x6c, 0x76, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x07, 0x73, 0x75, 0x62, 0x54, 0x6c, 0x76, 0x73, 0x1a, 0x4e, 0x0a, 0x0c, 0x53, + 0x75, 0x62, 0x54, 0x6c, 0x76, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x28, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x52, 0x76, 0x36, 0x53, 0x75, 0x62, 0x54, 0x4c, 0x56, 0x73, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb8, 0x01, 0x0a, 0x09, + 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x53, 0x49, 0x44, 0x12, 0x28, 0x0a, 0x04, 0x74, 0x6c, 0x76, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x53, 0x49, 0x44, 0x2e, 0x54, 0x4c, 0x56, 0x52, 0x04, 0x74, + 0x6c, 0x76, 0x73, 0x1a, 0x80, 0x01, 0x0a, 0x03, 0x54, 0x4c, 0x56, 0x12, 0x38, 0x0a, 0x0a, 0x6c, + 0x33, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x52, 0x76, 0x36, 0x4c, 0x33, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x4c, 0x56, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x33, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x38, 0x0a, 0x0a, 0x6c, 0x32, 0x5f, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x53, 0x52, 0x76, 0x36, 0x4c, 0x32, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, + 0x4c, 0x56, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x32, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, + 0x05, 0x0a, 0x03, 0x74, 0x6c, 0x76, 0x2a, 0xed, 0x05, 0x0a, 0x0c, 0x53, 0x52, 0x76, 0x36, 0x42, + 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x53, 0x45, 0x52, + 0x56, 0x45, 0x44, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x45, 0x4e, 0x44, 0x10, 0x01, 0x12, 0x10, + 0x0a, 0x0c, 0x45, 0x4e, 0x44, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x50, 0x53, 0x50, 0x10, 0x02, + 0x12, 0x10, 0x0a, 0x0c, 0x45, 0x4e, 0x44, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x55, 0x53, 0x50, + 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x45, 0x4e, 0x44, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x50, + 0x53, 0x50, 0x5f, 0x55, 0x53, 0x50, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x45, 0x4e, 0x44, 0x58, + 0x10, 0x05, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x4e, 0x44, 0x58, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, + 0x50, 0x53, 0x50, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x4e, 0x44, 0x58, 0x5f, 0x57, 0x49, + 0x54, 0x48, 0x5f, 0x55, 0x53, 0x50, 0x10, 0x07, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x4e, 0x44, 0x58, + 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x50, 0x53, 0x50, 0x5f, 0x55, 0x53, 0x50, 0x10, 0x08, 0x12, + 0x08, 0x0a, 0x04, 0x45, 0x4e, 0x44, 0x54, 0x10, 0x09, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x4e, 0x44, + 0x54, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x50, 0x53, 0x50, 0x10, 0x0a, 0x12, 0x11, 0x0a, 0x0d, + 0x45, 0x4e, 0x44, 0x54, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x55, 0x53, 0x50, 0x10, 0x0b, 0x12, + 0x15, 0x0a, 0x11, 0x45, 0x4e, 0x44, 0x54, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x50, 0x53, 0x50, + 0x5f, 0x55, 0x53, 0x50, 0x10, 0x0c, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x4e, 0x44, 0x5f, 0x42, 0x36, + 0x5f, 0x45, 0x4e, 0x43, 0x41, 0x50, 0x53, 0x10, 0x0e, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x4e, 0x44, + 0x5f, 0x42, 0x4d, 0x10, 0x0f, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x4e, 0x44, 0x5f, 0x44, 0x58, 0x36, + 0x10, 0x10, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x4e, 0x44, 0x5f, 0x44, 0x58, 0x34, 0x10, 0x11, 0x12, + 0x0b, 0x0a, 0x07, 0x45, 0x4e, 0x44, 0x5f, 0x44, 0x54, 0x36, 0x10, 0x12, 0x12, 0x0b, 0x0a, 0x07, + 0x45, 0x4e, 0x44, 0x5f, 0x44, 0x54, 0x34, 0x10, 0x13, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x4e, 0x44, + 0x5f, 0x44, 0x54, 0x34, 0x36, 0x10, 0x14, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x4e, 0x44, 0x5f, 0x44, + 0x58, 0x32, 0x10, 0x15, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x4e, 0x44, 0x5f, 0x44, 0x58, 0x32, 0x56, + 0x10, 0x16, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x4e, 0x44, 0x5f, 0x44, 0x54, 0x32, 0x55, 0x10, 0x17, + 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x4e, 0x44, 0x5f, 0x44, 0x54, 0x32, 0x4d, 0x10, 0x18, 0x12, 0x15, + 0x0a, 0x11, 0x45, 0x4e, 0x44, 0x5f, 0x42, 0x36, 0x5f, 0x45, 0x4e, 0x43, 0x41, 0x50, 0x53, 0x5f, + 0x52, 0x65, 0x64, 0x10, 0x1b, 0x12, 0x10, 0x0a, 0x0c, 0x45, 0x4e, 0x44, 0x5f, 0x57, 0x49, 0x54, + 0x48, 0x5f, 0x55, 0x53, 0x44, 0x10, 0x1c, 0x12, 0x14, 0x0a, 0x10, 0x45, 0x4e, 0x44, 0x5f, 0x57, + 0x49, 0x54, 0x48, 0x5f, 0x50, 0x53, 0x50, 0x5f, 0x55, 0x53, 0x44, 0x10, 0x1d, 0x12, 0x14, 0x0a, + 0x10, 0x45, 0x4e, 0x44, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x55, 0x53, 0x50, 0x5f, 0x55, 0x53, + 0x44, 0x10, 0x1e, 0x12, 0x18, 0x0a, 0x14, 0x45, 0x4e, 0x44, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, + 0x50, 0x53, 0x50, 0x5f, 0x55, 0x53, 0x50, 0x5f, 0x55, 0x53, 0x44, 0x10, 0x1f, 0x12, 0x11, 0x0a, + 0x0d, 0x45, 0x4e, 0x44, 0x58, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x55, 0x53, 0x44, 0x10, 0x20, + 0x12, 0x15, 0x0a, 0x11, 0x45, 0x4e, 0x44, 0x58, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x50, 0x53, + 0x50, 0x5f, 0x55, 0x53, 0x44, 0x10, 0x21, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x4e, 0x44, 0x58, 0x5f, + 0x57, 0x49, 0x54, 0x48, 0x5f, 0x55, 0x53, 0x50, 0x5f, 0x55, 0x53, 0x44, 0x10, 0x22, 0x12, 0x19, + 0x0a, 0x15, 0x45, 0x4e, 0x44, 0x58, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x50, 0x53, 0x50, 0x5f, + 0x55, 0x53, 0x50, 0x5f, 0x55, 0x53, 0x44, 0x10, 0x23, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x4e, 0x44, + 0x54, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x55, 0x53, 0x44, 0x10, 0x24, 0x12, 0x15, 0x0a, 0x11, + 0x45, 0x4e, 0x44, 0x54, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x50, 0x53, 0x50, 0x5f, 0x55, 0x53, + 0x44, 0x10, 0x25, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x4e, 0x44, 0x54, 0x5f, 0x57, 0x49, 0x54, 0x48, + 0x5f, 0x55, 0x53, 0x50, 0x5f, 0x55, 0x53, 0x44, 0x10, 0x26, 0x12, 0x19, 0x0a, 0x15, 0x45, 0x4e, + 0x44, 0x54, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x50, 0x53, 0x50, 0x5f, 0x55, 0x53, 0x50, 0x5f, + 0x55, 0x53, 0x44, 0x10, 0x27, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x4e, 0x44, 0x4d, 0x5f, 0x47, 0x54, + 0x50, 0x36, 0x44, 0x10, 0x45, 0x12, 0x0f, 0x0a, 0x0b, 0x45, 0x4e, 0x44, 0x4d, 0x5f, 0x47, 0x54, + 0x50, 0x36, 0x44, 0x49, 0x10, 0x46, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x4e, 0x44, 0x4d, 0x5f, 0x47, + 0x54, 0x50, 0x36, 0x45, 0x10, 0x47, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x4e, 0x44, 0x4d, 0x5f, 0x47, + 0x54, 0x50, 0x34, 0x45, 0x10, 0x48, 0x2a, 0x44, 0x0a, 0x08, 0x45, 0x4e, 0x4c, 0x50, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x10, 0x00, + 0x12, 0x09, 0x0a, 0x05, 0x54, 0x79, 0x70, 0x65, 0x31, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x54, + 0x79, 0x70, 0x65, 0x32, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x79, 0x70, 0x65, 0x33, 0x10, + 0x03, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x79, 0x70, 0x65, 0x34, 0x10, 0x04, 0x42, 0x24, 0x5a, 0x22, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x72, 0x67, 0x2f, + 0x67, 0x6f, 0x62, 0x67, 0x70, 0x2f, 0x76, 0x33, 0x2f, 0x61, 0x70, 0x69, 0x3b, 0x61, 0x70, 0x69, + 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_attribute_proto_rawDescOnce sync.Once + file_attribute_proto_rawDescData = file_attribute_proto_rawDesc +) + +func file_attribute_proto_rawDescGZIP() []byte { + file_attribute_proto_rawDescOnce.Do(func() { + file_attribute_proto_rawDescData = protoimpl.X.CompressGZIP(file_attribute_proto_rawDescData) + }) + return file_attribute_proto_rawDescData +} + +var file_attribute_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_attribute_proto_msgTypes = make([]protoimpl.MessageInfo, 78) +var file_attribute_proto_goTypes = []interface{}{ + (SRv6Behavior)(0), // 0: apipb.SRv6Behavior + (ENLPType)(0), // 1: apipb.ENLPType + (AsSegment_Type)(0), // 2: apipb.AsSegment.Type + (*Attribute)(nil), // 3: apipb.Attribute + (*OriginAttribute)(nil), // 4: apipb.OriginAttribute + (*AsSegment)(nil), // 5: apipb.AsSegment + (*AsPathAttribute)(nil), // 6: apipb.AsPathAttribute + (*NextHopAttribute)(nil), // 7: apipb.NextHopAttribute + (*MultiExitDiscAttribute)(nil), // 8: apipb.MultiExitDiscAttribute + (*LocalPrefAttribute)(nil), // 9: apipb.LocalPrefAttribute + (*AtomicAggregateAttribute)(nil), // 10: apipb.AtomicAggregateAttribute + (*AggregatorAttribute)(nil), // 11: apipb.AggregatorAttribute + (*CommunitiesAttribute)(nil), // 12: apipb.CommunitiesAttribute + (*OriginatorIdAttribute)(nil), // 13: apipb.OriginatorIdAttribute + (*ClusterListAttribute)(nil), // 14: apipb.ClusterListAttribute + (*MpReachNLRIAttribute)(nil), // 15: apipb.MpReachNLRIAttribute + (*MpUnreachNLRIAttribute)(nil), // 16: apipb.MpUnreachNLRIAttribute + (*ExtendedCommunitiesAttribute)(nil), // 17: apipb.ExtendedCommunitiesAttribute + (*As4PathAttribute)(nil), // 18: apipb.As4PathAttribute + (*As4AggregatorAttribute)(nil), // 19: apipb.As4AggregatorAttribute + (*PmsiTunnelAttribute)(nil), // 20: apipb.PmsiTunnelAttribute + (*TunnelEncapSubTLVEncapsulation)(nil), // 21: apipb.TunnelEncapSubTLVEncapsulation + (*TunnelEncapSubTLVProtocol)(nil), // 22: apipb.TunnelEncapSubTLVProtocol + (*TunnelEncapSubTLVColor)(nil), // 23: apipb.TunnelEncapSubTLVColor + (*TunnelEncapSubTLVSRPreference)(nil), // 24: apipb.TunnelEncapSubTLVSRPreference + (*TunnelEncapSubTLVSRCandidatePathName)(nil), // 25: apipb.TunnelEncapSubTLVSRCandidatePathName + (*TunnelEncapSubTLVSRPriority)(nil), // 26: apipb.TunnelEncapSubTLVSRPriority + (*TunnelEncapSubTLVSRBindingSID)(nil), // 27: apipb.TunnelEncapSubTLVSRBindingSID + (*SRBindingSID)(nil), // 28: apipb.SRBindingSID + (*SRv6EndPointBehavior)(nil), // 29: apipb.SRv6EndPointBehavior + (*SRv6BindingSID)(nil), // 30: apipb.SRv6BindingSID + (*TunnelEncapSubTLVSRENLP)(nil), // 31: apipb.TunnelEncapSubTLVSRENLP + (*SRWeight)(nil), // 32: apipb.SRWeight + (*SegmentFlags)(nil), // 33: apipb.SegmentFlags + (*SegmentTypeA)(nil), // 34: apipb.SegmentTypeA + (*SegmentTypeB)(nil), // 35: apipb.SegmentTypeB + (*TunnelEncapSubTLVSRSegmentList)(nil), // 36: apipb.TunnelEncapSubTLVSRSegmentList + (*TunnelEncapSubTLVEgressEndpoint)(nil), // 37: apipb.TunnelEncapSubTLVEgressEndpoint + (*TunnelEncapSubTLVUDPDestPort)(nil), // 38: apipb.TunnelEncapSubTLVUDPDestPort + (*TunnelEncapSubTLVUnknown)(nil), // 39: apipb.TunnelEncapSubTLVUnknown + (*TunnelEncapTLV)(nil), // 40: apipb.TunnelEncapTLV + (*TunnelEncapAttribute)(nil), // 41: apipb.TunnelEncapAttribute + (*IPv6AddressSpecificExtended)(nil), // 42: apipb.IPv6AddressSpecificExtended + (*RedirectIPv6AddressSpecificExtended)(nil), // 43: apipb.RedirectIPv6AddressSpecificExtended + (*IP6ExtendedCommunitiesAttribute)(nil), // 44: apipb.IP6ExtendedCommunitiesAttribute + (*AigpTLVIGPMetric)(nil), // 45: apipb.AigpTLVIGPMetric + (*AigpTLVUnknown)(nil), // 46: apipb.AigpTLVUnknown + (*AigpAttribute)(nil), // 47: apipb.AigpAttribute + (*LargeCommunity)(nil), // 48: apipb.LargeCommunity + (*LargeCommunitiesAttribute)(nil), // 49: apipb.LargeCommunitiesAttribute + (*LsNodeFlags)(nil), // 50: apipb.LsNodeFlags + (*LsIGPFlags)(nil), // 51: apipb.LsIGPFlags + (*LsSrRange)(nil), // 52: apipb.LsSrRange + (*LsSrCapabilities)(nil), // 53: apipb.LsSrCapabilities + (*LsSrLocalBlock)(nil), // 54: apipb.LsSrLocalBlock + (*LsAttributeNode)(nil), // 55: apipb.LsAttributeNode + (*LsAttributeLink)(nil), // 56: apipb.LsAttributeLink + (*LsAttributePrefix)(nil), // 57: apipb.LsAttributePrefix + (*LsBgpPeerSegmentSIDFlags)(nil), // 58: apipb.LsBgpPeerSegmentSIDFlags + (*LsBgpPeerSegmentSID)(nil), // 59: apipb.LsBgpPeerSegmentSID + (*LsAttributeBgpPeerSegment)(nil), // 60: apipb.LsAttributeBgpPeerSegment + (*LsAttribute)(nil), // 61: apipb.LsAttribute + (*UnknownAttribute)(nil), // 62: apipb.UnknownAttribute + (*SRv6StructureSubSubTLV)(nil), // 63: apipb.SRv6StructureSubSubTLV + (*SRv6SubSubTLV)(nil), // 64: apipb.SRv6SubSubTLV + (*SRv6SubSubTLVs)(nil), // 65: apipb.SRv6SubSubTLVs + (*SRv6SIDFlags)(nil), // 66: apipb.SRv6SIDFlags + (*SRv6InformationSubTLV)(nil), // 67: apipb.SRv6InformationSubTLV + (*SRv6SubTLV)(nil), // 68: apipb.SRv6SubTLV + (*SRv6SubTLVs)(nil), // 69: apipb.SRv6SubTLVs + (*SRv6L3ServiceTLV)(nil), // 70: apipb.SRv6L3ServiceTLV + (*SRv6L2ServiceTLV)(nil), // 71: apipb.SRv6L2ServiceTLV + (*PrefixSID)(nil), // 72: apipb.PrefixSID + (*TunnelEncapSubTLVSRSegmentList_Segment)(nil), // 73: apipb.TunnelEncapSubTLVSRSegmentList.Segment + (*TunnelEncapTLV_TLV)(nil), // 74: apipb.TunnelEncapTLV.TLV + (*IP6ExtendedCommunitiesAttribute_Community)(nil), // 75: apipb.IP6ExtendedCommunitiesAttribute.Community + (*AigpAttribute_TLV)(nil), // 76: apipb.AigpAttribute.TLV + nil, // 77: apipb.SRv6InformationSubTLV.SubSubTlvsEntry + nil, // 78: apipb.SRv6L3ServiceTLV.SubTlvsEntry + nil, // 79: apipb.SRv6L2ServiceTLV.SubTlvsEntry + (*PrefixSID_TLV)(nil), // 80: apipb.PrefixSID.TLV + (*Family)(nil), // 81: apipb.Family + (*NLRI)(nil), // 82: apipb.NLRI + (*ExtendedCommunity)(nil), // 83: apipb.ExtendedCommunity +} +var file_attribute_proto_depIdxs = []int32{ + 62, // 0: apipb.Attribute.unknown:type_name -> apipb.UnknownAttribute + 4, // 1: apipb.Attribute.origin:type_name -> apipb.OriginAttribute + 6, // 2: apipb.Attribute.as_path:type_name -> apipb.AsPathAttribute + 7, // 3: apipb.Attribute.next_hop:type_name -> apipb.NextHopAttribute + 8, // 4: apipb.Attribute.multi_exit_disc:type_name -> apipb.MultiExitDiscAttribute + 9, // 5: apipb.Attribute.local_pref:type_name -> apipb.LocalPrefAttribute + 10, // 6: apipb.Attribute.atomic_aggregate:type_name -> apipb.AtomicAggregateAttribute + 11, // 7: apipb.Attribute.aggregator:type_name -> apipb.AggregatorAttribute + 12, // 8: apipb.Attribute.communities:type_name -> apipb.CommunitiesAttribute + 13, // 9: apipb.Attribute.originator_id:type_name -> apipb.OriginatorIdAttribute + 14, // 10: apipb.Attribute.cluster_list:type_name -> apipb.ClusterListAttribute + 15, // 11: apipb.Attribute.mp_reach:type_name -> apipb.MpReachNLRIAttribute + 16, // 12: apipb.Attribute.mp_unreach:type_name -> apipb.MpUnreachNLRIAttribute + 17, // 13: apipb.Attribute.extended_communities:type_name -> apipb.ExtendedCommunitiesAttribute + 18, // 14: apipb.Attribute.as4_path:type_name -> apipb.As4PathAttribute + 19, // 15: apipb.Attribute.as4_aggregator:type_name -> apipb.As4AggregatorAttribute + 20, // 16: apipb.Attribute.pmsi_tunnel:type_name -> apipb.PmsiTunnelAttribute + 41, // 17: apipb.Attribute.tunnel_encap:type_name -> apipb.TunnelEncapAttribute + 44, // 18: apipb.Attribute.ip6_extended_communities:type_name -> apipb.IP6ExtendedCommunitiesAttribute + 47, // 19: apipb.Attribute.aigp:type_name -> apipb.AigpAttribute + 49, // 20: apipb.Attribute.large_communities:type_name -> apipb.LargeCommunitiesAttribute + 61, // 21: apipb.Attribute.ls:type_name -> apipb.LsAttribute + 72, // 22: apipb.Attribute.prefix_sid:type_name -> apipb.PrefixSID + 2, // 23: apipb.AsSegment.type:type_name -> apipb.AsSegment.Type + 5, // 24: apipb.AsPathAttribute.segments:type_name -> apipb.AsSegment + 81, // 25: apipb.MpReachNLRIAttribute.family:type_name -> apipb.Family + 82, // 26: apipb.MpReachNLRIAttribute.nlris:type_name -> apipb.NLRI + 81, // 27: apipb.MpUnreachNLRIAttribute.family:type_name -> apipb.Family + 82, // 28: apipb.MpUnreachNLRIAttribute.nlris:type_name -> apipb.NLRI + 83, // 29: apipb.ExtendedCommunitiesAttribute.communities:type_name -> apipb.ExtendedCommunity + 5, // 30: apipb.As4PathAttribute.segments:type_name -> apipb.AsSegment + 28, // 31: apipb.TunnelEncapSubTLVSRBindingSID.sr_binding_sid:type_name -> apipb.SRBindingSID + 30, // 32: apipb.TunnelEncapSubTLVSRBindingSID.srv6_binding_sid:type_name -> apipb.SRv6BindingSID + 0, // 33: apipb.SRv6EndPointBehavior.behavior:type_name -> apipb.SRv6Behavior + 29, // 34: apipb.SRv6BindingSID.endpoint_behavior_structure:type_name -> apipb.SRv6EndPointBehavior + 1, // 35: apipb.TunnelEncapSubTLVSRENLP.enlp:type_name -> apipb.ENLPType + 33, // 36: apipb.SegmentTypeA.flags:type_name -> apipb.SegmentFlags + 33, // 37: apipb.SegmentTypeB.flags:type_name -> apipb.SegmentFlags + 29, // 38: apipb.SegmentTypeB.endpoint_behavior_structure:type_name -> apipb.SRv6EndPointBehavior + 32, // 39: apipb.TunnelEncapSubTLVSRSegmentList.weight:type_name -> apipb.SRWeight + 73, // 40: apipb.TunnelEncapSubTLVSRSegmentList.segments:type_name -> apipb.TunnelEncapSubTLVSRSegmentList.Segment + 74, // 41: apipb.TunnelEncapTLV.tlvs:type_name -> apipb.TunnelEncapTLV.TLV + 40, // 42: apipb.TunnelEncapAttribute.tlvs:type_name -> apipb.TunnelEncapTLV + 75, // 43: apipb.IP6ExtendedCommunitiesAttribute.communities:type_name -> apipb.IP6ExtendedCommunitiesAttribute.Community + 76, // 44: apipb.AigpAttribute.tlvs:type_name -> apipb.AigpAttribute.TLV + 48, // 45: apipb.LargeCommunitiesAttribute.communities:type_name -> apipb.LargeCommunity + 52, // 46: apipb.LsSrCapabilities.ranges:type_name -> apipb.LsSrRange + 52, // 47: apipb.LsSrLocalBlock.ranges:type_name -> apipb.LsSrRange + 50, // 48: apipb.LsAttributeNode.flags:type_name -> apipb.LsNodeFlags + 53, // 49: apipb.LsAttributeNode.sr_capabilities:type_name -> apipb.LsSrCapabilities + 54, // 50: apipb.LsAttributeNode.sr_local_block:type_name -> apipb.LsSrLocalBlock + 51, // 51: apipb.LsAttributePrefix.igp_flags:type_name -> apipb.LsIGPFlags + 58, // 52: apipb.LsBgpPeerSegmentSID.flags:type_name -> apipb.LsBgpPeerSegmentSIDFlags + 59, // 53: apipb.LsAttributeBgpPeerSegment.bgp_peer_node_sid:type_name -> apipb.LsBgpPeerSegmentSID + 59, // 54: apipb.LsAttributeBgpPeerSegment.bgp_peer_adjacency_sid:type_name -> apipb.LsBgpPeerSegmentSID + 59, // 55: apipb.LsAttributeBgpPeerSegment.bgp_peer_set_sid:type_name -> apipb.LsBgpPeerSegmentSID + 55, // 56: apipb.LsAttribute.node:type_name -> apipb.LsAttributeNode + 56, // 57: apipb.LsAttribute.link:type_name -> apipb.LsAttributeLink + 57, // 58: apipb.LsAttribute.prefix:type_name -> apipb.LsAttributePrefix + 60, // 59: apipb.LsAttribute.bgp_peer_segment:type_name -> apipb.LsAttributeBgpPeerSegment + 63, // 60: apipb.SRv6SubSubTLV.structure:type_name -> apipb.SRv6StructureSubSubTLV + 64, // 61: apipb.SRv6SubSubTLVs.tlvs:type_name -> apipb.SRv6SubSubTLV + 66, // 62: apipb.SRv6InformationSubTLV.flags:type_name -> apipb.SRv6SIDFlags + 77, // 63: apipb.SRv6InformationSubTLV.sub_sub_tlvs:type_name -> apipb.SRv6InformationSubTLV.SubSubTlvsEntry + 67, // 64: apipb.SRv6SubTLV.information:type_name -> apipb.SRv6InformationSubTLV + 68, // 65: apipb.SRv6SubTLVs.tlvs:type_name -> apipb.SRv6SubTLV + 78, // 66: apipb.SRv6L3ServiceTLV.sub_tlvs:type_name -> apipb.SRv6L3ServiceTLV.SubTlvsEntry + 79, // 67: apipb.SRv6L2ServiceTLV.sub_tlvs:type_name -> apipb.SRv6L2ServiceTLV.SubTlvsEntry + 80, // 68: apipb.PrefixSID.tlvs:type_name -> apipb.PrefixSID.TLV + 34, // 69: apipb.TunnelEncapSubTLVSRSegmentList.Segment.a:type_name -> apipb.SegmentTypeA + 35, // 70: apipb.TunnelEncapSubTLVSRSegmentList.Segment.b:type_name -> apipb.SegmentTypeB + 39, // 71: apipb.TunnelEncapTLV.TLV.unknown:type_name -> apipb.TunnelEncapSubTLVUnknown + 21, // 72: apipb.TunnelEncapTLV.TLV.encapsulation:type_name -> apipb.TunnelEncapSubTLVEncapsulation + 22, // 73: apipb.TunnelEncapTLV.TLV.protocol:type_name -> apipb.TunnelEncapSubTLVProtocol + 23, // 74: apipb.TunnelEncapTLV.TLV.color:type_name -> apipb.TunnelEncapSubTLVColor + 37, // 75: apipb.TunnelEncapTLV.TLV.egress_endpoint:type_name -> apipb.TunnelEncapSubTLVEgressEndpoint + 38, // 76: apipb.TunnelEncapTLV.TLV.udp_dest_port:type_name -> apipb.TunnelEncapSubTLVUDPDestPort + 24, // 77: apipb.TunnelEncapTLV.TLV.sr_preference:type_name -> apipb.TunnelEncapSubTLVSRPreference + 26, // 78: apipb.TunnelEncapTLV.TLV.sr_priority:type_name -> apipb.TunnelEncapSubTLVSRPriority + 25, // 79: apipb.TunnelEncapTLV.TLV.sr_candidate_path_name:type_name -> apipb.TunnelEncapSubTLVSRCandidatePathName + 31, // 80: apipb.TunnelEncapTLV.TLV.sr_enlp:type_name -> apipb.TunnelEncapSubTLVSRENLP + 27, // 81: apipb.TunnelEncapTLV.TLV.sr_binding_sid:type_name -> apipb.TunnelEncapSubTLVSRBindingSID + 36, // 82: apipb.TunnelEncapTLV.TLV.sr_segment_list:type_name -> apipb.TunnelEncapSubTLVSRSegmentList + 42, // 83: apipb.IP6ExtendedCommunitiesAttribute.Community.ipv6_address_specific:type_name -> apipb.IPv6AddressSpecificExtended + 43, // 84: apipb.IP6ExtendedCommunitiesAttribute.Community.redirect_ipv6_address_specific:type_name -> apipb.RedirectIPv6AddressSpecificExtended + 46, // 85: apipb.AigpAttribute.TLV.unknown:type_name -> apipb.AigpTLVUnknown + 45, // 86: apipb.AigpAttribute.TLV.igp_metric:type_name -> apipb.AigpTLVIGPMetric + 65, // 87: apipb.SRv6InformationSubTLV.SubSubTlvsEntry.value:type_name -> apipb.SRv6SubSubTLVs + 69, // 88: apipb.SRv6L3ServiceTLV.SubTlvsEntry.value:type_name -> apipb.SRv6SubTLVs + 69, // 89: apipb.SRv6L2ServiceTLV.SubTlvsEntry.value:type_name -> apipb.SRv6SubTLVs + 70, // 90: apipb.PrefixSID.TLV.l3_service:type_name -> apipb.SRv6L3ServiceTLV + 71, // 91: apipb.PrefixSID.TLV.l2_service:type_name -> apipb.SRv6L2ServiceTLV + 92, // [92:92] is the sub-list for method output_type + 92, // [92:92] is the sub-list for method input_type + 92, // [92:92] is the sub-list for extension type_name + 92, // [92:92] is the sub-list for extension extendee + 0, // [0:92] is the sub-list for field type_name +} + +func init() { file_attribute_proto_init() } +func file_attribute_proto_init() { + if File_attribute_proto != nil { + return + } + file_common_proto_init() + file_extcom_proto_init() + file_nlri_proto_init() + if !protoimpl.UnsafeEnabled { + file_attribute_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Attribute); i { case 0: return &v.state case 1: @@ -9874,8 +6252,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IPv4AddressSpecificExtended); i { + file_attribute_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OriginAttribute); i { case 0: return &v.state case 1: @@ -9886,8 +6264,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FourOctetAsSpecificExtended); i { + file_attribute_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AsSegment); i { case 0: return &v.state case 1: @@ -9898,8 +6276,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LinkBandwidthExtended); i { + file_attribute_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AsPathAttribute); i { case 0: return &v.state case 1: @@ -9910,8 +6288,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ValidationExtended); i { + file_attribute_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NextHopAttribute); i { case 0: return &v.state case 1: @@ -9922,8 +6300,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ColorExtended); i { + file_attribute_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MultiExitDiscAttribute); i { case 0: return &v.state case 1: @@ -9934,8 +6312,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EncapExtended); i { + file_attribute_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LocalPrefAttribute); i { case 0: return &v.state case 1: @@ -9946,8 +6324,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DefaultGatewayExtended); i { + file_attribute_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AtomicAggregateAttribute); i { case 0: return &v.state case 1: @@ -9958,8 +6336,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OpaqueExtended); i { + file_attribute_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AggregatorAttribute); i { case 0: return &v.state case 1: @@ -9970,8 +6348,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ESILabelExtended); i { + file_attribute_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CommunitiesAttribute); i { case 0: return &v.state case 1: @@ -9982,8 +6360,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ESImportRouteTarget); i { + file_attribute_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OriginatorIdAttribute); i { case 0: return &v.state case 1: @@ -9994,8 +6372,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MacMobilityExtended); i { + file_attribute_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterListAttribute); i { case 0: return &v.state case 1: @@ -10006,8 +6384,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RouterMacExtended); i { + file_attribute_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MpReachNLRIAttribute); i { case 0: return &v.state case 1: @@ -10018,8 +6396,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TrafficRateExtended); i { + file_attribute_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MpUnreachNLRIAttribute); i { case 0: return &v.state case 1: @@ -10030,8 +6408,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TrafficActionExtended); i { + file_attribute_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExtendedCommunitiesAttribute); i { case 0: return &v.state case 1: @@ -10042,8 +6420,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RedirectTwoOctetAsSpecificExtended); i { + file_attribute_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*As4PathAttribute); i { case 0: return &v.state case 1: @@ -10054,8 +6432,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RedirectIPv4AddressSpecificExtended); i { + file_attribute_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*As4AggregatorAttribute); i { case 0: return &v.state case 1: @@ -10066,8 +6444,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RedirectFourOctetAsSpecificExtended); i { + file_attribute_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PmsiTunnelAttribute); i { case 0: return &v.state case 1: @@ -10078,8 +6456,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TrafficRemarkExtended); i { + file_attribute_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TunnelEncapSubTLVEncapsulation); i { case 0: return &v.state case 1: @@ -10090,8 +6468,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MUPExtended); i { + file_attribute_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TunnelEncapSubTLVProtocol); i { case 0: return &v.state case 1: @@ -10102,8 +6480,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VPLSExtended); i { + file_attribute_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TunnelEncapSubTLVColor); i { case 0: return &v.state case 1: @@ -10114,8 +6492,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnknownExtended); i { + file_attribute_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TunnelEncapSubTLVSRPreference); i { case 0: return &v.state case 1: @@ -10126,8 +6504,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExtendedCommunitiesAttribute); i { + file_attribute_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TunnelEncapSubTLVSRCandidatePathName); i { case 0: return &v.state case 1: @@ -10138,8 +6516,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*As4PathAttribute); i { + file_attribute_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TunnelEncapSubTLVSRPriority); i { case 0: return &v.state case 1: @@ -10150,8 +6528,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*As4AggregatorAttribute); i { + file_attribute_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TunnelEncapSubTLVSRBindingSID); i { case 0: return &v.state case 1: @@ -10162,8 +6540,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PmsiTunnelAttribute); i { + file_attribute_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SRBindingSID); i { case 0: return &v.state case 1: @@ -10174,8 +6552,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TunnelEncapSubTLVEncapsulation); i { + file_attribute_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SRv6EndPointBehavior); i { case 0: return &v.state case 1: @@ -10186,8 +6564,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TunnelEncapSubTLVProtocol); i { + file_attribute_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SRv6BindingSID); i { case 0: return &v.state case 1: @@ -10198,8 +6576,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TunnelEncapSubTLVColor); i { + file_attribute_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TunnelEncapSubTLVSRENLP); i { case 0: return &v.state case 1: @@ -10210,8 +6588,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TunnelEncapSubTLVSRPreference); i { + file_attribute_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SRWeight); i { case 0: return &v.state case 1: @@ -10222,8 +6600,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TunnelEncapSubTLVSRCandidatePathName); i { + file_attribute_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SegmentFlags); i { case 0: return &v.state case 1: @@ -10234,8 +6612,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TunnelEncapSubTLVSRPriority); i { + file_attribute_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SegmentTypeA); i { case 0: return &v.state case 1: @@ -10246,8 +6624,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TunnelEncapSubTLVSRBindingSID); i { + file_attribute_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SegmentTypeB); i { case 0: return &v.state case 1: @@ -10258,8 +6636,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SRBindingSID); i { + file_attribute_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TunnelEncapSubTLVSRSegmentList); i { case 0: return &v.state case 1: @@ -10270,8 +6648,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SRv6EndPointBehavior); i { + file_attribute_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TunnelEncapSubTLVEgressEndpoint); i { case 0: return &v.state case 1: @@ -10282,8 +6660,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SRv6BindingSID); i { + file_attribute_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TunnelEncapSubTLVUDPDestPort); i { case 0: return &v.state case 1: @@ -10294,8 +6672,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TunnelEncapSubTLVSRENLP); i { + file_attribute_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TunnelEncapSubTLVUnknown); i { case 0: return &v.state case 1: @@ -10306,8 +6684,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SRWeight); i { + file_attribute_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TunnelEncapTLV); i { case 0: return &v.state case 1: @@ -10318,8 +6696,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SegmentFlags); i { + file_attribute_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TunnelEncapAttribute); i { case 0: return &v.state case 1: @@ -10330,8 +6708,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SegmentTypeA); i { + file_attribute_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IPv6AddressSpecificExtended); i { case 0: return &v.state case 1: @@ -10342,8 +6720,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SegmentTypeB); i { + file_attribute_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RedirectIPv6AddressSpecificExtended); i { case 0: return &v.state case 1: @@ -10354,8 +6732,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TunnelEncapSubTLVSRSegmentList); i { + file_attribute_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IP6ExtendedCommunitiesAttribute); i { case 0: return &v.state case 1: @@ -10366,8 +6744,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TunnelEncapSubTLVEgressEndpoint); i { + file_attribute_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AigpTLVIGPMetric); i { case 0: return &v.state case 1: @@ -10378,8 +6756,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TunnelEncapSubTLVUDPDestPort); i { + file_attribute_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AigpTLVUnknown); i { case 0: return &v.state case 1: @@ -10390,8 +6768,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TunnelEncapSubTLVUnknown); i { + file_attribute_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AigpAttribute); i { case 0: return &v.state case 1: @@ -10402,8 +6780,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TunnelEncapTLV); i { + file_attribute_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LargeCommunity); i { case 0: return &v.state case 1: @@ -10414,8 +6792,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TunnelEncapAttribute); i { + file_attribute_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LargeCommunitiesAttribute); i { case 0: return &v.state case 1: @@ -10426,8 +6804,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IPv6AddressSpecificExtended); i { + file_attribute_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LsNodeFlags); i { case 0: return &v.state case 1: @@ -10438,8 +6816,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RedirectIPv6AddressSpecificExtended); i { + file_attribute_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LsIGPFlags); i { case 0: return &v.state case 1: @@ -10450,8 +6828,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IP6ExtendedCommunitiesAttribute); i { + file_attribute_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LsSrRange); i { case 0: return &v.state case 1: @@ -10462,8 +6840,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AigpTLVIGPMetric); i { + file_attribute_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LsSrCapabilities); i { case 0: return &v.state case 1: @@ -10474,8 +6852,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AigpTLVUnknown); i { + file_attribute_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LsSrLocalBlock); i { case 0: return &v.state case 1: @@ -10486,8 +6864,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AigpAttribute); i { + file_attribute_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LsAttributeNode); i { case 0: return &v.state case 1: @@ -10498,8 +6876,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LargeCommunity); i { + file_attribute_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LsAttributeLink); i { case 0: return &v.state case 1: @@ -10510,8 +6888,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LargeCommunitiesAttribute); i { + file_attribute_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LsAttributePrefix); i { case 0: return &v.state case 1: @@ -10522,8 +6900,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsNodeFlags); i { + file_attribute_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LsBgpPeerSegmentSIDFlags); i { case 0: return &v.state case 1: @@ -10534,8 +6912,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsIGPFlags); i { + file_attribute_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LsBgpPeerSegmentSID); i { case 0: return &v.state case 1: @@ -10546,8 +6924,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsSrRange); i { + file_attribute_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LsAttributeBgpPeerSegment); i { case 0: return &v.state case 1: @@ -10558,8 +6936,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsSrCapabilities); i { + file_attribute_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LsAttribute); i { case 0: return &v.state case 1: @@ -10570,8 +6948,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsSrLocalBlock); i { + file_attribute_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UnknownAttribute); i { case 0: return &v.state case 1: @@ -10582,8 +6960,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsAttributeNode); i { + file_attribute_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SRv6StructureSubSubTLV); i { case 0: return &v.state case 1: @@ -10594,8 +6972,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsAttributeLink); i { + file_attribute_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SRv6SubSubTLV); i { case 0: return &v.state case 1: @@ -10606,8 +6984,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsAttributePrefix); i { + file_attribute_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SRv6SubSubTLVs); i { case 0: return &v.state case 1: @@ -10618,8 +6996,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsBgpPeerSegmentSIDFlags); i { + file_attribute_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SRv6SIDFlags); i { case 0: return &v.state case 1: @@ -10630,8 +7008,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsBgpPeerSegmentSID); i { + file_attribute_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SRv6InformationSubTLV); i { case 0: return &v.state case 1: @@ -10642,8 +7020,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsAttributeBgpPeerSegment); i { + file_attribute_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SRv6SubTLV); i { case 0: return &v.state case 1: @@ -10654,8 +7032,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[115].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsAttribute); i { + file_attribute_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SRv6SubTLVs); i { case 0: return &v.state case 1: @@ -10666,8 +7044,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[116].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnknownAttribute); i { + file_attribute_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SRv6L3ServiceTLV); i { case 0: return &v.state case 1: @@ -10678,8 +7056,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[117].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SRv6StructureSubSubTLV); i { + file_attribute_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SRv6L2ServiceTLV); i { case 0: return &v.state case 1: @@ -10690,8 +7068,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[118].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SRv6SIDFlags); i { + file_attribute_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PrefixSID); i { case 0: return &v.state case 1: @@ -10702,8 +7080,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[119].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SRv6TLV); i { + file_attribute_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TunnelEncapSubTLVSRSegmentList_Segment); i { case 0: return &v.state case 1: @@ -10714,8 +7092,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[120].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SRv6InformationSubTLV); i { + file_attribute_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TunnelEncapTLV_TLV); i { case 0: return &v.state case 1: @@ -10726,8 +7104,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[121].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SRv6L3ServiceTLV); i { + file_attribute_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IP6ExtendedCommunitiesAttribute_Community); i { case 0: return &v.state case 1: @@ -10738,8 +7116,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[122].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SRv6L2ServiceTLV); i { + file_attribute_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AigpAttribute_TLV); i { case 0: return &v.state case 1: @@ -10750,8 +7128,8 @@ func file_attribute_proto_init() { return nil } } - file_attribute_proto_msgTypes[123].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PrefixSID); i { + file_attribute_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PrefixSID_TLV); i { case 0: return &v.state case 1: @@ -10763,13 +7141,78 @@ func file_attribute_proto_init() { } } } + file_attribute_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*Attribute_Unknown)(nil), + (*Attribute_Origin)(nil), + (*Attribute_AsPath)(nil), + (*Attribute_NextHop)(nil), + (*Attribute_MultiExitDisc)(nil), + (*Attribute_LocalPref)(nil), + (*Attribute_AtomicAggregate)(nil), + (*Attribute_Aggregator)(nil), + (*Attribute_Communities)(nil), + (*Attribute_OriginatorId)(nil), + (*Attribute_ClusterList)(nil), + (*Attribute_MpReach)(nil), + (*Attribute_MpUnreach)(nil), + (*Attribute_ExtendedCommunities)(nil), + (*Attribute_As4Path)(nil), + (*Attribute_As4Aggregator)(nil), + (*Attribute_PmsiTunnel)(nil), + (*Attribute_TunnelEncap)(nil), + (*Attribute_Ip6ExtendedCommunities)(nil), + (*Attribute_Aigp)(nil), + (*Attribute_LargeCommunities)(nil), + (*Attribute_Ls)(nil), + (*Attribute_PrefixSid)(nil), + } + file_attribute_proto_msgTypes[24].OneofWrappers = []interface{}{ + (*TunnelEncapSubTLVSRBindingSID_SrBindingSid)(nil), + (*TunnelEncapSubTLVSRBindingSID_Srv6BindingSid)(nil), + } + file_attribute_proto_msgTypes[61].OneofWrappers = []interface{}{ + (*SRv6SubSubTLV_Structure)(nil), + } + file_attribute_proto_msgTypes[65].OneofWrappers = []interface{}{ + (*SRv6SubTLV_Information)(nil), + } + file_attribute_proto_msgTypes[70].OneofWrappers = []interface{}{ + (*TunnelEncapSubTLVSRSegmentList_Segment_A)(nil), + (*TunnelEncapSubTLVSRSegmentList_Segment_B)(nil), + } + file_attribute_proto_msgTypes[71].OneofWrappers = []interface{}{ + (*TunnelEncapTLV_TLV_Unknown)(nil), + (*TunnelEncapTLV_TLV_Encapsulation)(nil), + (*TunnelEncapTLV_TLV_Protocol)(nil), + (*TunnelEncapTLV_TLV_Color)(nil), + (*TunnelEncapTLV_TLV_EgressEndpoint)(nil), + (*TunnelEncapTLV_TLV_UdpDestPort)(nil), + (*TunnelEncapTLV_TLV_SrPreference)(nil), + (*TunnelEncapTLV_TLV_SrPriority)(nil), + (*TunnelEncapTLV_TLV_SrCandidatePathName)(nil), + (*TunnelEncapTLV_TLV_SrEnlp)(nil), + (*TunnelEncapTLV_TLV_SrBindingSid)(nil), + (*TunnelEncapTLV_TLV_SrSegmentList)(nil), + } + file_attribute_proto_msgTypes[72].OneofWrappers = []interface{}{ + (*IP6ExtendedCommunitiesAttribute_Community_Ipv6AddressSpecific)(nil), + (*IP6ExtendedCommunitiesAttribute_Community_RedirectIpv6AddressSpecific)(nil), + } + file_attribute_proto_msgTypes[73].OneofWrappers = []interface{}{ + (*AigpAttribute_TLV_Unknown)(nil), + (*AigpAttribute_TLV_IgpMetric)(nil), + } + file_attribute_proto_msgTypes[77].OneofWrappers = []interface{}{ + (*PrefixSID_TLV_L3Service)(nil), + (*PrefixSID_TLV_L2Service)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_attribute_proto_rawDesc, - NumEnums: 6, - NumMessages: 127, + NumEnums: 3, + NumMessages: 78, NumExtensions: 0, NumServices: 0, }, diff --git a/api/attribute.proto b/api/attribute.proto index 21764f91a..7f9779438 100644 --- a/api/attribute.proto +++ b/api/attribute.proto @@ -24,9 +24,38 @@ syntax = "proto3"; package apipb; option go_package = "github.com/osrg/gobgp/v3/api;apipb"; -import "google/protobuf/any.proto"; -import "gobgp.proto"; - +import "common.proto"; +import "extcom.proto"; +import "nlri.proto"; + + +message Attribute { + oneof attr { + UnknownAttribute unknown = 1; + OriginAttribute origin = 2; + AsPathAttribute as_path = 3; + NextHopAttribute next_hop = 4; + MultiExitDiscAttribute multi_exit_disc = 5; + LocalPrefAttribute local_pref = 6; + AtomicAggregateAttribute atomic_aggregate = 7; + AggregatorAttribute aggregator = 8; + CommunitiesAttribute communities = 9; + OriginatorIdAttribute originator_id = 10; + ClusterListAttribute cluster_list = 11; + MpReachNLRIAttribute mp_reach = 12; + MpUnreachNLRIAttribute mp_unreach = 13; + ExtendedCommunitiesAttribute extended_communities = 14; + As4PathAttribute as4_path = 15; + As4AggregatorAttribute as4_aggregator = 16; + PmsiTunnelAttribute pmsi_tunnel = 17; + TunnelEncapAttribute tunnel_encap = 18; + IP6ExtendedCommunitiesAttribute ip6_extended_communities = 19; + AigpAttribute aigp = 20; + LargeCommunitiesAttribute large_communities = 21; + LsAttribute ls = 22; + PrefixSID prefix_sid = 23; + } +} message OriginAttribute { uint32 origin = 1; } @@ -60,522 +89,20 @@ message OriginatorIdAttribute { string id = 1; } message ClusterListAttribute { repeated string ids = 1; } -// IPAddressPrefix represents the NLRI for: -// - AFI=1, SAFI=1 -// - AFI=2, SAFI=1 -message IPAddressPrefix { - uint32 prefix_len = 1; - string prefix = 2; -} - -// LabeledIPAddressPrefix represents the NLRI for: -// - AFI=1, SAFI=4 -// - AFI=2, SAFI=4 -message LabeledIPAddressPrefix { - repeated uint32 labels = 1; - uint32 prefix_len = 2; - string prefix = 3; -} - -// EncapsulationNLRI represents the NLRI for: -// - AFI=1, SAFI=7 -// - AFI=2, SAFI=7 -message EncapsulationNLRI { string address = 1; } - -message RouteDistinguisherTwoOctetASN { - uint32 admin = 1; - uint32 assigned = 2; -} - -message RouteDistinguisherIPAddress { - string admin = 1; - uint32 assigned = 2; -} - -message RouteDistinguisherFourOctetASN { - uint32 admin = 1; - uint32 assigned = 2; -} - -message EthernetSegmentIdentifier { - uint32 type = 1; - bytes value = 2; -} - -// VPLSNLRI represents the NLRI for: -// - AFI=25, SAFI=65 -message VPLSNLRI { - // One of: - // - RouteDistinguisherTwoOctetASN - // - RouteDistinguisherIPAddress - // - RouteDistinguisherFourOctetASN - google.protobuf.Any rd = 1; - uint32 ve_id = 2; - uint32 ve_block_offset = 3; - uint32 ve_block_size = 4; - uint32 label_block_base = 5; -} - - -// EVPNEthernetAutoDiscoveryRoute represents the NLRI for: -// - AFI=25, SAFI=70, RouteType=1 -message EVPNEthernetAutoDiscoveryRoute { - // One of: - // - RouteDistinguisherTwoOctetASN - // - RouteDistinguisherIPAddress - // - RouteDistinguisherFourOctetASN - google.protobuf.Any rd = 1; - EthernetSegmentIdentifier esi = 2; - uint32 ethernet_tag = 3; - uint32 label = 4; -} - -// EVPNMACIPAdvertisementRoute represents the NLRI for: -// - AFI=25, SAFI=70, RouteType=2 -message EVPNMACIPAdvertisementRoute { - // One of: - // - RouteDistinguisherTwoOctetASN - // - RouteDistinguisherIPAddress - // - RouteDistinguisherFourOctetASN - google.protobuf.Any rd = 1; - EthernetSegmentIdentifier esi = 2; - uint32 ethernet_tag = 3; - string mac_address = 4; - string ip_address = 5; - repeated uint32 labels = 6; -} - -// EVPNInclusiveMulticastEthernetTagRoute represents the NLRI for: -// - AFI=25, SAFI=70, RouteType=3 -message EVPNInclusiveMulticastEthernetTagRoute { - // One of: - // - RouteDistinguisherTwoOctetASN - // - RouteDistinguisherIPAddress - // - RouteDistinguisherFourOctetASN - google.protobuf.Any rd = 1; - uint32 ethernet_tag = 2; - string ip_address = 3; -} - -// EVPNEthernetSegmentRoute represents the NLRI for: -// - AFI=25, SAFI=70, RouteType=4 -message EVPNEthernetSegmentRoute { - // One of: - // - RouteDistinguisherTwoOctetASN - // - RouteDistinguisherIPAddress - // - RouteDistinguisherFourOctetASN - google.protobuf.Any rd = 1; - EthernetSegmentIdentifier esi = 2; - string ip_address = 3; -} - -// EVPNIPPrefixRoute represents the NLRI for: -// - AFI=25, SAFI=70, RouteType=5 -message EVPNIPPrefixRoute { - // One of: - // - RouteDistinguisherTwoOctetASN - // - RouteDistinguisherIPAddress - // - RouteDistinguisherFourOctetASN - google.protobuf.Any rd = 1; - EthernetSegmentIdentifier esi = 2; - uint32 ethernet_tag = 3; - string ip_prefix = 4; - uint32 ip_prefix_len = 5; - string gw_address = 6; - uint32 label = 7; -} - -// EVPNIPMSIRoute represents the NLRI for: -// - AFI=25, SAFI=70, RouteType=9 -message EVPNIPMSIRoute { - // One of: - // - RouteDistinguisherTwoOctetASN - // - RouteDistinguisherIPAddress - // - RouteDistinguisherFourOctetASN - google.protobuf.Any rd = 1; - uint32 ethernet_tag = 2; - google.protobuf.Any rt = 3; -} - -// SRPolicyNLRI represents the NLRI for: -// - AFI=1, SAFI=73 -// - AFI=2, SAFI=73 -message SRPolicyNLRI { - // length field carries the length of NLRI portion expressed in bits - uint32 length = 1; - // distinguisher field carries 4-octet value uniquely identifying the policy - // in the context of tuple. - uint32 distinguisher = 2; - // color field carries 4-octet value identifying (with the endpoint) the - // policy. The color is used to match the color of the destination - // prefixes to steer traffic into the SR Policy - uint32 color = 3; - // endpoint field identifies the endpoint of a policy. The Endpoint may - // represent a single node or a set of nodes (e.g., an anycast - // address). The Endpoint is an IPv4 (4-octet) address or an IPv6 - // (16-octet) address according to the AFI of the NLRI. - bytes endpoint = 4; -} - -// LabeledVPNIPAddressPrefix represents the NLRI for: -// - AFI=1, SAFI=128 -// - AFI=2, SAFI=128 -message LabeledVPNIPAddressPrefix { - repeated uint32 labels = 1; - // One of: - // - TwoOctetAsSpecificExtended - // - IPv4AddressSpecificExtended - // - FourOctetAsSpecificExtended - google.protobuf.Any rd = 2; - uint32 prefix_len = 3; - string prefix = 4; -} - -// RouteTargetMembershipNLRI represents the NLRI for: -// - AFI=1, SAFI=132 -message RouteTargetMembershipNLRI { - uint32 asn = 1; - // One of: - // - TwoOctetAsSpecificExtended - // - IPv4AddressSpecificExtended - // - FourOctetAsSpecificExtended - google.protobuf.Any rt = 2; -} - -message FlowSpecIPPrefix { - uint32 type = 1; - uint32 prefix_len = 2; - string prefix = 3; - // IPv6 only - uint32 offset = 4; -} - -message FlowSpecMAC { - uint32 type = 1; - string address = 2; -} - -message FlowSpecComponentItem { - // Operator for Numeric type, Operand for Bitmask type - uint32 op = 1; - uint64 value = 2; -} - -message FlowSpecComponent { - uint32 type = 1; - repeated FlowSpecComponentItem items = 2; -} - -// FlowSpecNLRI represents the NLRI for: -// - AFI=1, SAFI=133 -// - AFI=2, SAFI=133 -message FlowSpecNLRI { - // One of: - // - FlowSpecIPPrefix - // - FlowSpecMAC - // - FlowSpecComponent - repeated google.protobuf.Any rules = 1; -} - -// VPNFlowSpecNLRI represents the NLRI for: -// - AFI=1, SAFI=134 -// - AFI=2, SAFI=134 -// - AFI=25, SAFI=134 -message VPNFlowSpecNLRI { - // One of: - // - RouteDistinguisherTwoOctetAS - // - RouteDistinguisherIPAddressAS - // - RouteDistinguisherFourOctetAS - google.protobuf.Any rd = 1; - // One of: - // - FlowSpecIPPrefix - // - FlowSpecMAC - // - FlowSpecComponent - repeated google.protobuf.Any rules = 2; -} - -// OpaqueNLRI represents the NLRI for: -// - AFI=16397, SAFI=241 -message OpaqueNLRI { - bytes key = 1; - bytes value = 2; -} - -message LsNodeDescriptor { - uint32 asn = 1; - uint32 bgp_ls_id = 2; - uint32 ospf_area_id = 3; - bool pseudonode = 4; - string igp_router_id = 5; - string bgp_router_id = 6; - uint32 bgp_confederation_member = 7; -} - -message LsLinkDescriptor { - uint32 link_local_id = 1; - uint32 link_remote_id = 2; - string interface_addr_ipv4 = 3; - string neighbor_addr_ipv4 = 4; - string interface_addr_ipv6 = 5; - string neighbor_addr_ipv6 = 6; -} - -enum LsOspfRouteType { - LS_OSPF_ROUTE_TYPE_UNKNOWN = 0; - LS_OSPF_ROUTE_TYPE_INTRA_AREA = 1; - LS_OSPF_ROUTE_TYPE_INTER_AREA = 2; - LS_OSPF_ROUTE_TYPE_EXTERNAL1 = 3; - LS_OSPF_ROUTE_TYPE_EXTERNAL2 = 4; - LS_OSPF_ROUTE_TYPE_NSSA1 = 5; - LS_OSPF_ROUTE_TYPE_NSSA2 = 6; -} - -message LsPrefixDescriptor { - repeated string ip_reachability = 1; - LsOspfRouteType ospf_route_type = 2; -} - -message LsNodeNLRI { LsNodeDescriptor local_node = 1; } - -message LsLinkNLRI { - LsNodeDescriptor local_node = 1; - LsNodeDescriptor remote_node = 2; - LsLinkDescriptor link_descriptor = 3; -} - -message LsPrefixV4NLRI { - LsNodeDescriptor local_node = 1; - LsPrefixDescriptor prefix_descriptor = 2; -} - -message LsPrefixV6NLRI { - LsNodeDescriptor local_node = 1; - LsPrefixDescriptor prefix_descriptor = 2; -} - -// Based om RFC 7752, Table 1. -enum LsNLRIType { - LS_NLRI_UNKNOWN = 0; LS_NLRI_NODE = 1; LS_NLRI_LINK = 2; - LS_NLRI_PREFIX_V4 = 3; - LS_NLRI_PREFIX_V6 = 4; -} - -enum LsProtocolID { - LS_PROTOCOL_UNKNOWN = 0; LS_PROTOCOL_ISIS_L1 = 1; LS_PROTOCOL_ISIS_L2 = 2; - LS_PROTOCOL_OSPF_V2 = 3; - LS_PROTOCOL_DIRECT = 4; - LS_PROTOCOL_STATIC = 5; - LS_PROTOCOL_OSPF_V3 = 6; -} - -// LsAddrPrefix represents the NLRI for: -// - AFI=16388, SAFI=71 -message LsAddrPrefix { - LsNLRIType type = 1; - // One of: - // - LsNodeNLRI - // - LsLinkNLRI - // - LsPrefixV4NLRI - // - LsPrefixV6NLRI - google.protobuf.Any nlri = 2; - uint32 length = 3; - LsProtocolID protocol_id = 4; - uint64 identifier = 5; -} - -message MUPInterworkSegmentDiscoveryRoute { - // One of: - // - RouteDistinguisherTwoOctetASN - // - RouteDistinguisherIPAddress - // - RouteDistinguisherFourOctetASN - google.protobuf.Any rd = 1; - string prefix = 2; -} - -message MUPDirectSegmentDiscoveryRoute { - // One of: - // - RouteDistinguisherTwoOctetASN - // - RouteDistinguisherIPAddress - // - RouteDistinguisherFourOctetASN - google.protobuf.Any rd = 1; - string address = 2; -} - -message MUPType1SessionTransformedRoute { - // One of: - // - RouteDistinguisherTwoOctetASN - // - RouteDistinguisherIPAddress - // - RouteDistinguisherFourOctetASN - google.protobuf.Any rd = 1; - uint32 prefix_length = 2 [deprecated = true]; - string prefix = 3; - uint32 teid = 4; - uint32 qfi = 5; - uint32 endpoint_address_length = 6; - string endpoint_address = 7; - uint32 source_address_length = 8; - string source_address = 9; -} - -message MUPType2SessionTransformedRoute { - // One of: - // - RouteDistinguisherTwoOctetASN - // - RouteDistinguisherIPAddress - // - RouteDistinguisherFourOctetASN - google.protobuf.Any rd = 1; - uint32 endpoint_address_length = 2; - string endpoint_address = 3; - uint32 teid = 4; -} - message MpReachNLRIAttribute { - apipb.Family family = 1; + Family family = 1; repeated string next_hops = 2; - // Each NLRI must be one of: - // - IPAddressPrefix - // - LabeledIPAddressPrefix - // - EncapsulationNLRI - // - EVPNEthernetAutoDiscoveryRoute - // - EVPNMACIPAdvertisementRoute - // - EVPNInclusiveMulticastEthernetTagRoute - // - EVPNEthernetSegmentRoute - // - EVPNIPPrefixRoute - // - EVPNIPMSIRoute - // - LabeledVPNIPAddressPrefix - // - RouteTargetMembershipNLRI - // - FlowSpecNLRI - // - VPNFlowSpecNLRI - // - OpaqueNLRI - // - LsAddrPrefix - // - SR Policy NLRI - // - MUPInterworkSegmentDiscoveryRoute - // - MUPDirectSegmentDiscoveryRoute - // - MUPType1SessionTransformedRoute - // - MUPType2SessionTransformedRoute - repeated google.protobuf.Any nlris = 3; + repeated NLRI nlris = 3; } message MpUnreachNLRIAttribute { apipb.Family family = 1; // The same as NLRI field of MpReachNLRIAttribute - repeated google.protobuf.Any nlris = 3; -} - -message TwoOctetAsSpecificExtended { - bool is_transitive = 1; - uint32 sub_type = 2; - uint32 asn = 3; - uint32 local_admin = 4; -} - -message IPv4AddressSpecificExtended { - bool is_transitive = 1; - uint32 sub_type = 2; - string address = 3; - uint32 local_admin = 4; -} - -message FourOctetAsSpecificExtended { - bool is_transitive = 1; - uint32 sub_type = 2; - uint32 asn = 3; - uint32 local_admin = 4; -} - -message LinkBandwidthExtended { - uint32 asn = 1; - float bandwidth = 2; -} - -message ValidationExtended { uint32 state = 1; } - -message ColorExtended { uint32 color = 1; } - -message EncapExtended { uint32 tunnel_type = 1; } - -message DefaultGatewayExtended {} - -message OpaqueExtended { - bool is_transitive = 1; - bytes value = 3; -} - -message ESILabelExtended { - bool is_single_active = 1; - uint32 label = 2; -} - -message ESImportRouteTarget { string es_import = 1; } - -message MacMobilityExtended { - bool is_sticky = 1; - uint32 sequence_num = 2; -} - -message RouterMacExtended { string mac = 1; } - -message TrafficRateExtended { - uint32 asn = 1; - float rate = 2; -} - -message TrafficActionExtended { - bool terminal = 1; - bool sample = 2; -} - -message RedirectTwoOctetAsSpecificExtended { - uint32 asn = 1; - uint32 local_admin = 2; -} - -message RedirectIPv4AddressSpecificExtended { - string address = 1; - uint32 local_admin = 2; -} - -message RedirectFourOctetAsSpecificExtended { - uint32 asn = 1; - uint32 local_admin = 2; -} - -message TrafficRemarkExtended { uint32 dscp = 1; } - -message MUPExtended { - uint32 sub_type = 1; - uint32 segment_id2 = 2; - uint32 segment_id4 = 3; -} - -message VPLSExtended { - uint32 control_flags = 1; - uint32 mtu = 2; -} - -message UnknownExtended { - uint32 type = 1; - bytes value = 2; + repeated NLRI nlris = 3; } message ExtendedCommunitiesAttribute { - // Each Community must be one of: - // - TwoOctetAsSpecificExtended - // - IPv4AddressSpecificExtended - // - FourOctetAsSpecificExtended - // - OpaqueExtended - // - ESILabelExtended - // - MacMobilityExtended - // - RouterMacExtended - // - TrafficRateExtended - // - TrafficActionExtended - // - RedirectTwoOctetAsSpecificExtended - // - RedirectIPv4AddressSpecificExtended - // - RedirectFourOctetAsSpecificExtended - // - TrafficRemarkExtended - // - MUPExtended - // - VPLSExtended - // - UnknownExtended - repeated google.protobuf.Any communities = 1; + repeated ExtendedCommunity communities = 1; } message As4PathAttribute { repeated AsSegment segments = 1; } @@ -611,10 +138,10 @@ message TunnelEncapSubTLVSRCandidatePathName { string candidate_path_name = 1; } message TunnelEncapSubTLVSRPriority { uint32 priority = 1; } message TunnelEncapSubTLVSRBindingSID { - // bsid must be one of: - // - SRBindingSID - // - SRv6BindingSID - google.protobuf.Any bsid = 1; + oneof bsid { + SRBindingSID sr_binding_sid = 1; + SRv6BindingSID srv6_binding_sid = 2; + } } message SRBindingSID { @@ -712,10 +239,14 @@ message SegmentTypeB { message TunnelEncapSubTLVSRSegmentList { SRWeight weight = 1; - // segments must be one of: - // - SegmentTypeA - // - SegmentTypeB - repeated google.protobuf.Any segments = 2; + + message Segment { + oneof segment { + SegmentTypeA a = 1; + SegmentTypeB b = 2; + } + } + repeated Segment segments = 2; } message TunnelEncapSubTLVEgressEndpoint { @@ -733,13 +264,23 @@ message TunnelEncapSubTLVUnknown { message TunnelEncapTLV { uint32 type = 1; - // Each TLV must be one of: - // - TunnelEncapSubTLVEncapsulation - // - TunnelEncapSubTLVProtocol - // - TunnelEncapSubTLVColor - // - TunnelEncapSubTLVSRPolicy - // - TunnelEncapSubTLVUnknown - repeated google.protobuf.Any tlvs = 2; + message TLV { + oneof tlv { + TunnelEncapSubTLVUnknown unknown = 1; + TunnelEncapSubTLVEncapsulation encapsulation = 2; + TunnelEncapSubTLVProtocol protocol = 3; + TunnelEncapSubTLVColor color = 4; + TunnelEncapSubTLVEgressEndpoint egress_endpoint = 5; + TunnelEncapSubTLVUDPDestPort udp_dest_port = 6; + TunnelEncapSubTLVSRPreference sr_preference = 7; + TunnelEncapSubTLVSRPriority sr_priority = 8; + TunnelEncapSubTLVSRCandidatePathName sr_candidate_path_name = 9; + TunnelEncapSubTLVSRENLP sr_enlp = 10; + TunnelEncapSubTLVSRBindingSID sr_binding_sid = 11; + TunnelEncapSubTLVSRSegmentList sr_segment_list = 12; + } + } + repeated TLV tlvs = 2; } message TunnelEncapAttribute { repeated TunnelEncapTLV tlvs = 1; } @@ -757,10 +298,13 @@ message RedirectIPv6AddressSpecificExtended { } message IP6ExtendedCommunitiesAttribute { - // Each Community must be one of: - // - IPv6AddressSpecificExtended - // - RedirectIPv6AddressSpecificExtended - repeated google.protobuf.Any communities = 1; + message Community { + oneof extcom { + IPv6AddressSpecificExtended ipv6_address_specific = 1; + RedirectIPv6AddressSpecificExtended redirect_ipv6_address_specific = 2; + } + } + repeated Community communities = 1; } message AigpTLVIGPMetric { uint64 metric = 1; } @@ -771,10 +315,13 @@ message AigpTLVUnknown { } message AigpAttribute { - // Each TLV must be one of: - // - AigpTLVIGPMetric - // - AigpTLVUnknown - repeated google.protobuf.Any tlvs = 1; + message TLV { + oneof tlv { + AigpTLVUnknown unknown = 1; + AigpTLVIGPMetric igp_metric = 2; + } + } + repeated TLV tlvs = 1; } message LargeCommunity { @@ -895,43 +442,59 @@ message SRv6StructureSubSubTLV { uint32 transposition_offset = 6; } +message SRv6SubSubTLV { + oneof tlv { + SRv6StructureSubSubTLV structure = 1; + } +} + +message SRv6SubSubTLVs { + repeated SRv6SubSubTLV tlvs = 1; +} + message SRv6SIDFlags { // Placeholder for future sid flags bool flag_1 = 1; } -message SRv6TLV { repeated google.protobuf.Any tlv = 1; } - // https://tools.ietf.org/html/draft-dawra-bess-srv6-services-02#section-2.1.1 message SRv6InformationSubTLV { bytes sid = 1; SRv6SIDFlags flags = 2; uint32 endpoint_behavior = 3; - // SRv6TLV is one of: - // - SRv6StructureSubSubTLV - map sub_sub_tlvs = 4; + map sub_sub_tlvs = 4; +} + +message SRv6SubTLV { + oneof tlv { + SRv6InformationSubTLV information = 1; + } +} + +message SRv6SubTLVs { + repeated SRv6SubTLV tlvs = 1; } // https://www.rfc-editor.org/rfc/rfc9252.html#section-2 message SRv6L3ServiceTLV { - // SRv6TLV is one of: - // - SRv6InformationSubTLV - map sub_tlvs = 1; + map sub_tlvs = 1; } // https://www.rfc-editor.org/rfc/rfc9252.html#section-2 message SRv6L2ServiceTLV { - // SRv6TLV is one of: - // - SRv6InformationSubTLV - map sub_tlvs = 1; + map sub_tlvs = 1; } // https://tools.ietf.org/html/rfc8669 message PrefixSID { // tlv is one of: - // - IndexLabelTLV Type 1 (not yet implemented) - // - OriginatorSRGBTLV Type 3 (not yet implemented) - // - SRv6L3ServiceTLV Type 5 - // - SRv6L2ServiceTLV Type 6 - repeated google.protobuf.Any tlvs = 1; + message TLV { + oneof tlv { + // IndexLabelTLV Type 1 (not yet implemented) + // OriginatorSRGBTLV Type 3 (not yet implemented) + SRv6L3ServiceTLV l3_service = 3; + SRv6L2ServiceTLV l2_service = 4; + } + } + repeated TLV tlvs = 1; } diff --git a/api/capability.pb.go b/api/capability.pb.go index 379fca6ce..052e8d1bd 100644 --- a/api/capability.pb.go +++ b/api/capability.pb.go @@ -22,7 +22,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.21.12 +// protoc v5.29.2 // source: capability.proto package apipb @@ -90,9 +90,244 @@ func (x AddPathCapabilityTuple_Mode) Number() protoreflect.EnumNumber { // Deprecated: Use AddPathCapabilityTuple_Mode.Descriptor instead. func (AddPathCapabilityTuple_Mode) EnumDescriptor() ([]byte, []int) { - return file_capability_proto_rawDescGZIP(), []int{8, 0} + return file_capability_proto_rawDescGZIP(), []int{9, 0} } +type Capability struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Cap: + // + // *Capability_Unknown + // *Capability_MultiProtocol + // *Capability_RouteRefresh + // *Capability_CarryingLabelInfo + // *Capability_ExtendedNexthop + // *Capability_GracefulRestart + // *Capability_FourOctetAsn + // *Capability_AddPath + // *Capability_EnhancedRouteRefresh + // *Capability_LongLivedGracefulRestart + // *Capability_RouteRefreshCisco + // *Capability_Fqdn + // *Capability_SoftwareVersion + Cap isCapability_Cap `protobuf_oneof:"cap"` +} + +func (x *Capability) Reset() { + *x = Capability{} + if protoimpl.UnsafeEnabled { + mi := &file_capability_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Capability) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Capability) ProtoMessage() {} + +func (x *Capability) ProtoReflect() protoreflect.Message { + mi := &file_capability_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Capability.ProtoReflect.Descriptor instead. +func (*Capability) Descriptor() ([]byte, []int) { + return file_capability_proto_rawDescGZIP(), []int{0} +} + +func (m *Capability) GetCap() isCapability_Cap { + if m != nil { + return m.Cap + } + return nil +} + +func (x *Capability) GetUnknown() *UnknownCapability { + if x, ok := x.GetCap().(*Capability_Unknown); ok { + return x.Unknown + } + return nil +} + +func (x *Capability) GetMultiProtocol() *MultiProtocolCapability { + if x, ok := x.GetCap().(*Capability_MultiProtocol); ok { + return x.MultiProtocol + } + return nil +} + +func (x *Capability) GetRouteRefresh() *RouteRefreshCapability { + if x, ok := x.GetCap().(*Capability_RouteRefresh); ok { + return x.RouteRefresh + } + return nil +} + +func (x *Capability) GetCarryingLabelInfo() *CarryingLabelInfoCapability { + if x, ok := x.GetCap().(*Capability_CarryingLabelInfo); ok { + return x.CarryingLabelInfo + } + return nil +} + +func (x *Capability) GetExtendedNexthop() *ExtendedNexthopCapability { + if x, ok := x.GetCap().(*Capability_ExtendedNexthop); ok { + return x.ExtendedNexthop + } + return nil +} + +func (x *Capability) GetGracefulRestart() *GracefulRestartCapability { + if x, ok := x.GetCap().(*Capability_GracefulRestart); ok { + return x.GracefulRestart + } + return nil +} + +func (x *Capability) GetFourOctetAsn() *FourOctetASNCapability { + if x, ok := x.GetCap().(*Capability_FourOctetAsn); ok { + return x.FourOctetAsn + } + return nil +} + +func (x *Capability) GetAddPath() *AddPathCapability { + if x, ok := x.GetCap().(*Capability_AddPath); ok { + return x.AddPath + } + return nil +} + +func (x *Capability) GetEnhancedRouteRefresh() *EnhancedRouteRefreshCapability { + if x, ok := x.GetCap().(*Capability_EnhancedRouteRefresh); ok { + return x.EnhancedRouteRefresh + } + return nil +} + +func (x *Capability) GetLongLivedGracefulRestart() *LongLivedGracefulRestartCapability { + if x, ok := x.GetCap().(*Capability_LongLivedGracefulRestart); ok { + return x.LongLivedGracefulRestart + } + return nil +} + +func (x *Capability) GetRouteRefreshCisco() *RouteRefreshCiscoCapability { + if x, ok := x.GetCap().(*Capability_RouteRefreshCisco); ok { + return x.RouteRefreshCisco + } + return nil +} + +func (x *Capability) GetFqdn() *FqdnCapability { + if x, ok := x.GetCap().(*Capability_Fqdn); ok { + return x.Fqdn + } + return nil +} + +func (x *Capability) GetSoftwareVersion() *SoftwareVersionCapability { + if x, ok := x.GetCap().(*Capability_SoftwareVersion); ok { + return x.SoftwareVersion + } + return nil +} + +type isCapability_Cap interface { + isCapability_Cap() +} + +type Capability_Unknown struct { + Unknown *UnknownCapability `protobuf:"bytes,1,opt,name=unknown,proto3,oneof"` +} + +type Capability_MultiProtocol struct { + MultiProtocol *MultiProtocolCapability `protobuf:"bytes,2,opt,name=multi_protocol,json=multiProtocol,proto3,oneof"` +} + +type Capability_RouteRefresh struct { + RouteRefresh *RouteRefreshCapability `protobuf:"bytes,3,opt,name=route_refresh,json=routeRefresh,proto3,oneof"` +} + +type Capability_CarryingLabelInfo struct { + CarryingLabelInfo *CarryingLabelInfoCapability `protobuf:"bytes,4,opt,name=carrying_label_info,json=carryingLabelInfo,proto3,oneof"` +} + +type Capability_ExtendedNexthop struct { + ExtendedNexthop *ExtendedNexthopCapability `protobuf:"bytes,5,opt,name=extended_nexthop,json=extendedNexthop,proto3,oneof"` +} + +type Capability_GracefulRestart struct { + GracefulRestart *GracefulRestartCapability `protobuf:"bytes,6,opt,name=graceful_restart,json=gracefulRestart,proto3,oneof"` +} + +type Capability_FourOctetAsn struct { + FourOctetAsn *FourOctetASNCapability `protobuf:"bytes,7,opt,name=four_octet_asn,json=fourOctetAsn,proto3,oneof"` +} + +type Capability_AddPath struct { + AddPath *AddPathCapability `protobuf:"bytes,8,opt,name=add_path,json=addPath,proto3,oneof"` +} + +type Capability_EnhancedRouteRefresh struct { + EnhancedRouteRefresh *EnhancedRouteRefreshCapability `protobuf:"bytes,9,opt,name=enhanced_route_refresh,json=enhancedRouteRefresh,proto3,oneof"` +} + +type Capability_LongLivedGracefulRestart struct { + LongLivedGracefulRestart *LongLivedGracefulRestartCapability `protobuf:"bytes,10,opt,name=long_lived_graceful_restart,json=longLivedGracefulRestart,proto3,oneof"` +} + +type Capability_RouteRefreshCisco struct { + RouteRefreshCisco *RouteRefreshCiscoCapability `protobuf:"bytes,11,opt,name=route_refresh_cisco,json=routeRefreshCisco,proto3,oneof"` +} + +type Capability_Fqdn struct { + Fqdn *FqdnCapability `protobuf:"bytes,12,opt,name=fqdn,proto3,oneof"` +} + +type Capability_SoftwareVersion struct { + SoftwareVersion *SoftwareVersionCapability `protobuf:"bytes,13,opt,name=software_version,json=softwareVersion,proto3,oneof"` +} + +func (*Capability_Unknown) isCapability_Cap() {} + +func (*Capability_MultiProtocol) isCapability_Cap() {} + +func (*Capability_RouteRefresh) isCapability_Cap() {} + +func (*Capability_CarryingLabelInfo) isCapability_Cap() {} + +func (*Capability_ExtendedNexthop) isCapability_Cap() {} + +func (*Capability_GracefulRestart) isCapability_Cap() {} + +func (*Capability_FourOctetAsn) isCapability_Cap() {} + +func (*Capability_AddPath) isCapability_Cap() {} + +func (*Capability_EnhancedRouteRefresh) isCapability_Cap() {} + +func (*Capability_LongLivedGracefulRestart) isCapability_Cap() {} + +func (*Capability_RouteRefreshCisco) isCapability_Cap() {} + +func (*Capability_Fqdn) isCapability_Cap() {} + +func (*Capability_SoftwareVersion) isCapability_Cap() {} + type MultiProtocolCapability struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -104,7 +339,7 @@ type MultiProtocolCapability struct { func (x *MultiProtocolCapability) Reset() { *x = MultiProtocolCapability{} if protoimpl.UnsafeEnabled { - mi := &file_capability_proto_msgTypes[0] + mi := &file_capability_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -117,7 +352,7 @@ func (x *MultiProtocolCapability) String() string { func (*MultiProtocolCapability) ProtoMessage() {} func (x *MultiProtocolCapability) ProtoReflect() protoreflect.Message { - mi := &file_capability_proto_msgTypes[0] + mi := &file_capability_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -130,7 +365,7 @@ func (x *MultiProtocolCapability) ProtoReflect() protoreflect.Message { // Deprecated: Use MultiProtocolCapability.ProtoReflect.Descriptor instead. func (*MultiProtocolCapability) Descriptor() ([]byte, []int) { - return file_capability_proto_rawDescGZIP(), []int{0} + return file_capability_proto_rawDescGZIP(), []int{1} } func (x *MultiProtocolCapability) GetFamily() *Family { @@ -149,7 +384,7 @@ type RouteRefreshCapability struct { func (x *RouteRefreshCapability) Reset() { *x = RouteRefreshCapability{} if protoimpl.UnsafeEnabled { - mi := &file_capability_proto_msgTypes[1] + mi := &file_capability_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -162,7 +397,7 @@ func (x *RouteRefreshCapability) String() string { func (*RouteRefreshCapability) ProtoMessage() {} func (x *RouteRefreshCapability) ProtoReflect() protoreflect.Message { - mi := &file_capability_proto_msgTypes[1] + mi := &file_capability_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -175,7 +410,7 @@ func (x *RouteRefreshCapability) ProtoReflect() protoreflect.Message { // Deprecated: Use RouteRefreshCapability.ProtoReflect.Descriptor instead. func (*RouteRefreshCapability) Descriptor() ([]byte, []int) { - return file_capability_proto_rawDescGZIP(), []int{1} + return file_capability_proto_rawDescGZIP(), []int{2} } type CarryingLabelInfoCapability struct { @@ -187,7 +422,7 @@ type CarryingLabelInfoCapability struct { func (x *CarryingLabelInfoCapability) Reset() { *x = CarryingLabelInfoCapability{} if protoimpl.UnsafeEnabled { - mi := &file_capability_proto_msgTypes[2] + mi := &file_capability_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -200,7 +435,7 @@ func (x *CarryingLabelInfoCapability) String() string { func (*CarryingLabelInfoCapability) ProtoMessage() {} func (x *CarryingLabelInfoCapability) ProtoReflect() protoreflect.Message { - mi := &file_capability_proto_msgTypes[2] + mi := &file_capability_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -213,7 +448,7 @@ func (x *CarryingLabelInfoCapability) ProtoReflect() protoreflect.Message { // Deprecated: Use CarryingLabelInfoCapability.ProtoReflect.Descriptor instead. func (*CarryingLabelInfoCapability) Descriptor() ([]byte, []int) { - return file_capability_proto_rawDescGZIP(), []int{2} + return file_capability_proto_rawDescGZIP(), []int{3} } type ExtendedNexthopCapabilityTuple struct { @@ -231,7 +466,7 @@ type ExtendedNexthopCapabilityTuple struct { func (x *ExtendedNexthopCapabilityTuple) Reset() { *x = ExtendedNexthopCapabilityTuple{} if protoimpl.UnsafeEnabled { - mi := &file_capability_proto_msgTypes[3] + mi := &file_capability_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -244,7 +479,7 @@ func (x *ExtendedNexthopCapabilityTuple) String() string { func (*ExtendedNexthopCapabilityTuple) ProtoMessage() {} func (x *ExtendedNexthopCapabilityTuple) ProtoReflect() protoreflect.Message { - mi := &file_capability_proto_msgTypes[3] + mi := &file_capability_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -257,7 +492,7 @@ func (x *ExtendedNexthopCapabilityTuple) ProtoReflect() protoreflect.Message { // Deprecated: Use ExtendedNexthopCapabilityTuple.ProtoReflect.Descriptor instead. func (*ExtendedNexthopCapabilityTuple) Descriptor() ([]byte, []int) { - return file_capability_proto_rawDescGZIP(), []int{3} + return file_capability_proto_rawDescGZIP(), []int{4} } func (x *ExtendedNexthopCapabilityTuple) GetNlriFamily() *Family { @@ -285,7 +520,7 @@ type ExtendedNexthopCapability struct { func (x *ExtendedNexthopCapability) Reset() { *x = ExtendedNexthopCapability{} if protoimpl.UnsafeEnabled { - mi := &file_capability_proto_msgTypes[4] + mi := &file_capability_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -298,7 +533,7 @@ func (x *ExtendedNexthopCapability) String() string { func (*ExtendedNexthopCapability) ProtoMessage() {} func (x *ExtendedNexthopCapability) ProtoReflect() protoreflect.Message { - mi := &file_capability_proto_msgTypes[4] + mi := &file_capability_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -311,7 +546,7 @@ func (x *ExtendedNexthopCapability) ProtoReflect() protoreflect.Message { // Deprecated: Use ExtendedNexthopCapability.ProtoReflect.Descriptor instead. func (*ExtendedNexthopCapability) Descriptor() ([]byte, []int) { - return file_capability_proto_rawDescGZIP(), []int{4} + return file_capability_proto_rawDescGZIP(), []int{5} } func (x *ExtendedNexthopCapability) GetTuples() []*ExtendedNexthopCapabilityTuple { @@ -333,7 +568,7 @@ type GracefulRestartCapabilityTuple struct { func (x *GracefulRestartCapabilityTuple) Reset() { *x = GracefulRestartCapabilityTuple{} if protoimpl.UnsafeEnabled { - mi := &file_capability_proto_msgTypes[5] + mi := &file_capability_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -346,7 +581,7 @@ func (x *GracefulRestartCapabilityTuple) String() string { func (*GracefulRestartCapabilityTuple) ProtoMessage() {} func (x *GracefulRestartCapabilityTuple) ProtoReflect() protoreflect.Message { - mi := &file_capability_proto_msgTypes[5] + mi := &file_capability_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -359,7 +594,7 @@ func (x *GracefulRestartCapabilityTuple) ProtoReflect() protoreflect.Message { // Deprecated: Use GracefulRestartCapabilityTuple.ProtoReflect.Descriptor instead. func (*GracefulRestartCapabilityTuple) Descriptor() ([]byte, []int) { - return file_capability_proto_rawDescGZIP(), []int{5} + return file_capability_proto_rawDescGZIP(), []int{6} } func (x *GracefulRestartCapabilityTuple) GetFamily() *Family { @@ -389,7 +624,7 @@ type GracefulRestartCapability struct { func (x *GracefulRestartCapability) Reset() { *x = GracefulRestartCapability{} if protoimpl.UnsafeEnabled { - mi := &file_capability_proto_msgTypes[6] + mi := &file_capability_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -402,7 +637,7 @@ func (x *GracefulRestartCapability) String() string { func (*GracefulRestartCapability) ProtoMessage() {} func (x *GracefulRestartCapability) ProtoReflect() protoreflect.Message { - mi := &file_capability_proto_msgTypes[6] + mi := &file_capability_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -415,7 +650,7 @@ func (x *GracefulRestartCapability) ProtoReflect() protoreflect.Message { // Deprecated: Use GracefulRestartCapability.ProtoReflect.Descriptor instead. func (*GracefulRestartCapability) Descriptor() ([]byte, []int) { - return file_capability_proto_rawDescGZIP(), []int{6} + return file_capability_proto_rawDescGZIP(), []int{7} } func (x *GracefulRestartCapability) GetFlags() uint32 { @@ -450,7 +685,7 @@ type FourOctetASNCapability struct { func (x *FourOctetASNCapability) Reset() { *x = FourOctetASNCapability{} if protoimpl.UnsafeEnabled { - mi := &file_capability_proto_msgTypes[7] + mi := &file_capability_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -463,7 +698,7 @@ func (x *FourOctetASNCapability) String() string { func (*FourOctetASNCapability) ProtoMessage() {} func (x *FourOctetASNCapability) ProtoReflect() protoreflect.Message { - mi := &file_capability_proto_msgTypes[7] + mi := &file_capability_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -476,7 +711,7 @@ func (x *FourOctetASNCapability) ProtoReflect() protoreflect.Message { // Deprecated: Use FourOctetASNCapability.ProtoReflect.Descriptor instead. func (*FourOctetASNCapability) Descriptor() ([]byte, []int) { - return file_capability_proto_rawDescGZIP(), []int{7} + return file_capability_proto_rawDescGZIP(), []int{8} } func (x *FourOctetASNCapability) GetAsn() uint32 { @@ -498,7 +733,7 @@ type AddPathCapabilityTuple struct { func (x *AddPathCapabilityTuple) Reset() { *x = AddPathCapabilityTuple{} if protoimpl.UnsafeEnabled { - mi := &file_capability_proto_msgTypes[8] + mi := &file_capability_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -511,7 +746,7 @@ func (x *AddPathCapabilityTuple) String() string { func (*AddPathCapabilityTuple) ProtoMessage() {} func (x *AddPathCapabilityTuple) ProtoReflect() protoreflect.Message { - mi := &file_capability_proto_msgTypes[8] + mi := &file_capability_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -524,7 +759,7 @@ func (x *AddPathCapabilityTuple) ProtoReflect() protoreflect.Message { // Deprecated: Use AddPathCapabilityTuple.ProtoReflect.Descriptor instead. func (*AddPathCapabilityTuple) Descriptor() ([]byte, []int) { - return file_capability_proto_rawDescGZIP(), []int{8} + return file_capability_proto_rawDescGZIP(), []int{9} } func (x *AddPathCapabilityTuple) GetFamily() *Family { @@ -552,7 +787,7 @@ type AddPathCapability struct { func (x *AddPathCapability) Reset() { *x = AddPathCapability{} if protoimpl.UnsafeEnabled { - mi := &file_capability_proto_msgTypes[9] + mi := &file_capability_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -565,7 +800,7 @@ func (x *AddPathCapability) String() string { func (*AddPathCapability) ProtoMessage() {} func (x *AddPathCapability) ProtoReflect() protoreflect.Message { - mi := &file_capability_proto_msgTypes[9] + mi := &file_capability_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -578,7 +813,7 @@ func (x *AddPathCapability) ProtoReflect() protoreflect.Message { // Deprecated: Use AddPathCapability.ProtoReflect.Descriptor instead. func (*AddPathCapability) Descriptor() ([]byte, []int) { - return file_capability_proto_rawDescGZIP(), []int{9} + return file_capability_proto_rawDescGZIP(), []int{10} } func (x *AddPathCapability) GetTuples() []*AddPathCapabilityTuple { @@ -597,7 +832,7 @@ type EnhancedRouteRefreshCapability struct { func (x *EnhancedRouteRefreshCapability) Reset() { *x = EnhancedRouteRefreshCapability{} if protoimpl.UnsafeEnabled { - mi := &file_capability_proto_msgTypes[10] + mi := &file_capability_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -610,7 +845,7 @@ func (x *EnhancedRouteRefreshCapability) String() string { func (*EnhancedRouteRefreshCapability) ProtoMessage() {} func (x *EnhancedRouteRefreshCapability) ProtoReflect() protoreflect.Message { - mi := &file_capability_proto_msgTypes[10] + mi := &file_capability_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -623,7 +858,7 @@ func (x *EnhancedRouteRefreshCapability) ProtoReflect() protoreflect.Message { // Deprecated: Use EnhancedRouteRefreshCapability.ProtoReflect.Descriptor instead. func (*EnhancedRouteRefreshCapability) Descriptor() ([]byte, []int) { - return file_capability_proto_rawDescGZIP(), []int{10} + return file_capability_proto_rawDescGZIP(), []int{11} } type LongLivedGracefulRestartCapabilityTuple struct { @@ -639,7 +874,7 @@ type LongLivedGracefulRestartCapabilityTuple struct { func (x *LongLivedGracefulRestartCapabilityTuple) Reset() { *x = LongLivedGracefulRestartCapabilityTuple{} if protoimpl.UnsafeEnabled { - mi := &file_capability_proto_msgTypes[11] + mi := &file_capability_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -652,7 +887,7 @@ func (x *LongLivedGracefulRestartCapabilityTuple) String() string { func (*LongLivedGracefulRestartCapabilityTuple) ProtoMessage() {} func (x *LongLivedGracefulRestartCapabilityTuple) ProtoReflect() protoreflect.Message { - mi := &file_capability_proto_msgTypes[11] + mi := &file_capability_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -665,7 +900,7 @@ func (x *LongLivedGracefulRestartCapabilityTuple) ProtoReflect() protoreflect.Me // Deprecated: Use LongLivedGracefulRestartCapabilityTuple.ProtoReflect.Descriptor instead. func (*LongLivedGracefulRestartCapabilityTuple) Descriptor() ([]byte, []int) { - return file_capability_proto_rawDescGZIP(), []int{11} + return file_capability_proto_rawDescGZIP(), []int{12} } func (x *LongLivedGracefulRestartCapabilityTuple) GetFamily() *Family { @@ -700,7 +935,7 @@ type LongLivedGracefulRestartCapability struct { func (x *LongLivedGracefulRestartCapability) Reset() { *x = LongLivedGracefulRestartCapability{} if protoimpl.UnsafeEnabled { - mi := &file_capability_proto_msgTypes[12] + mi := &file_capability_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -713,7 +948,7 @@ func (x *LongLivedGracefulRestartCapability) String() string { func (*LongLivedGracefulRestartCapability) ProtoMessage() {} func (x *LongLivedGracefulRestartCapability) ProtoReflect() protoreflect.Message { - mi := &file_capability_proto_msgTypes[12] + mi := &file_capability_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -726,7 +961,7 @@ func (x *LongLivedGracefulRestartCapability) ProtoReflect() protoreflect.Message // Deprecated: Use LongLivedGracefulRestartCapability.ProtoReflect.Descriptor instead. func (*LongLivedGracefulRestartCapability) Descriptor() ([]byte, []int) { - return file_capability_proto_rawDescGZIP(), []int{12} + return file_capability_proto_rawDescGZIP(), []int{13} } func (x *LongLivedGracefulRestartCapability) GetTuples() []*LongLivedGracefulRestartCapabilityTuple { @@ -745,7 +980,7 @@ type RouteRefreshCiscoCapability struct { func (x *RouteRefreshCiscoCapability) Reset() { *x = RouteRefreshCiscoCapability{} if protoimpl.UnsafeEnabled { - mi := &file_capability_proto_msgTypes[13] + mi := &file_capability_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -758,7 +993,7 @@ func (x *RouteRefreshCiscoCapability) String() string { func (*RouteRefreshCiscoCapability) ProtoMessage() {} func (x *RouteRefreshCiscoCapability) ProtoReflect() protoreflect.Message { - mi := &file_capability_proto_msgTypes[13] + mi := &file_capability_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -771,7 +1006,7 @@ func (x *RouteRefreshCiscoCapability) ProtoReflect() protoreflect.Message { // Deprecated: Use RouteRefreshCiscoCapability.ProtoReflect.Descriptor instead. func (*RouteRefreshCiscoCapability) Descriptor() ([]byte, []int) { - return file_capability_proto_rawDescGZIP(), []int{13} + return file_capability_proto_rawDescGZIP(), []int{14} } type FqdnCapability struct { @@ -786,7 +1021,7 @@ type FqdnCapability struct { func (x *FqdnCapability) Reset() { *x = FqdnCapability{} if protoimpl.UnsafeEnabled { - mi := &file_capability_proto_msgTypes[14] + mi := &file_capability_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -799,7 +1034,7 @@ func (x *FqdnCapability) String() string { func (*FqdnCapability) ProtoMessage() {} func (x *FqdnCapability) ProtoReflect() protoreflect.Message { - mi := &file_capability_proto_msgTypes[14] + mi := &file_capability_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -812,7 +1047,7 @@ func (x *FqdnCapability) ProtoReflect() protoreflect.Message { // Deprecated: Use FqdnCapability.ProtoReflect.Descriptor instead. func (*FqdnCapability) Descriptor() ([]byte, []int) { - return file_capability_proto_rawDescGZIP(), []int{14} + return file_capability_proto_rawDescGZIP(), []int{15} } func (x *FqdnCapability) GetHostName() string { @@ -840,7 +1075,7 @@ type SoftwareVersionCapability struct { func (x *SoftwareVersionCapability) Reset() { *x = SoftwareVersionCapability{} if protoimpl.UnsafeEnabled { - mi := &file_capability_proto_msgTypes[15] + mi := &file_capability_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -853,7 +1088,7 @@ func (x *SoftwareVersionCapability) String() string { func (*SoftwareVersionCapability) ProtoMessage() {} func (x *SoftwareVersionCapability) ProtoReflect() protoreflect.Message { - mi := &file_capability_proto_msgTypes[15] + mi := &file_capability_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -866,7 +1101,7 @@ func (x *SoftwareVersionCapability) ProtoReflect() protoreflect.Message { // Deprecated: Use SoftwareVersionCapability.ProtoReflect.Descriptor instead. func (*SoftwareVersionCapability) Descriptor() ([]byte, []int) { - return file_capability_proto_rawDescGZIP(), []int{15} + return file_capability_proto_rawDescGZIP(), []int{16} } func (x *SoftwareVersionCapability) GetSoftwareVersion() string { @@ -888,7 +1123,7 @@ type UnknownCapability struct { func (x *UnknownCapability) Reset() { *x = UnknownCapability{} if protoimpl.UnsafeEnabled { - mi := &file_capability_proto_msgTypes[16] + mi := &file_capability_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -901,7 +1136,7 @@ func (x *UnknownCapability) String() string { func (*UnknownCapability) ProtoMessage() {} func (x *UnknownCapability) ProtoReflect() protoreflect.Message { - mi := &file_capability_proto_msgTypes[16] + mi := &file_capability_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -914,7 +1149,7 @@ func (x *UnknownCapability) ProtoReflect() protoreflect.Message { // Deprecated: Use UnknownCapability.ProtoReflect.Descriptor instead. func (*UnknownCapability) Descriptor() ([]byte, []int) { - return file_capability_proto_rawDescGZIP(), []int{16} + return file_capability_proto_rawDescGZIP(), []int{17} } func (x *UnknownCapability) GetCode() uint32 { @@ -935,98 +1170,160 @@ var File_capability_proto protoreflect.FileDescriptor var file_capability_proto_rawDesc = []byte{ 0x0a, 0x10, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x05, 0x61, 0x70, 0x69, 0x70, 0x62, 0x1a, 0x0b, 0x67, 0x6f, 0x62, 0x67, 0x70, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x40, 0x0a, 0x17, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x79, 0x12, 0x25, 0x0a, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, - 0x52, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x22, 0x18, 0x0a, 0x16, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x22, 0x1d, 0x0a, 0x1b, 0x43, 0x61, 0x72, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x79, 0x22, 0x86, 0x01, 0x0a, 0x1e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x4e, 0x65, - 0x78, 0x74, 0x68, 0x6f, 0x70, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, - 0x75, 0x70, 0x6c, 0x65, 0x12, 0x2e, 0x0a, 0x0b, 0x6e, 0x6c, 0x72, 0x69, 0x5f, 0x66, 0x61, 0x6d, - 0x69, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, - 0x62, 0x2e, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x0a, 0x6e, 0x6c, 0x72, 0x69, 0x46, 0x61, - 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x34, 0x0a, 0x0e, 0x6e, 0x65, 0x78, 0x74, 0x68, 0x6f, 0x70, 0x5f, - 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x0d, 0x6e, 0x65, 0x78, - 0x74, 0x68, 0x6f, 0x70, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x22, 0x5a, 0x0a, 0x19, 0x45, 0x78, - 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x4e, 0x65, 0x78, 0x74, 0x68, 0x6f, 0x70, 0x43, 0x61, 0x70, - 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x3d, 0x0a, 0x06, 0x74, 0x75, 0x70, 0x6c, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, - 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x4e, 0x65, 0x78, 0x74, 0x68, 0x6f, 0x70, 0x43, - 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x06, - 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x22, 0x5d, 0x0a, 0x1e, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, - 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x12, 0x25, 0x0a, 0x06, 0x66, 0x61, 0x6d, 0x69, - 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, - 0x2e, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x66, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x19, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, - 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x3d, 0x0a, - 0x06, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, - 0x75, 0x70, 0x6c, 0x65, 0x52, 0x06, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x22, 0x2a, 0x0a, 0x16, + 0x74, 0x6f, 0x12, 0x05, 0x61, 0x70, 0x69, 0x70, 0x62, 0x1a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe7, 0x07, 0x0a, 0x0a, 0x43, 0x61, 0x70, 0x61, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x48, 0x00, 0x52, 0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x12, 0x47, 0x0a, 0x0e, + 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x75, 0x6c, + 0x74, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x44, 0x0a, 0x0d, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x72, + 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, + 0x68, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0c, 0x72, + 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x12, 0x54, 0x0a, 0x13, 0x63, + 0x61, 0x72, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x69, 0x6e, + 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x43, 0x61, 0x72, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x49, 0x6e, + 0x66, 0x6f, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, 0x11, + 0x63, 0x61, 0x72, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x4d, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x6e, 0x65, + 0x78, 0x74, 0x68, 0x6f, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x4e, 0x65, 0x78, 0x74, + 0x68, 0x6f, 0x70, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, + 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x4e, 0x65, 0x78, 0x74, 0x68, 0x6f, 0x70, + 0x12, 0x4d, 0x0a, 0x10, 0x67, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x5f, 0x72, 0x65, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x70, 0x69, + 0x70, 0x62, 0x2e, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0f, + 0x67, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, + 0x45, 0x0a, 0x0e, 0x66, 0x6f, 0x75, 0x72, 0x5f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x5f, 0x61, 0x73, + 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x6f, 0x75, 0x72, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x41, 0x53, 0x4e, 0x43, 0x61, 0x70, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, 0x6e, 0x22, 0xaa, 0x01, 0x0a, 0x16, 0x41, 0x64, 0x64, - 0x50, 0x61, 0x74, 0x68, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x75, - 0x70, 0x6c, 0x65, 0x12, 0x25, 0x0a, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x6d, 0x69, - 0x6c, 0x79, 0x52, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x36, 0x0a, 0x04, 0x6d, 0x6f, - 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0c, 0x66, 0x6f, 0x75, 0x72, 0x4f, 0x63, + 0x74, 0x65, 0x74, 0x41, 0x73, 0x6e, 0x12, 0x35, 0x0a, 0x08, 0x61, 0x64, 0x64, 0x5f, 0x70, 0x61, + 0x74, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x61, 0x74, 0x68, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, - 0x64, 0x65, 0x22, 0x31, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, - 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x10, - 0x01, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x42, - 0x4f, 0x54, 0x48, 0x10, 0x03, 0x22, 0x4a, 0x0a, 0x11, 0x41, 0x64, 0x64, 0x50, 0x61, 0x74, 0x68, - 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x35, 0x0a, 0x06, 0x74, 0x75, - 0x70, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x61, 0x74, 0x68, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, + 0x74, 0x79, 0x48, 0x00, 0x52, 0x07, 0x61, 0x64, 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, 0x5d, 0x0a, + 0x16, 0x65, 0x6e, 0x68, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, + 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x68, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x52, 0x6f, + 0x75, 0x74, 0x65, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, 0x14, 0x65, 0x6e, 0x68, 0x61, 0x6e, 0x63, 0x65, 0x64, + 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x12, 0x6a, 0x0a, 0x1b, + 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x6c, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x67, 0x72, 0x61, 0x63, 0x65, + 0x66, 0x75, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x6e, 0x67, 0x4c, 0x69, + 0x76, 0x65, 0x64, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, 0x18, + 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x69, 0x76, 0x65, 0x64, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, + 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x54, 0x0a, 0x13, 0x72, 0x6f, 0x75, 0x74, + 0x65, 0x5f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x63, 0x69, 0x73, 0x63, 0x6f, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, + 0x75, 0x74, 0x65, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x43, 0x69, 0x73, 0x63, 0x6f, 0x43, + 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, 0x11, 0x72, 0x6f, 0x75, + 0x74, 0x65, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x43, 0x69, 0x73, 0x63, 0x6f, 0x12, 0x2b, + 0x0a, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x71, 0x64, 0x6e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x12, 0x4d, 0x0a, 0x10, 0x73, + 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x6f, + 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x70, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0f, 0x73, 0x6f, 0x66, 0x74, 0x77, + 0x61, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x05, 0x0a, 0x03, 0x63, 0x61, + 0x70, 0x22, 0x40, 0x0a, 0x17, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x25, 0x0a, 0x06, + 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x06, 0x66, 0x61, 0x6d, + 0x69, 0x6c, 0x79, 0x22, 0x18, 0x0a, 0x16, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x66, 0x72, + 0x65, 0x73, 0x68, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x1d, 0x0a, + 0x1b, 0x43, 0x61, 0x72, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x49, 0x6e, + 0x66, 0x6f, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x86, 0x01, 0x0a, + 0x1e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x4e, 0x65, 0x78, 0x74, 0x68, 0x6f, 0x70, + 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x12, + 0x2e, 0x0a, 0x0b, 0x6e, 0x6c, 0x72, 0x69, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x6d, + 0x69, 0x6c, 0x79, 0x52, 0x0a, 0x6e, 0x6c, 0x72, 0x69, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, + 0x34, 0x0a, 0x0e, 0x6e, 0x65, 0x78, 0x74, 0x68, 0x6f, 0x70, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, + 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x68, 0x6f, 0x70, 0x46, + 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x22, 0x5a, 0x0a, 0x19, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, + 0x64, 0x4e, 0x65, 0x78, 0x74, 0x68, 0x6f, 0x70, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x12, 0x3d, 0x0a, 0x06, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x64, 0x65, 0x64, 0x4e, 0x65, 0x78, 0x74, 0x68, 0x6f, 0x70, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x06, 0x74, 0x75, 0x70, 0x6c, 0x65, - 0x73, 0x22, 0x20, 0x0a, 0x1e, 0x45, 0x6e, 0x68, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x52, 0x6f, 0x75, - 0x74, 0x65, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x79, 0x22, 0x7a, 0x0a, 0x27, 0x4c, 0x6f, 0x6e, 0x67, 0x4c, 0x69, 0x76, 0x65, 0x64, - 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x43, + 0x73, 0x22, 0x5d, 0x0a, 0x1e, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x75, + 0x70, 0x6c, 0x65, 0x12, 0x25, 0x0a, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x6d, 0x69, + 0x6c, 0x79, 0x52, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, + 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, + 0x22, 0x84, 0x01, 0x0a, 0x19, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, + 0x6c, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x74, 0x75, 0x70, 0x6c, + 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, + 0x06, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x22, 0x2a, 0x0a, 0x16, 0x46, 0x6f, 0x75, 0x72, 0x4f, + 0x63, 0x74, 0x65, 0x74, 0x41, 0x53, 0x4e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, + 0x61, 0x73, 0x6e, 0x22, 0xaa, 0x01, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x50, 0x61, 0x74, 0x68, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x12, 0x25, 0x0a, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x06, 0x66, - 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x22, - 0x6c, 0x0a, 0x22, 0x4c, 0x6f, 0x6e, 0x67, 0x4c, 0x69, 0x76, 0x65, 0x64, 0x47, 0x72, 0x61, 0x63, - 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x46, 0x0a, 0x06, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x6f, + 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x36, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, + 0x61, 0x74, 0x68, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x75, 0x70, + 0x6c, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x31, 0x0a, + 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, + 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, + 0x53, 0x45, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4f, 0x54, 0x48, 0x10, 0x03, + 0x22, 0x4a, 0x0a, 0x11, 0x41, 0x64, 0x64, 0x50, 0x61, 0x74, 0x68, 0x43, 0x61, 0x70, 0x61, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x35, 0x0a, 0x06, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, + 0x64, 0x50, 0x61, 0x74, 0x68, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, + 0x75, 0x70, 0x6c, 0x65, 0x52, 0x06, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x22, 0x20, 0x0a, 0x1e, + 0x45, 0x6e, 0x68, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x66, + 0x72, 0x65, 0x73, 0x68, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x7a, + 0x0a, 0x27, 0x4c, 0x6f, 0x6e, 0x67, 0x4c, 0x69, 0x76, 0x65, 0x64, 0x47, 0x72, 0x61, 0x63, 0x65, + 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x12, 0x25, 0x0a, 0x06, 0x66, 0x61, 0x6d, + 0x69, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x6c, 0x0a, 0x22, 0x4c, 0x6f, 0x6e, 0x67, 0x4c, 0x69, 0x76, 0x65, 0x64, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, - 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x06, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x22, 0x1d, 0x0a, - 0x1b, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x43, 0x69, 0x73, - 0x63, 0x6f, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x4e, 0x0a, 0x0e, - 0x46, 0x71, 0x64, 0x6e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1b, - 0x0a, 0x09, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x64, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x46, 0x0a, 0x19, - 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x43, - 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x6f, 0x66, - 0x74, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3d, 0x0a, 0x11, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x43, - 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x42, 0x24, 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x6f, 0x73, 0x72, 0x67, 0x2f, 0x67, 0x6f, 0x62, 0x67, 0x70, 0x2f, 0x76, 0x33, 0x2f, - 0x61, 0x70, 0x69, 0x3b, 0x61, 0x70, 0x69, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x12, 0x46, 0x0a, 0x06, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2e, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x6e, 0x67, 0x4c, 0x69, 0x76, + 0x65, 0x64, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, + 0x52, 0x06, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x22, 0x1d, 0x0a, 0x1b, 0x52, 0x6f, 0x75, 0x74, + 0x65, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x43, 0x69, 0x73, 0x63, 0x6f, 0x43, 0x61, 0x70, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x4e, 0x0a, 0x0e, 0x46, 0x71, 0x64, 0x6e, 0x43, + 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x6f, 0x73, + 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, + 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x46, 0x0a, 0x19, 0x53, 0x6f, 0x66, 0x74, 0x77, + 0x61, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, + 0x3d, 0x0a, 0x11, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x24, + 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x72, + 0x67, 0x2f, 0x67, 0x6f, 0x62, 0x67, 0x70, 0x2f, 0x76, 0x33, 0x2f, 0x61, 0x70, 0x69, 0x3b, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1042,45 +1339,59 @@ func file_capability_proto_rawDescGZIP() []byte { } var file_capability_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_capability_proto_msgTypes = make([]protoimpl.MessageInfo, 17) +var file_capability_proto_msgTypes = make([]protoimpl.MessageInfo, 18) var file_capability_proto_goTypes = []interface{}{ (AddPathCapabilityTuple_Mode)(0), // 0: apipb.AddPathCapabilityTuple.Mode - (*MultiProtocolCapability)(nil), // 1: apipb.MultiProtocolCapability - (*RouteRefreshCapability)(nil), // 2: apipb.RouteRefreshCapability - (*CarryingLabelInfoCapability)(nil), // 3: apipb.CarryingLabelInfoCapability - (*ExtendedNexthopCapabilityTuple)(nil), // 4: apipb.ExtendedNexthopCapabilityTuple - (*ExtendedNexthopCapability)(nil), // 5: apipb.ExtendedNexthopCapability - (*GracefulRestartCapabilityTuple)(nil), // 6: apipb.GracefulRestartCapabilityTuple - (*GracefulRestartCapability)(nil), // 7: apipb.GracefulRestartCapability - (*FourOctetASNCapability)(nil), // 8: apipb.FourOctetASNCapability - (*AddPathCapabilityTuple)(nil), // 9: apipb.AddPathCapabilityTuple - (*AddPathCapability)(nil), // 10: apipb.AddPathCapability - (*EnhancedRouteRefreshCapability)(nil), // 11: apipb.EnhancedRouteRefreshCapability - (*LongLivedGracefulRestartCapabilityTuple)(nil), // 12: apipb.LongLivedGracefulRestartCapabilityTuple - (*LongLivedGracefulRestartCapability)(nil), // 13: apipb.LongLivedGracefulRestartCapability - (*RouteRefreshCiscoCapability)(nil), // 14: apipb.RouteRefreshCiscoCapability - (*FqdnCapability)(nil), // 15: apipb.FqdnCapability - (*SoftwareVersionCapability)(nil), // 16: apipb.SoftwareVersionCapability - (*UnknownCapability)(nil), // 17: apipb.UnknownCapability - (*Family)(nil), // 18: apipb.Family + (*Capability)(nil), // 1: apipb.Capability + (*MultiProtocolCapability)(nil), // 2: apipb.MultiProtocolCapability + (*RouteRefreshCapability)(nil), // 3: apipb.RouteRefreshCapability + (*CarryingLabelInfoCapability)(nil), // 4: apipb.CarryingLabelInfoCapability + (*ExtendedNexthopCapabilityTuple)(nil), // 5: apipb.ExtendedNexthopCapabilityTuple + (*ExtendedNexthopCapability)(nil), // 6: apipb.ExtendedNexthopCapability + (*GracefulRestartCapabilityTuple)(nil), // 7: apipb.GracefulRestartCapabilityTuple + (*GracefulRestartCapability)(nil), // 8: apipb.GracefulRestartCapability + (*FourOctetASNCapability)(nil), // 9: apipb.FourOctetASNCapability + (*AddPathCapabilityTuple)(nil), // 10: apipb.AddPathCapabilityTuple + (*AddPathCapability)(nil), // 11: apipb.AddPathCapability + (*EnhancedRouteRefreshCapability)(nil), // 12: apipb.EnhancedRouteRefreshCapability + (*LongLivedGracefulRestartCapabilityTuple)(nil), // 13: apipb.LongLivedGracefulRestartCapabilityTuple + (*LongLivedGracefulRestartCapability)(nil), // 14: apipb.LongLivedGracefulRestartCapability + (*RouteRefreshCiscoCapability)(nil), // 15: apipb.RouteRefreshCiscoCapability + (*FqdnCapability)(nil), // 16: apipb.FqdnCapability + (*SoftwareVersionCapability)(nil), // 17: apipb.SoftwareVersionCapability + (*UnknownCapability)(nil), // 18: apipb.UnknownCapability + (*Family)(nil), // 19: apipb.Family } var file_capability_proto_depIdxs = []int32{ - 18, // 0: apipb.MultiProtocolCapability.family:type_name -> apipb.Family - 18, // 1: apipb.ExtendedNexthopCapabilityTuple.nlri_family:type_name -> apipb.Family - 18, // 2: apipb.ExtendedNexthopCapabilityTuple.nexthop_family:type_name -> apipb.Family - 4, // 3: apipb.ExtendedNexthopCapability.tuples:type_name -> apipb.ExtendedNexthopCapabilityTuple - 18, // 4: apipb.GracefulRestartCapabilityTuple.family:type_name -> apipb.Family - 6, // 5: apipb.GracefulRestartCapability.tuples:type_name -> apipb.GracefulRestartCapabilityTuple - 18, // 6: apipb.AddPathCapabilityTuple.family:type_name -> apipb.Family - 0, // 7: apipb.AddPathCapabilityTuple.mode:type_name -> apipb.AddPathCapabilityTuple.Mode - 9, // 8: apipb.AddPathCapability.tuples:type_name -> apipb.AddPathCapabilityTuple - 18, // 9: apipb.LongLivedGracefulRestartCapabilityTuple.family:type_name -> apipb.Family - 12, // 10: apipb.LongLivedGracefulRestartCapability.tuples:type_name -> apipb.LongLivedGracefulRestartCapabilityTuple - 11, // [11:11] is the sub-list for method output_type - 11, // [11:11] is the sub-list for method input_type - 11, // [11:11] is the sub-list for extension type_name - 11, // [11:11] is the sub-list for extension extendee - 0, // [0:11] is the sub-list for field type_name + 18, // 0: apipb.Capability.unknown:type_name -> apipb.UnknownCapability + 2, // 1: apipb.Capability.multi_protocol:type_name -> apipb.MultiProtocolCapability + 3, // 2: apipb.Capability.route_refresh:type_name -> apipb.RouteRefreshCapability + 4, // 3: apipb.Capability.carrying_label_info:type_name -> apipb.CarryingLabelInfoCapability + 6, // 4: apipb.Capability.extended_nexthop:type_name -> apipb.ExtendedNexthopCapability + 8, // 5: apipb.Capability.graceful_restart:type_name -> apipb.GracefulRestartCapability + 9, // 6: apipb.Capability.four_octet_asn:type_name -> apipb.FourOctetASNCapability + 11, // 7: apipb.Capability.add_path:type_name -> apipb.AddPathCapability + 12, // 8: apipb.Capability.enhanced_route_refresh:type_name -> apipb.EnhancedRouteRefreshCapability + 14, // 9: apipb.Capability.long_lived_graceful_restart:type_name -> apipb.LongLivedGracefulRestartCapability + 15, // 10: apipb.Capability.route_refresh_cisco:type_name -> apipb.RouteRefreshCiscoCapability + 16, // 11: apipb.Capability.fqdn:type_name -> apipb.FqdnCapability + 17, // 12: apipb.Capability.software_version:type_name -> apipb.SoftwareVersionCapability + 19, // 13: apipb.MultiProtocolCapability.family:type_name -> apipb.Family + 19, // 14: apipb.ExtendedNexthopCapabilityTuple.nlri_family:type_name -> apipb.Family + 19, // 15: apipb.ExtendedNexthopCapabilityTuple.nexthop_family:type_name -> apipb.Family + 5, // 16: apipb.ExtendedNexthopCapability.tuples:type_name -> apipb.ExtendedNexthopCapabilityTuple + 19, // 17: apipb.GracefulRestartCapabilityTuple.family:type_name -> apipb.Family + 7, // 18: apipb.GracefulRestartCapability.tuples:type_name -> apipb.GracefulRestartCapabilityTuple + 19, // 19: apipb.AddPathCapabilityTuple.family:type_name -> apipb.Family + 0, // 20: apipb.AddPathCapabilityTuple.mode:type_name -> apipb.AddPathCapabilityTuple.Mode + 10, // 21: apipb.AddPathCapability.tuples:type_name -> apipb.AddPathCapabilityTuple + 19, // 22: apipb.LongLivedGracefulRestartCapabilityTuple.family:type_name -> apipb.Family + 13, // 23: apipb.LongLivedGracefulRestartCapability.tuples:type_name -> apipb.LongLivedGracefulRestartCapabilityTuple + 24, // [24:24] is the sub-list for method output_type + 24, // [24:24] is the sub-list for method input_type + 24, // [24:24] is the sub-list for extension type_name + 24, // [24:24] is the sub-list for extension extendee + 0, // [0:24] is the sub-list for field type_name } func init() { file_capability_proto_init() } @@ -1088,10 +1399,10 @@ func file_capability_proto_init() { if File_capability_proto != nil { return } - file_gobgp_proto_init() + file_common_proto_init() if !protoimpl.UnsafeEnabled { file_capability_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MultiProtocolCapability); i { + switch v := v.(*Capability); i { case 0: return &v.state case 1: @@ -1103,7 +1414,7 @@ func file_capability_proto_init() { } } file_capability_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RouteRefreshCapability); i { + switch v := v.(*MultiProtocolCapability); i { case 0: return &v.state case 1: @@ -1115,7 +1426,7 @@ func file_capability_proto_init() { } } file_capability_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CarryingLabelInfoCapability); i { + switch v := v.(*RouteRefreshCapability); i { case 0: return &v.state case 1: @@ -1127,7 +1438,7 @@ func file_capability_proto_init() { } } file_capability_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExtendedNexthopCapabilityTuple); i { + switch v := v.(*CarryingLabelInfoCapability); i { case 0: return &v.state case 1: @@ -1139,7 +1450,7 @@ func file_capability_proto_init() { } } file_capability_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExtendedNexthopCapability); i { + switch v := v.(*ExtendedNexthopCapabilityTuple); i { case 0: return &v.state case 1: @@ -1151,7 +1462,7 @@ func file_capability_proto_init() { } } file_capability_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GracefulRestartCapabilityTuple); i { + switch v := v.(*ExtendedNexthopCapability); i { case 0: return &v.state case 1: @@ -1163,7 +1474,7 @@ func file_capability_proto_init() { } } file_capability_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GracefulRestartCapability); i { + switch v := v.(*GracefulRestartCapabilityTuple); i { case 0: return &v.state case 1: @@ -1175,7 +1486,7 @@ func file_capability_proto_init() { } } file_capability_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FourOctetASNCapability); i { + switch v := v.(*GracefulRestartCapability); i { case 0: return &v.state case 1: @@ -1187,7 +1498,7 @@ func file_capability_proto_init() { } } file_capability_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddPathCapabilityTuple); i { + switch v := v.(*FourOctetASNCapability); i { case 0: return &v.state case 1: @@ -1199,7 +1510,7 @@ func file_capability_proto_init() { } } file_capability_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddPathCapability); i { + switch v := v.(*AddPathCapabilityTuple); i { case 0: return &v.state case 1: @@ -1211,7 +1522,7 @@ func file_capability_proto_init() { } } file_capability_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnhancedRouteRefreshCapability); i { + switch v := v.(*AddPathCapability); i { case 0: return &v.state case 1: @@ -1223,7 +1534,7 @@ func file_capability_proto_init() { } } file_capability_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LongLivedGracefulRestartCapabilityTuple); i { + switch v := v.(*EnhancedRouteRefreshCapability); i { case 0: return &v.state case 1: @@ -1235,7 +1546,7 @@ func file_capability_proto_init() { } } file_capability_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LongLivedGracefulRestartCapability); i { + switch v := v.(*LongLivedGracefulRestartCapabilityTuple); i { case 0: return &v.state case 1: @@ -1247,7 +1558,7 @@ func file_capability_proto_init() { } } file_capability_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RouteRefreshCiscoCapability); i { + switch v := v.(*LongLivedGracefulRestartCapability); i { case 0: return &v.state case 1: @@ -1259,7 +1570,7 @@ func file_capability_proto_init() { } } file_capability_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FqdnCapability); i { + switch v := v.(*RouteRefreshCiscoCapability); i { case 0: return &v.state case 1: @@ -1271,7 +1582,7 @@ func file_capability_proto_init() { } } file_capability_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SoftwareVersionCapability); i { + switch v := v.(*FqdnCapability); i { case 0: return &v.state case 1: @@ -1283,6 +1594,18 @@ func file_capability_proto_init() { } } file_capability_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SoftwareVersionCapability); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_capability_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UnknownCapability); i { case 0: return &v.state @@ -1295,13 +1618,28 @@ func file_capability_proto_init() { } } } + file_capability_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*Capability_Unknown)(nil), + (*Capability_MultiProtocol)(nil), + (*Capability_RouteRefresh)(nil), + (*Capability_CarryingLabelInfo)(nil), + (*Capability_ExtendedNexthop)(nil), + (*Capability_GracefulRestart)(nil), + (*Capability_FourOctetAsn)(nil), + (*Capability_AddPath)(nil), + (*Capability_EnhancedRouteRefresh)(nil), + (*Capability_LongLivedGracefulRestart)(nil), + (*Capability_RouteRefreshCisco)(nil), + (*Capability_Fqdn)(nil), + (*Capability_SoftwareVersion)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_capability_proto_rawDesc, NumEnums: 1, - NumMessages: 17, + NumMessages: 18, NumExtensions: 0, NumServices: 0, }, diff --git a/api/capability.proto b/api/capability.proto index 88ff30a2f..02f6fc2e1 100644 --- a/api/capability.proto +++ b/api/capability.proto @@ -24,7 +24,25 @@ syntax = "proto3"; package apipb; option go_package = "github.com/osrg/gobgp/v3/api;apipb"; -import "gobgp.proto"; +import "common.proto"; + +message Capability { + oneof cap { + UnknownCapability unknown = 1; + MultiProtocolCapability multi_protocol = 2; + RouteRefreshCapability route_refresh = 3; + CarryingLabelInfoCapability carrying_label_info = 4; + ExtendedNexthopCapability extended_nexthop = 5; + GracefulRestartCapability graceful_restart = 6; + FourOctetASNCapability four_octet_asn = 7; + AddPathCapability add_path = 8; + EnhancedRouteRefreshCapability enhanced_route_refresh = 9; + LongLivedGracefulRestartCapability long_lived_graceful_restart = 10; + RouteRefreshCiscoCapability route_refresh_cisco = 11; + FqdnCapability fqdn = 12; + SoftwareVersionCapability software_version = 13; + } +} message MultiProtocolCapability { apipb.Family family = 1; diff --git a/api/common.pb.go b/api/common.pb.go new file mode 100644 index 000000000..a42fa2339 --- /dev/null +++ b/api/common.pb.go @@ -0,0 +1,685 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v5.29.2 +// source: common.proto + +package apipb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Family_Afi int32 + +const ( + Family_AFI_UNKNOWN Family_Afi = 0 + Family_AFI_IP Family_Afi = 1 + Family_AFI_IP6 Family_Afi = 2 + Family_AFI_L2VPN Family_Afi = 25 + Family_AFI_LS Family_Afi = 16388 + Family_AFI_OPAQUE Family_Afi = 16397 +) + +// Enum value maps for Family_Afi. +var ( + Family_Afi_name = map[int32]string{ + 0: "AFI_UNKNOWN", + 1: "AFI_IP", + 2: "AFI_IP6", + 25: "AFI_L2VPN", + 16388: "AFI_LS", + 16397: "AFI_OPAQUE", + } + Family_Afi_value = map[string]int32{ + "AFI_UNKNOWN": 0, + "AFI_IP": 1, + "AFI_IP6": 2, + "AFI_L2VPN": 25, + "AFI_LS": 16388, + "AFI_OPAQUE": 16397, + } +) + +func (x Family_Afi) Enum() *Family_Afi { + p := new(Family_Afi) + *p = x + return p +} + +func (x Family_Afi) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Family_Afi) Descriptor() protoreflect.EnumDescriptor { + return file_common_proto_enumTypes[0].Descriptor() +} + +func (Family_Afi) Type() protoreflect.EnumType { + return &file_common_proto_enumTypes[0] +} + +func (x Family_Afi) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Family_Afi.Descriptor instead. +func (Family_Afi) EnumDescriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{0, 0} +} + +type Family_Safi int32 + +const ( + Family_SAFI_UNKNOWN Family_Safi = 0 + Family_SAFI_UNICAST Family_Safi = 1 + Family_SAFI_MULTICAST Family_Safi = 2 + Family_SAFI_MPLS_LABEL Family_Safi = 4 + Family_SAFI_ENCAPSULATION Family_Safi = 7 + Family_SAFI_VPLS Family_Safi = 65 + Family_SAFI_EVPN Family_Safi = 70 + Family_SAFI_LS Family_Safi = 71 + Family_SAFI_SR_POLICY Family_Safi = 73 + Family_SAFI_MUP Family_Safi = 85 + Family_SAFI_MPLS_VPN Family_Safi = 128 + Family_SAFI_MPLS_VPN_MULTICAST Family_Safi = 129 + Family_SAFI_ROUTE_TARGET_CONSTRAINTS Family_Safi = 132 + Family_SAFI_FLOW_SPEC_UNICAST Family_Safi = 133 + Family_SAFI_FLOW_SPEC_VPN Family_Safi = 134 + Family_SAFI_KEY_VALUE Family_Safi = 241 +) + +// Enum value maps for Family_Safi. +var ( + Family_Safi_name = map[int32]string{ + 0: "SAFI_UNKNOWN", + 1: "SAFI_UNICAST", + 2: "SAFI_MULTICAST", + 4: "SAFI_MPLS_LABEL", + 7: "SAFI_ENCAPSULATION", + 65: "SAFI_VPLS", + 70: "SAFI_EVPN", + 71: "SAFI_LS", + 73: "SAFI_SR_POLICY", + 85: "SAFI_MUP", + 128: "SAFI_MPLS_VPN", + 129: "SAFI_MPLS_VPN_MULTICAST", + 132: "SAFI_ROUTE_TARGET_CONSTRAINTS", + 133: "SAFI_FLOW_SPEC_UNICAST", + 134: "SAFI_FLOW_SPEC_VPN", + 241: "SAFI_KEY_VALUE", + } + Family_Safi_value = map[string]int32{ + "SAFI_UNKNOWN": 0, + "SAFI_UNICAST": 1, + "SAFI_MULTICAST": 2, + "SAFI_MPLS_LABEL": 4, + "SAFI_ENCAPSULATION": 7, + "SAFI_VPLS": 65, + "SAFI_EVPN": 70, + "SAFI_LS": 71, + "SAFI_SR_POLICY": 73, + "SAFI_MUP": 85, + "SAFI_MPLS_VPN": 128, + "SAFI_MPLS_VPN_MULTICAST": 129, + "SAFI_ROUTE_TARGET_CONSTRAINTS": 132, + "SAFI_FLOW_SPEC_UNICAST": 133, + "SAFI_FLOW_SPEC_VPN": 134, + "SAFI_KEY_VALUE": 241, + } +) + +func (x Family_Safi) Enum() *Family_Safi { + p := new(Family_Safi) + *p = x + return p +} + +func (x Family_Safi) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Family_Safi) Descriptor() protoreflect.EnumDescriptor { + return file_common_proto_enumTypes[1].Descriptor() +} + +func (Family_Safi) Type() protoreflect.EnumType { + return &file_common_proto_enumTypes[1] +} + +func (x Family_Safi) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Family_Safi.Descriptor instead. +func (Family_Safi) EnumDescriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{0, 1} +} + +type Family struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Afi Family_Afi `protobuf:"varint,1,opt,name=afi,proto3,enum=apipb.Family_Afi" json:"afi,omitempty"` + Safi Family_Safi `protobuf:"varint,2,opt,name=safi,proto3,enum=apipb.Family_Safi" json:"safi,omitempty"` +} + +func (x *Family) Reset() { + *x = Family{} + if protoimpl.UnsafeEnabled { + mi := &file_common_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Family) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Family) ProtoMessage() {} + +func (x *Family) ProtoReflect() protoreflect.Message { + mi := &file_common_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Family.ProtoReflect.Descriptor instead. +func (*Family) Descriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{0} +} + +func (x *Family) GetAfi() Family_Afi { + if x != nil { + return x.Afi + } + return Family_AFI_UNKNOWN +} + +func (x *Family) GetSafi() Family_Safi { + if x != nil { + return x.Safi + } + return Family_SAFI_UNKNOWN +} + +type RouteDistinguisherTwoOctetASN struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Admin uint32 `protobuf:"varint,1,opt,name=admin,proto3" json:"admin,omitempty"` + Assigned uint32 `protobuf:"varint,2,opt,name=assigned,proto3" json:"assigned,omitempty"` +} + +func (x *RouteDistinguisherTwoOctetASN) Reset() { + *x = RouteDistinguisherTwoOctetASN{} + if protoimpl.UnsafeEnabled { + mi := &file_common_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RouteDistinguisherTwoOctetASN) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RouteDistinguisherTwoOctetASN) ProtoMessage() {} + +func (x *RouteDistinguisherTwoOctetASN) ProtoReflect() protoreflect.Message { + mi := &file_common_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RouteDistinguisherTwoOctetASN.ProtoReflect.Descriptor instead. +func (*RouteDistinguisherTwoOctetASN) Descriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{1} +} + +func (x *RouteDistinguisherTwoOctetASN) GetAdmin() uint32 { + if x != nil { + return x.Admin + } + return 0 +} + +func (x *RouteDistinguisherTwoOctetASN) GetAssigned() uint32 { + if x != nil { + return x.Assigned + } + return 0 +} + +type RouteDistinguisherIPAddress struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Admin string `protobuf:"bytes,1,opt,name=admin,proto3" json:"admin,omitempty"` + Assigned uint32 `protobuf:"varint,2,opt,name=assigned,proto3" json:"assigned,omitempty"` +} + +func (x *RouteDistinguisherIPAddress) Reset() { + *x = RouteDistinguisherIPAddress{} + if protoimpl.UnsafeEnabled { + mi := &file_common_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RouteDistinguisherIPAddress) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RouteDistinguisherIPAddress) ProtoMessage() {} + +func (x *RouteDistinguisherIPAddress) ProtoReflect() protoreflect.Message { + mi := &file_common_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RouteDistinguisherIPAddress.ProtoReflect.Descriptor instead. +func (*RouteDistinguisherIPAddress) Descriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{2} +} + +func (x *RouteDistinguisherIPAddress) GetAdmin() string { + if x != nil { + return x.Admin + } + return "" +} + +func (x *RouteDistinguisherIPAddress) GetAssigned() uint32 { + if x != nil { + return x.Assigned + } + return 0 +} + +type RouteDistinguisherFourOctetASN struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Admin uint32 `protobuf:"varint,1,opt,name=admin,proto3" json:"admin,omitempty"` + Assigned uint32 `protobuf:"varint,2,opt,name=assigned,proto3" json:"assigned,omitempty"` +} + +func (x *RouteDistinguisherFourOctetASN) Reset() { + *x = RouteDistinguisherFourOctetASN{} + if protoimpl.UnsafeEnabled { + mi := &file_common_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RouteDistinguisherFourOctetASN) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RouteDistinguisherFourOctetASN) ProtoMessage() {} + +func (x *RouteDistinguisherFourOctetASN) ProtoReflect() protoreflect.Message { + mi := &file_common_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RouteDistinguisherFourOctetASN.ProtoReflect.Descriptor instead. +func (*RouteDistinguisherFourOctetASN) Descriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{3} +} + +func (x *RouteDistinguisherFourOctetASN) GetAdmin() uint32 { + if x != nil { + return x.Admin + } + return 0 +} + +func (x *RouteDistinguisherFourOctetASN) GetAssigned() uint32 { + if x != nil { + return x.Assigned + } + return 0 +} + +type RouteDistinguisher struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Rd: + // + // *RouteDistinguisher_TwoOctetAsn + // *RouteDistinguisher_IpAddress + // *RouteDistinguisher_FourOctetAsn + Rd isRouteDistinguisher_Rd `protobuf_oneof:"rd"` +} + +func (x *RouteDistinguisher) Reset() { + *x = RouteDistinguisher{} + if protoimpl.UnsafeEnabled { + mi := &file_common_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RouteDistinguisher) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RouteDistinguisher) ProtoMessage() {} + +func (x *RouteDistinguisher) ProtoReflect() protoreflect.Message { + mi := &file_common_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RouteDistinguisher.ProtoReflect.Descriptor instead. +func (*RouteDistinguisher) Descriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{4} +} + +func (m *RouteDistinguisher) GetRd() isRouteDistinguisher_Rd { + if m != nil { + return m.Rd + } + return nil +} + +func (x *RouteDistinguisher) GetTwoOctetAsn() *RouteDistinguisherTwoOctetASN { + if x, ok := x.GetRd().(*RouteDistinguisher_TwoOctetAsn); ok { + return x.TwoOctetAsn + } + return nil +} + +func (x *RouteDistinguisher) GetIpAddress() *RouteDistinguisherIPAddress { + if x, ok := x.GetRd().(*RouteDistinguisher_IpAddress); ok { + return x.IpAddress + } + return nil +} + +func (x *RouteDistinguisher) GetFourOctetAsn() *RouteDistinguisherFourOctetASN { + if x, ok := x.GetRd().(*RouteDistinguisher_FourOctetAsn); ok { + return x.FourOctetAsn + } + return nil +} + +type isRouteDistinguisher_Rd interface { + isRouteDistinguisher_Rd() +} + +type RouteDistinguisher_TwoOctetAsn struct { + TwoOctetAsn *RouteDistinguisherTwoOctetASN `protobuf:"bytes,1,opt,name=two_octet_asn,json=twoOctetAsn,proto3,oneof"` +} + +type RouteDistinguisher_IpAddress struct { + IpAddress *RouteDistinguisherIPAddress `protobuf:"bytes,2,opt,name=ip_address,json=ipAddress,proto3,oneof"` +} + +type RouteDistinguisher_FourOctetAsn struct { + FourOctetAsn *RouteDistinguisherFourOctetASN `protobuf:"bytes,3,opt,name=four_octet_asn,json=fourOctetAsn,proto3,oneof"` +} + +func (*RouteDistinguisher_TwoOctetAsn) isRouteDistinguisher_Rd() {} + +func (*RouteDistinguisher_IpAddress) isRouteDistinguisher_Rd() {} + +func (*RouteDistinguisher_FourOctetAsn) isRouteDistinguisher_Rd() {} + +var File_common_proto protoreflect.FileDescriptor + +var file_common_proto_rawDesc = []byte{ + 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x22, 0x91, 0x04, 0x0a, 0x06, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, + 0x12, 0x23, 0x0a, 0x03, 0x61, 0x66, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x2e, 0x41, 0x66, 0x69, + 0x52, 0x03, 0x61, 0x66, 0x69, 0x12, 0x26, 0x0a, 0x04, 0x73, 0x61, 0x66, 0x69, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x6d, 0x69, + 0x6c, 0x79, 0x2e, 0x53, 0x61, 0x66, 0x69, 0x52, 0x04, 0x73, 0x61, 0x66, 0x69, 0x22, 0x5e, 0x0a, + 0x03, 0x41, 0x66, 0x69, 0x12, 0x0f, 0x0a, 0x0b, 0x41, 0x46, 0x49, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, + 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x46, 0x49, 0x5f, 0x49, 0x50, 0x10, + 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x46, 0x49, 0x5f, 0x49, 0x50, 0x36, 0x10, 0x02, 0x12, 0x0d, + 0x0a, 0x09, 0x41, 0x46, 0x49, 0x5f, 0x4c, 0x32, 0x56, 0x50, 0x4e, 0x10, 0x19, 0x12, 0x0c, 0x0a, + 0x06, 0x41, 0x46, 0x49, 0x5f, 0x4c, 0x53, 0x10, 0x84, 0x80, 0x01, 0x12, 0x10, 0x0a, 0x0a, 0x41, + 0x46, 0x49, 0x5f, 0x4f, 0x50, 0x41, 0x51, 0x55, 0x45, 0x10, 0x8d, 0x80, 0x01, 0x22, 0xd9, 0x02, + 0x0a, 0x04, 0x53, 0x61, 0x66, 0x69, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x41, 0x46, 0x49, 0x5f, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x41, 0x46, 0x49, + 0x5f, 0x55, 0x4e, 0x49, 0x43, 0x41, 0x53, 0x54, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x41, + 0x46, 0x49, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x43, 0x41, 0x53, 0x54, 0x10, 0x02, 0x12, 0x13, + 0x0a, 0x0f, 0x53, 0x41, 0x46, 0x49, 0x5f, 0x4d, 0x50, 0x4c, 0x53, 0x5f, 0x4c, 0x41, 0x42, 0x45, + 0x4c, 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x41, 0x46, 0x49, 0x5f, 0x45, 0x4e, 0x43, 0x41, + 0x50, 0x53, 0x55, 0x4c, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x53, + 0x41, 0x46, 0x49, 0x5f, 0x56, 0x50, 0x4c, 0x53, 0x10, 0x41, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x41, + 0x46, 0x49, 0x5f, 0x45, 0x56, 0x50, 0x4e, 0x10, 0x46, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x41, 0x46, + 0x49, 0x5f, 0x4c, 0x53, 0x10, 0x47, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x41, 0x46, 0x49, 0x5f, 0x53, + 0x52, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x10, 0x49, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x41, + 0x46, 0x49, 0x5f, 0x4d, 0x55, 0x50, 0x10, 0x55, 0x12, 0x12, 0x0a, 0x0d, 0x53, 0x41, 0x46, 0x49, + 0x5f, 0x4d, 0x50, 0x4c, 0x53, 0x5f, 0x56, 0x50, 0x4e, 0x10, 0x80, 0x01, 0x12, 0x1c, 0x0a, 0x17, + 0x53, 0x41, 0x46, 0x49, 0x5f, 0x4d, 0x50, 0x4c, 0x53, 0x5f, 0x56, 0x50, 0x4e, 0x5f, 0x4d, 0x55, + 0x4c, 0x54, 0x49, 0x43, 0x41, 0x53, 0x54, 0x10, 0x81, 0x01, 0x12, 0x22, 0x0a, 0x1d, 0x53, 0x41, + 0x46, 0x49, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, + 0x43, 0x4f, 0x4e, 0x53, 0x54, 0x52, 0x41, 0x49, 0x4e, 0x54, 0x53, 0x10, 0x84, 0x01, 0x12, 0x1b, + 0x0a, 0x16, 0x53, 0x41, 0x46, 0x49, 0x5f, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x53, 0x50, 0x45, 0x43, + 0x5f, 0x55, 0x4e, 0x49, 0x43, 0x41, 0x53, 0x54, 0x10, 0x85, 0x01, 0x12, 0x17, 0x0a, 0x12, 0x53, + 0x41, 0x46, 0x49, 0x5f, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x5f, 0x56, 0x50, + 0x4e, 0x10, 0x86, 0x01, 0x12, 0x13, 0x0a, 0x0e, 0x53, 0x41, 0x46, 0x49, 0x5f, 0x4b, 0x45, 0x59, + 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0xf1, 0x01, 0x22, 0x51, 0x0a, 0x1d, 0x52, 0x6f, 0x75, + 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x72, 0x54, + 0x77, 0x6f, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x41, 0x53, 0x4e, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, + 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x22, 0x4f, 0x0a, 0x1b, + 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, + 0x65, 0x72, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x61, + 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x6d, 0x69, + 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x22, 0x52, 0x0a, + 0x1e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, + 0x68, 0x65, 0x72, 0x46, 0x6f, 0x75, 0x72, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x41, 0x53, 0x4e, 0x12, + 0x14, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, + 0x64, 0x22, 0xfa, 0x01, 0x0a, 0x12, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x69, + 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x72, 0x12, 0x4a, 0x0a, 0x0d, 0x74, 0x77, 0x6f, 0x5f, + 0x6f, 0x63, 0x74, 0x65, 0x74, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, + 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x72, 0x54, 0x77, 0x6f, 0x4f, 0x63, 0x74, + 0x65, 0x74, 0x41, 0x53, 0x4e, 0x48, 0x00, 0x52, 0x0b, 0x74, 0x77, 0x6f, 0x4f, 0x63, 0x74, 0x65, + 0x74, 0x41, 0x73, 0x6e, 0x12, 0x43, 0x0a, 0x0a, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, + 0x68, 0x65, 0x72, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x09, + 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0e, 0x66, 0x6f, 0x75, + 0x72, 0x5f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, + 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x72, 0x46, 0x6f, 0x75, 0x72, + 0x4f, 0x63, 0x74, 0x65, 0x74, 0x41, 0x53, 0x4e, 0x48, 0x00, 0x52, 0x0c, 0x66, 0x6f, 0x75, 0x72, + 0x4f, 0x63, 0x74, 0x65, 0x74, 0x41, 0x73, 0x6e, 0x42, 0x04, 0x0a, 0x02, 0x72, 0x64, 0x42, 0x24, + 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x72, + 0x67, 0x2f, 0x67, 0x6f, 0x62, 0x67, 0x70, 0x2f, 0x76, 0x33, 0x2f, 0x61, 0x70, 0x69, 0x3b, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_common_proto_rawDescOnce sync.Once + file_common_proto_rawDescData = file_common_proto_rawDesc +) + +func file_common_proto_rawDescGZIP() []byte { + file_common_proto_rawDescOnce.Do(func() { + file_common_proto_rawDescData = protoimpl.X.CompressGZIP(file_common_proto_rawDescData) + }) + return file_common_proto_rawDescData +} + +var file_common_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_common_proto_goTypes = []interface{}{ + (Family_Afi)(0), // 0: apipb.Family.Afi + (Family_Safi)(0), // 1: apipb.Family.Safi + (*Family)(nil), // 2: apipb.Family + (*RouteDistinguisherTwoOctetASN)(nil), // 3: apipb.RouteDistinguisherTwoOctetASN + (*RouteDistinguisherIPAddress)(nil), // 4: apipb.RouteDistinguisherIPAddress + (*RouteDistinguisherFourOctetASN)(nil), // 5: apipb.RouteDistinguisherFourOctetASN + (*RouteDistinguisher)(nil), // 6: apipb.RouteDistinguisher +} +var file_common_proto_depIdxs = []int32{ + 0, // 0: apipb.Family.afi:type_name -> apipb.Family.Afi + 1, // 1: apipb.Family.safi:type_name -> apipb.Family.Safi + 3, // 2: apipb.RouteDistinguisher.two_octet_asn:type_name -> apipb.RouteDistinguisherTwoOctetASN + 4, // 3: apipb.RouteDistinguisher.ip_address:type_name -> apipb.RouteDistinguisherIPAddress + 5, // 4: apipb.RouteDistinguisher.four_octet_asn:type_name -> apipb.RouteDistinguisherFourOctetASN + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_common_proto_init() } +func file_common_proto_init() { + if File_common_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_common_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Family); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_common_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RouteDistinguisherTwoOctetASN); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_common_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RouteDistinguisherIPAddress); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_common_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RouteDistinguisherFourOctetASN); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_common_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RouteDistinguisher); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_common_proto_msgTypes[4].OneofWrappers = []interface{}{ + (*RouteDistinguisher_TwoOctetAsn)(nil), + (*RouteDistinguisher_IpAddress)(nil), + (*RouteDistinguisher_FourOctetAsn)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_common_proto_rawDesc, + NumEnums: 2, + NumMessages: 5, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_common_proto_goTypes, + DependencyIndexes: file_common_proto_depIdxs, + EnumInfos: file_common_proto_enumTypes, + MessageInfos: file_common_proto_msgTypes, + }.Build() + File_common_proto = out.File + file_common_proto_rawDesc = nil + file_common_proto_goTypes = nil + file_common_proto_depIdxs = nil +} diff --git a/api/common.proto b/api/common.proto new file mode 100644 index 000000000..c00e26bc2 --- /dev/null +++ b/api/common.proto @@ -0,0 +1,55 @@ +syntax = "proto3"; + +package apipb; +option go_package = "github.com/osrg/gobgp/v3/api;apipb"; + +// Common types for pretty much everywhere + +message Family { + enum Afi { + AFI_UNKNOWN = 0; AFI_IP = 1; AFI_IP6 = 2; AFI_L2VPN = 25; AFI_LS = 16388; + AFI_OPAQUE = 16397; + } + + enum Safi { + SAFI_UNKNOWN = 0; SAFI_UNICAST = 1; SAFI_MULTICAST = 2; SAFI_MPLS_LABEL = 4; + SAFI_ENCAPSULATION = 7; + SAFI_VPLS = 65; + SAFI_EVPN = 70; + SAFI_LS = 71; + SAFI_SR_POLICY = 73; + SAFI_MUP = 85; + SAFI_MPLS_VPN = 128; + SAFI_MPLS_VPN_MULTICAST = 129; + SAFI_ROUTE_TARGET_CONSTRAINTS = 132; + SAFI_FLOW_SPEC_UNICAST = 133; + SAFI_FLOW_SPEC_VPN = 134; + SAFI_KEY_VALUE = 241; + } + + Afi afi = 1; + Safi safi = 2; +} + +message RouteDistinguisherTwoOctetASN { + uint32 admin = 1; + uint32 assigned = 2; +} + +message RouteDistinguisherIPAddress { + string admin = 1; + uint32 assigned = 2; +} + +message RouteDistinguisherFourOctetASN { + uint32 admin = 1; + uint32 assigned = 2; +} + +message RouteDistinguisher { + oneof rd { + RouteDistinguisherTwoOctetASN two_octet_asn = 1; + RouteDistinguisherIPAddress ip_address = 2; + RouteDistinguisherFourOctetASN four_octet_asn = 3; + } +} diff --git a/api/extcom.pb.go b/api/extcom.pb.go new file mode 100644 index 000000000..1f84ddd5e --- /dev/null +++ b/api/extcom.pb.go @@ -0,0 +1,2328 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v5.29.2 +// source: extcom.proto + +package apipb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type TwoOctetAsSpecificExtended struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + IsTransitive bool `protobuf:"varint,1,opt,name=is_transitive,json=isTransitive,proto3" json:"is_transitive,omitempty"` + SubType uint32 `protobuf:"varint,2,opt,name=sub_type,json=subType,proto3" json:"sub_type,omitempty"` + Asn uint32 `protobuf:"varint,3,opt,name=asn,proto3" json:"asn,omitempty"` + LocalAdmin uint32 `protobuf:"varint,4,opt,name=local_admin,json=localAdmin,proto3" json:"local_admin,omitempty"` +} + +func (x *TwoOctetAsSpecificExtended) Reset() { + *x = TwoOctetAsSpecificExtended{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TwoOctetAsSpecificExtended) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TwoOctetAsSpecificExtended) ProtoMessage() {} + +func (x *TwoOctetAsSpecificExtended) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TwoOctetAsSpecificExtended.ProtoReflect.Descriptor instead. +func (*TwoOctetAsSpecificExtended) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{0} +} + +func (x *TwoOctetAsSpecificExtended) GetIsTransitive() bool { + if x != nil { + return x.IsTransitive + } + return false +} + +func (x *TwoOctetAsSpecificExtended) GetSubType() uint32 { + if x != nil { + return x.SubType + } + return 0 +} + +func (x *TwoOctetAsSpecificExtended) GetAsn() uint32 { + if x != nil { + return x.Asn + } + return 0 +} + +func (x *TwoOctetAsSpecificExtended) GetLocalAdmin() uint32 { + if x != nil { + return x.LocalAdmin + } + return 0 +} + +type IPv4AddressSpecificExtended struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + IsTransitive bool `protobuf:"varint,1,opt,name=is_transitive,json=isTransitive,proto3" json:"is_transitive,omitempty"` + SubType uint32 `protobuf:"varint,2,opt,name=sub_type,json=subType,proto3" json:"sub_type,omitempty"` + Address string `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` + LocalAdmin uint32 `protobuf:"varint,4,opt,name=local_admin,json=localAdmin,proto3" json:"local_admin,omitempty"` +} + +func (x *IPv4AddressSpecificExtended) Reset() { + *x = IPv4AddressSpecificExtended{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IPv4AddressSpecificExtended) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IPv4AddressSpecificExtended) ProtoMessage() {} + +func (x *IPv4AddressSpecificExtended) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IPv4AddressSpecificExtended.ProtoReflect.Descriptor instead. +func (*IPv4AddressSpecificExtended) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{1} +} + +func (x *IPv4AddressSpecificExtended) GetIsTransitive() bool { + if x != nil { + return x.IsTransitive + } + return false +} + +func (x *IPv4AddressSpecificExtended) GetSubType() uint32 { + if x != nil { + return x.SubType + } + return 0 +} + +func (x *IPv4AddressSpecificExtended) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *IPv4AddressSpecificExtended) GetLocalAdmin() uint32 { + if x != nil { + return x.LocalAdmin + } + return 0 +} + +type FourOctetAsSpecificExtended struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + IsTransitive bool `protobuf:"varint,1,opt,name=is_transitive,json=isTransitive,proto3" json:"is_transitive,omitempty"` + SubType uint32 `protobuf:"varint,2,opt,name=sub_type,json=subType,proto3" json:"sub_type,omitempty"` + Asn uint32 `protobuf:"varint,3,opt,name=asn,proto3" json:"asn,omitempty"` + LocalAdmin uint32 `protobuf:"varint,4,opt,name=local_admin,json=localAdmin,proto3" json:"local_admin,omitempty"` +} + +func (x *FourOctetAsSpecificExtended) Reset() { + *x = FourOctetAsSpecificExtended{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FourOctetAsSpecificExtended) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FourOctetAsSpecificExtended) ProtoMessage() {} + +func (x *FourOctetAsSpecificExtended) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FourOctetAsSpecificExtended.ProtoReflect.Descriptor instead. +func (*FourOctetAsSpecificExtended) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{2} +} + +func (x *FourOctetAsSpecificExtended) GetIsTransitive() bool { + if x != nil { + return x.IsTransitive + } + return false +} + +func (x *FourOctetAsSpecificExtended) GetSubType() uint32 { + if x != nil { + return x.SubType + } + return 0 +} + +func (x *FourOctetAsSpecificExtended) GetAsn() uint32 { + if x != nil { + return x.Asn + } + return 0 +} + +func (x *FourOctetAsSpecificExtended) GetLocalAdmin() uint32 { + if x != nil { + return x.LocalAdmin + } + return 0 +} + +type LinkBandwidthExtended struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Asn uint32 `protobuf:"varint,1,opt,name=asn,proto3" json:"asn,omitempty"` + Bandwidth float32 `protobuf:"fixed32,2,opt,name=bandwidth,proto3" json:"bandwidth,omitempty"` +} + +func (x *LinkBandwidthExtended) Reset() { + *x = LinkBandwidthExtended{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LinkBandwidthExtended) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LinkBandwidthExtended) ProtoMessage() {} + +func (x *LinkBandwidthExtended) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LinkBandwidthExtended.ProtoReflect.Descriptor instead. +func (*LinkBandwidthExtended) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{3} +} + +func (x *LinkBandwidthExtended) GetAsn() uint32 { + if x != nil { + return x.Asn + } + return 0 +} + +func (x *LinkBandwidthExtended) GetBandwidth() float32 { + if x != nil { + return x.Bandwidth + } + return 0 +} + +type ValidationExtended struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + State uint32 `protobuf:"varint,1,opt,name=state,proto3" json:"state,omitempty"` +} + +func (x *ValidationExtended) Reset() { + *x = ValidationExtended{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidationExtended) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidationExtended) ProtoMessage() {} + +func (x *ValidationExtended) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidationExtended.ProtoReflect.Descriptor instead. +func (*ValidationExtended) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{4} +} + +func (x *ValidationExtended) GetState() uint32 { + if x != nil { + return x.State + } + return 0 +} + +type ColorExtended struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Color uint32 `protobuf:"varint,1,opt,name=color,proto3" json:"color,omitempty"` +} + +func (x *ColorExtended) Reset() { + *x = ColorExtended{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ColorExtended) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ColorExtended) ProtoMessage() {} + +func (x *ColorExtended) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ColorExtended.ProtoReflect.Descriptor instead. +func (*ColorExtended) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{5} +} + +func (x *ColorExtended) GetColor() uint32 { + if x != nil { + return x.Color + } + return 0 +} + +type EncapExtended struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TunnelType uint32 `protobuf:"varint,1,opt,name=tunnel_type,json=tunnelType,proto3" json:"tunnel_type,omitempty"` +} + +func (x *EncapExtended) Reset() { + *x = EncapExtended{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EncapExtended) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EncapExtended) ProtoMessage() {} + +func (x *EncapExtended) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EncapExtended.ProtoReflect.Descriptor instead. +func (*EncapExtended) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{6} +} + +func (x *EncapExtended) GetTunnelType() uint32 { + if x != nil { + return x.TunnelType + } + return 0 +} + +type DefaultGatewayExtended struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *DefaultGatewayExtended) Reset() { + *x = DefaultGatewayExtended{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DefaultGatewayExtended) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DefaultGatewayExtended) ProtoMessage() {} + +func (x *DefaultGatewayExtended) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DefaultGatewayExtended.ProtoReflect.Descriptor instead. +func (*DefaultGatewayExtended) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{7} +} + +type OpaqueExtended struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + IsTransitive bool `protobuf:"varint,1,opt,name=is_transitive,json=isTransitive,proto3" json:"is_transitive,omitempty"` + Value []byte `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *OpaqueExtended) Reset() { + *x = OpaqueExtended{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OpaqueExtended) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OpaqueExtended) ProtoMessage() {} + +func (x *OpaqueExtended) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OpaqueExtended.ProtoReflect.Descriptor instead. +func (*OpaqueExtended) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{8} +} + +func (x *OpaqueExtended) GetIsTransitive() bool { + if x != nil { + return x.IsTransitive + } + return false +} + +func (x *OpaqueExtended) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +type ESILabelExtended struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + IsSingleActive bool `protobuf:"varint,1,opt,name=is_single_active,json=isSingleActive,proto3" json:"is_single_active,omitempty"` + Label uint32 `protobuf:"varint,2,opt,name=label,proto3" json:"label,omitempty"` +} + +func (x *ESILabelExtended) Reset() { + *x = ESILabelExtended{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ESILabelExtended) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ESILabelExtended) ProtoMessage() {} + +func (x *ESILabelExtended) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ESILabelExtended.ProtoReflect.Descriptor instead. +func (*ESILabelExtended) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{9} +} + +func (x *ESILabelExtended) GetIsSingleActive() bool { + if x != nil { + return x.IsSingleActive + } + return false +} + +func (x *ESILabelExtended) GetLabel() uint32 { + if x != nil { + return x.Label + } + return 0 +} + +type ESImportRouteTarget struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + EsImport string `protobuf:"bytes,1,opt,name=es_import,json=esImport,proto3" json:"es_import,omitempty"` +} + +func (x *ESImportRouteTarget) Reset() { + *x = ESImportRouteTarget{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ESImportRouteTarget) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ESImportRouteTarget) ProtoMessage() {} + +func (x *ESImportRouteTarget) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ESImportRouteTarget.ProtoReflect.Descriptor instead. +func (*ESImportRouteTarget) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{10} +} + +func (x *ESImportRouteTarget) GetEsImport() string { + if x != nil { + return x.EsImport + } + return "" +} + +type MacMobilityExtended struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + IsSticky bool `protobuf:"varint,1,opt,name=is_sticky,json=isSticky,proto3" json:"is_sticky,omitempty"` + SequenceNum uint32 `protobuf:"varint,2,opt,name=sequence_num,json=sequenceNum,proto3" json:"sequence_num,omitempty"` +} + +func (x *MacMobilityExtended) Reset() { + *x = MacMobilityExtended{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MacMobilityExtended) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MacMobilityExtended) ProtoMessage() {} + +func (x *MacMobilityExtended) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MacMobilityExtended.ProtoReflect.Descriptor instead. +func (*MacMobilityExtended) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{11} +} + +func (x *MacMobilityExtended) GetIsSticky() bool { + if x != nil { + return x.IsSticky + } + return false +} + +func (x *MacMobilityExtended) GetSequenceNum() uint32 { + if x != nil { + return x.SequenceNum + } + return 0 +} + +type RouterMacExtended struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Mac string `protobuf:"bytes,1,opt,name=mac,proto3" json:"mac,omitempty"` +} + +func (x *RouterMacExtended) Reset() { + *x = RouterMacExtended{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RouterMacExtended) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RouterMacExtended) ProtoMessage() {} + +func (x *RouterMacExtended) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RouterMacExtended.ProtoReflect.Descriptor instead. +func (*RouterMacExtended) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{12} +} + +func (x *RouterMacExtended) GetMac() string { + if x != nil { + return x.Mac + } + return "" +} + +type TrafficRateExtended struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Asn uint32 `protobuf:"varint,1,opt,name=asn,proto3" json:"asn,omitempty"` + Rate float32 `protobuf:"fixed32,2,opt,name=rate,proto3" json:"rate,omitempty"` +} + +func (x *TrafficRateExtended) Reset() { + *x = TrafficRateExtended{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TrafficRateExtended) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TrafficRateExtended) ProtoMessage() {} + +func (x *TrafficRateExtended) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TrafficRateExtended.ProtoReflect.Descriptor instead. +func (*TrafficRateExtended) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{13} +} + +func (x *TrafficRateExtended) GetAsn() uint32 { + if x != nil { + return x.Asn + } + return 0 +} + +func (x *TrafficRateExtended) GetRate() float32 { + if x != nil { + return x.Rate + } + return 0 +} + +type TrafficActionExtended struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Terminal bool `protobuf:"varint,1,opt,name=terminal,proto3" json:"terminal,omitempty"` + Sample bool `protobuf:"varint,2,opt,name=sample,proto3" json:"sample,omitempty"` +} + +func (x *TrafficActionExtended) Reset() { + *x = TrafficActionExtended{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TrafficActionExtended) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TrafficActionExtended) ProtoMessage() {} + +func (x *TrafficActionExtended) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TrafficActionExtended.ProtoReflect.Descriptor instead. +func (*TrafficActionExtended) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{14} +} + +func (x *TrafficActionExtended) GetTerminal() bool { + if x != nil { + return x.Terminal + } + return false +} + +func (x *TrafficActionExtended) GetSample() bool { + if x != nil { + return x.Sample + } + return false +} + +type RedirectTwoOctetAsSpecificExtended struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Asn uint32 `protobuf:"varint,1,opt,name=asn,proto3" json:"asn,omitempty"` + LocalAdmin uint32 `protobuf:"varint,2,opt,name=local_admin,json=localAdmin,proto3" json:"local_admin,omitempty"` +} + +func (x *RedirectTwoOctetAsSpecificExtended) Reset() { + *x = RedirectTwoOctetAsSpecificExtended{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RedirectTwoOctetAsSpecificExtended) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RedirectTwoOctetAsSpecificExtended) ProtoMessage() {} + +func (x *RedirectTwoOctetAsSpecificExtended) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RedirectTwoOctetAsSpecificExtended.ProtoReflect.Descriptor instead. +func (*RedirectTwoOctetAsSpecificExtended) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{15} +} + +func (x *RedirectTwoOctetAsSpecificExtended) GetAsn() uint32 { + if x != nil { + return x.Asn + } + return 0 +} + +func (x *RedirectTwoOctetAsSpecificExtended) GetLocalAdmin() uint32 { + if x != nil { + return x.LocalAdmin + } + return 0 +} + +type RedirectIPv4AddressSpecificExtended struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + LocalAdmin uint32 `protobuf:"varint,2,opt,name=local_admin,json=localAdmin,proto3" json:"local_admin,omitempty"` +} + +func (x *RedirectIPv4AddressSpecificExtended) Reset() { + *x = RedirectIPv4AddressSpecificExtended{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RedirectIPv4AddressSpecificExtended) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RedirectIPv4AddressSpecificExtended) ProtoMessage() {} + +func (x *RedirectIPv4AddressSpecificExtended) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RedirectIPv4AddressSpecificExtended.ProtoReflect.Descriptor instead. +func (*RedirectIPv4AddressSpecificExtended) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{16} +} + +func (x *RedirectIPv4AddressSpecificExtended) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *RedirectIPv4AddressSpecificExtended) GetLocalAdmin() uint32 { + if x != nil { + return x.LocalAdmin + } + return 0 +} + +type RedirectFourOctetAsSpecificExtended struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Asn uint32 `protobuf:"varint,1,opt,name=asn,proto3" json:"asn,omitempty"` + LocalAdmin uint32 `protobuf:"varint,2,opt,name=local_admin,json=localAdmin,proto3" json:"local_admin,omitempty"` +} + +func (x *RedirectFourOctetAsSpecificExtended) Reset() { + *x = RedirectFourOctetAsSpecificExtended{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RedirectFourOctetAsSpecificExtended) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RedirectFourOctetAsSpecificExtended) ProtoMessage() {} + +func (x *RedirectFourOctetAsSpecificExtended) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RedirectFourOctetAsSpecificExtended.ProtoReflect.Descriptor instead. +func (*RedirectFourOctetAsSpecificExtended) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{17} +} + +func (x *RedirectFourOctetAsSpecificExtended) GetAsn() uint32 { + if x != nil { + return x.Asn + } + return 0 +} + +func (x *RedirectFourOctetAsSpecificExtended) GetLocalAdmin() uint32 { + if x != nil { + return x.LocalAdmin + } + return 0 +} + +type TrafficRemarkExtended struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Dscp uint32 `protobuf:"varint,1,opt,name=dscp,proto3" json:"dscp,omitempty"` +} + +func (x *TrafficRemarkExtended) Reset() { + *x = TrafficRemarkExtended{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TrafficRemarkExtended) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TrafficRemarkExtended) ProtoMessage() {} + +func (x *TrafficRemarkExtended) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TrafficRemarkExtended.ProtoReflect.Descriptor instead. +func (*TrafficRemarkExtended) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{18} +} + +func (x *TrafficRemarkExtended) GetDscp() uint32 { + if x != nil { + return x.Dscp + } + return 0 +} + +type MUPExtended struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SubType uint32 `protobuf:"varint,1,opt,name=sub_type,json=subType,proto3" json:"sub_type,omitempty"` + SegmentId2 uint32 `protobuf:"varint,2,opt,name=segment_id2,json=segmentId2,proto3" json:"segment_id2,omitempty"` + SegmentId4 uint32 `protobuf:"varint,3,opt,name=segment_id4,json=segmentId4,proto3" json:"segment_id4,omitempty"` +} + +func (x *MUPExtended) Reset() { + *x = MUPExtended{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MUPExtended) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MUPExtended) ProtoMessage() {} + +func (x *MUPExtended) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MUPExtended.ProtoReflect.Descriptor instead. +func (*MUPExtended) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{19} +} + +func (x *MUPExtended) GetSubType() uint32 { + if x != nil { + return x.SubType + } + return 0 +} + +func (x *MUPExtended) GetSegmentId2() uint32 { + if x != nil { + return x.SegmentId2 + } + return 0 +} + +func (x *MUPExtended) GetSegmentId4() uint32 { + if x != nil { + return x.SegmentId4 + } + return 0 +} + +type VPLSExtended struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ControlFlags uint32 `protobuf:"varint,1,opt,name=control_flags,json=controlFlags,proto3" json:"control_flags,omitempty"` + Mtu uint32 `protobuf:"varint,2,opt,name=mtu,proto3" json:"mtu,omitempty"` +} + +func (x *VPLSExtended) Reset() { + *x = VPLSExtended{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VPLSExtended) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VPLSExtended) ProtoMessage() {} + +func (x *VPLSExtended) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VPLSExtended.ProtoReflect.Descriptor instead. +func (*VPLSExtended) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{20} +} + +func (x *VPLSExtended) GetControlFlags() uint32 { + if x != nil { + return x.ControlFlags + } + return 0 +} + +func (x *VPLSExtended) GetMtu() uint32 { + if x != nil { + return x.Mtu + } + return 0 +} + +type UnknownExtended struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type uint32 `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"` + Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *UnknownExtended) Reset() { + *x = UnknownExtended{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UnknownExtended) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnknownExtended) ProtoMessage() {} + +func (x *UnknownExtended) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnknownExtended.ProtoReflect.Descriptor instead. +func (*UnknownExtended) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{21} +} + +func (x *UnknownExtended) GetType() uint32 { + if x != nil { + return x.Type + } + return 0 +} + +func (x *UnknownExtended) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +type ExtendedCommunity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Extcom: + // + // *ExtendedCommunity_Unknown + // *ExtendedCommunity_TwoOctetAsSpecific + // *ExtendedCommunity_Ipv4AddressSpecific + // *ExtendedCommunity_FourOctetAsSpecific + // *ExtendedCommunity_LinkBandwidth + // *ExtendedCommunity_Validation + // *ExtendedCommunity_Color + // *ExtendedCommunity_Encap + // *ExtendedCommunity_DefaultGateway + // *ExtendedCommunity_Opaque + // *ExtendedCommunity_EsiLabel + // *ExtendedCommunity_EsImport + // *ExtendedCommunity_MacMobility + // *ExtendedCommunity_RouterMac + // *ExtendedCommunity_TrafficRate + // *ExtendedCommunity_TrafficAction + // *ExtendedCommunity_RedirectTwoOctetAsSpecific + // *ExtendedCommunity_RedirectIpv4AddressSpecific + // *ExtendedCommunity_RedirectFourOctetAsSpecific + // *ExtendedCommunity_TrafficRemark + // *ExtendedCommunity_Mup + // *ExtendedCommunity_Vpls + Extcom isExtendedCommunity_Extcom `protobuf_oneof:"extcom"` +} + +func (x *ExtendedCommunity) Reset() { + *x = ExtendedCommunity{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExtendedCommunity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExtendedCommunity) ProtoMessage() {} + +func (x *ExtendedCommunity) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExtendedCommunity.ProtoReflect.Descriptor instead. +func (*ExtendedCommunity) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{22} +} + +func (m *ExtendedCommunity) GetExtcom() isExtendedCommunity_Extcom { + if m != nil { + return m.Extcom + } + return nil +} + +func (x *ExtendedCommunity) GetUnknown() *UnknownExtended { + if x, ok := x.GetExtcom().(*ExtendedCommunity_Unknown); ok { + return x.Unknown + } + return nil +} + +func (x *ExtendedCommunity) GetTwoOctetAsSpecific() *TwoOctetAsSpecificExtended { + if x, ok := x.GetExtcom().(*ExtendedCommunity_TwoOctetAsSpecific); ok { + return x.TwoOctetAsSpecific + } + return nil +} + +func (x *ExtendedCommunity) GetIpv4AddressSpecific() *IPv4AddressSpecificExtended { + if x, ok := x.GetExtcom().(*ExtendedCommunity_Ipv4AddressSpecific); ok { + return x.Ipv4AddressSpecific + } + return nil +} + +func (x *ExtendedCommunity) GetFourOctetAsSpecific() *FourOctetAsSpecificExtended { + if x, ok := x.GetExtcom().(*ExtendedCommunity_FourOctetAsSpecific); ok { + return x.FourOctetAsSpecific + } + return nil +} + +func (x *ExtendedCommunity) GetLinkBandwidth() *LinkBandwidthExtended { + if x, ok := x.GetExtcom().(*ExtendedCommunity_LinkBandwidth); ok { + return x.LinkBandwidth + } + return nil +} + +func (x *ExtendedCommunity) GetValidation() *ValidationExtended { + if x, ok := x.GetExtcom().(*ExtendedCommunity_Validation); ok { + return x.Validation + } + return nil +} + +func (x *ExtendedCommunity) GetColor() *ColorExtended { + if x, ok := x.GetExtcom().(*ExtendedCommunity_Color); ok { + return x.Color + } + return nil +} + +func (x *ExtendedCommunity) GetEncap() *EncapExtended { + if x, ok := x.GetExtcom().(*ExtendedCommunity_Encap); ok { + return x.Encap + } + return nil +} + +func (x *ExtendedCommunity) GetDefaultGateway() *DefaultGatewayExtended { + if x, ok := x.GetExtcom().(*ExtendedCommunity_DefaultGateway); ok { + return x.DefaultGateway + } + return nil +} + +func (x *ExtendedCommunity) GetOpaque() *OpaqueExtended { + if x, ok := x.GetExtcom().(*ExtendedCommunity_Opaque); ok { + return x.Opaque + } + return nil +} + +func (x *ExtendedCommunity) GetEsiLabel() *ESILabelExtended { + if x, ok := x.GetExtcom().(*ExtendedCommunity_EsiLabel); ok { + return x.EsiLabel + } + return nil +} + +func (x *ExtendedCommunity) GetEsImport() *ESImportRouteTarget { + if x, ok := x.GetExtcom().(*ExtendedCommunity_EsImport); ok { + return x.EsImport + } + return nil +} + +func (x *ExtendedCommunity) GetMacMobility() *MacMobilityExtended { + if x, ok := x.GetExtcom().(*ExtendedCommunity_MacMobility); ok { + return x.MacMobility + } + return nil +} + +func (x *ExtendedCommunity) GetRouterMac() *RouterMacExtended { + if x, ok := x.GetExtcom().(*ExtendedCommunity_RouterMac); ok { + return x.RouterMac + } + return nil +} + +func (x *ExtendedCommunity) GetTrafficRate() *TrafficRateExtended { + if x, ok := x.GetExtcom().(*ExtendedCommunity_TrafficRate); ok { + return x.TrafficRate + } + return nil +} + +func (x *ExtendedCommunity) GetTrafficAction() *TrafficActionExtended { + if x, ok := x.GetExtcom().(*ExtendedCommunity_TrafficAction); ok { + return x.TrafficAction + } + return nil +} + +func (x *ExtendedCommunity) GetRedirectTwoOctetAsSpecific() *RedirectTwoOctetAsSpecificExtended { + if x, ok := x.GetExtcom().(*ExtendedCommunity_RedirectTwoOctetAsSpecific); ok { + return x.RedirectTwoOctetAsSpecific + } + return nil +} + +func (x *ExtendedCommunity) GetRedirectIpv4AddressSpecific() *RedirectIPv4AddressSpecificExtended { + if x, ok := x.GetExtcom().(*ExtendedCommunity_RedirectIpv4AddressSpecific); ok { + return x.RedirectIpv4AddressSpecific + } + return nil +} + +func (x *ExtendedCommunity) GetRedirectFourOctetAsSpecific() *RedirectFourOctetAsSpecificExtended { + if x, ok := x.GetExtcom().(*ExtendedCommunity_RedirectFourOctetAsSpecific); ok { + return x.RedirectFourOctetAsSpecific + } + return nil +} + +func (x *ExtendedCommunity) GetTrafficRemark() *TrafficRemarkExtended { + if x, ok := x.GetExtcom().(*ExtendedCommunity_TrafficRemark); ok { + return x.TrafficRemark + } + return nil +} + +func (x *ExtendedCommunity) GetMup() *MUPExtended { + if x, ok := x.GetExtcom().(*ExtendedCommunity_Mup); ok { + return x.Mup + } + return nil +} + +func (x *ExtendedCommunity) GetVpls() *VPLSExtended { + if x, ok := x.GetExtcom().(*ExtendedCommunity_Vpls); ok { + return x.Vpls + } + return nil +} + +type isExtendedCommunity_Extcom interface { + isExtendedCommunity_Extcom() +} + +type ExtendedCommunity_Unknown struct { + Unknown *UnknownExtended `protobuf:"bytes,1,opt,name=unknown,proto3,oneof"` +} + +type ExtendedCommunity_TwoOctetAsSpecific struct { + TwoOctetAsSpecific *TwoOctetAsSpecificExtended `protobuf:"bytes,2,opt,name=two_octet_as_specific,json=twoOctetAsSpecific,proto3,oneof"` +} + +type ExtendedCommunity_Ipv4AddressSpecific struct { + Ipv4AddressSpecific *IPv4AddressSpecificExtended `protobuf:"bytes,3,opt,name=ipv4_address_specific,json=ipv4AddressSpecific,proto3,oneof"` +} + +type ExtendedCommunity_FourOctetAsSpecific struct { + FourOctetAsSpecific *FourOctetAsSpecificExtended `protobuf:"bytes,4,opt,name=four_octet_as_specific,json=fourOctetAsSpecific,proto3,oneof"` +} + +type ExtendedCommunity_LinkBandwidth struct { + LinkBandwidth *LinkBandwidthExtended `protobuf:"bytes,5,opt,name=link_bandwidth,json=linkBandwidth,proto3,oneof"` +} + +type ExtendedCommunity_Validation struct { + Validation *ValidationExtended `protobuf:"bytes,6,opt,name=validation,proto3,oneof"` +} + +type ExtendedCommunity_Color struct { + Color *ColorExtended `protobuf:"bytes,7,opt,name=color,proto3,oneof"` +} + +type ExtendedCommunity_Encap struct { + Encap *EncapExtended `protobuf:"bytes,8,opt,name=encap,proto3,oneof"` +} + +type ExtendedCommunity_DefaultGateway struct { + DefaultGateway *DefaultGatewayExtended `protobuf:"bytes,9,opt,name=default_gateway,json=defaultGateway,proto3,oneof"` +} + +type ExtendedCommunity_Opaque struct { + Opaque *OpaqueExtended `protobuf:"bytes,10,opt,name=opaque,proto3,oneof"` +} + +type ExtendedCommunity_EsiLabel struct { + EsiLabel *ESILabelExtended `protobuf:"bytes,11,opt,name=esi_label,json=esiLabel,proto3,oneof"` +} + +type ExtendedCommunity_EsImport struct { + EsImport *ESImportRouteTarget `protobuf:"bytes,12,opt,name=es_import,json=esImport,proto3,oneof"` +} + +type ExtendedCommunity_MacMobility struct { + MacMobility *MacMobilityExtended `protobuf:"bytes,13,opt,name=mac_mobility,json=macMobility,proto3,oneof"` +} + +type ExtendedCommunity_RouterMac struct { + RouterMac *RouterMacExtended `protobuf:"bytes,14,opt,name=router_mac,json=routerMac,proto3,oneof"` +} + +type ExtendedCommunity_TrafficRate struct { + TrafficRate *TrafficRateExtended `protobuf:"bytes,15,opt,name=traffic_rate,json=trafficRate,proto3,oneof"` +} + +type ExtendedCommunity_TrafficAction struct { + TrafficAction *TrafficActionExtended `protobuf:"bytes,16,opt,name=traffic_action,json=trafficAction,proto3,oneof"` +} + +type ExtendedCommunity_RedirectTwoOctetAsSpecific struct { + RedirectTwoOctetAsSpecific *RedirectTwoOctetAsSpecificExtended `protobuf:"bytes,17,opt,name=redirect_two_octet_as_specific,json=redirectTwoOctetAsSpecific,proto3,oneof"` +} + +type ExtendedCommunity_RedirectIpv4AddressSpecific struct { + RedirectIpv4AddressSpecific *RedirectIPv4AddressSpecificExtended `protobuf:"bytes,18,opt,name=redirect_ipv4_address_specific,json=redirectIpv4AddressSpecific,proto3,oneof"` +} + +type ExtendedCommunity_RedirectFourOctetAsSpecific struct { + RedirectFourOctetAsSpecific *RedirectFourOctetAsSpecificExtended `protobuf:"bytes,19,opt,name=redirect_four_octet_as_specific,json=redirectFourOctetAsSpecific,proto3,oneof"` +} + +type ExtendedCommunity_TrafficRemark struct { + TrafficRemark *TrafficRemarkExtended `protobuf:"bytes,20,opt,name=traffic_remark,json=trafficRemark,proto3,oneof"` +} + +type ExtendedCommunity_Mup struct { + Mup *MUPExtended `protobuf:"bytes,21,opt,name=mup,proto3,oneof"` +} + +type ExtendedCommunity_Vpls struct { + Vpls *VPLSExtended `protobuf:"bytes,22,opt,name=vpls,proto3,oneof"` +} + +func (*ExtendedCommunity_Unknown) isExtendedCommunity_Extcom() {} + +func (*ExtendedCommunity_TwoOctetAsSpecific) isExtendedCommunity_Extcom() {} + +func (*ExtendedCommunity_Ipv4AddressSpecific) isExtendedCommunity_Extcom() {} + +func (*ExtendedCommunity_FourOctetAsSpecific) isExtendedCommunity_Extcom() {} + +func (*ExtendedCommunity_LinkBandwidth) isExtendedCommunity_Extcom() {} + +func (*ExtendedCommunity_Validation) isExtendedCommunity_Extcom() {} + +func (*ExtendedCommunity_Color) isExtendedCommunity_Extcom() {} + +func (*ExtendedCommunity_Encap) isExtendedCommunity_Extcom() {} + +func (*ExtendedCommunity_DefaultGateway) isExtendedCommunity_Extcom() {} + +func (*ExtendedCommunity_Opaque) isExtendedCommunity_Extcom() {} + +func (*ExtendedCommunity_EsiLabel) isExtendedCommunity_Extcom() {} + +func (*ExtendedCommunity_EsImport) isExtendedCommunity_Extcom() {} + +func (*ExtendedCommunity_MacMobility) isExtendedCommunity_Extcom() {} + +func (*ExtendedCommunity_RouterMac) isExtendedCommunity_Extcom() {} + +func (*ExtendedCommunity_TrafficRate) isExtendedCommunity_Extcom() {} + +func (*ExtendedCommunity_TrafficAction) isExtendedCommunity_Extcom() {} + +func (*ExtendedCommunity_RedirectTwoOctetAsSpecific) isExtendedCommunity_Extcom() {} + +func (*ExtendedCommunity_RedirectIpv4AddressSpecific) isExtendedCommunity_Extcom() {} + +func (*ExtendedCommunity_RedirectFourOctetAsSpecific) isExtendedCommunity_Extcom() {} + +func (*ExtendedCommunity_TrafficRemark) isExtendedCommunity_Extcom() {} + +func (*ExtendedCommunity_Mup) isExtendedCommunity_Extcom() {} + +func (*ExtendedCommunity_Vpls) isExtendedCommunity_Extcom() {} + +type RouteTarget struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Rt: + // + // *RouteTarget_TwoOctetAsSpecific + // *RouteTarget_Ipv4AddressSpecific + // *RouteTarget_FourOctetAsSpecific + Rt isRouteTarget_Rt `protobuf_oneof:"rt"` +} + +func (x *RouteTarget) Reset() { + *x = RouteTarget{} + if protoimpl.UnsafeEnabled { + mi := &file_extcom_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RouteTarget) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RouteTarget) ProtoMessage() {} + +func (x *RouteTarget) ProtoReflect() protoreflect.Message { + mi := &file_extcom_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RouteTarget.ProtoReflect.Descriptor instead. +func (*RouteTarget) Descriptor() ([]byte, []int) { + return file_extcom_proto_rawDescGZIP(), []int{23} +} + +func (m *RouteTarget) GetRt() isRouteTarget_Rt { + if m != nil { + return m.Rt + } + return nil +} + +func (x *RouteTarget) GetTwoOctetAsSpecific() *TwoOctetAsSpecificExtended { + if x, ok := x.GetRt().(*RouteTarget_TwoOctetAsSpecific); ok { + return x.TwoOctetAsSpecific + } + return nil +} + +func (x *RouteTarget) GetIpv4AddressSpecific() *IPv4AddressSpecificExtended { + if x, ok := x.GetRt().(*RouteTarget_Ipv4AddressSpecific); ok { + return x.Ipv4AddressSpecific + } + return nil +} + +func (x *RouteTarget) GetFourOctetAsSpecific() *FourOctetAsSpecificExtended { + if x, ok := x.GetRt().(*RouteTarget_FourOctetAsSpecific); ok { + return x.FourOctetAsSpecific + } + return nil +} + +type isRouteTarget_Rt interface { + isRouteTarget_Rt() +} + +type RouteTarget_TwoOctetAsSpecific struct { + TwoOctetAsSpecific *TwoOctetAsSpecificExtended `protobuf:"bytes,1,opt,name=two_octet_as_specific,json=twoOctetAsSpecific,proto3,oneof"` +} + +type RouteTarget_Ipv4AddressSpecific struct { + Ipv4AddressSpecific *IPv4AddressSpecificExtended `protobuf:"bytes,2,opt,name=ipv4_address_specific,json=ipv4AddressSpecific,proto3,oneof"` +} + +type RouteTarget_FourOctetAsSpecific struct { + FourOctetAsSpecific *FourOctetAsSpecificExtended `protobuf:"bytes,3,opt,name=four_octet_as_specific,json=fourOctetAsSpecific,proto3,oneof"` +} + +func (*RouteTarget_TwoOctetAsSpecific) isRouteTarget_Rt() {} + +func (*RouteTarget_Ipv4AddressSpecific) isRouteTarget_Rt() {} + +func (*RouteTarget_FourOctetAsSpecific) isRouteTarget_Rt() {} + +var File_extcom_proto protoreflect.FileDescriptor + +var file_extcom_proto_rawDesc = []byte{ + 0x0a, 0x0c, 0x65, 0x78, 0x74, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x22, 0x8f, 0x01, 0x0a, 0x1a, 0x54, 0x77, 0x6f, 0x4f, 0x63, 0x74, + 0x65, 0x74, 0x41, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, + 0x6e, 0x64, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x75, 0x62, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x75, 0x62, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x03, 0x61, 0x73, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x22, 0x98, 0x01, 0x0a, 0x1b, 0x49, 0x50, 0x76, 0x34, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, + 0x69, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x12, 0x19, 0x0a, 0x08, + 0x73, 0x75, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, + 0x73, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x64, 0x6d, + 0x69, 0x6e, 0x22, 0x90, 0x01, 0x0a, 0x1b, 0x46, 0x6f, 0x75, 0x72, 0x4f, 0x63, 0x74, 0x65, 0x74, + 0x41, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, + 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, + 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x75, 0x62, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x03, 0x61, 0x73, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x64, + 0x6d, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x22, 0x47, 0x0a, 0x15, 0x4c, 0x69, 0x6e, 0x6b, 0x42, 0x61, 0x6e, + 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x10, + 0x0a, 0x03, 0x61, 0x73, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, 0x6e, + 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x09, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x2a, + 0x0a, 0x12, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, + 0x6e, 0x64, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x25, 0x0a, 0x0d, 0x43, 0x6f, + 0x6c, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, + 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x22, 0x30, 0x0a, 0x0d, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, + 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x54, + 0x79, 0x70, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x47, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x22, 0x4b, 0x0a, + 0x0e, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, + 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, + 0x74, 0x69, 0x76, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x52, 0x0a, 0x10, 0x45, 0x53, + 0x49, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x28, + 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x53, 0x69, 0x6e, 0x67, + 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x32, + 0x0a, 0x13, 0x45, 0x53, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x73, 0x5f, 0x69, 0x6d, 0x70, 0x6f, + 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x73, 0x49, 0x6d, 0x70, 0x6f, + 0x72, 0x74, 0x22, 0x55, 0x0a, 0x13, 0x4d, 0x61, 0x63, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, + 0x73, 0x74, 0x69, 0x63, 0x6b, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, + 0x53, 0x74, 0x69, 0x63, 0x6b, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, + 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x73, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x22, 0x25, 0x0a, 0x11, 0x52, 0x6f, 0x75, + 0x74, 0x65, 0x72, 0x4d, 0x61, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x10, + 0x0a, 0x03, 0x6d, 0x61, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x61, 0x63, + 0x22, 0x3b, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x61, 0x74, 0x65, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x61, 0x74, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x04, 0x72, 0x61, 0x74, 0x65, 0x22, 0x4b, 0x0a, + 0x15, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, + 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x06, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x22, 0x57, 0x0a, 0x22, 0x52, 0x65, + 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x54, 0x77, 0x6f, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x41, 0x73, + 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, + 0x73, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x6d, 0x69, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x64, + 0x6d, 0x69, 0x6e, 0x22, 0x60, 0x0a, 0x23, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x49, + 0x50, 0x76, 0x34, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, + 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x64, + 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x22, 0x58, 0x0a, 0x23, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x46, 0x6f, 0x75, 0x72, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x41, 0x73, 0x53, 0x70, 0x65, 0x63, + 0x69, 0x66, 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x10, 0x0a, 0x03, + 0x61, 0x73, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, 0x6e, 0x12, 0x1f, + 0x0a, 0x0b, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x22, + 0x2b, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, + 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x73, 0x63, 0x70, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x64, 0x73, 0x63, 0x70, 0x22, 0x6a, 0x0a, 0x0b, + 0x4d, 0x55, 0x50, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x73, + 0x75, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, + 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x73, 0x65, 0x67, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x32, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x34, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x73, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x34, 0x22, 0x45, 0x0a, 0x0c, 0x56, 0x50, 0x4c, 0x53, + 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, + 0x72, 0x6f, 0x6c, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x10, 0x0a, + 0x03, 0x6d, 0x74, 0x75, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x22, + 0x3b, 0x0a, 0x0f, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, + 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa2, 0x0c, 0x0a, + 0x11, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x12, 0x32, 0x0a, 0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x6b, 0x6e, + 0x6f, 0x77, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x07, 0x75, + 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x12, 0x56, 0x0a, 0x15, 0x74, 0x77, 0x6f, 0x5f, 0x6f, 0x63, + 0x74, 0x65, 0x74, 0x5f, 0x61, 0x73, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x77, + 0x6f, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x41, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, + 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x12, 0x74, 0x77, 0x6f, 0x4f, + 0x63, 0x74, 0x65, 0x74, 0x41, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x12, 0x58, + 0x0a, 0x15, 0x69, 0x70, 0x76, 0x34, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x73, + 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x49, 0x50, 0x76, 0x34, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, + 0x64, 0x48, 0x00, 0x52, 0x13, 0x69, 0x70, 0x76, 0x34, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x12, 0x59, 0x0a, 0x16, 0x66, 0x6f, 0x75, 0x72, + 0x5f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x5f, 0x61, 0x73, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, + 0x69, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x46, 0x6f, 0x75, 0x72, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x41, 0x73, 0x53, 0x70, 0x65, 0x63, + 0x69, 0x66, 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x13, + 0x66, 0x6f, 0x75, 0x72, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x41, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, + 0x66, 0x69, 0x63, 0x12, 0x45, 0x0a, 0x0e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x62, 0x61, 0x6e, 0x64, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x6c, 0x69, 0x6e, + 0x6b, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x3b, 0x0a, 0x0a, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0a, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x43, + 0x6f, 0x6c, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x05, + 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x2c, 0x0a, 0x05, 0x65, 0x6e, 0x63, 0x61, 0x70, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x63, + 0x61, 0x70, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x05, 0x65, 0x6e, + 0x63, 0x61, 0x70, 0x12, 0x48, 0x0a, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x47, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0e, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2f, 0x0a, + 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x45, 0x78, 0x74, 0x65, + 0x6e, 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x36, + 0x0a, 0x09, 0x65, 0x73, 0x69, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x53, 0x49, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x08, 0x65, 0x73, + 0x69, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x39, 0x0a, 0x09, 0x65, 0x73, 0x5f, 0x69, 0x6d, 0x70, + 0x6f, 0x72, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x45, 0x53, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x48, 0x00, 0x52, 0x08, 0x65, 0x73, 0x49, 0x6d, 0x70, 0x6f, 0x72, + 0x74, 0x12, 0x3f, 0x0a, 0x0c, 0x6d, 0x61, 0x63, 0x5f, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x4d, 0x61, 0x63, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0b, 0x6d, 0x61, 0x63, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x12, 0x39, 0x0a, 0x0a, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x63, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, + 0x6f, 0x75, 0x74, 0x65, 0x72, 0x4d, 0x61, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, + 0x48, 0x00, 0x52, 0x09, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x4d, 0x61, 0x63, 0x12, 0x3f, 0x0a, + 0x0c, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x0f, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x72, 0x61, 0x66, + 0x66, 0x69, 0x63, 0x52, 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x48, + 0x00, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x61, 0x74, 0x65, 0x12, 0x45, + 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, + 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, + 0x6e, 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6f, 0x0a, 0x1e, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x5f, 0x74, 0x77, 0x6f, 0x5f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x5f, 0x61, 0x73, 0x5f, 0x73, + 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x54, 0x77, + 0x6f, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x41, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, + 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x64, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x54, 0x77, 0x6f, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x41, 0x73, 0x53, 0x70, + 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x12, 0x71, 0x0a, 0x1e, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x5f, 0x69, 0x70, 0x76, 0x34, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, + 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, + 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x49, + 0x50, 0x76, 0x34, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, + 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x1b, 0x72, 0x65, + 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x49, 0x70, 0x76, 0x34, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x12, 0x72, 0x0a, 0x1f, 0x72, 0x65, 0x64, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x66, 0x6f, 0x75, 0x72, 0x5f, 0x6f, 0x63, 0x74, 0x65, 0x74, + 0x5f, 0x61, 0x73, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x18, 0x13, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x46, 0x6f, 0x75, 0x72, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x41, 0x73, 0x53, 0x70, + 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x48, 0x00, + 0x52, 0x1b, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x46, 0x6f, 0x75, 0x72, 0x4f, 0x63, + 0x74, 0x65, 0x74, 0x41, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x12, 0x45, 0x0a, + 0x0e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x5f, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, + 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x72, + 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x52, 0x65, + 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x26, 0x0a, 0x03, 0x6d, 0x75, 0x70, 0x18, 0x15, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x55, 0x50, 0x45, 0x78, 0x74, + 0x65, 0x6e, 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x75, 0x70, 0x12, 0x29, 0x0a, 0x04, + 0x76, 0x70, 0x6c, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, + 0x70, 0x62, 0x2e, 0x56, 0x50, 0x4c, 0x53, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x48, + 0x00, 0x52, 0x04, 0x76, 0x70, 0x6c, 0x73, 0x42, 0x08, 0x0a, 0x06, 0x65, 0x78, 0x74, 0x63, 0x6f, + 0x6d, 0x22, 0xa0, 0x02, 0x0a, 0x0b, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x12, 0x56, 0x0a, 0x15, 0x74, 0x77, 0x6f, 0x5f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x5f, 0x61, + 0x73, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x77, 0x6f, 0x4f, 0x63, 0x74, 0x65, + 0x74, 0x41, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x12, 0x74, 0x77, 0x6f, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x41, + 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x12, 0x58, 0x0a, 0x15, 0x69, 0x70, 0x76, + 0x34, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, + 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x49, 0x50, 0x76, 0x34, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x65, 0x63, + 0x69, 0x66, 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x13, + 0x69, 0x70, 0x76, 0x34, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, + 0x66, 0x69, 0x63, 0x12, 0x59, 0x0a, 0x16, 0x66, 0x6f, 0x75, 0x72, 0x5f, 0x6f, 0x63, 0x74, 0x65, + 0x74, 0x5f, 0x61, 0x73, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x6f, 0x75, 0x72, + 0x4f, 0x63, 0x74, 0x65, 0x74, 0x41, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x13, 0x66, 0x6f, 0x75, 0x72, 0x4f, + 0x63, 0x74, 0x65, 0x74, 0x41, 0x73, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x42, 0x04, + 0x0a, 0x02, 0x72, 0x74, 0x42, 0x24, 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x72, 0x67, 0x2f, 0x67, 0x6f, 0x62, 0x67, 0x70, 0x2f, 0x76, 0x33, + 0x2f, 0x61, 0x70, 0x69, 0x3b, 0x61, 0x70, 0x69, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, +} + +var ( + file_extcom_proto_rawDescOnce sync.Once + file_extcom_proto_rawDescData = file_extcom_proto_rawDesc +) + +func file_extcom_proto_rawDescGZIP() []byte { + file_extcom_proto_rawDescOnce.Do(func() { + file_extcom_proto_rawDescData = protoimpl.X.CompressGZIP(file_extcom_proto_rawDescData) + }) + return file_extcom_proto_rawDescData +} + +var file_extcom_proto_msgTypes = make([]protoimpl.MessageInfo, 24) +var file_extcom_proto_goTypes = []interface{}{ + (*TwoOctetAsSpecificExtended)(nil), // 0: apipb.TwoOctetAsSpecificExtended + (*IPv4AddressSpecificExtended)(nil), // 1: apipb.IPv4AddressSpecificExtended + (*FourOctetAsSpecificExtended)(nil), // 2: apipb.FourOctetAsSpecificExtended + (*LinkBandwidthExtended)(nil), // 3: apipb.LinkBandwidthExtended + (*ValidationExtended)(nil), // 4: apipb.ValidationExtended + (*ColorExtended)(nil), // 5: apipb.ColorExtended + (*EncapExtended)(nil), // 6: apipb.EncapExtended + (*DefaultGatewayExtended)(nil), // 7: apipb.DefaultGatewayExtended + (*OpaqueExtended)(nil), // 8: apipb.OpaqueExtended + (*ESILabelExtended)(nil), // 9: apipb.ESILabelExtended + (*ESImportRouteTarget)(nil), // 10: apipb.ESImportRouteTarget + (*MacMobilityExtended)(nil), // 11: apipb.MacMobilityExtended + (*RouterMacExtended)(nil), // 12: apipb.RouterMacExtended + (*TrafficRateExtended)(nil), // 13: apipb.TrafficRateExtended + (*TrafficActionExtended)(nil), // 14: apipb.TrafficActionExtended + (*RedirectTwoOctetAsSpecificExtended)(nil), // 15: apipb.RedirectTwoOctetAsSpecificExtended + (*RedirectIPv4AddressSpecificExtended)(nil), // 16: apipb.RedirectIPv4AddressSpecificExtended + (*RedirectFourOctetAsSpecificExtended)(nil), // 17: apipb.RedirectFourOctetAsSpecificExtended + (*TrafficRemarkExtended)(nil), // 18: apipb.TrafficRemarkExtended + (*MUPExtended)(nil), // 19: apipb.MUPExtended + (*VPLSExtended)(nil), // 20: apipb.VPLSExtended + (*UnknownExtended)(nil), // 21: apipb.UnknownExtended + (*ExtendedCommunity)(nil), // 22: apipb.ExtendedCommunity + (*RouteTarget)(nil), // 23: apipb.RouteTarget +} +var file_extcom_proto_depIdxs = []int32{ + 21, // 0: apipb.ExtendedCommunity.unknown:type_name -> apipb.UnknownExtended + 0, // 1: apipb.ExtendedCommunity.two_octet_as_specific:type_name -> apipb.TwoOctetAsSpecificExtended + 1, // 2: apipb.ExtendedCommunity.ipv4_address_specific:type_name -> apipb.IPv4AddressSpecificExtended + 2, // 3: apipb.ExtendedCommunity.four_octet_as_specific:type_name -> apipb.FourOctetAsSpecificExtended + 3, // 4: apipb.ExtendedCommunity.link_bandwidth:type_name -> apipb.LinkBandwidthExtended + 4, // 5: apipb.ExtendedCommunity.validation:type_name -> apipb.ValidationExtended + 5, // 6: apipb.ExtendedCommunity.color:type_name -> apipb.ColorExtended + 6, // 7: apipb.ExtendedCommunity.encap:type_name -> apipb.EncapExtended + 7, // 8: apipb.ExtendedCommunity.default_gateway:type_name -> apipb.DefaultGatewayExtended + 8, // 9: apipb.ExtendedCommunity.opaque:type_name -> apipb.OpaqueExtended + 9, // 10: apipb.ExtendedCommunity.esi_label:type_name -> apipb.ESILabelExtended + 10, // 11: apipb.ExtendedCommunity.es_import:type_name -> apipb.ESImportRouteTarget + 11, // 12: apipb.ExtendedCommunity.mac_mobility:type_name -> apipb.MacMobilityExtended + 12, // 13: apipb.ExtendedCommunity.router_mac:type_name -> apipb.RouterMacExtended + 13, // 14: apipb.ExtendedCommunity.traffic_rate:type_name -> apipb.TrafficRateExtended + 14, // 15: apipb.ExtendedCommunity.traffic_action:type_name -> apipb.TrafficActionExtended + 15, // 16: apipb.ExtendedCommunity.redirect_two_octet_as_specific:type_name -> apipb.RedirectTwoOctetAsSpecificExtended + 16, // 17: apipb.ExtendedCommunity.redirect_ipv4_address_specific:type_name -> apipb.RedirectIPv4AddressSpecificExtended + 17, // 18: apipb.ExtendedCommunity.redirect_four_octet_as_specific:type_name -> apipb.RedirectFourOctetAsSpecificExtended + 18, // 19: apipb.ExtendedCommunity.traffic_remark:type_name -> apipb.TrafficRemarkExtended + 19, // 20: apipb.ExtendedCommunity.mup:type_name -> apipb.MUPExtended + 20, // 21: apipb.ExtendedCommunity.vpls:type_name -> apipb.VPLSExtended + 0, // 22: apipb.RouteTarget.two_octet_as_specific:type_name -> apipb.TwoOctetAsSpecificExtended + 1, // 23: apipb.RouteTarget.ipv4_address_specific:type_name -> apipb.IPv4AddressSpecificExtended + 2, // 24: apipb.RouteTarget.four_octet_as_specific:type_name -> apipb.FourOctetAsSpecificExtended + 25, // [25:25] is the sub-list for method output_type + 25, // [25:25] is the sub-list for method input_type + 25, // [25:25] is the sub-list for extension type_name + 25, // [25:25] is the sub-list for extension extendee + 0, // [0:25] is the sub-list for field type_name +} + +func init() { file_extcom_proto_init() } +func file_extcom_proto_init() { + if File_extcom_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_extcom_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TwoOctetAsSpecificExtended); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IPv4AddressSpecificExtended); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FourOctetAsSpecificExtended); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LinkBandwidthExtended); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidationExtended); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ColorExtended); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EncapExtended); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DefaultGatewayExtended); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OpaqueExtended); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ESILabelExtended); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ESImportRouteTarget); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MacMobilityExtended); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RouterMacExtended); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TrafficRateExtended); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TrafficActionExtended); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RedirectTwoOctetAsSpecificExtended); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RedirectIPv4AddressSpecificExtended); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RedirectFourOctetAsSpecificExtended); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TrafficRemarkExtended); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MUPExtended); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VPLSExtended); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UnknownExtended); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExtendedCommunity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extcom_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RouteTarget); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_extcom_proto_msgTypes[22].OneofWrappers = []interface{}{ + (*ExtendedCommunity_Unknown)(nil), + (*ExtendedCommunity_TwoOctetAsSpecific)(nil), + (*ExtendedCommunity_Ipv4AddressSpecific)(nil), + (*ExtendedCommunity_FourOctetAsSpecific)(nil), + (*ExtendedCommunity_LinkBandwidth)(nil), + (*ExtendedCommunity_Validation)(nil), + (*ExtendedCommunity_Color)(nil), + (*ExtendedCommunity_Encap)(nil), + (*ExtendedCommunity_DefaultGateway)(nil), + (*ExtendedCommunity_Opaque)(nil), + (*ExtendedCommunity_EsiLabel)(nil), + (*ExtendedCommunity_EsImport)(nil), + (*ExtendedCommunity_MacMobility)(nil), + (*ExtendedCommunity_RouterMac)(nil), + (*ExtendedCommunity_TrafficRate)(nil), + (*ExtendedCommunity_TrafficAction)(nil), + (*ExtendedCommunity_RedirectTwoOctetAsSpecific)(nil), + (*ExtendedCommunity_RedirectIpv4AddressSpecific)(nil), + (*ExtendedCommunity_RedirectFourOctetAsSpecific)(nil), + (*ExtendedCommunity_TrafficRemark)(nil), + (*ExtendedCommunity_Mup)(nil), + (*ExtendedCommunity_Vpls)(nil), + } + file_extcom_proto_msgTypes[23].OneofWrappers = []interface{}{ + (*RouteTarget_TwoOctetAsSpecific)(nil), + (*RouteTarget_Ipv4AddressSpecific)(nil), + (*RouteTarget_FourOctetAsSpecific)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_extcom_proto_rawDesc, + NumEnums: 0, + NumMessages: 24, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_extcom_proto_goTypes, + DependencyIndexes: file_extcom_proto_depIdxs, + MessageInfos: file_extcom_proto_msgTypes, + }.Build() + File_extcom_proto = out.File + file_extcom_proto_rawDesc = nil + file_extcom_proto_goTypes = nil + file_extcom_proto_depIdxs = nil +} diff --git a/api/extcom.proto b/api/extcom.proto new file mode 100644 index 000000000..628a2ce7a --- /dev/null +++ b/api/extcom.proto @@ -0,0 +1,137 @@ +syntax = "proto3"; + +package apipb; +option go_package = "github.com/osrg/gobgp/v3/api;apipb"; + +// BGP Extended communities + +message TwoOctetAsSpecificExtended { + bool is_transitive = 1; + uint32 sub_type = 2; + uint32 asn = 3; + uint32 local_admin = 4; +} + +message IPv4AddressSpecificExtended { + bool is_transitive = 1; + uint32 sub_type = 2; + string address = 3; + uint32 local_admin = 4; +} + +message FourOctetAsSpecificExtended { + bool is_transitive = 1; + uint32 sub_type = 2; + uint32 asn = 3; + uint32 local_admin = 4; +} + +message LinkBandwidthExtended { + uint32 asn = 1; + float bandwidth = 2; +} + +message ValidationExtended { uint32 state = 1; } + +message ColorExtended { uint32 color = 1; } + +message EncapExtended { uint32 tunnel_type = 1; } + +message DefaultGatewayExtended {} + +message OpaqueExtended { + bool is_transitive = 1; + bytes value = 3; +} + +message ESILabelExtended { + bool is_single_active = 1; + uint32 label = 2; +} + +message ESImportRouteTarget { string es_import = 1; } + +message MacMobilityExtended { + bool is_sticky = 1; + uint32 sequence_num = 2; +} + +message RouterMacExtended { string mac = 1; } + +message TrafficRateExtended { + uint32 asn = 1; + float rate = 2; +} + +message TrafficActionExtended { + bool terminal = 1; + bool sample = 2; +} + +message RedirectTwoOctetAsSpecificExtended { + uint32 asn = 1; + uint32 local_admin = 2; +} + +message RedirectIPv4AddressSpecificExtended { + string address = 1; + uint32 local_admin = 2; +} + +message RedirectFourOctetAsSpecificExtended { + uint32 asn = 1; + uint32 local_admin = 2; +} + +message TrafficRemarkExtended { uint32 dscp = 1; } + +message MUPExtended { + uint32 sub_type = 1; + uint32 segment_id2 = 2; + uint32 segment_id4 = 3; +} + +message VPLSExtended { + uint32 control_flags = 1; + uint32 mtu = 2; +} + +message UnknownExtended { + uint32 type = 1; + bytes value = 2; +} + +message ExtendedCommunity { + oneof extcom { + UnknownExtended unknown = 1; + TwoOctetAsSpecificExtended two_octet_as_specific = 2; + IPv4AddressSpecificExtended ipv4_address_specific = 3; + FourOctetAsSpecificExtended four_octet_as_specific = 4; + LinkBandwidthExtended link_bandwidth = 5; + ValidationExtended validation = 6; + ColorExtended color = 7; + EncapExtended encap = 8; + DefaultGatewayExtended default_gateway = 9; + OpaqueExtended opaque = 10; + ESILabelExtended esi_label = 11; + ESImportRouteTarget es_import = 12; + MacMobilityExtended mac_mobility = 13; + RouterMacExtended router_mac = 14; + TrafficRateExtended traffic_rate = 15; + TrafficActionExtended traffic_action = 16; + RedirectTwoOctetAsSpecificExtended redirect_two_octet_as_specific = 17; + RedirectIPv4AddressSpecificExtended redirect_ipv4_address_specific = 18; + RedirectFourOctetAsSpecificExtended redirect_four_octet_as_specific = 19; + TrafficRemarkExtended traffic_remark = 20; + MUPExtended mup = 21; + VPLSExtended vpls = 22; + } +} + +message RouteTarget { + oneof rt { + TwoOctetAsSpecificExtended two_octet_as_specific = 1; + IPv4AddressSpecificExtended ipv4_address_specific = 2; + FourOctetAsSpecificExtended four_octet_as_specific = 3; + } +} diff --git a/api/gobgp.pb.go b/api/gobgp.pb.go index af37700c9..1473a71ea 100644 --- a/api/gobgp.pb.go +++ b/api/gobgp.pb.go @@ -22,7 +22,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.21.12 +// protoc v5.29.2 // source: gobgp.proto package apipb @@ -30,7 +30,6 @@ package apipb import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - anypb "google.golang.org/protobuf/types/known/anypb" emptypb "google.golang.org/protobuf/types/known/emptypb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" @@ -758,152 +757,6 @@ func (AddBmpRequest_MonitoringPolicy) EnumDescriptor() ([]byte, []int) { return file_gobgp_proto_rawDescGZIP(), []int{69, 0} } -type Family_Afi int32 - -const ( - Family_AFI_UNKNOWN Family_Afi = 0 - Family_AFI_IP Family_Afi = 1 - Family_AFI_IP6 Family_Afi = 2 - Family_AFI_L2VPN Family_Afi = 25 - Family_AFI_LS Family_Afi = 16388 - Family_AFI_OPAQUE Family_Afi = 16397 -) - -// Enum value maps for Family_Afi. -var ( - Family_Afi_name = map[int32]string{ - 0: "AFI_UNKNOWN", - 1: "AFI_IP", - 2: "AFI_IP6", - 25: "AFI_L2VPN", - 16388: "AFI_LS", - 16397: "AFI_OPAQUE", - } - Family_Afi_value = map[string]int32{ - "AFI_UNKNOWN": 0, - "AFI_IP": 1, - "AFI_IP6": 2, - "AFI_L2VPN": 25, - "AFI_LS": 16388, - "AFI_OPAQUE": 16397, - } -) - -func (x Family_Afi) Enum() *Family_Afi { - p := new(Family_Afi) - *p = x - return p -} - -func (x Family_Afi) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Family_Afi) Descriptor() protoreflect.EnumDescriptor { - return file_gobgp_proto_enumTypes[14].Descriptor() -} - -func (Family_Afi) Type() protoreflect.EnumType { - return &file_gobgp_proto_enumTypes[14] -} - -func (x Family_Afi) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Family_Afi.Descriptor instead. -func (Family_Afi) EnumDescriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{73, 0} -} - -type Family_Safi int32 - -const ( - Family_SAFI_UNKNOWN Family_Safi = 0 - Family_SAFI_UNICAST Family_Safi = 1 - Family_SAFI_MULTICAST Family_Safi = 2 - Family_SAFI_MPLS_LABEL Family_Safi = 4 - Family_SAFI_ENCAPSULATION Family_Safi = 7 - Family_SAFI_VPLS Family_Safi = 65 - Family_SAFI_EVPN Family_Safi = 70 - Family_SAFI_LS Family_Safi = 71 - Family_SAFI_SR_POLICY Family_Safi = 73 - Family_SAFI_MUP Family_Safi = 85 - Family_SAFI_MPLS_VPN Family_Safi = 128 - Family_SAFI_MPLS_VPN_MULTICAST Family_Safi = 129 - Family_SAFI_ROUTE_TARGET_CONSTRAINTS Family_Safi = 132 - Family_SAFI_FLOW_SPEC_UNICAST Family_Safi = 133 - Family_SAFI_FLOW_SPEC_VPN Family_Safi = 134 - Family_SAFI_KEY_VALUE Family_Safi = 241 -) - -// Enum value maps for Family_Safi. -var ( - Family_Safi_name = map[int32]string{ - 0: "SAFI_UNKNOWN", - 1: "SAFI_UNICAST", - 2: "SAFI_MULTICAST", - 4: "SAFI_MPLS_LABEL", - 7: "SAFI_ENCAPSULATION", - 65: "SAFI_VPLS", - 70: "SAFI_EVPN", - 71: "SAFI_LS", - 73: "SAFI_SR_POLICY", - 85: "SAFI_MUP", - 128: "SAFI_MPLS_VPN", - 129: "SAFI_MPLS_VPN_MULTICAST", - 132: "SAFI_ROUTE_TARGET_CONSTRAINTS", - 133: "SAFI_FLOW_SPEC_UNICAST", - 134: "SAFI_FLOW_SPEC_VPN", - 241: "SAFI_KEY_VALUE", - } - Family_Safi_value = map[string]int32{ - "SAFI_UNKNOWN": 0, - "SAFI_UNICAST": 1, - "SAFI_MULTICAST": 2, - "SAFI_MPLS_LABEL": 4, - "SAFI_ENCAPSULATION": 7, - "SAFI_VPLS": 65, - "SAFI_EVPN": 70, - "SAFI_LS": 71, - "SAFI_SR_POLICY": 73, - "SAFI_MUP": 85, - "SAFI_MPLS_VPN": 128, - "SAFI_MPLS_VPN_MULTICAST": 129, - "SAFI_ROUTE_TARGET_CONSTRAINTS": 132, - "SAFI_FLOW_SPEC_UNICAST": 133, - "SAFI_FLOW_SPEC_VPN": 134, - "SAFI_KEY_VALUE": 241, - } -) - -func (x Family_Safi) Enum() *Family_Safi { - p := new(Family_Safi) - *p = x - return p -} - -func (x Family_Safi) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Family_Safi) Descriptor() protoreflect.EnumDescriptor { - return file_gobgp_proto_enumTypes[15].Descriptor() -} - -func (Family_Safi) Type() protoreflect.EnumType { - return &file_gobgp_proto_enumTypes[15] -} - -func (x Family_Safi) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Family_Safi.Descriptor instead. -func (Family_Safi) EnumDescriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{73, 1} -} - type Validation_State int32 const ( @@ -940,11 +793,11 @@ func (x Validation_State) String() string { } func (Validation_State) Descriptor() protoreflect.EnumDescriptor { - return file_gobgp_proto_enumTypes[16].Descriptor() + return file_gobgp_proto_enumTypes[14].Descriptor() } func (Validation_State) Type() protoreflect.EnumType { - return &file_gobgp_proto_enumTypes[16] + return &file_gobgp_proto_enumTypes[14] } func (x Validation_State) Number() protoreflect.EnumNumber { @@ -953,7 +806,7 @@ func (x Validation_State) Number() protoreflect.EnumNumber { // Deprecated: Use Validation_State.Descriptor instead. func (Validation_State) EnumDescriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{74, 0} + return file_gobgp_proto_rawDescGZIP(), []int{73, 0} } type Validation_Reason int32 @@ -989,11 +842,11 @@ func (x Validation_Reason) String() string { } func (Validation_Reason) Descriptor() protoreflect.EnumDescriptor { - return file_gobgp_proto_enumTypes[17].Descriptor() + return file_gobgp_proto_enumTypes[15].Descriptor() } func (Validation_Reason) Type() protoreflect.EnumType { - return &file_gobgp_proto_enumTypes[17] + return &file_gobgp_proto_enumTypes[15] } func (x Validation_Reason) Number() protoreflect.EnumNumber { @@ -1002,7 +855,7 @@ func (x Validation_Reason) Number() protoreflect.EnumNumber { // Deprecated: Use Validation_Reason.Descriptor instead. func (Validation_Reason) EnumDescriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{74, 1} + return file_gobgp_proto_rawDescGZIP(), []int{73, 1} } type PeerState_SessionState int32 @@ -1050,11 +903,11 @@ func (x PeerState_SessionState) String() string { } func (PeerState_SessionState) Descriptor() protoreflect.EnumDescriptor { - return file_gobgp_proto_enumTypes[18].Descriptor() + return file_gobgp_proto_enumTypes[16].Descriptor() } func (PeerState_SessionState) Type() protoreflect.EnumType { - return &file_gobgp_proto_enumTypes[18] + return &file_gobgp_proto_enumTypes[16] } func (x PeerState_SessionState) Number() protoreflect.EnumNumber { @@ -1063,7 +916,7 @@ func (x PeerState_SessionState) Number() protoreflect.EnumNumber { // Deprecated: Use PeerState_SessionState.Descriptor instead. func (PeerState_SessionState) EnumDescriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{88, 0} + return file_gobgp_proto_rawDescGZIP(), []int{87, 0} } type PeerState_AdminState int32 @@ -1099,11 +952,11 @@ func (x PeerState_AdminState) String() string { } func (PeerState_AdminState) Descriptor() protoreflect.EnumDescriptor { - return file_gobgp_proto_enumTypes[19].Descriptor() + return file_gobgp_proto_enumTypes[17].Descriptor() } func (PeerState_AdminState) Type() protoreflect.EnumType { - return &file_gobgp_proto_enumTypes[19] + return &file_gobgp_proto_enumTypes[17] } func (x PeerState_AdminState) Number() protoreflect.EnumNumber { @@ -1112,7 +965,7 @@ func (x PeerState_AdminState) Number() protoreflect.EnumNumber { // Deprecated: Use PeerState_AdminState.Descriptor instead. func (PeerState_AdminState) EnumDescriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{88, 1} + return file_gobgp_proto_rawDescGZIP(), []int{87, 1} } type MatchSet_Type int32 @@ -1148,11 +1001,11 @@ func (x MatchSet_Type) String() string { } func (MatchSet_Type) Descriptor() protoreflect.EnumDescriptor { - return file_gobgp_proto_enumTypes[20].Descriptor() + return file_gobgp_proto_enumTypes[18].Descriptor() } func (MatchSet_Type) Type() protoreflect.EnumType { - return &file_gobgp_proto_enumTypes[20] + return &file_gobgp_proto_enumTypes[18] } func (x MatchSet_Type) Number() protoreflect.EnumNumber { @@ -1161,7 +1014,7 @@ func (x MatchSet_Type) Number() protoreflect.EnumNumber { // Deprecated: Use MatchSet_Type.Descriptor instead. func (MatchSet_Type) EnumDescriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{127, 0} + return file_gobgp_proto_rawDescGZIP(), []int{126, 0} } type AsPathLength_Type int32 @@ -1197,11 +1050,11 @@ func (x AsPathLength_Type) String() string { } func (AsPathLength_Type) Descriptor() protoreflect.EnumDescriptor { - return file_gobgp_proto_enumTypes[21].Descriptor() + return file_gobgp_proto_enumTypes[19].Descriptor() } func (AsPathLength_Type) Type() protoreflect.EnumType { - return &file_gobgp_proto_enumTypes[21] + return &file_gobgp_proto_enumTypes[19] } func (x AsPathLength_Type) Number() protoreflect.EnumNumber { @@ -1210,7 +1063,7 @@ func (x AsPathLength_Type) Number() protoreflect.EnumNumber { // Deprecated: Use AsPathLength_Type.Descriptor instead. func (AsPathLength_Type) EnumDescriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{128, 0} + return file_gobgp_proto_rawDescGZIP(), []int{127, 0} } type CommunityCount_Type int32 @@ -1246,11 +1099,11 @@ func (x CommunityCount_Type) String() string { } func (CommunityCount_Type) Descriptor() protoreflect.EnumDescriptor { - return file_gobgp_proto_enumTypes[22].Descriptor() + return file_gobgp_proto_enumTypes[20].Descriptor() } func (CommunityCount_Type) Type() protoreflect.EnumType { - return &file_gobgp_proto_enumTypes[22] + return &file_gobgp_proto_enumTypes[20] } func (x CommunityCount_Type) Number() protoreflect.EnumNumber { @@ -1259,7 +1112,7 @@ func (x CommunityCount_Type) Number() protoreflect.EnumNumber { // Deprecated: Use CommunityCount_Type.Descriptor instead. func (CommunityCount_Type) EnumDescriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{129, 0} + return file_gobgp_proto_rawDescGZIP(), []int{128, 0} } type Conditions_RouteType int32 @@ -1298,11 +1151,11 @@ func (x Conditions_RouteType) String() string { } func (Conditions_RouteType) Descriptor() protoreflect.EnumDescriptor { - return file_gobgp_proto_enumTypes[23].Descriptor() + return file_gobgp_proto_enumTypes[21].Descriptor() } func (Conditions_RouteType) Type() protoreflect.EnumType { - return &file_gobgp_proto_enumTypes[23] + return &file_gobgp_proto_enumTypes[21] } func (x Conditions_RouteType) Number() protoreflect.EnumNumber { @@ -1311,7 +1164,7 @@ func (x Conditions_RouteType) Number() protoreflect.EnumNumber { // Deprecated: Use Conditions_RouteType.Descriptor instead. func (Conditions_RouteType) EnumDescriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{130, 0} + return file_gobgp_proto_rawDescGZIP(), []int{129, 0} } type CommunityAction_Type int32 @@ -1347,11 +1200,11 @@ func (x CommunityAction_Type) String() string { } func (CommunityAction_Type) Descriptor() protoreflect.EnumDescriptor { - return file_gobgp_proto_enumTypes[24].Descriptor() + return file_gobgp_proto_enumTypes[22].Descriptor() } func (CommunityAction_Type) Type() protoreflect.EnumType { - return &file_gobgp_proto_enumTypes[24] + return &file_gobgp_proto_enumTypes[22] } func (x CommunityAction_Type) Number() protoreflect.EnumNumber { @@ -1360,7 +1213,7 @@ func (x CommunityAction_Type) Number() protoreflect.EnumNumber { // Deprecated: Use CommunityAction_Type.Descriptor instead. func (CommunityAction_Type) EnumDescriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{131, 0} + return file_gobgp_proto_rawDescGZIP(), []int{130, 0} } type MedAction_Type int32 @@ -1393,11 +1246,11 @@ func (x MedAction_Type) String() string { } func (MedAction_Type) Descriptor() protoreflect.EnumDescriptor { - return file_gobgp_proto_enumTypes[25].Descriptor() + return file_gobgp_proto_enumTypes[23].Descriptor() } func (MedAction_Type) Type() protoreflect.EnumType { - return &file_gobgp_proto_enumTypes[25] + return &file_gobgp_proto_enumTypes[23] } func (x MedAction_Type) Number() protoreflect.EnumNumber { @@ -1406,7 +1259,7 @@ func (x MedAction_Type) Number() protoreflect.EnumNumber { // Deprecated: Use MedAction_Type.Descriptor instead. func (MedAction_Type) EnumDescriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{132, 0} + return file_gobgp_proto_rawDescGZIP(), []int{131, 0} } type SetLogLevelRequest_Level int32 @@ -1454,11 +1307,11 @@ func (x SetLogLevelRequest_Level) String() string { } func (SetLogLevelRequest_Level) Descriptor() protoreflect.EnumDescriptor { - return file_gobgp_proto_enumTypes[26].Descriptor() + return file_gobgp_proto_enumTypes[24].Descriptor() } func (SetLogLevelRequest_Level) Type() protoreflect.EnumType { - return &file_gobgp_proto_enumTypes[26] + return &file_gobgp_proto_enumTypes[24] } func (x SetLogLevelRequest_Level) Number() protoreflect.EnumNumber { @@ -1467,7 +1320,7 @@ func (x SetLogLevelRequest_Level) Number() protoreflect.EnumNumber { // Deprecated: Use SetLogLevelRequest_Level.Descriptor instead. func (SetLogLevelRequest_Level) EnumDescriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{150, 0} + return file_gobgp_proto_rawDescGZIP(), []int{149, 0} } type StartBgpRequest struct { @@ -5466,61 +5319,6 @@ func (x *ListBmpResponse) GetStation() *ListBmpResponse_BmpStation { return nil } -type Family struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Afi Family_Afi `protobuf:"varint,1,opt,name=afi,proto3,enum=apipb.Family_Afi" json:"afi,omitempty"` - Safi Family_Safi `protobuf:"varint,2,opt,name=safi,proto3,enum=apipb.Family_Safi" json:"safi,omitempty"` -} - -func (x *Family) Reset() { - *x = Family{} - if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[73] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Family) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Family) ProtoMessage() {} - -func (x *Family) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[73] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Family.ProtoReflect.Descriptor instead. -func (*Family) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{73} -} - -func (x *Family) GetAfi() Family_Afi { - if x != nil { - return x.Afi - } - return Family_AFI_UNKNOWN -} - -func (x *Family) GetSafi() Family_Safi { - if x != nil { - return x.Safi - } - return Family_SAFI_UNKNOWN -} - type Validation struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5536,7 +5334,7 @@ type Validation struct { func (x *Validation) Reset() { *x = Validation{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[74] + mi := &file_gobgp_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5549,7 +5347,7 @@ func (x *Validation) String() string { func (*Validation) ProtoMessage() {} func (x *Validation) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[74] + mi := &file_gobgp_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5562,7 +5360,7 @@ func (x *Validation) ProtoReflect() protoreflect.Message { // Deprecated: Use Validation.ProtoReflect.Descriptor instead. func (*Validation) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{74} + return file_gobgp_proto_rawDescGZIP(), []int{73} } func (x *Validation) GetState() Validation_State { @@ -5605,32 +5403,8 @@ type Path struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // One of the following defined in "api/attribute.proto": - // - IPAddressPrefix - // - LabeledIPAddressPrefix - // - EncapsulationNLRI - // - VPLSNLRI - // - EVPNEthernetAutoDiscoveryRoute - // - EVPNMACIPAdvertisementRoute - // - EVPNInclusiveMulticastEthernetTagRoute - // - EVPNEthernetSegmentRoute - // - EVPNIPPrefixRoute - // - EVPNIPMSIRoute - // - LabeledVPNIPAddressPrefix - // - RouteTargetMembershipNLRI - // - FlowSpecNLRI - // - VPNFlowSpecNLRI - // - OpaqueNLRI - // - LsAddrPrefix - // - SRPolicyNLRI - // - MUPInterworkSegmentDiscoveryRoute - // - MUPDirectSegmentDiscoveryRoute - // - MUPType1SessionTransformedRoute - // - MUPType2SessionTransformedRoute - Nlri *anypb.Any `protobuf:"bytes,1,opt,name=nlri,proto3" json:"nlri,omitempty"` - // Each attribute must be one of *Attribute defined in - // "api/attribute.proto". - Pattrs []*anypb.Any `protobuf:"bytes,2,rep,name=pattrs,proto3" json:"pattrs,omitempty"` + Nlri *NLRI `protobuf:"bytes,1,opt,name=nlri,proto3" json:"nlri,omitempty"` + Pattrs []*Attribute `protobuf:"bytes,2,rep,name=pattrs,proto3" json:"pattrs,omitempty"` Age *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=age,proto3" json:"age,omitempty"` Best bool `protobuf:"varint,4,opt,name=best,proto3" json:"best,omitempty"` IsWithdraw bool `protobuf:"varint,5,opt,name=is_withdraw,json=isWithdraw,proto3" json:"is_withdraw,omitempty"` @@ -5655,7 +5429,7 @@ type Path struct { func (x *Path) Reset() { *x = Path{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[75] + mi := &file_gobgp_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5668,7 +5442,7 @@ func (x *Path) String() string { func (*Path) ProtoMessage() {} func (x *Path) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[75] + mi := &file_gobgp_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5681,17 +5455,17 @@ func (x *Path) ProtoReflect() protoreflect.Message { // Deprecated: Use Path.ProtoReflect.Descriptor instead. func (*Path) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{75} + return file_gobgp_proto_rawDescGZIP(), []int{74} } -func (x *Path) GetNlri() *anypb.Any { +func (x *Path) GetNlri() *NLRI { if x != nil { return x.Nlri } return nil } -func (x *Path) GetPattrs() []*anypb.Any { +func (x *Path) GetPattrs() []*Attribute { if x != nil { return x.Pattrs } @@ -5843,7 +5617,7 @@ type Destination struct { func (x *Destination) Reset() { *x = Destination{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[76] + mi := &file_gobgp_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5856,7 +5630,7 @@ func (x *Destination) String() string { func (*Destination) ProtoMessage() {} func (x *Destination) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[76] + mi := &file_gobgp_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5869,7 +5643,7 @@ func (x *Destination) ProtoReflect() protoreflect.Message { // Deprecated: Use Destination.ProtoReflect.Descriptor instead. func (*Destination) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{76} + return file_gobgp_proto_rawDescGZIP(), []int{75} } func (x *Destination) GetPrefix() string { @@ -5907,7 +5681,7 @@ type Peer struct { func (x *Peer) Reset() { *x = Peer{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[77] + mi := &file_gobgp_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5920,7 +5694,7 @@ func (x *Peer) String() string { func (*Peer) ProtoMessage() {} func (x *Peer) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[77] + mi := &file_gobgp_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5933,7 +5707,7 @@ func (x *Peer) ProtoReflect() protoreflect.Message { // Deprecated: Use Peer.ProtoReflect.Descriptor instead. func (*Peer) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{77} + return file_gobgp_proto_rawDescGZIP(), []int{76} } func (x *Peer) GetApplyPolicy() *ApplyPolicy { @@ -6034,7 +5808,7 @@ type PeerGroup struct { func (x *PeerGroup) Reset() { *x = PeerGroup{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[78] + mi := &file_gobgp_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6047,7 +5821,7 @@ func (x *PeerGroup) String() string { func (*PeerGroup) ProtoMessage() {} func (x *PeerGroup) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[78] + mi := &file_gobgp_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6060,7 +5834,7 @@ func (x *PeerGroup) ProtoReflect() protoreflect.Message { // Deprecated: Use PeerGroup.ProtoReflect.Descriptor instead. func (*PeerGroup) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{78} + return file_gobgp_proto_rawDescGZIP(), []int{77} } func (x *PeerGroup) GetApplyPolicy() *ApplyPolicy { @@ -6152,7 +5926,7 @@ type DynamicNeighbor struct { func (x *DynamicNeighbor) Reset() { *x = DynamicNeighbor{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[79] + mi := &file_gobgp_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6165,7 +5939,7 @@ func (x *DynamicNeighbor) String() string { func (*DynamicNeighbor) ProtoMessage() {} func (x *DynamicNeighbor) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[79] + mi := &file_gobgp_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6178,7 +5952,7 @@ func (x *DynamicNeighbor) ProtoReflect() protoreflect.Message { // Deprecated: Use DynamicNeighbor.ProtoReflect.Descriptor instead. func (*DynamicNeighbor) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{79} + return file_gobgp_proto_rawDescGZIP(), []int{78} } func (x *DynamicNeighbor) GetPrefix() string { @@ -6208,7 +5982,7 @@ type ApplyPolicy struct { func (x *ApplyPolicy) Reset() { *x = ApplyPolicy{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[80] + mi := &file_gobgp_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6221,7 +5995,7 @@ func (x *ApplyPolicy) String() string { func (*ApplyPolicy) ProtoMessage() {} func (x *ApplyPolicy) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[80] + mi := &file_gobgp_proto_msgTypes[79] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6234,7 +6008,7 @@ func (x *ApplyPolicy) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplyPolicy.ProtoReflect.Descriptor instead. func (*ApplyPolicy) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{80} + return file_gobgp_proto_rawDescGZIP(), []int{79} } func (x *ApplyPolicy) GetInPolicy() *PolicyAssignment { @@ -6271,7 +6045,7 @@ type PrefixLimit struct { func (x *PrefixLimit) Reset() { *x = PrefixLimit{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[81] + mi := &file_gobgp_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6284,7 +6058,7 @@ func (x *PrefixLimit) String() string { func (*PrefixLimit) ProtoMessage() {} func (x *PrefixLimit) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[81] + mi := &file_gobgp_proto_msgTypes[80] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6297,7 +6071,7 @@ func (x *PrefixLimit) ProtoReflect() protoreflect.Message { // Deprecated: Use PrefixLimit.ProtoReflect.Descriptor instead. func (*PrefixLimit) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{81} + return file_gobgp_proto_rawDescGZIP(), []int{80} } func (x *PrefixLimit) GetFamily() *Family { @@ -6347,7 +6121,7 @@ type PeerConf struct { func (x *PeerConf) Reset() { *x = PeerConf{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[82] + mi := &file_gobgp_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6360,7 +6134,7 @@ func (x *PeerConf) String() string { func (*PeerConf) ProtoMessage() {} func (x *PeerConf) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[82] + mi := &file_gobgp_proto_msgTypes[81] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6373,7 +6147,7 @@ func (x *PeerConf) ProtoReflect() protoreflect.Message { // Deprecated: Use PeerConf.ProtoReflect.Descriptor instead. func (*PeerConf) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{82} + return file_gobgp_proto_rawDescGZIP(), []int{81} } func (x *PeerConf) GetAuthPassword() string { @@ -6508,7 +6282,7 @@ type PeerGroupConf struct { func (x *PeerGroupConf) Reset() { *x = PeerGroupConf{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[83] + mi := &file_gobgp_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6521,7 +6295,7 @@ func (x *PeerGroupConf) String() string { func (*PeerGroupConf) ProtoMessage() {} func (x *PeerGroupConf) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[83] + mi := &file_gobgp_proto_msgTypes[82] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6534,7 +6308,7 @@ func (x *PeerGroupConf) ProtoReflect() protoreflect.Message { // Deprecated: Use PeerGroupConf.ProtoReflect.Descriptor instead. func (*PeerGroupConf) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{83} + return file_gobgp_proto_rawDescGZIP(), []int{82} } func (x *PeerGroupConf) GetAuthPassword() string { @@ -6628,7 +6402,7 @@ type PeerGroupState struct { func (x *PeerGroupState) Reset() { *x = PeerGroupState{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[84] + mi := &file_gobgp_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6641,7 +6415,7 @@ func (x *PeerGroupState) String() string { func (*PeerGroupState) ProtoMessage() {} func (x *PeerGroupState) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[84] + mi := &file_gobgp_proto_msgTypes[83] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6654,7 +6428,7 @@ func (x *PeerGroupState) ProtoReflect() protoreflect.Message { // Deprecated: Use PeerGroupState.ProtoReflect.Descriptor instead. func (*PeerGroupState) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{84} + return file_gobgp_proto_rawDescGZIP(), []int{83} } func (x *PeerGroupState) GetAuthPassword() string { @@ -6746,7 +6520,7 @@ type TtlSecurity struct { func (x *TtlSecurity) Reset() { *x = TtlSecurity{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[85] + mi := &file_gobgp_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6759,7 +6533,7 @@ func (x *TtlSecurity) String() string { func (*TtlSecurity) ProtoMessage() {} func (x *TtlSecurity) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[85] + mi := &file_gobgp_proto_msgTypes[84] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6772,7 +6546,7 @@ func (x *TtlSecurity) ProtoReflect() protoreflect.Message { // Deprecated: Use TtlSecurity.ProtoReflect.Descriptor instead. func (*TtlSecurity) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{85} + return file_gobgp_proto_rawDescGZIP(), []int{84} } func (x *TtlSecurity) GetEnabled() bool { @@ -6801,7 +6575,7 @@ type EbgpMultihop struct { func (x *EbgpMultihop) Reset() { *x = EbgpMultihop{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[86] + mi := &file_gobgp_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6814,7 +6588,7 @@ func (x *EbgpMultihop) String() string { func (*EbgpMultihop) ProtoMessage() {} func (x *EbgpMultihop) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[86] + mi := &file_gobgp_proto_msgTypes[85] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6827,7 +6601,7 @@ func (x *EbgpMultihop) ProtoReflect() protoreflect.Message { // Deprecated: Use EbgpMultihop.ProtoReflect.Descriptor instead. func (*EbgpMultihop) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{86} + return file_gobgp_proto_rawDescGZIP(), []int{85} } func (x *EbgpMultihop) GetEnabled() bool { @@ -6856,7 +6630,7 @@ type RouteReflector struct { func (x *RouteReflector) Reset() { *x = RouteReflector{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[87] + mi := &file_gobgp_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6869,7 +6643,7 @@ func (x *RouteReflector) String() string { func (*RouteReflector) ProtoMessage() {} func (x *RouteReflector) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[87] + mi := &file_gobgp_proto_msgTypes[86] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6882,7 +6656,7 @@ func (x *RouteReflector) ProtoReflect() protoreflect.Message { // Deprecated: Use RouteReflector.ProtoReflect.Descriptor instead. func (*RouteReflector) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{87} + return file_gobgp_proto_rawDescGZIP(), []int{86} } func (x *RouteReflector) GetRouteReflectorClient() bool { @@ -6920,17 +6694,15 @@ type PeerState struct { AdminState PeerState_AdminState `protobuf:"varint,15,opt,name=admin_state,json=adminState,proto3,enum=apipb.PeerState_AdminState" json:"admin_state,omitempty"` OutQ uint32 `protobuf:"varint,16,opt,name=out_q,json=outQ,proto3" json:"out_q,omitempty"` Flops uint32 `protobuf:"varint,17,opt,name=flops,proto3" json:"flops,omitempty"` - // Each attribute must be one of *Capability defined in - // "api/capability.proto". - RemoteCap []*anypb.Any `protobuf:"bytes,18,rep,name=remote_cap,json=remoteCap,proto3" json:"remote_cap,omitempty"` - LocalCap []*anypb.Any `protobuf:"bytes,19,rep,name=local_cap,json=localCap,proto3" json:"local_cap,omitempty"` - RouterId string `protobuf:"bytes,20,opt,name=router_id,json=routerId,proto3" json:"router_id,omitempty"` + RemoteCap []*Capability `protobuf:"bytes,18,rep,name=remote_cap,json=remoteCap,proto3" json:"remote_cap,omitempty"` + LocalCap []*Capability `protobuf:"bytes,19,rep,name=local_cap,json=localCap,proto3" json:"local_cap,omitempty"` + RouterId string `protobuf:"bytes,20,opt,name=router_id,json=routerId,proto3" json:"router_id,omitempty"` } func (x *PeerState) Reset() { *x = PeerState{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[88] + mi := &file_gobgp_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6943,7 +6715,7 @@ func (x *PeerState) String() string { func (*PeerState) ProtoMessage() {} func (x *PeerState) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[88] + mi := &file_gobgp_proto_msgTypes[87] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6956,7 +6728,7 @@ func (x *PeerState) ProtoReflect() protoreflect.Message { // Deprecated: Use PeerState.ProtoReflect.Descriptor instead. func (*PeerState) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{88} + return file_gobgp_proto_rawDescGZIP(), []int{87} } func (x *PeerState) GetAuthPassword() string { @@ -7071,14 +6843,14 @@ func (x *PeerState) GetFlops() uint32 { return 0 } -func (x *PeerState) GetRemoteCap() []*anypb.Any { +func (x *PeerState) GetRemoteCap() []*Capability { if x != nil { return x.RemoteCap } return nil } -func (x *PeerState) GetLocalCap() []*anypb.Any { +func (x *PeerState) GetLocalCap() []*Capability { if x != nil { return x.LocalCap } @@ -7104,7 +6876,7 @@ type Messages struct { func (x *Messages) Reset() { *x = Messages{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[89] + mi := &file_gobgp_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7117,7 +6889,7 @@ func (x *Messages) String() string { func (*Messages) ProtoMessage() {} func (x *Messages) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[89] + mi := &file_gobgp_proto_msgTypes[88] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7130,7 +6902,7 @@ func (x *Messages) ProtoReflect() protoreflect.Message { // Deprecated: Use Messages.ProtoReflect.Descriptor instead. func (*Messages) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{89} + return file_gobgp_proto_rawDescGZIP(), []int{88} } func (x *Messages) GetReceived() *Message { @@ -7166,7 +6938,7 @@ type Message struct { func (x *Message) Reset() { *x = Message{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[90] + mi := &file_gobgp_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7179,7 +6951,7 @@ func (x *Message) String() string { func (*Message) ProtoMessage() {} func (x *Message) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[90] + mi := &file_gobgp_proto_msgTypes[89] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7192,7 +6964,7 @@ func (x *Message) ProtoReflect() protoreflect.Message { // Deprecated: Use Message.ProtoReflect.Descriptor instead. func (*Message) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{90} + return file_gobgp_proto_rawDescGZIP(), []int{89} } func (x *Message) GetNotification() uint64 { @@ -7270,7 +7042,7 @@ type Queues struct { func (x *Queues) Reset() { *x = Queues{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[91] + mi := &file_gobgp_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7283,7 +7055,7 @@ func (x *Queues) String() string { func (*Queues) ProtoMessage() {} func (x *Queues) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[91] + mi := &file_gobgp_proto_msgTypes[90] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7296,7 +7068,7 @@ func (x *Queues) ProtoReflect() protoreflect.Message { // Deprecated: Use Queues.ProtoReflect.Descriptor instead. func (*Queues) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{91} + return file_gobgp_proto_rawDescGZIP(), []int{90} } func (x *Queues) GetInput() uint32 { @@ -7325,7 +7097,7 @@ type Timers struct { func (x *Timers) Reset() { *x = Timers{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[92] + mi := &file_gobgp_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7338,7 +7110,7 @@ func (x *Timers) String() string { func (*Timers) ProtoMessage() {} func (x *Timers) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[92] + mi := &file_gobgp_proto_msgTypes[91] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7351,7 +7123,7 @@ func (x *Timers) ProtoReflect() protoreflect.Message { // Deprecated: Use Timers.ProtoReflect.Descriptor instead. func (*Timers) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{92} + return file_gobgp_proto_rawDescGZIP(), []int{91} } func (x *Timers) GetConfig() *TimersConfig { @@ -7383,7 +7155,7 @@ type TimersConfig struct { func (x *TimersConfig) Reset() { *x = TimersConfig{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[93] + mi := &file_gobgp_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7396,7 +7168,7 @@ func (x *TimersConfig) String() string { func (*TimersConfig) ProtoMessage() {} func (x *TimersConfig) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[93] + mi := &file_gobgp_proto_msgTypes[92] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7409,7 +7181,7 @@ func (x *TimersConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use TimersConfig.ProtoReflect.Descriptor instead. func (*TimersConfig) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{93} + return file_gobgp_proto_rawDescGZIP(), []int{92} } func (x *TimersConfig) GetConnectRetry() uint64 { @@ -7464,7 +7236,7 @@ type TimersState struct { func (x *TimersState) Reset() { *x = TimersState{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[94] + mi := &file_gobgp_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7477,7 +7249,7 @@ func (x *TimersState) String() string { func (*TimersState) ProtoMessage() {} func (x *TimersState) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[94] + mi := &file_gobgp_proto_msgTypes[93] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7490,7 +7262,7 @@ func (x *TimersState) ProtoReflect() protoreflect.Message { // Deprecated: Use TimersState.ProtoReflect.Descriptor instead. func (*TimersState) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{94} + return file_gobgp_proto_rawDescGZIP(), []int{93} } func (x *TimersState) GetConnectRetry() uint64 { @@ -7560,7 +7332,7 @@ type Transport struct { func (x *Transport) Reset() { *x = Transport{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[95] + mi := &file_gobgp_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7573,7 +7345,7 @@ func (x *Transport) String() string { func (*Transport) ProtoMessage() {} func (x *Transport) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[95] + mi := &file_gobgp_proto_msgTypes[94] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7586,7 +7358,7 @@ func (x *Transport) ProtoReflect() protoreflect.Message { // Deprecated: Use Transport.ProtoReflect.Descriptor instead. func (*Transport) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{95} + return file_gobgp_proto_rawDescGZIP(), []int{94} } func (x *Transport) GetLocalAddress() string { @@ -7657,7 +7429,7 @@ type RouteServer struct { func (x *RouteServer) Reset() { *x = RouteServer{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[96] + mi := &file_gobgp_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7670,7 +7442,7 @@ func (x *RouteServer) String() string { func (*RouteServer) ProtoMessage() {} func (x *RouteServer) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[96] + mi := &file_gobgp_proto_msgTypes[95] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7683,7 +7455,7 @@ func (x *RouteServer) ProtoReflect() protoreflect.Message { // Deprecated: Use RouteServer.ProtoReflect.Descriptor instead. func (*RouteServer) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{96} + return file_gobgp_proto_rawDescGZIP(), []int{95} } func (x *RouteServer) GetRouteServerClient() bool { @@ -7721,7 +7493,7 @@ type GracefulRestart struct { func (x *GracefulRestart) Reset() { *x = GracefulRestart{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[97] + mi := &file_gobgp_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7734,7 +7506,7 @@ func (x *GracefulRestart) String() string { func (*GracefulRestart) ProtoMessage() {} func (x *GracefulRestart) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[97] + mi := &file_gobgp_proto_msgTypes[96] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7747,7 +7519,7 @@ func (x *GracefulRestart) ProtoReflect() protoreflect.Message { // Deprecated: Use GracefulRestart.ProtoReflect.Descriptor instead. func (*GracefulRestart) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{97} + return file_gobgp_proto_rawDescGZIP(), []int{96} } func (x *GracefulRestart) GetEnabled() bool { @@ -7838,7 +7610,7 @@ type MpGracefulRestartConfig struct { func (x *MpGracefulRestartConfig) Reset() { *x = MpGracefulRestartConfig{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[98] + mi := &file_gobgp_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7851,7 +7623,7 @@ func (x *MpGracefulRestartConfig) String() string { func (*MpGracefulRestartConfig) ProtoMessage() {} func (x *MpGracefulRestartConfig) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[98] + mi := &file_gobgp_proto_msgTypes[97] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7864,7 +7636,7 @@ func (x *MpGracefulRestartConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use MpGracefulRestartConfig.ProtoReflect.Descriptor instead. func (*MpGracefulRestartConfig) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{98} + return file_gobgp_proto_rawDescGZIP(), []int{97} } func (x *MpGracefulRestartConfig) GetEnabled() bool { @@ -7889,7 +7661,7 @@ type MpGracefulRestartState struct { func (x *MpGracefulRestartState) Reset() { *x = MpGracefulRestartState{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[99] + mi := &file_gobgp_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7902,7 +7674,7 @@ func (x *MpGracefulRestartState) String() string { func (*MpGracefulRestartState) ProtoMessage() {} func (x *MpGracefulRestartState) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[99] + mi := &file_gobgp_proto_msgTypes[98] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7915,7 +7687,7 @@ func (x *MpGracefulRestartState) ProtoReflect() protoreflect.Message { // Deprecated: Use MpGracefulRestartState.ProtoReflect.Descriptor instead. func (*MpGracefulRestartState) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{99} + return file_gobgp_proto_rawDescGZIP(), []int{98} } func (x *MpGracefulRestartState) GetEnabled() bool { @@ -7965,7 +7737,7 @@ type MpGracefulRestart struct { func (x *MpGracefulRestart) Reset() { *x = MpGracefulRestart{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[100] + mi := &file_gobgp_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7978,7 +7750,7 @@ func (x *MpGracefulRestart) String() string { func (*MpGracefulRestart) ProtoMessage() {} func (x *MpGracefulRestart) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[100] + mi := &file_gobgp_proto_msgTypes[99] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7991,7 +7763,7 @@ func (x *MpGracefulRestart) ProtoReflect() protoreflect.Message { // Deprecated: Use MpGracefulRestart.ProtoReflect.Descriptor instead. func (*MpGracefulRestart) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{100} + return file_gobgp_proto_rawDescGZIP(), []int{99} } func (x *MpGracefulRestart) GetConfig() *MpGracefulRestartConfig { @@ -8020,7 +7792,7 @@ type AfiSafiConfig struct { func (x *AfiSafiConfig) Reset() { *x = AfiSafiConfig{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[101] + mi := &file_gobgp_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8033,7 +7805,7 @@ func (x *AfiSafiConfig) String() string { func (*AfiSafiConfig) ProtoMessage() {} func (x *AfiSafiConfig) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[101] + mi := &file_gobgp_proto_msgTypes[100] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8046,7 +7818,7 @@ func (x *AfiSafiConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use AfiSafiConfig.ProtoReflect.Descriptor instead. func (*AfiSafiConfig) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{101} + return file_gobgp_proto_rawDescGZIP(), []int{100} } func (x *AfiSafiConfig) GetFamily() *Family { @@ -8078,7 +7850,7 @@ type AfiSafiState struct { func (x *AfiSafiState) Reset() { *x = AfiSafiState{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[102] + mi := &file_gobgp_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8091,7 +7863,7 @@ func (x *AfiSafiState) String() string { func (*AfiSafiState) ProtoMessage() {} func (x *AfiSafiState) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[102] + mi := &file_gobgp_proto_msgTypes[101] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8104,7 +7876,7 @@ func (x *AfiSafiState) ProtoReflect() protoreflect.Message { // Deprecated: Use AfiSafiState.ProtoReflect.Descriptor instead. func (*AfiSafiState) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{102} + return file_gobgp_proto_rawDescGZIP(), []int{101} } func (x *AfiSafiState) GetFamily() *Family { @@ -8159,7 +7931,7 @@ type RouteSelectionOptionsConfig struct { func (x *RouteSelectionOptionsConfig) Reset() { *x = RouteSelectionOptionsConfig{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[103] + mi := &file_gobgp_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8172,7 +7944,7 @@ func (x *RouteSelectionOptionsConfig) String() string { func (*RouteSelectionOptionsConfig) ProtoMessage() {} func (x *RouteSelectionOptionsConfig) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[103] + mi := &file_gobgp_proto_msgTypes[102] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8185,7 +7957,7 @@ func (x *RouteSelectionOptionsConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use RouteSelectionOptionsConfig.ProtoReflect.Descriptor instead. func (*RouteSelectionOptionsConfig) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{103} + return file_gobgp_proto_rawDescGZIP(), []int{102} } func (x *RouteSelectionOptionsConfig) GetAlwaysCompareMed() bool { @@ -8254,7 +8026,7 @@ type RouteSelectionOptionsState struct { func (x *RouteSelectionOptionsState) Reset() { *x = RouteSelectionOptionsState{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[104] + mi := &file_gobgp_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8267,7 +8039,7 @@ func (x *RouteSelectionOptionsState) String() string { func (*RouteSelectionOptionsState) ProtoMessage() {} func (x *RouteSelectionOptionsState) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[104] + mi := &file_gobgp_proto_msgTypes[103] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8280,7 +8052,7 @@ func (x *RouteSelectionOptionsState) ProtoReflect() protoreflect.Message { // Deprecated: Use RouteSelectionOptionsState.ProtoReflect.Descriptor instead. func (*RouteSelectionOptionsState) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{104} + return file_gobgp_proto_rawDescGZIP(), []int{103} } func (x *RouteSelectionOptionsState) GetAlwaysCompareMed() bool { @@ -8344,7 +8116,7 @@ type RouteSelectionOptions struct { func (x *RouteSelectionOptions) Reset() { *x = RouteSelectionOptions{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[105] + mi := &file_gobgp_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8357,7 +8129,7 @@ func (x *RouteSelectionOptions) String() string { func (*RouteSelectionOptions) ProtoMessage() {} func (x *RouteSelectionOptions) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[105] + mi := &file_gobgp_proto_msgTypes[104] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8370,7 +8142,7 @@ func (x *RouteSelectionOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use RouteSelectionOptions.ProtoReflect.Descriptor instead. func (*RouteSelectionOptions) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{105} + return file_gobgp_proto_rawDescGZIP(), []int{104} } func (x *RouteSelectionOptions) GetConfig() *RouteSelectionOptionsConfig { @@ -8398,7 +8170,7 @@ type UseMultiplePathsConfig struct { func (x *UseMultiplePathsConfig) Reset() { *x = UseMultiplePathsConfig{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[106] + mi := &file_gobgp_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8411,7 +8183,7 @@ func (x *UseMultiplePathsConfig) String() string { func (*UseMultiplePathsConfig) ProtoMessage() {} func (x *UseMultiplePathsConfig) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[106] + mi := &file_gobgp_proto_msgTypes[105] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8424,7 +8196,7 @@ func (x *UseMultiplePathsConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use UseMultiplePathsConfig.ProtoReflect.Descriptor instead. func (*UseMultiplePathsConfig) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{106} + return file_gobgp_proto_rawDescGZIP(), []int{105} } func (x *UseMultiplePathsConfig) GetEnabled() bool { @@ -8445,7 +8217,7 @@ type UseMultiplePathsState struct { func (x *UseMultiplePathsState) Reset() { *x = UseMultiplePathsState{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[107] + mi := &file_gobgp_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8458,7 +8230,7 @@ func (x *UseMultiplePathsState) String() string { func (*UseMultiplePathsState) ProtoMessage() {} func (x *UseMultiplePathsState) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[107] + mi := &file_gobgp_proto_msgTypes[106] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8471,7 +8243,7 @@ func (x *UseMultiplePathsState) ProtoReflect() protoreflect.Message { // Deprecated: Use UseMultiplePathsState.ProtoReflect.Descriptor instead. func (*UseMultiplePathsState) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{107} + return file_gobgp_proto_rawDescGZIP(), []int{106} } func (x *UseMultiplePathsState) GetEnabled() bool { @@ -8493,7 +8265,7 @@ type EbgpConfig struct { func (x *EbgpConfig) Reset() { *x = EbgpConfig{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[108] + mi := &file_gobgp_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8506,7 +8278,7 @@ func (x *EbgpConfig) String() string { func (*EbgpConfig) ProtoMessage() {} func (x *EbgpConfig) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[108] + mi := &file_gobgp_proto_msgTypes[107] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8519,7 +8291,7 @@ func (x *EbgpConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use EbgpConfig.ProtoReflect.Descriptor instead. func (*EbgpConfig) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{108} + return file_gobgp_proto_rawDescGZIP(), []int{107} } func (x *EbgpConfig) GetAllowMultipleAsn() bool { @@ -8548,7 +8320,7 @@ type EbgpState struct { func (x *EbgpState) Reset() { *x = EbgpState{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[109] + mi := &file_gobgp_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8561,7 +8333,7 @@ func (x *EbgpState) String() string { func (*EbgpState) ProtoMessage() {} func (x *EbgpState) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[109] + mi := &file_gobgp_proto_msgTypes[108] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8574,7 +8346,7 @@ func (x *EbgpState) ProtoReflect() protoreflect.Message { // Deprecated: Use EbgpState.ProtoReflect.Descriptor instead. func (*EbgpState) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{109} + return file_gobgp_proto_rawDescGZIP(), []int{108} } func (x *EbgpState) GetAllowMultipleAsn() bool { @@ -8603,7 +8375,7 @@ type Ebgp struct { func (x *Ebgp) Reset() { *x = Ebgp{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[110] + mi := &file_gobgp_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8616,7 +8388,7 @@ func (x *Ebgp) String() string { func (*Ebgp) ProtoMessage() {} func (x *Ebgp) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[110] + mi := &file_gobgp_proto_msgTypes[109] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8629,7 +8401,7 @@ func (x *Ebgp) ProtoReflect() protoreflect.Message { // Deprecated: Use Ebgp.ProtoReflect.Descriptor instead. func (*Ebgp) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{110} + return file_gobgp_proto_rawDescGZIP(), []int{109} } func (x *Ebgp) GetConfig() *EbgpConfig { @@ -8657,7 +8429,7 @@ type IbgpConfig struct { func (x *IbgpConfig) Reset() { *x = IbgpConfig{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[111] + mi := &file_gobgp_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8670,7 +8442,7 @@ func (x *IbgpConfig) String() string { func (*IbgpConfig) ProtoMessage() {} func (x *IbgpConfig) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[111] + mi := &file_gobgp_proto_msgTypes[110] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8683,7 +8455,7 @@ func (x *IbgpConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use IbgpConfig.ProtoReflect.Descriptor instead. func (*IbgpConfig) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{111} + return file_gobgp_proto_rawDescGZIP(), []int{110} } func (x *IbgpConfig) GetMaximumPaths() uint32 { @@ -8704,7 +8476,7 @@ type IbgpState struct { func (x *IbgpState) Reset() { *x = IbgpState{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[112] + mi := &file_gobgp_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8717,7 +8489,7 @@ func (x *IbgpState) String() string { func (*IbgpState) ProtoMessage() {} func (x *IbgpState) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[112] + mi := &file_gobgp_proto_msgTypes[111] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8730,7 +8502,7 @@ func (x *IbgpState) ProtoReflect() protoreflect.Message { // Deprecated: Use IbgpState.ProtoReflect.Descriptor instead. func (*IbgpState) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{112} + return file_gobgp_proto_rawDescGZIP(), []int{111} } func (x *IbgpState) GetMaximumPaths() uint32 { @@ -8752,7 +8524,7 @@ type Ibgp struct { func (x *Ibgp) Reset() { *x = Ibgp{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[113] + mi := &file_gobgp_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8765,7 +8537,7 @@ func (x *Ibgp) String() string { func (*Ibgp) ProtoMessage() {} func (x *Ibgp) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[113] + mi := &file_gobgp_proto_msgTypes[112] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8778,7 +8550,7 @@ func (x *Ibgp) ProtoReflect() protoreflect.Message { // Deprecated: Use Ibgp.ProtoReflect.Descriptor instead. func (*Ibgp) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{113} + return file_gobgp_proto_rawDescGZIP(), []int{112} } func (x *Ibgp) GetConfig() *IbgpConfig { @@ -8809,7 +8581,7 @@ type UseMultiplePaths struct { func (x *UseMultiplePaths) Reset() { *x = UseMultiplePaths{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[114] + mi := &file_gobgp_proto_msgTypes[113] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8822,7 +8594,7 @@ func (x *UseMultiplePaths) String() string { func (*UseMultiplePaths) ProtoMessage() {} func (x *UseMultiplePaths) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[114] + mi := &file_gobgp_proto_msgTypes[113] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8835,7 +8607,7 @@ func (x *UseMultiplePaths) ProtoReflect() protoreflect.Message { // Deprecated: Use UseMultiplePaths.ProtoReflect.Descriptor instead. func (*UseMultiplePaths) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{114} + return file_gobgp_proto_rawDescGZIP(), []int{113} } func (x *UseMultiplePaths) GetConfig() *UseMultiplePathsConfig { @@ -8877,7 +8649,7 @@ type RouteTargetMembershipConfig struct { func (x *RouteTargetMembershipConfig) Reset() { *x = RouteTargetMembershipConfig{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[115] + mi := &file_gobgp_proto_msgTypes[114] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8890,7 +8662,7 @@ func (x *RouteTargetMembershipConfig) String() string { func (*RouteTargetMembershipConfig) ProtoMessage() {} func (x *RouteTargetMembershipConfig) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[115] + mi := &file_gobgp_proto_msgTypes[114] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8903,7 +8675,7 @@ func (x *RouteTargetMembershipConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use RouteTargetMembershipConfig.ProtoReflect.Descriptor instead. func (*RouteTargetMembershipConfig) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{115} + return file_gobgp_proto_rawDescGZIP(), []int{114} } func (x *RouteTargetMembershipConfig) GetDeferralTime() uint32 { @@ -8924,7 +8696,7 @@ type RouteTargetMembershipState struct { func (x *RouteTargetMembershipState) Reset() { *x = RouteTargetMembershipState{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[116] + mi := &file_gobgp_proto_msgTypes[115] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8937,7 +8709,7 @@ func (x *RouteTargetMembershipState) String() string { func (*RouteTargetMembershipState) ProtoMessage() {} func (x *RouteTargetMembershipState) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[116] + mi := &file_gobgp_proto_msgTypes[115] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8950,7 +8722,7 @@ func (x *RouteTargetMembershipState) ProtoReflect() protoreflect.Message { // Deprecated: Use RouteTargetMembershipState.ProtoReflect.Descriptor instead. func (*RouteTargetMembershipState) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{116} + return file_gobgp_proto_rawDescGZIP(), []int{115} } func (x *RouteTargetMembershipState) GetDeferralTime() uint32 { @@ -8972,7 +8744,7 @@ type RouteTargetMembership struct { func (x *RouteTargetMembership) Reset() { *x = RouteTargetMembership{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[117] + mi := &file_gobgp_proto_msgTypes[116] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8985,7 +8757,7 @@ func (x *RouteTargetMembership) String() string { func (*RouteTargetMembership) ProtoMessage() {} func (x *RouteTargetMembership) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[117] + mi := &file_gobgp_proto_msgTypes[116] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8998,7 +8770,7 @@ func (x *RouteTargetMembership) ProtoReflect() protoreflect.Message { // Deprecated: Use RouteTargetMembership.ProtoReflect.Descriptor instead. func (*RouteTargetMembership) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{117} + return file_gobgp_proto_rawDescGZIP(), []int{116} } func (x *RouteTargetMembership) GetConfig() *RouteTargetMembershipConfig { @@ -9027,7 +8799,7 @@ type LongLivedGracefulRestartConfig struct { func (x *LongLivedGracefulRestartConfig) Reset() { *x = LongLivedGracefulRestartConfig{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[118] + mi := &file_gobgp_proto_msgTypes[117] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9040,7 +8812,7 @@ func (x *LongLivedGracefulRestartConfig) String() string { func (*LongLivedGracefulRestartConfig) ProtoMessage() {} func (x *LongLivedGracefulRestartConfig) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[118] + mi := &file_gobgp_proto_msgTypes[117] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9053,7 +8825,7 @@ func (x *LongLivedGracefulRestartConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use LongLivedGracefulRestartConfig.ProtoReflect.Descriptor instead. func (*LongLivedGracefulRestartConfig) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{118} + return file_gobgp_proto_rawDescGZIP(), []int{117} } func (x *LongLivedGracefulRestartConfig) GetEnabled() bool { @@ -9085,7 +8857,7 @@ type LongLivedGracefulRestartState struct { func (x *LongLivedGracefulRestartState) Reset() { *x = LongLivedGracefulRestartState{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[119] + mi := &file_gobgp_proto_msgTypes[118] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9098,7 +8870,7 @@ func (x *LongLivedGracefulRestartState) String() string { func (*LongLivedGracefulRestartState) ProtoMessage() {} func (x *LongLivedGracefulRestartState) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[119] + mi := &file_gobgp_proto_msgTypes[118] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9111,7 +8883,7 @@ func (x *LongLivedGracefulRestartState) ProtoReflect() protoreflect.Message { // Deprecated: Use LongLivedGracefulRestartState.ProtoReflect.Descriptor instead. func (*LongLivedGracefulRestartState) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{119} + return file_gobgp_proto_rawDescGZIP(), []int{118} } func (x *LongLivedGracefulRestartState) GetEnabled() bool { @@ -9161,7 +8933,7 @@ type LongLivedGracefulRestart struct { func (x *LongLivedGracefulRestart) Reset() { *x = LongLivedGracefulRestart{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[120] + mi := &file_gobgp_proto_msgTypes[119] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9174,7 +8946,7 @@ func (x *LongLivedGracefulRestart) String() string { func (*LongLivedGracefulRestart) ProtoMessage() {} func (x *LongLivedGracefulRestart) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[120] + mi := &file_gobgp_proto_msgTypes[119] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9187,7 +8959,7 @@ func (x *LongLivedGracefulRestart) ProtoReflect() protoreflect.Message { // Deprecated: Use LongLivedGracefulRestart.ProtoReflect.Descriptor instead. func (*LongLivedGracefulRestart) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{120} + return file_gobgp_proto_rawDescGZIP(), []int{119} } func (x *LongLivedGracefulRestart) GetConfig() *LongLivedGracefulRestartConfig { @@ -9236,7 +9008,7 @@ type AfiSafi struct { func (x *AfiSafi) Reset() { *x = AfiSafi{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[121] + mi := &file_gobgp_proto_msgTypes[120] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9249,7 +9021,7 @@ func (x *AfiSafi) String() string { func (*AfiSafi) ProtoMessage() {} func (x *AfiSafi) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[121] + mi := &file_gobgp_proto_msgTypes[120] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9262,7 +9034,7 @@ func (x *AfiSafi) ProtoReflect() protoreflect.Message { // Deprecated: Use AfiSafi.ProtoReflect.Descriptor instead. func (*AfiSafi) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{121} + return file_gobgp_proto_rawDescGZIP(), []int{120} } func (x *AfiSafi) GetMpGracefulRestart() *MpGracefulRestart { @@ -9347,7 +9119,7 @@ type AddPathsConfig struct { func (x *AddPathsConfig) Reset() { *x = AddPathsConfig{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[122] + mi := &file_gobgp_proto_msgTypes[121] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9360,7 +9132,7 @@ func (x *AddPathsConfig) String() string { func (*AddPathsConfig) ProtoMessage() {} func (x *AddPathsConfig) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[122] + mi := &file_gobgp_proto_msgTypes[121] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9373,7 +9145,7 @@ func (x *AddPathsConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use AddPathsConfig.ProtoReflect.Descriptor instead. func (*AddPathsConfig) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{122} + return file_gobgp_proto_rawDescGZIP(), []int{121} } func (x *AddPathsConfig) GetReceive() bool { @@ -9402,7 +9174,7 @@ type AddPathsState struct { func (x *AddPathsState) Reset() { *x = AddPathsState{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[123] + mi := &file_gobgp_proto_msgTypes[122] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9415,7 +9187,7 @@ func (x *AddPathsState) String() string { func (*AddPathsState) ProtoMessage() {} func (x *AddPathsState) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[123] + mi := &file_gobgp_proto_msgTypes[122] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9428,7 +9200,7 @@ func (x *AddPathsState) ProtoReflect() protoreflect.Message { // Deprecated: Use AddPathsState.ProtoReflect.Descriptor instead. func (*AddPathsState) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{123} + return file_gobgp_proto_rawDescGZIP(), []int{122} } func (x *AddPathsState) GetReceive() bool { @@ -9457,7 +9229,7 @@ type AddPaths struct { func (x *AddPaths) Reset() { *x = AddPaths{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[124] + mi := &file_gobgp_proto_msgTypes[123] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9470,7 +9242,7 @@ func (x *AddPaths) String() string { func (*AddPaths) ProtoMessage() {} func (x *AddPaths) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[124] + mi := &file_gobgp_proto_msgTypes[123] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9483,7 +9255,7 @@ func (x *AddPaths) ProtoReflect() protoreflect.Message { // Deprecated: Use AddPaths.ProtoReflect.Descriptor instead. func (*AddPaths) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{124} + return file_gobgp_proto_rawDescGZIP(), []int{123} } func (x *AddPaths) GetConfig() *AddPathsConfig { @@ -9513,7 +9285,7 @@ type Prefix struct { func (x *Prefix) Reset() { *x = Prefix{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[125] + mi := &file_gobgp_proto_msgTypes[124] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9526,7 +9298,7 @@ func (x *Prefix) String() string { func (*Prefix) ProtoMessage() {} func (x *Prefix) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[125] + mi := &file_gobgp_proto_msgTypes[124] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9539,7 +9311,7 @@ func (x *Prefix) ProtoReflect() protoreflect.Message { // Deprecated: Use Prefix.ProtoReflect.Descriptor instead. func (*Prefix) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{125} + return file_gobgp_proto_rawDescGZIP(), []int{124} } func (x *Prefix) GetIpPrefix() string { @@ -9577,7 +9349,7 @@ type DefinedSet struct { func (x *DefinedSet) Reset() { *x = DefinedSet{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[126] + mi := &file_gobgp_proto_msgTypes[125] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9590,7 +9362,7 @@ func (x *DefinedSet) String() string { func (*DefinedSet) ProtoMessage() {} func (x *DefinedSet) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[126] + mi := &file_gobgp_proto_msgTypes[125] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9603,7 +9375,7 @@ func (x *DefinedSet) ProtoReflect() protoreflect.Message { // Deprecated: Use DefinedSet.ProtoReflect.Descriptor instead. func (*DefinedSet) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{126} + return file_gobgp_proto_rawDescGZIP(), []int{125} } func (x *DefinedSet) GetDefinedType() DefinedType { @@ -9646,7 +9418,7 @@ type MatchSet struct { func (x *MatchSet) Reset() { *x = MatchSet{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[127] + mi := &file_gobgp_proto_msgTypes[126] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9659,7 +9431,7 @@ func (x *MatchSet) String() string { func (*MatchSet) ProtoMessage() {} func (x *MatchSet) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[127] + mi := &file_gobgp_proto_msgTypes[126] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9672,7 +9444,7 @@ func (x *MatchSet) ProtoReflect() protoreflect.Message { // Deprecated: Use MatchSet.ProtoReflect.Descriptor instead. func (*MatchSet) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{127} + return file_gobgp_proto_rawDescGZIP(), []int{126} } func (x *MatchSet) GetType() MatchSet_Type { @@ -9701,7 +9473,7 @@ type AsPathLength struct { func (x *AsPathLength) Reset() { *x = AsPathLength{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[128] + mi := &file_gobgp_proto_msgTypes[127] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9714,7 +9486,7 @@ func (x *AsPathLength) String() string { func (*AsPathLength) ProtoMessage() {} func (x *AsPathLength) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[128] + mi := &file_gobgp_proto_msgTypes[127] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9727,7 +9499,7 @@ func (x *AsPathLength) ProtoReflect() protoreflect.Message { // Deprecated: Use AsPathLength.ProtoReflect.Descriptor instead. func (*AsPathLength) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{128} + return file_gobgp_proto_rawDescGZIP(), []int{127} } func (x *AsPathLength) GetType() AsPathLength_Type { @@ -9756,7 +9528,7 @@ type CommunityCount struct { func (x *CommunityCount) Reset() { *x = CommunityCount{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[129] + mi := &file_gobgp_proto_msgTypes[128] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9769,7 +9541,7 @@ func (x *CommunityCount) String() string { func (*CommunityCount) ProtoMessage() {} func (x *CommunityCount) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[129] + mi := &file_gobgp_proto_msgTypes[128] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9782,7 +9554,7 @@ func (x *CommunityCount) ProtoReflect() protoreflect.Message { // Deprecated: Use CommunityCount.ProtoReflect.Descriptor instead. func (*CommunityCount) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{129} + return file_gobgp_proto_rawDescGZIP(), []int{128} } func (x *CommunityCount) GetType() CommunityCount_Type { @@ -9822,7 +9594,7 @@ type Conditions struct { func (x *Conditions) Reset() { *x = Conditions{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[130] + mi := &file_gobgp_proto_msgTypes[129] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9835,7 +9607,7 @@ func (x *Conditions) String() string { func (*Conditions) ProtoMessage() {} func (x *Conditions) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[130] + mi := &file_gobgp_proto_msgTypes[129] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9848,7 +9620,7 @@ func (x *Conditions) ProtoReflect() protoreflect.Message { // Deprecated: Use Conditions.ProtoReflect.Descriptor instead. func (*Conditions) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{130} + return file_gobgp_proto_rawDescGZIP(), []int{129} } func (x *Conditions) GetPrefixSet() *MatchSet { @@ -9954,7 +9726,7 @@ type CommunityAction struct { func (x *CommunityAction) Reset() { *x = CommunityAction{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[131] + mi := &file_gobgp_proto_msgTypes[130] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9967,7 +9739,7 @@ func (x *CommunityAction) String() string { func (*CommunityAction) ProtoMessage() {} func (x *CommunityAction) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[131] + mi := &file_gobgp_proto_msgTypes[130] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9980,7 +9752,7 @@ func (x *CommunityAction) ProtoReflect() protoreflect.Message { // Deprecated: Use CommunityAction.ProtoReflect.Descriptor instead. func (*CommunityAction) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{131} + return file_gobgp_proto_rawDescGZIP(), []int{130} } func (x *CommunityAction) GetType() CommunityAction_Type { @@ -10009,7 +9781,7 @@ type MedAction struct { func (x *MedAction) Reset() { *x = MedAction{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[132] + mi := &file_gobgp_proto_msgTypes[131] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10022,7 +9794,7 @@ func (x *MedAction) String() string { func (*MedAction) ProtoMessage() {} func (x *MedAction) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[132] + mi := &file_gobgp_proto_msgTypes[131] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10035,7 +9807,7 @@ func (x *MedAction) ProtoReflect() protoreflect.Message { // Deprecated: Use MedAction.ProtoReflect.Descriptor instead. func (*MedAction) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{132} + return file_gobgp_proto_rawDescGZIP(), []int{131} } func (x *MedAction) GetType() MedAction_Type { @@ -10065,7 +9837,7 @@ type AsPrependAction struct { func (x *AsPrependAction) Reset() { *x = AsPrependAction{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[133] + mi := &file_gobgp_proto_msgTypes[132] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10078,7 +9850,7 @@ func (x *AsPrependAction) String() string { func (*AsPrependAction) ProtoMessage() {} func (x *AsPrependAction) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[133] + mi := &file_gobgp_proto_msgTypes[132] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10091,7 +9863,7 @@ func (x *AsPrependAction) ProtoReflect() protoreflect.Message { // Deprecated: Use AsPrependAction.ProtoReflect.Descriptor instead. func (*AsPrependAction) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{133} + return file_gobgp_proto_rawDescGZIP(), []int{132} } func (x *AsPrependAction) GetAsn() uint32 { @@ -10129,7 +9901,7 @@ type NexthopAction struct { func (x *NexthopAction) Reset() { *x = NexthopAction{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[134] + mi := &file_gobgp_proto_msgTypes[133] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10142,7 +9914,7 @@ func (x *NexthopAction) String() string { func (*NexthopAction) ProtoMessage() {} func (x *NexthopAction) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[134] + mi := &file_gobgp_proto_msgTypes[133] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10155,7 +9927,7 @@ func (x *NexthopAction) ProtoReflect() protoreflect.Message { // Deprecated: Use NexthopAction.ProtoReflect.Descriptor instead. func (*NexthopAction) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{134} + return file_gobgp_proto_rawDescGZIP(), []int{133} } func (x *NexthopAction) GetAddress() string { @@ -10197,7 +9969,7 @@ type LocalPrefAction struct { func (x *LocalPrefAction) Reset() { *x = LocalPrefAction{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[135] + mi := &file_gobgp_proto_msgTypes[134] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10210,7 +9982,7 @@ func (x *LocalPrefAction) String() string { func (*LocalPrefAction) ProtoMessage() {} func (x *LocalPrefAction) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[135] + mi := &file_gobgp_proto_msgTypes[134] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10223,7 +9995,7 @@ func (x *LocalPrefAction) ProtoReflect() protoreflect.Message { // Deprecated: Use LocalPrefAction.ProtoReflect.Descriptor instead. func (*LocalPrefAction) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{135} + return file_gobgp_proto_rawDescGZIP(), []int{134} } func (x *LocalPrefAction) GetValue() uint32 { @@ -10244,7 +10016,7 @@ type OriginAction struct { func (x *OriginAction) Reset() { *x = OriginAction{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[136] + mi := &file_gobgp_proto_msgTypes[135] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10257,7 +10029,7 @@ func (x *OriginAction) String() string { func (*OriginAction) ProtoMessage() {} func (x *OriginAction) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[136] + mi := &file_gobgp_proto_msgTypes[135] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10270,7 +10042,7 @@ func (x *OriginAction) ProtoReflect() protoreflect.Message { // Deprecated: Use OriginAction.ProtoReflect.Descriptor instead. func (*OriginAction) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{136} + return file_gobgp_proto_rawDescGZIP(), []int{135} } func (x *OriginAction) GetOrigin() RouteOriginType { @@ -10299,7 +10071,7 @@ type Actions struct { func (x *Actions) Reset() { *x = Actions{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[137] + mi := &file_gobgp_proto_msgTypes[136] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10312,7 +10084,7 @@ func (x *Actions) String() string { func (*Actions) ProtoMessage() {} func (x *Actions) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[137] + mi := &file_gobgp_proto_msgTypes[136] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10325,7 +10097,7 @@ func (x *Actions) ProtoReflect() protoreflect.Message { // Deprecated: Use Actions.ProtoReflect.Descriptor instead. func (*Actions) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{137} + return file_gobgp_proto_rawDescGZIP(), []int{136} } func (x *Actions) GetRouteAction() RouteAction { @@ -10404,7 +10176,7 @@ type Statement struct { func (x *Statement) Reset() { *x = Statement{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[138] + mi := &file_gobgp_proto_msgTypes[137] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10417,7 +10189,7 @@ func (x *Statement) String() string { func (*Statement) ProtoMessage() {} func (x *Statement) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[138] + mi := &file_gobgp_proto_msgTypes[137] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10430,7 +10202,7 @@ func (x *Statement) ProtoReflect() protoreflect.Message { // Deprecated: Use Statement.ProtoReflect.Descriptor instead. func (*Statement) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{138} + return file_gobgp_proto_rawDescGZIP(), []int{137} } func (x *Statement) GetName() string { @@ -10466,7 +10238,7 @@ type Policy struct { func (x *Policy) Reset() { *x = Policy{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[139] + mi := &file_gobgp_proto_msgTypes[138] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10479,7 +10251,7 @@ func (x *Policy) String() string { func (*Policy) ProtoMessage() {} func (x *Policy) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[139] + mi := &file_gobgp_proto_msgTypes[138] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10492,7 +10264,7 @@ func (x *Policy) ProtoReflect() protoreflect.Message { // Deprecated: Use Policy.ProtoReflect.Descriptor instead. func (*Policy) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{139} + return file_gobgp_proto_rawDescGZIP(), []int{138} } func (x *Policy) GetName() string { @@ -10523,7 +10295,7 @@ type PolicyAssignment struct { func (x *PolicyAssignment) Reset() { *x = PolicyAssignment{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[140] + mi := &file_gobgp_proto_msgTypes[139] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10536,7 +10308,7 @@ func (x *PolicyAssignment) String() string { func (*PolicyAssignment) ProtoMessage() {} func (x *PolicyAssignment) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[140] + mi := &file_gobgp_proto_msgTypes[139] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10549,7 +10321,7 @@ func (x *PolicyAssignment) ProtoReflect() protoreflect.Message { // Deprecated: Use PolicyAssignment.ProtoReflect.Descriptor instead. func (*PolicyAssignment) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{140} + return file_gobgp_proto_rawDescGZIP(), []int{139} } func (x *PolicyAssignment) GetName() string { @@ -10592,7 +10364,7 @@ type RoutingPolicy struct { func (x *RoutingPolicy) Reset() { *x = RoutingPolicy{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[141] + mi := &file_gobgp_proto_msgTypes[140] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10605,7 +10377,7 @@ func (x *RoutingPolicy) String() string { func (*RoutingPolicy) ProtoMessage() {} func (x *RoutingPolicy) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[141] + mi := &file_gobgp_proto_msgTypes[140] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10618,7 +10390,7 @@ func (x *RoutingPolicy) ProtoReflect() protoreflect.Message { // Deprecated: Use RoutingPolicy.ProtoReflect.Descriptor instead. func (*RoutingPolicy) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{141} + return file_gobgp_proto_rawDescGZIP(), []int{140} } func (x *RoutingPolicy) GetDefinedSets() []*DefinedSet { @@ -10650,7 +10422,7 @@ type Roa struct { func (x *Roa) Reset() { *x = Roa{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[142] + mi := &file_gobgp_proto_msgTypes[141] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10663,7 +10435,7 @@ func (x *Roa) String() string { func (*Roa) ProtoMessage() {} func (x *Roa) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[142] + mi := &file_gobgp_proto_msgTypes[141] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10676,7 +10448,7 @@ func (x *Roa) ProtoReflect() protoreflect.Message { // Deprecated: Use Roa.ProtoReflect.Descriptor instead. func (*Roa) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{142} + return file_gobgp_proto_rawDescGZIP(), []int{141} } func (x *Roa) GetAsn() uint32 { @@ -10719,29 +10491,17 @@ type Vrf struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Route Distinguisher must be one of - // RouteDistinguisherTwoOctetAS, - // RouteDistinguisherIPAddressAS, - // or RouteDistinguisherFourOctetAS. - Rd *anypb.Any `protobuf:"bytes,2,opt,name=rd,proto3" json:"rd,omitempty"` - // List of the Import Route Targets. Each must be one of - // TwoOctetAsSpecificExtended, - // IPv4AddressSpecificExtended, - // or FourOctetAsSpecificExtended. - ImportRt []*anypb.Any `protobuf:"bytes,3,rep,name=import_rt,json=importRt,proto3" json:"import_rt,omitempty"` - // List of the Export Route Targets. Each must be one of - // TwoOctetAsSpecificExtended, - // IPv4AddressSpecificExtended, - // or FourOctetAsSpecificExtended. - ExportRt []*anypb.Any `protobuf:"bytes,4,rep,name=export_rt,json=exportRt,proto3" json:"export_rt,omitempty"` - Id uint32 `protobuf:"varint,5,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Rd *RouteDistinguisher `protobuf:"bytes,2,opt,name=rd,proto3" json:"rd,omitempty"` + ImportRt []*RouteTarget `protobuf:"bytes,3,rep,name=import_rt,json=importRt,proto3" json:"import_rt,omitempty"` + ExportRt []*RouteTarget `protobuf:"bytes,4,rep,name=export_rt,json=exportRt,proto3" json:"export_rt,omitempty"` + Id uint32 `protobuf:"varint,5,opt,name=id,proto3" json:"id,omitempty"` } func (x *Vrf) Reset() { *x = Vrf{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[143] + mi := &file_gobgp_proto_msgTypes[142] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10754,7 +10514,7 @@ func (x *Vrf) String() string { func (*Vrf) ProtoMessage() {} func (x *Vrf) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[143] + mi := &file_gobgp_proto_msgTypes[142] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10767,7 +10527,7 @@ func (x *Vrf) ProtoReflect() protoreflect.Message { // Deprecated: Use Vrf.ProtoReflect.Descriptor instead. func (*Vrf) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{143} + return file_gobgp_proto_rawDescGZIP(), []int{142} } func (x *Vrf) GetName() string { @@ -10777,21 +10537,21 @@ func (x *Vrf) GetName() string { return "" } -func (x *Vrf) GetRd() *anypb.Any { +func (x *Vrf) GetRd() *RouteDistinguisher { if x != nil { return x.Rd } return nil } -func (x *Vrf) GetImportRt() []*anypb.Any { +func (x *Vrf) GetImportRt() []*RouteTarget { if x != nil { return x.ImportRt } return nil } -func (x *Vrf) GetExportRt() []*anypb.Any { +func (x *Vrf) GetExportRt() []*RouteTarget { if x != nil { return x.ExportRt } @@ -10817,7 +10577,7 @@ type DefaultRouteDistance struct { func (x *DefaultRouteDistance) Reset() { *x = DefaultRouteDistance{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[144] + mi := &file_gobgp_proto_msgTypes[143] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10830,7 +10590,7 @@ func (x *DefaultRouteDistance) String() string { func (*DefaultRouteDistance) ProtoMessage() {} func (x *DefaultRouteDistance) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[144] + mi := &file_gobgp_proto_msgTypes[143] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10843,7 +10603,7 @@ func (x *DefaultRouteDistance) ProtoReflect() protoreflect.Message { // Deprecated: Use DefaultRouteDistance.ProtoReflect.Descriptor instead. func (*DefaultRouteDistance) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{144} + return file_gobgp_proto_rawDescGZIP(), []int{143} } func (x *DefaultRouteDistance) GetExternalRouteDistance() uint32 { @@ -10882,7 +10642,7 @@ type Global struct { func (x *Global) Reset() { *x = Global{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[145] + mi := &file_gobgp_proto_msgTypes[144] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10895,7 +10655,7 @@ func (x *Global) String() string { func (*Global) ProtoMessage() {} func (x *Global) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[145] + mi := &file_gobgp_proto_msgTypes[144] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10908,7 +10668,7 @@ func (x *Global) ProtoReflect() protoreflect.Message { // Deprecated: Use Global.ProtoReflect.Descriptor instead. func (*Global) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{145} + return file_gobgp_proto_rawDescGZIP(), []int{144} } func (x *Global) GetAsn() uint32 { @@ -11008,7 +10768,7 @@ type Confederation struct { func (x *Confederation) Reset() { *x = Confederation{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[146] + mi := &file_gobgp_proto_msgTypes[145] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11021,7 +10781,7 @@ func (x *Confederation) String() string { func (*Confederation) ProtoMessage() {} func (x *Confederation) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[146] + mi := &file_gobgp_proto_msgTypes[145] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11034,7 +10794,7 @@ func (x *Confederation) ProtoReflect() protoreflect.Message { // Deprecated: Use Confederation.ProtoReflect.Descriptor instead. func (*Confederation) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{146} + return file_gobgp_proto_rawDescGZIP(), []int{145} } func (x *Confederation) GetEnabled() bool { @@ -11070,7 +10830,7 @@ type RPKIConf struct { func (x *RPKIConf) Reset() { *x = RPKIConf{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[147] + mi := &file_gobgp_proto_msgTypes[146] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11083,7 +10843,7 @@ func (x *RPKIConf) String() string { func (*RPKIConf) ProtoMessage() {} func (x *RPKIConf) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[147] + mi := &file_gobgp_proto_msgTypes[146] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11096,7 +10856,7 @@ func (x *RPKIConf) ProtoReflect() protoreflect.Message { // Deprecated: Use RPKIConf.ProtoReflect.Descriptor instead. func (*RPKIConf) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{147} + return file_gobgp_proto_rawDescGZIP(), []int{146} } func (x *RPKIConf) GetAddress() string { @@ -11140,7 +10900,7 @@ type RPKIState struct { func (x *RPKIState) Reset() { *x = RPKIState{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[148] + mi := &file_gobgp_proto_msgTypes[147] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11153,7 +10913,7 @@ func (x *RPKIState) String() string { func (*RPKIState) ProtoMessage() {} func (x *RPKIState) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[148] + mi := &file_gobgp_proto_msgTypes[147] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11166,7 +10926,7 @@ func (x *RPKIState) ProtoReflect() protoreflect.Message { // Deprecated: Use RPKIState.ProtoReflect.Descriptor instead. func (*RPKIState) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{148} + return file_gobgp_proto_rawDescGZIP(), []int{147} } func (x *RPKIState) GetUptime() *timestamppb.Timestamp { @@ -11300,7 +11060,7 @@ type Rpki struct { func (x *Rpki) Reset() { *x = Rpki{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[149] + mi := &file_gobgp_proto_msgTypes[148] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11313,7 +11073,7 @@ func (x *Rpki) String() string { func (*Rpki) ProtoMessage() {} func (x *Rpki) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[149] + mi := &file_gobgp_proto_msgTypes[148] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11326,7 +11086,7 @@ func (x *Rpki) ProtoReflect() protoreflect.Message { // Deprecated: Use Rpki.ProtoReflect.Descriptor instead. func (*Rpki) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{149} + return file_gobgp_proto_rawDescGZIP(), []int{148} } func (x *Rpki) GetConf() *RPKIConf { @@ -11354,7 +11114,7 @@ type SetLogLevelRequest struct { func (x *SetLogLevelRequest) Reset() { *x = SetLogLevelRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[150] + mi := &file_gobgp_proto_msgTypes[149] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11367,7 +11127,7 @@ func (x *SetLogLevelRequest) String() string { func (*SetLogLevelRequest) ProtoMessage() {} func (x *SetLogLevelRequest) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[150] + mi := &file_gobgp_proto_msgTypes[149] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11380,7 +11140,7 @@ func (x *SetLogLevelRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetLogLevelRequest.ProtoReflect.Descriptor instead. func (*SetLogLevelRequest) Descriptor() ([]byte, []int) { - return file_gobgp_proto_rawDescGZIP(), []int{150} + return file_gobgp_proto_rawDescGZIP(), []int{149} } func (x *SetLogLevelRequest) GetLevel() SetLogLevelRequest_Level { @@ -11399,7 +11159,7 @@ type WatchEventRequest_Peer struct { func (x *WatchEventRequest_Peer) Reset() { *x = WatchEventRequest_Peer{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[151] + mi := &file_gobgp_proto_msgTypes[150] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11412,7 +11172,7 @@ func (x *WatchEventRequest_Peer) String() string { func (*WatchEventRequest_Peer) ProtoMessage() {} func (x *WatchEventRequest_Peer) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[151] + mi := &file_gobgp_proto_msgTypes[150] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11439,7 +11199,7 @@ type WatchEventRequest_Table struct { func (x *WatchEventRequest_Table) Reset() { *x = WatchEventRequest_Table{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[152] + mi := &file_gobgp_proto_msgTypes[151] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11452,7 +11212,7 @@ func (x *WatchEventRequest_Table) String() string { func (*WatchEventRequest_Table) ProtoMessage() {} func (x *WatchEventRequest_Table) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[152] + mi := &file_gobgp_proto_msgTypes[151] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11489,7 +11249,7 @@ type WatchEventRequest_Table_Filter struct { func (x *WatchEventRequest_Table_Filter) Reset() { *x = WatchEventRequest_Table_Filter{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[153] + mi := &file_gobgp_proto_msgTypes[152] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11502,7 +11262,7 @@ func (x *WatchEventRequest_Table_Filter) String() string { func (*WatchEventRequest_Table_Filter) ProtoMessage() {} func (x *WatchEventRequest_Table_Filter) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[153] + mi := &file_gobgp_proto_msgTypes[152] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11558,7 +11318,7 @@ type WatchEventResponse_PeerEvent struct { func (x *WatchEventResponse_PeerEvent) Reset() { *x = WatchEventResponse_PeerEvent{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[154] + mi := &file_gobgp_proto_msgTypes[153] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11571,7 +11331,7 @@ func (x *WatchEventResponse_PeerEvent) String() string { func (*WatchEventResponse_PeerEvent) ProtoMessage() {} func (x *WatchEventResponse_PeerEvent) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[154] + mi := &file_gobgp_proto_msgTypes[153] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11612,7 +11372,7 @@ type WatchEventResponse_TableEvent struct { func (x *WatchEventResponse_TableEvent) Reset() { *x = WatchEventResponse_TableEvent{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[155] + mi := &file_gobgp_proto_msgTypes[154] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11625,7 +11385,7 @@ func (x *WatchEventResponse_TableEvent) String() string { func (*WatchEventResponse_TableEvent) ProtoMessage() {} func (x *WatchEventResponse_TableEvent) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[155] + mi := &file_gobgp_proto_msgTypes[154] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11660,7 +11420,7 @@ type ListBmpResponse_BmpStation struct { func (x *ListBmpResponse_BmpStation) Reset() { *x = ListBmpResponse_BmpStation{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[156] + mi := &file_gobgp_proto_msgTypes[155] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11673,7 +11433,7 @@ func (x *ListBmpResponse_BmpStation) String() string { func (*ListBmpResponse_BmpStation) ProtoMessage() {} func (x *ListBmpResponse_BmpStation) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[156] + mi := &file_gobgp_proto_msgTypes[155] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11715,7 +11475,7 @@ type ListBmpResponse_BmpStation_Conf struct { func (x *ListBmpResponse_BmpStation_Conf) Reset() { *x = ListBmpResponse_BmpStation_Conf{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[157] + mi := &file_gobgp_proto_msgTypes[156] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11728,7 +11488,7 @@ func (x *ListBmpResponse_BmpStation_Conf) String() string { func (*ListBmpResponse_BmpStation_Conf) ProtoMessage() {} func (x *ListBmpResponse_BmpStation_Conf) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[157] + mi := &file_gobgp_proto_msgTypes[156] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11770,7 +11530,7 @@ type ListBmpResponse_BmpStation_State struct { func (x *ListBmpResponse_BmpStation_State) Reset() { *x = ListBmpResponse_BmpStation_State{} if protoimpl.UnsafeEnabled { - mi := &file_gobgp_proto_msgTypes[158] + mi := &file_gobgp_proto_msgTypes[157] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11783,7 +11543,7 @@ func (x *ListBmpResponse_BmpStation_State) String() string { func (*ListBmpResponse_BmpStation_State) ProtoMessage() {} func (x *ListBmpResponse_BmpStation_State) ProtoReflect() protoreflect.Message { - mi := &file_gobgp_proto_msgTypes[158] + mi := &file_gobgp_proto_msgTypes[157] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11817,12 +11577,15 @@ var File_gobgp_proto protoreflect.FileDescriptor var file_gobgp_proto_rawDesc = []byte{ 0x0a, 0x0b, 0x67, 0x6f, 0x62, 0x67, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x38, 0x0a, + 0x70, 0x69, 0x70, 0x62, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x10, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x0c, 0x65, 0x78, 0x74, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x0a, 0x6e, 0x6c, 0x72, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x38, 0x0a, 0x0f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x67, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x52, @@ -12315,1351 +12078,1317 @@ var file_gobgp_proto_rawDesc = []byte{ 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x64, 0x6f, 0x77, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x64, 0x6f, 0x77, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x91, - 0x04, 0x0a, 0x06, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x23, 0x0a, 0x03, 0x61, 0x66, 0x69, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, - 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x2e, 0x41, 0x66, 0x69, 0x52, 0x03, 0x61, 0x66, 0x69, 0x12, 0x26, - 0x0a, 0x04, 0x73, 0x61, 0x66, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x2e, 0x53, 0x61, 0x66, 0x69, - 0x52, 0x04, 0x73, 0x61, 0x66, 0x69, 0x22, 0x5e, 0x0a, 0x03, 0x41, 0x66, 0x69, 0x12, 0x0f, 0x0a, - 0x0b, 0x41, 0x46, 0x49, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, - 0x0a, 0x06, 0x41, 0x46, 0x49, 0x5f, 0x49, 0x50, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x46, - 0x49, 0x5f, 0x49, 0x50, 0x36, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x46, 0x49, 0x5f, 0x4c, - 0x32, 0x56, 0x50, 0x4e, 0x10, 0x19, 0x12, 0x0c, 0x0a, 0x06, 0x41, 0x46, 0x49, 0x5f, 0x4c, 0x53, - 0x10, 0x84, 0x80, 0x01, 0x12, 0x10, 0x0a, 0x0a, 0x41, 0x46, 0x49, 0x5f, 0x4f, 0x50, 0x41, 0x51, - 0x55, 0x45, 0x10, 0x8d, 0x80, 0x01, 0x22, 0xd9, 0x02, 0x0a, 0x04, 0x53, 0x61, 0x66, 0x69, 0x12, - 0x10, 0x0a, 0x0c, 0x53, 0x41, 0x46, 0x49, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, - 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x41, 0x46, 0x49, 0x5f, 0x55, 0x4e, 0x49, 0x43, 0x41, 0x53, - 0x54, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x41, 0x46, 0x49, 0x5f, 0x4d, 0x55, 0x4c, 0x54, - 0x49, 0x43, 0x41, 0x53, 0x54, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x41, 0x46, 0x49, 0x5f, - 0x4d, 0x50, 0x4c, 0x53, 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, - 0x53, 0x41, 0x46, 0x49, 0x5f, 0x45, 0x4e, 0x43, 0x41, 0x50, 0x53, 0x55, 0x4c, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x41, 0x46, 0x49, 0x5f, 0x56, 0x50, 0x4c, - 0x53, 0x10, 0x41, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x41, 0x46, 0x49, 0x5f, 0x45, 0x56, 0x50, 0x4e, - 0x10, 0x46, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x41, 0x46, 0x49, 0x5f, 0x4c, 0x53, 0x10, 0x47, 0x12, - 0x12, 0x0a, 0x0e, 0x53, 0x41, 0x46, 0x49, 0x5f, 0x53, 0x52, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, - 0x59, 0x10, 0x49, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x41, 0x46, 0x49, 0x5f, 0x4d, 0x55, 0x50, 0x10, - 0x55, 0x12, 0x12, 0x0a, 0x0d, 0x53, 0x41, 0x46, 0x49, 0x5f, 0x4d, 0x50, 0x4c, 0x53, 0x5f, 0x56, - 0x50, 0x4e, 0x10, 0x80, 0x01, 0x12, 0x1c, 0x0a, 0x17, 0x53, 0x41, 0x46, 0x49, 0x5f, 0x4d, 0x50, - 0x4c, 0x53, 0x5f, 0x56, 0x50, 0x4e, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x43, 0x41, 0x53, 0x54, - 0x10, 0x81, 0x01, 0x12, 0x22, 0x0a, 0x1d, 0x53, 0x41, 0x46, 0x49, 0x5f, 0x52, 0x4f, 0x55, 0x54, - 0x45, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x53, 0x54, 0x52, 0x41, - 0x49, 0x4e, 0x54, 0x53, 0x10, 0x84, 0x01, 0x12, 0x1b, 0x0a, 0x16, 0x53, 0x41, 0x46, 0x49, 0x5f, - 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x5f, 0x55, 0x4e, 0x49, 0x43, 0x41, 0x53, - 0x54, 0x10, 0x85, 0x01, 0x12, 0x17, 0x0a, 0x12, 0x53, 0x41, 0x46, 0x49, 0x5f, 0x46, 0x4c, 0x4f, - 0x57, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x5f, 0x56, 0x50, 0x4e, 0x10, 0x86, 0x01, 0x12, 0x13, 0x0a, - 0x0e, 0x53, 0x41, 0x46, 0x49, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, - 0xf1, 0x01, 0x22, 0x8b, 0x03, 0x0a, 0x0a, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x30, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x61, 0x52, - 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x0d, 0x75, 0x6e, 0x6d, 0x61, - 0x74, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0a, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x61, 0x52, 0x0c, 0x75, 0x6e, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x41, 0x73, 0x6e, 0x12, 0x35, 0x0a, 0x10, 0x75, 0x6e, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x05, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x61, 0x52, - 0x0f, 0x75, 0x6e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x22, 0x50, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x12, 0x0f, - 0x0a, 0x0b, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x02, 0x12, - 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, - 0x10, 0x03, 0x22, 0x3c, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x0f, 0x0a, 0x0b, - 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0e, 0x0a, - 0x0a, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x41, 0x53, 0x4e, 0x10, 0x01, 0x12, 0x11, 0x0a, - 0x0d, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x4e, 0x47, 0x54, 0x48, 0x10, 0x02, - 0x22, 0x85, 0x06, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x12, 0x28, 0x0a, 0x04, 0x6e, 0x6c, 0x72, - 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x6e, - 0x6c, 0x72, 0x69, 0x12, 0x2c, 0x0a, 0x06, 0x70, 0x61, 0x74, 0x74, 0x72, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x06, 0x70, 0x61, 0x74, 0x74, 0x72, - 0x73, 0x12, 0x2c, 0x0a, 0x03, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x61, 0x67, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x62, 0x65, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x62, - 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x57, 0x69, 0x74, 0x68, - 0x64, 0x72, 0x61, 0x77, 0x12, 0x31, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, - 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x14, 0x6e, 0x6f, 0x5f, 0x69, 0x6d, - 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x6e, 0x6f, 0x49, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x69, - 0x74, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x25, 0x0a, 0x06, 0x66, 0x61, 0x6d, - 0x69, 0x6c, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, - 0x62, 0x2e, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, - 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x73, 0x6e, 0x12, - 0x1b, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x6c, - 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x12, 0x28, - 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x46, 0x72, 0x6f, 0x6d, - 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x65, 0x69, 0x67, - 0x68, 0x62, 0x6f, 0x72, 0x5f, 0x69, 0x70, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, - 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x49, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, - 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x2c, 0x0a, - 0x12, 0x69, 0x73, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x68, 0x6f, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x73, 0x4e, 0x65, 0x78, - 0x74, 0x68, 0x6f, 0x70, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x29, 0x0a, 0x10, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, - 0x13, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x6c, 0x72, 0x69, 0x5f, 0x62, - 0x69, 0x6e, 0x61, 0x72, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x6e, 0x6c, 0x72, - 0x69, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x61, 0x74, 0x74, 0x72, - 0x73, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x18, 0x15, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0c, - 0x70, 0x61, 0x74, 0x74, 0x72, 0x73, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x11, - 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, - 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, 0x65, 0x6e, 0x64, 0x4d, 0x61, 0x78, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x22, 0x48, 0x0a, 0x0b, 0x44, 0x65, 0x73, 0x74, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, - 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, - 0x21, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, - 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x05, 0x70, 0x61, 0x74, - 0x68, 0x73, 0x22, 0xb9, 0x04, 0x0a, 0x04, 0x50, 0x65, 0x65, 0x72, 0x12, 0x35, 0x0a, 0x0c, 0x61, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x64, 0x6f, 0x77, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x8b, + 0x03, 0x0a, 0x0a, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x06, + 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x24, + 0x0a, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0a, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x61, 0x52, 0x07, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x0d, 0x75, 0x6e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, + 0x64, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x61, 0x52, 0x0c, 0x75, 0x6e, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x65, 0x64, 0x41, 0x73, 0x6e, 0x12, 0x35, 0x0a, 0x10, 0x75, 0x6e, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x65, 0x64, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0a, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x61, 0x52, 0x0f, 0x75, 0x6e, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x50, 0x0a, 0x05, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4e, + 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4e, + 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, + 0x41, 0x54, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x03, 0x22, 0x3c, + 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x45, 0x41, 0x53, + 0x4f, 0x4e, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x45, 0x41, + 0x53, 0x4f, 0x4e, 0x5f, 0x41, 0x53, 0x4e, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x52, 0x45, 0x41, + 0x53, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x4e, 0x47, 0x54, 0x48, 0x10, 0x02, 0x22, 0xf8, 0x05, 0x0a, + 0x04, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x04, 0x6e, 0x6c, 0x72, 0x69, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4e, 0x4c, 0x52, 0x49, + 0x52, 0x04, 0x6e, 0x6c, 0x72, 0x69, 0x12, 0x28, 0x0a, 0x06, 0x70, 0x61, 0x74, 0x74, 0x72, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x06, 0x70, 0x61, 0x74, 0x74, 0x72, 0x73, + 0x12, 0x2c, 0x0a, 0x03, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x61, 0x67, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x62, 0x65, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x62, 0x65, + 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x57, 0x69, 0x74, 0x68, 0x64, + 0x72, 0x61, 0x77, 0x12, 0x31, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x14, 0x6e, 0x6f, 0x5f, 0x69, 0x6d, 0x70, + 0x6c, 0x69, 0x63, 0x69, 0x74, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x6e, 0x6f, 0x49, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, + 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x25, 0x0a, 0x06, 0x66, 0x61, 0x6d, 0x69, + 0x6c, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, + 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x73, 0x6e, 0x12, 0x1b, + 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x6c, 0x65, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x12, 0x28, 0x0a, + 0x10, 0x69, 0x73, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x45, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x65, 0x69, 0x67, 0x68, + 0x62, 0x6f, 0x72, 0x5f, 0x69, 0x70, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x65, + 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x49, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x12, + 0x69, 0x73, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x68, 0x6f, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x73, 0x4e, 0x65, 0x78, 0x74, + 0x68, 0x6f, 0x70, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x29, 0x0a, 0x10, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x13, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x6c, 0x72, 0x69, 0x5f, 0x62, 0x69, + 0x6e, 0x61, 0x72, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x6e, 0x6c, 0x72, 0x69, + 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x61, 0x74, 0x74, 0x72, 0x73, + 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x18, 0x15, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0c, 0x70, + 0x61, 0x74, 0x74, 0x72, 0x73, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x73, + 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, + 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, 0x65, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x22, 0x48, 0x0a, 0x0b, 0x44, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x21, + 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x05, 0x70, 0x61, 0x74, 0x68, + 0x73, 0x22, 0xb9, 0x04, 0x0a, 0x04, 0x50, 0x65, 0x65, 0x72, 0x12, 0x35, 0x0a, 0x0c, 0x61, 0x70, + 0x70, 0x6c, 0x79, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x12, 0x23, 0x0a, 0x04, 0x63, 0x6f, 0x6e, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, + 0x52, 0x04, 0x63, 0x6f, 0x6e, 0x66, 0x12, 0x38, 0x0a, 0x0d, 0x65, 0x62, 0x67, 0x70, 0x5f, 0x6d, + 0x75, 0x6c, 0x74, 0x69, 0x68, 0x6f, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x62, 0x67, 0x70, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x68, + 0x6f, 0x70, 0x52, 0x0c, 0x65, 0x62, 0x67, 0x70, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x68, 0x6f, 0x70, + 0x12, 0x3e, 0x0a, 0x0f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x52, 0x0e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x12, 0x26, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x69, 0x6d, 0x65, + 0x72, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x73, 0x52, 0x06, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x73, 0x12, + 0x2e, 0x0a, 0x09, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x70, 0x6f, 0x72, 0x74, 0x52, 0x09, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x12, + 0x35, 0x0a, 0x0c, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, + 0x75, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x0b, 0x72, 0x6f, 0x75, 0x74, 0x65, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x10, 0x67, 0x72, 0x61, 0x63, 0x65, 0x66, + 0x75, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, + 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x0f, 0x67, 0x72, 0x61, 0x63, 0x65, 0x66, + 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2b, 0x0a, 0x09, 0x61, 0x66, 0x69, + 0x5f, 0x73, 0x61, 0x66, 0x69, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x66, 0x69, 0x53, 0x61, 0x66, 0x69, 0x52, 0x08, 0x61, 0x66, + 0x69, 0x53, 0x61, 0x66, 0x69, 0x73, 0x12, 0x35, 0x0a, 0x0c, 0x74, 0x74, 0x6c, 0x5f, 0x73, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x74, 0x6c, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x52, 0x0b, 0x74, 0x74, 0x6c, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x22, 0xc6, 0x04, + 0x0a, 0x09, 0x50, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x35, 0x0a, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x12, 0x23, 0x0a, 0x04, 0x63, 0x6f, 0x6e, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x43, 0x6f, 0x6e, - 0x66, 0x52, 0x04, 0x63, 0x6f, 0x6e, 0x66, 0x12, 0x38, 0x0a, 0x0d, 0x65, 0x62, 0x67, 0x70, 0x5f, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x68, 0x6f, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x62, 0x67, 0x70, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x68, 0x6f, 0x70, 0x52, 0x0c, 0x65, 0x62, 0x67, 0x70, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x68, 0x6f, - 0x70, 0x12, 0x3e, 0x0a, 0x0f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x52, 0x0e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x12, 0x26, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x69, 0x6d, - 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, - 0x62, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x73, 0x52, 0x06, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x73, - 0x12, 0x2e, 0x0a, 0x09, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x09, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, - 0x12, 0x35, 0x0a, 0x0c, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, - 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x0b, 0x72, 0x6f, 0x75, 0x74, - 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x10, 0x67, 0x72, 0x61, 0x63, 0x65, - 0x66, 0x75, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, - 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x0f, 0x67, 0x72, 0x61, 0x63, 0x65, - 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2b, 0x0a, 0x09, 0x61, 0x66, - 0x69, 0x5f, 0x73, 0x61, 0x66, 0x69, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, - 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x66, 0x69, 0x53, 0x61, 0x66, 0x69, 0x52, 0x08, 0x61, - 0x66, 0x69, 0x53, 0x61, 0x66, 0x69, 0x73, 0x12, 0x35, 0x0a, 0x0c, 0x74, 0x74, 0x6c, 0x5f, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x74, 0x6c, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x52, 0x0b, 0x74, 0x74, 0x6c, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x22, 0xc6, - 0x04, 0x0a, 0x09, 0x50, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x35, 0x0a, 0x0c, - 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x12, 0x28, 0x0a, 0x04, 0x63, 0x6f, 0x6e, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x52, 0x04, 0x63, 0x6f, 0x6e, 0x66, 0x12, 0x38, 0x0a, - 0x0d, 0x65, 0x62, 0x67, 0x70, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x68, 0x6f, 0x70, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x62, 0x67, - 0x70, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x68, 0x6f, 0x70, 0x52, 0x0c, 0x65, 0x62, 0x67, 0x70, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x68, 0x6f, 0x70, 0x12, 0x3e, 0x0a, 0x0f, 0x72, 0x6f, 0x75, 0x74, 0x65, - 0x5f, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, - 0x66, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x0e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, - 0x66, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x29, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x65, - 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x04, 0x69, 0x6e, - 0x66, 0x6f, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x72, - 0x73, 0x52, 0x06, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x73, 0x12, 0x2e, 0x0a, 0x09, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x09, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x35, 0x0a, 0x0c, 0x72, 0x6f, 0x75, - 0x74, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x52, 0x0b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x12, 0x41, 0x0a, 0x10, 0x67, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x5f, 0x72, 0x65, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x52, 0x0f, 0x67, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x12, 0x2b, 0x0a, 0x09, 0x61, 0x66, 0x69, 0x5f, 0x73, 0x61, 0x66, 0x69, 0x73, - 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, - 0x66, 0x69, 0x53, 0x61, 0x66, 0x69, 0x52, 0x08, 0x61, 0x66, 0x69, 0x53, 0x61, 0x66, 0x69, 0x73, - 0x12, 0x35, 0x0a, 0x0c, 0x74, 0x74, 0x6c, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, - 0x74, 0x6c, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x0b, 0x74, 0x74, 0x6c, 0x53, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x22, 0x48, 0x0a, 0x0f, 0x44, 0x79, 0x6e, 0x61, 0x6d, - 0x69, 0x63, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, - 0x65, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, - 0x69, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x22, 0xbf, 0x01, 0x0a, 0x0b, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x12, 0x34, 0x0a, 0x09, 0x69, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x69, - 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3c, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x6f, 0x72, - 0x74, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x73, 0x73, - 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3c, 0x0a, 0x0d, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x73, 0x73, 0x69, 0x67, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0c, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x22, 0x8d, 0x01, 0x0a, 0x0b, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x6d, 0x69, - 0x6c, 0x79, 0x52, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, - 0x78, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x12, 0x34, 0x0a, - 0x16, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, - 0x6f, 0x6c, 0x64, 0x5f, 0x70, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x73, - 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, - 0x50, 0x63, 0x74, 0x22, 0xec, 0x04, 0x0a, 0x08, 0x50, 0x65, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, - 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x75, 0x74, 0x68, 0x50, 0x61, 0x73, - 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, - 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, - 0x6c, 0x41, 0x73, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, - 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, - 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x19, 0x0a, 0x08, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x07, 0x70, 0x65, 0x65, 0x72, 0x41, 0x73, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x65, - 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x70, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, - 0x50, 0x65, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3b, - 0x0a, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x72, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x72, - 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x70, 0x5f, 0x64, 0x61, 0x6d, 0x70, 0x69, 0x6e, - 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x46, 0x6c, - 0x61, 0x70, 0x44, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x6e, - 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, - 0x12, 0x2d, 0x0a, 0x12, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x5f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6e, 0x65, - 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, - 0x10, 0x0a, 0x03, 0x76, 0x72, 0x66, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x76, 0x72, - 0x66, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x77, 0x6e, 0x5f, 0x61, - 0x73, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4f, - 0x77, 0x6e, 0x41, 0x73, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, - 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x50, 0x65, 0x65, 0x72, 0x41, 0x73, 0x6e, 0x12, - 0x1d, 0x0a, 0x0a, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x32, - 0x0a, 0x15, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x5f, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x73, - 0x65, 0x6e, 0x64, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x22, 0xa1, 0x03, 0x0a, 0x0d, 0x50, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x43, 0x6f, 0x6e, 0x66, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x70, 0x61, 0x73, - 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x75, 0x74, - 0x68, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, - 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x73, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x65, 0x65, 0x72, - 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x70, 0x65, 0x65, 0x72, - 0x41, 0x73, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x65, - 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, - 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x3b, 0x0a, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, - 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x0d, - 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, - 0x12, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x70, 0x5f, 0x64, 0x61, 0x6d, 0x70, - 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x72, 0x6f, 0x75, 0x74, 0x65, - 0x46, 0x6c, 0x61, 0x70, 0x44, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x73, - 0x65, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, - 0x74, 0x79, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x77, - 0x61, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x13, 0x73, 0x65, 0x6e, 0x64, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xb6, 0x03, 0x0a, 0x0e, 0x50, 0x65, 0x65, 0x72, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x75, 0x74, - 0x68, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x61, 0x75, 0x74, 0x68, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x20, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x73, 0x6e, 0x12, 0x19, 0x0a, - 0x08, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x07, 0x70, 0x65, 0x65, 0x72, 0x41, 0x73, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, - 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, - 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3b, 0x0a, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, - 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x70, - 0x5f, 0x64, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, - 0x72, 0x6f, 0x75, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x70, 0x44, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, - 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, - 0x74, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x43, 0x6f, - 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x22, - 0x40, 0x0a, 0x0b, 0x54, 0x74, 0x6c, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, - 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x74, 0x6c, 0x5f, - 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x74, 0x74, 0x6c, 0x4d, 0x69, - 0x6e, 0x22, 0x4b, 0x0a, 0x0c, 0x45, 0x62, 0x67, 0x70, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x68, 0x6f, - 0x70, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x6d, - 0x75, 0x6c, 0x74, 0x69, 0x68, 0x6f, 0x70, 0x5f, 0x74, 0x74, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x68, 0x6f, 0x70, 0x54, 0x74, 0x6c, 0x22, 0x83, - 0x01, 0x0a, 0x0e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x14, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x1a, 0x72, 0x6f, 0x75, 0x74, 0x65, - 0x5f, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x72, 0x6f, 0x75, - 0x74, 0x65, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x49, 0x64, 0x22, 0xad, 0x07, 0x0a, 0x09, 0x50, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, - 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x75, 0x74, 0x68, 0x50, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x63, - 0x61, 0x6c, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6c, 0x6f, - 0x63, 0x61, 0x6c, 0x41, 0x73, 0x6e, 0x12, 0x2b, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, - 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x5f, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6e, + 0x63, 0x79, 0x12, 0x28, 0x0a, 0x04, 0x63, 0x6f, 0x6e, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x52, 0x04, 0x63, 0x6f, 0x6e, 0x66, 0x12, 0x38, 0x0a, 0x0d, + 0x65, 0x62, 0x67, 0x70, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x68, 0x6f, 0x70, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x62, 0x67, 0x70, + 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x68, 0x6f, 0x70, 0x52, 0x0c, 0x65, 0x62, 0x67, 0x70, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x68, 0x6f, 0x70, 0x12, 0x3e, 0x0a, 0x0f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, + 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x66, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x0e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x66, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x29, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, + 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x04, 0x69, 0x6e, 0x66, + 0x6f, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x73, + 0x52, 0x06, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x73, 0x12, 0x2e, 0x0a, 0x09, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x09, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x35, 0x0a, 0x0c, 0x72, 0x6f, 0x75, 0x74, + 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x52, 0x0b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, + 0x41, 0x0a, 0x10, 0x67, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x52, 0x0f, 0x67, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x12, 0x2b, 0x0a, 0x09, 0x61, 0x66, 0x69, 0x5f, 0x73, 0x61, 0x66, 0x69, 0x73, 0x18, + 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x66, + 0x69, 0x53, 0x61, 0x66, 0x69, 0x52, 0x08, 0x61, 0x66, 0x69, 0x53, 0x61, 0x66, 0x69, 0x73, 0x12, + 0x35, 0x0a, 0x0c, 0x74, 0x74, 0x6c, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x74, + 0x6c, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x0b, 0x74, 0x74, 0x6c, 0x53, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x22, 0x48, 0x0a, 0x0f, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, + 0x63, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, + 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x22, 0xbf, 0x01, 0x0a, 0x0b, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x12, 0x34, 0x0a, 0x09, 0x69, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x69, 0x6e, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3c, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, + 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x73, 0x73, 0x69, + 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3c, 0x0a, 0x0d, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0c, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x22, 0x8d, 0x01, 0x0a, 0x0b, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x6d, 0x69, 0x6c, + 0x79, 0x52, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, + 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0b, 0x6d, 0x61, 0x78, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x16, + 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, + 0x6c, 0x64, 0x5f, 0x70, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x73, 0x68, + 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x50, + 0x63, 0x74, 0x22, 0xec, 0x04, 0x0a, 0x08, 0x50, 0x65, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x12, + 0x23, 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x75, 0x74, 0x68, 0x50, 0x61, 0x73, 0x73, + 0x77, 0x6f, 0x72, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, + 0x61, 0x73, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x41, 0x73, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x5f, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x19, - 0x0a, 0x08, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, + 0x0a, 0x08, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x70, 0x65, 0x65, 0x72, 0x41, 0x73, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x65, 0x65, - 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, + 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, - 0x65, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, - 0x06, 0x71, 0x75, 0x65, 0x75, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, - 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x51, 0x75, 0x65, 0x75, 0x65, 0x73, 0x52, 0x06, 0x71, 0x75, - 0x65, 0x75, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, + 0x65, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3b, 0x0a, + 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x72, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x6f, + 0x75, 0x74, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x70, 0x5f, 0x64, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x46, 0x6c, 0x61, + 0x70, 0x44, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, + 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x12, + 0x2d, 0x0a, 0x12, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x5f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6e, 0x65, 0x69, + 0x67, 0x68, 0x62, 0x6f, 0x72, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x76, 0x72, 0x66, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x76, 0x72, 0x66, + 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x77, 0x6e, 0x5f, 0x61, 0x73, + 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x77, + 0x6e, 0x41, 0x73, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x5f, + 0x70, 0x65, 0x65, 0x72, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, + 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x50, 0x65, 0x65, 0x72, 0x41, 0x73, 0x6e, 0x12, 0x1d, + 0x0a, 0x0a, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x32, 0x0a, + 0x15, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x73, 0x65, + 0x6e, 0x64, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x22, 0xa1, 0x03, 0x0a, 0x0d, 0x50, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, + 0x6f, 0x6e, 0x66, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x70, 0x61, 0x73, 0x73, + 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x75, 0x74, 0x68, + 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x73, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x65, 0x65, 0x72, 0x5f, + 0x61, 0x73, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x70, 0x65, 0x65, 0x72, 0x41, + 0x73, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x65, 0x65, + 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x50, 0x65, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x3b, 0x0a, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x72, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x12, + 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x70, 0x5f, 0x64, 0x61, 0x6d, 0x70, 0x69, + 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x46, + 0x6c, 0x61, 0x70, 0x44, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, + 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, + 0x79, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, + 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x13, 0x73, 0x65, 0x6e, 0x64, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xb6, 0x03, 0x0a, 0x0e, 0x50, 0x65, 0x65, 0x72, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x68, + 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x61, 0x75, 0x74, 0x68, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x20, 0x0a, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x73, 0x6e, 0x12, 0x19, 0x0a, 0x08, + 0x70, 0x65, 0x65, 0x72, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, + 0x70, 0x65, 0x65, 0x72, 0x41, 0x73, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x3b, 0x0a, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x70, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x70, 0x5f, - 0x64, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x72, + 0x64, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x70, 0x44, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, - 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x6d, - 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x0d, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, - 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, - 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x73, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x13, 0x0a, 0x05, 0x6f, 0x75, 0x74, 0x5f, - 0x71, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x6f, 0x75, 0x74, 0x51, 0x12, 0x14, 0x0a, - 0x05, 0x66, 0x6c, 0x6f, 0x70, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, - 0x6f, 0x70, 0x73, 0x12, 0x33, 0x0a, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x61, - 0x70, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x72, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x61, 0x70, 0x12, 0x31, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, - 0x6c, 0x5f, 0x63, 0x61, 0x70, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, - 0x79, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x43, 0x61, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x72, - 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x22, 0x6e, 0x0a, 0x0c, 0x53, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x44, 0x4c, 0x45, 0x10, 0x01, 0x12, - 0x0b, 0x0a, 0x07, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, - 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x4f, 0x50, 0x45, 0x4e, - 0x53, 0x45, 0x4e, 0x54, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x45, 0x4e, 0x43, 0x4f, - 0x4e, 0x46, 0x49, 0x52, 0x4d, 0x10, 0x05, 0x12, 0x0f, 0x0a, 0x0b, 0x45, 0x53, 0x54, 0x41, 0x42, - 0x4c, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0x06, 0x22, 0x2a, 0x0a, 0x0a, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x06, 0x0a, 0x02, 0x55, 0x50, 0x10, 0x00, 0x12, 0x08, - 0x0a, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x46, 0x58, 0x5f, - 0x43, 0x54, 0x10, 0x02, 0x22, 0x5a, 0x0a, 0x08, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x12, 0x2a, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x04, - 0x73, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x04, 0x73, 0x65, 0x6e, 0x74, - 0x22, 0x97, 0x02, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, - 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x16, 0x0a, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6f, 0x70, 0x65, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, - 0x6b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x09, 0x6b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, - 0x66, 0x72, 0x65, 0x73, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x72, 0x65, 0x66, - 0x72, 0x65, 0x73, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x65, - 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, - 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x69, 0x74, 0x68, - 0x64, 0x72, 0x61, 0x77, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0e, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x5f, 0x70, 0x72, - 0x65, 0x66, 0x69, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x77, 0x69, 0x74, 0x68, - 0x64, 0x72, 0x61, 0x77, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x36, 0x0a, 0x06, 0x51, 0x75, - 0x65, 0x75, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x22, 0x5f, 0x0a, 0x06, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x73, 0x12, 0x2b, 0x0a, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x28, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x22, 0x81, 0x02, 0x0a, 0x0c, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x73, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, - 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x63, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x6f, 0x6c, - 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x68, 0x6f, - 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x6b, 0x65, 0x65, 0x70, 0x61, 0x6c, - 0x69, 0x76, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x11, 0x6b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x74, - 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x44, 0x0a, 0x1e, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, - 0x5f, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1c, 0x6d, - 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x41, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x3a, 0x0a, 0x1a, 0x69, - 0x64, 0x6c, 0x65, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x61, 0x66, - 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x16, 0x69, 0x64, 0x6c, 0x65, 0x48, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x41, 0x66, 0x74, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x65, 0x74, 0x22, 0xe2, 0x02, 0x0a, 0x0b, 0x54, 0x69, 0x6d, 0x65, - 0x72, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, - 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x09, - 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x08, 0x68, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x6b, 0x65, 0x65, - 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x6b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x44, 0x0a, 0x1e, 0x6d, 0x69, 0x6e, 0x69, - 0x6d, 0x75, 0x6d, 0x5f, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x1c, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x41, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, - 0x73, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x30, - 0x0a, 0x14, 0x6e, 0x65, 0x67, 0x6f, 0x74, 0x69, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x68, 0x6f, 0x6c, - 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x6e, 0x65, - 0x67, 0x6f, 0x74, 0x69, 0x61, 0x74, 0x65, 0x64, 0x48, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x32, 0x0a, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x06, 0x75, 0x70, - 0x74, 0x69, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x64, 0x6f, 0x77, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x08, 0x64, 0x6f, 0x77, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x9f, 0x02, 0x0a, - 0x09, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x6f, - 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x23, - 0x0a, 0x0d, 0x6d, 0x74, 0x75, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6d, 0x74, 0x75, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x73, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, - 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x61, 0x73, 0x73, 0x69, - 0x76, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1f, 0x0a, - 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x17, - 0x0a, 0x07, 0x74, 0x63, 0x70, 0x5f, 0x6d, 0x73, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x06, 0x74, 0x63, 0x70, 0x4d, 0x73, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x62, 0x69, 0x6e, 0x64, 0x5f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x62, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x66, - 0x0a, 0x0b, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x2e, 0x0a, - 0x13, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x72, 0x6f, 0x75, 0x74, - 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x0a, - 0x0f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, - 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x22, 0xb4, 0x03, 0x0a, 0x0f, 0x47, 0x72, 0x61, 0x63, 0x65, - 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x65, 0x6c, 0x70, 0x65, - 0x72, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x68, 0x65, - 0x6c, 0x70, 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x65, - 0x72, 0x72, 0x61, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0c, 0x64, 0x65, 0x66, 0x65, 0x72, 0x72, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x31, 0x0a, - 0x14, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x6e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x12, 0x2b, 0x0a, 0x11, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6c, 0x6f, 0x6e, - 0x67, 0x6c, 0x69, 0x76, 0x65, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2a, 0x0a, - 0x11, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x52, - 0x6f, 0x75, 0x74, 0x65, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x65, 0x65, - 0x72, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x72, 0x65, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, - 0x70, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x29, - 0x0a, 0x10, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, - 0x6e, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x52, - 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, - 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x33, 0x0a, - 0x17, 0x4d, 0x70, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x16, 0x4d, 0x70, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, - 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, + 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x6d, + 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, + 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x22, 0x40, + 0x0a, 0x0b, 0x54, 0x74, 0x6c, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, - 0x73, 0x65, 0x64, 0x12, 0x2d, 0x0a, 0x13, 0x65, 0x6e, 0x64, 0x5f, 0x6f, 0x66, 0x5f, 0x72, 0x69, - 0x62, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x10, 0x65, 0x6e, 0x64, 0x4f, 0x66, 0x52, 0x69, 0x62, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, - 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0f, 0x65, 0x6e, 0x64, 0x5f, 0x6f, 0x66, 0x5f, 0x72, 0x69, 0x62, - 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x65, 0x6e, 0x64, - 0x4f, 0x66, 0x52, 0x69, 0x62, 0x53, 0x65, 0x6e, 0x74, 0x22, 0x80, 0x01, 0x0a, 0x11, 0x4d, 0x70, - 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, - 0x36, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x70, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, - 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x33, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, - 0x70, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x50, 0x0a, 0x0d, - 0x41, 0x66, 0x69, 0x53, 0x61, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x0a, - 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, - 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x06, 0x66, 0x61, - 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xa7, - 0x01, 0x0a, 0x0c, 0x41, 0x66, 0x69, 0x53, 0x61, 0x66, 0x69, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x25, 0x0a, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x06, - 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, - 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x64, 0x76, 0x65, - 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x61, 0x64, - 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x22, 0x93, 0x03, 0x0a, 0x1b, 0x52, 0x6f, 0x75, - 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x77, 0x61, - 0x79, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x43, 0x6f, 0x6d, 0x70, - 0x61, 0x72, 0x65, 0x4d, 0x65, 0x64, 0x12, 0x31, 0x0a, 0x15, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, - 0x5f, 0x61, 0x73, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x41, 0x73, 0x50, - 0x61, 0x74, 0x68, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x3b, 0x0a, 0x1a, 0x65, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x72, 0x6f, - 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x65, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x52, 0x6f, - 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x19, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, - 0x69, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x72, 0x6f, 0x75, - 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x61, 0x64, 0x76, 0x65, 0x72, - 0x74, 0x69, 0x73, 0x65, 0x49, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x69, 0x67, - 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, - 0x69, 0x67, 0x70, 0x12, 0x3a, 0x0a, 0x1a, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x65, - 0x78, 0x74, 0x5f, 0x68, 0x6f, 0x70, 0x5f, 0x69, 0x67, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4e, - 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x49, 0x67, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, - 0x3d, 0x0a, 0x1b, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x65, 0x73, 0x74, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x73, - 0x74, 0x50, 0x61, 0x74, 0x68, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x92, - 0x03, 0x0a, 0x1a, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, - 0x12, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x5f, - 0x6d, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x6c, 0x77, 0x61, 0x79, - 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4d, 0x65, 0x64, 0x12, 0x31, 0x0a, 0x15, 0x69, - 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x73, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x6c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x69, 0x67, 0x6e, 0x6f, - 0x72, 0x65, 0x41, 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x3b, - 0x0a, 0x1a, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x72, 0x65, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x17, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x70, - 0x61, 0x72, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x19, 0x61, - 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, - 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x49, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x5f, 0x61, 0x69, 0x67, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x41, 0x69, 0x67, 0x70, 0x12, 0x3a, 0x0a, 0x1a, 0x69, 0x67, 0x6e, 0x6f, - 0x72, 0x65, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x68, 0x6f, 0x70, 0x5f, 0x69, 0x67, 0x70, 0x5f, - 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x69, 0x67, - 0x6e, 0x6f, 0x72, 0x65, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x49, 0x67, 0x70, 0x4d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x12, 0x3d, 0x0a, 0x1b, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, - 0x62, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x64, 0x69, 0x73, 0x61, 0x62, - 0x6c, 0x65, 0x42, 0x65, 0x73, 0x74, 0x50, 0x61, 0x74, 0x68, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x8c, 0x01, 0x0a, 0x15, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3a, 0x0a, - 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, - 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x22, 0x32, 0x0a, 0x16, 0x55, 0x73, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, - 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x31, 0x0a, 0x15, 0x55, 0x73, 0x65, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x70, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x5f, 0x0a, 0x0a, 0x45, 0x62, 0x67, - 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, - 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, - 0x6c, 0x65, 0x41, 0x73, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, - 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6d, 0x61, - 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x73, 0x22, 0x5e, 0x0a, 0x09, 0x45, 0x62, - 0x67, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, - 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, - 0x6c, 0x65, 0x41, 0x73, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, - 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6d, 0x61, - 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x73, 0x22, 0x59, 0x0a, 0x04, 0x45, 0x62, - 0x67, 0x70, 0x12, 0x29, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x62, 0x67, 0x70, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x26, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x62, 0x67, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x31, 0x0a, 0x0a, 0x49, 0x62, 0x67, 0x70, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x70, - 0x61, 0x74, 0x68, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x69, - 0x6d, 0x75, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x73, 0x22, 0x30, 0x0a, 0x09, 0x49, 0x62, 0x67, 0x70, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, - 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6d, 0x61, - 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x73, 0x22, 0x59, 0x0a, 0x04, 0x49, 0x62, - 0x67, 0x70, 0x12, 0x29, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x49, 0x62, 0x67, 0x70, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x26, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x49, 0x62, 0x67, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0xbf, 0x01, 0x0a, 0x10, 0x55, 0x73, 0x65, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x70, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x35, 0x0a, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x55, 0x73, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x50, 0x61, - 0x74, 0x68, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x55, 0x73, 0x65, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x70, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x04, 0x65, 0x62, 0x67, 0x70, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x62, 0x67, 0x70, - 0x52, 0x04, 0x65, 0x62, 0x67, 0x70, 0x12, 0x1f, 0x0a, 0x04, 0x69, 0x62, 0x67, 0x70, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x49, 0x62, 0x67, - 0x70, 0x52, 0x04, 0x69, 0x62, 0x67, 0x70, 0x22, 0x42, 0x0a, 0x1b, 0x52, 0x6f, 0x75, 0x74, 0x65, - 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x65, 0x72, 0x72, - 0x61, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x64, - 0x65, 0x66, 0x65, 0x72, 0x72, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x41, 0x0a, 0x1a, 0x52, - 0x6f, 0x75, 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x68, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, - 0x65, 0x72, 0x72, 0x61, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0c, 0x64, 0x65, 0x66, 0x65, 0x72, 0x72, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x8c, - 0x01, 0x0a, 0x15, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, - 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, - 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x5d, 0x0a, - 0x1e, 0x4c, 0x6f, 0x6e, 0x67, 0x4c, 0x69, 0x76, 0x65, 0x64, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, - 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, - 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0b, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xde, 0x01, 0x0a, - 0x1d, 0x4c, 0x6f, 0x6e, 0x67, 0x4c, 0x69, 0x76, 0x65, 0x64, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, - 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, - 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, - 0x69, 0x73, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0f, 0x70, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x70, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x22, 0x95, 0x01, - 0x0a, 0x18, 0x4c, 0x6f, 0x6e, 0x67, 0x4c, 0x69, 0x76, 0x65, 0x64, 0x47, 0x72, 0x61, 0x63, 0x65, - 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x6e, 0x67, 0x4c, 0x69, 0x76, 0x65, 0x64, 0x47, 0x72, 0x61, 0x63, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x74, 0x6c, 0x5f, 0x6d, + 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x74, 0x74, 0x6c, 0x4d, 0x69, 0x6e, + 0x22, 0x4b, 0x0a, 0x0c, 0x45, 0x62, 0x67, 0x70, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x68, 0x6f, 0x70, + 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x75, + 0x6c, 0x74, 0x69, 0x68, 0x6f, 0x70, 0x5f, 0x74, 0x74, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x68, 0x6f, 0x70, 0x54, 0x74, 0x6c, 0x22, 0x83, 0x01, + 0x0a, 0x0e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x12, 0x34, 0x0a, 0x16, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x14, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x1a, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, + 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x72, 0x6f, 0x75, 0x74, + 0x65, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x49, 0x64, 0x22, 0xa7, 0x07, 0x0a, 0x09, 0x50, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x75, 0x74, 0x68, 0x50, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x41, 0x73, 0x6e, 0x12, 0x2b, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x5f, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6e, 0x65, + 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x19, 0x0a, + 0x08, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x07, 0x70, 0x65, 0x65, 0x72, 0x41, 0x73, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x65, 0x65, 0x72, + 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x65, + 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x65, + 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x06, + 0x71, 0x75, 0x65, 0x75, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x51, 0x75, 0x65, 0x75, 0x65, 0x73, 0x52, 0x06, 0x71, 0x75, 0x65, + 0x75, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x70, 0x5f, 0x64, + 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x72, 0x6f, + 0x75, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x70, 0x44, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x25, + 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, + 0x75, 0x6e, 0x69, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x0d, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x73, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x61, 0x64, 0x6d, + 0x69, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, + 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x61, 0x64, 0x6d, + 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x13, 0x0a, 0x05, 0x6f, 0x75, 0x74, 0x5f, 0x71, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x6f, 0x75, 0x74, 0x51, 0x12, 0x14, 0x0a, 0x05, + 0x66, 0x6c, 0x6f, 0x70, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x6f, + 0x70, 0x73, 0x12, 0x30, 0x0a, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x70, + 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x43, + 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x43, 0x61, 0x70, 0x12, 0x2e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x63, 0x61, + 0x70, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x43, 0x61, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, + 0x64, 0x22, 0x6e, 0x0a, 0x0c, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, + 0x0a, 0x04, 0x49, 0x44, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4f, 0x4e, 0x4e, + 0x45, 0x43, 0x54, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, + 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x4f, 0x50, 0x45, 0x4e, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x04, 0x12, + 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x45, 0x4e, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d, 0x10, 0x05, + 0x12, 0x0f, 0x0a, 0x0b, 0x45, 0x53, 0x54, 0x41, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, + 0x06, 0x22, 0x2a, 0x0a, 0x0a, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x06, 0x0a, 0x02, 0x55, 0x50, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x10, + 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x46, 0x58, 0x5f, 0x43, 0x54, 0x10, 0x02, 0x22, 0x5a, 0x0a, + 0x08, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x08, 0x72, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x72, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x52, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x22, 0x97, 0x02, 0x0a, 0x07, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, + 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6b, 0x65, 0x65, 0x70, 0x61, 0x6c, + 0x69, 0x76, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x12, 0x1c, 0x0a, + 0x09, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x09, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x5f, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x77, 0x69, 0x74, 0x68, + 0x64, 0x72, 0x61, 0x77, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0e, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x50, 0x72, 0x65, + 0x66, 0x69, 0x78, 0x22, 0x36, 0x0a, 0x06, 0x51, 0x75, 0x65, 0x75, 0x65, 0x73, 0x12, 0x14, 0x0a, + 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, + 0x70, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x5f, 0x0a, 0x06, 0x54, + 0x69, 0x6d, 0x65, 0x72, 0x73, 0x12, 0x2b, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x72, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x28, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x73, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x81, 0x02, 0x0a, + 0x0c, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x0a, + 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x74, + 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x68, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x2d, 0x0a, 0x12, 0x6b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x5f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x6b, 0x65, 0x65, + 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x44, + 0x0a, 0x1e, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, + 0x69, 0x73, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1c, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x41, + 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x76, 0x61, 0x6c, 0x12, 0x3a, 0x0a, 0x1a, 0x69, 0x64, 0x6c, 0x65, 0x5f, 0x68, 0x6f, 0x6c, + 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x73, + 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x69, 0x64, 0x6c, 0x65, 0x48, 0x6f, + 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x65, 0x74, + 0x22, 0xe2, 0x02, 0x0a, 0x0b, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x74, 0x72, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x68, 0x6f, 0x6c, 0x64, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x6b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x5f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, + 0x6b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, + 0x6c, 0x12, 0x44, 0x0a, 0x1e, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x61, 0x64, 0x76, + 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x76, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1c, 0x6d, 0x69, 0x6e, 0x69, 0x6d, + 0x75, 0x6d, 0x41, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x30, 0x0a, 0x14, 0x6e, 0x65, 0x67, 0x6f, 0x74, + 0x69, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x6e, 0x65, 0x67, 0x6f, 0x74, 0x69, 0x61, 0x74, 0x65, + 0x64, 0x48, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x75, 0x70, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x36, 0x0a, + 0x08, 0x64, 0x6f, 0x77, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x64, 0x6f, 0x77, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x9f, 0x02, 0x0a, 0x09, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, + 0x6f, 0x72, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x74, 0x75, 0x5f, 0x64, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, + 0x6d, 0x74, 0x75, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x12, 0x21, 0x0a, 0x0c, + 0x70, 0x61, 0x73, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0b, 0x70, 0x61, 0x73, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, + 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x63, 0x70, 0x5f, 0x6d, + 0x73, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x74, 0x63, 0x70, 0x4d, 0x73, 0x73, + 0x12, 0x25, 0x0a, 0x0e, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x62, 0x69, 0x6e, 0x64, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x66, 0x0a, 0x0b, 0x52, 0x6f, 0x75, 0x74, 0x65, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x11, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x61, 0x72, 0x79, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x22, + 0xb4, 0x03, 0x0a, 0x0f, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x21, 0x0a, + 0x0c, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x4f, 0x6e, 0x6c, + 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x65, 0x72, 0x72, 0x61, 0x6c, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x65, 0x72, 0x72, + 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x14, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x6c, 0x6f, 0x6e, + 0x67, 0x6c, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x69, 0x76, 0x65, 0x64, 0x45, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x5f, + 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x70, + 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x27, + 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, + 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x70, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x29, 0x0a, 0x10, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x5f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, + 0x6e, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x33, 0x0a, 0x17, 0x4d, 0x70, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3a, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, - 0x2e, 0x4c, 0x6f, 0x6e, 0x67, 0x4c, 0x69, 0x76, 0x65, 0x64, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, + 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x16, + 0x4d, 0x70, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, + 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0a, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x12, 0x2d, 0x0a, 0x13, + 0x65, 0x6e, 0x64, 0x5f, 0x6f, 0x66, 0x5f, 0x72, 0x69, 0x62, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x64, 0x4f, 0x66, + 0x52, 0x69, 0x62, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0f, 0x65, + 0x6e, 0x64, 0x5f, 0x6f, 0x66, 0x5f, 0x72, 0x69, 0x62, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x65, 0x6e, 0x64, 0x4f, 0x66, 0x52, 0x69, 0x62, 0x53, 0x65, + 0x6e, 0x74, 0x22, 0x80, 0x01, 0x0a, 0x11, 0x4d, 0x70, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, + 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x36, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x4d, 0x70, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x33, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x70, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x9d, 0x05, 0x0a, 0x07, 0x41, 0x66, 0x69, 0x53, 0x61, 0x66, - 0x69, 0x12, 0x48, 0x0a, 0x13, 0x6d, 0x70, 0x5f, 0x67, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, - 0x5f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x70, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, - 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x11, 0x6d, 0x70, 0x47, 0x72, 0x61, 0x63, - 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x06, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, - 0x69, 0x70, 0x62, 0x2e, 0x41, 0x66, 0x69, 0x53, 0x61, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x29, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, - 0x2e, 0x41, 0x66, 0x69, 0x53, 0x61, 0x66, 0x69, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x35, 0x0a, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0b, - 0x61, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x54, 0x0a, 0x17, 0x72, - 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x15, 0x72, 0x6f, 0x75, 0x74, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x50, 0x0a, 0x0d, 0x41, 0x66, 0x69, 0x53, 0x61, 0x66, 0x69, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x0a, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, + 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x18, 0x0a, + 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xa7, 0x01, 0x0a, 0x0c, 0x41, 0x66, 0x69, 0x53, + 0x61, 0x66, 0x69, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x25, 0x0a, 0x06, 0x66, 0x61, 0x6d, 0x69, + 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, + 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x72, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, + 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, + 0x64, 0x22, 0x93, 0x03, 0x0a, 0x1b, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, + 0x6c, 0x77, 0x61, 0x79, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4d, 0x65, 0x64, 0x12, + 0x31, 0x0a, 0x15, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x73, 0x5f, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, + 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x41, 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x12, 0x3b, 0x0a, 0x1a, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x3a, 0x0a, 0x19, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x61, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x17, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x49, 0x6e, 0x61, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x69, 0x67, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0a, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x69, 0x67, 0x70, 0x12, 0x3a, 0x0a, 0x1a, + 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x68, 0x6f, 0x70, 0x5f, + 0x69, 0x67, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x16, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x49, + 0x67, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x3d, 0x0a, 0x1b, 0x64, 0x69, 0x73, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x73, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x64, + 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x73, 0x74, 0x50, 0x61, 0x74, 0x68, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x92, 0x03, 0x0a, 0x1a, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x45, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, - 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x55, 0x73, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, - 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, 0x52, 0x10, 0x75, 0x73, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x70, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x37, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x66, - 0x69, 0x78, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x52, 0x0c, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, - 0x73, 0x12, 0x54, 0x0a, 0x17, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, + 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, + 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x10, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, + 0x65, 0x4d, 0x65, 0x64, 0x12, 0x31, 0x0a, 0x15, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x61, + 0x73, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x12, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x41, 0x73, 0x50, 0x61, 0x74, + 0x68, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x3b, 0x0a, 0x1a, 0x65, 0x78, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x72, 0x6f, 0x75, 0x74, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x52, 0x6f, 0x75, 0x74, + 0x65, 0x72, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x19, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, + 0x65, 0x5f, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, + 0x73, 0x65, 0x49, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, + 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x69, 0x67, 0x70, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x69, 0x67, + 0x70, 0x12, 0x3a, 0x0a, 0x1a, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x65, 0x78, 0x74, + 0x5f, 0x68, 0x6f, 0x70, 0x5f, 0x69, 0x67, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4e, 0x65, 0x78, + 0x74, 0x48, 0x6f, 0x70, 0x49, 0x67, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x3d, 0x0a, + 0x1b, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x18, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x73, 0x74, 0x50, + 0x61, 0x74, 0x68, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8c, 0x01, 0x0a, + 0x15, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, + 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x37, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x32, 0x0a, 0x16, 0x55, + 0x73, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, + 0x31, 0x0a, 0x15, 0x55, 0x73, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x50, 0x61, + 0x74, 0x68, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x22, 0x5f, 0x0a, 0x0a, 0x45, 0x62, 0x67, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, + 0x6c, 0x65, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x6c, + 0x6c, 0x6f, 0x77, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x41, 0x73, 0x6e, 0x12, 0x23, + 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x50, 0x61, + 0x74, 0x68, 0x73, 0x22, 0x5e, 0x0a, 0x09, 0x45, 0x62, 0x67, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, + 0x6c, 0x65, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x6c, + 0x6c, 0x6f, 0x77, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x41, 0x73, 0x6e, 0x12, 0x23, + 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x50, 0x61, + 0x74, 0x68, 0x73, 0x22, 0x59, 0x0a, 0x04, 0x45, 0x62, 0x67, 0x70, 0x12, 0x29, 0x0a, 0x06, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x45, 0x62, 0x67, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x26, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x62, + 0x67, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x31, + 0x0a, 0x0a, 0x49, 0x62, 0x67, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x0a, 0x0d, + 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x50, 0x61, 0x74, 0x68, + 0x73, 0x22, 0x30, 0x0a, 0x09, 0x49, 0x62, 0x67, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, + 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x50, 0x61, + 0x74, 0x68, 0x73, 0x22, 0x59, 0x0a, 0x04, 0x49, 0x62, 0x67, 0x70, 0x12, 0x29, 0x0a, 0x06, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x49, 0x62, 0x67, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x26, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x49, 0x62, + 0x67, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0xbf, + 0x01, 0x0a, 0x10, 0x55, 0x73, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x50, 0x61, + 0x74, 0x68, 0x73, 0x12, 0x35, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x55, 0x73, 0x65, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x55, 0x73, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x50, 0x61, 0x74, + 0x68, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1f, + 0x0a, 0x04, 0x65, 0x62, 0x67, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x62, 0x67, 0x70, 0x52, 0x04, 0x65, 0x62, 0x67, 0x70, 0x12, + 0x1f, 0x0a, 0x04, 0x69, 0x62, 0x67, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x49, 0x62, 0x67, 0x70, 0x52, 0x04, 0x69, 0x62, 0x67, 0x70, + 0x22, 0x42, 0x0a, 0x1b, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x65, 0x72, 0x72, 0x61, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x65, 0x72, 0x72, 0x61, 0x6c, + 0x54, 0x69, 0x6d, 0x65, 0x22, 0x41, 0x0a, 0x1a, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x65, 0x72, 0x72, 0x61, 0x6c, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x65, 0x72, + 0x72, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x8c, 0x01, 0x0a, 0x15, 0x52, 0x6f, 0x75, 0x74, + 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, + 0x70, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x5d, 0x0a, 0x1e, 0x4c, 0x6f, 0x6e, 0x67, 0x4c, 0x69, + 0x76, 0x65, 0x64, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xde, 0x01, 0x0a, 0x1d, 0x4c, 0x6f, 0x6e, 0x67, 0x4c, 0x69, + 0x76, 0x65, 0x64, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x1e, 0x0a, + 0x0a, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0a, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x12, 0x2a, 0x0a, + 0x11, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x65, 0x65, + 0x72, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x5f, + 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x70, + 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x45, + 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x22, 0x95, 0x01, 0x0a, 0x18, 0x4c, 0x6f, 0x6e, 0x67, 0x4c, + 0x69, 0x76, 0x65, 0x64, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x6e, 0x67, + 0x4c, 0x69, 0x76, 0x65, 0x64, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x3a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x6e, 0x67, 0x4c, 0x69, + 0x76, 0x65, 0x64, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x9d, + 0x05, 0x0a, 0x07, 0x41, 0x66, 0x69, 0x53, 0x61, 0x66, 0x69, 0x12, 0x48, 0x0a, 0x13, 0x6d, 0x70, + 0x5f, 0x67, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x4d, 0x70, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x52, 0x11, 0x6d, 0x70, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x66, 0x69, + 0x53, 0x61, 0x66, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x29, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x66, 0x69, 0x53, 0x61, 0x66, + 0x69, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x35, 0x0a, + 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x6c, + 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x12, 0x54, 0x0a, 0x17, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x73, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, + 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x15, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x45, 0x0a, 0x12, 0x75, 0x73, + 0x65, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x55, + 0x73, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, 0x52, + 0x10, 0x75, 0x73, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, + 0x73, 0x12, 0x37, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x0c, 0x70, 0x72, + 0x65, 0x66, 0x69, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x54, 0x0a, 0x17, 0x72, 0x6f, + 0x75, 0x74, 0x65, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x68, 0x69, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x15, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, - 0x52, 0x15, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x5e, 0x0a, 0x1b, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, - 0x6c, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x67, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x5f, 0x72, - 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x6e, 0x67, 0x4c, 0x69, 0x76, 0x65, 0x64, 0x47, 0x72, - 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x18, 0x6c, - 0x6f, 0x6e, 0x67, 0x4c, 0x69, 0x76, 0x65, 0x64, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, - 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x5f, 0x70, - 0x61, 0x74, 0x68, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x61, 0x74, 0x68, 0x73, 0x52, 0x08, 0x61, 0x64, 0x64, - 0x50, 0x61, 0x74, 0x68, 0x73, 0x22, 0x45, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x50, 0x61, 0x74, 0x68, - 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, - 0x65, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x44, 0x0a, 0x0d, - 0x41, 0x64, 0x64, 0x50, 0x61, 0x74, 0x68, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x5f, - 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x4d, - 0x61, 0x78, 0x22, 0x65, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x2d, - 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x61, 0x74, 0x68, 0x73, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x61, 0x74, 0x68, 0x73, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x75, 0x0a, 0x06, 0x50, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x70, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x70, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, - 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x61, 0x73, 0x6b, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, - 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6d, 0x61, 0x73, 0x6b, 0x4c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x4d, 0x69, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x61, 0x73, 0x6b, - 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0d, 0x6d, 0x61, 0x73, 0x6b, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x4d, 0x61, 0x78, - 0x22, 0x96, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x53, 0x65, 0x74, 0x12, - 0x35, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, - 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, - 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x29, - 0x0a, 0x08, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, - 0x08, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x22, 0x6e, 0x0a, 0x08, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x53, 0x65, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x53, 0x65, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x12, 0x5e, 0x0a, 0x1b, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x6c, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x67, + 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x6f, + 0x6e, 0x67, 0x4c, 0x69, 0x76, 0x65, 0x64, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, + 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x18, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x69, 0x76, 0x65, + 0x64, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x12, 0x2c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, + 0x61, 0x74, 0x68, 0x73, 0x52, 0x08, 0x61, 0x64, 0x64, 0x50, 0x61, 0x74, 0x68, 0x73, 0x22, 0x45, + 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x50, 0x61, 0x74, 0x68, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x65, + 0x6e, 0x64, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x65, + 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x44, 0x0a, 0x0d, 0x41, 0x64, 0x64, 0x50, 0x61, 0x74, 0x68, + 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x12, 0x19, 0x0a, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x22, 0x65, 0x0a, 0x08, 0x41, + 0x64, 0x64, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x2d, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x41, 0x64, 0x64, 0x50, 0x61, 0x74, 0x68, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, + 0x64, 0x50, 0x61, 0x74, 0x68, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x22, 0x75, 0x0a, 0x06, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x1b, 0x0a, 0x09, + 0x69, 0x70, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x69, 0x70, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x61, 0x73, + 0x6b, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0d, 0x6d, 0x61, 0x73, 0x6b, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x4d, 0x69, + 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x61, 0x73, 0x6b, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6d, 0x61, 0x73, 0x6b, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x4d, 0x61, 0x78, 0x22, 0x96, 0x01, 0x0a, 0x0a, 0x44, 0x65, + 0x66, 0x69, 0x6e, 0x65, 0x64, 0x53, 0x65, 0x74, 0x12, 0x35, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x69, + 0x6e, 0x65, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, + 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x41, - 0x4e, 0x59, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x01, 0x12, 0x0a, 0x0a, - 0x06, 0x49, 0x4e, 0x56, 0x45, 0x52, 0x54, 0x10, 0x02, 0x22, 0x74, 0x0a, 0x0c, 0x41, 0x73, 0x50, - 0x61, 0x74, 0x68, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x2c, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, - 0x41, 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2e, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x1e, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x06, 0x0a, 0x02, 0x45, 0x51, 0x10, 0x00, 0x12, - 0x06, 0x0a, 0x02, 0x47, 0x45, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x4c, 0x45, 0x10, 0x02, 0x22, - 0x76, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, - 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x1e, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x06, 0x0a, 0x02, 0x45, 0x51, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x47, 0x45, 0x10, 0x01, 0x12, - 0x06, 0x0a, 0x02, 0x4c, 0x45, 0x10, 0x02, 0x22, 0x9f, 0x06, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2e, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, - 0x5f, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x74, 0x52, 0x09, 0x70, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x53, 0x65, 0x74, 0x12, 0x32, 0x0a, 0x0c, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, - 0x6f, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x74, 0x52, 0x0b, 0x6e, - 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x53, 0x65, 0x74, 0x12, 0x39, 0x0a, 0x0e, 0x61, 0x73, - 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x73, 0x50, 0x61, 0x74, - 0x68, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x52, 0x0c, 0x61, 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x2f, 0x0a, 0x0b, 0x61, 0x73, 0x5f, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x74, 0x52, 0x09, 0x61, 0x73, 0x50, - 0x61, 0x74, 0x68, 0x53, 0x65, 0x74, 0x12, 0x34, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, - 0x69, 0x74, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, - 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x74, 0x52, 0x0c, - 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x53, 0x65, 0x74, 0x12, 0x3b, 0x0a, 0x11, - 0x65, 0x78, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x73, 0x65, - 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x74, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6d, - 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x53, 0x65, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x70, 0x6b, - 0x69, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x72, 0x70, 0x6b, 0x69, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3a, 0x0a, 0x0a, 0x72, 0x6f, - 0x75, 0x74, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, - 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x72, 0x6f, 0x75, - 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3f, 0x0a, 0x13, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x5f, - 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x09, 0x20, + 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x08, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, + 0x65, 0x73, 0x22, 0x6e, 0x0a, 0x08, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x74, 0x12, 0x28, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x74, 0x2e, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, 0x04, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4e, 0x59, 0x10, 0x00, 0x12, 0x07, 0x0a, + 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x49, 0x4e, 0x56, 0x45, 0x52, 0x54, + 0x10, 0x02, 0x22, 0x74, 0x0a, 0x0c, 0x41, 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x12, 0x2c, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x1e, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x06, 0x0a, 0x02, 0x45, 0x51, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x47, 0x45, 0x10, 0x01, + 0x12, 0x06, 0x0a, 0x02, 0x4c, 0x45, 0x10, 0x02, 0x22, 0x76, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x6d, + 0x75, 0x6e, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x2e, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x22, 0x1e, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x06, 0x0a, 0x02, 0x45, 0x51, 0x10, 0x00, + 0x12, 0x06, 0x0a, 0x02, 0x47, 0x45, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x4c, 0x45, 0x10, 0x02, + 0x22, 0x9f, 0x06, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x2e, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x53, 0x65, 0x74, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x53, 0x65, 0x74, 0x12, + 0x32, 0x0a, 0x0c, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x53, 0x65, 0x74, 0x52, 0x0b, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, + 0x53, 0x65, 0x74, 0x12, 0x39, 0x0a, 0x0e, 0x61, 0x73, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x6c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x41, 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x52, 0x0c, 0x61, 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x2f, + 0x0a, 0x0b, 0x61, 0x73, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x53, 0x65, 0x74, 0x52, 0x11, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x75, - 0x6e, 0x69, 0x74, 0x79, 0x53, 0x65, 0x74, 0x12, 0x27, 0x0a, 0x10, 0x6e, 0x65, 0x78, 0x74, 0x5f, - 0x68, 0x6f, 0x70, 0x5f, 0x69, 0x6e, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x0a, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x48, 0x6f, 0x70, 0x49, 0x6e, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x2d, 0x0a, 0x0b, 0x61, 0x66, 0x69, 0x5f, 0x73, 0x61, 0x66, 0x69, 0x5f, 0x69, 0x6e, 0x18, - 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x61, - 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x09, 0x61, 0x66, 0x69, 0x53, 0x61, 0x66, 0x69, 0x49, 0x6e, 0x12, - 0x3e, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, - 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, - 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x2e, 0x0a, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x22, - 0x68, 0x0a, 0x09, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, - 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, - 0x00, 0x12, 0x17, 0x0a, 0x13, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x52, 0x4f, - 0x55, 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, - 0x4c, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x10, 0x03, 0x22, 0x8e, 0x01, 0x0a, 0x0f, 0x43, 0x6f, - 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x61, 0x70, - 0x69, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, - 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x22, 0x28, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x44, 0x44, 0x10, - 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, - 0x07, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x10, 0x02, 0x22, 0x6a, 0x0a, 0x09, 0x4d, 0x65, - 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x65, - 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x1c, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x4f, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x50, - 0x4c, 0x41, 0x43, 0x45, 0x10, 0x01, 0x22, 0x5f, 0x0a, 0x0f, 0x41, 0x73, 0x50, 0x72, 0x65, 0x70, - 0x65, 0x6e, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, - 0x6d, 0x6f, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x4c, - 0x65, 0x66, 0x74, 0x4d, 0x6f, 0x73, 0x74, 0x22, 0x7e, 0x0a, 0x0d, 0x4e, 0x65, 0x78, 0x74, 0x68, - 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, + 0x68, 0x53, 0x65, 0x74, 0x52, 0x09, 0x61, 0x73, 0x50, 0x61, 0x74, 0x68, 0x53, 0x65, 0x74, 0x12, + 0x34, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x73, 0x65, 0x74, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x74, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x53, 0x65, 0x74, 0x12, 0x3b, 0x0a, 0x11, 0x65, 0x78, 0x74, 0x5f, 0x63, 0x6f, 0x6d, + 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, + 0x74, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x53, + 0x65, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x70, 0x6b, 0x69, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x70, 0x6b, 0x69, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x3a, 0x0a, 0x0a, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x3f, 0x0a, 0x13, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x74, 0x52, 0x11, 0x6c, + 0x61, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x53, 0x65, 0x74, + 0x12, 0x27, 0x0a, 0x10, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x68, 0x6f, 0x70, 0x5f, 0x69, 0x6e, 0x5f, + 0x6c, 0x69, 0x73, 0x74, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, + 0x48, 0x6f, 0x70, 0x49, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x0b, 0x61, 0x66, 0x69, + 0x5f, 0x73, 0x61, 0x66, 0x69, 0x5f, 0x69, 0x6e, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, + 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x09, 0x61, + 0x66, 0x69, 0x53, 0x61, 0x66, 0x69, 0x49, 0x6e, 0x12, 0x3e, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, + 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, + 0x69, 0x74, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, + 0x69, 0x74, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x06, 0x6f, 0x72, 0x69, 0x67, + 0x69, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x22, 0x68, 0x0a, 0x09, 0x52, 0x6f, 0x75, 0x74, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x52, 0x4f, + 0x55, 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, + 0x4c, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, + 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x4c, + 0x10, 0x03, 0x22, 0x8e, 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, + 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x28, 0x0a, 0x04, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x44, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, + 0x4d, 0x4f, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, + 0x45, 0x10, 0x02, 0x22, 0x6a, 0x0a, 0x09, 0x4d, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x29, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, + 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x1c, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x4f, 0x44, + 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x10, 0x01, 0x22, + 0x5f, 0x0a, 0x0f, 0x41, 0x73, 0x50, 0x72, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x03, 0x61, 0x73, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x12, 0x22, 0x0a, 0x0d, + 0x75, 0x73, 0x65, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x6d, 0x6f, 0x73, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x4c, 0x65, 0x66, 0x74, 0x4d, 0x6f, 0x73, 0x74, + 0x22, 0x7e, 0x0a, 0x0d, 0x4e, 0x65, 0x78, 0x74, 0x68, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x73, + 0x65, 0x6c, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x12, + 0x1c, 0x0a, 0x09, 0x75, 0x6e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x75, 0x6e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x21, 0x0a, + 0x0c, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x22, 0x27, 0x0a, 0x0f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x72, 0x65, 0x66, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x0a, 0x0c, 0x4f, 0x72, 0x69, + 0x67, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x06, 0x6f, 0x72, 0x69, + 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x22, 0xf0, 0x03, 0x0a, 0x07, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x35, 0x0a, 0x0c, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x09, + 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, + 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x12, 0x22, 0x0a, 0x03, 0x6d, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x03, 0x6d, 0x65, 0x64, 0x12, 0x35, 0x0a, 0x0a, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x65, + 0x70, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, + 0x70, 0x62, 0x2e, 0x41, 0x73, 0x50, 0x72, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x09, 0x61, 0x73, 0x50, 0x72, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x3b, 0x0a, + 0x0d, 0x65, 0x78, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x12, 0x2e, 0x0a, 0x07, 0x6e, 0x65, + 0x78, 0x74, 0x68, 0x6f, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x68, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x07, 0x6e, 0x65, 0x78, 0x74, 0x68, 0x6f, 0x70, 0x12, 0x35, 0x0a, 0x0a, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x72, 0x65, 0x66, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x72, 0x65, + 0x66, 0x12, 0x3f, 0x0a, 0x0f, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, + 0x6e, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, + 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x0e, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x12, 0x38, 0x0a, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, + 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7c, 0x0a, 0x09, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, + 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x4e, 0x0a, 0x06, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x10, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, + 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x08, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x69, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0x70, 0x0a, 0x0d, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x12, 0x34, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, + 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x53, 0x65, 0x74, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x69, 0x6e, + 0x65, 0x64, 0x53, 0x65, 0x74, 0x73, 0x12, 0x29, 0x0a, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, + 0x73, 0x22, 0x8a, 0x01, 0x0a, 0x03, 0x52, 0x6f, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x70, + 0x72, 0x65, 0x66, 0x69, 0x78, 0x6c, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, + 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x6c, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, + 0x6c, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x6c, 0x65, + 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x23, 0x0a, 0x04, 0x63, 0x6f, 0x6e, + 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x52, 0x50, 0x4b, 0x49, 0x43, 0x6f, 0x6e, 0x66, 0x52, 0x04, 0x63, 0x6f, 0x6e, 0x66, 0x22, 0xb6, + 0x01, 0x0a, 0x03, 0x56, 0x72, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x02, 0x72, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, + 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, + 0x72, 0x52, 0x02, 0x72, 0x64, 0x12, 0x2f, 0x0a, 0x09, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, + 0x72, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x08, 0x69, 0x6d, + 0x70, 0x6f, 0x72, 0x74, 0x52, 0x74, 0x12, 0x2f, 0x0a, 0x09, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, + 0x5f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x08, 0x65, + 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x86, 0x01, 0x0a, 0x14, 0x44, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x12, 0x36, 0x0a, 0x17, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x72, 0x6f, 0x75, + 0x74, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x15, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x6f, 0x75, 0x74, 0x65, + 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x22, 0xd8, 0x04, 0x0a, 0x06, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x61, + 0x73, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, 0x6e, 0x12, 0x1b, 0x0a, + 0x09, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0a, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x6c, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x69, + 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x08, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x69, + 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, + 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, + 0x75, 0x73, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, + 0x12, 0x5a, 0x0a, 0x17, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x15, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x51, 0x0a, 0x16, + 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x69, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x75, 0x74, + 0x65, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x14, 0x64, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, + 0x3a, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x43, + 0x6f, 0x6e, 0x66, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x63, 0x6f, + 0x6e, 0x66, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x10, 0x67, + 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x47, 0x72, + 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x0f, 0x67, + 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x35, + 0x0a, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, + 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x74, 0x6f, + 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, + 0x69, 0x6e, 0x64, 0x54, 0x6f, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x6f, 0x0a, 0x0d, 0x43, + 0x6f, 0x6e, 0x66, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x5f, 0x61, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0c, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x41, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x45, 0x0a, 0x08, + 0x52, 0x50, 0x4b, 0x49, 0x43, 0x6f, 0x6e, 0x66, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x6e, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x75, 0x6e, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x65, 0x65, 0x72, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x27, 0x0a, 0x0f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, - 0x50, 0x72, 0x65, 0x66, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x3e, 0x0a, 0x0c, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x2e, 0x0a, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4f, 0x72, - 0x69, 0x67, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, - 0x22, 0xf0, 0x03, 0x0a, 0x07, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x35, 0x0a, 0x0c, - 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, - 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x03, 0x6d, 0x65, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, - 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x6d, 0x65, 0x64, 0x12, 0x35, 0x0a, - 0x0a, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x73, 0x50, 0x72, 0x65, 0x70, - 0x65, 0x6e, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x61, 0x73, 0x50, 0x72, 0x65, - 0x70, 0x65, 0x6e, 0x64, 0x12, 0x3b, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, - 0x75, 0x6e, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, - 0x69, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, - 0x79, 0x12, 0x2e, 0x0a, 0x07, 0x6e, 0x65, 0x78, 0x74, 0x68, 0x6f, 0x70, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x68, - 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x6e, 0x65, 0x78, 0x74, 0x68, 0x6f, - 0x70, 0x12, 0x35, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x6f, - 0x63, 0x61, 0x6c, 0x50, 0x72, 0x65, 0x66, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x72, 0x65, 0x66, 0x12, 0x3f, 0x0a, 0x0f, 0x6c, 0x61, 0x72, 0x67, - 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, - 0x69, 0x74, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6c, 0x61, 0x72, 0x67, 0x65, - 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x12, 0x38, 0x0a, 0x0d, 0x6f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x7c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, - 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0a, 0x63, 0x6f, 0x6e, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, - 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x22, 0x4e, 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x30, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x10, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x73, 0x73, 0x69, - 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, - 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x29, 0x0a, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x0e, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x70, 0x0a, 0x0d, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, - 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x34, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x65, 0x64, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, - 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x53, 0x65, 0x74, - 0x52, 0x0b, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x53, 0x65, 0x74, 0x73, 0x12, 0x29, 0x0a, - 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x08, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x22, 0x8a, 0x01, 0x0a, 0x03, 0x52, 0x6f, 0x61, - 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, - 0x73, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x6c, 0x65, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x6c, 0x65, 0x6e, - 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x6c, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x06, 0x6d, 0x61, 0x78, 0x6c, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, - 0x69, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, - 0x12, 0x23, 0x0a, 0x04, 0x63, 0x6f, 0x6e, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, - 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x4b, 0x49, 0x43, 0x6f, 0x6e, 0x66, 0x52, - 0x04, 0x63, 0x6f, 0x6e, 0x66, 0x22, 0xb5, 0x01, 0x0a, 0x03, 0x56, 0x72, 0x66, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x24, 0x0a, 0x02, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x41, 0x6e, 0x79, 0x52, 0x02, 0x72, 0x64, 0x12, 0x31, 0x0a, 0x09, 0x69, 0x6d, 0x70, 0x6f, 0x72, - 0x74, 0x5f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, - 0x52, 0x08, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x74, 0x12, 0x31, 0x0a, 0x09, 0x65, 0x78, - 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x41, 0x6e, 0x79, 0x52, 0x08, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x86, 0x01, - 0x0a, 0x14, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x36, - 0x0a, 0x17, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, - 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x15, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, 0xd8, 0x04, 0x0a, 0x06, 0x47, 0x6c, 0x6f, 0x62, 0x61, - 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, - 0x61, 0x73, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x50, 0x6f, 0x72, - 0x74, 0x12, 0x29, 0x0a, 0x10, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, - 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x08, - 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x5f, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x75, 0x73, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, - 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x5a, 0x0a, 0x17, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, - 0x52, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x15, 0x72, 0x6f, 0x75, - 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x51, 0x0a, 0x16, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x72, 0x6f, - 0x75, 0x74, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, - 0x14, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x65, 0x64, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x41, 0x0a, 0x10, 0x67, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x5f, 0x72, 0x65, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, - 0x69, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x52, 0x0f, 0x67, 0x72, 0x61, 0x63, 0x65, 0x66, 0x75, 0x6c, 0x52, 0x65, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x12, 0x35, 0x0a, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0b, - 0x61, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x62, - 0x69, 0x6e, 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x69, 0x6e, 0x64, 0x54, 0x6f, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x22, 0x6f, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x66, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0e, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x61, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x41, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x22, 0x45, 0x0a, 0x08, 0x52, 0x50, 0x4b, 0x49, 0x43, 0x6f, 0x6e, 0x66, 0x12, 0x18, - 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x6d, 0x6f, - 0x74, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x22, 0xd4, 0x04, 0x0a, 0x09, 0x52, 0x50, - 0x4b, 0x49, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x73, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x70, 0x6f, 0x72, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50, + 0x6f, 0x72, 0x74, 0x22, 0xd4, 0x04, 0x0a, 0x09, 0x52, 0x50, 0x4b, 0x49, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x32, 0x0a, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x06, 0x75, + 0x70, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x64, 0x6f, 0x77, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x64, - 0x6f, 0x77, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x64, 0x6f, 0x77, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x02, 0x75, 0x70, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x69, 0x70, - 0x76, 0x34, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x49, 0x70, 0x76, 0x34, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x69, - 0x70, 0x76, 0x36, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x49, 0x70, 0x76, 0x36, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, - 0x69, 0x70, 0x76, 0x34, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x66, - 0x69, 0x78, 0x49, 0x70, 0x76, 0x34, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, - 0x5f, 0x69, 0x70, 0x76, 0x36, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x49, 0x70, 0x76, 0x36, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x69, 0x61, - 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x12, - 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x70, 0x76, 0x34, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, - 0x49, 0x70, 0x76, 0x34, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, - 0x5f, 0x69, 0x70, 0x76, 0x36, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x65, 0x64, 0x49, 0x70, 0x76, 0x36, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x72, - 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x12, 0x1f, - 0x0a, 0x0b, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x61, 0x63, 0x68, 0x65, 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, - 0x25, 0x0a, 0x0e, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0b, 0x65, 0x6e, 0x64, 0x5f, 0x6f, 0x66, - 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x6e, 0x64, - 0x4f, 0x66, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x0c, - 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, - 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x11, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x22, 0x53, 0x0a, 0x04, 0x52, 0x70, 0x6b, 0x69, 0x12, 0x23, 0x0a, 0x04, 0x63, 0x6f, 0x6e, 0x66, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, - 0x50, 0x4b, 0x49, 0x43, 0x6f, 0x6e, 0x66, 0x52, 0x04, 0x63, 0x6f, 0x6e, 0x66, 0x12, 0x26, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x4b, 0x49, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x9f, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x4c, 0x6f, 0x67, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x05, - 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x61, 0x70, - 0x69, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x65, - 0x76, 0x65, 0x6c, 0x22, 0x52, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, - 0x50, 0x41, 0x4e, 0x49, 0x43, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x54, 0x41, 0x4c, - 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x08, 0x0a, - 0x04, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, - 0x04, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x05, 0x12, 0x09, 0x0a, 0x05, - 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x06, 0x2a, 0x44, 0x0a, 0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x10, 0x00, - 0x12, 0x09, 0x0a, 0x05, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x41, - 0x44, 0x4a, 0x5f, 0x49, 0x4e, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x44, 0x4a, 0x5f, 0x4f, - 0x55, 0x54, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x56, 0x52, 0x46, 0x10, 0x04, 0x2a, 0x26, 0x0a, - 0x08, 0x50, 0x65, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x54, - 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x58, 0x54, 0x45, 0x52, - 0x4e, 0x41, 0x4c, 0x10, 0x01, 0x2a, 0x3d, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, - 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x45, 0x4d, 0x4f, 0x56, - 0x45, 0x5f, 0x41, 0x4c, 0x4c, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x50, 0x4c, 0x41, - 0x43, 0x45, 0x10, 0x02, 0x2a, 0x82, 0x01, 0x0a, 0x0b, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x52, 0x45, 0x46, 0x49, 0x58, 0x10, 0x00, - 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x45, 0x49, 0x47, 0x48, 0x42, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x07, - 0x0a, 0x03, 0x54, 0x41, 0x47, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x53, 0x5f, 0x50, 0x41, - 0x54, 0x48, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4d, 0x4d, 0x55, 0x4e, 0x49, 0x54, - 0x59, 0x10, 0x04, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x58, 0x54, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x55, - 0x4e, 0x49, 0x54, 0x59, 0x10, 0x05, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x41, 0x52, 0x47, 0x45, 0x5f, - 0x43, 0x4f, 0x4d, 0x4d, 0x55, 0x4e, 0x49, 0x54, 0x59, 0x10, 0x06, 0x12, 0x0c, 0x0a, 0x08, 0x4e, - 0x45, 0x58, 0x54, 0x5f, 0x48, 0x4f, 0x50, 0x10, 0x07, 0x2a, 0x59, 0x0a, 0x0f, 0x52, 0x6f, 0x75, - 0x74, 0x65, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, - 0x4f, 0x52, 0x49, 0x47, 0x49, 0x4e, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0e, 0x0a, - 0x0a, 0x4f, 0x52, 0x49, 0x47, 0x49, 0x4e, 0x5f, 0x49, 0x47, 0x50, 0x10, 0x01, 0x12, 0x0e, 0x0a, - 0x0a, 0x4f, 0x52, 0x49, 0x47, 0x49, 0x4e, 0x5f, 0x45, 0x47, 0x50, 0x10, 0x02, 0x12, 0x15, 0x0a, - 0x11, 0x4f, 0x52, 0x49, 0x47, 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, - 0x54, 0x45, 0x10, 0x03, 0x2a, 0x2f, 0x0a, 0x0b, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, - 0x06, 0x41, 0x43, 0x43, 0x45, 0x50, 0x54, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x4a, - 0x45, 0x43, 0x54, 0x10, 0x02, 0x2a, 0x36, 0x0a, 0x0f, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x49, 0x4d, 0x50, 0x4f, 0x52, 0x54, 0x10, - 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x58, 0x50, 0x4f, 0x52, 0x54, 0x10, 0x02, 0x32, 0xc2, 0x1d, - 0x0a, 0x08, 0x47, 0x6f, 0x62, 0x67, 0x70, 0x41, 0x70, 0x69, 0x12, 0x3a, 0x0a, 0x08, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x42, 0x67, 0x70, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x42, 0x67, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x38, 0x0a, 0x07, 0x53, 0x74, 0x6f, 0x70, 0x42, 0x67, - 0x70, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x42, 0x67, + 0x61, 0x6d, 0x70, 0x52, 0x08, 0x64, 0x6f, 0x77, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x75, 0x70, 0x12, 0x1f, 0x0a, + 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x69, 0x70, 0x76, 0x34, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, 0x70, 0x76, 0x34, 0x12, 0x1f, + 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x69, 0x70, 0x76, 0x36, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, 0x70, 0x76, 0x36, 0x12, + 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x69, 0x70, 0x76, 0x34, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x49, 0x70, 0x76, 0x34, + 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x69, 0x70, 0x76, 0x36, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x49, 0x70, 0x76, + 0x36, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x06, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x70, 0x76, 0x34, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x49, 0x70, 0x76, 0x34, 0x12, 0x23, + 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x70, 0x76, 0x36, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x49, + 0x70, 0x76, 0x36, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x69, + 0x61, 0x6c, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x61, 0x63, 0x68, + 0x65, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, + 0x61, 0x63, 0x68, 0x65, 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x61, 0x63, + 0x68, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x1e, 0x0a, 0x0b, 0x65, 0x6e, 0x64, 0x5f, 0x6f, 0x66, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x4f, 0x66, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, + 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x65, + 0x72, 0x69, 0x61, 0x6c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, + 0x65, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, + 0x72, 0x65, 0x73, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x22, 0x53, 0x0a, 0x04, 0x52, 0x70, + 0x6b, 0x69, 0x12, 0x23, 0x0a, 0x04, 0x63, 0x6f, 0x6e, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x4b, 0x49, 0x43, 0x6f, 0x6e, + 0x66, 0x52, 0x04, 0x63, 0x6f, 0x6e, 0x66, 0x12, 0x26, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, + 0x50, 0x4b, 0x49, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, + 0x9f, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x65, + 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x52, 0x0a, + 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x41, 0x4e, 0x49, 0x43, 0x10, + 0x00, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x54, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, + 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x41, 0x52, 0x4e, 0x10, + 0x03, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x44, + 0x45, 0x42, 0x55, 0x47, 0x10, 0x05, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, + 0x06, 0x2a, 0x44, 0x0a, 0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, + 0x0a, 0x06, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x4c, 0x4f, + 0x43, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x44, 0x4a, 0x5f, 0x49, 0x4e, 0x10, + 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x44, 0x4a, 0x5f, 0x4f, 0x55, 0x54, 0x10, 0x03, 0x12, 0x07, + 0x0a, 0x03, 0x56, 0x52, 0x46, 0x10, 0x04, 0x2a, 0x26, 0x0a, 0x08, 0x50, 0x65, 0x65, 0x72, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, + 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x01, 0x2a, + 0x3d, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, + 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x41, 0x4c, 0x4c, 0x10, + 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x10, 0x02, 0x2a, 0x82, + 0x01, 0x0a, 0x0b, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, + 0x0a, 0x06, 0x50, 0x52, 0x45, 0x46, 0x49, 0x58, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x45, + 0x49, 0x47, 0x48, 0x42, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x41, 0x47, 0x10, + 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x53, 0x5f, 0x50, 0x41, 0x54, 0x48, 0x10, 0x03, 0x12, 0x0d, + 0x0a, 0x09, 0x43, 0x4f, 0x4d, 0x4d, 0x55, 0x4e, 0x49, 0x54, 0x59, 0x10, 0x04, 0x12, 0x11, 0x0a, + 0x0d, 0x45, 0x58, 0x54, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x55, 0x4e, 0x49, 0x54, 0x59, 0x10, 0x05, + 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x41, 0x52, 0x47, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x55, 0x4e, + 0x49, 0x54, 0x59, 0x10, 0x06, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x45, 0x58, 0x54, 0x5f, 0x48, 0x4f, + 0x50, 0x10, 0x07, 0x2a, 0x59, 0x0a, 0x0f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4f, 0x72, 0x69, 0x67, + 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x52, 0x49, 0x47, 0x49, 0x4e, + 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x52, 0x49, 0x47, 0x49, + 0x4e, 0x5f, 0x49, 0x47, 0x50, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x52, 0x49, 0x47, 0x49, + 0x4e, 0x5f, 0x45, 0x47, 0x50, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4f, 0x52, 0x49, 0x47, 0x49, + 0x4e, 0x5f, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x2a, 0x2f, + 0x0a, 0x0b, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, + 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x43, 0x45, 0x50, + 0x54, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x02, 0x2a, + 0x36, 0x0a, 0x0f, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, + 0x0a, 0x0a, 0x06, 0x49, 0x4d, 0x50, 0x4f, 0x52, 0x54, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x45, + 0x58, 0x50, 0x4f, 0x52, 0x54, 0x10, 0x02, 0x32, 0xc2, 0x1d, 0x0a, 0x08, 0x47, 0x6f, 0x62, 0x67, + 0x70, 0x41, 0x70, 0x69, 0x12, 0x3a, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x67, 0x70, + 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x67, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x12, 0x35, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x42, 0x67, 0x70, 0x12, 0x14, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x67, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x67, 0x70, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x57, 0x61, 0x74, 0x63, 0x68, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x57, 0x61, - 0x74, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x38, 0x0a, 0x07, - 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, - 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x50, 0x65, 0x65, 0x72, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3d, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, - 0x65, 0x72, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, - 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x41, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, - 0x65, 0x65, 0x72, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, - 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x65, - 0x74, 0x50, 0x65, 0x65, 0x72, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x65, - 0x73, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x0c, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, - 0x77, 0x6e, 0x50, 0x65, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, - 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x12, 0x38, 0x0a, 0x07, 0x53, 0x74, 0x6f, 0x70, 0x42, 0x67, 0x70, 0x12, 0x15, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x42, 0x67, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x0a, 0x45, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x50, 0x65, 0x65, 0x72, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, - 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x40, 0x0a, 0x0b, 0x44, 0x69, - 0x73, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x65, 0x65, 0x72, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, - 0x62, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x0c, - 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1a, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x35, 0x0a, 0x06, 0x47, 0x65, + 0x74, 0x42, 0x67, 0x70, 0x12, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, + 0x42, 0x67, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x70, 0x69, + 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x67, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x57, 0x61, 0x74, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x38, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, + 0x72, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x12, 0x48, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x12, 0x3e, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, 0x12, 0x18, + 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x12, 0x3d, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, 0x65, 0x72, 0x12, 0x16, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, + 0x41, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, 0x12, 0x18, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x12, + 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x50, 0x65, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x12, 0x42, 0x0a, 0x0c, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x50, 0x65, 0x65, 0x72, + 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, + 0x6e, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x0a, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x65, + 0x65, 0x72, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x40, 0x0a, 0x0b, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x50, + 0x65, 0x65, 0x72, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x69, 0x73, 0x61, + 0x62, 0x6c, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x0c, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, + 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, + 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4c, 0x0a, 0x0d, 0x4c, 0x69, - 0x73, 0x74, 0x50, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1b, 0x2e, 0x61, 0x70, - 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x50, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1d, 0x2e, 0x61, 0x70, - 0x69, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x12, 0x41, 0x64, - 0x64, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, - 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x79, 0x6e, 0x61, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x48, 0x0a, 0x0f, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1d, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4c, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x50, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, + 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x30, 0x01, 0x12, 0x50, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x44, 0x79, 0x6e, 0x61, 0x6d, + 0x69, 0x63, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, + 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4e, 0x65, 0x69, + 0x67, 0x68, 0x62, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x5e, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x79, 0x6e, 0x61, + 0x6d, 0x69, 0x63, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x12, 0x21, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4e, + 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, + 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, + 0x69, 0x63, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x30, 0x01, 0x12, 0x54, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x79, + 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x12, 0x23, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x5e, 0x0a, 0x13, 0x4c, 0x69, - 0x73, 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, - 0x72, 0x12, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x79, - 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x54, 0x0a, 0x15, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4e, 0x65, 0x69, 0x67, 0x68, - 0x62, 0x6f, 0x72, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x38, 0x0a, 0x07, 0x41, 0x64, + 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, + 0x64, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, + 0x74, 0x68, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3d, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x74, 0x68, + 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x74, + 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x30, 0x01, 0x12, 0x46, 0x0a, 0x0d, 0x41, 0x64, 0x64, 0x50, 0x61, 0x74, 0x68, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, + 0x50, 0x61, 0x74, 0x68, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x28, 0x01, 0x12, 0x3b, 0x0a, 0x08, 0x47, + 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x06, 0x41, 0x64, 0x64, 0x56, + 0x72, 0x66, 0x12, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x56, 0x72, + 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x12, 0x38, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, 0x15, 0x2e, 0x61, 0x70, - 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x61, - 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0a, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x12, 0x3c, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x72, 0x66, 0x12, 0x17, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x72, 0x66, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3a, + 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x72, 0x66, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x72, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x72, 0x66, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x3c, 0x0a, 0x09, 0x41, 0x64, + 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x41, 0x64, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x43, 0x0a, 0x0a, + 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, + 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, + 0x01, 0x12, 0x40, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, + 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x12, 0x44, 0x0a, 0x0d, 0x41, 0x64, 0x64, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, + 0x64, 0x53, 0x65, 0x74, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, + 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4a, 0x0a, 0x10, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x53, 0x65, 0x74, 0x12, 0x1e, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, + 0x6e, 0x65, 0x64, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4f, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x66, + 0x69, 0x6e, 0x65, 0x64, 0x53, 0x65, 0x74, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x53, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x42, 0x0a, 0x0c, 0x41, 0x64, 0x64, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, + 0x64, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3d, 0x0a, 0x08, 0x4c, 0x69, - 0x73, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, - 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x74, 0x68, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x46, 0x0a, 0x0d, 0x41, 0x64, 0x64, - 0x50, 0x61, 0x74, 0x68, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x61, 0x74, 0x68, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x28, - 0x01, 0x12, 0x3b, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x16, 0x2e, - 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x47, 0x65, - 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, - 0x0a, 0x06, 0x41, 0x64, 0x64, 0x56, 0x72, 0x66, 0x12, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, - 0x2e, 0x41, 0x64, 0x64, 0x56, 0x72, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3c, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x56, 0x72, 0x66, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x56, 0x72, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x48, 0x0a, 0x0f, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3a, 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x72, 0x66, 0x12, - 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x72, 0x66, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x56, 0x72, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, - 0x12, 0x3c, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x17, 0x2e, - 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x42, - 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x1a, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4c, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x30, 0x01, 0x12, 0x50, 0x0a, 0x13, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, + 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x73, 0x73, 0x69, 0x67, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x56, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x12, 0x43, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x40, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, - 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x44, 0x0a, 0x0d, 0x41, 0x64, 0x64, - 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x53, 0x65, 0x74, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x53, 0x65, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, - 0x4a, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, - 0x53, 0x65, 0x74, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x69, 0x63, 0x79, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x61, 0x0a, 0x14, + 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x73, 0x73, 0x69, 0x67, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, + 0x50, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x73, 0x73, 0x69, + 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, + 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x12, 0x38, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x52, 0x70, 0x6b, 0x69, 0x12, 0x15, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x70, 0x6b, 0x69, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4f, 0x0a, 0x0e, 0x4c, - 0x69, 0x73, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x53, 0x65, 0x74, 0x12, 0x1c, 0x2e, - 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, - 0x64, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, - 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x53, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x42, 0x0a, 0x0c, - 0x41, 0x64, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x12, 0x48, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x0a, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x70, 0x6b, 0x69, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x70, 0x6b, 0x69, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3d, 0x0a, 0x08, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x70, 0x6b, 0x69, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x70, 0x6b, 0x69, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x70, 0x6b, 0x69, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x3e, 0x0a, 0x0a, 0x45, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x52, 0x70, 0x6b, 0x69, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x70, 0x6b, 0x69, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x40, 0x0a, 0x0b, 0x44, 0x69, + 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x70, 0x6b, 0x69, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x70, 0x6b, 0x69, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3c, 0x0a, 0x09, + 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x70, 0x6b, 0x69, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x70, 0x6b, 0x69, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4c, 0x0a, 0x0d, 0x4c, 0x69, - 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x2e, 0x61, 0x70, - 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x50, 0x0a, 0x13, 0x41, 0x64, 0x64, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x21, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x52, 0x70, 0x6b, 0x69, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1b, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x70, 0x6b, 0x69, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x70, 0x6b, 0x69, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x40, 0x0a, 0x0b, 0x45, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x5a, 0x65, 0x62, 0x72, 0x61, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5a, 0x65, 0x62, 0x72, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x56, 0x0a, 0x16, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x12, 0x61, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, - 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x73, 0x73, - 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, - 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x50, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x73, - 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x38, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x52, 0x70, - 0x6b, 0x69, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x70, - 0x6b, 0x69, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x12, 0x3e, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x70, 0x6b, 0x69, 0x12, - 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x70, - 0x6b, 0x69, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x12, 0x3d, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x70, 0x6b, 0x69, 0x12, 0x16, 0x2e, - 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x70, 0x6b, 0x69, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x70, 0x6b, 0x69, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, - 0x12, 0x3e, 0x0a, 0x0a, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x70, 0x6b, 0x69, 0x12, 0x18, - 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x70, 0x6b, - 0x69, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x12, 0x40, 0x0a, 0x0b, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x70, 0x6b, 0x69, 0x12, - 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x70, 0x6b, 0x69, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x12, 0x3c, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x70, 0x6b, 0x69, 0x12, - 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x70, 0x6b, - 0x69, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x12, 0x4c, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x70, 0x6b, 0x69, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x70, - 0x6b, 0x69, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, - 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x70, 0x6b, 0x69, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x40, - 0x0a, 0x0b, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5a, 0x65, 0x62, 0x72, 0x61, 0x12, 0x19, 0x2e, - 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5a, 0x65, 0x62, 0x72, - 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3c, 0x0a, 0x09, 0x45, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x72, 0x74, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x61, + 0x62, 0x6c, 0x65, 0x4d, 0x72, 0x74, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, + 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x36, 0x0a, 0x06, 0x41, 0x64, 0x64, 0x42, + 0x6d, 0x70, 0x12, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x42, 0x6d, + 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x12, 0x3c, 0x0a, 0x09, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x72, 0x74, 0x12, 0x17, 0x2e, - 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x72, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3e, - 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x72, 0x74, 0x12, 0x18, 0x2e, 0x61, - 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x72, 0x74, 0x52, + 0x12, 0x3c, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x6d, 0x70, 0x12, 0x17, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x6d, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x36, - 0x0a, 0x06, 0x41, 0x64, 0x64, 0x42, 0x6d, 0x70, 0x12, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, - 0x2e, 0x41, 0x64, 0x64, 0x42, 0x6d, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3c, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x42, 0x6d, 0x70, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x42, 0x6d, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3a, 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6d, 0x70, 0x12, - 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6d, 0x70, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x42, 0x6d, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, - 0x12, 0x40, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, - 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x42, 0x24, 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x6f, 0x73, 0x72, 0x67, 0x2f, 0x67, 0x6f, 0x62, 0x67, 0x70, 0x2f, 0x76, 0x33, 0x2f, 0x61, - 0x70, 0x69, 0x3b, 0x61, 0x70, 0x69, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3a, + 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6d, 0x70, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6d, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6d, 0x70, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x40, 0x0a, 0x0b, 0x53, 0x65, + 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x53, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x24, 0x5a, 0x22, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x72, 0x67, 0x2f, + 0x67, 0x6f, 0x62, 0x67, 0x70, 0x2f, 0x76, 0x33, 0x2f, 0x61, 0x70, 0x69, 0x3b, 0x61, 0x70, 0x69, + 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -13674,8 +13403,8 @@ func file_gobgp_proto_rawDescGZIP() []byte { return file_gobgp_proto_rawDescData } -var file_gobgp_proto_enumTypes = make([]protoimpl.EnumInfo, 27) -var file_gobgp_proto_msgTypes = make([]protoimpl.MessageInfo, 159) +var file_gobgp_proto_enumTypes = make([]protoimpl.EnumInfo, 25) +var file_gobgp_proto_msgTypes = make([]protoimpl.MessageInfo, 158) var file_gobgp_proto_goTypes = []interface{}{ (TableType)(0), // 0: apipb.TableType (PeerType)(0), // 1: apipb.PeerType @@ -13691,503 +13420,503 @@ var file_gobgp_proto_goTypes = []interface{}{ (ListPathRequest_SortType)(0), // 11: apipb.ListPathRequest.SortType (EnableMrtRequest_DumpType)(0), // 12: apipb.EnableMrtRequest.DumpType (AddBmpRequest_MonitoringPolicy)(0), // 13: apipb.AddBmpRequest.MonitoringPolicy - (Family_Afi)(0), // 14: apipb.Family.Afi - (Family_Safi)(0), // 15: apipb.Family.Safi - (Validation_State)(0), // 16: apipb.Validation.State - (Validation_Reason)(0), // 17: apipb.Validation.Reason - (PeerState_SessionState)(0), // 18: apipb.PeerState.SessionState - (PeerState_AdminState)(0), // 19: apipb.PeerState.AdminState - (MatchSet_Type)(0), // 20: apipb.MatchSet.Type - (AsPathLength_Type)(0), // 21: apipb.AsPathLength.Type - (CommunityCount_Type)(0), // 22: apipb.CommunityCount.Type - (Conditions_RouteType)(0), // 23: apipb.Conditions.RouteType - (CommunityAction_Type)(0), // 24: apipb.CommunityAction.Type - (MedAction_Type)(0), // 25: apipb.MedAction.Type - (SetLogLevelRequest_Level)(0), // 26: apipb.SetLogLevelRequest.Level - (*StartBgpRequest)(nil), // 27: apipb.StartBgpRequest - (*StopBgpRequest)(nil), // 28: apipb.StopBgpRequest - (*GetBgpRequest)(nil), // 29: apipb.GetBgpRequest - (*GetBgpResponse)(nil), // 30: apipb.GetBgpResponse - (*WatchEventRequest)(nil), // 31: apipb.WatchEventRequest - (*WatchEventResponse)(nil), // 32: apipb.WatchEventResponse - (*AddPeerRequest)(nil), // 33: apipb.AddPeerRequest - (*DeletePeerRequest)(nil), // 34: apipb.DeletePeerRequest - (*ListPeerRequest)(nil), // 35: apipb.ListPeerRequest - (*ListPeerResponse)(nil), // 36: apipb.ListPeerResponse - (*UpdatePeerRequest)(nil), // 37: apipb.UpdatePeerRequest - (*UpdatePeerResponse)(nil), // 38: apipb.UpdatePeerResponse - (*ResetPeerRequest)(nil), // 39: apipb.ResetPeerRequest - (*ShutdownPeerRequest)(nil), // 40: apipb.ShutdownPeerRequest - (*EnablePeerRequest)(nil), // 41: apipb.EnablePeerRequest - (*DisablePeerRequest)(nil), // 42: apipb.DisablePeerRequest - (*AddPeerGroupRequest)(nil), // 43: apipb.AddPeerGroupRequest - (*DeletePeerGroupRequest)(nil), // 44: apipb.DeletePeerGroupRequest - (*UpdatePeerGroupRequest)(nil), // 45: apipb.UpdatePeerGroupRequest - (*UpdatePeerGroupResponse)(nil), // 46: apipb.UpdatePeerGroupResponse - (*ListPeerGroupRequest)(nil), // 47: apipb.ListPeerGroupRequest - (*ListPeerGroupResponse)(nil), // 48: apipb.ListPeerGroupResponse - (*AddDynamicNeighborRequest)(nil), // 49: apipb.AddDynamicNeighborRequest - (*DeleteDynamicNeighborRequest)(nil), // 50: apipb.DeleteDynamicNeighborRequest - (*ListDynamicNeighborRequest)(nil), // 51: apipb.ListDynamicNeighborRequest - (*ListDynamicNeighborResponse)(nil), // 52: apipb.ListDynamicNeighborResponse - (*AddPathRequest)(nil), // 53: apipb.AddPathRequest - (*AddPathResponse)(nil), // 54: apipb.AddPathResponse - (*DeletePathRequest)(nil), // 55: apipb.DeletePathRequest - (*TableLookupPrefix)(nil), // 56: apipb.TableLookupPrefix - (*ListPathRequest)(nil), // 57: apipb.ListPathRequest - (*ListPathResponse)(nil), // 58: apipb.ListPathResponse - (*AddPathStreamRequest)(nil), // 59: apipb.AddPathStreamRequest - (*GetTableRequest)(nil), // 60: apipb.GetTableRequest - (*GetTableResponse)(nil), // 61: apipb.GetTableResponse - (*AddVrfRequest)(nil), // 62: apipb.AddVrfRequest - (*DeleteVrfRequest)(nil), // 63: apipb.DeleteVrfRequest - (*ListVrfRequest)(nil), // 64: apipb.ListVrfRequest - (*ListVrfResponse)(nil), // 65: apipb.ListVrfResponse - (*AddPolicyRequest)(nil), // 66: apipb.AddPolicyRequest - (*DeletePolicyRequest)(nil), // 67: apipb.DeletePolicyRequest - (*ListPolicyRequest)(nil), // 68: apipb.ListPolicyRequest - (*ListPolicyResponse)(nil), // 69: apipb.ListPolicyResponse - (*SetPoliciesRequest)(nil), // 70: apipb.SetPoliciesRequest - (*AddDefinedSetRequest)(nil), // 71: apipb.AddDefinedSetRequest - (*DeleteDefinedSetRequest)(nil), // 72: apipb.DeleteDefinedSetRequest - (*ListDefinedSetRequest)(nil), // 73: apipb.ListDefinedSetRequest - (*ListDefinedSetResponse)(nil), // 74: apipb.ListDefinedSetResponse - (*AddStatementRequest)(nil), // 75: apipb.AddStatementRequest - (*DeleteStatementRequest)(nil), // 76: apipb.DeleteStatementRequest - (*ListStatementRequest)(nil), // 77: apipb.ListStatementRequest - (*ListStatementResponse)(nil), // 78: apipb.ListStatementResponse - (*AddPolicyAssignmentRequest)(nil), // 79: apipb.AddPolicyAssignmentRequest - (*DeletePolicyAssignmentRequest)(nil), // 80: apipb.DeletePolicyAssignmentRequest - (*ListPolicyAssignmentRequest)(nil), // 81: apipb.ListPolicyAssignmentRequest - (*ListPolicyAssignmentResponse)(nil), // 82: apipb.ListPolicyAssignmentResponse - (*SetPolicyAssignmentRequest)(nil), // 83: apipb.SetPolicyAssignmentRequest - (*AddRpkiRequest)(nil), // 84: apipb.AddRpkiRequest - (*DeleteRpkiRequest)(nil), // 85: apipb.DeleteRpkiRequest - (*ListRpkiRequest)(nil), // 86: apipb.ListRpkiRequest - (*ListRpkiResponse)(nil), // 87: apipb.ListRpkiResponse - (*EnableRpkiRequest)(nil), // 88: apipb.EnableRpkiRequest - (*DisableRpkiRequest)(nil), // 89: apipb.DisableRpkiRequest - (*ResetRpkiRequest)(nil), // 90: apipb.ResetRpkiRequest - (*ListRpkiTableRequest)(nil), // 91: apipb.ListRpkiTableRequest - (*ListRpkiTableResponse)(nil), // 92: apipb.ListRpkiTableResponse - (*EnableZebraRequest)(nil), // 93: apipb.EnableZebraRequest - (*EnableMrtRequest)(nil), // 94: apipb.EnableMrtRequest - (*DisableMrtRequest)(nil), // 95: apipb.DisableMrtRequest - (*AddBmpRequest)(nil), // 96: apipb.AddBmpRequest - (*DeleteBmpRequest)(nil), // 97: apipb.DeleteBmpRequest - (*ListBmpRequest)(nil), // 98: apipb.ListBmpRequest - (*ListBmpResponse)(nil), // 99: apipb.ListBmpResponse - (*Family)(nil), // 100: apipb.Family - (*Validation)(nil), // 101: apipb.Validation - (*Path)(nil), // 102: apipb.Path - (*Destination)(nil), // 103: apipb.Destination - (*Peer)(nil), // 104: apipb.Peer - (*PeerGroup)(nil), // 105: apipb.PeerGroup - (*DynamicNeighbor)(nil), // 106: apipb.DynamicNeighbor - (*ApplyPolicy)(nil), // 107: apipb.ApplyPolicy - (*PrefixLimit)(nil), // 108: apipb.PrefixLimit - (*PeerConf)(nil), // 109: apipb.PeerConf - (*PeerGroupConf)(nil), // 110: apipb.PeerGroupConf - (*PeerGroupState)(nil), // 111: apipb.PeerGroupState - (*TtlSecurity)(nil), // 112: apipb.TtlSecurity - (*EbgpMultihop)(nil), // 113: apipb.EbgpMultihop - (*RouteReflector)(nil), // 114: apipb.RouteReflector - (*PeerState)(nil), // 115: apipb.PeerState - (*Messages)(nil), // 116: apipb.Messages - (*Message)(nil), // 117: apipb.Message - (*Queues)(nil), // 118: apipb.Queues - (*Timers)(nil), // 119: apipb.Timers - (*TimersConfig)(nil), // 120: apipb.TimersConfig - (*TimersState)(nil), // 121: apipb.TimersState - (*Transport)(nil), // 122: apipb.Transport - (*RouteServer)(nil), // 123: apipb.RouteServer - (*GracefulRestart)(nil), // 124: apipb.GracefulRestart - (*MpGracefulRestartConfig)(nil), // 125: apipb.MpGracefulRestartConfig - (*MpGracefulRestartState)(nil), // 126: apipb.MpGracefulRestartState - (*MpGracefulRestart)(nil), // 127: apipb.MpGracefulRestart - (*AfiSafiConfig)(nil), // 128: apipb.AfiSafiConfig - (*AfiSafiState)(nil), // 129: apipb.AfiSafiState - (*RouteSelectionOptionsConfig)(nil), // 130: apipb.RouteSelectionOptionsConfig - (*RouteSelectionOptionsState)(nil), // 131: apipb.RouteSelectionOptionsState - (*RouteSelectionOptions)(nil), // 132: apipb.RouteSelectionOptions - (*UseMultiplePathsConfig)(nil), // 133: apipb.UseMultiplePathsConfig - (*UseMultiplePathsState)(nil), // 134: apipb.UseMultiplePathsState - (*EbgpConfig)(nil), // 135: apipb.EbgpConfig - (*EbgpState)(nil), // 136: apipb.EbgpState - (*Ebgp)(nil), // 137: apipb.Ebgp - (*IbgpConfig)(nil), // 138: apipb.IbgpConfig - (*IbgpState)(nil), // 139: apipb.IbgpState - (*Ibgp)(nil), // 140: apipb.Ibgp - (*UseMultiplePaths)(nil), // 141: apipb.UseMultiplePaths - (*RouteTargetMembershipConfig)(nil), // 142: apipb.RouteTargetMembershipConfig - (*RouteTargetMembershipState)(nil), // 143: apipb.RouteTargetMembershipState - (*RouteTargetMembership)(nil), // 144: apipb.RouteTargetMembership - (*LongLivedGracefulRestartConfig)(nil), // 145: apipb.LongLivedGracefulRestartConfig - (*LongLivedGracefulRestartState)(nil), // 146: apipb.LongLivedGracefulRestartState - (*LongLivedGracefulRestart)(nil), // 147: apipb.LongLivedGracefulRestart - (*AfiSafi)(nil), // 148: apipb.AfiSafi - (*AddPathsConfig)(nil), // 149: apipb.AddPathsConfig - (*AddPathsState)(nil), // 150: apipb.AddPathsState - (*AddPaths)(nil), // 151: apipb.AddPaths - (*Prefix)(nil), // 152: apipb.Prefix - (*DefinedSet)(nil), // 153: apipb.DefinedSet - (*MatchSet)(nil), // 154: apipb.MatchSet - (*AsPathLength)(nil), // 155: apipb.AsPathLength - (*CommunityCount)(nil), // 156: apipb.CommunityCount - (*Conditions)(nil), // 157: apipb.Conditions - (*CommunityAction)(nil), // 158: apipb.CommunityAction - (*MedAction)(nil), // 159: apipb.MedAction - (*AsPrependAction)(nil), // 160: apipb.AsPrependAction - (*NexthopAction)(nil), // 161: apipb.NexthopAction - (*LocalPrefAction)(nil), // 162: apipb.LocalPrefAction - (*OriginAction)(nil), // 163: apipb.OriginAction - (*Actions)(nil), // 164: apipb.Actions - (*Statement)(nil), // 165: apipb.Statement - (*Policy)(nil), // 166: apipb.Policy - (*PolicyAssignment)(nil), // 167: apipb.PolicyAssignment - (*RoutingPolicy)(nil), // 168: apipb.RoutingPolicy - (*Roa)(nil), // 169: apipb.Roa - (*Vrf)(nil), // 170: apipb.Vrf - (*DefaultRouteDistance)(nil), // 171: apipb.DefaultRouteDistance - (*Global)(nil), // 172: apipb.Global - (*Confederation)(nil), // 173: apipb.Confederation - (*RPKIConf)(nil), // 174: apipb.RPKIConf - (*RPKIState)(nil), // 175: apipb.RPKIState - (*Rpki)(nil), // 176: apipb.Rpki - (*SetLogLevelRequest)(nil), // 177: apipb.SetLogLevelRequest - (*WatchEventRequest_Peer)(nil), // 178: apipb.WatchEventRequest.Peer - (*WatchEventRequest_Table)(nil), // 179: apipb.WatchEventRequest.Table - (*WatchEventRequest_Table_Filter)(nil), // 180: apipb.WatchEventRequest.Table.Filter - (*WatchEventResponse_PeerEvent)(nil), // 181: apipb.WatchEventResponse.PeerEvent - (*WatchEventResponse_TableEvent)(nil), // 182: apipb.WatchEventResponse.TableEvent - (*ListBmpResponse_BmpStation)(nil), // 183: apipb.ListBmpResponse.BmpStation - (*ListBmpResponse_BmpStation_Conf)(nil), // 184: apipb.ListBmpResponse.BmpStation.Conf - (*ListBmpResponse_BmpStation_State)(nil), // 185: apipb.ListBmpResponse.BmpStation.State - (*anypb.Any)(nil), // 186: google.protobuf.Any - (*timestamppb.Timestamp)(nil), // 187: google.protobuf.Timestamp - (*emptypb.Empty)(nil), // 188: google.protobuf.Empty + (Validation_State)(0), // 14: apipb.Validation.State + (Validation_Reason)(0), // 15: apipb.Validation.Reason + (PeerState_SessionState)(0), // 16: apipb.PeerState.SessionState + (PeerState_AdminState)(0), // 17: apipb.PeerState.AdminState + (MatchSet_Type)(0), // 18: apipb.MatchSet.Type + (AsPathLength_Type)(0), // 19: apipb.AsPathLength.Type + (CommunityCount_Type)(0), // 20: apipb.CommunityCount.Type + (Conditions_RouteType)(0), // 21: apipb.Conditions.RouteType + (CommunityAction_Type)(0), // 22: apipb.CommunityAction.Type + (MedAction_Type)(0), // 23: apipb.MedAction.Type + (SetLogLevelRequest_Level)(0), // 24: apipb.SetLogLevelRequest.Level + (*StartBgpRequest)(nil), // 25: apipb.StartBgpRequest + (*StopBgpRequest)(nil), // 26: apipb.StopBgpRequest + (*GetBgpRequest)(nil), // 27: apipb.GetBgpRequest + (*GetBgpResponse)(nil), // 28: apipb.GetBgpResponse + (*WatchEventRequest)(nil), // 29: apipb.WatchEventRequest + (*WatchEventResponse)(nil), // 30: apipb.WatchEventResponse + (*AddPeerRequest)(nil), // 31: apipb.AddPeerRequest + (*DeletePeerRequest)(nil), // 32: apipb.DeletePeerRequest + (*ListPeerRequest)(nil), // 33: apipb.ListPeerRequest + (*ListPeerResponse)(nil), // 34: apipb.ListPeerResponse + (*UpdatePeerRequest)(nil), // 35: apipb.UpdatePeerRequest + (*UpdatePeerResponse)(nil), // 36: apipb.UpdatePeerResponse + (*ResetPeerRequest)(nil), // 37: apipb.ResetPeerRequest + (*ShutdownPeerRequest)(nil), // 38: apipb.ShutdownPeerRequest + (*EnablePeerRequest)(nil), // 39: apipb.EnablePeerRequest + (*DisablePeerRequest)(nil), // 40: apipb.DisablePeerRequest + (*AddPeerGroupRequest)(nil), // 41: apipb.AddPeerGroupRequest + (*DeletePeerGroupRequest)(nil), // 42: apipb.DeletePeerGroupRequest + (*UpdatePeerGroupRequest)(nil), // 43: apipb.UpdatePeerGroupRequest + (*UpdatePeerGroupResponse)(nil), // 44: apipb.UpdatePeerGroupResponse + (*ListPeerGroupRequest)(nil), // 45: apipb.ListPeerGroupRequest + (*ListPeerGroupResponse)(nil), // 46: apipb.ListPeerGroupResponse + (*AddDynamicNeighborRequest)(nil), // 47: apipb.AddDynamicNeighborRequest + (*DeleteDynamicNeighborRequest)(nil), // 48: apipb.DeleteDynamicNeighborRequest + (*ListDynamicNeighborRequest)(nil), // 49: apipb.ListDynamicNeighborRequest + (*ListDynamicNeighborResponse)(nil), // 50: apipb.ListDynamicNeighborResponse + (*AddPathRequest)(nil), // 51: apipb.AddPathRequest + (*AddPathResponse)(nil), // 52: apipb.AddPathResponse + (*DeletePathRequest)(nil), // 53: apipb.DeletePathRequest + (*TableLookupPrefix)(nil), // 54: apipb.TableLookupPrefix + (*ListPathRequest)(nil), // 55: apipb.ListPathRequest + (*ListPathResponse)(nil), // 56: apipb.ListPathResponse + (*AddPathStreamRequest)(nil), // 57: apipb.AddPathStreamRequest + (*GetTableRequest)(nil), // 58: apipb.GetTableRequest + (*GetTableResponse)(nil), // 59: apipb.GetTableResponse + (*AddVrfRequest)(nil), // 60: apipb.AddVrfRequest + (*DeleteVrfRequest)(nil), // 61: apipb.DeleteVrfRequest + (*ListVrfRequest)(nil), // 62: apipb.ListVrfRequest + (*ListVrfResponse)(nil), // 63: apipb.ListVrfResponse + (*AddPolicyRequest)(nil), // 64: apipb.AddPolicyRequest + (*DeletePolicyRequest)(nil), // 65: apipb.DeletePolicyRequest + (*ListPolicyRequest)(nil), // 66: apipb.ListPolicyRequest + (*ListPolicyResponse)(nil), // 67: apipb.ListPolicyResponse + (*SetPoliciesRequest)(nil), // 68: apipb.SetPoliciesRequest + (*AddDefinedSetRequest)(nil), // 69: apipb.AddDefinedSetRequest + (*DeleteDefinedSetRequest)(nil), // 70: apipb.DeleteDefinedSetRequest + (*ListDefinedSetRequest)(nil), // 71: apipb.ListDefinedSetRequest + (*ListDefinedSetResponse)(nil), // 72: apipb.ListDefinedSetResponse + (*AddStatementRequest)(nil), // 73: apipb.AddStatementRequest + (*DeleteStatementRequest)(nil), // 74: apipb.DeleteStatementRequest + (*ListStatementRequest)(nil), // 75: apipb.ListStatementRequest + (*ListStatementResponse)(nil), // 76: apipb.ListStatementResponse + (*AddPolicyAssignmentRequest)(nil), // 77: apipb.AddPolicyAssignmentRequest + (*DeletePolicyAssignmentRequest)(nil), // 78: apipb.DeletePolicyAssignmentRequest + (*ListPolicyAssignmentRequest)(nil), // 79: apipb.ListPolicyAssignmentRequest + (*ListPolicyAssignmentResponse)(nil), // 80: apipb.ListPolicyAssignmentResponse + (*SetPolicyAssignmentRequest)(nil), // 81: apipb.SetPolicyAssignmentRequest + (*AddRpkiRequest)(nil), // 82: apipb.AddRpkiRequest + (*DeleteRpkiRequest)(nil), // 83: apipb.DeleteRpkiRequest + (*ListRpkiRequest)(nil), // 84: apipb.ListRpkiRequest + (*ListRpkiResponse)(nil), // 85: apipb.ListRpkiResponse + (*EnableRpkiRequest)(nil), // 86: apipb.EnableRpkiRequest + (*DisableRpkiRequest)(nil), // 87: apipb.DisableRpkiRequest + (*ResetRpkiRequest)(nil), // 88: apipb.ResetRpkiRequest + (*ListRpkiTableRequest)(nil), // 89: apipb.ListRpkiTableRequest + (*ListRpkiTableResponse)(nil), // 90: apipb.ListRpkiTableResponse + (*EnableZebraRequest)(nil), // 91: apipb.EnableZebraRequest + (*EnableMrtRequest)(nil), // 92: apipb.EnableMrtRequest + (*DisableMrtRequest)(nil), // 93: apipb.DisableMrtRequest + (*AddBmpRequest)(nil), // 94: apipb.AddBmpRequest + (*DeleteBmpRequest)(nil), // 95: apipb.DeleteBmpRequest + (*ListBmpRequest)(nil), // 96: apipb.ListBmpRequest + (*ListBmpResponse)(nil), // 97: apipb.ListBmpResponse + (*Validation)(nil), // 98: apipb.Validation + (*Path)(nil), // 99: apipb.Path + (*Destination)(nil), // 100: apipb.Destination + (*Peer)(nil), // 101: apipb.Peer + (*PeerGroup)(nil), // 102: apipb.PeerGroup + (*DynamicNeighbor)(nil), // 103: apipb.DynamicNeighbor + (*ApplyPolicy)(nil), // 104: apipb.ApplyPolicy + (*PrefixLimit)(nil), // 105: apipb.PrefixLimit + (*PeerConf)(nil), // 106: apipb.PeerConf + (*PeerGroupConf)(nil), // 107: apipb.PeerGroupConf + (*PeerGroupState)(nil), // 108: apipb.PeerGroupState + (*TtlSecurity)(nil), // 109: apipb.TtlSecurity + (*EbgpMultihop)(nil), // 110: apipb.EbgpMultihop + (*RouteReflector)(nil), // 111: apipb.RouteReflector + (*PeerState)(nil), // 112: apipb.PeerState + (*Messages)(nil), // 113: apipb.Messages + (*Message)(nil), // 114: apipb.Message + (*Queues)(nil), // 115: apipb.Queues + (*Timers)(nil), // 116: apipb.Timers + (*TimersConfig)(nil), // 117: apipb.TimersConfig + (*TimersState)(nil), // 118: apipb.TimersState + (*Transport)(nil), // 119: apipb.Transport + (*RouteServer)(nil), // 120: apipb.RouteServer + (*GracefulRestart)(nil), // 121: apipb.GracefulRestart + (*MpGracefulRestartConfig)(nil), // 122: apipb.MpGracefulRestartConfig + (*MpGracefulRestartState)(nil), // 123: apipb.MpGracefulRestartState + (*MpGracefulRestart)(nil), // 124: apipb.MpGracefulRestart + (*AfiSafiConfig)(nil), // 125: apipb.AfiSafiConfig + (*AfiSafiState)(nil), // 126: apipb.AfiSafiState + (*RouteSelectionOptionsConfig)(nil), // 127: apipb.RouteSelectionOptionsConfig + (*RouteSelectionOptionsState)(nil), // 128: apipb.RouteSelectionOptionsState + (*RouteSelectionOptions)(nil), // 129: apipb.RouteSelectionOptions + (*UseMultiplePathsConfig)(nil), // 130: apipb.UseMultiplePathsConfig + (*UseMultiplePathsState)(nil), // 131: apipb.UseMultiplePathsState + (*EbgpConfig)(nil), // 132: apipb.EbgpConfig + (*EbgpState)(nil), // 133: apipb.EbgpState + (*Ebgp)(nil), // 134: apipb.Ebgp + (*IbgpConfig)(nil), // 135: apipb.IbgpConfig + (*IbgpState)(nil), // 136: apipb.IbgpState + (*Ibgp)(nil), // 137: apipb.Ibgp + (*UseMultiplePaths)(nil), // 138: apipb.UseMultiplePaths + (*RouteTargetMembershipConfig)(nil), // 139: apipb.RouteTargetMembershipConfig + (*RouteTargetMembershipState)(nil), // 140: apipb.RouteTargetMembershipState + (*RouteTargetMembership)(nil), // 141: apipb.RouteTargetMembership + (*LongLivedGracefulRestartConfig)(nil), // 142: apipb.LongLivedGracefulRestartConfig + (*LongLivedGracefulRestartState)(nil), // 143: apipb.LongLivedGracefulRestartState + (*LongLivedGracefulRestart)(nil), // 144: apipb.LongLivedGracefulRestart + (*AfiSafi)(nil), // 145: apipb.AfiSafi + (*AddPathsConfig)(nil), // 146: apipb.AddPathsConfig + (*AddPathsState)(nil), // 147: apipb.AddPathsState + (*AddPaths)(nil), // 148: apipb.AddPaths + (*Prefix)(nil), // 149: apipb.Prefix + (*DefinedSet)(nil), // 150: apipb.DefinedSet + (*MatchSet)(nil), // 151: apipb.MatchSet + (*AsPathLength)(nil), // 152: apipb.AsPathLength + (*CommunityCount)(nil), // 153: apipb.CommunityCount + (*Conditions)(nil), // 154: apipb.Conditions + (*CommunityAction)(nil), // 155: apipb.CommunityAction + (*MedAction)(nil), // 156: apipb.MedAction + (*AsPrependAction)(nil), // 157: apipb.AsPrependAction + (*NexthopAction)(nil), // 158: apipb.NexthopAction + (*LocalPrefAction)(nil), // 159: apipb.LocalPrefAction + (*OriginAction)(nil), // 160: apipb.OriginAction + (*Actions)(nil), // 161: apipb.Actions + (*Statement)(nil), // 162: apipb.Statement + (*Policy)(nil), // 163: apipb.Policy + (*PolicyAssignment)(nil), // 164: apipb.PolicyAssignment + (*RoutingPolicy)(nil), // 165: apipb.RoutingPolicy + (*Roa)(nil), // 166: apipb.Roa + (*Vrf)(nil), // 167: apipb.Vrf + (*DefaultRouteDistance)(nil), // 168: apipb.DefaultRouteDistance + (*Global)(nil), // 169: apipb.Global + (*Confederation)(nil), // 170: apipb.Confederation + (*RPKIConf)(nil), // 171: apipb.RPKIConf + (*RPKIState)(nil), // 172: apipb.RPKIState + (*Rpki)(nil), // 173: apipb.Rpki + (*SetLogLevelRequest)(nil), // 174: apipb.SetLogLevelRequest + (*WatchEventRequest_Peer)(nil), // 175: apipb.WatchEventRequest.Peer + (*WatchEventRequest_Table)(nil), // 176: apipb.WatchEventRequest.Table + (*WatchEventRequest_Table_Filter)(nil), // 177: apipb.WatchEventRequest.Table.Filter + (*WatchEventResponse_PeerEvent)(nil), // 178: apipb.WatchEventResponse.PeerEvent + (*WatchEventResponse_TableEvent)(nil), // 179: apipb.WatchEventResponse.TableEvent + (*ListBmpResponse_BmpStation)(nil), // 180: apipb.ListBmpResponse.BmpStation + (*ListBmpResponse_BmpStation_Conf)(nil), // 181: apipb.ListBmpResponse.BmpStation.Conf + (*ListBmpResponse_BmpStation_State)(nil), // 182: apipb.ListBmpResponse.BmpStation.State + (*Family)(nil), // 183: apipb.Family + (*NLRI)(nil), // 184: apipb.NLRI + (*Attribute)(nil), // 185: apipb.Attribute + (*timestamppb.Timestamp)(nil), // 186: google.protobuf.Timestamp + (*Capability)(nil), // 187: apipb.Capability + (*RouteDistinguisher)(nil), // 188: apipb.RouteDistinguisher + (*RouteTarget)(nil), // 189: apipb.RouteTarget + (*emptypb.Empty)(nil), // 190: google.protobuf.Empty } var file_gobgp_proto_depIdxs = []int32{ - 172, // 0: apipb.StartBgpRequest.global:type_name -> apipb.Global - 172, // 1: apipb.GetBgpResponse.global:type_name -> apipb.Global - 178, // 2: apipb.WatchEventRequest.peer:type_name -> apipb.WatchEventRequest.Peer - 179, // 3: apipb.WatchEventRequest.table:type_name -> apipb.WatchEventRequest.Table - 181, // 4: apipb.WatchEventResponse.peer:type_name -> apipb.WatchEventResponse.PeerEvent - 182, // 5: apipb.WatchEventResponse.table:type_name -> apipb.WatchEventResponse.TableEvent - 104, // 6: apipb.AddPeerRequest.peer:type_name -> apipb.Peer - 104, // 7: apipb.ListPeerResponse.peer:type_name -> apipb.Peer - 104, // 8: apipb.UpdatePeerRequest.peer:type_name -> apipb.Peer + 169, // 0: apipb.StartBgpRequest.global:type_name -> apipb.Global + 169, // 1: apipb.GetBgpResponse.global:type_name -> apipb.Global + 175, // 2: apipb.WatchEventRequest.peer:type_name -> apipb.WatchEventRequest.Peer + 176, // 3: apipb.WatchEventRequest.table:type_name -> apipb.WatchEventRequest.Table + 178, // 4: apipb.WatchEventResponse.peer:type_name -> apipb.WatchEventResponse.PeerEvent + 179, // 5: apipb.WatchEventResponse.table:type_name -> apipb.WatchEventResponse.TableEvent + 101, // 6: apipb.AddPeerRequest.peer:type_name -> apipb.Peer + 101, // 7: apipb.ListPeerResponse.peer:type_name -> apipb.Peer + 101, // 8: apipb.UpdatePeerRequest.peer:type_name -> apipb.Peer 9, // 9: apipb.ResetPeerRequest.direction:type_name -> apipb.ResetPeerRequest.SoftResetDirection - 105, // 10: apipb.AddPeerGroupRequest.peer_group:type_name -> apipb.PeerGroup - 105, // 11: apipb.UpdatePeerGroupRequest.peer_group:type_name -> apipb.PeerGroup - 105, // 12: apipb.ListPeerGroupResponse.peer_group:type_name -> apipb.PeerGroup - 106, // 13: apipb.AddDynamicNeighborRequest.dynamic_neighbor:type_name -> apipb.DynamicNeighbor - 106, // 14: apipb.ListDynamicNeighborResponse.dynamic_neighbor:type_name -> apipb.DynamicNeighbor + 102, // 10: apipb.AddPeerGroupRequest.peer_group:type_name -> apipb.PeerGroup + 102, // 11: apipb.UpdatePeerGroupRequest.peer_group:type_name -> apipb.PeerGroup + 102, // 12: apipb.ListPeerGroupResponse.peer_group:type_name -> apipb.PeerGroup + 103, // 13: apipb.AddDynamicNeighborRequest.dynamic_neighbor:type_name -> apipb.DynamicNeighbor + 103, // 14: apipb.ListDynamicNeighborResponse.dynamic_neighbor:type_name -> apipb.DynamicNeighbor 0, // 15: apipb.AddPathRequest.table_type:type_name -> apipb.TableType - 102, // 16: apipb.AddPathRequest.path:type_name -> apipb.Path + 99, // 16: apipb.AddPathRequest.path:type_name -> apipb.Path 0, // 17: apipb.DeletePathRequest.table_type:type_name -> apipb.TableType - 100, // 18: apipb.DeletePathRequest.family:type_name -> apipb.Family - 102, // 19: apipb.DeletePathRequest.path:type_name -> apipb.Path + 183, // 18: apipb.DeletePathRequest.family:type_name -> apipb.Family + 99, // 19: apipb.DeletePathRequest.path:type_name -> apipb.Path 10, // 20: apipb.TableLookupPrefix.type:type_name -> apipb.TableLookupPrefix.Type 0, // 21: apipb.ListPathRequest.table_type:type_name -> apipb.TableType - 100, // 22: apipb.ListPathRequest.family:type_name -> apipb.Family - 56, // 23: apipb.ListPathRequest.prefixes:type_name -> apipb.TableLookupPrefix + 183, // 22: apipb.ListPathRequest.family:type_name -> apipb.Family + 54, // 23: apipb.ListPathRequest.prefixes:type_name -> apipb.TableLookupPrefix 11, // 24: apipb.ListPathRequest.sort_type:type_name -> apipb.ListPathRequest.SortType - 103, // 25: apipb.ListPathResponse.destination:type_name -> apipb.Destination + 100, // 25: apipb.ListPathResponse.destination:type_name -> apipb.Destination 0, // 26: apipb.AddPathStreamRequest.table_type:type_name -> apipb.TableType - 102, // 27: apipb.AddPathStreamRequest.paths:type_name -> apipb.Path + 99, // 27: apipb.AddPathStreamRequest.paths:type_name -> apipb.Path 0, // 28: apipb.GetTableRequest.table_type:type_name -> apipb.TableType - 100, // 29: apipb.GetTableRequest.family:type_name -> apipb.Family - 170, // 30: apipb.AddVrfRequest.vrf:type_name -> apipb.Vrf - 170, // 31: apipb.ListVrfResponse.vrf:type_name -> apipb.Vrf - 166, // 32: apipb.AddPolicyRequest.policy:type_name -> apipb.Policy - 166, // 33: apipb.DeletePolicyRequest.policy:type_name -> apipb.Policy - 166, // 34: apipb.ListPolicyResponse.policy:type_name -> apipb.Policy - 153, // 35: apipb.SetPoliciesRequest.defined_sets:type_name -> apipb.DefinedSet - 166, // 36: apipb.SetPoliciesRequest.policies:type_name -> apipb.Policy - 167, // 37: apipb.SetPoliciesRequest.assignments:type_name -> apipb.PolicyAssignment - 153, // 38: apipb.AddDefinedSetRequest.defined_set:type_name -> apipb.DefinedSet - 153, // 39: apipb.DeleteDefinedSetRequest.defined_set:type_name -> apipb.DefinedSet + 183, // 29: apipb.GetTableRequest.family:type_name -> apipb.Family + 167, // 30: apipb.AddVrfRequest.vrf:type_name -> apipb.Vrf + 167, // 31: apipb.ListVrfResponse.vrf:type_name -> apipb.Vrf + 163, // 32: apipb.AddPolicyRequest.policy:type_name -> apipb.Policy + 163, // 33: apipb.DeletePolicyRequest.policy:type_name -> apipb.Policy + 163, // 34: apipb.ListPolicyResponse.policy:type_name -> apipb.Policy + 150, // 35: apipb.SetPoliciesRequest.defined_sets:type_name -> apipb.DefinedSet + 163, // 36: apipb.SetPoliciesRequest.policies:type_name -> apipb.Policy + 164, // 37: apipb.SetPoliciesRequest.assignments:type_name -> apipb.PolicyAssignment + 150, // 38: apipb.AddDefinedSetRequest.defined_set:type_name -> apipb.DefinedSet + 150, // 39: apipb.DeleteDefinedSetRequest.defined_set:type_name -> apipb.DefinedSet 3, // 40: apipb.ListDefinedSetRequest.defined_type:type_name -> apipb.DefinedType - 153, // 41: apipb.ListDefinedSetResponse.defined_set:type_name -> apipb.DefinedSet - 165, // 42: apipb.AddStatementRequest.statement:type_name -> apipb.Statement - 165, // 43: apipb.DeleteStatementRequest.statement:type_name -> apipb.Statement - 165, // 44: apipb.ListStatementResponse.statement:type_name -> apipb.Statement - 167, // 45: apipb.AddPolicyAssignmentRequest.assignment:type_name -> apipb.PolicyAssignment - 167, // 46: apipb.DeletePolicyAssignmentRequest.assignment:type_name -> apipb.PolicyAssignment + 150, // 41: apipb.ListDefinedSetResponse.defined_set:type_name -> apipb.DefinedSet + 162, // 42: apipb.AddStatementRequest.statement:type_name -> apipb.Statement + 162, // 43: apipb.DeleteStatementRequest.statement:type_name -> apipb.Statement + 162, // 44: apipb.ListStatementResponse.statement:type_name -> apipb.Statement + 164, // 45: apipb.AddPolicyAssignmentRequest.assignment:type_name -> apipb.PolicyAssignment + 164, // 46: apipb.DeletePolicyAssignmentRequest.assignment:type_name -> apipb.PolicyAssignment 6, // 47: apipb.ListPolicyAssignmentRequest.direction:type_name -> apipb.PolicyDirection - 167, // 48: apipb.ListPolicyAssignmentResponse.assignment:type_name -> apipb.PolicyAssignment - 167, // 49: apipb.SetPolicyAssignmentRequest.assignment:type_name -> apipb.PolicyAssignment - 100, // 50: apipb.ListRpkiRequest.family:type_name -> apipb.Family - 176, // 51: apipb.ListRpkiResponse.server:type_name -> apipb.Rpki - 100, // 52: apipb.ListRpkiTableRequest.family:type_name -> apipb.Family - 169, // 53: apipb.ListRpkiTableResponse.roa:type_name -> apipb.Roa + 164, // 48: apipb.ListPolicyAssignmentResponse.assignment:type_name -> apipb.PolicyAssignment + 164, // 49: apipb.SetPolicyAssignmentRequest.assignment:type_name -> apipb.PolicyAssignment + 183, // 50: apipb.ListRpkiRequest.family:type_name -> apipb.Family + 173, // 51: apipb.ListRpkiResponse.server:type_name -> apipb.Rpki + 183, // 52: apipb.ListRpkiTableRequest.family:type_name -> apipb.Family + 166, // 53: apipb.ListRpkiTableResponse.roa:type_name -> apipb.Roa 12, // 54: apipb.EnableMrtRequest.type:type_name -> apipb.EnableMrtRequest.DumpType 13, // 55: apipb.AddBmpRequest.policy:type_name -> apipb.AddBmpRequest.MonitoringPolicy - 183, // 56: apipb.ListBmpResponse.station:type_name -> apipb.ListBmpResponse.BmpStation - 14, // 57: apipb.Family.afi:type_name -> apipb.Family.Afi - 15, // 58: apipb.Family.safi:type_name -> apipb.Family.Safi - 16, // 59: apipb.Validation.state:type_name -> apipb.Validation.State - 17, // 60: apipb.Validation.reason:type_name -> apipb.Validation.Reason - 169, // 61: apipb.Validation.matched:type_name -> apipb.Roa - 169, // 62: apipb.Validation.unmatched_asn:type_name -> apipb.Roa - 169, // 63: apipb.Validation.unmatched_length:type_name -> apipb.Roa - 186, // 64: apipb.Path.nlri:type_name -> google.protobuf.Any - 186, // 65: apipb.Path.pattrs:type_name -> google.protobuf.Any - 187, // 66: apipb.Path.age:type_name -> google.protobuf.Timestamp - 101, // 67: apipb.Path.validation:type_name -> apipb.Validation - 100, // 68: apipb.Path.family:type_name -> apipb.Family - 102, // 69: apipb.Destination.paths:type_name -> apipb.Path - 107, // 70: apipb.Peer.apply_policy:type_name -> apipb.ApplyPolicy - 109, // 71: apipb.Peer.conf:type_name -> apipb.PeerConf - 113, // 72: apipb.Peer.ebgp_multihop:type_name -> apipb.EbgpMultihop - 114, // 73: apipb.Peer.route_reflector:type_name -> apipb.RouteReflector - 115, // 74: apipb.Peer.state:type_name -> apipb.PeerState - 119, // 75: apipb.Peer.timers:type_name -> apipb.Timers - 122, // 76: apipb.Peer.transport:type_name -> apipb.Transport - 123, // 77: apipb.Peer.route_server:type_name -> apipb.RouteServer - 124, // 78: apipb.Peer.graceful_restart:type_name -> apipb.GracefulRestart - 148, // 79: apipb.Peer.afi_safis:type_name -> apipb.AfiSafi - 112, // 80: apipb.Peer.ttl_security:type_name -> apipb.TtlSecurity - 107, // 81: apipb.PeerGroup.apply_policy:type_name -> apipb.ApplyPolicy - 110, // 82: apipb.PeerGroup.conf:type_name -> apipb.PeerGroupConf - 113, // 83: apipb.PeerGroup.ebgp_multihop:type_name -> apipb.EbgpMultihop - 114, // 84: apipb.PeerGroup.route_reflector:type_name -> apipb.RouteReflector - 111, // 85: apipb.PeerGroup.info:type_name -> apipb.PeerGroupState - 119, // 86: apipb.PeerGroup.timers:type_name -> apipb.Timers - 122, // 87: apipb.PeerGroup.transport:type_name -> apipb.Transport - 123, // 88: apipb.PeerGroup.route_server:type_name -> apipb.RouteServer - 124, // 89: apipb.PeerGroup.graceful_restart:type_name -> apipb.GracefulRestart - 148, // 90: apipb.PeerGroup.afi_safis:type_name -> apipb.AfiSafi - 112, // 91: apipb.PeerGroup.ttl_security:type_name -> apipb.TtlSecurity - 167, // 92: apipb.ApplyPolicy.in_policy:type_name -> apipb.PolicyAssignment - 167, // 93: apipb.ApplyPolicy.export_policy:type_name -> apipb.PolicyAssignment - 167, // 94: apipb.ApplyPolicy.import_policy:type_name -> apipb.PolicyAssignment - 100, // 95: apipb.PrefixLimit.family:type_name -> apipb.Family - 1, // 96: apipb.PeerConf.type:type_name -> apipb.PeerType - 2, // 97: apipb.PeerConf.remove_private:type_name -> apipb.RemovePrivate - 1, // 98: apipb.PeerGroupConf.type:type_name -> apipb.PeerType - 2, // 99: apipb.PeerGroupConf.remove_private:type_name -> apipb.RemovePrivate - 1, // 100: apipb.PeerGroupState.type:type_name -> apipb.PeerType - 2, // 101: apipb.PeerGroupState.remove_private:type_name -> apipb.RemovePrivate - 116, // 102: apipb.PeerState.messages:type_name -> apipb.Messages - 1, // 103: apipb.PeerState.type:type_name -> apipb.PeerType - 118, // 104: apipb.PeerState.queues:type_name -> apipb.Queues - 2, // 105: apipb.PeerState.remove_private:type_name -> apipb.RemovePrivate - 18, // 106: apipb.PeerState.session_state:type_name -> apipb.PeerState.SessionState - 19, // 107: apipb.PeerState.admin_state:type_name -> apipb.PeerState.AdminState - 186, // 108: apipb.PeerState.remote_cap:type_name -> google.protobuf.Any - 186, // 109: apipb.PeerState.local_cap:type_name -> google.protobuf.Any - 117, // 110: apipb.Messages.received:type_name -> apipb.Message - 117, // 111: apipb.Messages.sent:type_name -> apipb.Message - 120, // 112: apipb.Timers.config:type_name -> apipb.TimersConfig - 121, // 113: apipb.Timers.state:type_name -> apipb.TimersState - 187, // 114: apipb.TimersState.uptime:type_name -> google.protobuf.Timestamp - 187, // 115: apipb.TimersState.downtime:type_name -> google.protobuf.Timestamp - 125, // 116: apipb.MpGracefulRestart.config:type_name -> apipb.MpGracefulRestartConfig - 126, // 117: apipb.MpGracefulRestart.state:type_name -> apipb.MpGracefulRestartState - 100, // 118: apipb.AfiSafiConfig.family:type_name -> apipb.Family - 100, // 119: apipb.AfiSafiState.family:type_name -> apipb.Family - 130, // 120: apipb.RouteSelectionOptions.config:type_name -> apipb.RouteSelectionOptionsConfig - 131, // 121: apipb.RouteSelectionOptions.state:type_name -> apipb.RouteSelectionOptionsState - 135, // 122: apipb.Ebgp.config:type_name -> apipb.EbgpConfig - 136, // 123: apipb.Ebgp.state:type_name -> apipb.EbgpState - 138, // 124: apipb.Ibgp.config:type_name -> apipb.IbgpConfig - 139, // 125: apipb.Ibgp.state:type_name -> apipb.IbgpState - 133, // 126: apipb.UseMultiplePaths.config:type_name -> apipb.UseMultiplePathsConfig - 134, // 127: apipb.UseMultiplePaths.state:type_name -> apipb.UseMultiplePathsState - 137, // 128: apipb.UseMultiplePaths.ebgp:type_name -> apipb.Ebgp - 140, // 129: apipb.UseMultiplePaths.ibgp:type_name -> apipb.Ibgp - 142, // 130: apipb.RouteTargetMembership.config:type_name -> apipb.RouteTargetMembershipConfig - 143, // 131: apipb.RouteTargetMembership.state:type_name -> apipb.RouteTargetMembershipState - 145, // 132: apipb.LongLivedGracefulRestart.config:type_name -> apipb.LongLivedGracefulRestartConfig - 146, // 133: apipb.LongLivedGracefulRestart.state:type_name -> apipb.LongLivedGracefulRestartState - 127, // 134: apipb.AfiSafi.mp_graceful_restart:type_name -> apipb.MpGracefulRestart - 128, // 135: apipb.AfiSafi.config:type_name -> apipb.AfiSafiConfig - 129, // 136: apipb.AfiSafi.state:type_name -> apipb.AfiSafiState - 107, // 137: apipb.AfiSafi.apply_policy:type_name -> apipb.ApplyPolicy - 132, // 138: apipb.AfiSafi.route_selection_options:type_name -> apipb.RouteSelectionOptions - 141, // 139: apipb.AfiSafi.use_multiple_paths:type_name -> apipb.UseMultiplePaths - 108, // 140: apipb.AfiSafi.prefix_limits:type_name -> apipb.PrefixLimit - 144, // 141: apipb.AfiSafi.route_target_membership:type_name -> apipb.RouteTargetMembership - 147, // 142: apipb.AfiSafi.long_lived_graceful_restart:type_name -> apipb.LongLivedGracefulRestart - 151, // 143: apipb.AfiSafi.add_paths:type_name -> apipb.AddPaths - 149, // 144: apipb.AddPaths.config:type_name -> apipb.AddPathsConfig - 150, // 145: apipb.AddPaths.state:type_name -> apipb.AddPathsState - 3, // 146: apipb.DefinedSet.defined_type:type_name -> apipb.DefinedType - 152, // 147: apipb.DefinedSet.prefixes:type_name -> apipb.Prefix - 20, // 148: apipb.MatchSet.type:type_name -> apipb.MatchSet.Type - 21, // 149: apipb.AsPathLength.type:type_name -> apipb.AsPathLength.Type - 22, // 150: apipb.CommunityCount.type:type_name -> apipb.CommunityCount.Type - 154, // 151: apipb.Conditions.prefix_set:type_name -> apipb.MatchSet - 154, // 152: apipb.Conditions.neighbor_set:type_name -> apipb.MatchSet - 155, // 153: apipb.Conditions.as_path_length:type_name -> apipb.AsPathLength - 154, // 154: apipb.Conditions.as_path_set:type_name -> apipb.MatchSet - 154, // 155: apipb.Conditions.community_set:type_name -> apipb.MatchSet - 154, // 156: apipb.Conditions.ext_community_set:type_name -> apipb.MatchSet - 23, // 157: apipb.Conditions.route_type:type_name -> apipb.Conditions.RouteType - 154, // 158: apipb.Conditions.large_community_set:type_name -> apipb.MatchSet - 100, // 159: apipb.Conditions.afi_safi_in:type_name -> apipb.Family - 156, // 160: apipb.Conditions.community_count:type_name -> apipb.CommunityCount - 4, // 161: apipb.Conditions.origin:type_name -> apipb.RouteOriginType - 24, // 162: apipb.CommunityAction.type:type_name -> apipb.CommunityAction.Type - 25, // 163: apipb.MedAction.type:type_name -> apipb.MedAction.Type - 4, // 164: apipb.OriginAction.origin:type_name -> apipb.RouteOriginType - 5, // 165: apipb.Actions.route_action:type_name -> apipb.RouteAction - 158, // 166: apipb.Actions.community:type_name -> apipb.CommunityAction - 159, // 167: apipb.Actions.med:type_name -> apipb.MedAction - 160, // 168: apipb.Actions.as_prepend:type_name -> apipb.AsPrependAction - 158, // 169: apipb.Actions.ext_community:type_name -> apipb.CommunityAction - 161, // 170: apipb.Actions.nexthop:type_name -> apipb.NexthopAction - 162, // 171: apipb.Actions.local_pref:type_name -> apipb.LocalPrefAction - 158, // 172: apipb.Actions.large_community:type_name -> apipb.CommunityAction - 163, // 173: apipb.Actions.origin_action:type_name -> apipb.OriginAction - 157, // 174: apipb.Statement.conditions:type_name -> apipb.Conditions - 164, // 175: apipb.Statement.actions:type_name -> apipb.Actions - 165, // 176: apipb.Policy.statements:type_name -> apipb.Statement - 6, // 177: apipb.PolicyAssignment.direction:type_name -> apipb.PolicyDirection - 166, // 178: apipb.PolicyAssignment.policies:type_name -> apipb.Policy - 5, // 179: apipb.PolicyAssignment.default_action:type_name -> apipb.RouteAction - 153, // 180: apipb.RoutingPolicy.defined_sets:type_name -> apipb.DefinedSet - 166, // 181: apipb.RoutingPolicy.policies:type_name -> apipb.Policy - 174, // 182: apipb.Roa.conf:type_name -> apipb.RPKIConf - 186, // 183: apipb.Vrf.rd:type_name -> google.protobuf.Any - 186, // 184: apipb.Vrf.import_rt:type_name -> google.protobuf.Any - 186, // 185: apipb.Vrf.export_rt:type_name -> google.protobuf.Any - 130, // 186: apipb.Global.route_selection_options:type_name -> apipb.RouteSelectionOptionsConfig - 171, // 187: apipb.Global.default_route_distance:type_name -> apipb.DefaultRouteDistance - 173, // 188: apipb.Global.confederation:type_name -> apipb.Confederation - 124, // 189: apipb.Global.graceful_restart:type_name -> apipb.GracefulRestart - 107, // 190: apipb.Global.apply_policy:type_name -> apipb.ApplyPolicy - 187, // 191: apipb.RPKIState.uptime:type_name -> google.protobuf.Timestamp - 187, // 192: apipb.RPKIState.downtime:type_name -> google.protobuf.Timestamp - 174, // 193: apipb.Rpki.conf:type_name -> apipb.RPKIConf - 175, // 194: apipb.Rpki.state:type_name -> apipb.RPKIState - 26, // 195: apipb.SetLogLevelRequest.level:type_name -> apipb.SetLogLevelRequest.Level - 180, // 196: apipb.WatchEventRequest.Table.filters:type_name -> apipb.WatchEventRequest.Table.Filter - 7, // 197: apipb.WatchEventRequest.Table.Filter.type:type_name -> apipb.WatchEventRequest.Table.Filter.Type - 8, // 198: apipb.WatchEventResponse.PeerEvent.type:type_name -> apipb.WatchEventResponse.PeerEvent.Type - 104, // 199: apipb.WatchEventResponse.PeerEvent.peer:type_name -> apipb.Peer - 102, // 200: apipb.WatchEventResponse.TableEvent.paths:type_name -> apipb.Path - 184, // 201: apipb.ListBmpResponse.BmpStation.conf:type_name -> apipb.ListBmpResponse.BmpStation.Conf - 185, // 202: apipb.ListBmpResponse.BmpStation.state:type_name -> apipb.ListBmpResponse.BmpStation.State - 187, // 203: apipb.ListBmpResponse.BmpStation.State.uptime:type_name -> google.protobuf.Timestamp - 187, // 204: apipb.ListBmpResponse.BmpStation.State.downtime:type_name -> google.protobuf.Timestamp - 27, // 205: apipb.GobgpApi.StartBgp:input_type -> apipb.StartBgpRequest - 28, // 206: apipb.GobgpApi.StopBgp:input_type -> apipb.StopBgpRequest - 29, // 207: apipb.GobgpApi.GetBgp:input_type -> apipb.GetBgpRequest - 31, // 208: apipb.GobgpApi.WatchEvent:input_type -> apipb.WatchEventRequest - 33, // 209: apipb.GobgpApi.AddPeer:input_type -> apipb.AddPeerRequest - 34, // 210: apipb.GobgpApi.DeletePeer:input_type -> apipb.DeletePeerRequest - 35, // 211: apipb.GobgpApi.ListPeer:input_type -> apipb.ListPeerRequest - 37, // 212: apipb.GobgpApi.UpdatePeer:input_type -> apipb.UpdatePeerRequest - 39, // 213: apipb.GobgpApi.ResetPeer:input_type -> apipb.ResetPeerRequest - 40, // 214: apipb.GobgpApi.ShutdownPeer:input_type -> apipb.ShutdownPeerRequest - 41, // 215: apipb.GobgpApi.EnablePeer:input_type -> apipb.EnablePeerRequest - 42, // 216: apipb.GobgpApi.DisablePeer:input_type -> apipb.DisablePeerRequest - 43, // 217: apipb.GobgpApi.AddPeerGroup:input_type -> apipb.AddPeerGroupRequest - 44, // 218: apipb.GobgpApi.DeletePeerGroup:input_type -> apipb.DeletePeerGroupRequest - 47, // 219: apipb.GobgpApi.ListPeerGroup:input_type -> apipb.ListPeerGroupRequest - 45, // 220: apipb.GobgpApi.UpdatePeerGroup:input_type -> apipb.UpdatePeerGroupRequest - 49, // 221: apipb.GobgpApi.AddDynamicNeighbor:input_type -> apipb.AddDynamicNeighborRequest - 51, // 222: apipb.GobgpApi.ListDynamicNeighbor:input_type -> apipb.ListDynamicNeighborRequest - 50, // 223: apipb.GobgpApi.DeleteDynamicNeighbor:input_type -> apipb.DeleteDynamicNeighborRequest - 53, // 224: apipb.GobgpApi.AddPath:input_type -> apipb.AddPathRequest - 55, // 225: apipb.GobgpApi.DeletePath:input_type -> apipb.DeletePathRequest - 57, // 226: apipb.GobgpApi.ListPath:input_type -> apipb.ListPathRequest - 59, // 227: apipb.GobgpApi.AddPathStream:input_type -> apipb.AddPathStreamRequest - 60, // 228: apipb.GobgpApi.GetTable:input_type -> apipb.GetTableRequest - 62, // 229: apipb.GobgpApi.AddVrf:input_type -> apipb.AddVrfRequest - 63, // 230: apipb.GobgpApi.DeleteVrf:input_type -> apipb.DeleteVrfRequest - 64, // 231: apipb.GobgpApi.ListVrf:input_type -> apipb.ListVrfRequest - 66, // 232: apipb.GobgpApi.AddPolicy:input_type -> apipb.AddPolicyRequest - 67, // 233: apipb.GobgpApi.DeletePolicy:input_type -> apipb.DeletePolicyRequest - 68, // 234: apipb.GobgpApi.ListPolicy:input_type -> apipb.ListPolicyRequest - 70, // 235: apipb.GobgpApi.SetPolicies:input_type -> apipb.SetPoliciesRequest - 71, // 236: apipb.GobgpApi.AddDefinedSet:input_type -> apipb.AddDefinedSetRequest - 72, // 237: apipb.GobgpApi.DeleteDefinedSet:input_type -> apipb.DeleteDefinedSetRequest - 73, // 238: apipb.GobgpApi.ListDefinedSet:input_type -> apipb.ListDefinedSetRequest - 75, // 239: apipb.GobgpApi.AddStatement:input_type -> apipb.AddStatementRequest - 76, // 240: apipb.GobgpApi.DeleteStatement:input_type -> apipb.DeleteStatementRequest - 77, // 241: apipb.GobgpApi.ListStatement:input_type -> apipb.ListStatementRequest - 79, // 242: apipb.GobgpApi.AddPolicyAssignment:input_type -> apipb.AddPolicyAssignmentRequest - 80, // 243: apipb.GobgpApi.DeletePolicyAssignment:input_type -> apipb.DeletePolicyAssignmentRequest - 81, // 244: apipb.GobgpApi.ListPolicyAssignment:input_type -> apipb.ListPolicyAssignmentRequest - 83, // 245: apipb.GobgpApi.SetPolicyAssignment:input_type -> apipb.SetPolicyAssignmentRequest - 84, // 246: apipb.GobgpApi.AddRpki:input_type -> apipb.AddRpkiRequest - 85, // 247: apipb.GobgpApi.DeleteRpki:input_type -> apipb.DeleteRpkiRequest - 86, // 248: apipb.GobgpApi.ListRpki:input_type -> apipb.ListRpkiRequest - 88, // 249: apipb.GobgpApi.EnableRpki:input_type -> apipb.EnableRpkiRequest - 89, // 250: apipb.GobgpApi.DisableRpki:input_type -> apipb.DisableRpkiRequest - 90, // 251: apipb.GobgpApi.ResetRpki:input_type -> apipb.ResetRpkiRequest - 91, // 252: apipb.GobgpApi.ListRpkiTable:input_type -> apipb.ListRpkiTableRequest - 93, // 253: apipb.GobgpApi.EnableZebra:input_type -> apipb.EnableZebraRequest - 94, // 254: apipb.GobgpApi.EnableMrt:input_type -> apipb.EnableMrtRequest - 95, // 255: apipb.GobgpApi.DisableMrt:input_type -> apipb.DisableMrtRequest - 96, // 256: apipb.GobgpApi.AddBmp:input_type -> apipb.AddBmpRequest - 97, // 257: apipb.GobgpApi.DeleteBmp:input_type -> apipb.DeleteBmpRequest - 98, // 258: apipb.GobgpApi.ListBmp:input_type -> apipb.ListBmpRequest - 177, // 259: apipb.GobgpApi.SetLogLevel:input_type -> apipb.SetLogLevelRequest - 188, // 260: apipb.GobgpApi.StartBgp:output_type -> google.protobuf.Empty - 188, // 261: apipb.GobgpApi.StopBgp:output_type -> google.protobuf.Empty - 30, // 262: apipb.GobgpApi.GetBgp:output_type -> apipb.GetBgpResponse - 32, // 263: apipb.GobgpApi.WatchEvent:output_type -> apipb.WatchEventResponse - 188, // 264: apipb.GobgpApi.AddPeer:output_type -> google.protobuf.Empty - 188, // 265: apipb.GobgpApi.DeletePeer:output_type -> google.protobuf.Empty - 36, // 266: apipb.GobgpApi.ListPeer:output_type -> apipb.ListPeerResponse - 38, // 267: apipb.GobgpApi.UpdatePeer:output_type -> apipb.UpdatePeerResponse - 188, // 268: apipb.GobgpApi.ResetPeer:output_type -> google.protobuf.Empty - 188, // 269: apipb.GobgpApi.ShutdownPeer:output_type -> google.protobuf.Empty - 188, // 270: apipb.GobgpApi.EnablePeer:output_type -> google.protobuf.Empty - 188, // 271: apipb.GobgpApi.DisablePeer:output_type -> google.protobuf.Empty - 188, // 272: apipb.GobgpApi.AddPeerGroup:output_type -> google.protobuf.Empty - 188, // 273: apipb.GobgpApi.DeletePeerGroup:output_type -> google.protobuf.Empty - 48, // 274: apipb.GobgpApi.ListPeerGroup:output_type -> apipb.ListPeerGroupResponse - 46, // 275: apipb.GobgpApi.UpdatePeerGroup:output_type -> apipb.UpdatePeerGroupResponse - 188, // 276: apipb.GobgpApi.AddDynamicNeighbor:output_type -> google.protobuf.Empty - 52, // 277: apipb.GobgpApi.ListDynamicNeighbor:output_type -> apipb.ListDynamicNeighborResponse - 188, // 278: apipb.GobgpApi.DeleteDynamicNeighbor:output_type -> google.protobuf.Empty - 54, // 279: apipb.GobgpApi.AddPath:output_type -> apipb.AddPathResponse - 188, // 280: apipb.GobgpApi.DeletePath:output_type -> google.protobuf.Empty - 58, // 281: apipb.GobgpApi.ListPath:output_type -> apipb.ListPathResponse - 188, // 282: apipb.GobgpApi.AddPathStream:output_type -> google.protobuf.Empty - 61, // 283: apipb.GobgpApi.GetTable:output_type -> apipb.GetTableResponse - 188, // 284: apipb.GobgpApi.AddVrf:output_type -> google.protobuf.Empty - 188, // 285: apipb.GobgpApi.DeleteVrf:output_type -> google.protobuf.Empty - 65, // 286: apipb.GobgpApi.ListVrf:output_type -> apipb.ListVrfResponse - 188, // 287: apipb.GobgpApi.AddPolicy:output_type -> google.protobuf.Empty - 188, // 288: apipb.GobgpApi.DeletePolicy:output_type -> google.protobuf.Empty - 69, // 289: apipb.GobgpApi.ListPolicy:output_type -> apipb.ListPolicyResponse - 188, // 290: apipb.GobgpApi.SetPolicies:output_type -> google.protobuf.Empty - 188, // 291: apipb.GobgpApi.AddDefinedSet:output_type -> google.protobuf.Empty - 188, // 292: apipb.GobgpApi.DeleteDefinedSet:output_type -> google.protobuf.Empty - 74, // 293: apipb.GobgpApi.ListDefinedSet:output_type -> apipb.ListDefinedSetResponse - 188, // 294: apipb.GobgpApi.AddStatement:output_type -> google.protobuf.Empty - 188, // 295: apipb.GobgpApi.DeleteStatement:output_type -> google.protobuf.Empty - 78, // 296: apipb.GobgpApi.ListStatement:output_type -> apipb.ListStatementResponse - 188, // 297: apipb.GobgpApi.AddPolicyAssignment:output_type -> google.protobuf.Empty - 188, // 298: apipb.GobgpApi.DeletePolicyAssignment:output_type -> google.protobuf.Empty - 82, // 299: apipb.GobgpApi.ListPolicyAssignment:output_type -> apipb.ListPolicyAssignmentResponse - 188, // 300: apipb.GobgpApi.SetPolicyAssignment:output_type -> google.protobuf.Empty - 188, // 301: apipb.GobgpApi.AddRpki:output_type -> google.protobuf.Empty - 188, // 302: apipb.GobgpApi.DeleteRpki:output_type -> google.protobuf.Empty - 87, // 303: apipb.GobgpApi.ListRpki:output_type -> apipb.ListRpkiResponse - 188, // 304: apipb.GobgpApi.EnableRpki:output_type -> google.protobuf.Empty - 188, // 305: apipb.GobgpApi.DisableRpki:output_type -> google.protobuf.Empty - 188, // 306: apipb.GobgpApi.ResetRpki:output_type -> google.protobuf.Empty - 92, // 307: apipb.GobgpApi.ListRpkiTable:output_type -> apipb.ListRpkiTableResponse - 188, // 308: apipb.GobgpApi.EnableZebra:output_type -> google.protobuf.Empty - 188, // 309: apipb.GobgpApi.EnableMrt:output_type -> google.protobuf.Empty - 188, // 310: apipb.GobgpApi.DisableMrt:output_type -> google.protobuf.Empty - 188, // 311: apipb.GobgpApi.AddBmp:output_type -> google.protobuf.Empty - 188, // 312: apipb.GobgpApi.DeleteBmp:output_type -> google.protobuf.Empty - 99, // 313: apipb.GobgpApi.ListBmp:output_type -> apipb.ListBmpResponse - 188, // 314: apipb.GobgpApi.SetLogLevel:output_type -> google.protobuf.Empty - 260, // [260:315] is the sub-list for method output_type - 205, // [205:260] is the sub-list for method input_type - 205, // [205:205] is the sub-list for extension type_name - 205, // [205:205] is the sub-list for extension extendee - 0, // [0:205] is the sub-list for field type_name + 180, // 56: apipb.ListBmpResponse.station:type_name -> apipb.ListBmpResponse.BmpStation + 14, // 57: apipb.Validation.state:type_name -> apipb.Validation.State + 15, // 58: apipb.Validation.reason:type_name -> apipb.Validation.Reason + 166, // 59: apipb.Validation.matched:type_name -> apipb.Roa + 166, // 60: apipb.Validation.unmatched_asn:type_name -> apipb.Roa + 166, // 61: apipb.Validation.unmatched_length:type_name -> apipb.Roa + 184, // 62: apipb.Path.nlri:type_name -> apipb.NLRI + 185, // 63: apipb.Path.pattrs:type_name -> apipb.Attribute + 186, // 64: apipb.Path.age:type_name -> google.protobuf.Timestamp + 98, // 65: apipb.Path.validation:type_name -> apipb.Validation + 183, // 66: apipb.Path.family:type_name -> apipb.Family + 99, // 67: apipb.Destination.paths:type_name -> apipb.Path + 104, // 68: apipb.Peer.apply_policy:type_name -> apipb.ApplyPolicy + 106, // 69: apipb.Peer.conf:type_name -> apipb.PeerConf + 110, // 70: apipb.Peer.ebgp_multihop:type_name -> apipb.EbgpMultihop + 111, // 71: apipb.Peer.route_reflector:type_name -> apipb.RouteReflector + 112, // 72: apipb.Peer.state:type_name -> apipb.PeerState + 116, // 73: apipb.Peer.timers:type_name -> apipb.Timers + 119, // 74: apipb.Peer.transport:type_name -> apipb.Transport + 120, // 75: apipb.Peer.route_server:type_name -> apipb.RouteServer + 121, // 76: apipb.Peer.graceful_restart:type_name -> apipb.GracefulRestart + 145, // 77: apipb.Peer.afi_safis:type_name -> apipb.AfiSafi + 109, // 78: apipb.Peer.ttl_security:type_name -> apipb.TtlSecurity + 104, // 79: apipb.PeerGroup.apply_policy:type_name -> apipb.ApplyPolicy + 107, // 80: apipb.PeerGroup.conf:type_name -> apipb.PeerGroupConf + 110, // 81: apipb.PeerGroup.ebgp_multihop:type_name -> apipb.EbgpMultihop + 111, // 82: apipb.PeerGroup.route_reflector:type_name -> apipb.RouteReflector + 108, // 83: apipb.PeerGroup.info:type_name -> apipb.PeerGroupState + 116, // 84: apipb.PeerGroup.timers:type_name -> apipb.Timers + 119, // 85: apipb.PeerGroup.transport:type_name -> apipb.Transport + 120, // 86: apipb.PeerGroup.route_server:type_name -> apipb.RouteServer + 121, // 87: apipb.PeerGroup.graceful_restart:type_name -> apipb.GracefulRestart + 145, // 88: apipb.PeerGroup.afi_safis:type_name -> apipb.AfiSafi + 109, // 89: apipb.PeerGroup.ttl_security:type_name -> apipb.TtlSecurity + 164, // 90: apipb.ApplyPolicy.in_policy:type_name -> apipb.PolicyAssignment + 164, // 91: apipb.ApplyPolicy.export_policy:type_name -> apipb.PolicyAssignment + 164, // 92: apipb.ApplyPolicy.import_policy:type_name -> apipb.PolicyAssignment + 183, // 93: apipb.PrefixLimit.family:type_name -> apipb.Family + 1, // 94: apipb.PeerConf.type:type_name -> apipb.PeerType + 2, // 95: apipb.PeerConf.remove_private:type_name -> apipb.RemovePrivate + 1, // 96: apipb.PeerGroupConf.type:type_name -> apipb.PeerType + 2, // 97: apipb.PeerGroupConf.remove_private:type_name -> apipb.RemovePrivate + 1, // 98: apipb.PeerGroupState.type:type_name -> apipb.PeerType + 2, // 99: apipb.PeerGroupState.remove_private:type_name -> apipb.RemovePrivate + 113, // 100: apipb.PeerState.messages:type_name -> apipb.Messages + 1, // 101: apipb.PeerState.type:type_name -> apipb.PeerType + 115, // 102: apipb.PeerState.queues:type_name -> apipb.Queues + 2, // 103: apipb.PeerState.remove_private:type_name -> apipb.RemovePrivate + 16, // 104: apipb.PeerState.session_state:type_name -> apipb.PeerState.SessionState + 17, // 105: apipb.PeerState.admin_state:type_name -> apipb.PeerState.AdminState + 187, // 106: apipb.PeerState.remote_cap:type_name -> apipb.Capability + 187, // 107: apipb.PeerState.local_cap:type_name -> apipb.Capability + 114, // 108: apipb.Messages.received:type_name -> apipb.Message + 114, // 109: apipb.Messages.sent:type_name -> apipb.Message + 117, // 110: apipb.Timers.config:type_name -> apipb.TimersConfig + 118, // 111: apipb.Timers.state:type_name -> apipb.TimersState + 186, // 112: apipb.TimersState.uptime:type_name -> google.protobuf.Timestamp + 186, // 113: apipb.TimersState.downtime:type_name -> google.protobuf.Timestamp + 122, // 114: apipb.MpGracefulRestart.config:type_name -> apipb.MpGracefulRestartConfig + 123, // 115: apipb.MpGracefulRestart.state:type_name -> apipb.MpGracefulRestartState + 183, // 116: apipb.AfiSafiConfig.family:type_name -> apipb.Family + 183, // 117: apipb.AfiSafiState.family:type_name -> apipb.Family + 127, // 118: apipb.RouteSelectionOptions.config:type_name -> apipb.RouteSelectionOptionsConfig + 128, // 119: apipb.RouteSelectionOptions.state:type_name -> apipb.RouteSelectionOptionsState + 132, // 120: apipb.Ebgp.config:type_name -> apipb.EbgpConfig + 133, // 121: apipb.Ebgp.state:type_name -> apipb.EbgpState + 135, // 122: apipb.Ibgp.config:type_name -> apipb.IbgpConfig + 136, // 123: apipb.Ibgp.state:type_name -> apipb.IbgpState + 130, // 124: apipb.UseMultiplePaths.config:type_name -> apipb.UseMultiplePathsConfig + 131, // 125: apipb.UseMultiplePaths.state:type_name -> apipb.UseMultiplePathsState + 134, // 126: apipb.UseMultiplePaths.ebgp:type_name -> apipb.Ebgp + 137, // 127: apipb.UseMultiplePaths.ibgp:type_name -> apipb.Ibgp + 139, // 128: apipb.RouteTargetMembership.config:type_name -> apipb.RouteTargetMembershipConfig + 140, // 129: apipb.RouteTargetMembership.state:type_name -> apipb.RouteTargetMembershipState + 142, // 130: apipb.LongLivedGracefulRestart.config:type_name -> apipb.LongLivedGracefulRestartConfig + 143, // 131: apipb.LongLivedGracefulRestart.state:type_name -> apipb.LongLivedGracefulRestartState + 124, // 132: apipb.AfiSafi.mp_graceful_restart:type_name -> apipb.MpGracefulRestart + 125, // 133: apipb.AfiSafi.config:type_name -> apipb.AfiSafiConfig + 126, // 134: apipb.AfiSafi.state:type_name -> apipb.AfiSafiState + 104, // 135: apipb.AfiSafi.apply_policy:type_name -> apipb.ApplyPolicy + 129, // 136: apipb.AfiSafi.route_selection_options:type_name -> apipb.RouteSelectionOptions + 138, // 137: apipb.AfiSafi.use_multiple_paths:type_name -> apipb.UseMultiplePaths + 105, // 138: apipb.AfiSafi.prefix_limits:type_name -> apipb.PrefixLimit + 141, // 139: apipb.AfiSafi.route_target_membership:type_name -> apipb.RouteTargetMembership + 144, // 140: apipb.AfiSafi.long_lived_graceful_restart:type_name -> apipb.LongLivedGracefulRestart + 148, // 141: apipb.AfiSafi.add_paths:type_name -> apipb.AddPaths + 146, // 142: apipb.AddPaths.config:type_name -> apipb.AddPathsConfig + 147, // 143: apipb.AddPaths.state:type_name -> apipb.AddPathsState + 3, // 144: apipb.DefinedSet.defined_type:type_name -> apipb.DefinedType + 149, // 145: apipb.DefinedSet.prefixes:type_name -> apipb.Prefix + 18, // 146: apipb.MatchSet.type:type_name -> apipb.MatchSet.Type + 19, // 147: apipb.AsPathLength.type:type_name -> apipb.AsPathLength.Type + 20, // 148: apipb.CommunityCount.type:type_name -> apipb.CommunityCount.Type + 151, // 149: apipb.Conditions.prefix_set:type_name -> apipb.MatchSet + 151, // 150: apipb.Conditions.neighbor_set:type_name -> apipb.MatchSet + 152, // 151: apipb.Conditions.as_path_length:type_name -> apipb.AsPathLength + 151, // 152: apipb.Conditions.as_path_set:type_name -> apipb.MatchSet + 151, // 153: apipb.Conditions.community_set:type_name -> apipb.MatchSet + 151, // 154: apipb.Conditions.ext_community_set:type_name -> apipb.MatchSet + 21, // 155: apipb.Conditions.route_type:type_name -> apipb.Conditions.RouteType + 151, // 156: apipb.Conditions.large_community_set:type_name -> apipb.MatchSet + 183, // 157: apipb.Conditions.afi_safi_in:type_name -> apipb.Family + 153, // 158: apipb.Conditions.community_count:type_name -> apipb.CommunityCount + 4, // 159: apipb.Conditions.origin:type_name -> apipb.RouteOriginType + 22, // 160: apipb.CommunityAction.type:type_name -> apipb.CommunityAction.Type + 23, // 161: apipb.MedAction.type:type_name -> apipb.MedAction.Type + 4, // 162: apipb.OriginAction.origin:type_name -> apipb.RouteOriginType + 5, // 163: apipb.Actions.route_action:type_name -> apipb.RouteAction + 155, // 164: apipb.Actions.community:type_name -> apipb.CommunityAction + 156, // 165: apipb.Actions.med:type_name -> apipb.MedAction + 157, // 166: apipb.Actions.as_prepend:type_name -> apipb.AsPrependAction + 155, // 167: apipb.Actions.ext_community:type_name -> apipb.CommunityAction + 158, // 168: apipb.Actions.nexthop:type_name -> apipb.NexthopAction + 159, // 169: apipb.Actions.local_pref:type_name -> apipb.LocalPrefAction + 155, // 170: apipb.Actions.large_community:type_name -> apipb.CommunityAction + 160, // 171: apipb.Actions.origin_action:type_name -> apipb.OriginAction + 154, // 172: apipb.Statement.conditions:type_name -> apipb.Conditions + 161, // 173: apipb.Statement.actions:type_name -> apipb.Actions + 162, // 174: apipb.Policy.statements:type_name -> apipb.Statement + 6, // 175: apipb.PolicyAssignment.direction:type_name -> apipb.PolicyDirection + 163, // 176: apipb.PolicyAssignment.policies:type_name -> apipb.Policy + 5, // 177: apipb.PolicyAssignment.default_action:type_name -> apipb.RouteAction + 150, // 178: apipb.RoutingPolicy.defined_sets:type_name -> apipb.DefinedSet + 163, // 179: apipb.RoutingPolicy.policies:type_name -> apipb.Policy + 171, // 180: apipb.Roa.conf:type_name -> apipb.RPKIConf + 188, // 181: apipb.Vrf.rd:type_name -> apipb.RouteDistinguisher + 189, // 182: apipb.Vrf.import_rt:type_name -> apipb.RouteTarget + 189, // 183: apipb.Vrf.export_rt:type_name -> apipb.RouteTarget + 127, // 184: apipb.Global.route_selection_options:type_name -> apipb.RouteSelectionOptionsConfig + 168, // 185: apipb.Global.default_route_distance:type_name -> apipb.DefaultRouteDistance + 170, // 186: apipb.Global.confederation:type_name -> apipb.Confederation + 121, // 187: apipb.Global.graceful_restart:type_name -> apipb.GracefulRestart + 104, // 188: apipb.Global.apply_policy:type_name -> apipb.ApplyPolicy + 186, // 189: apipb.RPKIState.uptime:type_name -> google.protobuf.Timestamp + 186, // 190: apipb.RPKIState.downtime:type_name -> google.protobuf.Timestamp + 171, // 191: apipb.Rpki.conf:type_name -> apipb.RPKIConf + 172, // 192: apipb.Rpki.state:type_name -> apipb.RPKIState + 24, // 193: apipb.SetLogLevelRequest.level:type_name -> apipb.SetLogLevelRequest.Level + 177, // 194: apipb.WatchEventRequest.Table.filters:type_name -> apipb.WatchEventRequest.Table.Filter + 7, // 195: apipb.WatchEventRequest.Table.Filter.type:type_name -> apipb.WatchEventRequest.Table.Filter.Type + 8, // 196: apipb.WatchEventResponse.PeerEvent.type:type_name -> apipb.WatchEventResponse.PeerEvent.Type + 101, // 197: apipb.WatchEventResponse.PeerEvent.peer:type_name -> apipb.Peer + 99, // 198: apipb.WatchEventResponse.TableEvent.paths:type_name -> apipb.Path + 181, // 199: apipb.ListBmpResponse.BmpStation.conf:type_name -> apipb.ListBmpResponse.BmpStation.Conf + 182, // 200: apipb.ListBmpResponse.BmpStation.state:type_name -> apipb.ListBmpResponse.BmpStation.State + 186, // 201: apipb.ListBmpResponse.BmpStation.State.uptime:type_name -> google.protobuf.Timestamp + 186, // 202: apipb.ListBmpResponse.BmpStation.State.downtime:type_name -> google.protobuf.Timestamp + 25, // 203: apipb.GobgpApi.StartBgp:input_type -> apipb.StartBgpRequest + 26, // 204: apipb.GobgpApi.StopBgp:input_type -> apipb.StopBgpRequest + 27, // 205: apipb.GobgpApi.GetBgp:input_type -> apipb.GetBgpRequest + 29, // 206: apipb.GobgpApi.WatchEvent:input_type -> apipb.WatchEventRequest + 31, // 207: apipb.GobgpApi.AddPeer:input_type -> apipb.AddPeerRequest + 32, // 208: apipb.GobgpApi.DeletePeer:input_type -> apipb.DeletePeerRequest + 33, // 209: apipb.GobgpApi.ListPeer:input_type -> apipb.ListPeerRequest + 35, // 210: apipb.GobgpApi.UpdatePeer:input_type -> apipb.UpdatePeerRequest + 37, // 211: apipb.GobgpApi.ResetPeer:input_type -> apipb.ResetPeerRequest + 38, // 212: apipb.GobgpApi.ShutdownPeer:input_type -> apipb.ShutdownPeerRequest + 39, // 213: apipb.GobgpApi.EnablePeer:input_type -> apipb.EnablePeerRequest + 40, // 214: apipb.GobgpApi.DisablePeer:input_type -> apipb.DisablePeerRequest + 41, // 215: apipb.GobgpApi.AddPeerGroup:input_type -> apipb.AddPeerGroupRequest + 42, // 216: apipb.GobgpApi.DeletePeerGroup:input_type -> apipb.DeletePeerGroupRequest + 45, // 217: apipb.GobgpApi.ListPeerGroup:input_type -> apipb.ListPeerGroupRequest + 43, // 218: apipb.GobgpApi.UpdatePeerGroup:input_type -> apipb.UpdatePeerGroupRequest + 47, // 219: apipb.GobgpApi.AddDynamicNeighbor:input_type -> apipb.AddDynamicNeighborRequest + 49, // 220: apipb.GobgpApi.ListDynamicNeighbor:input_type -> apipb.ListDynamicNeighborRequest + 48, // 221: apipb.GobgpApi.DeleteDynamicNeighbor:input_type -> apipb.DeleteDynamicNeighborRequest + 51, // 222: apipb.GobgpApi.AddPath:input_type -> apipb.AddPathRequest + 53, // 223: apipb.GobgpApi.DeletePath:input_type -> apipb.DeletePathRequest + 55, // 224: apipb.GobgpApi.ListPath:input_type -> apipb.ListPathRequest + 57, // 225: apipb.GobgpApi.AddPathStream:input_type -> apipb.AddPathStreamRequest + 58, // 226: apipb.GobgpApi.GetTable:input_type -> apipb.GetTableRequest + 60, // 227: apipb.GobgpApi.AddVrf:input_type -> apipb.AddVrfRequest + 61, // 228: apipb.GobgpApi.DeleteVrf:input_type -> apipb.DeleteVrfRequest + 62, // 229: apipb.GobgpApi.ListVrf:input_type -> apipb.ListVrfRequest + 64, // 230: apipb.GobgpApi.AddPolicy:input_type -> apipb.AddPolicyRequest + 65, // 231: apipb.GobgpApi.DeletePolicy:input_type -> apipb.DeletePolicyRequest + 66, // 232: apipb.GobgpApi.ListPolicy:input_type -> apipb.ListPolicyRequest + 68, // 233: apipb.GobgpApi.SetPolicies:input_type -> apipb.SetPoliciesRequest + 69, // 234: apipb.GobgpApi.AddDefinedSet:input_type -> apipb.AddDefinedSetRequest + 70, // 235: apipb.GobgpApi.DeleteDefinedSet:input_type -> apipb.DeleteDefinedSetRequest + 71, // 236: apipb.GobgpApi.ListDefinedSet:input_type -> apipb.ListDefinedSetRequest + 73, // 237: apipb.GobgpApi.AddStatement:input_type -> apipb.AddStatementRequest + 74, // 238: apipb.GobgpApi.DeleteStatement:input_type -> apipb.DeleteStatementRequest + 75, // 239: apipb.GobgpApi.ListStatement:input_type -> apipb.ListStatementRequest + 77, // 240: apipb.GobgpApi.AddPolicyAssignment:input_type -> apipb.AddPolicyAssignmentRequest + 78, // 241: apipb.GobgpApi.DeletePolicyAssignment:input_type -> apipb.DeletePolicyAssignmentRequest + 79, // 242: apipb.GobgpApi.ListPolicyAssignment:input_type -> apipb.ListPolicyAssignmentRequest + 81, // 243: apipb.GobgpApi.SetPolicyAssignment:input_type -> apipb.SetPolicyAssignmentRequest + 82, // 244: apipb.GobgpApi.AddRpki:input_type -> apipb.AddRpkiRequest + 83, // 245: apipb.GobgpApi.DeleteRpki:input_type -> apipb.DeleteRpkiRequest + 84, // 246: apipb.GobgpApi.ListRpki:input_type -> apipb.ListRpkiRequest + 86, // 247: apipb.GobgpApi.EnableRpki:input_type -> apipb.EnableRpkiRequest + 87, // 248: apipb.GobgpApi.DisableRpki:input_type -> apipb.DisableRpkiRequest + 88, // 249: apipb.GobgpApi.ResetRpki:input_type -> apipb.ResetRpkiRequest + 89, // 250: apipb.GobgpApi.ListRpkiTable:input_type -> apipb.ListRpkiTableRequest + 91, // 251: apipb.GobgpApi.EnableZebra:input_type -> apipb.EnableZebraRequest + 92, // 252: apipb.GobgpApi.EnableMrt:input_type -> apipb.EnableMrtRequest + 93, // 253: apipb.GobgpApi.DisableMrt:input_type -> apipb.DisableMrtRequest + 94, // 254: apipb.GobgpApi.AddBmp:input_type -> apipb.AddBmpRequest + 95, // 255: apipb.GobgpApi.DeleteBmp:input_type -> apipb.DeleteBmpRequest + 96, // 256: apipb.GobgpApi.ListBmp:input_type -> apipb.ListBmpRequest + 174, // 257: apipb.GobgpApi.SetLogLevel:input_type -> apipb.SetLogLevelRequest + 190, // 258: apipb.GobgpApi.StartBgp:output_type -> google.protobuf.Empty + 190, // 259: apipb.GobgpApi.StopBgp:output_type -> google.protobuf.Empty + 28, // 260: apipb.GobgpApi.GetBgp:output_type -> apipb.GetBgpResponse + 30, // 261: apipb.GobgpApi.WatchEvent:output_type -> apipb.WatchEventResponse + 190, // 262: apipb.GobgpApi.AddPeer:output_type -> google.protobuf.Empty + 190, // 263: apipb.GobgpApi.DeletePeer:output_type -> google.protobuf.Empty + 34, // 264: apipb.GobgpApi.ListPeer:output_type -> apipb.ListPeerResponse + 36, // 265: apipb.GobgpApi.UpdatePeer:output_type -> apipb.UpdatePeerResponse + 190, // 266: apipb.GobgpApi.ResetPeer:output_type -> google.protobuf.Empty + 190, // 267: apipb.GobgpApi.ShutdownPeer:output_type -> google.protobuf.Empty + 190, // 268: apipb.GobgpApi.EnablePeer:output_type -> google.protobuf.Empty + 190, // 269: apipb.GobgpApi.DisablePeer:output_type -> google.protobuf.Empty + 190, // 270: apipb.GobgpApi.AddPeerGroup:output_type -> google.protobuf.Empty + 190, // 271: apipb.GobgpApi.DeletePeerGroup:output_type -> google.protobuf.Empty + 46, // 272: apipb.GobgpApi.ListPeerGroup:output_type -> apipb.ListPeerGroupResponse + 44, // 273: apipb.GobgpApi.UpdatePeerGroup:output_type -> apipb.UpdatePeerGroupResponse + 190, // 274: apipb.GobgpApi.AddDynamicNeighbor:output_type -> google.protobuf.Empty + 50, // 275: apipb.GobgpApi.ListDynamicNeighbor:output_type -> apipb.ListDynamicNeighborResponse + 190, // 276: apipb.GobgpApi.DeleteDynamicNeighbor:output_type -> google.protobuf.Empty + 52, // 277: apipb.GobgpApi.AddPath:output_type -> apipb.AddPathResponse + 190, // 278: apipb.GobgpApi.DeletePath:output_type -> google.protobuf.Empty + 56, // 279: apipb.GobgpApi.ListPath:output_type -> apipb.ListPathResponse + 190, // 280: apipb.GobgpApi.AddPathStream:output_type -> google.protobuf.Empty + 59, // 281: apipb.GobgpApi.GetTable:output_type -> apipb.GetTableResponse + 190, // 282: apipb.GobgpApi.AddVrf:output_type -> google.protobuf.Empty + 190, // 283: apipb.GobgpApi.DeleteVrf:output_type -> google.protobuf.Empty + 63, // 284: apipb.GobgpApi.ListVrf:output_type -> apipb.ListVrfResponse + 190, // 285: apipb.GobgpApi.AddPolicy:output_type -> google.protobuf.Empty + 190, // 286: apipb.GobgpApi.DeletePolicy:output_type -> google.protobuf.Empty + 67, // 287: apipb.GobgpApi.ListPolicy:output_type -> apipb.ListPolicyResponse + 190, // 288: apipb.GobgpApi.SetPolicies:output_type -> google.protobuf.Empty + 190, // 289: apipb.GobgpApi.AddDefinedSet:output_type -> google.protobuf.Empty + 190, // 290: apipb.GobgpApi.DeleteDefinedSet:output_type -> google.protobuf.Empty + 72, // 291: apipb.GobgpApi.ListDefinedSet:output_type -> apipb.ListDefinedSetResponse + 190, // 292: apipb.GobgpApi.AddStatement:output_type -> google.protobuf.Empty + 190, // 293: apipb.GobgpApi.DeleteStatement:output_type -> google.protobuf.Empty + 76, // 294: apipb.GobgpApi.ListStatement:output_type -> apipb.ListStatementResponse + 190, // 295: apipb.GobgpApi.AddPolicyAssignment:output_type -> google.protobuf.Empty + 190, // 296: apipb.GobgpApi.DeletePolicyAssignment:output_type -> google.protobuf.Empty + 80, // 297: apipb.GobgpApi.ListPolicyAssignment:output_type -> apipb.ListPolicyAssignmentResponse + 190, // 298: apipb.GobgpApi.SetPolicyAssignment:output_type -> google.protobuf.Empty + 190, // 299: apipb.GobgpApi.AddRpki:output_type -> google.protobuf.Empty + 190, // 300: apipb.GobgpApi.DeleteRpki:output_type -> google.protobuf.Empty + 85, // 301: apipb.GobgpApi.ListRpki:output_type -> apipb.ListRpkiResponse + 190, // 302: apipb.GobgpApi.EnableRpki:output_type -> google.protobuf.Empty + 190, // 303: apipb.GobgpApi.DisableRpki:output_type -> google.protobuf.Empty + 190, // 304: apipb.GobgpApi.ResetRpki:output_type -> google.protobuf.Empty + 90, // 305: apipb.GobgpApi.ListRpkiTable:output_type -> apipb.ListRpkiTableResponse + 190, // 306: apipb.GobgpApi.EnableZebra:output_type -> google.protobuf.Empty + 190, // 307: apipb.GobgpApi.EnableMrt:output_type -> google.protobuf.Empty + 190, // 308: apipb.GobgpApi.DisableMrt:output_type -> google.protobuf.Empty + 190, // 309: apipb.GobgpApi.AddBmp:output_type -> google.protobuf.Empty + 190, // 310: apipb.GobgpApi.DeleteBmp:output_type -> google.protobuf.Empty + 97, // 311: apipb.GobgpApi.ListBmp:output_type -> apipb.ListBmpResponse + 190, // 312: apipb.GobgpApi.SetLogLevel:output_type -> google.protobuf.Empty + 258, // [258:313] is the sub-list for method output_type + 203, // [203:258] is the sub-list for method input_type + 203, // [203:203] is the sub-list for extension type_name + 203, // [203:203] is the sub-list for extension extendee + 0, // [0:203] is the sub-list for field type_name } func init() { file_gobgp_proto_init() } @@ -14195,6 +13924,11 @@ func file_gobgp_proto_init() { if File_gobgp_proto != nil { return } + file_attribute_proto_init() + file_capability_proto_init() + file_common_proto_init() + file_extcom_proto_init() + file_nlri_proto_init() if !protoimpl.UnsafeEnabled { file_gobgp_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StartBgpRequest); i { @@ -15073,18 +14807,6 @@ func file_gobgp_proto_init() { } } file_gobgp_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Family); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gobgp_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Validation); i { case 0: return &v.state @@ -15096,7 +14818,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Path); i { case 0: return &v.state @@ -15108,7 +14830,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Destination); i { case 0: return &v.state @@ -15120,7 +14842,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Peer); i { case 0: return &v.state @@ -15132,7 +14854,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PeerGroup); i { case 0: return &v.state @@ -15144,7 +14866,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DynamicNeighbor); i { case 0: return &v.state @@ -15156,7 +14878,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ApplyPolicy); i { case 0: return &v.state @@ -15168,7 +14890,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PrefixLimit); i { case 0: return &v.state @@ -15180,7 +14902,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PeerConf); i { case 0: return &v.state @@ -15192,7 +14914,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PeerGroupConf); i { case 0: return &v.state @@ -15204,7 +14926,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PeerGroupState); i { case 0: return &v.state @@ -15216,7 +14938,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TtlSecurity); i { case 0: return &v.state @@ -15228,7 +14950,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EbgpMultihop); i { case 0: return &v.state @@ -15240,7 +14962,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RouteReflector); i { case 0: return &v.state @@ -15252,7 +14974,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PeerState); i { case 0: return &v.state @@ -15264,7 +14986,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Messages); i { case 0: return &v.state @@ -15276,7 +14998,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Message); i { case 0: return &v.state @@ -15288,7 +15010,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Queues); i { case 0: return &v.state @@ -15300,7 +15022,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Timers); i { case 0: return &v.state @@ -15312,7 +15034,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TimersConfig); i { case 0: return &v.state @@ -15324,7 +15046,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TimersState); i { case 0: return &v.state @@ -15336,7 +15058,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Transport); i { case 0: return &v.state @@ -15348,7 +15070,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RouteServer); i { case 0: return &v.state @@ -15360,7 +15082,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GracefulRestart); i { case 0: return &v.state @@ -15372,7 +15094,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MpGracefulRestartConfig); i { case 0: return &v.state @@ -15384,7 +15106,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MpGracefulRestartState); i { case 0: return &v.state @@ -15396,7 +15118,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MpGracefulRestart); i { case 0: return &v.state @@ -15408,7 +15130,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AfiSafiConfig); i { case 0: return &v.state @@ -15420,7 +15142,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AfiSafiState); i { case 0: return &v.state @@ -15432,7 +15154,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RouteSelectionOptionsConfig); i { case 0: return &v.state @@ -15444,7 +15166,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RouteSelectionOptionsState); i { case 0: return &v.state @@ -15456,7 +15178,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RouteSelectionOptions); i { case 0: return &v.state @@ -15468,7 +15190,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UseMultiplePathsConfig); i { case 0: return &v.state @@ -15480,7 +15202,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UseMultiplePathsState); i { case 0: return &v.state @@ -15492,7 +15214,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EbgpConfig); i { case 0: return &v.state @@ -15504,7 +15226,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EbgpState); i { case 0: return &v.state @@ -15516,7 +15238,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Ebgp); i { case 0: return &v.state @@ -15528,7 +15250,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*IbgpConfig); i { case 0: return &v.state @@ -15540,7 +15262,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*IbgpState); i { case 0: return &v.state @@ -15552,7 +15274,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Ibgp); i { case 0: return &v.state @@ -15564,7 +15286,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UseMultiplePaths); i { case 0: return &v.state @@ -15576,7 +15298,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[115].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RouteTargetMembershipConfig); i { case 0: return &v.state @@ -15588,7 +15310,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[116].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[115].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RouteTargetMembershipState); i { case 0: return &v.state @@ -15600,7 +15322,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[117].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[116].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RouteTargetMembership); i { case 0: return &v.state @@ -15612,7 +15334,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[118].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[117].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LongLivedGracefulRestartConfig); i { case 0: return &v.state @@ -15624,7 +15346,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[119].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[118].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LongLivedGracefulRestartState); i { case 0: return &v.state @@ -15636,7 +15358,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[120].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[119].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LongLivedGracefulRestart); i { case 0: return &v.state @@ -15648,7 +15370,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[121].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[120].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AfiSafi); i { case 0: return &v.state @@ -15660,7 +15382,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[122].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[121].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AddPathsConfig); i { case 0: return &v.state @@ -15672,7 +15394,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[123].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[122].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AddPathsState); i { case 0: return &v.state @@ -15684,7 +15406,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[124].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[123].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AddPaths); i { case 0: return &v.state @@ -15696,7 +15418,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[125].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[124].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Prefix); i { case 0: return &v.state @@ -15708,7 +15430,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[126].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[125].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DefinedSet); i { case 0: return &v.state @@ -15720,7 +15442,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[127].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[126].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MatchSet); i { case 0: return &v.state @@ -15732,7 +15454,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[128].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[127].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AsPathLength); i { case 0: return &v.state @@ -15744,7 +15466,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[129].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[128].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CommunityCount); i { case 0: return &v.state @@ -15756,7 +15478,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[130].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[129].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Conditions); i { case 0: return &v.state @@ -15768,7 +15490,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[131].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[130].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CommunityAction); i { case 0: return &v.state @@ -15780,7 +15502,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[132].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[131].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MedAction); i { case 0: return &v.state @@ -15792,7 +15514,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[133].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[132].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AsPrependAction); i { case 0: return &v.state @@ -15804,7 +15526,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[134].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[133].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NexthopAction); i { case 0: return &v.state @@ -15816,7 +15538,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[135].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[134].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LocalPrefAction); i { case 0: return &v.state @@ -15828,7 +15550,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[136].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[135].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OriginAction); i { case 0: return &v.state @@ -15840,7 +15562,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[137].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[136].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Actions); i { case 0: return &v.state @@ -15852,7 +15574,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[138].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[137].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Statement); i { case 0: return &v.state @@ -15864,7 +15586,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[139].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[138].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Policy); i { case 0: return &v.state @@ -15876,7 +15598,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[140].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[139].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PolicyAssignment); i { case 0: return &v.state @@ -15888,7 +15610,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[141].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[140].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RoutingPolicy); i { case 0: return &v.state @@ -15900,7 +15622,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[142].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[141].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Roa); i { case 0: return &v.state @@ -15912,7 +15634,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[143].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[142].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Vrf); i { case 0: return &v.state @@ -15924,7 +15646,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[144].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[143].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DefaultRouteDistance); i { case 0: return &v.state @@ -15936,7 +15658,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[145].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[144].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Global); i { case 0: return &v.state @@ -15948,7 +15670,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[146].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[145].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Confederation); i { case 0: return &v.state @@ -15960,7 +15682,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[147].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[146].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RPKIConf); i { case 0: return &v.state @@ -15972,7 +15694,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[148].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[147].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RPKIState); i { case 0: return &v.state @@ -15984,7 +15706,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[149].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[148].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Rpki); i { case 0: return &v.state @@ -15996,7 +15718,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[150].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[149].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetLogLevelRequest); i { case 0: return &v.state @@ -16008,7 +15730,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[151].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[150].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WatchEventRequest_Peer); i { case 0: return &v.state @@ -16020,7 +15742,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[152].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[151].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WatchEventRequest_Table); i { case 0: return &v.state @@ -16032,7 +15754,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[153].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[152].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WatchEventRequest_Table_Filter); i { case 0: return &v.state @@ -16044,7 +15766,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[154].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[153].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WatchEventResponse_PeerEvent); i { case 0: return &v.state @@ -16056,7 +15778,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[155].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[154].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WatchEventResponse_TableEvent); i { case 0: return &v.state @@ -16068,7 +15790,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[156].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[155].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListBmpResponse_BmpStation); i { case 0: return &v.state @@ -16080,7 +15802,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[157].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[156].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListBmpResponse_BmpStation_Conf); i { case 0: return &v.state @@ -16092,7 +15814,7 @@ func file_gobgp_proto_init() { return nil } } - file_gobgp_proto_msgTypes[158].Exporter = func(v interface{}, i int) interface{} { + file_gobgp_proto_msgTypes[157].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListBmpResponse_BmpStation_State); i { case 0: return &v.state @@ -16114,8 +15836,8 @@ func file_gobgp_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_gobgp_proto_rawDesc, - NumEnums: 27, - NumMessages: 159, + NumEnums: 25, + NumMessages: 158, NumExtensions: 0, NumServices: 1, }, diff --git a/api/gobgp.proto b/api/gobgp.proto index a1b652775..56677ac82 100644 --- a/api/gobgp.proto +++ b/api/gobgp.proto @@ -24,9 +24,13 @@ syntax = "proto3"; package apipb; option go_package = "github.com/osrg/gobgp/v3/api;apipb"; -import "google/protobuf/any.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/timestamp.proto"; +import "attribute.proto"; +import "capability.proto"; +import "common.proto"; +import "extcom.proto"; +import "nlri.proto"; // Interface exported by the server. @@ -460,32 +464,6 @@ message ListBmpResponse { BmpStation station = 1; } -message Family { - enum Afi { - AFI_UNKNOWN = 0; AFI_IP = 1; AFI_IP6 = 2; AFI_L2VPN = 25; AFI_LS = 16388; - AFI_OPAQUE = 16397; - } - - enum Safi { - SAFI_UNKNOWN = 0; SAFI_UNICAST = 1; SAFI_MULTICAST = 2; SAFI_MPLS_LABEL = 4; - SAFI_ENCAPSULATION = 7; - SAFI_VPLS = 65; - SAFI_EVPN = 70; - SAFI_LS = 71; - SAFI_SR_POLICY = 73; - SAFI_MUP = 85; - SAFI_MPLS_VPN = 128; - SAFI_MPLS_VPN_MULTICAST = 129; - SAFI_ROUTE_TARGET_CONSTRAINTS = 132; - SAFI_FLOW_SPEC_UNICAST = 133; - SAFI_FLOW_SPEC_VPN = 134; - SAFI_KEY_VALUE = 241; - } - - Afi afi = 1; - Safi safi = 2; -} - enum TableType { GLOBAL = 0; LOCAL = 1; ADJ_IN = 2; ADJ_OUT = 3; VRF = 4; } message Validation { @@ -503,32 +481,8 @@ message Validation { } message Path { - // One of the following defined in "api/attribute.proto": - // - IPAddressPrefix - // - LabeledIPAddressPrefix - // - EncapsulationNLRI - // - VPLSNLRI - // - EVPNEthernetAutoDiscoveryRoute - // - EVPNMACIPAdvertisementRoute - // - EVPNInclusiveMulticastEthernetTagRoute - // - EVPNEthernetSegmentRoute - // - EVPNIPPrefixRoute - // - EVPNIPMSIRoute - // - LabeledVPNIPAddressPrefix - // - RouteTargetMembershipNLRI - // - FlowSpecNLRI - // - VPNFlowSpecNLRI - // - OpaqueNLRI - // - LsAddrPrefix - // - SRPolicyNLRI - // - MUPInterworkSegmentDiscoveryRoute - // - MUPDirectSegmentDiscoveryRoute - // - MUPType1SessionTransformedRoute - // - MUPType2SessionTransformedRoute - google.protobuf.Any nlri = 1; - // Each attribute must be one of *Attribute defined in - // "api/attribute.proto". - repeated google.protobuf.Any pattrs = 2; + NLRI nlri = 1; + repeated Attribute pattrs = 2; google.protobuf.Timestamp age = 3; bool best = 4; bool is_withdraw = 5; @@ -690,10 +644,8 @@ message PeerState { AdminState admin_state = 15; uint32 out_q = 16; uint32 flops = 17; - // Each attribute must be one of *Capability defined in - // "api/capability.proto". - repeated google.protobuf.Any remote_cap = 18; - repeated google.protobuf.Any local_cap = 19; + repeated Capability remote_cap = 18; + repeated Capability local_cap = 19; string router_id = 20; } @@ -1072,21 +1024,9 @@ message Roa { message Vrf { string name = 1; - // Route Distinguisher must be one of - // RouteDistinguisherTwoOctetAS, - // RouteDistinguisherIPAddressAS, - // or RouteDistinguisherFourOctetAS. - google.protobuf.Any rd = 2; - // List of the Import Route Targets. Each must be one of - // TwoOctetAsSpecificExtended, - // IPv4AddressSpecificExtended, - // or FourOctetAsSpecificExtended. - repeated google.protobuf.Any import_rt = 3; - // List of the Export Route Targets. Each must be one of - // TwoOctetAsSpecificExtended, - // IPv4AddressSpecificExtended, - // or FourOctetAsSpecificExtended. - repeated google.protobuf.Any export_rt = 4; + RouteDistinguisher rd = 2; + repeated RouteTarget import_rt = 3; + repeated RouteTarget export_rt = 4; uint32 id = 5; } diff --git a/api/nlri.pb.go b/api/nlri.pb.go new file mode 100644 index 000000000..18c4d5f3d --- /dev/null +++ b/api/nlri.pb.go @@ -0,0 +1,4056 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v5.29.2 +// source: nlri.proto + +package apipb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Based om RFC 7752, Table 1. +type LsNLRIType int32 + +const ( + LsNLRIType_LS_NLRI_UNKNOWN LsNLRIType = 0 + LsNLRIType_LS_NLRI_NODE LsNLRIType = 1 + LsNLRIType_LS_NLRI_LINK LsNLRIType = 2 + LsNLRIType_LS_NLRI_PREFIX_V4 LsNLRIType = 3 + LsNLRIType_LS_NLRI_PREFIX_V6 LsNLRIType = 4 +) + +// Enum value maps for LsNLRIType. +var ( + LsNLRIType_name = map[int32]string{ + 0: "LS_NLRI_UNKNOWN", + 1: "LS_NLRI_NODE", + 2: "LS_NLRI_LINK", + 3: "LS_NLRI_PREFIX_V4", + 4: "LS_NLRI_PREFIX_V6", + } + LsNLRIType_value = map[string]int32{ + "LS_NLRI_UNKNOWN": 0, + "LS_NLRI_NODE": 1, + "LS_NLRI_LINK": 2, + "LS_NLRI_PREFIX_V4": 3, + "LS_NLRI_PREFIX_V6": 4, + } +) + +func (x LsNLRIType) Enum() *LsNLRIType { + p := new(LsNLRIType) + *p = x + return p +} + +func (x LsNLRIType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (LsNLRIType) Descriptor() protoreflect.EnumDescriptor { + return file_nlri_proto_enumTypes[0].Descriptor() +} + +func (LsNLRIType) Type() protoreflect.EnumType { + return &file_nlri_proto_enumTypes[0] +} + +func (x LsNLRIType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use LsNLRIType.Descriptor instead. +func (LsNLRIType) EnumDescriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{0} +} + +type LsProtocolID int32 + +const ( + LsProtocolID_LS_PROTOCOL_UNKNOWN LsProtocolID = 0 + LsProtocolID_LS_PROTOCOL_ISIS_L1 LsProtocolID = 1 + LsProtocolID_LS_PROTOCOL_ISIS_L2 LsProtocolID = 2 + LsProtocolID_LS_PROTOCOL_OSPF_V2 LsProtocolID = 3 + LsProtocolID_LS_PROTOCOL_DIRECT LsProtocolID = 4 + LsProtocolID_LS_PROTOCOL_STATIC LsProtocolID = 5 + LsProtocolID_LS_PROTOCOL_OSPF_V3 LsProtocolID = 6 +) + +// Enum value maps for LsProtocolID. +var ( + LsProtocolID_name = map[int32]string{ + 0: "LS_PROTOCOL_UNKNOWN", + 1: "LS_PROTOCOL_ISIS_L1", + 2: "LS_PROTOCOL_ISIS_L2", + 3: "LS_PROTOCOL_OSPF_V2", + 4: "LS_PROTOCOL_DIRECT", + 5: "LS_PROTOCOL_STATIC", + 6: "LS_PROTOCOL_OSPF_V3", + } + LsProtocolID_value = map[string]int32{ + "LS_PROTOCOL_UNKNOWN": 0, + "LS_PROTOCOL_ISIS_L1": 1, + "LS_PROTOCOL_ISIS_L2": 2, + "LS_PROTOCOL_OSPF_V2": 3, + "LS_PROTOCOL_DIRECT": 4, + "LS_PROTOCOL_STATIC": 5, + "LS_PROTOCOL_OSPF_V3": 6, + } +) + +func (x LsProtocolID) Enum() *LsProtocolID { + p := new(LsProtocolID) + *p = x + return p +} + +func (x LsProtocolID) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (LsProtocolID) Descriptor() protoreflect.EnumDescriptor { + return file_nlri_proto_enumTypes[1].Descriptor() +} + +func (LsProtocolID) Type() protoreflect.EnumType { + return &file_nlri_proto_enumTypes[1] +} + +func (x LsProtocolID) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use LsProtocolID.Descriptor instead. +func (LsProtocolID) EnumDescriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{1} +} + +type LsOspfRouteType int32 + +const ( + LsOspfRouteType_LS_OSPF_ROUTE_TYPE_UNKNOWN LsOspfRouteType = 0 + LsOspfRouteType_LS_OSPF_ROUTE_TYPE_INTRA_AREA LsOspfRouteType = 1 + LsOspfRouteType_LS_OSPF_ROUTE_TYPE_INTER_AREA LsOspfRouteType = 2 + LsOspfRouteType_LS_OSPF_ROUTE_TYPE_EXTERNAL1 LsOspfRouteType = 3 + LsOspfRouteType_LS_OSPF_ROUTE_TYPE_EXTERNAL2 LsOspfRouteType = 4 + LsOspfRouteType_LS_OSPF_ROUTE_TYPE_NSSA1 LsOspfRouteType = 5 + LsOspfRouteType_LS_OSPF_ROUTE_TYPE_NSSA2 LsOspfRouteType = 6 +) + +// Enum value maps for LsOspfRouteType. +var ( + LsOspfRouteType_name = map[int32]string{ + 0: "LS_OSPF_ROUTE_TYPE_UNKNOWN", + 1: "LS_OSPF_ROUTE_TYPE_INTRA_AREA", + 2: "LS_OSPF_ROUTE_TYPE_INTER_AREA", + 3: "LS_OSPF_ROUTE_TYPE_EXTERNAL1", + 4: "LS_OSPF_ROUTE_TYPE_EXTERNAL2", + 5: "LS_OSPF_ROUTE_TYPE_NSSA1", + 6: "LS_OSPF_ROUTE_TYPE_NSSA2", + } + LsOspfRouteType_value = map[string]int32{ + "LS_OSPF_ROUTE_TYPE_UNKNOWN": 0, + "LS_OSPF_ROUTE_TYPE_INTRA_AREA": 1, + "LS_OSPF_ROUTE_TYPE_INTER_AREA": 2, + "LS_OSPF_ROUTE_TYPE_EXTERNAL1": 3, + "LS_OSPF_ROUTE_TYPE_EXTERNAL2": 4, + "LS_OSPF_ROUTE_TYPE_NSSA1": 5, + "LS_OSPF_ROUTE_TYPE_NSSA2": 6, + } +) + +func (x LsOspfRouteType) Enum() *LsOspfRouteType { + p := new(LsOspfRouteType) + *p = x + return p +} + +func (x LsOspfRouteType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (LsOspfRouteType) Descriptor() protoreflect.EnumDescriptor { + return file_nlri_proto_enumTypes[2].Descriptor() +} + +func (LsOspfRouteType) Type() protoreflect.EnumType { + return &file_nlri_proto_enumTypes[2] +} + +func (x LsOspfRouteType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use LsOspfRouteType.Descriptor instead. +func (LsOspfRouteType) EnumDescriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{2} +} + +type NLRI struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Nlri: + // + // *NLRI_Prefix + // *NLRI_LabeledPrefix + // *NLRI_Encapsulation + // *NLRI_Vpls + // *NLRI_EvpnEthernetAd + // *NLRI_EvpnMacadv + // *NLRI_EvpnMulticast + // *NLRI_EvpnEthernetSegment + // *NLRI_EvpnIpPrefix + // *NLRI_EvpnIPmsi + // *NLRI_LabeledVpnIpPrefix + // *NLRI_RouteTargetMembership + // *NLRI_FlowSpec + // *NLRI_VpnFlowSpec + // *NLRI_Opaque + // *NLRI_LsAddrPrefix + // *NLRI_SrPolicy + // *NLRI_MupInterworkSegmentDiscovery + // *NLRI_MupDirectSegmentDiscovery + // *NLRI_MupType_1SessionTransformed + // *NLRI_MupType_2SessionTransformed + Nlri isNLRI_Nlri `protobuf_oneof:"nlri"` +} + +func (x *NLRI) Reset() { + *x = NLRI{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NLRI) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NLRI) ProtoMessage() {} + +func (x *NLRI) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NLRI.ProtoReflect.Descriptor instead. +func (*NLRI) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{0} +} + +func (m *NLRI) GetNlri() isNLRI_Nlri { + if m != nil { + return m.Nlri + } + return nil +} + +func (x *NLRI) GetPrefix() *IPAddressPrefix { + if x, ok := x.GetNlri().(*NLRI_Prefix); ok { + return x.Prefix + } + return nil +} + +func (x *NLRI) GetLabeledPrefix() *LabeledIPAddressPrefix { + if x, ok := x.GetNlri().(*NLRI_LabeledPrefix); ok { + return x.LabeledPrefix + } + return nil +} + +func (x *NLRI) GetEncapsulation() *EncapsulationNLRI { + if x, ok := x.GetNlri().(*NLRI_Encapsulation); ok { + return x.Encapsulation + } + return nil +} + +func (x *NLRI) GetVpls() *VPLSNLRI { + if x, ok := x.GetNlri().(*NLRI_Vpls); ok { + return x.Vpls + } + return nil +} + +func (x *NLRI) GetEvpnEthernetAd() *EVPNEthernetAutoDiscoveryRoute { + if x, ok := x.GetNlri().(*NLRI_EvpnEthernetAd); ok { + return x.EvpnEthernetAd + } + return nil +} + +func (x *NLRI) GetEvpnMacadv() *EVPNMACIPAdvertisementRoute { + if x, ok := x.GetNlri().(*NLRI_EvpnMacadv); ok { + return x.EvpnMacadv + } + return nil +} + +func (x *NLRI) GetEvpnMulticast() *EVPNInclusiveMulticastEthernetTagRoute { + if x, ok := x.GetNlri().(*NLRI_EvpnMulticast); ok { + return x.EvpnMulticast + } + return nil +} + +func (x *NLRI) GetEvpnEthernetSegment() *EVPNEthernetSegmentRoute { + if x, ok := x.GetNlri().(*NLRI_EvpnEthernetSegment); ok { + return x.EvpnEthernetSegment + } + return nil +} + +func (x *NLRI) GetEvpnIpPrefix() *EVPNIPPrefixRoute { + if x, ok := x.GetNlri().(*NLRI_EvpnIpPrefix); ok { + return x.EvpnIpPrefix + } + return nil +} + +func (x *NLRI) GetEvpnIPmsi() *EVPNIPMSIRoute { + if x, ok := x.GetNlri().(*NLRI_EvpnIPmsi); ok { + return x.EvpnIPmsi + } + return nil +} + +func (x *NLRI) GetLabeledVpnIpPrefix() *LabeledVPNIPAddressPrefix { + if x, ok := x.GetNlri().(*NLRI_LabeledVpnIpPrefix); ok { + return x.LabeledVpnIpPrefix + } + return nil +} + +func (x *NLRI) GetRouteTargetMembership() *RouteTargetMembershipNLRI { + if x, ok := x.GetNlri().(*NLRI_RouteTargetMembership); ok { + return x.RouteTargetMembership + } + return nil +} + +func (x *NLRI) GetFlowSpec() *FlowSpecNLRI { + if x, ok := x.GetNlri().(*NLRI_FlowSpec); ok { + return x.FlowSpec + } + return nil +} + +func (x *NLRI) GetVpnFlowSpec() *VPNFlowSpecNLRI { + if x, ok := x.GetNlri().(*NLRI_VpnFlowSpec); ok { + return x.VpnFlowSpec + } + return nil +} + +func (x *NLRI) GetOpaque() *OpaqueNLRI { + if x, ok := x.GetNlri().(*NLRI_Opaque); ok { + return x.Opaque + } + return nil +} + +func (x *NLRI) GetLsAddrPrefix() *LsAddrPrefix { + if x, ok := x.GetNlri().(*NLRI_LsAddrPrefix); ok { + return x.LsAddrPrefix + } + return nil +} + +func (x *NLRI) GetSrPolicy() *SRPolicyNLRI { + if x, ok := x.GetNlri().(*NLRI_SrPolicy); ok { + return x.SrPolicy + } + return nil +} + +func (x *NLRI) GetMupInterworkSegmentDiscovery() *MUPInterworkSegmentDiscoveryRoute { + if x, ok := x.GetNlri().(*NLRI_MupInterworkSegmentDiscovery); ok { + return x.MupInterworkSegmentDiscovery + } + return nil +} + +func (x *NLRI) GetMupDirectSegmentDiscovery() *MUPDirectSegmentDiscoveryRoute { + if x, ok := x.GetNlri().(*NLRI_MupDirectSegmentDiscovery); ok { + return x.MupDirectSegmentDiscovery + } + return nil +} + +func (x *NLRI) GetMupType_1SessionTransformed() *MUPType1SessionTransformedRoute { + if x, ok := x.GetNlri().(*NLRI_MupType_1SessionTransformed); ok { + return x.MupType_1SessionTransformed + } + return nil +} + +func (x *NLRI) GetMupType_2SessionTransformed() *MUPType2SessionTransformedRoute { + if x, ok := x.GetNlri().(*NLRI_MupType_2SessionTransformed); ok { + return x.MupType_2SessionTransformed + } + return nil +} + +type isNLRI_Nlri interface { + isNLRI_Nlri() +} + +type NLRI_Prefix struct { + Prefix *IPAddressPrefix `protobuf:"bytes,1,opt,name=prefix,proto3,oneof"` +} + +type NLRI_LabeledPrefix struct { + LabeledPrefix *LabeledIPAddressPrefix `protobuf:"bytes,2,opt,name=labeled_prefix,json=labeledPrefix,proto3,oneof"` +} + +type NLRI_Encapsulation struct { + Encapsulation *EncapsulationNLRI `protobuf:"bytes,3,opt,name=encapsulation,proto3,oneof"` +} + +type NLRI_Vpls struct { + Vpls *VPLSNLRI `protobuf:"bytes,4,opt,name=vpls,proto3,oneof"` +} + +type NLRI_EvpnEthernetAd struct { + EvpnEthernetAd *EVPNEthernetAutoDiscoveryRoute `protobuf:"bytes,5,opt,name=evpn_ethernet_ad,json=evpnEthernetAd,proto3,oneof"` +} + +type NLRI_EvpnMacadv struct { + EvpnMacadv *EVPNMACIPAdvertisementRoute `protobuf:"bytes,6,opt,name=evpn_macadv,json=evpnMacadv,proto3,oneof"` +} + +type NLRI_EvpnMulticast struct { + EvpnMulticast *EVPNInclusiveMulticastEthernetTagRoute `protobuf:"bytes,7,opt,name=evpn_multicast,json=evpnMulticast,proto3,oneof"` +} + +type NLRI_EvpnEthernetSegment struct { + EvpnEthernetSegment *EVPNEthernetSegmentRoute `protobuf:"bytes,8,opt,name=evpn_ethernet_segment,json=evpnEthernetSegment,proto3,oneof"` +} + +type NLRI_EvpnIpPrefix struct { + EvpnIpPrefix *EVPNIPPrefixRoute `protobuf:"bytes,9,opt,name=evpn_ip_prefix,json=evpnIpPrefix,proto3,oneof"` +} + +type NLRI_EvpnIPmsi struct { + EvpnIPmsi *EVPNIPMSIRoute `protobuf:"bytes,10,opt,name=evpn_i_pmsi,json=evpnIPmsi,proto3,oneof"` +} + +type NLRI_LabeledVpnIpPrefix struct { + LabeledVpnIpPrefix *LabeledVPNIPAddressPrefix `protobuf:"bytes,11,opt,name=labeled_vpn_ip_prefix,json=labeledVpnIpPrefix,proto3,oneof"` +} + +type NLRI_RouteTargetMembership struct { + RouteTargetMembership *RouteTargetMembershipNLRI `protobuf:"bytes,12,opt,name=route_target_membership,json=routeTargetMembership,proto3,oneof"` +} + +type NLRI_FlowSpec struct { + FlowSpec *FlowSpecNLRI `protobuf:"bytes,13,opt,name=flow_spec,json=flowSpec,proto3,oneof"` +} + +type NLRI_VpnFlowSpec struct { + VpnFlowSpec *VPNFlowSpecNLRI `protobuf:"bytes,14,opt,name=vpn_flow_spec,json=vpnFlowSpec,proto3,oneof"` +} + +type NLRI_Opaque struct { + Opaque *OpaqueNLRI `protobuf:"bytes,15,opt,name=opaque,proto3,oneof"` +} + +type NLRI_LsAddrPrefix struct { + LsAddrPrefix *LsAddrPrefix `protobuf:"bytes,16,opt,name=ls_addr_prefix,json=lsAddrPrefix,proto3,oneof"` +} + +type NLRI_SrPolicy struct { + SrPolicy *SRPolicyNLRI `protobuf:"bytes,17,opt,name=sr_policy,json=srPolicy,proto3,oneof"` +} + +type NLRI_MupInterworkSegmentDiscovery struct { + MupInterworkSegmentDiscovery *MUPInterworkSegmentDiscoveryRoute `protobuf:"bytes,18,opt,name=mup_interwork_segment_discovery,json=mupInterworkSegmentDiscovery,proto3,oneof"` +} + +type NLRI_MupDirectSegmentDiscovery struct { + MupDirectSegmentDiscovery *MUPDirectSegmentDiscoveryRoute `protobuf:"bytes,19,opt,name=mup_direct_segment_discovery,json=mupDirectSegmentDiscovery,proto3,oneof"` +} + +type NLRI_MupType_1SessionTransformed struct { + MupType_1SessionTransformed *MUPType1SessionTransformedRoute `protobuf:"bytes,20,opt,name=mup_type_1_session_transformed,json=mupType1SessionTransformed,proto3,oneof"` +} + +type NLRI_MupType_2SessionTransformed struct { + MupType_2SessionTransformed *MUPType2SessionTransformedRoute `protobuf:"bytes,21,opt,name=mup_type_2_session_transformed,json=mupType2SessionTransformed,proto3,oneof"` +} + +func (*NLRI_Prefix) isNLRI_Nlri() {} + +func (*NLRI_LabeledPrefix) isNLRI_Nlri() {} + +func (*NLRI_Encapsulation) isNLRI_Nlri() {} + +func (*NLRI_Vpls) isNLRI_Nlri() {} + +func (*NLRI_EvpnEthernetAd) isNLRI_Nlri() {} + +func (*NLRI_EvpnMacadv) isNLRI_Nlri() {} + +func (*NLRI_EvpnMulticast) isNLRI_Nlri() {} + +func (*NLRI_EvpnEthernetSegment) isNLRI_Nlri() {} + +func (*NLRI_EvpnIpPrefix) isNLRI_Nlri() {} + +func (*NLRI_EvpnIPmsi) isNLRI_Nlri() {} + +func (*NLRI_LabeledVpnIpPrefix) isNLRI_Nlri() {} + +func (*NLRI_RouteTargetMembership) isNLRI_Nlri() {} + +func (*NLRI_FlowSpec) isNLRI_Nlri() {} + +func (*NLRI_VpnFlowSpec) isNLRI_Nlri() {} + +func (*NLRI_Opaque) isNLRI_Nlri() {} + +func (*NLRI_LsAddrPrefix) isNLRI_Nlri() {} + +func (*NLRI_SrPolicy) isNLRI_Nlri() {} + +func (*NLRI_MupInterworkSegmentDiscovery) isNLRI_Nlri() {} + +func (*NLRI_MupDirectSegmentDiscovery) isNLRI_Nlri() {} + +func (*NLRI_MupType_1SessionTransformed) isNLRI_Nlri() {} + +func (*NLRI_MupType_2SessionTransformed) isNLRI_Nlri() {} + +// IPAddressPrefix represents the NLRI for: +// - AFI=1, SAFI=1 +// - AFI=2, SAFI=1 +type IPAddressPrefix struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PrefixLen uint32 `protobuf:"varint,1,opt,name=prefix_len,json=prefixLen,proto3" json:"prefix_len,omitempty"` + Prefix string `protobuf:"bytes,2,opt,name=prefix,proto3" json:"prefix,omitempty"` +} + +func (x *IPAddressPrefix) Reset() { + *x = IPAddressPrefix{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IPAddressPrefix) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IPAddressPrefix) ProtoMessage() {} + +func (x *IPAddressPrefix) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IPAddressPrefix.ProtoReflect.Descriptor instead. +func (*IPAddressPrefix) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{1} +} + +func (x *IPAddressPrefix) GetPrefixLen() uint32 { + if x != nil { + return x.PrefixLen + } + return 0 +} + +func (x *IPAddressPrefix) GetPrefix() string { + if x != nil { + return x.Prefix + } + return "" +} + +// LabeledIPAddressPrefix represents the NLRI for: +// - AFI=1, SAFI=4 +// - AFI=2, SAFI=4 +type LabeledIPAddressPrefix struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Labels []uint32 `protobuf:"varint,1,rep,packed,name=labels,proto3" json:"labels,omitempty"` + PrefixLen uint32 `protobuf:"varint,2,opt,name=prefix_len,json=prefixLen,proto3" json:"prefix_len,omitempty"` + Prefix string `protobuf:"bytes,3,opt,name=prefix,proto3" json:"prefix,omitempty"` +} + +func (x *LabeledIPAddressPrefix) Reset() { + *x = LabeledIPAddressPrefix{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LabeledIPAddressPrefix) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LabeledIPAddressPrefix) ProtoMessage() {} + +func (x *LabeledIPAddressPrefix) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LabeledIPAddressPrefix.ProtoReflect.Descriptor instead. +func (*LabeledIPAddressPrefix) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{2} +} + +func (x *LabeledIPAddressPrefix) GetLabels() []uint32 { + if x != nil { + return x.Labels + } + return nil +} + +func (x *LabeledIPAddressPrefix) GetPrefixLen() uint32 { + if x != nil { + return x.PrefixLen + } + return 0 +} + +func (x *LabeledIPAddressPrefix) GetPrefix() string { + if x != nil { + return x.Prefix + } + return "" +} + +// EncapsulationNLRI represents the NLRI for: +// - AFI=1, SAFI=7 +// - AFI=2, SAFI=7 +type EncapsulationNLRI struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *EncapsulationNLRI) Reset() { + *x = EncapsulationNLRI{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EncapsulationNLRI) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EncapsulationNLRI) ProtoMessage() {} + +func (x *EncapsulationNLRI) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EncapsulationNLRI.ProtoReflect.Descriptor instead. +func (*EncapsulationNLRI) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{3} +} + +func (x *EncapsulationNLRI) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +// VPLSNLRI represents the NLRI for: +// - AFI=25, SAFI=65 +type VPLSNLRI struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Rd *RouteDistinguisher `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` + VeId uint32 `protobuf:"varint,2,opt,name=ve_id,json=veId,proto3" json:"ve_id,omitempty"` + VeBlockOffset uint32 `protobuf:"varint,3,opt,name=ve_block_offset,json=veBlockOffset,proto3" json:"ve_block_offset,omitempty"` + VeBlockSize uint32 `protobuf:"varint,4,opt,name=ve_block_size,json=veBlockSize,proto3" json:"ve_block_size,omitempty"` + LabelBlockBase uint32 `protobuf:"varint,5,opt,name=label_block_base,json=labelBlockBase,proto3" json:"label_block_base,omitempty"` +} + +func (x *VPLSNLRI) Reset() { + *x = VPLSNLRI{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VPLSNLRI) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VPLSNLRI) ProtoMessage() {} + +func (x *VPLSNLRI) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VPLSNLRI.ProtoReflect.Descriptor instead. +func (*VPLSNLRI) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{4} +} + +func (x *VPLSNLRI) GetRd() *RouteDistinguisher { + if x != nil { + return x.Rd + } + return nil +} + +func (x *VPLSNLRI) GetVeId() uint32 { + if x != nil { + return x.VeId + } + return 0 +} + +func (x *VPLSNLRI) GetVeBlockOffset() uint32 { + if x != nil { + return x.VeBlockOffset + } + return 0 +} + +func (x *VPLSNLRI) GetVeBlockSize() uint32 { + if x != nil { + return x.VeBlockSize + } + return 0 +} + +func (x *VPLSNLRI) GetLabelBlockBase() uint32 { + if x != nil { + return x.LabelBlockBase + } + return 0 +} + +type EthernetSegmentIdentifier struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type uint32 `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"` + Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *EthernetSegmentIdentifier) Reset() { + *x = EthernetSegmentIdentifier{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EthernetSegmentIdentifier) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EthernetSegmentIdentifier) ProtoMessage() {} + +func (x *EthernetSegmentIdentifier) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EthernetSegmentIdentifier.ProtoReflect.Descriptor instead. +func (*EthernetSegmentIdentifier) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{5} +} + +func (x *EthernetSegmentIdentifier) GetType() uint32 { + if x != nil { + return x.Type + } + return 0 +} + +func (x *EthernetSegmentIdentifier) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +// EVPNEthernetAutoDiscoveryRoute represents the NLRI for: +// - AFI=25, SAFI=70, RouteType=1 +type EVPNEthernetAutoDiscoveryRoute struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Rd *RouteDistinguisher `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` + Esi *EthernetSegmentIdentifier `protobuf:"bytes,2,opt,name=esi,proto3" json:"esi,omitempty"` + EthernetTag uint32 `protobuf:"varint,3,opt,name=ethernet_tag,json=ethernetTag,proto3" json:"ethernet_tag,omitempty"` + Label uint32 `protobuf:"varint,4,opt,name=label,proto3" json:"label,omitempty"` +} + +func (x *EVPNEthernetAutoDiscoveryRoute) Reset() { + *x = EVPNEthernetAutoDiscoveryRoute{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EVPNEthernetAutoDiscoveryRoute) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EVPNEthernetAutoDiscoveryRoute) ProtoMessage() {} + +func (x *EVPNEthernetAutoDiscoveryRoute) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EVPNEthernetAutoDiscoveryRoute.ProtoReflect.Descriptor instead. +func (*EVPNEthernetAutoDiscoveryRoute) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{6} +} + +func (x *EVPNEthernetAutoDiscoveryRoute) GetRd() *RouteDistinguisher { + if x != nil { + return x.Rd + } + return nil +} + +func (x *EVPNEthernetAutoDiscoveryRoute) GetEsi() *EthernetSegmentIdentifier { + if x != nil { + return x.Esi + } + return nil +} + +func (x *EVPNEthernetAutoDiscoveryRoute) GetEthernetTag() uint32 { + if x != nil { + return x.EthernetTag + } + return 0 +} + +func (x *EVPNEthernetAutoDiscoveryRoute) GetLabel() uint32 { + if x != nil { + return x.Label + } + return 0 +} + +// EVPNMACIPAdvertisementRoute represents the NLRI for: +// - AFI=25, SAFI=70, RouteType=2 +type EVPNMACIPAdvertisementRoute struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Rd *RouteDistinguisher `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` + Esi *EthernetSegmentIdentifier `protobuf:"bytes,2,opt,name=esi,proto3" json:"esi,omitempty"` + EthernetTag uint32 `protobuf:"varint,3,opt,name=ethernet_tag,json=ethernetTag,proto3" json:"ethernet_tag,omitempty"` + MacAddress string `protobuf:"bytes,4,opt,name=mac_address,json=macAddress,proto3" json:"mac_address,omitempty"` + IpAddress string `protobuf:"bytes,5,opt,name=ip_address,json=ipAddress,proto3" json:"ip_address,omitempty"` + Labels []uint32 `protobuf:"varint,6,rep,packed,name=labels,proto3" json:"labels,omitempty"` +} + +func (x *EVPNMACIPAdvertisementRoute) Reset() { + *x = EVPNMACIPAdvertisementRoute{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EVPNMACIPAdvertisementRoute) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EVPNMACIPAdvertisementRoute) ProtoMessage() {} + +func (x *EVPNMACIPAdvertisementRoute) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EVPNMACIPAdvertisementRoute.ProtoReflect.Descriptor instead. +func (*EVPNMACIPAdvertisementRoute) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{7} +} + +func (x *EVPNMACIPAdvertisementRoute) GetRd() *RouteDistinguisher { + if x != nil { + return x.Rd + } + return nil +} + +func (x *EVPNMACIPAdvertisementRoute) GetEsi() *EthernetSegmentIdentifier { + if x != nil { + return x.Esi + } + return nil +} + +func (x *EVPNMACIPAdvertisementRoute) GetEthernetTag() uint32 { + if x != nil { + return x.EthernetTag + } + return 0 +} + +func (x *EVPNMACIPAdvertisementRoute) GetMacAddress() string { + if x != nil { + return x.MacAddress + } + return "" +} + +func (x *EVPNMACIPAdvertisementRoute) GetIpAddress() string { + if x != nil { + return x.IpAddress + } + return "" +} + +func (x *EVPNMACIPAdvertisementRoute) GetLabels() []uint32 { + if x != nil { + return x.Labels + } + return nil +} + +// EVPNInclusiveMulticastEthernetTagRoute represents the NLRI for: +// - AFI=25, SAFI=70, RouteType=3 +type EVPNInclusiveMulticastEthernetTagRoute struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Rd *RouteDistinguisher `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` + EthernetTag uint32 `protobuf:"varint,2,opt,name=ethernet_tag,json=ethernetTag,proto3" json:"ethernet_tag,omitempty"` + IpAddress string `protobuf:"bytes,3,opt,name=ip_address,json=ipAddress,proto3" json:"ip_address,omitempty"` +} + +func (x *EVPNInclusiveMulticastEthernetTagRoute) Reset() { + *x = EVPNInclusiveMulticastEthernetTagRoute{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EVPNInclusiveMulticastEthernetTagRoute) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EVPNInclusiveMulticastEthernetTagRoute) ProtoMessage() {} + +func (x *EVPNInclusiveMulticastEthernetTagRoute) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EVPNInclusiveMulticastEthernetTagRoute.ProtoReflect.Descriptor instead. +func (*EVPNInclusiveMulticastEthernetTagRoute) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{8} +} + +func (x *EVPNInclusiveMulticastEthernetTagRoute) GetRd() *RouteDistinguisher { + if x != nil { + return x.Rd + } + return nil +} + +func (x *EVPNInclusiveMulticastEthernetTagRoute) GetEthernetTag() uint32 { + if x != nil { + return x.EthernetTag + } + return 0 +} + +func (x *EVPNInclusiveMulticastEthernetTagRoute) GetIpAddress() string { + if x != nil { + return x.IpAddress + } + return "" +} + +// EVPNEthernetSegmentRoute represents the NLRI for: +// - AFI=25, SAFI=70, RouteType=4 +type EVPNEthernetSegmentRoute struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Rd *RouteDistinguisher `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` + Esi *EthernetSegmentIdentifier `protobuf:"bytes,2,opt,name=esi,proto3" json:"esi,omitempty"` + IpAddress string `protobuf:"bytes,3,opt,name=ip_address,json=ipAddress,proto3" json:"ip_address,omitempty"` +} + +func (x *EVPNEthernetSegmentRoute) Reset() { + *x = EVPNEthernetSegmentRoute{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EVPNEthernetSegmentRoute) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EVPNEthernetSegmentRoute) ProtoMessage() {} + +func (x *EVPNEthernetSegmentRoute) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EVPNEthernetSegmentRoute.ProtoReflect.Descriptor instead. +func (*EVPNEthernetSegmentRoute) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{9} +} + +func (x *EVPNEthernetSegmentRoute) GetRd() *RouteDistinguisher { + if x != nil { + return x.Rd + } + return nil +} + +func (x *EVPNEthernetSegmentRoute) GetEsi() *EthernetSegmentIdentifier { + if x != nil { + return x.Esi + } + return nil +} + +func (x *EVPNEthernetSegmentRoute) GetIpAddress() string { + if x != nil { + return x.IpAddress + } + return "" +} + +// EVPNIPPrefixRoute represents the NLRI for: +// - AFI=25, SAFI=70, RouteType=5 +type EVPNIPPrefixRoute struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Rd *RouteDistinguisher `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` + Esi *EthernetSegmentIdentifier `protobuf:"bytes,2,opt,name=esi,proto3" json:"esi,omitempty"` + EthernetTag uint32 `protobuf:"varint,3,opt,name=ethernet_tag,json=ethernetTag,proto3" json:"ethernet_tag,omitempty"` + IpPrefix string `protobuf:"bytes,4,opt,name=ip_prefix,json=ipPrefix,proto3" json:"ip_prefix,omitempty"` + IpPrefixLen uint32 `protobuf:"varint,5,opt,name=ip_prefix_len,json=ipPrefixLen,proto3" json:"ip_prefix_len,omitempty"` + GwAddress string `protobuf:"bytes,6,opt,name=gw_address,json=gwAddress,proto3" json:"gw_address,omitempty"` + Label uint32 `protobuf:"varint,7,opt,name=label,proto3" json:"label,omitempty"` +} + +func (x *EVPNIPPrefixRoute) Reset() { + *x = EVPNIPPrefixRoute{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EVPNIPPrefixRoute) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EVPNIPPrefixRoute) ProtoMessage() {} + +func (x *EVPNIPPrefixRoute) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EVPNIPPrefixRoute.ProtoReflect.Descriptor instead. +func (*EVPNIPPrefixRoute) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{10} +} + +func (x *EVPNIPPrefixRoute) GetRd() *RouteDistinguisher { + if x != nil { + return x.Rd + } + return nil +} + +func (x *EVPNIPPrefixRoute) GetEsi() *EthernetSegmentIdentifier { + if x != nil { + return x.Esi + } + return nil +} + +func (x *EVPNIPPrefixRoute) GetEthernetTag() uint32 { + if x != nil { + return x.EthernetTag + } + return 0 +} + +func (x *EVPNIPPrefixRoute) GetIpPrefix() string { + if x != nil { + return x.IpPrefix + } + return "" +} + +func (x *EVPNIPPrefixRoute) GetIpPrefixLen() uint32 { + if x != nil { + return x.IpPrefixLen + } + return 0 +} + +func (x *EVPNIPPrefixRoute) GetGwAddress() string { + if x != nil { + return x.GwAddress + } + return "" +} + +func (x *EVPNIPPrefixRoute) GetLabel() uint32 { + if x != nil { + return x.Label + } + return 0 +} + +// EVPNIPMSIRoute represents the NLRI for: +// - AFI=25, SAFI=70, RouteType=9 +type EVPNIPMSIRoute struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Rd *RouteDistinguisher `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` + EthernetTag uint32 `protobuf:"varint,2,opt,name=ethernet_tag,json=ethernetTag,proto3" json:"ethernet_tag,omitempty"` + Rt *RouteTarget `protobuf:"bytes,3,opt,name=rt,proto3" json:"rt,omitempty"` +} + +func (x *EVPNIPMSIRoute) Reset() { + *x = EVPNIPMSIRoute{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EVPNIPMSIRoute) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EVPNIPMSIRoute) ProtoMessage() {} + +func (x *EVPNIPMSIRoute) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EVPNIPMSIRoute.ProtoReflect.Descriptor instead. +func (*EVPNIPMSIRoute) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{11} +} + +func (x *EVPNIPMSIRoute) GetRd() *RouteDistinguisher { + if x != nil { + return x.Rd + } + return nil +} + +func (x *EVPNIPMSIRoute) GetEthernetTag() uint32 { + if x != nil { + return x.EthernetTag + } + return 0 +} + +func (x *EVPNIPMSIRoute) GetRt() *RouteTarget { + if x != nil { + return x.Rt + } + return nil +} + +// SRPolicyNLRI represents the NLRI for: +// - AFI=1, SAFI=73 +// - AFI=2, SAFI=73 +type SRPolicyNLRI struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // length field carries the length of NLRI portion expressed in bits + Length uint32 `protobuf:"varint,1,opt,name=length,proto3" json:"length,omitempty"` + // distinguisher field carries 4-octet value uniquely identifying the policy + // in the context of tuple. + Distinguisher uint32 `protobuf:"varint,2,opt,name=distinguisher,proto3" json:"distinguisher,omitempty"` + // color field carries 4-octet value identifying (with the endpoint) the + // policy. The color is used to match the color of the destination + // prefixes to steer traffic into the SR Policy + Color uint32 `protobuf:"varint,3,opt,name=color,proto3" json:"color,omitempty"` + // endpoint field identifies the endpoint of a policy. The Endpoint may + // represent a single node or a set of nodes (e.g., an anycast + // address). The Endpoint is an IPv4 (4-octet) address or an IPv6 + // (16-octet) address according to the AFI of the NLRI. + Endpoint []byte `protobuf:"bytes,4,opt,name=endpoint,proto3" json:"endpoint,omitempty"` +} + +func (x *SRPolicyNLRI) Reset() { + *x = SRPolicyNLRI{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SRPolicyNLRI) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SRPolicyNLRI) ProtoMessage() {} + +func (x *SRPolicyNLRI) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SRPolicyNLRI.ProtoReflect.Descriptor instead. +func (*SRPolicyNLRI) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{12} +} + +func (x *SRPolicyNLRI) GetLength() uint32 { + if x != nil { + return x.Length + } + return 0 +} + +func (x *SRPolicyNLRI) GetDistinguisher() uint32 { + if x != nil { + return x.Distinguisher + } + return 0 +} + +func (x *SRPolicyNLRI) GetColor() uint32 { + if x != nil { + return x.Color + } + return 0 +} + +func (x *SRPolicyNLRI) GetEndpoint() []byte { + if x != nil { + return x.Endpoint + } + return nil +} + +// LabeledVPNIPAddressPrefix represents the NLRI for: +// - AFI=1, SAFI=128 +// - AFI=2, SAFI=128 +type LabeledVPNIPAddressPrefix struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Labels []uint32 `protobuf:"varint,1,rep,packed,name=labels,proto3" json:"labels,omitempty"` + Rd *RouteDistinguisher `protobuf:"bytes,2,opt,name=rd,proto3" json:"rd,omitempty"` + PrefixLen uint32 `protobuf:"varint,3,opt,name=prefix_len,json=prefixLen,proto3" json:"prefix_len,omitempty"` + Prefix string `protobuf:"bytes,4,opt,name=prefix,proto3" json:"prefix,omitempty"` +} + +func (x *LabeledVPNIPAddressPrefix) Reset() { + *x = LabeledVPNIPAddressPrefix{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LabeledVPNIPAddressPrefix) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LabeledVPNIPAddressPrefix) ProtoMessage() {} + +func (x *LabeledVPNIPAddressPrefix) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LabeledVPNIPAddressPrefix.ProtoReflect.Descriptor instead. +func (*LabeledVPNIPAddressPrefix) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{13} +} + +func (x *LabeledVPNIPAddressPrefix) GetLabels() []uint32 { + if x != nil { + return x.Labels + } + return nil +} + +func (x *LabeledVPNIPAddressPrefix) GetRd() *RouteDistinguisher { + if x != nil { + return x.Rd + } + return nil +} + +func (x *LabeledVPNIPAddressPrefix) GetPrefixLen() uint32 { + if x != nil { + return x.PrefixLen + } + return 0 +} + +func (x *LabeledVPNIPAddressPrefix) GetPrefix() string { + if x != nil { + return x.Prefix + } + return "" +} + +// RouteTargetMembershipNLRI represents the NLRI for: +// - AFI=1, SAFI=132 +type RouteTargetMembershipNLRI struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Asn uint32 `protobuf:"varint,1,opt,name=asn,proto3" json:"asn,omitempty"` + Rt *RouteTarget `protobuf:"bytes,2,opt,name=rt,proto3" json:"rt,omitempty"` +} + +func (x *RouteTargetMembershipNLRI) Reset() { + *x = RouteTargetMembershipNLRI{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RouteTargetMembershipNLRI) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RouteTargetMembershipNLRI) ProtoMessage() {} + +func (x *RouteTargetMembershipNLRI) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RouteTargetMembershipNLRI.ProtoReflect.Descriptor instead. +func (*RouteTargetMembershipNLRI) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{14} +} + +func (x *RouteTargetMembershipNLRI) GetAsn() uint32 { + if x != nil { + return x.Asn + } + return 0 +} + +func (x *RouteTargetMembershipNLRI) GetRt() *RouteTarget { + if x != nil { + return x.Rt + } + return nil +} + +type FlowSpecIPPrefix struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type uint32 `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"` + PrefixLen uint32 `protobuf:"varint,2,opt,name=prefix_len,json=prefixLen,proto3" json:"prefix_len,omitempty"` + Prefix string `protobuf:"bytes,3,opt,name=prefix,proto3" json:"prefix,omitempty"` + // IPv6 only + Offset uint32 `protobuf:"varint,4,opt,name=offset,proto3" json:"offset,omitempty"` +} + +func (x *FlowSpecIPPrefix) Reset() { + *x = FlowSpecIPPrefix{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FlowSpecIPPrefix) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FlowSpecIPPrefix) ProtoMessage() {} + +func (x *FlowSpecIPPrefix) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FlowSpecIPPrefix.ProtoReflect.Descriptor instead. +func (*FlowSpecIPPrefix) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{15} +} + +func (x *FlowSpecIPPrefix) GetType() uint32 { + if x != nil { + return x.Type + } + return 0 +} + +func (x *FlowSpecIPPrefix) GetPrefixLen() uint32 { + if x != nil { + return x.PrefixLen + } + return 0 +} + +func (x *FlowSpecIPPrefix) GetPrefix() string { + if x != nil { + return x.Prefix + } + return "" +} + +func (x *FlowSpecIPPrefix) GetOffset() uint32 { + if x != nil { + return x.Offset + } + return 0 +} + +type FlowSpecMAC struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type uint32 `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *FlowSpecMAC) Reset() { + *x = FlowSpecMAC{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FlowSpecMAC) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FlowSpecMAC) ProtoMessage() {} + +func (x *FlowSpecMAC) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FlowSpecMAC.ProtoReflect.Descriptor instead. +func (*FlowSpecMAC) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{16} +} + +func (x *FlowSpecMAC) GetType() uint32 { + if x != nil { + return x.Type + } + return 0 +} + +func (x *FlowSpecMAC) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type FlowSpecComponentItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Operator for Numeric type, Operand for Bitmask type + Op uint32 `protobuf:"varint,1,opt,name=op,proto3" json:"op,omitempty"` + Value uint64 `protobuf:"varint,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *FlowSpecComponentItem) Reset() { + *x = FlowSpecComponentItem{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FlowSpecComponentItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FlowSpecComponentItem) ProtoMessage() {} + +func (x *FlowSpecComponentItem) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FlowSpecComponentItem.ProtoReflect.Descriptor instead. +func (*FlowSpecComponentItem) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{17} +} + +func (x *FlowSpecComponentItem) GetOp() uint32 { + if x != nil { + return x.Op + } + return 0 +} + +func (x *FlowSpecComponentItem) GetValue() uint64 { + if x != nil { + return x.Value + } + return 0 +} + +type FlowSpecComponent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type uint32 `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"` + Items []*FlowSpecComponentItem `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *FlowSpecComponent) Reset() { + *x = FlowSpecComponent{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FlowSpecComponent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FlowSpecComponent) ProtoMessage() {} + +func (x *FlowSpecComponent) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FlowSpecComponent.ProtoReflect.Descriptor instead. +func (*FlowSpecComponent) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{18} +} + +func (x *FlowSpecComponent) GetType() uint32 { + if x != nil { + return x.Type + } + return 0 +} + +func (x *FlowSpecComponent) GetItems() []*FlowSpecComponentItem { + if x != nil { + return x.Items + } + return nil +} + +type FlowSpecRule struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Rule: + // + // *FlowSpecRule_IpPrefix + // *FlowSpecRule_Mac + // *FlowSpecRule_Component + Rule isFlowSpecRule_Rule `protobuf_oneof:"rule"` +} + +func (x *FlowSpecRule) Reset() { + *x = FlowSpecRule{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FlowSpecRule) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FlowSpecRule) ProtoMessage() {} + +func (x *FlowSpecRule) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FlowSpecRule.ProtoReflect.Descriptor instead. +func (*FlowSpecRule) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{19} +} + +func (m *FlowSpecRule) GetRule() isFlowSpecRule_Rule { + if m != nil { + return m.Rule + } + return nil +} + +func (x *FlowSpecRule) GetIpPrefix() *FlowSpecIPPrefix { + if x, ok := x.GetRule().(*FlowSpecRule_IpPrefix); ok { + return x.IpPrefix + } + return nil +} + +func (x *FlowSpecRule) GetMac() *FlowSpecMAC { + if x, ok := x.GetRule().(*FlowSpecRule_Mac); ok { + return x.Mac + } + return nil +} + +func (x *FlowSpecRule) GetComponent() *FlowSpecComponent { + if x, ok := x.GetRule().(*FlowSpecRule_Component); ok { + return x.Component + } + return nil +} + +type isFlowSpecRule_Rule interface { + isFlowSpecRule_Rule() +} + +type FlowSpecRule_IpPrefix struct { + IpPrefix *FlowSpecIPPrefix `protobuf:"bytes,1,opt,name=ip_prefix,json=ipPrefix,proto3,oneof"` +} + +type FlowSpecRule_Mac struct { + Mac *FlowSpecMAC `protobuf:"bytes,2,opt,name=mac,proto3,oneof"` +} + +type FlowSpecRule_Component struct { + Component *FlowSpecComponent `protobuf:"bytes,3,opt,name=component,proto3,oneof"` +} + +func (*FlowSpecRule_IpPrefix) isFlowSpecRule_Rule() {} + +func (*FlowSpecRule_Mac) isFlowSpecRule_Rule() {} + +func (*FlowSpecRule_Component) isFlowSpecRule_Rule() {} + +// FlowSpecNLRI represents the NLRI for: +// - AFI=1, SAFI=133 +// - AFI=2, SAFI=133 +type FlowSpecNLRI struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Rules []*FlowSpecRule `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"` +} + +func (x *FlowSpecNLRI) Reset() { + *x = FlowSpecNLRI{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FlowSpecNLRI) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FlowSpecNLRI) ProtoMessage() {} + +func (x *FlowSpecNLRI) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FlowSpecNLRI.ProtoReflect.Descriptor instead. +func (*FlowSpecNLRI) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{20} +} + +func (x *FlowSpecNLRI) GetRules() []*FlowSpecRule { + if x != nil { + return x.Rules + } + return nil +} + +// VPNFlowSpecNLRI represents the NLRI for: +// - AFI=1, SAFI=134 +// - AFI=2, SAFI=134 +// - AFI=25, SAFI=134 +type VPNFlowSpecNLRI struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Rd *RouteDistinguisher `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` + Rules []*FlowSpecRule `protobuf:"bytes,2,rep,name=rules,proto3" json:"rules,omitempty"` +} + +func (x *VPNFlowSpecNLRI) Reset() { + *x = VPNFlowSpecNLRI{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VPNFlowSpecNLRI) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VPNFlowSpecNLRI) ProtoMessage() {} + +func (x *VPNFlowSpecNLRI) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VPNFlowSpecNLRI.ProtoReflect.Descriptor instead. +func (*VPNFlowSpecNLRI) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{21} +} + +func (x *VPNFlowSpecNLRI) GetRd() *RouteDistinguisher { + if x != nil { + return x.Rd + } + return nil +} + +func (x *VPNFlowSpecNLRI) GetRules() []*FlowSpecRule { + if x != nil { + return x.Rules + } + return nil +} + +// OpaqueNLRI represents the NLRI for: +// - AFI=16397, SAFI=241 +type OpaqueNLRI struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *OpaqueNLRI) Reset() { + *x = OpaqueNLRI{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OpaqueNLRI) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OpaqueNLRI) ProtoMessage() {} + +func (x *OpaqueNLRI) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OpaqueNLRI.ProtoReflect.Descriptor instead. +func (*OpaqueNLRI) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{22} +} + +func (x *OpaqueNLRI) GetKey() []byte { + if x != nil { + return x.Key + } + return nil +} + +func (x *OpaqueNLRI) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +type LsNodeDescriptor struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Asn uint32 `protobuf:"varint,1,opt,name=asn,proto3" json:"asn,omitempty"` + BgpLsId uint32 `protobuf:"varint,2,opt,name=bgp_ls_id,json=bgpLsId,proto3" json:"bgp_ls_id,omitempty"` + OspfAreaId uint32 `protobuf:"varint,3,opt,name=ospf_area_id,json=ospfAreaId,proto3" json:"ospf_area_id,omitempty"` + Pseudonode bool `protobuf:"varint,4,opt,name=pseudonode,proto3" json:"pseudonode,omitempty"` + IgpRouterId string `protobuf:"bytes,5,opt,name=igp_router_id,json=igpRouterId,proto3" json:"igp_router_id,omitempty"` + BgpRouterId string `protobuf:"bytes,6,opt,name=bgp_router_id,json=bgpRouterId,proto3" json:"bgp_router_id,omitempty"` + BgpConfederationMember uint32 `protobuf:"varint,7,opt,name=bgp_confederation_member,json=bgpConfederationMember,proto3" json:"bgp_confederation_member,omitempty"` +} + +func (x *LsNodeDescriptor) Reset() { + *x = LsNodeDescriptor{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LsNodeDescriptor) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LsNodeDescriptor) ProtoMessage() {} + +func (x *LsNodeDescriptor) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LsNodeDescriptor.ProtoReflect.Descriptor instead. +func (*LsNodeDescriptor) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{23} +} + +func (x *LsNodeDescriptor) GetAsn() uint32 { + if x != nil { + return x.Asn + } + return 0 +} + +func (x *LsNodeDescriptor) GetBgpLsId() uint32 { + if x != nil { + return x.BgpLsId + } + return 0 +} + +func (x *LsNodeDescriptor) GetOspfAreaId() uint32 { + if x != nil { + return x.OspfAreaId + } + return 0 +} + +func (x *LsNodeDescriptor) GetPseudonode() bool { + if x != nil { + return x.Pseudonode + } + return false +} + +func (x *LsNodeDescriptor) GetIgpRouterId() string { + if x != nil { + return x.IgpRouterId + } + return "" +} + +func (x *LsNodeDescriptor) GetBgpRouterId() string { + if x != nil { + return x.BgpRouterId + } + return "" +} + +func (x *LsNodeDescriptor) GetBgpConfederationMember() uint32 { + if x != nil { + return x.BgpConfederationMember + } + return 0 +} + +type LsLinkDescriptor struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LinkLocalId uint32 `protobuf:"varint,1,opt,name=link_local_id,json=linkLocalId,proto3" json:"link_local_id,omitempty"` + LinkRemoteId uint32 `protobuf:"varint,2,opt,name=link_remote_id,json=linkRemoteId,proto3" json:"link_remote_id,omitempty"` + InterfaceAddrIpv4 string `protobuf:"bytes,3,opt,name=interface_addr_ipv4,json=interfaceAddrIpv4,proto3" json:"interface_addr_ipv4,omitempty"` + NeighborAddrIpv4 string `protobuf:"bytes,4,opt,name=neighbor_addr_ipv4,json=neighborAddrIpv4,proto3" json:"neighbor_addr_ipv4,omitempty"` + InterfaceAddrIpv6 string `protobuf:"bytes,5,opt,name=interface_addr_ipv6,json=interfaceAddrIpv6,proto3" json:"interface_addr_ipv6,omitempty"` + NeighborAddrIpv6 string `protobuf:"bytes,6,opt,name=neighbor_addr_ipv6,json=neighborAddrIpv6,proto3" json:"neighbor_addr_ipv6,omitempty"` +} + +func (x *LsLinkDescriptor) Reset() { + *x = LsLinkDescriptor{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LsLinkDescriptor) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LsLinkDescriptor) ProtoMessage() {} + +func (x *LsLinkDescriptor) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LsLinkDescriptor.ProtoReflect.Descriptor instead. +func (*LsLinkDescriptor) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{24} +} + +func (x *LsLinkDescriptor) GetLinkLocalId() uint32 { + if x != nil { + return x.LinkLocalId + } + return 0 +} + +func (x *LsLinkDescriptor) GetLinkRemoteId() uint32 { + if x != nil { + return x.LinkRemoteId + } + return 0 +} + +func (x *LsLinkDescriptor) GetInterfaceAddrIpv4() string { + if x != nil { + return x.InterfaceAddrIpv4 + } + return "" +} + +func (x *LsLinkDescriptor) GetNeighborAddrIpv4() string { + if x != nil { + return x.NeighborAddrIpv4 + } + return "" +} + +func (x *LsLinkDescriptor) GetInterfaceAddrIpv6() string { + if x != nil { + return x.InterfaceAddrIpv6 + } + return "" +} + +func (x *LsLinkDescriptor) GetNeighborAddrIpv6() string { + if x != nil { + return x.NeighborAddrIpv6 + } + return "" +} + +type LsPrefixDescriptor struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + IpReachability []string `protobuf:"bytes,1,rep,name=ip_reachability,json=ipReachability,proto3" json:"ip_reachability,omitempty"` + OspfRouteType LsOspfRouteType `protobuf:"varint,2,opt,name=ospf_route_type,json=ospfRouteType,proto3,enum=apipb.LsOspfRouteType" json:"ospf_route_type,omitempty"` +} + +func (x *LsPrefixDescriptor) Reset() { + *x = LsPrefixDescriptor{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LsPrefixDescriptor) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LsPrefixDescriptor) ProtoMessage() {} + +func (x *LsPrefixDescriptor) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LsPrefixDescriptor.ProtoReflect.Descriptor instead. +func (*LsPrefixDescriptor) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{25} +} + +func (x *LsPrefixDescriptor) GetIpReachability() []string { + if x != nil { + return x.IpReachability + } + return nil +} + +func (x *LsPrefixDescriptor) GetOspfRouteType() LsOspfRouteType { + if x != nil { + return x.OspfRouteType + } + return LsOspfRouteType_LS_OSPF_ROUTE_TYPE_UNKNOWN +} + +type LsNodeNLRI struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LocalNode *LsNodeDescriptor `protobuf:"bytes,1,opt,name=local_node,json=localNode,proto3" json:"local_node,omitempty"` +} + +func (x *LsNodeNLRI) Reset() { + *x = LsNodeNLRI{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LsNodeNLRI) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LsNodeNLRI) ProtoMessage() {} + +func (x *LsNodeNLRI) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LsNodeNLRI.ProtoReflect.Descriptor instead. +func (*LsNodeNLRI) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{26} +} + +func (x *LsNodeNLRI) GetLocalNode() *LsNodeDescriptor { + if x != nil { + return x.LocalNode + } + return nil +} + +type LsLinkNLRI struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LocalNode *LsNodeDescriptor `protobuf:"bytes,1,opt,name=local_node,json=localNode,proto3" json:"local_node,omitempty"` + RemoteNode *LsNodeDescriptor `protobuf:"bytes,2,opt,name=remote_node,json=remoteNode,proto3" json:"remote_node,omitempty"` + LinkDescriptor *LsLinkDescriptor `protobuf:"bytes,3,opt,name=link_descriptor,json=linkDescriptor,proto3" json:"link_descriptor,omitempty"` +} + +func (x *LsLinkNLRI) Reset() { + *x = LsLinkNLRI{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LsLinkNLRI) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LsLinkNLRI) ProtoMessage() {} + +func (x *LsLinkNLRI) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LsLinkNLRI.ProtoReflect.Descriptor instead. +func (*LsLinkNLRI) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{27} +} + +func (x *LsLinkNLRI) GetLocalNode() *LsNodeDescriptor { + if x != nil { + return x.LocalNode + } + return nil +} + +func (x *LsLinkNLRI) GetRemoteNode() *LsNodeDescriptor { + if x != nil { + return x.RemoteNode + } + return nil +} + +func (x *LsLinkNLRI) GetLinkDescriptor() *LsLinkDescriptor { + if x != nil { + return x.LinkDescriptor + } + return nil +} + +type LsPrefixV4NLRI struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LocalNode *LsNodeDescriptor `protobuf:"bytes,1,opt,name=local_node,json=localNode,proto3" json:"local_node,omitempty"` + PrefixDescriptor *LsPrefixDescriptor `protobuf:"bytes,2,opt,name=prefix_descriptor,json=prefixDescriptor,proto3" json:"prefix_descriptor,omitempty"` +} + +func (x *LsPrefixV4NLRI) Reset() { + *x = LsPrefixV4NLRI{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LsPrefixV4NLRI) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LsPrefixV4NLRI) ProtoMessage() {} + +func (x *LsPrefixV4NLRI) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LsPrefixV4NLRI.ProtoReflect.Descriptor instead. +func (*LsPrefixV4NLRI) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{28} +} + +func (x *LsPrefixV4NLRI) GetLocalNode() *LsNodeDescriptor { + if x != nil { + return x.LocalNode + } + return nil +} + +func (x *LsPrefixV4NLRI) GetPrefixDescriptor() *LsPrefixDescriptor { + if x != nil { + return x.PrefixDescriptor + } + return nil +} + +type LsPrefixV6NLRI struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LocalNode *LsNodeDescriptor `protobuf:"bytes,1,opt,name=local_node,json=localNode,proto3" json:"local_node,omitempty"` + PrefixDescriptor *LsPrefixDescriptor `protobuf:"bytes,2,opt,name=prefix_descriptor,json=prefixDescriptor,proto3" json:"prefix_descriptor,omitempty"` +} + +func (x *LsPrefixV6NLRI) Reset() { + *x = LsPrefixV6NLRI{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LsPrefixV6NLRI) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LsPrefixV6NLRI) ProtoMessage() {} + +func (x *LsPrefixV6NLRI) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LsPrefixV6NLRI.ProtoReflect.Descriptor instead. +func (*LsPrefixV6NLRI) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{29} +} + +func (x *LsPrefixV6NLRI) GetLocalNode() *LsNodeDescriptor { + if x != nil { + return x.LocalNode + } + return nil +} + +func (x *LsPrefixV6NLRI) GetPrefixDescriptor() *LsPrefixDescriptor { + if x != nil { + return x.PrefixDescriptor + } + return nil +} + +// LsAddrPrefix represents the NLRI for: +// - AFI=16388, SAFI=71 +type LsAddrPrefix struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type LsNLRIType `protobuf:"varint,1,opt,name=type,proto3,enum=apipb.LsNLRIType" json:"type,omitempty"` + Nlri *LsAddrPrefix_LsNLRI `protobuf:"bytes,2,opt,name=nlri,proto3" json:"nlri,omitempty"` + Length uint32 `protobuf:"varint,3,opt,name=length,proto3" json:"length,omitempty"` + ProtocolId LsProtocolID `protobuf:"varint,4,opt,name=protocol_id,json=protocolId,proto3,enum=apipb.LsProtocolID" json:"protocol_id,omitempty"` + Identifier uint64 `protobuf:"varint,5,opt,name=identifier,proto3" json:"identifier,omitempty"` +} + +func (x *LsAddrPrefix) Reset() { + *x = LsAddrPrefix{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LsAddrPrefix) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LsAddrPrefix) ProtoMessage() {} + +func (x *LsAddrPrefix) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LsAddrPrefix.ProtoReflect.Descriptor instead. +func (*LsAddrPrefix) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{30} +} + +func (x *LsAddrPrefix) GetType() LsNLRIType { + if x != nil { + return x.Type + } + return LsNLRIType_LS_NLRI_UNKNOWN +} + +func (x *LsAddrPrefix) GetNlri() *LsAddrPrefix_LsNLRI { + if x != nil { + return x.Nlri + } + return nil +} + +func (x *LsAddrPrefix) GetLength() uint32 { + if x != nil { + return x.Length + } + return 0 +} + +func (x *LsAddrPrefix) GetProtocolId() LsProtocolID { + if x != nil { + return x.ProtocolId + } + return LsProtocolID_LS_PROTOCOL_UNKNOWN +} + +func (x *LsAddrPrefix) GetIdentifier() uint64 { + if x != nil { + return x.Identifier + } + return 0 +} + +type MUPInterworkSegmentDiscoveryRoute struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Rd *RouteDistinguisher `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` + Prefix string `protobuf:"bytes,2,opt,name=prefix,proto3" json:"prefix,omitempty"` +} + +func (x *MUPInterworkSegmentDiscoveryRoute) Reset() { + *x = MUPInterworkSegmentDiscoveryRoute{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MUPInterworkSegmentDiscoveryRoute) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MUPInterworkSegmentDiscoveryRoute) ProtoMessage() {} + +func (x *MUPInterworkSegmentDiscoveryRoute) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MUPInterworkSegmentDiscoveryRoute.ProtoReflect.Descriptor instead. +func (*MUPInterworkSegmentDiscoveryRoute) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{31} +} + +func (x *MUPInterworkSegmentDiscoveryRoute) GetRd() *RouteDistinguisher { + if x != nil { + return x.Rd + } + return nil +} + +func (x *MUPInterworkSegmentDiscoveryRoute) GetPrefix() string { + if x != nil { + return x.Prefix + } + return "" +} + +type MUPDirectSegmentDiscoveryRoute struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Rd *RouteDistinguisher `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *MUPDirectSegmentDiscoveryRoute) Reset() { + *x = MUPDirectSegmentDiscoveryRoute{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MUPDirectSegmentDiscoveryRoute) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MUPDirectSegmentDiscoveryRoute) ProtoMessage() {} + +func (x *MUPDirectSegmentDiscoveryRoute) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[32] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MUPDirectSegmentDiscoveryRoute.ProtoReflect.Descriptor instead. +func (*MUPDirectSegmentDiscoveryRoute) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{32} +} + +func (x *MUPDirectSegmentDiscoveryRoute) GetRd() *RouteDistinguisher { + if x != nil { + return x.Rd + } + return nil +} + +func (x *MUPDirectSegmentDiscoveryRoute) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type MUPType1SessionTransformedRoute struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Rd *RouteDistinguisher `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` + // Deprecated: Do not use. + PrefixLength uint32 `protobuf:"varint,2,opt,name=prefix_length,json=prefixLength,proto3" json:"prefix_length,omitempty"` + Prefix string `protobuf:"bytes,3,opt,name=prefix,proto3" json:"prefix,omitempty"` + Teid uint32 `protobuf:"varint,4,opt,name=teid,proto3" json:"teid,omitempty"` + Qfi uint32 `protobuf:"varint,5,opt,name=qfi,proto3" json:"qfi,omitempty"` + EndpointAddressLength uint32 `protobuf:"varint,6,opt,name=endpoint_address_length,json=endpointAddressLength,proto3" json:"endpoint_address_length,omitempty"` + EndpointAddress string `protobuf:"bytes,7,opt,name=endpoint_address,json=endpointAddress,proto3" json:"endpoint_address,omitempty"` + SourceAddressLength uint32 `protobuf:"varint,8,opt,name=source_address_length,json=sourceAddressLength,proto3" json:"source_address_length,omitempty"` + SourceAddress string `protobuf:"bytes,9,opt,name=source_address,json=sourceAddress,proto3" json:"source_address,omitempty"` +} + +func (x *MUPType1SessionTransformedRoute) Reset() { + *x = MUPType1SessionTransformedRoute{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MUPType1SessionTransformedRoute) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MUPType1SessionTransformedRoute) ProtoMessage() {} + +func (x *MUPType1SessionTransformedRoute) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MUPType1SessionTransformedRoute.ProtoReflect.Descriptor instead. +func (*MUPType1SessionTransformedRoute) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{33} +} + +func (x *MUPType1SessionTransformedRoute) GetRd() *RouteDistinguisher { + if x != nil { + return x.Rd + } + return nil +} + +// Deprecated: Do not use. +func (x *MUPType1SessionTransformedRoute) GetPrefixLength() uint32 { + if x != nil { + return x.PrefixLength + } + return 0 +} + +func (x *MUPType1SessionTransformedRoute) GetPrefix() string { + if x != nil { + return x.Prefix + } + return "" +} + +func (x *MUPType1SessionTransformedRoute) GetTeid() uint32 { + if x != nil { + return x.Teid + } + return 0 +} + +func (x *MUPType1SessionTransformedRoute) GetQfi() uint32 { + if x != nil { + return x.Qfi + } + return 0 +} + +func (x *MUPType1SessionTransformedRoute) GetEndpointAddressLength() uint32 { + if x != nil { + return x.EndpointAddressLength + } + return 0 +} + +func (x *MUPType1SessionTransformedRoute) GetEndpointAddress() string { + if x != nil { + return x.EndpointAddress + } + return "" +} + +func (x *MUPType1SessionTransformedRoute) GetSourceAddressLength() uint32 { + if x != nil { + return x.SourceAddressLength + } + return 0 +} + +func (x *MUPType1SessionTransformedRoute) GetSourceAddress() string { + if x != nil { + return x.SourceAddress + } + return "" +} + +type MUPType2SessionTransformedRoute struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Rd *RouteDistinguisher `protobuf:"bytes,1,opt,name=rd,proto3" json:"rd,omitempty"` + EndpointAddressLength uint32 `protobuf:"varint,2,opt,name=endpoint_address_length,json=endpointAddressLength,proto3" json:"endpoint_address_length,omitempty"` + EndpointAddress string `protobuf:"bytes,3,opt,name=endpoint_address,json=endpointAddress,proto3" json:"endpoint_address,omitempty"` + Teid uint32 `protobuf:"varint,4,opt,name=teid,proto3" json:"teid,omitempty"` +} + +func (x *MUPType2SessionTransformedRoute) Reset() { + *x = MUPType2SessionTransformedRoute{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MUPType2SessionTransformedRoute) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MUPType2SessionTransformedRoute) ProtoMessage() {} + +func (x *MUPType2SessionTransformedRoute) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[34] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MUPType2SessionTransformedRoute.ProtoReflect.Descriptor instead. +func (*MUPType2SessionTransformedRoute) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{34} +} + +func (x *MUPType2SessionTransformedRoute) GetRd() *RouteDistinguisher { + if x != nil { + return x.Rd + } + return nil +} + +func (x *MUPType2SessionTransformedRoute) GetEndpointAddressLength() uint32 { + if x != nil { + return x.EndpointAddressLength + } + return 0 +} + +func (x *MUPType2SessionTransformedRoute) GetEndpointAddress() string { + if x != nil { + return x.EndpointAddress + } + return "" +} + +func (x *MUPType2SessionTransformedRoute) GetTeid() uint32 { + if x != nil { + return x.Teid + } + return 0 +} + +type LsAddrPrefix_LsNLRI struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Nlri: + // + // *LsAddrPrefix_LsNLRI_Node + // *LsAddrPrefix_LsNLRI_Link + // *LsAddrPrefix_LsNLRI_PrefixV4 + // *LsAddrPrefix_LsNLRI_PrefixV6 + Nlri isLsAddrPrefix_LsNLRI_Nlri `protobuf_oneof:"nlri"` +} + +func (x *LsAddrPrefix_LsNLRI) Reset() { + *x = LsAddrPrefix_LsNLRI{} + if protoimpl.UnsafeEnabled { + mi := &file_nlri_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LsAddrPrefix_LsNLRI) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LsAddrPrefix_LsNLRI) ProtoMessage() {} + +func (x *LsAddrPrefix_LsNLRI) ProtoReflect() protoreflect.Message { + mi := &file_nlri_proto_msgTypes[35] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LsAddrPrefix_LsNLRI.ProtoReflect.Descriptor instead. +func (*LsAddrPrefix_LsNLRI) Descriptor() ([]byte, []int) { + return file_nlri_proto_rawDescGZIP(), []int{30, 0} +} + +func (m *LsAddrPrefix_LsNLRI) GetNlri() isLsAddrPrefix_LsNLRI_Nlri { + if m != nil { + return m.Nlri + } + return nil +} + +func (x *LsAddrPrefix_LsNLRI) GetNode() *LsNodeNLRI { + if x, ok := x.GetNlri().(*LsAddrPrefix_LsNLRI_Node); ok { + return x.Node + } + return nil +} + +func (x *LsAddrPrefix_LsNLRI) GetLink() *LsLinkNLRI { + if x, ok := x.GetNlri().(*LsAddrPrefix_LsNLRI_Link); ok { + return x.Link + } + return nil +} + +func (x *LsAddrPrefix_LsNLRI) GetPrefixV4() *LsPrefixV4NLRI { + if x, ok := x.GetNlri().(*LsAddrPrefix_LsNLRI_PrefixV4); ok { + return x.PrefixV4 + } + return nil +} + +func (x *LsAddrPrefix_LsNLRI) GetPrefixV6() *LsPrefixV6NLRI { + if x, ok := x.GetNlri().(*LsAddrPrefix_LsNLRI_PrefixV6); ok { + return x.PrefixV6 + } + return nil +} + +type isLsAddrPrefix_LsNLRI_Nlri interface { + isLsAddrPrefix_LsNLRI_Nlri() +} + +type LsAddrPrefix_LsNLRI_Node struct { + Node *LsNodeNLRI `protobuf:"bytes,1,opt,name=node,proto3,oneof"` +} + +type LsAddrPrefix_LsNLRI_Link struct { + Link *LsLinkNLRI `protobuf:"bytes,2,opt,name=link,proto3,oneof"` +} + +type LsAddrPrefix_LsNLRI_PrefixV4 struct { + PrefixV4 *LsPrefixV4NLRI `protobuf:"bytes,3,opt,name=prefix_v4,json=prefixV4,proto3,oneof"` +} + +type LsAddrPrefix_LsNLRI_PrefixV6 struct { + PrefixV6 *LsPrefixV6NLRI `protobuf:"bytes,4,opt,name=prefix_v6,json=prefixV6,proto3,oneof"` +} + +func (*LsAddrPrefix_LsNLRI_Node) isLsAddrPrefix_LsNLRI_Nlri() {} + +func (*LsAddrPrefix_LsNLRI_Link) isLsAddrPrefix_LsNLRI_Nlri() {} + +func (*LsAddrPrefix_LsNLRI_PrefixV4) isLsAddrPrefix_LsNLRI_Nlri() {} + +func (*LsAddrPrefix_LsNLRI_PrefixV6) isLsAddrPrefix_LsNLRI_Nlri() {} + +var File_nlri_proto protoreflect.FileDescriptor + +var file_nlri_proto_rawDesc = []byte{ + 0x0a, 0x0a, 0x6e, 0x6c, 0x72, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x1a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x0c, 0x65, 0x78, 0x74, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0xb1, 0x0c, 0x0a, 0x04, 0x4e, 0x4c, 0x52, 0x49, 0x12, 0x30, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, + 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, + 0x48, 0x00, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x46, 0x0a, 0x0e, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x65, 0x64, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x48, 0x00, 0x52, 0x0d, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x50, 0x72, 0x65, 0x66, + 0x69, 0x78, 0x12, 0x40, 0x0a, 0x0d, 0x65, 0x6e, 0x63, 0x61, 0x70, 0x73, 0x75, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x73, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, + 0x4c, 0x52, 0x49, 0x48, 0x00, 0x52, 0x0d, 0x65, 0x6e, 0x63, 0x61, 0x70, 0x73, 0x75, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x04, 0x76, 0x70, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x56, 0x50, 0x4c, 0x53, 0x4e, + 0x4c, 0x52, 0x49, 0x48, 0x00, 0x52, 0x04, 0x76, 0x70, 0x6c, 0x73, 0x12, 0x51, 0x0a, 0x10, 0x65, + 0x76, 0x70, 0x6e, 0x5f, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x5f, 0x61, 0x64, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x56, + 0x50, 0x4e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x41, 0x75, 0x74, 0x6f, 0x44, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0e, + 0x65, 0x76, 0x70, 0x6e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x41, 0x64, 0x12, 0x45, + 0x0a, 0x0b, 0x65, 0x76, 0x70, 0x6e, 0x5f, 0x6d, 0x61, 0x63, 0x61, 0x64, 0x76, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x56, 0x50, 0x4e, + 0x4d, 0x41, 0x43, 0x49, 0x50, 0x41, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x65, 0x76, 0x70, 0x6e, 0x4d, + 0x61, 0x63, 0x61, 0x64, 0x76, 0x12, 0x56, 0x0a, 0x0e, 0x65, 0x76, 0x70, 0x6e, 0x5f, 0x6d, 0x75, + 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x56, 0x50, 0x4e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, + 0x69, 0x76, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x45, 0x74, 0x68, 0x65, + 0x72, 0x6e, 0x65, 0x74, 0x54, 0x61, 0x67, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, + 0x65, 0x76, 0x70, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x12, 0x55, 0x0a, + 0x15, 0x65, 0x76, 0x70, 0x6e, 0x5f, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x5f, 0x73, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x56, 0x50, 0x4e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, + 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, + 0x13, 0x65, 0x76, 0x70, 0x6e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x67, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x40, 0x0a, 0x0e, 0x65, 0x76, 0x70, 0x6e, 0x5f, 0x69, 0x70, 0x5f, + 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x56, 0x50, 0x4e, 0x49, 0x50, 0x50, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x76, 0x70, 0x6e, 0x49, 0x70, + 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x37, 0x0a, 0x0b, 0x65, 0x76, 0x70, 0x6e, 0x5f, 0x69, + 0x5f, 0x70, 0x6d, 0x73, 0x69, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x45, 0x56, 0x50, 0x4e, 0x49, 0x50, 0x4d, 0x53, 0x49, 0x52, 0x6f, 0x75, + 0x74, 0x65, 0x48, 0x00, 0x52, 0x09, 0x65, 0x76, 0x70, 0x6e, 0x49, 0x50, 0x6d, 0x73, 0x69, 0x12, + 0x55, 0x0a, 0x15, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x5f, 0x76, 0x70, 0x6e, 0x5f, 0x69, + 0x70, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, + 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x56, 0x50, + 0x4e, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, + 0x48, 0x00, 0x52, 0x12, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x56, 0x70, 0x6e, 0x49, 0x70, + 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x5a, 0x0a, 0x17, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, + 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x68, 0x69, 0x70, 0x4e, 0x4c, 0x52, 0x49, 0x48, 0x00, 0x52, 0x15, 0x72, 0x6f, 0x75, + 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, + 0x69, 0x70, 0x12, 0x32, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x6c, + 0x6f, 0x77, 0x53, 0x70, 0x65, 0x63, 0x4e, 0x4c, 0x52, 0x49, 0x48, 0x00, 0x52, 0x08, 0x66, 0x6c, + 0x6f, 0x77, 0x53, 0x70, 0x65, 0x63, 0x12, 0x3c, 0x0a, 0x0d, 0x76, 0x70, 0x6e, 0x5f, 0x66, 0x6c, + 0x6f, 0x77, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x56, 0x50, 0x4e, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x65, + 0x63, 0x4e, 0x4c, 0x52, 0x49, 0x48, 0x00, 0x52, 0x0b, 0x76, 0x70, 0x6e, 0x46, 0x6c, 0x6f, 0x77, + 0x53, 0x70, 0x65, 0x63, 0x12, 0x2b, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x0f, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4f, 0x70, 0x61, + 0x71, 0x75, 0x65, 0x4e, 0x4c, 0x52, 0x49, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, + 0x65, 0x12, 0x3b, 0x0a, 0x0e, 0x6c, 0x73, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x5f, 0x70, 0x72, 0x65, + 0x66, 0x69, 0x78, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x4c, 0x73, 0x41, 0x64, 0x64, 0x72, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x48, 0x00, + 0x52, 0x0c, 0x6c, 0x73, 0x41, 0x64, 0x64, 0x72, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x32, + 0x0a, 0x09, 0x73, 0x72, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x11, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x4e, 0x4c, 0x52, 0x49, 0x48, 0x00, 0x52, 0x08, 0x73, 0x72, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x12, 0x71, 0x0a, 0x1f, 0x6d, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x77, + 0x6f, 0x72, 0x6b, 0x5f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x79, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x55, 0x50, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x77, 0x6f, 0x72, 0x6b, + 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, + 0x52, 0x6f, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x1c, 0x6d, 0x75, 0x70, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x79, 0x12, 0x68, 0x0a, 0x1c, 0x6d, 0x75, 0x70, 0x5f, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x5f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x79, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x55, 0x50, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x53, 0x65, 0x67, + 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x6f, 0x75, + 0x74, 0x65, 0x48, 0x00, 0x52, 0x19, 0x6d, 0x75, 0x70, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x53, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x12, + 0x6c, 0x0a, 0x1e, 0x6d, 0x75, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x31, 0x5f, 0x73, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, + 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x4d, 0x55, 0x50, 0x54, 0x79, 0x70, 0x65, 0x31, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x48, + 0x00, 0x52, 0x1a, 0x6d, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x31, 0x53, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x6c, 0x0a, + 0x1e, 0x6d, 0x75, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x32, 0x5f, 0x73, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x18, + 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4d, 0x55, + 0x50, 0x54, 0x79, 0x70, 0x65, 0x32, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, + 0x1a, 0x6d, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x32, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x42, 0x06, 0x0a, 0x04, 0x6e, + 0x6c, 0x72, 0x69, 0x22, 0x48, 0x0a, 0x0f, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, + 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, + 0x69, 0x78, 0x4c, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x67, 0x0a, + 0x16, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, + 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4c, 0x65, 0x6e, 0x12, 0x16, + 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x2d, 0x0a, 0x11, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x73, + 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x4c, 0x52, 0x49, 0x12, 0x18, 0x0a, 0x07, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x08, 0x56, 0x50, 0x4c, 0x53, 0x4e, 0x4c, + 0x52, 0x49, 0x12, 0x29, 0x0a, 0x02, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, + 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x72, 0x52, 0x02, 0x72, 0x64, 0x12, 0x13, 0x0a, + 0x05, 0x76, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x76, 0x65, + 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x76, 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x76, 0x65, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x76, 0x65, + 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0b, 0x76, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x28, + 0x0a, 0x10, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x62, 0x61, + 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x61, 0x73, 0x65, 0x22, 0x45, 0x0a, 0x19, 0x45, 0x74, 0x68, 0x65, + 0x72, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0xb8, 0x01, 0x0a, 0x1e, 0x45, 0x56, 0x50, 0x4e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, + 0x41, 0x75, 0x74, 0x6f, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x6f, 0x75, + 0x74, 0x65, 0x12, 0x29, 0x0a, 0x02, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, + 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x72, 0x52, 0x02, 0x72, 0x64, 0x12, 0x32, 0x0a, + 0x03, 0x65, 0x73, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x70, 0x69, + 0x70, 0x62, 0x2e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x03, 0x65, 0x73, + 0x69, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x5f, 0x74, 0x61, + 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, + 0x74, 0x54, 0x61, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0xf7, 0x01, 0x0a, 0x1b, 0x45, + 0x56, 0x50, 0x4e, 0x4d, 0x41, 0x43, 0x49, 0x50, 0x41, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x29, 0x0a, 0x02, 0x72, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, + 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, + 0x72, 0x52, 0x02, 0x72, 0x64, 0x12, 0x32, 0x0a, 0x03, 0x65, 0x73, 0x69, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x74, 0x68, 0x65, 0x72, + 0x6e, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x52, 0x03, 0x65, 0x73, 0x69, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x74, 0x68, + 0x65, 0x72, 0x6e, 0x65, 0x74, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0b, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x54, 0x61, 0x67, 0x12, 0x1f, 0x0a, 0x0b, + 0x6d, 0x61, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1d, 0x0a, + 0x0a, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x26, 0x45, 0x56, 0x50, 0x4e, 0x49, 0x6e, 0x63, + 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x45, + 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x54, 0x61, 0x67, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, + 0x29, 0x0a, 0x02, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, + 0x75, 0x69, 0x73, 0x68, 0x65, 0x72, 0x52, 0x02, 0x72, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x74, + 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0b, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x54, 0x61, 0x67, 0x12, 0x1d, 0x0a, + 0x0a, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x98, 0x01, 0x0a, + 0x18, 0x45, 0x56, 0x50, 0x4e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x67, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x29, 0x0a, 0x02, 0x72, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, + 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x72, + 0x52, 0x02, 0x72, 0x64, 0x12, 0x32, 0x0a, 0x03, 0x65, 0x73, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x6e, + 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x52, 0x03, 0x65, 0x73, 0x69, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x70, 0x5f, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x70, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x8b, 0x02, 0x0a, 0x11, 0x45, 0x56, 0x50, 0x4e, + 0x49, 0x50, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x29, 0x0a, + 0x02, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, + 0x73, 0x68, 0x65, 0x72, 0x52, 0x02, 0x72, 0x64, 0x12, 0x32, 0x0a, 0x03, 0x65, 0x73, 0x69, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x45, 0x74, + 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x03, 0x65, 0x73, 0x69, 0x12, 0x21, 0x0a, 0x0c, + 0x65, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0b, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x54, 0x61, 0x67, 0x12, + 0x1b, 0x0a, 0x09, 0x69, 0x70, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x69, 0x70, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x22, 0x0a, 0x0d, + 0x69, 0x70, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x69, 0x70, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4c, 0x65, 0x6e, + 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x77, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x77, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x82, 0x01, 0x0a, 0x0e, 0x45, 0x56, 0x50, 0x4e, 0x49, 0x50, + 0x4d, 0x53, 0x49, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x29, 0x0a, 0x02, 0x72, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, + 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x72, 0x52, + 0x02, 0x72, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x5f, + 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x65, 0x74, 0x68, 0x65, 0x72, + 0x6e, 0x65, 0x74, 0x54, 0x61, 0x67, 0x12, 0x22, 0x0a, 0x02, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, + 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x02, 0x72, 0x74, 0x22, 0x7e, 0x0a, 0x0c, 0x53, 0x52, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4e, 0x4c, 0x52, 0x49, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, + 0x68, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x74, 0x69, + 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x1a, + 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x95, 0x01, 0x0a, 0x19, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x56, 0x50, 0x4e, 0x49, 0x50, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x12, 0x29, 0x0a, 0x02, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, + 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x72, 0x52, 0x02, 0x72, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, + 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x09, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4c, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, + 0x65, 0x66, 0x69, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, + 0x69, 0x78, 0x22, 0x51, 0x0a, 0x19, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x4e, 0x4c, 0x52, 0x49, 0x12, + 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, + 0x6e, 0x12, 0x22, 0x0a, 0x02, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x52, 0x02, 0x72, 0x74, 0x22, 0x75, 0x0a, 0x10, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x65, + 0x63, 0x49, 0x50, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4c, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, + 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, + 0x65, 0x66, 0x69, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x3b, 0x0a, 0x0b, + 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x41, 0x43, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x3d, 0x0a, 0x15, 0x46, 0x6c, 0x6f, + 0x77, 0x53, 0x70, 0x65, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x74, + 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, + 0x6f, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x5b, 0x0a, 0x11, 0x46, 0x6c, 0x6f, 0x77, + 0x53, 0x70, 0x65, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x32, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x65, + 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xb0, 0x01, 0x0a, 0x0c, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x36, 0x0a, 0x09, 0x69, 0x70, 0x5f, 0x70, 0x72, 0x65, + 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x65, 0x63, 0x49, 0x50, 0x50, 0x72, 0x65, 0x66, + 0x69, 0x78, 0x48, 0x00, 0x52, 0x08, 0x69, 0x70, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x26, + 0x0a, 0x03, 0x6d, 0x61, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, + 0x69, 0x70, 0x62, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x41, 0x43, 0x48, + 0x00, 0x52, 0x03, 0x6d, 0x61, 0x63, 0x12, 0x38, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x70, + 0x62, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x65, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x42, 0x06, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x22, 0x39, 0x0a, 0x0c, 0x46, 0x6c, 0x6f, 0x77, + 0x53, 0x70, 0x65, 0x63, 0x4e, 0x4c, 0x52, 0x49, 0x12, 0x29, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x65, 0x63, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, + 0x6c, 0x65, 0x73, 0x22, 0x67, 0x0a, 0x0f, 0x56, 0x50, 0x4e, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x70, + 0x65, 0x63, 0x4e, 0x4c, 0x52, 0x49, 0x12, 0x29, 0x0a, 0x02, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, + 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x72, 0x52, 0x02, 0x72, + 0x64, 0x12, 0x29, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x65, + 0x63, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x34, 0x0a, 0x0a, + 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x4e, 0x4c, 0x52, 0x49, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x84, 0x02, 0x0a, 0x10, 0x4c, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, 0x6e, 0x12, 0x1a, 0x0a, 0x09, 0x62, 0x67, 0x70, + 0x5f, 0x6c, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x62, 0x67, + 0x70, 0x4c, 0x73, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x6f, 0x73, 0x70, 0x66, 0x5f, 0x61, 0x72, + 0x65, 0x61, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6f, 0x73, 0x70, + 0x66, 0x41, 0x72, 0x65, 0x61, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x73, 0x65, 0x75, 0x64, + 0x6f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x73, 0x65, + 0x75, 0x64, 0x6f, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x67, 0x70, 0x5f, 0x72, + 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x69, 0x67, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x62, + 0x67, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x62, 0x67, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x38, 0x0a, 0x18, 0x62, 0x67, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x65, 0x64, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x16, 0x62, 0x67, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x98, 0x02, 0x0a, 0x10, 0x4c, 0x73, + 0x4c, 0x69, 0x6e, 0x6b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x22, + 0x0a, 0x0d, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6c, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x6c, + 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6c, 0x69, 0x6e, 0x6b, + 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x5f, 0x69, 0x70, 0x76, 0x34, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x41, 0x64, 0x64, 0x72, 0x49, 0x70, 0x76, 0x34, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, 0x69, 0x67, + 0x68, 0x62, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x5f, 0x69, 0x70, 0x76, 0x34, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x41, 0x64, + 0x64, 0x72, 0x49, 0x70, 0x76, 0x34, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x5f, 0x69, 0x70, 0x76, 0x36, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x41, 0x64, + 0x64, 0x72, 0x49, 0x70, 0x76, 0x36, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, + 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x5f, 0x69, 0x70, 0x76, 0x36, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x10, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, + 0x49, 0x70, 0x76, 0x36, 0x22, 0x7d, 0x0a, 0x12, 0x4c, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, + 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x70, + 0x5f, 0x72, 0x65, 0x61, 0x63, 0x68, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x70, 0x52, 0x65, 0x61, 0x63, 0x68, 0x61, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x0f, 0x6f, 0x73, 0x70, 0x66, 0x5f, 0x72, 0x6f, 0x75, 0x74, + 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x4f, 0x73, 0x70, 0x66, 0x52, 0x6f, 0x75, 0x74, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x6f, 0x73, 0x70, 0x66, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x22, 0x44, 0x0a, 0x0a, 0x4c, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x4e, 0x4c, 0x52, + 0x49, 0x12, 0x36, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, + 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x09, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0xc0, 0x01, 0x0a, 0x0a, 0x4c, 0x73, + 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x4c, 0x52, 0x49, 0x12, 0x36, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x4e, 0x6f, 0x64, 0x65, + 0x12, 0x38, 0x0a, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, + 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x0a, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x40, 0x0a, 0x0f, 0x6c, 0x69, + 0x6e, 0x6b, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x4c, 0x69, + 0x6e, 0x6b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x0e, 0x6c, 0x69, + 0x6e, 0x6b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x22, 0x90, 0x01, 0x0a, + 0x0e, 0x4c, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x56, 0x34, 0x4e, 0x4c, 0x52, 0x49, 0x12, + 0x36, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x4e, 0x6f, + 0x64, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x09, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x46, 0x0a, 0x11, 0x70, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x50, 0x72, 0x65, + 0x66, 0x69, 0x78, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x10, 0x70, + 0x72, 0x65, 0x66, 0x69, 0x78, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x22, + 0x90, 0x01, 0x0a, 0x0e, 0x4c, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x56, 0x36, 0x4e, 0x4c, + 0x52, 0x49, 0x12, 0x36, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x6e, 0x6f, 0x64, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, + 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, + 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x46, 0x0a, 0x11, 0x70, 0x72, + 0x65, 0x66, 0x69, 0x78, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, + 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, + 0x52, 0x10, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x6f, 0x72, 0x22, 0xa4, 0x03, 0x0a, 0x0c, 0x4c, 0x73, 0x41, 0x64, 0x64, 0x72, 0x50, 0x72, 0x65, + 0x66, 0x69, 0x78, 0x12, 0x25, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x4e, 0x4c, 0x52, 0x49, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x6e, 0x6c, + 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x4c, 0x73, 0x41, 0x64, 0x64, 0x72, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2e, 0x4c, 0x73, + 0x4e, 0x4c, 0x52, 0x49, 0x52, 0x04, 0x6e, 0x6c, 0x72, 0x69, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x12, 0x34, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x5f, 0x69, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, + 0x4c, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x49, 0x44, 0x52, 0x0a, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x1a, 0xce, 0x01, 0x0a, 0x06, 0x4c, 0x73, 0x4e, + 0x4c, 0x52, 0x49, 0x12, 0x27, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x4e, 0x6f, 0x64, 0x65, + 0x4e, 0x4c, 0x52, 0x49, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x0a, 0x04, + 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, + 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x4c, 0x52, 0x49, 0x48, 0x00, 0x52, + 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x34, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, + 0x76, 0x34, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x4c, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x56, 0x34, 0x4e, 0x4c, 0x52, 0x49, 0x48, + 0x00, 0x52, 0x08, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x56, 0x34, 0x12, 0x34, 0x0a, 0x09, 0x70, + 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x76, 0x36, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x4c, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x56, + 0x36, 0x4e, 0x4c, 0x52, 0x49, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x56, + 0x36, 0x42, 0x06, 0x0a, 0x04, 0x6e, 0x6c, 0x72, 0x69, 0x22, 0x66, 0x0a, 0x21, 0x4d, 0x55, 0x50, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x29, + 0x0a, 0x02, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, + 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, + 0x69, 0x73, 0x68, 0x65, 0x72, 0x52, 0x02, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, + 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x22, 0x65, 0x0a, 0x1e, 0x4d, 0x55, 0x50, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x53, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x6f, + 0x75, 0x74, 0x65, 0x12, 0x29, 0x0a, 0x02, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, + 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x72, 0x52, 0x02, 0x72, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xf1, 0x02, 0x0a, 0x1f, 0x4d, 0x55, 0x50, + 0x54, 0x79, 0x70, 0x65, 0x31, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x29, 0x0a, 0x02, + 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, + 0x68, 0x65, 0x72, 0x52, 0x02, 0x72, 0x64, 0x12, 0x27, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x02, + 0x18, 0x01, 0x52, 0x0c, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x69, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x65, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, + 0x71, 0x66, 0x69, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x71, 0x66, 0x69, 0x12, 0x36, + 0x0a, 0x17, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x15, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x13, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x4c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xc3, 0x01, 0x0a, + 0x1f, 0x4d, 0x55, 0x50, 0x54, 0x79, 0x70, 0x65, 0x32, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, + 0x12, 0x29, 0x0a, 0x02, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, + 0x70, 0x69, 0x70, 0x62, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, + 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x72, 0x52, 0x02, 0x72, 0x64, 0x12, 0x36, 0x0a, 0x17, 0x65, + 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, + 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x65, 0x6e, + 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x4c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x65, + 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, + 0x0a, 0x04, 0x74, 0x65, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x65, + 0x69, 0x64, 0x2a, 0x73, 0x0a, 0x0a, 0x4c, 0x73, 0x4e, 0x4c, 0x52, 0x49, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x53, 0x5f, 0x4e, 0x4c, 0x52, 0x49, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, + 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4c, 0x53, 0x5f, 0x4e, 0x4c, 0x52, 0x49, + 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x4c, 0x53, 0x5f, 0x4e, 0x4c, + 0x52, 0x49, 0x5f, 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x53, 0x5f, + 0x4e, 0x4c, 0x52, 0x49, 0x5f, 0x50, 0x52, 0x45, 0x46, 0x49, 0x58, 0x5f, 0x56, 0x34, 0x10, 0x03, + 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x53, 0x5f, 0x4e, 0x4c, 0x52, 0x49, 0x5f, 0x50, 0x52, 0x45, 0x46, + 0x49, 0x58, 0x5f, 0x56, 0x36, 0x10, 0x04, 0x2a, 0xbb, 0x01, 0x0a, 0x0c, 0x4c, 0x73, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x49, 0x44, 0x12, 0x17, 0x0a, 0x13, 0x4c, 0x53, 0x5f, 0x50, + 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, + 0x00, 0x12, 0x17, 0x0a, 0x13, 0x4c, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, + 0x5f, 0x49, 0x53, 0x49, 0x53, 0x5f, 0x4c, 0x31, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x4c, 0x53, + 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x49, 0x53, 0x49, 0x53, 0x5f, 0x4c, + 0x32, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x4c, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, + 0x4f, 0x4c, 0x5f, 0x4f, 0x53, 0x50, 0x46, 0x5f, 0x56, 0x32, 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, + 0x4c, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x49, 0x52, 0x45, + 0x43, 0x54, 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x4c, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, + 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x10, 0x05, 0x12, 0x17, 0x0a, 0x13, + 0x4c, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x4f, 0x53, 0x50, 0x46, + 0x5f, 0x56, 0x33, 0x10, 0x06, 0x2a, 0xf7, 0x01, 0x0a, 0x0f, 0x4c, 0x73, 0x4f, 0x73, 0x70, 0x66, + 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x4c, 0x53, 0x5f, + 0x4f, 0x53, 0x50, 0x46, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x4c, 0x53, 0x5f, + 0x4f, 0x53, 0x50, 0x46, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x49, 0x4e, 0x54, 0x52, 0x41, 0x5f, 0x41, 0x52, 0x45, 0x41, 0x10, 0x01, 0x12, 0x21, 0x0a, 0x1d, + 0x4c, 0x53, 0x5f, 0x4f, 0x53, 0x50, 0x46, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x41, 0x52, 0x45, 0x41, 0x10, 0x02, 0x12, + 0x20, 0x0a, 0x1c, 0x4c, 0x53, 0x5f, 0x4f, 0x53, 0x50, 0x46, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x45, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x31, 0x10, + 0x03, 0x12, 0x20, 0x0a, 0x1c, 0x4c, 0x53, 0x5f, 0x4f, 0x53, 0x50, 0x46, 0x5f, 0x52, 0x4f, 0x55, + 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, + 0x32, 0x10, 0x04, 0x12, 0x1c, 0x0a, 0x18, 0x4c, 0x53, 0x5f, 0x4f, 0x53, 0x50, 0x46, 0x5f, 0x52, + 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x53, 0x53, 0x41, 0x31, 0x10, + 0x05, 0x12, 0x1c, 0x0a, 0x18, 0x4c, 0x53, 0x5f, 0x4f, 0x53, 0x50, 0x46, 0x5f, 0x52, 0x4f, 0x55, + 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x53, 0x53, 0x41, 0x32, 0x10, 0x06, 0x42, + 0x24, 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, + 0x72, 0x67, 0x2f, 0x67, 0x6f, 0x62, 0x67, 0x70, 0x2f, 0x76, 0x33, 0x2f, 0x61, 0x70, 0x69, 0x3b, + 0x61, 0x70, 0x69, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_nlri_proto_rawDescOnce sync.Once + file_nlri_proto_rawDescData = file_nlri_proto_rawDesc +) + +func file_nlri_proto_rawDescGZIP() []byte { + file_nlri_proto_rawDescOnce.Do(func() { + file_nlri_proto_rawDescData = protoimpl.X.CompressGZIP(file_nlri_proto_rawDescData) + }) + return file_nlri_proto_rawDescData +} + +var file_nlri_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_nlri_proto_msgTypes = make([]protoimpl.MessageInfo, 36) +var file_nlri_proto_goTypes = []interface{}{ + (LsNLRIType)(0), // 0: apipb.LsNLRIType + (LsProtocolID)(0), // 1: apipb.LsProtocolID + (LsOspfRouteType)(0), // 2: apipb.LsOspfRouteType + (*NLRI)(nil), // 3: apipb.NLRI + (*IPAddressPrefix)(nil), // 4: apipb.IPAddressPrefix + (*LabeledIPAddressPrefix)(nil), // 5: apipb.LabeledIPAddressPrefix + (*EncapsulationNLRI)(nil), // 6: apipb.EncapsulationNLRI + (*VPLSNLRI)(nil), // 7: apipb.VPLSNLRI + (*EthernetSegmentIdentifier)(nil), // 8: apipb.EthernetSegmentIdentifier + (*EVPNEthernetAutoDiscoveryRoute)(nil), // 9: apipb.EVPNEthernetAutoDiscoveryRoute + (*EVPNMACIPAdvertisementRoute)(nil), // 10: apipb.EVPNMACIPAdvertisementRoute + (*EVPNInclusiveMulticastEthernetTagRoute)(nil), // 11: apipb.EVPNInclusiveMulticastEthernetTagRoute + (*EVPNEthernetSegmentRoute)(nil), // 12: apipb.EVPNEthernetSegmentRoute + (*EVPNIPPrefixRoute)(nil), // 13: apipb.EVPNIPPrefixRoute + (*EVPNIPMSIRoute)(nil), // 14: apipb.EVPNIPMSIRoute + (*SRPolicyNLRI)(nil), // 15: apipb.SRPolicyNLRI + (*LabeledVPNIPAddressPrefix)(nil), // 16: apipb.LabeledVPNIPAddressPrefix + (*RouteTargetMembershipNLRI)(nil), // 17: apipb.RouteTargetMembershipNLRI + (*FlowSpecIPPrefix)(nil), // 18: apipb.FlowSpecIPPrefix + (*FlowSpecMAC)(nil), // 19: apipb.FlowSpecMAC + (*FlowSpecComponentItem)(nil), // 20: apipb.FlowSpecComponentItem + (*FlowSpecComponent)(nil), // 21: apipb.FlowSpecComponent + (*FlowSpecRule)(nil), // 22: apipb.FlowSpecRule + (*FlowSpecNLRI)(nil), // 23: apipb.FlowSpecNLRI + (*VPNFlowSpecNLRI)(nil), // 24: apipb.VPNFlowSpecNLRI + (*OpaqueNLRI)(nil), // 25: apipb.OpaqueNLRI + (*LsNodeDescriptor)(nil), // 26: apipb.LsNodeDescriptor + (*LsLinkDescriptor)(nil), // 27: apipb.LsLinkDescriptor + (*LsPrefixDescriptor)(nil), // 28: apipb.LsPrefixDescriptor + (*LsNodeNLRI)(nil), // 29: apipb.LsNodeNLRI + (*LsLinkNLRI)(nil), // 30: apipb.LsLinkNLRI + (*LsPrefixV4NLRI)(nil), // 31: apipb.LsPrefixV4NLRI + (*LsPrefixV6NLRI)(nil), // 32: apipb.LsPrefixV6NLRI + (*LsAddrPrefix)(nil), // 33: apipb.LsAddrPrefix + (*MUPInterworkSegmentDiscoveryRoute)(nil), // 34: apipb.MUPInterworkSegmentDiscoveryRoute + (*MUPDirectSegmentDiscoveryRoute)(nil), // 35: apipb.MUPDirectSegmentDiscoveryRoute + (*MUPType1SessionTransformedRoute)(nil), // 36: apipb.MUPType1SessionTransformedRoute + (*MUPType2SessionTransformedRoute)(nil), // 37: apipb.MUPType2SessionTransformedRoute + (*LsAddrPrefix_LsNLRI)(nil), // 38: apipb.LsAddrPrefix.LsNLRI + (*RouteDistinguisher)(nil), // 39: apipb.RouteDistinguisher + (*RouteTarget)(nil), // 40: apipb.RouteTarget +} +var file_nlri_proto_depIdxs = []int32{ + 4, // 0: apipb.NLRI.prefix:type_name -> apipb.IPAddressPrefix + 5, // 1: apipb.NLRI.labeled_prefix:type_name -> apipb.LabeledIPAddressPrefix + 6, // 2: apipb.NLRI.encapsulation:type_name -> apipb.EncapsulationNLRI + 7, // 3: apipb.NLRI.vpls:type_name -> apipb.VPLSNLRI + 9, // 4: apipb.NLRI.evpn_ethernet_ad:type_name -> apipb.EVPNEthernetAutoDiscoveryRoute + 10, // 5: apipb.NLRI.evpn_macadv:type_name -> apipb.EVPNMACIPAdvertisementRoute + 11, // 6: apipb.NLRI.evpn_multicast:type_name -> apipb.EVPNInclusiveMulticastEthernetTagRoute + 12, // 7: apipb.NLRI.evpn_ethernet_segment:type_name -> apipb.EVPNEthernetSegmentRoute + 13, // 8: apipb.NLRI.evpn_ip_prefix:type_name -> apipb.EVPNIPPrefixRoute + 14, // 9: apipb.NLRI.evpn_i_pmsi:type_name -> apipb.EVPNIPMSIRoute + 16, // 10: apipb.NLRI.labeled_vpn_ip_prefix:type_name -> apipb.LabeledVPNIPAddressPrefix + 17, // 11: apipb.NLRI.route_target_membership:type_name -> apipb.RouteTargetMembershipNLRI + 23, // 12: apipb.NLRI.flow_spec:type_name -> apipb.FlowSpecNLRI + 24, // 13: apipb.NLRI.vpn_flow_spec:type_name -> apipb.VPNFlowSpecNLRI + 25, // 14: apipb.NLRI.opaque:type_name -> apipb.OpaqueNLRI + 33, // 15: apipb.NLRI.ls_addr_prefix:type_name -> apipb.LsAddrPrefix + 15, // 16: apipb.NLRI.sr_policy:type_name -> apipb.SRPolicyNLRI + 34, // 17: apipb.NLRI.mup_interwork_segment_discovery:type_name -> apipb.MUPInterworkSegmentDiscoveryRoute + 35, // 18: apipb.NLRI.mup_direct_segment_discovery:type_name -> apipb.MUPDirectSegmentDiscoveryRoute + 36, // 19: apipb.NLRI.mup_type_1_session_transformed:type_name -> apipb.MUPType1SessionTransformedRoute + 37, // 20: apipb.NLRI.mup_type_2_session_transformed:type_name -> apipb.MUPType2SessionTransformedRoute + 39, // 21: apipb.VPLSNLRI.rd:type_name -> apipb.RouteDistinguisher + 39, // 22: apipb.EVPNEthernetAutoDiscoveryRoute.rd:type_name -> apipb.RouteDistinguisher + 8, // 23: apipb.EVPNEthernetAutoDiscoveryRoute.esi:type_name -> apipb.EthernetSegmentIdentifier + 39, // 24: apipb.EVPNMACIPAdvertisementRoute.rd:type_name -> apipb.RouteDistinguisher + 8, // 25: apipb.EVPNMACIPAdvertisementRoute.esi:type_name -> apipb.EthernetSegmentIdentifier + 39, // 26: apipb.EVPNInclusiveMulticastEthernetTagRoute.rd:type_name -> apipb.RouteDistinguisher + 39, // 27: apipb.EVPNEthernetSegmentRoute.rd:type_name -> apipb.RouteDistinguisher + 8, // 28: apipb.EVPNEthernetSegmentRoute.esi:type_name -> apipb.EthernetSegmentIdentifier + 39, // 29: apipb.EVPNIPPrefixRoute.rd:type_name -> apipb.RouteDistinguisher + 8, // 30: apipb.EVPNIPPrefixRoute.esi:type_name -> apipb.EthernetSegmentIdentifier + 39, // 31: apipb.EVPNIPMSIRoute.rd:type_name -> apipb.RouteDistinguisher + 40, // 32: apipb.EVPNIPMSIRoute.rt:type_name -> apipb.RouteTarget + 39, // 33: apipb.LabeledVPNIPAddressPrefix.rd:type_name -> apipb.RouteDistinguisher + 40, // 34: apipb.RouteTargetMembershipNLRI.rt:type_name -> apipb.RouteTarget + 20, // 35: apipb.FlowSpecComponent.items:type_name -> apipb.FlowSpecComponentItem + 18, // 36: apipb.FlowSpecRule.ip_prefix:type_name -> apipb.FlowSpecIPPrefix + 19, // 37: apipb.FlowSpecRule.mac:type_name -> apipb.FlowSpecMAC + 21, // 38: apipb.FlowSpecRule.component:type_name -> apipb.FlowSpecComponent + 22, // 39: apipb.FlowSpecNLRI.rules:type_name -> apipb.FlowSpecRule + 39, // 40: apipb.VPNFlowSpecNLRI.rd:type_name -> apipb.RouteDistinguisher + 22, // 41: apipb.VPNFlowSpecNLRI.rules:type_name -> apipb.FlowSpecRule + 2, // 42: apipb.LsPrefixDescriptor.ospf_route_type:type_name -> apipb.LsOspfRouteType + 26, // 43: apipb.LsNodeNLRI.local_node:type_name -> apipb.LsNodeDescriptor + 26, // 44: apipb.LsLinkNLRI.local_node:type_name -> apipb.LsNodeDescriptor + 26, // 45: apipb.LsLinkNLRI.remote_node:type_name -> apipb.LsNodeDescriptor + 27, // 46: apipb.LsLinkNLRI.link_descriptor:type_name -> apipb.LsLinkDescriptor + 26, // 47: apipb.LsPrefixV4NLRI.local_node:type_name -> apipb.LsNodeDescriptor + 28, // 48: apipb.LsPrefixV4NLRI.prefix_descriptor:type_name -> apipb.LsPrefixDescriptor + 26, // 49: apipb.LsPrefixV6NLRI.local_node:type_name -> apipb.LsNodeDescriptor + 28, // 50: apipb.LsPrefixV6NLRI.prefix_descriptor:type_name -> apipb.LsPrefixDescriptor + 0, // 51: apipb.LsAddrPrefix.type:type_name -> apipb.LsNLRIType + 38, // 52: apipb.LsAddrPrefix.nlri:type_name -> apipb.LsAddrPrefix.LsNLRI + 1, // 53: apipb.LsAddrPrefix.protocol_id:type_name -> apipb.LsProtocolID + 39, // 54: apipb.MUPInterworkSegmentDiscoveryRoute.rd:type_name -> apipb.RouteDistinguisher + 39, // 55: apipb.MUPDirectSegmentDiscoveryRoute.rd:type_name -> apipb.RouteDistinguisher + 39, // 56: apipb.MUPType1SessionTransformedRoute.rd:type_name -> apipb.RouteDistinguisher + 39, // 57: apipb.MUPType2SessionTransformedRoute.rd:type_name -> apipb.RouteDistinguisher + 29, // 58: apipb.LsAddrPrefix.LsNLRI.node:type_name -> apipb.LsNodeNLRI + 30, // 59: apipb.LsAddrPrefix.LsNLRI.link:type_name -> apipb.LsLinkNLRI + 31, // 60: apipb.LsAddrPrefix.LsNLRI.prefix_v4:type_name -> apipb.LsPrefixV4NLRI + 32, // 61: apipb.LsAddrPrefix.LsNLRI.prefix_v6:type_name -> apipb.LsPrefixV6NLRI + 62, // [62:62] is the sub-list for method output_type + 62, // [62:62] is the sub-list for method input_type + 62, // [62:62] is the sub-list for extension type_name + 62, // [62:62] is the sub-list for extension extendee + 0, // [0:62] is the sub-list for field type_name +} + +func init() { file_nlri_proto_init() } +func file_nlri_proto_init() { + if File_nlri_proto != nil { + return + } + file_common_proto_init() + file_extcom_proto_init() + if !protoimpl.UnsafeEnabled { + file_nlri_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NLRI); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IPAddressPrefix); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LabeledIPAddressPrefix); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EncapsulationNLRI); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VPLSNLRI); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EthernetSegmentIdentifier); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EVPNEthernetAutoDiscoveryRoute); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EVPNMACIPAdvertisementRoute); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EVPNInclusiveMulticastEthernetTagRoute); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EVPNEthernetSegmentRoute); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EVPNIPPrefixRoute); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EVPNIPMSIRoute); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SRPolicyNLRI); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LabeledVPNIPAddressPrefix); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RouteTargetMembershipNLRI); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FlowSpecIPPrefix); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FlowSpecMAC); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FlowSpecComponentItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FlowSpecComponent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FlowSpecRule); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FlowSpecNLRI); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VPNFlowSpecNLRI); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OpaqueNLRI); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LsNodeDescriptor); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LsLinkDescriptor); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LsPrefixDescriptor); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LsNodeNLRI); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LsLinkNLRI); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LsPrefixV4NLRI); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LsPrefixV6NLRI); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LsAddrPrefix); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MUPInterworkSegmentDiscoveryRoute); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MUPDirectSegmentDiscoveryRoute); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MUPType1SessionTransformedRoute); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MUPType2SessionTransformedRoute); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nlri_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LsAddrPrefix_LsNLRI); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_nlri_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*NLRI_Prefix)(nil), + (*NLRI_LabeledPrefix)(nil), + (*NLRI_Encapsulation)(nil), + (*NLRI_Vpls)(nil), + (*NLRI_EvpnEthernetAd)(nil), + (*NLRI_EvpnMacadv)(nil), + (*NLRI_EvpnMulticast)(nil), + (*NLRI_EvpnEthernetSegment)(nil), + (*NLRI_EvpnIpPrefix)(nil), + (*NLRI_EvpnIPmsi)(nil), + (*NLRI_LabeledVpnIpPrefix)(nil), + (*NLRI_RouteTargetMembership)(nil), + (*NLRI_FlowSpec)(nil), + (*NLRI_VpnFlowSpec)(nil), + (*NLRI_Opaque)(nil), + (*NLRI_LsAddrPrefix)(nil), + (*NLRI_SrPolicy)(nil), + (*NLRI_MupInterworkSegmentDiscovery)(nil), + (*NLRI_MupDirectSegmentDiscovery)(nil), + (*NLRI_MupType_1SessionTransformed)(nil), + (*NLRI_MupType_2SessionTransformed)(nil), + } + file_nlri_proto_msgTypes[19].OneofWrappers = []interface{}{ + (*FlowSpecRule_IpPrefix)(nil), + (*FlowSpecRule_Mac)(nil), + (*FlowSpecRule_Component)(nil), + } + file_nlri_proto_msgTypes[35].OneofWrappers = []interface{}{ + (*LsAddrPrefix_LsNLRI_Node)(nil), + (*LsAddrPrefix_LsNLRI_Link)(nil), + (*LsAddrPrefix_LsNLRI_PrefixV4)(nil), + (*LsAddrPrefix_LsNLRI_PrefixV6)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_nlri_proto_rawDesc, + NumEnums: 3, + NumMessages: 36, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_nlri_proto_goTypes, + DependencyIndexes: file_nlri_proto_depIdxs, + EnumInfos: file_nlri_proto_enumTypes, + MessageInfos: file_nlri_proto_msgTypes, + }.Build() + File_nlri_proto = out.File + file_nlri_proto_rawDesc = nil + file_nlri_proto_goTypes = nil + file_nlri_proto_depIdxs = nil +} diff --git a/api/nlri.proto b/api/nlri.proto new file mode 100644 index 000000000..78062156b --- /dev/null +++ b/api/nlri.proto @@ -0,0 +1,334 @@ +syntax = "proto3"; + +package apipb; +option go_package = "github.com/osrg/gobgp/v3/api;apipb"; + +import "common.proto"; +import "extcom.proto"; + +// Main NLRI type + +message NLRI { + oneof nlri { + IPAddressPrefix prefix = 1; + LabeledIPAddressPrefix labeled_prefix = 2; + EncapsulationNLRI encapsulation = 3; + VPLSNLRI vpls = 4; + EVPNEthernetAutoDiscoveryRoute evpn_ethernet_ad = 5; + EVPNMACIPAdvertisementRoute evpn_macadv = 6; + EVPNInclusiveMulticastEthernetTagRoute evpn_multicast = 7; + EVPNEthernetSegmentRoute evpn_ethernet_segment = 8; + EVPNIPPrefixRoute evpn_ip_prefix = 9; + EVPNIPMSIRoute evpn_i_pmsi = 10; + LabeledVPNIPAddressPrefix labeled_vpn_ip_prefix = 11; + RouteTargetMembershipNLRI route_target_membership = 12; + FlowSpecNLRI flow_spec = 13; + VPNFlowSpecNLRI vpn_flow_spec = 14; + OpaqueNLRI opaque = 15; + LsAddrPrefix ls_addr_prefix = 16; + SRPolicyNLRI sr_policy = 17; + MUPInterworkSegmentDiscoveryRoute mup_interwork_segment_discovery = 18; + MUPDirectSegmentDiscoveryRoute mup_direct_segment_discovery = 19; + MUPType1SessionTransformedRoute mup_type_1_session_transformed = 20; + MUPType2SessionTransformedRoute mup_type_2_session_transformed = 21; + } +} + +// IPAddressPrefix represents the NLRI for: +// - AFI=1, SAFI=1 +// - AFI=2, SAFI=1 +message IPAddressPrefix { + uint32 prefix_len = 1; + string prefix = 2; +} + +// LabeledIPAddressPrefix represents the NLRI for: +// - AFI=1, SAFI=4 +// - AFI=2, SAFI=4 +message LabeledIPAddressPrefix { + repeated uint32 labels = 1; + uint32 prefix_len = 2; + string prefix = 3; +} + +// EncapsulationNLRI represents the NLRI for: +// - AFI=1, SAFI=7 +// - AFI=2, SAFI=7 +message EncapsulationNLRI { string address = 1; } + +// VPLSNLRI represents the NLRI for: +// - AFI=25, SAFI=65 +message VPLSNLRI { + RouteDistinguisher rd = 1; + uint32 ve_id = 2; + uint32 ve_block_offset = 3; + uint32 ve_block_size = 4; + uint32 label_block_base = 5; +} + +message EthernetSegmentIdentifier { + uint32 type = 1; + bytes value = 2; +} + +// EVPNEthernetAutoDiscoveryRoute represents the NLRI for: +// - AFI=25, SAFI=70, RouteType=1 +message EVPNEthernetAutoDiscoveryRoute { + RouteDistinguisher rd = 1; + EthernetSegmentIdentifier esi = 2; + uint32 ethernet_tag = 3; + uint32 label = 4; +} + +// EVPNMACIPAdvertisementRoute represents the NLRI for: +// - AFI=25, SAFI=70, RouteType=2 +message EVPNMACIPAdvertisementRoute { + RouteDistinguisher rd = 1; + EthernetSegmentIdentifier esi = 2; + uint32 ethernet_tag = 3; + string mac_address = 4; + string ip_address = 5; + repeated uint32 labels = 6; +} + +// EVPNInclusiveMulticastEthernetTagRoute represents the NLRI for: +// - AFI=25, SAFI=70, RouteType=3 +message EVPNInclusiveMulticastEthernetTagRoute { + RouteDistinguisher rd = 1; + uint32 ethernet_tag = 2; + string ip_address = 3; +} + +// EVPNEthernetSegmentRoute represents the NLRI for: +// - AFI=25, SAFI=70, RouteType=4 +message EVPNEthernetSegmentRoute { + RouteDistinguisher rd = 1; + EthernetSegmentIdentifier esi = 2; + string ip_address = 3; +} + +// EVPNIPPrefixRoute represents the NLRI for: +// - AFI=25, SAFI=70, RouteType=5 +message EVPNIPPrefixRoute { + RouteDistinguisher rd = 1; + EthernetSegmentIdentifier esi = 2; + uint32 ethernet_tag = 3; + string ip_prefix = 4; + uint32 ip_prefix_len = 5; + string gw_address = 6; + uint32 label = 7; +} + +// EVPNIPMSIRoute represents the NLRI for: +// - AFI=25, SAFI=70, RouteType=9 +message EVPNIPMSIRoute { + RouteDistinguisher rd = 1; + uint32 ethernet_tag = 2; + RouteTarget rt = 3; +} + +// SRPolicyNLRI represents the NLRI for: +// - AFI=1, SAFI=73 +// - AFI=2, SAFI=73 +message SRPolicyNLRI { + // length field carries the length of NLRI portion expressed in bits + uint32 length = 1; + // distinguisher field carries 4-octet value uniquely identifying the policy + // in the context of tuple. + uint32 distinguisher = 2; + // color field carries 4-octet value identifying (with the endpoint) the + // policy. The color is used to match the color of the destination + // prefixes to steer traffic into the SR Policy + uint32 color = 3; + // endpoint field identifies the endpoint of a policy. The Endpoint may + // represent a single node or a set of nodes (e.g., an anycast + // address). The Endpoint is an IPv4 (4-octet) address or an IPv6 + // (16-octet) address according to the AFI of the NLRI. + bytes endpoint = 4; +} + +// LabeledVPNIPAddressPrefix represents the NLRI for: +// - AFI=1, SAFI=128 +// - AFI=2, SAFI=128 +message LabeledVPNIPAddressPrefix { + repeated uint32 labels = 1; + RouteDistinguisher rd = 2; + uint32 prefix_len = 3; + string prefix = 4; +} + +// RouteTargetMembershipNLRI represents the NLRI for: +// - AFI=1, SAFI=132 +message RouteTargetMembershipNLRI { + uint32 asn = 1; + RouteTarget rt = 2; +} + +message FlowSpecIPPrefix { + uint32 type = 1; + uint32 prefix_len = 2; + string prefix = 3; + // IPv6 only + uint32 offset = 4; +} + +message FlowSpecMAC { + uint32 type = 1; + string address = 2; +} + +message FlowSpecComponentItem { + // Operator for Numeric type, Operand for Bitmask type + uint32 op = 1; + uint64 value = 2; +} + +message FlowSpecComponent { + uint32 type = 1; + repeated FlowSpecComponentItem items = 2; +} + +message FlowSpecRule { + oneof rule { + FlowSpecIPPrefix ip_prefix = 1; + FlowSpecMAC mac = 2; + FlowSpecComponent component = 3; + } +} + +// FlowSpecNLRI represents the NLRI for: +// - AFI=1, SAFI=133 +// - AFI=2, SAFI=133 +message FlowSpecNLRI { + repeated FlowSpecRule rules = 1; +} + +// VPNFlowSpecNLRI represents the NLRI for: +// - AFI=1, SAFI=134 +// - AFI=2, SAFI=134 +// - AFI=25, SAFI=134 +message VPNFlowSpecNLRI { + RouteDistinguisher rd = 1; + repeated FlowSpecRule rules = 2; +} + +// OpaqueNLRI represents the NLRI for: +// - AFI=16397, SAFI=241 +message OpaqueNLRI { + bytes key = 1; + bytes value = 2; +} + +// Based om RFC 7752, Table 1. +enum LsNLRIType { + LS_NLRI_UNKNOWN = 0; LS_NLRI_NODE = 1; LS_NLRI_LINK = 2; + LS_NLRI_PREFIX_V4 = 3; + LS_NLRI_PREFIX_V6 = 4; +} + +enum LsProtocolID { + LS_PROTOCOL_UNKNOWN = 0; LS_PROTOCOL_ISIS_L1 = 1; LS_PROTOCOL_ISIS_L2 = 2; + LS_PROTOCOL_OSPF_V2 = 3; + LS_PROTOCOL_DIRECT = 4; + LS_PROTOCOL_STATIC = 5; + LS_PROTOCOL_OSPF_V3 = 6; +} + +message LsNodeDescriptor { + uint32 asn = 1; + uint32 bgp_ls_id = 2; + uint32 ospf_area_id = 3; + bool pseudonode = 4; + string igp_router_id = 5; + string bgp_router_id = 6; + uint32 bgp_confederation_member = 7; +} + +message LsLinkDescriptor { + uint32 link_local_id = 1; + uint32 link_remote_id = 2; + string interface_addr_ipv4 = 3; + string neighbor_addr_ipv4 = 4; + string interface_addr_ipv6 = 5; + string neighbor_addr_ipv6 = 6; +} + +enum LsOspfRouteType { + LS_OSPF_ROUTE_TYPE_UNKNOWN = 0; + LS_OSPF_ROUTE_TYPE_INTRA_AREA = 1; + LS_OSPF_ROUTE_TYPE_INTER_AREA = 2; + LS_OSPF_ROUTE_TYPE_EXTERNAL1 = 3; + LS_OSPF_ROUTE_TYPE_EXTERNAL2 = 4; + LS_OSPF_ROUTE_TYPE_NSSA1 = 5; + LS_OSPF_ROUTE_TYPE_NSSA2 = 6; +} + +message LsPrefixDescriptor { + repeated string ip_reachability = 1; + LsOspfRouteType ospf_route_type = 2; +} + +message LsNodeNLRI { LsNodeDescriptor local_node = 1; } + +message LsLinkNLRI { + LsNodeDescriptor local_node = 1; + LsNodeDescriptor remote_node = 2; + LsLinkDescriptor link_descriptor = 3; +} + +message LsPrefixV4NLRI { + LsNodeDescriptor local_node = 1; + LsPrefixDescriptor prefix_descriptor = 2; +} + +message LsPrefixV6NLRI { + LsNodeDescriptor local_node = 1; + LsPrefixDescriptor prefix_descriptor = 2; +} + +// LsAddrPrefix represents the NLRI for: +// - AFI=16388, SAFI=71 +message LsAddrPrefix { + LsNLRIType type = 1; + message LsNLRI { + oneof nlri { + LsNodeNLRI node = 1; + LsLinkNLRI link = 2; + LsPrefixV4NLRI prefix_v4 = 3; + LsPrefixV6NLRI prefix_v6 = 4; + } + } + LsNLRI nlri = 2; + uint32 length = 3; + LsProtocolID protocol_id = 4; + uint64 identifier = 5; +} + +message MUPInterworkSegmentDiscoveryRoute { + RouteDistinguisher rd = 1; + string prefix = 2; +} + +message MUPDirectSegmentDiscoveryRoute { + RouteDistinguisher rd = 1; + string address = 2; +} + +message MUPType1SessionTransformedRoute { + RouteDistinguisher rd = 1; + uint32 prefix_length = 2 [deprecated = true]; + string prefix = 3; + uint32 teid = 4; + uint32 qfi = 5; + uint32 endpoint_address_length = 6; + string endpoint_address = 7; + uint32 source_address_length = 8; + string source_address = 9; +} + +message MUPType2SessionTransformedRoute { + RouteDistinguisher rd = 1; + uint32 endpoint_address_length = 2; + string endpoint_address = 3; + uint32 teid = 4; +} From b6f915dc6d77ea8a6d2968e232c81eae18adca6e Mon Sep 17 00:00:00 2001 From: Tuetuopay Date: Fri, 22 Nov 2024 18:10:51 +0100 Subject: [PATCH 2/4] pkg: update api adapters to Any-less API --- cmd/gobgp/vrf.go | 3 +- pkg/apiutil/attribute.go | 1381 +++++++++++++++++++------------------ pkg/apiutil/capability.go | 85 +-- pkg/config/config.go | 6 +- pkg/server/grpc_server.go | 7 +- 5 files changed, 768 insertions(+), 714 deletions(-) diff --git a/cmd/gobgp/vrf.go b/cmd/gobgp/vrf.go index 1e1a9b21d..9875d8ca6 100644 --- a/cmd/gobgp/vrf.go +++ b/cmd/gobgp/vrf.go @@ -24,7 +24,6 @@ import ( "strings" "github.com/spf13/cobra" - apb "google.golang.org/protobuf/types/known/anypb" api "github.com/osrg/gobgp/v3/api" "github.com/osrg/gobgp/v3/pkg/apiutil" @@ -78,7 +77,7 @@ func showVrfs() error { } rdStr := rd.String() - f := func(rts []*apb.Any) (string, error) { + f := func(rts []*api.RouteTarget) (string, error) { ret := make([]string, 0, len(rts)) for _, an := range rts { rt, err := apiutil.UnmarshalRT(an) diff --git a/pkg/apiutil/attribute.go b/pkg/apiutil/attribute.go index 25fc2533a..45fce97fd 100644 --- a/pkg/apiutil/attribute.go +++ b/pkg/apiutil/attribute.go @@ -22,66 +22,61 @@ import ( "net" "net/netip" - "google.golang.org/protobuf/proto" - apb "google.golang.org/protobuf/types/known/anypb" - api "github.com/osrg/gobgp/v3/api" "github.com/osrg/gobgp/v3/pkg/packet/bgp" ) -func UnmarshalAttribute(an *apb.Any) (bgp.PathAttributeInterface, error) { - value, err := an.UnmarshalNew() - if err != nil { - return nil, fmt.Errorf("failed to unmarshal route distinguisher: %s", err) - } - switch a := value.(type) { - case *api.OriginAttribute: - return bgp.NewPathAttributeOrigin(uint8(a.Origin)), nil - case *api.AsPathAttribute: - params := make([]bgp.AsPathParamInterface, 0, len(a.Segments)) - for _, segment := range a.Segments { +func UnmarshalAttribute(attr *api.Attribute) (bgp.PathAttributeInterface, error) { + switch a := attr.GetAttr().(type) { + case *api.Attribute_Origin: + return bgp.NewPathAttributeOrigin(uint8(a.Origin.Origin)), nil + case *api.Attribute_AsPath: + params := make([]bgp.AsPathParamInterface, 0, len(a.AsPath.Segments)) + for _, segment := range a.AsPath.Segments { params = append(params, bgp.NewAs4PathParam(uint8(segment.Type), segment.Numbers)) } return bgp.NewPathAttributeAsPath(params), nil - case *api.NextHopAttribute: - nexthop := net.ParseIP(a.NextHop).To4() + case *api.Attribute_NextHop: + nexthop := net.ParseIP(a.NextHop.NextHop).To4() if nexthop == nil { - if nexthop = net.ParseIP(a.NextHop).To16(); nexthop == nil { + if nexthop = net.ParseIP(a.NextHop.NextHop).To16(); nexthop == nil { return nil, fmt.Errorf("invalid nexthop address: %s", a.NextHop) } } - return bgp.NewPathAttributeNextHop(a.NextHop), nil - case *api.MultiExitDiscAttribute: - return bgp.NewPathAttributeMultiExitDisc(a.Med), nil - case *api.LocalPrefAttribute: - return bgp.NewPathAttributeLocalPref(a.LocalPref), nil - case *api.AtomicAggregateAttribute: + return bgp.NewPathAttributeNextHop(a.NextHop.NextHop), nil + case *api.Attribute_MultiExitDisc: + return bgp.NewPathAttributeMultiExitDisc(a.MultiExitDisc.Med), nil + case *api.Attribute_LocalPref: + return bgp.NewPathAttributeLocalPref(a.LocalPref.LocalPref), nil + case *api.Attribute_AtomicAggregate: return bgp.NewPathAttributeAtomicAggregate(), nil - case *api.AggregatorAttribute: - if net.ParseIP(a.Address).To4() == nil { - return nil, fmt.Errorf("invalid aggregator address: %s", a.Address) - } - return bgp.NewPathAttributeAggregator(a.Asn, a.Address), nil - case *api.CommunitiesAttribute: - return bgp.NewPathAttributeCommunities(a.Communities), nil - case *api.OriginatorIdAttribute: - if net.ParseIP(a.Id).To4() == nil { - return nil, fmt.Errorf("invalid originator id: %s", a.Id) - } - return bgp.NewPathAttributeOriginatorId(a.Id), nil - case *api.ClusterListAttribute: - for _, id := range a.Ids { + case *api.Attribute_Aggregator: + address := net.ParseIP(a.Aggregator.Address).To4() + if address.To4() == nil { + return nil, fmt.Errorf("invalid aggregator address: %s", a.Aggregator.Address) + } + return bgp.NewPathAttributeAggregator(a.Aggregator.Asn, a.Aggregator.Address), nil + case *api.Attribute_Communities: + return bgp.NewPathAttributeCommunities(a.Communities.Communities), nil + case *api.Attribute_OriginatorId: + id := net.ParseIP(a.OriginatorId.Id).To4() + if id.To4() == nil { + return nil, fmt.Errorf("invalid originator id: %s", a.OriginatorId.Id) + } + return bgp.NewPathAttributeOriginatorId(a.OriginatorId.Id), nil + case *api.Attribute_ClusterList: + for _, id := range a.ClusterList.Ids { if net.ParseIP(id).To4() == nil { - return nil, fmt.Errorf("invalid cluster list: %s", a.Ids) + return nil, fmt.Errorf("invalid cluster list: %s", a.ClusterList.Ids) } } - return bgp.NewPathAttributeClusterList(a.Ids), nil - case *api.MpReachNLRIAttribute: - if a.Family == nil { + return bgp.NewPathAttributeClusterList(a.ClusterList.Ids), nil + case *api.Attribute_MpReach: + if a.MpReach.Family == nil { return nil, fmt.Errorf("empty family") } - rf := ToRouteFamily(a.Family) - nlris, err := UnmarshalNLRIs(rf, a.Nlris) + rf := ToRouteFamily(a.MpReach.Family) + nlris, err := UnmarshalNLRIs(rf, a.MpReach.Nlris) if err != nil { return nil, err } @@ -90,17 +85,17 @@ func UnmarshalAttribute(an *apb.Any) (bgp.PathAttributeInterface, error) { var linkLocalNexthop net.IP if afi == bgp.AFI_IP6 { nexthop = "::" - if len(a.NextHops) > 1 { - linkLocalNexthop = net.ParseIP(a.NextHops[1]).To16() + if len(a.MpReach.NextHops) > 1 { + linkLocalNexthop = net.ParseIP(a.MpReach.NextHops[1]).To16() if linkLocalNexthop == nil { - return nil, fmt.Errorf("invalid nexthop: %s", a.NextHops[1]) + return nil, fmt.Errorf("invalid nexthop: %s", a.MpReach.NextHops[1]) } } } if safi == bgp.SAFI_FLOW_SPEC_UNICAST || safi == bgp.SAFI_FLOW_SPEC_VPN { nexthop = "" - } else if len(a.NextHops) > 0 { - nexthop = a.NextHops[0] + } else if len(a.MpReach.NextHops) > 0 { + nexthop = a.MpReach.NextHops[0] if net.ParseIP(nexthop) == nil { return nil, fmt.Errorf("invalid nexthop: %s", nexthop) } @@ -108,86 +103,83 @@ func UnmarshalAttribute(an *apb.Any) (bgp.PathAttributeInterface, error) { attr := bgp.NewPathAttributeMpReachNLRI(nexthop, nlris) attr.LinkLocalNexthop = linkLocalNexthop return attr, nil - case *api.MpUnreachNLRIAttribute: - rf := ToRouteFamily(a.Family) - nlris, err := UnmarshalNLRIs(rf, a.Nlris) + case *api.Attribute_MpUnreach: + rf := ToRouteFamily(a.MpUnreach.Family) + nlris, err := UnmarshalNLRIs(rf, a.MpUnreach.Nlris) if err != nil { return nil, err } return bgp.NewPathAttributeMpUnreachNLRI(nlris), nil - case *api.ExtendedCommunitiesAttribute: - return unmarshalExComm(a) - case *api.As4PathAttribute: - params := make([]*bgp.As4PathParam, 0, len(a.Segments)) - for _, segment := range a.Segments { + case *api.Attribute_ExtendedCommunities: + return unmarshalExComm(a.ExtendedCommunities) + case *api.Attribute_As4Path: + params := make([]*bgp.As4PathParam, 0, len(a.As4Path.Segments)) + for _, segment := range a.As4Path.Segments { params = append(params, bgp.NewAs4PathParam(uint8(segment.Type), segment.Numbers)) } return bgp.NewPathAttributeAs4Path(params), nil - case *api.As4AggregatorAttribute: - if net.ParseIP(a.Address).To4() == nil { - return nil, fmt.Errorf("invalid as4 aggregator address: %s", a.Address) - } - return bgp.NewPathAttributeAs4Aggregator(a.Asn, a.Address), nil - case *api.PmsiTunnelAttribute: - typ := bgp.PmsiTunnelType(a.Type) + case *api.Attribute_As4Aggregator: + address := net.ParseIP(a.As4Aggregator.Address).To4() + if address == nil { + return nil, fmt.Errorf("invalid as4 aggregator address: %s", a.As4Aggregator.Address) + } + return bgp.NewPathAttributeAs4Aggregator(a.As4Aggregator.Asn, a.As4Aggregator.Address), nil + case *api.Attribute_PmsiTunnel: + typ := bgp.PmsiTunnelType(a.PmsiTunnel.Type) var isLeafInfoRequired bool - if a.Flags&0x01 > 0 { + if a.PmsiTunnel.Flags&0x01 > 0 { isLeafInfoRequired = true } var id bgp.PmsiTunnelIDInterface switch typ { case bgp.PMSI_TUNNEL_TYPE_INGRESS_REPL: - ip := net.IP(a.Id) + ip := net.IP(a.PmsiTunnel.Id) if ip.To4() == nil && ip.To16() == nil { - return nil, fmt.Errorf("invalid pmsi tunnel identifier: %s", a.Id) + return nil, fmt.Errorf("invalid pmsi tunnel identifier: %s", a.PmsiTunnel.Id) } id = bgp.NewIngressReplTunnelID(ip.String()) default: - id = bgp.NewDefaultPmsiTunnelID(a.Id) + id = bgp.NewDefaultPmsiTunnelID(a.PmsiTunnel.Id) } - return bgp.NewPathAttributePmsiTunnel(typ, isLeafInfoRequired, a.Label, id), nil - case *api.TunnelEncapAttribute: - tlvs := make([]*bgp.TunnelEncapTLV, 0, len(a.Tlvs)) - for _, tlv := range a.Tlvs { + return bgp.NewPathAttributePmsiTunnel(typ, isLeafInfoRequired, a.PmsiTunnel.Label, id), nil + case *api.Attribute_TunnelEncap: + tlvs := make([]*bgp.TunnelEncapTLV, 0, len(a.TunnelEncap.Tlvs)) + for _, tlv := range a.TunnelEncap.Tlvs { subTlvs := make([]bgp.TunnelEncapSubTLVInterface, 0, len(tlv.Tlvs)) - for _, an := range tlv.Tlvs { + for _, tlv := range tlv.Tlvs { var subTlv bgp.TunnelEncapSubTLVInterface - subValue, err := an.UnmarshalNew() - if err != nil { - return nil, fmt.Errorf("failed to unmarshal tunnel encapsulation attribute sub tlv: %s", err) - } - switch sv := subValue.(type) { - case *api.TunnelEncapSubTLVEncapsulation: - subTlv = bgp.NewTunnelEncapSubTLVEncapsulation(sv.Key, sv.Cookie) - case *api.TunnelEncapSubTLVProtocol: - subTlv = bgp.NewTunnelEncapSubTLVProtocol(uint16(sv.Protocol)) - case *api.TunnelEncapSubTLVColor: - subTlv = bgp.NewTunnelEncapSubTLVColor(sv.Color) - case *api.TunnelEncapSubTLVEgressEndpoint: - subTlv = bgp.NewTunnelEncapSubTLVEgressEndpoint(sv.Address) - case *api.TunnelEncapSubTLVUDPDestPort: - subTlv = bgp.NewTunnelEncapSubTLVUDPDestPort(uint16(sv.Port)) - case *api.TunnelEncapSubTLVSRPreference: - subTlv = bgp.NewTunnelEncapSubTLVSRPreference(sv.Flags, sv.Preference) - case *api.TunnelEncapSubTLVSRPriority: - subTlv = bgp.NewTunnelEncapSubTLVSRPriority(uint8(sv.Priority)) - case *api.TunnelEncapSubTLVSRCandidatePathName: - subTlv = bgp.NewTunnelEncapSubTLVSRCandidatePathName(sv.CandidatePathName) - case *api.TunnelEncapSubTLVSRENLP: - subTlv = bgp.NewTunnelEncapSubTLVSRENLP(sv.Flags, bgp.SRENLPValue(sv.Enlp)) - case *api.TunnelEncapSubTLVSRBindingSID: + switch sv := tlv.GetTlv().(type) { + case *api.TunnelEncapTLV_TLV_Encapsulation: + subTlv = bgp.NewTunnelEncapSubTLVEncapsulation(sv.Encapsulation.Key, sv.Encapsulation.Cookie) + case *api.TunnelEncapTLV_TLV_Protocol: + subTlv = bgp.NewTunnelEncapSubTLVProtocol(uint16(sv.Protocol.Protocol)) + case *api.TunnelEncapTLV_TLV_Color: + subTlv = bgp.NewTunnelEncapSubTLVColor(sv.Color.Color) + case *api.TunnelEncapTLV_TLV_EgressEndpoint: + subTlv = bgp.NewTunnelEncapSubTLVEgressEndpoint(sv.EgressEndpoint.Address) + case *api.TunnelEncapTLV_TLV_UdpDestPort: + subTlv = bgp.NewTunnelEncapSubTLVUDPDestPort(uint16(sv.UdpDestPort.Port)) + case *api.TunnelEncapTLV_TLV_SrPreference: + subTlv = bgp.NewTunnelEncapSubTLVSRPreference(sv.SrPreference.Flags, sv.SrPreference.Preference) + case *api.TunnelEncapTLV_TLV_SrPriority: + subTlv = bgp.NewTunnelEncapSubTLVSRPriority(uint8(sv.SrPriority.Priority)) + case *api.TunnelEncapTLV_TLV_SrCandidatePathName: + subTlv = bgp.NewTunnelEncapSubTLVSRCandidatePathName(sv.SrCandidatePathName.CandidatePathName) + case *api.TunnelEncapTLV_TLV_SrEnlp: + subTlv = bgp.NewTunnelEncapSubTLVSRENLP(sv.SrEnlp.Flags, bgp.SRENLPValue(sv.SrEnlp.Enlp)) + case *api.TunnelEncapTLV_TLV_SrBindingSid: var err error - subTlv, err = UnmarshalSRBSID(sv.Bsid) + subTlv, err = UnmarshalSRBSID(sv.SrBindingSid) if err != nil { return nil, fmt.Errorf("failed to unmarshal tunnel encapsulation attribute sub tlv: %s", err) } - case *api.TunnelEncapSubTLVSRSegmentList: + case *api.TunnelEncapTLV_TLV_SrSegmentList: var err error weight := uint32(0) flags := uint8(0) - if sv.Weight != nil { - weight = sv.Weight.Weight - flags = uint8(sv.Weight.Flags) + if sv.SrSegmentList.Weight != nil { + weight = sv.SrSegmentList.Weight.Weight + flags = uint8(sv.SrSegmentList.Weight.Flags) } s := &bgp.TunnelEncapSubTLVSRSegmentList{ TunnelEncapSubTLV: bgp.TunnelEncapSubTLV{ @@ -204,8 +196,8 @@ func UnmarshalAttribute(an *apb.Any) (bgp.PathAttributeInterface, error) { }, Segments: make([]bgp.TunnelEncapSubTLVInterface, 0), } - if len(sv.Segments) != 0 { - s.Segments, err = UnmarshalSRSegments(sv.Segments) + if len(sv.SrSegmentList.Segments) != 0 { + s.Segments, err = UnmarshalSRSegments(sv.SrSegmentList.Segments) if err != nil { return nil, fmt.Errorf("failed to unmarshal tunnel encapsulation attribute sub tlv: %s", err) } @@ -215,68 +207,64 @@ func UnmarshalAttribute(an *apb.Any) (bgp.PathAttributeInterface, error) { s.TunnelEncapSubTLV.Length += uint16(seg.Len() + 2) // Adding 1 byte of type and 1 byte of length for each Segment object } subTlv = s - case *api.TunnelEncapSubTLVUnknown: - subTlv = bgp.NewTunnelEncapSubTLVUnknown(bgp.EncapSubTLVType(sv.Type), sv.Value) + case *api.TunnelEncapTLV_TLV_Unknown: + subTlv = bgp.NewTunnelEncapSubTLVUnknown(bgp.EncapSubTLVType(sv.Unknown.Type), sv.Unknown.Value) default: - return nil, fmt.Errorf("invalid tunnel encapsulation attribute sub tlv: %v type: %T", subValue, sv) + return nil, fmt.Errorf("invalid tunnel encapsulation attribute sub tlv: %T", tlv.GetTlv()) } subTlvs = append(subTlvs, subTlv) } tlvs = append(tlvs, bgp.NewTunnelEncapTLV(bgp.TunnelType(tlv.Type), subTlvs)) } return bgp.NewPathAttributeTunnelEncap(tlvs), nil - case *api.IP6ExtendedCommunitiesAttribute: - communities := make([]bgp.ExtendedCommunityInterface, 0, len(a.Communities)) - for _, an := range a.Communities { + case *api.Attribute_Ip6ExtendedCommunities: + communities := make([]bgp.ExtendedCommunityInterface, 0, len(a.Ip6ExtendedCommunities.Communities)) + for _, an := range a.Ip6ExtendedCommunities.Communities { var community bgp.ExtendedCommunityInterface - value, err := an.UnmarshalNew() - if err != nil { - return nil, fmt.Errorf("failed to unmarshal ipv6 extended community: %s", err) - } - switch v := value.(type) { - case *api.IPv6AddressSpecificExtended: + switch an.GetExtcom().(type) { + case *api.IP6ExtendedCommunitiesAttribute_Community_Ipv6AddressSpecific: + v := an.GetIpv6AddressSpecific() community = bgp.NewIPv6AddressSpecificExtended(bgp.ExtendedCommunityAttrSubType(v.SubType), v.Address, uint16(v.LocalAdmin), v.IsTransitive) - case *api.RedirectIPv6AddressSpecificExtended: + case *api.IP6ExtendedCommunitiesAttribute_Community_RedirectIpv6AddressSpecific: + v := an.GetRedirectIpv6AddressSpecific() community = bgp.NewRedirectIPv6AddressSpecificExtended(v.Address, uint16(v.LocalAdmin)) } if community == nil { - return nil, fmt.Errorf("invalid ipv6 extended community: %v", value) + return nil, fmt.Errorf("invalid ipv6 extended community: %T", an.GetExtcom()) } communities = append(communities, community) } return bgp.NewPathAttributeIP6ExtendedCommunities(communities), nil - case *api.AigpAttribute: - tlvs := make([]bgp.AigpTLVInterface, 0, len(a.Tlvs)) - for _, an := range a.Tlvs { + case *api.Attribute_Aigp: + tlvs := make([]bgp.AigpTLVInterface, 0, len(a.Aigp.Tlvs)) + for _, an := range a.Aigp.Tlvs { var tlv bgp.AigpTLVInterface - value, err := an.UnmarshalNew() - if err != nil { - return nil, fmt.Errorf("failed to unmarshal aigp attribute tlv: %s", err) - } - switch v := value.(type) { - case *api.AigpTLVIGPMetric: + switch an.GetTlv().(type) { + case *api.AigpAttribute_TLV_IgpMetric: + v := an.GetIgpMetric() tlv = bgp.NewAigpTLVIgpMetric(v.Metric) - case *api.AigpTLVUnknown: + case *api.AigpAttribute_TLV_Unknown: + v := an.GetUnknown() tlv = bgp.NewAigpTLVDefault(bgp.AigpTLVType(v.Type), v.Value) } if tlv == nil { - return nil, fmt.Errorf("invalid aigp attribute tlv: %v", value) + return nil, fmt.Errorf("invalid aigp attribute tlv: %T", an.GetTlv()) } tlvs = append(tlvs, tlv) } return bgp.NewPathAttributeAigp(tlvs), nil - case *api.LargeCommunitiesAttribute: - communities := make([]*bgp.LargeCommunity, 0, len(a.Communities)) - for _, c := range a.Communities { + case *api.Attribute_LargeCommunities: + communities := make([]*bgp.LargeCommunity, 0, len(a.LargeCommunities.Communities)) + for _, c := range a.LargeCommunities.Communities { communities = append(communities, bgp.NewLargeCommunity(c.GlobalAdmin, c.LocalData1, c.LocalData2)) } return bgp.NewPathAttributeLargeCommunities(communities), nil - case *api.PrefixSID: - return UnmarshalPrefixSID(a) - case *api.LsAttribute: - lsAttr, err := UnmarshalLsAttribute(a) + case *api.Attribute_PrefixSid: + return UnmarshalPrefixSID(a.PrefixSid) + case *api.Attribute_Ls: + lsAttr, err := UnmarshalLsAttribute(a.Ls) if err != nil { return nil, fmt.Errorf("failed to unmarshal BGP-LS Attribute: %s", err) } @@ -297,8 +285,8 @@ func UnmarshalAttribute(an *apb.Any) (bgp.PathAttributeInterface, error) { return pathAttributeLs, nil - case *api.UnknownAttribute: - return bgp.NewPathAttributeUnknown(bgp.BGPAttrFlag(a.Flags), bgp.BGPAttrType(a.Type), a.Value), nil + case *api.Attribute_Unknown: + return bgp.NewPathAttributeUnknown(bgp.BGPAttrFlag(a.Unknown.Flags), bgp.BGPAttrType(a.Unknown.Type), a.Unknown.Value), nil } return nil, errors.New("unknown path attribute") } @@ -383,11 +371,11 @@ func NewPrefixSIDAttributeFromNative(a *bgp.PathAttributePrefixSID) (*api.Prefix return psid, nil } -func MarshalSRv6TLVs(tlvs []bgp.PrefixSIDTLVInterface) ([]*apb.Any, error) { +func MarshalSRv6TLVs(tlvs []bgp.PrefixSIDTLVInterface) ([]*api.PrefixSID_TLV, error) { var err error - mtlvs := make([]*apb.Any, len(tlvs)) - for i, tlv := range tlvs { - var r proto.Message + mtlvs := make([]*api.PrefixSID_TLV, 0, len(tlvs)) + for _, tlv := range tlvs { + var mtlv api.PrefixSID_TLV switch t := tlv.(type) { case *bgp.SRv6L3ServiceAttribute: o := &api.SRv6L3ServiceTLV{} @@ -395,7 +383,7 @@ func MarshalSRv6TLVs(tlvs []bgp.PrefixSIDTLVInterface) ([]*apb.Any, error) { if err != nil { return nil, err } - r = o + mtlv.Tlv = &api.PrefixSID_TLV_L3Service{L3Service: o} case *bgp.SRv6ServiceTLV: switch t.TLV.Type { case bgp.TLVTypeSRv6L3Service: @@ -404,30 +392,29 @@ func MarshalSRv6TLVs(tlvs []bgp.PrefixSIDTLVInterface) ([]*apb.Any, error) { if err != nil { return nil, err } - r = o + mtlv.Tlv = &api.PrefixSID_TLV_L3Service{L3Service: o} case bgp.TLVTypeSRv6L2Service: o := &api.SRv6L2ServiceTLV{} o.SubTlvs, err = MarshalSRv6SubTLVs(t.SubTLVs) if err != nil { return nil, err } - r = o + mtlv.Tlv = &api.PrefixSID_TLV_L2Service{L2Service: o} } default: return nil, fmt.Errorf("invalid prefix sid tlv type to marshal %v", t) } - a, _ := apb.New(r) - mtlvs[i] = a + mtlvs = append(mtlvs, &mtlv) } return mtlvs, nil } -func MarshalSRv6SubTLVs(tlvs []bgp.PrefixSIDTLVInterface) (map[uint32]*api.SRv6TLV, error) { - mtlvs := make(map[uint32]*api.SRv6TLV) +func MarshalSRv6SubTLVs(tlvs []bgp.PrefixSIDTLVInterface) (map[uint32]*api.SRv6SubTLVs, error) { + mtlvs := make(map[uint32]*api.SRv6SubTLVs) var key uint32 for _, tlv := range tlvs { - var r proto.Message + r := &api.SRv6SubTLV{} switch t := tlv.(type) { case *bgp.SRv6InformationSubTLV: o := &api.SRv6InformationSubTLV{ @@ -444,29 +431,28 @@ func MarshalSRv6SubTLVs(tlvs []bgp.PrefixSIDTLVInterface) (map[uint32]*api.SRv6T } // SRv6 Information Sub TLV is type 1 Sub TLV key = 1 - r = o + r.Tlv = &api.SRv6SubTLV_Information{Information: o} default: return nil, fmt.Errorf("invalid prefix sid sub tlv type to marshal: %v", t) } - a, _ := apb.New(r) tlvs, ok := mtlvs[key] if !ok { - tlvs = &api.SRv6TLV{ - Tlv: make([]*apb.Any, 0), + tlvs = &api.SRv6SubTLVs{ + Tlvs: make([]*api.SRv6SubTLV, 0), } mtlvs[key] = tlvs } - tlvs.Tlv = append(tlvs.Tlv, a) + tlvs.Tlvs = append(tlvs.Tlvs, r) } return mtlvs, nil } -func MarshalSRv6SubSubTLVs(tlvs []bgp.PrefixSIDTLVInterface) (map[uint32]*api.SRv6TLV, error) { - mtlvs := make(map[uint32]*api.SRv6TLV) +func MarshalSRv6SubSubTLVs(tlvs []bgp.PrefixSIDTLVInterface) (map[uint32]*api.SRv6SubSubTLVs, error) { + mtlvs := make(map[uint32]*api.SRv6SubSubTLVs) var key uint32 for _, tlv := range tlvs { - var r proto.Message + r := &api.SRv6SubSubTLV{} switch t := tlv.(type) { case *bgp.SRv6SIDStructureSubSubTLV: o := &api.SRv6StructureSubSubTLV{ @@ -479,66 +465,60 @@ func MarshalSRv6SubSubTLVs(tlvs []bgp.PrefixSIDTLVInterface) (map[uint32]*api.SR } // SRv6 SID Structure Sub Sub TLV is type 1 Sub Sub TLV key = 1 - r = o + r.Tlv = &api.SRv6SubSubTLV_Structure{Structure: o} default: return nil, fmt.Errorf("invalid prefix sid sub sub tlv type to marshal: %v", t) } - a, _ := apb.New(r) tlvs, ok := mtlvs[key] if !ok { - tlvs = &api.SRv6TLV{ - Tlv: make([]*apb.Any, 0), + tlvs = &api.SRv6SubSubTLVs{ + Tlvs: make([]*api.SRv6SubSubTLV, 0), } mtlvs[key] = tlvs } - tlvs.Tlv = append(tlvs.Tlv, a) + tlvs.Tlvs = append(tlvs.Tlvs, r) } return mtlvs, nil } -func MarshalRD(rd bgp.RouteDistinguisherInterface) (*apb.Any, error) { - var r proto.Message +func MarshalRD(rd bgp.RouteDistinguisherInterface) (*api.RouteDistinguisher, error) { + var r api.RouteDistinguisher switch v := rd.(type) { case *bgp.RouteDistinguisherTwoOctetAS: - r = &api.RouteDistinguisherTwoOctetASN{ + r.Rd = &api.RouteDistinguisher_TwoOctetAsn{TwoOctetAsn: &api.RouteDistinguisherTwoOctetASN{ Admin: uint32(v.Admin), Assigned: v.Assigned, - } + }} case *bgp.RouteDistinguisherIPAddressAS: - r = &api.RouteDistinguisherIPAddress{ + r.Rd = &api.RouteDistinguisher_IpAddress{IpAddress: &api.RouteDistinguisherIPAddress{ Admin: v.Admin.String(), Assigned: uint32(v.Assigned), - } + }} case *bgp.RouteDistinguisherFourOctetAS: - r = &api.RouteDistinguisherFourOctetASN{ + r.Rd = &api.RouteDistinguisher_FourOctetAsn{FourOctetAsn: &api.RouteDistinguisherFourOctetASN{ Admin: v.Admin, Assigned: uint32(v.Assigned), - } + }} default: return nil, fmt.Errorf("invalid rd type to marshal: %v", rd) } - a, _ := apb.New(r) - return a, nil + return &r, nil } -func UnmarshalRD(a *apb.Any) (bgp.RouteDistinguisherInterface, error) { - value, err := a.UnmarshalNew() - if err != nil { - return nil, fmt.Errorf("failed to unmarshal route distinguisher: %s", err) - } - switch v := value.(type) { - case *api.RouteDistinguisherTwoOctetASN: - return bgp.NewRouteDistinguisherTwoOctetAS(uint16(v.Admin), v.Assigned), nil - case *api.RouteDistinguisherIPAddress: - rd := bgp.NewRouteDistinguisherIPAddressAS(v.Admin, uint16(v.Assigned)) +func UnmarshalRD(rd *api.RouteDistinguisher) (bgp.RouteDistinguisherInterface, error) { + switch v := rd.GetRd().(type) { + case *api.RouteDistinguisher_TwoOctetAsn: + return bgp.NewRouteDistinguisherTwoOctetAS(uint16(v.TwoOctetAsn.Admin), v.TwoOctetAsn.Assigned), nil + case *api.RouteDistinguisher_IpAddress: + rd := bgp.NewRouteDistinguisherIPAddressAS(v.IpAddress.Admin, uint16(v.IpAddress.Assigned)) if rd == nil { - return nil, fmt.Errorf("invalid address for route distinguisher: %s", v.Admin) + return nil, fmt.Errorf("invalid address for route distinguisher: %s", v.IpAddress.Admin) } return rd, nil - case *api.RouteDistinguisherFourOctetASN: - return bgp.NewRouteDistinguisherFourOctetAS(v.Admin, uint16(v.Assigned)), nil + case *api.RouteDistinguisher_FourOctetAsn: + return bgp.NewRouteDistinguisherFourOctetAS(v.FourOctetAsn.Admin, uint16(v.FourOctetAsn.Assigned)), nil } - return nil, fmt.Errorf("invalid route distinguisher type: %s", a.TypeUrl) + return nil, fmt.Errorf("unknown route distinguisher") } func NewEthernetSegmentIdentifierFromNative(a *bgp.EthernetSegmentIdentifier) (*api.EthernetSegmentIdentifier, error) { @@ -555,47 +535,47 @@ func unmarshalESI(a *api.EthernetSegmentIdentifier) (*bgp.EthernetSegmentIdentif }, nil } -func MarshalFlowSpecRules(values []bgp.FlowSpecComponentInterface) ([]*apb.Any, error) { - rules := make([]*apb.Any, 0, len(values)) +func MarshalFlowSpecRules(values []bgp.FlowSpecComponentInterface) ([]*api.FlowSpecRule, error) { + rules := make([]*api.FlowSpecRule, 0, len(values)) for _, value := range values { - var rule proto.Message + var rule api.FlowSpecRule switch v := value.(type) { case *bgp.FlowSpecDestinationPrefix: - rule = &api.FlowSpecIPPrefix{ + rule.Rule = &api.FlowSpecRule_IpPrefix{IpPrefix: &api.FlowSpecIPPrefix{ Type: uint32(bgp.FLOW_SPEC_TYPE_DST_PREFIX), PrefixLen: uint32(v.Prefix.(*bgp.IPAddrPrefix).Length), Prefix: v.Prefix.(*bgp.IPAddrPrefix).Prefix.String(), - } + }} case *bgp.FlowSpecSourcePrefix: - rule = &api.FlowSpecIPPrefix{ + rule.Rule = &api.FlowSpecRule_IpPrefix{IpPrefix: &api.FlowSpecIPPrefix{ Type: uint32(bgp.FLOW_SPEC_TYPE_SRC_PREFIX), PrefixLen: uint32(v.Prefix.(*bgp.IPAddrPrefix).Length), Prefix: v.Prefix.(*bgp.IPAddrPrefix).Prefix.String(), - } + }} case *bgp.FlowSpecDestinationPrefix6: - rule = &api.FlowSpecIPPrefix{ + rule.Rule = &api.FlowSpecRule_IpPrefix{IpPrefix: &api.FlowSpecIPPrefix{ Type: uint32(bgp.FLOW_SPEC_TYPE_DST_PREFIX), PrefixLen: uint32(v.Prefix.(*bgp.IPv6AddrPrefix).Length), Prefix: v.Prefix.(*bgp.IPv6AddrPrefix).Prefix.String(), Offset: uint32(v.Offset), - } + }} case *bgp.FlowSpecSourcePrefix6: - rule = &api.FlowSpecIPPrefix{ + rule.Rule = &api.FlowSpecRule_IpPrefix{IpPrefix: &api.FlowSpecIPPrefix{ Type: uint32(bgp.FLOW_SPEC_TYPE_SRC_PREFIX), PrefixLen: uint32(v.Prefix.(*bgp.IPv6AddrPrefix).Length), Prefix: v.Prefix.(*bgp.IPv6AddrPrefix).Prefix.String(), Offset: uint32(v.Offset), - } + }} case *bgp.FlowSpecSourceMac: - rule = &api.FlowSpecMAC{ + rule.Rule = &api.FlowSpecRule_Mac{Mac: &api.FlowSpecMAC{ Type: uint32(bgp.FLOW_SPEC_TYPE_SRC_MAC), Address: v.Mac.String(), - } + }} case *bgp.FlowSpecDestinationMac: - rule = &api.FlowSpecMAC{ + rule.Rule = &api.FlowSpecRule_Mac{Mac: &api.FlowSpecMAC{ Type: uint32(bgp.FLOW_SPEC_TYPE_DST_MAC), Address: v.Mac.String(), - } + }} case *bgp.FlowSpecComponent: items := make([]*api.FlowSpecComponentItem, 0, len(v.Items)) for _, i := range v.Items { @@ -604,27 +584,23 @@ func MarshalFlowSpecRules(values []bgp.FlowSpecComponentInterface) ([]*apb.Any, Value: i.Value, }) } - rule = &api.FlowSpecComponent{ + rule.Rule = &api.FlowSpecRule_Component{Component: &api.FlowSpecComponent{ Type: uint32(v.Type()), Items: items, - } + }} } - a, _ := apb.New(rule) - rules = append(rules, a) + rules = append(rules, &rule) } return rules, nil } -func UnmarshalFlowSpecRules(values []*apb.Any) ([]bgp.FlowSpecComponentInterface, error) { +func UnmarshalFlowSpecRules(values []*api.FlowSpecRule) ([]bgp.FlowSpecComponentInterface, error) { rules := make([]bgp.FlowSpecComponentInterface, 0, len(values)) - for _, an := range values { + for _, value := range values { var rule bgp.FlowSpecComponentInterface - value, err := an.UnmarshalNew() - if err != nil { - return nil, fmt.Errorf("failed to unmarshal flow spec component: %s", err) - } - switch v := value.(type) { - case *api.FlowSpecIPPrefix: + switch r := value.GetRule().(type) { + case *api.FlowSpecRule_IpPrefix: + v := r.IpPrefix typ := bgp.BGPFlowSpecType(v.Type) isIPv4 := net.ParseIP(v.Prefix).To4() != nil switch { @@ -637,7 +613,8 @@ func UnmarshalFlowSpecRules(values []*apb.Any) ([]bgp.FlowSpecComponentInterface case typ == bgp.FLOW_SPEC_TYPE_SRC_PREFIX && !isIPv4: rule = bgp.NewFlowSpecSourcePrefix6(bgp.NewIPv6AddrPrefix(uint8(v.PrefixLen), v.Prefix), uint8(v.Offset)) } - case *api.FlowSpecMAC: + case *api.FlowSpecRule_Mac: + v := r.Mac typ := bgp.BGPFlowSpecType(v.Type) mac, err := net.ParseMAC(v.Address) if err != nil { @@ -649,7 +626,8 @@ func UnmarshalFlowSpecRules(values []*apb.Any) ([]bgp.FlowSpecComponentInterface case bgp.FLOW_SPEC_TYPE_DST_MAC: rule = bgp.NewFlowSpecDestinationMac(mac) } - case *api.FlowSpecComponent: + case *api.FlowSpecRule_Component: + v := r.Component items := make([]*bgp.FlowSpecComponentItem, 0, len(v.Items)) for _, item := range v.Items { items = append(items, bgp.NewFlowSpecComponentItem(uint8(item.Op), item.Value)) @@ -698,20 +676,20 @@ func MarshalLsPrefixDescriptor(d *bgp.LsPrefixDescriptor) (*api.LsPrefixDescript return p, nil } -func MarshalLsNodeNLRI(n *bgp.LsNodeNLRI) (*apb.Any, error) { +func MarshalLsNodeNLRI(n *bgp.LsNodeNLRI) (*api.LsAddrPrefix_LsNLRI, error) { ln, err := MarshalLsNodeDescriptor(n.LocalNodeDesc.(*bgp.LsTLVNodeDescriptor).Extract()) if err != nil { return nil, err } - node := &api.LsNodeNLRI{ - LocalNode: ln, + node := &api.LsAddrPrefix_LsNLRI{ + Nlri: &api.LsAddrPrefix_LsNLRI_Node{ + Node: &api.LsNodeNLRI{LocalNode: ln}, + }, } - a, _ := apb.New(node) - - return a, nil + return node, nil } -func MarshalLsLinkNLRI(n *bgp.LsLinkNLRI) (*apb.Any, error) { +func MarshalLsLinkNLRI(n *bgp.LsLinkNLRI) (*api.LsAddrPrefix_LsNLRI, error) { desc := &bgp.LsLinkDescriptor{} desc.ParseTLVs(n.LinkDesc) @@ -730,17 +708,19 @@ func MarshalLsLinkNLRI(n *bgp.LsLinkNLRI) (*apb.Any, error) { return nil, err } - link := &api.LsLinkNLRI{ - LocalNode: ln, - RemoteNode: rn, - LinkDescriptor: ld, + link := &api.LsAddrPrefix_LsNLRI{ + Nlri: &api.LsAddrPrefix_LsNLRI_Link{ + Link: &api.LsLinkNLRI{ + LocalNode: ln, + RemoteNode: rn, + LinkDescriptor: ld, + }, + }, } - a, _ := apb.New(link) - - return a, nil + return link, nil } -func MarshalLsPrefixV4NLRI(n *bgp.LsPrefixV4NLRI) (*apb.Any, error) { +func MarshalLsPrefixV4NLRI(n *bgp.LsPrefixV4NLRI) (*api.LsAddrPrefix_LsNLRI, error) { desc := &bgp.LsPrefixDescriptor{} desc.ParseTLVs(n.PrefixDesc, false) @@ -754,16 +734,18 @@ func MarshalLsPrefixV4NLRI(n *bgp.LsPrefixV4NLRI) (*apb.Any, error) { return nil, err } - prefix := &api.LsPrefixV4NLRI{ - LocalNode: ln, - PrefixDescriptor: pd, + prefix := &api.LsAddrPrefix_LsNLRI{ + Nlri: &api.LsAddrPrefix_LsNLRI_PrefixV4{ + PrefixV4: &api.LsPrefixV4NLRI{ + LocalNode: ln, + PrefixDescriptor: pd, + }, + }, } - a, _ := apb.New(prefix) - - return a, nil + return prefix, nil } -func MarshalLsPrefixV6NLRI(n *bgp.LsPrefixV6NLRI) (*apb.Any, error) { +func MarshalLsPrefixV6NLRI(n *bgp.LsPrefixV6NLRI) (*api.LsAddrPrefix_LsNLRI, error) { desc := &bgp.LsPrefixDescriptor{} desc.ParseTLVs(n.PrefixDesc, true) @@ -777,13 +759,15 @@ func MarshalLsPrefixV6NLRI(n *bgp.LsPrefixV6NLRI) (*apb.Any, error) { return nil, err } - prefix := &api.LsPrefixV6NLRI{ - LocalNode: ln, - PrefixDescriptor: pd, + prefix := &api.LsAddrPrefix_LsNLRI{ + Nlri: &api.LsAddrPrefix_LsNLRI_PrefixV6{ + PrefixV6: &api.LsPrefixV6NLRI{ + LocalNode: ln, + PrefixDescriptor: pd, + }, + }, } - a, _ := apb.New(prefix) - - return a, nil + return prefix, nil } func MarshalLsBgpPeerSegmentSid(n *bgp.LsBgpPeerSegmentSID) (*api.LsBgpPeerSegmentSID, error) { @@ -1048,52 +1032,52 @@ func UnmarshalLsAttribute(a *api.LsAttribute) (*bgp.LsAttribute, error) { return lsAttr, nil } -func MarshalNLRI(value bgp.AddrPrefixInterface) (*apb.Any, error) { - var nlri proto.Message +func MarshalNLRI(value bgp.AddrPrefixInterface) (*api.NLRI, error) { + var nlri api.NLRI switch v := value.(type) { case *bgp.IPAddrPrefix: - nlri = &api.IPAddressPrefix{ + nlri.Nlri = &api.NLRI_Prefix{Prefix: &api.IPAddressPrefix{ PrefixLen: uint32(v.Length), Prefix: v.Prefix.String(), - } + }} case *bgp.IPv6AddrPrefix: - nlri = &api.IPAddressPrefix{ + nlri.Nlri = &api.NLRI_Prefix{Prefix: &api.IPAddressPrefix{ PrefixLen: uint32(v.Length), Prefix: v.Prefix.String(), - } + }} case *bgp.LabeledIPAddrPrefix: - nlri = &api.LabeledIPAddressPrefix{ + nlri.Nlri = &api.NLRI_LabeledPrefix{LabeledPrefix: &api.LabeledIPAddressPrefix{ Labels: v.Labels.Labels, PrefixLen: uint32(v.IPPrefixLen()), Prefix: v.Prefix.String(), - } + }} case *bgp.LabeledIPv6AddrPrefix: - nlri = &api.LabeledIPAddressPrefix{ + nlri.Nlri = &api.NLRI_LabeledPrefix{LabeledPrefix: &api.LabeledIPAddressPrefix{ Labels: v.Labels.Labels, PrefixLen: uint32(v.IPPrefixLen()), Prefix: v.Prefix.String(), - } + }} case *bgp.EncapNLRI: - nlri = &api.EncapsulationNLRI{ + nlri.Nlri = &api.NLRI_Encapsulation{Encapsulation: &api.EncapsulationNLRI{ Address: v.String(), - } + }} case *bgp.Encapv6NLRI: - nlri = &api.EncapsulationNLRI{ + nlri.Nlri = &api.NLRI_Encapsulation{Encapsulation: &api.EncapsulationNLRI{ Address: v.String(), - } + }} case *bgp.VPLSNLRI: rd, err := MarshalRD(v.RD()) if err != nil { return nil, err } - nlri = &api.VPLSNLRI{ + nlri.Nlri = &api.NLRI_Vpls{Vpls: &api.VPLSNLRI{ Rd: rd, VeId: uint32(v.VEID), VeBlockOffset: uint32(v.VEBlockOffset), VeBlockSize: uint32(v.VEBlockSize), LabelBlockBase: v.LabelBlockBase, - } + }} case *bgp.EVPNNLRI: switch r := v.RouteTypeData.(type) { case *bgp.EVPNEthernetAutoDiscoveryRoute: @@ -1106,12 +1090,12 @@ func MarshalNLRI(value bgp.AddrPrefixInterface) (*apb.Any, error) { return nil, err } - nlri = &api.EVPNEthernetAutoDiscoveryRoute{ + nlri.Nlri = &api.NLRI_EvpnEthernetAd{EvpnEthernetAd: &api.EVPNEthernetAutoDiscoveryRoute{ Rd: rd, Esi: esi, EthernetTag: r.ETag, Label: r.Label, - } + }} case *bgp.EVPNMacIPAdvertisementRoute: rd, err := MarshalRD(r.RD) if err != nil { @@ -1122,24 +1106,24 @@ func MarshalNLRI(value bgp.AddrPrefixInterface) (*apb.Any, error) { return nil, err } - nlri = &api.EVPNMACIPAdvertisementRoute{ + nlri.Nlri = &api.NLRI_EvpnMacadv{EvpnMacadv: &api.EVPNMACIPAdvertisementRoute{ Rd: rd, Esi: esi, EthernetTag: r.ETag, MacAddress: r.MacAddress.String(), IpAddress: r.IPAddress.String(), Labels: r.Labels, - } + }} case *bgp.EVPNMulticastEthernetTagRoute: rd, err := MarshalRD(r.RD) if err != nil { return nil, err } - nlri = &api.EVPNInclusiveMulticastEthernetTagRoute{ + nlri.Nlri = &api.NLRI_EvpnMulticast{EvpnMulticast: &api.EVPNInclusiveMulticastEthernetTagRoute{ Rd: rd, EthernetTag: r.ETag, IpAddress: r.IPAddress.String(), - } + }} case *bgp.EVPNEthernetSegmentRoute: rd, err := MarshalRD(r.RD) if err != nil { @@ -1149,11 +1133,11 @@ func MarshalNLRI(value bgp.AddrPrefixInterface) (*apb.Any, error) { if err != nil { return nil, err } - nlri = &api.EVPNEthernetSegmentRoute{ + nlri.Nlri = &api.NLRI_EvpnEthernetSegment{EvpnEthernetSegment: &api.EVPNEthernetSegmentRoute{ Rd: rd, Esi: esi, IpAddress: r.IPAddress.String(), - } + }} case *bgp.EVPNIPPrefixRoute: rd, err := MarshalRD(r.RD) if err != nil { @@ -1163,7 +1147,7 @@ func MarshalNLRI(value bgp.AddrPrefixInterface) (*apb.Any, error) { if err != nil { return nil, err } - nlri = &api.EVPNIPPrefixRoute{ + nlri.Nlri = &api.NLRI_EvpnIpPrefix{EvpnIpPrefix: &api.EVPNIPPrefixRoute{ Rd: rd, Esi: esi, EthernetTag: r.ETag, @@ -1171,55 +1155,55 @@ func MarshalNLRI(value bgp.AddrPrefixInterface) (*apb.Any, error) { IpPrefixLen: uint32(r.IPPrefixLength), Label: r.Label, GwAddress: r.GWIPAddress.String(), - } + }} } case *bgp.LabeledVPNIPAddrPrefix: rd, err := MarshalRD(v.RD) if err != nil { return nil, err } - nlri = &api.LabeledVPNIPAddressPrefix{ + nlri.Nlri = &api.NLRI_LabeledVpnIpPrefix{LabeledVpnIpPrefix: &api.LabeledVPNIPAddressPrefix{ Labels: v.Labels.Labels, Rd: rd, PrefixLen: uint32(v.IPPrefixLen()), Prefix: v.Prefix.String(), - } + }} case *bgp.LabeledVPNIPv6AddrPrefix: rd, err := MarshalRD(v.RD) if err != nil { return nil, err } - nlri = &api.LabeledVPNIPAddressPrefix{ + nlri.Nlri = &api.NLRI_LabeledVpnIpPrefix{LabeledVpnIpPrefix: &api.LabeledVPNIPAddressPrefix{ Labels: v.Labels.Labels, Rd: rd, PrefixLen: uint32(v.IPPrefixLen()), Prefix: v.Prefix.String(), - } + }} case *bgp.RouteTargetMembershipNLRI: rt, err := MarshalRT(v.RouteTarget) if err != nil { return nil, err } - nlri = &api.RouteTargetMembershipNLRI{ + nlri.Nlri = &api.NLRI_RouteTargetMembership{RouteTargetMembership: &api.RouteTargetMembershipNLRI{ Asn: v.AS, Rt: rt, - } + }} case *bgp.FlowSpecIPv4Unicast: rules, err := MarshalFlowSpecRules(v.Value) if err != nil { return nil, err } - nlri = &api.FlowSpecNLRI{ + nlri.Nlri = &api.NLRI_FlowSpec{FlowSpec: &api.FlowSpecNLRI{ Rules: rules, - } + }} case *bgp.FlowSpecIPv6Unicast: rules, err := MarshalFlowSpecRules(v.Value) if err != nil { return nil, err } - nlri = &api.FlowSpecNLRI{ + nlri.Nlri = &api.NLRI_FlowSpec{FlowSpec: &api.FlowSpecNLRI{ Rules: rules, - } + }} case *bgp.FlowSpecIPv4VPN: rd, err := MarshalRD(v.RD()) if err != nil { @@ -1229,10 +1213,10 @@ func MarshalNLRI(value bgp.AddrPrefixInterface) (*apb.Any, error) { if err != nil { return nil, err } - nlri = &api.VPNFlowSpecNLRI{ + nlri.Nlri = &api.NLRI_VpnFlowSpec{VpnFlowSpec: &api.VPNFlowSpecNLRI{ Rd: rd, Rules: rules, - } + }} case *bgp.FlowSpecIPv6VPN: rd, err := MarshalRD(v.RD()) if err != nil { @@ -1242,10 +1226,10 @@ func MarshalNLRI(value bgp.AddrPrefixInterface) (*apb.Any, error) { if err != nil { return nil, err } - nlri = &api.VPNFlowSpecNLRI{ + nlri.Nlri = &api.NLRI_VpnFlowSpec{VpnFlowSpec: &api.VPNFlowSpecNLRI{ Rd: rd, Rules: rules, - } + }} case *bgp.FlowSpecL2VPN: rd, err := MarshalRD(v.RD()) if err != nil { @@ -1255,10 +1239,10 @@ func MarshalNLRI(value bgp.AddrPrefixInterface) (*apb.Any, error) { if err != nil { return nil, err } - nlri = &api.VPNFlowSpecNLRI{ + nlri.Nlri = &api.NLRI_VpnFlowSpec{VpnFlowSpec: &api.VPNFlowSpecNLRI{ Rd: rd, Rules: rules, - } + }} case *bgp.LsAddrPrefix: switch n := v.NLRI.(type) { case *bgp.LsNodeNLRI: @@ -1266,67 +1250,67 @@ func MarshalNLRI(value bgp.AddrPrefixInterface) (*apb.Any, error) { if err != nil { return nil, err } - nlri = &api.LsAddrPrefix{ + nlri.Nlri = &api.NLRI_LsAddrPrefix{LsAddrPrefix: &api.LsAddrPrefix{ Type: api.LsNLRIType_LS_NLRI_NODE, Nlri: node, Length: uint32(n.Length), ProtocolId: api.LsProtocolID(n.ProtocolID), Identifier: n.Identifier, - } + }} case *bgp.LsLinkNLRI: node, err := MarshalLsLinkNLRI(n) if err != nil { return nil, err } - nlri = &api.LsAddrPrefix{ + nlri.Nlri = &api.NLRI_LsAddrPrefix{LsAddrPrefix: &api.LsAddrPrefix{ Type: api.LsNLRIType_LS_NLRI_LINK, Nlri: node, Length: uint32(n.Length), ProtocolId: api.LsProtocolID(n.ProtocolID), Identifier: n.Identifier, - } + }} case *bgp.LsPrefixV4NLRI: node, err := MarshalLsPrefixV4NLRI(n) if err != nil { return nil, err } - nlri = &api.LsAddrPrefix{ + nlri.Nlri = &api.NLRI_LsAddrPrefix{LsAddrPrefix: &api.LsAddrPrefix{ Type: api.LsNLRIType_LS_NLRI_PREFIX_V4, Nlri: node, Length: uint32(n.Length), ProtocolId: api.LsProtocolID(n.ProtocolID), Identifier: n.Identifier, - } + }} case *bgp.LsPrefixV6NLRI: node, err := MarshalLsPrefixV6NLRI(n) if err != nil { return nil, err } - nlri = &api.LsAddrPrefix{ + nlri.Nlri = &api.NLRI_LsAddrPrefix{LsAddrPrefix: &api.LsAddrPrefix{ Type: api.LsNLRIType_LS_NLRI_PREFIX_V6, Nlri: node, Length: uint32(n.Length), ProtocolId: api.LsProtocolID(n.ProtocolID), Identifier: n.Identifier, - } + }} } case *bgp.SRPolicyIPv4: - nlri = &api.SRPolicyNLRI{ + nlri.Nlri = &api.NLRI_SrPolicy{SrPolicy: &api.SRPolicyNLRI{ Length: uint32(v.Length), Distinguisher: v.Distinguisher, Color: v.Color, Endpoint: v.Endpoint, - } + }} case *bgp.SRPolicyIPv6: - nlri = &api.SRPolicyNLRI{ + nlri.Nlri = &api.NLRI_SrPolicy{SrPolicy: &api.SRPolicyNLRI{ Length: uint32(v.Length), Distinguisher: v.Distinguisher, Color: v.Color, Endpoint: v.Endpoint, - } + }} case *bgp.MUPNLRI: switch r := v.RouteTypeData.(type) { case *bgp.MUPInterworkSegmentDiscoveryRoute: @@ -1334,18 +1318,22 @@ func MarshalNLRI(value bgp.AddrPrefixInterface) (*apb.Any, error) { if err != nil { return nil, err } - nlri = &api.MUPInterworkSegmentDiscoveryRoute{ - Rd: rd, - Prefix: r.Prefix.String(), + nlri.Nlri = &api.NLRI_MupInterworkSegmentDiscovery{ + MupInterworkSegmentDiscovery: &api.MUPInterworkSegmentDiscoveryRoute{ + Rd: rd, + Prefix: r.Prefix.String(), + }, } case *bgp.MUPDirectSegmentDiscoveryRoute: rd, err := MarshalRD(r.RD) if err != nil { return nil, err } - nlri = &api.MUPDirectSegmentDiscoveryRoute{ - Rd: rd, - Address: r.Address.String(), + nlri.Nlri = &api.NLRI_MupDirectSegmentDiscovery{ + MupDirectSegmentDiscovery: &api.MUPDirectSegmentDiscoveryRoute{ + Rd: rd, + Address: r.Address.String(), + }, } case *bgp.MUPType1SessionTransformedRoute: rd, err := MarshalRD(r.RD) @@ -1358,37 +1346,41 @@ func MarshalNLRI(value bgp.AddrPrefixInterface) (*apb.Any, error) { sal = uint32(r.SourceAddressLength) sa = r.SourceAddress.String() } - nlri = &api.MUPType1SessionTransformedRoute{ - Rd: rd, - Prefix: r.Prefix.String(), - Teid: binary.BigEndian.Uint32(r.TEID.AsSlice()), - Qfi: uint32(r.QFI), - EndpointAddressLength: uint32(r.EndpointAddressLength), - EndpointAddress: r.EndpointAddress.String(), - SourceAddressLength: sal, - SourceAddress: sa, + nlri.Nlri = &api.NLRI_MupType_1SessionTransformed{ + MupType_1SessionTransformed: &api.MUPType1SessionTransformedRoute{ + Rd: rd, + Prefix: r.Prefix.String(), + Teid: binary.BigEndian.Uint32(r.TEID.AsSlice()), + Qfi: uint32(r.QFI), + EndpointAddressLength: uint32(r.EndpointAddressLength), + EndpointAddress: r.EndpointAddress.String(), + SourceAddressLength: sal, + SourceAddress: sa, + }, } case *bgp.MUPType2SessionTransformedRoute: rd, err := MarshalRD(r.RD) if err != nil { return nil, err } - ar := &api.MUPType2SessionTransformedRoute{ - Rd: rd, - EndpointAddressLength: uint32(r.EndpointAddressLength), - EndpointAddress: r.EndpointAddress.String(), - Teid: binary.BigEndian.Uint32(r.TEID.AsSlice()), + nlri.Nlri = &api.NLRI_MupType_2SessionTransformed{ + MupType_2SessionTransformed: &api.MUPType2SessionTransformedRoute{ + Rd: rd, + EndpointAddressLength: uint32(r.EndpointAddressLength), + EndpointAddress: r.EndpointAddress.String(), + Teid: binary.BigEndian.Uint32(r.TEID.AsSlice()), + }, } - nlri = ar } + default: + return nil, fmt.Errorf("invalid nlri type to marshal: %T", value) } - an, _ := apb.New(nlri) - return an, nil + return &nlri, nil } -func MarshalNLRIs(values []bgp.AddrPrefixInterface) ([]*apb.Any, error) { - nlris := make([]*apb.Any, 0, len(values)) +func MarshalNLRIs(values []bgp.AddrPrefixInterface) ([]*api.NLRI, error) { + nlris := make([]*api.NLRI, 0, len(values)) for _, value := range values { nlri, err := MarshalNLRI(value) if err != nil { @@ -1399,37 +1391,36 @@ func MarshalNLRIs(values []bgp.AddrPrefixInterface) ([]*apb.Any, error) { return nlris, nil } -func UnmarshalNLRI(rf bgp.RouteFamily, an *apb.Any) (bgp.AddrPrefixInterface, error) { +func UnmarshalNLRI(rf bgp.RouteFamily, an *api.NLRI) (bgp.AddrPrefixInterface, error) { var nlri bgp.AddrPrefixInterface - value, err := an.UnmarshalNew() - if err != nil { - return nil, fmt.Errorf("failed to unmarshal nlri: %s", err) - } - - switch v := value.(type) { - case *api.IPAddressPrefix: + switch n := an.GetNlri().(type) { + case *api.NLRI_Prefix: + v := n.Prefix switch rf { case bgp.RF_IPv4_UC: nlri = bgp.NewIPAddrPrefix(uint8(v.PrefixLen), v.Prefix) case bgp.RF_IPv6_UC: nlri = bgp.NewIPv6AddrPrefix(uint8(v.PrefixLen), v.Prefix) } - case *api.LabeledIPAddressPrefix: + case *api.NLRI_LabeledPrefix: + v := n.LabeledPrefix switch rf { case bgp.RF_IPv4_MPLS: nlri = bgp.NewLabeledIPAddrPrefix(uint8(v.PrefixLen), v.Prefix, *bgp.NewMPLSLabelStack(v.Labels...)) case bgp.RF_IPv6_MPLS: nlri = bgp.NewLabeledIPv6AddrPrefix(uint8(v.PrefixLen), v.Prefix, *bgp.NewMPLSLabelStack(v.Labels...)) } - case *api.EncapsulationNLRI: + case *api.NLRI_Encapsulation: + v := n.Encapsulation switch rf { case bgp.RF_IPv4_ENCAP: nlri = bgp.NewEncapNLRI(v.Address) case bgp.RF_IPv6_ENCAP: nlri = bgp.NewEncapv6NLRI(v.Address) } - case *api.VPLSNLRI: + case *api.NLRI_Vpls: + v := n.Vpls if rf == bgp.RF_VPLS { rd, err := UnmarshalRD(v.Rd) if err != nil { @@ -1442,7 +1433,8 @@ func UnmarshalNLRI(rf bgp.RouteFamily, an *apb.Any) (bgp.AddrPrefixInterface, er uint16(v.VeBlockSize), v.LabelBlockBase) } - case *api.EVPNEthernetAutoDiscoveryRoute: + case *api.NLRI_EvpnEthernetAd: + v := n.EvpnEthernetAd if rf == bgp.RF_EVPN { rd, err := UnmarshalRD(v.Rd) if err != nil { @@ -1454,7 +1446,8 @@ func UnmarshalNLRI(rf bgp.RouteFamily, an *apb.Any) (bgp.AddrPrefixInterface, er } nlri = bgp.NewEVPNEthernetAutoDiscoveryRoute(rd, *esi, v.EthernetTag, v.Label) } - case *api.EVPNMACIPAdvertisementRoute: + case *api.NLRI_EvpnMacadv: + v := n.EvpnMacadv if rf == bgp.RF_EVPN { rd, err := UnmarshalRD(v.Rd) if err != nil { @@ -1466,7 +1459,8 @@ func UnmarshalNLRI(rf bgp.RouteFamily, an *apb.Any) (bgp.AddrPrefixInterface, er } nlri = bgp.NewEVPNMacIPAdvertisementRoute(rd, *esi, v.EthernetTag, v.MacAddress, v.IpAddress, v.Labels) } - case *api.EVPNInclusiveMulticastEthernetTagRoute: + case *api.NLRI_EvpnMulticast: + v := n.EvpnMulticast if rf == bgp.RF_EVPN { rd, err := UnmarshalRD(v.Rd) if err != nil { @@ -1474,7 +1468,8 @@ func UnmarshalNLRI(rf bgp.RouteFamily, an *apb.Any) (bgp.AddrPrefixInterface, er } nlri = bgp.NewEVPNMulticastEthernetTagRoute(rd, v.EthernetTag, v.IpAddress) } - case *api.EVPNEthernetSegmentRoute: + case *api.NLRI_EvpnEthernetSegment: + v := n.EvpnEthernetSegment if rf == bgp.RF_EVPN { rd, err := UnmarshalRD(v.Rd) if err != nil { @@ -1486,7 +1481,8 @@ func UnmarshalNLRI(rf bgp.RouteFamily, an *apb.Any) (bgp.AddrPrefixInterface, er } nlri = bgp.NewEVPNEthernetSegmentRoute(rd, *esi, v.IpAddress) } - case *api.EVPNIPPrefixRoute: + case *api.NLRI_EvpnIpPrefix: + v := n.EvpnIpPrefix if rf == bgp.RF_EVPN { rd, err := UnmarshalRD(v.Rd) if err != nil { @@ -1498,14 +1494,16 @@ func UnmarshalNLRI(rf bgp.RouteFamily, an *apb.Any) (bgp.AddrPrefixInterface, er } nlri = bgp.NewEVPNIPPrefixRoute(rd, *esi, v.EthernetTag, uint8(v.IpPrefixLen), v.IpPrefix, v.GwAddress, v.Label) } - case *api.SRPolicyNLRI: + case *api.NLRI_SrPolicy: + v := n.SrPolicy switch rf { case bgp.RF_SR_POLICY_IPv4: nlri = bgp.NewSRPolicyIPv4(v.Length, v.Distinguisher, v.Color, v.Endpoint) case bgp.RF_SR_POLICY_IPv6: nlri = bgp.NewSRPolicyIPv6(v.Length, v.Distinguisher, v.Color, v.Endpoint) } - case *api.LabeledVPNIPAddressPrefix: + case *api.NLRI_LabeledVpnIpPrefix: + v := n.LabeledVpnIpPrefix rd, err := UnmarshalRD(v.Rd) if err != nil { return nil, err @@ -1516,13 +1514,15 @@ func UnmarshalNLRI(rf bgp.RouteFamily, an *apb.Any) (bgp.AddrPrefixInterface, er case bgp.RF_IPv6_VPN: nlri = bgp.NewLabeledVPNIPv6AddrPrefix(uint8(v.PrefixLen), v.Prefix, *bgp.NewMPLSLabelStack(v.Labels...), rd) } - case *api.RouteTargetMembershipNLRI: + case *api.NLRI_RouteTargetMembership: + v := n.RouteTargetMembership rt, err := UnmarshalRT(v.Rt) if err != nil { return nil, err } nlri = bgp.NewRouteTargetMembershipNLRI(v.Asn, rt) - case *api.FlowSpecNLRI: + case *api.NLRI_FlowSpec: + v := n.FlowSpec rules, err := UnmarshalFlowSpecRules(v.Rules) if err != nil { return nil, err @@ -1533,7 +1533,8 @@ func UnmarshalNLRI(rf bgp.RouteFamily, an *apb.Any) (bgp.AddrPrefixInterface, er case bgp.RF_FS_IPv6_UC: nlri = bgp.NewFlowSpecIPv6Unicast(rules) } - case *api.VPNFlowSpecNLRI: + case *api.NLRI_VpnFlowSpec: + v := n.VpnFlowSpec rd, err := UnmarshalRD(v.Rd) if err != nil { return nil, err @@ -1550,7 +1551,8 @@ func UnmarshalNLRI(rf bgp.RouteFamily, an *apb.Any) (bgp.AddrPrefixInterface, er case bgp.RF_FS_L2_VPN: nlri = bgp.NewFlowSpecL2VPN(rd, rules) } - case *api.MUPInterworkSegmentDiscoveryRoute: + case *api.NLRI_MupInterworkSegmentDiscovery: + v := n.MupInterworkSegmentDiscovery rd, err := UnmarshalRD(v.Rd) if err != nil { return nil, err @@ -1560,7 +1562,8 @@ func UnmarshalNLRI(rf bgp.RouteFamily, an *apb.Any) (bgp.AddrPrefixInterface, er return nil, err } nlri = bgp.NewMUPInterworkSegmentDiscoveryRoute(rd, prefix) - case *api.MUPDirectSegmentDiscoveryRoute: + case *api.NLRI_MupDirectSegmentDiscovery: + v := n.MupDirectSegmentDiscovery rd, err := UnmarshalRD(v.Rd) if err != nil { return nil, err @@ -1570,7 +1573,8 @@ func UnmarshalNLRI(rf bgp.RouteFamily, an *apb.Any) (bgp.AddrPrefixInterface, er return nil, err } nlri = bgp.NewMUPDirectSegmentDiscoveryRoute(rd, address) - case *api.MUPType1SessionTransformedRoute: + case *api.NLRI_MupType_1SessionTransformed: + v := n.MupType_1SessionTransformed rd, err := UnmarshalRD(v.Rd) if err != nil { return nil, err @@ -1598,7 +1602,8 @@ func UnmarshalNLRI(rf bgp.RouteFamily, an *apb.Any) (bgp.AddrPrefixInterface, er sa = &a } nlri = bgp.NewMUPType1SessionTransformedRoute(rd, prefix, teid, uint8(v.Qfi), ea, sa) - case *api.MUPType2SessionTransformedRoute: + case *api.NLRI_MupType_2SessionTransformed: + v := n.MupType_2SessionTransformed rd, err := UnmarshalRD(v.Rd) if err != nil { return nil, err @@ -1614,10 +1619,11 @@ func UnmarshalNLRI(rf bgp.RouteFamily, an *apb.Any) (bgp.AddrPrefixInterface, er return nil, fmt.Errorf("invalid teid: %x", v.Teid) } nlri = bgp.NewMUPType2SessionTransformedRoute(rd, uint8(v.EndpointAddressLength), ea, teid) - case *api.LsAddrPrefix: - unmarshaledNlri, _ := v.Nlri.UnmarshalNew() - switch tp := unmarshaledNlri.(type) { - case *api.LsNodeNLRI: + case *api.NLRI_LsAddrPrefix: + v := n.LsAddrPrefix + switch t := v.Nlri.GetNlri().(type) { + case *api.LsAddrPrefix_LsNLRI_Node: + tp := t.Node lnd, err := UnmarshalLsNodeDescriptor(tp.LocalNode) if err != nil { return nil, err @@ -1636,7 +1642,8 @@ func UnmarshalNLRI(rf bgp.RouteFamily, an *apb.Any) (bgp.AddrPrefixInterface, er }, }, } - case *api.LsLinkNLRI: + case *api.LsAddrPrefix_LsNLRI_Link: + tp := t.Link lnd, err := UnmarshalLsNodeDescriptor(tp.LocalNode) if err != nil { return nil, err @@ -1670,7 +1677,8 @@ func UnmarshalNLRI(rf bgp.RouteFamily, an *apb.Any) (bgp.AddrPrefixInterface, er }, }, } - case *api.LsPrefixV4NLRI: + case *api.LsAddrPrefix_LsNLRI_PrefixV4: + tp := t.PrefixV4 lnd, err := UnmarshalLsNodeDescriptor(tp.LocalNode) if err != nil { return nil, err @@ -1698,7 +1706,8 @@ func UnmarshalNLRI(rf bgp.RouteFamily, an *apb.Any) (bgp.AddrPrefixInterface, er }, } - case *api.LsPrefixV6NLRI: + case *api.LsAddrPrefix_LsNLRI_PrefixV6: + tp := t.PrefixV6 lnd, err := UnmarshalLsNodeDescriptor(tp.LocalNode) if err != nil { return nil, err @@ -1727,18 +1736,18 @@ func UnmarshalNLRI(rf bgp.RouteFamily, an *apb.Any) (bgp.AddrPrefixInterface, er } default: - return nil, fmt.Errorf("unknown LS prefix type %v", tp) + return nil, fmt.Errorf("unknown LS prefix type %T", t) } } if nlri == nil { - return nil, fmt.Errorf("invalid nlri for %s family: %s", rf.String(), value) + return nil, fmt.Errorf("invalid nlri for %s family: %T", rf.String(), an.GetNlri()) } return nlri, nil } -func UnmarshalNLRIs(rf bgp.RouteFamily, values []*apb.Any) ([]bgp.AddrPrefixInterface, error) { +func UnmarshalNLRIs(rf bgp.RouteFamily, values []*api.NLRI) ([]bgp.AddrPrefixInterface, error) { nlris := make([]bgp.AddrPrefixInterface, 0, len(values)) for _, an := range values { nlri, err := UnmarshalNLRI(rf, an) @@ -1782,39 +1791,38 @@ func NewMpUnreachNLRIAttributeFromNative(a *bgp.PathAttributeMpUnreachNLRI) (*ap }, nil } -func MarshalRT(rt bgp.ExtendedCommunityInterface) (*apb.Any, error) { - var r proto.Message +func MarshalRT(rt bgp.ExtendedCommunityInterface) (*api.RouteTarget, error) { + var r api.RouteTarget switch v := rt.(type) { case *bgp.TwoOctetAsSpecificExtended: - r = &api.TwoOctetAsSpecificExtended{ + r.Rt = &api.RouteTarget_TwoOctetAsSpecific{TwoOctetAsSpecific: &api.TwoOctetAsSpecificExtended{ IsTransitive: true, SubType: uint32(bgp.EC_SUBTYPE_ROUTE_TARGET), Asn: uint32(v.AS), LocalAdmin: uint32(v.LocalAdmin), - } + }} case *bgp.IPv4AddressSpecificExtended: - r = &api.IPv4AddressSpecificExtended{ + r.Rt = &api.RouteTarget_Ipv4AddressSpecific{Ipv4AddressSpecific: &api.IPv4AddressSpecificExtended{ IsTransitive: true, SubType: uint32(bgp.EC_SUBTYPE_ROUTE_TARGET), Address: v.IPv4.String(), LocalAdmin: uint32(v.LocalAdmin), - } + }} case *bgp.FourOctetAsSpecificExtended: - r = &api.FourOctetAsSpecificExtended{ + r.Rt = &api.RouteTarget_FourOctetAsSpecific{FourOctetAsSpecific: &api.FourOctetAsSpecificExtended{ IsTransitive: true, SubType: uint32(bgp.EC_SUBTYPE_ROUTE_TARGET), Asn: uint32(v.AS), LocalAdmin: uint32(v.LocalAdmin), - } + }} default: return nil, fmt.Errorf("invalid rt type to marshal: %v", rt) } - a, _ := apb.New(r) - return a, nil + return &r, nil } -func MarshalRTs(values []bgp.ExtendedCommunityInterface) ([]*apb.Any, error) { - rts := make([]*apb.Any, 0, len(values)) +func MarshalRTs(values []bgp.ExtendedCommunityInterface) ([]*api.RouteTarget, error) { + rts := make([]*api.RouteTarget, 0, len(values)) for _, rt := range values { r, err := MarshalRT(rt) if err != nil { @@ -1825,27 +1833,26 @@ func MarshalRTs(values []bgp.ExtendedCommunityInterface) ([]*apb.Any, error) { return rts, nil } -func UnmarshalRT(a *apb.Any) (bgp.ExtendedCommunityInterface, error) { - value, err := a.UnmarshalNew() - if err != nil { - return nil, fmt.Errorf("failed to unmarshal route target: %s", err) - } - switch v := value.(type) { - case *api.TwoOctetAsSpecificExtended: +func UnmarshalRT(rt *api.RouteTarget) (bgp.ExtendedCommunityInterface, error) { + switch rt.GetRt().(type) { + case *api.RouteTarget_TwoOctetAsSpecific: + v := rt.GetTwoOctetAsSpecific() return bgp.NewTwoOctetAsSpecificExtended(bgp.ExtendedCommunityAttrSubType(v.SubType), uint16(v.Asn), v.LocalAdmin, v.IsTransitive), nil - case *api.IPv4AddressSpecificExtended: + case *api.RouteTarget_Ipv4AddressSpecific: + v := rt.GetIpv4AddressSpecific() rt := bgp.NewIPv4AddressSpecificExtended(bgp.ExtendedCommunityAttrSubType(v.SubType), v.Address, uint16(v.LocalAdmin), v.IsTransitive) if rt == nil { return nil, fmt.Errorf("invalid address for ipv4 address specific route target: %s", v.Address) } return rt, nil - case *api.FourOctetAsSpecificExtended: + case *api.RouteTarget_FourOctetAsSpecific: + v := rt.GetFourOctetAsSpecific() return bgp.NewFourOctetAsSpecificExtended(bgp.ExtendedCommunityAttrSubType(v.SubType), v.Asn, uint16(v.LocalAdmin), v.IsTransitive), nil } - return nil, fmt.Errorf("invalid route target type: %s", a.TypeUrl) + return nil, fmt.Errorf("invalid route target") } -func UnmarshalRTs(values []*apb.Any) ([]bgp.ExtendedCommunityInterface, error) { +func UnmarshalRTs(values []*api.RouteTarget) ([]bgp.ExtendedCommunityInterface, error) { rts := make([]bgp.ExtendedCommunityInterface, 0, len(values)) for _, an := range values { rt, err := UnmarshalRT(an) @@ -1858,123 +1865,164 @@ func UnmarshalRTs(values []*apb.Any) ([]bgp.ExtendedCommunityInterface, error) { } func NewExtendedCommunitiesAttributeFromNative(a *bgp.PathAttributeExtendedCommunities) (*api.ExtendedCommunitiesAttribute, error) { - communities := make([]*apb.Any, 0, len(a.Value)) + communities := make([]*api.ExtendedCommunity, 0, len(a.Value)) for _, value := range a.Value { - var community proto.Message + var community api.ExtendedCommunity switch v := value.(type) { case *bgp.TwoOctetAsSpecificExtended: - community = &api.TwoOctetAsSpecificExtended{ - IsTransitive: v.IsTransitive, - SubType: uint32(v.SubType), - Asn: uint32(v.AS), - LocalAdmin: uint32(v.LocalAdmin), + community.Extcom = &api.ExtendedCommunity_TwoOctetAsSpecific{ + TwoOctetAsSpecific: &api.TwoOctetAsSpecificExtended{ + IsTransitive: v.IsTransitive, + SubType: uint32(v.SubType), + Asn: uint32(v.AS), + LocalAdmin: uint32(v.LocalAdmin), + }, } case *bgp.IPv4AddressSpecificExtended: - community = &api.IPv4AddressSpecificExtended{ - IsTransitive: v.IsTransitive, - SubType: uint32(v.SubType), - Address: v.IPv4.String(), - LocalAdmin: uint32(v.LocalAdmin), + community.Extcom = &api.ExtendedCommunity_Ipv4AddressSpecific{ + Ipv4AddressSpecific: &api.IPv4AddressSpecificExtended{ + IsTransitive: v.IsTransitive, + SubType: uint32(v.SubType), + Address: v.IPv4.String(), + LocalAdmin: uint32(v.LocalAdmin), + }, } case *bgp.FourOctetAsSpecificExtended: - community = &api.FourOctetAsSpecificExtended{ - IsTransitive: v.IsTransitive, - SubType: uint32(v.SubType), - Asn: uint32(v.AS), - LocalAdmin: uint32(v.LocalAdmin), + community.Extcom = &api.ExtendedCommunity_FourOctetAsSpecific{ + FourOctetAsSpecific: &api.FourOctetAsSpecificExtended{ + IsTransitive: v.IsTransitive, + SubType: uint32(v.SubType), + Asn: uint32(v.AS), + LocalAdmin: uint32(v.LocalAdmin), + }, } case *bgp.ValidationExtended: - community = &api.ValidationExtended{ - State: uint32(v.State), + community.Extcom = &api.ExtendedCommunity_Validation{ + Validation: &api.ValidationExtended{ + State: uint32(v.State), + }, } case *bgp.LinkBandwidthExtended: - community = &api.LinkBandwidthExtended{ - Asn: uint32(v.AS), - Bandwidth: v.Bandwidth, + community.Extcom = &api.ExtendedCommunity_LinkBandwidth{ + LinkBandwidth: &api.LinkBandwidthExtended{ + Asn: uint32(v.AS), + Bandwidth: v.Bandwidth, + }, } case *bgp.ColorExtended: - community = &api.ColorExtended{ - Color: v.Color, + community.Extcom = &api.ExtendedCommunity_Color{ + Color: &api.ColorExtended{ + Color: v.Color, + }, } case *bgp.EncapExtended: - community = &api.EncapExtended{ - TunnelType: uint32(v.TunnelType), + community.Extcom = &api.ExtendedCommunity_Encap{ + Encap: &api.EncapExtended{ + TunnelType: uint32(v.TunnelType), + }, } case *bgp.DefaultGatewayExtended: - community = &api.DefaultGatewayExtended{} + community.Extcom = &api.ExtendedCommunity_DefaultGateway{DefaultGateway: &api.DefaultGatewayExtended{}} case *bgp.OpaqueExtended: - community = &api.OpaqueExtended{ - IsTransitive: v.IsTransitive, - Value: v.Value, + community.Extcom = &api.ExtendedCommunity_Opaque{ + Opaque: &api.OpaqueExtended{ + IsTransitive: v.IsTransitive, + Value: v.Value, + }, } case *bgp.ESILabelExtended: - community = &api.ESILabelExtended{ - IsSingleActive: v.IsSingleActive, - Label: v.Label, + community.Extcom = &api.ExtendedCommunity_EsiLabel{ + EsiLabel: &api.ESILabelExtended{ + IsSingleActive: v.IsSingleActive, + Label: v.Label, + }, } case *bgp.ESImportRouteTarget: - community = &api.ESImportRouteTarget{ - EsImport: v.ESImport.String(), + community.Extcom = &api.ExtendedCommunity_EsImport{ + EsImport: &api.ESImportRouteTarget{ + EsImport: v.ESImport.String(), + }, } case *bgp.MacMobilityExtended: - community = &api.MacMobilityExtended{ - IsSticky: v.IsSticky, - SequenceNum: v.Sequence, + community.Extcom = &api.ExtendedCommunity_MacMobility{ + MacMobility: &api.MacMobilityExtended{ + IsSticky: v.IsSticky, + SequenceNum: v.Sequence, + }, } case *bgp.RouterMacExtended: - community = &api.RouterMacExtended{ - Mac: v.Mac.String(), + community.Extcom = &api.ExtendedCommunity_RouterMac{ + RouterMac: &api.RouterMacExtended{ + Mac: v.Mac.String(), + }, } case *bgp.TrafficRateExtended: - community = &api.TrafficRateExtended{ - Asn: uint32(v.AS), - Rate: v.Rate, + community.Extcom = &api.ExtendedCommunity_TrafficRate{ + TrafficRate: &api.TrafficRateExtended{ + Asn: uint32(v.AS), + Rate: v.Rate, + }, } case *bgp.TrafficActionExtended: - community = &api.TrafficActionExtended{ - Terminal: v.Terminal, - Sample: v.Sample, + community.Extcom = &api.ExtendedCommunity_TrafficAction{ + TrafficAction: &api.TrafficActionExtended{ + Terminal: v.Terminal, + Sample: v.Sample, + }, } case *bgp.RedirectTwoOctetAsSpecificExtended: - community = &api.RedirectTwoOctetAsSpecificExtended{ - Asn: uint32(v.AS), - LocalAdmin: v.LocalAdmin, + community.Extcom = &api.ExtendedCommunity_RedirectTwoOctetAsSpecific{ + RedirectTwoOctetAsSpecific: &api.RedirectTwoOctetAsSpecificExtended{ + Asn: uint32(v.AS), + LocalAdmin: v.LocalAdmin, + }, } case *bgp.RedirectIPv4AddressSpecificExtended: - community = &api.RedirectIPv4AddressSpecificExtended{ - Address: v.IPv4.String(), - LocalAdmin: uint32(v.LocalAdmin), + community.Extcom = &api.ExtendedCommunity_RedirectIpv4AddressSpecific{ + RedirectIpv4AddressSpecific: &api.RedirectIPv4AddressSpecificExtended{ + Address: v.IPv4.String(), + LocalAdmin: uint32(v.LocalAdmin), + }, } case *bgp.RedirectFourOctetAsSpecificExtended: - community = &api.RedirectFourOctetAsSpecificExtended{ - Asn: v.AS, - LocalAdmin: uint32(v.LocalAdmin), + community.Extcom = &api.ExtendedCommunity_RedirectFourOctetAsSpecific{ + RedirectFourOctetAsSpecific: &api.RedirectFourOctetAsSpecificExtended{ + Asn: v.AS, + LocalAdmin: uint32(v.LocalAdmin), + }, } case *bgp.TrafficRemarkExtended: - community = &api.TrafficRemarkExtended{ - Dscp: uint32(v.DSCP), + community.Extcom = &api.ExtendedCommunity_TrafficRemark{ + TrafficRemark: &api.TrafficRemarkExtended{ + Dscp: uint32(v.DSCP), + }, } case *bgp.MUPExtended: - community = &api.MUPExtended{ - SubType: uint32(v.SubType), - SegmentId2: uint32(v.SegmentID2), - SegmentId4: v.SegmentID4, + community.Extcom = &api.ExtendedCommunity_Mup{ + Mup: &api.MUPExtended{ + SubType: uint32(v.SubType), + SegmentId2: uint32(v.SegmentID2), + SegmentId4: v.SegmentID4, + }, } case *bgp.VPLSExtended: - community = &api.VPLSExtended{ - ControlFlags: uint32(v.ControlFlags), - Mtu: uint32(v.MTU), + community.Extcom = &api.ExtendedCommunity_Vpls{ + Vpls: &api.VPLSExtended{ + ControlFlags: uint32(v.ControlFlags), + Mtu: uint32(v.MTU), + }, } case *bgp.UnknownExtended: - community = &api.UnknownExtended{ - Type: uint32(v.Type), - Value: v.Value, + community.Extcom = &api.ExtendedCommunity_Unknown{ + Unknown: &api.UnknownExtended{ + Type: uint32(v.Type), + Value: v.Value, + }, } default: return nil, fmt.Errorf("unsupported extended community: %v", value) } - an, _ := apb.New(community) - communities = append(communities, an) + communities = append(communities, &community) } return &api.ExtendedCommunitiesAttribute{ Communities: communities, @@ -1983,60 +2031,77 @@ func NewExtendedCommunitiesAttributeFromNative(a *bgp.PathAttributeExtendedCommu func unmarshalExComm(a *api.ExtendedCommunitiesAttribute) (*bgp.PathAttributeExtendedCommunities, error) { communities := make([]bgp.ExtendedCommunityInterface, 0, len(a.Communities)) - for _, an := range a.Communities { + for _, c := range a.Communities { var community bgp.ExtendedCommunityInterface - value, err := an.UnmarshalNew() - if err != nil { - return nil, fmt.Errorf("failed to unmarshal extended community: %s", err) - } - switch v := value.(type) { - case *api.TwoOctetAsSpecificExtended: + switch comm := c.GetExtcom().(type) { + case *api.ExtendedCommunity_TwoOctetAsSpecific: + v := comm.TwoOctetAsSpecific community = bgp.NewTwoOctetAsSpecificExtended(bgp.ExtendedCommunityAttrSubType(v.SubType), uint16(v.Asn), v.LocalAdmin, v.IsTransitive) - case *api.IPv4AddressSpecificExtended: + case *api.ExtendedCommunity_Ipv4AddressSpecific: + v := comm.Ipv4AddressSpecific community = bgp.NewIPv4AddressSpecificExtended(bgp.ExtendedCommunityAttrSubType(v.SubType), v.Address, uint16(v.LocalAdmin), v.IsTransitive) - case *api.FourOctetAsSpecificExtended: + case *api.ExtendedCommunity_FourOctetAsSpecific: + v := comm.FourOctetAsSpecific community = bgp.NewFourOctetAsSpecificExtended(bgp.ExtendedCommunityAttrSubType(v.SubType), v.Asn, uint16(v.LocalAdmin), v.IsTransitive) - case *api.ValidationExtended: + case *api.ExtendedCommunity_Validation: + v := comm.Validation community = bgp.NewValidationExtended(bgp.ValidationState(v.State)) - case *api.LinkBandwidthExtended: + case *api.ExtendedCommunity_LinkBandwidth: + v := comm.LinkBandwidth community = bgp.NewLinkBandwidthExtended(uint16(v.Asn), v.Bandwidth) - case *api.ColorExtended: + case *api.ExtendedCommunity_Color: + v := comm.Color community = bgp.NewColorExtended(v.Color) - case *api.EncapExtended: + case *api.ExtendedCommunity_Encap: + v := comm.Encap community = bgp.NewEncapExtended(bgp.TunnelType(v.TunnelType)) - case *api.DefaultGatewayExtended: + case *api.ExtendedCommunity_DefaultGateway: community = bgp.NewDefaultGatewayExtended() - case *api.OpaqueExtended: + case *api.ExtendedCommunity_Opaque: + v := comm.Opaque community = bgp.NewOpaqueExtended(v.IsTransitive, v.Value) - case *api.ESILabelExtended: + case *api.ExtendedCommunity_EsiLabel: + v := comm.EsiLabel community = bgp.NewESILabelExtended(v.Label, v.IsSingleActive) - case *api.ESImportRouteTarget: + case *api.ExtendedCommunity_EsImport: + v := comm.EsImport community = bgp.NewESImportRouteTarget(v.EsImport) - case *api.MacMobilityExtended: + case *api.ExtendedCommunity_MacMobility: + v := comm.MacMobility community = bgp.NewMacMobilityExtended(v.SequenceNum, v.IsSticky) - case *api.RouterMacExtended: + case *api.ExtendedCommunity_RouterMac: + v := comm.RouterMac community = bgp.NewRoutersMacExtended(v.Mac) - case *api.TrafficRateExtended: + case *api.ExtendedCommunity_TrafficRate: + v := comm.TrafficRate community = bgp.NewTrafficRateExtended(uint16(v.Asn), v.Rate) - case *api.TrafficActionExtended: + case *api.ExtendedCommunity_TrafficAction: + v := comm.TrafficAction community = bgp.NewTrafficActionExtended(v.Terminal, v.Sample) - case *api.RedirectTwoOctetAsSpecificExtended: + case *api.ExtendedCommunity_RedirectTwoOctetAsSpecific: + v := comm.RedirectTwoOctetAsSpecific community = bgp.NewRedirectTwoOctetAsSpecificExtended(uint16(v.Asn), v.LocalAdmin) - case *api.RedirectIPv4AddressSpecificExtended: + case *api.ExtendedCommunity_RedirectIpv4AddressSpecific: + v := comm.RedirectIpv4AddressSpecific community = bgp.NewRedirectIPv4AddressSpecificExtended(v.Address, uint16(v.LocalAdmin)) - case *api.RedirectFourOctetAsSpecificExtended: + case *api.ExtendedCommunity_RedirectFourOctetAsSpecific: + v := comm.RedirectFourOctetAsSpecific community = bgp.NewRedirectFourOctetAsSpecificExtended(v.Asn, uint16(v.LocalAdmin)) - case *api.TrafficRemarkExtended: + case *api.ExtendedCommunity_TrafficRemark: + v := comm.TrafficRemark community = bgp.NewTrafficRemarkExtended(uint8(v.Dscp)) - case *api.MUPExtended: + case *api.ExtendedCommunity_Mup: + v := comm.Mup community = bgp.NewMUPExtended(uint16(v.SegmentId2), v.SegmentId4) - case *api.VPLSExtended: + case *api.ExtendedCommunity_Vpls: + v := comm.Vpls community = bgp.NewVPLSExtended(uint8(v.ControlFlags), uint16(v.Mtu)) - case *api.UnknownExtended: + case *api.ExtendedCommunity_Unknown: + v := comm.Unknown community = bgp.NewUnknownExtended(bgp.ExtendedCommunityAttrType(v.Type), v.Value) } if community == nil { - return nil, fmt.Errorf("invalid extended community: %v", value) + return nil, fmt.Errorf("invalid extended community: %T", c.GetExtcom()) } communities = append(communities, community) } @@ -2080,78 +2145,104 @@ func NewPmsiTunnelAttributeFromNative(a *bgp.PathAttributePmsiTunnel) (*api.Pmsi func NewTunnelEncapAttributeFromNative(a *bgp.PathAttributeTunnelEncap) (*api.TunnelEncapAttribute, error) { tlvs := make([]*api.TunnelEncapTLV, 0, len(a.Value)) for _, v := range a.Value { - subTlvs := make([]*apb.Any, 0, len(v.Value)) + subTlvs := make([]*api.TunnelEncapTLV_TLV, 0, len(v.Value)) for _, s := range v.Value { - var subTlv proto.Message + var subTlv api.TunnelEncapTLV_TLV switch sv := s.(type) { case *bgp.TunnelEncapSubTLVEncapsulation: - subTlv = &api.TunnelEncapSubTLVEncapsulation{ - Key: sv.Key, - Cookie: sv.Cookie, + subTlv.Tlv = &api.TunnelEncapTLV_TLV_Encapsulation{ + Encapsulation: &api.TunnelEncapSubTLVEncapsulation{ + Key: sv.Key, + Cookie: sv.Cookie, + }, } case *bgp.TunnelEncapSubTLVProtocol: - subTlv = &api.TunnelEncapSubTLVProtocol{ - Protocol: uint32(sv.Protocol), + subTlv.Tlv = &api.TunnelEncapTLV_TLV_Protocol{ + Protocol: &api.TunnelEncapSubTLVProtocol{ + Protocol: uint32(sv.Protocol), + }, } case *bgp.TunnelEncapSubTLVColor: - subTlv = &api.TunnelEncapSubTLVColor{ - Color: sv.Color, + subTlv.Tlv = &api.TunnelEncapTLV_TLV_Color{ + Color: &api.TunnelEncapSubTLVColor{ + Color: sv.Color, + }, } case *bgp.TunnelEncapSubTLVEgressEndpoint: - subTlv = &api.TunnelEncapSubTLVEgressEndpoint{ - Address: sv.Address.String(), + subTlv.Tlv = &api.TunnelEncapTLV_TLV_EgressEndpoint{ + EgressEndpoint: &api.TunnelEncapSubTLVEgressEndpoint{ + Address: sv.Address.String(), + }, } case *bgp.TunnelEncapSubTLVUDPDestPort: - subTlv = &api.TunnelEncapSubTLVUDPDestPort{ - Port: uint32(sv.UDPDestPort), + subTlv.Tlv = &api.TunnelEncapTLV_TLV_UdpDestPort{ + UdpDestPort: &api.TunnelEncapSubTLVUDPDestPort{ + Port: uint32(sv.UDPDestPort), + }, } case *bgp.TunnelEncapSubTLVUnknown: - subTlv = &api.TunnelEncapSubTLVUnknown{ - Type: uint32(sv.Type), - Value: sv.Value, + subTlv.Tlv = &api.TunnelEncapTLV_TLV_Unknown{ + Unknown: &api.TunnelEncapSubTLVUnknown{ + Type: uint32(sv.Type), + Value: sv.Value, + }, } case *bgp.TunnelEncapSubTLVSRBSID: t, err := MarshalSRBSID(sv) if err != nil { return nil, err } - subTlv = &api.TunnelEncapSubTLVSRBindingSID{ - Bsid: t} + subTlv.Tlv = &api.TunnelEncapTLV_TLV_SrBindingSid{ + SrBindingSid: &api.TunnelEncapSubTLVSRBindingSID{ + Bsid: &api.TunnelEncapSubTLVSRBindingSID_SrBindingSid{ + SrBindingSid: t, + }, + }, + } // TODO (sbezverk) Add processing of SRv6 Binding SID when it gets assigned ID case *bgp.TunnelEncapSubTLVSRCandidatePathName: - subTlv = &api.TunnelEncapSubTLVSRCandidatePathName{ - CandidatePathName: sv.CandidatePathName, + subTlv.Tlv = &api.TunnelEncapTLV_TLV_SrCandidatePathName{ + SrCandidatePathName: &api.TunnelEncapSubTLVSRCandidatePathName{ + CandidatePathName: sv.CandidatePathName, + }, } // TODO (sbezverk) Add processing of SR Policy name when it gets assigned ID case *bgp.TunnelEncapSubTLVSRENLP: - subTlv = &api.TunnelEncapSubTLVSRENLP{ - Flags: uint32(sv.Flags), - Enlp: api.ENLPType(sv.ENLP), + subTlv.Tlv = &api.TunnelEncapTLV_TLV_SrEnlp{ + SrEnlp: &api.TunnelEncapSubTLVSRENLP{ + Flags: uint32(sv.Flags), + Enlp: api.ENLPType(sv.ENLP), + }, } case *bgp.TunnelEncapSubTLVSRPreference: - subTlv = &api.TunnelEncapSubTLVSRPreference{ - Flags: uint32(sv.Flags), - Preference: sv.Preference, + subTlv.Tlv = &api.TunnelEncapTLV_TLV_SrPreference{ + SrPreference: &api.TunnelEncapSubTLVSRPreference{ + Flags: uint32(sv.Flags), + Preference: sv.Preference, + }, } case *bgp.TunnelEncapSubTLVSRPriority: - subTlv = &api.TunnelEncapSubTLVSRPriority{ - Priority: uint32(sv.Priority), + subTlv.Tlv = &api.TunnelEncapTLV_TLV_SrPriority{ + SrPriority: &api.TunnelEncapSubTLVSRPriority{ + Priority: uint32(sv.Priority), + }, } case *bgp.TunnelEncapSubTLVSRSegmentList: s, err := MarshalSRSegments(sv.Segments) if err != nil { return nil, err } - subTlv = &api.TunnelEncapSubTLVSRSegmentList{ - Weight: &api.SRWeight{ - Flags: uint32(sv.Weight.Flags), - Weight: uint32(sv.Weight.Weight), + subTlv.Tlv = &api.TunnelEncapTLV_TLV_SrSegmentList{ + SrSegmentList: &api.TunnelEncapSubTLVSRSegmentList{ + Weight: &api.SRWeight{ + Flags: uint32(sv.Weight.Flags), + Weight: uint32(sv.Weight.Weight), + }, + Segments: s, }, - Segments: s, } } - an, _ := apb.New(subTlv) - subTlvs = append(subTlvs, an) + subTlvs = append(subTlvs, &subTlv) } tlvs = append(tlvs, &api.TunnelEncapTLV{ Type: uint32(v.Type), @@ -2164,27 +2255,30 @@ func NewTunnelEncapAttributeFromNative(a *bgp.PathAttributeTunnelEncap) (*api.Tu } func NewIP6ExtendedCommunitiesAttributeFromNative(a *bgp.PathAttributeIP6ExtendedCommunities) (*api.IP6ExtendedCommunitiesAttribute, error) { - communities := make([]*apb.Any, 0, len(a.Value)) + communities := make([]*api.IP6ExtendedCommunitiesAttribute_Community, 0, len(a.Value)) for _, value := range a.Value { - var community proto.Message + var community api.IP6ExtendedCommunitiesAttribute_Community switch v := value.(type) { case *bgp.IPv6AddressSpecificExtended: - community = &api.IPv6AddressSpecificExtended{ - IsTransitive: v.IsTransitive, - SubType: uint32(v.SubType), - Address: v.IPv6.String(), - LocalAdmin: uint32(v.LocalAdmin), + community.Extcom = &api.IP6ExtendedCommunitiesAttribute_Community_Ipv6AddressSpecific{ + Ipv6AddressSpecific: &api.IPv6AddressSpecificExtended{ + IsTransitive: v.IsTransitive, + SubType: uint32(v.SubType), + Address: v.IPv6.String(), + LocalAdmin: uint32(v.LocalAdmin), + }, } case *bgp.RedirectIPv6AddressSpecificExtended: - community = &api.RedirectIPv6AddressSpecificExtended{ - Address: v.IPv6.String(), - LocalAdmin: uint32(v.LocalAdmin), + community.Extcom = &api.IP6ExtendedCommunitiesAttribute_Community_RedirectIpv6AddressSpecific{ + RedirectIpv6AddressSpecific: &api.RedirectIPv6AddressSpecificExtended{ + Address: v.IPv6.String(), + LocalAdmin: uint32(v.LocalAdmin), + }, } default: return nil, fmt.Errorf("invalid ipv6 extended community: %v", value) } - an, _ := apb.New(community) - communities = append(communities, an) + communities = append(communities, &community) } return &api.IP6ExtendedCommunitiesAttribute{ Communities: communities, @@ -2192,22 +2286,25 @@ func NewIP6ExtendedCommunitiesAttributeFromNative(a *bgp.PathAttributeIP6Extende } func NewAigpAttributeFromNative(a *bgp.PathAttributeAigp) (*api.AigpAttribute, error) { - tlvs := make([]*apb.Any, 0, len(a.Values)) + tlvs := make([]*api.AigpAttribute_TLV, 0, len(a.Values)) for _, value := range a.Values { - var tlv proto.Message + var tlv api.AigpAttribute_TLV switch v := value.(type) { case *bgp.AigpTLVIgpMetric: - tlv = &api.AigpTLVIGPMetric{ - Metric: v.Metric, + tlv.Tlv = &api.AigpAttribute_TLV_IgpMetric{ + IgpMetric: &api.AigpTLVIGPMetric{ + Metric: v.Metric, + }, } case *bgp.AigpTLVDefault: - tlv = &api.AigpTLVUnknown{ - Type: uint32(v.Type()), - Value: v.Value, + tlv.Tlv = &api.AigpAttribute_TLV_Unknown{ + Unknown: &api.AigpTLVUnknown{ + Type: uint32(v.Type()), + Value: v.Value, + }, } } - an, _ := apb.New(tlv) - tlvs = append(tlvs, an) + tlvs = append(tlvs, &tlv) } return &api.AigpAttribute{ Tlvs: tlvs, @@ -2375,177 +2472,156 @@ func NewUnknownAttributeFromNative(a *bgp.PathAttributeUnknown) (*api.UnknownAtt }, nil } -func MarshalPathAttributes(attrList []bgp.PathAttributeInterface) ([]*apb.Any, error) { - anyList := make([]*apb.Any, 0, len(attrList)) +func MarshalPathAttributes(attrList []bgp.PathAttributeInterface) ([]*api.Attribute, error) { + apiList := make([]*api.Attribute, 0, len(attrList)) for _, attr := range attrList { + var attribute api.Attribute switch a := attr.(type) { case *bgp.PathAttributeOrigin: v, err := NewOriginAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_Origin{Origin: v} case *bgp.PathAttributeAsPath: v, err := NewAsPathAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_AsPath{AsPath: v} case *bgp.PathAttributeNextHop: v, err := NewNextHopAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_NextHop{NextHop: v} case *bgp.PathAttributeMultiExitDisc: v, err := NewMultiExitDiscAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_MultiExitDisc{MultiExitDisc: v} case *bgp.PathAttributeLocalPref: v, err := NewLocalPrefAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_LocalPref{LocalPref: v} case *bgp.PathAttributeAtomicAggregate: v, err := NewAtomicAggregateAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_AtomicAggregate{AtomicAggregate: v} case *bgp.PathAttributeAggregator: v, err := NewAggregatorAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_Aggregator{Aggregator: v} case *bgp.PathAttributeCommunities: v, err := NewCommunitiesAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_Communities{Communities: v} case *bgp.PathAttributeOriginatorId: v, err := NewOriginatorIdAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_OriginatorId{OriginatorId: v} case *bgp.PathAttributeClusterList: v, err := NewClusterListAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_ClusterList{ClusterList: v} case *bgp.PathAttributeMpReachNLRI: v, err := NewMpReachNLRIAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_MpReach{MpReach: v} case *bgp.PathAttributeMpUnreachNLRI: v, err := NewMpUnreachNLRIAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_MpUnreach{MpUnreach: v} case *bgp.PathAttributeExtendedCommunities: v, err := NewExtendedCommunitiesAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_ExtendedCommunities{ExtendedCommunities: v} case *bgp.PathAttributeAs4Path: v, err := NewAs4PathAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_As4Path{As4Path: v} case *bgp.PathAttributeAs4Aggregator: v, err := NewAs4AggregatorAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_As4Aggregator{As4Aggregator: v} case *bgp.PathAttributePmsiTunnel: v, err := NewPmsiTunnelAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_PmsiTunnel{PmsiTunnel: v} case *bgp.PathAttributeTunnelEncap: v, err := NewTunnelEncapAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_TunnelEncap{TunnelEncap: v} case *bgp.PathAttributeIP6ExtendedCommunities: v, err := NewIP6ExtendedCommunitiesAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_Ip6ExtendedCommunities{Ip6ExtendedCommunities: v} case *bgp.PathAttributeAigp: v, err := NewAigpAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_Aigp{Aigp: v} case *bgp.PathAttributeLargeCommunities: v, err := NewLargeCommunitiesAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_LargeCommunities{LargeCommunities: v} case *bgp.PathAttributeLs: v, err := NewLsAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_Ls{Ls: v} case *bgp.PathAttributePrefixSID: v, err := NewPrefixSIDAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_PrefixSid{PrefixSid: v} case *bgp.PathAttributeUnknown: v, err := NewUnknownAttributeFromNative(a) if err != nil { return nil, err } - n, _ := apb.New(v) - anyList = append(anyList, n) + attribute.Attr = &api.Attribute_Unknown{Unknown: v} } + apiList = append(apiList, &attribute) } - return anyList, nil + return apiList, nil } -func UnmarshalPathAttributes(values []*apb.Any) ([]bgp.PathAttributeInterface, error) { +func UnmarshalPathAttributes(values []*api.Attribute) ([]bgp.PathAttributeInterface, error) { attrList := make([]bgp.PathAttributeInterface, 0, len(values)) typeMap := make(map[bgp.BGPAttrType]struct{}) for _, an := range values { @@ -2563,36 +2639,29 @@ func UnmarshalPathAttributes(values []*apb.Any) ([]bgp.PathAttributeInterface, e } // MarshalSRBSID marshals SR Policy Binding SID Sub TLV structure -func MarshalSRBSID(bsid *bgp.TunnelEncapSubTLVSRBSID) (*apb.Any, error) { - var r proto.Message +func MarshalSRBSID(bsid *bgp.TunnelEncapSubTLVSRBSID) (*api.SRBindingSID, error) { s := &api.SRBindingSID{ Sid: make([]byte, len(bsid.BSID.Value)), } copy(s.Sid, bsid.BSID.Value) s.SFlag = bsid.Flags&0x80 == 0x80 s.IFlag = bsid.Flags&0x40 == 0x40 - r = s - a, _ := apb.New(r) - return a, nil + return s, nil } // UnmarshalSRBSID unmarshals SR Policy Binding SID Sub TLV and returns native TunnelEncapSubTLVInterface interface -func UnmarshalSRBSID(bsid *apb.Any) (bgp.TunnelEncapSubTLVInterface, error) { - value, err := bsid.UnmarshalNew() - if err != nil { - return nil, fmt.Errorf("failed to unmarshal tunnel encap sub tlv: %s", err) - } - switch v := value.(type) { - case *api.SRBindingSID: - b, err := bgp.NewBSID(v.Sid) +func UnmarshalSRBSID(bsid *api.TunnelEncapSubTLVSRBindingSID) (bgp.TunnelEncapSubTLVInterface, error) { + switch v := bsid.GetBsid().(type) { + case *api.TunnelEncapSubTLVSRBindingSID_SrBindingSid: + b, err := bgp.NewBSID(v.SrBindingSid.Sid) if err != nil { return nil, err } flags := uint8(0x0) - if v.SFlag { + if v.SrBindingSid.SFlag { flags += 0x80 } - if v.IFlag { + if v.SrBindingSid.IFlag { flags += 0x40 } return &bgp.TunnelEncapSubTLVSRBSID{ @@ -2603,8 +2672,8 @@ func UnmarshalSRBSID(bsid *apb.Any) (bgp.TunnelEncapSubTLVInterface, error) { BSID: b, Flags: flags, }, nil - case *api.SRv6BindingSID: - b, err := bgp.NewBSID(v.Sid) + case *api.TunnelEncapSubTLVSRBindingSID_Srv6BindingSid: + b, err := bgp.NewBSID(v.Srv6BindingSid.Sid) if err != nil { return nil, err } @@ -2617,36 +2686,38 @@ func UnmarshalSRBSID(bsid *apb.Any) (bgp.TunnelEncapSubTLVInterface, error) { BSID: b, } - if v.EndpointBehaviorStructure != nil { + if v.Srv6BindingSid.EndpointBehaviorStructure != nil { result.EPBAS = &bgp.SRv6EndpointBehaviorStructure{ - Behavior: bgp.SRBehavior(v.EndpointBehaviorStructure.Behavior), - BlockLen: uint8(v.EndpointBehaviorStructure.BlockLen), - NodeLen: uint8(v.EndpointBehaviorStructure.NodeLen), - FuncLen: uint8(v.EndpointBehaviorStructure.FuncLen), - ArgLen: uint8(v.EndpointBehaviorStructure.ArgLen), + Behavior: bgp.SRBehavior(v.Srv6BindingSid.EndpointBehaviorStructure.Behavior), + BlockLen: uint8(v.Srv6BindingSid.EndpointBehaviorStructure.BlockLen), + NodeLen: uint8(v.Srv6BindingSid.EndpointBehaviorStructure.NodeLen), + FuncLen: uint8(v.Srv6BindingSid.EndpointBehaviorStructure.FuncLen), + ArgLen: uint8(v.Srv6BindingSid.EndpointBehaviorStructure.ArgLen), } } return result, nil default: - return nil, fmt.Errorf("unknown binding sid type %+v", v) + return nil, fmt.Errorf("unknown binding sid type %T", bsid.GetBsid()) } } // MarshalSRSegments marshals a slice of SR Policy Segment List -func MarshalSRSegments(segs []bgp.TunnelEncapSubTLVInterface) ([]*apb.Any, error) { - anyList := make([]*apb.Any, 0, len(segs)) +func MarshalSRSegments(segs []bgp.TunnelEncapSubTLVInterface) ([]*api.TunnelEncapSubTLVSRSegmentList_Segment, error) { + segments := make([]*api.TunnelEncapSubTLVSRSegmentList_Segment, 0, len(segs)) for _, seg := range segs { - var r proto.Message + var r api.TunnelEncapSubTLVSRSegmentList_Segment switch s := seg.(type) { case *bgp.SegmentTypeA: - r = &api.SegmentTypeA{ - Label: s.Label, - Flags: &api.SegmentFlags{ - VFlag: s.Flags&0x80 == 0x80, - AFlag: s.Flags&0x40 == 0x40, - SFlag: s.Flags&0x20 == 0x20, - BFlag: s.Flags&0x10 == 0x10, + r.Segment = &api.TunnelEncapSubTLVSRSegmentList_Segment_A{ + A: &api.SegmentTypeA{ + Label: s.Label, + Flags: &api.SegmentFlags{ + VFlag: s.Flags&0x80 == 0x80, + AFlag: s.Flags&0x40 == 0x40, + SFlag: s.Flags&0x20 == 0x20, + BFlag: s.Flags&0x10 == 0x10, + }, }, } case *bgp.SegmentTypeB: @@ -2669,72 +2740,67 @@ func MarshalSRSegments(segs []bgp.TunnelEncapSubTLVInterface) ([]*apb.Any, error ArgLen: uint32(s.SRv6EBS.ArgLen), } } - r = segment + r.Segment = &api.TunnelEncapSubTLVSRSegmentList_Segment_B{B: segment} default: // Unrecognize Segment type, skip it continue } - a, _ := apb.New(r) - anyList = append(anyList, a) + segments = append(segments, &r) } - return anyList, nil + return segments, nil } // UnmarshalSRSegments unmarshals SR Policy Segments slice of structs -func UnmarshalSRSegments(s []*apb.Any) ([]bgp.TunnelEncapSubTLVInterface, error) { +func UnmarshalSRSegments(s []*api.TunnelEncapSubTLVSRSegmentList_Segment) ([]bgp.TunnelEncapSubTLVInterface, error) { if len(s) == 0 { return nil, nil } segments := make([]bgp.TunnelEncapSubTLVInterface, len(s)) for i := 0; i < len(s); i++ { - value, err := s[i].UnmarshalNew() - if err != nil { - return nil, fmt.Errorf("failed to unmarshal SR Policy Segment: %s", err) - } - switch v := value.(type) { - case *api.SegmentTypeA: + switch v := s[i].GetSegment().(type) { + case *api.TunnelEncapSubTLVSRSegmentList_Segment_A: seg := &bgp.SegmentTypeA{ TunnelEncapSubTLV: bgp.TunnelEncapSubTLV{ Type: bgp.EncapSubTLVType(bgp.TypeA), Length: 6, }, - Label: v.Label, + Label: v.A.Label, } - if v.Flags.VFlag { + if v.A.Flags.VFlag { seg.Flags += 0x80 } - if v.Flags.AFlag { + if v.A.Flags.AFlag { seg.Flags += 0x40 } - if v.Flags.SFlag { + if v.A.Flags.SFlag { seg.Flags += 0x20 } - if v.Flags.BFlag { + if v.A.Flags.BFlag { seg.Flags += 0x10 } segments[i] = seg - case *api.SegmentTypeB: + case *api.TunnelEncapSubTLVSRSegmentList_Segment_B: seg := &bgp.SegmentTypeB{ TunnelEncapSubTLV: bgp.TunnelEncapSubTLV{ Type: bgp.EncapSubTLVType(bgp.TypeB), Length: 18, }, - SID: v.GetSid(), + SID: v.B.GetSid(), } - if v.Flags.VFlag { + if v.B.Flags.VFlag { seg.Flags += 0x80 } - if v.Flags.AFlag { + if v.B.Flags.AFlag { seg.Flags += 0x40 } - if v.Flags.SFlag { + if v.B.Flags.SFlag { seg.Flags += 0x20 } - if v.Flags.BFlag { + if v.B.Flags.BFlag { seg.Flags += 0x10 } - if v.EndpointBehaviorStructure != nil { - ebs := v.GetEndpointBehaviorStructure() + if v.B.EndpointBehaviorStructure != nil { + ebs := v.B.GetEndpointBehaviorStructure() seg.SRv6EBS = &bgp.SRv6EndpointBehaviorStructure{ Behavior: bgp.SRBehavior(ebs.Behavior), BlockLen: uint8(ebs.BlockLen), @@ -2759,12 +2825,9 @@ func UnmarshalPrefixSID(psid *api.PrefixSID) (*bgp.PathAttributePrefixSID, error TLVs: make([]bgp.PrefixSIDTLVInterface, 0), } for _, raw := range psid.Tlvs { - tlv, err := raw.UnmarshalNew() - if err != nil { - return nil, err - } - switch v := tlv.(type) { - case *api.SRv6L3ServiceTLV: + switch tlv := raw.GetTlv().(type) { + case *api.PrefixSID_TLV_L3Service: + v := tlv.L3Service tlvLength, tlvs, err := UnmarshalSubTLVs(v.SubTlvs) if err != nil { return nil, err @@ -2781,7 +2844,7 @@ func UnmarshalPrefixSID(psid *api.PrefixSID) (*bgp.PathAttributePrefixSID, error // Adding Service TLV to Path Attribute TLV slice. s.TLVs = append(s.TLVs, o) default: - return nil, fmt.Errorf("unknown or not implemented Prefix SID type: %+v", v) + return nil, fmt.Errorf("unknown or not implemented Prefix SID type: %+v", tlv) } } // Final Path Attribute Length is 3 bytes of the Path Attribute header longer @@ -2789,7 +2852,7 @@ func UnmarshalPrefixSID(psid *api.PrefixSID) (*bgp.PathAttributePrefixSID, error return s, nil } -func UnmarshalSubTLVs(stlvs map[uint32]*api.SRv6TLV) (uint16, []bgp.PrefixSIDTLVInterface, error) { +func UnmarshalSubTLVs(stlvs map[uint32]*api.SRv6SubTLVs) (uint16, []bgp.PrefixSIDTLVInterface, error) { p := make([]bgp.PrefixSIDTLVInterface, 0, len(stlvs)) l := uint16(0) // v.SubTlvs is a map by sub tlv type and the value is a slice of sub tlvs of the specific type @@ -2797,7 +2860,7 @@ func UnmarshalSubTLVs(stlvs map[uint32]*api.SRv6TLV) (uint16, []bgp.PrefixSIDTLV switch t { case 1: // Sub TLV Type 1 is SRv6 Informational Sub TLV - for _, stlvRaw := range tlv.Tlv { + for _, raw := range tlv.Tlvs { // Instantiating Information Sub TLV info := &bgp.SRv6InformationSubTLV{ SubTLV: bgp.SubTLV{ @@ -2805,11 +2868,7 @@ func UnmarshalSubTLVs(stlvs map[uint32]*api.SRv6TLV) (uint16, []bgp.PrefixSIDTLV }, SubSubTLVs: make([]bgp.PrefixSIDTLVInterface, 0), } - raw, err := stlvRaw.UnmarshalNew() - if err != nil { - return 0, nil, err - } - infoProto := raw.(*api.SRv6InformationSubTLV) + infoProto := raw.GetInformation() info.SID = make([]byte, len(infoProto.Sid)) copy(info.SID, infoProto.Sid) // TODO Once RFC is published add processing of flags @@ -2841,7 +2900,7 @@ func UnmarshalSubTLVs(stlvs map[uint32]*api.SRv6TLV) (uint16, []bgp.PrefixSIDTLV return l, p, nil } -func UnmarshalSubSubTLVs(stlvs map[uint32]*api.SRv6TLV) (uint16, []bgp.PrefixSIDTLVInterface, error) { +func UnmarshalSubSubTLVs(stlvs map[uint32]*api.SRv6SubSubTLVs) (uint16, []bgp.PrefixSIDTLVInterface, error) { p := make([]bgp.PrefixSIDTLVInterface, 0) l := uint16(0) // v.SubTlvs is a map by sub tlv type and the value is a slice of sub tlvs of the specific type @@ -2849,7 +2908,7 @@ func UnmarshalSubSubTLVs(stlvs map[uint32]*api.SRv6TLV) (uint16, []bgp.PrefixSID switch t { case 1: // Sub Sub TLV Type 1 is SRv6 Structure Sub Sub TLV - for _, stlvRaw := range tlv.Tlv { + for _, raw := range tlv.Tlvs { // Instantiating Information Sub TLV structure := &bgp.SRv6SIDStructureSubSubTLV{ SubSubTLV: bgp.SubSubTLV{ @@ -2857,11 +2916,7 @@ func UnmarshalSubSubTLVs(stlvs map[uint32]*api.SRv6TLV) (uint16, []bgp.PrefixSID Length: 6, }, } - raw, err := stlvRaw.UnmarshalNew() - if err != nil { - return 0, nil, err - } - structureProto := raw.(*api.SRv6StructureSubSubTLV) + structureProto := raw.GetStructure() structure.LocatorBlockLength = uint8(structureProto.LocatorBlockLength) structure.LocatorNodeLength = uint8(structureProto.LocatorNodeLength) structure.FunctionLength = uint8(structureProto.FunctionLength) diff --git a/pkg/apiutil/capability.go b/pkg/apiutil/capability.go index 502f8a8c0..c186286b0 100644 --- a/pkg/apiutil/capability.go +++ b/pkg/apiutil/capability.go @@ -20,8 +20,6 @@ import ( api "github.com/osrg/gobgp/v3/api" "github.com/osrg/gobgp/v3/pkg/packet/bgp" - proto "google.golang.org/protobuf/proto" - apb "google.golang.org/protobuf/types/known/anypb" ) func NewMultiProtocolCapability(a *bgp.CapMultiProtocol) *api.MultiProtocolCapability { @@ -129,43 +127,43 @@ func NewUnknownCapability(a *bgp.CapUnknown) *api.UnknownCapability { } } -func MarshalCapability(value bgp.ParameterCapabilityInterface) (*apb.Any, error) { - var m proto.Message +func MarshalCapability(value bgp.ParameterCapabilityInterface) (*api.Capability, error) { + var m api.Capability switch n := value.(type) { case *bgp.CapMultiProtocol: - m = NewMultiProtocolCapability(n) + m.Cap = &api.Capability_MultiProtocol{MultiProtocol: NewMultiProtocolCapability(n)} case *bgp.CapRouteRefresh: - m = NewRouteRefreshCapability(n) + m.Cap = &api.Capability_RouteRefresh{RouteRefresh: NewRouteRefreshCapability(n)} case *bgp.CapCarryingLabelInfo: - m = NewCarryingLabelInfoCapability(n) + m.Cap = &api.Capability_CarryingLabelInfo{CarryingLabelInfo: NewCarryingLabelInfoCapability(n)} case *bgp.CapExtendedNexthop: - m = NewExtendedNexthopCapability(n) + m.Cap = &api.Capability_ExtendedNexthop{ExtendedNexthop: NewExtendedNexthopCapability(n)} case *bgp.CapGracefulRestart: - m = NewGracefulRestartCapability(n) + m.Cap = &api.Capability_GracefulRestart{GracefulRestart: NewGracefulRestartCapability(n)} case *bgp.CapFourOctetASNumber: - m = NewFourOctetASNumberCapability(n) + m.Cap = &api.Capability_FourOctetAsn{FourOctetAsn: NewFourOctetASNumberCapability(n)} case *bgp.CapAddPath: - m = NewAddPathCapability(n) + m.Cap = &api.Capability_AddPath{AddPath: NewAddPathCapability(n)} case *bgp.CapEnhancedRouteRefresh: - m = NewEnhancedRouteRefreshCapability(n) + m.Cap = &api.Capability_EnhancedRouteRefresh{EnhancedRouteRefresh: NewEnhancedRouteRefreshCapability(n)} case *bgp.CapLongLivedGracefulRestart: - m = NewLongLivedGracefulRestartCapability(n) + m.Cap = &api.Capability_LongLivedGracefulRestart{LongLivedGracefulRestart: NewLongLivedGracefulRestartCapability(n)} case *bgp.CapRouteRefreshCisco: - m = NewRouteRefreshCiscoCapability(n) + m.Cap = &api.Capability_RouteRefreshCisco{RouteRefreshCisco: NewRouteRefreshCiscoCapability(n)} case *bgp.CapFQDN: - m = NewFQDNCapability(n) + m.Cap = &api.Capability_Fqdn{Fqdn: NewFQDNCapability(n)} case *bgp.CapSoftwareVersion: - m = NewSoftwareVersionCapability(n) + m.Cap = &api.Capability_SoftwareVersion{SoftwareVersion: NewSoftwareVersionCapability(n)} case *bgp.CapUnknown: - m = NewUnknownCapability(n) + m.Cap = &api.Capability_Unknown{Unknown: NewUnknownCapability(n)} default: return nil, fmt.Errorf("invalid capability type to marshal: %+v", value) } - return apb.New(m) + return &m, nil } -func MarshalCapabilities(values []bgp.ParameterCapabilityInterface) ([]*apb.Any, error) { - caps := make([]*apb.Any, 0, len(values)) +func MarshalCapabilities(values []bgp.ParameterCapabilityInterface) ([]*api.Capability, error) { + caps := make([]*api.Capability, 0, len(values)) for _, value := range values { a, err := MarshalCapability(value) if err != nil { @@ -176,19 +174,17 @@ func MarshalCapabilities(values []bgp.ParameterCapabilityInterface) ([]*apb.Any, return caps, nil } -func unmarshalCapability(a *apb.Any) (bgp.ParameterCapabilityInterface, error) { - value, err := a.UnmarshalNew() - if err != nil { - return nil, fmt.Errorf("failed to unmarshal capability: %s", err) - } - switch a := value.(type) { - case *api.MultiProtocolCapability: +func unmarshalCapability(a *api.Capability) (bgp.ParameterCapabilityInterface, error) { + switch cap := a.GetCap().(type) { + case *api.Capability_MultiProtocol: + a := cap.MultiProtocol return bgp.NewCapMultiProtocol(ToRouteFamily(a.Family)), nil - case *api.RouteRefreshCapability: + case *api.Capability_RouteRefresh: return bgp.NewCapRouteRefresh(), nil - case *api.CarryingLabelInfoCapability: + case *api.Capability_CarryingLabelInfo: return bgp.NewCapCarryingLabelInfo(), nil - case *api.ExtendedNexthopCapability: + case *api.Capability_ExtendedNexthop: + a := cap.ExtendedNexthop tuples := make([]*bgp.CapExtendedNexthopTuple, 0, len(a.Tuples)) for _, t := range a.Tuples { var nhAfi uint16 @@ -203,7 +199,8 @@ func unmarshalCapability(a *apb.Any) (bgp.ParameterCapabilityInterface, error) { tuples = append(tuples, bgp.NewCapExtendedNexthopTuple(ToRouteFamily(t.NlriFamily), nhAfi)) } return bgp.NewCapExtendedNexthop(tuples), nil - case *api.GracefulRestartCapability: + case *api.Capability_GracefulRestart: + a := cap.GracefulRestart tuples := make([]*bgp.CapGracefulRestartTuple, 0, len(a.Tuples)) for _, t := range a.Tuples { var forward bool @@ -221,17 +218,20 @@ func unmarshalCapability(a *apb.Any) (bgp.ParameterCapabilityInterface, error) { notification = true } return bgp.NewCapGracefulRestart(restarting, notification, uint16(a.Time), tuples), nil - case *api.FourOctetASNCapability: + case *api.Capability_FourOctetAsn: + a := cap.FourOctetAsn return bgp.NewCapFourOctetASNumber(a.Asn), nil - case *api.AddPathCapability: + case *api.Capability_AddPath: + a := cap.AddPath tuples := make([]*bgp.CapAddPathTuple, 0, len(a.Tuples)) for _, t := range a.Tuples { tuples = append(tuples, bgp.NewCapAddPathTuple(ToRouteFamily(t.Family), bgp.BGPAddPathMode(t.Mode))) } return bgp.NewCapAddPath(tuples), nil - case *api.EnhancedRouteRefreshCapability: + case *api.Capability_EnhancedRouteRefresh: return bgp.NewCapEnhancedRouteRefresh(), nil - case *api.LongLivedGracefulRestartCapability: + case *api.Capability_LongLivedGracefulRestart: + a := cap.LongLivedGracefulRestart tuples := make([]*bgp.CapLongLivedGracefulRestartTuple, 0, len(a.Tuples)) for _, t := range a.Tuples { var forward bool @@ -241,19 +241,22 @@ func unmarshalCapability(a *apb.Any) (bgp.ParameterCapabilityInterface, error) { tuples = append(tuples, bgp.NewCapLongLivedGracefulRestartTuple(ToRouteFamily(t.Family), forward, t.Time)) } return bgp.NewCapLongLivedGracefulRestart(tuples), nil - case *api.RouteRefreshCiscoCapability: + case *api.Capability_RouteRefreshCisco: return bgp.NewCapRouteRefreshCisco(), nil - case *api.FqdnCapability: + case *api.Capability_Fqdn: + a := cap.Fqdn return bgp.NewCapFQDN(a.HostName, a.DomainName), nil - case *api.SoftwareVersionCapability: + case *api.Capability_SoftwareVersion: + a := cap.SoftwareVersion return bgp.NewCapSoftwareVersion(a.SoftwareVersion), nil - case *api.UnknownCapability: + case *api.Capability_Unknown: + a := cap.Unknown return bgp.NewCapUnknown(bgp.BGPCapabilityCode(a.Code), a.Value), nil } - return nil, fmt.Errorf("invalid capability type to unmarshal: %s", a.TypeUrl) + return nil, fmt.Errorf("invalid capability type to unmarshal: %T", a.GetCap()) } -func UnmarshalCapabilities(values []*apb.Any) ([]bgp.ParameterCapabilityInterface, error) { +func UnmarshalCapabilities(values []*api.Capability) ([]bgp.ParameterCapabilityInterface, error) { caps := make([]bgp.ParameterCapabilityInterface, 0, len(values)) for _, value := range values { c, err := unmarshalCapability(value) diff --git a/pkg/config/config.go b/pkg/config/config.go index c6555a68f..a66e7ccaf 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -3,8 +3,6 @@ package config import ( "context" - apb "google.golang.org/protobuf/types/known/anypb" - api "github.com/osrg/gobgp/v3/api" "github.com/osrg/gobgp/v3/internal/pkg/table" "github.com/osrg/gobgp/v3/pkg/apiutil" @@ -26,8 +24,8 @@ func WatchConfigFile(configFile, configType string, callBack func()) { oc.WatchConfigFile(configFile, configType, callBack) } -func marshalRouteTargets(l []string) ([]*apb.Any, error) { - rtList := make([]*apb.Any, 0, len(l)) +func marshalRouteTargets(l []string) ([]*api.RouteTarget, error) { + rtList := make([]*api.RouteTarget, 0, len(l)) for _, rtString := range l { rt, err := bgp.ParseRouteTarget(rtString) if err != nil { diff --git a/pkg/server/grpc_server.go b/pkg/server/grpc_server.go index 5250139fd..dbb550690 100644 --- a/pkg/server/grpc_server.go +++ b/pkg/server/grpc_server.go @@ -31,7 +31,6 @@ import ( "github.com/dgryski/go-farm" "google.golang.org/grpc" - apb "google.golang.org/protobuf/types/known/anypb" "google.golang.org/protobuf/types/known/emptypb" tspb "google.golang.org/protobuf/types/known/timestamppb" @@ -166,7 +165,7 @@ func newValidationFromTableStruct(v *table.Validation) *api.Validation { } } -func toPathAPI(binNlri []byte, binPattrs [][]byte, anyNlri *apb.Any, anyPattrs []*apb.Any, path *table.Path, v *table.Validation) *api.Path { +func toPathAPI(binNlri []byte, binPattrs [][]byte, anyNlri *api.NLRI, anyPattrs []*api.Attribute, path *table.Path, v *table.Validation) *api.Path { nlri := path.GetNlri() p := &api.Path{ Nlri: anyNlri, @@ -209,8 +208,8 @@ func eorToPathAPI(path *table.Path) *api.Path { func toPathApi(path *table.Path, v *table.Validation, onlyBinary, nlriBinary, attributeBinary bool) *api.Path { var ( - anyNlri *apb.Any - anyPattrs []*apb.Any + anyNlri *api.NLRI + anyPattrs []*api.Attribute ) nlri := path.GetNlri() if !onlyBinary { From 8ca7a1086dcdee3ad17db7fb7fb0885236ea836c Mon Sep 17 00:00:00 2001 From: Tuetuopay Date: Fri, 14 Feb 2025 18:47:12 +0100 Subject: [PATCH 3/4] tests: update tests for proto.Any-less API --- pkg/apiutil/attribute_test.go | 1565 ++++++++++++-------------------- pkg/apiutil/capability_test.go | 34 +- pkg/metrics/metrics_test.go | 24 +- pkg/server/grpc_server_test.go | 29 +- pkg/server/server_test.go | 186 ++-- 5 files changed, 691 insertions(+), 1147 deletions(-) diff --git a/pkg/apiutil/attribute_test.go b/pkg/apiutil/attribute_test.go index a0731061b..a33daaf81 100644 --- a/pkg/apiutil/attribute_test.go +++ b/pkg/apiutil/attribute_test.go @@ -21,7 +21,6 @@ import ( "testing" "google.golang.org/protobuf/proto" - apb "google.golang.org/protobuf/types/known/anypb" api "github.com/osrg/gobgp/v3/api" "github.com/osrg/gobgp/v3/pkg/packet/bgp" @@ -34,8 +33,7 @@ func Test_OriginAttribute(t *testing.T) { input := &api.OriginAttribute{ Origin: 0, // IGP } - a, err := apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_Origin{Origin: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) @@ -59,16 +57,12 @@ func Test_AsPathAttribute(t *testing.T) { }, } - a, err := apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_AsPath{AsPath: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewAsPathAttributeFromNative(n.(*bgp.PathAttributeAsPath)) - assert.Equal(2, len(output.Segments)) - for i := 0; i < 2; i++ { - assert.True(proto.Equal(input.Segments[i], output.Segments[i])) - } + assert.True(proto.Equal(input, output)) } func Test_NextHopAttribute(t *testing.T) { @@ -78,13 +72,12 @@ func Test_NextHopAttribute(t *testing.T) { NextHop: "192.168.0.1", } - a, err := apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_NextHop{NextHop: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewNextHopAttributeFromNative(n.(*bgp.PathAttributeNextHop)) - assert.Equal(input.NextHop, output.NextHop) + assert.True(proto.Equal(input, output)) } func Test_MultiExitDiscAttribute(t *testing.T) { @@ -94,13 +87,12 @@ func Test_MultiExitDiscAttribute(t *testing.T) { Med: 100, } - a, err := apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MultiExitDisc{MultiExitDisc: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMultiExitDiscAttributeFromNative(n.(*bgp.PathAttributeMultiExitDisc)) - assert.Equal(input.Med, output.Med) + assert.True(proto.Equal(input, output)) } func Test_LocalPrefAttribute(t *testing.T) { @@ -110,13 +102,12 @@ func Test_LocalPrefAttribute(t *testing.T) { LocalPref: 100, } - a, err := apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_LocalPref{LocalPref: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewLocalPrefAttributeFromNative(n.(*bgp.PathAttributeLocalPref)) - assert.Equal(input.LocalPref, output.LocalPref) + assert.True(proto.Equal(input, output)) } func Test_AtomicAggregateAttribute(t *testing.T) { @@ -124,8 +115,7 @@ func Test_AtomicAggregateAttribute(t *testing.T) { input := &api.AtomicAggregateAttribute{} - a, err := apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_AtomicAggregate{AtomicAggregate: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) @@ -142,14 +132,12 @@ func Test_AggregatorAttribute(t *testing.T) { Address: "1.1.1.1", } - a, err := apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_Aggregator{Aggregator: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewAggregatorAttributeFromNative(n.(*bgp.PathAttributeAggregator)) - assert.Equal(input.Asn, output.Asn) - assert.Equal(input.Address, output.Address) + assert.True(proto.Equal(input, output)) } func Test_CommunitiesAttribute(t *testing.T) { @@ -159,13 +147,12 @@ func Test_CommunitiesAttribute(t *testing.T) { Communities: []uint32{100, 200}, } - a, err := apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_Communities{Communities: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewCommunitiesAttributeFromNative(n.(*bgp.PathAttributeCommunities)) - assert.Equal(input.Communities, output.Communities) + assert.True(proto.Equal(input, output)) } func Test_OriginatorIdAttribute(t *testing.T) { @@ -175,13 +162,12 @@ func Test_OriginatorIdAttribute(t *testing.T) { Id: "1.1.1.1", } - a, err := apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_OriginatorId{OriginatorId: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewOriginatorIdAttributeFromNative(n.(*bgp.PathAttributeOriginatorId)) - assert.Equal(input.Id, output.Id) + assert.True(proto.Equal(input, output)) } func Test_ClusterListAttribute(t *testing.T) { @@ -191,32 +177,27 @@ func Test_ClusterListAttribute(t *testing.T) { Ids: []string{"1.1.1.1", "2.2.2.2"}, } - a, err := apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_ClusterList{ClusterList: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewClusterListAttributeFromNative(n.(*bgp.PathAttributeClusterList)) - assert.Equal(input.Ids, output.Ids) + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_IPv4_UC(t *testing.T) { assert := assert.New(t) - nlris := make([]*apb.Any, 0, 2) - a, err := apb.New(&api.IPAddressPrefix{ - PrefixLen: 24, - Prefix: "192.168.101.0", - }) - assert.Nil(err) - nlris = append(nlris, a) - a, err = apb.New(&api.IPAddressPrefix{ - PrefixLen: 24, - Prefix: "192.168.201.0", - }) - assert.Nil(err) - nlris = append(nlris, a) - + nlris := []*api.NLRI{ + {Nlri: &api.NLRI_Prefix{Prefix: &api.IPAddressPrefix{ + PrefixLen: 24, + Prefix: "192.168.101.0", + }}}, + {Nlri: &api.NLRI_Prefix{Prefix: &api.IPAddressPrefix{ + PrefixLen: 24, + Prefix: "192.168.201.0", + }}}, + } input := &api.MpReachNLRIAttribute{ Family: &api.Family{ Afi: api.Family_AFI_IP, @@ -226,40 +207,27 @@ func Test_MpReachNLRIAttribute_IPv4_UC(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(2, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_IPv6_UC(t *testing.T) { assert := assert.New(t) - nlris := make([]*apb.Any, 0, 2) - a, err := apb.New(&api.IPAddressPrefix{ - PrefixLen: 64, - Prefix: "2001:db8:1::", - }) - assert.Nil(err) - nlris = append(nlris, a) - a, err = apb.New(&api.IPAddressPrefix{ - PrefixLen: 64, - Prefix: "2001:db8:2::", - }) - assert.Nil(err) - nlris = append(nlris, a) - + nlris := []*api.NLRI{ + {Nlri: &api.NLRI_Prefix{Prefix: &api.IPAddressPrefix{ + PrefixLen: 64, + Prefix: "2001:db8:1::", + }}}, + {Nlri: &api.NLRI_Prefix{Prefix: &api.IPAddressPrefix{ + PrefixLen: 64, + Prefix: "2001:db8:2::", + }}}, + } input := &api.MpReachNLRIAttribute{ Family: &api.Family{ Afi: api.Family_AFI_IP6, @@ -269,42 +237,29 @@ func Test_MpReachNLRIAttribute_IPv6_UC(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(2, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_IPv4_MPLS(t *testing.T) { assert := assert.New(t) - nlris := make([]*apb.Any, 0, 2) - a, err := apb.New(&api.LabeledIPAddressPrefix{ - Labels: []uint32{100}, - PrefixLen: 24, - Prefix: "192.168.101.0", - }) - assert.Nil(err) - nlris = append(nlris, a) - a, err = apb.New(&api.LabeledIPAddressPrefix{ - Labels: []uint32{200}, - PrefixLen: 24, - Prefix: "192.168.201.0", - }) - assert.Nil(err) - nlris = append(nlris, a) - + nlris := []*api.NLRI{ + {Nlri: &api.NLRI_LabeledPrefix{LabeledPrefix: &api.LabeledIPAddressPrefix{ + Labels: []uint32{100}, + PrefixLen: 24, + Prefix: "192.168.101.0", + }}}, + {Nlri: &api.NLRI_LabeledPrefix{LabeledPrefix: &api.LabeledIPAddressPrefix{ + Labels: []uint32{200}, + PrefixLen: 24, + Prefix: "192.168.201.0", + }}}, + } input := &api.MpReachNLRIAttribute{ Family: &api.Family{ Afi: api.Family_AFI_IP, @@ -314,42 +269,29 @@ func Test_MpReachNLRIAttribute_IPv4_MPLS(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(2, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_IPv6_MPLS(t *testing.T) { assert := assert.New(t) - nlris := make([]*apb.Any, 0, 2) - a, err := apb.New(&api.LabeledIPAddressPrefix{ - Labels: []uint32{100}, - PrefixLen: 64, - Prefix: "2001:db8:1::", - }) - assert.Nil(err) - nlris = append(nlris, a) - a, err = apb.New(&api.LabeledIPAddressPrefix{ - Labels: []uint32{200}, - PrefixLen: 64, - Prefix: "2001:db8:2::", - }) - assert.Nil(err) - nlris = append(nlris, a) - + nlris := []*api.NLRI{ + {Nlri: &api.NLRI_LabeledPrefix{LabeledPrefix: &api.LabeledIPAddressPrefix{ + Labels: []uint32{100}, + PrefixLen: 64, + Prefix: "2001:db8:1::", + }}}, + {Nlri: &api.NLRI_LabeledPrefix{LabeledPrefix: &api.LabeledIPAddressPrefix{ + Labels: []uint32{200}, + PrefixLen: 64, + Prefix: "2001:db8:2::", + }}}, + } input := &api.MpReachNLRIAttribute{ Family: &api.Family{ Afi: api.Family_AFI_IP6, @@ -359,38 +301,25 @@ func Test_MpReachNLRIAttribute_IPv6_MPLS(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(2, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_IPv4_ENCAP(t *testing.T) { assert := assert.New(t) - nlris := make([]*apb.Any, 0, 2) - a, err := apb.New(&api.EncapsulationNLRI{ - Address: "192.168.101.1", - }) - assert.Nil(err) - nlris = append(nlris, a) - a, err = apb.New(&api.EncapsulationNLRI{ - Address: "192.168.201.1", - }) - assert.Nil(err) - nlris = append(nlris, a) - + nlris := []*api.NLRI{ + {Nlri: &api.NLRI_Encapsulation{Encapsulation: &api.EncapsulationNLRI{ + Address: "192.168.101.1", + }}}, + {Nlri: &api.NLRI_Encapsulation{Encapsulation: &api.EncapsulationNLRI{ + Address: "192.168.201.1", + }}}, + } input := &api.MpReachNLRIAttribute{ Family: &api.Family{ Afi: api.Family_AFI_IP, @@ -400,38 +329,25 @@ func Test_MpReachNLRIAttribute_IPv4_ENCAP(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(2, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_IPv6_ENCAP(t *testing.T) { assert := assert.New(t) - nlris := make([]*apb.Any, 0, 2) - a, err := apb.New(&api.EncapsulationNLRI{ - Address: "2001:db8:1::1", - }) - assert.Nil(err) - nlris = append(nlris, a) - a, err = apb.New(&api.EncapsulationNLRI{ - Address: "2001:db8:2::1", - }) - assert.Nil(err) - nlris = append(nlris, a) - + nlris := []*api.NLRI{ + {Nlri: &api.NLRI_Encapsulation{Encapsulation: &api.EncapsulationNLRI{ + Address: "2001:db8:1::1", + }}}, + {Nlri: &api.NLRI_Encapsulation{Encapsulation: &api.EncapsulationNLRI{ + Address: "2001:db8:2::1", + }}}, + } input := &api.MpReachNLRIAttribute{ Family: &api.Family{ Afi: api.Family_AFI_IP6, @@ -441,42 +357,30 @@ func Test_MpReachNLRIAttribute_IPv6_ENCAP(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(2, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_VPLS(t *testing.T) { assert := assert.New(t) - nlris := make([]*apb.Any, 0, 1) - rd, err := apb.New(&api.RouteDistinguisherTwoOctetASN{ - Admin: 65000, - Assigned: 100, - }) - assert.Nil(err) - a, err := apb.New(&api.VPLSNLRI{ + rd := &api.RouteDistinguisher{Rd: &api.RouteDistinguisher_TwoOctetAsn{ + TwoOctetAsn: &api.RouteDistinguisherTwoOctetASN{ + Admin: 65000, + Assigned: 100, + }, + }} + nlris := []*api.NLRI{{Nlri: &api.NLRI_Vpls{Vpls: &api.VPLSNLRI{ Rd: rd, VeId: 101, VeBlockOffset: 100, VeBlockSize: 10, LabelBlockBase: 1000, - }) - assert.Nil(err) - nlris = append(nlris, a) - + }}}} input := &api.MpReachNLRIAttribute{ Family: &api.Family{ Afi: api.Family_AFI_L2VPN, @@ -486,45 +390,34 @@ func Test_MpReachNLRIAttribute_VPLS(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_EVPN_AD_Route(t *testing.T) { assert := assert.New(t) - nlris := make([]*apb.Any, 0, 1) - rd, err := apb.New(&api.RouteDistinguisherTwoOctetASN{ - Admin: 65000, - Assigned: 100, - }) - assert.Nil(err) - esi := &api.EthernetSegmentIdentifier{ - Type: 0, - Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9}, - } - a, err := apb.New(&api.EVPNEthernetAutoDiscoveryRoute{ - Rd: rd, - Esi: esi, - EthernetTag: 100, - Label: 200, - }) - assert.Nil(err) - nlris = append(nlris, a) - + rd := &api.RouteDistinguisher{Rd: &api.RouteDistinguisher_TwoOctetAsn{ + TwoOctetAsn: &api.RouteDistinguisherTwoOctetASN{ + Admin: 65000, + Assigned: 100, + }, + }} + nlris := []*api.NLRI{ + {Nlri: &api.NLRI_EvpnEthernetAd{EvpnEthernetAd: &api.EVPNEthernetAutoDiscoveryRoute{ + Rd: rd, + Esi: &api.EthernetSegmentIdentifier{ + Type: 0, + Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9}, + }, + EthernetTag: 100, + Label: 200, + }}}, + } input := &api.MpReachNLRIAttribute{ Family: &api.Family{ Afi: api.Family_AFI_L2VPN, @@ -534,47 +427,36 @@ func Test_MpReachNLRIAttribute_EVPN_AD_Route(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_EVPN_MAC_IP_Route(t *testing.T) { assert := assert.New(t) - nlris := make([]*apb.Any, 0, 1) - rd, err := apb.New(&api.RouteDistinguisherIPAddress{ - Admin: "1.1.1.1", - Assigned: 100, - }) - assert.Nil(err) - esi := &api.EthernetSegmentIdentifier{ - Type: 0, - Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9}, - } - a, err := apb.New(&api.EVPNMACIPAdvertisementRoute{ - Rd: rd, - Esi: esi, - EthernetTag: 100, - MacAddress: "aa:bb:cc:dd:ee:ff", - IpAddress: "192.168.101.1", - Labels: []uint32{200}, - }) - assert.Nil(err) - nlris = append(nlris, a) - + rd := &api.RouteDistinguisher{Rd: &api.RouteDistinguisher_IpAddress{ + IpAddress: &api.RouteDistinguisherIPAddress{ + Admin: "1.1.1.1", + Assigned: 100, + }, + }} + nlris := []*api.NLRI{ + {Nlri: &api.NLRI_EvpnMacadv{EvpnMacadv: &api.EVPNMACIPAdvertisementRoute{ + Rd: rd, + Esi: &api.EthernetSegmentIdentifier{ + Type: 0, + Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9}, + }, + EthernetTag: 100, + MacAddress: "aa:bb:cc:dd:ee:ff", + IpAddress: "192.168.101.1", + Labels: []uint32{200}, + }}}, + } input := &api.MpReachNLRIAttribute{ Family: &api.Family{ Afi: api.Family_AFI_L2VPN, @@ -584,40 +466,30 @@ func Test_MpReachNLRIAttribute_EVPN_MAC_IP_Route(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_EVPN_MC_Route(t *testing.T) { assert := assert.New(t) - nlris := make([]*apb.Any, 0, 1) - rd, err := apb.New(&api.RouteDistinguisherFourOctetASN{ - Admin: 65000, - Assigned: 100, - }) - assert.Nil(err) - a, err := apb.New(&api.EVPNInclusiveMulticastEthernetTagRoute{ - Rd: rd, - EthernetTag: 100, - IpAddress: "192.168.101.1", - }) - assert.Nil(err) - nlris = append(nlris, a) - + rd := &api.RouteDistinguisher{Rd: &api.RouteDistinguisher_FourOctetAsn{ + FourOctetAsn: &api.RouteDistinguisherFourOctetASN{ + Admin: 65000, + Assigned: 100, + }, + }} + nlris := []*api.NLRI{ + {Nlri: &api.NLRI_EvpnMulticast{EvpnMulticast: &api.EVPNInclusiveMulticastEthernetTagRoute{ + Rd: rd, + EthernetTag: 100, + IpAddress: "192.168.101.1", + }}}, + } input := &api.MpReachNLRIAttribute{ Family: &api.Family{ Afi: api.Family_AFI_L2VPN, @@ -627,44 +499,33 @@ func Test_MpReachNLRIAttribute_EVPN_MC_Route(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_EVPN_ES_Route(t *testing.T) { assert := assert.New(t) - nlris := make([]*apb.Any, 0, 1) - rd, err := apb.New(&api.RouteDistinguisherIPAddress{ - Admin: "1.1.1.1", - Assigned: 100, - }) - assert.Nil(err) - esi := &api.EthernetSegmentIdentifier{ - Type: 0, - Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9}, - } - a, err := apb.New(&api.EVPNEthernetSegmentRoute{ - Rd: rd, - Esi: esi, - IpAddress: "192.168.101.1", - }) - assert.Nil(err) - nlris = append(nlris, a) - + rd := &api.RouteDistinguisher{Rd: &api.RouteDistinguisher_IpAddress{ + IpAddress: &api.RouteDistinguisherIPAddress{ + Admin: "1.1.1.1", + Assigned: 100, + }, + }} + nlris := []*api.NLRI{ + {Nlri: &api.NLRI_EvpnEthernetSegment{EvpnEthernetSegment: &api.EVPNEthernetSegmentRoute{ + Rd: rd, + Esi: &api.EthernetSegmentIdentifier{ + Type: 0, + Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9}, + }, + IpAddress: "192.168.101.1", + }}}, + } input := &api.MpReachNLRIAttribute{ Family: &api.Family{ Afi: api.Family_AFI_L2VPN, @@ -674,48 +535,37 @@ func Test_MpReachNLRIAttribute_EVPN_ES_Route(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_EVPN_Prefix_Route(t *testing.T) { assert := assert.New(t) - nlris := make([]*apb.Any, 0, 1) - rd, err := apb.New(&api.RouteDistinguisherIPAddress{ - Admin: "1.1.1.1", - Assigned: 100, - }) - assert.Nil(err) - esi := &api.EthernetSegmentIdentifier{ - Type: 0, - Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9}, - } - a, err := apb.New(&api.EVPNIPPrefixRoute{ - Rd: rd, - Esi: esi, - EthernetTag: 100, - IpPrefixLen: 24, - IpPrefix: "192.168.101.0", - Label: 200, - GwAddress: "172.16.101.1", - }) - assert.Nil(err) - nlris = append(nlris, a) - + rd := &api.RouteDistinguisher{Rd: &api.RouteDistinguisher_IpAddress{ + IpAddress: &api.RouteDistinguisherIPAddress{ + Admin: "1.1.1.1", + Assigned: 100, + }, + }} + nlris := []*api.NLRI{ + {Nlri: &api.NLRI_EvpnIpPrefix{EvpnIpPrefix: &api.EVPNIPPrefixRoute{ + Rd: rd, + Esi: &api.EthernetSegmentIdentifier{ + Type: 0, + Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9}, + }, + EthernetTag: 100, + IpPrefixLen: 24, + IpPrefix: "192.168.101.0", + Label: 200, + GwAddress: "172.16.101.1", + }}}, + } input := &api.MpReachNLRIAttribute{ Family: &api.Family{ Afi: api.Family_AFI_L2VPN, @@ -725,41 +575,31 @@ func Test_MpReachNLRIAttribute_EVPN_Prefix_Route(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_IPv4_VPN(t *testing.T) { assert := assert.New(t) - nlris := make([]*apb.Any, 0, 1) - rd, err := apb.New(&api.RouteDistinguisherIPAddress{ - Admin: "1.1.1.1", - Assigned: 100, - }) - assert.Nil(err) - a, err := apb.New(&api.LabeledVPNIPAddressPrefix{ - Labels: []uint32{100, 200}, - Rd: rd, - PrefixLen: 24, - Prefix: "192.168.101.0", - }) - assert.Nil(err) - nlris = append(nlris, a) - + rd := &api.RouteDistinguisher{Rd: &api.RouteDistinguisher_IpAddress{ + IpAddress: &api.RouteDistinguisherIPAddress{ + Admin: "1.1.1.1", + Assigned: 100, + }, + }} + nlris := []*api.NLRI{{Nlri: &api.NLRI_LabeledVpnIpPrefix{ + LabeledVpnIpPrefix: &api.LabeledVPNIPAddressPrefix{ + Labels: []uint32{100, 200}, + Rd: rd, + PrefixLen: 24, + Prefix: "192.168.101.0", + }, + }}} input := &api.MpReachNLRIAttribute{ Family: &api.Family{ Afi: api.Family_AFI_IP, @@ -769,41 +609,31 @@ func Test_MpReachNLRIAttribute_IPv4_VPN(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_IPv6_VPN(t *testing.T) { assert := assert.New(t) - nlris := make([]*apb.Any, 0, 1) - rd, err := apb.New(&api.RouteDistinguisherIPAddress{ - Admin: "1.1.1.1", - Assigned: 100, - }) - assert.Nil(err) - a, err := apb.New(&api.LabeledVPNIPAddressPrefix{ - Labels: []uint32{100, 200}, - Rd: rd, - PrefixLen: 64, - Prefix: "2001:db8:1::", - }) - assert.Nil(err) - nlris = append(nlris, a) - + rd := &api.RouteDistinguisher{Rd: &api.RouteDistinguisher_IpAddress{ + IpAddress: &api.RouteDistinguisherIPAddress{ + Admin: "1.1.1.1", + Assigned: 100, + }, + }} + nlris := []*api.NLRI{{Nlri: &api.NLRI_LabeledVpnIpPrefix{ + LabeledVpnIpPrefix: &api.LabeledVPNIPAddressPrefix{ + Labels: []uint32{100, 200}, + Rd: rd, + PrefixLen: 64, + Prefix: "2001:db8:1::", + }, + }}} input := &api.MpReachNLRIAttribute{ Family: &api.Family{ Afi: api.Family_AFI_IP6, @@ -813,41 +643,31 @@ func Test_MpReachNLRIAttribute_IPv6_VPN(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_RTC_UC(t *testing.T) { assert := assert.New(t) - nlris := make([]*apb.Any, 0, 1) - rt, err := apb.New(&api.IPv4AddressSpecificExtended{ - IsTransitive: true, - SubType: 0x02, // Route Target - Address: "1.1.1.1", - LocalAdmin: 100, - }) - assert.Nil(err) - a, err := apb.New(&api.RouteTargetMembershipNLRI{ - Asn: 65000, - Rt: rt, - }) - assert.Nil(err) - nlris = append(nlris, a) - + rt := &api.RouteTarget{Rt: &api.RouteTarget_Ipv4AddressSpecific{ + Ipv4AddressSpecific: &api.IPv4AddressSpecificExtended{ + IsTransitive: true, + SubType: 0x02, // Route Target + Address: "1.1.1.1", + LocalAdmin: 100, + }, + }} + nlris := []*api.NLRI{{Nlri: &api.NLRI_RouteTargetMembership{ + RouteTargetMembership: &api.RouteTargetMembershipNLRI{ + Asn: 65000, + Rt: rt, + }, + }}} input := &api.MpReachNLRIAttribute{ Family: &api.Family{ Afi: api.Family_AFI_IP, @@ -857,60 +677,41 @@ func Test_MpReachNLRIAttribute_RTC_UC(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_FS_IPv4_UC(t *testing.T) { assert := assert.New(t) - rules := make([]*apb.Any, 0, 3) - rule, err := apb.New(&api.FlowSpecIPPrefix{ - Type: 1, // Destination Prefix - PrefixLen: 24, - Prefix: "192.168.101.0", - }) - assert.Nil(err) - rules = append(rules, rule) - rule, err = apb.New(&api.FlowSpecIPPrefix{ - Type: 2, // Source Prefix - PrefixLen: 24, - Prefix: "192.168.201.0", - }) - assert.Nil(err) - rules = append(rules, rule) - rule, err = apb.New(&api.FlowSpecComponent{ - Type: 3, // IP Protocol - Items: []*api.FlowSpecComponentItem{ - { - Op: 0x80 | 0x01, // End, EQ - Value: 6, // TCP + rules := []*api.FlowSpecRule{ + {Rule: &api.FlowSpecRule_IpPrefix{IpPrefix: &api.FlowSpecIPPrefix{ + Type: 1, // Destination Prefix + PrefixLen: 24, + Prefix: "192.168.101.0", + }}}, + {Rule: &api.FlowSpecRule_IpPrefix{IpPrefix: &api.FlowSpecIPPrefix{ + Type: 2, // Source Prefix + PrefixLen: 24, + Prefix: "192.168.201.0", + }}}, + {Rule: &api.FlowSpecRule_Component{Component: &api.FlowSpecComponent{ + Type: 3, // IP Protocol + Items: []*api.FlowSpecComponentItem{ + { + Op: 0x80 | 0x01, // End, EQ + Value: 6, // TCP + }, }, - }, - }) - assert.Nil(err) - rules = append(rules, rule) - - nlris := make([]*apb.Any, 0, 1) - a, err := apb.New(&api.FlowSpecNLRI{ + }}}, + } + nlris := []*api.NLRI{{Nlri: &api.NLRI_FlowSpec{FlowSpec: &api.FlowSpecNLRI{ Rules: rules, - }) - assert.Nil(err) - nlris = append(nlris, a) - + }}}} input := &api.MpReachNLRIAttribute{ Family: &api.Family{ Afi: api.Family_AFI_IP, @@ -920,66 +721,48 @@ func Test_MpReachNLRIAttribute_FS_IPv4_UC(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_FS_IPv4_VPN(t *testing.T) { assert := assert.New(t) - rd, err := apb.New(&api.RouteDistinguisherIPAddress{ - Admin: "1.1.1.1", - Assigned: 100, - }) - assert.Nil(err) - - rules := make([]*apb.Any, 0, 3) - rule, err := apb.New(&api.FlowSpecIPPrefix{ - Type: 1, // Destination Prefix - PrefixLen: 24, - Prefix: "192.168.101.0", - }) - assert.Nil(err) - rules = append(rules, rule) - rule, err = apb.New(&api.FlowSpecIPPrefix{ - Type: 2, // Source Prefix - PrefixLen: 24, - Prefix: "192.168.201.0", - }) - assert.Nil(err) - rules = append(rules, rule) - rule, err = apb.New(&api.FlowSpecComponent{ - Type: 3, // IP Protocol - Items: []*api.FlowSpecComponentItem{ - { - Op: 0x80 | 0x01, // End, EQ - Value: 6, // TCP - }, + rd := &api.RouteDistinguisher{Rd: &api.RouteDistinguisher_IpAddress{ + IpAddress: &api.RouteDistinguisherIPAddress{ + Admin: "1.1.1.1", + Assigned: 100, }, - }) - assert.Nil(err) - rules = append(rules, rule) - - nlris := make([]*apb.Any, 0, 1) - a, err := apb.New(&api.VPNFlowSpecNLRI{ + }} + rules := []*api.FlowSpecRule{ + {Rule: &api.FlowSpecRule_IpPrefix{IpPrefix: &api.FlowSpecIPPrefix{ + Type: 1, // Destination Prefix + PrefixLen: 24, + Prefix: "192.168.101.0", + }}}, + {Rule: &api.FlowSpecRule_IpPrefix{IpPrefix: &api.FlowSpecIPPrefix{ + Type: 2, // Source Prefix + PrefixLen: 24, + Prefix: "192.168.201.0", + }}}, + {Rule: &api.FlowSpecRule_Component{Component: &api.FlowSpecComponent{ + Type: 3, // IP Protocol + Items: []*api.FlowSpecComponentItem{ + { + Op: 0x80 | 0x01, // End, EQ + Value: 6, // TCP + }, + }, + }}}, + } + nlris := []*api.NLRI{{Nlri: &api.NLRI_VpnFlowSpec{VpnFlowSpec: &api.VPNFlowSpecNLRI{ Rd: rd, Rules: rules, - }) - assert.Nil(err) - nlris = append(nlris, a) + }}}} input := &api.MpReachNLRIAttribute{ Family: &api.Family{ @@ -990,59 +773,41 @@ func Test_MpReachNLRIAttribute_FS_IPv4_VPN(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_FS_IPv6_UC(t *testing.T) { assert := assert.New(t) - rules := make([]*apb.Any, 0, 3) - rule, err := apb.New(&api.FlowSpecIPPrefix{ - Type: 1, // Destination Prefix - PrefixLen: 64, - Prefix: "2001:db8:1::", - }) - assert.Nil(err) - rules = append(rules, rule) - rule, err = apb.New(&api.FlowSpecIPPrefix{ - Type: 2, // Source Prefix - PrefixLen: 64, - Prefix: "2001:db8:2::", - }) - assert.Nil(err) - rules = append(rules, rule) - rule, err = apb.New(&api.FlowSpecComponent{ - Type: 3, // Next Header - Items: []*api.FlowSpecComponentItem{ - { - Op: 0x80 | 0x01, // End, EQ - Value: 6, // TCP + rules := []*api.FlowSpecRule{ + {Rule: &api.FlowSpecRule_IpPrefix{IpPrefix: &api.FlowSpecIPPrefix{ + Type: 1, // Destination Prefix + PrefixLen: 64, + Prefix: "2001:db8:1::", + }}}, + {Rule: &api.FlowSpecRule_IpPrefix{IpPrefix: &api.FlowSpecIPPrefix{ + Type: 2, // Source Prefix + PrefixLen: 64, + Prefix: "2001:db8:2::", + }}}, + {Rule: &api.FlowSpecRule_Component{Component: &api.FlowSpecComponent{ + Type: 3, // Next Header + Items: []*api.FlowSpecComponentItem{ + { + Op: 0x80 | 0x01, // End, EQ + Value: 6, // TCP + }, }, - }, - }) - assert.Nil(err) - rules = append(rules, rule) - - nlris := make([]*apb.Any, 0, 1) - a, err := apb.New(&api.FlowSpecNLRI{ + }}}, + } + nlris := []*api.NLRI{{Nlri: &api.NLRI_FlowSpec{FlowSpec: &api.FlowSpecNLRI{ Rules: rules, - }) - assert.Nil(err) - nlris = append(nlris, a) + }}}} input := &api.MpReachNLRIAttribute{ Family: &api.Family{ @@ -1053,66 +818,48 @@ func Test_MpReachNLRIAttribute_FS_IPv6_UC(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_FS_IPv6_VPN(t *testing.T) { assert := assert.New(t) - rd, err := apb.New(&api.RouteDistinguisherIPAddress{ - Admin: "1.1.1.1", - Assigned: 100, - }) - assert.Nil(err) - - rules := make([]*apb.Any, 0, 3) - rule, err := apb.New(&api.FlowSpecIPPrefix{ - Type: 1, // Destination Prefix - PrefixLen: 64, - Prefix: "2001:db8:1::", - }) - assert.Nil(err) - rules = append(rules, rule) - rule, err = apb.New(&api.FlowSpecIPPrefix{ - Type: 2, // Source Prefix - PrefixLen: 64, - Prefix: "2001:db8:2::", - }) - assert.Nil(err) - rules = append(rules, rule) - rule, err = apb.New(&api.FlowSpecComponent{ - Type: 3, // Next Header - Items: []*api.FlowSpecComponentItem{ - { - Op: 0x80 | 0x01, // End, EQ - Value: 6, // TCP - }, + rd := &api.RouteDistinguisher{Rd: &api.RouteDistinguisher_IpAddress{ + IpAddress: &api.RouteDistinguisherIPAddress{ + Admin: "1.1.1.1", + Assigned: 100, }, - }) - assert.Nil(err) - rules = append(rules, rule) - - nlris := make([]*apb.Any, 0, 1) - a, err := apb.New(&api.VPNFlowSpecNLRI{ + }} + rules := []*api.FlowSpecRule{ + {Rule: &api.FlowSpecRule_IpPrefix{IpPrefix: &api.FlowSpecIPPrefix{ + Type: 1, // Destination Prefix + PrefixLen: 64, + Prefix: "2001:db8:1::", + }}}, + {Rule: &api.FlowSpecRule_IpPrefix{IpPrefix: &api.FlowSpecIPPrefix{ + Type: 2, // Source Prefix + PrefixLen: 64, + Prefix: "2001:db8:2::", + }}}, + {Rule: &api.FlowSpecRule_Component{Component: &api.FlowSpecComponent{ + Type: 3, // Next Header + Items: []*api.FlowSpecComponentItem{ + { + Op: 0x80 | 0x01, // End, EQ + Value: 6, // TCP + }, + }, + }}}, + } + nlris := []*api.NLRI{{Nlri: &api.NLRI_VpnFlowSpec{VpnFlowSpec: &api.VPNFlowSpecNLRI{ Rd: rd, Rules: rules, - }) - assert.Nil(err) - nlris = append(nlris, a) + }}}} input := &api.MpReachNLRIAttribute{ Family: &api.Family{ @@ -1123,64 +870,44 @@ func Test_MpReachNLRIAttribute_FS_IPv6_VPN(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_FS_L2_VPN(t *testing.T) { assert := assert.New(t) - rd, err := apb.New(&api.RouteDistinguisherIPAddress{ + rd := &api.RouteDistinguisher{Rd: &api.RouteDistinguisher_IpAddress{IpAddress: &api.RouteDistinguisherIPAddress{ Admin: "1.1.1.1", Assigned: 100, - }) - assert.Nil(err) - - rules := make([]*apb.Any, 0, 3) - rule, err := apb.New(&api.FlowSpecMAC{ - Type: 15, // Source MAC - Address: "aa:bb:cc:11:22:33", - }) - assert.Nil(err) - rules = append(rules, rule) - rule, err = apb.New(&api.FlowSpecMAC{ - Type: 16, // Destination MAC - Address: "dd:ee:ff:11:22:33", - }) - assert.Nil(err) - rules = append(rules, rule) - rule, err = apb.New(&api.FlowSpecComponent{ - Type: 21, // VLAN ID - Items: []*api.FlowSpecComponentItem{ - { - Op: 0x80 | 0x01, // End, EQ - Value: 100, + }}} + rules := []*api.FlowSpecRule{ + {Rule: &api.FlowSpecRule_Mac{Mac: &api.FlowSpecMAC{ + Type: 15, // Source MAC + Address: "aa:bb:cc:11:22:33", + }}}, + {Rule: &api.FlowSpecRule_Mac{Mac: &api.FlowSpecMAC{ + Type: 16, // Destination MAC + Address: "dd:ee:ff:11:22:33", + }}}, + {Rule: &api.FlowSpecRule_Component{Component: &api.FlowSpecComponent{ + Type: 21, // VLAN ID + Items: []*api.FlowSpecComponentItem{ + { + Op: 0x80 | 0x01, // End, EQ + Value: 100, + }, }, - }, - }) - assert.Nil(err) - rules = append(rules, rule) - - nlris := make([]*apb.Any, 0, 1) - a, err := apb.New(&api.VPNFlowSpecNLRI{ + }}}, + } + nlris := []*api.NLRI{{Nlri: &api.NLRI_VpnFlowSpec{VpnFlowSpec: &api.VPNFlowSpecNLRI{ Rd: rd, Rules: rules, - }) - assert.Nil(err) - nlris = append(nlris, a) + }}}} input := &api.MpReachNLRIAttribute{ Family: &api.Family{ @@ -1191,38 +918,25 @@ func Test_MpReachNLRIAttribute_FS_L2_VPN(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_MUPInterworkSegmentDiscoveryRoute(t *testing.T) { assert := assert.New(t) - nlris := make([]*apb.Any, 0, 1) - rd, err := apb.New(&api.RouteDistinguisherTwoOctetASN{ + rd := &api.RouteDistinguisher{Rd: &api.RouteDistinguisher_TwoOctetAsn{TwoOctetAsn: &api.RouteDistinguisherTwoOctetASN{ Admin: 65000, Assigned: 100, - }) - assert.Nil(err) - a, err := apb.New(&api.MUPInterworkSegmentDiscoveryRoute{ + }}} + nlris := []*api.NLRI{{Nlri: &api.NLRI_MupInterworkSegmentDiscovery{MupInterworkSegmentDiscovery: &api.MUPInterworkSegmentDiscoveryRoute{ Rd: rd, Prefix: "10.0.0.0/24", - }) - assert.Nil(err) - nlris = append(nlris, a) + }}}} input := &api.MpReachNLRIAttribute{ Family: &api.Family{ @@ -1233,38 +947,25 @@ func Test_MpReachNLRIAttribute_MUPInterworkSegmentDiscoveryRoute(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_MUPDirectSegmentDiscoveryRoute(t *testing.T) { assert := assert.New(t) - nlris := make([]*apb.Any, 0, 1) - rd, err := apb.New(&api.RouteDistinguisherTwoOctetASN{ + rd := &api.RouteDistinguisher{Rd: &api.RouteDistinguisher_TwoOctetAsn{TwoOctetAsn: &api.RouteDistinguisherTwoOctetASN{ Admin: 65000, Assigned: 100, - }) - assert.Nil(err) - a, err := apb.New(&api.MUPDirectSegmentDiscoveryRoute{ + }}} + nlris := []*api.NLRI{{Nlri: &api.NLRI_MupDirectSegmentDiscovery{MupDirectSegmentDiscovery: &api.MUPDirectSegmentDiscoveryRoute{ Rd: rd, Address: "10.0.0.1", - }) - assert.Nil(err) - nlris = append(nlris, a) + }}}} input := &api.MpReachNLRIAttribute{ Family: &api.Family{ @@ -1275,30 +976,21 @@ func Test_MpReachNLRIAttribute_MUPDirectSegmentDiscoveryRoute(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpReachNLRIAttribute_MUPType1SessionTransformedRoute(t *testing.T) { assert := assert.New(t) - rd, err := apb.New(&api.RouteDistinguisherTwoOctetASN{ + + rd := &api.RouteDistinguisher{Rd: &api.RouteDistinguisher_TwoOctetAsn{TwoOctetAsn: &api.RouteDistinguisherTwoOctetASN{ Admin: 65000, Assigned: 100, - }) - assert.Nil(err) + }}} tests := []struct { name string in *api.MUPType1SessionTransformedRoute @@ -1329,9 +1021,7 @@ func Test_MpReachNLRIAttribute_MUPType1SessionTransformedRoute(t *testing.T) { }, } for _, tt := range tests { - a, err := apb.New(tt.in) - assert.Nil(err) - nlris := []*apb.Any{a} + nlris := []*api.NLRI{{Nlri: &api.NLRI_MupType_1SessionTransformed{MupType_1SessionTransformed: tt.in}}} input := &api.MpReachNLRIAttribute{ Family: &api.Family{ @@ -1342,41 +1032,28 @@ func Test_MpReachNLRIAttribute_MUPType1SessionTransformedRoute(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } } func Test_MpReachNLRIAttribute_MUPType2SessionTransformedRoute(t *testing.T) { assert := assert.New(t) - nlris := make([]*apb.Any, 0, 1) - rd, err := apb.New(&api.RouteDistinguisherTwoOctetASN{ + rd := &api.RouteDistinguisher{Rd: &api.RouteDistinguisher_TwoOctetAsn{TwoOctetAsn: &api.RouteDistinguisherTwoOctetASN{ Admin: 65000, Assigned: 100, - }) - assert.Nil(err) - a, err := apb.New(&api.MUPType2SessionTransformedRoute{ + }}} + nlris := []*api.NLRI{{Nlri: &api.NLRI_MupType_2SessionTransformed{MupType_2SessionTransformed: &api.MUPType2SessionTransformedRoute{ Rd: rd, Teid: 12345, EndpointAddressLength: 64, EndpointAddress: "10.0.0.1", - }) - assert.Nil(err) - nlris = append(nlris, a) + }}}} input := &api.MpReachNLRIAttribute{ Family: &api.Family{ @@ -1387,39 +1064,27 @@ func Test_MpReachNLRIAttribute_MUPType2SessionTransformedRoute(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpReachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpReachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_MpUnreachNLRIAttribute_IPv4_UC(t *testing.T) { assert := assert.New(t) - nlris := make([]*apb.Any, 0, 2) - a, err := apb.New(&api.IPAddressPrefix{ - PrefixLen: 24, - Prefix: "192.168.101.0", - }) - assert.Nil(err) - nlris = append(nlris, a) - a, err = apb.New(&api.IPAddressPrefix{ - PrefixLen: 24, - Prefix: "192.168.201.0", - }) - assert.Nil(err) - nlris = append(nlris, a) + nlris := []*api.NLRI{ + {Nlri: &api.NLRI_Prefix{Prefix: &api.IPAddressPrefix{ + PrefixLen: 24, + Prefix: "192.168.101.0", + }}}, + {Nlri: &api.NLRI_Prefix{Prefix: &api.IPAddressPrefix{ + PrefixLen: 24, + Prefix: "192.168.201.0", + }}}, + } input := &api.MpUnreachNLRIAttribute{ Family: &api.Family{ @@ -1429,174 +1094,117 @@ func Test_MpUnreachNLRIAttribute_IPv4_UC(t *testing.T) { Nlris: nlris, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_MpUnreach{MpUnreach: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewMpUnreachNLRIAttributeFromNative(n.(*bgp.PathAttributeMpUnreachNLRI)) - assert.Equal(input.Family.Afi, output.Family.Afi) - assert.Equal(input.Family.Safi, output.Family.Safi) - assert.Equal(2, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } + assert.True(proto.Equal(input, output)) } func Test_ExtendedCommunitiesAttribute(t *testing.T) { assert := assert.New(t) - communities := make([]*apb.Any, 0, 19) - a, err := apb.New(&api.TwoOctetAsSpecificExtended{ - IsTransitive: true, - SubType: 0x02, // ROUTE_TARGET - Asn: 65001, - LocalAdmin: 100, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = apb.New(&api.IPv4AddressSpecificExtended{ - IsTransitive: true, - SubType: 0x02, // ROUTE_TARGET - Address: "2.2.2.2", - LocalAdmin: 200, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = apb.New(&api.FourOctetAsSpecificExtended{ - IsTransitive: true, - SubType: 0x02, // ROUTE_TARGET - Asn: 65003, - LocalAdmin: 300, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = apb.New(&api.ValidationExtended{ - State: 0, // VALID - }) - assert.Nil(err) - communities = append(communities, a) - a, err = apb.New(&api.ColorExtended{ - Color: 400, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = apb.New(&api.EncapExtended{ - TunnelType: 8, // VXLAN - }) - assert.Nil(err) - communities = append(communities, a) - a, err = apb.New(&api.DefaultGatewayExtended{ - // No value - }) - assert.Nil(err) - communities = append(communities, a) - a, err = apb.New(&api.OpaqueExtended{ - IsTransitive: true, - Value: []byte{0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77}, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = apb.New(&api.ESILabelExtended{ - IsSingleActive: true, - Label: 500, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = apb.New(&api.ESImportRouteTarget{ - EsImport: "aa:bb:cc:dd:ee:ff", - }) - assert.Nil(err) - communities = append(communities, a) - a, err = apb.New(&api.MacMobilityExtended{ - IsSticky: true, - SequenceNum: 1, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = apb.New(&api.RouterMacExtended{ - Mac: "ff:ee:dd:cc:bb:aa", - }) - assert.Nil(err) - communities = append(communities, a) - a, err = apb.New(&api.TrafficRateExtended{ - Asn: 65004, - Rate: 100.0, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = apb.New(&api.TrafficActionExtended{ - Terminal: true, - Sample: false, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = apb.New(&api.RedirectTwoOctetAsSpecificExtended{ - Asn: 65005, - LocalAdmin: 500, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = apb.New(&api.RedirectIPv4AddressSpecificExtended{ - Address: "6.6.6.6", - LocalAdmin: 600, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = apb.New(&api.RedirectFourOctetAsSpecificExtended{ - Asn: 65007, - LocalAdmin: 700, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = apb.New(&api.TrafficRemarkExtended{ - Dscp: 0x0a, // AF11 - }) - assert.Nil(err) - communities = append(communities, a) - a, err = apb.New(&api.MUPExtended{ - SegmentId2: 10, - SegmentId4: 100, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = apb.New(&api.UnknownExtended{ - Type: 0xff, // Max of uint8 - Value: []byte{1, 2, 3, 4, 5, 6, 7}, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = apb.New(&api.LinkBandwidthExtended{ - Asn: 65004, - Bandwidth: 125000.0, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = apb.New(&api.VPLSExtended{ - ControlFlags: 0x00, - Mtu: 1500, - }) - assert.Nil(err) - communities = append(communities, a) + communities := []*api.ExtendedCommunity{ + {Extcom: &api.ExtendedCommunity_TwoOctetAsSpecific{TwoOctetAsSpecific: &api.TwoOctetAsSpecificExtended{ + IsTransitive: true, + SubType: 0x02, // ROUTE_TARGET + Asn: 65001, + LocalAdmin: 100, + }}}, + {Extcom: &api.ExtendedCommunity_Ipv4AddressSpecific{Ipv4AddressSpecific: &api.IPv4AddressSpecificExtended{ + IsTransitive: true, + SubType: 0x02, // ROUTE_TARGET + Address: "2.2.2.2", + LocalAdmin: 200, + }}}, + {Extcom: &api.ExtendedCommunity_FourOctetAsSpecific{FourOctetAsSpecific: &api.FourOctetAsSpecificExtended{ + IsTransitive: true, + SubType: 0x02, // ROUTE_TARGET + Asn: 65003, + LocalAdmin: 300, + }}}, + {Extcom: &api.ExtendedCommunity_Validation{Validation: &api.ValidationExtended{ + State: 0, // VALID + }}}, + {Extcom: &api.ExtendedCommunity_Color{Color: &api.ColorExtended{ + Color: 400, + }}}, + {Extcom: &api.ExtendedCommunity_Encap{Encap: &api.EncapExtended{ + TunnelType: 8, // VXLAN + }}}, + {Extcom: &api.ExtendedCommunity_DefaultGateway{DefaultGateway: &api.DefaultGatewayExtended{ + // No value + }}}, + {Extcom: &api.ExtendedCommunity_Opaque{Opaque: &api.OpaqueExtended{ + IsTransitive: true, + Value: []byte{0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77}, + }}}, + {Extcom: &api.ExtendedCommunity_EsiLabel{EsiLabel: &api.ESILabelExtended{ + IsSingleActive: true, + Label: 500, + }}}, + {Extcom: &api.ExtendedCommunity_EsImport{EsImport: &api.ESImportRouteTarget{ + EsImport: "aa:bb:cc:dd:ee:ff", + }}}, + {Extcom: &api.ExtendedCommunity_MacMobility{MacMobility: &api.MacMobilityExtended{ + IsSticky: true, + SequenceNum: 1, + }}}, + {Extcom: &api.ExtendedCommunity_RouterMac{RouterMac: &api.RouterMacExtended{ + Mac: "ff:ee:dd:cc:bb:aa", + }}}, + {Extcom: &api.ExtendedCommunity_TrafficRate{TrafficRate: &api.TrafficRateExtended{ + Asn: 65004, + Rate: 100.0, + }}}, + {Extcom: &api.ExtendedCommunity_TrafficAction{TrafficAction: &api.TrafficActionExtended{ + Terminal: true, + Sample: false, + }}}, + {Extcom: &api.ExtendedCommunity_RedirectTwoOctetAsSpecific{RedirectTwoOctetAsSpecific: &api.RedirectTwoOctetAsSpecificExtended{ + Asn: 65005, + LocalAdmin: 500, + }}}, + {Extcom: &api.ExtendedCommunity_RedirectIpv4AddressSpecific{RedirectIpv4AddressSpecific: &api.RedirectIPv4AddressSpecificExtended{ + Address: "6.6.6.6", + LocalAdmin: 600, + }}}, + {Extcom: &api.ExtendedCommunity_RedirectFourOctetAsSpecific{RedirectFourOctetAsSpecific: &api.RedirectFourOctetAsSpecificExtended{ + Asn: 65007, + LocalAdmin: 700, + }}}, + {Extcom: &api.ExtendedCommunity_TrafficRemark{TrafficRemark: &api.TrafficRemarkExtended{ + Dscp: 0x0a, // AF11 + }}}, + {Extcom: &api.ExtendedCommunity_Mup{Mup: &api.MUPExtended{ + SegmentId2: 10, + SegmentId4: 100, + }}}, + {Extcom: &api.ExtendedCommunity_Unknown{Unknown: &api.UnknownExtended{ + Type: 0xff, // Max of uint8 + Value: []byte{1, 2, 3, 4, 5, 6, 7}, + }}}, + {Extcom: &api.ExtendedCommunity_LinkBandwidth{LinkBandwidth: &api.LinkBandwidthExtended{ + Asn: 65004, + Bandwidth: 125000.0, + }}}, + {Extcom: &api.ExtendedCommunity_Vpls{Vpls: &api.VPLSExtended{ + ControlFlags: 0x00, + Mtu: 1500, + }}}, + } input := &api.ExtendedCommunitiesAttribute{ Communities: communities, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_ExtendedCommunities{ExtendedCommunities: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewExtendedCommunitiesAttributeFromNative(n.(*bgp.PathAttributeExtendedCommunities)) - assert.Equal(22, len(output.Communities)) - for idx, inputCommunity := range input.Communities { - outputCommunity := output.Communities[idx] - assert.Equal(inputCommunity.TypeUrl, outputCommunity.TypeUrl) - assert.Equal(inputCommunity.Value, outputCommunity.Value) - } + assert.True(proto.Equal(input, output)) } func Test_As4PathAttribute(t *testing.T) { @@ -1615,16 +1223,12 @@ func Test_As4PathAttribute(t *testing.T) { }, } - a, err := apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_As4Path{As4Path: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewAs4PathAttributeFromNative(n.(*bgp.PathAttributeAs4Path)) - assert.Equal(2, len(output.Segments)) - for i := 0; i < 2; i++ { - assert.True(proto.Equal(input.Segments[i], output.Segments[i])) - } + assert.True(proto.Equal(input, output)) } func Test_As4AggregatorAttribute(t *testing.T) { @@ -1635,14 +1239,12 @@ func Test_As4AggregatorAttribute(t *testing.T) { Address: "1.1.1.1", } - a, err := apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_As4Aggregator{As4Aggregator: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewAs4AggregatorAttributeFromNative(n.(*bgp.PathAttributeAs4Aggregator)) - assert.Equal(input.Asn, output.Asn) - assert.Equal(input.Address, output.Address) + assert.True(proto.Equal(input, output)) } func Test_PmsiTunnelAttribute(t *testing.T) { @@ -1655,49 +1257,36 @@ func Test_PmsiTunnelAttribute(t *testing.T) { Id: net.ParseIP("1.1.1.1").To4(), // IngressReplTunnelID with IPv4 } - a, err := apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_PmsiTunnel{PmsiTunnel: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewPmsiTunnelAttributeFromNative(n.(*bgp.PathAttributePmsiTunnel)) - assert.Equal(input.Flags, output.Flags) - assert.Equal(input.Type, output.Type) - assert.Equal(input.Label, output.Label) - assert.Equal(input.Id, output.Id) + assert.True(proto.Equal(input, output)) } func Test_TunnelEncapAttribute(t *testing.T) { assert := assert.New(t) - subTlvs := make([]*apb.Any, 0, 4) - a, err := apb.New(&api.TunnelEncapSubTLVEncapsulation{ - Key: 100, - Cookie: []byte{0x11, 0x22, 0x33, 0x44}, - }) - assert.Nil(err) - subTlvs = append(subTlvs, a) - a, err = apb.New(&api.TunnelEncapSubTLVProtocol{ - Protocol: 200, - }) - assert.Nil(err) - subTlvs = append(subTlvs, a) - a, err = apb.New(&api.TunnelEncapSubTLVColor{ - Color: 300, - }) - assert.Nil(err) - subTlvs = append(subTlvs, a) - a, err = apb.New(&api.TunnelEncapSubTLVUDPDestPort{ - Port: 400, - }) - assert.Nil(err) - subTlvs = append(subTlvs, a) - a, err = apb.New(&api.TunnelEncapSubTLVUnknown{ - Type: 0xff, // Max of uint8 - Value: []byte{0x55, 0x66, 0x77, 0x88}, - }) - assert.Nil(err) - subTlvs = append(subTlvs, a) + subTlvs := []*api.TunnelEncapTLV_TLV{ + {Tlv: &api.TunnelEncapTLV_TLV_Encapsulation{Encapsulation: &api.TunnelEncapSubTLVEncapsulation{ + Key: 100, + Cookie: []byte{0x11, 0x22, 0x33, 0x44}, + }}}, + {Tlv: &api.TunnelEncapTLV_TLV_Protocol{Protocol: &api.TunnelEncapSubTLVProtocol{ + Protocol: 200, + }}}, + {Tlv: &api.TunnelEncapTLV_TLV_Color{Color: &api.TunnelEncapSubTLVColor{ + Color: 300, + }}}, + {Tlv: &api.TunnelEncapTLV_TLV_UdpDestPort{UdpDestPort: &api.TunnelEncapSubTLVUDPDestPort{ + Port: 400, + }}}, + {Tlv: &api.TunnelEncapTLV_TLV_Unknown{Unknown: &api.TunnelEncapSubTLVUnknown{ + Type: 0xff, // Max of uint8 + Value: []byte{0x55, 0x66, 0x77, 0x88}, + }}}, + } input := &api.TunnelEncapAttribute{ Tlvs: []*api.TunnelEncapTLV{ @@ -1707,92 +1296,69 @@ func Test_TunnelEncapAttribute(t *testing.T) { }, }, } - - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_TunnelEncap{TunnelEncap: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewTunnelEncapAttributeFromNative(n.(*bgp.PathAttributeTunnelEncap)) - assert.Equal(1, len(output.Tlvs)) - assert.Equal(input.Tlvs[0].Type, output.Tlvs[0].Type) - assert.Equal(len(output.Tlvs[0].Tlvs), len(output.Tlvs[0].Tlvs)) - for idx, inputSubTlv := range input.Tlvs[0].Tlvs { - outputSubTlv := output.Tlvs[0].Tlvs[idx] - assert.Equal(inputSubTlv.TypeUrl, outputSubTlv.TypeUrl) - assert.Equal(inputSubTlv.Value, outputSubTlv.Value) - } + assert.True(proto.Equal(input, output)) } func Test_IP6ExtendedCommunitiesAttribute(t *testing.T) { assert := assert.New(t) - communities := make([]*apb.Any, 0, 2) - a, err := apb.New(&api.IPv6AddressSpecificExtended{ - IsTransitive: true, - SubType: 0xff, // Max of uint8 - Address: "2001:db8:1::1", - LocalAdmin: 100, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = apb.New(&api.RedirectIPv6AddressSpecificExtended{ - Address: "2001:db8:2::1", - LocalAdmin: 200, - }) - assert.Nil(err) - communities = append(communities, a) + communities := []*api.IP6ExtendedCommunitiesAttribute_Community{ + {Extcom: &api.IP6ExtendedCommunitiesAttribute_Community_Ipv6AddressSpecific{ + Ipv6AddressSpecific: &api.IPv6AddressSpecificExtended{ + IsTransitive: true, + SubType: 0xff, // Max of uint8 + Address: "2001:db8:1::1", + LocalAdmin: 100, + }, + }}, + {Extcom: &api.IP6ExtendedCommunitiesAttribute_Community_RedirectIpv6AddressSpecific{ + RedirectIpv6AddressSpecific: &api.RedirectIPv6AddressSpecificExtended{ + Address: "2001:db8:2::1", + LocalAdmin: 200, + }, + }}, + } input := &api.IP6ExtendedCommunitiesAttribute{ Communities: communities, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_Ip6ExtendedCommunities{Ip6ExtendedCommunities: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewIP6ExtendedCommunitiesAttributeFromNative(n.(*bgp.PathAttributeIP6ExtendedCommunities)) - assert.Equal(2, len(output.Communities)) - for idx, inputCommunity := range input.Communities { - outputCommunity := output.Communities[idx] - assert.Equal(inputCommunity.TypeUrl, outputCommunity.TypeUrl) - assert.Equal(inputCommunity.Value, outputCommunity.Value) - } + assert.True(proto.Equal(input, output)) } func Test_AigpAttribute(t *testing.T) { assert := assert.New(t) - tlvs := make([]*apb.Any, 0, 2) - a, err := apb.New(&api.AigpTLVIGPMetric{ - Metric: 50, - }) - assert.Nil(err) - tlvs = append(tlvs, a) - a, err = apb.New(&api.AigpTLVUnknown{ - Type: 0xff, // Max of uint8 - Value: []byte{0x11, 0x22, 0x33, 0x44}, - }) - assert.Nil(err) - tlvs = append(tlvs, a) + tlvs := []*api.AigpAttribute_TLV{ + {Tlv: &api.AigpAttribute_TLV_IgpMetric{IgpMetric: &api.AigpTLVIGPMetric{ + Metric: 50, + }}}, + {Tlv: &api.AigpAttribute_TLV_Unknown{Unknown: &api.AigpTLVUnknown{ + Type: 0xff, // Max of uint8 + Value: []byte{0x11, 0x22, 0x33, 0x44}, + }}}, + } input := &api.AigpAttribute{ Tlvs: tlvs, } - a, err = apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_Aigp{Aigp: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewAigpAttributeFromNative(n.(*bgp.PathAttributeAigp)) - assert.Equal(2, len(output.Tlvs)) - for idx, inputTlv := range input.Tlvs { - outputTlv := output.Tlvs[idx] - assert.Equal(inputTlv.TypeUrl, outputTlv.TypeUrl) - assert.Equal(inputTlv.Value, outputTlv.Value) - } + assert.True(proto.Equal(input, output)) } func Test_LargeCommunitiesAttribute(t *testing.T) { @@ -1813,16 +1379,12 @@ func Test_LargeCommunitiesAttribute(t *testing.T) { }, } - a, err := apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_LargeCommunities{LargeCommunities: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewLargeCommunitiesAttributeFromNative(n.(*bgp.PathAttributeLargeCommunities)) - assert.Equal(2, len(output.Communities)) - for i := 0; i < 2; i++ { - assert.True(proto.Equal(input.Communities[i], output.Communities[i])) - } + assert.True(proto.Equal(input, output)) } func Test_UnknownAttribute(t *testing.T) { @@ -1834,15 +1396,12 @@ func Test_UnknownAttribute(t *testing.T) { Value: []byte{0x11, 0x22, 0x33, 0x44}, } - a, err := apb.New(input) - assert.Nil(err) + a := &api.Attribute{Attr: &api.Attribute_Unknown{Unknown: input}} n, err := UnmarshalAttribute(a) assert.Nil(err) output, _ := NewUnknownAttributeFromNative(n.(*bgp.PathAttributeUnknown)) - assert.Equal(input.Flags, output.Flags) - assert.Equal(input.Type, output.Type) - assert.Equal(input.Value, output.Value) + assert.True(proto.Equal(input, output)) } func TestFullCyclePrefixSID(t *testing.T) { diff --git a/pkg/apiutil/capability_test.go b/pkg/apiutil/capability_test.go index a09066f21..36e9b9c7e 100644 --- a/pkg/apiutil/capability_test.go +++ b/pkg/apiutil/capability_test.go @@ -19,7 +19,6 @@ import ( "testing" "google.golang.org/protobuf/proto" - apb "google.golang.org/protobuf/types/known/anypb" api "github.com/osrg/gobgp/v3/api" "github.com/osrg/gobgp/v3/pkg/packet/bgp" @@ -36,8 +35,7 @@ func Test_MultiProtocolCapability(t *testing.T) { }, } - a, err := apb.New(input) - assert.Nil(err) + a := &api.Capability{Cap: &api.Capability_MultiProtocol{MultiProtocol: input}} n, err := unmarshalCapability(a) assert.Nil(err) c := n.(*bgp.CapMultiProtocol) @@ -52,8 +50,7 @@ func Test_RouteRefreshCapability(t *testing.T) { input := &api.RouteRefreshCapability{} - a, err := apb.New(input) - assert.Nil(err) + a := &api.Capability{Cap: &api.Capability_RouteRefresh{RouteRefresh: input}} n, err := unmarshalCapability(a) assert.Nil(err) @@ -66,8 +63,7 @@ func Test_CarryingLabelInfoCapability(t *testing.T) { input := &api.CarryingLabelInfoCapability{} - a, err := apb.New(input) - assert.Nil(err) + a := &api.Capability{Cap: &api.Capability_CarryingLabelInfo{CarryingLabelInfo: input}} n, err := unmarshalCapability(a) assert.Nil(err) @@ -93,8 +89,7 @@ func Test_ExtendedNexthopCapability(t *testing.T) { }, } - a, err := apb.New(input) - assert.Nil(err) + a := &api.Capability{Cap: &api.Capability_ExtendedNexthop{ExtendedNexthop: input}} n, err := unmarshalCapability(a) assert.Nil(err) c := n.(*bgp.CapExtendedNexthop) @@ -124,8 +119,7 @@ func Test_GracefulRestartCapability(t *testing.T) { }, } - a, err := apb.New(input) - assert.Nil(err) + a := &api.Capability{Cap: &api.Capability_GracefulRestart{GracefulRestart: input}} n, err := unmarshalCapability(a) assert.Nil(err) @@ -148,8 +142,7 @@ func Test_FourOctetASNumberCapability(t *testing.T) { Asn: 100, } - a, err := apb.New(input) - assert.Nil(err) + a := &api.Capability{Cap: &api.Capability_FourOctetAsn{FourOctetAsn: input}} n, err := unmarshalCapability(a) assert.Nil(err) @@ -175,8 +168,7 @@ func Test_AddPathCapability(t *testing.T) { }, } - a, err := apb.New(input) - assert.Nil(err) + a := &api.Capability{Cap: &api.Capability_AddPath{AddPath: input}} n, err := unmarshalCapability(a) assert.Nil(err) @@ -194,8 +186,7 @@ func Test_EnhancedRouteRefreshCapability(t *testing.T) { input := &api.EnhancedRouteRefreshCapability{} - a, err := apb.New(input) - assert.Nil(err) + a := &api.Capability{Cap: &api.Capability_EnhancedRouteRefresh{EnhancedRouteRefresh: input}} n, err := unmarshalCapability(a) assert.Nil(err) @@ -219,8 +210,7 @@ func Test_LongLivedGracefulRestartCapability(t *testing.T) { }, } - a, err := apb.New(input) - assert.Nil(err) + a := &api.Capability{Cap: &api.Capability_LongLivedGracefulRestart{LongLivedGracefulRestart: input}} n, err := unmarshalCapability(a) assert.Nil(err) @@ -240,8 +230,7 @@ func Test_RouteRefreshCiscoCapability(t *testing.T) { input := &api.RouteRefreshCiscoCapability{} - a, err := apb.New(input) - assert.Nil(err) + a := &api.Capability{Cap: &api.Capability_RouteRefreshCisco{RouteRefreshCisco: input}} n, err := unmarshalCapability(a) assert.Nil(err) @@ -257,8 +246,7 @@ func Test_UnknownCapability(t *testing.T) { Value: []byte{0x11, 0x22, 0x33, 0x44}, } - a, err := apb.New(input) - assert.Nil(err) + a := &api.Capability{Cap: &api.Capability_Unknown{Unknown: input}} n, err := unmarshalCapability(a) assert.Nil(err) diff --git a/pkg/metrics/metrics_test.go b/pkg/metrics/metrics_test.go index ca2da594c..50476fc62 100644 --- a/pkg/metrics/metrics_test.go +++ b/pkg/metrics/metrics_test.go @@ -9,7 +9,6 @@ import ( dto "github.com/prometheus/client_model/go" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - apb "google.golang.org/protobuf/types/known/anypb" api "github.com/osrg/gobgp/v3/api" "github.com/osrg/gobgp/v3/pkg/server" @@ -100,18 +99,23 @@ func TestMetrics(test *testing.T) { ch <- struct{}{} return default: - nlri1, _ := apb.New(&api.IPAddressPrefix{ + nlri1 := &api.NLRI{Nlri: &api.NLRI_Prefix{Prefix: &api.IPAddressPrefix{ Prefix: "10.1.0.0", PrefixLen: 24, - }) + }}} - a1, _ := apb.New(&api.OriginAttribute{ - Origin: 0, - }) - a2, _ := apb.New(&api.NextHopAttribute{ - NextHop: "10.0.0.1", - }) - attrs := []*apb.Any{a1, a2} + attrs := []*api.Attribute{ + { + Attr: &api.Attribute_Origin{Origin: &api.OriginAttribute{ + Origin: 0, + }}, + }, + { + Attr: &api.Attribute_NextHop{NextHop: &api.NextHopAttribute{ + NextHop: "10.0.0.1", + }}, + }, + } t.AddPath(context.Background(), &api.AddPathRequest{ TableType: api.TableType_GLOBAL, diff --git a/pkg/server/grpc_server_test.go b/pkg/server/grpc_server_test.go index 5c17849f3..96260b27f 100644 --- a/pkg/server/grpc_server_test.go +++ b/pkg/server/grpc_server_test.go @@ -10,7 +10,6 @@ import ( "github.com/osrg/gobgp/v3/pkg/apiutil" "github.com/osrg/gobgp/v3/pkg/packet/bgp" "github.com/stretchr/testify/assert" - "google.golang.org/protobuf/types/known/anypb" ) func TestParseHost(t *testing.T) { @@ -78,8 +77,8 @@ func TestToPathApi(t *testing.T) { false), }, want: &api.Path{ - Nlri: anyNlri(bgp.NewIPAddrPrefix(8, "10.0.0.0")), - Pattrs: anyAttrs([]bgp.PathAttributeInterface{bgp.NewPathAttributeOrigin(0)}), + Nlri: nlri(bgp.NewIPAddrPrefix(8, "10.0.0.0")), + Pattrs: attrs([]bgp.PathAttributeInterface{bgp.NewPathAttributeOrigin(0)}), Family: &api.Family{ Afi: api.Family_AFI_IP, Safi: api.Family_SAFI_UNICAST, @@ -95,12 +94,12 @@ func TestToPathApi(t *testing.T) { path: eor(bgp.RF_IPv4_UC), }, want: &api.Path{ - Nlri: anyEorNlri(bgp.AFI_IP, bgp.SAFI_UNICAST), + Nlri: eorNlri(bgp.AFI_IP, bgp.SAFI_UNICAST), Family: &api.Family{ Afi: api.Family_AFI_IP, Safi: api.Family_SAFI_UNICAST, }, - Pattrs: []*anypb.Any{}, + Pattrs: []*api.Attribute{}, Validation: &api.Validation{}, NeighborIp: "10.12.12.12", SourceId: "10.10.10.10", @@ -112,12 +111,12 @@ func TestToPathApi(t *testing.T) { path: eor(bgp.RF_IPv4_VPN), }, want: &api.Path{ - Nlri: anyEorNlri(bgp.AFI_IP, bgp.SAFI_MPLS_VPN), + Nlri: eorNlri(bgp.AFI_IP, bgp.SAFI_MPLS_VPN), Family: &api.Family{ Afi: api.Family_AFI_IP, Safi: api.Family_SAFI_MPLS_VPN, }, - Pattrs: []*anypb.Any{}, + Pattrs: []*api.Attribute{}, Validation: &api.Validation{}, NeighborIp: "10.12.12.12", SourceId: "10.10.10.10", @@ -146,17 +145,17 @@ func eor(f bgp.RouteFamily) *table.Path { return p } -func anyEorNlri(afi uint16, safi uint8) *anypb.Any { +func eorNlri(afi uint16, safi uint8) *api.NLRI { n, _ := bgp.NewPrefixFromRouteFamily(afi, safi) - return anyNlri(n) + return nlri(n) } -func anyNlri(nlri bgp.AddrPrefixInterface) *anypb.Any { - anyNlri, _ := apiutil.MarshalNLRI(nlri) - return anyNlri +func nlri(nlri bgp.AddrPrefixInterface) *api.NLRI { + apiNlri, _ := apiutil.MarshalNLRI(nlri) + return apiNlri } -func anyAttrs(attrs []bgp.PathAttributeInterface) []*anypb.Any { - anyPattrs, _ := apiutil.MarshalPathAttributes(attrs) - return anyPattrs +func attrs(attrs []bgp.PathAttributeInterface) []*api.Attribute { + apiAttrs, _ := apiutil.MarshalPathAttributes(attrs) + return apiAttrs } diff --git a/pkg/server/server_test.go b/pkg/server/server_test.go index bb6c5dbeb..5c7e06fa7 100644 --- a/pkg/server/server_test.go +++ b/pkg/server/server_test.go @@ -28,7 +28,6 @@ import ( "github.com/google/go-cmp/cmp" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - apb "google.golang.org/protobuf/types/known/anypb" api "github.com/osrg/gobgp/v3/api" "github.com/osrg/gobgp/v3/internal/pkg/table" @@ -413,18 +412,23 @@ func TestListPathEnableFiltered(test *testing.T) { Safi: api.Family_SAFI_UNICAST, } - nlri1, _ := apb.New(&api.IPAddressPrefix{ + nlri1 := &api.NLRI{Nlri: &api.NLRI_Prefix{Prefix: &api.IPAddressPrefix{ Prefix: "10.1.0.0", PrefixLen: 24, - }) + }}} - a1, _ := apb.New(&api.OriginAttribute{ - Origin: 0, - }) - a2, _ := apb.New(&api.NextHopAttribute{ - NextHop: "10.0.0.1", - }) - attrs := []*apb.Any{a1, a2} + attrs := []*api.Attribute{ + { + Attr: &api.Attribute_Origin{Origin: &api.OriginAttribute{ + Origin: 0, + }}, + }, + { + Attr: &api.Attribute_NextHop{NextHop: &api.NextHopAttribute{ + NextHop: "10.0.0.1", + }}, + }, + } server2.AddPath(context.Background(), &api.AddPathRequest{ TableType: api.TableType_GLOBAL, @@ -435,10 +439,10 @@ func TestListPathEnableFiltered(test *testing.T) { }, }) - nlri2, _ := apb.New(&api.IPAddressPrefix{ + nlri2 := &api.NLRI{Nlri: &api.NLRI_Prefix{Prefix: &api.IPAddressPrefix{ Prefix: "10.2.0.0", PrefixLen: 24, - }) + }}} server2.AddPath(context.Background(), &api.AddPathRequest{ TableType: api.TableType_GLOBAL, Path: &api.Path{ @@ -465,14 +469,9 @@ func TestListPathEnableFiltered(test *testing.T) { for _, path := range d.Paths { var comms []uint32 for _, attr := range path.GetPattrs() { - m, err := attr.UnmarshalNew() - if err != nil { - test.Fatalf("Unable to unmarshal a GoBGP path attribute: %v", err) - continue - } - switch m := m.(type) { - case *api.CommunitiesAttribute: - comms = m.GetCommunities() + switch m := attr.GetAttr().(type) { + case *api.Attribute_Communities: + comms = m.Communities.GetCommunities() } } if diff := cmp.Diff(wantEmptyCommunities, comms); diff != "" { @@ -502,14 +501,9 @@ func TestListPathEnableFiltered(test *testing.T) { } var comms []uint32 for _, attr := range path.GetPattrs() { - m, err := attr.UnmarshalNew() - if err != nil { - test.Fatalf("Unable to unmarshal a GoBGP path attribute: %v", err) - continue - } - switch m := m.(type) { - case *api.CommunitiesAttribute: - comms = m.GetCommunities() + switch m := attr.GetAttr().(type) { + case *api.Attribute_Communities: + comms = m.Communities.GetCommunities() } } if diff := cmp.Diff(wantCommunitiesAfterExportPolicies, comms); diff != "" { @@ -536,14 +530,9 @@ func TestListPathEnableFiltered(test *testing.T) { for _, path := range d.Paths { var comms []uint32 for _, attr := range path.GetPattrs() { - m, err := attr.UnmarshalNew() - if err != nil { - test.Fatalf("Unable to unmarshal a GoBGP path attribute: %v", err) - continue - } - switch m := m.(type) { - case *api.CommunitiesAttribute: - comms = m.GetCommunities() + switch m := attr.GetAttr().(type) { + case *api.Attribute_Communities: + comms = m.Communities.GetCommunities() } } if diff := cmp.Diff(wantCommunitiesAfterExportPolicies, comms); diff != "" { @@ -573,14 +562,9 @@ func TestListPathEnableFiltered(test *testing.T) { } var comms []uint32 for _, attr := range path.GetPattrs() { - m, err := attr.UnmarshalNew() - if err != nil { - test.Fatalf("Unable to unmarshal a GoBGP path attribute: %v", err) - continue - } - switch m := m.(type) { - case *api.CommunitiesAttribute: - comms = m.GetCommunities() + switch m := attr.GetAttr().(type) { + case *api.Attribute_Communities: + comms = m.Communities.GetCommunities() } } if diff := cmp.Diff(wantCommunitiesAfterImportPolicies, comms); diff != "" { @@ -651,10 +635,10 @@ func TestListPathEnableFiltered(test *testing.T) { }) assert.Nil(err) - nlri3, _ := apb.New(&api.IPAddressPrefix{ + nlri3 := &api.NLRI{Nlri: &api.NLRI_Prefix{Prefix: &api.IPAddressPrefix{ Prefix: "10.3.0.0", PrefixLen: 24, - }) + }}} server1.AddPath(context.Background(), &api.AddPathRequest{ TableType: api.TableType_GLOBAL, Path: &api.Path{ @@ -664,10 +648,10 @@ func TestListPathEnableFiltered(test *testing.T) { }, }) - nlri4, _ := apb.New(&api.IPAddressPrefix{ + nlri4 := &api.NLRI{Nlri: &api.NLRI_Prefix{Prefix: &api.IPAddressPrefix{ Prefix: "10.4.0.0", PrefixLen: 24, - }) + }}} server1.AddPath(context.Background(), &api.AddPathRequest{ TableType: api.TableType_GLOBAL, Path: &api.Path{ @@ -1719,37 +1703,37 @@ func TestAddDeletePath(t *testing.T) { ctx := context.Background() s := runNewServer(t, 1, "1.1.1.1", 10179) - nlri, _ := apb.New(&api.IPAddressPrefix{ + nlri := &api.NLRI{Nlri: &api.NLRI_Prefix{Prefix: &api.IPAddressPrefix{ Prefix: "10.0.0.0", PrefixLen: 24, - }) + }}} - nlri6, _ := apb.New(&api.IPAddressPrefix{ + nlri6 := &api.NLRI{Nlri: &api.NLRI_Prefix{Prefix: &api.IPAddressPrefix{ Prefix: "2001:DB8::", PrefixLen: 32, - }) + }}} - nh1, _ := apb.New(&api.NextHopAttribute{ + nh1 := &api.Attribute{Attr: &api.Attribute_NextHop{NextHop: &api.NextHopAttribute{ NextHop: "fd00::1", - }) + }}} - nh2, _ := apb.New(&api.NextHopAttribute{ + nh2 := &api.Attribute{Attr: &api.Attribute_NextHop{NextHop: &api.NextHopAttribute{ NextHop: "fd00::2", - }) + }}} - nh3, _ := apb.New(&api.NextHopAttribute{ + nh3 := &api.Attribute{Attr: &api.Attribute_NextHop{NextHop: &api.NextHopAttribute{ NextHop: "10.0.0.1", - }) + }}} - nh4, _ := apb.New(&api.NextHopAttribute{ + nh4 := &api.Attribute{Attr: &api.Attribute_NextHop{NextHop: &api.NextHopAttribute{ NextHop: "10.0.0.2", - }) + }}} - a1, _ := apb.New(&api.OriginAttribute{ + a1 := &api.Attribute{Attr: &api.Attribute_Origin{Origin: &api.OriginAttribute{ Origin: 0, - }) + }}} - attrs := []*apb.Any{a1, nh3} + attrs := []*api.Attribute{a1, nh3} family := &api.Family{ Afi: api.Family_AFI_IP, @@ -1854,7 +1838,7 @@ func TestAddDeletePath(t *testing.T) { Safi: api.Family_SAFI_UNICAST, }, Nlri: nlri6, - Pattrs: []*apb.Any{a1, nh1}, + Pattrs: []*api.Attribute{a1, nh1}, Identifier: 1, } @@ -1864,7 +1848,7 @@ func TestAddDeletePath(t *testing.T) { Safi: api.Family_SAFI_UNICAST, }, Nlri: nlri6, - Pattrs: []*apb.Any{a1, nh2}, + Pattrs: []*api.Attribute{a1, nh2}, Identifier: 2, } @@ -1903,7 +1887,7 @@ func TestAddDeletePath(t *testing.T) { Safi: api.Family_SAFI_UNICAST, }, Nlri: nlri, - Pattrs: []*apb.Any{a1, nh3}, + Pattrs: []*api.Attribute{a1, nh3}, Identifier: 1, } @@ -1913,7 +1897,7 @@ func TestAddDeletePath(t *testing.T) { Safi: api.Family_SAFI_UNICAST, }, Nlri: nlri, - Pattrs: []*apb.Any{a1, nh4}, + Pattrs: []*api.Attribute{a1, nh4}, Identifier: 2, } @@ -1986,14 +1970,14 @@ func TestAddDeletePath(t *testing.T) { assert.Equal(t, len(s.uuidMap), 1) u := r.Uuid - asPath, _ := apb.New(&api.AsPathAttribute{ + asPath := &api.Attribute{Attr: &api.Attribute_AsPath{AsPath: &api.AsPathAttribute{ Segments: []*api.AsSegment{ { Type: 1, // SET Numbers: []uint32{100, 200, 300}, }, }, - }) + }}} p2.Pattrs = append(p2.Pattrs, asPath) r, err = s.AddPath(ctx, &api.AddPathRequest{ @@ -2036,30 +2020,30 @@ func TestAddBogusPath(t *testing.T) { s := runNewServer(t, 1, "1.1.1.1", 10179) defer s.StopBgp(context.Background(), &api.StopBgpRequest{}) - nlri, _ := apb.New(&api.IPAddressPrefix{}) + nlri := &api.NLRI{Nlri: &api.NLRI_Prefix{Prefix: &api.IPAddressPrefix{}}} - a, _ := apb.New(&api.MpReachNLRIAttribute{}) + a := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: &api.MpReachNLRIAttribute{}}} _, err := s.AddPath(ctx, &api.AddPathRequest{ Path: &api.Path{ Family: &api.Family{Afi: api.Family_AFI_IP, Safi: api.Family_SAFI_UNICAST}, Nlri: nlri, - Pattrs: []*apb.Any{a}, + Pattrs: []*api.Attribute{a}, }, }) assert.NotNil(t, err) - nlri, _ = apb.New(&api.IPAddressPrefix{}) + nlri = &api.NLRI{Nlri: &api.NLRI_Prefix{Prefix: &api.IPAddressPrefix{}}} - a, _ = apb.New(&api.MpReachNLRIAttribute{ + a = &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: &api.MpReachNLRIAttribute{ Family: &api.Family{Afi: api.Family_AFI_IP, Safi: api.Family_SAFI_FLOW_SPEC_UNICAST}, - }) + }}} _, err = s.AddPath(ctx, &api.AddPathRequest{ Path: &api.Path{ Family: &api.Family{Afi: api.Family_AFI_IP, Safi: api.Family_SAFI_UNICAST}, Nlri: nlri, - Pattrs: []*apb.Any{a}, + Pattrs: []*api.Attribute{a}, }, }) assert.NotNil(t, err) @@ -2088,18 +2072,23 @@ func TestListPathWithIdentifiers(t *testing.T) { Safi: api.Family_SAFI_UNICAST, } - nlri1, _ := apb.New(&api.IPAddressPrefix{ + nlri1 := &api.NLRI{Nlri: &api.NLRI_Prefix{Prefix: &api.IPAddressPrefix{ Prefix: "10.1.0.0", PrefixLen: 24, - }) + }}} - a1, _ := apb.New(&api.OriginAttribute{ - Origin: 0, - }) - a2, _ := apb.New(&api.NextHopAttribute{ - NextHop: "10.0.0.1", - }) - attrs := []*apb.Any{a1, a2} + attrs := []*api.Attribute{ + { + Attr: &api.Attribute_Origin{Origin: &api.OriginAttribute{ + Origin: 0, + }}, + }, + { + Attr: &api.Attribute_NextHop{NextHop: &api.NextHopAttribute{ + NextHop: "10.0.0.1", + }}, + }, + } paths := []*api.Path{ { Family: family, @@ -2250,18 +2239,23 @@ func TestWatchEvent(test *testing.T) { Safi: api.Family_SAFI_UNICAST, } - nlri1, _ := apb.New(&api.IPAddressPrefix{ + nlri1 := &api.NLRI{Nlri: &api.NLRI_Prefix{Prefix: &api.IPAddressPrefix{ Prefix: "10.1.0.0", PrefixLen: 24, - }) + }}} - a1, _ := apb.New(&api.OriginAttribute{ - Origin: 0, - }) - a2, _ := apb.New(&api.NextHopAttribute{ - NextHop: "10.0.0.1", - }) - attrs := []*apb.Any{a1, a2} + attrs := []*api.Attribute{ + { + Attr: &api.Attribute_Origin{Origin: &api.OriginAttribute{ + Origin: 0, + }}, + }, + { + Attr: &api.Attribute_NextHop{NextHop: &api.NextHopAttribute{ + NextHop: "10.0.0.1", + }}, + }, + } _, err = t.AddPath(context.Background(), &api.AddPathRequest{ TableType: api.TableType_GLOBAL, @@ -2273,10 +2267,10 @@ func TestWatchEvent(test *testing.T) { }) assert.Nil(err) - nlri2, _ := apb.New(&api.IPAddressPrefix{ + nlri2 := &api.NLRI{Nlri: &api.NLRI_Prefix{Prefix: &api.IPAddressPrefix{ Prefix: "10.2.0.0", PrefixLen: 24, - }) + }}} _, err = t.AddPath(context.Background(), &api.AddPathRequest{ TableType: api.TableType_GLOBAL, Path: &api.Path{ From cce76f5f8d569bb56cc5d56cf473eee037d338b6 Mon Sep 17 00:00:00 2001 From: Tuetuopay Date: Wed, 19 Feb 2025 11:51:25 +0100 Subject: [PATCH 4/4] docs: update tests for proto.Any-less API --- docs/sources/lib.md | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/docs/sources/lib.md b/docs/sources/lib.md index 7143d46ef..71f63eb38 100644 --- a/docs/sources/lib.md +++ b/docs/sources/lib.md @@ -16,7 +16,6 @@ import ( "time" "github.com/sirupsen/logrus" - apb "google.golang.org/protobuf/types/known/anypb" api "github.com/osrg/gobgp/v3/api" "github.com/osrg/gobgp/v3/pkg/log" @@ -64,26 +63,26 @@ func main() { } // add routes - nlri, _ := apb.New(&api.IPAddressPrefix{ + nlri := &api.NLRI{Nlri: &api.NLRI_Prefix{Prefix: &api.IPAddressPrefix{ Prefix: "10.0.0.0", PrefixLen: 24, - }) + }}} - a1, _ := apb.New(&api.OriginAttribute{ + a1 := &api.Attribute{Attr: &api.Attribute_Origin{Origin: &api.OriginAttribute{ Origin: 0, - }) - a2, _ := apb.New(&api.NextHopAttribute{ + }}} + a2 := &api.Attribute{Attr: &api.Attribute_NextHop{NextHop: &api.NextHopAttribute{ NextHop: "10.0.0.1", - }) - a3, _ := apb.New(&api.AsPathAttribute{ + }}} + a3 := &api.Attribute{Attr: &api.Attribute_AsPath{AsPath: &api.AsPathAttribute{ Segments: []*api.AsSegment{ { Type: 2, Numbers: []uint32{6762, 39919, 65000, 35753, 65000}, }, }, - }) - attrs := []*apb.Any{a1, a2, a3} + }}} + attrs := []*api.Attribute{a1, a2, a3} _, err := s.AddPath(context.Background(), &api.AddPathRequest{ Path: &api.Path{ @@ -102,25 +101,25 @@ func main() { } // add v6 route - nlri, _ = apb.New(&api.IPAddressPrefix{ + nlri = &api.NLRI{Nlri: &api.NLRI_Prefix{Prefix: &api.IPAddressPrefix{ PrefixLen: 64, Prefix: "2001:db8:1::", - }) - v6Attrs, _ := apb.New(&api.MpReachNLRIAttribute{ + }}} + v6Attrs := &api.Attribute{Attr: &api.Attribute_MpReach{MpReach: &api.MpReachNLRIAttribute{ Family: v6Family, NextHops: []string{"2001:db8::1"}, - Nlris: []*apb.Any{nlri}, - }) + Nlris: []*api.NLRI{nlri}, + }}} - c, _ := apb.New(&api.CommunitiesAttribute{ + c := &api.Attribute{Attr: &api.Attribute_Communities{Communities: &api.CommunitiesAttribute{ Communities: []uint32{100, 200}, - }) + }}} _, err = s.AddPath(context.Background(), &api.AddPathRequest{ Path: &api.Path{ Family: v6Family, Nlri: nlri, - Pattrs: []*apb.Any{a1, v6Attrs, c}, + Pattrs: []*api.Attribute{a1, v6Attrs, c}, }, }) if err != nil {