RFC 7179

Transparent Interconnection of Lots of Links (TRILL): Header Extension

πŸ“… published May 2014, from ietf

Okay bestie, this is RFC 7179 πŸ’– It's a Standards Track doc, published May 2014, with ISSN 2070-1721. The authors are D. Eastlake 3rd (Huawei), A. Ghanwani (Dell), V. Manral (Ionos Corp.), Y. Li (Huawei), and C. Bestler (Nexenta Systems) 🫢 It updates RFC 6325, which is the TRILL base protocol. The header doesn't list anything it obsoletes, so nothing gets replaced here ✨

Abstract

The TRILL base protocol (RFC 6325) gives you minimal hooks so TRILL Headers can be extended safely πŸ›‘οΈ This doc adds a first extension that brings extra flag bits, and it defines some of those bits. It updates RFC 6325 πŸ’…

Status of This Memo

This is an Internet Standards Track document πŸ¦‹

It's a product of the Internet Engineering Task Force (IETF), so it reflects what the IETF community agrees on. It got public review and was approved for publication by the Internet Engineering Steering Group (IESG). If you want more on Internet Standards, check Section 2 of RFC 5741 πŸ“š

Info about the current status, any errata, and how to send feedback lives at http://www.rfc-editor.org/info/rfc7179 🌸

Copyright (c) 2014 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) as they stand on the publication date. Please read these carefully, because they spell out your rights and restrictions with respect to this document βš–οΈ Any Code Components pulled out of this document must include the Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions, and they come with no warranty, as the Simplified BSD License describes πŸ’œ

Table of Contents

   1. Introduction ....................................................3
      1.1. Conventions Used in This Document ..........................3
   2. TRILL Header Extensions .........................................3
      2.1. RBridge Extended Flag Handling Requirements ................5
      2.2. No Critical Surprises ......................................5
      2.3. Extended Header Flags ......................................6
           2.3.1. Critical Summary Bits ...............................7
      2.4. Conflict of Extensions .....................................8
   3. Specific Extended Header Flags ..................................9
      3.1. RBridge Channel Alert Extended Flags .......................9
   4. Additions to IS-IS ..............................................9
   5. IANA Considerations ............................................10
   6. Security Considerations ........................................10
   7. Acknowledgements ...............................................11
   8. References .....................................................11
      8.1. Normative References ......................................11
      8.2. Informative References ....................................11

1. Introduction ✨

So the base TRILL protocol [RFC6325] has a TRILL Header extension feature and minimal hooks to safely support header extensions 🧚 (This feature is called "options" in Section 3.8 of [RFC6325].) The catch is that, except for the first two bits, the TRILL base protocol doc doesn't spell out how extensions to the TRILL Header are structured, or the details of any particular extension πŸ™ˆ

This document is consistent with [RFC6325] and goes deeper. It specifies an initial extension word that brings extra flag bits, and it specifies some of those bits. Later docs can add more extensions, including TLV-encoded options, for example [Options] and [Options2] πŸ’•

Section 2 covers the general principles of TRILL Header extensions along with this first extension. Section 3 specifies a pair of flags in this initial extension 🌈

1.1. Conventions Used in This Document

The terminology and acronyms from [RFC6325] mean the same thing here πŸ“– Devices that implement the TRILL protocol are called RBridges (Routing Bridges) or TRILL Switches.

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 [RFC2119] πŸ”₯

2. TRILL Header Extensions πŸ¦„

The base TRILL protocol has a feature for extending the TRILL Header (see [RFC6325], Sections 3.5 and 3.8) πŸ’… The 5-bit Op-Length header field gives the length of the TRILL Header extensions in units of 4 octets, so you can have up to 124 octets of header extension. If Op-Length is zero, there are no header extensions present. Otherwise, the extension area comes right after the Ingress RBridge Nickname field of the TRILL Header. The first 32-bit word of the optional extensions area holds an extended flags area and critical summary bits, as specified in this document πŸŽ€

Here's what's provided, as described below:

  • hop-by-hop flags, which might affect any RBridge that receives a TRILL Data frame with such a flag set,
  • ingress-to-egress flags, which would only necessarily affect the RBridge(s) where a TRILL frame is decapsulated,
  • flags affecting an as-yet-unspecified class of RBridges, for example, border RBridges in a TRILL campus extended to support multi-level IS-IS (Intermediate System to Intermediate System) [MultiLevel], and
  • both "critical" and "non-critical" flags.

Any RBridge that receives a frame with a critical hop-by-hop extension it doesn't implement MUST discard the frame 🚫 It's unsafe to process a frame without understanding a critical extension like that.

Any egress RBridge that receives a frame with a critical ingress-to-egress extension it doesn't implement MUST drop the frame if it's a unicast frame (TRILL Header M bit = 0). If it's a multi-destination TRILL Data frame (M=1), then it MUST NOT be egressed at that RBridge, but the egress RBridge still forwards such a frame on the distribution tree 🌸

Non-critical extensions can be safely ignored 🫧

Any extended flag that signals a significant change in the structure or interpretation of later parts of the frame, where ignoring it could cause a failure of service or a violation of security policy, MUST be a critical extension. If such an extended flag affects any fields that transit RBridges will examine, it MUST be a hop-by-hop critical extended flag πŸ‘‘

Note: Most RBridge implementations are expected to be optimized for simple and common cases of frame forwarding and processing. The hard limit on the header extensions area length, the 32-bit alignment of the extension area, and the presence of critical extension summary bits (described below) are all meant to help with efficient hardware processing of frames that have a TRILL Header extensions area. Even so, including extensions may push frame processing onto a "slow path" with worse performance than "fast path" processing. Limited slow path throughput for such frames could cause some of them to be discarded. 🐒

2.1. RBridge Extended Flag Handling Requirements

All RBridges MUST check whether there are any critical flags set that are necessarily applicable to their processing of the frame πŸ” To help with this, critical summary bits are provided. They cover not only the extended flags specified here but also any further extensions that future documents might specify, for example [Options] and [Options2]. If an RBridge doesn't implement all critical flags in a TRILL Data frame, it MUST treat the frame as having an unimplemented critical extension, as described in Section 2. A transit or egress RBridge MAY assume that the critical summary bits are correct 🫢

On top of that, a transit RBridge:

  • MAY set or clear hop-by-hop flags as specified for such flags;
  • MUST adjust the length of the extensions area, including changing Op-Length in the TRILL Header, as appropriate if it adds or removes the extended header flags word;
  • MUST, if it adds the word of extended header flags or changes any critical flags, correctly set the critical summary bits in the extended header flags word;
  • MUST NOT remove the extended header flags word unless it is all zero (either on arrival or after permitted modifications); and
  • MUST NOT set or clear ingress-to-egress or reserved extended header flags except as specifically permitted in the specification of such flags πŸ™…β€β™€οΈ

2.2. No Critical Surprises πŸŽ‰

RBridges advertise the extended header flags they support in IS-IS PDUs (Protocol Data Units) [RFC7176] πŸ“£ Unless an RBridge advertises support for a critical extended header flag, it will not normally receive frames with that flag set. An RBridge is not required to support any extensions 🌷

An RBridge SHOULD NOT set a critical extended flag in a frame unless:

  • for a critical hop-by-hop extended header flag, it has determined that the next hop RBridge or RBridges that will accept the frame support that flag,
  • for a critical ingress-to-egress extended header flag, it has determined that the RBridge or RBridges that will egress the frame support that flag, or
  • for a critical reserved extended header flag, it may set such a flag only if it understands which RBridges it is applicable to and has determined that those RBridges that will accept the frame support that flag 🧠

"SHOULD NOT" is written that way because there may be cases where it's acceptable for those frames, particularly in the multi-destination case, to be discarded or not egressed by any RBridges that don't implement the extended flag πŸ’€

2.3. Extended Header Flags ✨

okay so bestie, if there are any extensions in a TRILL Header (you can tell because Op-Length is non-zero πŸ‘€), the first 32 bits of that extensions area are the extended header flags πŸŽ€. Anything after those first 32 bits can be defined in later documents, like [Options] and [Options2] πŸ’….

Any RBridge that adds an extensions area to a TRILL Header MUST set those first 32 bits to zero 🫢, unless it's permitted or required to set one or more of them. For TRILL Data frames that have extensions, any transit RBridge that doesn't discard the frame MUST transparently copy the extended flags word 🌸, except for changes that an extension it implements is allowed to make 🧚.

Here's what the extended header flags word looks like, and the list after the figure explains what each bit means πŸ’–:

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Crit.|  CHbH   |   NCHbH   |CRSV | NCRSV |   CItE    |  NCItE  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | ... additional optional 32-bit aligned words of extension     |
   |     possibly including TLV extensions ...

(The first two critical summary bits come from [RFC6325] πŸ¦‹. This document tacks an "S", for Summary, onto the end of their acronyms. There's also a third critical summary bit specified here, and its acronym ends with an "S" too, for consistency ✨.)

   Bits    Description
   --------------------

   0-2     Crit.: Critical summary bits.
           0 CHbHS: Critical Hop-by-Hop extension(s) are present.
           1 CItES: Critical Ingress-to-Egress extension(s) are present.
           2 CRSVS: Critical Reserved extension(s) are present.

   3-7     CHbH: Critical Hop-by-Hop extended flag bits.
   8-13    NCHbH: Non-critical Hop-by-Hop extended flag bits.

   14-16   CRSV: Critical Reserved extended flag bits.
   17-20   NCRSV: Non-critical Reserved extended flag bits.

   21-26   CItE: Critical Ingress-to-Egress extended flag bits.
   27-31   NCItE: Non-critical Ingress-to-Egress extended flag bits.

2.3.1. Critical Summary Bits πŸ”₯

okay the top three bits of the extended header flags area (bits 0, 1, and 2 above) are called the critical summary bits πŸ‘‘. They basically summarize whether critical extensions are around:

  • CHbHS: if this bit is one, one or more critical hop-by-hop extensions are present πŸ“. Those could be critical hop-by-hop extended header flags, or critical hop-by-hop extensions after the first word of the extensions area. Transit RBridges that don't support all of the critical hop-by-hop extensions present (for example, an RBridge that supports no critical hop-by-hop extensions at all) MUST drop the frame πŸ’€. If CHbHS is zero, the frame is safe for a transit RBridge to forward, no matter what extensions that RBridge does or doesn't support 🫧.
  • CItES: if this bit is a one, one or more critical ingress-to-egress extensions are present 🌈. Those could be critical ingress-to-egress extended header flags, or critical ingress-to-egress extensions after the first word of the extensions area. If CItES is zero, no such extensions are present πŸ™ˆ. If either CHbHS or CItES is non-zero, egress RBridges that don't support all the critical extensions present (for example, an RBridge that supports no critical extensions) MUST drop the frame 😭. If both CHbHS and CItES are zero, the frame is safe for an egress RBridge to process, no matter what extensions that RBridge does or doesn't support πŸ’….
  • CRSVS: if this bit is a one, one or more critical extensions are present that are reserved to apply to a class of RBridges to be specified in the future 🧚. The example given is border RBridges in a TRILL campus extended to support multi-level IS-IS, and that class will be a subset of transit RBridges 🌸. RBridges in this class MUST drop frames with the CRSVS bit set unless they implement all critical hop-by-hop and all critical reserved extensions present in the frame πŸ”’.

These summary bits make life simple and efficient πŸ¦‹. Egress RBridges that support no critical extensions, transit RBridges that support no critical hop-by-hop extensions, and RBridges in the reserved class that support no critical hop-by-hop or reserved extensions can all get by with the same quick check: is Op-Length non-zero? If it is, look at the top one, two, or three bits just after the fixed portion of the TRILL Header ✨. From those bits they can decide whether to discard the frame or forward/process it πŸ’–.

2.4. Conflict of Extensions πŸ’œ

Defining TRILL extensions, including extended header flags, that conflict with each other would be a total mess 😩. If conflicting extensions show up in the same packet and different implementations process them in different orders, the results could be unpredictable πŸŒ€. You could write rules to spell out how to process conflicting extensions predictably, but those rules would limit implementation flexibility and could pile on serious processing burdens πŸ™…β€β™€οΈ.

Conflicting extensions SHOULD NOT be defined 🚫. But if they are, careful thought should go into whether and how to specify how conflicting extensions get handled 🧠.

3. Specific Extended Header Flags πŸŽ€

Here's the table showing the current state of TRILL Header extended flag assignments πŸ“‹. See Section 5 for IANA Considerations 🌷.

   Bits    Purpose                                          Section
   ----------------------------------------------------------------
    0-2    Critical Summary Bits                              2.3.1
    3-6    available critical hop-by-hop flags
    7      Critical Channel Alert flag                          3.1
    8      Non-critical Channel Alert flag                      3.1
    9-13   available non-critical hop-by-hop flags
   14-16   available critical reserved flags
   17-20   available non-critical reserved flags
   21-26   available critical ingress-to-egress flags
   27-31   available non-critical ingress-to-egress flags

             Table 1: Extended Header Flags Area

3.1. RBridge Channel Alert Extended Flags πŸ””

The RBridge Channel Alert extended header flags say that the frame is an RBridge Channel frame [RFC7178] that asks for processing at each hop πŸ“£.

If the Critical Channel Alert flag (bit 7) is a one, and the RBridge doesn't implement the RBridge Channel feature or the particular RBridge Channel protocol involved [RFC7178], or the frame doesn't actually look like an RBridge Channel message, then the frame is discarded πŸ—‘οΈ. This lets you do things like a channel message that needs strict source routing (or something similar) πŸ—ΊοΈ, and you get the assurance that it'll be discarded instead of wandering off the directed path 🚫.

If the frame isn't discarded as described above, then either the Critical or the Non-critical Channel Alert flag tells transit RBridges that an RBridge Channel message [RFC7178] is present and might need special handling 🚨. The non-critical alert flag supports things like an RBridge Channel protocol message with a "record route" function, where it's fine for transit RBridges that don't support this function to not be recorded πŸ›€οΈ.

4. Additions to IS-IS 🌟

RBridges use IS-IS Link State PDUs (LSPs) to tell other RBridges which extended header flags they support πŸ“‘. The IS-IS PDU(s), TLV(s), or sub-TLV(s) used to encode and advertise this info are specified in a separate document [RFC7176] πŸ“„.

5. IANA Considerations πŸ›οΈ

IANA has created a "TRILL Extended Header Flags" subregistry within the TRILL Parameters registry πŸ—‚οΈ. That subregistry is initially populated as specified in Table 1 in Section 3. References in that table to sections of this document have been swapped out in the IANA subregistry for references to this document as an RFC πŸ”.

New TRILL extended header flags are allocated by IETF Review [RFC5226] πŸ™Œ.

To indicate support of extended header flags, IANA has assigned the following bits in the TRILL-VER and PORT-TRILL-VER Sub-TLV Capability Flag registries created by [RFC7176] πŸŽ‰:

  • Bits 3-13 of the PORT-TRILL-VER Sub-TLV Capability Flags have been assigned to indicate support of TRILL hop-by-hop extended header flags 3-13.
  • Bits 14-31 of the TRILL-VER Sub-TLV Capability Flags have been assigned to indicate support of TRILL extended header flags 14-31.

6. Security Considerations 🚨

For general TRILL protocol security considerations, see [RFC6325] πŸ›‘οΈ.

For security considerations related to extended header flags, see the document where the flag is specified πŸ”.

It is really important that the critical summary bits in the extended header flags word are set properly 😱. If they're set when critical extensions of the appropriate category aren't present, frames may get discarded for no reason 😀. If they're not set when critical extensions are present, frames may be mishandled or corrupted, and intended security policies may be violated πŸ’€.

The RBridge Channel Alert extended header flags come with the following security considerations πŸ•΅οΈ. Implementations should keep in mind that these flags might be set in a frame by mistake πŸ™ˆ. If either RBridge Channel Alert flag is found set in a frame that isn't an RBridge Channel message [RFC7178], the flag MAY be cleared, and it should have no effect except, possibly, delaying processing of the frame 🫠. If either RBridge Channel Alert flag is accidentally left out of a frame, the desired per-hop processing for that frame may not happen 😬.

7. Acknowledgements πŸ’•

Huge thanks, listed in alphabetical order, to these legends for their valuable contributions πŸ™Œ: Ben Campbell, Adrian Farrel, Barry Leiba, and Thomas Narten 🫢.

8. References πŸ“š

8.1. Normative References πŸ“–

   [RFC2119]     Bradner, S., "Key words for use in RFCs to Indicate
                 Requirement Levels", BCP 14, RFC 2119, March 1997.

   [RFC5226]     Narten, T. and H. Alvestrand, "Guidelines for Writing
                 an IANA Considerations Section in RFCs", BCP 26, RFC
                 5226, May 2008.

   [RFC6325]     Perlman, R., Eastlake 3rd, D., Dutt, D., Gai, S., and
                 A. Ghanwani, "Routing Bridges (RBridges): Base Protocol
                 Specification", RFC 6325, July 2011.

   [RFC7176]     Eastlake 3rd, D., Senevirathne, T., Ghanwani, A., Dutt,
                 D., and A. Banerjee, "Transparent Interconnection of
                 Lots of Links (TRILL) Use of IS-IS", RFC 7176, May
                 2014.

   [RFC7178]     Eastlake 3rd, D., Manral, V., Li, Y., Aldrin, S., and
                 D. Ward, "Transparent Interconnection of Lots of Links
                 (TRILL): RBridge Channel Support", RFC 7178, May 2014.

8.2. Informative References ✨

Okay bestie, these are the "extra reading" refs, the ones the RFC mentions for context and doesn't need you to implement anything from πŸ’…

  • [MultiLevel] Perlman, R., Eastlake 3rd, D., Ghanwani, A., and H. Zhai, "Flexible Multilevel TRILL (Transparent Interconnection of Lots of Links)", Work in Progress, January 2014. 🌸
  • [Options] Eastlake 3rd, D., Ghanwani, A., Manral, V., and C. Bestler, "RBridges: Further TRILL Header Extensions", Work in Progress, June 2012. πŸ¦‹
  • [Options2] Eastlake 3rd, D., "RBridges: More Proposed TRILL Header Options", Work in Progress, October 2011. ✨

Authors' Addresses πŸ’œ

Meet the squad who wrote this whole thing, with their contact info so you can slide into their inbox if you have questions 🫢

Donald Eastlake 3rd
Huawei R&D USA
155 Beaver Street
Milford, MA 01757
USA

Phone: +1-508-333-2270
EMail: d3e3e3@gmail.com


Anoop Ghanwani
Dell
5450 Great America Parkway
Santa Clara, CA  95054
USA

EMail: anoop@alumni.duke.edu


Vishwas Manral
Ionos Corp.
4100 Moorpark Ave.
San Jose, CA  95117
USA

EMail: vishwas@ionosnetworks.com


Yizhou Li
Huawei Technologies
101 Software Avenue,
Nanjing 210012
China

Phone: +86-25-56622310
EMail: liyizhou@huawei.com


Caitlin Bestler
Nexenta Systems
455 El Camino Real
Santa Clara, CA 95050
USA

EMail: caitlin.bestler@nexenta.com
πŸ“¦ where this page comes from