draft-ietf-rift-rift-07.txt   draft-ietf-rift-rift-08.txt 
RIFT Working Group A. Przygienda, Ed. RIFT Working Group A. Przygienda, Ed.
Internet-Draft Juniper Internet-Draft Juniper
Intended status: Standards Track A. Sharma Intended status: Standards Track A. Sharma
Expires: February 15, 2020 Comcast Expires: March 11, 2020 Comcast
P. Thubert P. Thubert
Cisco Cisco
Bruno. Rijsman Bruno. Rijsman
Individual Individual
Dmitry. Afanasiev Dmitry. Afanasiev
Yandex Yandex
August 14, 2019 September 8, 2019
RIFT: Routing in Fat Trees RIFT: Routing in Fat Trees
draft-ietf-rift-rift-07 draft-ietf-rift-rift-08
Abstract Abstract
This document outlines a specialized, dynamic routing protocol for This document outlines a specialized, dynamic routing protocol for
Clos and fat-tree network topologies. The protocol (1) deals with Clos and fat-tree network topologies. The protocol (1) deals with
fully automated construction of fat-tree topologies based on fully automated construction of fat-tree topologies based on
detection of links, (2) minimizes the amount of routing state held at detection of links, (2) minimizes the amount of routing state held at
each level, (3) automatically prunes and load balances topology each level, (3) automatically prunes and load balances topology
flooding exchanges over a sufficient subset of links, (4) supports flooding exchanges over a sufficient subset of links, (4) supports
automatic disaggregation of prefixes on link and node failures to automatic disaggregation of prefixes on link and node failures to
skipping to change at page 2, line 4 skipping to change at page 2, line 4
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on February 15, 2020. This Internet-Draft will expire on March 11, 2020.
Copyright Notice Copyright Notice
Copyright (c) 2019 IETF Trust and the persons identified as the Copyright (c) 2019 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 5, line 20 skipping to change at page 5, line 20
9.2.16.1. Requested Entries . . . . . . . . . . . . . . . 103 9.2.16.1. Requested Entries . . . . . . . . . . . . . . . 103
9.2.17. RIFT/encoding/Neighbor . . . . . . . . . . . . . . . 104 9.2.17. RIFT/encoding/Neighbor . . . . . . . . . . . . . . . 104
9.2.17.1. Requested Entries . . . . . . . . . . . . . . . 104 9.2.17.1. Requested Entries . . . . . . . . . . . . . . . 104
9.2.18. RIFT/encoding/NodeCapabilities . . . . . . . . . . . 104 9.2.18. RIFT/encoding/NodeCapabilities . . . . . . . . . . . 104
9.2.18.1. Requested Entries . . . . . . . . . . . . . . . 104 9.2.18.1. Requested Entries . . . . . . . . . . . . . . . 104
9.2.19. RIFT/encoding/NodeFlags . . . . . . . . . . . . . . . 105 9.2.19. RIFT/encoding/NodeFlags . . . . . . . . . . . . . . . 105
9.2.19.1. Requested Entries . . . . . . . . . . . . . . . 105 9.2.19.1. Requested Entries . . . . . . . . . . . . . . . 105
9.2.20. RIFT/encoding/NodeNeighborsTIEElement . . . . . . . . 105 9.2.20. RIFT/encoding/NodeNeighborsTIEElement . . . . . . . . 105
9.2.20.1. Requested Entries . . . . . . . . . . . . . . . 105 9.2.20.1. Requested Entries . . . . . . . . . . . . . . . 105
9.2.21. RIFT/encoding/NodeTIEElement . . . . . . . . . . . . 105 9.2.21. RIFT/encoding/NodeTIEElement . . . . . . . . . . . . 105
9.2.21.1. Requested Entries . . . . . . . . . . . . . . . 105 9.2.21.1. Requested Entries . . . . . . . . . . . . . . . 106
9.2.22. RIFT/encoding/PacketContent . . . . . . . . . . . . . 106 9.2.22. RIFT/encoding/PacketContent . . . . . . . . . . . . . 106
9.2.22.1. Requested Entries . . . . . . . . . . . . . . . 106 9.2.22.1. Requested Entries . . . . . . . . . . . . . . . 106
9.2.23. RIFT/encoding/PacketHeader . . . . . . . . . . . . . 106 9.2.23. RIFT/encoding/PacketHeader . . . . . . . . . . . . . 106
9.2.23.1. Requested Entries . . . . . . . . . . . . . . . 106 9.2.23.1. Requested Entries . . . . . . . . . . . . . . . 106
9.2.24. RIFT/encoding/PrefixAttributes . . . . . . . . . . . 107 9.2.24. RIFT/encoding/PrefixAttributes . . . . . . . . . . . 107
9.2.24.1. Requested Entries . . . . . . . . . . . . . . . 107 9.2.24.1. Requested Entries . . . . . . . . . . . . . . . 107
9.2.25. RIFT/encoding/PrefixTIEElement . . . . . . . . . . . 107 9.2.25. RIFT/encoding/PrefixTIEElement . . . . . . . . . . . 107
9.2.25.1. Requested Entries . . . . . . . . . . . . . . . 107 9.2.25.1. Requested Entries . . . . . . . . . . . . . . . 107
9.2.26. RIFT/encoding/ProtocolPacket . . . . . . . . . . . . 107 9.2.26. RIFT/encoding/ProtocolPacket . . . . . . . . . . . . 108
9.2.26.1. Requested Entries . . . . . . . . . . . . . . . 107 9.2.26.1. Requested Entries . . . . . . . . . . . . . . . 108
9.2.27. RIFT/encoding/TIDEPacket . . . . . . . . . . . . . . 108 9.2.27. RIFT/encoding/TIDEPacket . . . . . . . . . . . . . . 108
9.2.27.1. Requested Entries . . . . . . . . . . . . . . . 108 9.2.27.1. Requested Entries . . . . . . . . . . . . . . . 108
9.2.28. RIFT/encoding/TIEElement . . . . . . . . . . . . . . 108 9.2.28. RIFT/encoding/TIEElement . . . . . . . . . . . . . . 108
9.2.28.1. Requested Entries . . . . . . . . . . . . . . . 108 9.2.28.1. Requested Entries . . . . . . . . . . . . . . . 108
9.2.29. RIFT/encoding/TIEHeader . . . . . . . . . . . . . . . 109 9.2.29. RIFT/encoding/TIEHeader . . . . . . . . . . . . . . . 109
9.2.29.1. Requested Entries . . . . . . . . . . . . . . . 109 9.2.29.1. Requested Entries . . . . . . . . . . . . . . . 110
9.2.30. RIFT/encoding/TIEHeaderWithLifeTime . . . . . . . . . 110 9.2.30. RIFT/encoding/TIEHeaderWithLifeTime . . . . . . . . . 110
9.2.30.1. Requested Entries . . . . . . . . . . . . . . . 110 9.2.30.1. Requested Entries . . . . . . . . . . . . . . . 110
9.2.31. RIFT/encoding/TIEID . . . . . . . . . . . . . . . . . 110 9.2.31. RIFT/encoding/TIEID . . . . . . . . . . . . . . . . . 110
9.2.31.1. Requested Entries . . . . . . . . . . . . . . . 110 9.2.31.1. Requested Entries . . . . . . . . . . . . . . . 111
9.2.32. RIFT/encoding/TIEPacket . . . . . . . . . . . . . . . 111 9.2.32. RIFT/encoding/TIEPacket . . . . . . . . . . . . . . . 111
9.2.32.1. Requested Entries . . . . . . . . . . . . . . . 111 9.2.32.1. Requested Entries . . . . . . . . . . . . . . . 111
9.2.33. RIFT/encoding/TIREPacket . . . . . . . . . . . . . . 111 9.2.33. RIFT/encoding/TIREPacket . . . . . . . . . . . . . . 111
9.2.33.1. Requested Entries . . . . . . . . . . . . . . . 111 9.2.33.1. Requested Entries . . . . . . . . . . . . . . . 111
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 111 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 111
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 112 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 112
11.1. Normative References . . . . . . . . . . . . . . . . . . 112 11.1. Normative References . . . . . . . . . . . . . . . . . . 112
11.2. Informative References . . . . . . . . . . . . . . . . . 114 11.2. Informative References . . . . . . . . . . . . . . . . . 114
Appendix A. Sequence Number Binary Arithmetic . . . . . . . . . 116 Appendix A. Sequence Number Binary Arithmetic . . . . . . . . . 116
Appendix B. Information Elements Schema . . . . . . . . . . . . 117 Appendix B. Information Elements Schema . . . . . . . . . . . . 117
B.1. common.thrift . . . . . . . . . . . . . . . . . . . . . . 118 B.1. common.thrift . . . . . . . . . . . . . . . . . . . . . . 118
B.2. encoding.thrift . . . . . . . . . . . . . . . . . . . . . 124 B.2. encoding.thrift . . . . . . . . . . . . . . . . . . . . . 124
Appendix C. Finite State Machines and Precise Operational Appendix C. Finite State Machines and Precise Operational
Specifications . . . . . . . . . . . . . . . . . . . 132 Specifications . . . . . . . . . . . . . . . . . . . 132
C.1. LIE FSM . . . . . . . . . . . . . . . . . . . . . . . . . 132 C.1. LIE FSM . . . . . . . . . . . . . . . . . . . . . . . . . 133
C.2. ZTP FSM . . . . . . . . . . . . . . . . . . . . . . . . . 139 C.2. ZTP FSM . . . . . . . . . . . . . . . . . . . . . . . . . 139
C.3. Flooding Procedures . . . . . . . . . . . . . . . . . . . 147 C.3. Flooding Procedures . . . . . . . . . . . . . . . . . . . 147
C.3.1. FloodState Structure per Adjacency . . . . . . . . . 147 C.3.1. FloodState Structure per Adjacency . . . . . . . . . 147
C.3.2. TIDEs . . . . . . . . . . . . . . . . . . . . . . . . 149 C.3.2. TIDEs . . . . . . . . . . . . . . . . . . . . . . . . 149
C.3.2.1. TIDE Generation . . . . . . . . . . . . . . . . . 149 C.3.2.1. TIDE Generation . . . . . . . . . . . . . . . . . 149
C.3.2.2. TIDE Processing . . . . . . . . . . . . . . . . . 150 C.3.2.2. TIDE Processing . . . . . . . . . . . . . . . . . 150
C.3.3. TIREs . . . . . . . . . . . . . . . . . . . . . . . . 151 C.3.3. TIREs . . . . . . . . . . . . . . . . . . . . . . . . 151
C.3.3.1. TIRE Generation . . . . . . . . . . . . . . . . . 151 C.3.3.1. TIRE Generation . . . . . . . . . . . . . . . . . 151
C.3.3.2. TIRE Processing . . . . . . . . . . . . . . . . . 151 C.3.3.2. TIRE Processing . . . . . . . . . . . . . . . . . 151
C.3.4. TIEs Processing on Flood State Adjacency . . . . . . 152 C.3.4. TIEs Processing on Flood State Adjacency . . . . . . 152
skipping to change at page 98, line 12 skipping to change at page 98, line 12
as to be considered `Unassigned`. The range of every registry is a as to be considered `Unassigned`. The range of every registry is a
16-bit integer. 16-bit integer.
9.2.1. RIFT/common/AddressFamilyType 9.2.1. RIFT/common/AddressFamilyType
address family address family
9.2.1.1. Requested Entries 9.2.1.1. Requested Entries
Name Value Schema Version Description Name Value Schema Version Description
Illegal 0 1.0 Illegal 0 2.0
AddressFamilyMinValue 1 1.0 AddressFamilyMinValue 1 2.0
IPv4 2 1.0 IPv4 2 2.0
IPv6 3 1.0 IPv6 3 2.0
AddressFamilyMaxValue 4 1.0 AddressFamilyMaxValue 4 2.0
9.2.2. RIFT/common/HierarchyIndications 9.2.2. RIFT/common/HierarchyIndications
flags indicating nodes behavior in case of ZTP flags indicating nodes behavior in case of ZTP
9.2.2.1. Requested Entries 9.2.2.1. Requested Entries
Name Value Schema Version Description Name Value Schema Version Description
leaf_only 0 1.0 leaf_only 0 2.0
leaf_only_and_leaf_2_leaf_procedures 1 1.0 leaf_only_and_leaf_2_leaf_procedures 1 2.0
top_of_fabric 2 1.0 top_of_fabric 2 2.0
9.2.3. RIFT/common/IEEE802_1ASTimeStampType 9.2.3. RIFT/common/IEEE802_1ASTimeStampType
timestamp per IEEE 802.1AS, values MUST be interpreted in timestamp per IEEE 802.1AS, values MUST be interpreted in
implementation as unsigned implementation as unsigned
9.2.3.1. Requested Entries 9.2.3.1. Requested Entries
Name Value Schema Version Description Name Value Schema Version Description
AS_sec 1 1.0 AS_sec 1 2.0
AS_nsec 2 1.0 AS_nsec 2 2.0
9.2.4. RIFT/common/IPAddressType 9.2.4. RIFT/common/IPAddressType
IP address type IP address type
9.2.4.1. Requested Entries 9.2.4.1. Requested Entries
Name Value Schema Version Description Name Value Schema Version Description
ipv4address 1 1.0 ipv4address 1 2.0
ipv6address 2 1.0 ipv6address 2 2.0
9.2.5. RIFT/common/IPPrefixType 9.2.5. RIFT/common/IPPrefixType
prefix representing reachablity. prefix representing reachablity.
@note: for interface addresses the protocol can propagate the address @note: for interface addresses the protocol can propagate the address
part beyond the subnet mask and on reachability computation that has part beyond the subnet mask and on reachability computation that has
to be normalized. The non-significant bits can be used for to be normalized. The non-significant bits can be used for
operational purposes. operational purposes.
9.2.5.1. Requested Entries 9.2.5.1. Requested Entries
Name Value Schema Version Description Name Value Schema Version Description
ipv4prefix 1 1.0 ipv4prefix 1 2.0
ipv6prefix 2 1.0 ipv6prefix 2 2.0
9.2.6. RIFT/common/IPv4PrefixType 9.2.6. RIFT/common/IPv4PrefixType
IP v4 prefix type IP v4 prefix type
9.2.6.1. Requested Entries 9.2.6.1. Requested Entries
Name Value Schema Version Description Name Value Schema Version Description
address 1 1.0 address 1 2.0
prefixlen 2 1.0 prefixlen 2 2.0
9.2.7. RIFT/common/IPv6PrefixType 9.2.7. RIFT/common/IPv6PrefixType
IP v6 prefix type IP v6 prefix type
9.2.7.1. Requested Entries 9.2.7.1. Requested Entries
Name Value Schema Version Description Name Value Schema Version Description
address 1 1.0 address 1 2.0
prefixlen 2 1.0 prefixlen 2 2.0
9.2.8. RIFT/common/PrefixSequenceType 9.2.8. RIFT/common/PrefixSequenceType
sequence of a prefix when it moves sequence of a prefix when it moves
9.2.8.1. Requested Entries 9.2.8.1. Requested Entries
Name Value Schema Description Name Value Schema Description
Version Version
timestamp 1 1.0 timestamp 1 2.0
transactionid 2 1.0 transaction ID set by client in e.g. transactionid 2 2.0 transaction ID set by client in e.g.
in 6LoWPAN in 6LoWPAN
9.2.9. RIFT/common/RouteType 9.2.9. RIFT/common/RouteType
RIFT route types. RIFT route types.
@note: route types which MUST be ordered on their preference PGP @note: route types which MUST be ordered on their preference PGP
prefixes are most preferred attracting traffic north (towards spine) prefixes are most preferred attracting traffic north (towards spine)
and then south normal prefixes are attracting traffic south (towards and then south normal prefixes are attracting traffic south (towards
leafs), i.e. prefix in NORTH PREFIX TIE is preferred over SOUTH leafs), i.e. prefix in NORTH PREFIX TIE is preferred over SOUTH
PREFIX TIE. PREFIX TIE.
@note: The only purpose of those values is to introduce an ordering @note: The only purpose of those values is to introduce an ordering
whereas an implementation can choose internally any other values as whereas an implementation can choose internally any other values as
long the ordering is preserved long the ordering is preserved
9.2.9.1. Requested Entries 9.2.9.1. Requested Entries
Name Value Schema Version Description Name Value Schema Version Description
Illegal 0 1.0 Illegal 0 2.0
RouteTypeMinValue 1 1.0 RouteTypeMinValue 1 2.0
Discard 2 1.0 Discard 2 2.0
LocalPrefix 3 1.0 LocalPrefix 3 2.0
SouthPGPPrefix 4 1.0 SouthPGPPrefix 4 2.0
NorthPGPPrefix 5 1.0 NorthPGPPrefix 5 2.0
NorthPrefix 6 1.0 NorthPrefix 6 2.0
NorthExternalPrefix 7 1.0 NorthExternalPrefix 7 2.0
SouthPrefix 8 1.0 SouthPrefix 8 2.0
SouthExternalPrefix 9 1.0 SouthExternalPrefix 9 2.0
NegativeSouthPrefix 10 1.0 NegativeSouthPrefix 10 2.0
RouteTypeMaxValue 11 1.0 RouteTypeMaxValue 11 2.0
9.2.10. RIFT/common/TIETypeType 9.2.10. RIFT/common/TIETypeType
type of TIE. type of TIE.
This enum indicates what TIE type the TIE is carrying. In case the This enum indicates what TIE type the TIE is carrying. In case the
value is not known to the receiver, re-flooded the same way as prefix value is not known to the receiver, re-flooded the same way as prefix
TIEs. This allows for future extensions of the protocol within the TIEs. This allows for future extensions of the protocol within the
same schema major with types opaque to some nodes unless the flooding same schema major with types opaque to some nodes unless the flooding
scope is not the same as prefix TIE, then a major version revision scope is not the same as prefix TIE, then a major version revision
MUST be performed. MUST be performed.
9.2.10.1. Requested Entries 9.2.10.1. Requested Entries
Name Value Schema Version Description Name Value Schema Description
Illegal 0 1.0 Version
TIETypeMinValue 1 1.0 Illegal 0 2.0
NodeTIEType 2 1.0 TIETypeMinValue 1 2.0
PrefixTIEType 3 1.0 NodeTIEType 2 2.0
PositiveDisaggregationPrefixTIEType 4 1.0 PrefixTIEType 3 2.0
NegativeDisaggregationPrefixTIEType 5 1.0 PositiveDisaggregationPrefixTIEType 4 2.0
PGPrefixTIEType 6 1.0 NegativeDisaggregationPrefixTIEType 5 2.0
KeyValueTIEType 7 1.0 PGPrefixTIEType 6 2.0
ExternalPrefixTIEType 8 1.0 KeyValueTIEType 7 2.0
TIETypeMaxValue 9 1.0 ExternalPrefixTIEType 8 2.0
PositiveExternalDisaggregationPrefixTIEType 9 2.0
TIETypeMaxValue 10 2.0
9.2.11. RIFT/common/TieDirectionType 9.2.11. RIFT/common/TieDirectionType
direction of tie direction of tie
9.2.11.1. Requested Entries 9.2.11.1. Requested Entries
Name Value Schema Version Description Name Value Schema Version Description
Illegal 0 1.0 Illegal 0 2.0
South 1 1.0 South 1 2.0
North 2 1.0 North 2 2.0
DirectionMaxValue 3 1.0 DirectionMaxValue 3 2.0
9.2.12. RIFT/encoding/Community 9.2.12. RIFT/encoding/Community
community community
9.2.12.1. Requested Entries 9.2.12.1. Requested Entries
Name Value Schema Version Description Name Value Schema Version Description
top 1 1.0 top 1 2.0
bottom 2 1.0 bottom 2 2.0
9.2.13. RIFT/encoding/KeyValueTIEElement 9.2.13. RIFT/encoding/KeyValueTIEElement
Generic key value pairs Generic key value pairs
9.2.13.1. Requested Entries 9.2.13.1. Requested Entries
Name Value Schema Description Name Value Schema Description
Version Version
keyvalues 1 1.0 if the same key repeats in multiple TIEs of keyvalues 1 2.0 if the same key repeats in multiple TIEs of
same node or with different values, behavior same node or with different values, behavior
is unspecified is unspecified
9.2.14. RIFT/encoding/LIEPacket 9.2.14. RIFT/encoding/LIEPacket
RIFT LIE packet RIFT LIE packet
@note this node's level is already included on the packet header @note this node's level is already included on the packet header
9.2.14.1. Requested Entries 9.2.14.1. Requested Entries
Name Value Schema Description Name Value Schema Description
Version Version
name 1 1.0 node or adjacency name name 1 2.0 node or adjacency name
local_id 2 1.0 local link ID local_id 2 2.0 local link ID
flood_port 3 1.0 UDP port to which we can flood_port 3 2.0 UDP port to which we can
receive flooded TIEs receive flooded TIEs
link_mtu_size 4 1.0 layer 3 MTU, used to link_mtu_size 4 2.0 layer 3 MTU, used to
discover to mismatch. discover to mismatch.
link_bandwidth 5 1.0 local link bandwidth on the link_bandwidth 5 2.0 local link bandwidth on the
interface interface
neighbor 6 1.0 reflects the neighbor once neighbor 6 2.0 reflects the neighbor once
received to provide 3-way received to provide 3-way
connectivity connectivity
pod 7 1.0 node's PoD pod 7 2.0 node's PoD
node_capabilities 10 1.0 node capabilities shown in node_capabilities 10 2.0 node capabilities shown in
the LIE. The capabilies the LIE. The capabilies
MUST match the capabilities MUST match the capabilities
shown in the Node TIEs, shown in the Node TIEs,
otherwise the behavior is otherwise the behavior is
unspecified. A node unspecified. A node
detecting the mismatch detecting the mismatch
SHOULD generate according SHOULD generate according
error error
link_capabilities 11 1.0 capabilities of this link link_capabilities 11 2.0 capabilities of this link
holdtime 12 1.0 required holdtime of the holdtime 12 2.0 required holdtime of the
adjacency, i.e. how much adjacency, i.e. how much
time MUST expire without time MUST expire without
LIE for the adjacency to LIE for the adjacency to
drop drop
label 13 1.0 unsolicited, downstream label 13 2.0 unsolicited, downstream
assigned locally assigned locally
significant label value for significant label value for
the adjacency the adjacency
not_a_ztp_offer 21 1.0 indicates that the level on not_a_ztp_offer 21 2.0 indicates that the level on
the LIE MUST NOT be used to the LIE MUST NOT be used to
derive a ZTP level by the derive a ZTP level by the
receiving node receiving node
you_are_flood_repeater 22 1.0 indicates to northbound you_are_flood_repeater 22 2.0 indicates to northbound
neighbor that it should be neighbor that it should be
reflooding this node's reflooding this node's
N-TIEs to achieve flood N-TIEs to achieve flood
reduction and balancing for reduction and balancing for
northbound flooding. To be northbound flooding. To be
ignored if received from a ignored if received from a
northbound adjacency northbound adjacency
you_are_sending_too_quickly 23 1.0 can be optionally set to you_are_sending_too_quickly 23 2.0 can be optionally set to
indicate to neighbor that indicate to neighbor that
packet losses are seen on packet losses are seen on
reception based on packet reception based on packet
numbers or the rate is too numbers or the rate is too
high. The receiver SHOULD high. The receiver SHOULD
temporarily slow down temporarily slow down
flooding rates flooding rates
instance_name 24 1.0 instance name in case instance_name 24 2.0 instance name in case
multiple RIFT instances multiple RIFT instances
running on same interface running on same interface
9.2.15. RIFT/encoding/LinkCapabilities 9.2.15. RIFT/encoding/LinkCapabilities
link capabilities link capabilities
9.2.15.1. Requested Entries 9.2.15.1. Requested Entries
Name Value Schema Description Name Value Schema Description
Version Version
bfd 1 1.0 indicates that the link's `local bfd 1 2.0 indicates that the link is
ID` can be used as its BFD
discriminator and the link is
supporting BFD supporting BFD
v4_forwarding_capable 2 1.0 indicates whether the interface v4_forwarding_capable 2 2.0 indicates whether the interface
will support v4 forwarding. This will support v4 forwarding. This
MUST be set to true when LIEs MUST be set to true when LIEs
from a v4 address are sent and from a v4 address are sent and
MAY be set to true in LIEs on v6 MAY be set to true in LIEs on v6
address. If v4 and v6 LIEs address. If v4 and v6 LIEs
indicate contradicting indicate contradicting
information the behavior is information the behavior is
unspecified. unspecified.
9.2.16. RIFT/encoding/LinkIDPair 9.2.16. RIFT/encoding/LinkIDPair
LinkID pair describes one of parallel links between two nodes LinkID pair describes one of parallel links between two nodes
9.2.16.1. Requested Entries 9.2.16.1. Requested Entries
Name Value Schema Description Name Value Schema Description
Version Version
local_id 1 1.0 node-wide unique value for local_id 1 2.0 node-wide unique value for
the local link the local link
remote_id 2 1.0 received remote link ID for remote_id 2 2.0 received remote link ID for
this link this link
platform_interface_index 10 1.0 describes the local platform_interface_index 10 2.0 describes the local
interface index of the link interface index of the link
platform_interface_name 11 1.0 describes the local platform_interface_name 11 2.0 describes the local
interface name interface name
trusted_outer_security_key 12 1.0 indication whether the link trusted_outer_security_key 12 2.0 indication whether the link
is secured, i.e. protected is secured, i.e. protected
by outer key, absence of by outer key, absence of
this element means no this element means no
indication, undefined outer indication, undefined outer
key means not secured key means not secured
bfd_up 13 2.0 indication whether the link
is protected by established
BFD session
9.2.17. RIFT/encoding/Neighbor 9.2.17. RIFT/encoding/Neighbor
neighbor structure neighbor structure
9.2.17.1. Requested Entries 9.2.17.1. Requested Entries
Name Value Schema Version Description Name Value Schema Version Description
originator 1 1.0 system ID of the originator originator 1 2.0 system ID of the originator
remote_id 2 1.0 ID of remote side of the link remote_id 2 2.0 ID of remote side of the link
9.2.18. RIFT/encoding/NodeCapabilities 9.2.18. RIFT/encoding/NodeCapabilities
capabilities the node supports. The schema may add to this field capabilities the node supports. The schema may add to this field
future capabilities to indicate whether it will support future capabilities to indicate whether it will support
interpretation of future schema extensions on the same major interpretation of future schema extensions on the same major
revision. Such fields MUST be optional and have an implicit or revision. Such fields MUST be optional and have an implicit or
explicit false default value. If a future capability changes route explicit false default value. If a future capability changes route
selection or generates blackholes if some nodes are not supporting it selection or generates blackholes if some nodes are not supporting it
then a major version increment is unavoidable. then a major version increment is unavoidable.
9.2.18.1. Requested Entries 9.2.18.1. Requested Entries
Name Value Schema Description
Name Value Schema Description Version
Version protocol_minor_version 1 2.0 must advertise supported minor
flood_reduction 1 1.0 can this node participate in version dialect that way
flood reduction flood_reduction 2 2.0 can this node participate in
hierarchy_indications 2 1.0 does this node restrict itself to flood reduction
be top-of-fabric or leaf only (in hierarchy_indications 3 2.0 does this node restrict itself
ZTP) and does it support to be top-of-fabric or leaf only
leaf-2-leaf procedures (in ZTP) and does it support
leaf-2-leaf procedures
9.2.19. RIFT/encoding/NodeFlags 9.2.19. RIFT/encoding/NodeFlags
Flags the node sets Flags the node sets
9.2.19.1. Requested Entries 9.2.19.1. Requested Entries
Name Value Schema Description Name Value Schema Description
Version Version
overload 1 1.0 indicates that node is in overload, do not overload 1 2.0 indicates that node is in overload, do not
transit traffic through it transit traffic through it
9.2.20. RIFT/encoding/NodeNeighborsTIEElement 9.2.20. RIFT/encoding/NodeNeighborsTIEElement
neighbor of a node neighbor of a node
9.2.20.1. Requested Entries 9.2.20.1. Requested Entries
Name Value Schema Description Name Value Schema Description
Version Version
level 1 1.0 level of neighbor level 1 2.0 level of neighbor
cost 3 1.0 cost 3 2.0
link_ids 4 1.0 can carry description of multiple parallel link_ids 4 2.0 can carry description of multiple parallel
links in a TIE links in a TIE
bandwidth 5 1.0 total bandwith to neighbor, this will be bandwidth 5 2.0 total bandwith to neighbor, this will be
normally sum of the bandwidths of all the normally sum of the bandwidths of all the
parallel links. parallel links.
9.2.21. RIFT/encoding/NodeTIEElement 9.2.21. RIFT/encoding/NodeTIEElement
Description of a node. Description of a node.
It may occur multiple times in different TIEs but if either * It may occur multiple times in different TIEs but if either *
capabilities values do not match or * flags values do not match or * capabilities values do not match or * flags values do not match or *
neighbors repeat with different values neighbors repeat with different values
skipping to change at page 106, line 4 skipping to change at page 106, line 10
neighbors repeat with different values neighbors repeat with different values
the behavior is undefined and a warning SHOULD be generated. the behavior is undefined and a warning SHOULD be generated.
Neighbors can be distributed across multiple TIEs however if the sets Neighbors can be distributed across multiple TIEs however if the sets
are disjoint. Miscablings SHOULD be repeated in every node TIE, are disjoint. Miscablings SHOULD be repeated in every node TIE,
otherwise the behavior is undefined. otherwise the behavior is undefined.
@note: observe that absence of fields implies defined defaults @note: observe that absence of fields implies defined defaults
9.2.21.1. Requested Entries 9.2.21.1. Requested Entries
Name Value Schema Description Name Value Schema Description
Version Version
level 1 1.0 level of the node level 1 2.0 level of the node
neighbors 2 1.0 node's neighbors. If neighbor systemID neighbors 2 2.0 node's neighbors. If neighbor systemID
repeats in other node TIEs of same node repeats in other node TIEs of same node
the behavior is undefined the behavior is undefined
capabilities 3 1.0 capabilities of the node capabilities 3 2.0 capabilities of the node
flags 4 1.0 flags of the node flags 4 2.0 flags of the node
name 5 1.0 optional node name for easier name 5 2.0 optional node name for easier
operations operations
pod 6 1.0 PoD to which the node belongs pod 6 2.0 PoD to which the node belongs
miscabled_links 10 1.0 if any local links are miscabled, the miscabled_links 10 2.0 if any local links are miscabled, the
indication is flooded indication is flooded
9.2.22. RIFT/encoding/PacketContent 9.2.22. RIFT/encoding/PacketContent
content of a RIFT packet content of a RIFT packet
9.2.22.1. Requested Entries 9.2.22.1. Requested Entries
Name Value Schema Version Description Name Value Schema Version Description
lie 1 1.0 lie 1 2.0
tide 2 1.0 tide 2 2.0
tire 3 1.0 tire 3 2.0
tie 4 1.0 tie 4 2.0
9.2.23. RIFT/encoding/PacketHeader 9.2.23. RIFT/encoding/PacketHeader
common RIFT packet header common RIFT packet header
9.2.23.1. Requested Entries 9.2.23.1. Requested Entries
Name Value Schema Description Name Value Schema Description
Version Version
major_version 1 1.0 major version type of protocol major_version 1 2.0 major version type of protocol
minor_version 2 1.0 minor version type of protocol minor_version 2 2.0 minor version type of protocol
sender 3 1.0 node sending the packet, in case of sender 3 2.0 node sending the packet, in case of
LIE/TIRE/TIDE also the originator of it LIE/TIRE/TIDE also the originator of it
level 4 1.0 level of the node sending the packet, level 4 2.0 level of the node sending the packet,
required on everything except LIEs. Lack required on everything except LIEs. Lack
of presence on LIEs indicates of presence on LIEs indicates
UNDEFINED_LEVEL and is used in ZTP UNDEFINED_LEVEL and is used in ZTP
procedures. procedures.
9.2.24. RIFT/encoding/PrefixAttributes 9.2.24. RIFT/encoding/PrefixAttributes
9.2.24.1. Requested Entries 9.2.24.1. Requested Entries
Name Value Schema Description Name Value Schema Description
Version Version
metric 2 1.0 distance of the prefix metric 2 2.0 distance of the prefix
tags 3 1.0 generic unordered set of route tags, tags 3 2.0 generic unordered set of route tags,
can be redistributed to other can be redistributed to other
protocols or use within the context protocols or use within the context
of real time analytics of real time analytics
monotonic_clock 4 1.0 monotonic clock for mobile addresses monotonic_clock 4 2.0 monotonic clock for mobile addresses
loopback 6 1.0 indicates if the interface is a node loopback 6 2.0 indicates if the interface is a node
loopback loopback
directly_attached 7 1.0 indicates that the prefix is directly directly_attached 7 2.0 indicates that the prefix is directly
attached, i.e. should be routed to attached, i.e. should be routed to
even if the node is in overload. * even if the node is in overload. *
from_link 10 1.0 in case of locally originated from_link 10 2.0 in case of locally originated
prefixes, i.e. interface addresses prefixes, i.e. interface addresses
this can describe which link the this can describe which link the
address belongs to. address belongs to.
9.2.25. RIFT/encoding/PrefixTIEElement 9.2.25. RIFT/encoding/PrefixTIEElement
TIE carrying prefixes TIE carrying prefixes
9.2.25.1. Requested Entries 9.2.25.1. Requested Entries
Name Value Schema Description Name Value Schema Description
Version Version
prefixes 1 1.0 prefixes with the associated attributes. if prefixes 1 2.0 prefixes with the associated attributes. if
the same prefix repeats in multiple TIEs of the same prefix repeats in multiple TIEs of
same node behavior is unspecified same node behavior is unspecified
9.2.26. RIFT/encoding/ProtocolPacket 9.2.26. RIFT/encoding/ProtocolPacket
RIFT packet structure RIFT packet structure
9.2.26.1. Requested Entries 9.2.26.1. Requested Entries
Name Value Schema Version Description Name Value Schema Version Description
header 1 1.0 header 1 2.0
content 2 1.0 content 2 2.0
9.2.27. RIFT/encoding/TIDEPacket 9.2.27. RIFT/encoding/TIDEPacket
TIDE with sorted TIE headers, if headers are unsorted, behavior is TIDE with sorted TIE headers, if headers are unsorted, behavior is
undefined undefined
9.2.27.1. Requested Entries 9.2.27.1. Requested Entries
Name Value Schema Version Description Name Value Schema Version Description
start_range 1 1.0 first TIE header in the tide packet start_range 1 2.0 first TIE header in the tide packet
end_range 2 1.0 last TIE header in the tide packet end_range 2 2.0 last TIE header in the tide packet
headers 3 1.0 _sorted_ list of headers headers 3 2.0 _sorted_ list of headers
9.2.28. RIFT/encoding/TIEElement 9.2.28. RIFT/encoding/TIEElement
single element in a TIE. enum `common.TIETypeType` in TIEID indicates single element in a TIE. enum `common.TIETypeType` in TIEID indicates
which elements MUST be present in the TIEElement. In case of which elements MUST be present in the TIEElement. In case of
mismatch the unexpected elements MUST be ignored. In case of lack of mismatch the unexpected elements MUST be ignored. In case of lack of
expected element the TIE an error MUST be reported and the TIE MUST expected element the TIE an error MUST be reported and the TIE MUST
be ignored. be ignored.
This type can be extended with new optional elements for new This type can be extended with new optional elements for new
`common.TIETypeType` values without breaking the major but if it is `common.TIETypeType` values without breaking the major but if it is
necessary to understand whether all nodes support the new type a node necessary to understand whether all nodes support the new type a node
capability must be added as well. capability must be added as well.
9.2.28.1. Requested Entries 9.2.28.1. Requested Entries
Name Valu Schema Description Name Valu Schema Description
e Version e Versio
node 1 1.0 used in case of enum common. n
TIETypeType.NodeTIEType node 1 2.0 used in case of enum comm
prefixes 2 1.0 used in case of enum common. on.TIETypeType.NodeTIETyp
TIETypeType.PrefixTIEType e
positive_disaggregation_pre 3 1.0 positive prefixes (always prefixes 2 2.0 used in case of enum comm
fixes southbound) It MUST NOT be on.TIETypeType.PrefixTIET
advertised within a North ype
TIE and ignored otherwise positive_disaggregation_prefixe 3 2.0 positive prefixes (always
negative_disaggregation_pre 4 1.0 transitive, negative s southbound) It MUST NOT
fixes prefixes (always southbound) be advertised within a
which MUST be aggregated and North TIE and ignored
propagated according to the otherwise
specification southwards negative_disaggregation_prefixe 5 2.0 transitive, negative
towards lower levels to heal s prefixes (always
pathological upper level southbound) which MUST be
partitioning, otherwise aggregated and propagated
blackholes may occur in according to the
multiplane fabrics. It MUST specification southwards
NOT be advertised within a towards lower levels to
North TIE. heal pathological upper
external_prefixes 5 1.0 externally reimported level partitioning,
prefixes otherwise blackholes may
keyvalues 6 1.0 Key-Value store elements occur in multiplane
fabrics. It MUST NOT be
advertised within a North
TIE.
external_prefixes 6 2.0 externally reimported
prefixes
positive_external_disaggregatio 7 2.0 positive external
n_prefixes disaggregated prefixes
(always southbound). It
MUST NOT be advertised
within a North TIE and
ignored otherwise
keyvalues 9 2.0 Key-Value store elements
9.2.29. RIFT/encoding/TIEHeader 9.2.29. RIFT/encoding/TIEHeader
Header of a TIE. Header of a TIE.
@note: TIEID space is a total order achieved by comparing the @note: TIEID space is a total order achieved by comparing the
elements in sequence defined and comparing each value as an unsigned elements in sequence defined and comparing each value as an unsigned
integer of according length. integer of according length.
@note: After sequence number the lifetime received on the envelope @note: After sequence number the lifetime received on the envelope
skipping to change at page 110, line 4 skipping to change at page 110, line 10
integer of according length. integer of according length.
@note: After sequence number the lifetime received on the envelope @note: After sequence number the lifetime received on the envelope
must be used for comparison before further fields. must be used for comparison before further fields.
@note: `origination_time` and `origination_lifetime` are disregarded @note: `origination_time` and `origination_lifetime` are disregarded
for comparison purposes and carried purely for debugging/security for comparison purposes and carried purely for debugging/security
purposes if present. purposes if present.
9.2.29.1. Requested Entries 9.2.29.1. Requested Entries
Name Value Schema Description Name Value Schema Description
Version Version
tieid 2 1.0 ID of the tie tieid 2 2.0 ID of the tie
seq_nr 3 1.0 sequence number of the tie seq_nr 3 2.0 sequence number of the tie
origination_time 10 1.0 absolute timestamp when the TIE origination_time 10 2.0 absolute timestamp when the TIE
was generated. This can be used on was generated. This can be used on
fabrics with synchronized clock to fabrics with synchronized clock to
prevent lifetime modification prevent lifetime modification
attacks. attacks.
origination_lifetime 12 1.0 original lifetime when the TIE was origination_lifetime 12 2.0 original lifetime when the TIE was
generated. This can be used on generated. This can be used on
fabrics with synchronized clock to fabrics with synchronized clock to
prevent lifetime modification prevent lifetime modification
attacks. attacks.
9.2.30. RIFT/encoding/TIEHeaderWithLifeTime 9.2.30. RIFT/encoding/TIEHeaderWithLifeTime
Header of a TIE as described in TIRE/TIDE. Header of a TIE as described in TIRE/TIDE.
9.2.30.1. Requested Entries 9.2.30.1. Requested Entries
Name Value Schema Description Name Value Schema Description
Version Version
header 1 1.0 header 1 2.0
remaining_lifetime 2 1.0 remaining lifetime that expires down remaining_lifetime 2 2.0 remaining lifetime that expires down
to 0 just like in ISIS. TIEs with to 0 just like in ISIS. TIEs with
lifetimes differing by less than lifetimes differing by less than
`lifetime_diff2ignore` MUST be `lifetime_diff2ignore` MUST be
considered EQUAL. considered EQUAL.
9.2.31. RIFT/encoding/TIEID 9.2.31. RIFT/encoding/TIEID
ID of a TIE ID of a TIE
@note: TIEID space is a total order achieved by comparing the @note: TIEID space is a total order achieved by comparing the
elements in sequence defined and comparing each value as an unsigned elements in sequence defined and comparing each value as an unsigned
integer of according length. integer of according length.
9.2.31.1. Requested Entries 9.2.31.1. Requested Entries
Name Value Schema Version Description Name Value Schema Version Description
direction 1 1.0 direction of TIE direction 1 2.0 direction of TIE
originator 2 1.0 indicates originator of the TIE originator 2 2.0 indicates originator of the TIE
tietype 3 1.0 type of the tie tietype 3 2.0 type of the tie
tie_nr 4 1.0 number of the tie tie_nr 4 2.0 number of the tie
9.2.32. RIFT/encoding/TIEPacket 9.2.32. RIFT/encoding/TIEPacket
TIE packet TIE packet
9.2.32.1. Requested Entries 9.2.32.1. Requested Entries
Name Value Schema Version Description Name Value Schema Version Description
header 1 1.0 header 1 2.0
element 2 1.0 element 2 2.0
9.2.33. RIFT/encoding/TIREPacket 9.2.33. RIFT/encoding/TIREPacket
TIRE packet TIRE packet
9.2.33.1. Requested Entries 9.2.33.1. Requested Entries
Name Value Schema Version Description Name Value Schema Version Description
headers 1 1.0 headers 1 2.0
10. Acknowledgments 10. Acknowledgments
A new routing protocol in its complexity is not a product of a parent A new routing protocol in its complexity is not a product of a parent
but of a village as the author list shows already. However, many but of a village as the author list shows already. However, many
more people provided input, fine-combed the specification based on more people provided input, fine-combed the specification based on
their experience in design or implementation. This section will make their experience in design or implementation. This section will make
an inadequate attempt in recording their contribution. an inadequate attempt in recording their contribution.
Many thanks to Naiming Shen for some of the early discussions around Many thanks to Naiming Shen for some of the early discussions around
skipping to change at page 118, line 38 skipping to change at page 118, line 40
All signed integer as forced by Thrift [thrift] support must be cast All signed integer as forced by Thrift [thrift] support must be cast
for internal purposes to equivalent unsigned values without for internal purposes to equivalent unsigned values without
discarding the signedness bit. An implementation SHOULD try to avoid discarding the signedness bit. An implementation SHOULD try to avoid
using the signedness bit when generating values. using the signedness bit when generating values.
The schema is normative. The schema is normative.
B.1. common.thrift B.1. common.thrift
/**
Thrift file with common definitions for RIFT
*/
/** @note MUST be interpreted in implementation as unsigned 64 bits. /** @note MUST be interpreted in implementation as unsigned 64 bits.
* The implementation SHOULD NOT use the MSB. * The implementation SHOULD NOT use the MSB.
*/ */
typedef i64 SystemIDType typedef i64 SystemIDType
typedef i32 IPv4Address typedef i32 IPv4Address
/** this has to be of length long enough to accomodate prefix */ /** this has to be of length long enough to accomodate prefix */
typedef binary IPv6Address typedef binary IPv6Address
/** @note MUST be interpreted in implementation as unsigned */ /** @note MUST be interpreted in implementation as unsigned */
typedef i16 UDPPortType typedef i16 UDPPortType
/** @note MUST be interpreted in implementation as unsigned */ /** @note MUST be interpreted in implementation as unsigned */
skipping to change at page 123, line 23 skipping to change at page 123, line 22
This enum indicates what TIE type the TIE is carrying. This enum indicates what TIE type the TIE is carrying.
In case the value is not known to the receiver, In case the value is not known to the receiver,
re-flooded the same way as prefix TIEs. This allows for re-flooded the same way as prefix TIEs. This allows for
future extensions of the protocol within the same schema major future extensions of the protocol within the same schema major
with types opaque to some nodes unless the flooding scope is not with types opaque to some nodes unless the flooding scope is not
the same as prefix TIE, then a major version revision MUST the same as prefix TIE, then a major version revision MUST
be performed. be performed.
*/ */
enum TIETypeType { enum TIETypeType {
Illegal = 0, Illegal = 0,
TIETypeMinValue = 1, TIETypeMinValue = 1,
/** first legal value */ /** first legal value */
NodeTIEType = 2, NodeTIEType = 2,
PrefixTIEType = 3, PrefixTIEType = 3,
PositiveDisaggregationPrefixTIEType = 4, PositiveDisaggregationPrefixTIEType = 4,
NegativeDisaggregationPrefixTIEType = 5, NegativeDisaggregationPrefixTIEType = 5,
PGPrefixTIEType = 6, PGPrefixTIEType = 6,
KeyValueTIEType = 7, KeyValueTIEType = 7,
ExternalPrefixTIEType = 8, ExternalPrefixTIEType = 8,
TIETypeMaxValue = 9, PositiveExternalDisaggregationPrefixTIEType = 9,
TIETypeMaxValue = 10,
} }
/** RIFT route types. /** RIFT route types.
@note: route types which MUST be ordered on their preference @note: route types which MUST be ordered on their preference
PGP prefixes are most preferred attracting PGP prefixes are most preferred attracting
traffic north (towards spine) and then south traffic north (towards spine) and then south
normal prefixes are attracting traffic south (towards leafs), normal prefixes are attracting traffic south (towards leafs),
i.e. prefix in NORTH PREFIX TIE is preferred over SOUTH PREFIX TIE. i.e. prefix in NORTH PREFIX TIE is preferred over SOUTH PREFIX TIE.
skipping to change at page 124, line 34 skipping to change at page 124, line 33
NegativeSouthPrefix = 10, NegativeSouthPrefix = 10,
RouteTypeMaxValue = 11, RouteTypeMaxValue = 11,
} }
B.2. encoding.thrift B.2. encoding.thrift
/** /**
Thrift file for packet encodings for RIFT Thrift file for packet encodings for RIFT
*/ */
include "common.thrift"
/** Represents protocol encoding schema major version */ /** Represents protocol encoding schema major version */
const common.VersionType protocol_major_version = 1 const common.VersionType protocol_major_version = 2
/** Represents protocol encoding schema minor version */ /** Represents protocol encoding schema minor version */
const common.MinorVersionType protocol_minor_version = 0 const common.MinorVersionType protocol_minor_version = 0
/** common RIFT packet header */ /** common RIFT packet header */
struct PacketHeader { struct PacketHeader {
/** major version type of protocol */ /** major version type of protocol */
1: required common.VersionType major_version = protocol_major_version; 1: required common.VersionType major_version = protocol_major_version;
/** minor version type of protocol */ /** minor version type of protocol */
2: required common.VersionType minor_version = protocol_minor_version; 2: required common.VersionType minor_version = protocol_minor_version;
/** node sending the packet, in case of LIE/TIRE/TIDE /** node sending the packet, in case of LIE/TIRE/TIDE
skipping to change at page 125, line 33 skipping to change at page 125, line 34
/** capabilities the node supports. The schema may add to this /** capabilities the node supports. The schema may add to this
field future capabilities to indicate whether it will support field future capabilities to indicate whether it will support
interpretation of future schema extensions on the same major interpretation of future schema extensions on the same major
revision. Such fields MUST be optional and have an implicit or revision. Such fields MUST be optional and have an implicit or
explicit false default value. If a future capability changes route explicit false default value. If a future capability changes route
selection or generates blackholes if some nodes are not supporting selection or generates blackholes if some nodes are not supporting
it then a major version increment is unavoidable. it then a major version increment is unavoidable.
*/ */
struct NodeCapabilities { struct NodeCapabilities {
/** must advertise supported minor version dialect that way */
1: required common.MinorVersionType protocol_minor_version =
protocol_minor_version;
/** can this node participate in flood reduction */ /** can this node participate in flood reduction */
1: optional bool flood_reduction = 2: optional bool flood_reduction =
common.flood_reduction_default; common.flood_reduction_default;
/** does this node restrict itself to be top-of-fabric or /** does this node restrict itself to be top-of-fabric or
leaf only (in ZTP) and does it support leaf-2-leaf procedures */ leaf only (in ZTP) and does it support leaf-2-leaf procedures */
2: optional common.HierarchyIndications hierarchy_indications; 3: optional common.HierarchyIndications hierarchy_indications;
} }
/** link capabilities */ /** link capabilities */
struct LinkCapabilities { struct LinkCapabilities {
/** indicates that the link's `local ID` can be used as its BFD /** indicates that the link is supporting BFD */
* discriminator and the link is supporting BFD */
1: optional bool bfd = 1: optional bool bfd =
common.bfd_default; common.bfd_default;
/** indicates whether the interface will support v4 forwarding. This MUST /** indicates whether the interface will support v4 forwarding. This MUST
* be set to true when LIEs from a v4 address are sent and MAY be set * be set to true when LIEs from a v4 address are sent and MAY be set
* to true in LIEs on v6 address. If v4 and v6 LIEs indicate contradicting * to true in LIEs on v6 address. If v4 and v6 LIEs indicate contradicting
* information the behavior is unspecified. */ * information the behavior is unspecified. */
2: optional bool v4_forwarding_capable = 2: optional bool v4_forwarding_capable =
true; true;
} }
skipping to change at page 126, line 34 skipping to change at page 126, line 37
/** reflects the neighbor once received to provide /** reflects the neighbor once received to provide
3-way connectivity */ 3-way connectivity */
6: optional Neighbor neighbor; 6: optional Neighbor neighbor;
/** node's PoD */ /** node's PoD */
7: optional common.PodType pod = 7: optional common.PodType pod =
common.default_pod; common.default_pod;
/** node capabilities shown in the LIE. The capabilies /** node capabilities shown in the LIE. The capabilies
MUST match the capabilities shown in the Node TIEs, otherwise MUST match the capabilities shown in the Node TIEs, otherwise
the behavior is unspecified. A node detecting the mismatch the behavior is unspecified. A node detecting the mismatch
SHOULD generate according error */ SHOULD generate according error */
10: optional NodeCapabilities node_capabilities; 10: required NodeCapabilities node_capabilities;
/** capabilities of this link */ /** capabilities of this link */
11: optional LinkCapabilities link_capabilities; 11: optional LinkCapabilities link_capabilities;
/** required holdtime of the adjacency, i.e. how much time /** required holdtime of the adjacency, i.e. how much time
MUST expire without LIE for the adjacency to drop */ MUST expire without LIE for the adjacency to drop */
12: required common.TimeIntervalInSecType holdtime = 12: required common.TimeIntervalInSecType holdtime =
common.default_lie_holdtime; common.default_lie_holdtime;
/** unsolicited, downstream assigned locally significant label /** unsolicited, downstream assigned locally significant label
value for the adjacency */ value for the adjacency */
13: optional common.LabelType label; 13: optional common.LabelType label;
/** indicates that the level on the LIE MUST NOT be used /** indicates that the level on the LIE MUST NOT be used
skipping to change at page 127, line 31 skipping to change at page 127, line 33
/** received remote link ID for this link */ /** received remote link ID for this link */
2: required common.LinkIDType remote_id; 2: required common.LinkIDType remote_id;
/** describes the local interface index of the link */ /** describes the local interface index of the link */
10: optional common.PlatformInterfaceIndex platform_interface_index; 10: optional common.PlatformInterfaceIndex platform_interface_index;
/** describes the local interface name */ /** describes the local interface name */
11: optional string platform_interface_name; 11: optional string platform_interface_name;
/** indication whether the link is secured, i.e. protected by outer key, absence /** indication whether the link is secured, i.e. protected by outer key, absence
of this element means no indication, undefined outer key means not secured */ of this element means no indication, undefined outer key means not secured */
12: optional common.OuterSecurityKeyID trusted_outer_security_key; 12: optional common.OuterSecurityKeyID trusted_outer_security_key;
/** indication whether the link is protected by established BFD session */
13: optional bool bfd_up;
} }
/** ID of a TIE /** ID of a TIE
@note: TIEID space is a total order achieved by comparing the elements @note: TIEID space is a total order achieved by comparing the elements
in sequence defined and comparing each value as an in sequence defined and comparing each value as an
unsigned integer of according length. unsigned integer of according length.
*/ */
struct TIEID { struct TIEID {
/** direction of TIE */ /** direction of TIE */
skipping to change at page 129, line 47 skipping to change at page 130, line 4
* capabilities values do not match or * capabilities values do not match or
* flags values do not match or * flags values do not match or
* neighbors repeat with different values * neighbors repeat with different values
the behavior is undefined and a warning SHOULD be generated. the behavior is undefined and a warning SHOULD be generated.
Neighbors can be distributed across multiple TIEs however if Neighbors can be distributed across multiple TIEs however if
the sets are disjoint. Miscablings SHOULD be repeated in every the sets are disjoint. Miscablings SHOULD be repeated in every
node TIE, otherwise the behavior is undefined. node TIE, otherwise the behavior is undefined.
@note: observe that absence of fields implies defined defaults @note: observe that absence of fields implies defined defaults
*/ */
struct NodeTIEElement { struct NodeTIEElement {
/** level of the node */ /** level of the node */
1: required common.LevelType level; 1: required common.LevelType level;
/** node's neighbors. If neighbor systemID repeats in other node TIEs of /** node's neighbors. If neighbor systemID repeats in other node TIEs of
same node the behavior is undefined */ same node the behavior is undefined */
2: required map<common.SystemIDType, 2: required map<common.SystemIDType,
NodeNeighborsTIEElement> neighbors; NodeNeighborsTIEElement> neighbors;
/** capabilities of the node */ /** capabilities of the node */
3: optional NodeCapabilities capabilities; 3: required NodeCapabilities capabilities;
/** flags of the node */ /** flags of the node */
4: optional NodeFlags flags; 4: optional NodeFlags flags;
/** optional node name for easier operations */ /** optional node name for easier operations */
5: optional string name; 5: optional string name;
/** PoD to which the node belongs */ /** PoD to which the node belongs */
6: optional common.PodType pod; 6: optional common.PodType pod;
/** if any local links are miscabled, the indication is flooded */ /** if any local links are miscabled, the indication is flooded */
10: optional set<common.LinkIDType> miscabled_links; 10: optional set<common.LinkIDType> miscabled_links;
skipping to change at page 131, line 38 skipping to change at page 131, line 41
*/ */
3: optional PrefixTIEElement positive_disaggregation_prefixes; 3: optional PrefixTIEElement positive_disaggregation_prefixes;
/** transitive, negative prefixes (always southbound) which /** transitive, negative prefixes (always southbound) which
MUST be aggregated and propagated MUST be aggregated and propagated
according to the specification according to the specification
southwards towards lower levels to heal southwards towards lower levels to heal
pathological upper level partitioning, otherwise pathological upper level partitioning, otherwise
blackholes may occur in multiplane fabrics. blackholes may occur in multiplane fabrics.
It MUST NOT be advertised within a North TIE. It MUST NOT be advertised within a North TIE.
*/ */
4: optional PrefixTIEElement negative_disaggregation_prefixes; 5: optional PrefixTIEElement negative_disaggregation_prefixes;
/** externally reimported prefixes */ /** externally reimported prefixes */
5: optional PrefixTIEElement external_prefixes; 6: optional PrefixTIEElement external_prefixes;
/** positive external disaggregated prefixes (always southbound).
It MUST NOT be advertised within a North TIE and ignored otherwise
*/
7: optional PrefixTIEElement positive_external_disaggregation_prefixes;
/** Key-Value store elements */ /** Key-Value store elements */
6: optional KeyValueTIEElement keyvalues; 9: optional KeyValueTIEElement keyvalues;
} }
/** TIE packet */ /** TIE packet */
struct TIEPacket { struct TIEPacket {
1: required TIEHeader header; 1: required TIEHeader header;
2: required TIEElement element; 2: required TIEElement element;
} }
/** content of a RIFT packet */ /** content of a RIFT packet */
union PacketContent { union PacketContent {
1: optional LIEPacket lie; 1: optional LIEPacket lie;
2: optional TIDEPacket tide; 2: optional TIDEPacket tide;
 End of changes. 86 change blocks. 
191 lines changed or deleted 215 lines changed or added

This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/