1379 lines
30 KiB
Protocol Buffer
1379 lines
30 KiB
Protocol Buffer
// Copyright (C) 2015-2017 Nippon Telegraph and Telephone Corporation.
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person
|
|
// obtaining a copy of this software and associated documentation files
|
|
// (the "Software"), to deal in the Software without restriction,
|
|
// including without limitation the rights to use, copy, modify, merge,
|
|
// publish, distribute, sublicense, and/or sell copies of the Software,
|
|
// and to permit persons to whom the Software is furnished to do so,
|
|
// subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be
|
|
// included in all copies or substantial portions of the Software.
|
|
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
syntax = "proto3";
|
|
|
|
package api;
|
|
|
|
import "api/attribute.proto";
|
|
import "api/capability.proto";
|
|
import "api/common.proto";
|
|
import "api/extcom.proto";
|
|
import "api/nlri.proto";
|
|
import "google/protobuf/timestamp.proto";
|
|
|
|
option go_package = "github.com/osrg/gobgp/v4/api;api";
|
|
|
|
// Interface exported by the server.
|
|
service GoBgpService {
|
|
rpc StartBgp(StartBgpRequest) returns (StartBgpResponse);
|
|
rpc StopBgp(StopBgpRequest) returns (StopBgpResponse);
|
|
rpc GetBgp(GetBgpRequest) returns (GetBgpResponse);
|
|
|
|
rpc WatchEvent(WatchEventRequest) returns (stream WatchEventResponse);
|
|
|
|
rpc AddPeer(AddPeerRequest) returns (AddPeerResponse);
|
|
rpc DeletePeer(DeletePeerRequest) returns (DeletePeerResponse);
|
|
rpc ListPeer(ListPeerRequest) returns (stream ListPeerResponse);
|
|
rpc UpdatePeer(UpdatePeerRequest) returns (UpdatePeerResponse);
|
|
rpc ResetPeer(ResetPeerRequest) returns (ResetPeerResponse);
|
|
rpc ShutdownPeer(ShutdownPeerRequest) returns (ShutdownPeerResponse);
|
|
rpc EnablePeer(EnablePeerRequest) returns (EnablePeerResponse);
|
|
rpc DisablePeer(DisablePeerRequest) returns (DisablePeerResponse);
|
|
|
|
rpc AddPeerGroup(AddPeerGroupRequest) returns (AddPeerGroupResponse);
|
|
rpc DeletePeerGroup(DeletePeerGroupRequest) returns (DeletePeerGroupResponse);
|
|
rpc ListPeerGroup(ListPeerGroupRequest) returns (stream ListPeerGroupResponse);
|
|
rpc UpdatePeerGroup(UpdatePeerGroupRequest) returns (UpdatePeerGroupResponse);
|
|
|
|
rpc AddDynamicNeighbor(AddDynamicNeighborRequest) returns (AddDynamicNeighborResponse);
|
|
rpc ListDynamicNeighbor(ListDynamicNeighborRequest) returns (stream ListDynamicNeighborResponse);
|
|
rpc DeleteDynamicNeighbor(DeleteDynamicNeighborRequest) returns (DeleteDynamicNeighborResponse);
|
|
|
|
rpc AddPath(AddPathRequest) returns (AddPathResponse);
|
|
rpc DeletePath(DeletePathRequest) returns (DeletePathResponse);
|
|
rpc ListPath(ListPathRequest) returns (stream ListPathResponse);
|
|
rpc AddPathStream(stream AddPathStreamRequest) returns (AddPathStreamResponse);
|
|
|
|
rpc GetTable(GetTableRequest) returns (GetTableResponse);
|
|
|
|
rpc AddVrf(AddVrfRequest) returns (AddVrfResponse);
|
|
rpc DeleteVrf(DeleteVrfRequest) returns (DeleteVrfResponse);
|
|
rpc ListVrf(ListVrfRequest) returns (stream ListVrfResponse);
|
|
|
|
rpc AddPolicy(AddPolicyRequest) returns (AddPolicyResponse);
|
|
rpc DeletePolicy(DeletePolicyRequest) returns (DeletePolicyResponse);
|
|
rpc ListPolicy(ListPolicyRequest) returns (stream ListPolicyResponse);
|
|
rpc SetPolicies(SetPoliciesRequest) returns (SetPoliciesResponse);
|
|
|
|
rpc AddDefinedSet(AddDefinedSetRequest) returns (AddDefinedSetResponse);
|
|
rpc DeleteDefinedSet(DeleteDefinedSetRequest) returns (DeleteDefinedSetResponse);
|
|
rpc ListDefinedSet(ListDefinedSetRequest) returns (stream ListDefinedSetResponse);
|
|
|
|
rpc AddStatement(AddStatementRequest) returns (AddStatementResponse);
|
|
rpc DeleteStatement(DeleteStatementRequest) returns (DeleteStatementResponse);
|
|
rpc ListStatement(ListStatementRequest) returns (stream ListStatementResponse);
|
|
|
|
rpc AddPolicyAssignment(AddPolicyAssignmentRequest) returns (AddPolicyAssignmentResponse);
|
|
rpc DeletePolicyAssignment(DeletePolicyAssignmentRequest) returns (DeletePolicyAssignmentResponse);
|
|
rpc ListPolicyAssignment(ListPolicyAssignmentRequest) returns (stream ListPolicyAssignmentResponse);
|
|
rpc SetPolicyAssignment(SetPolicyAssignmentRequest) returns (SetPolicyAssignmentResponse);
|
|
|
|
rpc AddRpki(AddRpkiRequest) returns (AddRpkiResponse);
|
|
rpc DeleteRpki(DeleteRpkiRequest) returns (DeleteRpkiResponse);
|
|
rpc ListRpki(ListRpkiRequest) returns (stream ListRpkiResponse);
|
|
rpc EnableRpki(EnableRpkiRequest) returns (EnableRpkiResponse);
|
|
rpc DisableRpki(DisableRpkiRequest) returns (DisableRpkiResponse);
|
|
rpc ResetRpki(ResetRpkiRequest) returns (ResetRpkiResponse);
|
|
rpc ListRpkiTable(ListRpkiTableRequest) returns (stream ListRpkiTableResponse);
|
|
|
|
rpc EnableZebra(EnableZebraRequest) returns (EnableZebraResponse);
|
|
|
|
rpc EnableMrt(EnableMrtRequest) returns (EnableMrtResponse);
|
|
rpc DisableMrt(DisableMrtRequest) returns (DisableMrtResponse);
|
|
|
|
rpc AddBmp(AddBmpRequest) returns (AddBmpResponse);
|
|
rpc DeleteBmp(DeleteBmpRequest) returns (DeleteBmpResponse);
|
|
rpc ListBmp(ListBmpRequest) returns (stream ListBmpResponse);
|
|
|
|
rpc SetLogLevel(SetLogLevelRequest) returns (SetLogLevelResponse);
|
|
}
|
|
|
|
message StartBgpRequest {
|
|
Global global = 1;
|
|
}
|
|
|
|
message StartBgpResponse {}
|
|
|
|
message StopBgpRequest {
|
|
// Allows the Graceful Restart procedure on the remote peers by not sending a NOTIFICATION message to GR-enabled peers.
|
|
bool allow_graceful_restart = 1;
|
|
}
|
|
|
|
message StopBgpResponse {}
|
|
|
|
message GetBgpRequest {}
|
|
|
|
message GetBgpResponse {
|
|
Global global = 1;
|
|
}
|
|
|
|
message WatchEventRequest {
|
|
message Peer {}
|
|
Peer peer = 1;
|
|
|
|
message Table {
|
|
message Filter {
|
|
enum Type {
|
|
TYPE_UNSPECIFIED = 0;
|
|
TYPE_BEST = 1;
|
|
TYPE_ADJIN = 2;
|
|
TYPE_POST_POLICY = 3;
|
|
TYPE_EOR = 4;
|
|
}
|
|
Type type = 1;
|
|
bool init = 2;
|
|
string peer_address = 3;
|
|
string peer_group = 4;
|
|
}
|
|
repeated Filter filters = 1;
|
|
}
|
|
Table table = 2;
|
|
|
|
// Max number of paths to include in a single message. 0 for unlimited.
|
|
uint32 batch_size = 3;
|
|
}
|
|
|
|
message WatchEventResponse {
|
|
message PeerEvent {
|
|
enum Type {
|
|
TYPE_UNSPECIFIED = 0;
|
|
TYPE_INIT = 1;
|
|
TYPE_END_OF_INIT = 2;
|
|
TYPE_STATE = 3;
|
|
}
|
|
Type type = 1;
|
|
Peer peer = 2;
|
|
}
|
|
|
|
message TableEvent {
|
|
repeated Path paths = 2;
|
|
}
|
|
|
|
oneof event {
|
|
PeerEvent peer = 2;
|
|
TableEvent table = 3;
|
|
}
|
|
}
|
|
|
|
message AddPeerRequest {
|
|
Peer peer = 1;
|
|
}
|
|
|
|
message AddPeerResponse {}
|
|
|
|
message DeletePeerRequest {
|
|
string address = 1;
|
|
string interface = 2;
|
|
}
|
|
|
|
message DeletePeerResponse {}
|
|
|
|
message ListPeerRequest {
|
|
string address = 1;
|
|
bool enable_advertised = 2;
|
|
}
|
|
|
|
message ListPeerResponse {
|
|
Peer peer = 1;
|
|
}
|
|
|
|
message UpdatePeerRequest {
|
|
Peer peer = 1;
|
|
// Calls SoftResetIn after updating the peer configuration if needed.
|
|
bool do_soft_reset_in = 2;
|
|
}
|
|
|
|
message UpdatePeerResponse {
|
|
// Indicates whether calling SoftResetIn is required due to this update. If
|
|
// "true" is set, the client should call SoftResetIn manually. If
|
|
// "do_soft_reset_in = true" is set in the request, always returned with
|
|
// "false".
|
|
bool needs_soft_reset_in = 1;
|
|
}
|
|
|
|
message ResetPeerRequest {
|
|
string address = 1;
|
|
string communication = 2;
|
|
bool soft = 3;
|
|
enum Direction {
|
|
DIRECTION_UNSPECIFIED = 0;
|
|
DIRECTION_IN = 1;
|
|
DIRECTION_OUT = 2;
|
|
DIRECTION_BOTH = 3;
|
|
}
|
|
Direction direction = 4;
|
|
}
|
|
|
|
message ResetPeerResponse {}
|
|
|
|
message ShutdownPeerRequest {
|
|
string address = 1;
|
|
string communication = 2;
|
|
}
|
|
|
|
message ShutdownPeerResponse {}
|
|
|
|
message EnablePeerRequest {
|
|
string address = 1;
|
|
}
|
|
|
|
message EnablePeerResponse {}
|
|
|
|
message DisablePeerRequest {
|
|
string address = 1;
|
|
string communication = 2;
|
|
}
|
|
|
|
message DisablePeerResponse {}
|
|
|
|
message AddPeerGroupRequest {
|
|
PeerGroup peer_group = 1;
|
|
}
|
|
|
|
message AddPeerGroupResponse {}
|
|
|
|
message DeletePeerGroupRequest {
|
|
string name = 1;
|
|
}
|
|
|
|
message DeletePeerGroupResponse {}
|
|
|
|
message UpdatePeerGroupRequest {
|
|
PeerGroup peer_group = 1;
|
|
bool do_soft_reset_in = 2;
|
|
}
|
|
|
|
message UpdatePeerGroupResponse {
|
|
bool needs_soft_reset_in = 1;
|
|
}
|
|
|
|
message ListPeerGroupRequest {
|
|
string peer_group_name = 1;
|
|
}
|
|
|
|
message ListPeerGroupResponse {
|
|
PeerGroup peer_group = 1;
|
|
}
|
|
|
|
message AddDynamicNeighborRequest {
|
|
DynamicNeighbor dynamic_neighbor = 1;
|
|
}
|
|
|
|
message AddDynamicNeighborResponse {}
|
|
|
|
message DeleteDynamicNeighborRequest {
|
|
string prefix = 1;
|
|
string peer_group = 2;
|
|
}
|
|
|
|
message DeleteDynamicNeighborResponse {}
|
|
|
|
message ListDynamicNeighborRequest {
|
|
string peer_group = 1;
|
|
}
|
|
|
|
message ListDynamicNeighborResponse {
|
|
DynamicNeighbor dynamic_neighbor = 1;
|
|
}
|
|
|
|
message AddPathRequest {
|
|
TableType table_type = 1;
|
|
string vrf_id = 2;
|
|
Path path = 3;
|
|
}
|
|
|
|
message AddPathResponse {
|
|
bytes uuid = 1;
|
|
}
|
|
|
|
message DeletePathRequest {
|
|
TableType table_type = 1;
|
|
string vrf_id = 2;
|
|
Family family = 3;
|
|
Path path = 4;
|
|
bytes uuid = 5;
|
|
}
|
|
|
|
message DeletePathResponse {}
|
|
|
|
// API representation of table.LookupPrefix
|
|
message TableLookupPrefix {
|
|
// API representation of table.LookupOption
|
|
enum Type {
|
|
TYPE_UNSPECIFIED = 0;
|
|
TYPE_EXACT = 1;
|
|
TYPE_LONGER = 2;
|
|
TYPE_SHORTER = 3;
|
|
}
|
|
string prefix = 1;
|
|
Type type = 2;
|
|
string rd = 3;
|
|
}
|
|
|
|
message ListPathRequest {
|
|
TableType table_type = 1;
|
|
string name = 2;
|
|
Family family = 3;
|
|
repeated TableLookupPrefix prefixes = 4;
|
|
enum SortType {
|
|
SORT_TYPE_UNSPECIFIED = 0;
|
|
SORT_TYPE_PREFIX = 1;
|
|
}
|
|
SortType sort_type = 5;
|
|
bool enable_filtered = 6;
|
|
bool enable_nlri_binary = 7;
|
|
bool enable_attribute_binary = 8;
|
|
// enable_only_binary == true means that only nlri_binary and pattrs_binary
|
|
// will be used instead of nlri and pattrs for each Path in ListPathResponse.
|
|
bool enable_only_binary = 9;
|
|
// max ammount of paths to be allocated, unlimited by default
|
|
uint64 batch_size = 10;
|
|
}
|
|
|
|
message ListPathResponse {
|
|
Destination destination = 1;
|
|
}
|
|
|
|
message AddPathStreamRequest {
|
|
TableType table_type = 1;
|
|
string vrf_id = 2;
|
|
repeated Path paths = 3;
|
|
}
|
|
|
|
message AddPathStreamResponse {}
|
|
|
|
message GetTableRequest {
|
|
TableType table_type = 1;
|
|
Family family = 2;
|
|
string name = 3;
|
|
}
|
|
|
|
message GetTableResponse {
|
|
uint64 num_destination = 1;
|
|
uint64 num_path = 2;
|
|
uint64 num_accepted = 3; // only meaningful when type == ADJ_IN
|
|
}
|
|
|
|
message AddVrfRequest {
|
|
Vrf vrf = 1;
|
|
}
|
|
|
|
message AddVrfResponse {}
|
|
|
|
message DeleteVrfRequest {
|
|
string name = 1;
|
|
}
|
|
|
|
message DeleteVrfResponse {}
|
|
|
|
message ListVrfRequest {
|
|
string name = 1;
|
|
}
|
|
|
|
message ListVrfResponse {
|
|
Vrf vrf = 1;
|
|
}
|
|
|
|
message AddPolicyRequest {
|
|
Policy policy = 1;
|
|
// if this flag is set, gobgpd won't define new statements
|
|
// but refer existing statements using statement's names in this arguments.
|
|
bool refer_existing_statements = 2;
|
|
}
|
|
|
|
message AddPolicyResponse {}
|
|
|
|
message DeletePolicyRequest {
|
|
Policy policy = 1;
|
|
// if this flag is set, gobgpd won't delete any statements
|
|
// even if some statements get not used by any policy by this operation.
|
|
bool preserve_statements = 2;
|
|
bool all = 3;
|
|
}
|
|
|
|
message DeletePolicyResponse {}
|
|
|
|
message ListPolicyRequest {
|
|
string name = 1;
|
|
}
|
|
|
|
message ListPolicyResponse {
|
|
Policy policy = 1;
|
|
}
|
|
|
|
message SetPoliciesRequest {
|
|
repeated DefinedSet defined_sets = 1;
|
|
repeated Policy policies = 2;
|
|
repeated PolicyAssignment assignments = 3;
|
|
}
|
|
|
|
message SetPoliciesResponse {}
|
|
|
|
message AddDefinedSetRequest {
|
|
DefinedSet defined_set = 1;
|
|
bool replace = 2;
|
|
}
|
|
|
|
message AddDefinedSetResponse {}
|
|
|
|
message DeleteDefinedSetRequest {
|
|
DefinedSet defined_set = 1;
|
|
bool all = 2;
|
|
}
|
|
|
|
message DeleteDefinedSetResponse {}
|
|
|
|
message ListDefinedSetRequest {
|
|
DefinedType defined_type = 1;
|
|
string name = 2;
|
|
}
|
|
|
|
message ListDefinedSetResponse {
|
|
DefinedSet defined_set = 1;
|
|
}
|
|
|
|
message AddStatementRequest {
|
|
Statement statement = 1;
|
|
}
|
|
|
|
message AddStatementResponse {}
|
|
|
|
message DeleteStatementRequest {
|
|
Statement statement = 1;
|
|
bool all = 2;
|
|
}
|
|
|
|
message DeleteStatementResponse {}
|
|
|
|
message ListStatementRequest {
|
|
string name = 1;
|
|
}
|
|
|
|
message ListStatementResponse {
|
|
Statement statement = 1;
|
|
}
|
|
|
|
message AddPolicyAssignmentRequest {
|
|
PolicyAssignment assignment = 1;
|
|
}
|
|
|
|
message AddPolicyAssignmentResponse {}
|
|
|
|
message DeletePolicyAssignmentRequest {
|
|
PolicyAssignment assignment = 1;
|
|
bool all = 2;
|
|
}
|
|
|
|
message DeletePolicyAssignmentResponse {}
|
|
|
|
message ListPolicyAssignmentRequest {
|
|
string name = 1;
|
|
PolicyDirection direction = 2;
|
|
}
|
|
|
|
message ListPolicyAssignmentResponse {
|
|
PolicyAssignment assignment = 1;
|
|
}
|
|
|
|
message SetPolicyAssignmentRequest {
|
|
PolicyAssignment assignment = 1;
|
|
}
|
|
|
|
message SetPolicyAssignmentResponse {}
|
|
|
|
message AddRpkiRequest {
|
|
string address = 1;
|
|
uint32 port = 2;
|
|
int64 lifetime = 3;
|
|
}
|
|
|
|
message AddRpkiResponse {}
|
|
|
|
message DeleteRpkiRequest {
|
|
string address = 1;
|
|
uint32 port = 2;
|
|
}
|
|
|
|
message DeleteRpkiResponse {}
|
|
|
|
message ListRpkiRequest {
|
|
Family family = 1;
|
|
}
|
|
|
|
message ListRpkiResponse {
|
|
Rpki server = 1;
|
|
}
|
|
|
|
message EnableRpkiRequest {
|
|
string address = 1;
|
|
uint32 port = 2;
|
|
}
|
|
|
|
message EnableRpkiResponse {}
|
|
|
|
message DisableRpkiRequest {
|
|
string address = 1;
|
|
uint32 port = 2;
|
|
}
|
|
|
|
message DisableRpkiResponse {}
|
|
|
|
message ResetRpkiRequest {
|
|
string address = 1;
|
|
uint32 port = 2;
|
|
bool soft = 3;
|
|
}
|
|
|
|
message ResetRpkiResponse {}
|
|
|
|
message ListRpkiTableRequest {
|
|
Family family = 1;
|
|
}
|
|
|
|
message ListRpkiTableResponse {
|
|
Roa roa = 1;
|
|
}
|
|
|
|
message EnableZebraRequest {
|
|
string url = 1;
|
|
repeated string route_types = 2;
|
|
uint32 version = 3;
|
|
bool nexthop_trigger_enable = 4;
|
|
uint32 nexthop_trigger_delay = 5;
|
|
uint32 mpls_label_range_size = 6;
|
|
string software_name = 7;
|
|
}
|
|
|
|
message EnableZebraResponse {}
|
|
|
|
message EnableMrtRequest {
|
|
enum DumpType {
|
|
DUMP_TYPE_UNSPECIFIED = 0;
|
|
DUMP_TYPE_UPDATES = 1;
|
|
DUMP_TYPE_TABLE = 2;
|
|
}
|
|
DumpType dump_type = 1;
|
|
string filename = 2;
|
|
uint64 dump_interval = 3;
|
|
uint64 rotation_interval = 4;
|
|
}
|
|
|
|
message EnableMrtResponse {}
|
|
|
|
message DisableMrtRequest {
|
|
string filename = 1;
|
|
}
|
|
|
|
message DisableMrtResponse {}
|
|
|
|
message AddBmpRequest {
|
|
string address = 1;
|
|
uint32 port = 2;
|
|
enum MonitoringPolicy {
|
|
MONITORING_POLICY_UNSPECIFIED = 0;
|
|
MONITORING_POLICY_PRE = 1;
|
|
MONITORING_POLICY_POST = 2;
|
|
MONITORING_POLICY_BOTH = 3;
|
|
MONITORING_POLICY_LOCAL = 4;
|
|
MONITORING_POLICY_ALL = 5;
|
|
}
|
|
MonitoringPolicy policy = 3;
|
|
int32 statistics_timeout = 4;
|
|
string sys_name = 5;
|
|
string sys_descr = 6;
|
|
}
|
|
|
|
message AddBmpResponse {}
|
|
|
|
message DeleteBmpRequest {
|
|
string address = 1;
|
|
uint32 port = 2;
|
|
}
|
|
|
|
message DeleteBmpResponse {}
|
|
|
|
message ListBmpRequest {}
|
|
|
|
message ListBmpResponse {
|
|
message BmpStation {
|
|
message Conf {
|
|
string address = 1;
|
|
uint32 port = 2;
|
|
}
|
|
Conf conf = 1;
|
|
message State {
|
|
google.protobuf.Timestamp uptime = 1;
|
|
google.protobuf.Timestamp downtime = 2;
|
|
}
|
|
State state = 2;
|
|
}
|
|
|
|
BmpStation station = 1;
|
|
}
|
|
|
|
enum TableType {
|
|
TABLE_TYPE_UNSPECIFIED = 0;
|
|
TABLE_TYPE_GLOBAL = 1;
|
|
TABLE_TYPE_LOCAL = 2;
|
|
TABLE_TYPE_ADJ_IN = 3;
|
|
TABLE_TYPE_ADJ_OUT = 4;
|
|
TABLE_TYPE_VRF = 5;
|
|
}
|
|
|
|
enum ValidationState {
|
|
VALIDATION_STATE_UNSPECIFIED = 0;
|
|
VALIDATION_STATE_NONE = 1;
|
|
VALIDATION_STATE_NOT_FOUND = 2;
|
|
VALIDATION_STATE_VALID = 3;
|
|
VALIDATION_STATE_INVALID = 4;
|
|
}
|
|
|
|
message Validation {
|
|
enum Reason {
|
|
REASON_UNSPECIFIED = 0;
|
|
REASON_NONE = 1;
|
|
REASON_ASN = 2;
|
|
REASON_LENGTH = 3;
|
|
}
|
|
|
|
ValidationState state = 1;
|
|
Reason reason = 2;
|
|
repeated Roa matched = 3;
|
|
repeated Roa unmatched_asn = 4;
|
|
repeated Roa unmatched_length = 5;
|
|
}
|
|
|
|
message Path {
|
|
NLRI nlri = 1;
|
|
repeated Attribute pattrs = 2;
|
|
google.protobuf.Timestamp age = 3;
|
|
bool best = 4;
|
|
bool is_withdraw = 5;
|
|
Validation validation = 7;
|
|
bool no_implicit_withdraw = 8;
|
|
Family family = 9;
|
|
uint32 source_asn = 10;
|
|
string source_id = 11;
|
|
bool filtered = 12;
|
|
bool stale = 13;
|
|
bool is_from_external = 14;
|
|
string neighbor_ip = 15;
|
|
bytes uuid = 16; // only paths installed by AddPath API have this
|
|
bool is_nexthop_invalid = 17;
|
|
uint32 identifier = 18;
|
|
uint32 local_identifier = 19;
|
|
bytes nlri_binary = 20;
|
|
repeated bytes pattrs_binary = 21;
|
|
bool send_max_filtered = 22;
|
|
}
|
|
|
|
message Destination {
|
|
string prefix = 1;
|
|
repeated Path paths = 2;
|
|
}
|
|
|
|
message Peer {
|
|
ApplyPolicy apply_policy = 1;
|
|
PeerConf conf = 2;
|
|
EbgpMultihop ebgp_multihop = 3;
|
|
RouteReflector route_reflector = 4;
|
|
PeerState state = 5;
|
|
Timers timers = 6;
|
|
Transport transport = 7;
|
|
RouteServer route_server = 8;
|
|
GracefulRestart graceful_restart = 9;
|
|
repeated AfiSafi afi_safis = 10;
|
|
TtlSecurity ttl_security = 11;
|
|
}
|
|
|
|
message PeerGroup {
|
|
ApplyPolicy apply_policy = 1;
|
|
PeerGroupConf conf = 2;
|
|
EbgpMultihop ebgp_multihop = 3;
|
|
RouteReflector route_reflector = 4;
|
|
PeerGroupState info = 5;
|
|
Timers timers = 6;
|
|
Transport transport = 7;
|
|
RouteServer route_server = 8;
|
|
GracefulRestart graceful_restart = 9;
|
|
repeated AfiSafi afi_safis = 10;
|
|
TtlSecurity ttl_security = 11;
|
|
}
|
|
|
|
message DynamicNeighbor {
|
|
string prefix = 1;
|
|
string peer_group = 2;
|
|
}
|
|
|
|
message ApplyPolicy {
|
|
PolicyAssignment export_policy = 1;
|
|
PolicyAssignment import_policy = 2;
|
|
}
|
|
|
|
message PrefixLimit {
|
|
Family family = 1;
|
|
uint32 max_prefixes = 2;
|
|
uint32 shutdown_threshold_pct = 3;
|
|
}
|
|
|
|
enum PeerType {
|
|
PEER_TYPE_UNSPECIFIED = 0;
|
|
PEER_TYPE_INTERNAL = 1;
|
|
PEER_TYPE_EXTERNAL = 2;
|
|
}
|
|
|
|
enum RemovePrivate {
|
|
REMOVE_PRIVATE_UNSPECIFIED = 0;
|
|
REMOVE_PRIVATE_ALL = 1;
|
|
REMOVE_PRIVATE_REPLACE = 2;
|
|
}
|
|
|
|
message PeerConf {
|
|
string auth_password = 1;
|
|
string description = 2;
|
|
uint32 local_asn = 3;
|
|
string neighbor_address = 4;
|
|
uint32 peer_asn = 5;
|
|
string peer_group = 6;
|
|
PeerType type = 7;
|
|
RemovePrivate remove_private = 8;
|
|
bool route_flap_damping = 9;
|
|
uint32 send_community = 10;
|
|
string neighbor_interface = 11;
|
|
string vrf = 12;
|
|
uint32 allow_own_asn = 13;
|
|
bool replace_peer_asn = 14;
|
|
bool admin_down = 15;
|
|
bool send_software_version = 16;
|
|
bool allow_aspath_loop_local = 17;
|
|
}
|
|
|
|
message PeerGroupConf {
|
|
string auth_password = 1;
|
|
string description = 2;
|
|
uint32 local_asn = 3;
|
|
uint32 peer_asn = 4;
|
|
string peer_group_name = 5;
|
|
PeerType type = 6;
|
|
RemovePrivate remove_private = 7;
|
|
bool route_flap_damping = 8;
|
|
uint32 send_community = 9;
|
|
bool send_software_version = 10;
|
|
}
|
|
|
|
message PeerGroupState {
|
|
string auth_password = 1;
|
|
string description = 2;
|
|
uint32 local_asn = 3;
|
|
uint32 peer_asn = 4;
|
|
string peer_group_name = 5;
|
|
PeerType type = 6;
|
|
RemovePrivate remove_private = 7;
|
|
bool route_flap_damping = 8;
|
|
uint32 send_community = 9;
|
|
uint32 total_paths = 10;
|
|
uint32 total_prefixes = 11;
|
|
}
|
|
|
|
message TtlSecurity {
|
|
bool enabled = 1;
|
|
uint32 ttl_min = 2;
|
|
}
|
|
|
|
message EbgpMultihop {
|
|
bool enabled = 1;
|
|
uint32 multihop_ttl = 2;
|
|
}
|
|
|
|
message RouteReflector {
|
|
bool route_reflector_client = 1;
|
|
string route_reflector_cluster_id = 2;
|
|
}
|
|
|
|
message PeerState {
|
|
string auth_password = 1;
|
|
string description = 2;
|
|
uint32 local_asn = 3;
|
|
Messages messages = 4;
|
|
string neighbor_address = 5;
|
|
uint32 peer_asn = 6;
|
|
string peer_group = 7;
|
|
PeerType type = 8;
|
|
Queues queues = 9;
|
|
RemovePrivate remove_private = 10;
|
|
bool route_flap_damping = 11;
|
|
uint32 send_community = 12;
|
|
enum SessionState {
|
|
SESSION_STATE_UNSPECIFIED = 0;
|
|
SESSION_STATE_IDLE = 1;
|
|
SESSION_STATE_CONNECT = 2;
|
|
SESSION_STATE_ACTIVE = 3;
|
|
SESSION_STATE_OPENSENT = 4;
|
|
SESSION_STATE_OPENCONFIRM = 5;
|
|
SESSION_STATE_ESTABLISHED = 6;
|
|
}
|
|
SessionState session_state = 13;
|
|
enum AdminState {
|
|
ADMIN_STATE_UNSPECIFIED = 0;
|
|
ADMIN_STATE_UP = 1;
|
|
ADMIN_STATE_DOWN = 2;
|
|
ADMIN_STATE_PFX_CT = 3; // prefix counter over limit
|
|
}
|
|
AdminState admin_state = 15;
|
|
uint32 out_q = 16;
|
|
uint32 flops = 17;
|
|
repeated Capability remote_cap = 18;
|
|
repeated Capability local_cap = 19;
|
|
string router_id = 20;
|
|
// State change reason information
|
|
enum DisconnectReason {
|
|
DISCONNECT_REASON_UNSPECIFIED = 0;
|
|
DISCONNECT_REASON_ADMIN_DOWN = 1;
|
|
DISCONNECT_REASON_HOLD_TIMER_EXPIRED = 2;
|
|
DISCONNECT_REASON_NOTIFICATION_SENT = 3;
|
|
DISCONNECT_REASON_NOTIFICATION_RECEIVED = 4;
|
|
DISCONNECT_REASON_READ_FAILED = 5;
|
|
DISCONNECT_REASON_WRITE_FAILED = 6;
|
|
DISCONNECT_REASON_IDLE_TIMER_EXPIRED = 7;
|
|
DISCONNECT_REASON_RESTART_TIMER_EXPIRED = 8;
|
|
DISCONNECT_REASON_GRACEFUL_RESTART = 9;
|
|
DISCONNECT_REASON_INVALID_MSG = 10;
|
|
DISCONNECT_REASON_HARD_RESET = 11;
|
|
DISCONNECT_REASON_DECONFIGURED = 12;
|
|
DISCONNECT_REASON_BAD_PEER_AS = 13;
|
|
}
|
|
DisconnectReason disconnect_reason = 21;
|
|
string disconnect_message = 22;
|
|
}
|
|
|
|
message Messages {
|
|
Message received = 1;
|
|
Message sent = 2;
|
|
}
|
|
|
|
message Message {
|
|
uint64 notification = 1;
|
|
uint64 update = 2;
|
|
uint64 open = 3;
|
|
uint64 keepalive = 4;
|
|
uint64 refresh = 5;
|
|
uint64 discarded = 6;
|
|
uint64 total = 7;
|
|
uint64 withdraw_update = 8;
|
|
uint64 withdraw_prefix = 9;
|
|
}
|
|
|
|
message Queues {
|
|
uint32 input = 1;
|
|
uint32 output = 2;
|
|
}
|
|
|
|
message Timers {
|
|
TimersConfig config = 1;
|
|
TimersState state = 2;
|
|
}
|
|
|
|
message TimersConfig {
|
|
uint64 connect_retry = 1;
|
|
uint64 hold_time = 2;
|
|
uint64 keepalive_interval = 3;
|
|
uint64 minimum_advertisement_interval = 4;
|
|
uint64 idle_hold_time_after_reset = 5;
|
|
}
|
|
|
|
message TimersState {
|
|
uint64 connect_retry = 1;
|
|
uint64 hold_time = 2;
|
|
uint64 keepalive_interval = 3;
|
|
uint64 minimum_advertisement_interval = 4;
|
|
uint64 negotiated_hold_time = 5;
|
|
google.protobuf.Timestamp uptime = 6;
|
|
google.protobuf.Timestamp downtime = 7;
|
|
}
|
|
|
|
message Transport {
|
|
string local_address = 1;
|
|
uint32 local_port = 2;
|
|
bool mtu_discovery = 3;
|
|
bool passive_mode = 4;
|
|
string remote_address = 5;
|
|
uint32 remote_port = 6;
|
|
uint32 tcp_mss = 7;
|
|
string bind_interface = 8;
|
|
}
|
|
|
|
message RouteServer {
|
|
bool route_server_client = 1;
|
|
bool secondary_route = 2;
|
|
}
|
|
|
|
message GracefulRestart {
|
|
bool enabled = 1;
|
|
uint32 restart_time = 2;
|
|
bool helper_only = 3;
|
|
uint32 deferral_time = 4;
|
|
bool notification_enabled = 5;
|
|
bool longlived_enabled = 6;
|
|
uint32 stale_routes_time = 7;
|
|
uint32 peer_restart_time = 8;
|
|
bool peer_restarting = 9;
|
|
bool local_restarting = 10;
|
|
string mode = 11;
|
|
}
|
|
|
|
message MpGracefulRestartConfig {
|
|
bool enabled = 1;
|
|
}
|
|
|
|
message MpGracefulRestartState {
|
|
bool enabled = 1;
|
|
bool received = 2;
|
|
bool advertised = 3;
|
|
bool end_of_rib_received = 4;
|
|
bool end_of_rib_sent = 5;
|
|
bool running = 6;
|
|
}
|
|
message MpGracefulRestart {
|
|
MpGracefulRestartConfig config = 1;
|
|
MpGracefulRestartState state = 2;
|
|
}
|
|
|
|
message AfiSafiConfig {
|
|
Family family = 1;
|
|
bool enabled = 2;
|
|
}
|
|
|
|
message AfiSafiState {
|
|
Family family = 1;
|
|
bool enabled = 2;
|
|
uint64 received = 3;
|
|
uint64 accepted = 4;
|
|
uint64 advertised = 5;
|
|
}
|
|
|
|
message RouteSelectionOptionsConfig {
|
|
bool always_compare_med = 1;
|
|
bool ignore_as_path_length = 2;
|
|
bool external_compare_router_id = 3;
|
|
bool advertise_inactive_routes = 4;
|
|
bool enable_aigp = 5;
|
|
bool ignore_next_hop_igp_metric = 6;
|
|
bool disable_best_path_selection = 7;
|
|
}
|
|
|
|
message RouteSelectionOptionsState {
|
|
bool always_compare_med = 1;
|
|
bool ignore_as_path_length = 2;
|
|
bool external_compare_router_id = 3;
|
|
bool advertise_inactive_routes = 4;
|
|
bool enable_aigp = 5;
|
|
bool ignore_next_hop_igp_metric = 6;
|
|
bool disable_best_path_selection = 7;
|
|
}
|
|
|
|
message RouteSelectionOptions {
|
|
RouteSelectionOptionsConfig config = 1;
|
|
RouteSelectionOptionsState state = 2;
|
|
}
|
|
|
|
message UseMultiplePathsConfig {
|
|
bool enabled = 1;
|
|
}
|
|
|
|
message UseMultiplePathsState {
|
|
bool enabled = 1;
|
|
}
|
|
|
|
message EbgpConfig {
|
|
bool allow_multiple_asn = 1;
|
|
uint32 maximum_paths = 2;
|
|
}
|
|
|
|
message EbgpState {
|
|
bool allow_multiple_asn = 1;
|
|
uint32 maximum_paths = 2;
|
|
}
|
|
|
|
message Ebgp {
|
|
EbgpConfig config = 1;
|
|
EbgpState state = 2;
|
|
}
|
|
|
|
message IbgpConfig {
|
|
uint32 maximum_paths = 1;
|
|
}
|
|
|
|
message IbgpState {
|
|
uint32 maximum_paths = 1;
|
|
}
|
|
|
|
message Ibgp {
|
|
IbgpConfig config = 1;
|
|
IbgpState state = 2;
|
|
}
|
|
|
|
message UseMultiplePaths {
|
|
UseMultiplePathsConfig config = 1;
|
|
UseMultiplePathsState state = 2;
|
|
Ebgp ebgp = 3;
|
|
Ibgp ibgp = 4;
|
|
}
|
|
|
|
message RouteTargetMembershipConfig {
|
|
uint32 deferral_time = 1;
|
|
}
|
|
|
|
message RouteTargetMembershipState {
|
|
uint32 deferral_time = 1;
|
|
}
|
|
|
|
message RouteTargetMembership {
|
|
RouteTargetMembershipConfig config = 1;
|
|
RouteTargetMembershipState state = 2;
|
|
}
|
|
|
|
message LongLivedGracefulRestartConfig {
|
|
bool enabled = 1;
|
|
uint32 restart_time = 2;
|
|
}
|
|
|
|
message LongLivedGracefulRestartState {
|
|
bool enabled = 1;
|
|
bool received = 2;
|
|
bool advertised = 3;
|
|
uint32 peer_restart_time = 4;
|
|
bool peer_restart_timer_expired = 5;
|
|
bool running = 6;
|
|
}
|
|
|
|
message LongLivedGracefulRestart {
|
|
LongLivedGracefulRestartConfig config = 1;
|
|
LongLivedGracefulRestartState state = 2;
|
|
}
|
|
|
|
message AfiSafi {
|
|
MpGracefulRestart mp_graceful_restart = 1;
|
|
AfiSafiConfig config = 2;
|
|
AfiSafiState state = 3;
|
|
ApplyPolicy apply_policy = 4;
|
|
// TODO:
|
|
// Support the following structures:
|
|
// - Ipv4Unicast
|
|
// - Ipv6Unicast
|
|
// - Ipv4LabelledUnicast
|
|
// - Ipv6LabelledUnicast
|
|
// - L3vpnIpv4Unicast
|
|
// - L3vpnIpv6Unicast
|
|
// - L3vpnIpv4Multicast
|
|
// - L3vpnIpv6Multicast
|
|
// - L2vpnVpls
|
|
// - L2vpnEvpn
|
|
RouteSelectionOptions route_selection_options = 5;
|
|
UseMultiplePaths use_multiple_paths = 6;
|
|
PrefixLimit prefix_limits = 7;
|
|
RouteTargetMembership route_target_membership = 8;
|
|
LongLivedGracefulRestart long_lived_graceful_restart = 9;
|
|
AddPaths add_paths = 10;
|
|
}
|
|
|
|
message AddPathsConfig {
|
|
bool receive = 1;
|
|
uint32 send_max = 2;
|
|
}
|
|
|
|
message AddPathsState {
|
|
bool receive = 1;
|
|
uint32 send_max = 2;
|
|
}
|
|
|
|
message AddPaths {
|
|
AddPathsConfig config = 1;
|
|
AddPathsState state = 2;
|
|
}
|
|
|
|
message Prefix {
|
|
string ip_prefix = 1;
|
|
uint32 mask_length_min = 2;
|
|
uint32 mask_length_max = 3;
|
|
}
|
|
|
|
enum DefinedType {
|
|
DEFINED_TYPE_UNSPECIFIED = 0;
|
|
DEFINED_TYPE_PREFIX = 1;
|
|
DEFINED_TYPE_NEIGHBOR = 2;
|
|
DEFINED_TYPE_TAG = 3;
|
|
DEFINED_TYPE_AS_PATH = 4;
|
|
DEFINED_TYPE_COMMUNITY = 5;
|
|
DEFINED_TYPE_EXT_COMMUNITY = 6;
|
|
DEFINED_TYPE_LARGE_COMMUNITY = 7;
|
|
DEFINED_TYPE_NEXT_HOP = 8;
|
|
}
|
|
|
|
message DefinedSet {
|
|
DefinedType defined_type = 1;
|
|
string name = 2;
|
|
repeated string list = 3;
|
|
repeated Prefix prefixes = 4;
|
|
}
|
|
|
|
message MatchSet {
|
|
enum Type {
|
|
TYPE_UNSPECIFIED = 0;
|
|
TYPE_ANY = 1;
|
|
TYPE_ALL = 2;
|
|
TYPE_INVERT = 3;
|
|
}
|
|
Type type = 1;
|
|
string name = 2;
|
|
}
|
|
|
|
enum Comparison {
|
|
COMPARISON_UNSPECIFIED = 0;
|
|
COMPARISON_EQ = 1;
|
|
COMPARISON_GE = 2;
|
|
COMPARISON_LE = 3;
|
|
}
|
|
|
|
message AsPathLength {
|
|
Comparison type = 1;
|
|
uint32 length = 2;
|
|
}
|
|
|
|
message CommunityCount {
|
|
Comparison type = 1;
|
|
uint32 count = 2;
|
|
}
|
|
|
|
enum OriginType {
|
|
ORIGIN_TYPE_UNSPECIFIED = 0;
|
|
ORIGIN_TYPE_IGP = 1;
|
|
ORIGIN_TYPE_EGP = 2;
|
|
ORIGIN_TYPE_INCOMPLETE = 3;
|
|
}
|
|
|
|
message LocalPrefEq {
|
|
uint32 value = 1;
|
|
}
|
|
|
|
message MedEq {
|
|
uint32 value = 1;
|
|
}
|
|
|
|
message Conditions {
|
|
MatchSet prefix_set = 1;
|
|
MatchSet neighbor_set = 2;
|
|
AsPathLength as_path_length = 3;
|
|
MatchSet as_path_set = 4;
|
|
MatchSet community_set = 5;
|
|
MatchSet ext_community_set = 6;
|
|
ValidationState rpki_result = 7;
|
|
enum RouteType {
|
|
ROUTE_TYPE_UNSPECIFIED = 0;
|
|
ROUTE_TYPE_INTERNAL = 1;
|
|
ROUTE_TYPE_EXTERNAL = 2;
|
|
ROUTE_TYPE_LOCAL = 3;
|
|
}
|
|
RouteType route_type = 8;
|
|
MatchSet large_community_set = 9;
|
|
repeated string next_hop_in_list = 10;
|
|
repeated Family afi_safi_in = 11;
|
|
CommunityCount community_count = 12;
|
|
OriginType origin = 13;
|
|
LocalPrefEq local_pref_eq = 14;
|
|
MedEq med_eq = 15;
|
|
}
|
|
|
|
enum RouteAction {
|
|
ROUTE_ACTION_UNSPECIFIED = 0;
|
|
ROUTE_ACTION_ACCEPT = 1;
|
|
ROUTE_ACTION_REJECT = 2;
|
|
}
|
|
|
|
message CommunityAction {
|
|
enum Type {
|
|
TYPE_UNSPECIFIED = 0;
|
|
TYPE_ADD = 1;
|
|
TYPE_REMOVE = 2;
|
|
TYPE_REPLACE = 3;
|
|
}
|
|
Type type = 1;
|
|
repeated string communities = 2;
|
|
}
|
|
|
|
message MedAction {
|
|
enum Type {
|
|
TYPE_UNSPECIFIED = 0;
|
|
TYPE_MOD = 1;
|
|
TYPE_REPLACE = 2;
|
|
}
|
|
Type type = 1;
|
|
int64 value = 2;
|
|
}
|
|
|
|
message AsPrependAction {
|
|
uint32 asn = 1;
|
|
uint32 repeat = 2;
|
|
bool use_left_most = 3;
|
|
}
|
|
|
|
message NexthopAction {
|
|
string address = 1;
|
|
bool self = 2;
|
|
bool unchanged = 3;
|
|
bool peer_address = 4;
|
|
}
|
|
|
|
message LocalPrefAction {
|
|
uint32 value = 1;
|
|
}
|
|
|
|
message OriginAction {
|
|
OriginType origin = 1;
|
|
}
|
|
|
|
message Actions {
|
|
RouteAction route_action = 1;
|
|
CommunityAction community = 2;
|
|
MedAction med = 3;
|
|
AsPrependAction as_prepend = 4;
|
|
CommunityAction ext_community = 5;
|
|
NexthopAction nexthop = 6;
|
|
LocalPrefAction local_pref = 7;
|
|
CommunityAction large_community = 8;
|
|
OriginAction origin_action = 9;
|
|
}
|
|
|
|
message Statement {
|
|
string name = 1;
|
|
Conditions conditions = 2;
|
|
Actions actions = 3;
|
|
}
|
|
|
|
message Policy {
|
|
string name = 1;
|
|
repeated Statement statements = 2;
|
|
}
|
|
|
|
enum PolicyDirection {
|
|
POLICY_DIRECTION_UNSPECIFIED = 0;
|
|
POLICY_DIRECTION_IMPORT = 1;
|
|
POLICY_DIRECTION_EXPORT = 2;
|
|
}
|
|
|
|
message PolicyAssignment {
|
|
string name = 1;
|
|
PolicyDirection direction = 2;
|
|
repeated Policy policies = 4;
|
|
RouteAction default_action = 5;
|
|
}
|
|
|
|
message RoutingPolicy {
|
|
repeated DefinedSet defined_sets = 1;
|
|
repeated Policy policies = 2;
|
|
}
|
|
|
|
message Roa {
|
|
uint32 asn = 1;
|
|
uint32 prefixlen = 2;
|
|
uint32 maxlen = 3;
|
|
string prefix = 4;
|
|
RPKIConf conf = 5;
|
|
}
|
|
|
|
message Vrf {
|
|
string name = 1;
|
|
RouteDistinguisher rd = 2;
|
|
repeated RouteTarget import_rt = 3;
|
|
repeated RouteTarget export_rt = 4;
|
|
uint32 id = 5;
|
|
}
|
|
|
|
message DefaultRouteDistance {
|
|
uint32 external_route_distance = 1;
|
|
uint32 internal_route_distance = 2;
|
|
}
|
|
|
|
message Global {
|
|
uint32 asn = 1;
|
|
string router_id = 2;
|
|
int32 listen_port = 3;
|
|
repeated string listen_addresses = 4;
|
|
repeated uint32 families = 5;
|
|
bool use_multiple_paths = 6;
|
|
RouteSelectionOptionsConfig route_selection_options = 7;
|
|
DefaultRouteDistance default_route_distance = 8;
|
|
Confederation confederation = 9;
|
|
GracefulRestart graceful_restart = 10;
|
|
string bind_to_device = 11;
|
|
}
|
|
|
|
message Confederation {
|
|
bool enabled = 1;
|
|
uint32 identifier = 2;
|
|
repeated uint32 member_as_list = 3;
|
|
}
|
|
|
|
message RPKIConf {
|
|
string address = 1;
|
|
uint32 remote_port = 2;
|
|
}
|
|
|
|
message RPKIState {
|
|
google.protobuf.Timestamp uptime = 1;
|
|
google.protobuf.Timestamp downtime = 2;
|
|
bool up = 3;
|
|
uint32 record_ipv4 = 4;
|
|
uint32 record_ipv6 = 5;
|
|
uint32 prefix_ipv4 = 6;
|
|
uint32 prefix_ipv6 = 7;
|
|
uint32 serial = 8;
|
|
int64 received_ipv4 = 9;
|
|
int64 received_ipv6 = 10;
|
|
int64 serial_notify = 11;
|
|
int64 cache_reset = 12;
|
|
int64 cache_response = 13;
|
|
int64 end_of_data = 14;
|
|
int64 error = 15;
|
|
int64 serial_query = 16;
|
|
int64 reset_query = 17;
|
|
}
|
|
|
|
message Rpki {
|
|
RPKIConf conf = 1;
|
|
RPKIState state = 2;
|
|
}
|
|
|
|
message SetLogLevelRequest {
|
|
enum Level {
|
|
LEVEL_UNSPECIFIED = 0;
|
|
LEVEL_PANIC = 1;
|
|
LEVEL_FATAL = 2;
|
|
LEVEL_ERROR = 3;
|
|
LEVEL_WARN = 4;
|
|
LEVEL_INFO = 5;
|
|
LEVEL_DEBUG = 6;
|
|
LEVEL_TRACE = 7;
|
|
}
|
|
Level level = 1;
|
|
}
|
|
|
|
message SetLogLevelResponse {}
|