1176 lines
25 KiB
Protocol Buffer
1176 lines
25 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";
|
|
|
|
import "google/protobuf/any.proto";
|
|
import "google/protobuf/empty.proto";
|
|
|
|
package gobgpapi;
|
|
|
|
// 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 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 MonitorPeer(MonitorPeerRequest) returns (stream MonitorPeerResponse);
|
|
|
|
rpc AddPeerGroup(AddPeerGroupRequest) returns (google.protobuf.Empty);
|
|
rpc DeletePeerGroup(DeletePeerGroupRequest) returns (google.protobuf.Empty);
|
|
rpc UpdatePeerGroup(UpdatePeerGroupRequest) returns (UpdatePeerGroupResponse);
|
|
|
|
rpc AddDynamicNeighbor(AddDynamicNeighborRequest) 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 MonitorTable(MonitorTableRequest) returns (stream MonitorTableResponse);
|
|
|
|
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);
|
|
}
|
|
|
|
message StartBgpRequest {
|
|
Global global = 1;
|
|
}
|
|
|
|
message StopBgpRequest {
|
|
}
|
|
|
|
message GetBgpRequest {
|
|
}
|
|
|
|
message GetBgpResponse {
|
|
Global global = 1;
|
|
}
|
|
|
|
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 MonitorPeerRequest {
|
|
string address = 1;
|
|
bool current = 2;
|
|
}
|
|
|
|
message MonitorPeerResponse {
|
|
Peer peer = 1;
|
|
}
|
|
|
|
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 AddDynamicNeighborRequest {
|
|
DynamicNeighbor dynamic_neighbor = 1;
|
|
}
|
|
|
|
message AddPathRequest {
|
|
Resource resource = 1;
|
|
string vrf_id = 2;
|
|
Path path = 3;
|
|
}
|
|
|
|
message AddPathResponse {
|
|
bytes uuid = 1;
|
|
}
|
|
|
|
message DeletePathRequest {
|
|
Resource resource = 1;
|
|
string vrf_id = 2;
|
|
Family family = 3;
|
|
Path path = 4;
|
|
bytes uuid = 5;
|
|
}
|
|
|
|
message ListPathRequest {
|
|
Resource type = 1;
|
|
string name = 2;
|
|
Family family = 3;
|
|
repeated TableLookupPrefix prefixes = 4;
|
|
}
|
|
|
|
message ListPathResponse {
|
|
Destination destination = 1;
|
|
}
|
|
|
|
message AddPathStreamRequest {
|
|
Resource resource = 1;
|
|
string vrf_id = 2;
|
|
repeated Path paths = 3;
|
|
}
|
|
|
|
message GetTableRequest {
|
|
Resource 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 MonitorTableRequest {
|
|
Resource type = 1;
|
|
string name = 2;
|
|
Family family = 3;
|
|
bool current = 4;
|
|
bool post_policy = 5;
|
|
}
|
|
|
|
message MonitorTableResponse {
|
|
Path path = 1;
|
|
}
|
|
|
|
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 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;
|
|
}
|
|
|
|
message EnableMrtRequest {
|
|
int32 dump_type = 1;
|
|
string filename = 2;
|
|
uint64 interval = 3;
|
|
}
|
|
|
|
message DisableMrtRequest {
|
|
}
|
|
|
|
message AddBmpRequest {
|
|
string address = 1;
|
|
uint32 port = 2;
|
|
enum MonitoringPolicy {
|
|
PRE = 0;
|
|
POST = 1;
|
|
BOTH = 2;
|
|
LOCAL = 3;
|
|
ALL = 4;
|
|
}
|
|
MonitoringPolicy type = 3;
|
|
}
|
|
|
|
message DeleteBmpRequest {
|
|
string address = 1;
|
|
uint32 port = 2;
|
|
}
|
|
|
|
message Family {
|
|
enum Afi {
|
|
AFI_UNKNOWN = 0;
|
|
AFI_IP = 1;
|
|
AFI_IP6 = 2;
|
|
AFI_L2VPN = 25;
|
|
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_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 Resource {
|
|
GLOBAL = 0;
|
|
LOCAL = 1;
|
|
ADJ_IN = 2;
|
|
ADJ_OUT = 3;
|
|
VRF = 4;
|
|
}
|
|
|
|
message RPKIValidation{
|
|
enum State {
|
|
STATE_NONE = 0;
|
|
STATE_NOT_FOUND = 1;
|
|
STATE_VALID = 2;
|
|
STATE_INVALID = 3;
|
|
}
|
|
|
|
enum Reason {
|
|
REASOT_NONE = 0;
|
|
REASON_AS = 1;
|
|
REASON_LENGTH = 2;
|
|
}
|
|
|
|
State state = 1;
|
|
Reason reason = 2;
|
|
repeated Roa matched = 3;
|
|
repeated Roa unmatched_as = 4;
|
|
repeated Roa unmatched_length = 5;
|
|
}
|
|
|
|
message Path {
|
|
bytes nlri = 1;
|
|
repeated bytes pattrs = 2;
|
|
int64 age = 3;
|
|
bool best = 4;
|
|
bool is_withdraw = 5;
|
|
RPKIValidation validation_detail = 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;
|
|
// One of the following defined in "api/attribute.proto":
|
|
// - IPAddressPrefix
|
|
// - LabeledIPAddressPrefix
|
|
// - EncapsulationNLRI
|
|
// - EVPNEthernetAutoDiscoveryRoute
|
|
// - EVPNMACIPAdvertisementRoute
|
|
// - EVPNInclusiveMulticastEthernetTagRoute
|
|
// - EVPNEthernetSegmentRoute
|
|
// - EVPNIPPrefixRoute
|
|
// - LabeledVPNIPAddressPrefix
|
|
// - RouteTargetMembershipNLRI
|
|
// - FlowSpecNLRI
|
|
// - VPNFlowSpecNLRI
|
|
// - OpaqueNLRI
|
|
google.protobuf.Any any_nlri = 20;
|
|
// Each attribute must be one of *Attribute defined in
|
|
// "api/attribute.proto".
|
|
repeated google.protobuf.Any any_pattrs = 21;
|
|
}
|
|
|
|
message Destination {
|
|
string prefix = 1;
|
|
repeated Path paths = 2;
|
|
}
|
|
|
|
// API representation of table.LookupOption
|
|
enum TableLookupOption {
|
|
LOOKUP_EXACT = 0;
|
|
LOOKUP_LONGER = 1;
|
|
LOOKUP_SHORTER = 2;
|
|
}
|
|
|
|
// API representation of table.LookupPrefix
|
|
message TableLookupPrefix {
|
|
string prefix = 1;
|
|
TableLookupOption lookup_option = 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;
|
|
AddPaths add_paths = 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;
|
|
AddPaths add_paths = 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;
|
|
}
|
|
|
|
message PeerConf {
|
|
string auth_password = 1;
|
|
string description = 2;
|
|
uint32 local_as = 3;
|
|
string neighbor_address = 4;
|
|
uint32 peer_as = 5;
|
|
string peer_group = 6;
|
|
uint32 peer_type = 7;
|
|
enum RemovePrivateAs {
|
|
NONE = 0;
|
|
ALL = 1;
|
|
REPLACE = 2;
|
|
}
|
|
RemovePrivateAs remove_private_as = 8;
|
|
bool route_flap_damping = 9;
|
|
uint32 send_community = 10;
|
|
// Each attribute must be one of *Capability defined in
|
|
// "api/capability.proto".
|
|
repeated google.protobuf.Any remote_cap = 11;
|
|
repeated google.protobuf.Any local_cap = 12;
|
|
string id = 13;
|
|
string neighbor_interface = 14;
|
|
string vrf = 15;
|
|
uint32 allow_own_as = 16;
|
|
bool replace_peer_as = 17;
|
|
}
|
|
|
|
message PeerGroupConf {
|
|
string auth_password = 1;
|
|
string description = 2;
|
|
uint32 local_as = 3;
|
|
uint32 peer_as = 4;
|
|
string peer_group_name = 5;
|
|
uint32 peer_type = 6;
|
|
enum RemovePrivateAs {
|
|
NONE = 0;
|
|
ALL = 1;
|
|
REPLACE = 2;
|
|
}
|
|
RemovePrivateAs remove_private_as = 7;
|
|
bool route_flap_damping = 8;
|
|
uint32 send_community = 9;
|
|
}
|
|
|
|
message PeerGroupState {
|
|
string auth_password = 1;
|
|
string description = 2;
|
|
uint32 local_as = 3;
|
|
uint32 peer_as = 4;
|
|
string peer_group_name = 5;
|
|
uint32 peer_type = 6;
|
|
enum RemovePrivateAs {
|
|
NONE = 0;
|
|
ALL = 1;
|
|
REPLACE = 2;
|
|
}
|
|
RemovePrivateAs remove_private_as = 7;
|
|
bool route_flap_damping = 8;
|
|
uint32 send_community = 9;
|
|
uint32 total_paths = 10;
|
|
uint32 total_prefixes = 11;
|
|
}
|
|
|
|
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_as = 3;
|
|
Messages messages = 4;
|
|
string neighbor_address = 5;
|
|
uint32 peer_as = 6;
|
|
string peer_group = 7;
|
|
uint32 peer_type = 8;
|
|
Queues queues = 9;
|
|
uint32 remove_private_as = 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;
|
|
repeated string supported_capabilities = 14;
|
|
enum AdminState {
|
|
UP = 0;
|
|
DOWN = 1;
|
|
PFX_CT = 2; // prefix counter over limit
|
|
}
|
|
AdminState admin_state = 15;
|
|
uint32 received = 16;
|
|
uint32 accepted = 17;
|
|
uint32 advertised = 18;
|
|
uint32 out_q = 19;
|
|
uint32 flops = 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;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
message TimersState{
|
|
uint64 connect_retry = 1;
|
|
uint64 hold_time = 2;
|
|
uint64 keepalive_interval = 3;
|
|
uint64 minimum_advertisement_interval = 4;
|
|
uint64 negotiated_hold_time = 5;
|
|
uint64 uptime = 6;
|
|
uint64 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;
|
|
}
|
|
|
|
message RouteServer {
|
|
bool route_server_client = 1;
|
|
}
|
|
|
|
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;
|
|
uint32 total_paths = 3;
|
|
uint32 total_prefixes = 4;
|
|
}
|
|
|
|
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_as = 1;
|
|
uint32 maximum_paths = 2;
|
|
}
|
|
|
|
message EbgpState {
|
|
bool allow_multiple_as = 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;
|
|
ApplyPolicy apply_policy = 3;
|
|
// TODO:
|
|
// Support the following structures:
|
|
// - Ipv4Unicast
|
|
// - Ipv6Unicast
|
|
// - Ipv4LabelledUnicast
|
|
// - Ipv6LabelledUnicast
|
|
// - L3vpnIpv4Unicast
|
|
// - L3vpnIpv6Unicast
|
|
// - L3vpnIpv4Multicast
|
|
// - L3vpnIpv6Multicast
|
|
// - L2vpnVpls
|
|
// - L2vpnEvpn
|
|
RouteSelectionOptions route_selection_options = 4;
|
|
UseMultiplePaths use_multiple_paths = 5;
|
|
PrefixLimit prefix_limits = 6;
|
|
RouteTargetMembership route_target_membership = 7;
|
|
LongLivedGracefulRestart long_lived_graceful_restart = 8;
|
|
AddPaths add_paths = 9;
|
|
}
|
|
|
|
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 type = 1;
|
|
string name = 2;
|
|
repeated string list = 3;
|
|
repeated Prefix prefixes = 4;
|
|
}
|
|
|
|
enum MatchType {
|
|
ANY = 0;
|
|
ALL = 1;
|
|
INVERT = 2;
|
|
}
|
|
|
|
message MatchSet {
|
|
MatchType type = 1;
|
|
string name = 2;
|
|
}
|
|
|
|
enum AsPathLengthType {
|
|
EQ = 0;
|
|
GE = 1;
|
|
LE = 2;
|
|
}
|
|
|
|
message AsPathLength {
|
|
AsPathLengthType 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;
|
|
}
|
|
|
|
enum CommunityActionType {
|
|
COMMUNITY_ADD = 0;
|
|
COMMUNITY_REMOVE = 1;
|
|
COMMUNITY_REPLACE = 2;
|
|
}
|
|
|
|
message CommunityAction {
|
|
CommunityActionType type = 1;
|
|
repeated string communities = 2;
|
|
}
|
|
|
|
enum MedActionType {
|
|
MED_MOD = 0;
|
|
MED_REPLACE = 1;
|
|
}
|
|
|
|
message MedAction {
|
|
MedActionType 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;
|
|
}
|
|
|
|
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 as = 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 as = 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;
|
|
}
|
|
|
|
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 {
|
|
int64 uptime = 1;
|
|
int64 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;
|
|
}
|