RFC 6119

IPv6 Traffic Engineering in IS-IS

๐Ÿ“… published February 2011, from ietf

RFC 6119: IPv6 Traffic Engineering in IS-IS โœจ๐ŸŽ€

okay bestie, this is RFC 6119 ๐Ÿซถ It's a Standards Track doc, so it's an official Internet standard, not just a vibe. It's from the Internet Engineering Task Force (IETF) and was written by J. Harrison, J. Berger, and M. Bartlett at Metaswitch Networks ๐Ÿ’…. It came out in February 2011 and has ISSN 2070-1721. The title block doesn't list anything it obsoletes or updates, so it's just doing its own thing ๐Ÿฆ‹

Abstract

okay so this doc explains how to share IPv6 traffic engineering info using the IS-IS routing protocol ๐Ÿงš That info lets routers in an IS-IS network work out traffic-engineered routes using IPv6 addresses, and it's giving main character energy ๐Ÿ‘‘

Status of This Memo

This is an Internet Standards Track document ๐Ÿ’œ

This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741 ๐ŸŒธ

Info about the current status of this document, any errata, and how to send feedback is at http://www.rfc-editor.org/info/rfc6119 ๐Ÿ”ฅ

Copyright (c) 2011 IETF Trust and the persons identified as the document authors. All rights reserved. ๐ŸŽ€

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, since they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License ๐Ÿ’–

This document may contain material from IETF Documents or IETF Contributions published or made publicly available before November 10, 2008. The person(s) controlling the copyright in some of this material may not have granted the IETF Trust the right to allow modifications of such material outside the IETF Standards Process. Without obtaining an adequate license from the person(s) controlling the copyright in such materials, this document may not be modified outside the IETF Standards Process, and derivative works of it may not be created outside the IETF Standards Process, except to format it for publication as an RFC or to translate it into languages other than English ๐ŸŒˆ

1. Overview โœจ

so the IS-IS routing protocol is defined in [IS-IS] ๐Ÿงš Every router makes a Link State PDU (LSP) that describes the router itself and the links coming off of it. The info in the LSP is packed into a variable length structure made of a Type, a Length, and a Value. That structure is called a TLV ๐Ÿ’…

[TE] and [GMPLS] define a bunch of TLVs and sub-TLVs so Traffic Engineering (TE) info can be spread around with IS-IS [IS-IS]. The addressing info in those TLVs is IPv4 specific ๐Ÿ™ˆ

[IPv6] explains how IS-IS can do Shortest Path First (SPF) routing for IPv6. It does this by defining IPv6-specific TLVs that are basically the IPv6 twins of the TLVs IS-IS uses to carry IPv4 addressing info ๐Ÿฆ‹

Multiprotocol Label Switching (MPLS) traffic engineering is super successful, and as IPv6 keeps growing, we need to be able to support traffic engineering in IPv6 networks too ๐Ÿ”ฅ

this document defines the TLVs that let traffic engineering info (including Generalized-MPLS (GMPLS) TE info) be carried in IPv6 IS-IS networks ๐Ÿซถ

2. Requirements Language ๐Ÿ’œ

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [KEYWORDS] ๐ŸŽ€

3. Summary of Operation ๐ŸŒธ

each IS-IS link has certain properties, like bandwidth, shared risk link groups (SRLGs), switching capabilities, and so on ๐Ÿ’… The IS-IS extensions in [TE] and [GMPLS] describe how to attach these traffic engineering parameters to IS-IS links. These TLVs use IPv4 addresses to identify the link (or local/remote link identifiers on unnumbered links) ๐Ÿ™ˆ

when IPv6 is in use, a numbered link can be identified by IPv4 and/or IPv6 interface addresses. The type of identifier doesn't change the link's properties, though. It still has the same bandwidth, SRLGs, and switching capabilities ๐Ÿ’–

this doc describes a way to support IPv6 traffic engineering by defining TLV extensions that let TE links and nodes be identified by IPv6 addresses โœจ

3.1.1. IPv6 Address Types ๐Ÿฆ‹

An IPv6 address can have global, unique-local, or link-local scope.

  • A global IPv6 address is valid within the scope of the Internet. ๐ŸŒ
  • A unique-local IPv6 address is globally unique but is intended for local communication. ๐Ÿ 
  • A link-local IPv6 address is valid only within the scope of a single link and may only be referenced on that link. ๐Ÿ”—

because the IPv6 traffic engineering TLVs in LSPs get propagated across networks, they MUST NOT use link-local addresses. ๐Ÿšซ

IS-IS doesn't need to tell global and unique-local addresses apart ๐Ÿ’…

3.2. IP Addresses Used in Traffic Engineering TLVs ๐ŸŒˆ

this section lists the IP addresses used in the TLVs defined in [TE] and [GMPLS] and gives an overview of the IPv6 versions you'll need ๐Ÿซถ

3.2.1. TE Router ID TLV ๐Ÿ‘‘

the TE Router ID TLV holds a stable IPv4 address that's routable no matter what state each interface is in ๐Ÿ”ฅ

same deal for IPv6. It's useful to have a stable IPv6 address that identifies a TE node ๐Ÿ’– The IPv6 TE Router ID TLV is defined in Section 4.1 โœจ

3.2.2. IPv4 Interface Address Sub-TLV ๐Ÿงš

this sub-TLV of the Extended IS Reachability TLV holds an IPv4 address for the local end of a link. Its IPv6 equivalent, the IPv6 Interface Address sub-TLV, is defined in Section 4.2 ๐ŸŽ€

3.2.3. IPv4 Neighbor Address Sub-TLV ๐Ÿ’…

this sub-TLV of the Extended IS Reachability TLV is used for point-to-point links and holds an IPv4 address for the neighbor's end of a link. Its IPv6 equivalent, the IPv6 Neighbor Address sub-TLV, is defined in Section 4.3 ๐Ÿฆ‹

a router builds the IPv4 Neighbor Address sub-TLV using one of the IPv4 addresses it got in the IS-IS Hello (IIH) PDU from the neighbor on the link ๐ŸŒธ

the IPv6 Neighbor Address sub-TLV holds a globally unique IPv6 address for the peer's interface (which can be a global or unique-local IPv6 address) ๐Ÿ’œ Here's the tricky bit ๐Ÿ™ˆ The IPv6 Interface Address TLV from [IPv6] only has link-local addresses when it's used in the IIH PDU. So a neighbor's IP address from the IPv6 Interface Address TLV can't be used to build the IPv6 Neighbor Address sub-TLV. Instead, we define another TLV, the IPv6 Global Interface Address TLV in Section 4.5 ๐Ÿ”ฅ The IPv6 Global Interface Address TLV goes in IIH PDUs to give the globally unique IPv6 address a neighbor router needs to build the IPv6 Neighbor Address sub-TLV ๐Ÿซถ

3.2.4. IPv4 SRLG TLV ๐ŸŒˆ

the SRLG TLV (type 138) defined in [GMPLS] holds the set of SRLGs for a link. It identifies the link using either local/remote IPv4 addresses or, for point-to-point unnumbered links, link-local/remote identifiers. The SRLG TLV has a flags field to say which kind of identifier is in use ๐Ÿ’–

when only IPv6 is in use, IPv4 addresses and link-local/remote identifiers aren't available to identify the link, but IPv6 addresses can do the job instead โœจ

there's no backward-compatible way to change the SRLG TLV (type 138) so it identifies the link by IPv6 addresses, so we need a new TLV ๐Ÿ˜ญ The IPv6 SRLG TLV is defined in Section 4.4 ๐Ÿงš

4. IPv6 TE TLVs ๐Ÿ‘‘

4.1. IPv6 TE Router ID TLV ๐Ÿ’–

the IPv6 TE Router ID TLV is TLV type 140 ๐ŸŽ€

it holds a 16-octet IPv6 address. A stable global IPv6 address MUST be used, so the router ID gives a routable address no matter what state a node's interfaces are in ๐Ÿ”ฅ

if a router doesn't implement traffic engineering, it MAY include or omit the IPv6 TE Router ID TLV. If a router implements traffic engineering for IPv6, it MUST include this TLV in its LSP. This TLV MUST NOT be included more than once in an LSP ๐Ÿงš

โš ๏ธ an implementation that receives an IPv6 TE Router ID TLV MUST NOT treat the router ID as a /128 reachable prefix in the standard SPF calculation, because that can cause forwarding loops when it talks to systems that don't support this TLV ๐Ÿ™ˆ

4.2. IPv6 Interface Address Sub-TLV ๐Ÿฆ‹

the IPv6 Interface Address sub-TLV of the Extended IS Reachability TLV has sub-TLV type 12 ๐ŸŒธ It holds a 16-octet IPv6 address for the interface described by the Extended IS Reachability TLV that contains it. This sub-TLV can show up multiple times ๐Ÿ’…

implementations MUST NOT inject a /128 prefix for the interface address into their routing or forwarding table, because that can cause forwarding loops when it talks to systems that don't support this sub-TLV ๐Ÿšซ

if a router implements the basic TLV extensions in [TE], it MAY include or omit this sub-TLV. If a router implements IPv6 traffic engineering, it MUST include this sub-TLV (except on an unnumbered point-to-point link, where the Link-Local Interface Identifiers sub-TLV is used instead) ๐Ÿ’œ

this sub-TLV MUST NOT contain an IPv6 link-local address ๐Ÿซถ

4.3. IPv6 Neighbor Address sub-TLV ๐ŸŒˆ

the IPv6 Neighbor Address sub-TLV of the Extended IS Reachability TLV has sub-TLV type 13 โœจ It holds a 16-octet IPv6 address for a neighboring router on the link described by the (main) TLV. This sub-TLV can show up multiple times ๐Ÿงš

implementations MUST NOT inject a /128 prefix for the interface address into their routing or forwarding table, because that can cause forwarding loops when it talks to systems that don't support this sub-TLV ๐Ÿ™ˆ

if a router implements the basic TLV extensions in [TE], it MAY include or omit this sub-TLV. If a router implements IPv6 traffic engineering, it MUST include this sub-TLV for point-to-point links (except on an unnumbered point-to-point link, where the Link-Local Interface Identifiers sub-TLV is used instead) ๐Ÿ”ฅ

this sub-TLV MUST NOT contain an IPv6 link-local address ๐Ÿ’–

4.4. IPv6 SRLG TLV

okay bestie, the IPv6 SRLG TLV is type 139 โœจ and it carries the Shared Risk Link Group info. If you want the full tea, check the "Shared Risk Link Group Information" section of [GMPLS-ROUTING] ๐Ÿซถ

Here's what's inside the data structure, no cap ๐Ÿ’…

  • 6 octets of System ID
  • 1 octet of pseudonode number
  • 1 octet flags
  • 16 octets of IPv6 interface address
  • (optional) 16 octets of IPv6 neighbor address
  • (variable) list of SRLG values, where each element in the list has 4 octets

Here's the encoding of the Value field. It's giving diagram realness ๐Ÿฆ‹

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          System ID                            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |            System ID (cont.)  | Pseudonode num|    Flags      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     IPv6 interface address                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |               IPv6 interface address (continued)              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |               IPv6 interface address (continued)              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |               IPv6 interface address (continued)              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           (optional) IPv6 neighbor address                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |               IPv6 neighbor address (continued)               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |               IPv6 neighbor address (continued)               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |               IPv6 neighbor address (continued)               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  Shared Risk Link Group Value                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        ............                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  Shared Risk Link Group Value                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

So the neighbor is identified by its System ID (6 octets) ๐Ÿงš, plus one octet for the pseudonode number if the neighbor is on a LAN interface.

The 1-octet flags field works like this ๐Ÿ‘‘

     0  1  2  3  4  5  6  7
    +--+--+--+--+--+--+--+--+
    |  Reserved          |NA|
    +--+--+--+--+--+--+--+--+

NA means Neighbor Address included ๐ŸŒธ

Right now the flags field only has one flag, which tells you whether the IPv6 neighbor address is included (NA bit set to 1) or not included (NA bit set to 0).

The other bits are reserved for future use ๐Ÿ”ฎ Any bits not understood by an implementation MUST be set to zero by the sender. If a router gets an IPv6 SRLG TLV with non-zero values for any bit it doesn't understand, it MUST ignore the TLV. In other words, it doesn't use the TLV locally, but it still floods the TLV unchanged to neighbors as normal ๐Ÿ™ˆ

This rule is giving future-proof energy ๐Ÿ’œ It means alternative ways of identifying the corresponding link can be added later, and an implementation that doesn't understand such an extension will ignore the TLV instead of trying to interpret it wrong. Iconic behavior ๐Ÿ˜ญ

The length of this TLV is 24 + 4 * (number of SRLG values) + 16 (if the IPv6 neighbor address is included).

Now, so an SRLG TLV and an IPv6 SRLG TLV in the same logical LSP don't cause a total mess, these rules apply ๐Ÿซ 

  • The IPv6 SRLG TLV MAY occur more than once within the IS-IS logical LSP.
  • There MUST NOT be more than one IPv6 SRLG TLV for a given link.
  • The IPv6 SRLG TLV (type 139) MUST NOT be used to describe the SRLGs for a given link if it is possible to use the SRLG TLV (type 138).
  • If both an SRLG TLV and an IPv6 SRLG are received describing the SRLGs for the same link, the receiver MUST apply the SRLG TLV and ignore the IPv6 SRLG TLV.

So basically, if SRLGs are going to be advertised for a link, and the Extended IS Reachability TLV describing that link has IPv4 interface/neighbor address sub-TLVs or the link-local identifiers sub-TLV, then the SRLGs MUST be advertised in the SRLG TLV (type 138). Main character energy ๐Ÿ‘‘โœจ


4.5. IPv6 Global Interface Address TLV

The IPv6 Global Interface Address TLV is TLV type 233 ๐ŸŽ€ Its structure is identical to the IPv6 Interface Address TLV defined in [IPv6], but the semantics are different. The TLV shows up in IIH PDUs for interfaces using IPv6 TE extensions. It holds the global or unique-local IPv6 addresses assigned to the interface sending the Hello ๐ŸŒˆ

Quick reminder: this one is not used in LSPs ๐Ÿ™…โ€โ™€๏ธ


5. Security Considerations ๐Ÿšจ

This document raises no new security issues for IS-IS. For general security considerations for IS-IS, see [ISIS-AUTH] ๐Ÿ”


6. IPv4/IPv6 Migration ๐Ÿฆ‹

The IS-IS extensions in this document let GMPLS Label Switched Paths using IPv6 addressing get routed through an IS-IS network โœจ Adding this IPv6 TE routing info to an existing IPv4 GMPLS network doesn't introduce any migration issues, no cap. Moving Label Switched Paths from IPv4 to IPv6 is a GMPLS signaling issue, and it's outside the scope of this document ๐Ÿ’…


7. IANA Considerations ๐Ÿงพ

This document defines the following new IS-IS TLV types, which IANA has reflected in the IS-IS TLV code-point registry ๐Ÿ“

       Type        Description              IIH   LSP   SNP
       ----        ----------------------   ---   ---   ---
        139        IPv6 SRLG TLV             n     y     n
        140        IPv6 TE Router ID         n     y     n
        233        IPv6 Global Interface     y     n     n
                   Address TLV

This document also defines the following new sub-TLV types of top-level TLV 22, which IANA has reflected in the Sub-TLVs for TLV 22, 141, and 222 registry ๐ŸŒธ

       Type        Description            22  141  222  Length
       ----        -----------            --  ---  ---  ------
         12        IPv6 Interface Address  y   y    y       16
         13        IPv6 Neighbor Address   y   y    y       16

8. Normative References ๐Ÿ“š

  • [IS-IS] ISO, "Intermediate System to Intermediate System intra-domain routeing information exchange protocol for use in conjunction with the protocol for providing the connectionless-mode network service (ISO 8473)", International Standard 10589: 2002, Second Edition, 2002.
  • [IPv6] Hopps, C., "Routing IPv6 with IS-IS", RFC 5308, October 2008.
  • [TE] Li, T. and H. Smit, "IS-IS Extensions for Traffic Engineering", RFC 5305, October 2008.
  • [KEYWORDS] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
  • [ISIS-AUTH] Li, T. and R. Atkinson, "IS-IS Cryptographic Authentication", RFC 5304, October 2008.
  • [GMPLS] Kompella, K., Ed., and Y. Rekhter, Ed., "IS-IS Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)", RFC 5307, October 2008.
  • [GMPLS-ROUTING] Kompella, K., Ed., and Y. Rekhter, Ed., "Routing Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)", RFC 4202, October 2005.

Authors' Addresses โœ๏ธ

Jon Harrison Metaswitch Networks 100 Church Street Enfield EN2 6BQ U.K. Phone: +44 20 8366 1177 EMail: jon.harrison@metaswitch.com

Jon Berger Metaswitch Networks 100 Church Street Enfield EN2 6BQ U.K. Phone: +44 20 8366 1177 EMail: jon.berger@metaswitch.com

Mike Bartlett Metaswitch Networks 100 Church Street Enfield EN2 6BQ U.K. Phone: +44 20 8366 1177 EMail: mike.bartlett@metaswitch.com

๐Ÿ“ฆ where this page comes from