photoncloud-monorepo/fiberlb/crates/fiberlb-server/proto/api/attribute.proto

584 lines
13 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";
package api;
import "api/common.proto";
import "api/extcom.proto";
import "api/nlri.proto";
option go_package = "github.com/osrg/gobgp/v4/api;api";
message Attribute {
oneof attr {
UnknownAttribute unknown = 1;
OriginAttribute origin = 2;
AsPathAttribute as_path = 3;
NextHopAttribute next_hop = 4;
MultiExitDiscAttribute multi_exit_disc = 5;
LocalPrefAttribute local_pref = 6;
AtomicAggregateAttribute atomic_aggregate = 7;
AggregatorAttribute aggregator = 8;
CommunitiesAttribute communities = 9;
OriginatorIdAttribute originator_id = 10;
ClusterListAttribute cluster_list = 11;
MpReachNLRIAttribute mp_reach = 12;
MpUnreachNLRIAttribute mp_unreach = 13;
ExtendedCommunitiesAttribute extended_communities = 14;
As4PathAttribute as4_path = 15;
As4AggregatorAttribute as4_aggregator = 16;
PmsiTunnelAttribute pmsi_tunnel = 17;
TunnelEncapAttribute tunnel_encap = 18;
IP6ExtendedCommunitiesAttribute ip6_extended_communities = 19;
AigpAttribute aigp = 20;
LargeCommunitiesAttribute large_communities = 21;
LsAttribute ls = 22;
PrefixSID prefix_sid = 23;
}
}
message OriginAttribute {
uint32 origin = 1;
}
message AsSegment {
enum Type {
TYPE_UNSPECIFIED = 0;
TYPE_AS_SET = 1;
TYPE_AS_SEQUENCE = 2;
TYPE_AS_CONFED_SEQUENCE = 3;
TYPE_AS_CONFED_SET = 4;
}
Type 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 asn = 1;
string address = 2;
}
message CommunitiesAttribute {
repeated uint32 communities = 1;
}
message OriginatorIdAttribute {
string id = 1;
}
message ClusterListAttribute {
repeated string ids = 1;
}
message MpReachNLRIAttribute {
Family family = 1;
repeated string next_hops = 2;
repeated NLRI nlris = 3;
}
message MpUnreachNLRIAttribute {
api.Family family = 1;
// The same as NLRI field of MpReachNLRIAttribute
repeated NLRI nlris = 3;
}
message ExtendedCommunitiesAttribute {
repeated ExtendedCommunity communities = 1;
}
message As4PathAttribute {
repeated AsSegment segments = 1;
}
message As4AggregatorAttribute {
uint32 asn = 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 TunnelEncapSubTLVSRPreference {
uint32 flags = 1;
uint32 preference = 2;
}
message TunnelEncapSubTLVSRCandidatePathName {
string candidate_path_name = 1;
}
message TunnelEncapSubTLVSRPriority {
uint32 priority = 1;
}
message TunnelEncapSubTLVSRBindingSID {
oneof bsid {
SRBindingSID sr_binding_sid = 1;
SRv6BindingSID srv6_binding_sid = 2;
}
}
message SRBindingSID {
bool s_flag = 1;
bool i_flag = 2;
bytes sid = 3;
}
enum SRV6Behavior {
SRV6_BEHAVIOR_UNSPECIFIED = 0;
SRV6_BEHAVIOR_END = 1;
SRV6_BEHAVIOR_END_WITH_PSP = 2;
SRV6_BEHAVIOR_END_WITH_USP = 3;
SRV6_BEHAVIOR_END_WITH_PSP_USP = 4;
SRV6_BEHAVIOR_ENDX = 5;
SRV6_BEHAVIOR_ENDX_WITH_PSP = 6;
SRV6_BEHAVIOR_ENDX_WITH_USP = 7;
SRV6_BEHAVIOR_ENDX_WITH_PSP_USP = 8;
SRV6_BEHAVIOR_ENDT = 9;
SRV6_BEHAVIOR_ENDT_WITH_PSP = 10;
SRV6_BEHAVIOR_ENDT_WITH_USP = 11;
SRV6_BEHAVIOR_ENDT_WITH_PSP_USP = 12;
SRV6_BEHAVIOR_END_B6_ENCAPS = 14;
SRV6_BEHAVIOR_END_BM = 15;
SRV6_BEHAVIOR_END_DX6 = 16;
SRV6_BEHAVIOR_END_DX4 = 17;
SRV6_BEHAVIOR_END_DT6 = 18;
SRV6_BEHAVIOR_END_DT4 = 19;
SRV6_BEHAVIOR_END_DT46 = 20;
SRV6_BEHAVIOR_END_DX2 = 21;
SRV6_BEHAVIOR_END_DX2V = 22;
SRV6_BEHAVIOR_END_DT2U = 23;
SRV6_BEHAVIOR_END_DT2M = 24;
SRV6_BEHAVIOR_END_B6_ENCAPS_RED = 27;
SRV6_BEHAVIOR_END_WITH_USD = 28;
SRV6_BEHAVIOR_END_WITH_PSP_USD = 29;
SRV6_BEHAVIOR_END_WITH_USP_USD = 30;
SRV6_BEHAVIOR_END_WITH_PSP_USP_USD = 31;
SRV6_BEHAVIOR_ENDX_WITH_USD = 32;
SRV6_BEHAVIOR_ENDX_WITH_PSP_USD = 33;
SRV6_BEHAVIOR_ENDX_WITH_USP_USD = 34;
SRV6_BEHAVIOR_ENDX_WITH_PSP_USP_USD = 35;
SRV6_BEHAVIOR_ENDT_WITH_USD = 36;
SRV6_BEHAVIOR_ENDT_WITH_PSP_USD = 37;
SRV6_BEHAVIOR_ENDT_WITH_USP_USD = 38;
SRV6_BEHAVIOR_ENDT_WITH_PSP_USP_USD = 39;
SRV6_BEHAVIOR_ENDM_GTP6D = 69; // 0x0045
SRV6_BEHAVIOR_ENDM_GTP6DI = 70; // 0x0046
SRV6_BEHAVIOR_ENDM_GTP6E = 71; // 0x0047
SRV6_BEHAVIOR_ENDM_GTP4E = 72; // 0x0048
}
message SRv6EndPointBehavior {
SRV6Behavior behavior = 1;
uint32 block_len = 2;
uint32 node_len = 3;
uint32 func_len = 4;
uint32 arg_len = 5;
}
message SRv6BindingSID {
bool s_flag = 1;
bool i_flag = 2;
bool b_flag = 3;
bytes sid = 4;
SRv6EndPointBehavior endpoint_behavior_structure = 5;
}
enum ENLPType {
ENLP_TYPE_UNSPECIFIED = 0;
ENLP_TYPE_TYPE1 = 1;
ENLP_TYPE_TYPE2 = 2;
ENLP_TYPE_TYPE3 = 3;
ENLP_TYPE_TYPE4 = 4;
}
message TunnelEncapSubTLVSRENLP {
uint32 flags = 1;
ENLPType enlp = 2;
}
message SRWeight {
uint32 flags = 1;
uint32 weight = 2;
}
message SegmentFlags {
bool v_flag = 1;
bool a_flag = 2;
bool s_flag = 3;
bool b_flag = 4;
}
message SegmentTypeA {
SegmentFlags flags = 1;
uint32 label = 2;
}
message SegmentTypeB {
SegmentFlags flags = 1;
bytes sid = 2;
SRv6EndPointBehavior endpoint_behavior_structure = 3;
}
message TunnelEncapSubTLVSRSegmentList {
SRWeight weight = 1;
message Segment {
oneof segment {
SegmentTypeA a = 1;
SegmentTypeB b = 2;
}
}
repeated Segment segments = 2;
}
message TunnelEncapSubTLVEgressEndpoint {
string address = 1;
}
message TunnelEncapSubTLVUDPDestPort {
uint32 port = 1;
}
message TunnelEncapSubTLVUnknown {
uint32 type = 1;
bytes value = 2;
}
message TunnelEncapTLV {
uint32 type = 1;
message TLV {
oneof tlv {
TunnelEncapSubTLVUnknown unknown = 1;
TunnelEncapSubTLVEncapsulation encapsulation = 2;
TunnelEncapSubTLVProtocol protocol = 3;
TunnelEncapSubTLVColor color = 4;
TunnelEncapSubTLVEgressEndpoint egress_endpoint = 5;
TunnelEncapSubTLVUDPDestPort udp_dest_port = 6;
TunnelEncapSubTLVSRPreference sr_preference = 7;
TunnelEncapSubTLVSRPriority sr_priority = 8;
TunnelEncapSubTLVSRCandidatePathName sr_candidate_path_name = 9;
TunnelEncapSubTLVSRENLP sr_enlp = 10;
TunnelEncapSubTLVSRBindingSID sr_binding_sid = 11;
TunnelEncapSubTLVSRSegmentList sr_segment_list = 12;
}
}
repeated TLV 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 {
message Community {
oneof extcom {
IPv6AddressSpecificExtended ipv6_address_specific = 1;
RedirectIPv6AddressSpecificExtended redirect_ipv6_address_specific = 2;
}
}
repeated Community communities = 1;
}
message AigpTLVIGPMetric {
uint64 metric = 1;
}
message AigpTLVUnknown {
uint32 type = 1;
bytes value = 2;
}
message AigpAttribute {
message TLV {
oneof tlv {
AigpTLVUnknown unknown = 1;
AigpTLVIGPMetric igp_metric = 2;
}
}
repeated TLV 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;
LsSrv6EndXSID srv6_end_x_sid = 15;
}
message LsAttributePrefix {
LsIGPFlags igp_flags = 1;
bytes opaque = 2;
uint32 sr_prefix_sid = 3;
}
message LsBgpPeerSegmentSIDFlags {
bool value = 1;
bool local = 2;
bool backup = 3;
bool persistent = 4;
}
message LsBgpPeerSegmentSID {
LsBgpPeerSegmentSIDFlags flags = 1;
uint32 weight = 2;
uint32 sid = 3;
}
message LsAttributeBgpPeerSegment {
LsBgpPeerSegmentSID bgp_peer_node_sid = 1;
LsBgpPeerSegmentSID bgp_peer_adjacency_sid = 2;
LsBgpPeerSegmentSID bgp_peer_set_sid = 3;
}
message LsSrv6EndXSID {
uint32 endpoint_behavior = 1;
uint32 flags = 2;
uint32 algorithm = 3;
uint32 weight = 4;
uint32 reserved = 5;
repeated string sids = 6;
LsSrv6SIDStructure srv6_sid_structure = 7;
}
message LsSrv6SIDStructure {
uint32 local_block = 1;
uint32 local_node = 2;
uint32 local_func = 3;
uint32 local_arg = 4;
}
message LsSrv6EndpointBehavior {
uint32 endpoint_behavior = 1;
uint32 flags = 2;
uint32 algorithm = 3;
}
message LsSrv6BgpPeerNodeSID {
uint32 flags = 1;
uint32 weight = 2;
uint32 peer_as = 3;
string peer_bgp_id = 4;
}
message LsAttributeSrv6SID {
LsSrv6SIDStructure srv6_sid_structure = 1;
LsSrv6EndpointBehavior srv6_endpoint_behavior = 2;
LsSrv6BgpPeerNodeSID srv6_bgp_peer_node_sid = 3;
}
message LsAttribute {
LsAttributeNode node = 1;
LsAttributeLink link = 2;
LsAttributePrefix prefix = 3;
LsAttributeBgpPeerSegment bgp_peer_segment = 4;
LsAttributeSrv6SID srv6_sid = 5;
}
message UnknownAttribute {
uint32 flags = 1;
uint32 type = 2;
bytes value = 3;
}
// https://www.rfc-editor.org/rfc/rfc9252.html#section-3.2.1
message SRv6StructureSubSubTLV {
uint32 locator_block_length = 1;
uint32 locator_node_length = 2;
uint32 function_length = 3;
uint32 argument_length = 4;
uint32 transposition_length = 5;
uint32 transposition_offset = 6;
}
message SRv6SubSubTLV {
oneof tlv {
SRv6StructureSubSubTLV structure = 1;
}
}
message SRv6SubSubTLVs {
repeated SRv6SubSubTLV tlvs = 1;
}
message SRv6SIDFlags {
// Placeholder for future sid flags
bool flag_1 = 1;
}
// https://tools.ietf.org/html/draft-dawra-bess-srv6-services-02#section-2.1.1
message SRv6InformationSubTLV {
bytes sid = 1;
SRv6SIDFlags flags = 2;
uint32 endpoint_behavior = 3;
map<uint32, SRv6SubSubTLVs> sub_sub_tlvs = 4;
}
message SRv6SubTLV {
oneof tlv {
SRv6InformationSubTLV information = 1;
}
}
message SRv6SubTLVs {
repeated SRv6SubTLV tlvs = 1;
}
// https://www.rfc-editor.org/rfc/rfc9252.html#section-2
message SRv6L3ServiceTLV {
map<uint32, SRv6SubTLVs> sub_tlvs = 1;
}
// https://www.rfc-editor.org/rfc/rfc9252.html#section-2
message SRv6L2ServiceTLV {
map<uint32, SRv6SubTLVs> sub_tlvs = 1;
}
// https://tools.ietf.org/html/rfc8669
message PrefixSID {
// tlv is one of:
message TLV {
oneof tlv {
// IndexLabelTLV Type 1 (not yet implemented)
// OriginatorSRGBTLV Type 3 (not yet implemented)
SRv6L3ServiceTLV l3_service = 3;
SRv6L2ServiceTLV l2_service = 4;
}
}
repeated TLV tlvs = 1;
}