1
0
Fork 0
mirror of https://github.com/pavel-odintsov/fastnetmon synced 2024-06-19 10:29:04 +02:00
fastnetmon-rewritten/src/gobgp_client/gobgp.proto
2023-08-05 13:31:27 +01:00

1120 lines
28 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 apipb;
option go_package = "github.com/osrg/gobgp/v3/api;apipb";
import "google/protobuf/any.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/timestamp.proto";
// Interface exported by the server.
service GobgpApi {
rpc StartBgp(StartBgpRequest) returns(google.protobuf.Empty);
rpc StopBgp(StopBgpRequest) returns(google.protobuf.Empty);
rpc GetBgp(GetBgpRequest) returns(GetBgpResponse);
rpc WatchEvent(WatchEventRequest) returns(stream WatchEventResponse);
rpc AddPeer(AddPeerRequest) returns(google.protobuf.Empty);
rpc DeletePeer(DeletePeerRequest) returns(google.protobuf.Empty);
rpc ListPeer(ListPeerRequest) returns(stream ListPeerResponse);
rpc UpdatePeer(UpdatePeerRequest) returns(UpdatePeerResponse);
rpc ResetPeer(ResetPeerRequest) returns(google.protobuf.Empty);
rpc ShutdownPeer(ShutdownPeerRequest) returns(google.protobuf.Empty);
rpc EnablePeer(EnablePeerRequest) returns(google.protobuf.Empty);
rpc DisablePeer(DisablePeerRequest) returns(google.protobuf.Empty);
rpc AddPeerGroup(AddPeerGroupRequest) returns(google.protobuf.Empty);
rpc DeletePeerGroup(DeletePeerGroupRequest) returns(google.protobuf.Empty);
rpc ListPeerGroup(ListPeerGroupRequest) returns(stream ListPeerGroupResponse);
rpc UpdatePeerGroup(UpdatePeerGroupRequest) returns(UpdatePeerGroupResponse);
rpc AddDynamicNeighbor(AddDynamicNeighborRequest) returns(google.protobuf.Empty);
rpc ListDynamicNeighbor(ListDynamicNeighborRequest) returns(stream ListDynamicNeighborResponse);
rpc DeleteDynamicNeighbor(DeleteDynamicNeighborRequest) returns(google.protobuf.Empty);
rpc AddPath(AddPathRequest) returns(AddPathResponse);
rpc DeletePath(DeletePathRequest) returns(google.protobuf.Empty);
rpc ListPath(ListPathRequest) returns(stream ListPathResponse);
rpc AddPathStream(stream AddPathStreamRequest) returns(google.protobuf.Empty);
rpc GetTable(GetTableRequest) returns(GetTableResponse);
rpc AddVrf(AddVrfRequest) returns(google.protobuf.Empty);
rpc DeleteVrf(DeleteVrfRequest) returns(google.protobuf.Empty);
rpc ListVrf(ListVrfRequest) returns(stream ListVrfResponse);
rpc AddPolicy(AddPolicyRequest) returns(google.protobuf.Empty);
rpc DeletePolicy(DeletePolicyRequest) returns(google.protobuf.Empty);
rpc ListPolicy(ListPolicyRequest) returns(stream ListPolicyResponse);
rpc SetPolicies(SetPoliciesRequest) returns(google.protobuf.Empty);
rpc AddDefinedSet(AddDefinedSetRequest) returns(google.protobuf.Empty);
rpc DeleteDefinedSet(DeleteDefinedSetRequest) returns(google.protobuf.Empty);
rpc ListDefinedSet(ListDefinedSetRequest)
returns(stream ListDefinedSetResponse);
rpc AddStatement(AddStatementRequest) returns(google.protobuf.Empty);
rpc DeleteStatement(DeleteStatementRequest) returns(google.protobuf.Empty);
rpc ListStatement(ListStatementRequest) returns(stream ListStatementResponse);
rpc AddPolicyAssignment(AddPolicyAssignmentRequest)
returns(google.protobuf.Empty);
rpc DeletePolicyAssignment(DeletePolicyAssignmentRequest)
returns(google.protobuf.Empty);
rpc ListPolicyAssignment(ListPolicyAssignmentRequest)
returns(stream ListPolicyAssignmentResponse);
rpc SetPolicyAssignment(SetPolicyAssignmentRequest)
returns(google.protobuf.Empty);
rpc AddRpki(AddRpkiRequest) returns(google.protobuf.Empty);
rpc DeleteRpki(DeleteRpkiRequest) returns(google.protobuf.Empty);
rpc ListRpki(ListRpkiRequest) returns(stream ListRpkiResponse);
rpc EnableRpki(EnableRpkiRequest) returns(google.protobuf.Empty);
rpc DisableRpki(DisableRpkiRequest) returns(google.protobuf.Empty);
rpc ResetRpki(ResetRpkiRequest) returns(google.protobuf.Empty);
rpc ListRpkiTable(ListRpkiTableRequest) returns(stream ListRpkiTableResponse);
rpc EnableZebra(EnableZebraRequest) returns(google.protobuf.Empty);
rpc EnableMrt(EnableMrtRequest) returns(google.protobuf.Empty);
rpc DisableMrt(DisableMrtRequest) returns(google.protobuf.Empty);
rpc AddBmp(AddBmpRequest) returns(google.protobuf.Empty);
rpc DeleteBmp(DeleteBmpRequest) returns(google.protobuf.Empty);
rpc ListBmp(ListBmpRequest) returns(stream ListBmpResponse);
rpc SetLogLevel(SetLogLevelRequest) returns(google.protobuf.Empty);
}
message StartBgpRequest { Global global = 1; }
message StopBgpRequest {}
message GetBgpRequest {}
message GetBgpResponse { Global global = 1; }
message WatchEventRequest {
message Peer {
}
Peer peer = 1;
message Table {
message Filter {
enum Type { BEST = 0; ADJIN = 1; POST_POLICY = 2; }
Type type = 1;
bool init = 2;
}
repeated Filter filters = 1;
}
Table table = 2;
}
message WatchEventResponse {
message PeerEvent {
enum Type { UNKNOWN = 0; INIT = 1; END_OF_INIT = 2; 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 DeletePeerRequest {
string address = 1;
string interface = 2;
}
message ListPeerRequest {
string address = 1;
bool enableAdvertised = 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 SoftResetDirection { IN = 0; OUT = 1; BOTH = 2; }
SoftResetDirection direction = 4;
}
message ShutdownPeerRequest {
string address = 1;
string communication = 2;
}
message EnablePeerRequest { string address = 1; }
message DisablePeerRequest {
string address = 1;
string communication = 2;
}
message AddPeerGroupRequest { PeerGroup peer_group = 1; }
message DeletePeerGroupRequest { string name = 1; }
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 DeleteDynamicNeighborRequest {
string prefix = 1;
string peer_group = 2;
}
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;
}
// API representation of table.LookupPrefix
message TableLookupPrefix {
// API representation of table.LookupOption
enum Type { EXACT = 0; LONGER = 1; SHORTER = 2; }
string prefix = 1;
Type type = 2;
}
message ListPathRequest {
TableType table_type = 1;
string name = 2;
Family family = 3;
repeated TableLookupPrefix prefixes = 4;
enum SortType { NONE = 0; 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;
}
message ListPathResponse { Destination destination = 1; }
message AddPathStreamRequest {
TableType table_type = 1;
string vrf_id = 2;
repeated Path paths = 3;
}
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 DeleteVrfRequest { string name = 1; }
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 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 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 AddDefinedSetRequest { DefinedSet defined_set = 1; }
message DeleteDefinedSetRequest {
DefinedSet defined_set = 1;
bool all = 2;
}
message ListDefinedSetRequest {
DefinedType defined_type = 1;
string name = 2;
}
message ListDefinedSetResponse { DefinedSet defined_set = 1; }
message AddStatementRequest { Statement statement = 1; }
message DeleteStatementRequest {
Statement statement = 1;
bool all = 2;
}
message ListStatementRequest { string name = 1; }
message ListStatementResponse { Statement statement = 1; }
message AddPolicyAssignmentRequest { PolicyAssignment assignment = 1; }
message DeletePolicyAssignmentRequest {
PolicyAssignment assignment = 1;
bool all = 2;
}
message ListPolicyAssignmentRequest {
string name = 1;
PolicyDirection direction = 2;
}
message ListPolicyAssignmentResponse { PolicyAssignment assignment = 1; }
message SetPolicyAssignmentRequest { PolicyAssignment assignment = 1; }
message AddRpkiRequest {
string address = 1;
uint32 port = 2;
int64 lifetime = 3;
}
message DeleteRpkiRequest {
string address = 1;
uint32 port = 2;
}
message ListRpkiRequest { Family family = 1; }
message ListRpkiResponse { Rpki server = 1; }
message EnableRpkiRequest {
string address = 1;
uint32 port = 2;
}
message DisableRpkiRequest {
string address = 1;
uint32 port = 2;
}
message ResetRpkiRequest {
string address = 1;
uint32 port = 2;
bool soft = 3;
}
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 EnableMrtRequest {
enum DumpType { UPDATES = 0; TABLE = 1; }
DumpType type = 1;
string filename = 2;
uint64 dump_interval = 3;
uint64 rotation_interval = 4;
}
message DisableMrtRequest {
string filename = 1;
}
message AddBmpRequest {
string address = 1;
uint32 port = 2;
enum MonitoringPolicy { PRE = 0; POST = 1; BOTH = 2; LOCAL = 3; ALL = 4; }
MonitoringPolicy policy = 3;
int32 StatisticsTimeout = 4;
string SysName = 5;
string SysDescr = 6;
}
message DeleteBmpRequest {
string address = 1;
uint32 port = 2;
}
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;
}
message Family {
enum Afi {
AFI_UNKNOWN = 0; AFI_IP = 1; AFI_IP6 = 2; AFI_L2VPN = 25; AFI_LS = 16388;
AFI_OPAQUE = 16397;
}
enum Safi {
SAFI_UNKNOWN = 0; SAFI_UNICAST = 1; SAFI_MULTICAST = 2; SAFI_MPLS_LABEL = 4;
SAFI_ENCAPSULATION = 7;
SAFI_VPLS = 65;
SAFI_EVPN = 70;
SAFI_LS = 71;
SAFI_SR_POLICY = 73;
SAFI_MUP = 85;
SAFI_MPLS_VPN = 128;
SAFI_MPLS_VPN_MULTICAST = 129;
SAFI_ROUTE_TARGET_CONSTRAINTS = 132;
SAFI_FLOW_SPEC_UNICAST = 133;
SAFI_FLOW_SPEC_VPN = 134;
SAFI_KEY_VALUE = 241;
}
Afi afi = 1;
Safi safi = 2;
}
enum TableType { GLOBAL = 0; LOCAL = 1; ADJ_IN = 2; ADJ_OUT = 3; VRF = 4; }
message Validation {
enum State {
STATE_NONE = 0; STATE_NOT_FOUND = 1; STATE_VALID = 2; STATE_INVALID = 3;
}
enum Reason { REASON_NONE = 0; REASON_ASN = 1; REASON_LENGTH = 2; }
State state = 1;
Reason reason = 2;
repeated Roa matched = 3;
repeated Roa unmatched_asn = 4;
repeated Roa unmatched_length = 5;
}
message Path {
// One of the following defined in "api/attribute.proto":
// - IPAddressPrefix
// - LabeledIPAddressPrefix
// - EncapsulationNLRI
// - EVPNEthernetAutoDiscoveryRoute
// - EVPNMACIPAdvertisementRoute
// - EVPNInclusiveMulticastEthernetTagRoute
// - EVPNEthernetSegmentRoute
// - EVPNIPPrefixRoute
// - EVPNIPMSIRoute
// - LabeledVPNIPAddressPrefix
// - RouteTargetMembershipNLRI
// - FlowSpecNLRI
// - VPNFlowSpecNLRI
// - OpaqueNLRI
// - LsAddrPrefix
// - SRPolicyNLRI
// - MUPInterworkSegmentDiscoveryRoute
// - MUPDirectSegmentDiscoveryRoute
// - MUPType1SessionTransformedRoute
// - MUPType2SessionTransformedRoute
google.protobuf.Any nlri = 1;
// Each attribute must be one of *Attribute defined in
// "api/attribute.proto".
repeated google.protobuf.Any 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;
}
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 in_policy = 1;
PolicyAssignment export_policy = 2;
PolicyAssignment import_policy = 3;
}
message PrefixLimit {
Family family = 1;
uint32 max_prefixes = 2;
uint32 shutdown_threshold_pct = 3;
}
enum PeerType { INTERNAL = 0; EXTERNAL = 1; }
enum RemovePrivate { REMOVE_NONE = 0; REMOVE_ALL = 1; 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;
}
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;
}
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 {
UNKNOWN = 0; IDLE = 1; CONNECT = 2; ACTIVE = 3; OPENSENT = 4;
OPENCONFIRM = 5;
ESTABLISHED = 6;
}
SessionState session_state = 13;
enum AdminState {
UP = 0; DOWN = 1; PFX_CT = 2; // prefix counter over limit
}
AdminState admin_state = 15;
uint32 out_q = 16;
uint32 flops = 17;
// Each attribute must be one of *Capability defined in
// "api/capability.proto".
repeated google.protobuf.Any remote_cap = 18;
repeated google.protobuf.Any local_cap = 19;
string router_id = 20;
}
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;
}
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;
}
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 {
PREFIX = 0; NEIGHBOR = 1; TAG = 2; AS_PATH = 3; COMMUNITY = 4;
EXT_COMMUNITY = 5;
LARGE_COMMUNITY = 6;
NEXT_HOP = 7;
}
message DefinedSet {
DefinedType defined_type = 1;
string name = 2;
repeated string list = 3;
repeated Prefix prefixes = 4;
}
message MatchSet {
enum Type { ANY = 0; ALL = 1; INVERT = 2; }
Type type = 1;
string name = 2;
}
message AsPathLength {
enum Type { EQ = 0; GE = 1; LE = 2; }
Type type = 1;
uint32 length = 2;
}
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;
int32 rpki_result = 7;
enum RouteType {
ROUTE_TYPE_NONE = 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;
}
enum RouteAction { NONE = 0; ACCEPT = 1; REJECT = 2; }
message CommunityAction {
enum Type {
ADD = 0; REMOVE = 1; REPLACE = 2;
}
Type type = 1;
repeated string communities = 2;
}
message MedAction {
enum Type { MOD = 0; REPLACE = 1; }
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;
}
message LocalPrefAction { uint32 value = 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;
}
message Statement {
string name = 1;
Conditions conditions = 2;
Actions actions = 3;
}
message Policy {
string name = 1;
repeated Statement statements = 2;
}
enum PolicyDirection { UNKNOWN = 0; IMPORT = 1; 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;
// Route Distinguisher must be one of
// RouteDistinguisherTwoOctetAS,
// RouteDistinguisherIPAddressAS,
// or RouteDistinguisherFourOctetAS.
google.protobuf.Any rd = 2;
// List of the Import Route Targets. Each must be one of
// TwoOctetAsSpecificExtended,
// IPv4AddressSpecificExtended,
// or FourOctetAsSpecificExtended.
repeated google.protobuf.Any import_rt = 3;
// List of the Export Route Targets. Each must be one of
// TwoOctetAsSpecificExtended,
// IPv4AddressSpecificExtended,
// or FourOctetAsSpecificExtended.
repeated google.protobuf.Any 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;
ApplyPolicy apply_policy = 11;
string bind_to_device = 12;
}
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 {
PANIC = 0; FATAL = 1; ERROR = 2; WARN = 3; INFO = 4; DEBUG = 5; TRACE = 6;
}
Level level = 1;
}