RFC 4667

Layer 2 Virtual Private Network (L2VPN) Extensions for Layer 2 Tunneling Protocol (L2TP)

πŸ“… published September 2006, from ietf

RFC 4667: Layer 2 Virtual Private Network (L2VPN) Extensions for Layer 2 Tunneling Protocol (L2TP) πŸŽ€

Okay bestie, the title block is giving: this is a Standards Track doc from September 2006, written by W. Luo at Cisco Systems, Inc. πŸ’… The header I was given doesn't list any "Obsoletes" or "Updates" lines, so I'm not making any up. πŸ™ˆ

Status of This Memo 🌸

This document specifies an Internet standards track protocol for the Internet community, and requests discussion and suggestions for improvements. For the 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 (C) The Internet Society (2006). ✨

Abstract πŸ¦‹

L2TP (the Layer 2 Tunneling Protocol) gives you a standard way to set up and manage L2TP sessions that tunnel a bunch of different L2 protocols. One of the reference models it supports is basically two Layer 2 circuits plugged into a pair of peering L2TP Access Concentrators (LACs), and that's the simplest form of Layer 2 Virtual Private Network (L2VPN). πŸ”₯ This document is where the protocol extensions live that let L2TP set up different types of L2VPNs in one unified way. πŸ‘‘

Table of Contents 🧚

   1. Introduction ....................................................2
      1.1. Specification of Requirements ..............................2
   2. Network Reference Model .........................................2
   3. Forwarder Identifier ............................................3
   4. Protocol Components .............................................4
      4.1. Control Messages ...........................................4
      4.2. Existing AVPs for L2VPN ....................................4
      4.3. New AVPs for L2VPN .........................................5
      4.4. AVP Interoperability .......................................7
   5. Signaling Procedures ............................................7
      5.1. Overview ...................................................7
      5.2. Pseudowire Tie Detection ...................................8
      5.3. Generic Algorithm ..........................................9
   6. IANA Considerations ............................................12
   7. Security Considerations ........................................12
   8. Acknowledgement ................................................13
   9. References .....................................................13
      9.1. Normative References ......................................13
      9.2. Informative References ....................................13

1. Introduction ✨

[RFC3931] defines a dynamic tunneling mechanism that can carry multiple Layer 2 protocols over a packet-based network, not just Point-to-Point Protocol (PPP). PPP was the only protocol supported in [RFC2661], so this is a big glow-up. πŸ’– The baseline protocol supports lots of different applications, and those are highlighted in the different L2TP reference models in [RFC3931]. An L2TP Access Concentrator (LAC) is an L2TP Control Connection Endpoint (LCCE) that cross-connects attachment circuits and L2TP sessions. L2VPN applications are typically in the scope of the LAC-LAC reference model. 🧠

This document talks about what L2VPN applications have in common and where they differ when they use L2TPv3 as the signaling protocol. In this document, the acronym "L2TP" refers to L2TPv3 or to L2TP in general. 🫢

1.1. Specification of Requirements πŸ“

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. Network Reference Model πŸ—ΊοΈ

In the LAC-LAC reference model, a LAC acts as a cross-connect between attachment circuits and L2TP sessions. Each L2TP session works like an emulated circuit, also known as a pseudowire. A pseudowire is used to bind two "forwarders" together. Different L2VPN applications define different types of forwarders. 🌈

In the L2VPN framework [L2VPNFW], a LAC is a Provider Edge (PE) device. In the context of this document, LAC and PE are interchangeable terms. Remote systems in the LAC-LAC reference model are Customer Edge (CE) devices. πŸ‘‘

   +----+  L2  +----+                      +----+  L2  +----+
   | CE |------| PE |....[core network]....| PE |------| CE |
   +----+      +----+                      +----+      +----+

                    |<- emulated service ->|
         |<----------------- L2 service -------------->|

                  L2VPN Network Reference Model

In a simple cross-connect application, an attachment circuit is a forwarder that's directly bound to a pseudowire. It's a one-to-one mapping. Traffic received from the attachment circuit on a local PE gets forwarded to the remote PE through the pseudowire. When the remote PE receives traffic from the pseudowire, it forwards that traffic to the matching attachment circuit on its end. The forwarding decision is based on the attachment circuit or pseudowire demultiplexing identifier. πŸ¦‹

With Virtual Private LAN Service (VPLS), a Virtual Switching Instance (VSI) is a forwarder connected to one or more attachment circuits and pseudowires. A single pseudowire connects a pair of VSIs on two peering PEs. Traffic received from an attachment circuit or a pseudowire is first forwarded to the corresponding VSI, based on the attachment circuit or pseudowire demultiplexing identifier. After that, the VSI does an additional lookup to figure out where to forward the traffic next. 🧩

With Virtual Private Wire Service (VPWS), attachment circuits are grouped into "colored pools". Each pool is a forwarder and is connected through a network of point-to-point cross-connects. The data forwarding perspective is identical to the cross-connect application. However, building colored pools involves more complicated signaling procedures. 😭

3. Forwarder Identifier πŸͺͺ

A forwarder identifier is assigned to each forwarder on a given PE and is unique in the context of that PE. It's defined as the concatenation of an Attachment Group Identifier (AGI) and an Attachment Individual Identifier (AII), written as <AGI, AII>. The AGI groups a set of forwarders together for signaling purposes. An AII distinguishes forwarders within a group. AII can be unique on a per-platform or per-group basis. ✨

As far as the signaling procedures are concerned, a forwarder identifier is an arbitrary string of bytes. It's up to implementations to decide the values for AGI and AII. πŸ“

When connecting two forwarders together, both MUST have the same AGI as part of their forwarder identifiers. The AII of the source forwarder is known as the Source AII (SAII), and the AII of the target forwarder is known as the Target AII (TAII). So the source forwarder and target forwarder can be written as <AGI, SAII> and <AGI, TAII>, respectively. πŸŽ€

4. Protocol Components 🧁

4.1. Control Messages πŸ“¨

L2TP defines two sets of session management procedures: incoming call and outgoing call. It's totally possible to use the outgoing call procedures for signaling L2VPNs, but the incoming call procedures have some advantages when it comes to the relevance of the semantics. [PWE3L2TP] gives more details on why the incoming call procedures are more appropriate for setting up pseudowires. πŸ€“

The signaling procedures for L2VPNs described in the following sections are based on the Control Connection Management and the Incoming Call procedures, which are defined in Sections 3.3 and 3.4.1 of [RFC3931], respectively. L2TP control message types are defined in Section 3.1 of [RFC3931]. This document references the following L2TP control messages: πŸ“‹

     Start-Control-Connection-Request (SCCRQ)
     Start-Control-Connection-Reply   (SCCRP)
     Incoming-Call-Request            (ICRQ)
     Incoming-Call-Reply              (ICRP)
     Incoming-Call-Connected          (ICCN)
     Set-Link-Info                    (SLI)

4.2. Existing AVPs for L2VPN πŸ”

The following Attribute Value Pairs (AVPs), defined in Sections 5.4.3, 5.4.4, and 5.4.5 of [RFC3931], are used for signaling L2VPNs. πŸ’–

Router ID πŸ†”

The Router ID sent in SCCRQ and SCCRP during control connection setup establishes the unique identity of each PE. πŸ‘‘

Pseudowire Capabilities List 🌟

The Pseudowire Capabilities List is sent in the SCCRQ and SCCRP, and it indicates the pseudowire types the sending PE supports. It's only an advertisement to the receiving PE. Its content should not affect the control connection setup. πŸ™Œ

Before a local PE starts a session of a particular pseudowire type to a remote PE, it MUST check whether the remote PE advertised that pseudowire type in this AVP. If the intended pseudowire type isn't supported by the remote PE, the local PE SHOULD NOT try to initiate the session. 🚫

Pseudowire Type 🎯

The Pseudowire Type is sent in ICRQ to signal the intended pseudowire type to the receiving PE. The receiving PE checks it against its local pseudowire capabilities list. If it finds a match, it responds with an ICRP without a Pseudowire Type AVP, which implicitly acknowledges that it accepts the intended pseudowire. If it doesn't find a match, it MUST respond with a Call-Disconnect-Notify (CDN) with an "unsupported pseudowire type" result code. πŸ’€

L2-Specific Sublayer 🧬

The L2-Specific Sublayer can be sent in ICRQ, ICRP, and ICCN. If the receiving PE supports the specified L2-Specific Sublayer, it MUST include the identified L2-Specific Sublayer in its data packets sent to the sending PE. Otherwise, it MUST reject the connection by sending a CDN to the sending PE. πŸ™…β€β™€οΈ

Circuit Status πŸ”Œ

The Circuit Status is sent in both ICRQ and ICRP to inform the receiving PE about the circuit status on the sending PE. It can also be sent in ICCN and SLI to update that status. ⚑

Remote End Identifier πŸ”—

The TAII value is encoded in the Remote End ID AVP and sent in ICRQ, along with the optional AGI. This tells the receiving PE to bind the proposed pseudowire to the forwarder that matches the specified forwarder identifier. πŸ¦‹

4.3. New AVPs for L2VPN ✨

okay bestie, this is where we get to make brand new AVPs!! πŸ’– These are the fresh attribute-value pairs for L2VPN, and each one has its own little personality. 🧚

Attachment Group Identifier

okay so the AGI AVP is Attribute Type 89 πŸ¦‹ and its whole job is to tie a forwarder to a logical group. πŸ’… It works together with the Local End ID AVP and the Remote End ID AVP (those carry the SAII and TAII) so you can pin down one specific forwarder. πŸŽ€ If the AGI AVP is left out of the control messages, or it shows up with a zero-length value, the forwarders just fall back to the default AGI. ✨ And ngl, there's only one default AGI value shared by every forwarder, so no sneaky alternate defaults. πŸ‘‘

The Attribute Value field looks like this:

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|M|H|0|0|0|0|    Length         |              0                |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               89              |      AGI (variable length)    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The AGI field is variable-length 🌈 and this AVP MAY be present in ICRQ. This AVP MAY be hidden (the H bit MAY be 0 or 1), and the whole hiding thing is defined in Section 5.3 of [RFC3931]. πŸ” The M bit for this AVP SHOULD be set to 0. The Length (before hiding) is 6 octets plus the length of the AGI field. πŸ“

Local End ID

The Local End ID AVP is Attribute Type 90 🌸 and it encodes the SAII value. Bonus: the SAII can also team up with the TAII to detect pseudowire ties. 🫢 When it's omitted from the control messages, it's assumed to have the same value as the TAII. πŸ’œ

The Attribute Value field:

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|M|H|0|0|0|0|    Length         |              0                |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               90              |       SAII (variable length)  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The SAII field is variable-length too. This AVP MAY be present in ICRQ, and it MAY be hidden (the H bit MAY be 0 or 1). The M bit for this AVP SHOULD be set to 0. The Length (before hiding) is 6 octets plus the length of the SAII field. πŸŽ€

Interface Maximum Transmission Unit

The Interface Maximum Transmission Unit (MTU) AVP is Attribute Type 91 πŸ¦‹ and it tells you the MTU in octets of a packet that can go out of the CE-facing interface. πŸ’… Here's the tea: if a pseudowire's MTU values are advertised in both directions, they MUST be identical. ⚠️ If they don't match, the pseudowire SHOULD NOT be established. πŸ™ˆ When this AVP is left out of the control messages in either direction, it's assumed that the remote PE has the same interface MTU as the local PE for the pseudowire being signaled. ✨

Heads up: mismatched MTUs are a big deal, so the pseudowire SHOULD NOT be established if they don't line up. πŸ’€

The Attribute Value field:

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|M|H|0|0|0|0|    Length         |              0                |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               91              |          Interface MTU        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The Interface MTU field is a 2-octet integer value. This AVP MAY be present in ICRQ and ICRP. When a PE gets an Interface MTU AVP with an MTU value different from its own, it MAY respond with a CDN carrying a new result code that says what the disconnect cause is. 🌈 That result code is:

23 - Mismatching interface MTU

This AVP MAY be hidden (the H bit MAY be 0 or 1). The M bit for this AVP SHOULD be set to 0. The Length (before hiding) of this AVP is 8 octets. πŸ“


4.4. AVP Interoperability 🫢

okay so interoperability is everything, bestie. πŸ’– To keep things working together, the mandatory (M) bit settings of the existing AVPs used in L2VPN applications should be the same as the ones specified in [RFC3931]. The generic M-bit processing is described in Section 5.2 of [RFC3931]. πŸ¦‹ And the big warning: setting the M-bit of the new AVPs to 1 will impair interoperability. 😭


5. Signaling Procedures πŸ”₯

5.1. Overview 🧚

Picture this: a PE has assigned a forwarder identifier to one of its local forwarders, and it knows it needs to set up a pseudowire to a remote forwarder on a remote PE that has a certain Forwarder ID. πŸ’… That knowledge can come from manual configuration or from some auto-discovery procedure. ✨

Before the intended pseudowire gets set up, each pair of peering PEs swaps control connection messages to establish a control connection. πŸŽ€ Each one advertises its supported pseudowire types, as defined in [PWE3IANA], in the Pseudowire Capabilities List AVP. 🌸

Once the control connection is up, the local PE checks whether the remote PE supports the pseudowire type it wants. Only if the remote PE supports that type should it start a pseudowire connection request. πŸ™ˆ

When the local PE gets an ICRQ for a pseudowire connection, it looks at the forwarder identifiers encoded in the AGI, SAII, and TAII to figure out two things:

  • Whether it has a local forwarder with the forwarder identifier value specified in the ICRQ.
  • Whether the remote forwarder with the forwarder identifier specified in the ICRQ is allowed to connect with this local forwarder.

If both conditions are met, it sends an ICRP to the remote PE to accept the connection request. πŸŽ‰ If either condition fails, it sends a CDN to the remote PE to reject the request. πŸ₯²

The local PE can optionally include a result code in the CDN to indicate the disconnect cause. The possible result codes are:

24 - Attempt to connect to non-existent forwarder
25 - Attempt to connect to unauthorized forwarder

5.2. Pseudowire Tie Detection πŸ‘―β€β™€οΈ

Okay, this one is so relatable. πŸ₯Ή In the network reference models, either PE can start a pseudowire to the other one at any time, so the two PEs could end up initiating a pseudowire to each other at the same moment. 😱 To avoid setting up duplicated pseudowires between two forwarders, each PE must be able to detect such a pseudowire tie on its own. Here's how the tie detection goes:

If both TAII and SAII are present in the ICRQ, the receiving PE compares the TAII and SAII against the SAII and TAII it previously sent to the sending PE. If the received TAII matches the sent SAII and the received SAII matches the sent TAII, a tie is detected. ✨

If only the TAII is present in the ICRQ, the SAII is assumed to have the same value as the TAII. The receiving PE compares the received TAII with the SAII it previously sent to the sending PE. If the SAII in that ICRQ is also omitted, then the value encoded in the sent TAII is used for comparison. If they match, a tie is detected. πŸ¦‹

If the AGI is present, it gets prepended to the TAII and SAII values before the tie detection happens. 🌈

Once a tie is discovered, the PE uses the standard L2TP tie breaking procedure, as described in Section 5.4.4 of [RFC3931], to disconnect the duplicated pseudowire. πŸ‘‘ tie breaking, solved!! πŸ’…

5.3. Generic Algorithm 🌸

okay so this bit is where the whole thing comes together 🧩 It's a generic algorithm that shows how the protocol messages actually flow when you build an L2VPN with L2TP signaling. Let's go bestie!! πŸ’–

Each PE first makes a list called SOURCE_FORWARDERS with every local forwarder for a given VPN πŸŽ€ Then it puts all the local forwarders that need to be interconnected, plus all the remote forwarders in the same VPN, into another list called TARGET_FORWARDERS πŸ¦‹ How those two lists get built depends on the stuff inside them, and they can be filled in by manual configuration or by some auto-discovery procedure ✨

The algorithm sets up a full mesh of interconnections between SOURCE_FORWARDERS and TARGET_FORWARDERS πŸ’… An L2VPN exists once the algorithm has finished on every participating PE of that L2VPN, so it's a team effort 🫢

  1. Grab the next forwarder from SOURCE_FORWARDERS. If there's no forwarder left to process, the processing is complete 🏁
  2. Grab the next forwarder from TARGET_FORWARDERS. If there's no forwarder left to process, go back to step 1 πŸ”
  3. If the two forwarders are tied to different Router IDs, a pseudowire has to be set up between them. Jump ahead to step 6 🌈
  4. Compare the <AGI, AII> values of the two forwarders. If they match, the source and target forwarders are the same, so there's nothing else to do. Go back to step 2 πŸ’œ
  5. Both the source and target forwarders live on the local PE, so no pseudowire is needed. The PE just makes a local cross-connect between the two forwarders. Go back to step 2 πŸ“
  6. The source and target forwarders are on different PEs, so a pseudowire must be established between them. The PE first checks whether the source forwarder has already set up a pseudowire to the target forwarder. If it has, go back to step 2 ✨
  7. If there's no pseudowire between the source and target forwarders yet, the local PE finds the address of the remote PE and sets up a control connection to it, as long as one doesn't already exist πŸ”§
  8. The local PE sends an ICRQ to the remote PE. The AGI, TAII, and SAII values get packed into the AGI AVP, the Remote End ID AVP, and the Local End ID AVP, respectively πŸ“¦
  9. If the local PE gets a response that matches the ICRQ it just sent, move on to step 10. Otherwise, if the local PE gets an ICRQ from that same remote PE, move on to step 11 πŸ‘€
  10. The local PE gets a response from the remote PE. If it's a CDN, go back to step 2. If it's an ICRP, the local PE binds the source forwarder to the pseudowire and sends an ICCN to the remote PE. Then go back to step 2 πŸŽ‰
  11. If the local PE gets an ICRQ from that same remote PE, it has to do session tie detection, as described in Section 5.2. If a session tie is detected, the PE does tie breaking πŸ™ˆ
  12. If the local PE loses the tie breaker, it sends a CDN with the result code that says the disconnection happened because it lost the tie breaker. Jump ahead to step 14 πŸ’€
  13. If the local PE wins the tie breaker, it ignores the remote PE's ICRQ, but it still acknowledges receipt of the control message and keeps waiting for the response from the remote PE. Go to step 10 πŸ†
  14. The local PE decides whether it should accept the connection request, as described in Section 5.1. If it accepts the ICRQ, it sends an ICRP to the remote PE 🫧
  15. The local PE gets a response from the remote PE. If it's a CDN, go back to step 2. If it's an ICCN, the local PE binds the source forwarder to the pseudowire, then goes back to step 2 πŸ¦„

Here's a diagram of the whole procedure above, because pictures are everything πŸ“Š

       --------->     Pick Next
       |           Source Forwarder
       |                 |
       |                 |
       |                 v                  N
       |        Found Source Forwarder? ----------> End
       |                 |
       |              Y  |
       |                 v
       |              Pick Next     <--------------------------------
       |           Target Forwarder                                 |
       |                 |                                          |
       |                 |                                          |
       |  N              v                                          |
       -------- Found Target Forwarder?                             |
                         |                                          |
                      Y  |                                          |
                         v             Y                        Y   |
                   Same Router ID? ------> Same Forwarder ID? ------|
                         |                         |                |
                      N  |                      N  |                |
                         |                         v                |
                         |                      Create Local -------|
                         v                      Cross-connect       |
                 Pseudowire Already    Y                            |
                 Established Between -------------------------------|
                 Source and Target?                                 |
                         |                                          |
                      N  |                                          |
                         v                                          |
              Local Initiates Pseudowire                            |
            Connection Request to Remote                            |
                         |                                          |
                         |                                          |
                         v                                          |
   ------->    Local Wait for Message                               |
   |           ----- from Remote   --------------                   |
   |           |                                |                   |
   |           |                                |                   |
   |           v                                v                   |
   |   Local Receives Pseudowire      Local Receives Pseudowire     |
   |     Connection Request             Connection Response         |
   |       from Remote                     from Remote              |
   |           |                                |                   |
   |           |                                |                   |
   |           v                                v             N     |
   |   Perform Pseudowire              Connection Accepted? --------|
   |   Tie Detection                            |                   |
   |           |                             Y  |                   |
   |           |                                v                   |
   |           |                        Local Binds Source ---------|
   |           |                      Forwarder to Pseudowire       |
   |           |                                                    |
   |           v             N                  N                   |
   |       Tie Detected?  -----> Accept Remote ----->  Reject ------|
   |           |             Connection Request?    Remote Request  |
   |        Y  |                        ^   |                       |
   |           v                        |   |   Y                   |
   |   Perform Tie Breaking             |   ------>  Local Binds ----
   |           |                        |         Source Forwarder
   |           |                        |           to Pseudowire
   |           v             N          |
   |   Won Tie Breaking?  ------>   Disconnect
   |           |                  Local Connection
   |        Y  |
   |           v
   ------ Ignore Remote
          Connection Request

6. IANA Considerations πŸŽ€

The IANA registry procedure in this document follows the one in Section 10 of [RFC3931] πŸ“‹ IANA has also assigned new values for registries it already manages, and here they are πŸ’–

This document defines three new L2TP control message Attribute Value Pairs (AVPs) that IANA has assigned 🧁 They're described in Section 4.3, and here's the quick summary:

89 - Attachment Group Identifier
90 - Local End Identifier
91 - Interface Maximum Transmission Unit

Sections 4.3 and 5.1 define three new result codes for the CDN message that IANA has assigned as well 🌈

23 - Mismatching interface MTU
24 - Attempt to connect to non-existent forwarder
25 - Attempt to connect to unauthorized forwarder

7. Security Considerations πŸ”

This specification doesn't add any security considerations beyond the ones already covered in [RFC3931] and [L2VPNFW] 🚨 Those two documents are the ones to check if you're worried about security, so read them carefully, bestie πŸ’œ

8. Acknowledgement ✨

The author wants to thank Mark Townsley and Carlos Pignataro for their valuable input 🫢 Love a shout-out to the people who helped!! 🌸

9. References πŸ“š

9.1. Normative References

  • [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
  • [RFC3931] Lau, J., Townsley, M., and I. Goyret, "Layer Two Tunneling Protocol - Version 3 (L2TPv3)", RFC 3931, March 2005.

9.2. Informative References

  • [PWE3IANA] Martini, L., "IANA Allocations for Pseudowire Edge to Edge Emulation (PWE3)", BCP 116, RFC 4446, April 2006.
  • [L2VPNFW] Andersson L., Ed. and E. Rosen, Ed., "Framework for Layer 2 Virtual Private Networks (L2VPNs)", RFC 4664, September 2006.
  • [PWE3L2TP] W. Townsley, "Pseudowires and L2TPv3", Work in Progress.
  • [RFC2661] Townsley, W., Valencia, A., Rubens, A., Pall, G., Zorn, G., and B. Palter, "Layer Two Tunneling Protocol "L2TP"", RFC 2661, August 1999.

Author's Address πŸ’Œ

  • Wei Luo
  • Cisco Systems, Inc.
  • 170 West Tasman Drive
  • San Jose, CA 95134
  • EMail: luo@cisco.com

Copyright (C) The Internet Society (2006).

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

okay so the IETF is being super clear here: it takes no position on whether any IPR or other rights that someone might claim over the tech in this doc are valid, how far they reach, or whether any license for them is even available πŸ™…β€β™€οΈ it also hasn't gone hunting for those rights itself. if you want the rules for rights in RFC docs, check out BCP 78 and BCP 79 πŸ“š

the IPR disclosures sent to the IETF Secretariat, any license assurances, and the results of any attempt to get a general license or permission for implementers or users to use proprietary rights can all be found in the IETF online IPR repository at http://www.ietf.org/ipr πŸ”

and the IETF invites anyone who's interested to flag any copyrights, patents, patent applications, or other proprietary rights that might cover tech needed to implement this standard 🫢 just send it to the IETF at ietf-ipr@ietf.org πŸ’Œ

Acknowledgement

the RFC Editor function gets its funding from the IETF Administrative Support Activity (IASA) πŸ’– the people keeping the lights on, iconic behind-the-scenes energy ✨

πŸ“¦ where this page comes from