// 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"; 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 UpdateNeighbor(UpdateNeighborRequest) returns (UpdateNeighborResponse) {} 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 GetPath(GetPathRequest) returns (stream Path) {} 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 UpdatePolicy(UpdatePolicyRequest) returns (UpdatePolicyResponse) {} 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) {} rpc AddPeerGroup(AddPeerGroupRequest) returns (AddPeerGroupResponse) {} rpc DeletePeerGroup(DeletePeerGroupRequest) returns (DeletePeerGroupResponse) {} rpc UpdatePeerGroup(UpdatePeerGroupRequest) returns (UpdatePeerGroupResponse) {} rpc AddDynamicNeighbor(AddDynamicNeighborRequest) returns (AddDynamicNeighborResponse) {} } // Constants for address families enum Family { RESERVED = 0; IPv4 = 65537; IPv6 = 131073; IPv4_MC = 65538; IPv6_MC = 131074; IPv4_MPLS = 65540; IPv6_MPLS = 131076; IPv4_VPN = 65664; IPv6_VPN = 131200; IPv4_VPN_MC = 65665; IPv6_VPN_MC = 131201; VPLS = 1638465; EVPN = 1638470; RTC = 65668; IPv4_ENCAP = 65543; IPv6_ENCAP = 131079; FLOW_SPEC_IPv4 = 65669; FLOW_SPEC_IPv6 = 131205; FLOW_SPEC_IPv4_VPN = 65670; FLOW_SPEC_IPv6_VPN = 131206; FLOW_SPEC_L2_VPN = 1638534; OPAQUE = 1074594033; } 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; bool current = 4; } 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 UpdateNeighborRequest { Peer peer = 1; // Calls SoftResetIn after updating the neighbor configuration if needed. bool do_soft_reset_in = 2; } message UpdateNeighborResponse { // 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 AddPeerGroupRequest { PeerGroup peer_group = 1; } message AddPeerGroupResponse { } message DeletePeerGroupRequest { PeerGroup peer_group = 1; } message DeletePeerGroupResponse { } 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 AddDynamicNeighborResponse { } 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 UpdatePolicyRequest { repeated DefinedSet sets = 1; repeated Policy policies = 2; } message UpdatePolicyResponse { } 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; LOCAL = 3; ALL = 4; } 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 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; int32 validation = 6; // remains for backword compatibility RPKIValidation validation_detail = 7; bool no_implicit_withdraw = 8; uint32 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/bgp/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 on of *Attribute defined in // "api/bgp/attribute.proto". repeated google.protobuf.Any any_pattrs = 21; } 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; } // 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 GetPathRequest { Resource type = 1; string name = 2; uint32 family = 3; repeated TableLookupPrefix prefixes = 4; } message ValidateRibRequest { Resource type = 1; uint32 family = 2; string prefix = 3; } message ValidateRibResponse { } message Peer { // Note: Regarding to the consistency with OpenConfig model, a list of // address family should be removed from here, and should be configured with // the list of AfiSafi instead. 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; AddPaths add_paths = 12; } message PeerGroup { // Note: Regarding to the consistency with OpenConfig model, a list of // address family should be removed from here, and should be configured with // the list of AfiSafi instead. repeated uint32 families = 1; ApplyPolicy apply_policy = 2; PeerGroupConf conf = 3; EbgpMultihop ebgp_multihop = 4; RouteReflector route_reflector = 5; PeerGroupState info = 6; Timers timers = 7; Transport transport = 8; RouteServer route_server = 9; GracefulRestart graceful_restart = 10; repeated AfiSafi afi_safis = 11; AddPaths add_paths = 12; } 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 { 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 model, 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 PeerGroupConf { string auth_password = 1; string description = 2; uint32 local_as = 3; uint32 peer_as = 5; string peer_group_name = 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; } message PeerGroupState { string auth_password = 1; string description = 2; uint32 local_as = 3; uint32 peer_as = 5; string peer_group_name = 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; uint32 total_paths = 11; uint32 total_prefixes = 12; } 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; 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 { uint32 family = 1; bool enabled = 2; } message AfiSafiState { uint32 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; } 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 RoutingPolicy { repeated DefinedSet defined_set = 1; repeated Policy policy_definition = 2; } 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 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 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; }