RFC 4023
Encapsulating MPLS in IP or Generic Routing Encapsulation (GRE)
Encapsulating MPLS in IP or Generic Routing Encapsulation (GRE) π
okay bestie, this is RFC 4023 π and it's a Standards Track doc, so it's an actual official Internet protocol spec, not just vibes. It came out in March 2005 from the Network Working Group. The authors are T. Worster (Motorola, Inc.), Y. Rekhter (Juniper Networks, Inc.), and E. Rosen, Ed. (Cisco Systems, Inc.). The title block doesn't list anything it obsoletes or updates, so it's just doing its own thing π The whole point is wrapping MPLS packets inside IP or GRE so they can travel across networks that don't run MPLS at all π¦
Status of This Memo π
this one specifies an Internet standards track protocol for the Internet community and asks for discussion and suggestions for improvements π«Ά For the current standardization state and status of this protocol, check the current edition of the "Internet Official Protocol Standards" (STD 1). Distribution of this memo is unlimited β¨
Copyright Notice Β©
Copyright (C) The Internet Society (2005). π
Abstract πΈ
okay so MPLS is used in a bunch of ways, and a lot of them use label stacks with multiple entries π₯ Sometimes you can swap out the top label for an IP-based encapsulation, and that means the application can run over networks whose core routers don't have MPLS turned on π This document defines two IP-based encapsulations: MPLS-in-IP and MPLS-in-GRE (Generic Routing Encapsulation). Each one is useful in different situations, so it's giving choice β¨
Table of Contents π
1. Motivation .................................................. 2
2. Specification of Requirements ............................... 3
3. Encapsulation in IP ......................................... 3
4. Encapsulation in GRE ........................................ 4
5. Common Procedures ........................................... 5
5.1. Preventing Fragmentation and Reassembly ............... 5
5.2. TTL or Hop Limit ...................................... 6
5.3. Differentiated Services ............................... 7
6. Applicability ............................................... 7
7. IANA Considerations ......................................... 8
8. Security Considerations ..................................... 8
8.1. Securing the Tunnel with IPsec ......................... 8
8.2. In the Absence of IPsec ............................... 10
9. Acknowledgements ............................................. 11
10. Normative References ........................................ 11
11. Informative References ...................................... 12
Authors' Addresses ............................................... 13
Full Copyright Statement ......................................... 14
1. Motivation π¦
okay so in a lot of MPLS applications, packets crossing an MPLS backbone carry label stacks with more than one label π As described in section 3.15 of [RFC3031], each label stands for a Label Switched Path (LSP). Every LSP has a Label Switching Router (LSR) acting as the "LSP Ingress" and another LSR acting as the "LSP Egress". If LSRs A and B are the ingress and egress of the LSP for a packet's top label, then A and B are adjacent LSRs on the LSP for the packet's second label (the one right underneath the top label) π§
the top label's main job (or one of its jobs) is getting the packet from A to B, so B can then process it based on the second label π In that sense, the top label is basically an encapsulation header for everything else in the packet. In some cases, other kinds of encapsulation headers can take the top label's place without losing any functionality. For example, an IP header or a Generic Routing Encapsulation (GRE) header could replace the top label. The packet is still an MPLS packet, so the result is an MPLS-in-IP or MPLS-in-GRE encapsulation β¨
this is the big payoff π€© With these encapsulations, two LSRs that are adjacent on an LSP can be separated by an IP network, even if that IP network doesn't provide MPLS. Iconic.
to use either encapsulation, the encapsulating LSR needs to know:
- the IP address of the decapsulating LSR, and
- that the decapsulating LSR actually supports the particular encapsulation.
this knowledge can get to the encapsulating LSR through manual configuration or some kind of discovery protocol π· If the tunnel is supporting a specific application and that application has its own setup or discovery protocol, the application's protocol can pass this knowledge along. How that knowledge gets conveyed is outside the scope of this document, so don't look for it here π
2. Specification of Requirements π
in this doc, the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" are to be interpreted as described in [RFC2119]. these are the official BCP 14 vibes, so read them carefully π«Ά
3. Encapsulation in IP π§
okay so MPLS-in-IP messages look like this:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| IP Header |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| MPLS Label Stack |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| Message Body |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
here's what each piece does π
- IP Header: this holds an IPv4 or IPv6 datagram header, as defined in [RFC791] or [RFC2460] respectively. The source and destination addresses are set to the addresses of the encapsulating and decapsulating LSRs, in that order.
- MPLS Label Stack: this holds an MPLS Label Stack as defined in [RFC3032].
- Message Body: this holds one MPLS message body.
the IPv4 Protocol Number field or the IPv6 Next Header field gets set to 137, which tells you it's an MPLS unicast packet π (MPLS-in-IP encapsulation for MPLS multicast packets isn't supported by this specification, sorry bestie π₯Ί)
after the IP header comes an MPLS packet, as specified in [RFC3032]. This encapsulation is how MPLS packets get sent through "IP tunnels" π¦ When the tunnel's receive endpoint gets a packet, it decapsulates the MPLS packet by removing the IP header. Then the packet gets processed like any received MPLS packet, where its "incoming label" [RFC3031] is the topmost label of the decapsulated packet π«§
4. Encapsulation in GRE πΈ
the MPLS-in-GRE encapsulation wraps an MPLS packet in GRE [RFC2784] π The result is an IP header (IPv4 or IPv6), then a GRE header, then an MPLS label stack as specified in [RFC3032]. The protocol type field in the GRE header MUST be set to the Ethertype value for MPLS Unicast (0x8847) or Multicast (0x8848) π
this encapsulation sends MPLS packets through "GRE tunnels" π When the tunnel's receive endpoint gets a packet, it decapsulates the MPLS packet by removing the IP and GRE headers. The packet then gets processed as a received MPLS packet whose "incoming label" [RFC3031] is the topmost label of the decapsulated packet π
okay, the optional GRE fields are where it gets a little spicy πΆοΈ [RFC2784] defines an optional GRE checksum, and [RFC2890] defines optional GRE key and sequence number fields. For MPLS-in-GRE these optional fields aren't very useful. The sequence number and checksum fields aren't needed, since there's no matching field in the native MPLS packets being tunneled. The GRE key field isn't needed for demultiplexing either, because the top MPLS label of the encapsulated packet already does that job. The GRE key field is sometimes treated as a security feature, acting like a 32-bit cleartext password, but that's an extremely weak form of security π
to make high-speed implementations of the encapsulation and decapsulation procedures easier, and to make sure everyone interoperates, we need every implementation to work correctly without these optional fields β¨
more precisely, an MPLS-in-GRE decapsulator MUST be able to process packets correctly without these optional fields. It MAY also be able to process packets correctly with these optional fields π«Ά
an MPLS-in-GRE encapsulator MUST be able to generate packets without these optional fields. It MAY have the capability to generate packets with these fields, but the default state MUST be that packets are generated without these fields. The encapsulator MUST NOT include any of these optional fields unless it is known that the decapsulator can process them correctly π ββοΈ Methods for conveying that knowledge are outside the scope of this specification.
5. Common Procedures π«Ά
a few procedures are shared by both the MPLS-in-IP and the MPLS-in-GRE encapsulations π In what follows, the encapsulator (the one whose address shows up in the IP source address field of the encapsulating IP header) is called the "tunnel head". The decapsulator (the one whose address shows up in the IP destination address field of the decapsulating IP header) is called the "tunnel tail" π§
if IPv6 is being used (for either MPLS-in-IPv6 or MPLS-in-GRE-in-IPv6), the procedures of [RFC2473] are generally applicable π·
5.1. Preventing Fragmentation and Reassembly β¨
okay so picture this bestie: a packet gets chopped into pieces by ordinary IP fragmentation π. Now the tunnel tail has to stitch all those pieces back together before it can even open up the MPLS packet inside. When the tunnel tail is a router, that's honestly kind of a nightmare π, because it might not have the power or the resources to reassemble things at the speed it needs. no thoughts, just vibes π«
So whether tunneled packets are allowed to be fragmented MUST be configurable at the tunnel head π. The default MUST be that packets are NOT fragmented. The default would only change if somebody knew for sure that the tunnel tail could handle reassembly properly π .
THE PROCEDURES SPECIFIED IN THE REMAINDER OF THIS SECTION ONLY APPLY IF PACKETS ARE NOT TO BE FRAGMENTED. π«Ά
Obviously, if the packets aren't supposed to be fragmented, the tunnel head MUST NOT fragment a packet before it gets encapsulated πΈ.
If IPv4 is used, the tunnel MUST set the DF bit π. That stops any intermediate nodes in the tunnel from doing fragmentation. (If IPv6 is used, intermediate nodes don't do fragmentation in any case anyway β¨.)
The tunnel head SHOULD do Path MTU Discovery ([RFC1191] for IPv4, or [RFC1981] for IPv6) π¦.
The tunnel head MUST keep track of a "Tunnel MTU" for each tunnel π. It's the minimum of two things: (a) an administratively configured value, and, if it's known, (b) the discovered Path MTU value minus the encapsulation overhead π§.
If the tunnel head gets an MPLS packet for encapsulation that's bigger than the Tunnel MTU, that packet MUST be discarded π. But honestly, silently dropping packets can cause some serious operational drama π. The sender sees that their data isn't getting through, but they might not realize that the big packets are the ones getting lost. So they keep sending the same packets, which keep getting thrown out π. Path MTU discovery can help here (if the tunnel head sends back ICMP errors), but usually the tunnel head doesn't have enough info to figure out who the original sender is π₯². To cut down on these problems, it's advised that MTUs be engineered to be big enough in practice to avoid fragmentation π.
Sometimes the tunnel head gets an IP packet for encapsulation. It first wraps that packet in MPLS, and then wraps the result in MPLS-in-IP or MPLS-in-GRE π₯. If the source of the IP packet is reachable from the tunnel head, and the MPLS-encapsulated packet would be bigger than the Tunnel MTU, then the value the tunnel head SHOULD use for fragmentation and PMTU discovery outside the tunnel is the Tunnel MTU minus the size of the MPLS encapsulation π. (So the Tunnel MTU minus the size of the MPLS encapsulation is the MTU that gets reported in ICMP messages π.) The packet will have to be discarded anyway, but the tunnel head should still send the IP source of the discarded packet the proper ICMP error message, as specified in [RFC1191] or [RFC1981] π«Ά.
5.2. TTL or Hop Limit π¦
The tunnel head MAY copy the TTL from the MPLS label stack into the TTL field of the encapsulating IPv4 header, or the Hop Limit field of the encapsulating IPv6 header π. The tunnel tail MAY copy the TTL from the encapsulating IPv4 header, or the Hop Limit from the encapsulating IPv6 header, into the TTL field of the MPLS header, but only if that doesn't increase the TTL value in the MPLS header β¨.
Whether any of these changes get made, and exactly how they get made, depends on how the tunnel tail and the tunnel head are configured π§.
5.3. Differentiated Services π
The procedures in this document let an LSP be sent through an IP or GRE tunnel πΈ. [RFC2983] goes into a bunch of considerations and procedures that have to be applied to support the Differentiated Services Architecture properly when there's IP-in-IP tunneling going on π₯. Those same considerations and procedures also apply when there are MPLS-in-IP or MPLS-in-GRE tunnels π.
So when a tunnel head is about to send an MPLS packet into an MPLS-in-IP or MPLS-in-GRE tunnel, the setting of the DS field in the encapsulating IPv4 or IPv6 header MAY be determined (at least partially) by the "Behavior Aggregate" of the MPLS packet π. How to figure out the Behavior Aggregate of an MPLS packet is specified in [RFC3270] π¦.
Similarly, at the tunnel tail, the DS field of the encapsulating IPv4 or IPv6 header MAY be used to determine the Behavior Aggregate of the encapsulated MPLS packet. [RFC3270] specifies how that Behavior Aggregate relates to what happens to the packet afterwards π«Ά.
6. Applicability π
MPLS-in-IP is the more efficient one, so it would generally be seen as the preferable option, everything else being equal π. There are still some situations where MPLS-in-GRE might be used π:
- Two routers are "adjacent" over a GRE tunnel that exists for some reason outside the scope of this document, and those two routers have to send MPLS packets over that adjacency π . Since every packet sent over this adjacency has to have a GRE encapsulation, MPLS-in-GRE is more efficient than the alternative, which would be MPLS-in-IP encapsulated again in GRE β¨.
- Implementation considerations may call for MPLS-in-GRE π₯. For example, some hardware device might only be able to handle GRE encapsulations in its fastpath π§.
7. IANA Considerations π
IANA has allocated IP Protocol Number 137 for MPLS-in-IP encapsulation, as described in section 3 πΈ. No future IANA actions will be required π. MPLS-in-GRE encapsulation doesn't need any IANA action at all π¦.
8. Security Considerations π
Okay bestie, this part is serious π. The main security problem with IP or GRE tunnels is the chance that the tunnel's receive endpoint gets a packet that looks like it came from the tunnel, but the tunnel's transmit endpoint never actually put it in there π¨. (The specified encapsulations don't let the decapsulator authenticate the encapsulator by themselves π.) A second problem is that the packet could get altered between going into the tunnel and coming out the other side π₯². (The specified encapsulations don't by themselves guarantee the decapsulator that the packet's integrity is intact π.) A third problem is that somebody could see the packet's contents while it's travelling through the tunnel π. (The specification encapsulations don't ensure privacy π«£.) How big a deal these issues are in practice depends on the security requirements of the applications whose traffic is going through the tunnel π. For example, a lack of privacy for tunneled packets isn't a significant issue if the applications generating those packets don't need privacy π.
Because different applications have different security requirements, deployment scenarios, and performance considerations, this specification makes IPsec support OPTIONAL π. The basic implementation requirements for IPsec, if you do implement it, are described in section 8.1 π. If IPsec isn't implemented, additional mechanisms may have to be implemented and deployed π οΈ. Those are discussed in section 8.2 β¨.
8.1. Securing the Tunnel with IPsec π
Okay so the good news is that all of these security issues can be avoided if your MPLS-in-IP or MPLS-in-GRE tunnels get secured with IPsec π«Ά The implementation requirements in this section only apply if IPsec is implemented, so no stress if it isn't π
When IPsec is used, the tunnel head and the tunnel tail should be treated as the endpoints of a Security Association π€ For this purpose, a single IP address of the tunnel head will be used as the source IP address, and a single IP address of the tunnel tail will be used as the destination IP address. How each node finds out the proper address of the other is outside the scope of this document, so that's not our drama π If a control protocol sets up the tunnels (like telling one endpoint the other's IP address), that control protocol MUST have an authentication mechanism, and this MUST be used when the tunnel is set up. If the tunnel gets set up automatically because of something like information distributed by BGP, then BGP's MD5-based authentication mechanism is satisfactory π
The MPLS-in-IP or MPLS-in-GRE encapsulated packets should be viewed as originating at the tunnel head and as being destined for the tunnel tail, so IPsec transport mode SHOULD thus be used π
The IP header of the MPLS-in-IP packet becomes the outer IP header of the resulting packet when the tunnel head uses IPsec transport mode to secure the MPLS-in-IP packet. Then comes an IPsec header, and after that the MPLS label stack β¨ The IPsec header has to set the payload type to MPLS by using the IP protocol number specified in section 3. If IPsec transport mode is applied on a MPLS-in-GRE packet, the GRE header follows the IPsec header π
At the tunnel tail, IPsec outbound processing recovers the contained MPLS-in-IP/GRE packet. The tunnel tail then strips off the encapsulating IP/GRE header to recover the MPLS packet, which then gets forwarded according to its label stack π¦
Here's the tea π΅ The tunnel tail and the tunnel head are LSP adjacencies, which means that the topmost label of any packet sent through the tunnel must be one that was distributed by the tunnel tail to the tunnel head. The tunnel tail MUST know precisely which labels it has distributed to the tunnel heads of IPsec-secured tunnels. Labels in this set MUST NOT be distributed by the tunnel tail to any LSP adjacencies other than those that are tunnel heads of IPsec-secured tunnels. If an MPLS packet is received without an IPsec encapsulation, and if its topmost label is in this set, then the packet MUST be discarded π«
An IPsec-secured MPLS-in-IP or MPLS-in-GRE tunnel MUST provide authentication and integrity. (Note that the authentication and integrity will apply to the entire MPLS packet, including the MPLS label stack.) Thus, the implementation MUST support ESP will null encryption. ESP with encryption MAY be supported if a source requires confidentiality. If ESP is used, the tunnel tail MUST check that the source IP address of any packet received on a given SA is the one expected. π₯
Key distribution may be done either manually or automatically by means of IKE [RFC2409]. Manual keying MUST be supported. If automatic keying is implemented, IKE in main mode with preshared keys MUST be supported. A particular application may escalate this requirement and request implementation of automatic keying π
Manual key distribution is much simpler, but also less scalable, than automatic key distribution. So which method of key distribution fits a particular tunnel has to be carefully considered by the administrator (or pair of administrators) responsible for the tunnel endpoints π§ If replay protection is regarded as necessary for a particular tunnel, automatic key distribution should be configured πΈ
If the MPLS-in-IP encapsulation is being used, the selectors associated with the SA would be the source and destination addresses mentioned above, plus the IP protocol number specified in section 3. If it is desired to secure multiple MPLS-in-IP tunnels between a given pair of nodes separately, each tunnel must have unique pair of IP addresses π§
If the MPLS-in-GRE encapsulation is being used, the selectors associated with the SA would be the source and destination addresses mentioned above, and the IP protocol number representing GRE (47). If it is desired to secure multiple MPLS-in-GRE tunnels between a given pair of nodes separately, each tunnel must have unique pair of IP addresses π
8.2. In the Absence of IPsec π ββοΈ
If the tunnels are not secured with IPsec, then some other method should be used to ensure that packets are decapsulated and forwarded by the tunnel tail only if those packets were encapsulated by the tunnel head. If the tunnel lies entirely within a single administrative domain, address filtering at the boundaries can be used to ensure that no packet with the IP source address of a tunnel endpoint or with the IP destination address of a tunnel endpoint can enter the domain from outside π‘οΈ
However, when the tunnel head and the tunnel tail are not in the same administrative domain, this may become difficult. Filtering based on the destination address can even become impossible if the packets must traverse the public Internet π
Sometimes only source address filtering (but not destination address filtering) is done at the boundaries of an administrative domain. If this is the case, the filtering does not provide effective protection at all unless the decapsulator of an MPLS-in-IP or MPLS-in-GRE validates the IP source address of the packet. This document does not require that the decapsulator validate the IP source address of the tunneled packets, but it should be understood that failure to do so presupposes that there is effective destination-based (or a combination of source-based and destination-based) filtering at the boundaries. Main character energy, but make it secure πβ¨
9. Acknowledgements π«Ά
This specification combines prior work on encapsulating MPLS in IP, by Tom Worster, Paul Doolan, Yasuhiro Katsube, Tom K. Johnson, Andrew G. Malis, and Rick Wilder, with prior work on encapsulating MPLS in GRE, by Yakov Rekhter, Daniel Tappan, and Eric Rosen. The current authors wish to thank all these authors for their contribution π
Many people have made valuable comments and corrections, including Rahul Aggarwal, Scott Bradner, Alex Conta, Mark Duffy, Francois Le Feucheur, Allison Mankin, Thomas Narten, Pekka Savola, and Alex Zinin. Iconic squad π
10. Normative References π
- [RFC791] Postel, J., "Internet Protocol", STD 5, RFC 791, September 1981.
- [RFC792] Postel, J., "Internet Control Message Protocol", STD 5, RFC 792, September 1981.
- [RFC1191] Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191, November 1990.
- [RFC1981] McCann, J., Deering, S., and J. Mogul, "Path MTU Discovery for IP version 6", RFC 1981, August 1996.
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
- [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 (IPv6) Specification", RFC 2460, December 1998.
- [RFC2463] Conta, A. and S. Deering, "Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification", RFC 2463, December 1998.
- [RFC2473] Conta, A. and S. Deering, "Generic Packet Tunneling in IPv6 Specification", RFC 2473, December 1998.
- [RFC2784] Farinacci, D., Li, T., Hanks, S., Meyer, D., and P. Traina, "Generic Routing Encapsulation (GRE)", RFC 2784, March 2000.
- [RFC3031] Rosen, E., Viswanathan, A., and R. Callon, "Multiprotocol Label Switching Architecture", RFC 3031, January 2001.
- [RFC3032] Rosen, E., Tappan, D., Fedorkow, G., Rekhter, Y., Farinacci, D., Li, T., and A. Conta, "MPLS Label Stack Encoding", RFC 3032, January 2001.
11. Informative References π§Ύ
- [RFC2401] Kent, S. and R. Atkinson, "Security Architecture for the Internet Protocol", RFC 2401, November 1998.
- [RFC2402] Kent, S. and R. Atkinson, "IP Authentication Header", RFC 2402, November 1998.
- [RFC2406] Kent, S. and R. Atkinson, "IP Encapsulating Security Payload (ESP)", RFC 2406, November 1998.
- [RFC2409] Harkins, D. and D. Carrel, "The Internet Key Exchange (IKE)", RFC 2409, November 1998.
- [RFC2475] Blake, S., Black, D., Carlson, M., Davies, E., Wang, Z., and W. Weiss, "An Architecture for Differentiated Service", RFC 2475, December 1998.
- [RFC2890] Dommety, G., "Key and Sequence Number Extensions to GRE", RFC 2890, September 2000.
- [RFC2983] Black, D., "Differentiated Services and Tunnels", RFC 2983, October 2000.
- [RFC3260] Grossman, D., "New Terminology and Clarifications for Diffserv", RFC 3260, April 2002.
- [RFC3270] Le Faucheur, F., Wu, L., Davie, B., Davari, S., Vaananen, P., Krishnan, R., Cheval, P., and J. Heinanen, "Multi-Protocol Label Switching (MPLS) Support of Differentiated Services", RFC 3270, May 2002.
Authors' Addresses π‘
Tom Worster Motorola, Inc. 120 Turnpike Road Southborough, MA 01772
EMail: tom.worster@motorola.com
Yakov Rekhter Juniper Networks, Inc. 1194 N. Mathilda Ave. Sunnyvale, CA 94089
EMail: yakov@juniper.net
Eric Rosen Cisco Systems, Inc. 1414 Massachusetts Avenue Boxborough, MA 01719
EMail: erosen@cisco.com
Full Copyright Statement Β©
Copyright (C) The Internet Society (2005).
This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights.
This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Intellectual Property π
The IETF takes no position on the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document, or on whether any license under such rights might or might not be available. It also doesn't claim to have made any independent effort to identify any such rights. Info about how rights work for RFC documents is in BCP 78 and BCP 79 π
Copies of IPR disclosures made to the IETF Secretariat, any assurances of licenses to be made available, or the result of an attempt to get a general license or permission for implementers or users to use these proprietary rights can be found in the IETF online IPR repository at http://www.ietf.org/ipr. π
The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology needed to implement this standard. Send that info to the IETF at ietf-ipr@ietf.org π
Acknowledgement π
Funding for the RFC Editor function is currently provided by the Internet Society. And that's a wrap, bestie ππ¦
π¦ where this page comes from
- ietf: rfc4023 2005-03
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms