RFC 7054

Addressing Requirements and Design Considerations for Per-Interface Maintenance Entity Group Intermediate Points (MIPs)

πŸ“… published November 2013, from ietf

Addressing Requirements and Design Considerations for Per-Interface Maintenance Entity Group Intermediate Points (MIPs) πŸŽ€

Okay bestie, this is RFC 7054, and it's an Informational doc (so it's published for information, not as a Standards Track spec ✨). It came out in November 2013, and the ISSN is 2070-1721. The authors are A. Farrel (Juniper Networks), H. Endo (Hitachi, Ltd.), R. Winter (NEC), Y. Koike (NTT), and M. Paul (Deutsche Telekom). The title block doesn't list anything it obsoletes or updates, so there's no drama there πŸ’…

Abstract

So the framework for OAM (Operations, Administration and Maintenance) inside MPLS-TP πŸ¦‹ explains how the Maintenance Entity Group Intermediate Points (MIPs) can sit inside network nodes at incoming and outgoing interfaces. This doc goes deeper on the big considerations for internal MIP addressing πŸ”₯ It's about the restrictions on any mechanism that builds OAM messages so they can target MIPs on either the incoming or outgoing side, and still get forwarded correctly through the forwarding engine. It also covers node implementations where there's no difference between the incoming and outgoing MIP. Main character energy, honestly πŸ‘‘

Status of This Memo

Let's get the official stuff out of the way πŸ™ˆ This document is not an Internet Standards Track specification. It's published for informational purposes.

It's a product of the Internet Engineering Task Force (IETF) and represents the consensus of the IETF community. It got public review and was approved for publication by the Internet Engineering Steering Group (IESG). Not every IESG-approved doc is a candidate for any level of Internet Standard, so see Section 2 of RFC 5741 for that bit πŸ’œ

For the current status, any errata, and how to send feedback, check http://www.rfc-editor.org/info/rfc7054 🌸

Copyright (c) 2013 IETF Trust and the persons identified as the document authors. All rights reserved. 🫢

This doc is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents, which you can find at http://trustee.ietf.org/license-info, as they were in effect on the publication date. Please actually read those, because they spell out your rights and restrictions for this document 🧚

Code Components pulled out of this document have to include the Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions. They're also provided without warranty, as described in the Simplified BSD License ⭐

Table of Contents

   1. Introduction ....................................................2
   2. Terminology .....................................................3
   3. Summary of the Problem Statement ................................3
   4. Requirements and Design Considerations for Internal-MIP
      Addressing ......................................................6
   5. Security Considerations ........................................10
   6. Acknowledgments ................................................10
   7. References .....................................................10
      7.1. Normative References ......................................10
      7.2. Informative References ....................................11

1. Introduction ✨

Alright, so the OAM framework for MPLS-TP ([RFC6371]) splits MIPs on a node into two configs 🌈 The first is the per-node MIP: one single MIP per node, sitting in some unspecified spot inside the node. The second is the per-interface MIP: two (or more) MIPs per node, one on each side of the forwarding engine πŸ’–

In-band OAM messages go over the Generic Associated Channel (G-ACh) [RFC5586] πŸ¦‹ For transit points of pseudowires (PWs) or Label Switched Paths (LSPs), OAM messages get delivered by letting the MPLS shim header Time-to-Live (TTL) field expire. For the end points of PWs and LSPs, OAM messages are just delivered as normal. Simple and iconic πŸ’…

Next, OAM messages going to end points or transit points have to be told apart from regular data packets, so they can get handled as OAM πŸ”₯ In LSPs, that's done by having the Generic Associated Channel Label (GAL) sit in the Label Stack Entry (LSE) under the top LSE [RFC5586]. In PWs, it's either the PW Associated Channel Header (PWACH) [RFC4385] or a GAL [RFC6423] πŸŽ€

Here's the catch, though πŸ™ˆ If there are multiple MIPs on one single node, these mechanisms alone give you no way to address one particular MIP out of the whole set. Any mechanism that fixes this has to obey a few important design considerations, and we're going to talk through them in this doc πŸ‘‘

2. Terminology 🌸

Okay, vocab time! In this document, the in-MIP (incoming MIP) is the MIP that processes OAM messages before they pass through the forwarding engine of a node πŸ“ The out-MIP (outgoing MIP) processes OAM messages after they've passed the forwarding engine of the node πŸ¦‹ Put the two together and you get what we call the internal MIPs πŸ’œ

The term "forwarding engine" is used just as it's defined in [RFC6371] ✨

Also, the acronym "OAM" is used in conformance with [RFC6291] 🫢

3. Summary of the Problem Statement ✨

Okay so, Figure 1 is an abstract functional picture of an MPLS-TP node πŸŽ€. It breaks the node into three parts: an incoming interface (labeled "In"), a forwarding engine (FW), and an outgoing interface (labeled "Out"). As [RFC6371] explains, MIPs may be placed in each of the functional interface components πŸ’….

                        ------------------------
                       |-----              -----|
                       | MIP |            | MIP |
                       |     |    ----    |     |
                ----->-| In  |->-| FW |->-| Out |->----
                       | i/f |    ----    | i/f |
                       |-----              -----|
                        ------------------------

Figure 1: Abstract Functional Representation of an MPLS-TP Node

Several distinct OAM functions are required within this architectural model for both PWs and LSPs πŸ¦‹. Some examples:

  • Connectivity Verification (CV) between a Maintenance Entity Group End Point (MEP) and a MIP
  • traceroute over an MPLS-TP LSP and/or an MPLS-TP PW containing MIPs
  • data-plane loopback configuration at a MIP
  • diagnostic tests

The MIPs in these OAM functions may also be the MIPs at the incoming or outgoing interfaces 🌸.

Per-interface MIPs are a total glow-up because they enable a more accurate localization and identification of faults and diagnostic tests πŸ”₯. Like, figuring out whether a problem is between nodes or on a particular node, and where on that node, becomes so much easier. And honestly? It matters a lot. You need to narrow down the cause of a fault quickly so you can start a timely, well-directed maintenance action and get normal network operation back πŸ’–.

Figure 2 and Figure 3 show the big difference between per-node and per-interface MEPs and MIPs for OAM πŸ‘‘. Figure 2 is OAM using per-node MIPs and MEPs. For exposition, we pick a spot for the MIPs on the nodes, but the standard does not mandate the exact location for the per-node model 🧚. In the figure, there's a bidirectional LSP. In the forward (FWD) direction, MEP1, MIP1, and MEP2 sit on the ingress interface. In the backward (BWD) direction, MEP1', MIP1', and MEP2' sit on the egress interface, which is the same interface. S1 is the segment from PE1 In to P1 In, and S2 is the segment from PE1 In to P2 In 🫢. Figure 3 shows that same basic network, except per-interface maintenance points are configured for OAM operations 🌈.

Quick heads up: these figures are only examples, not the only way to do it ⭐. Per-interface MEPs or per-interface MIPs must logically be placed at a point before (for in-MIP) or after (for out-MIP) passing the forwarding engine, as defined in [RFC6371]. All traffic associated with the MEP/MIP must pass through or be terminated at that point πŸ’œ.

      Customer|           Operator's Administrative     | Customer
      Domain  |           Domain                        | Domain
      ------> |<--------------------------------------->| <------
        CE1   |   T-PE/PE1      S-PE/P1        T-PE/PE2 |   CE2
              |  <-------->    <-------->    <--------> |
       +---+  | +-+ +-+ +-+   +-+ +-+ +-+   +-+ +-+ +-+ |  +---+
       |   |  | | | | | | |   | | | | | |   | | | | | | |  |   |
       |   |  | | | | | | |   | | | | | |   | | | | | | |  |   |
       +---+  | +-+ +-+ +-+   +-+ +-+ +-+   +-+ +-+ +-+ |  +---+
              | In  FW  Out   In  FW  Out   In  FW  Out |
              |                                         |
   FWD PW/LSP |  o-------------------------- >          |
              |  V-------------*-------------V          |
              | MEP1          MIP1          MEP2        |
   BWD PW/LSP |  <---------------------------o          |
              |  V-------------*-------------V          |
              |         MEP1'        MIP1'         MEP2'|
             (S1)<============>
             (S2)<==========================>

Figure 2: Example of OAM Relying on Per-Node MIPs and MEPs

Now let's see the two modes in action with fault detection πŸ•΅οΈβ€β™€οΈ. Say the client traffic between CE1 and CE2 has a fault. Also assume an on-demand CV test between PE1 and PE2 succeeded. In the Figure 2 setup, that leaves the forwarding engine (FW) of PE2, the outgoing interface of PE2, the transmission line between PE2 and CE2, or CE2 itself as possible fault locations, because on-demand CV can only be performed on segment S2 😭. Also, the PWs or LSPs here are two examples (not one), so the figures don't show the layer structure of PWs and LSPs πŸ™ˆ.

Figure 3's per-interface model lets you do way more fine-grained OAM operations πŸ’…. First, CV on segment S'4, plus CV on segment S'5, can help rule out, for example, the forwarding engine of PE2. That's only one example, and other OAM functions and scenarios are trivially conceivable ✨. The core message: with the per-interface OAM model, an operator can configure smaller segments of a transport path for OAM operations to apply to πŸ¦‹. That gives a more fine-grained scope for OAM operations, like fault localization and performance monitoring, which gives operators better information for dealing with adverse networking conditions 🫢.

      Customer|          Operator's Administrative      |Customer
      Domain  |          Domain                         |Domain
      ------->|<--------------------------------------->|<------
        CE1   |   T-PE/PE1      S-PE/P1       T-PE/PE2  |   CE2
              |  <-------->    <-------->    <--------> |
       +---+  | +-+ +-+ +-+   +-+ +-+ +-+   +-+ +-+ +-+ |  +---+
       |   |  | | | | | | |   | | | | | |   | | | | | | |  |   |
       |   |  | | | | | | |   | | | | | |   | | | | | | |  |   |
       +---+  | +-+ +-+ +-+   +-+ +-+ +-+   +-+ +-+ +-+ |  +---+
              | In  FW  Out   In  FW  Out   In  FW  Out |
              |                                         |
   FWD PW/LSP |  o----------------------------------->  |
              |  V-------*------*------*-----*-------V  |
              | MEP1    MIP1   MIP2   MIP3  MIP4    MEP2|
              |                                         |
   BWD PW/LSP |  <-----------------------------------o  |
              | MEP1'   MIP1'  MIP2'  MIP3' MIP4'  MEP2'|
           (S'1)<======>
           (S'2)<=============>
           (S'3)<====================>
           (S'4)<==========================>
           (S'5)<==================================>

Figure 3: Example of OAM Relying on Per-Interface MIPs and MEPs

4. Requirements and Design Considerations for Internal-MIP Addressing ✨

okay bestie, so OAM messages for transit points of PWs or LSPs get delivered by the expiration of the TTL field in the top LSE of the MPLS packet header πŸ¦‹. OAM messages for the end points of PWs and LSPs just get delivered as normal πŸ’…. These OAM messages get told apart from regular (data) packets so they can be processed as OAM. For LSPs, the thing that flags them is the GAL in the LSE under the top LSE [RFC5586]. For PWs, it's either the PW Associated Channel Header [RFC4385] or a GAL [RFC6423] 🌸. There are also two sets of identifiers that can be used to address MIPs, defined in [RFC6370] and [RFC6923] 🧚

Any solution for sending OAM messages to the in- and out-MIPs has to fit inside these existing models of handling OAM πŸŽ€

Also, lowkey, a lot of MPLS-TP nodes are built so that all the queuing and the forwarding function happen at the incoming interface πŸ’–. The abstract functional representation of one of these nodes is shown in Figure 4. The outgoing interfaces are minimal, so it may not be possible to put MIP functions on them. This is especially true for existing deployed implementations 😭

Any solution that tries to send OAM messages to the outgoing interface of an MPLS-TP node must not cause any problems when those implementations are around (like leaking OAM packets with a TTL of 0) πŸ’€

                      ---------------------
                     |------------         |
                     | MIP        |        |
                     |      ----  |        |
              ----->-| In  | FW | |-->-Out-|->---
                     | i/f  ----  |    i/f |
                     |------------         |
                      ---------------------

          Figure 4: Abstract Functional Representation of
                    Some Existing MPLS-TP Nodes

OAM has to work on MPLS-TP nodes that are branch points on point-to-multipoint (P2MP) trees 🌈. That means it has to be possible to target individual outgoing MIPs as well as all outgoing MIPs in the abstract functional representation shown in Figure 5, and to handle the P2MP node implementations shown in Figure 6 without causing problems. Main character energy πŸ‘‘

                    --------------------------
                   |                     -----|
                   |                    | MIP |
                   |                 ->-|     |->----
                   |                |   | Out |
                   |                |   | i/f |
                   |                |    -----|
                   |-----           |    -----|
                   | MIP |    ----  |   | MIP |
                   |     |   |    |-    |     |
            ----->-| In  |->-| FW |--->-| Out |->----
                   | i/f |   |    |-    | i/f |
                   |-----     ----  |    -----|
                   |                |    -----|
                   |                |   | MIP |
                   |                |   |     |
                   |                 ->-| Out |->----
                   |                    | i/f |
                   |                     -----|
                    --------------------------

        Figure 5: Abstract Functional Representation of an
                   MPLS-TP Node Supporting P2MP

                      ----------------------
                     |               ->-Out-|->----
                     |              |   i/f |
                     |------------  |       |
                     |            | |       |
                     | MIP  ----  | |       |
                     |     |    | |-        |
              ----->-| In  | FW | |--->-Out-|->----
                     | i/f |    | |-    i/f |
                     |      ----  | |       |
                     |            | |       |
                     |------------  |       |
                     |              |   Out |
                     |               ->-i/f-|->----
                      ----------------------

          Figure 6: Abstract Functional Representation of
            Some Existing MPLS-TP Nodes Supporting P2MP

So, in summary, the solution for OAM message delivery must behave like this 🫢:

  • Delivery of OAM messages to the correct MPLS-TP node.
  • Delivery of OAM instructions to the correct MIP within an MPLS-TP node.
  • Forwarding of OAM packets exactly as data packets.
  • Packet inspection at the incoming and outgoing interfaces must be minimized.

The first two bullets are pretty obvious πŸ™ˆ But the third one is seriously vital. To show why, here's a rejected solution in Figure 7. Basically, all data and non-local OAM gets handled as normal. Local OAM gets intercepted at the incoming interface and delivered to the MIP there. If the OAM is meant for the incoming MIP, it's handled with no issue ✨. If it's meant for the outgoing MIP, it gets forwarded to that MIP using some internal messaging system that's implementation specific. Not me reading this and going "nope" πŸ’…

                         ------------------------
                        |-----              -----|
       local OAM ----->-| MIP |----->------| MIP |
                        |     |    ----    |     |
            data =====>=| In  |=>=| FW |=>=| Out |=>==== data
   non-local OAM ~~~~~>~| i/f |~>~|    |~>~| i/f |~>~~~~ non-local OAM
                        |-----     ----     -----|
                         ------------------------

           Figure 7: OAM Control Message Delivery Bypassing
                         the Forwarding Engine

This solution is fully functional for the incoming MIP. It also supports control of data loopback for the outgoing MIP, and it can adequately do some OAM features like interface identity reporting at the outgoing MIP πŸ“

BUT, because the OAM message never goes through the forwarding engine, this solution can't correctly do OAM loopback, connectivity verification, LSP tracing, or performance measurement πŸ˜­πŸ’”

The last bullet is also an important requirement for any solution to the internal-MIP addressing problem πŸ”₯. Since OAM packets that target an out-MIP need to go through the forwarding engine and be treated exactly like regular data packets, deciding whether to forward the packet or process it at the incoming MIP needs to be fast. So the processing overhead has to be kept to a minimum 🌸. On top of that, a few OAM procedures run at line rate, like OAM loopback, which makes minimal processing overhead even more important for both the in-MIP and the out-MIP πŸ¦‹

Most of the above looks like an implementation thing local to one node, ngl πŸ™„ But the format of the message does need to be standardized so that:

  • A MEP can correctly target the outgoing MIP of a specific MPLS-TP node.
  • A node can correctly filter out any OAM messages that were meant for its upstream neighbor's outgoing MIP, but that weren't handled there because the upstream neighbor is an implementation like the ones shown in Figures 4 and 6.

Quick note: the last bullet is basically a safety net in case OAM messages leak past where they're supposed to go 🧚 But implementations should take care that messages don't leak in the first place, so the safety net never has to be used πŸ’œ


5. Security Considerations ✨

okay this part is serious bestie 😭 OAM security is covered in [RFC6371], and security stuff specific to MPLS-TP in general is outlined in [RFC6941] πŸ”

OAM can provide useful info for detecting and tracing security attacks πŸ•΅οΈβ€β™€οΈ

BUT OAM can also be used to illicitly gather information or for denial-of-service attacks and other kinds of attacks πŸ’€. Implementations are therefore required to offer security mechanisms for OAM. Deployments are strongly advised to follow the security advice given in RFCs 6371 and 6941 🫢

Mixing per-node and per-interface OAM on a single node is not advised, because it could result in OAM message leakage 🚨


6. Acknowledgments 🌈

The authors gratefully acknowledge the substantial contributions of Zhenlong Cui πŸ’– We'd also like to thank Eric Gray, Sami Boutros, and Shahram Davari for their interesting input to this document through discussions πŸŽ€


7. References πŸ“š

7.1. Normative References

  • [RFC4385] Bryant, S., Swallow, G., Martini, L., and D. McPherson, "Pseudowire Emulation Edge-to-Edge (PWE3) Control Word for Use over an MPLS PSN", RFC 4385, February 2006.
  • [RFC5586] Bocci, M., Ed., Vigoureux, M., Ed., and S. Bryant, Ed., "MPLS Generic Associated Channel", RFC 5586, June 2009.
  • [RFC6370] Bocci, M., Swallow, G., and E. Gray, "MPLS Transport Profile (MPLS-TP) Identifiers", RFC 6370, September 2011.
  • [RFC6371] Busi, I., Ed., and D. Allan, Ed., "Operations, Administration, and Maintenance Framework for MPLS-Based Transport Networks", RFC 6371, September 2011.
  • [RFC6423] Li, H., Martini, L., He, J., and F. Huang, "Using the Generic Associated Channel Label for Pseudowire in the MPLS Transport Profile (MPLS-TP)", RFC 6423, November 2011.
  • [RFC6923] Winter, R., Gray, E., van Helvoort, H., and M. Betts, "MPLS Transport Profile (MPLS-TP) Identifiers Following ITU-T Conventions", RFC 6923, May 2013.

7.2. Informative References

  • [RFC6291] Andersson, L., van Helvoort, H., Bonica, R., Romascanu, D., and S. Mansfield, "Guidelines for the Use of the "OAM" Acronym in the IETF", BCP 161, RFC 6291, June 2011.
  • [RFC6941] Fang, L., Ed., Niven-Jenkins, B., Ed., Mansfield, S., Ed., and R. Graveman, Ed., "MPLS Transport Profile (MPLS-TP) Security Framework", RFC 6941, April 2013.

Authors' Addresses πŸ’Œ

Adrian Farrel
Juniper Networks

EMail: adrian@olddog.co.uk


Hideki Endo
Hitachi, Ltd.

EMail: hideki.endo.es@hitachi.com


Rolf Winter
NEC

EMail: rolf.winter@neclab.eu


Yoshinori Koike
NTT

EMail: koike.yoshinori@lab.ntt.co.jp


Manuel Paul
Deutsche Telekom

EMail: Manuel.Paul@telekom.de
πŸ“¦ where this page comes from