659 lines
14 KiB
Protocol Buffer
659 lines
14 KiB
Protocol Buffer
// Copyright (C) 2018 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 "gobgp.proto";
|
|
|
|
package gobgpapi;
|
|
|
|
message OriginAttribute {
|
|
uint32 origin = 1;
|
|
}
|
|
|
|
message AsSegment {
|
|
uint32 type = 1;
|
|
repeated uint32 numbers = 2;
|
|
}
|
|
|
|
message AsPathAttribute {
|
|
repeated AsSegment segments = 1;
|
|
}
|
|
|
|
message NextHopAttribute {
|
|
string next_hop = 1;
|
|
}
|
|
|
|
message MultiExitDiscAttribute {
|
|
uint32 med = 1;
|
|
}
|
|
|
|
message LocalPrefAttribute {
|
|
uint32 local_pref = 1;
|
|
}
|
|
|
|
message AtomicAggregateAttribute {
|
|
}
|
|
|
|
message AggregatorAttribute {
|
|
uint32 as = 2;
|
|
string address = 3;
|
|
}
|
|
|
|
message CommunitiesAttribute {
|
|
repeated uint32 communities = 1;
|
|
}
|
|
|
|
message OriginatorIdAttribute {
|
|
string id = 1;
|
|
}
|
|
|
|
message ClusterListAttribute {
|
|
repeated string ids = 1;
|
|
}
|
|
|
|
// IPAddressPrefix represents the NLRI for:
|
|
// - AFI=1, SAFI=1
|
|
// - AFI=2, SAFI=1
|
|
message IPAddressPrefix {
|
|
uint32 prefix_len = 1;
|
|
string prefix = 2;
|
|
}
|
|
|
|
// LabeledIPAddressPrefix represents the NLRI for:
|
|
// - AFI=1, SAFI=4
|
|
// - AFI=2, SAFI=4
|
|
message LabeledIPAddressPrefix {
|
|
repeated uint32 labels = 1;
|
|
uint32 prefix_len = 2;
|
|
string prefix = 3;
|
|
}
|
|
|
|
// EncapsulationNLRI represents the NLRI for:
|
|
// - AFI=1, SAFI=7
|
|
// - AFI=2, SAFI=7
|
|
message EncapsulationNLRI {
|
|
string address = 1;
|
|
}
|
|
|
|
message RouteDistinguisherTwoOctetAS {
|
|
uint32 admin = 1;
|
|
uint32 assigned = 2;
|
|
}
|
|
|
|
message RouteDistinguisherIPAddress {
|
|
string admin = 1;
|
|
uint32 assigned = 2;
|
|
}
|
|
|
|
message RouteDistinguisherFourOctetAS {
|
|
uint32 admin = 1;
|
|
uint32 assigned = 2;
|
|
}
|
|
|
|
message EthernetSegmentIdentifier {
|
|
uint32 type = 1;
|
|
bytes value = 2;
|
|
}
|
|
|
|
// EVPNEthernetAutoDiscoveryRoute represents the NLRI for:
|
|
// - AFI=25, SAFI=70, RouteType=1
|
|
message EVPNEthernetAutoDiscoveryRoute {
|
|
// One of:
|
|
// - RouteDistinguisherTwoOctetAS
|
|
// - RouteDistinguisherIPAddressAS
|
|
// - RouteDistinguisherFourOctetAS
|
|
google.protobuf.Any rd = 1;
|
|
EthernetSegmentIdentifier esi = 2;
|
|
uint32 ethernet_tag = 3;
|
|
uint32 label = 4;
|
|
}
|
|
|
|
// EVPNMACIPAdvertisementRoute represents the NLRI for:
|
|
// - AFI=25, SAFI=70, RouteType=2
|
|
message EVPNMACIPAdvertisementRoute {
|
|
// One of:
|
|
// - RouteDistinguisherTwoOctetAS
|
|
// - RouteDistinguisherIPAddressAS
|
|
// - RouteDistinguisherFourOctetAS
|
|
google.protobuf.Any rd = 1;
|
|
EthernetSegmentIdentifier esi = 2;
|
|
uint32 ethernet_tag = 3;
|
|
string mac_address = 4;
|
|
string ip_address = 5;
|
|
repeated uint32 labels = 6;
|
|
}
|
|
|
|
// EVPNInclusiveMulticastEthernetTagRoute represents the NLRI for:
|
|
// - AFI=25, SAFI=70, RouteType=3
|
|
message EVPNInclusiveMulticastEthernetTagRoute {
|
|
// One of:
|
|
// - RouteDistinguisherTwoOctetAS
|
|
// - RouteDistinguisherIPAddressAS
|
|
// - RouteDistinguisherFourOctetAS
|
|
google.protobuf.Any rd = 1;
|
|
uint32 ethernet_tag = 2;
|
|
string ip_address = 3;
|
|
}
|
|
|
|
// EVPNEthernetSegmentRoute represents the NLRI for:
|
|
// - AFI=25, SAFI=70, RouteType=4
|
|
message EVPNEthernetSegmentRoute {
|
|
// One of:
|
|
// - RouteDistinguisherTwoOctetAS
|
|
// - RouteDistinguisherIPAddressAS
|
|
// - RouteDistinguisherFourOctetAS
|
|
google.protobuf.Any rd = 1;
|
|
EthernetSegmentIdentifier esi = 2;
|
|
string ip_address = 3;
|
|
}
|
|
|
|
// EVPNIPPrefixRoute represents the NLRI for:
|
|
// - AFI=25, SAFI=70, RouteType=5
|
|
message EVPNIPPrefixRoute {
|
|
// One of:
|
|
// - RouteDistinguisherTwoOctetAS
|
|
// - RouteDistinguisherIPAddressAS
|
|
// - RouteDistinguisherFourOctetAS
|
|
google.protobuf.Any rd = 1;
|
|
EthernetSegmentIdentifier esi = 2;
|
|
uint32 ethernet_tag = 3;
|
|
string ip_prefix = 4;
|
|
uint32 ip_prefix_len = 5;
|
|
string gw_address = 6;
|
|
uint32 label = 7;
|
|
}
|
|
|
|
// EVPNIPMSIRoute represents the NLRI for:
|
|
// - AFI=25, SAFI=70, RouteType=9
|
|
message EVPNIPMSIRoute {
|
|
// One of:
|
|
// - RouteDistinguisherTwoOctetAS
|
|
// - RouteDistinguisherIPAddressAS
|
|
// - RouteDistinguisherFourOctetAS
|
|
google.protobuf.Any rd = 1;
|
|
uint32 ethernet_tag = 2;
|
|
google.protobuf.Any rt = 3;
|
|
}
|
|
|
|
// LabeledVPNIPAddressPrefix represents the NLRI for:
|
|
// - AFI=1, SAFI=128
|
|
// - AFI=2, SAFI=128
|
|
message LabeledVPNIPAddressPrefix {
|
|
repeated uint32 labels = 1;
|
|
// One of:
|
|
// - TwoOctetAsSpecificExtended
|
|
// - IPv4AddressSpecificExtended
|
|
// - FourOctetAsSpecificExtended
|
|
google.protobuf.Any rd = 2;
|
|
uint32 prefix_len = 3;
|
|
string prefix = 4;
|
|
}
|
|
|
|
// RouteTargetMembershipNLRI represents the NLRI for:
|
|
// - AFI=1, SAFI=132
|
|
message RouteTargetMembershipNLRI {
|
|
uint32 as = 1;
|
|
// One of:
|
|
// - TwoOctetAsSpecificExtended
|
|
// - IPv4AddressSpecificExtended
|
|
// - FourOctetAsSpecificExtended
|
|
google.protobuf.Any rt = 2;
|
|
}
|
|
|
|
message FlowSpecIPPrefix {
|
|
uint32 type = 1;
|
|
uint32 prefix_len = 2;
|
|
string prefix = 3;
|
|
// IPv6 only
|
|
uint32 offset = 4;
|
|
}
|
|
|
|
message FlowSpecMAC {
|
|
uint32 type = 1;
|
|
string address = 2;
|
|
}
|
|
|
|
message FlowSpecComponentItem {
|
|
// Operator for Numeric type, Operand for Bitmask type
|
|
uint32 op = 1;
|
|
uint64 value = 2;
|
|
}
|
|
|
|
message FlowSpecComponent {
|
|
uint32 type = 1;
|
|
repeated FlowSpecComponentItem items = 2;
|
|
}
|
|
|
|
// FlowSpecNLRI represents the NLRI for:
|
|
// - AFI=1, SAFI=133
|
|
// - AFI=2, SAFI=133
|
|
message FlowSpecNLRI {
|
|
// One of:
|
|
// - FlowSpecIPPrefix
|
|
// - FlowSpecMAC
|
|
// - FlowSpecComponent
|
|
repeated google.protobuf.Any rules = 1;
|
|
}
|
|
|
|
// VPNFlowSpecNLRI represents the NLRI for:
|
|
// - AFI=1, SAFI=134
|
|
// - AFI=2, SAFI=134
|
|
// - AFI=25, SAFI=134
|
|
message VPNFlowSpecNLRI {
|
|
// One of:
|
|
// - RouteDistinguisherTwoOctetAS
|
|
// - RouteDistinguisherIPAddressAS
|
|
// - RouteDistinguisherFourOctetAS
|
|
google.protobuf.Any rd = 1;
|
|
// One of:
|
|
// - FlowSpecIPPrefix
|
|
// - FlowSpecMAC
|
|
// - FlowSpecComponent
|
|
repeated google.protobuf.Any rules = 2;
|
|
}
|
|
|
|
// OpaqueNLRI represents the NLRI for:
|
|
// - AFI=16397, SAFI=241
|
|
message OpaqueNLRI {
|
|
bytes key = 1;
|
|
bytes value = 2;
|
|
}
|
|
|
|
message LsNodeDescriptor {
|
|
uint32 asn = 1;
|
|
uint32 bgp_ls_id = 2;
|
|
uint32 ospf_area_id = 3;
|
|
bool pseudonode = 4;
|
|
string igp_router_id = 5;
|
|
}
|
|
|
|
message LsLinkDescriptor {
|
|
uint32 link_local_id = 1;
|
|
uint32 link_remote_id = 2;
|
|
string interface_addr_ipv4 = 3;
|
|
string neighbor_addr_ipv4 = 4;
|
|
string interface_addr_ipv6 = 5;
|
|
string neighbor_addr_ipv6 = 6;
|
|
}
|
|
|
|
message LsPrefixDescriptor {
|
|
repeated string ip_reachability = 1;
|
|
string ospf_route_type = 2;
|
|
}
|
|
|
|
message LsNodeNLRI {
|
|
LsNodeDescriptor local_node = 1;
|
|
}
|
|
|
|
message LsLinkNLRI {
|
|
LsNodeDescriptor local_node = 1;
|
|
LsNodeDescriptor remote_node = 2;
|
|
LsLinkDescriptor link_descriptor = 3;
|
|
}
|
|
|
|
message LsPrefixV4NLRI {
|
|
LsNodeDescriptor local_node = 1;
|
|
LsPrefixDescriptor prefix_descriptor = 2;
|
|
}
|
|
|
|
message LsPrefixV6NLRI {
|
|
LsNodeDescriptor local_node = 1;
|
|
LsPrefixDescriptor prefix_descriptor = 2;
|
|
}
|
|
|
|
// Based om RFC 7752, Table 1.
|
|
enum LsNLRIType {
|
|
LS_NLRI_UNKNOWN = 0;
|
|
LS_NLRI_NODE = 1;
|
|
LS_NLRI_LINK = 2;
|
|
LS_NLRI_PREFIX_V4 = 3;
|
|
LS_NLRI_PREFIX_V6 = 4;
|
|
}
|
|
|
|
// LsAddrPrefix represents the NLRI for:
|
|
// - AFI=16388, SAFI=71
|
|
message LsAddrPrefix {
|
|
LsNLRIType type = 1;
|
|
// One of:
|
|
// - LsNodeNLRI
|
|
// - LsLinkNLRI
|
|
// - LsPrefixV4NLRI
|
|
// - LsPrefixV6NLRI
|
|
google.protobuf.Any nlri = 2;
|
|
}
|
|
|
|
message MpReachNLRIAttribute {
|
|
gobgpapi.Family family = 1;
|
|
repeated string next_hops = 2;
|
|
// Each NLRI must be one of:
|
|
// - IPAddressPrefix
|
|
// - LabeledIPAddressPrefix
|
|
// - EncapsulationNLRI
|
|
// - EVPNEthernetAutoDiscoveryRoute
|
|
// - EVPNMACIPAdvertisementRoute
|
|
// - EVPNInclusiveMulticastEthernetTagRoute
|
|
// - EVPNEthernetSegmentRoute
|
|
// - EVPNIPPrefixRoute
|
|
// - EVPNIPMSIRoute
|
|
// - LabeledVPNIPAddressPrefix
|
|
// - RouteTargetMembershipNLRI
|
|
// - FlowSpecNLRI
|
|
// - VPNFlowSpecNLRI
|
|
// - OpaqueNLRI
|
|
// - LsAddrPrefix
|
|
repeated google.protobuf.Any nlris = 3;
|
|
}
|
|
|
|
message MpUnreachNLRIAttribute {
|
|
gobgpapi.Family family = 1;
|
|
// The same as NLRI field of MpReachNLRIAttribute
|
|
repeated google.protobuf.Any nlris = 3;
|
|
}
|
|
|
|
message TwoOctetAsSpecificExtended {
|
|
bool is_transitive = 1;
|
|
uint32 sub_type = 2;
|
|
uint32 as = 3;
|
|
uint32 local_admin = 4;
|
|
}
|
|
|
|
message IPv4AddressSpecificExtended {
|
|
bool is_transitive = 1;
|
|
uint32 sub_type = 2;
|
|
string address = 3;
|
|
uint32 local_admin = 4;
|
|
}
|
|
|
|
message FourOctetAsSpecificExtended {
|
|
bool is_transitive = 1;
|
|
uint32 sub_type = 2;
|
|
uint32 as = 3;
|
|
uint32 local_admin = 4;
|
|
}
|
|
|
|
message ValidationExtended {
|
|
uint32 state = 1;
|
|
}
|
|
|
|
message ColorExtended {
|
|
uint32 color = 1;
|
|
}
|
|
|
|
message EncapExtended {
|
|
uint32 tunnel_type = 1;
|
|
}
|
|
|
|
message DefaultGatewayExtended {
|
|
}
|
|
|
|
message OpaqueExtended {
|
|
bool is_transitive = 1;
|
|
bytes value = 3;
|
|
}
|
|
|
|
message ESILabelExtended {
|
|
bool is_single_active = 1;
|
|
uint32 label = 2;
|
|
}
|
|
|
|
message ESImportRouteTarget {
|
|
string es_import = 1;
|
|
}
|
|
|
|
message MacMobilityExtended {
|
|
bool is_sticky = 1;
|
|
uint32 sequence_num = 2;
|
|
}
|
|
|
|
message RouterMacExtended {
|
|
string mac = 1;
|
|
}
|
|
|
|
message TrafficRateExtended {
|
|
uint32 as = 1;
|
|
float rate = 2;
|
|
}
|
|
|
|
message TrafficActionExtended {
|
|
bool terminal = 1;
|
|
bool sample = 2;
|
|
}
|
|
|
|
message RedirectTwoOctetAsSpecificExtended {
|
|
uint32 as = 1;
|
|
uint32 local_admin = 2;
|
|
}
|
|
|
|
message RedirectIPv4AddressSpecificExtended {
|
|
string address = 1;
|
|
uint32 local_admin = 2;
|
|
}
|
|
|
|
message RedirectFourOctetAsSpecificExtended {
|
|
uint32 as = 1;
|
|
uint32 local_admin = 2;
|
|
}
|
|
|
|
message TrafficRemarkExtended {
|
|
uint32 dscp = 1;
|
|
}
|
|
|
|
message UnknownExtended {
|
|
uint32 type = 1;
|
|
bytes value = 2;
|
|
}
|
|
|
|
message ExtendedCommunitiesAttribute {
|
|
// Each Community must be one of:
|
|
// - TwoOctetAsSpecificExtended
|
|
// - IPv4AddressSpecificExtended
|
|
// - FourOctetAsSpecificExtended
|
|
// - OpaqueExtended
|
|
// - ESILabelExtended
|
|
// - MacMobilityExtended
|
|
// - RouterMacExtended
|
|
// - TrafficRateExtended
|
|
// - TrafficActionExtended
|
|
// - RedirectTwoOctetAsSpecificExtended
|
|
// - RedirectIPv4AddressSpecificExtended
|
|
// - RedirectFourOctetAsSpecificExtended
|
|
// - TrafficRemarkExtended
|
|
// - UnknownExtended
|
|
repeated google.protobuf.Any communities = 1;
|
|
}
|
|
|
|
message As4PathAttribute {
|
|
repeated AsSegment segments = 1;
|
|
}
|
|
|
|
message As4AggregatorAttribute {
|
|
uint32 as = 2;
|
|
string address = 3;
|
|
}
|
|
|
|
message PmsiTunnelAttribute {
|
|
uint32 flags = 1;
|
|
uint32 type = 2;
|
|
uint32 label = 3;
|
|
bytes id = 4;
|
|
}
|
|
|
|
message TunnelEncapSubTLVEncapsulation {
|
|
uint32 key = 1;
|
|
bytes cookie = 2;
|
|
}
|
|
|
|
message TunnelEncapSubTLVProtocol {
|
|
uint32 protocol = 1;
|
|
}
|
|
|
|
message TunnelEncapSubTLVColor {
|
|
uint32 color = 1;
|
|
}
|
|
|
|
message TunnelEncapSubTLVUnknown {
|
|
uint32 type = 1;
|
|
bytes value = 2;
|
|
}
|
|
|
|
message TunnelEncapTLV {
|
|
uint32 type = 1;
|
|
// Each TLV must be one of:
|
|
// - TunnelEncapSubTLVEncapsulation
|
|
// - TunnelEncapSubTLVProtocol
|
|
// - TunnelEncapSubTLVColor
|
|
// - TunnelEncapSubTLVUnknown
|
|
repeated google.protobuf.Any tlvs = 2;
|
|
}
|
|
|
|
message TunnelEncapAttribute {
|
|
repeated TunnelEncapTLV tlvs = 1;
|
|
}
|
|
|
|
message IPv6AddressSpecificExtended {
|
|
bool is_transitive = 1;
|
|
uint32 sub_type = 2;
|
|
string address = 3;
|
|
uint32 local_admin = 4;
|
|
}
|
|
|
|
message RedirectIPv6AddressSpecificExtended {
|
|
string address = 1;
|
|
uint32 local_admin = 2;
|
|
}
|
|
|
|
message IP6ExtendedCommunitiesAttribute {
|
|
// Each Community must be one of:
|
|
// - IPv6AddressSpecificExtended
|
|
// - RedirectIPv6AddressSpecificExtended
|
|
repeated google.protobuf.Any communities = 1;
|
|
}
|
|
|
|
message AigpTLVIGPMetric {
|
|
uint64 metric = 1;
|
|
}
|
|
|
|
message AigpTLVUnknown {
|
|
uint32 type = 1;
|
|
bytes value = 2;
|
|
}
|
|
|
|
message AigpAttribute {
|
|
// Each TLV must be one of:
|
|
// - AigpTLVIGPMetric
|
|
// - AigpTLVUnknown
|
|
repeated google.protobuf.Any tlvs = 1;
|
|
}
|
|
|
|
message LargeCommunity {
|
|
uint32 global_admin = 1;
|
|
uint32 local_data1 = 2;
|
|
uint32 local_data2 = 3;
|
|
}
|
|
|
|
message LargeCommunitiesAttribute {
|
|
repeated LargeCommunity communities = 1;
|
|
}
|
|
|
|
message LsNodeFlags {
|
|
bool overload = 1;
|
|
bool attached = 2;
|
|
bool external = 3;
|
|
bool abr = 4;
|
|
bool router = 5;
|
|
bool v6 = 6;
|
|
}
|
|
|
|
message LsIGPFlags {
|
|
bool down = 1;
|
|
bool no_unicast = 2;
|
|
bool local_address = 3;
|
|
bool propagate_nssa = 4;
|
|
}
|
|
|
|
message LsSrRange {
|
|
uint32 begin = 1;
|
|
uint32 end = 2;
|
|
}
|
|
|
|
message LsSrCapabilities {
|
|
bool ipv4_supported = 1;
|
|
bool ipv6_supported = 2;
|
|
repeated LsSrRange ranges = 3;
|
|
}
|
|
|
|
message LsSrLocalBlock {
|
|
repeated LsSrRange ranges = 1;
|
|
}
|
|
|
|
message LsAttributeNode {
|
|
string name = 1;
|
|
LsNodeFlags flags = 2;
|
|
string local_router_id = 3;
|
|
string local_router_id_v6 = 4;
|
|
bytes isis_area = 5;
|
|
bytes opaque = 6;
|
|
|
|
LsSrCapabilities sr_capabilities = 7;
|
|
bytes sr_algorithms = 8;
|
|
LsSrLocalBlock sr_local_block = 9;
|
|
}
|
|
|
|
message LsAttributeLink {
|
|
string name = 1;
|
|
string local_router_id = 2;
|
|
string local_router_id_v6 = 3;
|
|
string remote_router_id = 4;
|
|
string remote_router_id_v6 = 5;
|
|
uint32 admin_group = 6;
|
|
uint32 default_te_metric = 7;
|
|
uint32 igp_metric = 8;
|
|
bytes opaque = 9;
|
|
|
|
float bandwidth = 10;
|
|
float reservable_bandwidth = 11;
|
|
repeated float unreserved_bandwidth = 12;
|
|
|
|
uint32 sr_adjacency_sid = 13;
|
|
repeated uint32 srlgs = 14;
|
|
}
|
|
|
|
message LsAttributePrefix {
|
|
LsIGPFlags igp_flags = 1;
|
|
bytes opaque = 2;
|
|
|
|
uint32 sr_prefix_sid = 3;
|
|
}
|
|
|
|
message LsAttribute {
|
|
LsAttributeNode node = 1;
|
|
LsAttributeLink link = 2;
|
|
LsAttributePrefix prefix = 3;
|
|
}
|
|
|
|
message UnknownAttribute {
|
|
uint32 flags = 1;
|
|
uint32 type = 2;
|
|
bytes value = 3;
|
|
}
|