From c68806d55fd5bf37b93649f331f0bcf70090cdba Mon Sep 17 00:00:00 2001 From: Alejandro Pedraza Date: Wed, 23 Oct 2024 10:39:25 -0500 Subject: [PATCH] Add support for HTTP local rate limiting This adds an entry for `HttpLocalRateLimit` under `ProxyProtocol.Detect`, `ProxyProtocol.Http1` and `ProxyProtocol.Http2` leaving the door open to add analogous support for protocols besides HTTP later on. --- README.md | 2 +- go/destination/destination.pb.go | 2 +- go/destination/destination_grpc.pb.go | 2 +- go/grpc_route/grpc_route.pb.go | 2 +- go/http_route/http_route.pb.go | 2 +- go/http_types/http_types.pb.go | 2 +- go/identity/identity.pb.go | 2 +- go/identity/identity_grpc.pb.go | 2 +- go/inbound/inbound.pb.go | 895 +++++++++++++++++--------- go/inbound/inbound_grpc.pb.go | 2 +- go/meta/meta.pb.go | 2 +- go/net/net.pb.go | 2 +- go/outbound/outbound.pb.go | 2 +- go/outbound/outbound_grpc.pb.go | 2 +- go/tap/tap.pb.go | 2 +- go/tap/tap_grpc.pb.go | 2 +- go/tls_route/tls_route.pb.go | 2 +- proto/inbound.proto | 31 + src/gen/io.linkerd.proxy.inbound.rs | 40 ++ 19 files changed, 679 insertions(+), 319 deletions(-) diff --git a/README.md b/README.md index f6caca735..e1f9fab10 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ authenticed pod-to-pod communication. ### `inbound` The inbound API is used by the proxy to discover inbound serving -policies--especially per-port authorization requirements. +policies, i.e. per-port authorization requirements and rate-limiting poilcy. ### `tap` diff --git a/go/destination/destination.pb.go b/go/destination/destination.pb.go index 11ae0d8cd..e0f21bce7 100644 --- a/go/destination/destination.pb.go +++ b/go/destination/destination.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.34.2 -// protoc v3.12.4 +// protoc v3.20.3 // source: destination.proto package destination diff --git a/go/destination/destination_grpc.pb.go b/go/destination/destination_grpc.pb.go index 2b62cb299..0af4ce26d 100644 --- a/go/destination/destination_grpc.pb.go +++ b/go/destination/destination_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.4.0 -// - protoc v3.12.4 +// - protoc v3.20.3 // source: destination.proto package destination diff --git a/go/grpc_route/grpc_route.pb.go b/go/grpc_route/grpc_route.pb.go index 5e20f9db5..bb2fdbebb 100644 --- a/go/grpc_route/grpc_route.pb.go +++ b/go/grpc_route/grpc_route.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.34.2 -// protoc v3.12.4 +// protoc v3.20.3 // source: grpc_route.proto package grpc_route diff --git a/go/http_route/http_route.pb.go b/go/http_route/http_route.pb.go index 35a2c270f..de6628830 100644 --- a/go/http_route/http_route.pb.go +++ b/go/http_route/http_route.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.34.2 -// protoc v3.12.4 +// protoc v3.20.3 // source: http_route.proto package http_route diff --git a/go/http_types/http_types.pb.go b/go/http_types/http_types.pb.go index 15e2cd94d..e6c004b0d 100644 --- a/go/http_types/http_types.pb.go +++ b/go/http_types/http_types.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.34.2 -// protoc v3.12.4 +// protoc v3.20.3 // source: http_types.proto package http_types diff --git a/go/identity/identity.pb.go b/go/identity/identity.pb.go index a3dfab0f6..6b8f97603 100644 --- a/go/identity/identity.pb.go +++ b/go/identity/identity.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.34.2 -// protoc v3.12.4 +// protoc v3.20.3 // source: identity.proto package identity diff --git a/go/identity/identity_grpc.pb.go b/go/identity/identity_grpc.pb.go index 4565907a3..0ea8957d4 100644 --- a/go/identity/identity_grpc.pb.go +++ b/go/identity/identity_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.4.0 -// - protoc v3.12.4 +// - protoc v3.20.3 // source: identity.proto package identity diff --git a/go/inbound/inbound.pb.go b/go/inbound/inbound.pb.go index a68d94497..cc9579e3f 100644 --- a/go/inbound/inbound.pb.go +++ b/go/inbound/inbound.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.34.2 -// protoc v3.12.4 +// protoc v3.20.3 // source: inbound.proto package inbound @@ -777,6 +777,83 @@ func (x *GrpcRoute) GetRules() []*GrpcRoute_Rule { return nil } +type HttpLocalRateLimit struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Overall rate-limit, which all traffic coming to this server should abide + // to. If unset no overall limit is applied. + Total *HttpLocalRateLimit_Limit `protobuf:"bytes,1,opt,name=total,proto3" json:"total,omitempty"` + // Fairness for individual identities; each separate source, grouped by + // identity, will have this rate-limit. + Identity *HttpLocalRateLimit_Limit `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"` + // Limit overrides for traffic from a specific sources. + Overrides []*HttpLocalRateLimit_Override `protobuf:"bytes,3,rep,name=overrides,proto3" json:"overrides,omitempty"` + // TargetRefs for traffic sources. Only ServiceAccounts supported for now. + Targets []*meta.Metadata `protobuf:"bytes,4,rep,name=targets,proto3" json:"targets,omitempty"` +} + +func (x *HttpLocalRateLimit) Reset() { + *x = HttpLocalRateLimit{} + if protoimpl.UnsafeEnabled { + mi := &file_inbound_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HttpLocalRateLimit) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HttpLocalRateLimit) ProtoMessage() {} + +func (x *HttpLocalRateLimit) ProtoReflect() protoreflect.Message { + mi := &file_inbound_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HttpLocalRateLimit.ProtoReflect.Descriptor instead. +func (*HttpLocalRateLimit) Descriptor() ([]byte, []int) { + return file_inbound_proto_rawDescGZIP(), []int{10} +} + +func (x *HttpLocalRateLimit) GetTotal() *HttpLocalRateLimit_Limit { + if x != nil { + return x.Total + } + return nil +} + +func (x *HttpLocalRateLimit) GetIdentity() *HttpLocalRateLimit_Limit { + if x != nil { + return x.Identity + } + return nil +} + +func (x *HttpLocalRateLimit) GetOverrides() []*HttpLocalRateLimit_Override { + if x != nil { + return x.Overrides + } + return nil +} + +func (x *HttpLocalRateLimit) GetTargets() []*meta.Metadata { + if x != nil { + return x.Targets + } + return nil +} + type ProxyProtocol_Detect struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -786,12 +863,14 @@ type ProxyProtocol_Detect struct { // If the protocol detected as HTTP, a list of HTTP routes that should be // matched. HttpRoutes []*HttpRoute `protobuf:"bytes,3,rep,name=http_routes,json=httpRoutes,proto3" json:"http_routes,omitempty"` + // If the protocol detected as HTTP, applicable rate limit. + LocalRateLimit *HttpLocalRateLimit `protobuf:"bytes,4,opt,name=local_rate_limit,json=localRateLimit,proto3" json:"local_rate_limit,omitempty"` } func (x *ProxyProtocol_Detect) Reset() { *x = ProxyProtocol_Detect{} if protoimpl.UnsafeEnabled { - mi := &file_inbound_proto_msgTypes[11] + mi := &file_inbound_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -804,7 +883,7 @@ func (x *ProxyProtocol_Detect) String() string { func (*ProxyProtocol_Detect) ProtoMessage() {} func (x *ProxyProtocol_Detect) ProtoReflect() protoreflect.Message { - mi := &file_inbound_proto_msgTypes[11] + mi := &file_inbound_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -834,18 +913,26 @@ func (x *ProxyProtocol_Detect) GetHttpRoutes() []*HttpRoute { return nil } +func (x *ProxyProtocol_Detect) GetLocalRateLimit() *HttpLocalRateLimit { + if x != nil { + return x.LocalRateLimit + } + return nil +} + type ProxyProtocol_Http1 struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Routes []*HttpRoute `protobuf:"bytes,2,rep,name=routes,proto3" json:"routes,omitempty"` + Routes []*HttpRoute `protobuf:"bytes,2,rep,name=routes,proto3" json:"routes,omitempty"` + LocalRateLimit *HttpLocalRateLimit `protobuf:"bytes,3,opt,name=local_rate_limit,json=localRateLimit,proto3" json:"local_rate_limit,omitempty"` } func (x *ProxyProtocol_Http1) Reset() { *x = ProxyProtocol_Http1{} if protoimpl.UnsafeEnabled { - mi := &file_inbound_proto_msgTypes[12] + mi := &file_inbound_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -858,7 +945,7 @@ func (x *ProxyProtocol_Http1) String() string { func (*ProxyProtocol_Http1) ProtoMessage() {} func (x *ProxyProtocol_Http1) ProtoReflect() protoreflect.Message { - mi := &file_inbound_proto_msgTypes[12] + mi := &file_inbound_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -881,18 +968,26 @@ func (x *ProxyProtocol_Http1) GetRoutes() []*HttpRoute { return nil } +func (x *ProxyProtocol_Http1) GetLocalRateLimit() *HttpLocalRateLimit { + if x != nil { + return x.LocalRateLimit + } + return nil +} + type ProxyProtocol_Http2 struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Routes []*HttpRoute `protobuf:"bytes,2,rep,name=routes,proto3" json:"routes,omitempty"` + Routes []*HttpRoute `protobuf:"bytes,2,rep,name=routes,proto3" json:"routes,omitempty"` + LocalRateLimit *HttpLocalRateLimit `protobuf:"bytes,3,opt,name=local_rate_limit,json=localRateLimit,proto3" json:"local_rate_limit,omitempty"` } func (x *ProxyProtocol_Http2) Reset() { *x = ProxyProtocol_Http2{} if protoimpl.UnsafeEnabled { - mi := &file_inbound_proto_msgTypes[13] + mi := &file_inbound_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -905,7 +1000,7 @@ func (x *ProxyProtocol_Http2) String() string { func (*ProxyProtocol_Http2) ProtoMessage() {} func (x *ProxyProtocol_Http2) ProtoReflect() protoreflect.Message { - mi := &file_inbound_proto_msgTypes[13] + mi := &file_inbound_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -928,6 +1023,13 @@ func (x *ProxyProtocol_Http2) GetRoutes() []*HttpRoute { return nil } +func (x *ProxyProtocol_Http2) GetLocalRateLimit() *HttpLocalRateLimit { + if x != nil { + return x.LocalRateLimit + } + return nil +} + type ProxyProtocol_Grpc struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -939,7 +1041,7 @@ type ProxyProtocol_Grpc struct { func (x *ProxyProtocol_Grpc) Reset() { *x = ProxyProtocol_Grpc{} if protoimpl.UnsafeEnabled { - mi := &file_inbound_proto_msgTypes[14] + mi := &file_inbound_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -952,7 +1054,7 @@ func (x *ProxyProtocol_Grpc) String() string { func (*ProxyProtocol_Grpc) ProtoMessage() {} func (x *ProxyProtocol_Grpc) ProtoReflect() protoreflect.Message { - mi := &file_inbound_proto_msgTypes[14] + mi := &file_inbound_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -984,7 +1086,7 @@ type ProxyProtocol_Opaque struct { func (x *ProxyProtocol_Opaque) Reset() { *x = ProxyProtocol_Opaque{} if protoimpl.UnsafeEnabled { - mi := &file_inbound_proto_msgTypes[15] + mi := &file_inbound_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -997,7 +1099,7 @@ func (x *ProxyProtocol_Opaque) String() string { func (*ProxyProtocol_Opaque) ProtoMessage() {} func (x *ProxyProtocol_Opaque) ProtoReflect() protoreflect.Message { - mi := &file_inbound_proto_msgTypes[15] + mi := &file_inbound_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1022,7 +1124,7 @@ type ProxyProtocol_Tls struct { func (x *ProxyProtocol_Tls) Reset() { *x = ProxyProtocol_Tls{} if protoimpl.UnsafeEnabled { - mi := &file_inbound_proto_msgTypes[16] + mi := &file_inbound_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1035,7 +1137,7 @@ func (x *ProxyProtocol_Tls) String() string { func (*ProxyProtocol_Tls) ProtoMessage() {} func (x *ProxyProtocol_Tls) ProtoReflect() protoreflect.Message { - mi := &file_inbound_proto_msgTypes[16] + mi := &file_inbound_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1060,7 +1162,7 @@ type Authn_PermitUnauthenticated struct { func (x *Authn_PermitUnauthenticated) Reset() { *x = Authn_PermitUnauthenticated{} if protoimpl.UnsafeEnabled { - mi := &file_inbound_proto_msgTypes[18] + mi := &file_inbound_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1073,7 +1175,7 @@ func (x *Authn_PermitUnauthenticated) String() string { func (*Authn_PermitUnauthenticated) ProtoMessage() {} func (x *Authn_PermitUnauthenticated) ProtoReflect() protoreflect.Message { - mi := &file_inbound_proto_msgTypes[18] + mi := &file_inbound_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1104,7 +1206,7 @@ type Authn_PermitMeshTLS struct { func (x *Authn_PermitMeshTLS) Reset() { *x = Authn_PermitMeshTLS{} if protoimpl.UnsafeEnabled { - mi := &file_inbound_proto_msgTypes[19] + mi := &file_inbound_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1117,7 +1219,7 @@ func (x *Authn_PermitMeshTLS) String() string { func (*Authn_PermitMeshTLS) ProtoMessage() {} func (x *Authn_PermitMeshTLS) ProtoReflect() protoreflect.Message { - mi := &file_inbound_proto_msgTypes[19] + mi := &file_inbound_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1189,7 +1291,7 @@ type Authn_PermitMeshTLS_PermitClientIdentities struct { func (x *Authn_PermitMeshTLS_PermitClientIdentities) Reset() { *x = Authn_PermitMeshTLS_PermitClientIdentities{} if protoimpl.UnsafeEnabled { - mi := &file_inbound_proto_msgTypes[20] + mi := &file_inbound_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1202,7 +1304,7 @@ func (x *Authn_PermitMeshTLS_PermitClientIdentities) String() string { func (*Authn_PermitMeshTLS_PermitClientIdentities) ProtoMessage() {} func (x *Authn_PermitMeshTLS_PermitClientIdentities) ProtoReflect() protoreflect.Message { - mi := &file_inbound_proto_msgTypes[20] + mi := &file_inbound_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1244,7 +1346,7 @@ type HttpRoute_Rule struct { func (x *HttpRoute_Rule) Reset() { *x = HttpRoute_Rule{} if protoimpl.UnsafeEnabled { - mi := &file_inbound_proto_msgTypes[21] + mi := &file_inbound_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1257,7 +1359,7 @@ func (x *HttpRoute_Rule) String() string { func (*HttpRoute_Rule) ProtoMessage() {} func (x *HttpRoute_Rule) ProtoReflect() protoreflect.Message { - mi := &file_inbound_proto_msgTypes[21] + mi := &file_inbound_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1303,7 +1405,7 @@ type HttpRoute_Filter struct { func (x *HttpRoute_Filter) Reset() { *x = HttpRoute_Filter{} if protoimpl.UnsafeEnabled { - mi := &file_inbound_proto_msgTypes[22] + mi := &file_inbound_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1316,7 +1418,7 @@ func (x *HttpRoute_Filter) String() string { func (*HttpRoute_Filter) ProtoMessage() {} func (x *HttpRoute_Filter) ProtoReflect() protoreflect.Message { - mi := &file_inbound_proto_msgTypes[22] + mi := &file_inbound_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1394,7 +1496,7 @@ type GrpcRoute_Rule struct { func (x *GrpcRoute_Rule) Reset() { *x = GrpcRoute_Rule{} if protoimpl.UnsafeEnabled { - mi := &file_inbound_proto_msgTypes[23] + mi := &file_inbound_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1407,7 +1509,7 @@ func (x *GrpcRoute_Rule) String() string { func (*GrpcRoute_Rule) ProtoMessage() {} func (x *GrpcRoute_Rule) ProtoReflect() protoreflect.Message { - mi := &file_inbound_proto_msgTypes[23] + mi := &file_inbound_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1452,7 +1554,7 @@ type GrpcRoute_Filter struct { func (x *GrpcRoute_Filter) Reset() { *x = GrpcRoute_Filter{} if protoimpl.UnsafeEnabled { - mi := &file_inbound_proto_msgTypes[24] + mi := &file_inbound_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1465,7 +1567,7 @@ func (x *GrpcRoute_Filter) String() string { func (*GrpcRoute_Filter) ProtoMessage() {} func (x *GrpcRoute_Filter) ProtoReflect() protoreflect.Message { - mi := &file_inbound_proto_msgTypes[24] + mi := &file_inbound_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1518,6 +1620,100 @@ func (*GrpcRoute_Filter_FailureInjector) isGrpcRoute_Filter_Kind() {} func (*GrpcRoute_Filter_RequestHeaderModifier) isGrpcRoute_Filter_Kind() {} +type HttpLocalRateLimit_Override struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Limit *HttpLocalRateLimit_Limit `protobuf:"bytes,1,opt,name=limit,proto3" json:"limit,omitempty"` +} + +func (x *HttpLocalRateLimit_Override) Reset() { + *x = HttpLocalRateLimit_Override{} + if protoimpl.UnsafeEnabled { + mi := &file_inbound_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HttpLocalRateLimit_Override) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HttpLocalRateLimit_Override) ProtoMessage() {} + +func (x *HttpLocalRateLimit_Override) ProtoReflect() protoreflect.Message { + mi := &file_inbound_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HttpLocalRateLimit_Override.ProtoReflect.Descriptor instead. +func (*HttpLocalRateLimit_Override) Descriptor() ([]byte, []int) { + return file_inbound_proto_rawDescGZIP(), []int{10, 0} +} + +func (x *HttpLocalRateLimit_Override) GetLimit() *HttpLocalRateLimit_Limit { + if x != nil { + return x.Limit + } + return nil +} + +type HttpLocalRateLimit_Limit struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RequestsPerSecond uint64 `protobuf:"varint,1,opt,name=requestsPerSecond,proto3" json:"requestsPerSecond,omitempty"` +} + +func (x *HttpLocalRateLimit_Limit) Reset() { + *x = HttpLocalRateLimit_Limit{} + if protoimpl.UnsafeEnabled { + mi := &file_inbound_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HttpLocalRateLimit_Limit) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HttpLocalRateLimit_Limit) ProtoMessage() {} + +func (x *HttpLocalRateLimit_Limit) ProtoReflect() protoreflect.Message { + mi := &file_inbound_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HttpLocalRateLimit_Limit.ProtoReflect.Descriptor instead. +func (*HttpLocalRateLimit_Limit) Descriptor() ([]byte, []int) { + return file_inbound_proto_rawDescGZIP(), []int{10, 1} +} + +func (x *HttpLocalRateLimit_Limit) GetRequestsPerSecond() uint64 { + if x != nil { + return x.RequestsPerSecond + } + return 0 +} + var File_inbound_proto protoreflect.FileDescriptor var file_inbound_proto_rawDesc = []byte{ @@ -1554,7 +1750,7 @@ var file_inbound_proto_rawDesc = []byte{ 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xbe, 0x06, 0x0a, 0x0d, 0x50, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc8, 0x08, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x48, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, @@ -1582,7 +1778,7 @@ var file_inbound_proto_rawDesc = []byte{ 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x48, 0x00, 0x52, 0x04, 0x67, - 0x72, 0x70, 0x63, 0x1a, 0x89, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x12, 0x33, + 0x72, 0x70, 0x63, 0x1a, 0xe1, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, @@ -1590,196 +1786,242 @@ var file_inbound_proto_rawDesc = []byte{ 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x0a, 0x68, - 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x1a, - 0x4a, 0x0a, 0x05, 0x48, 0x74, 0x74, 0x70, 0x31, 0x12, 0x3b, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, + 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x10, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, + 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x48, + 0x74, 0x74, 0x70, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, + 0x74, 0x52, 0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, + 0x74, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x1a, 0xa2, 0x01, 0x0a, 0x05, 0x48, 0x74, 0x74, 0x70, + 0x31, 0x12, 0x3b, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, + 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x48, 0x74, 0x74, + 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x12, 0x56, + 0x0a, 0x10, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x06, 0x72, - 0x6f, 0x75, 0x74, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x1a, 0x4a, 0x0a, 0x05, 0x48, - 0x74, 0x74, 0x70, 0x32, 0x12, 0x3b, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, - 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, - 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, - 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x1a, 0x49, 0x0a, 0x04, 0x47, 0x72, 0x70, 0x63, 0x12, - 0x3b, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, - 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x52, - 0x6f, 0x75, 0x74, 0x65, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x01, - 0x10, 0x02, 0x1a, 0x08, 0x0a, 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x1a, 0x05, 0x0a, 0x03, - 0x54, 0x6c, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0xcc, 0x02, 0x0a, 0x05, - 0x41, 0x75, 0x74, 0x68, 0x7a, 0x12, 0x3d, 0x0a, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, + 0x75, 0x6e, 0x64, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x52, 0x61, 0x74, + 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x52, 0x61, 0x74, + 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x1a, 0xa2, 0x01, 0x0a, + 0x05, 0x48, 0x74, 0x74, 0x70, 0x32, 0x12, 0x3b, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, + 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x06, 0x72, 0x6f, 0x75, + 0x74, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x10, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x72, 0x61, 0x74, + 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, + 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x4c, 0x6f, 0x63, + 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x0e, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4a, 0x04, 0x08, 0x01, 0x10, + 0x02, 0x1a, 0x49, 0x0a, 0x04, 0x47, 0x72, 0x70, 0x63, 0x12, 0x3b, 0x0a, 0x06, 0x72, 0x6f, 0x75, + 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, + 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, + 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x06, + 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x1a, 0x08, 0x0a, 0x06, + 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x1a, 0x05, 0x0a, 0x03, 0x54, 0x6c, 0x73, 0x42, 0x06, 0x0a, + 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0xcc, 0x02, 0x0a, 0x05, 0x41, 0x75, 0x74, 0x68, 0x7a, 0x12, + 0x3d, 0x0a, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, + 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x12, 0x47, + 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, + 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6e, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x08, 0x6e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x73, 0x12, 0x47, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, + 0x6e, 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x7a, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3b, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, + 0x79, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x75, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, + 0x31, 0x0a, 0x03, 0x6e, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, - 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6e, 0x52, 0x0e, 0x61, - 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, - 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, - 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, - 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x7a, 0x2e, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, - 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, - 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x75, 0x0a, 0x07, 0x4e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x31, 0x0a, 0x03, 0x6e, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x6e, 0x65, 0x74, 0x2e, 0x49, 0x50, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x03, 0x6e, + 0x65, 0x74, 0x12, 0x37, 0x0a, 0x06, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x6e, 0x65, 0x74, 0x2e, 0x49, 0x50, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x52, 0x03, 0x6e, 0x65, 0x74, 0x12, 0x37, 0x0a, 0x06, 0x65, 0x78, 0x63, 0x65, - 0x70, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, - 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x6e, 0x65, 0x74, 0x2e, - 0x49, 0x50, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x06, 0x65, 0x78, 0x63, 0x65, 0x70, - 0x74, 0x22, 0xe5, 0x04, 0x0a, 0x05, 0x41, 0x75, 0x74, 0x68, 0x6e, 0x12, 0x61, 0x0a, 0x0f, 0x75, - 0x6e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, - 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, - 0x41, 0x75, 0x74, 0x68, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x55, 0x6e, 0x61, 0x75, - 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0f, 0x75, - 0x6e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x49, - 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x68, 0x54, 0x4c, 0x53, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2d, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, - 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6e, - 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, 0x68, 0x54, 0x4c, 0x53, 0x48, 0x00, - 0x52, 0x07, 0x6d, 0x65, 0x73, 0x68, 0x54, 0x4c, 0x53, 0x1a, 0x17, 0x0a, 0x15, 0x50, 0x65, 0x72, - 0x6d, 0x69, 0x74, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x64, 0x1a, 0x8a, 0x03, 0x0a, 0x0d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, - 0x68, 0x54, 0x4c, 0x53, 0x12, 0x61, 0x0a, 0x0f, 0x75, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, - 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, - 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, - 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6e, 0x2e, 0x50, - 0x65, 0x72, 0x6d, 0x69, 0x74, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, - 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x66, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x69, 0x6f, - 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, - 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6e, 0x2e, 0x50, 0x65, 0x72, - 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, 0x68, 0x54, 0x4c, 0x53, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, - 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x48, 0x00, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x1a, - 0xa2, 0x01, 0x0a, 0x16, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x0a, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, - 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x44, - 0x0a, 0x08, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x28, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, - 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x53, 0x75, 0x66, 0x66, 0x69, 0x78, 0x52, 0x08, 0x73, 0x75, 0x66, 0x66, - 0x69, 0x78, 0x65, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x42, - 0x08, 0x0a, 0x06, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x22, 0x1e, 0x0a, 0x08, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x26, 0x0a, 0x0e, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, 0x75, 0x66, 0x66, 0x69, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x70, - 0x61, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x72, 0x74, - 0x73, 0x22, 0xd1, 0x05, 0x0a, 0x09, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, - 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, - 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3c, 0x0a, 0x05, - 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x6f, - 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x68, - 0x74, 0x74, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x47, 0x0a, 0x0e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, - 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x41, 0x75, - 0x74, 0x68, 0x7a, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x3e, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, - 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x48, 0x74, - 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, - 0x6c, 0x65, 0x73, 0x1a, 0x93, 0x01, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x45, 0x0a, 0x07, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, - 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, - 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x74, 0x74, 0x70, - 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, - 0x68, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, - 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, - 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x1a, 0xa9, 0x02, 0x0a, 0x06, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x12, 0x5d, 0x0a, 0x10, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, - 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, + 0x6f, 0x72, 0x6b, 0x52, 0x06, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x22, 0xe5, 0x04, 0x0a, 0x05, + 0x41, 0x75, 0x74, 0x68, 0x6e, 0x12, 0x61, 0x0a, 0x0f, 0x75, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x65, + 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, - 0x79, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x74, 0x74, - 0x70, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x48, 0x00, 0x52, 0x0f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x6a, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x12, 0x6c, 0x0a, 0x17, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, - 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x72, 0x6f, 0x75, - 0x74, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x12, 0x4a, 0x0a, 0x08, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, - 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, - 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x42, 0x06, 0x0a, - 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x85, 0x05, 0x0a, 0x09, 0x47, 0x72, 0x70, 0x63, 0x52, 0x6f, - 0x75, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, - 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x3c, 0x0a, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, - 0x78, 0x79, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x6f, - 0x73, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x47, - 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, - 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, - 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x7a, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3e, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, - 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, - 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, - 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x1a, 0x93, 0x01, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, - 0x12, 0x45, 0x0a, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, - 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, - 0x47, 0x72, 0x70, 0x63, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x07, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, + 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6e, 0x2e, + 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x65, + 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x68, + 0x54, 0x4c, 0x53, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, + 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, + 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, + 0x74, 0x4d, 0x65, 0x73, 0x68, 0x54, 0x4c, 0x53, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x68, + 0x54, 0x4c, 0x53, 0x1a, 0x17, 0x0a, 0x15, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x55, 0x6e, 0x61, + 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x8a, 0x03, 0x0a, + 0x0d, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, 0x68, 0x54, 0x4c, 0x53, 0x12, 0x61, + 0x0a, 0x0f, 0x75, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, + 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x55, + 0x6e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x48, 0x00, + 0x52, 0x0f, 0x75, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x64, 0x12, 0x66, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, + 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, + 0x68, 0x54, 0x4c, 0x53, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x1a, 0xa2, 0x01, 0x0a, 0x16, 0x50, 0x65, + 0x72, 0x6d, 0x69, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x1a, 0xdd, 0x01, - 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x5d, 0x0a, 0x10, 0x66, 0x61, 0x69, 0x6c, - 0x75, 0x72, 0x65, 0x5f, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, - 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, - 0x2e, 0x47, 0x72, 0x70, 0x63, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x6a, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x49, - 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x6c, 0x0a, 0x17, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, - 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, + 0x75, 0x6e, 0x64, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x08, 0x73, 0x75, 0x66, 0x66, + 0x69, 0x78, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x69, 0x6f, 0x2e, + 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, 0x75, + 0x66, 0x66, 0x69, 0x78, 0x52, 0x08, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x65, 0x73, 0x42, 0x09, + 0x0a, 0x07, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x08, 0x0a, 0x06, 0x70, 0x65, 0x72, + 0x6d, 0x69, 0x74, 0x22, 0x1e, 0x0a, 0x08, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x22, 0x26, 0x0a, 0x0e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, + 0x75, 0x66, 0x66, 0x69, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x72, 0x74, 0x73, 0x22, 0xd1, 0x05, 0x0a, 0x09, + 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, + 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x6d, + 0x65, 0x74, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3c, 0x0a, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, + 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x72, 0x6f, + 0x75, 0x74, 0x65, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x68, + 0x6f, 0x73, 0x74, 0x73, 0x12, 0x47, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, + 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, + 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x7a, 0x52, 0x0e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3e, 0x0a, + 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x69, + 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, + 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, + 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x1a, 0x93, 0x01, + 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x45, 0x0a, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, + 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, + 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x44, 0x0a, + 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, + 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, + 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, + 0x75, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x73, 0x1a, 0xa9, 0x02, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x5d, + 0x0a, 0x10, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x68, 0x74, 0x74, 0x70, - 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x15, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x6f, 0x64, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x32, 0xc1, 0x01, - 0x0a, 0x15, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x51, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x50, 0x6f, - 0x72, 0x74, 0x12, 0x22, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, - 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x50, 0x6f, - 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x1a, 0x20, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, - 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, - 0x64, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x09, 0x57, 0x61, - 0x74, 0x63, 0x68, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x22, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, - 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x1a, 0x20, 0x2e, 0x69, 0x6f, + 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x46, 0x61, 0x69, 0x6c, 0x75, + 0x72, 0x65, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0f, 0x66, 0x61, + 0x69, 0x6c, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x6c, 0x0a, + 0x17, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, + 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, + 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, + 0x79, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x48, 0x00, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x4a, 0x0a, 0x08, 0x72, + 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, + 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x48, 0x00, 0x52, 0x08, 0x72, + 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, + 0x85, 0x05, 0x0a, 0x09, 0x47, 0x72, 0x70, 0x63, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x3b, 0x0a, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, + 0x78, 0x79, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3c, 0x0a, 0x05, 0x68, 0x6f, + 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, + 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x68, 0x74, 0x74, + 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x52, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x47, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, + 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, + 0x7a, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x3e, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, + 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, + 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, + 0x73, 0x1a, 0x93, 0x01, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x45, 0x0a, 0x07, 0x6d, 0x61, + 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x69, 0x6f, + 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x52, 0x6f, + 0x75, 0x74, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, + 0x73, 0x12, 0x44, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, + 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x47, 0x72, + 0x70, 0x63, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x1a, 0xdd, 0x01, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x12, 0x5d, 0x0a, 0x10, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x6e, + 0x6a, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x69, + 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x46, + 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, + 0x52, 0x0f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x12, 0x6c, 0x0a, 0x17, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, + 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, + 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, + 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0xcb, 0x03, 0x0a, 0x12, 0x48, 0x74, 0x74, 0x70, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x48, + 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, + 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, + 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x4c, 0x6f, 0x63, + 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x4c, 0x69, 0x6d, 0x69, + 0x74, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x4e, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, + 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x52, + 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x08, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x53, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, + 0x72, 0x69, 0x64, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, - 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0x00, 0x30, - 0x01, 0x42, 0x32, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2f, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, - 0x2d, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x69, 0x6e, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x4c, 0x6f, 0x63, 0x61, 0x6c, + 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, + 0x64, 0x65, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x12, 0x39, 0x0a, + 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, + 0x79, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x1a, 0x54, 0x0a, 0x08, 0x4f, 0x76, 0x65, 0x72, + 0x72, 0x69, 0x64, 0x65, 0x12, 0x48, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, + 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x48, + 0x74, 0x74, 0x70, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, + 0x74, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x1a, 0x35, + 0x0a, 0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x11, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x50, 0x65, 0x72, 0x53, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x32, 0xc1, 0x01, 0x0a, 0x15, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, + 0x51, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x22, 0x2e, 0x69, 0x6f, 0x2e, + 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x1a, 0x20, + 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x78, + 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x22, 0x00, 0x12, 0x55, 0x0a, 0x09, 0x57, 0x61, 0x74, 0x63, 0x68, 0x50, 0x6f, 0x72, 0x74, 0x12, + 0x22, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, + 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x53, + 0x70, 0x65, 0x63, 0x1a, 0x20, 0x2e, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, + 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0x00, 0x30, 0x01, 0x42, 0x32, 0x5a, 0x30, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x2f, + 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x72, 0x64, 0x32, 0x2d, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2d, 0x61, + 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1794,7 +2036,7 @@ func file_inbound_proto_rawDescGZIP() []byte { return file_inbound_proto_rawDescData } -var file_inbound_proto_msgTypes = make([]protoimpl.MessageInfo, 25) +var file_inbound_proto_msgTypes = make([]protoimpl.MessageInfo, 28) var file_inbound_proto_goTypes = []any{ (*PortSpec)(nil), // 0: io.linkerd.proxy.inbound.PortSpec (*Server)(nil), // 1: io.linkerd.proxy.inbound.Server @@ -1806,87 +2048,98 @@ var file_inbound_proto_goTypes = []any{ (*IdentitySuffix)(nil), // 7: io.linkerd.proxy.inbound.IdentitySuffix (*HttpRoute)(nil), // 8: io.linkerd.proxy.inbound.HttpRoute (*GrpcRoute)(nil), // 9: io.linkerd.proxy.inbound.GrpcRoute - nil, // 10: io.linkerd.proxy.inbound.Server.LabelsEntry - (*ProxyProtocol_Detect)(nil), // 11: io.linkerd.proxy.inbound.ProxyProtocol.Detect - (*ProxyProtocol_Http1)(nil), // 12: io.linkerd.proxy.inbound.ProxyProtocol.Http1 - (*ProxyProtocol_Http2)(nil), // 13: io.linkerd.proxy.inbound.ProxyProtocol.Http2 - (*ProxyProtocol_Grpc)(nil), // 14: io.linkerd.proxy.inbound.ProxyProtocol.Grpc - (*ProxyProtocol_Opaque)(nil), // 15: io.linkerd.proxy.inbound.ProxyProtocol.Opaque - (*ProxyProtocol_Tls)(nil), // 16: io.linkerd.proxy.inbound.ProxyProtocol.Tls - nil, // 17: io.linkerd.proxy.inbound.Authz.LabelsEntry - (*Authn_PermitUnauthenticated)(nil), // 18: io.linkerd.proxy.inbound.Authn.PermitUnauthenticated - (*Authn_PermitMeshTLS)(nil), // 19: io.linkerd.proxy.inbound.Authn.PermitMeshTLS - (*Authn_PermitMeshTLS_PermitClientIdentities)(nil), // 20: io.linkerd.proxy.inbound.Authn.PermitMeshTLS.PermitClientIdentities - (*HttpRoute_Rule)(nil), // 21: io.linkerd.proxy.inbound.HttpRoute.Rule - (*HttpRoute_Filter)(nil), // 22: io.linkerd.proxy.inbound.HttpRoute.Filter - (*GrpcRoute_Rule)(nil), // 23: io.linkerd.proxy.inbound.GrpcRoute.Rule - (*GrpcRoute_Filter)(nil), // 24: io.linkerd.proxy.inbound.GrpcRoute.Filter - (*net.IPAddress)(nil), // 25: io.linkerd.proxy.net.IPAddress - (*meta.Metadata)(nil), // 26: io.linkerd.proxy.meta.Metadata - (*net.IPNetwork)(nil), // 27: io.linkerd.proxy.net.IPNetwork - (*http_route.HostMatch)(nil), // 28: io.linkerd.proxy.http_route.HostMatch - (*duration.Duration)(nil), // 29: google.protobuf.Duration - (*http_route.HttpRouteMatch)(nil), // 30: io.linkerd.proxy.http_route.HttpRouteMatch - (*http_route.HttpFailureInjector)(nil), // 31: io.linkerd.proxy.http_route.HttpFailureInjector - (*http_route.RequestHeaderModifier)(nil), // 32: io.linkerd.proxy.http_route.RequestHeaderModifier - (*http_route.RequestRedirect)(nil), // 33: io.linkerd.proxy.http_route.RequestRedirect - (*grpc_route.GrpcRouteMatch)(nil), // 34: io.linkerd.proxy.grpc_route.GrpcRouteMatch - (*grpc_route.GrpcFailureInjector)(nil), // 35: io.linkerd.proxy.grpc_route.GrpcFailureInjector + (*HttpLocalRateLimit)(nil), // 10: io.linkerd.proxy.inbound.HttpLocalRateLimit + nil, // 11: io.linkerd.proxy.inbound.Server.LabelsEntry + (*ProxyProtocol_Detect)(nil), // 12: io.linkerd.proxy.inbound.ProxyProtocol.Detect + (*ProxyProtocol_Http1)(nil), // 13: io.linkerd.proxy.inbound.ProxyProtocol.Http1 + (*ProxyProtocol_Http2)(nil), // 14: io.linkerd.proxy.inbound.ProxyProtocol.Http2 + (*ProxyProtocol_Grpc)(nil), // 15: io.linkerd.proxy.inbound.ProxyProtocol.Grpc + (*ProxyProtocol_Opaque)(nil), // 16: io.linkerd.proxy.inbound.ProxyProtocol.Opaque + (*ProxyProtocol_Tls)(nil), // 17: io.linkerd.proxy.inbound.ProxyProtocol.Tls + nil, // 18: io.linkerd.proxy.inbound.Authz.LabelsEntry + (*Authn_PermitUnauthenticated)(nil), // 19: io.linkerd.proxy.inbound.Authn.PermitUnauthenticated + (*Authn_PermitMeshTLS)(nil), // 20: io.linkerd.proxy.inbound.Authn.PermitMeshTLS + (*Authn_PermitMeshTLS_PermitClientIdentities)(nil), // 21: io.linkerd.proxy.inbound.Authn.PermitMeshTLS.PermitClientIdentities + (*HttpRoute_Rule)(nil), // 22: io.linkerd.proxy.inbound.HttpRoute.Rule + (*HttpRoute_Filter)(nil), // 23: io.linkerd.proxy.inbound.HttpRoute.Filter + (*GrpcRoute_Rule)(nil), // 24: io.linkerd.proxy.inbound.GrpcRoute.Rule + (*GrpcRoute_Filter)(nil), // 25: io.linkerd.proxy.inbound.GrpcRoute.Filter + (*HttpLocalRateLimit_Override)(nil), // 26: io.linkerd.proxy.inbound.HttpLocalRateLimit.Override + (*HttpLocalRateLimit_Limit)(nil), // 27: io.linkerd.proxy.inbound.HttpLocalRateLimit.Limit + (*net.IPAddress)(nil), // 28: io.linkerd.proxy.net.IPAddress + (*meta.Metadata)(nil), // 29: io.linkerd.proxy.meta.Metadata + (*net.IPNetwork)(nil), // 30: io.linkerd.proxy.net.IPNetwork + (*http_route.HostMatch)(nil), // 31: io.linkerd.proxy.http_route.HostMatch + (*duration.Duration)(nil), // 32: google.protobuf.Duration + (*http_route.HttpRouteMatch)(nil), // 33: io.linkerd.proxy.http_route.HttpRouteMatch + (*http_route.HttpFailureInjector)(nil), // 34: io.linkerd.proxy.http_route.HttpFailureInjector + (*http_route.RequestHeaderModifier)(nil), // 35: io.linkerd.proxy.http_route.RequestHeaderModifier + (*http_route.RequestRedirect)(nil), // 36: io.linkerd.proxy.http_route.RequestRedirect + (*grpc_route.GrpcRouteMatch)(nil), // 37: io.linkerd.proxy.grpc_route.GrpcRouteMatch + (*grpc_route.GrpcFailureInjector)(nil), // 38: io.linkerd.proxy.grpc_route.GrpcFailureInjector } var file_inbound_proto_depIdxs = []int32{ 2, // 0: io.linkerd.proxy.inbound.Server.protocol:type_name -> io.linkerd.proxy.inbound.ProxyProtocol - 25, // 1: io.linkerd.proxy.inbound.Server.server_ips:type_name -> io.linkerd.proxy.net.IPAddress + 28, // 1: io.linkerd.proxy.inbound.Server.server_ips:type_name -> io.linkerd.proxy.net.IPAddress 3, // 2: io.linkerd.proxy.inbound.Server.authorizations:type_name -> io.linkerd.proxy.inbound.Authz - 10, // 3: io.linkerd.proxy.inbound.Server.labels:type_name -> io.linkerd.proxy.inbound.Server.LabelsEntry - 11, // 4: io.linkerd.proxy.inbound.ProxyProtocol.detect:type_name -> io.linkerd.proxy.inbound.ProxyProtocol.Detect - 15, // 5: io.linkerd.proxy.inbound.ProxyProtocol.opaque:type_name -> io.linkerd.proxy.inbound.ProxyProtocol.Opaque - 16, // 6: io.linkerd.proxy.inbound.ProxyProtocol.tls:type_name -> io.linkerd.proxy.inbound.ProxyProtocol.Tls - 12, // 7: io.linkerd.proxy.inbound.ProxyProtocol.http1:type_name -> io.linkerd.proxy.inbound.ProxyProtocol.Http1 - 13, // 8: io.linkerd.proxy.inbound.ProxyProtocol.http2:type_name -> io.linkerd.proxy.inbound.ProxyProtocol.Http2 - 14, // 9: io.linkerd.proxy.inbound.ProxyProtocol.grpc:type_name -> io.linkerd.proxy.inbound.ProxyProtocol.Grpc + 11, // 3: io.linkerd.proxy.inbound.Server.labels:type_name -> io.linkerd.proxy.inbound.Server.LabelsEntry + 12, // 4: io.linkerd.proxy.inbound.ProxyProtocol.detect:type_name -> io.linkerd.proxy.inbound.ProxyProtocol.Detect + 16, // 5: io.linkerd.proxy.inbound.ProxyProtocol.opaque:type_name -> io.linkerd.proxy.inbound.ProxyProtocol.Opaque + 17, // 6: io.linkerd.proxy.inbound.ProxyProtocol.tls:type_name -> io.linkerd.proxy.inbound.ProxyProtocol.Tls + 13, // 7: io.linkerd.proxy.inbound.ProxyProtocol.http1:type_name -> io.linkerd.proxy.inbound.ProxyProtocol.Http1 + 14, // 8: io.linkerd.proxy.inbound.ProxyProtocol.http2:type_name -> io.linkerd.proxy.inbound.ProxyProtocol.Http2 + 15, // 9: io.linkerd.proxy.inbound.ProxyProtocol.grpc:type_name -> io.linkerd.proxy.inbound.ProxyProtocol.Grpc 4, // 10: io.linkerd.proxy.inbound.Authz.networks:type_name -> io.linkerd.proxy.inbound.Network 5, // 11: io.linkerd.proxy.inbound.Authz.authentication:type_name -> io.linkerd.proxy.inbound.Authn - 17, // 12: io.linkerd.proxy.inbound.Authz.labels:type_name -> io.linkerd.proxy.inbound.Authz.LabelsEntry - 26, // 13: io.linkerd.proxy.inbound.Authz.metadata:type_name -> io.linkerd.proxy.meta.Metadata - 27, // 14: io.linkerd.proxy.inbound.Network.net:type_name -> io.linkerd.proxy.net.IPNetwork - 27, // 15: io.linkerd.proxy.inbound.Network.except:type_name -> io.linkerd.proxy.net.IPNetwork - 18, // 16: io.linkerd.proxy.inbound.Authn.unauthenticated:type_name -> io.linkerd.proxy.inbound.Authn.PermitUnauthenticated - 19, // 17: io.linkerd.proxy.inbound.Authn.meshTLS:type_name -> io.linkerd.proxy.inbound.Authn.PermitMeshTLS - 26, // 18: io.linkerd.proxy.inbound.HttpRoute.metadata:type_name -> io.linkerd.proxy.meta.Metadata - 28, // 19: io.linkerd.proxy.inbound.HttpRoute.hosts:type_name -> io.linkerd.proxy.http_route.HostMatch + 18, // 12: io.linkerd.proxy.inbound.Authz.labels:type_name -> io.linkerd.proxy.inbound.Authz.LabelsEntry + 29, // 13: io.linkerd.proxy.inbound.Authz.metadata:type_name -> io.linkerd.proxy.meta.Metadata + 30, // 14: io.linkerd.proxy.inbound.Network.net:type_name -> io.linkerd.proxy.net.IPNetwork + 30, // 15: io.linkerd.proxy.inbound.Network.except:type_name -> io.linkerd.proxy.net.IPNetwork + 19, // 16: io.linkerd.proxy.inbound.Authn.unauthenticated:type_name -> io.linkerd.proxy.inbound.Authn.PermitUnauthenticated + 20, // 17: io.linkerd.proxy.inbound.Authn.meshTLS:type_name -> io.linkerd.proxy.inbound.Authn.PermitMeshTLS + 29, // 18: io.linkerd.proxy.inbound.HttpRoute.metadata:type_name -> io.linkerd.proxy.meta.Metadata + 31, // 19: io.linkerd.proxy.inbound.HttpRoute.hosts:type_name -> io.linkerd.proxy.http_route.HostMatch 3, // 20: io.linkerd.proxy.inbound.HttpRoute.authorizations:type_name -> io.linkerd.proxy.inbound.Authz - 21, // 21: io.linkerd.proxy.inbound.HttpRoute.rules:type_name -> io.linkerd.proxy.inbound.HttpRoute.Rule - 26, // 22: io.linkerd.proxy.inbound.GrpcRoute.metadata:type_name -> io.linkerd.proxy.meta.Metadata - 28, // 23: io.linkerd.proxy.inbound.GrpcRoute.hosts:type_name -> io.linkerd.proxy.http_route.HostMatch + 22, // 21: io.linkerd.proxy.inbound.HttpRoute.rules:type_name -> io.linkerd.proxy.inbound.HttpRoute.Rule + 29, // 22: io.linkerd.proxy.inbound.GrpcRoute.metadata:type_name -> io.linkerd.proxy.meta.Metadata + 31, // 23: io.linkerd.proxy.inbound.GrpcRoute.hosts:type_name -> io.linkerd.proxy.http_route.HostMatch 3, // 24: io.linkerd.proxy.inbound.GrpcRoute.authorizations:type_name -> io.linkerd.proxy.inbound.Authz - 23, // 25: io.linkerd.proxy.inbound.GrpcRoute.rules:type_name -> io.linkerd.proxy.inbound.GrpcRoute.Rule - 29, // 26: io.linkerd.proxy.inbound.ProxyProtocol.Detect.timeout:type_name -> google.protobuf.Duration - 8, // 27: io.linkerd.proxy.inbound.ProxyProtocol.Detect.http_routes:type_name -> io.linkerd.proxy.inbound.HttpRoute - 8, // 28: io.linkerd.proxy.inbound.ProxyProtocol.Http1.routes:type_name -> io.linkerd.proxy.inbound.HttpRoute - 8, // 29: io.linkerd.proxy.inbound.ProxyProtocol.Http2.routes:type_name -> io.linkerd.proxy.inbound.HttpRoute - 9, // 30: io.linkerd.proxy.inbound.ProxyProtocol.Grpc.routes:type_name -> io.linkerd.proxy.inbound.GrpcRoute - 18, // 31: io.linkerd.proxy.inbound.Authn.PermitMeshTLS.unauthenticated:type_name -> io.linkerd.proxy.inbound.Authn.PermitUnauthenticated - 20, // 32: io.linkerd.proxy.inbound.Authn.PermitMeshTLS.identities:type_name -> io.linkerd.proxy.inbound.Authn.PermitMeshTLS.PermitClientIdentities - 6, // 33: io.linkerd.proxy.inbound.Authn.PermitMeshTLS.PermitClientIdentities.identities:type_name -> io.linkerd.proxy.inbound.Identity - 7, // 34: io.linkerd.proxy.inbound.Authn.PermitMeshTLS.PermitClientIdentities.suffixes:type_name -> io.linkerd.proxy.inbound.IdentitySuffix - 30, // 35: io.linkerd.proxy.inbound.HttpRoute.Rule.matches:type_name -> io.linkerd.proxy.http_route.HttpRouteMatch - 22, // 36: io.linkerd.proxy.inbound.HttpRoute.Rule.filters:type_name -> io.linkerd.proxy.inbound.HttpRoute.Filter - 31, // 37: io.linkerd.proxy.inbound.HttpRoute.Filter.failure_injector:type_name -> io.linkerd.proxy.http_route.HttpFailureInjector - 32, // 38: io.linkerd.proxy.inbound.HttpRoute.Filter.request_header_modifier:type_name -> io.linkerd.proxy.http_route.RequestHeaderModifier - 33, // 39: io.linkerd.proxy.inbound.HttpRoute.Filter.redirect:type_name -> io.linkerd.proxy.http_route.RequestRedirect - 34, // 40: io.linkerd.proxy.inbound.GrpcRoute.Rule.matches:type_name -> io.linkerd.proxy.grpc_route.GrpcRouteMatch - 24, // 41: io.linkerd.proxy.inbound.GrpcRoute.Rule.filters:type_name -> io.linkerd.proxy.inbound.GrpcRoute.Filter - 35, // 42: io.linkerd.proxy.inbound.GrpcRoute.Filter.failure_injector:type_name -> io.linkerd.proxy.grpc_route.GrpcFailureInjector - 32, // 43: io.linkerd.proxy.inbound.GrpcRoute.Filter.request_header_modifier:type_name -> io.linkerd.proxy.http_route.RequestHeaderModifier - 0, // 44: io.linkerd.proxy.inbound.InboundServerPolicies.GetPort:input_type -> io.linkerd.proxy.inbound.PortSpec - 0, // 45: io.linkerd.proxy.inbound.InboundServerPolicies.WatchPort:input_type -> io.linkerd.proxy.inbound.PortSpec - 1, // 46: io.linkerd.proxy.inbound.InboundServerPolicies.GetPort:output_type -> io.linkerd.proxy.inbound.Server - 1, // 47: io.linkerd.proxy.inbound.InboundServerPolicies.WatchPort:output_type -> io.linkerd.proxy.inbound.Server - 46, // [46:48] is the sub-list for method output_type - 44, // [44:46] is the sub-list for method input_type - 44, // [44:44] is the sub-list for extension type_name - 44, // [44:44] is the sub-list for extension extendee - 0, // [0:44] is the sub-list for field type_name + 24, // 25: io.linkerd.proxy.inbound.GrpcRoute.rules:type_name -> io.linkerd.proxy.inbound.GrpcRoute.Rule + 27, // 26: io.linkerd.proxy.inbound.HttpLocalRateLimit.total:type_name -> io.linkerd.proxy.inbound.HttpLocalRateLimit.Limit + 27, // 27: io.linkerd.proxy.inbound.HttpLocalRateLimit.identity:type_name -> io.linkerd.proxy.inbound.HttpLocalRateLimit.Limit + 26, // 28: io.linkerd.proxy.inbound.HttpLocalRateLimit.overrides:type_name -> io.linkerd.proxy.inbound.HttpLocalRateLimit.Override + 29, // 29: io.linkerd.proxy.inbound.HttpLocalRateLimit.targets:type_name -> io.linkerd.proxy.meta.Metadata + 32, // 30: io.linkerd.proxy.inbound.ProxyProtocol.Detect.timeout:type_name -> google.protobuf.Duration + 8, // 31: io.linkerd.proxy.inbound.ProxyProtocol.Detect.http_routes:type_name -> io.linkerd.proxy.inbound.HttpRoute + 10, // 32: io.linkerd.proxy.inbound.ProxyProtocol.Detect.local_rate_limit:type_name -> io.linkerd.proxy.inbound.HttpLocalRateLimit + 8, // 33: io.linkerd.proxy.inbound.ProxyProtocol.Http1.routes:type_name -> io.linkerd.proxy.inbound.HttpRoute + 10, // 34: io.linkerd.proxy.inbound.ProxyProtocol.Http1.local_rate_limit:type_name -> io.linkerd.proxy.inbound.HttpLocalRateLimit + 8, // 35: io.linkerd.proxy.inbound.ProxyProtocol.Http2.routes:type_name -> io.linkerd.proxy.inbound.HttpRoute + 10, // 36: io.linkerd.proxy.inbound.ProxyProtocol.Http2.local_rate_limit:type_name -> io.linkerd.proxy.inbound.HttpLocalRateLimit + 9, // 37: io.linkerd.proxy.inbound.ProxyProtocol.Grpc.routes:type_name -> io.linkerd.proxy.inbound.GrpcRoute + 19, // 38: io.linkerd.proxy.inbound.Authn.PermitMeshTLS.unauthenticated:type_name -> io.linkerd.proxy.inbound.Authn.PermitUnauthenticated + 21, // 39: io.linkerd.proxy.inbound.Authn.PermitMeshTLS.identities:type_name -> io.linkerd.proxy.inbound.Authn.PermitMeshTLS.PermitClientIdentities + 6, // 40: io.linkerd.proxy.inbound.Authn.PermitMeshTLS.PermitClientIdentities.identities:type_name -> io.linkerd.proxy.inbound.Identity + 7, // 41: io.linkerd.proxy.inbound.Authn.PermitMeshTLS.PermitClientIdentities.suffixes:type_name -> io.linkerd.proxy.inbound.IdentitySuffix + 33, // 42: io.linkerd.proxy.inbound.HttpRoute.Rule.matches:type_name -> io.linkerd.proxy.http_route.HttpRouteMatch + 23, // 43: io.linkerd.proxy.inbound.HttpRoute.Rule.filters:type_name -> io.linkerd.proxy.inbound.HttpRoute.Filter + 34, // 44: io.linkerd.proxy.inbound.HttpRoute.Filter.failure_injector:type_name -> io.linkerd.proxy.http_route.HttpFailureInjector + 35, // 45: io.linkerd.proxy.inbound.HttpRoute.Filter.request_header_modifier:type_name -> io.linkerd.proxy.http_route.RequestHeaderModifier + 36, // 46: io.linkerd.proxy.inbound.HttpRoute.Filter.redirect:type_name -> io.linkerd.proxy.http_route.RequestRedirect + 37, // 47: io.linkerd.proxy.inbound.GrpcRoute.Rule.matches:type_name -> io.linkerd.proxy.grpc_route.GrpcRouteMatch + 25, // 48: io.linkerd.proxy.inbound.GrpcRoute.Rule.filters:type_name -> io.linkerd.proxy.inbound.GrpcRoute.Filter + 38, // 49: io.linkerd.proxy.inbound.GrpcRoute.Filter.failure_injector:type_name -> io.linkerd.proxy.grpc_route.GrpcFailureInjector + 35, // 50: io.linkerd.proxy.inbound.GrpcRoute.Filter.request_header_modifier:type_name -> io.linkerd.proxy.http_route.RequestHeaderModifier + 27, // 51: io.linkerd.proxy.inbound.HttpLocalRateLimit.Override.limit:type_name -> io.linkerd.proxy.inbound.HttpLocalRateLimit.Limit + 0, // 52: io.linkerd.proxy.inbound.InboundServerPolicies.GetPort:input_type -> io.linkerd.proxy.inbound.PortSpec + 0, // 53: io.linkerd.proxy.inbound.InboundServerPolicies.WatchPort:input_type -> io.linkerd.proxy.inbound.PortSpec + 1, // 54: io.linkerd.proxy.inbound.InboundServerPolicies.GetPort:output_type -> io.linkerd.proxy.inbound.Server + 1, // 55: io.linkerd.proxy.inbound.InboundServerPolicies.WatchPort:output_type -> io.linkerd.proxy.inbound.Server + 54, // [54:56] is the sub-list for method output_type + 52, // [52:54] is the sub-list for method input_type + 52, // [52:52] is the sub-list for extension type_name + 52, // [52:52] is the sub-list for extension extendee + 0, // [0:52] is the sub-list for field type_name } func init() { file_inbound_proto_init() } @@ -2015,8 +2268,8 @@ func file_inbound_proto_init() { return nil } } - file_inbound_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*ProxyProtocol_Detect); i { + file_inbound_proto_msgTypes[10].Exporter = func(v any, i int) any { + switch v := v.(*HttpLocalRateLimit); i { case 0: return &v.state case 1: @@ -2028,7 +2281,7 @@ func file_inbound_proto_init() { } } file_inbound_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*ProxyProtocol_Http1); i { + switch v := v.(*ProxyProtocol_Detect); i { case 0: return &v.state case 1: @@ -2040,7 +2293,7 @@ func file_inbound_proto_init() { } } file_inbound_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*ProxyProtocol_Http2); i { + switch v := v.(*ProxyProtocol_Http1); i { case 0: return &v.state case 1: @@ -2052,7 +2305,7 @@ func file_inbound_proto_init() { } } file_inbound_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*ProxyProtocol_Grpc); i { + switch v := v.(*ProxyProtocol_Http2); i { case 0: return &v.state case 1: @@ -2064,7 +2317,7 @@ func file_inbound_proto_init() { } } file_inbound_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*ProxyProtocol_Opaque); i { + switch v := v.(*ProxyProtocol_Grpc); i { case 0: return &v.state case 1: @@ -2076,6 +2329,18 @@ func file_inbound_proto_init() { } } file_inbound_proto_msgTypes[16].Exporter = func(v any, i int) any { + switch v := v.(*ProxyProtocol_Opaque); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_inbound_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*ProxyProtocol_Tls); i { case 0: return &v.state @@ -2087,7 +2352,7 @@ func file_inbound_proto_init() { return nil } } - file_inbound_proto_msgTypes[18].Exporter = func(v any, i int) any { + file_inbound_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*Authn_PermitUnauthenticated); i { case 0: return &v.state @@ -2099,7 +2364,7 @@ func file_inbound_proto_init() { return nil } } - file_inbound_proto_msgTypes[19].Exporter = func(v any, i int) any { + file_inbound_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*Authn_PermitMeshTLS); i { case 0: return &v.state @@ -2111,7 +2376,7 @@ func file_inbound_proto_init() { return nil } } - file_inbound_proto_msgTypes[20].Exporter = func(v any, i int) any { + file_inbound_proto_msgTypes[21].Exporter = func(v any, i int) any { switch v := v.(*Authn_PermitMeshTLS_PermitClientIdentities); i { case 0: return &v.state @@ -2123,7 +2388,7 @@ func file_inbound_proto_init() { return nil } } - file_inbound_proto_msgTypes[21].Exporter = func(v any, i int) any { + file_inbound_proto_msgTypes[22].Exporter = func(v any, i int) any { switch v := v.(*HttpRoute_Rule); i { case 0: return &v.state @@ -2135,7 +2400,7 @@ func file_inbound_proto_init() { return nil } } - file_inbound_proto_msgTypes[22].Exporter = func(v any, i int) any { + file_inbound_proto_msgTypes[23].Exporter = func(v any, i int) any { switch v := v.(*HttpRoute_Filter); i { case 0: return &v.state @@ -2147,7 +2412,7 @@ func file_inbound_proto_init() { return nil } } - file_inbound_proto_msgTypes[23].Exporter = func(v any, i int) any { + file_inbound_proto_msgTypes[24].Exporter = func(v any, i int) any { switch v := v.(*GrpcRoute_Rule); i { case 0: return &v.state @@ -2159,7 +2424,7 @@ func file_inbound_proto_init() { return nil } } - file_inbound_proto_msgTypes[24].Exporter = func(v any, i int) any { + file_inbound_proto_msgTypes[25].Exporter = func(v any, i int) any { switch v := v.(*GrpcRoute_Filter); i { case 0: return &v.state @@ -2171,6 +2436,30 @@ func file_inbound_proto_init() { return nil } } + file_inbound_proto_msgTypes[26].Exporter = func(v any, i int) any { + switch v := v.(*HttpLocalRateLimit_Override); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_inbound_proto_msgTypes[27].Exporter = func(v any, i int) any { + switch v := v.(*HttpLocalRateLimit_Limit); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_inbound_proto_msgTypes[2].OneofWrappers = []any{ (*ProxyProtocol_Detect_)(nil), @@ -2184,16 +2473,16 @@ func file_inbound_proto_init() { (*Authn_Unauthenticated)(nil), (*Authn_MeshTLS)(nil), } - file_inbound_proto_msgTypes[19].OneofWrappers = []any{ + file_inbound_proto_msgTypes[20].OneofWrappers = []any{ (*Authn_PermitMeshTLS_Unauthenticated)(nil), (*Authn_PermitMeshTLS_Identities)(nil), } - file_inbound_proto_msgTypes[22].OneofWrappers = []any{ + file_inbound_proto_msgTypes[23].OneofWrappers = []any{ (*HttpRoute_Filter_FailureInjector)(nil), (*HttpRoute_Filter_RequestHeaderModifier)(nil), (*HttpRoute_Filter_Redirect)(nil), } - file_inbound_proto_msgTypes[24].OneofWrappers = []any{ + file_inbound_proto_msgTypes[25].OneofWrappers = []any{ (*GrpcRoute_Filter_FailureInjector)(nil), (*GrpcRoute_Filter_RequestHeaderModifier)(nil), } @@ -2203,7 +2492,7 @@ func file_inbound_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_inbound_proto_rawDesc, NumEnums: 0, - NumMessages: 25, + NumMessages: 28, NumExtensions: 0, NumServices: 1, }, diff --git a/go/inbound/inbound_grpc.pb.go b/go/inbound/inbound_grpc.pb.go index 13b921df4..ab9f74313 100644 --- a/go/inbound/inbound_grpc.pb.go +++ b/go/inbound/inbound_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.4.0 -// - protoc v3.12.4 +// - protoc v3.20.3 // source: inbound.proto package inbound diff --git a/go/meta/meta.pb.go b/go/meta/meta.pb.go index f21a94717..f48a320ef 100644 --- a/go/meta/meta.pb.go +++ b/go/meta/meta.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.34.2 -// protoc v3.12.4 +// protoc v3.20.3 // source: meta.proto package meta diff --git a/go/net/net.pb.go b/go/net/net.pb.go index fca360db3..e0b669f3e 100644 --- a/go/net/net.pb.go +++ b/go/net/net.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.34.2 -// protoc v3.12.4 +// protoc v3.20.3 // source: net.proto package net diff --git a/go/outbound/outbound.pb.go b/go/outbound/outbound.pb.go index 3a27acb47..695786ec8 100644 --- a/go/outbound/outbound.pb.go +++ b/go/outbound/outbound.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.34.2 -// protoc v3.12.4 +// protoc v3.20.3 // source: outbound.proto package outbound diff --git a/go/outbound/outbound_grpc.pb.go b/go/outbound/outbound_grpc.pb.go index 05483a2fb..58c89312f 100644 --- a/go/outbound/outbound_grpc.pb.go +++ b/go/outbound/outbound_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.4.0 -// - protoc v3.12.4 +// - protoc v3.20.3 // source: outbound.proto package outbound diff --git a/go/tap/tap.pb.go b/go/tap/tap.pb.go index 1be3e369f..faf4f8964 100644 --- a/go/tap/tap.pb.go +++ b/go/tap/tap.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.34.2 -// protoc v3.12.4 +// protoc v3.20.3 // source: tap.proto package tap diff --git a/go/tap/tap_grpc.pb.go b/go/tap/tap_grpc.pb.go index 86c281175..a0850a14b 100644 --- a/go/tap/tap_grpc.pb.go +++ b/go/tap/tap_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.4.0 -// - protoc v3.12.4 +// - protoc v3.20.3 // source: tap.proto package tap diff --git a/go/tls_route/tls_route.pb.go b/go/tls_route/tls_route.pb.go index 80663dd89..404549bc6 100644 --- a/go/tls_route/tls_route.pb.go +++ b/go/tls_route/tls_route.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.34.2 -// protoc v3.12.4 +// protoc v3.20.3 // source: tls_route.proto package tls_route diff --git a/proto/inbound.proto b/proto/inbound.proto index afde04301..7135be4c7 100644 --- a/proto/inbound.proto +++ b/proto/inbound.proto @@ -71,6 +71,9 @@ message ProxyProtocol { // matched. repeated HttpRoute http_routes = 3; + // If the protocol detected as HTTP, applicable rate limit. + HttpLocalRateLimit local_rate_limit = 4; + // Never implemented. reserved 2; } @@ -78,6 +81,8 @@ message ProxyProtocol { message Http1 { repeated HttpRoute routes = 2; + HttpLocalRateLimit local_rate_limit = 3; + // Never implemented. reserved 1; } @@ -85,6 +90,8 @@ message ProxyProtocol { message Http2 { repeated HttpRoute routes = 2; + HttpLocalRateLimit local_rate_limit = 3; + // Never implemented. reserved 1; } @@ -233,3 +240,27 @@ message GrpcRoute { } } } + +message HttpLocalRateLimit { + // Overall rate-limit, which all traffic coming to this server should abide + // to. If unset no overall limit is applied. + Limit total = 1; + + // Fairness for individual identities; each separate source, grouped by + // identity, will have this rate-limit. + Limit identity = 2; + + // Limit overrides for traffic from a specific sources. + repeated Override overrides = 3; + + // TargetRefs for traffic sources. Only ServiceAccounts supported for now. + repeated io.linkerd.proxy.meta.Metadata targets = 4; + + message Override { + Limit limit = 1; + } + + message Limit { + uint64 requestsPerSecond = 1; + } +} diff --git a/src/gen/io.linkerd.proxy.inbound.rs b/src/gen/io.linkerd.proxy.inbound.rs index 312ab3de8..f47ad4d7b 100644 --- a/src/gen/io.linkerd.proxy.inbound.rs +++ b/src/gen/io.linkerd.proxy.inbound.rs @@ -51,18 +51,25 @@ pub mod proxy_protocol { /// matched. #[prost(message, repeated, tag = "3")] pub http_routes: ::prost::alloc::vec::Vec, + /// If the protocol detected as HTTP, applicable rate limit. + #[prost(message, optional, tag = "4")] + pub local_rate_limit: ::core::option::Option, } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Http1 { #[prost(message, repeated, tag = "2")] pub routes: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag = "3")] + pub local_rate_limit: ::core::option::Option, } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Http2 { #[prost(message, repeated, tag = "2")] pub routes: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag = "3")] + pub local_rate_limit: ::core::option::Option, } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] @@ -300,6 +307,39 @@ pub mod grpc_route { } } } +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct HttpLocalRateLimit { + /// Overall rate-limit, which all traffic coming to this server should abide + /// to. If unset no overall limit is applied. + #[prost(message, optional, tag = "1")] + pub total: ::core::option::Option, + /// Fairness for individual identities; each separate source, grouped by + /// identity, will have this rate-limit. + #[prost(message, optional, tag = "2")] + pub identity: ::core::option::Option, + /// Limit overrides for traffic from a specific sources. + #[prost(message, repeated, tag = "3")] + pub overrides: ::prost::alloc::vec::Vec, + /// TargetRefs for traffic sources. Only ServiceAccounts supported for now. + #[prost(message, repeated, tag = "4")] + pub targets: ::prost::alloc::vec::Vec, +} +/// Nested message and enum types in `HttpLocalRateLimit`. +pub mod http_local_rate_limit { + #[allow(clippy::derive_partial_eq_without_eq)] + #[derive(Clone, PartialEq, ::prost::Message)] + pub struct Override { + #[prost(message, optional, tag = "1")] + pub limit: ::core::option::Option, + } + #[allow(clippy::derive_partial_eq_without_eq)] + #[derive(Clone, PartialEq, ::prost::Message)] + pub struct Limit { + #[prost(uint64, tag = "1")] + pub requests_per_second: u64, + } +} /// Generated client implementations. pub mod inbound_server_policies_client { #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]