diff --git a/cmd/ris/api/ris.pb.go b/cmd/ris/api/ris.pb.go index f8fc098c..ff2b451b 100644 --- a/cmd/ris/api/ris.pb.go +++ b/cmd/ris/api/ris.pb.go @@ -65,7 +65,7 @@ func (x ObserveRIBRequest_AFISAFI) Number() protoreflect.EnumNumber { // Deprecated: Use ObserveRIBRequest_AFISAFI.Descriptor instead. func (ObserveRIBRequest_AFISAFI) EnumDescriptor() ([]byte, []int) { - return file_cmd_ris_api_ris_proto_rawDescGZIP(), []int{6, 0} + return file_cmd_ris_api_ris_proto_rawDescGZIP(), []int{7, 0} } type DumpRIBRequest_AFISAFI int32 @@ -111,7 +111,7 @@ func (x DumpRIBRequest_AFISAFI) Number() protoreflect.EnumNumber { // Deprecated: Use DumpRIBRequest_AFISAFI.Descriptor instead. func (DumpRIBRequest_AFISAFI) EnumDescriptor() ([]byte, []int) { - return file_cmd_ris_api_ris_proto_rawDescGZIP(), []int{9, 0} + return file_cmd_ris_api_ris_proto_rawDescGZIP(), []int{10, 0} } type LPMRequest struct { @@ -468,6 +468,69 @@ func (x *GetLongerResponse) GetRoutes() []*api1.Route { return nil } +type ObserveRIBOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MaxPaths uint32 `protobuf:"varint,1,opt,name=MaxPaths,proto3" json:"MaxPaths,omitempty"` // maximum number of paths to send per route, only used when both EcmpOnly and BestOnly are both false + EcmpOnly bool `protobuf:"varint,2,opt,name=EcmpOnly,proto3" json:"EcmpOnly,omitempty"` // should we only send equal cost paths (ignoring MaxPaths) ? Only applies if BestOnly is false. + BestOnly bool `protobuf:"varint,3,opt,name=BestOnly,proto3" json:"BestOnly,omitempty"` // should we only send the best path for each route ? Take precedence over EcmpOnly. +} + +func (x *ObserveRIBOptions) Reset() { + *x = ObserveRIBOptions{} + if protoimpl.UnsafeEnabled { + mi := &file_cmd_ris_api_ris_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ObserveRIBOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ObserveRIBOptions) ProtoMessage() {} + +func (x *ObserveRIBOptions) ProtoReflect() protoreflect.Message { + mi := &file_cmd_ris_api_ris_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ObserveRIBOptions.ProtoReflect.Descriptor instead. +func (*ObserveRIBOptions) Descriptor() ([]byte, []int) { + return file_cmd_ris_api_ris_proto_rawDescGZIP(), []int{6} +} + +func (x *ObserveRIBOptions) GetMaxPaths() uint32 { + if x != nil { + return x.MaxPaths + } + return 0 +} + +func (x *ObserveRIBOptions) GetEcmpOnly() bool { + if x != nil { + return x.EcmpOnly + } + return false +} + +func (x *ObserveRIBOptions) GetBestOnly() bool { + if x != nil { + return x.BestOnly + } + return false +} + type ObserveRIBRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -478,12 +541,13 @@ type ObserveRIBRequest struct { Vrf string `protobuf:"bytes,4,opt,name=vrf,proto3" json:"vrf,omitempty"` Afisafi ObserveRIBRequest_AFISAFI `protobuf:"varint,3,opt,name=afisafi,proto3,enum=bio.ris.ObserveRIBRequest_AFISAFI" json:"afisafi,omitempty"` AllowUnreadyRib bool `protobuf:"varint,5,opt,name=allow_unready_rib,json=allowUnreadyRib,proto3" json:"allow_unready_rib,omitempty"` + ObserveOptions *ObserveRIBOptions `protobuf:"bytes,6,opt,name=observe_options,json=observeOptions,proto3,oneof" json:"observe_options,omitempty"` // additional options for the observe request } func (x *ObserveRIBRequest) Reset() { *x = ObserveRIBRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cmd_ris_api_ris_proto_msgTypes[6] + mi := &file_cmd_ris_api_ris_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -496,7 +560,7 @@ func (x *ObserveRIBRequest) String() string { func (*ObserveRIBRequest) ProtoMessage() {} func (x *ObserveRIBRequest) ProtoReflect() protoreflect.Message { - mi := &file_cmd_ris_api_ris_proto_msgTypes[6] + mi := &file_cmd_ris_api_ris_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -509,7 +573,7 @@ func (x *ObserveRIBRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ObserveRIBRequest.ProtoReflect.Descriptor instead. func (*ObserveRIBRequest) Descriptor() ([]byte, []int) { - return file_cmd_ris_api_ris_proto_rawDescGZIP(), []int{6} + return file_cmd_ris_api_ris_proto_rawDescGZIP(), []int{7} } func (x *ObserveRIBRequest) GetRouter() string { @@ -547,6 +611,13 @@ func (x *ObserveRIBRequest) GetAllowUnreadyRib() bool { return false } +func (x *ObserveRIBRequest) GetObserveOptions() *ObserveRIBOptions { + if x != nil { + return x.ObserveOptions + } + return nil +} + type RIBFilter struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -560,7 +631,7 @@ type RIBFilter struct { func (x *RIBFilter) Reset() { *x = RIBFilter{} if protoimpl.UnsafeEnabled { - mi := &file_cmd_ris_api_ris_proto_msgTypes[7] + mi := &file_cmd_ris_api_ris_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -573,7 +644,7 @@ func (x *RIBFilter) String() string { func (*RIBFilter) ProtoMessage() {} func (x *RIBFilter) ProtoReflect() protoreflect.Message { - mi := &file_cmd_ris_api_ris_proto_msgTypes[7] + mi := &file_cmd_ris_api_ris_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -586,7 +657,7 @@ func (x *RIBFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use RIBFilter.ProtoReflect.Descriptor instead. func (*RIBFilter) Descriptor() ([]byte, []int) { - return file_cmd_ris_api_ris_proto_rawDescGZIP(), []int{7} + return file_cmd_ris_api_ris_proto_rawDescGZIP(), []int{8} } func (x *RIBFilter) GetOriginatingAsn() uint32 { @@ -624,7 +695,7 @@ type RIBUpdate struct { func (x *RIBUpdate) Reset() { *x = RIBUpdate{} if protoimpl.UnsafeEnabled { - mi := &file_cmd_ris_api_ris_proto_msgTypes[8] + mi := &file_cmd_ris_api_ris_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -637,7 +708,7 @@ func (x *RIBUpdate) String() string { func (*RIBUpdate) ProtoMessage() {} func (x *RIBUpdate) ProtoReflect() protoreflect.Message { - mi := &file_cmd_ris_api_ris_proto_msgTypes[8] + mi := &file_cmd_ris_api_ris_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -650,7 +721,7 @@ func (x *RIBUpdate) ProtoReflect() protoreflect.Message { // Deprecated: Use RIBUpdate.ProtoReflect.Descriptor instead. func (*RIBUpdate) Descriptor() ([]byte, []int) { - return file_cmd_ris_api_ris_proto_rawDescGZIP(), []int{8} + return file_cmd_ris_api_ris_proto_rawDescGZIP(), []int{9} } func (x *RIBUpdate) GetAdvertisement() bool { @@ -696,7 +767,7 @@ type DumpRIBRequest struct { func (x *DumpRIBRequest) Reset() { *x = DumpRIBRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cmd_ris_api_ris_proto_msgTypes[9] + mi := &file_cmd_ris_api_ris_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -709,7 +780,7 @@ func (x *DumpRIBRequest) String() string { func (*DumpRIBRequest) ProtoMessage() {} func (x *DumpRIBRequest) ProtoReflect() protoreflect.Message { - mi := &file_cmd_ris_api_ris_proto_msgTypes[9] + mi := &file_cmd_ris_api_ris_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -722,7 +793,7 @@ func (x *DumpRIBRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DumpRIBRequest.ProtoReflect.Descriptor instead. func (*DumpRIBRequest) Descriptor() ([]byte, []int) { - return file_cmd_ris_api_ris_proto_rawDescGZIP(), []int{9} + return file_cmd_ris_api_ris_proto_rawDescGZIP(), []int{10} } func (x *DumpRIBRequest) GetRouter() string { @@ -771,7 +842,7 @@ type DumpRIBReply struct { func (x *DumpRIBReply) Reset() { *x = DumpRIBReply{} if protoimpl.UnsafeEnabled { - mi := &file_cmd_ris_api_ris_proto_msgTypes[10] + mi := &file_cmd_ris_api_ris_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -784,7 +855,7 @@ func (x *DumpRIBReply) String() string { func (*DumpRIBReply) ProtoMessage() {} func (x *DumpRIBReply) ProtoReflect() protoreflect.Message { - mi := &file_cmd_ris_api_ris_proto_msgTypes[10] + mi := &file_cmd_ris_api_ris_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -797,7 +868,7 @@ func (x *DumpRIBReply) ProtoReflect() protoreflect.Message { // Deprecated: Use DumpRIBReply.ProtoReflect.Descriptor instead. func (*DumpRIBReply) Descriptor() ([]byte, []int) { - return file_cmd_ris_api_ris_proto_rawDescGZIP(), []int{10} + return file_cmd_ris_api_ris_proto_rawDescGZIP(), []int{11} } func (x *DumpRIBReply) GetRoute() *api1.Route { @@ -816,7 +887,7 @@ type GetRoutersRequest struct { func (x *GetRoutersRequest) Reset() { *x = GetRoutersRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cmd_ris_api_ris_proto_msgTypes[11] + mi := &file_cmd_ris_api_ris_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -829,7 +900,7 @@ func (x *GetRoutersRequest) String() string { func (*GetRoutersRequest) ProtoMessage() {} func (x *GetRoutersRequest) ProtoReflect() protoreflect.Message { - mi := &file_cmd_ris_api_ris_proto_msgTypes[11] + mi := &file_cmd_ris_api_ris_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -842,7 +913,7 @@ func (x *GetRoutersRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRoutersRequest.ProtoReflect.Descriptor instead. func (*GetRoutersRequest) Descriptor() ([]byte, []int) { - return file_cmd_ris_api_ris_proto_rawDescGZIP(), []int{11} + return file_cmd_ris_api_ris_proto_rawDescGZIP(), []int{12} } type Router struct { @@ -858,7 +929,7 @@ type Router struct { func (x *Router) Reset() { *x = Router{} if protoimpl.UnsafeEnabled { - mi := &file_cmd_ris_api_ris_proto_msgTypes[12] + mi := &file_cmd_ris_api_ris_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -871,7 +942,7 @@ func (x *Router) String() string { func (*Router) ProtoMessage() {} func (x *Router) ProtoReflect() protoreflect.Message { - mi := &file_cmd_ris_api_ris_proto_msgTypes[12] + mi := &file_cmd_ris_api_ris_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -884,7 +955,7 @@ func (x *Router) ProtoReflect() protoreflect.Message { // Deprecated: Use Router.ProtoReflect.Descriptor instead. func (*Router) Descriptor() ([]byte, []int) { - return file_cmd_ris_api_ris_proto_rawDescGZIP(), []int{12} + return file_cmd_ris_api_ris_proto_rawDescGZIP(), []int{13} } func (x *Router) GetSysName() string { @@ -919,7 +990,7 @@ type GetRoutersResponse struct { func (x *GetRoutersResponse) Reset() { *x = GetRoutersResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cmd_ris_api_ris_proto_msgTypes[13] + mi := &file_cmd_ris_api_ris_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -932,7 +1003,7 @@ func (x *GetRoutersResponse) String() string { func (*GetRoutersResponse) ProtoMessage() {} func (x *GetRoutersResponse) ProtoReflect() protoreflect.Message { - mi := &file_cmd_ris_api_ris_proto_msgTypes[13] + mi := &file_cmd_ris_api_ris_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -945,7 +1016,7 @@ func (x *GetRoutersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRoutersResponse.ProtoReflect.Descriptor instead. func (*GetRoutersResponse) Descriptor() ([]byte, []int) { - return file_cmd_ris_api_ris_proto_rawDescGZIP(), []int{13} + return file_cmd_ris_api_ris_proto_rawDescGZIP(), []int{14} } func (x *GetRoutersResponse) GetRouters() []*Router { @@ -995,96 +1066,109 @@ var file_cmd_ris_api_ris_proto_rawDesc = []byte{ 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, - 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x22, 0xeb, 0x01, 0x0a, 0x11, 0x4f, 0x62, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x52, 0x49, 0x42, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, - 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, - 0x6f, 0x75, 0x74, 0x65, 0x72, 0x12, 0x15, 0x0a, 0x06, 0x76, 0x72, 0x66, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x72, 0x66, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, - 0x76, 0x72, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x76, 0x72, 0x66, 0x12, 0x3c, - 0x0a, 0x07, 0x61, 0x66, 0x69, 0x73, 0x61, 0x66, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x22, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x69, 0x73, 0x2e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x52, 0x49, 0x42, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x46, 0x49, 0x53, - 0x41, 0x46, 0x49, 0x52, 0x07, 0x61, 0x66, 0x69, 0x73, 0x61, 0x66, 0x69, 0x12, 0x2a, 0x0a, 0x11, - 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5f, 0x72, 0x69, - 0x62, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x55, 0x6e, - 0x72, 0x65, 0x61, 0x64, 0x79, 0x52, 0x69, 0x62, 0x22, 0x2b, 0x0a, 0x07, 0x41, 0x46, 0x49, 0x53, - 0x41, 0x46, 0x49, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x50, 0x76, 0x34, 0x55, 0x6e, 0x69, 0x63, 0x61, - 0x73, 0x74, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x50, 0x76, 0x36, 0x55, 0x6e, 0x69, 0x63, - 0x61, 0x73, 0x74, 0x10, 0x01, 0x22, 0x72, 0x0a, 0x09, 0x52, 0x49, 0x42, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6e, - 0x67, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x73, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, - 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x09, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, - 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, - 0x6d, 0x61, 0x78, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x9f, 0x01, 0x0a, 0x09, 0x52, 0x49, - 0x42, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x64, 0x76, 0x65, 0x72, - 0x74, 0x69, 0x73, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, - 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x26, 0x0a, - 0x0f, 0x69, 0x73, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x64, 0x75, 0x6d, 0x70, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x73, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, - 0x6c, 0x44, 0x75, 0x6d, 0x70, 0x12, 0x1c, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x5f, 0x6f, 0x66, 0x5f, - 0x72, 0x69, 0x62, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x4f, 0x66, - 0x52, 0x69, 0x62, 0x12, 0x26, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x52, - 0x6f, 0x75, 0x74, 0x65, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x22, 0xe5, 0x01, 0x0a, 0x0e, - 0x44, 0x75, 0x6d, 0x70, 0x52, 0x49, 0x42, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, - 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x12, 0x15, 0x0a, 0x06, 0x76, 0x72, 0x66, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x72, 0x66, 0x49, 0x64, 0x12, 0x10, 0x0a, - 0x03, 0x76, 0x72, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x76, 0x72, 0x66, 0x12, - 0x39, 0x0a, 0x07, 0x61, 0x66, 0x69, 0x73, 0x61, 0x66, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x1f, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x69, 0x73, 0x2e, 0x44, 0x75, 0x6d, 0x70, 0x52, - 0x49, 0x42, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x46, 0x49, 0x53, 0x41, 0x46, - 0x49, 0x52, 0x07, 0x61, 0x66, 0x69, 0x73, 0x61, 0x66, 0x69, 0x12, 0x2a, 0x0a, 0x06, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x62, 0x69, 0x6f, - 0x2e, 0x72, 0x69, 0x73, 0x2e, 0x52, 0x49, 0x42, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x2b, 0x0a, 0x07, 0x41, 0x46, 0x49, 0x53, 0x41, 0x46, - 0x49, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x50, 0x76, 0x34, 0x55, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, - 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x50, 0x76, 0x36, 0x55, 0x6e, 0x69, 0x63, 0x61, 0x73, - 0x74, 0x10, 0x01, 0x22, 0x36, 0x0a, 0x0c, 0x44, 0x75, 0x6d, 0x70, 0x52, 0x49, 0x42, 0x52, 0x65, - 0x70, 0x6c, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x52, - 0x6f, 0x75, 0x74, 0x65, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x22, 0x13, 0x0a, 0x11, 0x47, + 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x22, 0x67, 0x0a, 0x11, 0x4f, 0x62, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x52, 0x49, 0x42, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, + 0x4d, 0x61, 0x78, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, + 0x4d, 0x61, 0x78, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x45, 0x63, 0x6d, 0x70, + 0x4f, 0x6e, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x45, 0x63, 0x6d, 0x70, + 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x42, 0x65, 0x73, 0x74, 0x4f, 0x6e, 0x6c, 0x79, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x42, 0x65, 0x73, 0x74, 0x4f, 0x6e, 0x6c, 0x79, + 0x22, 0xc9, 0x02, 0x0a, 0x11, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x52, 0x49, 0x42, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x12, 0x15, + 0x0a, 0x06, 0x76, 0x72, 0x66, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, + 0x76, 0x72, 0x66, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x72, 0x66, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x76, 0x72, 0x66, 0x12, 0x3c, 0x0a, 0x07, 0x61, 0x66, 0x69, 0x73, 0x61, + 0x66, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, + 0x69, 0x73, 0x2e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x52, 0x49, 0x42, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x46, 0x49, 0x53, 0x41, 0x46, 0x49, 0x52, 0x07, 0x61, 0x66, + 0x69, 0x73, 0x61, 0x66, 0x69, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x75, + 0x6e, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5f, 0x72, 0x69, 0x62, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x79, 0x52, 0x69, + 0x62, 0x12, 0x48, 0x0a, 0x0f, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x69, 0x6f, + 0x2e, 0x72, 0x69, 0x73, 0x2e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x52, 0x49, 0x42, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0e, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x22, 0x2b, 0x0a, 0x07, 0x41, + 0x46, 0x49, 0x53, 0x41, 0x46, 0x49, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x50, 0x76, 0x34, 0x55, 0x6e, + 0x69, 0x63, 0x61, 0x73, 0x74, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x50, 0x76, 0x36, 0x55, + 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x10, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x6f, 0x62, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x72, 0x0a, 0x09, + 0x52, 0x49, 0x42, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x72, 0x69, + 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x73, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0e, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x41, + 0x73, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x22, 0x9f, 0x01, 0x0a, 0x09, 0x52, 0x49, 0x42, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x24, + 0x0a, 0x0d, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x73, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x69, + 0x61, 0x6c, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, + 0x73, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x44, 0x75, 0x6d, 0x70, 0x12, 0x1c, 0x0a, 0x0a, + 0x65, 0x6e, 0x64, 0x5f, 0x6f, 0x66, 0x5f, 0x72, 0x69, 0x62, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x65, 0x6e, 0x64, 0x4f, 0x66, 0x52, 0x69, 0x62, 0x12, 0x26, 0x0a, 0x05, 0x72, 0x6f, + 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x62, 0x69, 0x6f, 0x2e, + 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x05, 0x72, 0x6f, 0x75, + 0x74, 0x65, 0x22, 0xe5, 0x01, 0x0a, 0x0e, 0x44, 0x75, 0x6d, 0x70, 0x52, 0x49, 0x42, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x12, 0x15, 0x0a, + 0x06, 0x76, 0x72, 0x66, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, + 0x72, 0x66, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x72, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x76, 0x72, 0x66, 0x12, 0x39, 0x0a, 0x07, 0x61, 0x66, 0x69, 0x73, 0x61, 0x66, + 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x69, + 0x73, 0x2e, 0x44, 0x75, 0x6d, 0x70, 0x52, 0x49, 0x42, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x41, 0x46, 0x49, 0x53, 0x41, 0x46, 0x49, 0x52, 0x07, 0x61, 0x66, 0x69, 0x73, 0x61, 0x66, + 0x69, 0x12, 0x2a, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x69, 0x73, 0x2e, 0x52, 0x49, 0x42, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x2b, 0x0a, + 0x07, 0x41, 0x46, 0x49, 0x53, 0x41, 0x46, 0x49, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x50, 0x76, 0x34, + 0x55, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x50, 0x76, + 0x36, 0x55, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x10, 0x01, 0x22, 0x36, 0x0a, 0x0c, 0x44, 0x75, + 0x6d, 0x70, 0x52, 0x49, 0x42, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x72, 0x6f, + 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x62, 0x69, 0x6f, 0x2e, + 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x05, 0x72, 0x6f, 0x75, + 0x74, 0x65, 0x22, 0x13, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x56, 0x0a, 0x06, 0x52, 0x6f, 0x75, 0x74, 0x65, + 0x72, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x79, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x79, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, + 0x76, 0x72, 0x66, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x04, 0x52, 0x06, 0x76, + 0x72, 0x66, 0x49, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, + 0x3f, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x69, 0x73, + 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x52, 0x07, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x73, + 0x32, 0x8f, 0x03, 0x0a, 0x19, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x32, + 0x0a, 0x03, 0x4c, 0x50, 0x4d, 0x12, 0x13, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x69, 0x73, 0x2e, + 0x4c, 0x50, 0x4d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x62, 0x69, 0x6f, + 0x2e, 0x72, 0x69, 0x73, 0x2e, 0x4c, 0x50, 0x4d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x32, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x13, 0x2e, 0x62, 0x69, 0x6f, 0x2e, + 0x72, 0x69, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, + 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x69, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, + 0x74, 0x65, 0x72, 0x73, 0x12, 0x1a, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x69, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x56, 0x0a, 0x06, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x79, - 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x79, - 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x76, 0x72, 0x66, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x04, 0x52, 0x06, 0x76, 0x72, 0x66, 0x49, 0x64, 0x73, 0x12, 0x18, - 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x3f, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x52, - 0x6f, 0x75, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, - 0x0a, 0x07, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x69, 0x73, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, - 0x52, 0x07, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x73, 0x32, 0x8f, 0x03, 0x0a, 0x19, 0x52, 0x6f, - 0x75, 0x74, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x03, 0x4c, 0x50, 0x4d, 0x12, 0x13, - 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x69, 0x73, 0x2e, 0x4c, 0x50, 0x4d, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x69, 0x73, 0x2e, 0x4c, 0x50, - 0x4d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x32, 0x0a, 0x03, 0x47, - 0x65, 0x74, 0x12, 0x13, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x69, 0x73, 0x2e, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x69, - 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x47, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1a, 0x2e, - 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x69, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, - 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x62, 0x69, 0x6f, 0x2e, - 0x72, 0x69, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4c, - 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x12, 0x19, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x69, 0x73, 0x2e, - 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1a, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x69, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, - 0x6e, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, - 0x0a, 0x0a, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x52, 0x49, 0x42, 0x12, 0x1a, 0x2e, 0x62, - 0x69, 0x6f, 0x2e, 0x72, 0x69, 0x73, 0x2e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x52, 0x49, - 0x42, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, - 0x69, 0x73, 0x2e, 0x52, 0x49, 0x42, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x30, 0x01, 0x12, 0x3b, - 0x0a, 0x07, 0x44, 0x75, 0x6d, 0x70, 0x52, 0x49, 0x42, 0x12, 0x17, 0x2e, 0x62, 0x69, 0x6f, 0x2e, - 0x72, 0x69, 0x73, 0x2e, 0x44, 0x75, 0x6d, 0x70, 0x52, 0x49, 0x42, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x69, 0x73, 0x2e, 0x44, 0x75, 0x6d, - 0x70, 0x52, 0x49, 0x42, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x30, 0x01, 0x42, 0x2b, 0x5a, 0x29, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x69, 0x6f, 0x2d, 0x72, 0x6f, - 0x75, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x69, 0x6f, 0x2d, 0x72, 0x64, 0x2f, 0x63, 0x6d, 0x64, - 0x2f, 0x72, 0x69, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x1a, 0x1b, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x69, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, + 0x75, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x44, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x12, 0x19, 0x2e, 0x62, + 0x69, 0x6f, 0x2e, 0x72, 0x69, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x6e, 0x67, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x69, + 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0a, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x52, 0x49, 0x42, 0x12, 0x1a, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x69, 0x73, 0x2e, 0x4f, 0x62, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x52, 0x49, 0x42, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x12, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x69, 0x73, 0x2e, 0x52, 0x49, 0x42, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x30, 0x01, 0x12, 0x3b, 0x0a, 0x07, 0x44, 0x75, 0x6d, 0x70, 0x52, 0x49, 0x42, + 0x12, 0x17, 0x2e, 0x62, 0x69, 0x6f, 0x2e, 0x72, 0x69, 0x73, 0x2e, 0x44, 0x75, 0x6d, 0x70, 0x52, + 0x49, 0x42, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x62, 0x69, 0x6f, 0x2e, + 0x72, 0x69, 0x73, 0x2e, 0x44, 0x75, 0x6d, 0x70, 0x52, 0x49, 0x42, 0x52, 0x65, 0x70, 0x6c, 0x79, + 0x30, 0x01, 0x42, 0x2b, 0x5a, 0x29, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x62, 0x69, 0x6f, 0x2d, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x69, 0x6f, + 0x2d, 0x72, 0x64, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x72, 0x69, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1100,7 +1184,7 @@ func file_cmd_ris_api_ris_proto_rawDescGZIP() []byte { } var file_cmd_ris_api_ris_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_cmd_ris_api_ris_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_cmd_ris_api_ris_proto_msgTypes = make([]protoimpl.MessageInfo, 15) var file_cmd_ris_api_ris_proto_goTypes = []interface{}{ (ObserveRIBRequest_AFISAFI)(0), // 0: bio.ris.ObserveRIBRequest.AFISAFI (DumpRIBRequest_AFISAFI)(0), // 1: bio.ris.DumpRIBRequest.AFISAFI @@ -1110,47 +1194,49 @@ var file_cmd_ris_api_ris_proto_goTypes = []interface{}{ (*GetResponse)(nil), // 5: bio.ris.GetResponse (*GetLongerRequest)(nil), // 6: bio.ris.GetLongerRequest (*GetLongerResponse)(nil), // 7: bio.ris.GetLongerResponse - (*ObserveRIBRequest)(nil), // 8: bio.ris.ObserveRIBRequest - (*RIBFilter)(nil), // 9: bio.ris.RIBFilter - (*RIBUpdate)(nil), // 10: bio.ris.RIBUpdate - (*DumpRIBRequest)(nil), // 11: bio.ris.DumpRIBRequest - (*DumpRIBReply)(nil), // 12: bio.ris.DumpRIBReply - (*GetRoutersRequest)(nil), // 13: bio.ris.GetRoutersRequest - (*Router)(nil), // 14: bio.ris.Router - (*GetRoutersResponse)(nil), // 15: bio.ris.GetRoutersResponse - (*api.Prefix)(nil), // 16: bio.net.Prefix - (*api1.Route)(nil), // 17: bio.route.Route + (*ObserveRIBOptions)(nil), // 8: bio.ris.ObserveRIBOptions + (*ObserveRIBRequest)(nil), // 9: bio.ris.ObserveRIBRequest + (*RIBFilter)(nil), // 10: bio.ris.RIBFilter + (*RIBUpdate)(nil), // 11: bio.ris.RIBUpdate + (*DumpRIBRequest)(nil), // 12: bio.ris.DumpRIBRequest + (*DumpRIBReply)(nil), // 13: bio.ris.DumpRIBReply + (*GetRoutersRequest)(nil), // 14: bio.ris.GetRoutersRequest + (*Router)(nil), // 15: bio.ris.Router + (*GetRoutersResponse)(nil), // 16: bio.ris.GetRoutersResponse + (*api.Prefix)(nil), // 17: bio.net.Prefix + (*api1.Route)(nil), // 18: bio.route.Route } var file_cmd_ris_api_ris_proto_depIdxs = []int32{ - 16, // 0: bio.ris.LPMRequest.pfx:type_name -> bio.net.Prefix - 17, // 1: bio.ris.LPMResponse.routes:type_name -> bio.route.Route - 16, // 2: bio.ris.GetRequest.pfx:type_name -> bio.net.Prefix - 17, // 3: bio.ris.GetResponse.routes:type_name -> bio.route.Route - 16, // 4: bio.ris.GetLongerRequest.pfx:type_name -> bio.net.Prefix - 17, // 5: bio.ris.GetLongerResponse.routes:type_name -> bio.route.Route + 17, // 0: bio.ris.LPMRequest.pfx:type_name -> bio.net.Prefix + 18, // 1: bio.ris.LPMResponse.routes:type_name -> bio.route.Route + 17, // 2: bio.ris.GetRequest.pfx:type_name -> bio.net.Prefix + 18, // 3: bio.ris.GetResponse.routes:type_name -> bio.route.Route + 17, // 4: bio.ris.GetLongerRequest.pfx:type_name -> bio.net.Prefix + 18, // 5: bio.ris.GetLongerResponse.routes:type_name -> bio.route.Route 0, // 6: bio.ris.ObserveRIBRequest.afisafi:type_name -> bio.ris.ObserveRIBRequest.AFISAFI - 17, // 7: bio.ris.RIBUpdate.route:type_name -> bio.route.Route - 1, // 8: bio.ris.DumpRIBRequest.afisafi:type_name -> bio.ris.DumpRIBRequest.AFISAFI - 9, // 9: bio.ris.DumpRIBRequest.filter:type_name -> bio.ris.RIBFilter - 17, // 10: bio.ris.DumpRIBReply.route:type_name -> bio.route.Route - 14, // 11: bio.ris.GetRoutersResponse.routers:type_name -> bio.ris.Router - 2, // 12: bio.ris.RoutingInformationService.LPM:input_type -> bio.ris.LPMRequest - 4, // 13: bio.ris.RoutingInformationService.Get:input_type -> bio.ris.GetRequest - 13, // 14: bio.ris.RoutingInformationService.GetRouters:input_type -> bio.ris.GetRoutersRequest - 6, // 15: bio.ris.RoutingInformationService.GetLonger:input_type -> bio.ris.GetLongerRequest - 8, // 16: bio.ris.RoutingInformationService.ObserveRIB:input_type -> bio.ris.ObserveRIBRequest - 11, // 17: bio.ris.RoutingInformationService.DumpRIB:input_type -> bio.ris.DumpRIBRequest - 3, // 18: bio.ris.RoutingInformationService.LPM:output_type -> bio.ris.LPMResponse - 5, // 19: bio.ris.RoutingInformationService.Get:output_type -> bio.ris.GetResponse - 15, // 20: bio.ris.RoutingInformationService.GetRouters:output_type -> bio.ris.GetRoutersResponse - 7, // 21: bio.ris.RoutingInformationService.GetLonger:output_type -> bio.ris.GetLongerResponse - 10, // 22: bio.ris.RoutingInformationService.ObserveRIB:output_type -> bio.ris.RIBUpdate - 12, // 23: bio.ris.RoutingInformationService.DumpRIB:output_type -> bio.ris.DumpRIBReply - 18, // [18:24] is the sub-list for method output_type - 12, // [12:18] is the sub-list for method input_type - 12, // [12:12] is the sub-list for extension type_name - 12, // [12:12] is the sub-list for extension extendee - 0, // [0:12] is the sub-list for field type_name + 8, // 7: bio.ris.ObserveRIBRequest.observe_options:type_name -> bio.ris.ObserveRIBOptions + 18, // 8: bio.ris.RIBUpdate.route:type_name -> bio.route.Route + 1, // 9: bio.ris.DumpRIBRequest.afisafi:type_name -> bio.ris.DumpRIBRequest.AFISAFI + 10, // 10: bio.ris.DumpRIBRequest.filter:type_name -> bio.ris.RIBFilter + 18, // 11: bio.ris.DumpRIBReply.route:type_name -> bio.route.Route + 15, // 12: bio.ris.GetRoutersResponse.routers:type_name -> bio.ris.Router + 2, // 13: bio.ris.RoutingInformationService.LPM:input_type -> bio.ris.LPMRequest + 4, // 14: bio.ris.RoutingInformationService.Get:input_type -> bio.ris.GetRequest + 14, // 15: bio.ris.RoutingInformationService.GetRouters:input_type -> bio.ris.GetRoutersRequest + 6, // 16: bio.ris.RoutingInformationService.GetLonger:input_type -> bio.ris.GetLongerRequest + 9, // 17: bio.ris.RoutingInformationService.ObserveRIB:input_type -> bio.ris.ObserveRIBRequest + 12, // 18: bio.ris.RoutingInformationService.DumpRIB:input_type -> bio.ris.DumpRIBRequest + 3, // 19: bio.ris.RoutingInformationService.LPM:output_type -> bio.ris.LPMResponse + 5, // 20: bio.ris.RoutingInformationService.Get:output_type -> bio.ris.GetResponse + 16, // 21: bio.ris.RoutingInformationService.GetRouters:output_type -> bio.ris.GetRoutersResponse + 7, // 22: bio.ris.RoutingInformationService.GetLonger:output_type -> bio.ris.GetLongerResponse + 11, // 23: bio.ris.RoutingInformationService.ObserveRIB:output_type -> bio.ris.RIBUpdate + 13, // 24: bio.ris.RoutingInformationService.DumpRIB:output_type -> bio.ris.DumpRIBReply + 19, // [19:25] is the sub-list for method output_type + 13, // [13:19] is the sub-list for method input_type + 13, // [13:13] is the sub-list for extension type_name + 13, // [13:13] is the sub-list for extension extendee + 0, // [0:13] is the sub-list for field type_name } func init() { file_cmd_ris_api_ris_proto_init() } @@ -1232,7 +1318,7 @@ func file_cmd_ris_api_ris_proto_init() { } } file_cmd_ris_api_ris_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ObserveRIBRequest); i { + switch v := v.(*ObserveRIBOptions); i { case 0: return &v.state case 1: @@ -1244,7 +1330,7 @@ func file_cmd_ris_api_ris_proto_init() { } } file_cmd_ris_api_ris_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RIBFilter); i { + switch v := v.(*ObserveRIBRequest); i { case 0: return &v.state case 1: @@ -1256,7 +1342,7 @@ func file_cmd_ris_api_ris_proto_init() { } } file_cmd_ris_api_ris_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RIBUpdate); i { + switch v := v.(*RIBFilter); i { case 0: return &v.state case 1: @@ -1268,7 +1354,7 @@ func file_cmd_ris_api_ris_proto_init() { } } file_cmd_ris_api_ris_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DumpRIBRequest); i { + switch v := v.(*RIBUpdate); i { case 0: return &v.state case 1: @@ -1280,7 +1366,7 @@ func file_cmd_ris_api_ris_proto_init() { } } file_cmd_ris_api_ris_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DumpRIBReply); i { + switch v := v.(*DumpRIBRequest); i { case 0: return &v.state case 1: @@ -1292,7 +1378,7 @@ func file_cmd_ris_api_ris_proto_init() { } } file_cmd_ris_api_ris_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetRoutersRequest); i { + switch v := v.(*DumpRIBReply); i { case 0: return &v.state case 1: @@ -1304,7 +1390,7 @@ func file_cmd_ris_api_ris_proto_init() { } } file_cmd_ris_api_ris_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Router); i { + switch v := v.(*GetRoutersRequest); i { case 0: return &v.state case 1: @@ -1316,6 +1402,18 @@ func file_cmd_ris_api_ris_proto_init() { } } file_cmd_ris_api_ris_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Router); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cmd_ris_api_ris_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetRoutersResponse); i { case 0: return &v.state @@ -1328,13 +1426,14 @@ func file_cmd_ris_api_ris_proto_init() { } } } + file_cmd_ris_api_ris_proto_msgTypes[7].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cmd_ris_api_ris_proto_rawDesc, NumEnums: 2, - NumMessages: 14, + NumMessages: 15, NumExtensions: 0, NumServices: 1, }, diff --git a/cmd/ris/api/ris.proto b/cmd/ris/api/ris.proto index ee59870f..eba1f7ee 100644 --- a/cmd/ris/api/ris.proto +++ b/cmd/ris/api/ris.proto @@ -48,6 +48,13 @@ message GetLongerResponse { repeated bio.route.Route routes = 1; } + +message ObserveRIBOptions { + uint32 MaxPaths = 1; // maximum number of paths to send per route, only used when both EcmpOnly and BestOnly are both false + bool EcmpOnly = 2; // should we only send equal cost paths (ignoring MaxPaths) ? Only applies if BestOnly is false. + bool BestOnly = 3; // should we only send the best path for each route ? Take precedence over EcmpOnly. +} + message ObserveRIBRequest { string router = 1; uint64 vrf_id = 2; @@ -58,6 +65,7 @@ message ObserveRIBRequest { } AFISAFI afisafi = 3; bool allow_unready_rib = 5; + optional ObserveRIBOptions observe_options = 6; // additional options for the observe request } message RIBFilter { diff --git a/cmd/ris/risserver/server.go b/cmd/ris/risserver/server.go index 45af88a7..0d1d19a4 100644 --- a/cmd/ris/risserver/server.go +++ b/cmd/ris/risserver/server.go @@ -220,9 +220,17 @@ func (s *Server) ObserveRIB(req *pb.ObserveRIBRequest, stream pb.RoutingInformat } }(fifo) - rib.RegisterWithOptions(rc, routingtable.ClientOptions{ + opts := routingtable.ClientOptions{ MaxPaths: 100, - }) + } + if req.ObserveOptions != nil { + if req.ObserveOptions.MaxPaths > 0 { + opts.MaxPaths = uint(req.ObserveOptions.MaxPaths) + } + opts.BestOnly = req.ObserveOptions.BestOnly + opts.EcmpOnly = req.ObserveOptions.EcmpOnly + } + rib.RegisterWithOptions(rc, opts) defer rib.Unregister(rc) select {