Files
osrg-gobgp/api/gobgp.proto
T
2016-03-20 00:09:44 +09:00

551 lines
12 KiB
Protocol Buffer

// Copyright (C) 2015 Nippon Telegraph and Telephone Corporation.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
// implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package gobgpapi;
// Interface exported by the server.
service GobgpApi {
rpc GetGlobalConfig(Arguments) returns (Global) {}
rpc ModGlobalConfig(ModGlobalConfigArguments) returns (Error) {}
rpc GetNeighbors(Arguments) returns (stream Peer) {}
rpc GetNeighbor(Arguments) returns (Peer) {}
rpc ModNeighbor(ModNeighborArguments) returns(Error) {}
rpc GetRib(Table) returns (Table) {}
rpc Reset(Arguments) returns (Error) {}
rpc SoftReset(Arguments) returns (Error) {}
rpc SoftResetIn(Arguments) returns (Error) {}
rpc SoftResetOut(Arguments) returns (Error) {}
rpc Shutdown(Arguments) returns (Error) {}
rpc Enable(Arguments) returns (Error) {}
rpc Disable(Arguments) returns (Error) {}
rpc ModPath(ModPathArguments) returns (ModPathResponse) {}
rpc ModPaths(stream ModPathsArguments) returns (Error) {}
rpc MonitorRib(Table) returns (stream Destination) {}
rpc MonitorBestChanged(Arguments) returns (stream Destination) {}
rpc MonitorPeerState(Arguments) returns (stream Peer) {}
rpc MonitorROAValidation(Arguments) returns (stream ROAResult) {}
rpc GetMrt(MrtArguments) returns (stream MrtMessage) {}
rpc ModMrt(ModMrtArguments) returns (Error) {}
rpc ModBmp(ModBmpArguments) returns (Error) {}
rpc GetRPKI(Arguments) returns (stream RPKI) {}
rpc ModRPKI(ModRpkiArguments) returns (Error) {}
rpc GetROA(Arguments) returns (stream ROA) {}
rpc GetVrfs(Arguments) returns (stream Vrf) {}
rpc ModVrf(ModVrfArguments) returns (Error) {}
rpc GetDefinedSet(DefinedSet) returns (DefinedSet) {}
rpc GetDefinedSets(DefinedSet) returns (stream DefinedSet) {}
rpc ModDefinedSet(ModDefinedSetArguments) returns (Error) {}
rpc GetStatement(Statement) returns (Statement) {}
rpc GetStatements(Statement) returns (stream Statement) {}
rpc ModStatement(ModStatementArguments) returns (Error) {}
rpc GetPolicy(Policy) returns (Policy) {}
rpc GetPolicies(Policy) returns (stream Policy) {}
rpc ModPolicy(ModPolicyArguments) returns (Error) {}
rpc GetPolicyAssignment(PolicyAssignment) returns (PolicyAssignment) {}
rpc ModPolicyAssignment(ModPolicyAssignmentArguments) returns (Error) {}
}
message Error {
enum ErrorCode {
SUCCESS = 0;
FAIL = 1;
}
ErrorCode code = 1;
string msg = 2;
}
message Arguments {
Resource resource = 1;
uint32 family = 2;
string name = 3;
}
message ModPathArguments {
Operation operation = 1;
Resource resource = 2;
string name = 3;
Path path = 4;
// uuid field can be only used when operation is DEL
bytes uuid = 5;
// family field is only used when operation is DEL_ALL
uint32 family = 6;
}
message ModPathResponse {
bytes uuid = 1;
}
message ModPathsArguments {
Resource resource = 1;
string name = 2;
repeated Path paths = 3;
}
message ModNeighborArguments {
Operation operation = 1;
Peer peer = 2;
}
message MrtArguments {
Resource resource = 1;
uint32 family = 2;
uint64 interval = 3;
string neighbor_address = 4;
}
message ModMrtArguments {
Operation operation = 1;
int32 dump_type = 2;
string filename = 3;
uint64 interval = 4;
}
message ModBmpArguments {
Operation operation = 1;
string address = 2;
uint32 port = 3;
enum MonitoringPolicy {
PRE = 0;
POST = 1;
BOTH = 2;
}
MonitoringPolicy type = 4;
}
message ModRpkiArguments {
Operation operation = 1;
string address = 2;
uint32 port = 3;
}
message ModVrfArguments {
Operation operation = 1;
Vrf vrf = 2;
}
message ModDefinedSetArguments {
Operation operation = 1;
DefinedSet set = 2;
}
message ModStatementArguments {
Operation operation = 1;
Statement statement = 2;
}
message ModPolicyArguments {
Operation operation = 1;
Policy policy = 2;
// if this flag is set, gobgpd won't define new statements
// but refer existing statements using statement's names in this arguments.
// this flag only works with Operation_ADD
bool refer_existing_statements = 3;
// if this flag is set, gobgpd won't delete any statements
// even if some statements get not used by any policy by this operation.
// this flag means nothing if it is used with Operation_ADD
bool preserve_statements = 4;
}
message ModPolicyAssignmentArguments {
Operation operation = 1;
PolicyAssignment assignment = 2;
}
message ModGlobalConfigArguments {
Operation operation = 1;
Global global = 2;
}
enum Resource {
GLOBAL = 0;
LOCAL = 1;
ADJ_IN = 2;
ADJ_OUT = 3;
VRF = 4;
}
enum Operation {
ADD = 0;
DEL = 1;
DEL_ALL = 2;
REPLACE = 3;
ENABLE = 4;
DISABLE = 5;
RESET = 6;
SOFTRESET = 7;
}
message Path {
bytes nlri = 1;
repeated bytes pattrs = 2;
int64 age = 3;
bool best = 4;
bool is_withdraw = 5;
int32 validation = 6;
bool no_implicit_withdraw = 7;
uint32 family = 8;
uint32 source_asn = 9;
string source_id = 10;
bool filtered = 11;
bool stale = 12;
bool is_from_external = 13;
string neighbor_ip = 14;
}
message Destination {
string prefix = 1;
repeated Path paths = 2;
bool longer_prefixes = 3;
}
message Table {
Resource type = 1;
string name = 2;
uint32 family = 3;
repeated Destination destinations = 4;
bool post_policy = 5;
}
message Peer {
repeated uint32 families = 2;
ApplyPolicy apply_policy = 3;
PeerConf conf = 5;
EbgpMultihop ebgp_multihop = 6;
RouteReflector route_reflector = 10;
PeerState info = 11;
Timers timers = 12;
Transport transport = 13;
RouteServer route_server = 15;
}
message ApplyPolicy {
PolicyAssignment in_policy = 1;
PolicyAssignment export_policy = 2;
PolicyAssignment import_policy = 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;
uint32 remove_private_as = 8;
bool route_flap_damping = 9;
uint32 send_community = 10;
repeated bytes remote_cap = 11;
repeated bytes local_cap = 12;
string id = 13;
}
message EbgpMultihop {
bool enabled = 1;
uint32 multihop_ttl = 2;
}
message RouteReflector {
bool route_reflector_client = 1;
uint32 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;
uint32 session_state = 13;
repeated string supported_capabilities = 14;
string bgp_state = 15;
string admin_state = 16;
uint32 received = 17;
uint32 accepted = 18;
uint32 advertised = 19;
uint32 out_q = 20;
uint32 flops = 21;
}
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 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;
}
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 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 Actions {
RouteAction route_action = 1;
CommunityAction community = 2;
MedAction med = 3;
AsPrependAction as_prepend = 4;
CommunityAction ext_community = 5;
}
message Statement {
string name = 1;
Conditions conditions = 2;
Actions actions = 3;
}
message Policy {
string name = 1;
repeated Statement statements = 2;
}
enum PolicyType {
IN = 0;
IMPORT = 1;
EXPORT = 2;
}
message PolicyAssignment {
PolicyType type = 1;
Resource resource = 2;
string name = 3;
repeated Policy policies = 4;
RouteAction default = 5;
}
message MrtMessage {
bytes data = 1;
}
message RPKIConf {
string address = 1;
string 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;
}
message ROA {
uint32 as = 1;
uint32 prefixlen = 2;
uint32 maxlen = 3;
string prefix = 4;
RPKIConf conf = 5;
}
message ROAResult {
enum ValidationReason {
UPDATE = 0;
WITHDRAW = 1;
PEER_DOWN = 2;
REVALIDATE = 3;
}
ValidationReason reason = 1;
string address = 2;
int64 timestamp = 3;
bytes aspath_attr = 4;
uint32 origin_as = 5;
string prefix = 6;
enum ValidationResult {
NONE = 0;
NOT_FOUND = 1;
VALID = 2;
INVALID = 3;
}
ValidationResult old_result = 7;
ValidationResult new_result = 8;
repeated ROA roas = 9;
}
message Vrf {
string name = 1;
bytes rd = 2;
repeated bytes import_rt = 3;
repeated bytes export_rt = 4;
}
message Global {
uint32 as = 1;
string router_id = 2;
int32 listen_port = 3;
repeated string listen_addresses = 4;
repeated uint32 families = 5;
uint32 mpls_label_min = 6;
uint32 mpls_label_max = 7;
bool collector = 8;
}