RFC 4182
Removing a Restriction on the use of MPLS Explicit NULL
Network Working Group RFC 4182 β¨ Removing a Restriction on the use of MPLS Explicit NULL π
Okay bestie, let's start with the title block π This one is by Eric C. Rosen (listed as E. Rosen at the top) from Cisco Systems, Inc., dated September 2005. It's a Standards Track document, which means it's a real protocol spec and not just a chill memo. It updates RFC 3032 π¦, and the header doesn't list anything it obsoletes.
Status of This Memo
Okay so this section explains what kind of doc this is. It's a standards track protocol for the Internet community, and it's asking for discussion and suggestions for improvements π«Ά. If you want to know where this protocol stands officially, check the current edition of the "Internet Official Protocol Standards" (STD 1). And distribution of this memo is unlimited, so share it with everyone π .
Copyright Notice
Copyright (C) The Internet Society (2005) πΈ
Abstract
Okay, the big picture β¨ MPLS label stack encoding has two reserved label values: "IPv4 Explicit NULL" and "IPv6 Explicit NULL." Before this doc, these were only legal when they sat at the bottom of the MPLS label stack. That restriction is now removed, so these label values can legally show up anywhere in the stack π₯
This document updates RFC 3032 π
Table of Contents
1. Introduction ....................................................2
2. Detail of Change ................................................2
3. Reasons for Change ..............................................3
4. Deployment Considerations .......................................5
5. Security Considerations .........................................5
6. Acknowledgments .................................................5
7. Normative References ............................................5
8. Informative References ..........................................5
1. Introduction π§
So RFC 3032 is the one that defines the "IPv4 Explicit NULL" and "IPv6 Explicit NULL" reserved label values [RFC3032]. It says these labels are only legal at the bottom of the MPLS label stack π The annoying part? It never gives a reason for that rule.
Here's the tea β In practice, there are situations where it's actually useful to send MPLS packets with Explicit NULL somewhere other than the bottom of the stack. The intended meaning is pretty obvious, but RFC 3032 declares those packets illegal for no real reason π That makes it hard to handle these situations in an interoperable way.
So this document updates RFC 3032 by removing that unnecessary restriction. Now both label values are legal anywhere in the label stack π
2. Detail of Change π
Let's look at what RFC 3032 says on page 4 first, then the glow-up. Here's the original text:
There are several reserved label values:
i. A value of 0 represents the "IPv4 Explicit NULL Label". This
label value is only legal at the bottom of the label stack.
It indicates that the label stack must be popped, and the
forwarding of the packet must then be based on the IPv4
header.
iii. A value of 2 represents the "IPv6 Explicit NULL Label". This
label value is only legal at the bottom of the label stack.
It indicates that the label stack must be popped, and the
forwarding of the packet must then be based on the IPv6
header.
Paragraph i gets changed to read the following π
i. A value of 0 represents the "IPv4 Explicit NULL Label".
An IPv4 Explicit NULL at the top of the label stack means that
the stack must be popped.
If the NULL was not the only label on the stack, this will
cause the label beneath it to rise to the top of the stack.
The disposition of the packet is based on the label that has
now risen to the top.
If, on the other hand, the NULL was the only label on the
stack, then the stack is now empty. The resulting packet is
treated as an IPv4 packet, and its disposition is based on the
IPv4 header.
And paragraph iii gets changed to read this π¦
iii. A value of 2 represents the "IPv6 Explicit NULL Label".
An IPv6 Explicit NULL at the top of the label stack means that
the stack must be popped.
If the NULL was not the only label on the stack, this will
cause the label beneath it to rise to the top of the stack.
The disposition of the packet is based on the label that has
now risen to the top.
If, on the other hand, the NULL was the only label on the
stack, then the stack is now empty. The resulting packet is
treated as an IPv6 packet, and its disposition is based on the
IPv6 header.
Basically, the only real change is that the "only legal at the bottom" line is gone β¨ At the top of the stack, the router pops the label. If other labels are underneath, the next one moves up and decides where the packet goes. If the NULL was the only label, the stack is now empty and the packet is handled as IPv4 or IPv6 based on its header π
3. Reasons for Change π
Okay, why did they even do this? Because the bottom-only rule has caused real problems in practice π
With that restriction in place, you shouldn't hand a label distribution peer a binding of Explicit NULL to a particular Forwarding Equivalence Class (FEC) unless "Condition L" holds. Condition L says: every MPLS packet that peer receives with an incoming label for that FEC has only one label stack entry π«Ά If Explicit NULL is bound to the FEC but Condition L doesn't hold, you're asking the peer to create illegal packets. None of the MPLS specs say what the peer is supposed to do then π It's even messier because Condition L rarely holds in practice, and in general you can't figure out whether it holds or not π
Also, if you're supporting the Pipe Model from RFC 3270 [RFC3270], there are good reasons to have Explicit NULL at the top of the label stack with a non-null label at the bottom π₯
RFC 3270 is the spec for MPLS support of Differentiated Services π It defines a "Pipe Model," and here's what it says (quoting RFC 3270, Section 2.6.2):
"tunneled packets must convey two meaningful pieces of Diff-Serv
information:
- the Diff-Serv information which is meaningful to intermediate
nodes along the LSP span including the LSP Egress (which we refer
to as the 'LSP Diff-Serv Information'). This LSP Diff-Serv
Information is not meaningful beyond the LSP Egress: Whether
Traffic Conditioning at intermediate nodes on the LSP span
affects the LSP Diff-Serv information or not, this updated Diff-
Serv information is not considered meaningful beyond the LSP
Egress and is ignored.
- the Diff-Serv information which is meaningful beyond the LSP
Egress (which we refer to as the 'Tunneled Diff-Serv
Information'). This information is to be conveyed by the LSP
Ingress to the LSP Egress. This Diff-Serv information is not
meaningful to the intermediate nodes on the LSP span."
When the Pipe Model is in use, it's common for the LSP Egress to bind Explicit Null to the tunnel's FEC π The idea is that the LSP Diff-Serv information rides in the EXP bits of the Explicit Null label stack entry. The tunneled Diff-Serv information rides in whatever is "below" that entry, which means the IP header DS bits or the EXP bits of the next entry in the MPLS label stack π¦
Here's where it gets awkward. If the Pipe Model LSP is used to tunnel MPLS packets (so Condition L doesn't hold), this practice causes a problem. Following RFCs 3031 and 3036 strictly, you end up with an MPLS packet where Explicit NULL is at the top of the stack even though it's not the only entry. RFC 3032 says that packet is illegal π
Some implementations just transmit the illegal packet. Others try to fix it into a legal one by stripping off the Explicit NULL before sending it. That breaks the Pipe Model because the LSP Diff-Serv information gets thrown away π It's also conceivable that some implementation drops the illegal packet entirely. That would break the Pipe Model too, since it loses the LSP Diff-Serv information and the whole packet π
The LSP Egress isn't forced to bind Explicit NULL to the tunnel's FEC, and it could use an ordinary label instead π But Explicit NULL lets the egress tell immediately, without a lookup in the Label Information Base, that the packet's further forwarding is decided by whatever is below the label. The document says that avoiding this lookup can have favorable implications on forwarding performance β
So the simplest way to make the Pipe Model work properly is to remove the restriction that Explicit Null can only occur at the bottom of the stack π
To be continued... π« Part 2 covers Deployment Considerations, Security Considerations, Acknowledgments, the References, the Author's Address and the Full Copyright Statement, so stay tuned bestie!
Intellectual Property π
okay so, the IETF is not picking sides here π«£ It takes no position on whether any Intellectual Property Rights (or other rights) that someone claims over the tech in this document are valid or in scope. It also doesn't say whether a license for those rights is available, or might not be. And it definitely hasn't gone hunting for any such rights itself π If you want the rules on rights for RFC documents, check out BCP 78 and BCP 79. Those are the official homes for that drama πβ¨
If you're implementing this and want to know whether anyone has disclosed IPR, or whether someone has promised a license (or tried to get a general permission for implementers and users), those details live in the IETF's online IPR repository at http://www.ietf.org/ipr π Copies of IPR disclosures sent to the IETF Secretariat are kept there too ποΈ
And if you spot any copyrights, patents, patent applications, or other proprietary rights that might cover tech you'd need to implement this standard? Tell the IETF!! π Send it to ietf-ipr@ietf.org and they'll take it from there π
Acknowledgement π«Ά
Last but not least, a huge thank-you π Funding for the RFC Editor function is currently coming from the Internet Society π Honestly, the people keeping these documents tidy deserve all the flowers πΈ
π¦ where this page comes from
- ietf: rfc4182 2005-09
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms