From 38da4dfea7680c7f3707c321df970a5aa9a88beb Mon Sep 17 00:00:00 2001 From: watal Date: Sat, 1 Nov 2025 21:15:28 -0400 Subject: [PATCH 1/5] refactor(cspf) rename CSPF --- internal/pkg/cspf/cspf.go | 2 +- pkg/server/grpc_server.go | 2 +- pkg/server/session.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/pkg/cspf/cspf.go b/internal/pkg/cspf/cspf.go index 88ac1d4d..bca61436 100644 --- a/internal/pkg/cspf/cspf.go +++ b/internal/pkg/cspf/cspf.go @@ -27,7 +27,7 @@ func newNode(id string, cost uint32, nodeSeg table.Segment) *node { } } -func Cspf(srcRouterID string, dstRouterID string, as uint32, metric table.MetricType, ted *table.LsTED) ([]table.Segment, error) { +func CSPF(srcRouterID string, dstRouterID string, as uint32, metric table.MetricType, ted *table.LsTED) ([]table.Segment, error) { network := ted.Nodes[as] // TODO: update network information according to constraints segmentList, err := spf(srcRouterID, dstRouterID, metric, network) diff --git a/pkg/server/grpc_server.go b/pkg/server/grpc_server.go index c76e8e15..f3922ae1 100644 --- a/pkg/server/grpc_server.go +++ b/pkg/server/grpc_server.go @@ -324,7 +324,7 @@ func getSegmentList(inputSRPolicy *pb.SRPolicy, asn uint32, ted *table.LsTED) ([ if err != nil { return nil, err } - segmentList, err = cspf.Cspf(inputSRPolicy.GetSrcRouterId(), inputSRPolicy.GetDstRouterId(), asn, metricType, ted) + segmentList, err = cspf.CSPF(inputSRPolicy.GetSrcRouterId(), inputSRPolicy.GetDstRouterId(), asn, metricType, ted) if err != nil { return nil, err } diff --git a/pkg/server/session.go b/pkg/server/session.go index 7c4ef510..4654af8b 100644 --- a/pkg/server/session.go +++ b/pkg/server/session.go @@ -378,7 +378,7 @@ func (ss *Session) computePathFromTED(sr pcep.StateReport) ([]table.Segment, err zap.Uint32("asn", asn), zap.String("metricType", metricType.String())) - segmentList, err := cspf.Cspf(srcRouterID, dstRouterID, asn, metricType, ss.ted) + segmentList, err := cspf.CSPF(srcRouterID, dstRouterID, asn, metricType, ss.ted) if err != nil { return nil, fmt.Errorf("CSPF computation failed: %w", err) } From 1c8685d613e5735b4399ad5e3b2363f0a87e1762 Mon Sep 17 00:00:00 2001 From: watal Date: Sat, 1 Nov 2025 21:30:35 -0400 Subject: [PATCH 2/5] feat(cspf): add loose source routing with waypoints --- api/pola/v1/pola.pb.go | 1818 +++++++++++++------------------ api/pola/v1/pola.proto | 6 + api/pola/v1/pola_grpc.pb.go | 2 +- cmd/pola/sr_policy_add.go | 17 +- internal/pkg/cspf/cspf.go | 81 ++ internal/pkg/table/sr_policy.go | 35 + pkg/server/grpc_server.go | 30 +- 7 files changed, 900 insertions(+), 1089 deletions(-) diff --git a/api/pola/v1/pola.pb.go b/api/pola/v1/pola.pb.go index aec3d106..a4c5d5cf 100644 --- a/api/pola/v1/pola.pb.go +++ b/api/pola/v1/pola.pb.go @@ -5,18 +5,18 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.12.4 -// source: pola.proto +// protoc-gen-go v1.36.5 +// protoc v6.33.0 +// source: api/pola/v1/pola.proto package v1 import ( - reflect "reflect" - sync "sync" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" + unsafe "unsafe" ) const ( @@ -59,11 +59,11 @@ func (x SRPolicyType) String() string { } func (SRPolicyType) Descriptor() protoreflect.EnumDescriptor { - return file_pola_proto_enumTypes[0].Descriptor() + return file_api_pola_v1_pola_proto_enumTypes[0].Descriptor() } func (SRPolicyType) Type() protoreflect.EnumType { - return &file_pola_proto_enumTypes[0] + return &file_api_pola_v1_pola_proto_enumTypes[0] } func (x SRPolicyType) Number() protoreflect.EnumNumber { @@ -72,7 +72,7 @@ func (x SRPolicyType) Number() protoreflect.EnumNumber { // Deprecated: Use SRPolicyType.Descriptor instead. func (SRPolicyType) EnumDescriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{0} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{0} } type SessionState int32 @@ -108,11 +108,11 @@ func (x SessionState) String() string { } func (SessionState) Descriptor() protoreflect.EnumDescriptor { - return file_pola_proto_enumTypes[1].Descriptor() + return file_api_pola_v1_pola_proto_enumTypes[1].Descriptor() } func (SessionState) Type() protoreflect.EnumType { - return &file_pola_proto_enumTypes[1] + return &file_api_pola_v1_pola_proto_enumTypes[1] } func (x SessionState) Number() protoreflect.EnumNumber { @@ -121,7 +121,7 @@ func (x SessionState) Number() protoreflect.EnumNumber { // Deprecated: Use SessionState.Descriptor instead. func (SessionState) EnumDescriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{1} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{1} } type MetricType int32 @@ -163,11 +163,11 @@ func (x MetricType) String() string { } func (MetricType) Descriptor() protoreflect.EnumDescriptor { - return file_pola_proto_enumTypes[2].Descriptor() + return file_api_pola_v1_pola_proto_enumTypes[2].Descriptor() } func (MetricType) Type() protoreflect.EnumType { - return &file_pola_proto_enumTypes[2] + return &file_api_pola_v1_pola_proto_enumTypes[2] } func (x MetricType) Number() protoreflect.EnumNumber { @@ -176,27 +176,24 @@ func (x MetricType) Number() protoreflect.EnumNumber { // Deprecated: Use MetricType.Descriptor instead. func (MetricType) EnumDescriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{2} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{2} } type Segment struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Sid string `protobuf:"bytes,1,opt,name=sid,proto3" json:"sid,omitempty"` + SidStructure string `protobuf:"bytes,2,opt,name=sid_structure,json=sidStructure,proto3" json:"sid_structure,omitempty"` + LocalAddr string `protobuf:"bytes,3,opt,name=local_addr,json=localAddr,proto3" json:"local_addr,omitempty"` + RemoteAddr string `protobuf:"bytes,4,opt,name=remote_addr,json=remoteAddr,proto3" json:"remote_addr,omitempty"` unknownFields protoimpl.UnknownFields - - Sid string `protobuf:"bytes,1,opt,name=sid,proto3" json:"sid,omitempty"` - SidStructure string `protobuf:"bytes,2,opt,name=sid_structure,json=sidStructure,proto3" json:"sid_structure,omitempty"` - LocalAddr string `protobuf:"bytes,3,opt,name=local_addr,json=localAddr,proto3" json:"local_addr,omitempty"` - RemoteAddr string `protobuf:"bytes,4,opt,name=remote_addr,json=remoteAddr,proto3" json:"remote_addr,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Segment) Reset() { *x = Segment{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Segment) String() string { @@ -206,8 +203,8 @@ func (x *Segment) String() string { func (*Segment) ProtoMessage() {} func (x *Segment) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[0] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -219,7 +216,7 @@ func (x *Segment) ProtoReflect() protoreflect.Message { // Deprecated: Use Segment.ProtoReflect.Descriptor instead. func (*Segment) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{0} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{0} } func (x *Segment) GetSid() string { @@ -250,31 +247,81 @@ func (x *Segment) GetRemoteAddr() string { return "" } -type SRPolicy struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type Waypoint struct { + state protoimpl.MessageState `protogen:"open.v1"` + RouterId string `protobuf:"bytes,1,opt,name=router_id,json=routerId,proto3" json:"router_id,omitempty"` + Sid string `protobuf:"bytes,2,opt,name=sid,proto3" json:"sid,omitempty"` // optional: explicit SID override unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} - PcepSessionAddr []byte `protobuf:"bytes,1,opt,name=pcep_session_addr,json=pcepSessionAddr,proto3" json:"pcep_session_addr,omitempty"` - SrcAddr []byte `protobuf:"bytes,2,opt,name=src_addr,json=srcAddr,proto3" json:"src_addr,omitempty"` - DstAddr []byte `protobuf:"bytes,3,opt,name=dst_addr,json=dstAddr,proto3" json:"dst_addr,omitempty"` - SrcRouterId string `protobuf:"bytes,4,opt,name=src_router_id,json=srcRouterId,proto3" json:"src_router_id,omitempty"` - DstRouterId string `protobuf:"bytes,5,opt,name=dst_router_id,json=dstRouterId,proto3" json:"dst_router_id,omitempty"` - Color uint32 `protobuf:"varint,6,opt,name=color,proto3" json:"color,omitempty"` - Preference uint32 `protobuf:"varint,7,opt,name=preference,proto3" json:"preference,omitempty"` - PolicyName string `protobuf:"bytes,8,opt,name=policy_name,json=policyName,proto3" json:"policy_name,omitempty"` - Type SRPolicyType `protobuf:"varint,9,opt,name=type,proto3,enum=api.pola.v1.SRPolicyType" json:"type,omitempty"` - SegmentList []*Segment `protobuf:"bytes,10,rep,name=segment_list,json=segmentList,proto3" json:"segment_list,omitempty"` - Metric MetricType `protobuf:"varint,11,opt,name=metric,proto3,enum=api.pola.v1.MetricType" json:"metric,omitempty"` +func (x *Waypoint) Reset() { + *x = Waypoint{} + mi := &file_api_pola_v1_pola_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *SRPolicy) Reset() { - *x = SRPolicy{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[1] +func (x *Waypoint) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Waypoint) ProtoMessage() {} + +func (x *Waypoint) ProtoReflect() protoreflect.Message { + mi := &file_api_pola_v1_pola_proto_msgTypes[1] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Waypoint.ProtoReflect.Descriptor instead. +func (*Waypoint) Descriptor() ([]byte, []int) { + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{1} +} + +func (x *Waypoint) GetRouterId() string { + if x != nil { + return x.RouterId } + return "" +} + +func (x *Waypoint) GetSid() string { + if x != nil { + return x.Sid + } + return "" +} + +type SRPolicy struct { + state protoimpl.MessageState `protogen:"open.v1"` + PcepSessionAddr []byte `protobuf:"bytes,1,opt,name=pcep_session_addr,json=pcepSessionAddr,proto3" json:"pcep_session_addr,omitempty"` + SrcAddr []byte `protobuf:"bytes,2,opt,name=src_addr,json=srcAddr,proto3" json:"src_addr,omitempty"` + DstAddr []byte `protobuf:"bytes,3,opt,name=dst_addr,json=dstAddr,proto3" json:"dst_addr,omitempty"` + SrcRouterId string `protobuf:"bytes,4,opt,name=src_router_id,json=srcRouterId,proto3" json:"src_router_id,omitempty"` + DstRouterId string `protobuf:"bytes,5,opt,name=dst_router_id,json=dstRouterId,proto3" json:"dst_router_id,omitempty"` + Color uint32 `protobuf:"varint,6,opt,name=color,proto3" json:"color,omitempty"` + Preference uint32 `protobuf:"varint,7,opt,name=preference,proto3" json:"preference,omitempty"` + PolicyName string `protobuf:"bytes,8,opt,name=policy_name,json=policyName,proto3" json:"policy_name,omitempty"` + Type SRPolicyType `protobuf:"varint,9,opt,name=type,proto3,enum=api.pola.v1.SRPolicyType" json:"type,omitempty"` + SegmentList []*Segment `protobuf:"bytes,10,rep,name=segment_list,json=segmentList,proto3" json:"segment_list,omitempty"` + Metric MetricType `protobuf:"varint,11,opt,name=metric,proto3,enum=api.pola.v1.MetricType" json:"metric,omitempty"` + Waypoints []*Waypoint `protobuf:"bytes,12,rep,name=waypoints,proto3" json:"waypoints,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SRPolicy) Reset() { + *x = SRPolicy{} + mi := &file_api_pola_v1_pola_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SRPolicy) String() string { @@ -284,8 +331,8 @@ func (x *SRPolicy) String() string { func (*SRPolicy) ProtoMessage() {} func (x *SRPolicy) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[2] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -297,7 +344,7 @@ func (x *SRPolicy) ProtoReflect() protoreflect.Message { // Deprecated: Use SRPolicy.ProtoReflect.Descriptor instead. func (*SRPolicy) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{1} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{2} } func (x *SRPolicy) GetPcepSessionAddr() []byte { @@ -377,23 +424,27 @@ func (x *SRPolicy) GetMetric() MetricType { return MetricType_METRIC_TYPE_UNSPECIFIED } +func (x *SRPolicy) GetWaypoints() []*Waypoint { + if x != nil { + return x.Waypoints + } + return nil +} + type CreateSRPolicyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + SrPolicy *SRPolicy `protobuf:"bytes,1,opt,name=sr_policy,json=srPolicy,proto3" json:"sr_policy,omitempty"` + Asn uint32 `protobuf:"varint,2,opt,name=asn,proto3" json:"asn,omitempty"` + SidValidate bool `protobuf:"varint,3,opt,name=sid_validate,json=sidValidate,proto3" json:"sid_validate,omitempty"` unknownFields protoimpl.UnknownFields - - SrPolicy *SRPolicy `protobuf:"bytes,1,opt,name=sr_policy,json=srPolicy,proto3" json:"sr_policy,omitempty"` - Asn uint32 `protobuf:"varint,2,opt,name=asn,proto3" json:"asn,omitempty"` - SidValidate bool `protobuf:"varint,3,opt,name=sid_validate,json=sidValidate,proto3" json:"sid_validate,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateSRPolicyRequest) Reset() { *x = CreateSRPolicyRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CreateSRPolicyRequest) String() string { @@ -403,8 +454,8 @@ func (x *CreateSRPolicyRequest) String() string { func (*CreateSRPolicyRequest) ProtoMessage() {} func (x *CreateSRPolicyRequest) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[3] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -416,7 +467,7 @@ func (x *CreateSRPolicyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateSRPolicyRequest.ProtoReflect.Descriptor instead. func (*CreateSRPolicyRequest) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{2} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{3} } func (x *CreateSRPolicyRequest) GetSrPolicy() *SRPolicy { @@ -441,20 +492,17 @@ func (x *CreateSRPolicyRequest) GetSidValidate() bool { } type CreateSRPolicyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + IsSuccess bool `protobuf:"varint,1,opt,name=is_success,json=isSuccess,proto3" json:"is_success,omitempty"` unknownFields protoimpl.UnknownFields - - IsSuccess bool `protobuf:"varint,1,opt,name=is_success,json=isSuccess,proto3" json:"is_success,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateSRPolicyResponse) Reset() { *x = CreateSRPolicyResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CreateSRPolicyResponse) String() string { @@ -464,8 +512,8 @@ func (x *CreateSRPolicyResponse) String() string { func (*CreateSRPolicyResponse) ProtoMessage() {} func (x *CreateSRPolicyResponse) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[4] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -477,7 +525,7 @@ func (x *CreateSRPolicyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateSRPolicyResponse.ProtoReflect.Descriptor instead. func (*CreateSRPolicyResponse) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{3} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{4} } func (x *CreateSRPolicyResponse) GetIsSuccess() bool { @@ -488,21 +536,18 @@ func (x *CreateSRPolicyResponse) GetIsSuccess() bool { } type DeleteSRPolicyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + SrPolicy *SRPolicy `protobuf:"bytes,1,opt,name=sr_policy,json=srPolicy,proto3" json:"sr_policy,omitempty"` + Asn uint32 `protobuf:"varint,2,opt,name=asn,proto3" json:"asn,omitempty"` unknownFields protoimpl.UnknownFields - - SrPolicy *SRPolicy `protobuf:"bytes,1,opt,name=sr_policy,json=srPolicy,proto3" json:"sr_policy,omitempty"` - Asn uint32 `protobuf:"varint,2,opt,name=asn,proto3" json:"asn,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteSRPolicyRequest) Reset() { *x = DeleteSRPolicyRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteSRPolicyRequest) String() string { @@ -512,8 +557,8 @@ func (x *DeleteSRPolicyRequest) String() string { func (*DeleteSRPolicyRequest) ProtoMessage() {} func (x *DeleteSRPolicyRequest) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[5] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -525,7 +570,7 @@ func (x *DeleteSRPolicyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteSRPolicyRequest.ProtoReflect.Descriptor instead. func (*DeleteSRPolicyRequest) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{4} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{5} } func (x *DeleteSRPolicyRequest) GetSrPolicy() *SRPolicy { @@ -543,20 +588,17 @@ func (x *DeleteSRPolicyRequest) GetAsn() uint32 { } type DeleteSRPolicyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + IsSuccess bool `protobuf:"varint,1,opt,name=is_success,json=isSuccess,proto3" json:"is_success,omitempty"` unknownFields protoimpl.UnknownFields - - IsSuccess bool `protobuf:"varint,1,opt,name=is_success,json=isSuccess,proto3" json:"is_success,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteSRPolicyResponse) Reset() { *x = DeleteSRPolicyResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteSRPolicyResponse) String() string { @@ -566,8 +608,8 @@ func (x *DeleteSRPolicyResponse) String() string { func (*DeleteSRPolicyResponse) ProtoMessage() {} func (x *DeleteSRPolicyResponse) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[6] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -579,7 +621,7 @@ func (x *DeleteSRPolicyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteSRPolicyResponse.ProtoReflect.Descriptor instead. func (*DeleteSRPolicyResponse) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{5} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{6} } func (x *DeleteSRPolicyResponse) GetIsSuccess() bool { @@ -590,23 +632,20 @@ func (x *DeleteSRPolicyResponse) GetIsSuccess() bool { } type Session struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Addr []byte `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"` + State SessionState `protobuf:"varint,2,opt,name=state,proto3,enum=api.pola.v1.SessionState" json:"state,omitempty"` + Caps []string `protobuf:"bytes,3,rep,name=caps,proto3" json:"caps,omitempty"` + IsSynced bool `protobuf:"varint,4,opt,name=is_synced,json=isSynced,proto3" json:"is_synced,omitempty"` unknownFields protoimpl.UnknownFields - - Addr []byte `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"` - State SessionState `protobuf:"varint,2,opt,name=state,proto3,enum=api.pola.v1.SessionState" json:"state,omitempty"` - Caps []string `protobuf:"bytes,3,rep,name=caps,proto3" json:"caps,omitempty"` - IsSynced bool `protobuf:"varint,4,opt,name=is_synced,json=isSynced,proto3" json:"is_synced,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Session) Reset() { *x = Session{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Session) String() string { @@ -616,8 +655,8 @@ func (x *Session) String() string { func (*Session) ProtoMessage() {} func (x *Session) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[7] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -629,7 +668,7 @@ func (x *Session) ProtoReflect() protoreflect.Message { // Deprecated: Use Session.ProtoReflect.Descriptor instead. func (*Session) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{6} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{7} } func (x *Session) GetAddr() []byte { @@ -661,20 +700,17 @@ func (x *Session) GetIsSynced() bool { } type SessionList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Sessions []*Session `protobuf:"bytes,1,rep,name=sessions,proto3" json:"sessions,omitempty"` unknownFields protoimpl.UnknownFields - - Sessions []*Session `protobuf:"bytes,1,rep,name=sessions,proto3" json:"sessions,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SessionList) Reset() { *x = SessionList{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SessionList) String() string { @@ -684,8 +720,8 @@ func (x *SessionList) String() string { func (*SessionList) ProtoMessage() {} func (x *SessionList) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[8] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -697,7 +733,7 @@ func (x *SessionList) ProtoReflect() protoreflect.Message { // Deprecated: Use SessionList.ProtoReflect.Descriptor instead. func (*SessionList) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{7} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{8} } func (x *SessionList) GetSessions() []*Session { @@ -708,20 +744,17 @@ func (x *SessionList) GetSessions() []*Session { } type SRPolicyList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + SrPolicies []*SRPolicy `protobuf:"bytes,1,rep,name=sr_policies,json=srPolicies,proto3" json:"sr_policies,omitempty"` unknownFields protoimpl.UnknownFields - - SrPolicies []*SRPolicy `protobuf:"bytes,1,rep,name=sr_policies,json=srPolicies,proto3" json:"sr_policies,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SRPolicyList) Reset() { *x = SRPolicyList{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SRPolicyList) String() string { @@ -731,8 +764,8 @@ func (x *SRPolicyList) String() string { func (*SRPolicyList) ProtoMessage() {} func (x *SRPolicyList) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[9] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -744,7 +777,7 @@ func (x *SRPolicyList) ProtoReflect() protoreflect.Message { // Deprecated: Use SRPolicyList.ProtoReflect.Descriptor instead. func (*SRPolicyList) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{8} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{9} } func (x *SRPolicyList) GetSrPolicies() []*SRPolicy { @@ -755,22 +788,19 @@ func (x *SRPolicyList) GetSrPolicies() []*SRPolicy { } type EndpointBehavior struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Behavior uint32 `protobuf:"varint,1,opt,name=behavior,proto3" json:"behavior,omitempty"` + Flags uint32 `protobuf:"varint,2,opt,name=flags,proto3" json:"flags,omitempty"` + Algorithm uint32 `protobuf:"varint,3,opt,name=algorithm,proto3" json:"algorithm,omitempty"` unknownFields protoimpl.UnknownFields - - Behavior uint32 `protobuf:"varint,1,opt,name=behavior,proto3" json:"behavior,omitempty"` - Flags uint32 `protobuf:"varint,2,opt,name=flags,proto3" json:"flags,omitempty"` - Algorithm uint32 `protobuf:"varint,3,opt,name=algorithm,proto3" json:"algorithm,omitempty"` + sizeCache protoimpl.SizeCache } func (x *EndpointBehavior) Reset() { *x = EndpointBehavior{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EndpointBehavior) String() string { @@ -780,8 +810,8 @@ func (x *EndpointBehavior) String() string { func (*EndpointBehavior) ProtoMessage() {} func (x *EndpointBehavior) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[10] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -793,7 +823,7 @@ func (x *EndpointBehavior) ProtoReflect() protoreflect.Message { // Deprecated: Use EndpointBehavior.ProtoReflect.Descriptor instead. func (*EndpointBehavior) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{9} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{10} } func (x *EndpointBehavior) GetBehavior() uint32 { @@ -818,23 +848,20 @@ func (x *EndpointBehavior) GetAlgorithm() uint32 { } type SidStructure struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + LocalBlock uint32 `protobuf:"varint,1,opt,name=local_block,json=localBlock,proto3" json:"local_block,omitempty"` + LocalNode uint32 `protobuf:"varint,2,opt,name=local_node,json=localNode,proto3" json:"local_node,omitempty"` + LocalFunc uint32 `protobuf:"varint,3,opt,name=local_func,json=localFunc,proto3" json:"local_func,omitempty"` + LocalArg uint32 `protobuf:"varint,4,opt,name=local_arg,json=localArg,proto3" json:"local_arg,omitempty"` unknownFields protoimpl.UnknownFields - - LocalBlock uint32 `protobuf:"varint,1,opt,name=local_block,json=localBlock,proto3" json:"local_block,omitempty"` - LocalNode uint32 `protobuf:"varint,2,opt,name=local_node,json=localNode,proto3" json:"local_node,omitempty"` - LocalFunc uint32 `protobuf:"varint,3,opt,name=local_func,json=localFunc,proto3" json:"local_func,omitempty"` - LocalArg uint32 `protobuf:"varint,4,opt,name=local_arg,json=localArg,proto3" json:"local_arg,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SidStructure) Reset() { *x = SidStructure{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SidStructure) String() string { @@ -844,8 +871,8 @@ func (x *SidStructure) String() string { func (*SidStructure) ProtoMessage() {} func (x *SidStructure) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[11] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -857,7 +884,7 @@ func (x *SidStructure) ProtoReflect() protoreflect.Message { // Deprecated: Use SidStructure.ProtoReflect.Descriptor instead. func (*SidStructure) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{10} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{11} } func (x *SidStructure) GetLocalBlock() uint32 { @@ -889,20 +916,17 @@ func (x *SidStructure) GetLocalArg() uint32 { } type SID struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Sid string `protobuf:"bytes,1,opt,name=sid,proto3" json:"sid,omitempty"` unknownFields protoimpl.UnknownFields - - Sid string `protobuf:"bytes,1,opt,name=sid,proto3" json:"sid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SID) Reset() { *x = SID{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SID) String() string { @@ -912,8 +936,8 @@ func (x *SID) String() string { func (*SID) ProtoMessage() {} func (x *SID) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[12] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -925,7 +949,7 @@ func (x *SID) ProtoReflect() protoreflect.Message { // Deprecated: Use SID.ProtoReflect.Descriptor instead. func (*SID) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{11} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{12} } func (x *SID) GetSid() string { @@ -936,20 +960,17 @@ func (x *SID) GetSid() string { } type MultiTopoID struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + MultiTopoId uint32 `protobuf:"varint,1,opt,name=multi_topo_id,json=multiTopoId,proto3" json:"multi_topo_id,omitempty"` unknownFields protoimpl.UnknownFields - - MultiTopoId uint32 `protobuf:"varint,1,opt,name=multi_topo_id,json=multiTopoId,proto3" json:"multi_topo_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MultiTopoID) Reset() { *x = MultiTopoID{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MultiTopoID) String() string { @@ -959,8 +980,8 @@ func (x *MultiTopoID) String() string { func (*MultiTopoID) ProtoMessage() {} func (x *MultiTopoID) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[13] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -972,7 +993,7 @@ func (x *MultiTopoID) ProtoReflect() protoreflect.Message { // Deprecated: Use MultiTopoID.ProtoReflect.Descriptor instead. func (*MultiTopoID) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{12} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{13} } func (x *MultiTopoID) GetMultiTopoId() uint32 { @@ -983,23 +1004,20 @@ func (x *MultiTopoID) GetMultiTopoId() uint32 { } type LsSrv6SID struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Sids []*SID `protobuf:"bytes,1,rep,name=sids,proto3" json:"sids,omitempty"` - EndpointBehavior *EndpointBehavior `protobuf:"bytes,2,opt,name=endpoint_behavior,json=endpointBehavior,proto3" json:"endpoint_behavior,omitempty"` - SidStructure *SidStructure `protobuf:"bytes,3,opt,name=sid_structure,json=sidStructure,proto3" json:"sid_structure,omitempty"` - MultiTopoIds []*MultiTopoID `protobuf:"bytes,4,rep,name=multi_topo_ids,json=multiTopoIds,proto3" json:"multi_topo_ids,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Sids []*SID `protobuf:"bytes,1,rep,name=sids,proto3" json:"sids,omitempty"` + EndpointBehavior *EndpointBehavior `protobuf:"bytes,2,opt,name=endpoint_behavior,json=endpointBehavior,proto3" json:"endpoint_behavior,omitempty"` + SidStructure *SidStructure `protobuf:"bytes,3,opt,name=sid_structure,json=sidStructure,proto3" json:"sid_structure,omitempty"` + MultiTopoIds []*MultiTopoID `protobuf:"bytes,4,rep,name=multi_topo_ids,json=multiTopoIds,proto3" json:"multi_topo_ids,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *LsSrv6SID) Reset() { *x = LsSrv6SID{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *LsSrv6SID) String() string { @@ -1009,8 +1027,8 @@ func (x *LsSrv6SID) String() string { func (*LsSrv6SID) ProtoMessage() {} func (x *LsSrv6SID) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[14] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1022,7 +1040,7 @@ func (x *LsSrv6SID) ProtoReflect() protoreflect.Message { // Deprecated: Use LsSrv6SID.ProtoReflect.Descriptor instead. func (*LsSrv6SID) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{13} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{14} } func (x *LsSrv6SID) GetSids() []*SID { @@ -1054,21 +1072,18 @@ func (x *LsSrv6SID) GetMultiTopoIds() []*MultiTopoID { } type LsPrefix struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Prefix string `protobuf:"bytes,1,opt,name=prefix,proto3" json:"prefix,omitempty"` + SidIndex uint32 `protobuf:"varint,2,opt,name=sid_index,json=sidIndex,proto3" json:"sid_index,omitempty"` unknownFields protoimpl.UnknownFields - - Prefix string `protobuf:"bytes,1,opt,name=prefix,proto3" json:"prefix,omitempty"` - SidIndex uint32 `protobuf:"varint,2,opt,name=sid_index,json=sidIndex,proto3" json:"sid_index,omitempty"` + sizeCache protoimpl.SizeCache } func (x *LsPrefix) Reset() { *x = LsPrefix{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *LsPrefix) String() string { @@ -1078,8 +1093,8 @@ func (x *LsPrefix) String() string { func (*LsPrefix) ProtoMessage() {} func (x *LsPrefix) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[15] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1091,7 +1106,7 @@ func (x *LsPrefix) ProtoReflect() protoreflect.Message { // Deprecated: Use LsPrefix.ProtoReflect.Descriptor instead. func (*LsPrefix) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{14} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{15} } func (x *LsPrefix) GetPrefix() string { @@ -1109,21 +1124,18 @@ func (x *LsPrefix) GetSidIndex() uint32 { } type Metric struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Type MetricType `protobuf:"varint,1,opt,name=type,proto3,enum=api.pola.v1.MetricType" json:"type,omitempty"` + Value uint32 `protobuf:"varint,2,opt,name=value,proto3" json:"value,omitempty"` unknownFields protoimpl.UnknownFields - - Type MetricType `protobuf:"varint,1,opt,name=type,proto3,enum=api.pola.v1.MetricType" json:"type,omitempty"` - Value uint32 `protobuf:"varint,2,opt,name=value,proto3" json:"value,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Metric) Reset() { *x = Metric{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Metric) String() string { @@ -1133,8 +1145,8 @@ func (x *Metric) String() string { func (*Metric) ProtoMessage() {} func (x *Metric) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[16] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1146,7 +1158,7 @@ func (x *Metric) ProtoReflect() protoreflect.Message { // Deprecated: Use Metric.ProtoReflect.Descriptor instead. func (*Metric) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{15} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{16} } func (x *Metric) GetType() MetricType { @@ -1164,22 +1176,19 @@ func (x *Metric) GetValue() uint32 { } type Srv6EndXSID struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EndpointBehavior uint32 `protobuf:"varint,1,opt,name=endpoint_behavior,json=endpointBehavior,proto3" json:"endpoint_behavior,omitempty"` - Sids []*SID `protobuf:"bytes,2,rep,name=sids,proto3" json:"sids,omitempty"` - SidStructure *SidStructure `protobuf:"bytes,3,opt,name=sid_structure,json=sidStructure,proto3" json:"sid_structure,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + EndpointBehavior uint32 `protobuf:"varint,1,opt,name=endpoint_behavior,json=endpointBehavior,proto3" json:"endpoint_behavior,omitempty"` + Sids []*SID `protobuf:"bytes,2,rep,name=sids,proto3" json:"sids,omitempty"` + SidStructure *SidStructure `protobuf:"bytes,3,opt,name=sid_structure,json=sidStructure,proto3" json:"sid_structure,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Srv6EndXSID) Reset() { *x = Srv6EndXSID{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Srv6EndXSID) String() string { @@ -1189,8 +1198,8 @@ func (x *Srv6EndXSID) String() string { func (*Srv6EndXSID) ProtoMessage() {} func (x *Srv6EndXSID) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[17] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1202,7 +1211,7 @@ func (x *Srv6EndXSID) ProtoReflect() protoreflect.Message { // Deprecated: Use Srv6EndXSID.ProtoReflect.Descriptor instead. func (*Srv6EndXSID) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{16} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{17} } func (x *Srv6EndXSID) GetEndpointBehavior() uint32 { @@ -1227,28 +1236,25 @@ func (x *Srv6EndXSID) GetSidStructure() *SidStructure { } type LsLink struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - LocalRouterId string `protobuf:"bytes,1,opt,name=local_router_id,json=localRouterId,proto3" json:"local_router_id,omitempty"` - LocalAsn uint32 `protobuf:"varint,2,opt,name=local_asn,json=localAsn,proto3" json:"local_asn,omitempty"` - LocalIp string `protobuf:"bytes,3,opt,name=local_ip,json=localIp,proto3" json:"local_ip,omitempty"` - RemoteRouterId string `protobuf:"bytes,4,opt,name=remote_router_id,json=remoteRouterId,proto3" json:"remote_router_id,omitempty"` - RemoteAsn uint32 `protobuf:"varint,5,opt,name=remote_asn,json=remoteAsn,proto3" json:"remote_asn,omitempty"` - RemoteIp string `protobuf:"bytes,6,opt,name=remote_ip,json=remoteIp,proto3" json:"remote_ip,omitempty"` - Metrics []*Metric `protobuf:"bytes,7,rep,name=metrics,proto3" json:"metrics,omitempty"` - AdjSid uint32 `protobuf:"varint,8,opt,name=adj_sid,json=adjSid,proto3" json:"adj_sid,omitempty"` - Srv6EndXSid *Srv6EndXSID `protobuf:"bytes,9,opt,name=srv6_end_x_sid,json=srv6EndXSid,proto3" json:"srv6_end_x_sid,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + LocalRouterId string `protobuf:"bytes,1,opt,name=local_router_id,json=localRouterId,proto3" json:"local_router_id,omitempty"` + LocalAsn uint32 `protobuf:"varint,2,opt,name=local_asn,json=localAsn,proto3" json:"local_asn,omitempty"` + LocalIp string `protobuf:"bytes,3,opt,name=local_ip,json=localIp,proto3" json:"local_ip,omitempty"` + RemoteRouterId string `protobuf:"bytes,4,opt,name=remote_router_id,json=remoteRouterId,proto3" json:"remote_router_id,omitempty"` + RemoteAsn uint32 `protobuf:"varint,5,opt,name=remote_asn,json=remoteAsn,proto3" json:"remote_asn,omitempty"` + RemoteIp string `protobuf:"bytes,6,opt,name=remote_ip,json=remoteIp,proto3" json:"remote_ip,omitempty"` + Metrics []*Metric `protobuf:"bytes,7,rep,name=metrics,proto3" json:"metrics,omitempty"` + AdjSid uint32 `protobuf:"varint,8,opt,name=adj_sid,json=adjSid,proto3" json:"adj_sid,omitempty"` + Srv6EndXSid *Srv6EndXSID `protobuf:"bytes,9,opt,name=srv6_end_x_sid,json=srv6EndXSid,proto3" json:"srv6_end_x_sid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *LsLink) Reset() { *x = LsLink{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *LsLink) String() string { @@ -1258,8 +1264,8 @@ func (x *LsLink) String() string { func (*LsLink) ProtoMessage() {} func (x *LsLink) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[18] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1271,7 +1277,7 @@ func (x *LsLink) ProtoReflect() protoreflect.Message { // Deprecated: Use LsLink.ProtoReflect.Descriptor instead. func (*LsLink) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{17} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{18} } func (x *LsLink) GetLocalRouterId() string { @@ -1338,28 +1344,25 @@ func (x *LsLink) GetSrv6EndXSid() *Srv6EndXSID { } type LsNode struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Asn uint32 `protobuf:"varint,1,opt,name=asn,proto3" json:"asn,omitempty"` + RouterId string `protobuf:"bytes,2,opt,name=router_id,json=routerId,proto3" json:"router_id,omitempty"` + IsisAreaId string `protobuf:"bytes,3,opt,name=isis_area_id,json=isisAreaId,proto3" json:"isis_area_id,omitempty"` + Hostname string `protobuf:"bytes,4,opt,name=hostname,proto3" json:"hostname,omitempty"` + SrgbBegin uint32 `protobuf:"varint,5,opt,name=srgb_begin,json=srgbBegin,proto3" json:"srgb_begin,omitempty"` + SrgbEnd uint32 `protobuf:"varint,6,opt,name=srgb_end,json=srgbEnd,proto3" json:"srgb_end,omitempty"` + LsLinks []*LsLink `protobuf:"bytes,7,rep,name=ls_links,json=lsLinks,proto3" json:"ls_links,omitempty"` + LsPrefixes []*LsPrefix `protobuf:"bytes,8,rep,name=ls_prefixes,json=lsPrefixes,proto3" json:"ls_prefixes,omitempty"` + LsSrv6Sids []*LsSrv6SID `protobuf:"bytes,9,rep,name=ls_srv6_sids,json=lsSrv6Sids,proto3" json:"ls_srv6_sids,omitempty"` unknownFields protoimpl.UnknownFields - - Asn uint32 `protobuf:"varint,1,opt,name=asn,proto3" json:"asn,omitempty"` - RouterId string `protobuf:"bytes,2,opt,name=router_id,json=routerId,proto3" json:"router_id,omitempty"` - IsisAreaId string `protobuf:"bytes,3,opt,name=isis_area_id,json=isisAreaId,proto3" json:"isis_area_id,omitempty"` - Hostname string `protobuf:"bytes,4,opt,name=hostname,proto3" json:"hostname,omitempty"` - SrgbBegin uint32 `protobuf:"varint,5,opt,name=srgb_begin,json=srgbBegin,proto3" json:"srgb_begin,omitempty"` - SrgbEnd uint32 `protobuf:"varint,6,opt,name=srgb_end,json=srgbEnd,proto3" json:"srgb_end,omitempty"` - LsLinks []*LsLink `protobuf:"bytes,7,rep,name=ls_links,json=lsLinks,proto3" json:"ls_links,omitempty"` - LsPrefixes []*LsPrefix `protobuf:"bytes,8,rep,name=ls_prefixes,json=lsPrefixes,proto3" json:"ls_prefixes,omitempty"` - LsSrv6Sids []*LsSrv6SID `protobuf:"bytes,9,rep,name=ls_srv6_sids,json=lsSrv6Sids,proto3" json:"ls_srv6_sids,omitempty"` + sizeCache protoimpl.SizeCache } func (x *LsNode) Reset() { *x = LsNode{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *LsNode) String() string { @@ -1369,8 +1372,8 @@ func (x *LsNode) String() string { func (*LsNode) ProtoMessage() {} func (x *LsNode) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[19] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1382,7 +1385,7 @@ func (x *LsNode) ProtoReflect() protoreflect.Message { // Deprecated: Use LsNode.ProtoReflect.Descriptor instead. func (*LsNode) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{18} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{19} } func (x *LsNode) GetAsn() uint32 { @@ -1449,21 +1452,18 @@ func (x *LsNode) GetLsSrv6Sids() []*LsSrv6SID { } type TED struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` + LsNodes []*LsNode `protobuf:"bytes,2,rep,name=ls_nodes,json=lsNodes,proto3" json:"ls_nodes,omitempty"` unknownFields protoimpl.UnknownFields - - Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` - LsNodes []*LsNode `protobuf:"bytes,2,rep,name=ls_nodes,json=lsNodes,proto3" json:"ls_nodes,omitempty"` + sizeCache protoimpl.SizeCache } func (x *TED) Reset() { *x = TED{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TED) String() string { @@ -1473,8 +1473,8 @@ func (x *TED) String() string { func (*TED) ProtoMessage() {} func (x *TED) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[20] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1486,7 +1486,7 @@ func (x *TED) ProtoReflect() protoreflect.Message { // Deprecated: Use TED.ProtoReflect.Descriptor instead. func (*TED) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{19} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{20} } func (x *TED) GetEnable() bool { @@ -1504,18 +1504,16 @@ func (x *TED) GetLsNodes() []*LsNode { } type GetSessionListRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetSessionListRequest) Reset() { *x = GetSessionListRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetSessionListRequest) String() string { @@ -1525,8 +1523,8 @@ func (x *GetSessionListRequest) String() string { func (*GetSessionListRequest) ProtoMessage() {} func (x *GetSessionListRequest) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[21] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1538,24 +1536,21 @@ func (x *GetSessionListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSessionListRequest.ProtoReflect.Descriptor instead. func (*GetSessionListRequest) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{20} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{21} } type GetSessionListResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Sessions []*Session `protobuf:"bytes,1,rep,name=sessions,proto3" json:"sessions,omitempty"` unknownFields protoimpl.UnknownFields - - Sessions []*Session `protobuf:"bytes,1,rep,name=sessions,proto3" json:"sessions,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetSessionListResponse) Reset() { *x = GetSessionListResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetSessionListResponse) String() string { @@ -1565,8 +1560,8 @@ func (x *GetSessionListResponse) String() string { func (*GetSessionListResponse) ProtoMessage() {} func (x *GetSessionListResponse) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[22] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1578,7 +1573,7 @@ func (x *GetSessionListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSessionListResponse.ProtoReflect.Descriptor instead. func (*GetSessionListResponse) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{21} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{22} } func (x *GetSessionListResponse) GetSessions() []*Session { @@ -1589,18 +1584,16 @@ func (x *GetSessionListResponse) GetSessions() []*Session { } type GetSRPolicyListRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetSRPolicyListRequest) Reset() { *x = GetSRPolicyListRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetSRPolicyListRequest) String() string { @@ -1610,8 +1603,8 @@ func (x *GetSRPolicyListRequest) String() string { func (*GetSRPolicyListRequest) ProtoMessage() {} func (x *GetSRPolicyListRequest) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[23] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1623,24 +1616,21 @@ func (x *GetSRPolicyListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSRPolicyListRequest.ProtoReflect.Descriptor instead. func (*GetSRPolicyListRequest) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{22} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{23} } type GetSRPolicyListResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + SrPolicies []*SRPolicy `protobuf:"bytes,1,rep,name=sr_policies,json=srPolicies,proto3" json:"sr_policies,omitempty"` unknownFields protoimpl.UnknownFields - - SrPolicies []*SRPolicy `protobuf:"bytes,1,rep,name=sr_policies,json=srPolicies,proto3" json:"sr_policies,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetSRPolicyListResponse) Reset() { *x = GetSRPolicyListResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetSRPolicyListResponse) String() string { @@ -1650,8 +1640,8 @@ func (x *GetSRPolicyListResponse) String() string { func (*GetSRPolicyListResponse) ProtoMessage() {} func (x *GetSRPolicyListResponse) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[24] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1663,7 +1653,7 @@ func (x *GetSRPolicyListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSRPolicyListResponse.ProtoReflect.Descriptor instead. func (*GetSRPolicyListResponse) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{23} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{24} } func (x *GetSRPolicyListResponse) GetSrPolicies() []*SRPolicy { @@ -1674,18 +1664,16 @@ func (x *GetSRPolicyListResponse) GetSrPolicies() []*SRPolicy { } type GetTEDRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetTEDRequest) Reset() { *x = GetTEDRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetTEDRequest) String() string { @@ -1695,8 +1683,8 @@ func (x *GetTEDRequest) String() string { func (*GetTEDRequest) ProtoMessage() {} func (x *GetTEDRequest) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[25] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1708,25 +1696,22 @@ func (x *GetTEDRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTEDRequest.ProtoReflect.Descriptor instead. func (*GetTEDRequest) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{24} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{25} } type GetTEDResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` + LsNodes []*LsNode `protobuf:"bytes,2,rep,name=ls_nodes,json=lsNodes,proto3" json:"ls_nodes,omitempty"` unknownFields protoimpl.UnknownFields - - Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` - LsNodes []*LsNode `protobuf:"bytes,2,rep,name=ls_nodes,json=lsNodes,proto3" json:"ls_nodes,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetTEDResponse) Reset() { *x = GetTEDResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetTEDResponse) String() string { @@ -1736,8 +1721,8 @@ func (x *GetTEDResponse) String() string { func (*GetTEDResponse) ProtoMessage() {} func (x *GetTEDResponse) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[26] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1749,7 +1734,7 @@ func (x *GetTEDResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTEDResponse.ProtoReflect.Descriptor instead. func (*GetTEDResponse) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{25} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{26} } func (x *GetTEDResponse) GetEnable() bool { @@ -1767,20 +1752,17 @@ func (x *GetTEDResponse) GetLsNodes() []*LsNode { } type DeleteSessionRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Addr []byte `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"` unknownFields protoimpl.UnknownFields - - Addr []byte `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteSessionRequest) Reset() { *x = DeleteSessionRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteSessionRequest) String() string { @@ -1790,8 +1772,8 @@ func (x *DeleteSessionRequest) String() string { func (*DeleteSessionRequest) ProtoMessage() {} func (x *DeleteSessionRequest) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[27] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1803,7 +1785,7 @@ func (x *DeleteSessionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteSessionRequest.ProtoReflect.Descriptor instead. func (*DeleteSessionRequest) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{26} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{27} } func (x *DeleteSessionRequest) GetAddr() []byte { @@ -1814,20 +1796,17 @@ func (x *DeleteSessionRequest) GetAddr() []byte { } type DeleteSessionResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + IsSuccess bool `protobuf:"varint,1,opt,name=is_success,json=isSuccess,proto3" json:"is_success,omitempty"` unknownFields protoimpl.UnknownFields - - IsSuccess bool `protobuf:"varint,1,opt,name=is_success,json=isSuccess,proto3" json:"is_success,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteSessionResponse) Reset() { *x = DeleteSessionResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_pola_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_api_pola_v1_pola_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteSessionResponse) String() string { @@ -1837,8 +1816,8 @@ func (x *DeleteSessionResponse) String() string { func (*DeleteSessionResponse) ProtoMessage() {} func (x *DeleteSessionResponse) ProtoReflect() protoreflect.Message { - mi := &file_pola_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_api_pola_v1_pola_proto_msgTypes[28] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1850,7 +1829,7 @@ func (x *DeleteSessionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteSessionResponse.ProtoReflect.Descriptor instead. func (*DeleteSessionResponse) Descriptor() ([]byte, []int) { - return file_pola_proto_rawDescGZIP(), []int{27} + return file_api_pola_v1_pola_proto_rawDescGZIP(), []int{28} } func (x *DeleteSessionResponse) GetIsSuccess() bool { @@ -1860,722 +1839,393 @@ func (x *DeleteSessionResponse) GetIsSuccess() bool { return false } -var File_pola_proto protoreflect.FileDescriptor - -var file_pola_proto_rawDesc = []byte{ - 0x0a, 0x0a, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x61, 0x70, - 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x22, 0x80, 0x01, 0x0a, 0x07, 0x53, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x73, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x69, 0x64, 0x5f, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x73, 0x69, 0x64, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, - 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x72, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x64, 0x64, 0x72, 0x22, 0xa4, 0x03, 0x0a, - 0x08, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x63, 0x65, - 0x70, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x70, 0x63, 0x65, 0x70, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x41, 0x64, 0x64, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x72, 0x63, 0x5f, 0x61, 0x64, 0x64, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x73, 0x72, 0x63, 0x41, 0x64, 0x64, 0x72, - 0x12, 0x19, 0x0a, 0x08, 0x64, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x07, 0x64, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x22, 0x0a, 0x0d, 0x73, - 0x72, 0x63, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x73, 0x72, 0x63, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x22, 0x0a, 0x0d, 0x64, 0x73, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, - 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x37, 0x0a, 0x0c, 0x73, 0x65, 0x67, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x22, 0x80, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x52, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, - 0x09, 0x73, 0x72, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x08, 0x73, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, - 0x61, 0x73, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73, 0x69, 0x64, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x22, 0x37, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, - 0x5d, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x09, 0x73, 0x72, 0x5f, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x52, 0x08, 0x73, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x61, 0x73, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, 0x6e, 0x22, 0x37, - 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, +var File_api_pola_v1_pola_proto protoreflect.FileDescriptor + +var file_api_pola_v1_pola_proto_rawDesc = string([]byte{ + 0x0a, 0x16, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x6f, 0x6c, 0x61, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, + 0x6c, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, + 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x22, 0x80, 0x01, 0x0a, 0x07, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x73, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x69, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x69, 0x64, 0x53, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x64, 0x64, 0x72, 0x22, 0x39, 0x0a, 0x08, 0x57, 0x61, 0x79, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x73, 0x69, 0x64, 0x22, 0xd9, 0x03, 0x0a, 0x08, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x63, 0x65, 0x70, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x70, 0x63, 0x65, + 0x70, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x12, 0x19, 0x0a, 0x08, + 0x73, 0x72, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, + 0x73, 0x72, 0x63, 0x41, 0x64, 0x64, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x73, 0x74, 0x5f, 0x61, + 0x64, 0x64, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x64, 0x73, 0x74, 0x41, 0x64, + 0x64, 0x72, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x72, 0x63, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x72, 0x63, 0x52, 0x6f, + 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x64, 0x73, 0x74, 0x5f, 0x72, 0x6f, + 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, + 0x6c, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, + 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x52, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x37, 0x0a, 0x0c, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x69, 0x73, 0x74, + 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x73, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x6d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x33, 0x0a, 0x09, 0x77, 0x61, + 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x79, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x09, 0x77, 0x61, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x22, + 0x80, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x09, 0x73, 0x72, 0x5f, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x52, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x52, 0x08, 0x73, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x61, 0x73, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, 0x6e, 0x12, + 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73, 0x69, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x22, 0x37, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x52, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x69, 0x73, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x09, 0x69, 0x73, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x5d, 0x0a, 0x15, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x09, 0x73, 0x72, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, + 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x08, + 0x73, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x61, 0x73, 0x6e, 0x22, 0x37, 0x0a, 0x16, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x22, 0x7f, 0x0a, 0x07, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, + 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x61, 0x64, + 0x64, 0x72, 0x12, 0x2f, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x61, 0x70, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x04, 0x63, 0x61, 0x70, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x73, 0x79, + 0x6e, 0x63, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x53, 0x79, + 0x6e, 0x63, 0x65, 0x64, 0x22, 0x3f, 0x0a, 0x0b, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x08, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x73, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x46, 0x0a, 0x0c, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0b, 0x73, 0x72, 0x5f, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x52, 0x0a, 0x73, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x22, 0x62, 0x0a, + 0x10, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, + 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x08, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x14, 0x0a, + 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, + 0x61, 0x67, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, + 0x6d, 0x22, 0x8a, 0x01, 0x0a, 0x0c, 0x53, 0x69, 0x64, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, + 0x72, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x6e, 0x6f, 0x64, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x4e, 0x6f, + 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x66, 0x75, 0x6e, 0x63, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x46, 0x75, 0x6e, + 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x72, 0x67, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x72, 0x67, 0x22, 0x17, + 0x0a, 0x03, 0x53, 0x49, 0x44, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x73, 0x69, 0x64, 0x22, 0x31, 0x0a, 0x0b, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x54, 0x6f, 0x70, 0x6f, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, + 0x74, 0x6f, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6d, + 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6f, 0x70, 0x6f, 0x49, 0x64, 0x22, 0xfd, 0x01, 0x0a, 0x09, 0x4c, + 0x73, 0x53, 0x72, 0x76, 0x36, 0x53, 0x49, 0x44, 0x12, 0x24, 0x0a, 0x04, 0x73, 0x69, 0x64, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x49, 0x44, 0x52, 0x04, 0x73, 0x69, 0x64, 0x73, 0x12, 0x4a, + 0x0a, 0x11, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, + 0x69, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x52, 0x10, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x3e, 0x0a, 0x0d, 0x73, 0x69, + 0x64, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x69, 0x64, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0c, 0x73, 0x69, + 0x64, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x3e, 0x0a, 0x0e, 0x6d, 0x75, + 0x6c, 0x74, 0x69, 0x5f, 0x74, 0x6f, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, + 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6f, 0x70, 0x6f, 0x49, 0x44, 0x52, 0x0c, 0x6d, 0x75, + 0x6c, 0x74, 0x69, 0x54, 0x6f, 0x70, 0x6f, 0x49, 0x64, 0x73, 0x22, 0x3f, 0x0a, 0x08, 0x4c, 0x73, + 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 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, 0x1b, + 0x0a, 0x09, 0x73, 0x69, 0x64, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x08, 0x73, 0x69, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x4b, 0x0a, 0x06, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa0, 0x01, 0x0a, 0x0b, 0x53, 0x72, 0x76, + 0x36, 0x45, 0x6e, 0x64, 0x58, 0x53, 0x49, 0x44, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x6e, 0x64, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x10, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x65, 0x68, + 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x24, 0x0a, 0x04, 0x73, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x49, 0x44, 0x52, 0x04, 0x73, 0x69, 0x64, 0x73, 0x12, 0x3e, 0x0a, 0x0d, 0x73, + 0x69, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x69, 0x64, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0c, 0x73, + 0x69, 0x64, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x22, 0xd5, 0x02, 0x0a, 0x06, + 0x4c, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, + 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, + 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x73, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x70, 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, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x73, 0x6e, 0x12, + 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, 0x12, 0x2d, 0x0a, 0x07, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x61, + 0x64, 0x6a, 0x5f, 0x73, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x64, + 0x6a, 0x53, 0x69, 0x64, 0x12, 0x3d, 0x0a, 0x0e, 0x73, 0x72, 0x76, 0x36, 0x5f, 0x65, 0x6e, 0x64, + 0x5f, 0x78, 0x5f, 0x73, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x72, 0x76, 0x36, 0x45, + 0x6e, 0x64, 0x58, 0x53, 0x49, 0x44, 0x52, 0x0b, 0x73, 0x72, 0x76, 0x36, 0x45, 0x6e, 0x64, 0x58, + 0x53, 0x69, 0x64, 0x22, 0xd1, 0x02, 0x0a, 0x06, 0x4c, 0x73, 0x4e, 0x6f, 0x64, 0x65, 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, 0x20, 0x0a, + 0x0c, 0x69, 0x73, 0x69, 0x73, 0x5f, 0x61, 0x72, 0x65, 0x61, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x73, 0x69, 0x73, 0x41, 0x72, 0x65, 0x61, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, + 0x72, 0x67, 0x62, 0x5f, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x09, 0x73, 0x72, 0x67, 0x62, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x72, + 0x67, 0x62, 0x5f, 0x65, 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x72, + 0x67, 0x62, 0x45, 0x6e, 0x64, 0x12, 0x2e, 0x0a, 0x08, 0x6c, 0x73, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, + 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, + 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x07, 0x6c, 0x73, + 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x36, 0x0a, 0x0b, 0x6c, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x66, + 0x69, 0x78, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x52, 0x0a, 0x6c, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x12, 0x38, 0x0a, + 0x0c, 0x6c, 0x73, 0x5f, 0x73, 0x72, 0x76, 0x36, 0x5f, 0x73, 0x69, 0x64, 0x73, 0x18, 0x09, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x73, 0x53, 0x72, 0x76, 0x36, 0x53, 0x49, 0x44, 0x52, 0x0a, 0x6c, 0x73, 0x53, + 0x72, 0x76, 0x36, 0x53, 0x69, 0x64, 0x73, 0x22, 0x4d, 0x0a, 0x03, 0x54, 0x45, 0x44, 0x12, 0x16, + 0x0a, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x6c, 0x73, 0x5f, 0x6e, 0x6f, 0x64, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, + 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x6c, + 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x53, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x4a, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x73, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x08, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x18, 0x0a, 0x16, 0x47, + 0x65, 0x74, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x51, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, 0x52, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x36, 0x0a, 0x0b, 0x73, 0x72, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0a, 0x73, 0x72, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x22, 0x0f, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x54, + 0x45, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x58, 0x0a, 0x0e, 0x47, 0x65, 0x74, + 0x54, 0x45, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x6c, 0x73, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x6c, 0x73, 0x4e, 0x6f, + 0x64, 0x65, 0x73, 0x22, 0x2a, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, + 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72, 0x22, + 0x36, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, - 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x7f, 0x0a, 0x07, 0x53, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x04, 0x61, 0x64, 0x64, 0x72, 0x12, 0x2f, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x61, 0x70, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x63, 0x61, 0x70, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x69, - 0x73, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x22, 0x3f, 0x0a, 0x0b, 0x53, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x08, 0x73, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x08, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x46, 0x0a, 0x0c, 0x53, 0x52, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0b, 0x73, 0x72, 0x5f, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x52, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0a, 0x73, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, - 0x73, 0x22, 0x62, 0x0a, 0x10, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x65, 0x68, - 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, - 0x72, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x6c, 0x67, 0x6f, 0x72, - 0x69, 0x74, 0x68, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x61, 0x6c, 0x67, 0x6f, - 0x72, 0x69, 0x74, 0x68, 0x6d, 0x22, 0x8a, 0x01, 0x0a, 0x0c, 0x53, 0x69, 0x64, 0x53, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x6f, 0x63, - 0x61, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, - 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6c, 0x6f, 0x63, - 0x61, 0x6c, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, - 0x66, 0x75, 0x6e, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, - 0x6c, 0x46, 0x75, 0x6e, 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, - 0x72, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, - 0x72, 0x67, 0x22, 0x17, 0x0a, 0x03, 0x53, 0x49, 0x44, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x69, 0x64, 0x22, 0x31, 0x0a, 0x0b, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6f, 0x70, 0x6f, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x75, - 0x6c, 0x74, 0x69, 0x5f, 0x74, 0x6f, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6f, 0x70, 0x6f, 0x49, 0x64, 0x22, 0xfd, - 0x01, 0x0a, 0x09, 0x4c, 0x73, 0x53, 0x72, 0x76, 0x36, 0x53, 0x49, 0x44, 0x12, 0x24, 0x0a, 0x04, - 0x73, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x49, 0x44, 0x52, 0x04, 0x73, 0x69, - 0x64, 0x73, 0x12, 0x4a, 0x0a, 0x11, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x62, - 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x52, 0x10, 0x65, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x3e, - 0x0a, 0x0d, 0x73, 0x69, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x64, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, - 0x52, 0x0c, 0x73, 0x69, 0x64, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x3e, - 0x0a, 0x0e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x74, 0x6f, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6f, 0x70, 0x6f, 0x49, 0x44, - 0x52, 0x0c, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6f, 0x70, 0x6f, 0x49, 0x64, 0x73, 0x22, 0x3f, - 0x0a, 0x08, 0x4c, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 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, 0x1b, 0x0a, 0x09, 0x73, 0x69, 0x64, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x73, 0x69, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, - 0x4b, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2b, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, - 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa0, 0x01, 0x0a, - 0x0b, 0x53, 0x72, 0x76, 0x36, 0x45, 0x6e, 0x64, 0x58, 0x53, 0x49, 0x44, 0x12, 0x2b, 0x0a, 0x11, - 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x24, 0x0a, 0x04, 0x73, 0x69, 0x64, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, - 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x49, 0x44, 0x52, 0x04, 0x73, 0x69, 0x64, 0x73, 0x12, - 0x3e, 0x0a, 0x0d, 0x73, 0x69, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x64, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, - 0x65, 0x52, 0x0c, 0x73, 0x69, 0x64, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x22, - 0xd5, 0x02, 0x0a, 0x06, 0x4c, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x6f, - 0x63, 0x61, 0x6c, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x73, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x73, 0x6e, 0x12, - 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x70, 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, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x61, - 0x73, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x41, 0x73, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x70, - 0x12, 0x2d, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, - 0x17, 0x0a, 0x07, 0x61, 0x64, 0x6a, 0x5f, 0x73, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x06, 0x61, 0x64, 0x6a, 0x53, 0x69, 0x64, 0x12, 0x3d, 0x0a, 0x0e, 0x73, 0x72, 0x76, 0x36, - 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x78, 0x5f, 0x73, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x72, 0x76, 0x36, 0x45, 0x6e, 0x64, 0x58, 0x53, 0x49, 0x44, 0x52, 0x0b, 0x73, 0x72, 0x76, 0x36, - 0x45, 0x6e, 0x64, 0x58, 0x53, 0x69, 0x64, 0x22, 0xd1, 0x02, 0x0a, 0x06, 0x4c, 0x73, 0x4e, 0x6f, - 0x64, 0x65, 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, 0x20, 0x0a, 0x0c, 0x69, 0x73, 0x69, 0x73, 0x5f, 0x61, 0x72, 0x65, 0x61, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x73, 0x69, 0x73, 0x41, 0x72, 0x65, - 0x61, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x1d, 0x0a, 0x0a, 0x73, 0x72, 0x67, 0x62, 0x5f, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x09, 0x73, 0x72, 0x67, 0x62, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x12, 0x19, - 0x0a, 0x08, 0x73, 0x72, 0x67, 0x62, 0x5f, 0x65, 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x07, 0x73, 0x72, 0x67, 0x62, 0x45, 0x6e, 0x64, 0x12, 0x2e, 0x0a, 0x08, 0x6c, 0x73, 0x5f, - 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x73, 0x4c, 0x69, 0x6e, 0x6b, - 0x52, 0x07, 0x6c, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x36, 0x0a, 0x0b, 0x6c, 0x73, 0x5f, - 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x73, 0x50, - 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x0a, 0x6c, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, - 0x73, 0x12, 0x38, 0x0a, 0x0c, 0x6c, 0x73, 0x5f, 0x73, 0x72, 0x76, 0x36, 0x5f, 0x73, 0x69, 0x64, - 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, - 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x73, 0x53, 0x72, 0x76, 0x36, 0x53, 0x49, 0x44, 0x52, - 0x0a, 0x6c, 0x73, 0x53, 0x72, 0x76, 0x36, 0x53, 0x69, 0x64, 0x73, 0x22, 0x4d, 0x0a, 0x03, 0x54, - 0x45, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x6c, 0x73, - 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x73, 0x4e, 0x6f, 0x64, - 0x65, 0x52, 0x07, 0x6c, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, - 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x22, 0x4a, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, - 0x08, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0x18, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x51, 0x0a, 0x17, 0x47, 0x65, 0x74, - 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x0b, 0x73, 0x72, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x52, 0x0a, 0x73, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x22, 0x0f, 0x0a, 0x0d, - 0x47, 0x65, 0x74, 0x54, 0x45, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x58, 0x0a, - 0x0e, 0x47, 0x65, 0x74, 0x54, 0x45, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x6c, 0x73, 0x5f, 0x6e, 0x6f, - 0x64, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x07, - 0x6c, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x2a, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x61, - 0x64, 0x64, 0x72, 0x22, 0x36, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, - 0x69, 0x73, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x09, 0x69, 0x73, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2a, 0x67, 0x0a, 0x0c, 0x53, - 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x53, - 0x52, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x53, - 0x52, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, - 0x50, 0x4c, 0x49, 0x43, 0x49, 0x54, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x52, 0x5f, 0x50, - 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, - 0x49, 0x43, 0x10, 0x02, 0x2a, 0x5b, 0x0a, 0x0c, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x53, - 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x50, 0x10, - 0x02, 0x2a, 0x83, 0x01, 0x0a, 0x0a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x1b, 0x0a, 0x17, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, - 0x0f, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x47, 0x50, - 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x54, 0x45, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x41, 0x59, 0x10, 0x03, 0x12, 0x18, 0x0a, - 0x14, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x48, 0x4f, 0x50, - 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x10, 0x04, 0x32, 0x96, 0x04, 0x0a, 0x0a, 0x50, 0x43, 0x45, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x59, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, + 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2a, 0x67, 0x0a, 0x0c, 0x53, 0x52, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x52, 0x5f, 0x50, 0x4f, + 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x52, 0x5f, 0x50, 0x4f, + 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x50, 0x4c, 0x49, 0x43, + 0x49, 0x54, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x52, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, + 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x10, 0x02, + 0x2a, 0x5b, 0x0a, 0x0c, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x16, 0x0a, 0x12, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x45, 0x53, 0x53, 0x49, + 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x50, 0x10, 0x02, 0x2a, 0x83, 0x01, + 0x0a, 0x0a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x17, + 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x45, 0x54, + 0x52, 0x49, 0x43, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x47, 0x50, 0x10, 0x01, 0x12, 0x12, + 0x0a, 0x0e, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, 0x45, + 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x41, 0x59, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x4d, 0x45, 0x54, + 0x52, 0x49, 0x43, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x48, 0x4f, 0x50, 0x43, 0x4f, 0x55, 0x4e, + 0x54, 0x10, 0x04, 0x32, 0x96, 0x04, 0x0a, 0x0a, 0x50, 0x43, 0x45, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x59, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x52, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x52, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x59, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x52, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, + 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, + 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, - 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x52, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x0e, - 0x47, 0x65, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x22, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x53, 0x52, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x52, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x54, 0x45, 0x44, 0x12, - 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x54, 0x45, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, + 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x52, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x52, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x41, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x54, 0x45, 0x44, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x45, 0x44, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x42, 0x24, 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6e, - 0x74, 0x74, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6f, 0x6c, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, - 0x6f, 0x6c, 0x61, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, + 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x45, 0x44, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6f, 0x6c, 0x61, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, + 0x6f, 0x6c, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x24, 0x5a, 0x22, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6e, 0x74, 0x74, 0x63, 0x6f, + 0x6d, 0x2f, 0x70, 0x6f, 0x6c, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x6f, 0x6c, 0x61, 0x2f, + 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +}) var ( - file_pola_proto_rawDescOnce sync.Once - file_pola_proto_rawDescData = file_pola_proto_rawDesc + file_api_pola_v1_pola_proto_rawDescOnce sync.Once + file_api_pola_v1_pola_proto_rawDescData []byte ) -func file_pola_proto_rawDescGZIP() []byte { - file_pola_proto_rawDescOnce.Do(func() { - file_pola_proto_rawDescData = protoimpl.X.CompressGZIP(file_pola_proto_rawDescData) +func file_api_pola_v1_pola_proto_rawDescGZIP() []byte { + file_api_pola_v1_pola_proto_rawDescOnce.Do(func() { + file_api_pola_v1_pola_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_api_pola_v1_pola_proto_rawDesc), len(file_api_pola_v1_pola_proto_rawDesc))) }) - return file_pola_proto_rawDescData + return file_api_pola_v1_pola_proto_rawDescData } -var file_pola_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_pola_proto_msgTypes = make([]protoimpl.MessageInfo, 28) -var file_pola_proto_goTypes = []interface{}{ +var file_api_pola_v1_pola_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_api_pola_v1_pola_proto_msgTypes = make([]protoimpl.MessageInfo, 29) +var file_api_pola_v1_pola_proto_goTypes = []any{ (SRPolicyType)(0), // 0: api.pola.v1.SRPolicyType (SessionState)(0), // 1: api.pola.v1.SessionState (MetricType)(0), // 2: api.pola.v1.MetricType (*Segment)(nil), // 3: api.pola.v1.Segment - (*SRPolicy)(nil), // 4: api.pola.v1.SRPolicy - (*CreateSRPolicyRequest)(nil), // 5: api.pola.v1.CreateSRPolicyRequest - (*CreateSRPolicyResponse)(nil), // 6: api.pola.v1.CreateSRPolicyResponse - (*DeleteSRPolicyRequest)(nil), // 7: api.pola.v1.DeleteSRPolicyRequest - (*DeleteSRPolicyResponse)(nil), // 8: api.pola.v1.DeleteSRPolicyResponse - (*Session)(nil), // 9: api.pola.v1.Session - (*SessionList)(nil), // 10: api.pola.v1.SessionList - (*SRPolicyList)(nil), // 11: api.pola.v1.SRPolicyList - (*EndpointBehavior)(nil), // 12: api.pola.v1.EndpointBehavior - (*SidStructure)(nil), // 13: api.pola.v1.SidStructure - (*SID)(nil), // 14: api.pola.v1.SID - (*MultiTopoID)(nil), // 15: api.pola.v1.MultiTopoID - (*LsSrv6SID)(nil), // 16: api.pola.v1.LsSrv6SID - (*LsPrefix)(nil), // 17: api.pola.v1.LsPrefix - (*Metric)(nil), // 18: api.pola.v1.Metric - (*Srv6EndXSID)(nil), // 19: api.pola.v1.Srv6EndXSID - (*LsLink)(nil), // 20: api.pola.v1.LsLink - (*LsNode)(nil), // 21: api.pola.v1.LsNode - (*TED)(nil), // 22: api.pola.v1.TED - (*GetSessionListRequest)(nil), // 23: api.pola.v1.GetSessionListRequest - (*GetSessionListResponse)(nil), // 24: api.pola.v1.GetSessionListResponse - (*GetSRPolicyListRequest)(nil), // 25: api.pola.v1.GetSRPolicyListRequest - (*GetSRPolicyListResponse)(nil), // 26: api.pola.v1.GetSRPolicyListResponse - (*GetTEDRequest)(nil), // 27: api.pola.v1.GetTEDRequest - (*GetTEDResponse)(nil), // 28: api.pola.v1.GetTEDResponse - (*DeleteSessionRequest)(nil), // 29: api.pola.v1.DeleteSessionRequest - (*DeleteSessionResponse)(nil), // 30: api.pola.v1.DeleteSessionResponse -} -var file_pola_proto_depIdxs = []int32{ + (*Waypoint)(nil), // 4: api.pola.v1.Waypoint + (*SRPolicy)(nil), // 5: api.pola.v1.SRPolicy + (*CreateSRPolicyRequest)(nil), // 6: api.pola.v1.CreateSRPolicyRequest + (*CreateSRPolicyResponse)(nil), // 7: api.pola.v1.CreateSRPolicyResponse + (*DeleteSRPolicyRequest)(nil), // 8: api.pola.v1.DeleteSRPolicyRequest + (*DeleteSRPolicyResponse)(nil), // 9: api.pola.v1.DeleteSRPolicyResponse + (*Session)(nil), // 10: api.pola.v1.Session + (*SessionList)(nil), // 11: api.pola.v1.SessionList + (*SRPolicyList)(nil), // 12: api.pola.v1.SRPolicyList + (*EndpointBehavior)(nil), // 13: api.pola.v1.EndpointBehavior + (*SidStructure)(nil), // 14: api.pola.v1.SidStructure + (*SID)(nil), // 15: api.pola.v1.SID + (*MultiTopoID)(nil), // 16: api.pola.v1.MultiTopoID + (*LsSrv6SID)(nil), // 17: api.pola.v1.LsSrv6SID + (*LsPrefix)(nil), // 18: api.pola.v1.LsPrefix + (*Metric)(nil), // 19: api.pola.v1.Metric + (*Srv6EndXSID)(nil), // 20: api.pola.v1.Srv6EndXSID + (*LsLink)(nil), // 21: api.pola.v1.LsLink + (*LsNode)(nil), // 22: api.pola.v1.LsNode + (*TED)(nil), // 23: api.pola.v1.TED + (*GetSessionListRequest)(nil), // 24: api.pola.v1.GetSessionListRequest + (*GetSessionListResponse)(nil), // 25: api.pola.v1.GetSessionListResponse + (*GetSRPolicyListRequest)(nil), // 26: api.pola.v1.GetSRPolicyListRequest + (*GetSRPolicyListResponse)(nil), // 27: api.pola.v1.GetSRPolicyListResponse + (*GetTEDRequest)(nil), // 28: api.pola.v1.GetTEDRequest + (*GetTEDResponse)(nil), // 29: api.pola.v1.GetTEDResponse + (*DeleteSessionRequest)(nil), // 30: api.pola.v1.DeleteSessionRequest + (*DeleteSessionResponse)(nil), // 31: api.pola.v1.DeleteSessionResponse +} +var file_api_pola_v1_pola_proto_depIdxs = []int32{ 0, // 0: api.pola.v1.SRPolicy.type:type_name -> api.pola.v1.SRPolicyType 3, // 1: api.pola.v1.SRPolicy.segment_list:type_name -> api.pola.v1.Segment 2, // 2: api.pola.v1.SRPolicy.metric:type_name -> api.pola.v1.MetricType - 4, // 3: api.pola.v1.CreateSRPolicyRequest.sr_policy:type_name -> api.pola.v1.SRPolicy - 4, // 4: api.pola.v1.DeleteSRPolicyRequest.sr_policy:type_name -> api.pola.v1.SRPolicy - 1, // 5: api.pola.v1.Session.state:type_name -> api.pola.v1.SessionState - 9, // 6: api.pola.v1.SessionList.sessions:type_name -> api.pola.v1.Session - 4, // 7: api.pola.v1.SRPolicyList.sr_policies:type_name -> api.pola.v1.SRPolicy - 14, // 8: api.pola.v1.LsSrv6SID.sids:type_name -> api.pola.v1.SID - 12, // 9: api.pola.v1.LsSrv6SID.endpoint_behavior:type_name -> api.pola.v1.EndpointBehavior - 13, // 10: api.pola.v1.LsSrv6SID.sid_structure:type_name -> api.pola.v1.SidStructure - 15, // 11: api.pola.v1.LsSrv6SID.multi_topo_ids:type_name -> api.pola.v1.MultiTopoID - 2, // 12: api.pola.v1.Metric.type:type_name -> api.pola.v1.MetricType - 14, // 13: api.pola.v1.Srv6EndXSID.sids:type_name -> api.pola.v1.SID - 13, // 14: api.pola.v1.Srv6EndXSID.sid_structure:type_name -> api.pola.v1.SidStructure - 18, // 15: api.pola.v1.LsLink.metrics:type_name -> api.pola.v1.Metric - 19, // 16: api.pola.v1.LsLink.srv6_end_x_sid:type_name -> api.pola.v1.Srv6EndXSID - 20, // 17: api.pola.v1.LsNode.ls_links:type_name -> api.pola.v1.LsLink - 17, // 18: api.pola.v1.LsNode.ls_prefixes:type_name -> api.pola.v1.LsPrefix - 16, // 19: api.pola.v1.LsNode.ls_srv6_sids:type_name -> api.pola.v1.LsSrv6SID - 21, // 20: api.pola.v1.TED.ls_nodes:type_name -> api.pola.v1.LsNode - 9, // 21: api.pola.v1.GetSessionListResponse.sessions:type_name -> api.pola.v1.Session - 4, // 22: api.pola.v1.GetSRPolicyListResponse.sr_policies:type_name -> api.pola.v1.SRPolicy - 21, // 23: api.pola.v1.GetTEDResponse.ls_nodes:type_name -> api.pola.v1.LsNode - 5, // 24: api.pola.v1.PCEService.CreateSRPolicy:input_type -> api.pola.v1.CreateSRPolicyRequest - 7, // 25: api.pola.v1.PCEService.DeleteSRPolicy:input_type -> api.pola.v1.DeleteSRPolicyRequest - 23, // 26: api.pola.v1.PCEService.GetSessionList:input_type -> api.pola.v1.GetSessionListRequest - 25, // 27: api.pola.v1.PCEService.GetSRPolicyList:input_type -> api.pola.v1.GetSRPolicyListRequest - 27, // 28: api.pola.v1.PCEService.GetTED:input_type -> api.pola.v1.GetTEDRequest - 29, // 29: api.pola.v1.PCEService.DeleteSession:input_type -> api.pola.v1.DeleteSessionRequest - 6, // 30: api.pola.v1.PCEService.CreateSRPolicy:output_type -> api.pola.v1.CreateSRPolicyResponse - 8, // 31: api.pola.v1.PCEService.DeleteSRPolicy:output_type -> api.pola.v1.DeleteSRPolicyResponse - 24, // 32: api.pola.v1.PCEService.GetSessionList:output_type -> api.pola.v1.GetSessionListResponse - 26, // 33: api.pola.v1.PCEService.GetSRPolicyList:output_type -> api.pola.v1.GetSRPolicyListResponse - 28, // 34: api.pola.v1.PCEService.GetTED:output_type -> api.pola.v1.GetTEDResponse - 30, // 35: api.pola.v1.PCEService.DeleteSession:output_type -> api.pola.v1.DeleteSessionResponse - 30, // [30:36] is the sub-list for method output_type - 24, // [24:30] 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_pola_proto_init() } -func file_pola_proto_init() { - if File_pola_proto != nil { + 4, // 3: api.pola.v1.SRPolicy.waypoints:type_name -> api.pola.v1.Waypoint + 5, // 4: api.pola.v1.CreateSRPolicyRequest.sr_policy:type_name -> api.pola.v1.SRPolicy + 5, // 5: api.pola.v1.DeleteSRPolicyRequest.sr_policy:type_name -> api.pola.v1.SRPolicy + 1, // 6: api.pola.v1.Session.state:type_name -> api.pola.v1.SessionState + 10, // 7: api.pola.v1.SessionList.sessions:type_name -> api.pola.v1.Session + 5, // 8: api.pola.v1.SRPolicyList.sr_policies:type_name -> api.pola.v1.SRPolicy + 15, // 9: api.pola.v1.LsSrv6SID.sids:type_name -> api.pola.v1.SID + 13, // 10: api.pola.v1.LsSrv6SID.endpoint_behavior:type_name -> api.pola.v1.EndpointBehavior + 14, // 11: api.pola.v1.LsSrv6SID.sid_structure:type_name -> api.pola.v1.SidStructure + 16, // 12: api.pola.v1.LsSrv6SID.multi_topo_ids:type_name -> api.pola.v1.MultiTopoID + 2, // 13: api.pola.v1.Metric.type:type_name -> api.pola.v1.MetricType + 15, // 14: api.pola.v1.Srv6EndXSID.sids:type_name -> api.pola.v1.SID + 14, // 15: api.pola.v1.Srv6EndXSID.sid_structure:type_name -> api.pola.v1.SidStructure + 19, // 16: api.pola.v1.LsLink.metrics:type_name -> api.pola.v1.Metric + 20, // 17: api.pola.v1.LsLink.srv6_end_x_sid:type_name -> api.pola.v1.Srv6EndXSID + 21, // 18: api.pola.v1.LsNode.ls_links:type_name -> api.pola.v1.LsLink + 18, // 19: api.pola.v1.LsNode.ls_prefixes:type_name -> api.pola.v1.LsPrefix + 17, // 20: api.pola.v1.LsNode.ls_srv6_sids:type_name -> api.pola.v1.LsSrv6SID + 22, // 21: api.pola.v1.TED.ls_nodes:type_name -> api.pola.v1.LsNode + 10, // 22: api.pola.v1.GetSessionListResponse.sessions:type_name -> api.pola.v1.Session + 5, // 23: api.pola.v1.GetSRPolicyListResponse.sr_policies:type_name -> api.pola.v1.SRPolicy + 22, // 24: api.pola.v1.GetTEDResponse.ls_nodes:type_name -> api.pola.v1.LsNode + 6, // 25: api.pola.v1.PCEService.CreateSRPolicy:input_type -> api.pola.v1.CreateSRPolicyRequest + 8, // 26: api.pola.v1.PCEService.DeleteSRPolicy:input_type -> api.pola.v1.DeleteSRPolicyRequest + 24, // 27: api.pola.v1.PCEService.GetSessionList:input_type -> api.pola.v1.GetSessionListRequest + 26, // 28: api.pola.v1.PCEService.GetSRPolicyList:input_type -> api.pola.v1.GetSRPolicyListRequest + 28, // 29: api.pola.v1.PCEService.GetTED:input_type -> api.pola.v1.GetTEDRequest + 30, // 30: api.pola.v1.PCEService.DeleteSession:input_type -> api.pola.v1.DeleteSessionRequest + 7, // 31: api.pola.v1.PCEService.CreateSRPolicy:output_type -> api.pola.v1.CreateSRPolicyResponse + 9, // 32: api.pola.v1.PCEService.DeleteSRPolicy:output_type -> api.pola.v1.DeleteSRPolicyResponse + 25, // 33: api.pola.v1.PCEService.GetSessionList:output_type -> api.pola.v1.GetSessionListResponse + 27, // 34: api.pola.v1.PCEService.GetSRPolicyList:output_type -> api.pola.v1.GetSRPolicyListResponse + 29, // 35: api.pola.v1.PCEService.GetTED:output_type -> api.pola.v1.GetTEDResponse + 31, // 36: api.pola.v1.PCEService.DeleteSession:output_type -> api.pola.v1.DeleteSessionResponse + 31, // [31:37] is the sub-list for method output_type + 25, // [25:31] 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_api_pola_v1_pola_proto_init() } +func file_api_pola_v1_pola_proto_init() { + if File_api_pola_v1_pola_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_pola_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Segment); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SRPolicy); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateSRPolicyRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateSRPolicyResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteSRPolicyRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteSRPolicyResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Session); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SessionList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SRPolicyList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EndpointBehavior); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SidStructure); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SID); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MultiTopoID); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsSrv6SID); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsPrefix); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Metric); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Srv6EndXSID); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsLink); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LsNode); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TED); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSessionListRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSessionListResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSRPolicyListRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSRPolicyListResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTEDRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTEDResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteSessionRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pola_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteSessionResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_pola_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_api_pola_v1_pola_proto_rawDesc), len(file_api_pola_v1_pola_proto_rawDesc)), NumEnums: 3, - NumMessages: 28, + NumMessages: 29, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_pola_proto_goTypes, - DependencyIndexes: file_pola_proto_depIdxs, - EnumInfos: file_pola_proto_enumTypes, - MessageInfos: file_pola_proto_msgTypes, + GoTypes: file_api_pola_v1_pola_proto_goTypes, + DependencyIndexes: file_api_pola_v1_pola_proto_depIdxs, + EnumInfos: file_api_pola_v1_pola_proto_enumTypes, + MessageInfos: file_api_pola_v1_pola_proto_msgTypes, }.Build() - File_pola_proto = out.File - file_pola_proto_rawDesc = nil - file_pola_proto_goTypes = nil - file_pola_proto_depIdxs = nil + File_api_pola_v1_pola_proto = out.File + file_api_pola_v1_pola_proto_goTypes = nil + file_api_pola_v1_pola_proto_depIdxs = nil } diff --git a/api/pola/v1/pola.proto b/api/pola/v1/pola.proto index 100f6346..02e7bf08 100644 --- a/api/pola/v1/pola.proto +++ b/api/pola/v1/pola.proto @@ -31,6 +31,11 @@ enum SRPolicyType { SR_POLICY_TYPE_DYNAMIC = 2; } +message Waypoint { + string router_id = 1; + string sid = 2; // optional: explicit SID override +} + message SRPolicy { bytes pcep_session_addr = 1; bytes src_addr = 2; @@ -43,6 +48,7 @@ message SRPolicy { SRPolicyType type = 9; repeated Segment segment_list = 10; MetricType metric = 11; + repeated Waypoint waypoints = 12; } message CreateSRPolicyRequest { diff --git a/api/pola/v1/pola_grpc.pb.go b/api/pola/v1/pola_grpc.pb.go index 3c6b0a90..6722dc7d 100644 --- a/api/pola/v1/pola_grpc.pb.go +++ b/api/pola/v1/pola_grpc.pb.go @@ -277,5 +277,5 @@ var PCEService_ServiceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "pola.proto", + Metadata: "api/pola/v1/pola.proto", } diff --git a/cmd/pola/sr_policy_add.go b/cmd/pola/sr_policy_add.go index 51063397..8e5b3b4c 100644 --- a/cmd/pola/sr_policy_add.go +++ b/cmd/pola/sr_policy_add.go @@ -70,6 +70,11 @@ type Segment struct { SIDStructure string `yaml:"sidStructure"` } +type Waypoint struct { + RouterID string `yaml:"routerID"` + SID string `yaml:"sid"` // optional: fixed SID override +} + type SRPolicy struct { PCEPSessionAddr netip.Addr `yaml:"pcepSessionAddr"` SrcAddr netip.Addr `yaml:"srcAddr"` @@ -81,6 +86,7 @@ type SRPolicy struct { Color uint32 `yaml:"color"` Type string `yaml:"type"` Metric string `yaml:"metric"` + Waypoints []Waypoint `yaml:"waypoints"` } type InputFormat struct { @@ -189,6 +195,7 @@ func addSRPolicyWithSIDValidation(input InputFormat) error { var srPolicyType pb.SRPolicyType var metric pb.MetricType var segmentList []*pb.Segment + var waypoints []*pb.Waypoint switch input.SRPolicy.Type { case "explicit": if len(input.SRPolicy.SegmentList) == 0 { @@ -220,7 +227,14 @@ func addSRPolicyWithSIDValidation(input InputFormat) error { default: return fmt.Errorf("invalid input `metric`") } - + if len(input.SRPolicy.Waypoints) != 0 { + for _, wp := range input.SRPolicy.Waypoints { + waypoints = append(waypoints, &pb.Waypoint{ + RouterId: wp.RouterID, + Sid: wp.SID, // optional + }) + } + } default: return fmt.Errorf("invalid input `type`") } @@ -234,6 +248,7 @@ func addSRPolicyWithSIDValidation(input InputFormat) error { Type: srPolicyType, SegmentList: segmentList, Metric: metric, + Waypoints: waypoints, } inputData := &pb.CreateSRPolicyRequest{ SrPolicy: srPolicy, diff --git a/internal/pkg/cspf/cspf.go b/internal/pkg/cspf/cspf.go index bca61436..94a9a53f 100644 --- a/internal/pkg/cspf/cspf.go +++ b/internal/pkg/cspf/cspf.go @@ -7,6 +7,8 @@ package cspf import ( "errors" + "fmt" + "net/netip" "github.com/nttcom/pola/internal/pkg/table" ) @@ -38,6 +40,85 @@ func CSPF(srcRouterID string, dstRouterID string, as uint32, metric table.Metric return segmentList, nil } +// CSPFWithLooseSourceRouting computes a path with optional waypoints using loose source routing. +func CSPFWithLooseSourceRouting( + src, dst string, + waypoints []table.Waypoint, + as uint32, + metric table.MetricType, + ted *table.LsTED, +) ([]table.Segment, error) { + fullList := []table.Segment{} + prev := src + + // Append destination as a pseudo-waypoint + allWaypoints := append(waypoints, table.Waypoint{RouterID: dst}) + + for _, wp := range allWaypoints { + sectionSegs, seg, err := buildSectionSegments(prev, wp, as, metric, ted) + if err != nil { + return nil, err + } + fullList = append(fullList, sectionSegs...) + fullList = appendIfNotDuplicate(fullList, seg) + prev = wp.RouterID + } + + return fullList, nil +} + +// buildSectionSegments calculates CSPF to waypoint and builds the waypoint segment. +func buildSectionSegments(prev string, wp table.Waypoint, as uint32, metric table.MetricType, ted *table.LsTED) ([]table.Segment, table.Segment, error) { + // Compute CSPF from prev → waypoint + sectionSegs, err := CSPF(prev, wp.RouterID, as, metric, ted) + if err != nil { + return nil, nil, fmt.Errorf("CSPF failed between %s and %s: %w", prev, wp.RouterID, err) + } + sectionSegs = removeDuplicateFirst(nil, sectionSegs) + + // Lookup the node from TED + node, ok := ted.Nodes[as][wp.RouterID] + if !ok { + return nil, nil, fmt.Errorf("waypoint router %s not found in TED", wp.RouterID) + } + + // Build the segment (SRv6 or SR-MPLS) + seg, err := buildWaypointSegment(node, wp.SID) + if err != nil { + return nil, nil, fmt.Errorf("failed to build segment for waypoint %s: %w", wp.RouterID, err) + } + + return sectionSegs, seg, nil +} + +// buildWaypointSegment builds a Segment for a waypoint using the node and optional explicit SID. +func buildWaypointSegment(node *table.LsNode, explicitSID string) (table.Segment, error) { + if explicitSID != "" { + addr, err := netip.ParseAddr(explicitSID) + if err != nil { + return nil, fmt.Errorf("invalid explicit SID %q: %w", explicitSID, err) + } + return table.NewSegmentSRv6WithNodeInfo(addr, node) + } + return node.NodeSegment() +} + +// removeDuplicateFirst removes the first segment of section if it equals the last of fullList. +func removeDuplicateFirst(fullList []table.Segment, section []table.Segment) []table.Segment { + if len(fullList) > 0 && len(section) > 0 && table.SegmentsEqual(fullList[len(fullList)-1], section[0]) { + return section[1:] + } + return section +} + +// appendIfNotDuplicate appends a segment to the list if it is not equal to the last segment. +func appendIfNotDuplicate(list []table.Segment, seg table.Segment) []table.Segment { + if len(list) == 0 || !table.SegmentsEqual(list[len(list)-1], seg) { + list = append(list, seg) + } + return list +} + func spf(srcRouterID string, dstRouterID string, metricType table.MetricType, network map[string]*table.LsNode) ([]table.Segment, error) { // Create a new starting node with cost 0 and add it to the calculating nodes startNodeSeg, err := network[srcRouterID].NodeSegment() diff --git a/internal/pkg/table/sr_policy.go b/internal/pkg/table/sr_policy.go index c183abc5..8e6c2980 100644 --- a/internal/pkg/table/sr_policy.go +++ b/internal/pkg/table/sr_policy.go @@ -215,3 +215,38 @@ func NewSegmentSRMPLS(sid uint32) SegmentSRMPLS { Sid: sid, } } + +// Equal for SegmentSRv6 +func (seg SegmentSRv6) Equal(other SegmentSRv6) bool { + // Compare SID, LocalAddr, and RemoteAddr + return seg.Sid == other.Sid && + seg.LocalAddr == other.LocalAddr && + seg.RemoteAddr == other.RemoteAddr +} + +// Equal for SegmentSRMPLS +func (seg SegmentSRMPLS) Equal(other SegmentSRMPLS) bool { + // Compare MPLS SID + return seg.Sid == other.Sid +} + +// Helper function for Segment interface equality check +func SegmentsEqual(a, b Segment) bool { + switch sa := a.(type) { + case SegmentSRv6: + sb, ok := b.(SegmentSRv6) + return ok && sa.Equal(sb) + case SegmentSRMPLS: + sb, ok := b.(SegmentSRMPLS) + return ok && sa.Equal(sb) + default: + return false + } +} + +// Waypoint represents a loose hop for SR Policy computation. +// SID is optional: if empty, TED lookup will be used to find End SID for that router. +type Waypoint struct { + RouterID string + SID string // optional: fixed SID override +} diff --git a/pkg/server/grpc_server.go b/pkg/server/grpc_server.go index f3922ae1..ca46b98c 100644 --- a/pkg/server/grpc_server.go +++ b/pkg/server/grpc_server.go @@ -324,9 +324,33 @@ func getSegmentList(inputSRPolicy *pb.SRPolicy, asn uint32, ted *table.LsTED) ([ if err != nil { return nil, err } - segmentList, err = cspf.CSPF(inputSRPolicy.GetSrcRouterId(), inputSRPolicy.GetDstRouterId(), asn, metricType, ted) - if err != nil { - return nil, err + pbWPs := inputSRPolicy.GetWaypoints() + if len(pbWPs) > 0 { + // Convert to table.Waypoint + waypoints := make([]table.Waypoint, 0, len(pbWPs)) + for _, w := range pbWPs { + waypoints = append(waypoints, table.Waypoint{ + RouterID: w.GetRouterId(), + SID: w.GetSid(), // optional + }) + } + + return cspf.CSPFWithLooseSourceRouting( + inputSRPolicy.GetSrcRouterId(), + inputSRPolicy.GetDstRouterId(), + waypoints, + asn, + metricType, + ted, + ) + } else { + return cspf.CSPF( + inputSRPolicy.GetSrcRouterId(), + inputSRPolicy.GetDstRouterId(), + asn, + metricType, + ted, + ) } default: return nil, errors.New("undefined SR Policy type") From b5ab2e4c169e1d1a05b76423db4559cb6f5a6c4a Mon Sep 17 00:00:00 2001 From: watal Date: Sun, 2 Nov 2025 06:34:14 -0500 Subject: [PATCH 3/5] refactor(cspf): simplify SPF calculation --- internal/pkg/cspf/cspf.go | 80 +++++++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 33 deletions(-) diff --git a/internal/pkg/cspf/cspf.go b/internal/pkg/cspf/cspf.go index 94a9a53f..3f669e6d 100644 --- a/internal/pkg/cspf/cspf.go +++ b/internal/pkg/cspf/cspf.go @@ -120,18 +120,13 @@ func appendIfNotDuplicate(list []table.Segment, seg table.Segment) []table.Segme } func spf(srcRouterID string, dstRouterID string, metricType table.MetricType, network map[string]*table.LsNode) ([]table.Segment, error) { - // Create a new starting node with cost 0 and add it to the calculating nodes - startNodeSeg, err := network[srcRouterID].NodeSegment() + calculatingNodes, err := initNodeMap(srcRouterID, network) if err != nil { return nil, err } - startNode := newNode(srcRouterID, 0, startNodeSeg) - startNode.calculated = false - calculatingNodes := map[string]*node{srcRouterID: startNode} - // Keep calculating the shortest path until the destination node is reached + // Keep calculating the shortest path until the destination node is reached. for { - // Select the next node to calculate calcNodeID, err := nextNode(calculatingNodes) if err != nil { return nil, err @@ -140,47 +135,66 @@ func spf(srcRouterID string, dstRouterID string, metricType table.MetricType, ne break } - // Calculate the cost of each link from the selected node - for _, link := range network[calcNodeID].Links { - metric, err := link.Metric(metricType) - if err != nil { - return nil, err - } + if err := updateNeighborCosts(calcNodeID, calculatingNodes, network, metricType); err != nil { + return nil, err + } - // If the remote node is already being calculated, update its cost if necessary - if remoteNode, exists := calculatingNodes[link.RemoteNode.RouterID]; exists { - if calculatingNodes[calcNodeID].cost+metric < remoteNode.cost { - remoteNode.cost = calculatingNodes[calcNodeID].cost + metric - remoteNode.prevNode = calcNodeID - } - } else { - // If the remote node has not been calculated yet, create a new node for it and add it to the calculating nodes - remoteNodeSeg, err := link.RemoteNode.NodeSegment() - if err != nil { - return nil, err - } - remoteNode := newNode(link.RemoteNode.RouterID, calculatingNodes[calcNodeID].cost+metric, remoteNodeSeg) + calculatingNodes[calcNodeID].calculated = true + } + + return buildSegmentListFromPath(srcRouterID, dstRouterID, calculatingNodes), nil +} + +// initNodeMap initializes the map of nodes used for SPF calculation. +func initNodeMap(srcRouterID string, network map[string]*table.LsNode) (map[string]*node, error) { + startNodeSeg, err := network[srcRouterID].NodeSegment() + if err != nil { + return nil, err + } + startNode := newNode(srcRouterID, 0, startNodeSeg) + startNode.calculated = false + return map[string]*node{srcRouterID: startNode}, nil +} + +// updateNeighborCosts updates costs for neighbors of the given node in SPF calculation. +func updateNeighborCosts(calcNodeID string, calculatingNodes map[string]*node, network map[string]*table.LsNode, metricType table.MetricType) error { + for _, link := range network[calcNodeID].Links { + metric, err := link.Metric(metricType) + if err != nil { + return err + } + + if remoteNode, exists := calculatingNodes[link.RemoteNode.RouterID]; exists { + if calculatingNodes[calcNodeID].cost+metric < remoteNode.cost { + remoteNode.cost = calculatingNodes[calcNodeID].cost + metric remoteNode.prevNode = calcNodeID - calculatingNodes[link.RemoteNode.RouterID] = remoteNode } + } else { + remoteNodeSeg, err := link.RemoteNode.NodeSegment() + if err != nil { + return err + } + remoteNode := newNode(link.RemoteNode.RouterID, calculatingNodes[calcNodeID].cost+metric, remoteNodeSeg) + remoteNode.prevNode = calcNodeID + calculatingNodes[link.RemoteNode.RouterID] = remoteNode } - - // Mark the selected node as calculated - calculatingNodes[calcNodeID].calculated = true } + return nil +} - // Generate the segment list from the shortest path calculation results +// buildSegmentListFromPath builds the segment list from SPF results. +func buildSegmentListFromPath(srcRouterID, dstRouterID string, calculatingNodes map[string]*node) []table.Segment { segmentList := []table.Segment{} for pathNode := calculatingNodes[dstRouterID]; pathNode.id != srcRouterID; pathNode = calculatingNodes[pathNode.prevNode] { segmentList = append(segmentList, pathNode.nodeSegment) } - // Reverse the order of the segment list + // Reverse the segment list to get correct order from src → dst for i, j := 0, len(segmentList)-1; i < j; i, j = i+1, j-1 { segmentList[i], segmentList[j] = segmentList[j], segmentList[i] } - return segmentList, nil + return segmentList } // nextNode returns the ID of the next node to calculate. From 9a9647fe7ff41373e17cb011aa9616143155a948 Mon Sep 17 00:00:00 2001 From: watal Date: Sat, 1 Nov 2025 11:07:39 -0400 Subject: [PATCH 4/5] chore(example): rename example directories --- .../README.md | 0 .../polad/polad.yaml | 0 .../sr-mpls_pcep.clab.yml | 0 .../sr-policies/pe01-policy1.yaml | 0 .../sr-policies/pe02-policy1.yaml | 0 .../sr-policies/pe03-policy1.yaml | 0 .../startup-configs/pe01.cfg | 0 .../startup-configs/pe02.cfg | 0 .../startup-configs/pe03/daemons | 0 .../startup-configs/pe03/frr.conf | 0 .../startup-configs/pe03/vtysh.sh | 0 .../topo.png | Bin .../README.md | 0 .../polad/polad.yaml | 0 .../sr-policies/pe01-policy1.yaml | 0 .../sr-policies/pe02-policy1.yaml | 0 .../srv6_te_l3vpn.clab.yml | 0 .../startup-configs/p01.cfg | 0 .../startup-configs/p02.cfg | 0 .../startup-configs/pe01.cfg | 0 .../startup-configs/pe02.cfg | 0 .../topo.png | Bin .../README.md | 0 .../polad/polad.yaml | 0 .../spec.yaml | 0 .../topo.png | Bin 26 files changed, 0 insertions(+), 0 deletions(-) rename examples/containerlab/{sr-mpls_pcep => sr-mpls_explicit-path}/README.md (100%) rename examples/containerlab/{sr-mpls_pcep => sr-mpls_explicit-path}/polad/polad.yaml (100%) rename examples/containerlab/{sr-mpls_pcep => sr-mpls_explicit-path}/sr-mpls_pcep.clab.yml (100%) rename examples/containerlab/{sr-mpls_pcep => sr-mpls_explicit-path}/sr-policies/pe01-policy1.yaml (100%) rename examples/containerlab/{sr-mpls_pcep => sr-mpls_explicit-path}/sr-policies/pe02-policy1.yaml (100%) rename examples/containerlab/{sr-mpls_pcep => sr-mpls_explicit-path}/sr-policies/pe03-policy1.yaml (100%) rename examples/containerlab/{sr-mpls_pcep => sr-mpls_explicit-path}/startup-configs/pe01.cfg (100%) rename examples/containerlab/{sr-mpls_pcep => sr-mpls_explicit-path}/startup-configs/pe02.cfg (100%) rename examples/containerlab/{sr-mpls_pcep => sr-mpls_explicit-path}/startup-configs/pe03/daemons (100%) rename examples/containerlab/{sr-mpls_pcep => sr-mpls_explicit-path}/startup-configs/pe03/frr.conf (100%) rename examples/containerlab/{sr-mpls_pcep => sr-mpls_explicit-path}/startup-configs/pe03/vtysh.sh (100%) rename examples/containerlab/{sr-mpls_pcep => sr-mpls_explicit-path}/topo.png (100%) rename examples/containerlab/{srv6_te_l3vpn => srv6_explicit-path_l3vpn}/README.md (100%) rename examples/containerlab/{srv6_te_l3vpn => srv6_explicit-path_l3vpn}/polad/polad.yaml (100%) rename examples/containerlab/{srv6_te_l3vpn => srv6_explicit-path_l3vpn}/sr-policies/pe01-policy1.yaml (100%) rename examples/containerlab/{srv6_te_l3vpn => srv6_explicit-path_l3vpn}/sr-policies/pe02-policy1.yaml (100%) rename examples/containerlab/{srv6_te_l3vpn => srv6_explicit-path_l3vpn}/srv6_te_l3vpn.clab.yml (100%) rename examples/containerlab/{srv6_te_l3vpn => srv6_explicit-path_l3vpn}/startup-configs/p01.cfg (100%) rename examples/containerlab/{srv6_te_l3vpn => srv6_explicit-path_l3vpn}/startup-configs/p02.cfg (100%) rename examples/containerlab/{srv6_te_l3vpn => srv6_explicit-path_l3vpn}/startup-configs/pe01.cfg (100%) rename examples/containerlab/{srv6_te_l3vpn => srv6_explicit-path_l3vpn}/startup-configs/pe02.cfg (100%) rename examples/containerlab/{srv6_te_l3vpn => srv6_explicit-path_l3vpn}/topo.png (100%) rename examples/tinet/{sr-mpls_te_l3vpn => sr-mpls_explicit-path_l3vpn}/README.md (100%) rename examples/tinet/{sr-mpls_te_l3vpn => sr-mpls_explicit-path_l3vpn}/polad/polad.yaml (100%) rename examples/tinet/{sr-mpls_te_l3vpn => sr-mpls_explicit-path_l3vpn}/spec.yaml (100%) rename examples/tinet/{sr-mpls_te_l3vpn => sr-mpls_explicit-path_l3vpn}/topo.png (100%) diff --git a/examples/containerlab/sr-mpls_pcep/README.md b/examples/containerlab/sr-mpls_explicit-path/README.md similarity index 100% rename from examples/containerlab/sr-mpls_pcep/README.md rename to examples/containerlab/sr-mpls_explicit-path/README.md diff --git a/examples/containerlab/sr-mpls_pcep/polad/polad.yaml b/examples/containerlab/sr-mpls_explicit-path/polad/polad.yaml similarity index 100% rename from examples/containerlab/sr-mpls_pcep/polad/polad.yaml rename to examples/containerlab/sr-mpls_explicit-path/polad/polad.yaml diff --git a/examples/containerlab/sr-mpls_pcep/sr-mpls_pcep.clab.yml b/examples/containerlab/sr-mpls_explicit-path/sr-mpls_pcep.clab.yml similarity index 100% rename from examples/containerlab/sr-mpls_pcep/sr-mpls_pcep.clab.yml rename to examples/containerlab/sr-mpls_explicit-path/sr-mpls_pcep.clab.yml diff --git a/examples/containerlab/sr-mpls_pcep/sr-policies/pe01-policy1.yaml b/examples/containerlab/sr-mpls_explicit-path/sr-policies/pe01-policy1.yaml similarity index 100% rename from examples/containerlab/sr-mpls_pcep/sr-policies/pe01-policy1.yaml rename to examples/containerlab/sr-mpls_explicit-path/sr-policies/pe01-policy1.yaml diff --git a/examples/containerlab/sr-mpls_pcep/sr-policies/pe02-policy1.yaml b/examples/containerlab/sr-mpls_explicit-path/sr-policies/pe02-policy1.yaml similarity index 100% rename from examples/containerlab/sr-mpls_pcep/sr-policies/pe02-policy1.yaml rename to examples/containerlab/sr-mpls_explicit-path/sr-policies/pe02-policy1.yaml diff --git a/examples/containerlab/sr-mpls_pcep/sr-policies/pe03-policy1.yaml b/examples/containerlab/sr-mpls_explicit-path/sr-policies/pe03-policy1.yaml similarity index 100% rename from examples/containerlab/sr-mpls_pcep/sr-policies/pe03-policy1.yaml rename to examples/containerlab/sr-mpls_explicit-path/sr-policies/pe03-policy1.yaml diff --git a/examples/containerlab/sr-mpls_pcep/startup-configs/pe01.cfg b/examples/containerlab/sr-mpls_explicit-path/startup-configs/pe01.cfg similarity index 100% rename from examples/containerlab/sr-mpls_pcep/startup-configs/pe01.cfg rename to examples/containerlab/sr-mpls_explicit-path/startup-configs/pe01.cfg diff --git a/examples/containerlab/sr-mpls_pcep/startup-configs/pe02.cfg b/examples/containerlab/sr-mpls_explicit-path/startup-configs/pe02.cfg similarity index 100% rename from examples/containerlab/sr-mpls_pcep/startup-configs/pe02.cfg rename to examples/containerlab/sr-mpls_explicit-path/startup-configs/pe02.cfg diff --git a/examples/containerlab/sr-mpls_pcep/startup-configs/pe03/daemons b/examples/containerlab/sr-mpls_explicit-path/startup-configs/pe03/daemons similarity index 100% rename from examples/containerlab/sr-mpls_pcep/startup-configs/pe03/daemons rename to examples/containerlab/sr-mpls_explicit-path/startup-configs/pe03/daemons diff --git a/examples/containerlab/sr-mpls_pcep/startup-configs/pe03/frr.conf b/examples/containerlab/sr-mpls_explicit-path/startup-configs/pe03/frr.conf similarity index 100% rename from examples/containerlab/sr-mpls_pcep/startup-configs/pe03/frr.conf rename to examples/containerlab/sr-mpls_explicit-path/startup-configs/pe03/frr.conf diff --git a/examples/containerlab/sr-mpls_pcep/startup-configs/pe03/vtysh.sh b/examples/containerlab/sr-mpls_explicit-path/startup-configs/pe03/vtysh.sh similarity index 100% rename from examples/containerlab/sr-mpls_pcep/startup-configs/pe03/vtysh.sh rename to examples/containerlab/sr-mpls_explicit-path/startup-configs/pe03/vtysh.sh diff --git a/examples/containerlab/sr-mpls_pcep/topo.png b/examples/containerlab/sr-mpls_explicit-path/topo.png similarity index 100% rename from examples/containerlab/sr-mpls_pcep/topo.png rename to examples/containerlab/sr-mpls_explicit-path/topo.png diff --git a/examples/containerlab/srv6_te_l3vpn/README.md b/examples/containerlab/srv6_explicit-path_l3vpn/README.md similarity index 100% rename from examples/containerlab/srv6_te_l3vpn/README.md rename to examples/containerlab/srv6_explicit-path_l3vpn/README.md diff --git a/examples/containerlab/srv6_te_l3vpn/polad/polad.yaml b/examples/containerlab/srv6_explicit-path_l3vpn/polad/polad.yaml similarity index 100% rename from examples/containerlab/srv6_te_l3vpn/polad/polad.yaml rename to examples/containerlab/srv6_explicit-path_l3vpn/polad/polad.yaml diff --git a/examples/containerlab/srv6_te_l3vpn/sr-policies/pe01-policy1.yaml b/examples/containerlab/srv6_explicit-path_l3vpn/sr-policies/pe01-policy1.yaml similarity index 100% rename from examples/containerlab/srv6_te_l3vpn/sr-policies/pe01-policy1.yaml rename to examples/containerlab/srv6_explicit-path_l3vpn/sr-policies/pe01-policy1.yaml diff --git a/examples/containerlab/srv6_te_l3vpn/sr-policies/pe02-policy1.yaml b/examples/containerlab/srv6_explicit-path_l3vpn/sr-policies/pe02-policy1.yaml similarity index 100% rename from examples/containerlab/srv6_te_l3vpn/sr-policies/pe02-policy1.yaml rename to examples/containerlab/srv6_explicit-path_l3vpn/sr-policies/pe02-policy1.yaml diff --git a/examples/containerlab/srv6_te_l3vpn/srv6_te_l3vpn.clab.yml b/examples/containerlab/srv6_explicit-path_l3vpn/srv6_te_l3vpn.clab.yml similarity index 100% rename from examples/containerlab/srv6_te_l3vpn/srv6_te_l3vpn.clab.yml rename to examples/containerlab/srv6_explicit-path_l3vpn/srv6_te_l3vpn.clab.yml diff --git a/examples/containerlab/srv6_te_l3vpn/startup-configs/p01.cfg b/examples/containerlab/srv6_explicit-path_l3vpn/startup-configs/p01.cfg similarity index 100% rename from examples/containerlab/srv6_te_l3vpn/startup-configs/p01.cfg rename to examples/containerlab/srv6_explicit-path_l3vpn/startup-configs/p01.cfg diff --git a/examples/containerlab/srv6_te_l3vpn/startup-configs/p02.cfg b/examples/containerlab/srv6_explicit-path_l3vpn/startup-configs/p02.cfg similarity index 100% rename from examples/containerlab/srv6_te_l3vpn/startup-configs/p02.cfg rename to examples/containerlab/srv6_explicit-path_l3vpn/startup-configs/p02.cfg diff --git a/examples/containerlab/srv6_te_l3vpn/startup-configs/pe01.cfg b/examples/containerlab/srv6_explicit-path_l3vpn/startup-configs/pe01.cfg similarity index 100% rename from examples/containerlab/srv6_te_l3vpn/startup-configs/pe01.cfg rename to examples/containerlab/srv6_explicit-path_l3vpn/startup-configs/pe01.cfg diff --git a/examples/containerlab/srv6_te_l3vpn/startup-configs/pe02.cfg b/examples/containerlab/srv6_explicit-path_l3vpn/startup-configs/pe02.cfg similarity index 100% rename from examples/containerlab/srv6_te_l3vpn/startup-configs/pe02.cfg rename to examples/containerlab/srv6_explicit-path_l3vpn/startup-configs/pe02.cfg diff --git a/examples/containerlab/srv6_te_l3vpn/topo.png b/examples/containerlab/srv6_explicit-path_l3vpn/topo.png similarity index 100% rename from examples/containerlab/srv6_te_l3vpn/topo.png rename to examples/containerlab/srv6_explicit-path_l3vpn/topo.png diff --git a/examples/tinet/sr-mpls_te_l3vpn/README.md b/examples/tinet/sr-mpls_explicit-path_l3vpn/README.md similarity index 100% rename from examples/tinet/sr-mpls_te_l3vpn/README.md rename to examples/tinet/sr-mpls_explicit-path_l3vpn/README.md diff --git a/examples/tinet/sr-mpls_te_l3vpn/polad/polad.yaml b/examples/tinet/sr-mpls_explicit-path_l3vpn/polad/polad.yaml similarity index 100% rename from examples/tinet/sr-mpls_te_l3vpn/polad/polad.yaml rename to examples/tinet/sr-mpls_explicit-path_l3vpn/polad/polad.yaml diff --git a/examples/tinet/sr-mpls_te_l3vpn/spec.yaml b/examples/tinet/sr-mpls_explicit-path_l3vpn/spec.yaml similarity index 100% rename from examples/tinet/sr-mpls_te_l3vpn/spec.yaml rename to examples/tinet/sr-mpls_explicit-path_l3vpn/spec.yaml diff --git a/examples/tinet/sr-mpls_te_l3vpn/topo.png b/examples/tinet/sr-mpls_explicit-path_l3vpn/topo.png similarity index 100% rename from examples/tinet/sr-mpls_te_l3vpn/topo.png rename to examples/tinet/sr-mpls_explicit-path_l3vpn/topo.png From 010391c3b51eb09db065c7461b61783d9438193f Mon Sep 17 00:00:00 2001 From: watal Date: Sat, 1 Nov 2025 11:08:58 -0400 Subject: [PATCH 5/5] feat(example) add loose source routing example --- .../README.md | 151 ++++++++++++++++++ .../bin/.gitkeep | 0 .../gobgpd/gobgp-client.yml | 14 ++ .../gobgpd/gobgp-server.yml | 23 +++ .../polad/polad.yaml | 18 +++ .../sr-policies/pe02-policy1.yaml | 14 ++ .../startup-configs/p01.cfg | 106 ++++++++++++ .../startup-configs/p02.cfg | 106 ++++++++++++ .../startup-configs/pe01.cfg | 124 ++++++++++++++ .../startup-configs/pe02.cfg | 132 +++++++++++++++ .../topo.clab.yml | 72 +++++++++ .../topo.png | Bin 0 -> 266410 bytes 12 files changed, 760 insertions(+) create mode 100644 examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/README.md create mode 100644 examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/bin/.gitkeep create mode 100644 examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/gobgpd/gobgp-client.yml create mode 100644 examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/gobgpd/gobgp-server.yml create mode 100644 examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/polad/polad.yaml create mode 100644 examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/sr-policies/pe02-policy1.yaml create mode 100644 examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/startup-configs/p01.cfg create mode 100644 examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/startup-configs/p02.cfg create mode 100644 examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/startup-configs/pe01.cfg create mode 100644 examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/startup-configs/pe02.cfg create mode 100644 examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/topo.clab.yml create mode 100644 examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/topo.png diff --git a/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/README.md b/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/README.md new file mode 100644 index 00000000..8a729b0c --- /dev/null +++ b/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/README.md @@ -0,0 +1,151 @@ +# SRv6 uSID Dynamic Path + +Example topology powered by [Containerlab](https://containerlab.dev/) + +![Topology](./topo.png) + +## Requirements + +* container host (Linux) +* vJunos image + +## Usage + +### Install Containerlab & vJunos-router + +[Install Containerlab](https://containerlab.dev/install/) + +```bash +sudo bash -c "$(curl -sL https://get.containerlab.dev)" +``` + +Install vJunos on [Vrnetlab](https://containerlab.dev/manual/vrnetlab/) + +### Building a Lab Network + +Create bridge + +```bash +sudo ip link add switch type bridge +sudo ip link set dev switch up +``` + +Clone and build the modified branches: + +* Pola PCE: [watal/pola feature/ietf124-srv6-sfc branch](https://github.com/watal/pola/tree/feature/ietf124-srv6-sfc) + * Add the following to `go.mod`: + + ```text + replace github.com/osrg/gobgp/v4 => ../gobgp # adjust path to your local gobgp + ``` + +* GoBGP: [watal/gobgp feature/bgp-ls-service-segments branch](https://github.com/watal/gobgp/tree/feature/bgp-ls-service-segments) + +Start Containerlab network + +```bash +git clone https://github.com/nttcom/pola +cd pola/examples/containerlab/srv6_usid_dynamic-path + +sudo containerlab deploy +``` + +### Starting Daemons + +```bash +$ sudo docker exec -it clab-dynamic-path-gobgp-server bash +# gobgpd -f /gobgpd.yml +``` + +```bash +$ sudo docker exec -it clab-dynamic-path-gobgp-client bash +# gobgpd -f /gobgpd.yml +``` + +```bash +$ sudo docker exec -it clab-dynamic-path-pola bash +# polad -f /polad.yaml +``` + +### Show TED + +```bash +$ sudo docker exec -it clab-dynamic-path-pola bash +# pola -p 50052 ted +``` + +### Apply SR Policy + +Connect to PCEP container, check PCEP session and SR policy + +```bash +$ sudo docker exec -it clab-dynamic-path-pola bash + +# pola session -p 50052 +sessionAddr(0): fd00::2 + +# pola sr-policy list -p 50052 +no SR Policies +``` + +Apply and check SR Policy + +```bash +# pola sr-policy add -f /pe02-policy1.yaml -p 50052 +success! + +# pola sr-policy list -p 50052 +root@pola:/# ./pola -p 50052 sr-policy list +Session: fd00::2 + PolicyName: DYNAMIC-POLICY + SrcAddr: fd00:ffff::2 + DstAddr: fd00:ffff::1 + Color: 100 + Preference: 0 + SegmentList: fcbb:bb00:1004:: -> fcbb:bb00:1001:: +``` + +Enter container pe02 and check SR Policy + +* user: admin +* pass: admin@123 + +```text +$ ssh clab-dynamic-path-pe02 -l admin + +admin@pe02> show spring-traffic-engineering lsp brief +To State LSPname +fd00:ffff::1-100 Up DYNAMIC-POLICY + + +Total displayed LSPs: 1 (Up: 1, Down: 0, Initializing: 0) + +admin@pe02> show spring-traffic-engineering lsp name DYNAMIC-POLICY detail +E = Entropy-label Capability + +Name: DYNAMIC-POLICY + Tunnel-source: Path computation element protocol(PCEP) + Tunnel Forward Type: SRV6 + To: fd00:ffff::1-100 + From: fd00:ffff::2 + State: Up + Path Status: NA + Outgoing interface: NA + Delegation compute constraints info: + Actual-Bandwidth from PCUpdate: 0 + Bandwidth-Requested from PCUpdate: 0 + Setup-Priority: 0 + Reservation-Priority: 0 + Auto-translate status: Disabled Auto-translate result: N/A + BFD status: N/A BFD name: N/A + BFD remote-discriminator: N/A + Segment ID : 129 + ERO Valid: true + SR-ERO hop count: 2 + Hop 1 (Strict): + NAI: IPv6 Node ID, Node address: fcbb:bb00:1004:: + SID type: srv6-sid, Value: fcbb:bb00:1004:: + Hop 2 (Strict): + NAI: IPv6 Node ID, Node address: fcbb:bb00:1001:: + SID type: srv6-sid, Value: fcbb:bb00:1001:: +``` diff --git a/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/bin/.gitkeep b/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/bin/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/gobgpd/gobgp-client.yml b/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/gobgpd/gobgp-client.yml new file mode 100644 index 00000000..eb173642 --- /dev/null +++ b/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/gobgpd/gobgp-client.yml @@ -0,0 +1,14 @@ +global: + config: + as: 65000 + router-id: "10.255.0.255" +neighbors: + - config: + peer-as: 65000 + neighbor-address: "fd00::4" + afi-safis: + - config: + afi-safi-name: ls + transport: + config: + local-address: "fd00::5" diff --git a/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/gobgpd/gobgp-server.yml b/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/gobgpd/gobgp-server.yml new file mode 100644 index 00000000..0aa9f758 --- /dev/null +++ b/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/gobgpd/gobgp-server.yml @@ -0,0 +1,23 @@ +global: + config: + as: 65000 + router-id: "10.255.0.254" +neighbors: + - config: + peer-as: 65000 + neighbor-address: "fd00::1" + afi-safis: + - config: + afi-safi-name: ls + transport: + config: + local-address: "fd00::4" + - config: + peer-as: 65000 + neighbor-address: "fd00::5" + afi-safis: + - config: + afi-safi-name: ls + transport: + config: + local-address: "fd00::4" diff --git a/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/polad/polad.yaml b/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/polad/polad.yaml new file mode 100644 index 00000000..da35d9bc --- /dev/null +++ b/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/polad/polad.yaml @@ -0,0 +1,18 @@ +global: + pcep: + address: "fd00::3" + port: 4189 + grpcServer: + address: "127.0.0.1" + port: 50052 + log: + path: "/var/log/pola/" + debug: true + name: "polad.log" + ted: + enable: true + source: "gobgp" + gobgp: + grpcClient: + address: "10.0.0.4" + port: 50051 diff --git a/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/sr-policies/pe02-policy1.yaml b/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/sr-policies/pe02-policy1.yaml new file mode 100644 index 00000000..ba3c35ba --- /dev/null +++ b/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/sr-policies/pe02-policy1.yaml @@ -0,0 +1,14 @@ +asn: 65000 +srPolicy: + pcepSessionAddr: "fd00::2" + srcRouterID: "0000.0001.0002" + dstRouterID: "0000.0001.0001" + name: "DYNAMIC-POLICY" + color: 100 + type: dynamic + metric: igp + waypoints: + - routerID: "0000.0001.0003" + - routerID: "0000.0001.0004" + - routerID: "0000.0001.0003" + sid: "fcbb:bb00:1003::" diff --git a/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/startup-configs/p01.cfg b/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/startup-configs/p01.cfg new file mode 100644 index 00000000..08ddf176 --- /dev/null +++ b/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/startup-configs/p01.cfg @@ -0,0 +1,106 @@ +hostname p01 +username admin + group root-lr + group cisco-support + secret 10 $6$MTEbC5od1RuC....$xvQt1LVtwS9akjpzHYOZyj6ZMLZwJ5R9PvRCMaqjrR9iqeoPXisq.rXiiJZPoPE6Gi5XL1yjIlzAY4dfWC6Gr1 +! +grpc + vrf MGMT + no-tls + address-family dual +! +vrf MGMT + address-family ipv4 unicast + ! + address-family ipv6 unicast + ! +! +line default + transport input ssh +! +call-home + service active + contact smart-licensing + profile CiscoTAC-1 + active + destination transport-method email disable + destination transport-method http + ! +! +netconf-yang agent + ssh +! +interface Loopback0 + ipv6 address fd00:ffff::3/128 +! +interface GigabitEthernet0/0/0/0 + description to:pe01 + ipv6 enable +! +interface GigabitEthernet0/0/0/1 + description to:pe02 + ipv6 enable +! +interface GigabitEthernet0/0/0/2 + description to:p02 + ipv6 enable +! +router isis 1 + is-type level-2-only + net 49.0000.0000.0001.0003.00 + address-family ipv6 unicast + metric-style wide + router-id Loopback0 + segment-routing srv6 + locator uSID + level 2 + ! + ! + ! + interface Loopback0 + passive + address-family ipv6 unicast + ! + ! + interface GigabitEthernet0/0/0/0 + circuit-type level-2-only + point-to-point + hello-interval 1 + address-family ipv6 unicast + metric 1 level 2 + ! + ! + interface GigabitEthernet0/0/0/1 + circuit-type level-2-only + point-to-point + hello-interval 1 + address-family ipv6 unicast + metric 1 level 2 + ! + ! + interface GigabitEthernet0/0/0/2 + circuit-type level-2-only + point-to-point + hello-interval 1 + address-family ipv6 unicast + metric 1 level 2 + ! + ! +! +mpls oam +! +segment-routing + srv6 + logging locator status + locators + locator uSID + micro-segment behavior unode psp-usd + prefix fcbb:bb00:1003::/48 + ! + ! + ! +! +ssh server v2 +ssh server vrf MGMT +ssh server netconf vrf MGMT +end diff --git a/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/startup-configs/p02.cfg b/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/startup-configs/p02.cfg new file mode 100644 index 00000000..a1bd53b5 --- /dev/null +++ b/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/startup-configs/p02.cfg @@ -0,0 +1,106 @@ +hostname p02 +username admin + group root-lr + group cisco-support + secret 10 $6$MTEbC5od1RuC....$xvQt1LVtwS9akjpzHYOZyj6ZMLZwJ5R9PvRCMaqjrR9iqeoPXisq.rXiiJZPoPE6Gi5XL1yjIlzAY4dfWC6Gr1 +! +grpc + vrf MGMT + no-tls + address-family dual +! +vrf MGMT + address-family ipv4 unicast + ! + address-family ipv6 unicast + ! +! +line default + transport input ssh +! +call-home + service active + contact smart-licensing + profile CiscoTAC-1 + active + destination transport-method email disable + destination transport-method http + ! +! +netconf-yang agent + ssh +! +interface Loopback0 + ipv6 address fd00:ffff::4/128 +! +interface GigabitEthernet0/0/0/0 + description to:pe01 + ipv6 enable +! +interface GigabitEthernet0/0/0/1 + description to:pe02 + ipv6 enable +! +interface GigabitEthernet0/0/0/2 + description to:p01 + ipv6 enable +! +router isis 1 + is-type level-2-only + net 49.0000.0000.0001.0004.00 + address-family ipv6 unicast + metric-style wide + router-id Loopback0 + segment-routing srv6 + locator uSID + level 2 + ! + ! + ! + interface Loopback0 + passive + address-family ipv6 unicast + ! + ! + interface GigabitEthernet0/0/0/0 + circuit-type level-2-only + point-to-point + hello-interval 1 + address-family ipv6 unicast + metric 1 level 2 + ! + ! + interface GigabitEthernet0/0/0/1 + circuit-type level-2-only + point-to-point + hello-interval 1 + address-family ipv6 unicast + metric 1 level 2 + ! + ! + interface GigabitEthernet0/0/0/2 + circuit-type level-2-only + point-to-point + hello-interval 1 + address-family ipv6 unicast + metric 1 level 2 + ! + ! +! +mpls oam +! +segment-routing + srv6 + logging locator status + locators + locator uSID + micro-segment behavior unode psp-usd + prefix fcbb:bb00:1004::/48 + ! + ! + ! +! +ssh server v2 +ssh server vrf MGMT +ssh server netconf vrf MGMT +end diff --git a/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/startup-configs/pe01.cfg b/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/startup-configs/pe01.cfg new file mode 100644 index 00000000..f7d5b59f --- /dev/null +++ b/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/startup-configs/pe01.cfg @@ -0,0 +1,124 @@ +hostname pe01 +username admin + group root-lr + group cisco-support + secret admin@123 +! +grpc + vrf MGMT + port 9339 + no-tls + address-family dual +! +vrf MGMT + address-family ipv4 unicast + ! + address-family ipv6 unicast + ! +! +line default + transport input ssh +! +call-home + service active + contact smart-licensing + profile CiscoTAC-1 + active + destination transport-method email disable + destination transport-method http + ! +! +netconf-yang agent + ssh +! +interface Loopback0 + ipv6 address fd00:ffff::1/128 +! +interface GigabitEthernet0/0/0/0 + description to:p01 + ipv6 enable +! +interface GigabitEthernet0/0/0/1 + description to:p02 + ipv6 enable +! +interface GigabitEthernet0/0/0/2 + description to:pce + ipv6 address fd00::1/64 +! +router isis 1 + is-type level-2-only + net 49.0000.0000.0001.0001.00 + distribute link-state level 2 + address-family ipv6 unicast + metric-style wide + router-id Loopback0 + segment-routing srv6 + locator uSID + level 2 + ! + ! + ! + interface Loopback0 + passive + address-family ipv6 unicast + ! + ! + interface GigabitEthernet0/0/0/0 + circuit-type level-2-only + point-to-point + hello-interval 1 + address-family ipv6 unicast + metric 1 level 2 + ! + ! + interface GigabitEthernet0/0/0/1 + circuit-type level-2-only + point-to-point + hello-interval 1 + address-family ipv6 unicast + metric 1 level 2 + ! + ! +! +router bgp 65000 + bgp router-id 10.255.0.1 + address-family link-state link-state + ! + neighbor fd00::4 + remote-as 65000 + update-source GigabitEthernet0/0/0/2 + address-family link-state link-state + ! + ! +! +mpls oam +! +segment-routing + traffic-eng + candidate-paths + pcep + ! + ! + pcc + pce address ipv6 fd00::3 + ! + ! + ! + srv6 + logging locator status + micro-segment + merge-overlay-underlay-sids + ! + locators + locator uSID + micro-segment behavior unode psp-usd + prefix fcbb:bb00:1001::/48 + ! + ! + ! +! +ssh server v2 +ssh server vrf MGMT +ssh server netconf vrf MGMT +end diff --git a/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/startup-configs/pe02.cfg b/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/startup-configs/pe02.cfg new file mode 100644 index 00000000..6297ebc9 --- /dev/null +++ b/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/startup-configs/pe02.cfg @@ -0,0 +1,132 @@ +chassis { + network-services enhanced-ip; +} + +interfaces { + ge-0/0/0 { + description "to:p01"; + unit 0 { + family iso; + family inet6; + } + } + ge-0/0/1 { + description "to:p02"; + unit 0 { + family iso; + family inet6; + } + } + ge-0/0/2 { + description "POLA-PCE"; + unit 0 { + family inet6 { + address fd00::2/64; + } + } + } + lo0 { + unit 0 { + family iso { + address 49.0000.0000.0001.0002.00; + } + family inet6 { + address fd00:ffff::2/128; + } + } + } +} + +routing-options { + router-id 10.255.0.2; + autonomous-system 65000; + forwarding-table { + srv6-chain-merge; + } + source-packet-routing { + srv6 { + no-reduced-srh; + block usid-block { + fcbb:bb00::/32; + local-micro-sid { + maximum-static-sids 1000; + } + } + locator loc-pe02 { + fcbb:bb00:1002::/48; + micro-sid { + block-name usid-block; + flavor psp; + flavor usd; + } + } + } + } +} + +protocols { + isis { + level 1 disable; + level 2 { + wide-metrics-only; + } + no-ipv4-routing; + topologies { + ipv6-unicast; + } + net 49.0000.0000.0001.0002.00; + interface ge-0/0/0.0 { + point-to-point; + level 2 { + srv6-adjacency-segment { + unprotected { + locator loc-pe02 { + micro-adjacency-sid; + } + } + } + } + } + interface ge-0/0/1.0 { + point-to-point; + level 2 { + srv6-adjacency-segment { + unprotected { + locator loc-pe02 { + micro-adjacency-sid; + } + } + } + } + } + interface lo0.0 { + passive; + } + source-packet-routing { + srv6 { + locator loc-pe02 { + micro-node-sid; + } + } + } + } + mpls { + lsp-external-controller pccd; + } + source-packet-routing { + lsp-external-controller pccd; + srv6; + preserve-nexthop-hierarchy; + } + pcep { + pce POLA-PCE { + local-ipv6-address fd00::2; + destination-ipv6-address fd00::3; + pce-type active; + pce-type stateful; + lsp-provisioning; + spring-capability; + srv6-capability; + } + } +} diff --git a/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/topo.clab.yml b/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/topo.clab.yml new file mode 100644 index 00000000..db16af9f --- /dev/null +++ b/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/topo.clab.yml @@ -0,0 +1,72 @@ +name: dynamic-path +topology: + kinds: + xrd: + image: ios-xr/xrd-control-plane:7.8.1 + juniper_vjunosrouter: + image: vrnetlab/juniper_vjunos-router:24.2R1-S2.5 + nodes: + pe01: + kind: xrd + startup-config: startup-configs/pe01.cfg + pe02: + kind: juniper_vjunosrouter + startup-config: startup-configs/pe02.cfg + p01: + kind: xrd + startup-config: startup-configs/p01.cfg + p02: + kind: xrd + startup-config: startup-configs/p02.cfg + pola: + kind: linux + image: golang:1.24.1 + binds: + - bin/polad:/bin/polad + - bin/pola:/bin/pola + - polad/polad.yaml:/polad.yaml + - sr-policies/pe02-policy1.yaml:/pe02-policy1.yaml + exec: + - apt update + - apt install iproute2 -y + - ip addr add 10.0.0.3/24 dev eth1 + - ip -6 addr add fd00::3/64 dev eth1 + gobgp-server: + kind: linux + image: golang:1.24.1 + binds: + - bin/gobgpd:/bin/gobgpd + - bin/gobgp:/bin/gobgp + - gobgpd/gobgp-server.yml:/gobgpd.yml + exec: + - apt update + - apt install iproute2 -y + - ip addr add 10.0.0.4/24 dev eth1 + - ip -6 addr add fd00::4/64 dev eth1 + gobgp-client: + kind: linux + image: golang:1.24.1 + binds: + - bin/gobgpd:/bin/gobgpd + - bin/gobgp:/bin/gobgp + - gobgpd/gobgp-client.yml:/gobgpd.yml + exec: + - apt update + - apt install iproute2 -y + - ip addr add 10.0.0.5/24 dev eth1 + - ip -6 addr add fd00::5/64 dev eth1 + switch: + kind: bridge + links: + # SRv6 domain + - endpoints: ["pe01:Gi0-0-0-0", "p01:Gi0-0-0-0"] + - endpoints: ["pe01:Gi0-0-0-1", "p02:Gi0-0-0-0"] + - endpoints: ["pe02:eth1", "p01:Gi0-0-0-1"] + - endpoints: ["pe02:eth2", "p02:Gi0-0-0-1"] + - endpoints: ["p01:Gi0-0-0-2", "p02:Gi0-0-0-2"] + # Switch + - endpoints: ["pe01:Gi0-0-0-2", "switch:eth1"] + - endpoints: ["pe02:eth3", "switch:eth2"] + - endpoints: ["pola:eth1", "switch:eth3"] + - endpoints: ["gobgp-server:eth1", "switch:eth4"] + - endpoints: ["gobgp-client:eth1", "switch:eth5"] diff --git a/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/topo.png b/examples/containerlab/srv6_usid_dynamic-path_loose_source_routing_sfc/topo.png new file mode 100644 index 0000000000000000000000000000000000000000..1781867f1975c248d42a1a9c918c8ddbe8bc69e5 GIT binary patch literal 266410 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 Wna+#ioX(ed|4^A9A>bFmu9BRjB3K=gzJU4~s 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

Y5PA!59ow&2&Kxn?tW2hdFN+ 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 z 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≫r&;0$9#*ZpJ4$-_oVp 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 VEZ^>VMFjp`Rnk%{mcMcL{{VG~DtrI{ literal 0 HcmV?d00001