RFC 1638

PPP Bridging Control Protocol (BCP)

๐Ÿ“… published June 1994, from ietf

RFC 1638: PPP Bridging Control Protocol (BCP) ๐ŸŽ€

Okay bestie, the title block first ๐Ÿ’– The editors are F. Baker from ACC and R. Bowen from IBM. It's a Standards Track doc dated June 1994, and the header doesn't list anything it obsoletes or updates โœจ

Status of This Memo โœจ

This document is an Internet standards track protocol for the Internet community, and it's asking for discussion and suggestions for improvements ๐Ÿฆ‹ For the standardization state and status, check the current edition of the "Internet Official Protocol Standards" (STD 1). Distribution of this memo is unlimited ๐Ÿ’…

Abstract ๐ŸŒธ

The Point-to-Point Protocol (PPP) [6] gives us a standard way to transport multi-protocol datagrams over point-to-point links โœจ PPP defines an extensible Link Control Protocol, and it proposes a family of Network Control Protocols for establishing and configuring different network-layer protocols ๐Ÿงš

This document defines the Network Control Protocol for establishing and configuring Remote Bridging for PPP links ๐Ÿ‘‘

Table of Contents ๐Ÿ’œ

     1.     Historical Perspective ................................    2
     2.     Methods of Bridging ...................................    3
        2.1       Transparent Bridging ............................    3
        2.2       Remote Transparent Bridging .....................    3
        2.3       Source Routing ..................................    4
        2.4       Remote Source Route Bridging ....................    5
        2.5       SR-TB Translational Bridging ....................    6
     3.     Traffic Services ......................................    6
        3.1       LAN Frame Checksum Preservation .................    6
        3.2       Traffic having no LAN Frame Checksum ............    6
        3.3       Tinygram Compression ............................    7
        3.4       LAN Identification ..............................    7
     4.     A PPP Network Control Protocol for Bridging ...........    9
        4.1       Sending Bridge Frames ...........................   10
           4.1.1  Maximum Receive Unit Considerations .............   10
           4.1.2  Loopback and Link Quality Monitoring ............   11
           4.1.3  Message Sequence ................................   11
           4.1.4  Separation of Spanning Tree Domains .............   11
        4.2       Bridged LAN Traffic .............................   12
        4.3       Spanning Tree Bridge PDU ........................   16
     5.     BCP Configuration Options .............................   17
        5.1       Bridge-Identification ...........................   17
        5.2       Line-Identification .............................   19
        5.3       MAC-Support .....................................   20
        5.4       Tinygram-Compression ............................   21
        5.5       LAN-Identification ..............................   22
        5.6       MAC-Address .....................................   23
        5.7       Spanning-Tree-Protocol ..........................   24
        APPENDICES ................................................   26
        A.     Tinygram-Compression Pseudo-Code ...................   26
        SECURITY CONSIDERATIONS ...................................   27
        REFERENCES ................................................   27
     ACKNOWLEDGEMENTS .............................................   28
     CHAIR'S ADDRESS ..............................................   28
     AUTHOR'S ADDRESS .............................................   28

1. Historical Perspective ๐Ÿ•ฐ๏ธ

Okay so there are two basic bridging algorithms floating around the LAN industry ๐Ÿซถ The more common one is called "Transparent Bridging", and IEEE 802.1 standardized it for Extended LAN configurations. The other is "Source Route Bridging", which is hugely popular on IEEE 802.5 Token Ring LANs ๐Ÿ’…

The IEEE combined these two into one device called a Source Routing Transparent (SRT) bridge, which does both Source Route and Transparent bridging at the same time ๐Ÿ”ฅ Transparent and SRT bridges are specified in IEEE standard 802.1D [3] โœจ

IEEE committee 802.1G is working on remote bridging [2], but neither standard directly defines the mechanisms for implementing remote bridging ๐Ÿฅบ Technically that's beyond the IEEE 802 committee's charter. Both 802.1D and 802.1G do allow for it though ๐ŸŒˆ The implementor can model the line either as a component within a single MAC Relay Entity, or as the LAN media between two remote bridges ๐Ÿฆ‹

2. Methods of Bridging ๐Ÿงš

2.1. Transparent Bridging ๐Ÿ“

As a favor to the uninitiated, let's start with Transparent Bridging ๐Ÿ’– Basically, the bridges in a network run as isolated entities, mostly unaware of each other's presence ๐Ÿ™ˆ A Transparent Bridge keeps a Forwarding Database made of

{address, interface}

records. It saves the Source Address of each LAN transmission it receives, along with the interface identifier for the interface it came in on โœจ Then it checks whether the Destination Address is in the database. If it is, the bridge either discards the message when the destination and source are on the same interface, or forwards it to the indicated interface ๐Ÿ”ฅ A message whose Destination Address isn't in the table gets forwarded to all interfaces except the one it arrived on. This behavior applies to Broadcast/Multicast frames too ๐Ÿ“ฃ

The obvious fly in the ointment is that redundant paths in the network cause indeterminate (nay, all too determinate) forwarding behavior ๐Ÿ’€ To stop that, the bridges run a protocol called the Spanning Tree Protocol, which detects redundant paths and logically removes them from the network ๐Ÿซถ

One system gets elected as the "Root" ๐Ÿ‘‘ It periodically emits a message called a Bridge Protocol Data Unit (BPDU), and all of its neighboring bridges hear it. Each of those bridges modifies the BPDU and passes it on to its neighbors. This keeps going until it reaches the leaf LAN segments in the network, where it dies because there are no further neighbors to pass it along ๐ŸŒธ It also stops early if a bridge has a superior path to the "Root". In that latter case, the interface the BPDU came in on gets ignored. It's placed in a Hot Standby status, no traffic gets emitted onto it except the BPDU, and all traffic received from it is discarded ๐Ÿ˜ญ This stays that way until a topology change forces a recalculation of the network ๐Ÿ”„

2.2. Remote Transparent Bridging ๐ŸŒ

There are two basic sorts of bridges. Local Bridges interconnect LANs directly, and Remote Bridges interconnect LANs via an intermediate medium such as a leased line โœจ PPP may be used to connect Remote Bridges ๐Ÿฆ‹

The IEEE 802.1G Remote MAC Bridging committee proposed a model of a Remote Bridge in which two or more Remote Bridges interconnected via remote lines are termed a Remote Bridge Group ๐Ÿ’œ Within a Group, a Remote Bridge Cluster is dynamically formed through execution of the spanning tree, as the set of bridges that may pass frames among each other ๐Ÿงš

This model gives the remote lines the basic properties of a LAN, but it doesn't require a one-to-one mapping of lines to virtual LAN segments ๐ŸŽ€ For instance, take three interconnected Remote Bridges, A, B and C. The model could be a virtual LAN segment between A and B and another between B and C ๐Ÿซถ However, if a line exists between Remote Bridges B and C, a frame could actually be sent directly from B to C, as long as it still looked like it had travelled through A ๐Ÿ‘€

IEEE 802.1G allows for a great deal of implementation freedom for features like route optimization and load balancing, as long as the model is maintained ๐Ÿ”ฅ

Here's the thing: the 802.1G proposal hasn't been approved as a standard yet, so for simplicity we talk about Remote Bridging in this document in terms of two Remote Bridges connected by a single line ๐Ÿ’… Within the 802.1G framework, those two bridges would make up a Remote Bridge Group. This convention isn't meant to rule out PPP bridging in larger Groups, which 802.1G allows โœจ

2.3. Source Routing ๐Ÿ›ฃ๏ธ

The IEEE 802.1D Committee standardized Source Routing for any MAC Type that allows its use. Right now, the MAC Types that support Source Routing are FDDI and IEEE 802.5 Token Ring ๐ŸŒˆ

The IEEE standard only defines Source Routing as a component of an SRT bridge. However, many bridges have been implemented that can do Source Routing alone ๐Ÿ˜ค These are most commonly implemented following either the IBM Token-Ring Network Architecture Reference [1] or the Source Routing Appendix of IEEE 802.1D [3] ๐Ÿ’–

In the Source Routing approach, the originating system is responsible for indicating the path the message should follow ๐Ÿ—บ๏ธ If the message is directed off the local segment, it does this by including a variable length MAC header extension called the Routing Information Field (RIF) ๐Ÿงš The RIF consists of one 16-bit word of flags and parameters, followed by zero or more segment-and-bridge identifiers. Each bridge en route uses this source route list to decide whether it should accept the message and how to forward it ๐Ÿฆ‹

To discover the path to a destination, the originating system transmits an Explorer frame ๐Ÿ” An All-Routes Explorer (ARE) frame follows all possible paths to a destination. A Spanning Tree Explorer (STE) frame only follows the paths defined by Bridge ports that the Spanning Tree Algorithm has put in Forwarding state. Port states don't apply to ARE or Specifically-Routed Frames ๐Ÿ™ƒ The destination system replies to each copy of an ARE frame with a Specifically-Routed Frame, and to an STE frame with an ARE frame. Either way, the originating station may get multiple replies, and from those it chooses the route it'll use for future Specifically-Routed Frames ๐Ÿ’…

The Source Routing algorithm requires the bridge to be able to identify any interface by its segment-and-bridge identifier ๐Ÿง  When a packet arrives with the RIF present, a boolean in the RIF gets inspected to figure out whether the segment-and-bridge identifiers should be read in the "forward" or "reverse" sense ๐Ÿ” In its search, the bridge looks for the segment-and-bridge identifier of the interface the packet came in on, and then forwards the packet toward the segment identified by the segment-and-bridge identifier that follows it ๐ŸŒŸ

2.4. Remote Source Route Bridging ๐ŸŒธ

okay so there is no Remote Source Route Bridge proposal in IEEE 802.1 at this time ๐Ÿ˜ญ BUT vendors literally ship remote Source Routing Bridges all the time, so the vibe is still very much alive ๐Ÿ’…

we allow for modelling the line in two different ways ๐Ÿฆ‹ the first is a connection living between two halves of a "split" Bridge (the split-bridge model), and the second is a LAN segment sitting between two Bridges (the independent-bridge model). with the independent-bridge model, the line needs a LAN Segment ID ๐ŸŽ€

by default, PPP Source Route Bridges use the independent-bridge model โœจ this is so the two sides can interoperate even when nobody negotiated any options. if you want the split-bridge model, a system MUST successfully negotiate the Bridge-Identification Configuration Option ๐Ÿ‘‘

no option negotiation is needed to use the independent-bridge model, BUT it is strongly recommended that systems using this model negotiate the Line-Identification Configuration Option ๐Ÿซถ doing so verifies that the LAN Segment Id assigned to the line is configured correctly ๐Ÿ’–

when two PPP systems use the split-bridge model, the system that transmits an Explorer frame onto the PPP link MUST update the RIF on behalf of both systems ๐Ÿ”ฅ why? bestie this keeps interoperability solid and keeps the bridging algorithm simple ๐Ÿงš if the receiver didn't know whether the sender had already updated the RIF, it would have to scan the RIF and decide for itself whether to update it ๐Ÿ˜ฉ letting the transmitter do the update means the receiving system can forward the frame off the PPP link without processing the RIF at all โœจ

given that source routing is configured on a line or set of lines, the specifics of link state with respect to STE frames are defined by whichever Spanning Tree Protocol is in use ๐ŸŒˆ choosing the split-bridge or independent-bridge model does NOT affect spanning tree operation ๐Ÿ™ˆ in both cases the spanning tree protocol runs on the two systems independently ๐Ÿ’œ

2.5. SR-TB Translational Bridging ๐Ÿ“

IEEE 802 is not currently addressing bridges that translate between Transparent Bridging and Source Routing ๐Ÿฅบ for the purposes of this standard, such a device is either a Transparent or a Source Routing bridge, and it will act on the line in one of those two ways, just like it does on the LAN ๐Ÿ’…โœจ

  1. Traffic Services ๐ŸŽ€

so there are a few services provided for different system types and user configurations ๐ŸŒธ these include LAN Frame Checksum Preservation, LAN Frame Checksum Generation, Tinygram Compression, and the identification of closed sets of LANs ๐Ÿ’–

3.1. LAN Frame Checksum Preservation ๐Ÿฆ‹

IEEE 802.1 stipulates that the Extended LAN must enjoy the same probability of undetected error that an individual LAN enjoys ๐Ÿ”ฅ there was a lot of debate about the algorithm ๐Ÿ˜ญ but no other algorithm has been proposed than having the LAN Frame Checksum received by the ultimate receiver be the same value calculated by the original transmitter ๐Ÿซถ achieving this requires, of course, that the line protocols preserve the LAN Frame Checksum from end to end ๐Ÿ’œ and the protocol is optimized towards this approach โœจ

3.2. Traffic having no LAN Frame Checksum ๐Ÿงš

the fact that the protocol is optimized for Frame Checksum preservation raises two big questions ๐Ÿ‘€ first, "what approach should systems use if, for whatever reason, they cannot easily support Frame Checksum preservation?" and second, "what approach should be used when a system originates a message, which therefore has no Frame Checksum precalculated?" ๐Ÿ™ˆ

one approach would be to require stations to calculate the Frame Checksum in software if hardware support were unavailable ๐Ÿ’€ this would meet with profound dismay and would raise serious questions of interpretation in a Bridge/Router ๐Ÿ˜ญ

BUT stations which implement LAN Frame Checksum preservation must already solve this problem, because they originate traffic too ๐Ÿ’… so the solution adopted is that messages which have no Frame Checksum are tagged and carried across the line ๐ŸŽ€

when a system that does not implement LAN Frame Checksum preservation receives a frame with an embedded FCS, it converts the frame for its own use by removing the trailing four octets โœจ when any system forwards a frame which contains no embedded FCS to a LAN, it forwards it in a way that causes the FCS to be calculated ๐ŸŒˆ

3.3. Tinygram Compression ๐Ÿ“

an issue in remote Ethernet bridging is that the protocols most attractive to bridge are prone to problems on low speed lines (64 KBPS and below) ๐Ÿฅบ this can be partially alleviated by observing that the vendors defining these protocols often fill the PDU with octets of ZERO ๐Ÿ™ˆ so an Ethernet or IEEE 802.3 PDU received from a line that is (1) smaller than the minimum PDU size, and (2) has a LAN Frame Checksum present, MUST be padded by inserting zeroes between the last four octets and the rest of the PDU before it is transmitted on a LAN ๐Ÿ’– these protocols are frequently used for interactive sessions, so they are frequently this small ๐Ÿ’œ

to prevent ambiguity, PDUs requiring padding are explicitly tagged ๐Ÿซถ compression is at the option of the transmitting station, and it is probably performed only on low speed lines, perhaps under configuration control ๐Ÿฆ‹

the pseudo-code in Appendix 1 describes the algorithms โœจ

3.4. LAN Identification ๐Ÿ‘‘

in some applications it is useful to tag traffic by the user community it belongs to, and to guarantee that it will only be emitted onto a LAN of the same community ๐ŸŽ€ the user community is defined by a LAN ID ๐Ÿ’… systems which choose not to implement this feature MUST assume that any frame received having a LAN ID is from a different community than theirs, and discard it ๐Ÿ˜ญ

it should be noted that enabling the LAN Identification option requires behavior consistent with the following additions to the standard bridging algorithm ๐ŸŒธ

each bridge port may be considered to have two additional variables associated with it: "domain" and "checkDomain" ๐Ÿงš

the variable "domain" (a 32-bit unsigned integer) is assigned a value that uniquely labels a set of bridge ports in an extended network ๐Ÿฆ‹ its default value is 1, and the values 0 and 0xffffffff are reserved ๐Ÿ”ฅ

the variable "checkDomain" (a boolean) controls whether this value is used to filter output to a bridge port ๐Ÿ’œ it is generally set to the boolean value True for LAN bridge ports, and set to the boolean value False for WAN bridge ports โœจ

the action of the bridge is then modified as expressed in the following C code fragments ๐Ÿ’ป

   On a packet being received from a bridge port:

   if (domainNotPresentWithPacket) {
       packetInformation.domain = portInformation[inputPort].domain;
   } else {
       packetInformation.domain = domainPresentWithPacket;
   }

   On a packet being transmitted from a bridge port:

   if (portInformation[outputPort].checkDomain &&
       portInformation[outputPort] != packetInformation.domain) {
       discardPacket();
       return;
   }

for example, suppose you have the following configuration ๐Ÿ‘€

        E1     +--+            +--+     E3
   ------------|  |            |  |------------
               |  |     W1     |  |
               |B1|------------|B2|
        E2     |  |            |  |     E4
   ------------|  |            |  |------------
               +--+            +--+

E1, E2, E3, and E4 are Ethernet LANs (or Token Ring, FDDI, etc.) ๐ŸŒˆ W1 is a WAN (PPP over T1) ๐Ÿ’– B1 and B2 are MAC level bridges โœจ

you want End Stations on E1 and E3 to communicate, and you want End Stations on E2 and E4 to communicate, but you do NOT want End Stations on E1 and E3 to communicate with End Stations on E2 and E4 ๐Ÿ™…โ€โ™€๏ธ this is true for Unicast, Multicast, and Broadcast traffic ๐Ÿ“ฃ if a broadcast datagram originates on E1, you want it propagated only to E3, and not on E2 or E4 ๐ŸŽฏ

another way of looking at it is that E1 and E3 form a Virtual LAN, and E2 and E4 form a Virtual LAN, as if the following configuration were actually being used ๐Ÿง 

        E1     +--+     W2     +--+     E3
   ------------|B3|------------|B4|------------
               +--+            +--+

        E2     +--+     W3     +--+     E4
   ------------|B5|------------|B6|------------
               +--+            +--+

to accomplish this (using the LAN Identification option), B1 and B2 negotiate this option on, and send datagrams with bit 6 set to 1, with the LAN ID field inserted in the frame ๐Ÿฆ‹ traffic on E1 and E3 would be assigned LAN ID 1, and traffic on E2 and E4 would be assigned LAN ID 2 ๐Ÿ’œ thus B1 and B2 can separate traffic going over W1 ๐Ÿซถ

note that execution of the spanning tree algorithm may result in the subdivision of a domain ๐Ÿ˜ฌ the administrator of LAN domains MUST ensure, through spanning tree configuration and topology design, that such subdivision does NOT occur ๐Ÿ”’

  1. A PPP Network Control Protocol for Bridging ๐ŸŽ€

the Bridging Control Protocol (BCP) is responsible for configuring, enabling and disabling the bridge protocol modules on both ends of the point-to-point link ๐ŸŒˆ BCP uses the same packet exchange mechanism as the Link Control Protocol ๐Ÿ’… BCP packets may not be exchanged until PPP has reached the Network-Layer Protocol phase โณ BCP packets received before this phase is reached SHOULD be silently discarded ๐Ÿ™ˆ

the Bridging Control Protocol is exactly the same as the Link Control Protocol [6] with the following exceptions ๐Ÿ“

Frame Modifications ๐Ÿฆ‹

The packet may utilize any modifications to the basic frame format which have been negotiated during the Link Establishment phase. Implementations SHOULD NOT negotiate Address-and-Control-Field-Compression or Protocol-Field-Compression on other than low speed links.

Data Link Layer Protocol Field ๐Ÿ’œ

exactly one BCP packet is encapsulated in the PPP Information field, where the PPP Protocol field indicates type hex 8031 (BCP) โœจ

Code field ๐ŸŒธ

only Codes 1 through 7 (Configure-Request, Configure-Ack, Configure-Nak, Configure-Reject, Terminate-Request, Terminate-Ack and Code-Reject) are used ๐Ÿงš other Codes SHOULD be treated as unrecognized and SHOULD result in Code-Rejects ๐Ÿ’€

Timeouts โฐ

BCP packets may not be exchanged until PPP has reached the Network-Layer Protocol phase ๐Ÿ™„ an implementation SHOULD be prepared to wait for Authentication and Link Quality Determination to finish before timing out waiting for a Configure-Ack or other response ๐Ÿซถ it is suggested that an implementation give up only after user intervention or a configurable amount of time โณ

Configuration Option Types ๐ŸŽ€

BCP has a distinct set of Configuration Options, which are defined in this document ๐Ÿ’–

4.1. Sending Bridge Frames ๐Ÿš€

before any Bridged LAN Traffic or BPDUs may be communicated, PPP MUST reach the Network-Layer Protocol phase, and the Bridging Control Protocol MUST reach the Opened state ๐Ÿ”ฅ

exactly one Bridged LAN Traffic or BPDU is encapsulated in the PPP Information field, where the PPP Protocol field indicates type hex 0031 (Bridged PDU) ๐Ÿฆ‹

4.1.1. Maximum Receive Unit Considerations โœจ

Okay bestie, the size limit here is a big deal ๐ŸŽ€. The max length of a Bridged datagram sent over a PPP link is the same as the max length of the Information field of a PPP encapsulated packet. There's no standard way to fragment and reassemble Bridged PDUs, so PPP links that support Bridging MUST negotiate an MRU big enough for the MAC Types that get negotiated for Bridging support later ๐Ÿ’…. And ngl, even bridged Ethernet frames are chunkier than the default PPP MRU of 1500 octets, because they carry their MAC headers too ๐Ÿ™ˆ.

It is strongly recommended that PPP Bridge Protocol implementations use Magic Number Loopback Detection and Link-Quality-Monitoring ๐Ÿ”ฅ. Here's the tea: the 802.1 Spanning Tree protocol is part of both Transparent Bridging and Source Routing (as standardized), and during normal operation it's unidirectional ๐Ÿฆ‹. Configuration BPDUs come out of the Root system and head toward the leaves, with no reverse traffic except when there's a network event.

4.1.3. Message Sequence ๐Ÿ“ฌ

Multiple links make message sequentiality a whole thing ๐Ÿ’œ. The transmitting system can decide one of two ways. It can figure out that the protocol being bridged needs transmissions to arrive in the order they were originally sent, and then queue every transmission on a given conversation onto the same link to keep the order intact. Or it can figure out that the protocol does NOT require transmissions to arrive in order, and use that knowledge to spread traffic across several links and cut down on delay ๐Ÿš€.

If the transmitting system hasn't made that determination, it MUST act as though all protocols require order preservation. Honestly, lots of protocols built for a single LAN do require order preservation, so this is the safe default ๐ŸŒˆ.

Work is currently in progress on a protocol that would let you use multiple PPP links [7] โœจ. If it gets approved, it will let you use multiple links while still keeping message sequentiality for Bridged LAN Traffic and BPDU frames.

4.1.4. Separation of Spanning Tree Domains ๐ŸŒณ

Sometimes a network manager might want to split two regions into separate Spanning Trees with different Roots (and maybe different Spanning Tree implementations or algorithms) ๐Ÿงš. To do that, he should configure both ends so they don't exchange BPDUs on the link. Also, an implementation that doesn't support any spanning tree protocol MUST silently discard any received IEEE 802.1D BPDU packets. For other received BPDU packets, it MUST either silently discard them or respond with an LCP Protocol-Reject packet ๐Ÿ™…โ€โ™€๏ธ.

4.2. Bridged LAN Traffic ๐ŸŽ€

For Bridging LAN traffic, the frame on the line looks like this. The fields go out from left to right ๐Ÿ‘‘.

802.3 Frame format

    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
   +-+-+-+-+-+-+-+-+
   |   HDLC FLAG   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      Address and Control      |      0x00     |      0x31     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |F|I|Z|0| Pads  |    MAC Type   |  LAN ID high word (optional)  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   LAN ID low word (optional)  |      Destination MAC Address  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Destination MAC Address                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Source MAC Address                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Source MAC Address        |      Length/Type              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |               LLC data       ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   LAN FCS (optional)                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                potential line protocol pad                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Frame FCS            |   HDLC FLAG   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

802.4/802.5/FDDI Frame format

    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
   +-+-+-+-+-+-+-+-+
   |   HDLC FLAG   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      Address and Control      |      0x00     |      0x31     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |F|I|Z|0| Pads  |    MAC Type   |  LAN ID high word (optional)  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   LAN ID low word (optional)  |   Pad Byte    | Frame Control |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Destination MAC Address                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Destination MAC Address   |  Source MAC Address           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Source MAC Address                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |               LLC data       ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   LAN FCS (optional)                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              optional Data Link Layer padding                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Frame FCS            |   HDLC FLAG   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Address and Control ๐Ÿซถ As defined by the framing in use.

PPP Protocol ๐Ÿ’– 0x0031 for PPP Bridging.

Flags ๐Ÿšฉ

  • bit F: Set if the LAN FCS Field is present.
  • bit I: Set if the LAN ID Field is present.
  • bit Z: Set if IEEE 802.3 Pad must be zero filled to minimum size.
  • bit 0: reserved, must be zero.

Pads ๐Ÿง Any PPP frame may have padding inserted in the "Optional Data Link Layer Padding" field. This number tells the receiving system how many pad octets to strip off.

MAC Type ๐ŸŒˆ Up-to-date values of the MAC Type field are specified in the most recent "Assigned Numbers" RFC [4]. Current values are assigned as follows:

    0: reserved
    1: IEEE 802.3/Ethernet  with canonical addresses
    2: IEEE 802.4           with canonical addresses
    3: IEEE 802.5           with non-canonical addresses
    4: FDDI                 with non-canonical addresses
 5-10: reserved
   11: IEEE 802.5           with canonical addresses
   12: FDDI                 with canonical addresses

"Canonical" is the address format defined as the standard address representation by the IEEE ๐Ÿง . In this format, the bit within each byte that gets transmitted first on a LAN is the least significant bit. Non-canonical form is the opposite, with the bit that gets transmitted first represented as the most-significant bit. Many LAN interface implementations use non-canonical form. In both formats, bytes are represented in the order of transmission.

If an implementation supports a MAC Type that is the higher-numbered format of that MAC Type, then it MUST also support the lower-numbered format of that MAC Type. For example, if an implementation supports FDDI with canonical address format, then it MUST also support FDDI with non-canonical address format. The point of this requirement is backward compatibility with earlier versions of this specification ๐Ÿ”™.

A system MUST NOT transmit a MAC Type numbered higher than 4 unless it has received a MAC-Support Configuration Option from its peer indicating that the peer is willing to receive frames of that MAC Type ๐Ÿšซ.

LAN ID ๐Ÿชช This optional 32-bit field identifies the Community of LANs which may be interested in receiving this frame. If the LAN ID flag is not set, then this field isn't present, and the PDU is four octets shorter.

Frame Control ๐ŸŽ›๏ธ On 802.4, 802.5, and FDDI LANs, there are a few octets before the Destination MAC Address, one of which is protected by the FCS. The MAC Type of the frame determines the contents of the Frame Control field. A pad octet is present to provide 32-bit packet alignment.

Destination MAC Address ๐Ÿ“ As defined by the IEEE. The MAC Type field defines the bit ordering.

Source MAC Address ๐Ÿ“ As defined by the IEEE. The MAC Type field defines the bit ordering.

LLC data ๐Ÿ“ฆ This is the rest of the MAC frame, which is (or would be, if it were present) protected by the LAN FCS.

For example, the 802.5 Access Control field and Status Trailer aren't meaningful to transmit to another ring, so they get omitted ๐Ÿ™ˆ.

LAN FCS ๐Ÿ” If present, this is the LAN FCS that was calculated by (or that appears to have been calculated by) the originating station. If the LAN FCS flag is not set, then this field isn't present, and the PDU is four octets shorter.

Optional Data Link Layer Padding ๐Ÿซง Any PPP frame may have padding inserted between the Information field and the Frame FCS. The Pads field contains the length of this padding, which may not exceed 15 octets.

The PPP LCP Extensions [5] specify a self-describing pad. Implementations are encouraged to set the Pads field to zero and use the self-describing pad instead ๐Ÿ’….

Frame FCS ๐Ÿงฉ Mentioned mainly for clarity. The FCS used on the PPP link is separate from, and unrelated to, the LAN FCS.

4.3. Spanning Tree Bridge PDU โœจ

okay so this is the Spanning Tree BPDU, bestie ๐Ÿงš and it's stripped down. No MAC or 802.2 LLC header, because those jobs are already covered by the Address, Control, and PPP Protocol Fields. The LAN Pad and Frame Checksum fields are also gone, totally superfluous ๐Ÿ’…

The Address and Control Fields go through LCP Address-and-Control-Field-Compression negotiation, so they can get compressed ๐Ÿฆ‹

Now the protocol-mismatch drama ๐Ÿ‘€ A PPP system that's set up to join one particular spanning tree protocol and gets a BPDU from a different one SHOULD reject it with the LCP Protocol-Reject. And a system that's set up to join no spanning tree protocol at all MUST silently discard all BPDUs. Quiet exit, no notes ๐Ÿคซ

Spanning Tree Bridge PDU

 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
+-+-+-+-+-+-+-+-+
|   HDLC FLAG   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Address and Control      |     Spanning Tree Protocol    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              BPDU data       ...                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Frame FCS            |   HDLC FLAG   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Address and Control

As defined by the framing in use. Whatever framing you've got, that's the boss here ๐ŸŒธ

Spanning Tree Protocol

The up-to-date values for this field live in the most recent "Assigned Numbers" RFC [4]. Right now the current values are:

Value (in hex)  Protocol

0201            IEEE 802.1 (either 802.1D or 802.1G)
0203            IBM Source Route Bridge
0205            DEC LANbridge 100

Both versions of the IEEE 802.1 spanning tree protocol frames can be told apart by fields inside the BPDU data, so you can still tell them apart ๐Ÿ”

BPDU data

As defined by the specified Spanning Tree Protocol. Its contents are up to that protocol ๐Ÿซถ


5. BCP Configuration Options ๐ŸŽ€

BCP Configuration Options let you negotiate tweaks to the standard behaviour of the network-layer protocol. If a Configuration Option isn't in a Configure-Request packet, the default value for that option is assumed. Simple and iconic ๐Ÿ‘‘

BCP uses the same Configuration Option format that LCP [6] defines, but it has its own separate set of options ๐Ÿ’œ

The up-to-date values for the BCP Option Type field live in the most recent "Assigned Numbers" RFC [4]. Right now they're assigned like this:

1       Bridge-Identification
2       Line-Identification
3       MAC-Support
4       Tinygram-Compression
5       LAN-Identification
6       MAC-Address
7       Spanning-Tree-Protocol

5.1. Bridge-Identification ๐ŸŒˆ

Description

The Bridge-Identification option is for when the line is an interface between half bridges that connect virtual or physical LAN segments. Those remote bridges get modelled as one bridge with a weird internal interface, so each remote bridge needs to know the LAN segment and bridge numbers of its adjacent remote bridge. This option MUST NOT be included in the same Configure-Request as the Line-Identification option ๐Ÿ™…โ€โ™€๏ธ

The Source Routing Route Descriptor and how it's used are specified in the IEEE 802.1D Appendix on Source Routing. It names the segment the interface is attached to by its configured segment number, and names itself by bridge number on that segment.

The two half bridges MUST agree on the bridge number. If they don't agree on a bridge number, the Bridging Control Protocol MUST NOT enter the Opened state ๐Ÿ˜ญ

Mismatched bridge numbers mean there's a configuration error, so it's strongly recommended that a system doesn't change its bridge number just to fix a mismatch. But if you need two systems to reach the Opened state even with a mismatch, a system MAY change its bridge number to the higher of the two numbers. A higher-numbered system MUST NOT change its bridge number to a lower number ๐Ÿซ 

By default, a system that doesn't negotiate this option is assumed to not be using the model where the two systems are two halves of one source-route bridge. Instead, it's assumed to be using the model where they're two independent bridges ๐Ÿงƒ

Example

If System A announces LAN Segment AAA, Bridge #1, and System B announces LAN Segment BBB, Bridge #1, then the resulting Source Routing configuration (read in the right direction) is AAA,1,BBB โœจ

Here's the summary of the Bridge-Identification Option format. Fields go out from left to right ๐Ÿ‘€

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |    Length     | LAN Segment Number    |Bridge#|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 1

Length: 4

LAN Segment Number: a 12-bit number that identifies the LAN segment, as defined in the IEEE 802.1D Source Routing Specification ๐Ÿงฉ

Bridge Number: a 4-bit number that identifies the bridge on the LAN segment, as defined in the IEEE 802.1D Source Routing Specification ๐Ÿงฉ


5.2. Line-Identification ๐Ÿฆ‹

Description

The Line-Identification option is for when the line gets assigned a LAN segment number as if it were a two-system LAN segment, following the Source Routing algorithm. This option MUST NOT be included in the same Configure-Request as the Bridge-Identification option ๐Ÿ™…โ€โ™€๏ธ

The Source Routing Route Descriptor and how it's used are specified in the IEEE 802.1D Appendix on Source Routing. It names the segment the interface is attached to by its configured segment number, and names itself by bridge number on that segment.

The two bridges MUST agree on the LAN segment number. If a LAN segment number isn't agreed upon, the Bridging Control Protocol MUST NOT enter the Opened state ๐Ÿ˜ญ

Mismatched LAN segment numbers mean there's a configuration error, so it's strongly recommended that a system doesn't change its LAN segment number to fix a mismatch. But to let two systems reach the Opened state despite a mismatch, a system MAY change its LAN segment number to the higher of the two numbers. A higher-numbered system MUST NOT change its LAN segment number to a lower number ๐Ÿซ 

By default, a system that doesn't negotiate this option is assumed to have its LAN segment number configured correctly by the user ๐Ÿ’…

Here's the summary of the Line-Identification Option format. Fields go out from left to right ๐Ÿ‘€

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |    Length     | LAN Segment Number    |Bridge#|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 2

Length: 4

LAN Segment Number: a 12-bit number that identifies the LAN segment, as defined in the IEEE 802.1D Source Routing Specification ๐Ÿงฉ

Bridge Number: a 4-bit number that identifies the bridge on the LAN segment, as defined in the IEEE 802.1D Source Routing Specification ๐Ÿงฉ


5.3. MAC-Support ๐Ÿ“

Description

The MAC-Support option lets implementations say what sort of traffic they're ready to receive. Negotiating this option is strongly recommended ๐ŸŽ€

By default, when an implementation doesn't announce the MAC Types it supports, the peer sends every MAC Type that can be carried given the other configuration parameters. The receiver then discards the MAC Types it doesn't support ๐Ÿ—‘๏ธ

A device supporting a 1600 octet MRU might not be willing to support 802.5, 802.4 or FDDI, since each of those supports frames bigger than 1600 octets ๐Ÿ“

When you announce the MAC Types you'll support, you're basically telling your peer that anything unspecified will get discarded. The peer MAY then cut down on bandwidth usage by not sending the MAC Types you don't support ๐ŸŒŠ

To announce support for several MAC Types, you put multiple options in the Configure-Request ๐Ÿง

This option is advisory only, so it's not binding. This option MUST NOT be included in a Configure-Nak ๐Ÿ™…โ€โ™€๏ธ

Here's the summary of the MAC-Support Option format. Fields go out from left to right ๐Ÿ‘€

 0                   1                   2
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |    Length     |    MAC Type   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 3

Length: 3

MAC Type: one of the values of the PDU MAC Type field (described earlier in the "Bridged LAN Traffic" section) that this system is ready to receive and service ๐Ÿซถ


5.4. Tinygram-Compression ๐ŸŒธ

Description

This option lets an implementation say it supports Tinygram compression ๐Ÿ’–

Not every system is up for changing messages in transit. On high speed lines, it's probably not worth the effort ๐Ÿš€

This option MUST NOT be included in a Configure-Nak if it was received in a Configure-Request. This option MAY be included in a Configure-Nak to prompt the peer to send the option in its next Configure-Request ๐Ÿ”

By default, no compression is allowed. A system that doesn't negotiate this option, or negotiates it to be disabled, should never receive a compressed packet ๐Ÿ™ˆ

Here's the summary of the Tinygram-Compression Option format. Fields go out from left to right ๐Ÿ‘€

 0                   1                   2
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |    Length     | Enable/Disable|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type: 4

Length: 3

Enable/Disable: if the value is 1, Tinygram-Compression is enabled. If the value is 2, Tinygram-Compression is disabled, and no decompression will occur ๐ŸงŠ

The implementations don't need to agree on this parameter. One might be willing to decompress and the other might not ๐Ÿคทโ€โ™€๏ธ

5.5. LAN-Identification ๐ŸŒธ

Description

okay so this option lets an implementation say "hey bestie, I can handle LAN Identification!" ๐Ÿซถ It also means the system is ready to service traffic going to labeled LANs beyond it โœจ

A Configure-NAK MUST NOT be sent in response to a Configure-Request that includes this option. ๐Ÿ™ˆ

By default, LAN-Identification is disabled. ๐Ÿšซ All Bridge LAN Traffic and BPDUs that contain the LAN ID field will be discarded. The peer can then save bandwidth by not sending the unsupported traffic ๐Ÿ’…

A summary of the LAN-Identification Option format is shown below. The fields are transmitted from left to right.

    0                   1                   2
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Type      |    Length     | Enable/Disable|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type

5

Length

3

Enable/Disable

If the value is 1, LAN Identification is enabled. If the value is 2, LAN Identification is disabled.

The implementations need not agree on the setting of this parameter. One may be willing to accept LAN Identification and the other not. ๐Ÿคทโ€โ™€๏ธ


5.6. MAC-Address ๐Ÿฆ‹

Description

The MAC-Address Configuration Option lets the implementation announce its MAC address, or have one assigned to it ๐ŸŽ€ The MAC address is written in IEEE 802.1 Canonical format. That means the multicast bit is the least significant bit of the first octet of the address ๐Ÿงš

If the system wants to announce its MAC address, it sends the option with its MAC address specified. When a non-zero MAC address is specified in a Configure-Request, any inclusion of this option in a Configure-Nak MUST be ignored. ๐Ÿ™…โ€โ™€๏ธ

If the implementation wants a MAC address assigned, it sends the option with a MAC address of 00-00-00-00-00-00. Systems that have no mechanism for address assignment will Configure-Reject the option.

A Configure-Nak MUST specify a valid IEEE 802.1 format physical address, and the multicast bit MUST be zero. ๐Ÿšจ It is strongly recommended (although not mandatory) that the "locally assigned address" bit (the second least significant bit in the first octet) be set, which indicates a locally assigned address. ๐Ÿ’œ

A summary of the MAC-Address Option format is shown below. The fields are transmitted from left to right.

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Type      |    Length     |MAC byte 1 |L|M|  MAC byte 2   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  MAC byte 3   |  MAC byte 4   |  MAC byte 5   |  MAC byte 6   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type

6

Length

8

MAC Byte

Six octets of MAC address in 802.1 Canonical order. For clarity, the position of the Local Assignment (L) and Multicast (M) bits are shown in the diagram.


5.7. Spanning-Tree-Protocol ๐ŸŒˆ

Description

The Spanning-Tree-Protocol Configuration Option lets the Bridges negotiate which version of the spanning tree protocol they'll participate in. It's giving teamwork ๐Ÿ‘‘

If both bridges support a spanning tree protocol, they MUST agree on the protocol to be supported. When the two disagree, the lower-numbered of the two spanning tree protocols should be used. To resolve the conflict, the system with the lower-numbered protocol SHOULD Configure-Nak the option, suggesting its own protocol for use. If a spanning tree protocol is not agreed upon, except for the case in which one system does not support any spanning tree protocol, the Bridging Control Protocol MUST NOT enter the Opened state. ๐Ÿ›‘

Most systems will only participate in a single spanning tree protocol. If a system wants to participate in more than one spanning tree protocol at the same time, it MAY include all of the appropriate protocol types in a single Spanning-Tree-Protocol Configuration Option. The protocol types MUST be specified in increasing numerical order. For the purpose of comparison during negotiation, the protocol numbers MUST be considered to be a single number. For instance, if System A includes protocols 01 and 03 and System B indicates protocol 03, System B should Configure-Nak and indicate a protocol type of 03 since 0103 is greater than 03. ๐Ÿงฎ

By default, an implementation MUST either support the IEEE 802.1D spanning tree or support no spanning tree protocol. An implementation that does not support any spanning tree protocol MUST silently discard any received IEEE 802.1D BPDU packets, and MUST either silently discard or respond to other received BPDU packets with an LCP Protocol-Reject packet. ๐Ÿ™ƒ

A summary of the Spanning-Tree-Protocol Option format is shown below. The fields are transmitted from left to right.

    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 2 3 4
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Type      |    Length     |  Protocol 1   |  Protocol 2   | ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type

7

Length

2 octets plus 1 additional octet for each protocol that will be actively supported. Most systems will only support a single spanning tree protocol, resulting in a length of 3.

Protocol n

Each Protocol field is one octet and indicates a desired spanning tree protocol. Up-to-date values of the Protocol field are specified in the most recent "Assigned Numbers" RFC [4]. Current values are assigned as follows:

     Value     Protocol

       0       Null (no Spanning Tree protocol supported)
       1       IEEE 802.1D spanning tree
       2       IEEE 802.1G extended spanning tree protocol
       3       IBM Source Route Spanning tree protocol
       4       DEC LANbridge 100 Spanning tree protocol

A. Tinygram-Compression Pseudo-Code ๐Ÿงธ

Here's the pseudo-code, copied exactly ๐Ÿ’–

    PPP Transmitter:

    if (ZeroPadCompressionEnabled &&
        BridgedProtocolHeaderFormat == IEEE8023 &&
        PacketLength == Minimum8023PacketLength) {
     /*
      * Remove any continuous run of zero octets preceding,
      * but not including, the LAN FCS, but not extending
      * into the MAC header.
      */
        Set (ZeroCompressionFlag);            /* Signal receiver */
        if (is_Set (LAN_FCS_Present)) {
            FCS = TrailingOctets (PDU, 4);    /* Store FCS */
            RemoveTrailingOctets (PDU, 4);    /* Remove FCS */
            while (PacketLength > 14 &&       /* Stop at MAC header or */
                   TrailingOctet (PDU) == 0)  /*  last non-zero octet */
                RemoveTrailingOctets (PDU, 1);/* Remove zero octet */
            Appendbuf (PDU, 4, FCS);          /* Restore FCS */
        }
        else {
            while (PacketLength > 14 &&       /* Stop at MAC header */
                   TrailingOctet (PDU) == 0)  /*  or last zero octet */
                RemoveTrailingOctets (PDU, 1);/* Remove zero octet */
        }
    }

    PPP Receiver:

    if (ZeroCompressionFlag) {                /* Flag set in header? */
     /* Restoring packet to minimum 802.3 length */
        Clear (ZeroCompressionFlag);
        if (is_Set (LAN_FCS_Present)) {
            FCS = TrailingOctets (PDU, 4);   /* Store FCS */
            RemoveTrailingOctets (PDU, 4);   /* Remove FCS */
            Appendbuf (PDU, 60 - PacketLength, zeroes);/* Add zeroes */
            Appendbuf (PDU, 4, FCS);         /* Restore FCS */
        }
        else {
            Appendbuf (PDU, 60 - PacketLength, zeroes);/* Add zeroes */
        }
    }

Security Considerations ๐Ÿ’€

Security issues are not discussed in this memo. ๐Ÿ˜ฑ Not a single word, bestie!

References ๐Ÿ“š

[1] IBM, "Token-Ring Network Architecture Reference", 3rd edition, September 1989.

[2] IEEE 802.1, "Draft Standard 802.1G: Remote MAC Bridging", P802.1G/D7, December 30, 1992.

[3] IEEE 802.1, "Media Access Control (MAC) Bridges", ISO/IEC 15802-3:1993 ANSI/IEEE Std 802.1D, 1993 edition., July 1993.

[4] Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, RFC 1340, USC/Information Sciences Institute, July 1992.

[5] Simpson, W., "PPP LCP Extensions", RFC 1570, Daydreamer, January 1994.

[6] Simpson, W., "The Point-to-Point Protocol (PPP)", RFC 1548, Daydreamer, December 1993.

[7] Sklower, K., "A Multilink Protocol for Synchronizing the Transmission of Multi-protocol Datagrams", Work in Progress, August 1993.


Acknowledgments ๐Ÿซถ

This document is a product of the Point-to-Point Protocol Extensions Working Group.

Special thanks go to Steve Senum of Network Systems, Dino Farinacci of 3COM, Rick Szmauz of Digital Equipment Corporation, and Andrew Fuqua of IBM. You all are iconic! ๐ŸŒˆโœจ


Chair's Address ๐Ÿงš

The working group can be contacted via the current chair:

Fred Baker Advanced Computer Communications 315 Bollay Drive Santa Barbara, California 93117

EMail: fbaker@acc.com


Author's Address ๐Ÿ’œ

Questions about this memo can also be directed to:

Rich Bowen International Business Machines Corporation P. O. Box 12195 Research Triangle Park, NC 27709

Phone: (919) 543-9851 EMail: Rich_Bowen@vnet.ibm.com

๐Ÿ“ฆ where this page comes from