photoncloud-monorepo/fiberlb/crates/fiberlb-server/proto/api/gobgp.proto

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 {}