RFC 4938

PPP Over Ethernet (PPPoE) Extensions for Credit Flow and Link Metrics

๐Ÿ“… published June 2007, from ietf

okay bestie, this one is all about giving PPPoE some credit (literally ๐Ÿ’…๐ŸŽ€). Here's the header info up top:

  • Network Working Group
  • Authors: B. Berry and H. Holgate, both at Cisco Systems, Inc. ๐ŸŒธ
  • Category: Informational (so it's not a standard, just useful info ๐Ÿงš)
  • Date: June 2007
  • Obsoletes / Updates: the title block doesn't list anything here ๐Ÿ™ˆ

Status of This Memo

okay so this memo is just giving info to the Internet community ๐Ÿ“š. It is NOT a standard of any kind. Distribution is unlimited, so share it with anyone who wants it ๐Ÿ’œ.

Copyright (C) The IETF Trust (2007). ๐Ÿ”’

IESG Note

ngl this note is kind of a little warning from the PPP Extensions Working Group (PPPEXT) ๐Ÿ™ˆ. They have reservations about whether this feature is actually worth wanting. Their main thing is that it solves a general problem at an inappropriate layer, and it might have unpredictable interactions with higher and lower level protocols ๐Ÿ’€.

The techniques here are meant for one specific deployment, where a PPP termination is separated from a radio termination by an Ethernet, and there's radio-side flow control for a slower PPP-only link to remote nodes ๐Ÿ“ก. Implementers are better advised to avoid split termination with inter-media protocol translation, and to use standard Internet Protocol routing instead ๐Ÿซถ.

bestie, the IESG is basically saying "maybe just use regular IP routing, it's cleaner" โš ๏ธ

Abstract

okay this is the TL;DR โœจ. This document extends the Point-to-Point over Ethernet (PPPoE) Protocol with a credit-based flow control mechanism and a Link Quality Metric report ๐Ÿ”ฅ. This extension is optional, and it should improve PPPoE performance over media with variable bandwidth and limited buffering, like mobile radio links ๐Ÿ“ฑ.

Table of Contents

   1. Introduction ....................................................2
   2. Payload .........................................................3
   3. Overview of Protocol Extensions .................................3
   4. Discovery Stage .................................................3
      4.1. PPPoE Active Discovery Request (PADR) ......................4
      4.2. PPPoE Active Discovery Session-confirmation (PADS) .........4
      4.3. PPPoE Active Discovery Session-Grant (PADG) ................5
      4.4. PPPoE Active Discovery Session-Credit Response (PADC) ......5
      4.5. PPPoE Active Discovery Quality (PADQ) ......................6
   5. PPP Session Stage ...............................................7
   6. Credit Flow Considerations ......................................7
   7. PADG and PADC Retransmission ....................................8
   8. Other Considerations ............................................9
   9. IANA Considerations .............................................9
   10. Security Considerations ........................................9
   Appendix A: Tag Values.............................................10
   Appendix B: Example Message Formats................................11
   Acknowledgements...................................................15
   Normative References...............................................15

1. Introduction โœจ

okay so PPP over Ethernet (PPPoE) [2] is the protocol for setting up and wrapping sessions between hosts and traffic aggregators (Access Concentrators) ๐Ÿงš. It carries PPP [1] over real or emulated Ethernet. PPPoE works great when both session endpoints have similar bandwidth, forwarding, and buffering that don't change over time ๐Ÿ’…. But it's not enough for stuff with variable bandwidth and limited buffering, like mobile radio links ๐Ÿ“ฑ. This document fixes that by suggesting an extension to PPPoE that adds credit-based session flow control and session-based link metric exchanges ๐Ÿ’–.

Here's the problem this extension is meant to solve, for the radio link case ๐Ÿ‘€. PPPoE sessions run between access concentrators (routers) and radio transmission systems, which show up as radio neighbors. Each radio transmission system sets up point-to-point Radio Link Protocol (RLP) sessions with its neighbors, and sets up a matching PPPoE session for each neighbor with its associated access concentrator (router) ๐Ÿฆ‹. The radio logically links the PPPoE session to the matching RLP session ๐Ÿซถ.

   +--------+       +-------+       +-------+       +--------+
   | Access |       | Host  |       | Host  |       | Access |
   | Conc.  |=======| Radio |~~~~~~~| Radio |=======| Conc.  |
   +--------+       +-------+       +-------+       +--------+
            |       |       |       |       |       |
            |-PPPoE-|       |--RLP--|       |-PPPoE-|
            |                                       |
            |-------------PPP Session---------------|

                     Figure 1. PPPoE Network

The RF links between RLP neighbors can change over time because of mobility and the environment ๐ŸŒˆ. A lot of the time the Host Radio doesn't have much buffering to handle those capacity changes in the RLP sessions ๐Ÿ˜ญ. So to limit buffering in the Host Radio, the PPPoE credit flow control mechanism gives dynamic buffering feedback to the access concentrator ๐Ÿง .

In the diagram, from the access concentrator's point of view, each PPPoE session between it and the Host Radio is a connection to a remote routable peer ๐ŸŒธ. For efficient routing, the local Host Radio uses the link metric mechanism to dynamically update the access concentrator route cost of the associated link ๐Ÿ’œ.

The example is RF-based, but the extensions work for other media too ๐ŸŽ€.

2. Payload โœจ

The Ethernet payload version field keeps its value of 0x01 ๐Ÿ“. The extensions for credit flow control and link quality metrics are optional and backward compatible ๐Ÿซถ.

3. Overview of Protocol Extensions ๐Ÿฆ‹

PPPoE has two distinct stages: a Discovery Stage and a PPP Session Stage ๐Ÿ’…. During the Discovery Stage, the Host can optionally ask for a flow controlled PPP Session Stage ๐Ÿ™‹โ€โ™€๏ธ. Once the Access Concentrator acknowledges the Host's flow control request, all PPP Session Stage traffic must be flow controlled ๐Ÿ”’.

4. Discovery Stage ๐Ÿงš

The packet exchange of the Discovery Stage is unchanged by this specification ๐Ÿ™Œ. The Session Request (PADR) and Session Confirmation (PADS) packets get extended to include the optional Credit Tag Type-Length-Value (TLV) โœจ.

The optional Credit Grant (PADG), Credit Response (PADC), and Link Quality Metric (PADQ) packets are brand new too ๐Ÿ”ฅ.

4.1. PPPoE Active Discovery Request (PADR) ๐Ÿ’Œ

The PADR packet can optionally contain a single Credit Tag TLV, which tells the access concentrator that the Host wants credit flow control for this session ๐Ÿ’–. The Credit Tag holds the Forward Credit Notification (FCN) and the Backward Credit Notification (BCN) that get applied to the PPP Session Stage ๐ŸŽ€. The FCN is the initial credits the Host grants to the Access Concentrator ๐Ÿช™. The BCN value is set to 0 ๐Ÿซง.

There's an example packet in Appendix B ๐Ÿ“–.

4.2. PPPoE Active Discovery Session-confirmation (PADS) ๐Ÿซถ

The PADS packet can optionally contain a single Credit Tag TLV, showing the Forward Credit Notification (FCN) and the Backward Credit Notification (BCN) of the PPP Session Stage ๐Ÿ’ซ.

If the PADR had a Credit Tag, then the Access Concentrator's PADS shows it supports credit flow control by including a Credit Tag too ๐Ÿ™Œ. The PADS Credit Tag FCN is the number of credits initially granted to the Host ๐Ÿ“. The Credit Tag BCN echoes the number of credits the Host had granted to the Access Concentrator in the previous PADR packet ๐Ÿ”.

Trading the Credit Tag TLV in the PADR and PADS means credit flow control is supported by both the Access Concentrator and the Host for that PPP Session Stage ๐Ÿค. This is binding, and it must be followed for the entire duration of the PPP Session Stage ๐Ÿ”’. A session's credit binding must be set up before any other credit indications can be exchanged โš ๏ธ.

bestie, the credit binding has to be locked in FIRST, before anything else credit-related happens ๐Ÿ’€

The Access Concentrator's PADS should only carry the Credit Tag in response to a Host PADR with credits ๐ŸŽŸ๏ธ. If the Access Concentrator doesn't support credit flow, it should not include the Credit Tag in its PADS response ๐Ÿ™…โ€โ™€๏ธ. The Host must terminate a credit-based session that the Access Concentrator can't support ๐Ÿ›‘. Credit Tags sent outside an established credit based session must be ignored ๐Ÿ‘ป.

There's an example packet in Appendix B ๐Ÿ“–.

4.3. PPPoE Active Discovery Session-Grant (PADG) ๐ŸŽ

The PPPoE Active Discovery Session-Grant (PADG) is a new packet defined in this specification ๐Ÿ†•. An Access Concentrator or Host MAY send a PADG at any time after the PADR/PADS exchange to grant incremental flow control credits ๐ŸŒŸ. The CODE field is set to 0x0A, and the SESSION_ID must be set to the unique value generated for this PPPoE Session ๐Ÿ”‘.

The peer can then transmit data until the credits run out ๐Ÿƒโ€โ™€๏ธ.

When the peer gets a PADG packet, it adds the incremental credits to its working credit count, then responds with a PPPoE Active Discovery Session-Credit (PADC) packet showing the accumulated credits ๐Ÿ’….

The PADG packet must contain a single Credit Tag TLV, showing the Forward Credit Notification (FCN) and the Backward Credit Notification (BCN) of the PPP Session ๐ŸŽ€.

The Credit Tag FCN is the number of incremental credits the sending node is granting to the peer ๐Ÿช™. A value between 1 and 0xffff is an incremental credit grant โœจ. The peer must add these credits to its accumulated transmit credit count โž•. A value of 0x0000 is a NULL grant, which means no additional credits are being granted ๐Ÿซง.

The Credit Tag BCN is the remaining absolute credits that the peer has granted to the node ๐Ÿ“Š.

Once a credit has been granted, it must be honored ๐Ÿค. The largest number of outstanding credits at any time is 0xffff ๐Ÿ”.

The PADG packet must contain a single Sequence Number Tag TLV ๐Ÿ”ข. This tag carries a unique 16-bit sequence number that identifies each request ๐Ÿชช. The sequence number should be initialized to zero and incremented by one for each new PADG โžก๏ธ. For retransmitted PADGs, the same sequence number used in the previous packet transmission gets repeated ๐Ÿ”.

There's an example packet in Appendix B ๐Ÿ“–.

4.4. PPPoE Active Discovery Session-Credit Response (PADC) ๐Ÿ’œ

The PPPoE Active Discovery Session-Credit Response (PADC) is also a new packet defined in this specification ๐Ÿ†•. An Access Concentrator or Host must send a PADC in response to a PADG ๐Ÿ“จ. The CODE field is set to 0x0B, and the SESSION_ID must be set to the unique value generated for this PPPoE session ๐Ÿ”‘.

The PADC packet must contain a single Credit Tag TLV, showing the Forward Credit Notification (FCN) and the Backward Credit Notification (BCN) of the PPPoE session, and it can also have any number of other Tag types ๐Ÿท๏ธ.

The Credit Tag FCN is the absolute credits remaining that the node has granted to the peer ๐Ÿ“‰. The Credit Tag BCN is the remaining absolute credits that the node has been granted from the peer ๐Ÿ“ˆ.

The PADC packet must contain a single Sequence Number Tag ๐Ÿ”ข. The sequence number must be the same sequence number associated with the PADG ๐Ÿชž.

There's an example packet in Appendix B ๐Ÿ“–.

4.5. PPPoE Active Discovery Quality (PADQ) ๐Ÿ“ก

okay so the PPPoE Active Discovery Quality (PADQ) is a brand-new packet defined in this spec, and it's giving main character energy ๐Ÿฆ‹ An Access Concentrator or Host may send an optional PADQ at any time to query or report link quality metrics. bestie, that's a whole vibe โœจ

when you're sending PPP [1] streams over wireless links through radio modems, the quality of the RF link directly affects the throughput. so the radio modem can use the PADQ packet to report RF link metrics ๐Ÿ“ถ the CODE field is set to 0x0C, and the SESSION_ID must be set to the unique value generated for this PPPoE session. ๐Ÿ”‘

the PADQ must carry a single Metric Tag TYPE, and that tag has these fields (it's a lot, but it's iconic ๐Ÿ’…):

  • Receive only - a bit that indicates whether the link is bi-directional or receive only. A value of -1- indicates that the link is receive-only.
  • Maximum data rate - the maximum theoretical data rate, in kilobits per second (kbps), that the Host link is capable of providing. When metrics are reported, the maximum data rate must be reported. ๐Ÿš€
  • Current data rate - the current data rate, in kilobits per second (kbps), achieved on the Host link. If there is no distinction between maximum data rate and current data rate, current data rate should equal to the maximum data rate.
  • Latency - the transmission delay that a packet encounters as it is transmitted over the Host link. This is reported in absolute delay, milliseconds. If latency cannot be calculated, a value of 0 should be reported. โฑ๏ธ
  • Resources - a percentage, 0-100, representing the amount of remaining or available resources, such as battery power. If resources cannot be calculated, a value of 100 should be reported. ๐Ÿ”‹
  • Relative Link Quality (RLQ) - a non-dimensional number, 0-100, representing the relative link quality. A value of 100 represents a link of the highest quality. If the RLQ cannot be calculated, a value of 100 should be reported. ๐Ÿ‘‘

the PADQ packet can also be used to query link metrics, and you just set the PADQ Metric Tag Length to zero. easy peasy ๐ŸŒธ

an example packet is shown in Appendix B. ๐Ÿงš


5. PPP Session Stage ๐Ÿ’œ

okay so this spec lets you use optional TLV Tags in the PPP Session Stage ๐ŸŽ€ the first field following the PPP Session Stage LENGTH must be checked. if the value is equal to the PPP Protocol identifier (0xc021), then normal packet (payload) processing occurs. but when the field following the PPP Session Stage LENGTH is not the PPP Protocol identifier (0xc021), a TLV is assumed, and the Tag length gets subtracted from the overall payload length. ๐Ÿง 

the Credit Tag is the only optional TLV permitted in the PPP Session Stage, and it's used to support in-band flow control. literally the only one, so it's special ๐Ÿซถ

a PPP Session Stage packet with Credits is shown in Appendix B. ๐Ÿ’–


6. Credit Flow Considerations ๐ŸŒˆ

okay this part is the credit tea โ˜• for a given session, credit grants exchanged in the Discovery Stage (PADG-PADC) are called out-of-band. credit grants exchanged in the PPP Session Stage are called in-band. and credit processing is only applied to the packets transmitted in the PPP Session Stage. ๐Ÿ™ˆ

out-of-band credit management is handled by a periodic exchange of the PPPoE Active Discovery Grant (PADG) and PPPoE Active Discovery Credit (PADC) packets. ๐Ÿ“ฌ

in-band credit management lets credits get incrementally granted with each PPP Session Stage packet. these in-band incremental credit grants are not explicitly unacknowledged. however, they're reflected in the in-band credit flow from the peer node. this offers the greatest credit granting efficiency when traffic rates are high ๐Ÿ”ฅ

once agreed upon during the Discovery Stage, credit grants are required to transmit packets in the PPP Session Stage. a node must grant credits to its peer, before the peer can transmit packets to the granting node. no credits, no packets, periodt ๐Ÿ’…

credits are granted incrementally in the forward direction. locally, a node manages the credits that it has granted to a peer, as well as the credits that a peer has granted to it. ๐Ÿงฎ

grants received from a peer get added to a local running credit counter. the accumulated credits are decremented with each packet the node transmits to the peer. when the running counter reaches zero, the node stops transmitting packets to the peer. โ›” the values of the PADC are not simply an echo of the PADG. they represent the current internal FCN/BCN values of that node. โœจ

to manage the credits that a node has granted, the node maintains a running counter. with each PPP Session Stage packet received from the peer, the running counter is decremented. when the running counter reaches zero, no additional packets are expected. the node incrementally grants more credits to the peer to keep the packet flow going. packets received when granted credits have been exhausted are discarded. ๐Ÿ—‘๏ธ

the largest possible credit limit is 0x0ffff. if an incremental credit grant causes the accumulated count to exceed this value, the max value is used. ๐Ÿ”๏ธ

one unit of credit represents 64-bytes, so a grant of 4 credits translates to 256 bytes. ๐Ÿ“


7. PADG and PADC Retransmission ๐Ÿ”

okay so when a node doesn't receive a PADC packet in response to a PADG within a specified amount of time, it should transmit a new PADG packet with zero credits, using the same sequence number and doubling the waiting period. a PADC response with the associated sequence number will indicate whether or not the previously granted credits were accumulated. if they weren't, a PADG with credits and an incremented sequence number should be transmitted. this process should be repeated until granted credits are properly acknowledged or as many times as desired. ๐Ÿซ 

when a node doesn't receive a PADQ metric packet within a specified amount of time, it should resend the PADQ query packet and double the waiting period. this can be repeated as many times as desired. ๐Ÿ’€


8. Other Considerations ๐ŸŒธ

a node may autonomously generate PADQ metric packets. the rate of autonomously generated PADQ metric packets may need to be throttled so as not to overrun the peer. ๐Ÿšฆ

the sending and receiving of PPPoE control packets are independent of credit counts. for example, a node must always be able to receive a PADG and send a PADC. no exceptions, bestie ๐Ÿ™…โ€โ™€๏ธ

during normal operation, nodes may disagree about the number of credits. operational credit mismatches happen because of packets in transit on the wire. much larger credit mismatches can happen if there are transmission errors. to fix those bigger errors, the BCN fields of the PADG and PADC packets and in-band credit grants from a peer should be used by the receiving node to set the credit values of its peer. ๐Ÿ”ง


9. IANA Considerations ๐Ÿ“‹

okay IANA assigned the following PPPoE TAG Values, as noted in [3]:

TAG Value     TAG Name              Tag Description         Reference
-----------   -------------------   ---------------------   ---------
262  0x0106   Credits               See the reference       [RFC4938]
263  0x0107   Metrics               See the reference       [RFC4938]
264  0x0108   Sequence Number       See the reference       [RFC4938]

and IANA also assigned the following PPPoE Code fields, as noted in [3]:

Code      PPPoE Packet Name              Description        Reference
--------  -----------------------------  -----------------  ---------
10  0x0a  PADG, Session-Grant            See the reference  [RFC4938]
11  0x0b  PADC, Session-Credit Response  See the reference  [RFC4938]
12  0x0c  PADQ, Quality                  See the reference  [RFC4938]

10. Security Considerations ๐Ÿšจ

okay, this is the serious part, so listen up ๐Ÿซก this memo defines a mechanism for adding flow control to the existing PPP Over Ethernet (PPPoE) sessions. these extensions come after the existing PPPoE security mechanisms described in RFC 2516 [2]. it is required that the Service Tag and Session ID always be validated prior to processing credits. no skipping this step, ever ๐Ÿ”๐Ÿ’€


Appendix A: Tag Values ๐ŸŽ€

Feature Tag_Types and Tag_Values

0x0106 Credits ๐Ÿ’ณ

this tag contains the Forward Credit Notification (FCN) and the Backward Credit Notification (BCN). the Credit Tag TLV is OPTIONAL with the PADR, PADS, and the PPPoE data payload packet (ETHER_TYPE=8864).

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Tag Type = 0x0106       |        Tag Length=0x04        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              FCN              |              BCN              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

0x0107 Metrics ๐Ÿ“Š

this tag is used to report the link quality and performance. the Metrics Tag TLV contains the Receive Only indicator, Resource status, Latency, Relative Link Quality (RLQ), Current data rate, and Maximum data rate. the Metrics TLV is required by the PADQ packet. โœจ

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Tag Type = 0x0107       |        Tag Length=0x0A        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Reserved          |R|      RLQ      |    Resource   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Latency (MS)          |   Current Datarate (kbps)     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Maximum Datarate (kbps)    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

0x0108 Sequence Number ๐Ÿ”ข

this tag carries a unique 16-bit sequence number so you can identify a specific request and its associated response. the sequence number should be initialized to zero and incremented by one for each new request. for retransmitted packets, the same sequence number that was used in the previous packet transmission is repeated. the PADG and PADC packets require the Sequence Number Tag. ๐Ÿงฉ

for example, the sequence number sent in the PADG request is echoed in the PADC response. this ties a specific PADC response to a specific PADG request. ๐ŸŽฏ

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Tag Type = 0x0108       |        Tag Length=0x02        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Sequence Number         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Appendix B: Example Message Formats โœจ

okay bestie, this is the fun part ๐ŸŽ€ Here are the example packets, drawn out bit by bit so you can see exactly how each one looks on the wire ๐Ÿฆ‹

A PADR packet with OPTIONAL Credit Tag Type 0x0106 ๐Ÿ’Œ:

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  Access_Concentrator_mac_addr                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Access_Concentrator_mac_addr(c)|        Host_mac_addr          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Host_mac_addr (cont)                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    ETHER_TYPE = 0x8863        | v = 1 | t = 1 |  CODE = 0x19  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     SESSION_ID = 0x1234       |      LENGTH = 0x0C            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Tag Type = 0x0101       |        Tag Length=0x00        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Tag Type = 0x0106       |        Tag Length=0x04        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              FCN              |              BCN              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

A PADS packet with OPTIONAL Credit Tag Type 0x0106 ๐ŸŒธ:

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  Access_Concentrator_mac_addr                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Access_Concentrator_mac_addr(c)|        Host_mac_addr          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Host_mac_addr (cont)                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    ETHER_TYPE = 0x8863        | v = 1 | t = 1 |  CODE = 0x65  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     SESSION_ID = 0x1234       |      LENGTH = 0x0C            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Tag Type = 0x0101       |        Tag Length=0x00        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Tag Type = 0x0106       |        Tag Length=0x04        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              FCN              |              BCN              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

A PADG packet with Credit Tag Type 0x0106 ๐Ÿงš:

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Destination_mac_addr                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Destination_mac_addr(c)    |       Source_mac_addr         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Source mac_addr (cont)                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    ETHER_TYPE = 0x8863        | v = 1 | t = 1 |  CODE = 0x0A  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     SESSION_ID = 0x1234       |      LENGTH = 0x0E            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Tag Type = 0x0108       |        Tag Length=0x02        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Sequence Number         |       Tag Type = 0x0106       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        Tag Length=0x04        |               FCN             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              BCN              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

A PADC packet with Credit Tag Type 0x0106 ๐Ÿฆ‹:

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Destination_mac_addr                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Destination_mac_addr(c)    |       Source_mac_addr         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Source mac_addr (cont)                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    ETHER_TYPE = 0x8863        | v = 1 | t = 1 |  CODE = 0x0B  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     SESSION_ID = 0x1234       |      LENGTH = 0x0E            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Tag Type = 0x0108       |        Tag Length=0x02        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Sequence Number         |       Tag Type = 0x0106       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        Tag Length=0x04        |               FCN             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              BCN              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

A PADQ packet to query for the link metrics ๐Ÿ“Š: this is indicated by the Metric Tag Length=0.

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  Access_Concentrator_mac_addr                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Access_Concentrator_mac_addr(c)|        Host_mac_addr          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Host_mac_addr (cont)                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    ETHER_TYPE = 0x8863        | v = 1 | t = 1 |  CODE = 0x0C  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     SESSION_ID = 0x1234       |      LENGTH = 0x08            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Tag Type = 0x0101       |        Tag Length=0x00        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Tag Type = 0x0107       |        Tag Length=0x00        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

A PADQ packet with Metric Tag Type 0x0107 ๐Ÿ”ฅ:

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  Access_Concentrator_mac_addr                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Access_Concentrator_mac_addr(c)|        Host_mac_addr          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Host_mac_addr (cont)                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    ETHER_TYPE = 0x8863        | v = 1 | t = 1 |  CODE = 0x0C  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     SESSION_ID = 0x1234       |      LENGTH = 0x12            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Tag Type = 0x0101       |        Tag Length=0x00        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Tag Type = 0x0107       |        Tag Length=0x0A        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Reserved          |R|      RLQ      |    Resource   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Latency (MS)          |   Current Datarate (kbps)     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Maximum Datarate (kbps)    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

A PPP LCP packet with optional Credit Tag Type 0x0106 ๐Ÿ“: the PPP protocol value is shown (0xc021), but the PPP payload is left to the reader. This is a packet from the Host to the Access Concentrator.

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  Access_Concentrator_mac_addr                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Access_Concentrator_mac_addr(c)|        Host_mac_addr          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Host_mac_addr (cont)                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    ETHER_TYPE = 0x8864        | v = 1 | t = 1 |  CODE = 0x00  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     SESSION_ID = 0x1234       |      LENGTH = (payload)       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Tag Type = 0x0106       |        Tag Length=0x04        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              FCN              |              BCN              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    PPP PROTOCOL = 0xc021      |        PPP payload           ~
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Acknowledgements ๐Ÿ’–

big thank you ๐Ÿซถ to Billy Moon, Fred Baker, Stan Ratliff, and Ed Paradise, whose influence and contributions the authors would like to acknowledge.

Normative References ๐Ÿ“š

[1] Simpson, W., Ed., "The Point-to-Point Protocol (PPP)", STD 51, RFC 1661, July 1994.

[2] Mamakos, L., Lidl, K., Evarts, J., Carrel, D., Simone, D., and R. Wheeler, "A Method for Transmitting PPP Over Ethernet (PPPoE)", RFC 2516, February 1999.

[3] Arberg, P. and V. Mammoliti, "IANA Considerations for PPP over Ethernet (PPPoE)", RFC 4937, June 2007.

Authors' Addresses ๐ŸŽ€

Bo Berry
Cisco
170 West Tasman Drive
San Jose, CA  95134
USA
EMail: bberry@cisco.com

Howard Holgate
Cisco
170 West Tasman Drive
San Jose, CA  95134
USA
EMail: hholgate@cisco.com

Copyright (C) The IETF Trust (2007).

This document is subject to the rights, licenses and restrictions contained in BCP 78 and at www.rfc-editor.org/copyright.html, 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, THE IETF TRUST 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 this part is about who owns what, and it's giving legal-but-make-it-cute. ๐Ÿฆ‹ The IETF takes no position on whether any Intellectual Property Rights or other rights that someone might claim over the tech in this document are valid or in scope. It also doesn't say whether any license under those rights is available, and it hasn't done any independent digging to find out what rights exist. ๐Ÿซ  If you want the rules for rights in RFC documents, check out BCP 78 and BCP 79. ๐Ÿ“œ

Want to see what's been disclosed? Copies of IPR disclosures sent to the IETF Secretariat are available, along with any promises of licenses. You can also find the results of attempts to get a general license or permission for implementers or users to use those proprietary rights. Everything lives in the IETF online IPR repository at http://www.ietf.org/ipr. ๐Ÿ”

Spotted a copyright, a patent, a patent application, or some other proprietary right that might cover tech you'd need to implement this standard? The IETF wants to hear about it, bestie! ๐Ÿ™Œ Send the details to ietf-ipr@ietf.org. โœจ


Acknowledgement ๐ŸŒธ

Shoutout to the people keeping the RFC Editor function running! ๐Ÿซถ Right now, that funding comes from the Internet Society. ๐Ÿ’œ

๐Ÿ“ฆ where this page comes from