From f2ed35357cbf428ced8a50a93237abf8c8033dd0 Mon Sep 17 00:00:00 2001 From: Bill Fenner Date: Tue, 23 Apr 2024 13:20:18 -0700 Subject: [PATCH 1/3] proto updates for PROBE (RFC8335) --- system/system.proto | 83 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/system/system.proto b/system/system.proto index 9ff9cd13..39fc71ef 100644 --- a/system/system.proto +++ b/system/system.proto @@ -40,6 +40,11 @@ service System { // and must provide summary statistics. rpc Ping(PingRequest) returns (stream PingResponse) {} + // Probe executes the RFC8335 PROBE command on the target and + // streams back the results. Some targets may not stream any results + // until all results are in. + rpc Probe(ProbeRequest) returns (stream ProbeResponse) {} + // Traceroute executes the traceroute command on the target and streams back // the results. Some targets may not stream any results until all // results are in. If a hop count is not explicitly provided, @@ -227,6 +232,84 @@ message PingResponse { int32 ttl = 13; // Remaining time to live value. } +// A ProbeRequest describes the probe operation to perform. The +// destination field and exactly one of the probe_target fields +// are required. Any field not specified is set to a reasonable server +// specified value. Not all fields are supported by all vendors. +message ProbeRequest { + string destination = 1; // Proxy address to probe. required. + string source = 2; // Source address to probe from. + oneof probe_target { + // exactly one of the next 4 items must be present. + int32 ifindex = 3; // ifIndex to probe, if present. + string ifname = 4; // ifName to probe, if present. + string ifaddr = 5; // ifAddr to probe, if present. + string remote = 6; // remote address to probe, if present. + } + int32 count = 7; // Number of requests to make, default 3. + int64 interval = 8; // Nanoseconds between requests. + int64 wait = 9; // Nanoseconds to wait for a response. + + string network_instance = 10; // Network instance to probe the proxy node in. +} + +// A ProbeResponse represents either the response to a single probe packet +// (the code field is non-zero) or the summary statistics (sent is non-zero). +// +// For a single probe packet, time is the round trip time, in nanoseconds. For +// summary statistics, it is the time spent by the ping operation. The time is +// not always present in summary statistics. +// +// In the summary, each map is keyed by the enum values referred to by that map. +// The codes map is keyed by the Code enum, the states map is keyed by the State +// enum, and the actives map is keyed by the Active enum. +message ProbeResponse { + enum Code { + CODE_UNKNOWN = 0; + CODE_NO_ERROR = 1; + CODE_MALFORMED_QUERY = 2; + CODE_NO_SUCH_INTERFACE = 3; + CODE_NO_SUCH_TABLE_ENTRY = 4; + CODE_MULTIPLE_INTERFACES = 5; + } + enum State { + STATE_UNKNOWN = 0; + STATE_INCOMPLETE = 1; + STATE_REACHABLE = 2; + STATE_STALE = 3; + STATE_DELAY = 4; + STATE_PROBE = 5; + STATE_FAILED = 6; + } + enum Active { + ACTIVE_UNKNOWN = 0; + ACTIVE_INACTIVE = 1; + ACTIVE_NOV4_NOV6 = 2; + ACTIVE_V4 = 3; + ACTIVE_V6 = 4; + ACTIVE_V4_V6 = 5; + } + string source = 1; + int64 time = 2; + + // For individual responses + int32 sequence = 3; + Code code = 4; + State state = 5; // only present if code is CODE_NO_ERROR + // and request was remote + Active active = 6; // only present if code is CODE_NO_ERROR + // and request was not remote + + // summary + int32 sent = 7; // Total packets sent. + int32 errors = 8; // Count of errors received when sending packets. + int32 received = 9; // Total packets received. + // histograms in summary + map codes = 10; // Keys are values of Code enum + map states = 11; // Keys are values of State enum + map actives = 12; // Keys are values of Active enum +} + // A TracerouteRequest describes the traceroute operation to perform. Only the // destination field is required. Any field not specified is set to a // reasonable server specified value. Not all fields are supported by all From 265be9e338e56c04245d9c6351c204142b6946c1 Mon Sep 17 00:00:00 2001 From: Bill Fenner Date: Wed, 24 Apr 2024 10:30:59 -0700 Subject: [PATCH 2/3] Move comments for active and status --- system/system.proto | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/system/system.proto b/system/system.proto index 39fc71ef..986f1af7 100644 --- a/system/system.proto +++ b/system/system.proto @@ -295,10 +295,12 @@ message ProbeResponse { // For individual responses int32 sequence = 3; Code code = 4; - State state = 5; // only present if code is CODE_NO_ERROR - // and request was remote - Active active = 6; // only present if code is CODE_NO_ERROR - // and request was not remote + // state is only present if code is CODE_NO_ERROR + // and request was remote + State state = 5; + // active is only present if code is CODE_NO_ERROR + // and request was not remote + Active active = 6; // summary int32 sent = 7; // Total packets sent. From 2c8de98dc79f23e2f850b4ccc7d4b47bb41edad7 Mon Sep 17 00:00:00 2001 From: Bill Fenner Date: Mon, 29 Apr 2024 10:02:54 -0700 Subject: [PATCH 3/3] Update generated go files --- system/system.pb.go | 1660 +++++++++++++++++++++++++++----------- system/system_grpc.pb.go | 208 ++++- 2 files changed, 1387 insertions(+), 481 deletions(-) diff --git a/system/system.pb.go b/system/system.pb.go index c10ec8cf..0dac1a11 100644 --- a/system/system.pb.go +++ b/system/system.pb.go @@ -1,8 +1,30 @@ +// +// Copyright 2017 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// Generic Network Operation Interface, GNOI, defines a set of RPC's used for +// the operational aspects of network targets. These services are meant to be +// used in conjunction with GNMI for all target state and operational aspects +// of a network target. The gnoi.system.Service is the only mandatory vendor +// implementation. + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.21.10 -// source: system/system.proto +// protoc-gen-go v1.33.0 +// protoc v5.26.1 +// source: system.proto package system @@ -22,16 +44,22 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// A RebootMethod determines what should be done with a target when a Reboot is +// requested. Only the COLD method is required to be supported by all +// targets. A target should return 'INVALID_ARGUMENT` if UNKNOWN or any other +// unsupported method is called. +// +// It is vendor defined if a WARM reboot is the same as an NSF reboot. type RebootMethod int32 const ( - RebootMethod_UNKNOWN RebootMethod = 0 - RebootMethod_COLD RebootMethod = 1 - RebootMethod_POWERDOWN RebootMethod = 2 - RebootMethod_HALT RebootMethod = 3 - RebootMethod_WARM RebootMethod = 4 - RebootMethod_NSF RebootMethod = 5 - RebootMethod_POWERUP RebootMethod = 7 + RebootMethod_UNKNOWN RebootMethod = 0 // Invalid default method. + RebootMethod_COLD RebootMethod = 1 // Shutdown and restart OS and all hardware. + RebootMethod_POWERDOWN RebootMethod = 2 // Halt and power down, if possible. + RebootMethod_HALT RebootMethod = 3 // Halt, if possible. + RebootMethod_WARM RebootMethod = 4 // Reload configuration but not underlying hardware. + RebootMethod_NSF RebootMethod = 5 // Non-stop-forwarding reboot, if possible. + RebootMethod_POWERUP RebootMethod = 7 // Apply power, no-op if power is already on. ) // Enum value maps for RebootMethod. @@ -67,11 +95,11 @@ func (x RebootMethod) String() string { } func (RebootMethod) Descriptor() protoreflect.EnumDescriptor { - return file_system_system_proto_enumTypes[0].Descriptor() + return file_system_proto_enumTypes[0].Descriptor() } func (RebootMethod) Type() protoreflect.EnumType { - return &file_system_system_proto_enumTypes[0] + return &file_system_proto_enumTypes[0] } func (x RebootMethod) Number() protoreflect.EnumNumber { @@ -80,7 +108,7 @@ func (x RebootMethod) Number() protoreflect.EnumNumber { // Deprecated: Use RebootMethod.Descriptor instead. func (RebootMethod) EnumDescriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{0} + return file_system_proto_rawDescGZIP(), []int{0} } type RebootStatus_Status int32 @@ -119,11 +147,11 @@ func (x RebootStatus_Status) String() string { } func (RebootStatus_Status) Descriptor() protoreflect.EnumDescriptor { - return file_system_system_proto_enumTypes[1].Descriptor() + return file_system_proto_enumTypes[1].Descriptor() } func (RebootStatus_Status) Type() protoreflect.EnumType { - return &file_system_system_proto_enumTypes[1] + return &file_system_proto_enumTypes[1] } func (x RebootStatus_Status) Number() protoreflect.EnumNumber { @@ -132,15 +160,192 @@ func (x RebootStatus_Status) Number() protoreflect.EnumNumber { // Deprecated: Use RebootStatus_Status.Descriptor instead. func (RebootStatus_Status) EnumDescriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{8, 0} + return file_system_proto_rawDescGZIP(), []int{8, 0} +} + +type ProbeResponse_Code int32 + +const ( + ProbeResponse_CODE_UNKNOWN ProbeResponse_Code = 0 + ProbeResponse_CODE_NO_ERROR ProbeResponse_Code = 1 + ProbeResponse_CODE_MALFORMED_QUERY ProbeResponse_Code = 2 + ProbeResponse_CODE_NO_SUCH_INTERFACE ProbeResponse_Code = 3 + ProbeResponse_CODE_NO_SUCH_TABLE_ENTRY ProbeResponse_Code = 4 + ProbeResponse_CODE_MULTIPLE_INTERFACES ProbeResponse_Code = 5 +) + +// Enum value maps for ProbeResponse_Code. +var ( + ProbeResponse_Code_name = map[int32]string{ + 0: "CODE_UNKNOWN", + 1: "CODE_NO_ERROR", + 2: "CODE_MALFORMED_QUERY", + 3: "CODE_NO_SUCH_INTERFACE", + 4: "CODE_NO_SUCH_TABLE_ENTRY", + 5: "CODE_MULTIPLE_INTERFACES", + } + ProbeResponse_Code_value = map[string]int32{ + "CODE_UNKNOWN": 0, + "CODE_NO_ERROR": 1, + "CODE_MALFORMED_QUERY": 2, + "CODE_NO_SUCH_INTERFACE": 3, + "CODE_NO_SUCH_TABLE_ENTRY": 4, + "CODE_MULTIPLE_INTERFACES": 5, + } +) + +func (x ProbeResponse_Code) Enum() *ProbeResponse_Code { + p := new(ProbeResponse_Code) + *p = x + return p +} + +func (x ProbeResponse_Code) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ProbeResponse_Code) Descriptor() protoreflect.EnumDescriptor { + return file_system_proto_enumTypes[2].Descriptor() +} + +func (ProbeResponse_Code) Type() protoreflect.EnumType { + return &file_system_proto_enumTypes[2] +} + +func (x ProbeResponse_Code) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ProbeResponse_Code.Descriptor instead. +func (ProbeResponse_Code) EnumDescriptor() ([]byte, []int) { + return file_system_proto_rawDescGZIP(), []int{14, 0} +} + +type ProbeResponse_State int32 + +const ( + ProbeResponse_STATE_UNKNOWN ProbeResponse_State = 0 + ProbeResponse_STATE_INCOMPLETE ProbeResponse_State = 1 + ProbeResponse_STATE_REACHABLE ProbeResponse_State = 2 + ProbeResponse_STATE_STALE ProbeResponse_State = 3 + ProbeResponse_STATE_DELAY ProbeResponse_State = 4 + ProbeResponse_STATE_PROBE ProbeResponse_State = 5 + ProbeResponse_STATE_FAILED ProbeResponse_State = 6 +) + +// Enum value maps for ProbeResponse_State. +var ( + ProbeResponse_State_name = map[int32]string{ + 0: "STATE_UNKNOWN", + 1: "STATE_INCOMPLETE", + 2: "STATE_REACHABLE", + 3: "STATE_STALE", + 4: "STATE_DELAY", + 5: "STATE_PROBE", + 6: "STATE_FAILED", + } + ProbeResponse_State_value = map[string]int32{ + "STATE_UNKNOWN": 0, + "STATE_INCOMPLETE": 1, + "STATE_REACHABLE": 2, + "STATE_STALE": 3, + "STATE_DELAY": 4, + "STATE_PROBE": 5, + "STATE_FAILED": 6, + } +) + +func (x ProbeResponse_State) Enum() *ProbeResponse_State { + p := new(ProbeResponse_State) + *p = x + return p +} + +func (x ProbeResponse_State) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ProbeResponse_State) Descriptor() protoreflect.EnumDescriptor { + return file_system_proto_enumTypes[3].Descriptor() +} + +func (ProbeResponse_State) Type() protoreflect.EnumType { + return &file_system_proto_enumTypes[3] +} + +func (x ProbeResponse_State) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ProbeResponse_State.Descriptor instead. +func (ProbeResponse_State) EnumDescriptor() ([]byte, []int) { + return file_system_proto_rawDescGZIP(), []int{14, 1} +} + +type ProbeResponse_Active int32 + +const ( + ProbeResponse_ACTIVE_UNKNOWN ProbeResponse_Active = 0 + ProbeResponse_ACTIVE_INACTIVE ProbeResponse_Active = 1 + ProbeResponse_ACTIVE_NOV4_NOV6 ProbeResponse_Active = 2 + ProbeResponse_ACTIVE_V4 ProbeResponse_Active = 3 + ProbeResponse_ACTIVE_V6 ProbeResponse_Active = 4 + ProbeResponse_ACTIVE_V4_V6 ProbeResponse_Active = 5 +) + +// Enum value maps for ProbeResponse_Active. +var ( + ProbeResponse_Active_name = map[int32]string{ + 0: "ACTIVE_UNKNOWN", + 1: "ACTIVE_INACTIVE", + 2: "ACTIVE_NOV4_NOV6", + 3: "ACTIVE_V4", + 4: "ACTIVE_V6", + 5: "ACTIVE_V4_V6", + } + ProbeResponse_Active_value = map[string]int32{ + "ACTIVE_UNKNOWN": 0, + "ACTIVE_INACTIVE": 1, + "ACTIVE_NOV4_NOV6": 2, + "ACTIVE_V4": 3, + "ACTIVE_V6": 4, + "ACTIVE_V4_V6": 5, + } +) + +func (x ProbeResponse_Active) Enum() *ProbeResponse_Active { + p := new(ProbeResponse_Active) + *p = x + return p +} + +func (x ProbeResponse_Active) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ProbeResponse_Active) Descriptor() protoreflect.EnumDescriptor { + return file_system_proto_enumTypes[4].Descriptor() +} + +func (ProbeResponse_Active) Type() protoreflect.EnumType { + return &file_system_proto_enumTypes[4] +} + +func (x ProbeResponse_Active) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ProbeResponse_Active.Descriptor instead. +func (ProbeResponse_Active) EnumDescriptor() ([]byte, []int) { + return file_system_proto_rawDescGZIP(), []int{14, 2} } type TracerouteRequest_L4Protocol int32 const ( - TracerouteRequest_ICMP TracerouteRequest_L4Protocol = 0 - TracerouteRequest_TCP TracerouteRequest_L4Protocol = 1 - TracerouteRequest_UDP TracerouteRequest_L4Protocol = 2 + TracerouteRequest_ICMP TracerouteRequest_L4Protocol = 0 // Use ICMP ECHO for probes. + TracerouteRequest_TCP TracerouteRequest_L4Protocol = 1 // Use TCP SYN for probes. + TracerouteRequest_UDP TracerouteRequest_L4Protocol = 2 // Use UDP for probes. ) // Enum value maps for TracerouteRequest_L4Protocol. @@ -168,11 +373,11 @@ func (x TracerouteRequest_L4Protocol) String() string { } func (TracerouteRequest_L4Protocol) Descriptor() protoreflect.EnumDescriptor { - return file_system_system_proto_enumTypes[2].Descriptor() + return file_system_proto_enumTypes[5].Descriptor() } func (TracerouteRequest_L4Protocol) Type() protoreflect.EnumType { - return &file_system_system_proto_enumTypes[2] + return &file_system_proto_enumTypes[5] } func (x TracerouteRequest_L4Protocol) Number() protoreflect.EnumNumber { @@ -181,24 +386,25 @@ func (x TracerouteRequest_L4Protocol) Number() protoreflect.EnumNumber { // Deprecated: Use TracerouteRequest_L4Protocol.Descriptor instead. func (TracerouteRequest_L4Protocol) EnumDescriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{13, 0} + return file_system_proto_rawDescGZIP(), []int{15, 0} } +// State is the resulting state of a single traceoroute packet. type TracerouteResponse_State int32 const ( - TracerouteResponse_DEFAULT TracerouteResponse_State = 0 - TracerouteResponse_NONE TracerouteResponse_State = 1 - TracerouteResponse_UNKNOWN TracerouteResponse_State = 2 - TracerouteResponse_ICMP TracerouteResponse_State = 3 - TracerouteResponse_HOST_UNREACHABLE TracerouteResponse_State = 4 - TracerouteResponse_NETWORK_UNREACHABLE TracerouteResponse_State = 5 - TracerouteResponse_PROTOCOL_UNREACHABLE TracerouteResponse_State = 6 - TracerouteResponse_SOURCE_ROUTE_FAILED TracerouteResponse_State = 7 - TracerouteResponse_FRAGMENTATION_NEEDED TracerouteResponse_State = 8 - TracerouteResponse_PROHIBITED TracerouteResponse_State = 9 - TracerouteResponse_PRECEDENCE_VIOLATION TracerouteResponse_State = 10 - TracerouteResponse_PRECEDENCE_CUTOFF TracerouteResponse_State = 11 + TracerouteResponse_DEFAULT TracerouteResponse_State = 0 // Normal hop response. + TracerouteResponse_NONE TracerouteResponse_State = 1 // No response. + TracerouteResponse_UNKNOWN TracerouteResponse_State = 2 // Unknown response state. + TracerouteResponse_ICMP TracerouteResponse_State = 3 // See icmp_code field. + TracerouteResponse_HOST_UNREACHABLE TracerouteResponse_State = 4 // Host unreachable. + TracerouteResponse_NETWORK_UNREACHABLE TracerouteResponse_State = 5 // Network unreachable. + TracerouteResponse_PROTOCOL_UNREACHABLE TracerouteResponse_State = 6 // Protocol unreachable. + TracerouteResponse_SOURCE_ROUTE_FAILED TracerouteResponse_State = 7 // Source route failed. + TracerouteResponse_FRAGMENTATION_NEEDED TracerouteResponse_State = 8 // Fragmentation needed. + TracerouteResponse_PROHIBITED TracerouteResponse_State = 9 // Communication administratively prohibited. + TracerouteResponse_PRECEDENCE_VIOLATION TracerouteResponse_State = 10 // Host precedence violation. + TracerouteResponse_PRECEDENCE_CUTOFF TracerouteResponse_State = 11 // Precedence cutoff in effect. ) // Enum value maps for TracerouteResponse_State. @@ -244,11 +450,11 @@ func (x TracerouteResponse_State) String() string { } func (TracerouteResponse_State) Descriptor() protoreflect.EnumDescriptor { - return file_system_system_proto_enumTypes[3].Descriptor() + return file_system_proto_enumTypes[6].Descriptor() } func (TracerouteResponse_State) Type() protoreflect.EnumType { - return &file_system_system_proto_enumTypes[3] + return &file_system_proto_enumTypes[6] } func (x TracerouteResponse_State) Number() protoreflect.EnumNumber { @@ -257,17 +463,19 @@ func (x TracerouteResponse_State) Number() protoreflect.EnumNumber { // Deprecated: Use TracerouteResponse_State.Descriptor instead. func (TracerouteResponse_State) EnumDescriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{14, 0} + return file_system_proto_rawDescGZIP(), []int{16, 0} } +// Termination signal sent to the process. type KillProcessRequest_Signal int32 const ( - KillProcessRequest_SIGNAL_UNSPECIFIED KillProcessRequest_Signal = 0 - KillProcessRequest_SIGNAL_TERM KillProcessRequest_Signal = 1 - KillProcessRequest_SIGNAL_KILL KillProcessRequest_Signal = 2 - KillProcessRequest_SIGNAL_HUP KillProcessRequest_Signal = 3 - KillProcessRequest_SIGNAL_ABRT KillProcessRequest_Signal = 4 + KillProcessRequest_SIGNAL_UNSPECIFIED KillProcessRequest_Signal = 0 // Invalid default. + KillProcessRequest_SIGNAL_TERM KillProcessRequest_Signal = 1 // Terminate the process gracefully. + KillProcessRequest_SIGNAL_KILL KillProcessRequest_Signal = 2 // Terminate the process immediately. + KillProcessRequest_SIGNAL_HUP KillProcessRequest_Signal = 3 // Reload the process configuration. + // Terminate the process immediately and dump a core file. + KillProcessRequest_SIGNAL_ABRT KillProcessRequest_Signal = 4 ) // Enum value maps for KillProcessRequest_Signal. @@ -299,11 +507,11 @@ func (x KillProcessRequest_Signal) String() string { } func (KillProcessRequest_Signal) Descriptor() protoreflect.EnumDescriptor { - return file_system_system_proto_enumTypes[4].Descriptor() + return file_system_proto_enumTypes[7].Descriptor() } func (KillProcessRequest_Signal) Type() protoreflect.EnumType { - return &file_system_system_proto_enumTypes[4] + return &file_system_proto_enumTypes[7] } func (x KillProcessRequest_Signal) Number() protoreflect.EnumNumber { @@ -312,7 +520,7 @@ func (x KillProcessRequest_Signal) Number() protoreflect.EnumNumber { // Deprecated: Use KillProcessRequest_Signal.Descriptor instead. func (KillProcessRequest_Signal) EnumDescriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{18, 0} + return file_system_proto_rawDescGZIP(), []int{20, 0} } type SwitchControlProcessorRequest struct { @@ -320,13 +528,14 @@ type SwitchControlProcessorRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Path to the target Control Processor. ControlProcessor *types.Path `protobuf:"bytes,1,opt,name=control_processor,json=controlProcessor,proto3" json:"control_processor,omitempty"` } func (x *SwitchControlProcessorRequest) Reset() { *x = SwitchControlProcessorRequest{} if protoimpl.UnsafeEnabled { - mi := &file_system_system_proto_msgTypes[0] + mi := &file_system_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -339,7 +548,7 @@ func (x *SwitchControlProcessorRequest) String() string { func (*SwitchControlProcessorRequest) ProtoMessage() {} func (x *SwitchControlProcessorRequest) ProtoReflect() protoreflect.Message { - mi := &file_system_system_proto_msgTypes[0] + mi := &file_system_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -352,7 +561,7 @@ func (x *SwitchControlProcessorRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SwitchControlProcessorRequest.ProtoReflect.Descriptor instead. func (*SwitchControlProcessorRequest) Descriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{0} + return file_system_proto_rawDescGZIP(), []int{0} } func (x *SwitchControlProcessorRequest) GetControlProcessor() *types.Path { @@ -367,15 +576,18 @@ type SwitchControlProcessorResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Path to the Control Processor that the system switched to. ControlProcessor *types.Path `protobuf:"bytes,1,opt,name=control_processor,json=controlProcessor,proto3" json:"control_processor,omitempty"` - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - Uptime int64 `protobuf:"varint,3,opt,name=uptime,proto3" json:"uptime,omitempty"` + // Current software version of the target Control Processor. + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + // Uptime of the target Control Processor in nanoseconds. + Uptime int64 `protobuf:"varint,3,opt,name=uptime,proto3" json:"uptime,omitempty"` } func (x *SwitchControlProcessorResponse) Reset() { *x = SwitchControlProcessorResponse{} if protoimpl.UnsafeEnabled { - mi := &file_system_system_proto_msgTypes[1] + mi := &file_system_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -388,7 +600,7 @@ func (x *SwitchControlProcessorResponse) String() string { func (*SwitchControlProcessorResponse) ProtoMessage() {} func (x *SwitchControlProcessorResponse) ProtoReflect() protoreflect.Message { - mi := &file_system_system_proto_msgTypes[1] + mi := &file_system_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -401,7 +613,7 @@ func (x *SwitchControlProcessorResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SwitchControlProcessorResponse.ProtoReflect.Descriptor instead. func (*SwitchControlProcessorResponse) Descriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{1} + return file_system_proto_rawDescGZIP(), []int{1} } func (x *SwitchControlProcessorResponse) GetControlProcessor() *types.Path { @@ -425,22 +637,29 @@ func (x *SwitchControlProcessorResponse) GetUptime() int64 { return 0 } +// A RebootRequest requests the specified target be rebooted using the specified +// method after the specified delay. Only the COLD method with a delay of 0 +// is guaranteed to be accepted for all target types. type RebootRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Method RebootMethod `protobuf:"varint,1,opt,name=method,proto3,enum=gnoi.system.RebootMethod" json:"method,omitempty"` - Delay uint64 `protobuf:"varint,2,opt,name=delay,proto3" json:"delay,omitempty"` - Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + Method RebootMethod `protobuf:"varint,1,opt,name=method,proto3,enum=gnoi.system.RebootMethod" json:"method,omitempty"` + // Delay in nanoseconds before issuing reboot. + Delay uint64 `protobuf:"varint,2,opt,name=delay,proto3" json:"delay,omitempty"` + // Informational reason for the reboot. + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + // Optional sub-components to reboot. Subcomponents []*types.Path `protobuf:"bytes,4,rep,name=subcomponents,proto3" json:"subcomponents,omitempty"` - Force bool `protobuf:"varint,5,opt,name=force,proto3" json:"force,omitempty"` + // Force reboot if sanity checks fail. (ex. uncommited configuration) + Force bool `protobuf:"varint,5,opt,name=force,proto3" json:"force,omitempty"` } func (x *RebootRequest) Reset() { *x = RebootRequest{} if protoimpl.UnsafeEnabled { - mi := &file_system_system_proto_msgTypes[2] + mi := &file_system_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -453,7 +672,7 @@ func (x *RebootRequest) String() string { func (*RebootRequest) ProtoMessage() {} func (x *RebootRequest) ProtoReflect() protoreflect.Message { - mi := &file_system_system_proto_msgTypes[2] + mi := &file_system_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -466,7 +685,7 @@ func (x *RebootRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RebootRequest.ProtoReflect.Descriptor instead. func (*RebootRequest) Descriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{2} + return file_system_proto_rawDescGZIP(), []int{2} } func (x *RebootRequest) GetMethod() RebootMethod { @@ -513,7 +732,7 @@ type RebootResponse struct { func (x *RebootResponse) Reset() { *x = RebootResponse{} if protoimpl.UnsafeEnabled { - mi := &file_system_system_proto_msgTypes[3] + mi := &file_system_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -526,7 +745,7 @@ func (x *RebootResponse) String() string { func (*RebootResponse) ProtoMessage() {} func (x *RebootResponse) ProtoReflect() protoreflect.Message { - mi := &file_system_system_proto_msgTypes[3] + mi := &file_system_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -539,22 +758,24 @@ func (x *RebootResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RebootResponse.ProtoReflect.Descriptor instead. func (*RebootResponse) Descriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{3} + return file_system_proto_rawDescGZIP(), []int{3} } +// A CancelRebootRequest requests the cancelation of any outstanding reboot +// request. type CancelRebootRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` - Subcomponents []*types.Path `protobuf:"bytes,2,rep,name=subcomponents,proto3" json:"subcomponents,omitempty"` + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` // informational reason for the cancel + Subcomponents []*types.Path `protobuf:"bytes,2,rep,name=subcomponents,proto3" json:"subcomponents,omitempty"` // optional sub-components. } func (x *CancelRebootRequest) Reset() { *x = CancelRebootRequest{} if protoimpl.UnsafeEnabled { - mi := &file_system_system_proto_msgTypes[4] + mi := &file_system_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -567,7 +788,7 @@ func (x *CancelRebootRequest) String() string { func (*CancelRebootRequest) ProtoMessage() {} func (x *CancelRebootRequest) ProtoReflect() protoreflect.Message { - mi := &file_system_system_proto_msgTypes[4] + mi := &file_system_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -580,7 +801,7 @@ func (x *CancelRebootRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CancelRebootRequest.ProtoReflect.Descriptor instead. func (*CancelRebootRequest) Descriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{4} + return file_system_proto_rawDescGZIP(), []int{4} } func (x *CancelRebootRequest) GetMessage() string { @@ -606,7 +827,7 @@ type CancelRebootResponse struct { func (x *CancelRebootResponse) Reset() { *x = CancelRebootResponse{} if protoimpl.UnsafeEnabled { - mi := &file_system_system_proto_msgTypes[5] + mi := &file_system_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -619,7 +840,7 @@ func (x *CancelRebootResponse) String() string { func (*CancelRebootResponse) ProtoMessage() {} func (x *CancelRebootResponse) ProtoReflect() protoreflect.Message { - mi := &file_system_system_proto_msgTypes[5] + mi := &file_system_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -632,7 +853,7 @@ func (x *CancelRebootResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CancelRebootResponse.ProtoReflect.Descriptor instead. func (*CancelRebootResponse) Descriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{5} + return file_system_proto_rawDescGZIP(), []int{5} } type RebootStatusRequest struct { @@ -640,13 +861,13 @@ type RebootStatusRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Subcomponents []*types.Path `protobuf:"bytes,1,rep,name=subcomponents,proto3" json:"subcomponents,omitempty"` + Subcomponents []*types.Path `protobuf:"bytes,1,rep,name=subcomponents,proto3" json:"subcomponents,omitempty"` // optional sub-component. } func (x *RebootStatusRequest) Reset() { *x = RebootStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_system_system_proto_msgTypes[6] + mi := &file_system_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -659,7 +880,7 @@ func (x *RebootStatusRequest) String() string { func (*RebootStatusRequest) ProtoMessage() {} func (x *RebootStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_system_system_proto_msgTypes[6] + mi := &file_system_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -672,7 +893,7 @@ func (x *RebootStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RebootStatusRequest.ProtoReflect.Descriptor instead. func (*RebootStatusRequest) Descriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{6} + return file_system_proto_rawDescGZIP(), []int{6} } func (x *RebootStatusRequest) GetSubcomponents() []*types.Path { @@ -687,19 +908,19 @@ type RebootStatusResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Active bool `protobuf:"varint,1,opt,name=active,proto3" json:"active,omitempty"` - Wait uint64 `protobuf:"varint,2,opt,name=wait,proto3" json:"wait,omitempty"` - When uint64 `protobuf:"varint,3,opt,name=when,proto3" json:"when,omitempty"` - Reason string `protobuf:"bytes,4,opt,name=reason,proto3" json:"reason,omitempty"` - Count uint32 `protobuf:"varint,5,opt,name=count,proto3" json:"count,omitempty"` - Method RebootMethod `protobuf:"varint,6,opt,name=method,proto3,enum=gnoi.system.RebootMethod" json:"method,omitempty"` - Status *RebootStatus `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` + Active bool `protobuf:"varint,1,opt,name=active,proto3" json:"active,omitempty"` // If reboot is active. + Wait uint64 `protobuf:"varint,2,opt,name=wait,proto3" json:"wait,omitempty"` // Time left until reboot. + When uint64 `protobuf:"varint,3,opt,name=when,proto3" json:"when,omitempty"` // Time to reboot in nanoseconds since the epoch. + Reason string `protobuf:"bytes,4,opt,name=reason,proto3" json:"reason,omitempty"` // Reason for reboot. + Count uint32 `protobuf:"varint,5,opt,name=count,proto3" json:"count,omitempty"` // Number of reboots since active. + Method RebootMethod `protobuf:"varint,6,opt,name=method,proto3,enum=gnoi.system.RebootMethod" json:"method,omitempty"` // Type of reboot. + Status *RebootStatus `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` // Applicable only when active = false. } func (x *RebootStatusResponse) Reset() { *x = RebootStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_system_system_proto_msgTypes[7] + mi := &file_system_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -712,7 +933,7 @@ func (x *RebootStatusResponse) String() string { func (*RebootStatusResponse) ProtoMessage() {} func (x *RebootStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_system_system_proto_msgTypes[7] + mi := &file_system_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -725,7 +946,7 @@ func (x *RebootStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RebootStatusResponse.ProtoReflect.Descriptor instead. func (*RebootStatusResponse) Descriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{7} + return file_system_proto_rawDescGZIP(), []int{7} } func (x *RebootStatusResponse) GetActive() bool { @@ -789,7 +1010,7 @@ type RebootStatus struct { func (x *RebootStatus) Reset() { *x = RebootStatus{} if protoimpl.UnsafeEnabled { - mi := &file_system_system_proto_msgTypes[8] + mi := &file_system_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -802,7 +1023,7 @@ func (x *RebootStatus) String() string { func (*RebootStatus) ProtoMessage() {} func (x *RebootStatus) ProtoReflect() protoreflect.Message { - mi := &file_system_system_proto_msgTypes[8] + mi := &file_system_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -815,7 +1036,7 @@ func (x *RebootStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use RebootStatus.ProtoReflect.Descriptor instead. func (*RebootStatus) Descriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{8} + return file_system_proto_rawDescGZIP(), []int{8} } func (x *RebootStatus) GetStatus() RebootStatus_Status { @@ -832,6 +1053,7 @@ func (x *RebootStatus) GetMessage() string { return "" } +// A TimeRequest requests the current time accodring to the target. type TimeRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -841,7 +1063,7 @@ type TimeRequest struct { func (x *TimeRequest) Reset() { *x = TimeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_system_system_proto_msgTypes[9] + mi := &file_system_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -854,7 +1076,7 @@ func (x *TimeRequest) String() string { func (*TimeRequest) ProtoMessage() {} func (x *TimeRequest) ProtoReflect() protoreflect.Message { - mi := &file_system_system_proto_msgTypes[9] + mi := &file_system_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -867,7 +1089,7 @@ func (x *TimeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TimeRequest.ProtoReflect.Descriptor instead. func (*TimeRequest) Descriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{9} + return file_system_proto_rawDescGZIP(), []int{9} } type TimeResponse struct { @@ -875,13 +1097,13 @@ type TimeResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Time uint64 `protobuf:"varint,1,opt,name=time,proto3" json:"time,omitempty"` + Time uint64 `protobuf:"varint,1,opt,name=time,proto3" json:"time,omitempty"` // Current time in nanoseconds since epoch. } func (x *TimeResponse) Reset() { *x = TimeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_system_system_proto_msgTypes[10] + mi := &file_system_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -894,7 +1116,7 @@ func (x *TimeResponse) String() string { func (*TimeResponse) ProtoMessage() {} func (x *TimeResponse) ProtoReflect() protoreflect.Message { - mi := &file_system_system_proto_msgTypes[10] + mi := &file_system_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -907,7 +1129,7 @@ func (x *TimeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TimeResponse.ProtoReflect.Descriptor instead. func (*TimeResponse) Descriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{10} + return file_system_proto_rawDescGZIP(), []int{10} } func (x *TimeResponse) GetTime() uint64 { @@ -917,27 +1139,37 @@ func (x *TimeResponse) GetTime() uint64 { return 0 } +// A PingRequest describes the ping operation to perform. Only the destination +// fields is required. Any field not specified is set to a reasonable server +// specified value. Not all fields are supported by all vendors. +// +// A count of 0 defaults to a vendor specified value, typically 5. A count of +// -1 means continue until the RPC times out or is canceled. +// +// If the interval is -1 then a flood ping is issued. +// +// If the size is 0, the vendor default size will be used (typically 56 bytes). type PingRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Destination string `protobuf:"bytes,1,opt,name=destination,proto3" json:"destination,omitempty"` - Source string `protobuf:"bytes,2,opt,name=source,proto3" json:"source,omitempty"` - Count int32 `protobuf:"varint,3,opt,name=count,proto3" json:"count,omitempty"` - Interval int64 `protobuf:"varint,4,opt,name=interval,proto3" json:"interval,omitempty"` - Wait int64 `protobuf:"varint,5,opt,name=wait,proto3" json:"wait,omitempty"` - Size int32 `protobuf:"varint,6,opt,name=size,proto3" json:"size,omitempty"` - DoNotFragment bool `protobuf:"varint,7,opt,name=do_not_fragment,json=doNotFragment,proto3" json:"do_not_fragment,omitempty"` - DoNotResolve bool `protobuf:"varint,8,opt,name=do_not_resolve,json=doNotResolve,proto3" json:"do_not_resolve,omitempty"` - L3Protocol types.L3Protocol `protobuf:"varint,9,opt,name=l3protocol,proto3,enum=gnoi.types.L3Protocol" json:"l3protocol,omitempty"` - NetworkInstance string `protobuf:"bytes,10,opt,name=network_instance,json=networkInstance,proto3" json:"network_instance,omitempty"` + Destination string `protobuf:"bytes,1,opt,name=destination,proto3" json:"destination,omitempty"` // Destination address to ping. required. + Source string `protobuf:"bytes,2,opt,name=source,proto3" json:"source,omitempty"` // Source address to ping from. + Count int32 `protobuf:"varint,3,opt,name=count,proto3" json:"count,omitempty"` // Number of packets. + Interval int64 `protobuf:"varint,4,opt,name=interval,proto3" json:"interval,omitempty"` // Nanoseconds between requests. + Wait int64 `protobuf:"varint,5,opt,name=wait,proto3" json:"wait,omitempty"` // Nanoseconds to wait for a response. + Size int32 `protobuf:"varint,6,opt,name=size,proto3" json:"size,omitempty"` // Size of request packet. (excluding ICMP header) + DoNotFragment bool `protobuf:"varint,7,opt,name=do_not_fragment,json=doNotFragment,proto3" json:"do_not_fragment,omitempty"` // Set the do not fragment bit. (IPv4 destinations) + DoNotResolve bool `protobuf:"varint,8,opt,name=do_not_resolve,json=doNotResolve,proto3" json:"do_not_resolve,omitempty"` // Do not try resolve the address returned. + L3Protocol types.L3Protocol `protobuf:"varint,9,opt,name=l3protocol,proto3,enum=gnoi.types.L3Protocol" json:"l3protocol,omitempty"` // Layer3 protocol requested for the ping. + NetworkInstance string `protobuf:"bytes,10,opt,name=network_instance,json=networkInstance,proto3" json:"network_instance,omitempty"` // Network instance to ping the destination in } func (x *PingRequest) Reset() { *x = PingRequest{} if protoimpl.UnsafeEnabled { - mi := &file_system_system_proto_msgTypes[11] + mi := &file_system_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -950,7 +1182,7 @@ func (x *PingRequest) String() string { func (*PingRequest) ProtoMessage() {} func (x *PingRequest) ProtoReflect() protoreflect.Message { - mi := &file_system_system_proto_msgTypes[11] + mi := &file_system_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -963,7 +1195,7 @@ func (x *PingRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PingRequest.ProtoReflect.Descriptor instead. func (*PingRequest) Descriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{11} + return file_system_proto_rawDescGZIP(), []int{11} } func (x *PingRequest) GetDestination() string { @@ -1036,28 +1268,35 @@ func (x *PingRequest) GetNetworkInstance() string { return "" } +// A PingResponse represents either the reponse to a single ping packet +// (the bytes field is non-zero) or the summary statistics (sent is non-zero). +// +// For a single ping packet, time is the round trip time, in nanoseconds. For +// summary statistics, it is the time spent by the ping operation. The time is +// not always present in summary statistics. The std_dev is not always present +// in summary statistics. type PingResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Source string `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` + Source string `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` // Source of received bytes. Time int64 `protobuf:"varint,2,opt,name=time,proto3" json:"time,omitempty"` - Sent int32 `protobuf:"varint,3,opt,name=sent,proto3" json:"sent,omitempty"` - Received int32 `protobuf:"varint,4,opt,name=received,proto3" json:"received,omitempty"` - MinTime int64 `protobuf:"varint,5,opt,name=min_time,json=minTime,proto3" json:"min_time,omitempty"` - AvgTime int64 `protobuf:"varint,6,opt,name=avg_time,json=avgTime,proto3" json:"avg_time,omitempty"` - MaxTime int64 `protobuf:"varint,7,opt,name=max_time,json=maxTime,proto3" json:"max_time,omitempty"` - StdDev int64 `protobuf:"varint,8,opt,name=std_dev,json=stdDev,proto3" json:"std_dev,omitempty"` - Bytes int32 `protobuf:"varint,11,opt,name=bytes,proto3" json:"bytes,omitempty"` - Sequence int32 `protobuf:"varint,12,opt,name=sequence,proto3" json:"sequence,omitempty"` - Ttl int32 `protobuf:"varint,13,opt,name=ttl,proto3" json:"ttl,omitempty"` + Sent int32 `protobuf:"varint,3,opt,name=sent,proto3" json:"sent,omitempty"` // Total packets sent. + Received int32 `protobuf:"varint,4,opt,name=received,proto3" json:"received,omitempty"` // Total packets received. + MinTime int64 `protobuf:"varint,5,opt,name=min_time,json=minTime,proto3" json:"min_time,omitempty"` // Minimum round trip time in nanoseconds. + AvgTime int64 `protobuf:"varint,6,opt,name=avg_time,json=avgTime,proto3" json:"avg_time,omitempty"` // Average round trip time in nanoseconds. + MaxTime int64 `protobuf:"varint,7,opt,name=max_time,json=maxTime,proto3" json:"max_time,omitempty"` // Maximum round trip time in nanoseconds. + StdDev int64 `protobuf:"varint,8,opt,name=std_dev,json=stdDev,proto3" json:"std_dev,omitempty"` // Standard deviation in round trip time. + Bytes int32 `protobuf:"varint,11,opt,name=bytes,proto3" json:"bytes,omitempty"` // Bytes received. + Sequence int32 `protobuf:"varint,12,opt,name=sequence,proto3" json:"sequence,omitempty"` // Sequence number of received packet. + Ttl int32 `protobuf:"varint,13,opt,name=ttl,proto3" json:"ttl,omitempty"` // Remaining time to live value. } func (x *PingResponse) Reset() { *x = PingResponse{} if protoimpl.UnsafeEnabled { - mi := &file_system_system_proto_msgTypes[12] + mi := &file_system_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1070,7 +1309,7 @@ func (x *PingResponse) String() string { func (*PingResponse) ProtoMessage() {} func (x *PingResponse) ProtoReflect() protoreflect.Message { - mi := &file_system_system_proto_msgTypes[12] + mi := &file_system_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1083,7 +1322,7 @@ func (x *PingResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PingResponse.ProtoReflect.Descriptor instead. func (*PingResponse) Descriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{12} + return file_system_proto_rawDescGZIP(), []int{12} } func (x *PingResponse) GetSource() string { @@ -1163,28 +1402,348 @@ func (x *PingResponse) GetTtl() int32 { return 0 } +// A ProbeRequest describes the probe operation to perform. The +// destination field and exactly one of the probe_target fields +// are required. Any field not specified is set to a reasonable server +// specified value. Not all fields are supported by all vendors. +type ProbeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Destination string `protobuf:"bytes,1,opt,name=destination,proto3" json:"destination,omitempty"` // Proxy address to probe. required. + Source string `protobuf:"bytes,2,opt,name=source,proto3" json:"source,omitempty"` // Source address to probe from. + // Types that are assignable to ProbeTarget: + // + // *ProbeRequest_Ifindex + // *ProbeRequest_Ifname + // *ProbeRequest_Ifaddr + // *ProbeRequest_Remote + ProbeTarget isProbeRequest_ProbeTarget `protobuf_oneof:"probe_target"` + Count int32 `protobuf:"varint,7,opt,name=count,proto3" json:"count,omitempty"` // Number of requests to make, default 3. + Interval int64 `protobuf:"varint,8,opt,name=interval,proto3" json:"interval,omitempty"` // Nanoseconds between requests. + Wait int64 `protobuf:"varint,9,opt,name=wait,proto3" json:"wait,omitempty"` // Nanoseconds to wait for a response. + NetworkInstance string `protobuf:"bytes,10,opt,name=network_instance,json=networkInstance,proto3" json:"network_instance,omitempty"` // Network instance to probe the proxy node in. +} + +func (x *ProbeRequest) Reset() { + *x = ProbeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_system_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProbeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProbeRequest) ProtoMessage() {} + +func (x *ProbeRequest) ProtoReflect() protoreflect.Message { + mi := &file_system_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProbeRequest.ProtoReflect.Descriptor instead. +func (*ProbeRequest) Descriptor() ([]byte, []int) { + return file_system_proto_rawDescGZIP(), []int{13} +} + +func (x *ProbeRequest) GetDestination() string { + if x != nil { + return x.Destination + } + return "" +} + +func (x *ProbeRequest) GetSource() string { + if x != nil { + return x.Source + } + return "" +} + +func (m *ProbeRequest) GetProbeTarget() isProbeRequest_ProbeTarget { + if m != nil { + return m.ProbeTarget + } + return nil +} + +func (x *ProbeRequest) GetIfindex() int32 { + if x, ok := x.GetProbeTarget().(*ProbeRequest_Ifindex); ok { + return x.Ifindex + } + return 0 +} + +func (x *ProbeRequest) GetIfname() string { + if x, ok := x.GetProbeTarget().(*ProbeRequest_Ifname); ok { + return x.Ifname + } + return "" +} + +func (x *ProbeRequest) GetIfaddr() string { + if x, ok := x.GetProbeTarget().(*ProbeRequest_Ifaddr); ok { + return x.Ifaddr + } + return "" +} + +func (x *ProbeRequest) GetRemote() string { + if x, ok := x.GetProbeTarget().(*ProbeRequest_Remote); ok { + return x.Remote + } + return "" +} + +func (x *ProbeRequest) GetCount() int32 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *ProbeRequest) GetInterval() int64 { + if x != nil { + return x.Interval + } + return 0 +} + +func (x *ProbeRequest) GetWait() int64 { + if x != nil { + return x.Wait + } + return 0 +} + +func (x *ProbeRequest) GetNetworkInstance() string { + if x != nil { + return x.NetworkInstance + } + return "" +} + +type isProbeRequest_ProbeTarget interface { + isProbeRequest_ProbeTarget() +} + +type ProbeRequest_Ifindex struct { + // exactly one of the next 4 items must be present. + Ifindex int32 `protobuf:"varint,3,opt,name=ifindex,proto3,oneof"` // ifIndex to probe, if present. +} + +type ProbeRequest_Ifname struct { + Ifname string `protobuf:"bytes,4,opt,name=ifname,proto3,oneof"` // ifName to probe, if present. +} + +type ProbeRequest_Ifaddr struct { + Ifaddr string `protobuf:"bytes,5,opt,name=ifaddr,proto3,oneof"` // ifAddr to probe, if present. +} + +type ProbeRequest_Remote struct { + Remote string `protobuf:"bytes,6,opt,name=remote,proto3,oneof"` // remote address to probe, if present. +} + +func (*ProbeRequest_Ifindex) isProbeRequest_ProbeTarget() {} + +func (*ProbeRequest_Ifname) isProbeRequest_ProbeTarget() {} + +func (*ProbeRequest_Ifaddr) isProbeRequest_ProbeTarget() {} + +func (*ProbeRequest_Remote) isProbeRequest_ProbeTarget() {} + +// A ProbeResponse represents either the response to a single probe packet +// (the code field is non-zero) or the summary statistics (sent is non-zero). +// +// For a single probe packet, time is the round trip time, in nanoseconds. For +// summary statistics, it is the time spent by the ping operation. The time is +// not always present in summary statistics. +// +// In the summary, each map is keyed by the enum values referred to by that map. +// The codes map is keyed by the Code enum, the states map is keyed by the State +// enum, and the actives map is keyed by the Active enum. +type ProbeResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Source string `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` + Time int64 `protobuf:"varint,2,opt,name=time,proto3" json:"time,omitempty"` + // For individual responses + Sequence int32 `protobuf:"varint,3,opt,name=sequence,proto3" json:"sequence,omitempty"` + Code ProbeResponse_Code `protobuf:"varint,4,opt,name=code,proto3,enum=gnoi.system.ProbeResponse_Code" json:"code,omitempty"` + // state is only present if code is CODE_NO_ERROR + // and request was remote + State ProbeResponse_State `protobuf:"varint,5,opt,name=state,proto3,enum=gnoi.system.ProbeResponse_State" json:"state,omitempty"` + // active is only present if code is CODE_NO_ERROR + // and request was not remote + Active ProbeResponse_Active `protobuf:"varint,6,opt,name=active,proto3,enum=gnoi.system.ProbeResponse_Active" json:"active,omitempty"` + // summary + Sent int32 `protobuf:"varint,7,opt,name=sent,proto3" json:"sent,omitempty"` // Total packets sent. + Errors int32 `protobuf:"varint,8,opt,name=errors,proto3" json:"errors,omitempty"` // Count of errors received when sending packets. + Received int32 `protobuf:"varint,9,opt,name=received,proto3" json:"received,omitempty"` // Total packets received. + // histograms in summary + Codes map[uint32]uint32 `protobuf:"bytes,10,rep,name=codes,proto3" json:"codes,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // Keys are values of Code enum + States map[uint32]uint32 `protobuf:"bytes,11,rep,name=states,proto3" json:"states,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // Keys are values of State enum + Actives map[uint32]uint32 `protobuf:"bytes,12,rep,name=actives,proto3" json:"actives,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // Keys are values of Active enum +} + +func (x *ProbeResponse) Reset() { + *x = ProbeResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_system_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProbeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProbeResponse) ProtoMessage() {} + +func (x *ProbeResponse) ProtoReflect() protoreflect.Message { + mi := &file_system_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProbeResponse.ProtoReflect.Descriptor instead. +func (*ProbeResponse) Descriptor() ([]byte, []int) { + return file_system_proto_rawDescGZIP(), []int{14} +} + +func (x *ProbeResponse) GetSource() string { + if x != nil { + return x.Source + } + return "" +} + +func (x *ProbeResponse) GetTime() int64 { + if x != nil { + return x.Time + } + return 0 +} + +func (x *ProbeResponse) GetSequence() int32 { + if x != nil { + return x.Sequence + } + return 0 +} + +func (x *ProbeResponse) GetCode() ProbeResponse_Code { + if x != nil { + return x.Code + } + return ProbeResponse_CODE_UNKNOWN +} + +func (x *ProbeResponse) GetState() ProbeResponse_State { + if x != nil { + return x.State + } + return ProbeResponse_STATE_UNKNOWN +} + +func (x *ProbeResponse) GetActive() ProbeResponse_Active { + if x != nil { + return x.Active + } + return ProbeResponse_ACTIVE_UNKNOWN +} + +func (x *ProbeResponse) GetSent() int32 { + if x != nil { + return x.Sent + } + return 0 +} + +func (x *ProbeResponse) GetErrors() int32 { + if x != nil { + return x.Errors + } + return 0 +} + +func (x *ProbeResponse) GetReceived() int32 { + if x != nil { + return x.Received + } + return 0 +} + +func (x *ProbeResponse) GetCodes() map[uint32]uint32 { + if x != nil { + return x.Codes + } + return nil +} + +func (x *ProbeResponse) GetStates() map[uint32]uint32 { + if x != nil { + return x.States + } + return nil +} + +func (x *ProbeResponse) GetActives() map[uint32]uint32 { + if x != nil { + return x.Actives + } + return nil +} + +// A TracerouteRequest describes the traceroute operation to perform. Only the +// destination field is required. Any field not specified is set to a +// reasonable server specified value. Not all fields are supported by all +// vendors. +// +// If the hop_count is -1 the traceroute will continue forever. type TracerouteRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Source string `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` - Destination string `protobuf:"bytes,2,opt,name=destination,proto3" json:"destination,omitempty"` - InitialTtl uint32 `protobuf:"varint,3,opt,name=initial_ttl,json=initialTtl,proto3" json:"initial_ttl,omitempty"` - MaxTtl int32 `protobuf:"varint,4,opt,name=max_ttl,json=maxTtl,proto3" json:"max_ttl,omitempty"` - Wait int64 `protobuf:"varint,5,opt,name=wait,proto3" json:"wait,omitempty"` - DoNotFragment bool `protobuf:"varint,6,opt,name=do_not_fragment,json=doNotFragment,proto3" json:"do_not_fragment,omitempty"` - DoNotResolve bool `protobuf:"varint,7,opt,name=do_not_resolve,json=doNotResolve,proto3" json:"do_not_resolve,omitempty"` - L3Protocol types.L3Protocol `protobuf:"varint,8,opt,name=l3protocol,proto3,enum=gnoi.types.L3Protocol" json:"l3protocol,omitempty"` + Source string `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` // Source address to ping from. + Destination string `protobuf:"bytes,2,opt,name=destination,proto3" json:"destination,omitempty"` // Destination address to ping. + InitialTtl uint32 `protobuf:"varint,3,opt,name=initial_ttl,json=initialTtl,proto3" json:"initial_ttl,omitempty"` // Initial TTL. (default=1) + MaxTtl int32 `protobuf:"varint,4,opt,name=max_ttl,json=maxTtl,proto3" json:"max_ttl,omitempty"` // Maximum number of hops. (default=30) + Wait int64 `protobuf:"varint,5,opt,name=wait,proto3" json:"wait,omitempty"` // Nanoseconds to wait for a response. + DoNotFragment bool `protobuf:"varint,6,opt,name=do_not_fragment,json=doNotFragment,proto3" json:"do_not_fragment,omitempty"` // Set the do not fragment bit. (IPv4 destinations) + DoNotResolve bool `protobuf:"varint,7,opt,name=do_not_resolve,json=doNotResolve,proto3" json:"do_not_resolve,omitempty"` // Do not try resolve the address returned. + L3Protocol types.L3Protocol `protobuf:"varint,8,opt,name=l3protocol,proto3,enum=gnoi.types.L3Protocol" json:"l3protocol,omitempty"` // Layer-3 protocol requested for the ping. L4Protocol TracerouteRequest_L4Protocol `protobuf:"varint,9,opt,name=l4protocol,proto3,enum=gnoi.system.TracerouteRequest_L4Protocol" json:"l4protocol,omitempty"` - DoNotLookupAsn bool `protobuf:"varint,10,opt,name=do_not_lookup_asn,json=doNotLookupAsn,proto3" json:"do_not_lookup_asn,omitempty"` - NetworkInstance string `protobuf:"bytes,11,opt,name=network_instance,json=networkInstance,proto3" json:"network_instance,omitempty"` + DoNotLookupAsn bool `protobuf:"varint,10,opt,name=do_not_lookup_asn,json=doNotLookupAsn,proto3" json:"do_not_lookup_asn,omitempty"` // Do not try to lookup ASN + NetworkInstance string `protobuf:"bytes,11,opt,name=network_instance,json=networkInstance,proto3" json:"network_instance,omitempty"` // Network instance to trace the destination in } func (x *TracerouteRequest) Reset() { *x = TracerouteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_system_system_proto_msgTypes[13] + mi := &file_system_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1197,7 +1756,7 @@ func (x *TracerouteRequest) String() string { func (*TracerouteRequest) ProtoMessage() {} func (x *TracerouteRequest) ProtoReflect() protoreflect.Message { - mi := &file_system_system_proto_msgTypes[13] + mi := &file_system_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1210,7 +1769,7 @@ func (x *TracerouteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TracerouteRequest.ProtoReflect.Descriptor instead. func (*TracerouteRequest) Descriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{13} + return file_system_proto_rawDescGZIP(), []int{15} } func (x *TracerouteRequest) GetSource() string { @@ -1290,30 +1849,49 @@ func (x *TracerouteRequest) GetNetworkInstance() string { return "" } +// A TraceRouteResponse contains the result of a single traceoute packet. +// +// There may be an optional initial response that provides information about the +// traceroute request itself and contains at least one of the fields in the the +// initial block of fields and none of the fields following that block. All +// subsequent responses should not contain any of these fields. +// +// Typically multiple responses are received for each hop, as the packets are +// received. +// +// The mpls field maps names to values. Example names include "Label", "CoS", +// "TTL", "S", and "MRU". +// [Perhaps we should list the canonical names that must be used when +// applicable]. type TracerouteResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - DestinationName string `protobuf:"bytes,1,opt,name=destination_name,json=destinationName,proto3" json:"destination_name,omitempty"` - DestinationAddress string `protobuf:"bytes,2,opt,name=destination_address,json=destinationAddress,proto3" json:"destination_address,omitempty"` - Hops int32 `protobuf:"varint,3,opt,name=hops,proto3" json:"hops,omitempty"` - PacketSize int32 `protobuf:"varint,4,opt,name=packet_size,json=packetSize,proto3" json:"packet_size,omitempty"` - Hop int32 `protobuf:"varint,5,opt,name=hop,proto3" json:"hop,omitempty"` - Address string `protobuf:"bytes,6,opt,name=address,proto3" json:"address,omitempty"` - Name string `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"` - Rtt int64 `protobuf:"varint,8,opt,name=rtt,proto3" json:"rtt,omitempty"` - State TracerouteResponse_State `protobuf:"varint,9,opt,name=state,proto3,enum=gnoi.system.TracerouteResponse_State" json:"state,omitempty"` - IcmpCode int32 `protobuf:"varint,10,opt,name=icmp_code,json=icmpCode,proto3" json:"icmp_code,omitempty"` - Mpls map[string]string `protobuf:"bytes,11,rep,name=mpls,proto3" json:"mpls,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - AsPath []int32 `protobuf:"varint,12,rep,packed,name=as_path,json=asPath,proto3" json:"as_path,omitempty"` - IcmpExtData []*TracerouteResponse_IcmpExtData `protobuf:"bytes,13,rep,name=icmp_ext_data,json=icmpExtData,proto3" json:"icmp_ext_data,omitempty"` + // The following fields are only filled in for the first message. + // If any of these fields are specified, all fields following this + // block are left unspecified. + DestinationName string `protobuf:"bytes,1,opt,name=destination_name,json=destinationName,proto3" json:"destination_name,omitempty"` + DestinationAddress string `protobuf:"bytes,2,opt,name=destination_address,json=destinationAddress,proto3" json:"destination_address,omitempty"` + Hops int32 `protobuf:"varint,3,opt,name=hops,proto3" json:"hops,omitempty"` + PacketSize int32 `protobuf:"varint,4,opt,name=packet_size,json=packetSize,proto3" json:"packet_size,omitempty"` + // The following fields provide the disposition of a single traceroute + // packet. + Hop int32 `protobuf:"varint,5,opt,name=hop,proto3" json:"hop,omitempty"` // Hop number. required. + Address string `protobuf:"bytes,6,opt,name=address,proto3" json:"address,omitempty"` // Address of responding hop. required. + Name string `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"` // Name of responding hop. + Rtt int64 `protobuf:"varint,8,opt,name=rtt,proto3" json:"rtt,omitempty"` // Round trip time in nanoseconds. + State TracerouteResponse_State `protobuf:"varint,9,opt,name=state,proto3,enum=gnoi.system.TracerouteResponse_State" json:"state,omitempty"` // State of this hop. + IcmpCode int32 `protobuf:"varint,10,opt,name=icmp_code,json=icmpCode,proto3" json:"icmp_code,omitempty"` // Code terminating hop. + Mpls map[string]string `protobuf:"bytes,11,rep,name=mpls,proto3" json:"mpls,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // MPLS key/value pairs. + AsPath []int32 `protobuf:"varint,12,rep,packed,name=as_path,json=asPath,proto3" json:"as_path,omitempty"` // AS path. + IcmpExtData []*TracerouteResponse_IcmpExtData `protobuf:"bytes,13,rep,name=icmp_ext_data,json=icmpExtData,proto3" json:"icmp_ext_data,omitempty"` // ICMP extension data } func (x *TracerouteResponse) Reset() { *x = TracerouteResponse{} if protoimpl.UnsafeEnabled { - mi := &file_system_system_proto_msgTypes[14] + mi := &file_system_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1326,7 +1904,7 @@ func (x *TracerouteResponse) String() string { func (*TracerouteResponse) ProtoMessage() {} func (x *TracerouteResponse) ProtoReflect() protoreflect.Message { - mi := &file_system_system_proto_msgTypes[14] + mi := &file_system_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1339,7 +1917,7 @@ func (x *TracerouteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TracerouteResponse.ProtoReflect.Descriptor instead. func (*TracerouteResponse) Descriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{14} + return file_system_proto_rawDescGZIP(), []int{16} } func (x *TracerouteResponse) GetDestinationName() string { @@ -1433,21 +2011,28 @@ func (x *TracerouteResponse) GetIcmpExtData() []*TracerouteResponse_IcmpExtData return nil } +// Package defines a single package file to be placed on the target. type Package struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Filename string `protobuf:"bytes,1,opt,name=filename,proto3" json:"filename,omitempty"` - Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` - Activate bool `protobuf:"varint,5,opt,name=activate,proto3" json:"activate,omitempty"` + // Destination path and filename of the package. + Filename string `protobuf:"bytes,1,opt,name=filename,proto3" json:"filename,omitempty"` + // Version of the package. (vendor internal name) + Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` + // Indicates that the package should be made active after receipt on + // the device. For system image packages, the new image is expected to + // be active after a reboot. + Activate bool `protobuf:"varint,5,opt,name=activate,proto3" json:"activate,omitempty"` + // Details for the device to download the package from a remote location. RemoteDownload *common.RemoteDownload `protobuf:"bytes,6,opt,name=remote_download,json=remoteDownload,proto3" json:"remote_download,omitempty"` } func (x *Package) Reset() { *x = Package{} if protoimpl.UnsafeEnabled { - mi := &file_system_system_proto_msgTypes[15] + mi := &file_system_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1460,7 +2045,7 @@ func (x *Package) String() string { func (*Package) ProtoMessage() {} func (x *Package) ProtoReflect() protoreflect.Message { - mi := &file_system_system_proto_msgTypes[15] + mi := &file_system_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1473,7 +2058,7 @@ func (x *Package) ProtoReflect() protoreflect.Message { // Deprecated: Use Package.ProtoReflect.Descriptor instead. func (*Package) Descriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{15} + return file_system_proto_rawDescGZIP(), []int{17} } func (x *Package) GetFilename() string { @@ -1504,6 +2089,11 @@ func (x *Package) GetRemoteDownload() *common.RemoteDownload { return nil } +// SetPackageRequest will place the package onto the target and optionally mark +// it as the next bootable image. The initial message must be a package +// message containing the filename and information about the file. Following the +// initial message the contents are then streamed in maximum 64k chunks. The +// final message must be a hash message contains the hash of the file contents. type SetPackageRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1520,7 +2110,7 @@ type SetPackageRequest struct { func (x *SetPackageRequest) Reset() { *x = SetPackageRequest{} if protoimpl.UnsafeEnabled { - mi := &file_system_system_proto_msgTypes[16] + mi := &file_system_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1533,7 +2123,7 @@ func (x *SetPackageRequest) String() string { func (*SetPackageRequest) ProtoMessage() {} func (x *SetPackageRequest) ProtoReflect() protoreflect.Message { - mi := &file_system_system_proto_msgTypes[16] + mi := &file_system_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1546,7 +2136,7 @@ func (x *SetPackageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetPackageRequest.ProtoReflect.Descriptor instead. func (*SetPackageRequest) Descriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{16} + return file_system_proto_rawDescGZIP(), []int{18} } func (m *SetPackageRequest) GetRequest() isSetPackageRequest_Request { @@ -1590,7 +2180,7 @@ type SetPackageRequest_Contents struct { } type SetPackageRequest_Hash struct { - Hash *types.HashType `protobuf:"bytes,3,opt,name=hash,proto3,oneof"` + Hash *types.HashType `protobuf:"bytes,3,opt,name=hash,proto3,oneof"` // Verification hash of data. } func (*SetPackageRequest_Package) isSetPackageRequest_Request() {} @@ -1608,7 +2198,7 @@ type SetPackageResponse struct { func (x *SetPackageResponse) Reset() { *x = SetPackageResponse{} if protoimpl.UnsafeEnabled { - mi := &file_system_system_proto_msgTypes[17] + mi := &file_system_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1621,7 +2211,7 @@ func (x *SetPackageResponse) String() string { func (*SetPackageResponse) ProtoMessage() {} func (x *SetPackageResponse) ProtoReflect() protoreflect.Message { - mi := &file_system_system_proto_msgTypes[17] + mi := &file_system_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1634,24 +2224,30 @@ func (x *SetPackageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetPackageResponse.ProtoReflect.Descriptor instead. func (*SetPackageResponse) Descriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{17} + return file_system_proto_rawDescGZIP(), []int{19} } +// KillProcessRequest describes the process kill operation. Either a pid or +// process name must be specified, and a termination signal must be specified. type KillProcessRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Pid uint32 `protobuf:"varint,1,opt,name=pid,proto3" json:"pid,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Signal KillProcessRequest_Signal `protobuf:"varint,3,opt,name=signal,proto3,enum=gnoi.system.KillProcessRequest_Signal" json:"signal,omitempty"` - Restart bool `protobuf:"varint,4,opt,name=restart,proto3" json:"restart,omitempty"` + // Process ID of the process to be killed. + Pid uint32 `protobuf:"varint,1,opt,name=pid,proto3" json:"pid,omitempty"` + // Name of the process to be killed. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Signal KillProcessRequest_Signal `protobuf:"varint,3,opt,name=signal,proto3,enum=gnoi.system.KillProcessRequest_Signal" json:"signal,omitempty"` + // Whether the process should be restarted after termination. + // This value is ignored when the termination signal is SIGHUP. + Restart bool `protobuf:"varint,4,opt,name=restart,proto3" json:"restart,omitempty"` } func (x *KillProcessRequest) Reset() { *x = KillProcessRequest{} if protoimpl.UnsafeEnabled { - mi := &file_system_system_proto_msgTypes[18] + mi := &file_system_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1664,7 +2260,7 @@ func (x *KillProcessRequest) String() string { func (*KillProcessRequest) ProtoMessage() {} func (x *KillProcessRequest) ProtoReflect() protoreflect.Message { - mi := &file_system_system_proto_msgTypes[18] + mi := &file_system_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1677,7 +2273,7 @@ func (x *KillProcessRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use KillProcessRequest.ProtoReflect.Descriptor instead. func (*KillProcessRequest) Descriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{18} + return file_system_proto_rawDescGZIP(), []int{20} } func (x *KillProcessRequest) GetPid() uint32 { @@ -1708,6 +2304,7 @@ func (x *KillProcessRequest) GetRestart() bool { return false } +// KillProcessResponse describes the result of the process kill operation. type KillProcessResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1717,7 +2314,7 @@ type KillProcessResponse struct { func (x *KillProcessResponse) Reset() { *x = KillProcessResponse{} if protoimpl.UnsafeEnabled { - mi := &file_system_system_proto_msgTypes[19] + mi := &file_system_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1730,7 +2327,7 @@ func (x *KillProcessResponse) String() string { func (*KillProcessResponse) ProtoMessage() {} func (x *KillProcessResponse) ProtoReflect() protoreflect.Message { - mi := &file_system_system_proto_msgTypes[19] + mi := &file_system_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1743,7 +2340,7 @@ func (x *KillProcessResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use KillProcessResponse.ProtoReflect.Descriptor instead. func (*KillProcessResponse) Descriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{19} + return file_system_proto_rawDescGZIP(), []int{21} } type TracerouteResponse_IcmpExtData struct { @@ -1751,15 +2348,15 @@ type TracerouteResponse_IcmpExtData struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Class uint32 `protobuf:"varint,1,opt,name=class,proto3" json:"class,omitempty"` - Type uint32 `protobuf:"varint,2,opt,name=type,proto3" json:"type,omitempty"` - Data []uint32 `protobuf:"varint,3,rep,packed,name=data,proto3" json:"data,omitempty"` + Class uint32 `protobuf:"varint,1,opt,name=class,proto3" json:"class,omitempty"` // class number + Type uint32 `protobuf:"varint,2,opt,name=type,proto3" json:"type,omitempty"` // class type + Data []uint32 `protobuf:"varint,3,rep,packed,name=data,proto3" json:"data,omitempty"` // raw words associated with this data } func (x *TracerouteResponse_IcmpExtData) Reset() { *x = TracerouteResponse_IcmpExtData{} if protoimpl.UnsafeEnabled { - mi := &file_system_system_proto_msgTypes[20] + mi := &file_system_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1772,7 +2369,7 @@ func (x *TracerouteResponse_IcmpExtData) String() string { func (*TracerouteResponse_IcmpExtData) ProtoMessage() {} func (x *TracerouteResponse_IcmpExtData) ProtoReflect() protoreflect.Message { - mi := &file_system_system_proto_msgTypes[20] + mi := &file_system_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1785,7 +2382,7 @@ func (x *TracerouteResponse_IcmpExtData) ProtoReflect() protoreflect.Message { // Deprecated: Use TracerouteResponse_IcmpExtData.ProtoReflect.Descriptor instead. func (*TracerouteResponse_IcmpExtData) Descriptor() ([]byte, []int) { - return file_system_system_proto_rawDescGZIP(), []int{14, 0} + return file_system_proto_rawDescGZIP(), []int{16, 0} } func (x *TracerouteResponse_IcmpExtData) GetClass() uint32 { @@ -1809,129 +2406,218 @@ func (x *TracerouteResponse_IcmpExtData) GetData() []uint32 { return nil } -var File_system_system_proto protoreflect.FileDescriptor - -var file_system_system_proto_rawDesc = []byte{ - 0x0a, 0x13, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, - 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x6f, 0x69, 0x2f, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x2c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, - 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x6f, 0x69, 0x2f, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x5e, 0x0a, 0x1d, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x3d, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x70, 0x72, 0x6f, - 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, - 0x6e, 0x6f, 0x69, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x10, - 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, - 0x22, 0x91, 0x01, 0x0a, 0x1e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x70, - 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x61, 0x74, 0x68, - 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, - 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, - 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x70, - 0x74, 0x69, 0x6d, 0x65, 0x22, 0xc0, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x6c, - 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x12, - 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x0d, 0x73, 0x75, 0x62, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x61, - 0x74, 0x68, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x73, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x10, 0x0a, 0x0e, 0x52, 0x65, 0x62, 0x6f, 0x6f, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x67, 0x0a, 0x13, 0x43, 0x61, 0x6e, - 0x63, 0x65, 0x6c, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x0d, 0x73, 0x75, - 0x62, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, +var File_system_proto protoreflect.FileDescriptor + +var file_system_proto_rawDesc = []byte{ + 0x0a, 0x0c, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, + 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x1a, 0x2e, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x6f, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2c, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x6f, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5e, 0x0a, 0x1d, 0x53, 0x77, 0x69, + 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, + 0x73, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x11, 0x63, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x22, 0x91, 0x01, 0x0a, 0x1e, 0x53, 0x77, + 0x69, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x72, 0x6f, 0x63, 0x65, + 0x73, 0x73, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x11, + 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xc0, 0x01, + 0x0a, 0x0d, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x31, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x19, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x52, 0x65, + 0x62, 0x6f, 0x6f, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, + 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x36, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x6e, 0x6f, 0x69, + 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x0d, 0x73, 0x75, 0x62, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, + 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, + 0x22, 0x10, 0x0a, 0x0e, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x67, 0x0a, 0x13, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x62, 0x6f, + 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x6e, 0x6f, + 0x69, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x0d, 0x73, 0x75, + 0x62, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x43, + 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x4d, 0x0a, 0x13, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0d, 0x73, 0x75, + 0x62, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x62, 0x6f, - 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4d, 0x0a, 0x13, 0x52, 0x65, - 0x62, 0x6f, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x36, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xea, 0x01, 0x0a, 0x14, 0x52, 0x65, - 0x62, 0x6f, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x77, 0x61, - 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x77, 0x61, 0x69, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x77, 0x68, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x77, 0x68, - 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x31, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x19, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x52, - 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x06, 0x6d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x12, 0x31, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x2e, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xc6, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x62, 0x6f, 0x6f, - 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x38, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x62, 0x0a, 0x06, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x1c, 0x0a, - 0x18, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x45, 0x54, 0x52, 0x49, 0x41, 0x42, 0x4c, - 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x03, 0x22, - 0x0d, 0x0a, 0x0b, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x22, - 0x0a, 0x0c, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x74, 0x69, - 0x6d, 0x65, 0x22, 0xd2, 0x02, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x12, - 0x0a, 0x04, 0x77, 0x61, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x77, 0x61, - 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x6f, 0x5f, 0x6e, 0x6f, 0x74, - 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0d, 0x64, 0x6f, 0x4e, 0x6f, 0x74, 0x46, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x24, - 0x0a, 0x0e, 0x64, 0x6f, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x6f, 0x4e, 0x6f, 0x74, 0x52, 0x65, 0x73, - 0x6f, 0x6c, 0x76, 0x65, 0x12, 0x36, 0x0a, 0x0a, 0x6c, 0x33, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4c, 0x33, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x52, 0x0a, 0x6c, 0x33, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x29, 0x0a, 0x10, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x98, 0x02, 0x0a, 0x0c, 0x50, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, - 0x74, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x69, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, - 0x19, 0x0a, 0x08, 0x61, 0x76, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x07, 0x61, 0x76, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, - 0x78, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x61, - 0x78, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x74, 0x64, 0x5f, 0x64, 0x65, 0x76, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x74, 0x64, 0x44, 0x65, 0x76, 0x12, 0x14, - 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x74, - 0x74, 0x6c, 0x22, 0xec, 0x03, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x6f, 0x75, 0x74, + 0x74, 0x73, 0x22, 0xea, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x77, 0x61, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x04, 0x77, 0x61, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x77, 0x68, 0x65, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x77, 0x68, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x06, 0x6d, 0x65, 0x74, + 0x68, 0x6f, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x67, 0x6e, 0x6f, 0x69, + 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x4d, 0x65, + 0x74, 0x68, 0x6f, 0x64, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x31, 0x0a, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, + 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x52, 0x65, 0x62, 0x6f, 0x6f, + 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, + 0xc6, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x38, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x20, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x52, + 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x62, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, + 0x0a, 0x0e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, + 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x55, 0x43, + 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x5f, 0x52, 0x45, 0x54, 0x52, 0x49, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x55, + 0x52, 0x45, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, + 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x03, 0x22, 0x0d, 0x0a, 0x0b, 0x54, 0x69, 0x6d, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x22, 0x0a, 0x0c, 0x54, 0x69, 0x6d, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xd2, 0x02, 0x0a, 0x0b, + 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, + 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x77, 0x61, 0x69, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x77, 0x61, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, + 0x26, 0x0a, 0x0f, 0x64, 0x6f, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x64, 0x6f, 0x4e, 0x6f, 0x74, 0x46, + 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x64, 0x6f, 0x5f, 0x6e, 0x6f, + 0x74, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0c, 0x64, 0x6f, 0x4e, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x12, 0x36, 0x0a, + 0x0a, 0x6c, 0x33, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x16, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4c, + 0x33, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x0a, 0x6c, 0x33, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x29, 0x0a, 0x10, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x22, 0x98, 0x02, 0x0a, 0x0c, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x65, 0x6e, + 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x19, 0x0a, + 0x08, 0x6d, 0x69, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x07, 0x6d, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x76, 0x67, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x61, 0x76, 0x67, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x17, + 0x0a, 0x07, 0x73, 0x74, 0x64, 0x5f, 0x64, 0x65, 0x76, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x06, 0x73, 0x74, 0x64, 0x44, 0x65, 0x76, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1a, 0x0a, + 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x22, 0xb3, 0x02, 0x0a, 0x0c, + 0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, + 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x07, 0x69, 0x66, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x07, 0x69, 0x66, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x12, 0x18, 0x0a, 0x06, 0x69, 0x66, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x69, 0x66, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x06, + 0x69, 0x66, 0x61, 0x64, 0x64, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, + 0x69, 0x66, 0x61, 0x64, 0x64, 0x72, 0x12, 0x18, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, + 0x61, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, + 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x77, 0x61, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x04, 0x77, 0x61, 0x69, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x22, 0xde, 0x08, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x33, 0x0a, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x67, 0x6e, 0x6f, 0x69, + 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x36, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x20, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x50, 0x72, + 0x6f, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x06, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, + 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x3b, 0x0a, 0x05, 0x63, + 0x6f, 0x64, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6e, 0x6f, + 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x05, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x41, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x6e, 0x6f, 0x69, + 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x1a, 0x38, 0x0a, 0x0a, 0x43, + 0x6f, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x3a, 0x0a, 0x0c, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x9d, 0x01, 0x0a, + 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, + 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x4f, 0x44, 0x45, 0x5f, + 0x4e, 0x4f, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x4f, + 0x44, 0x45, 0x5f, 0x4d, 0x41, 0x4c, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x44, 0x5f, 0x51, 0x55, 0x45, + 0x52, 0x59, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x4e, 0x4f, 0x5f, + 0x53, 0x55, 0x43, 0x48, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x10, 0x03, + 0x12, 0x1c, 0x0a, 0x18, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x4e, 0x4f, 0x5f, 0x53, 0x55, 0x43, 0x48, + 0x5f, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x10, 0x04, 0x12, 0x1c, + 0x0a, 0x18, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x45, 0x5f, + 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x53, 0x10, 0x05, 0x22, 0x8a, 0x01, 0x0a, + 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x01, 0x12, + 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x43, 0x48, 0x41, 0x42, + 0x4c, 0x45, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, + 0x41, 0x4c, 0x45, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, + 0x45, 0x4c, 0x41, 0x59, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x50, 0x52, 0x4f, 0x42, 0x45, 0x10, 0x05, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x06, 0x22, 0x77, 0x0a, 0x06, 0x41, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x0e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x55, 0x4e, + 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x43, 0x54, 0x49, 0x56, + 0x45, 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, + 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x4e, 0x4f, 0x56, 0x34, 0x5f, 0x4e, 0x4f, 0x56, 0x36, + 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x56, 0x34, 0x10, + 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x56, 0x36, 0x10, 0x04, + 0x12, 0x10, 0x0a, 0x0c, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x56, 0x34, 0x5f, 0x56, 0x36, + 0x10, 0x05, 0x22, 0xec, 0x03, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, @@ -2062,158 +2748,178 @@ var file_system_system_proto_rawDesc = []byte{ 0x57, 0x45, 0x52, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x41, 0x4c, 0x54, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x41, 0x52, 0x4d, 0x10, 0x04, 0x12, 0x07, 0x0a, 0x03, 0x4e, 0x53, 0x46, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x55, - 0x50, 0x10, 0x07, 0x22, 0x04, 0x08, 0x06, 0x10, 0x06, 0x32, 0xea, 0x05, 0x0a, 0x06, 0x53, 0x79, + 0x50, 0x10, 0x07, 0x22, 0x04, 0x08, 0x06, 0x10, 0x06, 0x32, 0xae, 0x06, 0x0a, 0x06, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x3f, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x51, 0x0a, 0x0a, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x6f, - 0x75, 0x74, 0x65, 0x12, 0x1e, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x3d, 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x18, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x6e, 0x6f, - 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0a, 0x53, 0x65, 0x74, 0x50, 0x61, - 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x12, 0x73, 0x0a, 0x16, 0x53, 0x77, - 0x69, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x6f, 0x72, 0x12, 0x2a, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x42, 0x0a, 0x05, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x12, 0x19, + 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x50, 0x72, 0x6f, + 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x6e, 0x6f, 0x69, + 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x51, 0x0a, 0x0a, 0x54, 0x72, 0x61, + 0x63, 0x65, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x1e, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x6f, 0x75, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x6f, 0x75, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x3d, 0x0a, 0x04, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, + 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0a, 0x53, + 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x2e, 0x67, 0x6e, 0x6f, 0x69, + 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x6e, 0x6f, 0x69, + 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x12, 0x73, + 0x0a, 0x16, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, + 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x12, 0x2a, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2b, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x53, - 0x77, 0x69, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x73, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x43, 0x0a, 0x06, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x12, 0x1a, 0x2e, 0x67, 0x6e, 0x6f, 0x69, + 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x06, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x12, 0x1a, 0x2e, + 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x52, 0x65, 0x62, 0x6f, + 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x2e, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0c, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x2e, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0c, 0x43, - 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x12, 0x20, 0x2e, 0x67, 0x6e, - 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, - 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, - 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x43, 0x61, 0x6e, 0x63, - 0x65, 0x6c, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0b, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, - 0x73, 0x12, 0x1f, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, - 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x2b, 0xd2, 0x3e, 0x05, 0x31, 0x2e, 0x34, 0x2e, 0x30, - 0x5a, 0x21, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, - 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x6f, 0x69, 0x2f, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0c, 0x52, 0x65, 0x62, 0x6f, + 0x6f, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x6e, 0x6f, + 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x55, 0x0a, 0x0c, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x12, + 0x20, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x43, 0x61, + 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, + 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0b, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x72, + 0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, 0x1f, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x6e, 0x6f, 0x69, 0x2e, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x2b, 0xd2, 0x3e, 0x05, 0x31, + 0x2e, 0x34, 0x2e, 0x30, 0x5a, 0x21, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x6f, 0x69, + 0x2f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_system_system_proto_rawDescOnce sync.Once - file_system_system_proto_rawDescData = file_system_system_proto_rawDesc + file_system_proto_rawDescOnce sync.Once + file_system_proto_rawDescData = file_system_proto_rawDesc ) -func file_system_system_proto_rawDescGZIP() []byte { - file_system_system_proto_rawDescOnce.Do(func() { - file_system_system_proto_rawDescData = protoimpl.X.CompressGZIP(file_system_system_proto_rawDescData) +func file_system_proto_rawDescGZIP() []byte { + file_system_proto_rawDescOnce.Do(func() { + file_system_proto_rawDescData = protoimpl.X.CompressGZIP(file_system_proto_rawDescData) }) - return file_system_system_proto_rawDescData + return file_system_proto_rawDescData } -var file_system_system_proto_enumTypes = make([]protoimpl.EnumInfo, 5) -var file_system_system_proto_msgTypes = make([]protoimpl.MessageInfo, 22) -var file_system_system_proto_goTypes = []interface{}{ +var file_system_proto_enumTypes = make([]protoimpl.EnumInfo, 8) +var file_system_proto_msgTypes = make([]protoimpl.MessageInfo, 27) +var file_system_proto_goTypes = []interface{}{ (RebootMethod)(0), // 0: gnoi.system.RebootMethod (RebootStatus_Status)(0), // 1: gnoi.system.RebootStatus.Status - (TracerouteRequest_L4Protocol)(0), // 2: gnoi.system.TracerouteRequest.L4Protocol - (TracerouteResponse_State)(0), // 3: gnoi.system.TracerouteResponse.State - (KillProcessRequest_Signal)(0), // 4: gnoi.system.KillProcessRequest.Signal - (*SwitchControlProcessorRequest)(nil), // 5: gnoi.system.SwitchControlProcessorRequest - (*SwitchControlProcessorResponse)(nil), // 6: gnoi.system.SwitchControlProcessorResponse - (*RebootRequest)(nil), // 7: gnoi.system.RebootRequest - (*RebootResponse)(nil), // 8: gnoi.system.RebootResponse - (*CancelRebootRequest)(nil), // 9: gnoi.system.CancelRebootRequest - (*CancelRebootResponse)(nil), // 10: gnoi.system.CancelRebootResponse - (*RebootStatusRequest)(nil), // 11: gnoi.system.RebootStatusRequest - (*RebootStatusResponse)(nil), // 12: gnoi.system.RebootStatusResponse - (*RebootStatus)(nil), // 13: gnoi.system.RebootStatus - (*TimeRequest)(nil), // 14: gnoi.system.TimeRequest - (*TimeResponse)(nil), // 15: gnoi.system.TimeResponse - (*PingRequest)(nil), // 16: gnoi.system.PingRequest - (*PingResponse)(nil), // 17: gnoi.system.PingResponse - (*TracerouteRequest)(nil), // 18: gnoi.system.TracerouteRequest - (*TracerouteResponse)(nil), // 19: gnoi.system.TracerouteResponse - (*Package)(nil), // 20: gnoi.system.Package - (*SetPackageRequest)(nil), // 21: gnoi.system.SetPackageRequest - (*SetPackageResponse)(nil), // 22: gnoi.system.SetPackageResponse - (*KillProcessRequest)(nil), // 23: gnoi.system.KillProcessRequest - (*KillProcessResponse)(nil), // 24: gnoi.system.KillProcessResponse - (*TracerouteResponse_IcmpExtData)(nil), // 25: gnoi.system.TracerouteResponse.IcmpExtData - nil, // 26: gnoi.system.TracerouteResponse.MplsEntry - (*types.Path)(nil), // 27: gnoi.types.Path - (types.L3Protocol)(0), // 28: gnoi.types.L3Protocol - (*common.RemoteDownload)(nil), // 29: gnoi.common.RemoteDownload - (*types.HashType)(nil), // 30: gnoi.types.HashType -} -var file_system_system_proto_depIdxs = []int32{ - 27, // 0: gnoi.system.SwitchControlProcessorRequest.control_processor:type_name -> gnoi.types.Path - 27, // 1: gnoi.system.SwitchControlProcessorResponse.control_processor:type_name -> gnoi.types.Path + (ProbeResponse_Code)(0), // 2: gnoi.system.ProbeResponse.Code + (ProbeResponse_State)(0), // 3: gnoi.system.ProbeResponse.State + (ProbeResponse_Active)(0), // 4: gnoi.system.ProbeResponse.Active + (TracerouteRequest_L4Protocol)(0), // 5: gnoi.system.TracerouteRequest.L4Protocol + (TracerouteResponse_State)(0), // 6: gnoi.system.TracerouteResponse.State + (KillProcessRequest_Signal)(0), // 7: gnoi.system.KillProcessRequest.Signal + (*SwitchControlProcessorRequest)(nil), // 8: gnoi.system.SwitchControlProcessorRequest + (*SwitchControlProcessorResponse)(nil), // 9: gnoi.system.SwitchControlProcessorResponse + (*RebootRequest)(nil), // 10: gnoi.system.RebootRequest + (*RebootResponse)(nil), // 11: gnoi.system.RebootResponse + (*CancelRebootRequest)(nil), // 12: gnoi.system.CancelRebootRequest + (*CancelRebootResponse)(nil), // 13: gnoi.system.CancelRebootResponse + (*RebootStatusRequest)(nil), // 14: gnoi.system.RebootStatusRequest + (*RebootStatusResponse)(nil), // 15: gnoi.system.RebootStatusResponse + (*RebootStatus)(nil), // 16: gnoi.system.RebootStatus + (*TimeRequest)(nil), // 17: gnoi.system.TimeRequest + (*TimeResponse)(nil), // 18: gnoi.system.TimeResponse + (*PingRequest)(nil), // 19: gnoi.system.PingRequest + (*PingResponse)(nil), // 20: gnoi.system.PingResponse + (*ProbeRequest)(nil), // 21: gnoi.system.ProbeRequest + (*ProbeResponse)(nil), // 22: gnoi.system.ProbeResponse + (*TracerouteRequest)(nil), // 23: gnoi.system.TracerouteRequest + (*TracerouteResponse)(nil), // 24: gnoi.system.TracerouteResponse + (*Package)(nil), // 25: gnoi.system.Package + (*SetPackageRequest)(nil), // 26: gnoi.system.SetPackageRequest + (*SetPackageResponse)(nil), // 27: gnoi.system.SetPackageResponse + (*KillProcessRequest)(nil), // 28: gnoi.system.KillProcessRequest + (*KillProcessResponse)(nil), // 29: gnoi.system.KillProcessResponse + nil, // 30: gnoi.system.ProbeResponse.CodesEntry + nil, // 31: gnoi.system.ProbeResponse.StatesEntry + nil, // 32: gnoi.system.ProbeResponse.ActivesEntry + (*TracerouteResponse_IcmpExtData)(nil), // 33: gnoi.system.TracerouteResponse.IcmpExtData + nil, // 34: gnoi.system.TracerouteResponse.MplsEntry + (*types.Path)(nil), // 35: gnoi.types.Path + (types.L3Protocol)(0), // 36: gnoi.types.L3Protocol + (*common.RemoteDownload)(nil), // 37: gnoi.common.RemoteDownload + (*types.HashType)(nil), // 38: gnoi.types.HashType +} +var file_system_proto_depIdxs = []int32{ + 35, // 0: gnoi.system.SwitchControlProcessorRequest.control_processor:type_name -> gnoi.types.Path + 35, // 1: gnoi.system.SwitchControlProcessorResponse.control_processor:type_name -> gnoi.types.Path 0, // 2: gnoi.system.RebootRequest.method:type_name -> gnoi.system.RebootMethod - 27, // 3: gnoi.system.RebootRequest.subcomponents:type_name -> gnoi.types.Path - 27, // 4: gnoi.system.CancelRebootRequest.subcomponents:type_name -> gnoi.types.Path - 27, // 5: gnoi.system.RebootStatusRequest.subcomponents:type_name -> gnoi.types.Path + 35, // 3: gnoi.system.RebootRequest.subcomponents:type_name -> gnoi.types.Path + 35, // 4: gnoi.system.CancelRebootRequest.subcomponents:type_name -> gnoi.types.Path + 35, // 5: gnoi.system.RebootStatusRequest.subcomponents:type_name -> gnoi.types.Path 0, // 6: gnoi.system.RebootStatusResponse.method:type_name -> gnoi.system.RebootMethod - 13, // 7: gnoi.system.RebootStatusResponse.status:type_name -> gnoi.system.RebootStatus + 16, // 7: gnoi.system.RebootStatusResponse.status:type_name -> gnoi.system.RebootStatus 1, // 8: gnoi.system.RebootStatus.status:type_name -> gnoi.system.RebootStatus.Status - 28, // 9: gnoi.system.PingRequest.l3protocol:type_name -> gnoi.types.L3Protocol - 28, // 10: gnoi.system.TracerouteRequest.l3protocol:type_name -> gnoi.types.L3Protocol - 2, // 11: gnoi.system.TracerouteRequest.l4protocol:type_name -> gnoi.system.TracerouteRequest.L4Protocol - 3, // 12: gnoi.system.TracerouteResponse.state:type_name -> gnoi.system.TracerouteResponse.State - 26, // 13: gnoi.system.TracerouteResponse.mpls:type_name -> gnoi.system.TracerouteResponse.MplsEntry - 25, // 14: gnoi.system.TracerouteResponse.icmp_ext_data:type_name -> gnoi.system.TracerouteResponse.IcmpExtData - 29, // 15: gnoi.system.Package.remote_download:type_name -> gnoi.common.RemoteDownload - 20, // 16: gnoi.system.SetPackageRequest.package:type_name -> gnoi.system.Package - 30, // 17: gnoi.system.SetPackageRequest.hash:type_name -> gnoi.types.HashType - 4, // 18: gnoi.system.KillProcessRequest.signal:type_name -> gnoi.system.KillProcessRequest.Signal - 16, // 19: gnoi.system.System.Ping:input_type -> gnoi.system.PingRequest - 18, // 20: gnoi.system.System.Traceroute:input_type -> gnoi.system.TracerouteRequest - 14, // 21: gnoi.system.System.Time:input_type -> gnoi.system.TimeRequest - 21, // 22: gnoi.system.System.SetPackage:input_type -> gnoi.system.SetPackageRequest - 5, // 23: gnoi.system.System.SwitchControlProcessor:input_type -> gnoi.system.SwitchControlProcessorRequest - 7, // 24: gnoi.system.System.Reboot:input_type -> gnoi.system.RebootRequest - 11, // 25: gnoi.system.System.RebootStatus:input_type -> gnoi.system.RebootStatusRequest - 9, // 26: gnoi.system.System.CancelReboot:input_type -> gnoi.system.CancelRebootRequest - 23, // 27: gnoi.system.System.KillProcess:input_type -> gnoi.system.KillProcessRequest - 17, // 28: gnoi.system.System.Ping:output_type -> gnoi.system.PingResponse - 19, // 29: gnoi.system.System.Traceroute:output_type -> gnoi.system.TracerouteResponse - 15, // 30: gnoi.system.System.Time:output_type -> gnoi.system.TimeResponse - 22, // 31: gnoi.system.System.SetPackage:output_type -> gnoi.system.SetPackageResponse - 6, // 32: gnoi.system.System.SwitchControlProcessor:output_type -> gnoi.system.SwitchControlProcessorResponse - 8, // 33: gnoi.system.System.Reboot:output_type -> gnoi.system.RebootResponse - 12, // 34: gnoi.system.System.RebootStatus:output_type -> gnoi.system.RebootStatusResponse - 10, // 35: gnoi.system.System.CancelReboot:output_type -> gnoi.system.CancelRebootResponse - 24, // 36: gnoi.system.System.KillProcess:output_type -> gnoi.system.KillProcessResponse - 28, // [28:37] is the sub-list for method output_type - 19, // [19:28] is the sub-list for method input_type - 19, // [19:19] is the sub-list for extension type_name - 19, // [19:19] is the sub-list for extension extendee - 0, // [0:19] is the sub-list for field type_name -} - -func init() { file_system_system_proto_init() } -func file_system_system_proto_init() { - if File_system_system_proto != nil { + 36, // 9: gnoi.system.PingRequest.l3protocol:type_name -> gnoi.types.L3Protocol + 2, // 10: gnoi.system.ProbeResponse.code:type_name -> gnoi.system.ProbeResponse.Code + 3, // 11: gnoi.system.ProbeResponse.state:type_name -> gnoi.system.ProbeResponse.State + 4, // 12: gnoi.system.ProbeResponse.active:type_name -> gnoi.system.ProbeResponse.Active + 30, // 13: gnoi.system.ProbeResponse.codes:type_name -> gnoi.system.ProbeResponse.CodesEntry + 31, // 14: gnoi.system.ProbeResponse.states:type_name -> gnoi.system.ProbeResponse.StatesEntry + 32, // 15: gnoi.system.ProbeResponse.actives:type_name -> gnoi.system.ProbeResponse.ActivesEntry + 36, // 16: gnoi.system.TracerouteRequest.l3protocol:type_name -> gnoi.types.L3Protocol + 5, // 17: gnoi.system.TracerouteRequest.l4protocol:type_name -> gnoi.system.TracerouteRequest.L4Protocol + 6, // 18: gnoi.system.TracerouteResponse.state:type_name -> gnoi.system.TracerouteResponse.State + 34, // 19: gnoi.system.TracerouteResponse.mpls:type_name -> gnoi.system.TracerouteResponse.MplsEntry + 33, // 20: gnoi.system.TracerouteResponse.icmp_ext_data:type_name -> gnoi.system.TracerouteResponse.IcmpExtData + 37, // 21: gnoi.system.Package.remote_download:type_name -> gnoi.common.RemoteDownload + 25, // 22: gnoi.system.SetPackageRequest.package:type_name -> gnoi.system.Package + 38, // 23: gnoi.system.SetPackageRequest.hash:type_name -> gnoi.types.HashType + 7, // 24: gnoi.system.KillProcessRequest.signal:type_name -> gnoi.system.KillProcessRequest.Signal + 19, // 25: gnoi.system.System.Ping:input_type -> gnoi.system.PingRequest + 21, // 26: gnoi.system.System.Probe:input_type -> gnoi.system.ProbeRequest + 23, // 27: gnoi.system.System.Traceroute:input_type -> gnoi.system.TracerouteRequest + 17, // 28: gnoi.system.System.Time:input_type -> gnoi.system.TimeRequest + 26, // 29: gnoi.system.System.SetPackage:input_type -> gnoi.system.SetPackageRequest + 8, // 30: gnoi.system.System.SwitchControlProcessor:input_type -> gnoi.system.SwitchControlProcessorRequest + 10, // 31: gnoi.system.System.Reboot:input_type -> gnoi.system.RebootRequest + 14, // 32: gnoi.system.System.RebootStatus:input_type -> gnoi.system.RebootStatusRequest + 12, // 33: gnoi.system.System.CancelReboot:input_type -> gnoi.system.CancelRebootRequest + 28, // 34: gnoi.system.System.KillProcess:input_type -> gnoi.system.KillProcessRequest + 20, // 35: gnoi.system.System.Ping:output_type -> gnoi.system.PingResponse + 22, // 36: gnoi.system.System.Probe:output_type -> gnoi.system.ProbeResponse + 24, // 37: gnoi.system.System.Traceroute:output_type -> gnoi.system.TracerouteResponse + 18, // 38: gnoi.system.System.Time:output_type -> gnoi.system.TimeResponse + 27, // 39: gnoi.system.System.SetPackage:output_type -> gnoi.system.SetPackageResponse + 9, // 40: gnoi.system.System.SwitchControlProcessor:output_type -> gnoi.system.SwitchControlProcessorResponse + 11, // 41: gnoi.system.System.Reboot:output_type -> gnoi.system.RebootResponse + 15, // 42: gnoi.system.System.RebootStatus:output_type -> gnoi.system.RebootStatusResponse + 13, // 43: gnoi.system.System.CancelReboot:output_type -> gnoi.system.CancelRebootResponse + 29, // 44: gnoi.system.System.KillProcess:output_type -> gnoi.system.KillProcessResponse + 35, // [35:45] is the sub-list for method output_type + 25, // [25:35] is the sub-list for method input_type + 25, // [25:25] is the sub-list for extension type_name + 25, // [25:25] is the sub-list for extension extendee + 0, // [0:25] is the sub-list for field type_name +} + +func init() { file_system_proto_init() } +func file_system_proto_init() { + if File_system_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_system_system_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_system_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SwitchControlProcessorRequest); i { case 0: return &v.state @@ -2225,7 +2931,7 @@ func file_system_system_proto_init() { return nil } } - file_system_system_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_system_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SwitchControlProcessorResponse); i { case 0: return &v.state @@ -2237,7 +2943,7 @@ func file_system_system_proto_init() { return nil } } - file_system_system_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_system_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RebootRequest); i { case 0: return &v.state @@ -2249,7 +2955,7 @@ func file_system_system_proto_init() { return nil } } - file_system_system_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_system_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RebootResponse); i { case 0: return &v.state @@ -2261,7 +2967,7 @@ func file_system_system_proto_init() { return nil } } - file_system_system_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_system_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CancelRebootRequest); i { case 0: return &v.state @@ -2273,7 +2979,7 @@ func file_system_system_proto_init() { return nil } } - file_system_system_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_system_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CancelRebootResponse); i { case 0: return &v.state @@ -2285,7 +2991,7 @@ func file_system_system_proto_init() { return nil } } - file_system_system_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_system_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RebootStatusRequest); i { case 0: return &v.state @@ -2297,7 +3003,7 @@ func file_system_system_proto_init() { return nil } } - file_system_system_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_system_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RebootStatusResponse); i { case 0: return &v.state @@ -2309,7 +3015,7 @@ func file_system_system_proto_init() { return nil } } - file_system_system_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_system_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RebootStatus); i { case 0: return &v.state @@ -2321,7 +3027,7 @@ func file_system_system_proto_init() { return nil } } - file_system_system_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_system_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TimeRequest); i { case 0: return &v.state @@ -2333,7 +3039,7 @@ func file_system_system_proto_init() { return nil } } - file_system_system_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_system_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TimeResponse); i { case 0: return &v.state @@ -2345,7 +3051,7 @@ func file_system_system_proto_init() { return nil } } - file_system_system_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_system_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PingRequest); i { case 0: return &v.state @@ -2357,7 +3063,7 @@ func file_system_system_proto_init() { return nil } } - file_system_system_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_system_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PingResponse); i { case 0: return &v.state @@ -2369,7 +3075,31 @@ func file_system_system_proto_init() { return nil } } - file_system_system_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_system_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProbeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_system_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProbeResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_system_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TracerouteRequest); i { case 0: return &v.state @@ -2381,7 +3111,7 @@ func file_system_system_proto_init() { return nil } } - file_system_system_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_system_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TracerouteResponse); i { case 0: return &v.state @@ -2393,7 +3123,7 @@ func file_system_system_proto_init() { return nil } } - file_system_system_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_system_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Package); i { case 0: return &v.state @@ -2405,7 +3135,7 @@ func file_system_system_proto_init() { return nil } } - file_system_system_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_system_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetPackageRequest); i { case 0: return &v.state @@ -2417,7 +3147,7 @@ func file_system_system_proto_init() { return nil } } - file_system_system_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_system_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetPackageResponse); i { case 0: return &v.state @@ -2429,7 +3159,7 @@ func file_system_system_proto_init() { return nil } } - file_system_system_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_system_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*KillProcessRequest); i { case 0: return &v.state @@ -2441,7 +3171,7 @@ func file_system_system_proto_init() { return nil } } - file_system_system_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_system_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*KillProcessResponse); i { case 0: return &v.state @@ -2453,7 +3183,7 @@ func file_system_system_proto_init() { return nil } } - file_system_system_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_system_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TracerouteResponse_IcmpExtData); i { case 0: return &v.state @@ -2466,7 +3196,13 @@ func file_system_system_proto_init() { } } } - file_system_system_proto_msgTypes[16].OneofWrappers = []interface{}{ + file_system_proto_msgTypes[13].OneofWrappers = []interface{}{ + (*ProbeRequest_Ifindex)(nil), + (*ProbeRequest_Ifname)(nil), + (*ProbeRequest_Ifaddr)(nil), + (*ProbeRequest_Remote)(nil), + } + file_system_proto_msgTypes[18].OneofWrappers = []interface{}{ (*SetPackageRequest_Package)(nil), (*SetPackageRequest_Contents)(nil), (*SetPackageRequest_Hash)(nil), @@ -2475,19 +3211,19 @@ func file_system_system_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_system_system_proto_rawDesc, - NumEnums: 5, - NumMessages: 22, + RawDescriptor: file_system_proto_rawDesc, + NumEnums: 8, + NumMessages: 27, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_system_system_proto_goTypes, - DependencyIndexes: file_system_system_proto_depIdxs, - EnumInfos: file_system_system_proto_enumTypes, - MessageInfos: file_system_system_proto_msgTypes, + GoTypes: file_system_proto_goTypes, + DependencyIndexes: file_system_proto_depIdxs, + EnumInfos: file_system_proto_enumTypes, + MessageInfos: file_system_proto_msgTypes, }.Build() - File_system_system_proto = out.File - file_system_system_proto_rawDesc = nil - file_system_system_proto_goTypes = nil - file_system_system_proto_depIdxs = nil + File_system_proto = out.File + file_system_proto_rawDesc = nil + file_system_proto_goTypes = nil + file_system_proto_depIdxs = nil } diff --git a/system/system_grpc.pb.go b/system/system_grpc.pb.go index 628e3347..0c74f608 100755 --- a/system/system_grpc.pb.go +++ b/system/system_grpc.pb.go @@ -1,8 +1,30 @@ +// +// Copyright 2017 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// Generic Network Operation Interface, GNOI, defines a set of RPC's used for +// the operational aspects of network targets. These services are meant to be +// used in conjunction with GNMI for all target state and operational aspects +// of a network target. The gnoi.system.Service is the only mandatory vendor +// implementation. + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc v3.21.10 -// source: system/system.proto +// - protoc-gen-go-grpc v1.3.0 +// - protoc v5.26.1 +// source: system.proto package system @@ -18,18 +40,68 @@ import ( // Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 +const ( + System_Ping_FullMethodName = "/gnoi.system.System/Ping" + System_Probe_FullMethodName = "/gnoi.system.System/Probe" + System_Traceroute_FullMethodName = "/gnoi.system.System/Traceroute" + System_Time_FullMethodName = "/gnoi.system.System/Time" + System_SetPackage_FullMethodName = "/gnoi.system.System/SetPackage" + System_SwitchControlProcessor_FullMethodName = "/gnoi.system.System/SwitchControlProcessor" + System_Reboot_FullMethodName = "/gnoi.system.System/Reboot" + System_RebootStatus_FullMethodName = "/gnoi.system.System/RebootStatus" + System_CancelReboot_FullMethodName = "/gnoi.system.System/CancelReboot" + System_KillProcess_FullMethodName = "/gnoi.system.System/KillProcess" +) + // SystemClient is the client API for System service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type SystemClient interface { + // Ping executes the ping command on the target and streams back + // the results. Some targets may not stream any results until all + // results are in. The stream should provide single ping packet responses + // and must provide summary statistics. Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (System_PingClient, error) + // Probe executes the RFC8335 PROBE command on the target and + // streams back the results. Some targets may not stream any results + // until all results are in. + Probe(ctx context.Context, in *ProbeRequest, opts ...grpc.CallOption) (System_ProbeClient, error) + // Traceroute executes the traceroute command on the target and streams back + // the results. Some targets may not stream any results until all + // results are in. If a hop count is not explicitly provided, + // 30 is used. Traceroute(ctx context.Context, in *TracerouteRequest, opts ...grpc.CallOption) (System_TracerouteClient, error) + // Time returns the current time on the target. Time is typically used to + // test if a target is actually responding. Time(ctx context.Context, in *TimeRequest, opts ...grpc.CallOption) (*TimeResponse, error) + // SetPackage places a software package (possibly including bootable images) + // on the target. The file is sent in sequential messages, each message + // up to 64KB of data. A final message must be sent that includes the hash + // of the data sent. An error is returned if the location does not exist or + // there is an error writing the data. If no checksum is received, the target + // must assume the operation is incomplete and remove the partially + // transmitted file. The target should initially write the file to a temporary + // location so a failure does not destroy the original file. SetPackage(ctx context.Context, opts ...grpc.CallOption) (System_SetPackageClient, error) + // SwitchControlProcessor will switch from the current route processor to the + // provided route processor. If the current route processor is the same as the + // one provided it is a NOOP. If the target does not exist an error is + // returned. SwitchControlProcessor(ctx context.Context, in *SwitchControlProcessorRequest, opts ...grpc.CallOption) (*SwitchControlProcessorResponse, error) + // Reboot causes the target to reboot, possibly at some point in the future. + // If the method of reboot is not supported then the Reboot RPC will fail. + // If the reboot is immediate the command will block until the subcomponents + // have restarted. + // If a reboot on the active control processor is pending the service must + // reject all other reboot requests. + // If a reboot request for active control processor is initiated with other + // pending reboot requests it must be rejected. Reboot(ctx context.Context, in *RebootRequest, opts ...grpc.CallOption) (*RebootResponse, error) + // RebootStatus returns the status of reboot for the target. RebootStatus(ctx context.Context, in *RebootStatusRequest, opts ...grpc.CallOption) (*RebootStatusResponse, error) + // CancelReboot cancels any pending reboot request. CancelReboot(ctx context.Context, in *CancelRebootRequest, opts ...grpc.CallOption) (*CancelRebootResponse, error) + // KillProcess kills an OS process and optionally restarts it. KillProcess(ctx context.Context, in *KillProcessRequest, opts ...grpc.CallOption) (*KillProcessResponse, error) } @@ -42,7 +114,7 @@ func NewSystemClient(cc grpc.ClientConnInterface) SystemClient { } func (c *systemClient) Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (System_PingClient, error) { - stream, err := c.cc.NewStream(ctx, &System_ServiceDesc.Streams[0], "/gnoi.system.System/Ping", opts...) + stream, err := c.cc.NewStream(ctx, &System_ServiceDesc.Streams[0], System_Ping_FullMethodName, opts...) if err != nil { return nil, err } @@ -73,8 +145,40 @@ func (x *systemPingClient) Recv() (*PingResponse, error) { return m, nil } +func (c *systemClient) Probe(ctx context.Context, in *ProbeRequest, opts ...grpc.CallOption) (System_ProbeClient, error) { + stream, err := c.cc.NewStream(ctx, &System_ServiceDesc.Streams[1], System_Probe_FullMethodName, opts...) + if err != nil { + return nil, err + } + x := &systemProbeClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type System_ProbeClient interface { + Recv() (*ProbeResponse, error) + grpc.ClientStream +} + +type systemProbeClient struct { + grpc.ClientStream +} + +func (x *systemProbeClient) Recv() (*ProbeResponse, error) { + m := new(ProbeResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + func (c *systemClient) Traceroute(ctx context.Context, in *TracerouteRequest, opts ...grpc.CallOption) (System_TracerouteClient, error) { - stream, err := c.cc.NewStream(ctx, &System_ServiceDesc.Streams[1], "/gnoi.system.System/Traceroute", opts...) + stream, err := c.cc.NewStream(ctx, &System_ServiceDesc.Streams[2], System_Traceroute_FullMethodName, opts...) if err != nil { return nil, err } @@ -107,7 +211,7 @@ func (x *systemTracerouteClient) Recv() (*TracerouteResponse, error) { func (c *systemClient) Time(ctx context.Context, in *TimeRequest, opts ...grpc.CallOption) (*TimeResponse, error) { out := new(TimeResponse) - err := c.cc.Invoke(ctx, "/gnoi.system.System/Time", in, out, opts...) + err := c.cc.Invoke(ctx, System_Time_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -115,7 +219,7 @@ func (c *systemClient) Time(ctx context.Context, in *TimeRequest, opts ...grpc.C } func (c *systemClient) SetPackage(ctx context.Context, opts ...grpc.CallOption) (System_SetPackageClient, error) { - stream, err := c.cc.NewStream(ctx, &System_ServiceDesc.Streams[2], "/gnoi.system.System/SetPackage", opts...) + stream, err := c.cc.NewStream(ctx, &System_ServiceDesc.Streams[3], System_SetPackage_FullMethodName, opts...) if err != nil { return nil, err } @@ -150,7 +254,7 @@ func (x *systemSetPackageClient) CloseAndRecv() (*SetPackageResponse, error) { func (c *systemClient) SwitchControlProcessor(ctx context.Context, in *SwitchControlProcessorRequest, opts ...grpc.CallOption) (*SwitchControlProcessorResponse, error) { out := new(SwitchControlProcessorResponse) - err := c.cc.Invoke(ctx, "/gnoi.system.System/SwitchControlProcessor", in, out, opts...) + err := c.cc.Invoke(ctx, System_SwitchControlProcessor_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -159,7 +263,7 @@ func (c *systemClient) SwitchControlProcessor(ctx context.Context, in *SwitchCon func (c *systemClient) Reboot(ctx context.Context, in *RebootRequest, opts ...grpc.CallOption) (*RebootResponse, error) { out := new(RebootResponse) - err := c.cc.Invoke(ctx, "/gnoi.system.System/Reboot", in, out, opts...) + err := c.cc.Invoke(ctx, System_Reboot_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -168,7 +272,7 @@ func (c *systemClient) Reboot(ctx context.Context, in *RebootRequest, opts ...gr func (c *systemClient) RebootStatus(ctx context.Context, in *RebootStatusRequest, opts ...grpc.CallOption) (*RebootStatusResponse, error) { out := new(RebootStatusResponse) - err := c.cc.Invoke(ctx, "/gnoi.system.System/RebootStatus", in, out, opts...) + err := c.cc.Invoke(ctx, System_RebootStatus_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -177,7 +281,7 @@ func (c *systemClient) RebootStatus(ctx context.Context, in *RebootStatusRequest func (c *systemClient) CancelReboot(ctx context.Context, in *CancelRebootRequest, opts ...grpc.CallOption) (*CancelRebootResponse, error) { out := new(CancelRebootResponse) - err := c.cc.Invoke(ctx, "/gnoi.system.System/CancelReboot", in, out, opts...) + err := c.cc.Invoke(ctx, System_CancelReboot_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -186,7 +290,7 @@ func (c *systemClient) CancelReboot(ctx context.Context, in *CancelRebootRequest func (c *systemClient) KillProcess(ctx context.Context, in *KillProcessRequest, opts ...grpc.CallOption) (*KillProcessResponse, error) { out := new(KillProcessResponse) - err := c.cc.Invoke(ctx, "/gnoi.system.System/KillProcess", in, out, opts...) + err := c.cc.Invoke(ctx, System_KillProcess_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -197,14 +301,51 @@ func (c *systemClient) KillProcess(ctx context.Context, in *KillProcessRequest, // All implementations must embed UnimplementedSystemServer // for forward compatibility type SystemServer interface { + // Ping executes the ping command on the target and streams back + // the results. Some targets may not stream any results until all + // results are in. The stream should provide single ping packet responses + // and must provide summary statistics. Ping(*PingRequest, System_PingServer) error + // Probe executes the RFC8335 PROBE command on the target and + // streams back the results. Some targets may not stream any results + // until all results are in. + Probe(*ProbeRequest, System_ProbeServer) error + // Traceroute executes the traceroute command on the target and streams back + // the results. Some targets may not stream any results until all + // results are in. If a hop count is not explicitly provided, + // 30 is used. Traceroute(*TracerouteRequest, System_TracerouteServer) error + // Time returns the current time on the target. Time is typically used to + // test if a target is actually responding. Time(context.Context, *TimeRequest) (*TimeResponse, error) + // SetPackage places a software package (possibly including bootable images) + // on the target. The file is sent in sequential messages, each message + // up to 64KB of data. A final message must be sent that includes the hash + // of the data sent. An error is returned if the location does not exist or + // there is an error writing the data. If no checksum is received, the target + // must assume the operation is incomplete and remove the partially + // transmitted file. The target should initially write the file to a temporary + // location so a failure does not destroy the original file. SetPackage(System_SetPackageServer) error + // SwitchControlProcessor will switch from the current route processor to the + // provided route processor. If the current route processor is the same as the + // one provided it is a NOOP. If the target does not exist an error is + // returned. SwitchControlProcessor(context.Context, *SwitchControlProcessorRequest) (*SwitchControlProcessorResponse, error) + // Reboot causes the target to reboot, possibly at some point in the future. + // If the method of reboot is not supported then the Reboot RPC will fail. + // If the reboot is immediate the command will block until the subcomponents + // have restarted. + // If a reboot on the active control processor is pending the service must + // reject all other reboot requests. + // If a reboot request for active control processor is initiated with other + // pending reboot requests it must be rejected. Reboot(context.Context, *RebootRequest) (*RebootResponse, error) + // RebootStatus returns the status of reboot for the target. RebootStatus(context.Context, *RebootStatusRequest) (*RebootStatusResponse, error) + // CancelReboot cancels any pending reboot request. CancelReboot(context.Context, *CancelRebootRequest) (*CancelRebootResponse, error) + // KillProcess kills an OS process and optionally restarts it. KillProcess(context.Context, *KillProcessRequest) (*KillProcessResponse, error) mustEmbedUnimplementedSystemServer() } @@ -216,6 +357,9 @@ type UnimplementedSystemServer struct { func (UnimplementedSystemServer) Ping(*PingRequest, System_PingServer) error { return status.Errorf(codes.Unimplemented, "method Ping not implemented") } +func (UnimplementedSystemServer) Probe(*ProbeRequest, System_ProbeServer) error { + return status.Errorf(codes.Unimplemented, "method Probe not implemented") +} func (UnimplementedSystemServer) Traceroute(*TracerouteRequest, System_TracerouteServer) error { return status.Errorf(codes.Unimplemented, "method Traceroute not implemented") } @@ -274,6 +418,27 @@ func (x *systemPingServer) Send(m *PingResponse) error { return x.ServerStream.SendMsg(m) } +func _System_Probe_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(ProbeRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(SystemServer).Probe(m, &systemProbeServer{stream}) +} + +type System_ProbeServer interface { + Send(*ProbeResponse) error + grpc.ServerStream +} + +type systemProbeServer struct { + grpc.ServerStream +} + +func (x *systemProbeServer) Send(m *ProbeResponse) error { + return x.ServerStream.SendMsg(m) +} + func _System_Traceroute_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(TracerouteRequest) if err := stream.RecvMsg(m); err != nil { @@ -305,7 +470,7 @@ func _System_Time_Handler(srv interface{}, ctx context.Context, dec func(interfa } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gnoi.system.System/Time", + FullMethod: System_Time_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SystemServer).Time(ctx, req.(*TimeRequest)) @@ -349,7 +514,7 @@ func _System_SwitchControlProcessor_Handler(srv interface{}, ctx context.Context } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gnoi.system.System/SwitchControlProcessor", + FullMethod: System_SwitchControlProcessor_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SystemServer).SwitchControlProcessor(ctx, req.(*SwitchControlProcessorRequest)) @@ -367,7 +532,7 @@ func _System_Reboot_Handler(srv interface{}, ctx context.Context, dec func(inter } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gnoi.system.System/Reboot", + FullMethod: System_Reboot_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SystemServer).Reboot(ctx, req.(*RebootRequest)) @@ -385,7 +550,7 @@ func _System_RebootStatus_Handler(srv interface{}, ctx context.Context, dec func } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gnoi.system.System/RebootStatus", + FullMethod: System_RebootStatus_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SystemServer).RebootStatus(ctx, req.(*RebootStatusRequest)) @@ -403,7 +568,7 @@ func _System_CancelReboot_Handler(srv interface{}, ctx context.Context, dec func } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gnoi.system.System/CancelReboot", + FullMethod: System_CancelReboot_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SystemServer).CancelReboot(ctx, req.(*CancelRebootRequest)) @@ -421,7 +586,7 @@ func _System_KillProcess_Handler(srv interface{}, ctx context.Context, dec func( } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gnoi.system.System/KillProcess", + FullMethod: System_KillProcess_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SystemServer).KillProcess(ctx, req.(*KillProcessRequest)) @@ -467,6 +632,11 @@ var System_ServiceDesc = grpc.ServiceDesc{ Handler: _System_Ping_Handler, ServerStreams: true, }, + { + StreamName: "Probe", + Handler: _System_Probe_Handler, + ServerStreams: true, + }, { StreamName: "Traceroute", Handler: _System_Traceroute_Handler, @@ -478,5 +648,5 @@ var System_ServiceDesc = grpc.ServiceDesc{ ClientStreams: true, }, }, - Metadata: "system/system.proto", + Metadata: "system.proto", }