// 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 api; // Interface exported by the server. service Grpc { rpc GetNeighbors(Arguments) returns (stream Peer) {} rpc GetNeighbor(Arguments) returns (Peer) {} rpc GetRib(Arguments) returns (stream Destination) {} rpc GetAdjRib(Arguments) returns (stream Path) {} 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(stream ModPathArguments) returns (stream Error) {} rpc GetPolicyPrefixes(PolicyArguments) returns (stream PrefixSet) {} rpc GetPolicyPrefix(PolicyArguments) returns (PrefixSet) {} rpc ModPolicyPrefix(stream PolicyArguments) returns (stream Error) {} } message Error { enum ErrorCode { SUCCESS = 0; FAIL = 1; } ErrorCode code = 1; string msg = 2; } message Arguments { Resource resource = 1; AddressFamily af = 2; string router_id = 3; } message ModPathArguments { Resource resource = 1; Path path = 2; } message PolicyArguments { Resource resource = 1; Operation operation = 2; string name = 3; PrefixSet prefix_set = 4; } enum Resource { GLOBAL = 0; LOCAL = 1; ADJ_IN = 2; ADJ_OUT = 3; POLICY_PREFIX = 4; } enum Operation { ADD = 0; DEL = 1; DEL_ALL = 2; } enum AFI { UNKNOWN_AFI = 0; IP = 1; IP6 = 2; L2VPN = 25; } enum SAFI { UNKNOWN_SAFI = 0; UNICAST = 1; MULTICAST = 2; MPLS_LABEL = 4; ENCAP = 7; VPLS = 65; EVPN = 70; MPLS_VPN = 128; MPLS_VPN_MULTICAST = 129; ROUTE_TARGET_CONSTRAINTS = 132; } message AddressFamily { AFI Afi = 1; SAFI Safi = 2; } enum BGP_CAPABILITY { UNKNOWN_CAP = 0; MULTIPROTOCOL = 1; ROUTE_REFRESH = 2; CARRYING_LABEL_INFO = 4; GRACEFUL_RESTART = 64; FOUR_OCTET_AS_NUMBER = 65; ENHANCED_ROUTE_REFRESH = 70; ROUTE_REFRESH_CISCO = 128; } message GracefulRestartTuple { AddressFamily af = 1; uint32 flags = 2; } message GracefulRestart { uint32 flags = 1; uint32 time = 2; repeated GracefulRestartTuple tuples = 3; } message Capability { BGP_CAPABILITY code = 1; AddressFamily multi_protocol = 2; GracefulRestart graceful_restart = 3; uint32 asn = 4; } enum Origin { IGP = 0; EGP = 1; INCOMPLETE = 2; } message Aggregator { uint32 as = 1; string address = 2; } enum EXTENDED_COMMUNITIE_TYPE { TWO_OCTET_AS_SPECIFIC = 0; IP4_SPECIFIC = 1; FOUR_OCTET_AS_SPECIFIC = 2; OPAQUE = 3; } enum EXTENDED_COMMUNITIE_SUBTYPE { ORIGIN_VALIDATION = 0; ROUTE_TARGET = 2; ROUTE_ORIGIN = 3; } message ExtendedCommunity { EXTENDED_COMMUNITIE_TYPE type = 1; EXTENDED_COMMUNITIE_SUBTYPE subtype = 2; bool is_transitive = 3; uint32 asn = 4; string ipv4 = 5; uint32 local_admin = 6; } enum TUNNEL_TYPE { UNKNOWN_TUNNEL_TYPE = 0; L2TPV3_OVER_IP = 1; GRE = 2; IP_IN_IP = 7; VXLAN = 8; NVGRE = 9; MPLS = 10; MPLS_IN_GRE = 11; VXLAN_GRE = 12; } enum EVPN_TYPE { UNKNOWN_EVPN_TYPE = 0; ROUTE_TYPE_ETHERNET_AUTO_DISCOVERY = 1; ROUTE_TYPE_MAC_IP_ADVERTISEMENT = 2; INCLUSIVE_MULTICAST_ETHERNET_TAG = 3; ETHERNET_SEGMENT_ROUTE = 4; } message EVPNNlri { EVPN_TYPE type = 1; // EvpnAutoDiscoveryRoute = 2; EvpnMacIpAdvertisement mac_ip_adv = 3; // EvpnInclusiveMulticastEthernetTag = 4; // EvpnEthernetSegmentRoute = 5; } message EvpnMacIpAdvertisement { string mac_addr = 1; uint32 mac_addr_len = 2; string ip_addr = 3; uint32 ip_addr_len = 4; string rd = 5; string esi = 6; uint32 etag = 7; repeated uint32 labels = 8; } message RTNlri { uint32 asn = 1; ExtendedCommunity target = 2; uint32 length = 3; } message Nlri { AddressFamily af = 1; string prefix = 2; string nexthop = 3; EVPNNlri evpn_nlri = 4; RTNlri rt_nlri = 5; } enum ENCAP_SUBTLV_TYPE { UNKNOWN_SUBTLV_TYPE = 0; ENCAPSULATION = 1; PROTOCOL = 2; COLOR = 4; } message TunnelEncapSubTLV { ENCAP_SUBTLV_TYPE type = 1; string value = 2; uint32 key = 3; string cookie = 4; uint32 protocol = 5; uint32 color = 6; } message TunnelEncapTLV { TUNNEL_TYPE type = 1; repeated TunnelEncapSubTLV sub_tlv = 2; } enum BGP_ATTR_TYPE { UNKNOWN_ATTR = 0; ORIGIN = 1; AS_PATH = 2; NEXT_HOP = 3; MULTI_EXIT_DISC = 4; LOCAL_PREF = 5; ATOMIC_AGGREGATE = 6; AGGREGATOR = 7; COMMUNITIES = 8; ORIGINATOR_ID = 9; CLUSTER_LIST = 10; MP_REACH_NLRI = 14; MP_UNREACH_NLRI = 15; EXTENDED_COMMUNITIES = 16; AS4_PATH = 17; AS4_AGGREGATOR = 18; TUNNEL_ENCAP = 23; } message PathAttr { BGP_ATTR_TYPE type = 1; repeated string value = 2; Origin origin = 3; repeated uint32 as_path = 4; string nexthop = 5; uint32 metric = 6; uint32 pref = 7; Aggregator aggregator = 8; repeated uint32 communites = 9; string originator = 10; repeated string cluster = 11; repeated Nlri nlri = 12; repeated TunnelEncapTLV tunnel_encap = 13; } message Path { Nlri nlri = 1; string nexthop = 2; int64 age = 3; repeated PathAttr attrs = 4; bool best = 5; bool is_withdraw = 6; } message Destination { string prefix = 1; repeated Path paths = 2; uint32 best_path_idx = 3; } message PeerConf { string remote_ip = 1; string id = 2; uint32 remote_as = 3; bool cap_refresh = 4; bool cap_enhanced_refresh = 5; repeated Capability remote_cap = 6; repeated Capability local_cap = 7; uint32 holdtime = 8; uint32 keepalive_interval = 9; } message PeerInfo { string bgp_state = 1; string admin_state = 2; uint32 fsm_established_transitions = 3; uint32 total_message_out = 4; uint32 total_message_in = 5; uint32 update_message_out = 6; uint32 update_message_in = 7; uint32 keep_alive_message_out = 8; uint32 keep_alive_message_in = 9; uint32 open_message_out = 10; uint32 open_message_in = 11; uint32 notification_out = 12; uint32 notification_in = 13; uint32 refresh_message_out = 14; uint32 refresh_message_in = 15; uint32 discarded_out = 16; uint32 discarded_in = 17; int64 uptime = 18; int64 downtime = 19; string last_error = 20; uint32 received = 21; uint32 accepted = 22; uint32 advertized = 23; uint32 out_q = 24; uint32 flops = 25; uint32 negotiated_holdtime = 26; uint32 keepalive_interval = 27; } message Peer { PeerConf conf = 1; PeerInfo info = 2; } message Prefix { string address = 1; uint32 mask_length = 2; string mask_length_range = 3; } message PrefixSet { string prefix_set_name = 1; repeated Prefix prefix_list = 2; }