// 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 StartServer(StartServerRequest) returns (StartServerResponse) {} rpc StopServer(StopServerRequest) returns (StopServerResponse) {} rpc GetServer(GetServerRequest) returns (GetServerResponse) {} rpc AddNeighbor(AddNeighborRequest) returns (AddNeighborResponse) {} rpc DeleteNeighbor(DeleteNeighborRequest) returns (DeleteNeighborResponse) {} rpc GetNeighbor(GetNeighborRequest) returns (GetNeighborResponse) {} rpc ResetNeighbor(ResetNeighborRequest) returns (ResetNeighborResponse) {} rpc SoftResetNeighbor(SoftResetNeighborRequest) returns (SoftResetNeighborResponse) {} rpc ShutdownNeighbor(ShutdownNeighborRequest) returns (ShutdownNeighborResponse) {} rpc EnableNeighbor(EnableNeighborRequest) returns (EnableNeighborResponse) {} rpc DisableNeighbor(DisableNeighborRequest) returns (DisableNeighborResponse) {} rpc GetRib(GetRibRequest) returns (GetRibResponse) {} rpc ValidateRib(ValidateRibRequest) returns (ValidateRibResponse) {} rpc AddPath(AddPathRequest) returns (AddPathResponse) {} rpc DeletePath(DeletePathRequest) returns (DeletePathResponse) {} rpc MonitorRib(MonitorRibRequest) returns (stream Destination) {} rpc MonitorPeerState(Arguments) returns (stream Peer) {} rpc EnableMrt(EnableMrtRequest) returns (EnableMrtResponse) {} rpc DisableMrt(DisableMrtRequest) returns (DisableMrtResponse) {} rpc InjectMrt(stream InjectMrtRequest) returns (InjectMrtResponse) {} rpc AddBmp(AddBmpRequest) returns (AddBmpResponse) {} rpc DeleteBmp(DeleteBmpRequest) returns (DeleteBmpResponse) {} rpc GetRpki(GetRpkiRequest) returns (GetRpkiResponse) {} rpc AddRpki(AddRpkiRequest) returns (AddRpkiResponse) {} rpc DeleteRpki(DeleteRpkiRequest) returns (DeleteRpkiResponse) {} rpc EnableRpki(EnableRpkiRequest) returns (EnableRpkiResponse) {} rpc DisableRpki(DisableRpkiRequest) returns (DisableRpkiResponse) {} rpc ResetRpki(ResetRpkiRequest) returns (ResetRpkiResponse) {} rpc SoftResetRpki(SoftResetRpkiRequest) returns (SoftResetRpkiResponse) {} rpc GetRoa(GetRoaRequest) returns (GetRoaResponse) {} rpc EnableZebra(EnableZebraRequest) returns (EnableZebraResponse) {} rpc AddVrf(AddVrfRequest) returns (AddVrfResponse) {} rpc DeleteVrf(DeleteVrfRequest) returns (DeleteVrfResponse) {} rpc GetVrf(GetVrfRequest) returns (GetVrfResponse) {} rpc GetDefinedSet(GetDefinedSetRequest) returns (GetDefinedSetResponse) {} rpc AddDefinedSet(AddDefinedSetRequest) returns (AddDefinedSetResponse) {} rpc DeleteDefinedSet(DeleteDefinedSetRequest) returns (DeleteDefinedSetResponse) {} rpc ReplaceDefinedSet(ReplaceDefinedSetRequest) returns (ReplaceDefinedSetResponse) {} rpc GetStatement(GetStatementRequest) returns (GetStatementResponse) {} rpc AddStatement(AddStatementRequest) returns (AddStatementResponse) {} rpc DeleteStatement(DeleteStatementRequest) returns (DeleteStatementResponse) {} rpc ReplaceStatement(ReplaceStatementRequest) returns (ReplaceStatementResponse) {} rpc GetPolicy(GetPolicyRequest) returns (GetPolicyResponse) {} rpc AddPolicy(AddPolicyRequest) returns (AddPolicyResponse) {} rpc DeletePolicy(DeletePolicyRequest) returns (DeletePolicyResponse) {} rpc ReplacePolicy(ReplacePolicyRequest) returns (ReplacePolicyResponse) {} rpc GetPolicyAssignment(GetPolicyAssignmentRequest) returns (GetPolicyAssignmentResponse) {} rpc AddPolicyAssignment(AddPolicyAssignmentRequest) returns (AddPolicyAssignmentResponse) {} rpc DeletePolicyAssignment(DeletePolicyAssignmentRequest) returns (DeletePolicyAssignmentResponse) {} rpc ReplacePolicyAssignment(ReplacePolicyAssignmentRequest) returns (ReplacePolicyAssignmentResponse) {} rpc GetRibInfo(GetRibInfoRequest) returns (GetRibInfoResponse) {} } message GetNeighborRequest { bool enableAdvertised = 1; string address = 2; } message GetNeighborResponse { repeated Peer peers = 1; } message Arguments { Resource resource = 1; uint32 family = 2; string name = 3; } 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; uint32 family = 3; Path path = 4; bytes uuid = 5; } message DeletePathResponse { } message AddNeighborRequest { Peer peer = 1; } message AddNeighborResponse { } message DeleteNeighborRequest { Peer peer = 1; } message DeleteNeighborResponse { } message ResetNeighborRequest { string address = 1; string communication = 2; } message ResetNeighborResponse { } message SoftResetNeighborRequest { string address = 1; enum SoftResetDirection { IN = 0; OUT = 1; BOTH = 2; } SoftResetDirection direction = 2; } message SoftResetNeighborResponse { } message ShutdownNeighborRequest { string address = 1; string communication = 2; } message ShutdownNeighborResponse { } message EnableNeighborRequest { string address = 1; } message EnableNeighborResponse { } message DisableNeighborRequest { string address = 1; string communication = 2; } message DisableNeighborResponse { } message EnableMrtRequest { int32 dump_type = 1; string filename = 2; uint64 interval = 3; } message EnableMrtResponse { } message DisableMrtRequest { } message DisableMrtResponse { } message InjectMrtRequest { Resource resource = 1; string vrf_id = 2; repeated Path paths = 3; } message InjectMrtResponse { } message AddBmpRequest { string address = 1; uint32 port = 2; enum MonitoringPolicy { PRE = 0; POST = 1; BOTH = 2; } MonitoringPolicy type = 3; } message AddBmpResponse { } message DeleteBmpRequest { string address = 1; uint32 port = 2; } message DeleteBmpResponse { } message MonitorRibRequest { Table table = 1; bool current = 2; } 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 GetRpkiRequest { uint32 family = 1; } message GetRpkiResponse { repeated Rpki servers = 1; } message AddRpkiRequest { string address = 1; uint32 port = 2; int64 lifetime = 3; } message AddRpkiResponse { } message DeleteRpkiRequest { string address = 1; uint32 port = 2; } message DeleteRpkiResponse { } message EnableRpkiRequest { string address = 1; } message EnableRpkiResponse { } message DisableRpkiRequest { string address = 1; } message DisableRpkiResponse { } message ResetRpkiRequest { string address = 1; } message ResetRpkiResponse { } message SoftResetRpkiRequest { string address = 1; } message SoftResetRpkiResponse { } message EnableZebraRequest { string url = 1; repeated string route_types = 2; uint32 version = 3; bool nexthop_trigger_enable = 4; uint32 nexthop_trigger_delay = 5; } message EnableZebraResponse { } message GetVrfRequest { } message GetVrfResponse { repeated Vrf vrfs = 1; } message AddVrfRequest { Vrf vrf = 1; } message AddVrfResponse { } message DeleteVrfRequest { Vrf vrf = 1; } message DeleteVrfResponse { } message GetDefinedSetRequest { DefinedType type = 1; string name = 2; } message GetDefinedSetResponse { repeated DefinedSet sets = 1; } message AddDefinedSetRequest { DefinedSet set = 1; } message AddDefinedSetResponse { } message DeleteDefinedSetRequest { DefinedSet set = 1; bool all = 2; } message DeleteDefinedSetResponse { } message ReplaceDefinedSetRequest { DefinedSet set = 1; } message ReplaceDefinedSetResponse { } message GetStatementRequest { } message GetStatementResponse { repeated Statement statements = 1; } message AddStatementRequest { Statement statement = 1; } message AddStatementResponse { } message DeleteStatementRequest { Statement statement = 1; bool all = 2; } message DeleteStatementResponse { } message ReplaceStatementRequest { Statement statement = 1; } message ReplaceStatementResponse { } message GetPolicyRequest { } message GetPolicyResponse { repeated Policy policies = 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 ReplacePolicyRequest { 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; // 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 = 3; } message ReplacePolicyResponse { } message GetPolicyAssignmentRequest { PolicyAssignment assignment = 1; } message GetPolicyAssignmentResponse { PolicyAssignment assignment = 1; } message AddPolicyAssignmentRequest { PolicyAssignment assignment = 1; } message AddPolicyAssignmentResponse { } message DeletePolicyAssignmentRequest { PolicyAssignment assignment = 1; bool all = 2; } message DeletePolicyAssignmentResponse { } message ReplacePolicyAssignmentRequest { PolicyAssignment assignment = 1; } message ReplacePolicyAssignmentResponse { } message GetServerRequest { } message GetServerResponse { Global global = 1; } message StartServerRequest { Global global = 1; } message StartServerResponse { } message StopServerRequest { } message StopServerResponse { } enum Resource { GLOBAL = 0; LOCAL = 1; ADJ_IN = 2; ADJ_OUT = 3; VRF = 4; } 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; bytes uuid = 15; // only paths installed by AddPath API have this bool is_nexthop_invalid = 16; } message Destination { string prefix = 1; repeated Path paths = 2; bool longer_prefixes = 3; bool shorter_prefixes = 4; } message Table { Resource type = 1; string name = 2; uint32 family = 3; repeated Destination destinations = 4; bool post_policy = 5; } message GetRibRequest { Table table = 1; } message GetRibResponse { Table table = 1; } message ValidateRibRequest { Resource type = 1; uint32 family = 2; string prefix = 3; } message ValidateRibResponse { } message Peer { repeated uint32 families = 1; ApplyPolicy apply_policy = 2; PeerConf conf = 3; EbgpMultihop ebgp_multihop = 4; RouteReflector route_reflector = 5; PeerState info = 6; Timers timers = 7; Transport transport = 8; RouteServer route_server = 9; GracefulRestart graceful_restart = 10; repeated AfiSafi afi_safis = 11; } message ApplyPolicy { PolicyAssignment in_policy = 1; PolicyAssignment export_policy = 2; PolicyAssignment import_policy = 3; } message PrefixLimit { uint32 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; repeated bytes remote_cap = 11; repeated bytes local_cap = 12; string id = 13; // Note: Regarding to the consistency with OpenConfig mode, list of // PrefixLimit should be removed from here, and list of PrefixLimit in // AfiSafi should be used instead. repeated PrefixLimit prefix_limits = 14; string local_address = 15; string neighbor_interface = 16; string vrf = 17; uint32 allow_own_as = 18; bool replace_peer_as = 19; } 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; uint32 session_state = 13; repeated string supported_capabilities = 14; string bgp_state = 15; enum AdminState { UP = 0; DOWN = 1; PFX_CT = 2; // prefix counter over limit } AdminState 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 GracefulRestart { bool enabled = 1; uint32 restart_time = 2; bool helper_only = 3; uint32 deferral_time = 4; bool notification_enabled = 5; bool longlived_enabled = 6; } message MpGracefulRestart { bool enabled = 1; } message AfiSafiConfig { uint32 family = 1; bool enabled = 2; } message RouteSelectionOptions { 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; } message UseMultiplePathsConfig { bool enabled = 1; } message Ebgp { bool allow_multiple_as = 1; uint32 maximum_paths = 2; } message Ibgp { uint32 maximum_paths = 1; } message UseMultiplePaths { UseMultiplePathsConfig config = 1; Ebgp ebgp = 2; Ibgp ibgp = 3; } message RouteTargetMembership { uint32 deferral_time = 1; } message LongLivedGracefulRestart { bool enabled = 1; uint32 restart_time = 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; } 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; } 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; } 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 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 Roa { uint32 as = 1; uint32 prefixlen = 2; uint32 maxlen = 3; string prefix = 4; RPKIConf conf = 5; } message GetRoaRequest { uint32 family = 1; } message GetRoaResponse { repeated Roa roas = 1; } message Vrf { string name = 1; bytes rd = 2; repeated bytes import_rt = 3; repeated bytes export_rt = 4; uint32 id = 5; } 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; } message TableInfo { Resource type = 1; string name = 2; uint32 family = 3; uint64 num_destination = 4; uint64 num_path = 5; uint64 num_accepted = 6; // only meaningful when type == ADJ_IN } message GetRibInfoRequest { TableInfo info = 1; } message GetRibInfoResponse { TableInfo info = 1; }